use of org.apache.calcite.adapter.java.ReflectiveSchema in project calcite by apache.
the class JdbcTest method testAutomaticTemporaryTable.
/**
* Tests saving query results into temporary tables, per
* {@link org.apache.calcite.avatica.Handler.ResultSink}.
*/
@Test
public void testAutomaticTemporaryTable() throws Exception {
final List<Object> objects = new ArrayList<>();
CalciteAssert.that().with(new CalciteAssert.ConnectionFactory() {
public CalciteConnection createConnection() throws SQLException {
CalciteConnection connection = (CalciteConnection) new AutoTempDriver(objects).connect("jdbc:calcite:", new Properties());
final SchemaPlus rootSchema = connection.getRootSchema();
rootSchema.add("hr", new ReflectiveSchema(new HrSchema()));
connection.setSchema("hr");
return connection;
}
}).doWithConnection(new Function<CalciteConnection, Object>() {
public Object apply(CalciteConnection a0) {
try {
a0.createStatement().executeQuery("select * from \"hr\".\"emps\" " + "where \"deptno\" = 10");
assertEquals(1, objects.size());
return null;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
}
use of org.apache.calcite.adapter.java.ReflectiveSchema in project calcite by apache.
the class JdbcTest method testStatementCloseOnCompletion.
/**
* Tests {@link java.sql.Statement}.{@code closeOnCompletion()}.
*/
@Test
public void testStatementCloseOnCompletion() throws Exception {
String javaVersion = System.getProperty("java.version");
if (javaVersion.compareTo("1.7") < 0) {
// Statement.closeOnCompletion was introduced in JDK 1.7.
return;
}
final Driver driver = new Driver();
CalciteConnection connection = (CalciteConnection) driver.connect("jdbc:calcite:", new Properties());
SchemaPlus rootSchema = connection.getRootSchema();
rootSchema.add("hr", new ReflectiveSchema(new HrSchema()));
connection.setSchema("hr");
final Statement statement = connection.createStatement();
assertFalse((Boolean) CalciteAssert.call(statement, "isCloseOnCompletion"));
CalciteAssert.call(statement, "closeOnCompletion");
assertTrue((Boolean) CalciteAssert.call(statement, "isCloseOnCompletion"));
final ResultSet resultSet = statement.executeQuery("select * from \"emps\"");
assertFalse(resultSet.isClosed());
assertFalse(statement.isClosed());
assertFalse(connection.isClosed());
// when result set is closed, statement is closed automatically
resultSet.close();
assertTrue(resultSet.isClosed());
assertTrue(statement.isClosed());
assertFalse(connection.isClosed());
connection.close();
assertTrue(resultSet.isClosed());
assertTrue(statement.isClosed());
assertTrue(connection.isClosed());
}
use of org.apache.calcite.adapter.java.ReflectiveSchema in project calcite by apache.
the class JdbcTest method testDifferentTypesSameFields.
/**
* Test case for bug where if two tables have different element classes
* but those classes have identical fields, Calcite would generate code to use
* the wrong element class; a {@link ClassCastException} would ensue.
*/
@Test
public void testDifferentTypesSameFields() throws Exception {
Connection connection = DriverManager.getConnection("jdbc:calcite:");
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
final SchemaPlus rootSchema = calciteConnection.getRootSchema();
rootSchema.add("TEST", new ReflectiveSchema(new MySchema()));
Statement statement = calciteConnection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT \"myvalue\" from TEST.\"mytable2\"");
assertEquals("myvalue=2\n", CalciteAssert.toString(resultSet));
resultSet.close();
statement.close();
connection.close();
}
use of org.apache.calcite.adapter.java.ReflectiveSchema in project calcite by apache.
the class JdbcTest method adviseSql.
private void adviseSql(String sql, Function<ResultSet, Void> checker) throws ClassNotFoundException, SQLException {
Properties info = new Properties();
info.put("lex", "JAVA");
info.put("quoting", "DOUBLE_QUOTE");
Connection connection = DriverManager.getConnection("jdbc:calcite:", info);
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
rootSchema.add("hr", new ReflectiveSchema(new HrSchema()));
SchemaPlus schema = rootSchema.add("s", new AbstractSchema());
calciteConnection.setSchema("hr");
final TableFunction table = new SqlAdvisorGetHintsFunction();
schema.add("get_hints", table);
PreparedStatement ps = connection.prepareStatement("select *\n" + "from table(\"s\".\"get_hints\"(?, ?)) as t(id, names, type)");
SqlParserUtil.StringAndPos sap = SqlParserUtil.findPos(sql);
ps.setString(1, sap.sql);
ps.setInt(2, sap.cursor);
final ResultSet resultSet = ps.executeQuery();
checker.apply(resultSet);
resultSet.close();
connection.close();
}
use of org.apache.calcite.adapter.java.ReflectiveSchema in project calcite by apache.
the class MultiJdbcSchemaJoinTest method setup.
private Connection setup() throws SQLException {
// Create a jdbc database & table
final String db = TempDb.INSTANCE.getUrl();
Connection c1 = DriverManager.getConnection(db, "", "");
Statement stmt1 = c1.createStatement();
// This is a table we can join with the emps from the hr schema
stmt1.execute("create table table1(id integer not null primary key, " + "field1 varchar(10))");
stmt1.execute("insert into table1 values(100, 'foo')");
stmt1.execute("insert into table1 values(200, 'bar')");
c1.close();
// Make a Calcite schema with both a jdbc schema and a non-jdbc schema
Connection connection = DriverManager.getConnection("jdbc:calcite:");
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
rootSchema.add("DB", JdbcSchema.create(rootSchema, "DB", JdbcSchema.dataSource(db, "org.hsqldb.jdbcDriver", "", ""), null, null));
rootSchema.add("hr", new ReflectiveSchema(new JdbcTest.HrSchema()));
return connection;
}
Aggregations