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 9355d25..55811e6 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -812,6 +812,15 @@ private void analyzeCreateDatabase(ASTNode ast) throws SemanticException { } } + if (ifNotExists) { + try { + if (db.databaseExists(dbName)) { + return; + } + } catch (HiveException e) { + throw new IllegalStateException("Unxpected Exception thrown: " + e.getMessage(), e); + } + } CreateDatabaseDesc createDatabaseDesc = new CreateDatabaseDesc(dbName, dbComment, dbLocation, ifNotExists); if (dbProps != null) { 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 2671cb1..c5338bd 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -11854,6 +11854,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;