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].
    • 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, boolean quoted)
      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 (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

        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,
                        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​(SqlNode fetch,
                         SqlNode offset)
        Prints the OFFSET/FETCH clause.
      • 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
      • startList

        SqlWriter.Frame startList​(java.lang.String open,
                                  java.lang.String close)
        Starts a list.
      • 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
      • 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 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).