You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Scott McKinney <sc...@manifold.systems> on 2019/06/05 21:10:55 UTC

Type information from SQL parser?

Hi.  I'm reviewing Calcite for a project and I'm having difficulty wading
through the API. Roughly, I want the following functionality from the
Calcite API:

var schema = parseDDL(RAW_DDL); // SQL DDL or any type of Calcite
supported schema
var query = parseQuery("SELECT c1, c2 FROM t1 WHERE c2='value'", schema);
var selectFields = query.getSelectFields();for(var field: selectFields) {
  var name = field.getName();
  var type = field.getType(); // <~~~ want this in terms of `t1` from ddl
  ...}

The type information for the select list in terms of the tables etc. in the
DDL is what I'm after.

Is this possible?  Thanks!

Re: Type information from SQL parser?

Posted by Muhammad Gelbana <m....@gmail.com>.
Parsing alone can't get you types. You'll have to validate (let Calcite
discover your schemas, tables and columns metadata). A quick look in
SqlNode showed no trace of types information (other than the SqlKind
enumeration which doesn't seem like what you're looking for).

Therefore I believe you'll have to convert the SqlNode tree to RelNode.
Sample code:

Planner planner = Frameworks.getPlanner(frameworkConfig);
SqlNode parsed = planner.parse(query);
SqlNode validated = planner.validate(parsed);
RelRoot root = planner.rel(validated); // Convert SqlNode tree to RelNode

"root.rel" should have what you need.

Thanks,
Gelbana


On Thu, Jun 6, 2019 at 12:02 AM Scott McKinney <sc...@manifold.systems>
wrote:

> Hi.  I'm reviewing Calcite for a project and I'm having difficulty wading
> through the API. Roughly, I want the following functionality from the
> Calcite API:
>
> var schema = parseDDL(RAW_DDL); // SQL DDL or any type of Calcite
> supported schema
> var query = parseQuery("SELECT c1, c2 FROM t1 WHERE c2='value'", schema);
> var selectFields = query.getSelectFields();for(var field: selectFields) {
>   var name = field.getName();
>   var type = field.getType(); // <~~~ want this in terms of `t1` from ddl
>   ...}
>
> The type information for the select list in terms of the tables etc. in the
> DDL is what I'm after.
>
> Is this possible?  Thanks!
>