For the little experience I have with using Calcite I have learnt that the
SqlPrettyWriter has a method "withQuoteAllIdentifiers" on its config but
that seemingly only addresses table names and not column names in the where
clause. The proposed path from Yanjing addresses columns.

--Sandeep

On Fri, May 27, 2022 at 8:47 AM Julian Hyde <[email protected]> wrote:

> Can someone remind me - is there an option for the writer to omit quotes
> on identifiers if they are unnecessary? (This would imply that the writer
> knows how the target dialect treats case sensitivity.)
>
> I may have implemented such a feature at some point. (I forget.) If so it
> should generate nice-looking sql with a little extra effort configuring the
> writer.
>
> Julian
>
> > On May 26, 2022, at 19:32, Sandeep N <[email protected]> wrote:
> >
> > Thank you Yanjing, that fix addressed it.
> >
> > --Sandeep
> >
> >> On Thu, May 26, 2022 at 5:33 PM Yanjing Wang <[email protected]
> >
> >> wrote:
> >>
> >> Hi Sandeep,
> >>
> >> try select.toSqlString(new
> >>
> >>
> AnsiSqlDialect(AnsiSqlDialect.DEFAULT_CONTEXT.withIdentifierQuoteString(""))).getSql().
> >>
> >> Sandeep N <[email protected]> 于2022年5月27日周五 06:03写道:
> >>
> >>> Hi Stamatis,
> >>>
> >>> Thanks for the quick response, I tried your suggestion as follows
> >>>
> >>> RelToSqlConverter converter = new RelToSqlConverter(new
> >>>
> >>>
> >>
> AnsiSqlDialect(AnsiSqlDialect.DEFAULT_CONTEXT.withIdentifierQuoteString("")));
> >>> SqlSelect select = converter.visitRoot(relNode).asSelect();
> >>> SqlWriterConfig config = SqlPrettyWriter.config().
> >>>                withCaseClausesOnNewLines(false).
> >>>                withQuoteAllIdentifiers(false);
> >>> System.out.println(new SqlPrettyWriter(config).format(select));
> >>>
> >>> and I still get this
> >>> SELECT "a"
> >>> FROM test_table
> >>> WHERE "b" = 'value';
> >>>
> >>> It is not obvious to me as to what I am doing wrong. Is the above block
> >> of
> >>> code the only pieces that I need to put in play to get that sql
> >> generated?
> >>>
> >>> --Sandeep
> >>>
> >>> On Thu, May 26, 2022 at 2:22 PM Stamatis Zampetakis <[email protected]
> >
> >>> wrote:
> >>>
> >>>> Hi Sandeep,
> >>>>
> >>>> If you want to turn off quoting (which I am not sure if it is a good
> >>> idea)
> >>>> when you go from relational algebra to SQL you have to customize the
> >>>> SqlDialect that you are using via Context#withIdentifierQuoteString
> >> [1].
> >>>> You can find a small example as part of RelToSqlConverterTest here
> [2].
> >>>>
> >>>> Best,
> >>>> Stamatis
> >>>>
> >>>> [1]
> >>>>
> >>>>
> >>>
> >>
> https://github.com/apache/calcite/blob/9bdfd9a178f493b235d8785afd94fd0c998e8cce/core/src/main/java/org/apache/calcite/sql/SqlDialect.java#L1408
> >>>> [2]
> >>>>
> >>>>
> >>>
> >>
> https://github.com/zabetak/calcite/commit/ea18d28f4fb44113c414c393fe28fc94b3eecc29
> >>>>
> >>>> On Thu, May 26, 2022 at 9:18 PM Sandeep N <[email protected]>
> >>>> wrote:
> >>>>
> >>>>> Hi all,
> >>>>>
> >>>>> I am pretty aware that this question may have been asked before as I
> >>> have
> >>>>> found references on stackoverflow but have yet to stumble on a
> >> response
> >>>>> which lays out the path on solving this.
> >>>>>
> >>>>> Here is the problem I am facing -
> >>>>> I am using relational algebra to generate SQL on a table test_table
> >>> with
> >>>>> two columns a and b fed into the calcite Framework (see below) via a
> >>>> custom
> >>>>> catalog. Both a and b are varchar columns.
> >>>>>
> >>>>> FrameworkConfig config = Frameworks.newConfigBuilder().
> >>>>>                parserConfig(SqlParser.Config.DEFAULT).
> >>>>>                defaultSchema(addSchemas(rootSchema, schemaName,
> >>>> schema)).
> >>>>> <--- this is where I plug my custom table.
> >>>>>                traitDefs((List<RelTraitDef>) null).
> >>>>>                operatorTable(sqlOperatorTable).
> >>>>>
> >> programs(Programs.heuristicJoinOrder(Programs.RULE_SET,
> >>>>> true, 2)).build()
> >>>>>
> >>>>> The relational algebra is then used to generate SQL to the
> >>> AnsiSqlDialect
> >>>>> and the resultant output SQL is
> >>>>>
> >>>>> SELECT "a"
> >>>>> FROM test_table
> >>>>> WHERE "b" = 'value';
> >>>>>
> >>>>> I have the SqlWriterConfig setup as such
> >>>>>
> >>>>> SqlWriterConfig config = SqlPrettyWriter.config().
> >>>>>                withCaseClausesOnNewLines(false).
> >>>>>                withQuoteAllIdentifiers(false);
> >>>>>
> >>>>> I have been trying to figure what needs to change in the sql writer
> >> but
> >>>>> after scanning stackoverflow it appears this is controlled by
> >>>>> CalciteConnectionConfig and potentially not the SqlWriter. Is this
> >>>>> accurate? and if so how do I assemble the right connection config
> >> when
> >>> I
> >>>> am
> >>>>> building the custom catalog?
> >>>>>
> >>>>> P.s: I am not parsing SQL but writing directly to the relational
> >>> algebra
> >>>>> nodes so SqlParser does not come into play here.
> >>>>>
> >>>>> Any pointers on how I can go about this is appreciated, say existing
> >>>> tests
> >>>>> or code which will help me put together a configuration which gets me
> >>> to
> >>>>> this sql
> >>>>>
> >>>>> SELECT a
> >>>>> FROM test_table
> >>>>> WHERE b = 'value';
> >>>>>
> >>>>> Thanks in advance.
> >>>>>
> >>>>> --Sandeep
> >>>>>
> >>>>
> >>>
> >>
>

Reply via email to