Re: SqlParser Lexical State

2024-06-02 Thread Julian Hyde
It is not supposed to work for Quoting.SINGLE. 

I don’t know any SQL dialect where identifiers (table and column names and 
such) are enclosed in single quotes (apostrophes) so why should we support 
that? 

Julian 

> On Jun 2, 2024, at 3:59 PM, Yogendra Sharma  wrote:
> 
> Hello,
> 
> I am using Calcite 1.36; and I stumbled upon an issue and seeking some 
> explanation on the code below in Calcite:
> 
> While instantiating SqlParser, the constructor has following line:
> 
> parser.switchTo(SqlAbstractParserImpl.LexicalState.forConfig(config));
> 
> Essentially it tries to acquire an initial lexical state. However the code 
> written inside LexicalState does not handle all the possible values of 
> Quoting. For instance, it does not handle Quoting.SINGLE_QUOTE which results 
> in assertion error from below code.
> 
> 
>  /** Returns the corresponding parser state with the given configuration
>   * (in particular, quoting style). */
>  public static LexicalState forConfig(SqlParser.Config config) {
>switch (config.quoting()) {
>case BRACKET:
>  return DEFAULT;
>case DOUBLE_QUOTE:
>  return DQID;
>case BACK_TICK_BACKSLASH:
>  return BQID;
>case BACK_TICK:
>  if (config.conformance().allowHyphenInUnquotedTableName()
>  && config.charLiteralStyles().equals(
>  EnumSet.of(CharLiteralStyle.BQ_SINGLE,
>  CharLiteralStyle.BQ_DOUBLE))) {
>return BQID;
>  }
>  if (!config.conformance().allowHyphenInUnquotedTableName()
>  && config.charLiteralStyles().equals(
>  EnumSet.of(CharLiteralStyle.STANDARD))) {
>return BTID;
>  }
>  // fall through
>default:
>  throw new AssertionError(config);
>}
>  }
> }
> 
> So how is it supposed to work for Quoting values other than specified in 
> above switch case?
> 
> I am sure I am missing something basic here. Please help.
> 
> Thanks,
> Yogi
> 
> 
> 


SqlParser Lexical State

2024-06-02 Thread Yogendra Sharma
Hello,

I am using Calcite 1.36; and I stumbled upon an issue and seeking some 
explanation on the code below in Calcite:

While instantiating SqlParser, the constructor has following line:

parser.switchTo(SqlAbstractParserImpl.LexicalState.forConfig(config));

Essentially it tries to acquire an initial lexical state. However the code 
written inside LexicalState does not handle all the possible values of Quoting. 
For instance, it does not handle Quoting.SINGLE_QUOTE which results in 
assertion error from below code.


  /** Returns the corresponding parser state with the given configuration
   * (in particular, quoting style). */
  public static LexicalState forConfig(SqlParser.Config config) {
switch (config.quoting()) {
case BRACKET:
  return DEFAULT;
case DOUBLE_QUOTE:
  return DQID;
case BACK_TICK_BACKSLASH:
  return BQID;
case BACK_TICK:
  if (config.conformance().allowHyphenInUnquotedTableName()
  && config.charLiteralStyles().equals(
  EnumSet.of(CharLiteralStyle.BQ_SINGLE,
  CharLiteralStyle.BQ_DOUBLE))) {
return BQID;
  }
  if (!config.conformance().allowHyphenInUnquotedTableName()
  && config.charLiteralStyles().equals(
  EnumSet.of(CharLiteralStyle.STANDARD))) {
return BTID;
  }
  // fall through
default:
  throw new AssertionError(config);
}
  }
}

So how is it supposed to work for Quoting values other than specified in above 
switch case?

I am sure I am missing something basic here. Please help.

Thanks,
Yogi