Jinfeng Ni created CALCITE-593:
----------------------------------

             Summary: SqlValidator in Frameworks did not expand identifier by 
default, which is different if the query goes through JDBC and uses 
CalcitePrepareImpl. 
                 Key: CALCITE-593
                 URL: https://issues.apache.org/jira/browse/CALCITE-593
             Project: Calcite
          Issue Type: Bug
            Reporter: Jinfeng Ni
            Assignee: Julian Hyde


Calcite supports two ways to build query plan for a SQL statement. Either 
submit the query through JDBC, which will use CalcitePrepareImpl class, or 
build a customized planner by leveraging the Frameworks/PlannerImpl class. 
However, the SqlValidator created in Frameworks/PlannerImpl uses a different 
setting in terms of identifier expanding, than the setting in the SqlValidator 
in CalcitePrepareImpl.  This implies that one same query goes through those two 
SqlValidators would have different validated forms.

SqlValidator.expandIdentifiers in by default is set to false. But 
CalcitePrepareImpl.prepare() will reset it to true at CalcitePrepareImpl:494: 

{code}
      final SqlValidator validator =
          new CalciteSqlValidator(opTab, catalogReader, typeFactory);
      validator.setIdentifierExpansion(true);
{code}

In contrast, the SqlValidator created in Frameworks/PlannerImpl will still use 
the default "false" setting. 

Further, Frameworks does not expose the instance of SqlValidator, so user does 
not have a way to change the setting for the SqlValidator created in 
Frameworks/PlannerImpl.

To make behaviors consistent, I would like to propose that we make Framework's 
SqlValidator uses the same setting as the one in CalcitePrepareImpl.

 

 






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to