问题描述
我使用 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 (将#修改为@)