Thanks Jiunn Jye! That worked. Could you please point me to some examples on how to define a SqlVisitor to traverse the parse tree and add my filters? Or is there any better way of accomplishing what I need? Thanks again for the help!
Renato M. 2015-02-23 3:34 GMT+01:00 Jiunn Jye Ng <[email protected]>: > > works for me. quick copy paste based on what you have provided. > > > import org.apache.calcite.avatica.util.Casing; > import org.apache.calcite.avatica.util.Quoting; > import org.apache.calcite.sql.SqlNode; > import org.apache.calcite.sql.parser.SqlParseException; > import org.apache.calcite.sql.parser.SqlParser; > > public class TestSqlParser { > > public static void main(String[] args) { > > String sql = "select *\n from \"foodmart\".\"sales_fact_1997\" as s\n join > \"hr\".\"emps\" as e\n on e.\"empid\" = s.\"cust_id\""; > Quoting quoting = Quoting.DOUBLE_QUOTE; > Casing unquotedCasing = Casing.TO_UPPER; > Casing quotedCasing = Casing.UNCHANGED; > SqlParser parser = SqlParser.create(sql, > SqlParser.configBuilder().setQuoting(quoting) > .setUnquotedCasing(unquotedCasing) > .setQuotedCasing(quotedCasing).build()); > > try { > System.out.println("Here goes"); > SqlNode sqlNode = parser.parseQuery(); > System.out.println ("Done Parsing:" + sqlNode); > } catch (SqlParseException e) { > e.printStackTrace(); > } > } > } > > > On Mon, Feb 23, 2015 at 7:42 AM, Renato Marroquín Mogrovejo < > [email protected]> wrote: > > > Hi there, > > > > I have an application that reads data from HDFS using Spark but I need to > > add specific relation filters programatically. I could do this by parsing > > the SQL string but I thought that Apache Calcite could help on this. I > > tried using this: > > > > <code> > > private static SqlParser getSqlParser(String sql) { > > Quoting quoting = Quoting.DOUBLE_QUOTE; > > Casing unquotedCasing = Casing.TO_UPPER; > > Casing quotedCasing = Casing.UNCHANGED; > > return SqlParser.create( > > sql, > > SqlParser.configBuilder().setQuoting(quoting) > > .setUnquotedCasing(unquotedCasing) > > .setQuotedCasing(quotedCasing).build()); > > > > } > > </code> > > > > with a query like "select *\n from \"foodmart\".\"sales_fact_1997\" as s\n > > join \"hr\".\"emps\" as e\n on e.\"empid\" = s.\"cust_id\"" (borrowed from > > Calcite tests), but I get: > > > > org.apache.calcite.sql.parser.SqlParseException: Encountered "select" at > > line 1, column 1. > > Was expecting one of: > > "+" ... > > > > Any help is highly appreciated! Thanks! > > > > > > Renato M. > >
