0

I've receiving NPE When using Calcite. My code is as follows

@Autowired
public CalciteBootstrap(DatasourceProvider datasourceProvider) throws SQLException {
    this.datasource = datasourceProvider.fetchDatasource();
    log.debug("Datasource fetched - {}", datasource);
    this.connection = createRootSchema();
    this.schema = JdbcSchema.create(connection.getRootSchema(), "PUBLIC", datasource, null, null);

    connection.getRootSchema().add("jira", schema);
    connection.createStatement().executeQuery("select * from jira.PROJECT_KEY");
}

private CalciteConnection createRootSchema() {
    try {
        Class.forName("org.apache.calcite.jdbc.Driver");
        Properties info = new Properties();
        info.setProperty("lex", "JAVA");
        Connection connection = DriverManager.getConnection("jdbc:calcite:", info);
        CalciteConnection calciteConnection
                  = connection.unwrap(CalciteConnection.class);
        return calciteConnection;
    } catch (SQLException | ClassNotFoundException ex) {
        throw new RuntimeException(ex);
    }
}

And NPE:

[INFO] [talledLocalContainer] java.sql.SQLException: Error while executing SQL "select * from jira.PROJECT_KEY": null
[INFO] [talledLocalContainer]   at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
[INFO] [talledLocalContainer]   at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
[INFO] [talledLocalContainer]   at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
[INFO] [talledLocalContainer]   at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:218)
[INFO] [talledLocalContainer]   at com.codedoers.jira.smartql.QueryController.request(QueryController.java:23)
...
[INFO] [talledLocalContainer] Caused by: java.lang.NullPointerException
[INFO] [talledLocalContainer]   at Baz.bind(Unknown Source)
[INFO] [talledLocalContainer]   at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:335)
[INFO] [talledLocalContainer]   at org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:294)
[INFO] [talledLocalContainer]   at org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:559)
[INFO] [talledLocalContainer]   at org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:550)
[INFO] [talledLocalContainer]   at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:67)
[INFO] [talledLocalContainer]   at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44)
[INFO] [talledLocalContainer]   at org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:630)
[INFO] [talledLocalContainer]   at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:607)
[INFO] [talledLocalContainer]   at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:638)
[INFO] [talledLocalContainer]   at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:149)
[INFO] [talledLocalContainer]   ... 240 more

I am developing an addon for JIRA, hence the container is JIRA. DB is H2. I am borrowing JIRAs datasource for Calcite.

Does anybody see such NPE for Calcite?

1 Answers1

0

After messing with code, I've found that following snippet works

this.schema = JdbcSchema.create(connection.getRootSchema(), "JIRA", datasource, null, null);
connection.getRootSchema().add("JIRA", schema);