微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决方解石解析器 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?