Julian Hyde created CALCITE-3526:
------------------------------------

             Summary: SqlPrettyWriter should have options to fold/chop long 
lines, print leading commas
                 Key: CALCITE-3526
                 URL: https://issues.apache.org/jira/browse/CALCITE-3526
             Project: Calcite
          Issue Type: Bug
            Reporter: Julian Hyde


SqlPrettyWriter should have options to fold/chop long lines, print leading 
commas.

In this change, we change how {{SqlPrettyWriter}} is configured: methods such 
as 
{{setIndentation}} are now deprecated, there is an immutable config object 
{{SqlWriterConfig}}, and the {{SqlDialect}} and {{boolean 
alwaysUseParentheses}} constructor arguments are also properties of the config. 
So, rather than
{code}
new SqlPrettyWriter(d, p).setIndentation(4)
{code}
you now write
{code}
new SqlPrettyWriter(
    SqlPrettyWriter.config()
        .withDialect(d)
        .withAlwaysUseParentheses(p)
        .withIndentation(4))
{code}

This change adds options to fold lists such as the SELECT clause: WIDE always 
puts items on the same line, TALL always puts items on separate lines, and FOLD 
and CHOP adapt. If the line is too long, FOLD fits as many items on a line as 
it can, whereas CHOP puts items onto separate lines. STEP is like WIDE but 
observes the {{clauseEndsLine}} property.

You can set folding policy for each clause separately using 
{{withSelectFolding}}, {{withOrderByFolding}} etc., or set the default 
{{withFolding}}.

A new property {{clauseEndsLine}} causes first SELECT item to be on a separate 
line than the SELECT keyword, and similarly other clauses.

For all options, see 
[SqlWriterConfig|https://calcite.apache.org/apidocs/org/apache/calcite/sql/SqlWriterConfig.html].

This changes also fixes CALCITE-1585; because config is held in an immutable 
object rather than the SqlPrettyWriter, {{reset()}} no longer resets settings 
such as {{alwaysUseParentheses}}.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to