DRILL-751/DRILL-806: View info in INFORMATION_SCHEMA Fixes are already part of the DRILL-760 (InfoSchema POJO conversion). This patch includes testcases and refactoring of view tests into a separate file.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/0c3bad98 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/0c3bad98 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/0c3bad98 Branch: refs/heads/master Commit: 0c3bad9803c4b8fbc82da889ea434ecbfd49083b Parents: 0dde773 Author: vkorukanti <[email protected]> Authored: Mon Jun 9 10:25:41 2014 -0700 Committer: vkorukanti <[email protected]> Committed: Mon Jun 9 13:34:13 2014 -0700 ---------------------------------------------------------------------- .../apache/drill/jdbc/test/TestJdbcQuery.java | 335 ---------------- .../org/apache/drill/jdbc/test/TestViews.java | 385 +++++++++++++++++++ 2 files changed, 385 insertions(+), 335 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0c3bad98/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java index ec5ecf5..f486cc9 100644 --- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java +++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java @@ -280,259 +280,6 @@ import static org.junit.Assert.fail; ); } - /** Helper test method for view tests */ - private void testViewHelper(final String viewCreate, final String viewName, - final String viewQuery, final String queryResult) throws Exception{ - JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { - public Void apply(Connection connection) { - try { - Statement statement = connection.createStatement(); - - // change default schema - statement.executeQuery("USE dfs.tmp"); - // create view - ResultSet resultSet = statement.executeQuery(viewCreate); - String result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - String viewCreateResult = "ok=true; summary=View '" + viewName + "' created successfully in 'dfs.tmp' schema"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, viewCreateResult), - viewCreateResult.equals(result)); - - // query from view - resultSet = statement.executeQuery(viewQuery); - result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, queryResult), - queryResult.equals(result)); - - statement.executeQuery("drop view " + viewName).close(); - - statement.close(); - - - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - } - - @Test - public void testView1() throws Exception{ - testViewHelper( - "CREATE VIEW testview1 AS SELECT * FROM cp.`region.json`", - "testview1", - "SELECT * FROM testview1 LIMIT 1", - "region_id=0; sales_city=None; sales_state_province=None; sales_district=No District; " + - "sales_region=No Region; sales_country=No Country; sales_district_id=0"); - } - - @Test - public void testView2() throws Exception{ - testViewHelper( - "CREATE VIEW testview2 AS SELECT region_id, sales_city FROM cp.`region.json`", - "testview2", - "SELECT * FROM testview2 LIMIT 2", - "region_id=0; sales_city=None\nregion_id=1; sales_city=San Francisco"); - } - - @Test - public void testView3() throws Exception{ - testViewHelper( - "CREATE VIEW testview3(regionid, salescity) AS SELECT region_id, sales_city FROM cp.`region.json`", - "testview3", - "SELECT * FROM testview3 LIMIT 2", - "regionid=0; salescity=None\nregionid=1; salescity=San Francisco"); - } - - @Test - @Ignore // See DRILL-595 - can't project columns from inner query. - public void testView4() throws Exception{ - testViewHelper( - "CREATE VIEW testview1 AS SELECT * FROM cp.`region.json`", - "testview1", - "SELECT region_id, sales_city FROM testview1 LIMIT 2", - ""); - } - - @Test - public void testView5() throws Exception{ - testViewHelper( - "CREATE VIEW testview2 AS SELECT region_id, sales_city FROM cp.`region.json`", - "testview2", - "SELECT region_id, sales_city FROM testview2 LIMIT 2", - "region_id=0; sales_city=None\nregion_id=1; sales_city=San Francisco"); - } - - @Test - public void testView6() throws Exception{ - testViewHelper( - "CREATE VIEW testview2 AS SELECT region_id, sales_city FROM cp.`region.json`", - "testview2", - "SELECT sales_city FROM testview2 LIMIT 2", - "sales_city=None\nsales_city=San Francisco"); - } - - @Test - public void testView7() throws Exception{ - testViewHelper( - "CREATE VIEW testview3(regionid, salescity) AS SELECT region_id, sales_city FROM cp.`region.json` LIMIT 2", - "testview3", - "SELECT regionid, salescity FROM testview3", - "regionid=0; salescity=None\nregionid=1; salescity=San Francisco"); - } - - @Test - public void testView8() throws Exception{ - testViewHelper( - "CREATE VIEW testview3(regionid, salescity) AS " + - "SELECT region_id, sales_city FROM cp.`region.json` ORDER BY region_id DESC", - "testview3", - "SELECT regionid FROM testview3 LIMIT 2", - "regionid=109\nregionid=108"); - } - - @Test - @Ignore // Query on testview2 fails with CannotPlanException. Seems to be an issue with Union. - public void testView9() throws Exception{ - testViewHelper( - "CREATE VIEW testview2 AS " + - "SELECT region_id FROM cp.`region.json` " + - "UNION " + - "SELECT employee_id FROM cp.`employee.json`", - "testview2", - "SELECT sales_city FROM testview2 LIMIT 2", - "sales_city=None\nsales_city=San Francisco"); - } - - @Test - public void testViewOnHiveTable1() throws Exception{ - testViewHelper( - "CREATE VIEW hiveview AS SELECT * FROM hive.kv", - "hiveview", - "SELECT * FROM hiveview LIMIT 1", - "key=1; value= key_1"); - } - - @Test - public void testViewOnHiveTable2() throws Exception{ - testViewHelper( - "CREATE VIEW hiveview AS SELECT * FROM hive.kv", - "hiveview", - "SELECT key, `value` FROM hiveview LIMIT 1", - "key=1; value= key_1"); - } - - @Test - public void testViewOnHiveTable3() throws Exception{ - testViewHelper( - "CREATE VIEW hiveview AS SELECT * FROM hive.kv", - "hiveview", - "SELECT `value` FROM hiveview LIMIT 1", - "value= key_1"); - } - - @Test - public void testViewOnHiveTable4() throws Exception{ - testViewHelper( - "CREATE VIEW hiveview AS SELECT key, `value` FROM hive.kv", - "hiveview", - "SELECT * FROM hiveview LIMIT 1", - "key=1; value= key_1"); - } - - @Test - public void testViewOnHiveTable5() throws Exception{ - testViewHelper( - "CREATE VIEW hiveview AS SELECT key, `value` FROM hive.kv", - "hiveview", - "SELECT key, `value` FROM hiveview LIMIT 1", - "key=1; value= key_1"); - } - - @Test - public void testDropView() throws Exception{ - JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { - public Void apply(Connection connection) { - try { - Statement statement = connection.createStatement(); - - // change default schema - statement.executeQuery("USE dfs.tmp"); - - // create view - statement.executeQuery( - "CREATE VIEW testview3(regionid) AS SELECT region_id FROM cp.`region.json`"); - - // query from view - ResultSet resultSet = statement.executeQuery("SELECT regionid FROM testview3 LIMIT 1"); - String result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - String expected = "regionid=0"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - resultSet = statement.executeQuery("DROP VIEW testview3"); - result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - expected = "ok=true; summary=View 'testview3' deleted successfully from 'dfs.tmp' schema"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - statement.close(); - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - } - - @Test - public void testShowDescribeTablesWithView() throws Exception{ - JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { - public Void apply(Connection connection) { - try { - Statement statement = connection.createStatement(); - - // change default schema - statement.executeQuery("USE dfs.tmp"); - - // create view - statement.executeQuery( - "CREATE VIEW testview3 AS SELECT * FROM hive.kv"); - - // show tables on view - ResultSet resultSet = statement.executeQuery("SHOW TABLES like 'testview3'"); - String result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - String expected = "TABLE_SCHEMA=dfs.tmp; TABLE_NAME=testview3"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - // describe a view - resultSet = statement.executeQuery("DESCRIBE dfs.tmp.testview3"); - result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - expected = - "COLUMN_NAME=key; DATA_TYPE=INTEGER; IS_NULLABLE=NO\n" + - "COLUMN_NAME=value; DATA_TYPE=VARCHAR; IS_NULLABLE=NO"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - statement.executeQuery("drop view testview3").close(); - - statement.close(); - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - } - - @Test public void testDateTimeAccessors() throws Exception{ JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { @@ -599,88 +346,6 @@ import static org.junit.Assert.fail; } @Test - public void testViewWithFullSchemaIdentifier() throws Exception{ - JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { - public Void apply(Connection connection) { - try { - Statement statement = connection.createStatement(); - - // change default schema - statement.executeQuery("USE cp"); - - // create a view with full schema identifier - ResultSet resultSet = statement.executeQuery("CREATE VIEW dfs.tmp.testview AS SELECT * FROM hive.kv"); - String result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - String expected = "ok=true; summary=View 'testview' created successfully in 'dfs.tmp' schema"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - // query from view - resultSet = statement.executeQuery("SELECT key FROM dfs.tmp.testview LIMIT 1"); - result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - expected = "key=1"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - statement.executeQuery("drop view dfs.tmp.testview").close(); - - statement.close(); - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - } - - @Test - public void testViewWithPartialSchemaIdentifier() throws Exception{ - JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { - public Void apply(Connection connection) { - try { - Statement statement = connection.createStatement(); - - // change default schema - statement.executeQuery("USE dfs"); - - // create a view with partial schema identifier - ResultSet resultSet = statement.executeQuery("CREATE VIEW tmp.testview AS SELECT * FROM hive.kv"); - String result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - String expected = "ok=true; summary=View 'testview' created successfully in 'dfs.tmp' schema"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - // query from view - resultSet = statement.executeQuery("SELECT key FROM tmp.testview LIMIT 1"); - result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - expected = "key=1"; - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - // change the default schema and query - statement.executeQuery("USE dfs.tmp"); - resultSet = statement.executeQuery("SELECT key FROM testview LIMIT 1"); - result = JdbcAssert.toString(resultSet).trim(); - resultSet.close(); - assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), - expected.equals(result)); - - statement.executeQuery("drop view tmp.testview").close(); - - statement.close(); - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); - } - - @Test public void testCaseWithNoElse() throws Exception { JdbcAssert.withNoDefaultSchema() .sql("SELECT employee_id, CASE WHEN employee_id < 100 THEN first_name END from cp.`employee.json` " + http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0c3bad98/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestViews.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestViews.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestViews.java new file mode 100644 index 0000000..6591752 --- /dev/null +++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestViews.java @@ -0,0 +1,385 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.drill.jdbc.test; + +import com.google.common.base.Function; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; + +import static org.junit.Assert.assertTrue; + +/** Contains tests for creating/droping and using views in Drill. */ +public class TestViews extends TestJdbcQuery { + + /** Helper test method for view tests */ + private void testViewHelper(final String viewCreate, final String viewName, + final String viewQuery, final String queryResult) throws Exception{ + JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { + public Void apply(Connection connection) { + try { + Statement statement = connection.createStatement(); + + // change default schema + statement.executeQuery("USE dfs.tmp"); + + // create view + ResultSet resultSet = statement.executeQuery(viewCreate); + String result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + String viewCreateResult = "ok=true; summary=View '" + viewName + "' created successfully in 'dfs.tmp' schema"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, viewCreateResult), + viewCreateResult.equals(result)); + + // query from view + resultSet = statement.executeQuery(viewQuery); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, queryResult), + queryResult.equals(result)); + + statement.executeQuery("drop view " + viewName).close(); + + statement.close(); + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }); + } + + @Test + public void testView1() throws Exception{ + testViewHelper( + "CREATE VIEW testview1 AS SELECT * FROM cp.`region.json`", + "testview1", + "SELECT * FROM testview1 LIMIT 1", + "region_id=0; sales_city=None; sales_state_province=None; sales_district=No District; " + + "sales_region=No Region; sales_country=No Country; sales_district_id=0"); + } + + @Test + public void testView2() throws Exception{ + testViewHelper( + "CREATE VIEW testview2 AS SELECT region_id, sales_city FROM cp.`region.json`", + "testview2", + "SELECT * FROM testview2 LIMIT 2", + "region_id=0; sales_city=None\nregion_id=1; sales_city=San Francisco"); + } + + @Test + public void testView3() throws Exception{ + testViewHelper( + "CREATE VIEW testview3(regionid, salescity) AS SELECT region_id, sales_city FROM cp.`region.json`", + "testview3", + "SELECT * FROM testview3 LIMIT 2", + "regionid=0; salescity=None\nregionid=1; salescity=San Francisco"); + } + + @Test + @Ignore // See DRILL-595 - can't project columns from inner query. + public void testView4() throws Exception{ + testViewHelper( + "CREATE VIEW testview1 AS SELECT * FROM cp.`region.json`", + "testview1", + "SELECT region_id, sales_city FROM testview1 LIMIT 2", + ""); + } + + @Test + public void testView5() throws Exception{ + testViewHelper( + "CREATE VIEW testview2 AS SELECT region_id, sales_city FROM cp.`region.json`", + "testview2", + "SELECT region_id, sales_city FROM testview2 LIMIT 2", + "region_id=0; sales_city=None\nregion_id=1; sales_city=San Francisco"); + } + + @Test + public void testView6() throws Exception{ + testViewHelper( + "CREATE VIEW testview2 AS SELECT region_id, sales_city FROM cp.`region.json`", + "testview2", + "SELECT sales_city FROM testview2 LIMIT 2", + "sales_city=None\nsales_city=San Francisco"); + } + + @Test + public void testView7() throws Exception{ + testViewHelper( + "CREATE VIEW testview3(regionid, salescity) AS SELECT region_id, sales_city FROM cp.`region.json` LIMIT 2", + "testview3", + "SELECT regionid, salescity FROM testview3", + "regionid=0; salescity=None\nregionid=1; salescity=San Francisco"); + } + + @Test + public void testView8() throws Exception{ + testViewHelper( + "CREATE VIEW testview3(regionid, salescity) AS " + + "SELECT region_id, sales_city FROM cp.`region.json` ORDER BY region_id DESC", + "testview3", + "SELECT regionid FROM testview3 LIMIT 2", + "regionid=109\nregionid=108"); + } + + @Test + @Ignore // Query on testview2 fails with CannotPlanException. Seems to be an issue with Union. + public void testView9() throws Exception{ + testViewHelper( + "CREATE VIEW testview2 AS " + + "SELECT region_id FROM cp.`region.json` " + + "UNION " + + "SELECT employee_id FROM cp.`employee.json`", + "testview2", + "SELECT sales_city FROM testview2 LIMIT 2", + "sales_city=None\nsales_city=San Francisco"); + } + + @Test + public void testViewOnHiveTable1() throws Exception{ + testViewHelper( + "CREATE VIEW hiveview AS SELECT * FROM hive.kv", + "hiveview", + "SELECT * FROM hiveview LIMIT 1", + "key=1; value= key_1"); + } + + @Test + public void testViewOnHiveTable2() throws Exception{ + testViewHelper( + "CREATE VIEW hiveview AS SELECT * FROM hive.kv", + "hiveview", + "SELECT key, `value` FROM hiveview LIMIT 1", + "key=1; value= key_1"); + } + + @Test + public void testViewOnHiveTable3() throws Exception{ + testViewHelper( + "CREATE VIEW hiveview AS SELECT * FROM hive.kv", + "hiveview", + "SELECT `value` FROM hiveview LIMIT 1", + "value= key_1"); + } + + @Test + public void testViewOnHiveTable4() throws Exception{ + testViewHelper( + "CREATE VIEW hiveview AS SELECT key, `value` FROM hive.kv", + "hiveview", + "SELECT * FROM hiveview LIMIT 1", + "key=1; value= key_1"); + } + + @Test + public void testViewOnHiveTable5() throws Exception{ + testViewHelper( + "CREATE VIEW hiveview AS SELECT key, `value` FROM hive.kv", + "hiveview", + "SELECT key, `value` FROM hiveview LIMIT 1", + "key=1; value= key_1"); + } + + @Test + public void testDropView() throws Exception{ + JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { + public Void apply(Connection connection) { + try { + Statement statement = connection.createStatement(); + + // change default schema + statement.executeQuery("USE dfs.tmp"); + + // create view + statement.executeQuery( + "CREATE VIEW testview3(regionid) AS SELECT region_id FROM cp.`region.json`"); + + // query from view + ResultSet resultSet = statement.executeQuery("SELECT regionid FROM testview3 LIMIT 1"); + String result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + String expected = "regionid=0"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + resultSet = statement.executeQuery("DROP VIEW testview3"); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + expected = "ok=true; summary=View 'testview3' deleted successfully from 'dfs.tmp' schema"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + statement.close(); + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }); + } + + @Test + public void testInfoSchemaWithView() throws Exception{ + JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { + public Void apply(Connection connection) { + try { + Statement statement = connection.createStatement(); + + // change default schema + statement.executeQuery("USE dfs.tmp"); + + // create view + statement.executeQuery( + "CREATE VIEW testview3 AS SELECT * FROM hive.kv"); + + // show tables on view + ResultSet resultSet = statement.executeQuery("SHOW TABLES like 'testview3'"); + String result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + String expected = "TABLE_SCHEMA=dfs.tmp; TABLE_NAME=testview3"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + // test record in INFORMATION_SCHEMA.VIEWS + resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.VIEWS " + + "WHERE TABLE_NAME = 'testview3'"); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + expected = "TABLE_CATALOG=DRILL; TABLE_SCHEMA=dfs.tmp; TABLE_NAME=testview3; VIEW_DEFINITION=SELECT *\nFROM `hive`.`kv`"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + // test record in INFORMATION_SCHEMA.TABLES + resultSet = statement.executeQuery("SELECT * FROM INFORMATION_SCHEMA.`TABLES` " + + "WHERE TABLE_NAME = 'testview3'"); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + expected = "TABLE_CATALOG=DRILL; TABLE_SCHEMA=dfs.tmp; TABLE_NAME=testview3; TABLE_TYPE=VIEW"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + // describe a view + resultSet = statement.executeQuery("DESCRIBE dfs.tmp.testview3"); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + expected = + "COLUMN_NAME=key; DATA_TYPE=INTEGER; IS_NULLABLE=NO\n" + + "COLUMN_NAME=value; DATA_TYPE=VARCHAR; IS_NULLABLE=NO"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + statement.executeQuery("drop view testview3").close(); + + statement.close(); + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }); + } + + @Test + public void testViewWithFullSchemaIdentifier() throws Exception{ + JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { + public Void apply(Connection connection) { + try { + Statement statement = connection.createStatement(); + + // change default schema + statement.executeQuery("USE cp"); + + // create a view with full schema identifier + ResultSet resultSet = statement.executeQuery("CREATE VIEW dfs.tmp.testview AS SELECT * FROM hive.kv"); + String result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + String expected = "ok=true; summary=View 'testview' created successfully in 'dfs.tmp' schema"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + // query from view + resultSet = statement.executeQuery("SELECT key FROM dfs.tmp.testview LIMIT 1"); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + expected = "key=1"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + statement.executeQuery("drop view dfs.tmp.testview").close(); + + statement.executeQuery("drop view dfs.tmp.testview").close(); + + statement.close(); + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }); + } + + @Test + public void testViewWithPartialSchemaIdentifier() throws Exception{ + JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() { + public Void apply(Connection connection) { + try { + Statement statement = connection.createStatement(); + + // change default schema + statement.executeQuery("USE dfs"); + + // create a view with partial schema identifier + ResultSet resultSet = statement.executeQuery("CREATE VIEW tmp.testview AS SELECT * FROM hive.kv"); + String result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + String expected = "ok=true; summary=View 'testview' created successfully in 'dfs.tmp' schema"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + // query from view + resultSet = statement.executeQuery("SELECT key FROM tmp.testview LIMIT 1"); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + expected = "key=1"; + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + // change the default schema and query + statement.executeQuery("USE dfs.tmp"); + resultSet = statement.executeQuery("SELECT key FROM testview LIMIT 1"); + result = JdbcAssert.toString(resultSet).trim(); + resultSet.close(); + assertTrue(String.format("Generated string:\n%s\ndoes not match:\n%s", result, expected), + expected.equals(result)); + + statement.executeQuery("drop view tmp.testview").close(); + + statement.close(); + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }); + } +}
