Index: ql/src/test/queries/clientnegative/create_table_failure1.q =================================================================== --- ql/src/test/queries/clientnegative/create_table_failure1.q (revision 0) +++ ql/src/test/queries/clientnegative/create_table_failure1.q (revision 0) @@ -0,0 +1 @@ +create table table_in_database_creation_not_exist.test as select * from src limit 1; \ No newline at end of file Index: ql/src/test/queries/clientnegative/create_table_failure2.q =================================================================== --- ql/src/test/queries/clientnegative/create_table_failure2.q (revision 0) +++ ql/src/test/queries/clientnegative/create_table_failure2.q (revision 0) @@ -0,0 +1 @@ +create table `table_in_database_creation_not_exist.test` as select * from src limit 1; \ No newline at end of file Index: ql/src/test/queries/clientnegative/create_table_failure3.q =================================================================== --- ql/src/test/queries/clientnegative/create_table_failure3.q (revision 0) +++ ql/src/test/queries/clientnegative/create_table_failure3.q (revision 0) @@ -0,0 +1 @@ +create table table_in_database_creation_not_exist.test (a string); \ No newline at end of file Index: ql/src/test/queries/clientnegative/create_table_failure4.q =================================================================== --- ql/src/test/queries/clientnegative/create_table_failure4.q (revision 0) +++ ql/src/test/queries/clientnegative/create_table_failure4.q (revision 0) @@ -0,0 +1 @@ +create table `table_in_database_creation_not_exist.test` (a string); \ No newline at end of file Index: ql/src/test/results/clientnegative/create_table_failure1.q.out =================================================================== --- ql/src/test/results/clientnegative/create_table_failure1.q.out (revision 0) +++ ql/src/test/results/clientnegative/create_table_failure1.q.out (revision 0) @@ -0,0 +1 @@ +FAILED: Error in semantic analysis: org.apache.hadoop.hive.ql.parse.SemanticException: Database does not exist: table_in_database_creation_not_exist Index: ql/src/test/results/clientnegative/create_table_failure2.q.out =================================================================== --- ql/src/test/results/clientnegative/create_table_failure2.q.out (revision 0) +++ ql/src/test/results/clientnegative/create_table_failure2.q.out (revision 0) @@ -0,0 +1 @@ +FAILED: Error in semantic analysis: org.apache.hadoop.hive.ql.parse.SemanticException: Database does not exist: table_in_database_creation_not_exist Index: ql/src/test/results/clientnegative/create_table_failure3.q.out =================================================================== --- ql/src/test/results/clientnegative/create_table_failure3.q.out (revision 0) +++ ql/src/test/results/clientnegative/create_table_failure3.q.out (revision 0) @@ -0,0 +1,4 @@ +PREHOOK: query: create table table_in_database_creation_not_exist.test (a string) +PREHOOK: type: CREATETABLE +FAILED: Error in metadata: InvalidObjectException(message:There is no database named table_in_database_creation_not_exist) +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask Index: ql/src/test/results/clientnegative/create_table_failure4.q.out =================================================================== --- ql/src/test/results/clientnegative/create_table_failure4.q.out (revision 0) +++ ql/src/test/results/clientnegative/create_table_failure4.q.out (revision 0) @@ -0,0 +1,4 @@ +PREHOOK: query: create table `table_in_database_creation_not_exist.test` (a string) +PREHOOK: type: CREATETABLE +FAILED: Error in metadata: InvalidObjectException(message:There is no database named table_in_database_creation_not_exist) +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask Index: ql/src/test/queries/clientpositive/input46.q =================================================================== --- ql/src/test/queries/clientpositive/input46.q (revision 0) +++ ql/src/test/queries/clientpositive/input46.q (revision 0) @@ -0,0 +1,6 @@ +create database if not exists table_in_database_creation; +create table table_in_database_creation.test1 as select * from src limit 1; +create table `table_in_database_creation.test2` as select * from src limit 1; +create table table_in_database_creation.test3 (a string); +create table `table_in_database_creation.test4` (a string); +drop database table_in_database_creation cascade; \ No newline at end of file Index: ql/src/test/results/clientpositive/input46.q.out =================================================================== --- ql/src/test/results/clientpositive/input46.q.out (revision 0) +++ ql/src/test/results/clientpositive/input46.q.out (revision 0) @@ -0,0 +1,32 @@ +PREHOOK: query: create database if not exists table_in_database_creation +PREHOOK: type: CREATEDATABASE +POSTHOOK: query: create database if not exists table_in_database_creation +POSTHOOK: type: CREATEDATABASE +PREHOOK: query: create table table_in_database_creation.test1 as select * from src limit 1 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +POSTHOOK: query: create table table_in_database_creation.test1 as select * from src limit 1 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: table_in_database_creation@test1 +PREHOOK: query: create table `table_in_database_creation.test2` as select * from src limit 1 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +POSTHOOK: query: create table `table_in_database_creation.test2` as select * from src limit 1 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: table_in_database_creation@test2 +PREHOOK: query: create table table_in_database_creation.test3 (a string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table table_in_database_creation.test3 (a string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: table_in_database_creation@test3 +PREHOOK: query: create table `table_in_database_creation.test4` (a string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table `table_in_database_creation.test4` (a string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: table_in_database_creation@test4 +PREHOOK: query: drop database table_in_database_creation cascade +PREHOOK: type: DROPDATABASE +POSTHOOK: query: drop database table_in_database_creation cascade +POSTHOOK: type: DROPDATABASE Index: metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (revision 1196082) +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (working copy) @@ -972,6 +972,10 @@ try { ms.openTransaction(); + if(ms.getDatabase(tbl.getDbName()) == null){ + throw new NoSuchObjectException("The database " + tbl.getDbName() + " does not exist"); + } + // get_table checks whether database exists, it should be moved here if (is_table_exists(ms, tbl.getDbName(), tbl.getTableName())) { throw new AlreadyExistsException("Table " + tbl.getTableName() @@ -1044,6 +1048,8 @@ throw e; } catch (InvalidObjectException e) { throw e; + }catch (NoSuchObjectException e) { + throw new InvalidObjectException(e.getMessage()); } catch (Exception e) { assert(e instanceof RuntimeException); throw (RuntimeException)e; Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1196082) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -7840,6 +7840,9 @@ // Verify that the table does not already exist try { Table dumpTable = db.newTable(tableName); + if (null == db.getDatabase(dumpTable.getDbName()) ) { + throw new SemanticException(ErrorMsg.DATABASE_NOT_EXISTS.getMsg(dumpTable.getDbName())); + } if (null != db.getTable(dumpTable.getDbName(), dumpTable.getTableName(), false)) { throw new SemanticException(ErrorMsg.TABLE_ALREADY_EXISTS.getMsg(tableName)); } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java (revision 1196082) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java (working copy) @@ -118,6 +118,7 @@ + "table"), CTAS_MULTI_LOADFILE("CREATE-TABLE-AS-SELECT results in multiple file load"), CTAS_EXTTBL_COEXISTENCE("CREATE-TABLE-AS-SELECT cannot create external table"), + DATABASE_NOT_EXISTS("Database does not exist:"), TABLE_ALREADY_EXISTS("Table already exists:", "42S02"), COLUMN_ALIAS_ALREADY_EXISTS("Column alias already exists:", "42S02"), UDTF_MULTIPLE_EXPR("Only a single expression in the SELECT clause is supported with UDTF's"),