use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.jdbc.CalciteConnection in project calcite by apache.
the class ReflectiveSchemaTest method testReflectiveSchemaInUnnamedPackage.
/**
* Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-281">[CALCITE-1919]
* NPE when target in ReflectiveSchema belongs to the unnamed package</a>.
*/
@Test
public void testReflectiveSchemaInUnnamedPackage() throws Exception {
final Driver driver = new Driver();
try (CalciteConnection connection = (CalciteConnection) driver.connect("jdbc:calcite:", new Properties())) {
SchemaPlus rootSchema = connection.getRootSchema();
final Class<?> c = Class.forName("RootHr");
final Object o = c.getDeclaredConstructor().newInstance();
rootSchema.add("hr", new ReflectiveSchema(o));
connection.setSchema("hr");
final Statement statement = connection.createStatement();
final String sql = "select * from \"emps\"";
final ResultSet resultSet = statement.executeQuery(sql);
final String expected = "empid=100; name=Bill\n" + "empid=200; name=Eric\n" + "empid=150; name=Sebastian\n";
assertThat(CalciteAssert.toString(resultSet), is(expected));
}
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.jdbc.CalciteConnection in project calcite by apache.
the class ReflectiveSchemaTest method testViewPath.
/**
* Tests a view with a path.
*/
@Test
public void testViewPath() throws SQLException, ClassNotFoundException {
Connection connection = DriverManager.getConnection("jdbc:calcite:");
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
SchemaPlus schema = rootSchema.add("s", new AbstractSchema());
// create a view s.emps based on hr.emps. uses explicit schema path "hr".
schema.add("emps", ViewTable.viewMacro(schema, "select * from \"emps\" where \"deptno\" = 10", ImmutableList.of("hr"), ImmutableList.of("s", "emps"), null));
schema.add("hr_emps", ViewTable.viewMacro(schema, "select * from \"emps\"", ImmutableList.of("hr"), ImmutableList.of("s", "hr_emps"), null));
schema.add("s_emps", ViewTable.viewMacro(schema, "select * from \"emps\"", ImmutableList.of("s"), ImmutableList.of("s", "s_emps"), null));
schema.add("null_emps", ViewTable.viewMacro(schema, "select * from \"emps\"", null, ImmutableList.of("s", "null_emps"), null));
rootSchema.add("hr", new ReflectiveSchema(new JdbcTest.HrSchema()));
final Statement statement = connection.createStatement();
ResultSet resultSet;
resultSet = statement.executeQuery("select * from \"s\".\"hr_emps\"");
// "hr_emps" -> "hr"."emps", 4 rows
assertEquals(4, count(resultSet));
resultSet = statement.executeQuery(// "s_emps" -> "s"."emps", 3 rows
"select * from \"s\".\"s_emps\"");
assertEquals(3, count(resultSet));
resultSet = statement.executeQuery(// "null_emps" -> "s"."emps", 3
"select * from \"s\".\"null_emps\"");
assertEquals(3, count(resultSet));
statement.close();
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.jdbc.CalciteConnection in project calcite by apache.
the class ReflectiveSchemaTest method testOperator.
/**
* Tests a relation that is accessed via method syntax.
* The function returns a {@link org.apache.calcite.linq4j.Queryable}.
*/
@Ignore
@Test
public void testOperator() throws SQLException, ClassNotFoundException {
Connection connection = DriverManager.getConnection("jdbc:calcite:");
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
SchemaPlus schema = rootSchema.add("s", new AbstractSchema());
schema.add("GenerateStrings", TableMacroImpl.create(Smalls.GENERATE_STRINGS_METHOD));
schema.add("StringUnion", TableMacroImpl.create(Smalls.STRING_UNION_METHOD));
rootSchema.add("hr", new ReflectiveSchema(new JdbcTest.HrSchema()));
ResultSet resultSet = connection.createStatement().executeQuery("select *\n" + "from table(s.StringUnion(\n" + " GenerateStrings(5),\n" + " cursor (select name from emps)))\n" + "where char_length(s) > 3");
assertTrue(resultSet.next());
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.jdbc.CalciteConnection in project calcite by apache.
the class JdbcTest method testArray.
/**
* Tests accessing a column in a JDBC source whose type is ARRAY.
*/
@Test
public void testArray() throws Exception {
final String url = MultiJdbcSchemaJoinTest.TempDb.INSTANCE.getUrl();
Connection baseConnection = DriverManager.getConnection(url);
Statement baseStmt = baseConnection.createStatement();
baseStmt.execute("CREATE TABLE ARR_TABLE (\n" + "ID INTEGER,\n" + "VALS INTEGER ARRAY)");
baseStmt.execute("INSERT INTO ARR_TABLE VALUES (1, ARRAY[1,2,3])");
baseStmt.execute("CREATE TABLE ARR_TABLE2 (\n" + "ID INTEGER,\n" + "VALS INTEGER ARRAY,\n" + "VALVALS VARCHAR(10) ARRAY)");
baseStmt.execute("INSERT INTO ARR_TABLE2 VALUES (1, ARRAY[1,2,3], ARRAY['x','y'])");
baseStmt.close();
baseConnection.commit();
Properties info = new Properties();
info.put("model", "inline:" + "{\n" + " version: '1.0',\n" + " defaultSchema: 'BASEJDBC',\n" + " schemas: [\n" + " {\n" + " type: 'jdbc',\n" + " name: 'BASEJDBC',\n" + " jdbcDriver: '" + jdbcDriver.class.getName() + "',\n" + " jdbcUrl: '" + url + "',\n" + " jdbcCatalog: null,\n" + " jdbcSchema: null\n" + " }\n" + " ]\n" + "}");
Connection calciteConnection = DriverManager.getConnection("jdbc:calcite:", info);
Statement calciteStatement = calciteConnection.createStatement();
final String sql = "SELECT ID, VALS FROM ARR_TABLE";
ResultSet rs = calciteStatement.executeQuery(sql);
assertTrue(rs.next());
assertEquals(1, rs.getInt(1));
Array array = rs.getArray(2);
assertNotNull(array);
assertArrayEquals(new int[] { 1, 2, 3 }, (int[]) array.getArray());
assertFalse(rs.next());
rs.close();
rs = calciteStatement.executeQuery("SELECT ID, CARDINALITY(VALS), VALS[2] FROM ARR_TABLE");
assertTrue(rs.next());
assertEquals(1, rs.getInt(1));
assertEquals(3, rs.getInt(2));
assertEquals(2, rs.getInt(3));
assertFalse(rs.next());
rs.close();
rs = calciteStatement.executeQuery("SELECT * FROM ARR_TABLE2");
final ResultSetMetaData metaData = rs.getMetaData();
assertThat(metaData.getColumnTypeName(1), equalTo("INTEGER"));
assertThat(metaData.getColumnTypeName(2), equalTo("INTEGER ARRAY"));
assertThat(metaData.getColumnTypeName(3), equalTo("VARCHAR(10) ARRAY"));
assertTrue(rs.next());
assertEquals(1, rs.getInt(1));
assertThat(rs.getArray(2), notNullValue());
assertThat(rs.getArray(3), notNullValue());
assertFalse(rs.next());
calciteConnection.close();
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.jdbc.CalciteConnection in project calcite by apache.
the class JdbcTest method testTableMacroMap.
/**
* Table macro that takes a MAP as a parameter.
*
* <p>Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-588">[CALCITE-588]
* Allow TableMacro to consume Maps and Collections</a>.
*/
@Test
public void testTableMacroMap() throws SQLException, ClassNotFoundException {
Connection connection = DriverManager.getConnection("jdbc:calcite:");
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
SchemaPlus schema = rootSchema.add("s", new AbstractSchema());
final TableMacro tableMacro = TableMacroImpl.create(Smalls.STR_METHOD);
schema.add("Str", tableMacro);
ResultSet resultSet = connection.createStatement().executeQuery("select *\n" + "from table(\"s\".\"Str\"(MAP['a', 1, 'baz', 2],\n" + " ARRAY[3, 4, CAST(null AS INTEGER)])) as t(n)");
// The call to "View('(10), (2)')" expands to 'values (1), (3), (10), (20)'.
assertThat(CalciteAssert.toString(resultSet), equalTo("N={'a'=1, 'baz'=2}\n" + "N=[3, 4, null] \n"));
connection.close();
}
Aggregations