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 @@ +FAILED: Error in semantic analysis: org.apache.hadoop.hive.ql.parse.SemanticException: ERROR: The database table_in_database_creation_not_exist does 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: ERROR: The database table_in_database_creation_not_exist does 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 @@ +FAILED: Error in semantic analysis: org.apache.hadoop.hive.ql.parse.SemanticException: ERROR: The database table_in_database_creation_not_exist does not exist. 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: ERROR: The database table_in_database_creation_not_exist does not exist. Index: ql/src/test/results/clientpositive/input45.q.out =================================================================== --- ql/src/test/results/clientpositive/input45.q.out (revision 0) +++ ql/src/test/results/clientpositive/input45.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: 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/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/clientpositive/input45.q =================================================================== --- ql/src/test/queries/clientpositive/input45.q (revision 0) +++ ql/src/test/queries/clientpositive/input45.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/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1183405) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -7664,6 +7664,15 @@ final int CTAS = 2; // CREATE TABLE AS SELECT ... (CTAS) int command_type = CREATE_TABLE; + try { + if(tableName.contains(".") && !db.databaseExists(tableName.split("\\.")[0])){ + throw new SemanticException("ERROR: The database " + tableName.split("\\.")[0] + + " does not exist."); + } + } catch (HiveException e) { + throw new SemanticException(e); + } + RowFormatParams rowFormatParams = new RowFormatParams(); StorageFormat storageFormat = new StorageFormat(); AnalyzeCreateCommonVars shared = new AnalyzeCreateCommonVars();