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 >>
