0

我在使用 Calcite 时收到了 NPE。我的代码如下

@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);
    }
}

和 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

我正在为 JIRA 开发一个插件,因此容器是 JIRA。DB是H2。我正在为 Calcite 借用 JIRA 数据源。

有人看到方解石的这种 NPE 吗?

4

1 回答 1

0

弄乱代码后,我发现以下代码段有效

this.schema = JdbcSchema.create(connection.getRootSchema(), "JIRA", datasource, null, null);
connection.getRootSchema().add("JIRA", schema);
于 2017-10-03T19:29:25.673 回答