>From Ali Alsuliman <[email protected]>: Ali Alsuliman has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17764 )
Change subject: [ASTERIXDB-3259][SQLPP] Add syntax for DATABASE creation/drop ...................................................................... [ASTERIXDB-3259][SQLPP] Add syntax for DATABASE creation/drop - user model changes: yes - storage format changes: no - interface changes: yes Details: Add syntax for DATABASE creation/drop: - CREATE DATABASE ident IF NOT EXISTS; - DROP DATABASE ident IF EXISTS; Change-Id: Ie19364fb502b5478465e21b564d8387ff0f71694 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17764 Reviewed-by: Ali Alsuliman <[email protected]> Reviewed-by: Wail Alkowaileet <[email protected]> Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> --- M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java A asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatabaseDropStatement.java A asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDatabaseStatement.java M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java 7 files changed, 228 insertions(+), 0 deletions(-) Approvals: Wail Alkowaileet: Looks good to me, approved Ali Alsuliman: Looks good to me, but someone else must approve Jenkins: Verified; Verified Objections: Anon. E. Moose #1000171: Violations found diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java index 1654118..404360c 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java @@ -66,6 +66,7 @@ enum Kind { DATASET_DECL, DATAVERSE_DECL, + DATABASE_DROP, DATAVERSE_DROP, DATASET_DROP, DELETE, @@ -82,6 +83,7 @@ TYPE_DECL, TYPE_DROP, CREATE_INDEX, + CREATE_DATABASE, CREATE_DATAVERSE, CREATE_VIEW, CREATE_FULL_TEXT_FILTER, diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDatabaseStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDatabaseStatement.java new file mode 100644 index 0000000..c0cd1e8 --- /dev/null +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDatabaseStatement.java @@ -0,0 +1,58 @@ +/* + * 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.asterix.lang.common.statement; + +import org.apache.asterix.common.exceptions.CompilationException; +import org.apache.asterix.lang.common.base.AbstractStatement; +import org.apache.asterix.lang.common.struct.Identifier; +import org.apache.asterix.lang.common.visitor.base.ILangVisitor; + +public class CreateDatabaseStatement extends AbstractStatement { + + private final Identifier databaseName; + private final boolean ifNotExists; + + public CreateDatabaseStatement(Identifier databaseName, boolean ifNotExists) { + this.databaseName = databaseName; + this.ifNotExists = ifNotExists; + } + + public Identifier getDatabaseName() { + return databaseName; + } + + public boolean ifNotExists() { + return ifNotExists; + } + + @Override + public Kind getKind() { + return Kind.CREATE_DATABASE; + } + + @Override + public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws CompilationException { + return visitor.visit(this, arg); + } + + @Override + public byte getCategory() { + return Category.DDL; + } +} diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatabaseDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatabaseDropStatement.java new file mode 100644 index 0000000..41530e9 --- /dev/null +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatabaseDropStatement.java @@ -0,0 +1,58 @@ +/* + * 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.asterix.lang.common.statement; + +import org.apache.asterix.common.exceptions.CompilationException; +import org.apache.asterix.lang.common.base.AbstractStatement; +import org.apache.asterix.lang.common.struct.Identifier; +import org.apache.asterix.lang.common.visitor.base.ILangVisitor; + +public class DatabaseDropStatement extends AbstractStatement { + + private final Identifier databaseName; + private final boolean ifExists; + + public DatabaseDropStatement(Identifier databaseName, boolean ifExists) { + this.databaseName = databaseName; + this.ifExists = ifExists; + } + + public Identifier getDatabaseName() { + return databaseName; + } + + public boolean ifExists() { + return ifExists; + } + + @Override + public Kind getKind() { + return Kind.DATABASE_DROP; + } + + @Override + public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws CompilationException { + return visitor.visit(this, arg); + } + + @Override + public byte getCategory() { + return Category.DDL; + } +} diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java index 23455f1..2bfcd23 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java @@ -71,6 +71,7 @@ import org.apache.asterix.lang.common.statement.ConnectFeedStatement; import org.apache.asterix.lang.common.statement.CopyStatement; import org.apache.asterix.lang.common.statement.CreateAdapterStatement; +import org.apache.asterix.lang.common.statement.CreateDatabaseStatement; import org.apache.asterix.lang.common.statement.CreateDataverseStatement; import org.apache.asterix.lang.common.statement.CreateFeedPolicyStatement; import org.apache.asterix.lang.common.statement.CreateFeedStatement; @@ -81,6 +82,7 @@ import org.apache.asterix.lang.common.statement.CreateLibraryStatement; import org.apache.asterix.lang.common.statement.CreateSynonymStatement; import org.apache.asterix.lang.common.statement.CreateViewStatement; +import org.apache.asterix.lang.common.statement.DatabaseDropStatement; import org.apache.asterix.lang.common.statement.DatasetDecl; import org.apache.asterix.lang.common.statement.DataverseDecl; import org.apache.asterix.lang.common.statement.DataverseDropStatement; @@ -713,6 +715,13 @@ } @Override + public Void visit(CreateDatabaseStatement cds, Integer step) throws CompilationException { + out.println(skip(step) + "create database " + normalize(cds.getDatabaseName().getValue()) + + generateIfNotExists(cds.ifNotExists()) + SEMICOLON); + return null; + } + + @Override public Void visit(CreateDataverseStatement del, Integer step) throws CompilationException { out.print(CREATE + dataverseSymbol); out.print(generateDataverseName(del.getDataverseName())); @@ -759,6 +768,13 @@ } @Override + public Void visit(DatabaseDropStatement dds, Integer step) throws CompilationException { + out.println(skip(step) + "drop database " + normalize(dds.getDatabaseName().getValue()) + + generateIfExists(dds.ifExists()) + SEMICOLON); + return null; + } + + @Override public Void visit(DataverseDropStatement del, Integer step) throws CompilationException { out.print(skip(step) + "drop " + dataverseSymbol); out.print(generateDataverseName(del.getDataverseName())); diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java index accf476..6c0eea9 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java @@ -31,6 +31,7 @@ import org.apache.asterix.lang.common.statement.ConnectFeedStatement; import org.apache.asterix.lang.common.statement.CopyStatement; import org.apache.asterix.lang.common.statement.CreateAdapterStatement; +import org.apache.asterix.lang.common.statement.CreateDatabaseStatement; import org.apache.asterix.lang.common.statement.CreateDataverseStatement; import org.apache.asterix.lang.common.statement.CreateFeedPolicyStatement; import org.apache.asterix.lang.common.statement.CreateFeedStatement; @@ -41,6 +42,7 @@ import org.apache.asterix.lang.common.statement.CreateLibraryStatement; import org.apache.asterix.lang.common.statement.CreateSynonymStatement; import org.apache.asterix.lang.common.statement.CreateViewStatement; +import org.apache.asterix.lang.common.statement.DatabaseDropStatement; import org.apache.asterix.lang.common.statement.DatasetDecl; import org.apache.asterix.lang.common.statement.DataverseDecl; import org.apache.asterix.lang.common.statement.DataverseDropStatement; @@ -168,6 +170,11 @@ } @Override + public R visit(CreateDatabaseStatement cds, T arg) throws CompilationException { + return null; + } + + @Override public R visit(CreateDataverseStatement del, T arg) throws CompilationException { return null; } @@ -183,6 +190,11 @@ } @Override + public R visit(DatabaseDropStatement dds, T arg) throws CompilationException { + return null; + } + + @Override public R visit(DataverseDropStatement del, T arg) throws CompilationException { return null; } diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java index 9ad247c..4f70cb0 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java @@ -49,6 +49,7 @@ import org.apache.asterix.lang.common.statement.ConnectFeedStatement; import org.apache.asterix.lang.common.statement.CopyStatement; import org.apache.asterix.lang.common.statement.CreateAdapterStatement; +import org.apache.asterix.lang.common.statement.CreateDatabaseStatement; import org.apache.asterix.lang.common.statement.CreateDataverseStatement; import org.apache.asterix.lang.common.statement.CreateFeedPolicyStatement; import org.apache.asterix.lang.common.statement.CreateFeedStatement; @@ -59,6 +60,7 @@ import org.apache.asterix.lang.common.statement.CreateLibraryStatement; import org.apache.asterix.lang.common.statement.CreateSynonymStatement; import org.apache.asterix.lang.common.statement.CreateViewStatement; +import org.apache.asterix.lang.common.statement.DatabaseDropStatement; import org.apache.asterix.lang.common.statement.DatasetDecl; import org.apache.asterix.lang.common.statement.DataverseDecl; import org.apache.asterix.lang.common.statement.DataverseDropStatement; @@ -154,6 +156,8 @@ R visit(CreateIndexStatement cis, T arg) throws CompilationException; + R visit(CreateDatabaseStatement cds, T arg) throws CompilationException; + R visit(CreateDataverseStatement del, T arg) throws CompilationException; R visit(CreateFullTextFilterStatement cis, T arg) throws CompilationException; @@ -168,6 +172,8 @@ R visit(NodeGroupDropStatement del, T arg) throws CompilationException; + R visit(DatabaseDropStatement dds, T arg) throws CompilationException; + R visit(DataverseDropStatement del, T arg) throws CompilationException; R visit(TypeDropStatement del, T arg) throws CompilationException; diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj index a7dc2d5..df1d461 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj +++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj @@ -133,6 +133,7 @@ import org.apache.asterix.lang.common.statement.StartFeedStatement; import org.apache.asterix.lang.common.statement.StopFeedStatement; import org.apache.asterix.lang.common.statement.CreateAdapterStatement; +import org.apache.asterix.lang.common.statement.CreateDatabaseStatement; import org.apache.asterix.lang.common.statement.CreateDataverseStatement; import org.apache.asterix.lang.common.statement.CreateFeedPolicyStatement; import org.apache.asterix.lang.common.statement.CreateFeedStatement; @@ -142,6 +143,7 @@ import org.apache.asterix.lang.common.statement.CreateFullTextFilterStatement; import org.apache.asterix.lang.common.statement.CreateFullTextConfigStatement; import org.apache.asterix.lang.common.statement.CreateViewStatement; +import org.apache.asterix.lang.common.statement.DatabaseDropStatement; import org.apache.asterix.lang.common.statement.DatasetDecl; import org.apache.asterix.lang.common.statement.DataverseDecl; import org.apache.asterix.lang.common.statement.DataverseDropStatement; @@ -974,6 +976,7 @@ | stmt = CreateNodegroupStatement(startToken) | stmt = CreateDatasetStatement(startToken) | stmt = CreateIndexStatement(startToken) + | stmt = CreateDatabaseStatement(startToken) | stmt = CreateDataverseStatement(startToken) | stmt = CreateFunctionStatement(startToken, false) | stmt = CreateAdapterStatement(startToken) @@ -1557,6 +1560,30 @@ } } +CreateDatabaseStatement CreateDatabaseStatement(Token startStmtToken) throws ParseException : +{ + CreateDatabaseStatement stmt = null; +} +{ + <DATABASE> stmt = DatabaseSpecification(startStmtToken) + { + return stmt; + } +} + +CreateDatabaseStatement DatabaseSpecification(Token startStmtToken) throws ParseException : +{ + String dbName = null; + boolean ifNotExists = false; +} +{ + dbName = Identifier() ifNotExists = IfNotExists() + { + CreateDatabaseStatement stmt = new CreateDatabaseStatement(new Identifier(dbName), ifNotExists); + return addSourceLocation(stmt, startStmtToken); + } +} + CreateDataverseStatement CreateDataverseStatement(Token startStmtToken) throws ParseException : { CreateDataverseStatement stmt = null; @@ -2253,6 +2280,7 @@ | stmt = DropIndexStatement(startToken) | stmt = DropNodeGroupStatement(startToken) | stmt = DropTypeStatement(startToken) + | stmt = DropDatabaseStatement(startToken) | stmt = DropDataverseStatement(startToken) | stmt = DropAdapterStatement(startToken) | stmt = DropFunctionStatement(startToken) @@ -2431,6 +2459,30 @@ } } +DatabaseDropStatement DropDatabaseStatement(Token startStmtToken) throws ParseException: +{ + DatabaseDropStatement stmt = null; +} +{ + <DATABASE> stmt = DropDatabaseSpecification(startStmtToken) + { + return stmt; + } +} + +DatabaseDropStatement DropDatabaseSpecification(Token startStmtToken) throws ParseException: +{ + String dbName = null; + boolean ifExists = false; +} +{ + dbName = Identifier() ifExists = IfExists() + { + DatabaseDropStatement stmt = new DatabaseDropStatement(new Identifier(dbName), ifExists); + return addSourceLocation(stmt, startStmtToken); + } +} + DataverseDropStatement DropDataverseStatement(Token startStmtToken) throws ParseException: { DataverseDropStatement stmt = null; @@ -5650,6 +5702,7 @@ | <CORRELATE : "correlate"> | <DATASET : "dataset"> | <COLLECTION : "collection"> + | <DATABASE : "database"> | <DATAVERSE : "dataverse"> | <DECLARE : "declare"> | <DEFINITION : "definition"> -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17764 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: Ie19364fb502b5478465e21b564d8387ff0f71694 Gerrit-Change-Number: 17764 Gerrit-PatchSet: 2 Gerrit-Owner: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Hussain Towaileb <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Peeyush Gupta <[email protected]> Gerrit-Reviewer: Wail Alkowaileet <[email protected]> Gerrit-CC: Till Westmann <[email protected]> Gerrit-MessageType: merged
