Interface SqlWriter

All Known Implementing Classes:
SqlPrettyWriter

public interface SqlWriter
A SqlWriter 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].
  • Field Details

  • Method Details

    • reset

      void reset()
      Resets this writer so that it can format another expression. Does not affect formatting preferences (see resetSettings()
    • 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

      @Pure void literal(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

      @Pure void keyword(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

      @Pure void print(String s)
      Prints a string, preceded by whitespace if necessary.
    • print

      @Pure void print(int x)
      Prints an integer.
      Parameters:
      x - Integer
    • identifier

      void identifier(String name, boolean quoted)
      Prints an identifier, quoting as necessary.
      Parameters:
      name - The identifier name
      quoted - Whether this identifier was quoted in the original sql statement, this may not be the only factor to decide whether this identifier should be quoted
    • dynamicParam

      void dynamicParam(int index)
      Prints a dynamic parameter (e.g. ? for default JDBC)
    • fetchOffset

      void fetchOffset(@Nullable SqlNode fetch, @Nullable SqlNode offset)
      Prints the OFFSET/FETCH clause.
    • topN

      void topN(@Nullable SqlNode fetch, @Nullable SqlNode offset)
      Prints the TOP(n) clause.
      See Also:
    • 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

      @Pure SqlWriter.Frame startFunCall(String funName)
      Starts a list which is a call to a function.
      See Also:
    • endFunCall

      @Pure void endFunCall(SqlWriter.Frame frame)
      Ends a list which is a call to a function.
      Parameters:
      frame - Frame
      See Also:
    • startList

      @Pure SqlWriter.Frame startList(String open, String close)
      Starts a list.
    • startList

      @Pure 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 governed according to SELECT-list formatting preferences.
    • startList

      @Pure SqlWriter.Frame startList(SqlWriter.FrameType frameType, String open, 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

      @Pure void endList(@Nullable SqlWriter.Frame frame)
      Ends a list.
      Parameters:
      frame - The frame which was created by startList(java.lang.String, java.lang.String).
    • list

      @Pure SqlWriter list(SqlWriter.FrameTypeEnum frameType, Consumer<SqlWriter> action)
      Writes a list.
    • list

      @Pure SqlWriter list(SqlWriter.FrameTypeEnum frameType, SqlBinaryOperator sepOp, SqlNodeList list)
      Writes a list separated by a binary operator (AND, OR, or COMMA).
    • sep

      @Pure void sep(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

      @Pure void sep(String sep, boolean printFirst)
      Writes a list separator.
      Parameters:
      sep - List separator, typically ","
      printFirst - Whether to print the first occurrence of the separator
    • setNeedWhitespace

      @Pure 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 to a + (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).