hi ,
I'm trying to parse sql with org.apache.calcite.tools.Planner, but when
validate,it throw exception:
Exception in thread "main" org.apache.calcite.tools.ValidationException:
org.apache.calcite.runtime.CalciteContextException: From line 1, column
8 to line 1, column 30: No match found for function signature
ST_MAKEPOINT(<NUMERIC>, <NUMERIC>)
at
org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:217)
at mtest.App8.main(App8.java:58)
I set "fun=spatial" in calcite connection and conformance to "LENIENT"(I
noticed it allowed geometry),but they didn't work.Could you please let
me know how to enable spatial when sql validated.
Here is my code:
Class.forName("org.apache.calcite.jdbc.Driver");
Properties info = new Properties();
info.setProperty("caseSensitive", "false");
info.setProperty("conformance", "LENIENT");
Connection connection =
DriverManager.getConnection("jdbc:calcite:fun=spatial", info);
CalciteConnection calciteConnection =
connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
String url = "jdbc:postgresql://127.0.0.1:5432/hdb";
DriverManager.registerDriver(DriverManager.getDriver(url));
Class.forName("org.postgresql.Driver");
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setUsername("dev");
dataSource.setPassword("123456");
Schema schema = JdbcSchema.create(rootSchema, "test",
dataSource, null, "public");
rootSchema.add("test", schema);
SqlParser.Config insensitiveParser =
SqlParser.config().withCaseSensitive(false)
.withConformance(SqlConformanceEnum.LENIENT);
FrameworkConfig config =
Frameworks.newConfigBuilder().parserConfig(insensitiveParser).defaultSchema(rootSchema)
.build();
Planner planner = Frameworks.getPlanner(config);
String sql = "select ST_MakePoint(10.1,11.2) from test.cities
t ";
SqlNode sqlNode = planner.parse(sql);
SqlNode sqlNodeValidated = planner.validate(sqlNode);