方解石解析器 sqlJoin 节点异常 未启动列表

问题描述

我使用 cacite JDBC 连接 MysqL 连接来自两个不同 JDBC 数据库的表的测试用例。 方法抛出“java.lang.RuntimeException”异常。无法评估 org.apache.calcite.sql.sqlJoin.toString()

    private static final String report = "report";
    private static final String ds = "ds";

    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();
        properties.setProperty("caseSensitive","false");
        Connection connection = DriverManager.getConnection("jdbc:calcite:",properties);
        CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
        SchemaPlus rootSchema = calciteConnection.getRootSchema();

        String reportUrl =   "jdbc:MysqL://localhost:3306/report";
        String dataCubeUrl = "jdbc:MysqL://localhost:3306/ds";

        DataSource reportDs = JdbcSchema.dataSource(reportUrl,"com.MysqL.jdbc.Driver","root","root");
        DataSource cubeds = JdbcSchema.dataSource(dataCubeUrl,"root");

        sqlParser.Config builder = sqlParser.config().withCaseSensitive(false);

        final FrameworkConfig config = Frameworks.newConfigBuilder()
                .defaultSchema(rootSchema).parserConfig(builder).build();

        Planner planner = Frameworks.getPlanner(config);

        rootSchema.add(ds,JdbcSchema.create(rootSchema,ds,reportDs,null));
        rootSchema.add(report,report,cubeds,null));

        String sql = "select t1.* from report.sys_conn t1 left join ds.ds_conn t2 on t1.id = t2.id limit 10";
        execute(calciteConnection,sql);

        sqlNode originsqlNode = planner.parse(sql);
        Pair<sqlNode,RelDataType> sqlNodeRelDataTypePair = planner.validateAndGetType(originsqlNode);
        sqlNode sqlNode = sqlNodeRelDataTypePair.getKey();
        sqlSelect sqlSelect = (sqlSelect) sqlNode;
        sqlNode from = sqlSelect.getFrom();
        System.out.println(from);
    }

    private static void execute(CalciteConnection calciteConnection,String sql) throws sqlException {
        Statement statement = calciteConnection.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        ResultSetMetaData MetaData = resultSet.getMetaData();
        while (resultSet.next()) {
            int columnCount = MetaData.getColumnCount();
            for (int i = 1; i <= columnCount; i++) {
                System.out.print(MetaData.getColumnLabel(i) + ":\t" + resultSet.getobject(i) + "\t");
            }
            System.out.println();
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...