There are a few Postgres-isms in that SQL:
The “::” (as a shorthand for cast) in 'typinput='array_in'::regproc
The ‘=‘ (as a shorthand for alias) in 'typinput='array_in'::regproc’
Use of a table function without the ’TABLE’ keyword, in 'from 
generate_series(1, array_upper(current_schemas(false), 1))’

Babel does not handle any of those right now, but it could. Contributions 
welcome.

Julian


> On Feb 11, 2019, at 6:14 AM, Stamatis Zampetakis <[email protected]> wrote:
> 
> Hi Gelbana,
> 
> In order to use the Babel parser you need to also set an appropriate
> factory to your parser configuration since
> setting only the conformance is not enough.
> 
> Try adding the following:
> ...
> configBuilder().setParserFactory(SqlBabelParserImpl.FACTORY);
> 
> Having said that I am not sure if Babel can handle the syntax you provided.
> 
> Best,
> Stamatis
> 
> 
> 
> Στις Σάβ, 9 Φεβ 2019 στις 10:46 μ.μ., ο/η Muhammad Gelbana <
> [email protected]> έγραψε:
> 
>> I'm trying to parse a PostgreSQL metadata query but a parsing exception is
>> thrown.
>> 
>> Here is my code:
>> 
>> Config parserConfig =
>> configBuilder().setConformance(SqlConformanceEnum.BABEL).build();
>> FrameworkConfig frameworkConfig =
>> Frameworks.newConfigBuilder().parserConfig(parserConfig).build();
>> Planner planner = Frameworks.getPlanner(frameworkConfig);
>> planner.parse("SELECT typinput='array_in'::regproc, typtype FROM
>> pg_catalog.pg_type LEFT JOIN (select ns.oid as nspoid, ns.nspname, r.r from
>> pg_namespace as ns join ( select s.r, (current_schemas(false))[s.r] as
>> nspname from generate_series(1, array_upper(current_schemas(false), 1)) as
>> s(r) ) as r using ( nspname )) as sp ON sp.nspoid = typnamespace WHERE
>> typname = $1 ORDER BY sp.r, pg_type.oid DESC LIMIT 1");
>> 
>> *The exception title is* "Exception in thread "main"
>> org.apache.calcite.sql.parser.SqlParseException: Encountered ":" at line 1,
>> column 27."
>> 
>> Am I doing something wrong or is the parser still not ready for such syntax
>> ?
>> 
>> Thanks,
>> Gelbana
>> 

Reply via email to