diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 5b32f56..ea6d257 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -812,16 +812,25 @@ private void analyzeCreateDatabase(ASTNode ast) throws SemanticException { } } - CreateDatabaseDesc createDatabaseDesc = - new CreateDatabaseDesc(dbName, dbComment, dbLocation, ifNotExists); - if (dbProps != null) { - createDatabaseDesc.setDatabaseProperties(dbProps); - } - Database database = new Database(dbName, dbComment, dbLocation, dbProps); - outputs.add(new WriteEntity(database, WriteEntity.WriteType.DDL_NO_LOCK)); + if (ifNotExists) { + try { + if (!db.databaseExists(dbName)) { + CreateDatabaseDesc createDatabaseDesc = new CreateDatabaseDesc(dbName, dbComment, + dbLocation, ifNotExists); + if (dbProps != null) { + createDatabaseDesc.setDatabaseProperties(dbProps); + } + Database database = new Database(dbName, dbComment, dbLocation, dbProps); + outputs.add(new WriteEntity(database, WriteEntity.WriteType.DDL_NO_LOCK)); - rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), - createDatabaseDesc), conf)); + rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), createDatabaseDesc), + conf)); + } + } catch (HiveException e) { + throw new IllegalStateException("Unxpected Exception thrown: " + e.getMessage(), e); + } + } + } private void analyzeDropDatabase(ASTNode ast) throws SemanticException { diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 20d9649..a0f20d8 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -11823,6 +11823,19 @@ private ASTNode analyzeCreateView(ASTNode ast, QB qb) throw new SemanticException("Can't combine IF NOT EXISTS and OR REPLACE."); } + // check for existence of view + if (ifNotExists) { + try { + Table view = getTable(qualTabName, false); + if (view != null) { + return null; + } + } catch (HiveException e) { + // should not occur since second parameter to getTableWithQN is false + throw new IllegalStateException("Unxpected Exception thrown: " + e.getMessage(), e); + } + } + if (ast.getToken().getType() == HiveParser.TOK_ALTERVIEW && ast.getChild(1).getType() == HiveParser.TOK_QUERY) { isAlterViewAs = true;