Package org.apache.calcite.sql
Interface SqlWriter
-
- All Known Implementing Classes:
SqlPrettyWriter
public interface SqlWriter
ASqlWriter
is the target to construct a SQL statement from a parse tree. It deals with dialect differences; for example, Oracle quotes identifiers as"scott"
, while SQL Server quotes them as[scott]
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interface
SqlWriter.Frame
A Frame is a piece of generated text which shares a common indentation level.static interface
SqlWriter.FrameType
Frame type.static class
SqlWriter.FrameTypeEnum
Enumerates the types of frame.static class
SqlWriter.SubQueryStyle
Style of formatting sub-queries.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
dynamicParam(int index)
Prints a dynamic parameter (e.g.void
endFunCall(SqlWriter.Frame frame)
Ends a list which is a call to a function.void
endList(SqlWriter.Frame frame)
Ends a list.void
fetchOffset(SqlNode fetch, SqlNode offset)
Prints the OFFSET/FETCH clause.SqlDialect
getDialect()
Returns the dialect of SQL.int
getIndentation()
Returns the offset for each level of indentation.void
identifier(java.lang.String name)
Prints an identifier, quoting as necessary.boolean
inQuery()
Returns whether we are currently in a query context (SELECT, INSERT, UNION, INTERSECT, EXCEPT, and the ORDER BY operator).boolean
isAlwaysUseParentheses()
Returns whether to enclose all expressions in parentheses, even if the operator has high enough precedence that the parentheses are not required.boolean
isClauseStartsLine()
Returns whether this writer should start each clause (e.g.boolean
isKeywordsLowerCase()
Returns whether to output all keywords (e.g.boolean
isQuoteAllIdentifiers()
Returns whether this writer should quote all identifiers, even those that do not contain mixed-case identifiers or punctuation.boolean
isSelectListItemsOnSeparateLines()
Returns whether the items in the SELECT clause should each be on a separate line.void
keyword(java.lang.String s)
Prints a sequence of keywords.void
literal(java.lang.String s)
Prints a literal, exactly as provided.void
newlineAndIndent()
Prints a new line, and indents.void
print(int x)
Prints an integer.void
print(java.lang.String s)
Prints a string, preceded by whitespace if necessary.void
reset()
Resets this writer so that it can format another expression.void
resetSettings()
Resets all properties to their default values.void
sep(java.lang.String sep)
Writes a list separator, unless the separator is "," and this is the first occurrence in the list.void
sep(java.lang.String sep, boolean printFirst)
Writes a list separator.void
setNeedWhitespace(boolean needWhitespace)
Sets whether whitespace is needed before the next token.SqlWriter.Frame
startFunCall(java.lang.String funName)
Starts a list which is a call to a function.SqlWriter.Frame
startList(java.lang.String open, java.lang.String close)
Starts a list.SqlWriter.Frame
startList(SqlWriter.FrameTypeEnum frameType)
Starts a list with no opening string.SqlWriter.Frame
startList(SqlWriter.FrameType frameType, java.lang.String open, java.lang.String close)
Starts a list.SqlString
toSqlString()
Returns the contents of this writer as a 'certified kocher' SQL string.
-
-
-
Method Detail
-
reset
void reset()
Resets this writer so that it can format another expression. Does not affect formatting preferences (seeresetSettings()
-
resetSettings
void resetSettings()
Resets all properties to their default values.
-
getDialect
SqlDialect getDialect()
Returns the dialect of SQL.- Returns:
- SQL dialect
-
toSqlString
SqlString toSqlString()
Returns the contents of this writer as a 'certified kocher' SQL string.- Returns:
- SQL string
-
literal
void literal(java.lang.String s)
Prints a literal, exactly as provided. Does not attempt to indent or convert to upper or lower case. Does not add quotation marks. Adds preceding whitespace if necessary.
-
keyword
void keyword(java.lang.String s)
Prints a sequence of keywords. Must not start or end with space, but may contain a space. For example,keyword("SELECT")
,keyword("CHARACTER SET")
.
-
print
void print(java.lang.String s)
Prints a string, preceded by whitespace if necessary.
-
print
void print(int x)
Prints an integer.- Parameters:
x
- Integer
-
identifier
void identifier(java.lang.String name)
Prints an identifier, quoting as necessary.
-
dynamicParam
void dynamicParam(int index)
Prints a dynamic parameter (e.g.?
for default JDBC)
-
newlineAndIndent
void newlineAndIndent()
Prints a new line, and indents.
-
isQuoteAllIdentifiers
boolean isQuoteAllIdentifiers()
Returns whether this writer should quote all identifiers, even those that do not contain mixed-case identifiers or punctuation.- Returns:
- whether to quote all identifiers
-
isClauseStartsLine
boolean isClauseStartsLine()
Returns whether this writer should start each clause (e.g. GROUP BY) on a new line.- Returns:
- whether to start each clause on a new line
-
isSelectListItemsOnSeparateLines
boolean isSelectListItemsOnSeparateLines()
Returns whether the items in the SELECT clause should each be on a separate line.- Returns:
- whether to put each SELECT clause item on a new line
-
isKeywordsLowerCase
boolean isKeywordsLowerCase()
Returns whether to output all keywords (e.g. SELECT, GROUP BY) in lower case.- Returns:
- whether to output SQL keywords in lower case
-
startFunCall
SqlWriter.Frame startFunCall(java.lang.String funName)
Starts a list which is a call to a function.- See Also:
endFunCall(Frame)
-
endFunCall
void endFunCall(SqlWriter.Frame frame)
Ends a list which is a call to a function.- Parameters:
frame
- Frame- See Also:
startFunCall(String)
-
startList
SqlWriter.Frame startList(java.lang.String open, java.lang.String close)
Starts a list.
-
startList
SqlWriter.Frame startList(SqlWriter.FrameTypeEnum frameType)
Starts a list with no opening string.- Parameters:
frameType
- Type of list. For example, a SELECT list will be
-
startList
SqlWriter.Frame startList(SqlWriter.FrameType frameType, java.lang.String open, java.lang.String close)
Starts a list.- Parameters:
frameType
- Type of list. For example, a SELECT list will be governed according to SELECT-list formatting preferences.open
- String to start the list; typically "(" or the empty string.close
- String to close the list
-
endList
void endList(SqlWriter.Frame frame)
Ends a list.- Parameters:
frame
- The frame which was created bystartList(java.lang.String, java.lang.String)
.
-
sep
void sep(java.lang.String sep)
Writes a list separator, unless the separator is "," and this is the first occurrence in the list.- Parameters:
sep
- List separator, typically ",".
-
sep
void sep(java.lang.String sep, boolean printFirst)
Writes a list separator.- Parameters:
sep
- List separator, typically ","printFirst
- Whether to print the first occurrence of the separator
-
setNeedWhitespace
void setNeedWhitespace(boolean needWhitespace)
Sets whether whitespace is needed before the next token.
-
getIndentation
int getIndentation()
Returns the offset for each level of indentation. Default 4.
-
isAlwaysUseParentheses
boolean isAlwaysUseParentheses()
Returns whether to enclose all expressions in parentheses, even if the operator has high enough precedence that the parentheses are not required.For example, the parentheses are required in the expression
(a + b) * c
because the '*' operator has higher precedence than the '+' operator, and so without the parentheses, the expression would be equivalent toa + (b * c)
. The fully-parenthesized expression,((a + b) * c)
is unambiguous even if you don't know the precedence of every operator.
-
inQuery
boolean inQuery()
Returns whether we are currently in a query context (SELECT, INSERT, UNION, INTERSECT, EXCEPT, and the ORDER BY operator).
-
-