>From Hussain Towaileb <[email protected]>:

Hussain Towaileb has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20953?usp=email )


Change subject: [NO ISSUE][EXT]: Make catalog methods extendable
......................................................................

[NO ISSUE][EXT]: Make catalog methods extendable

Ext-ref: MB-70760
Change-Id: Ie4328e05b951500da6272bb6a013fd3a7a0dcd19
---
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
4 files changed, 31 insertions(+), 15 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/53/20953/1

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index de65cb0..807425e 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -1073,7 +1073,7 @@
                     ExternalDataUtils.normalize(properties);
                     ExternalDataUtils.validate(properties);
                     ExternalDataUtils.validateType(properties, (ARecordType) 
itemType);
-                    validateIfIcebergTable(metadataProvider, properties, 
mdTxnCtx, sourceLoc);
+                    validateIfIcebergTable(metadataProvider, 
requestParameters, properties, mdTxnCtx, sourceLoc);
                     validateExternalDatasetProperties(externalDetails, 
properties, dd.getSourceLocation(), mdTxnCtx,
                             appCtx, metadataProvider);
                     datasetDetails = new 
ExternalDatasetDetails(externalDetails.getAdapter(), properties, new Date(),
@@ -1186,8 +1186,9 @@
         return Optional.of(dataset);
     }

-    protected void validateIfIcebergTable(MetadataProvider metadataProvider, 
Map<String, String> properties,
-            MetadataTransactionContext mdTxnCtx, SourceLocation srcLoc) throws 
AlgebricksException {
+    protected void validateIfIcebergTable(MetadataProvider metadataProvider, 
IRequestParameters requestParameters,
+            Map<String, String> properties, MetadataTransactionContext 
mdTxnCtx, SourceLocation srcLoc)
+            throws AlgebricksException {
         IcebergStatementValidationHelper.validateIfIcebergTable(appCtx, 
metadataProvider, mdTxnCtx, properties, srcLoc);
     }

@@ -5885,8 +5886,8 @@

     protected void handleCatalogStatement(Statement.Kind kind, 
MetadataProvider metadataProvider, Statement stmt,
             IHyracksClientConnection hcc, IRequestParameters 
requestParameters) throws Exception {
-        IcebergCatalogStatementHandler statement = new 
IcebergCatalogStatementHandler(kind, metadataProvider, stmt,
-                Creator.DEFAULT_CREATOR, sessionConfig, lockUtil, lockManager);
+        IcebergCatalogStatementHandler statement = new 
IcebergCatalogStatementHandler(appCtx, kind, metadataProvider,
+                stmt, Creator.DEFAULT_CREATOR, sessionConfig, lockUtil, 
lockManager, requestParameters);
         statement.handle();
     }

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java
index e0e9d02..03454ef 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/handlers/IcebergCatalogStatementHandler.java
@@ -19,12 +19,14 @@
 package org.apache.asterix.app.translator.handlers;

 import static org.apache.asterix.app.translator.QueryTranslator.abort;
+import static org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_CATALOG;

 import java.util.HashMap;
 import java.util.Map;

 import org.apache.asterix.common.api.IMetadataLockManager;
 import org.apache.asterix.common.config.CatalogConfig;
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.metadata.IMetadataLockUtil;
@@ -47,22 +49,26 @@
 import org.apache.asterix.metadata.entities.IcebergCatalogDetails;
 import org.apache.asterix.metadata.utils.Creator;
 import org.apache.asterix.object.base.AdmObjectNode;
+import org.apache.asterix.translator.IRequestParameters;
 import org.apache.asterix.translator.SessionConfig;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;

 public class IcebergCatalogStatementHandler {

+    protected final ICcApplicationContext appCtx;
+    protected final MetadataProvider metadataProvider;
     private final Statement.Kind kind;
-    private final MetadataProvider metadataProvider;
     private final CatalogStatement statement;
     private final Creator creator;
     private final SessionConfig sessionConfig;
     private final IMetadataLockUtil lockUtil;
     private final IMetadataLockManager lockManager;
+    protected IRequestParameters requestParameters;

-    public IcebergCatalogStatementHandler(Statement.Kind kind, 
MetadataProvider metadataProvider, Statement statement,
-            Creator creator, SessionConfig sessionConfig, IMetadataLockUtil 
lockUtil,
-            IMetadataLockManager lockManager) {
+    public IcebergCatalogStatementHandler(ICcApplicationContext ccAppCtx, 
Statement.Kind kind,
+            MetadataProvider metadataProvider, Statement statement, Creator 
creator, SessionConfig sessionConfig,
+            IMetadataLockUtil lockUtil, IMetadataLockManager lockManager, 
IRequestParameters requestParameters) {
+        this.appCtx = ccAppCtx;
         this.kind = kind;
         this.metadataProvider = metadataProvider;
         this.statement = (CatalogStatement) statement;
@@ -70,6 +76,7 @@
         this.sessionConfig = sessionConfig;
         this.lockUtil = lockUtil;
         this.lockManager = lockManager;
+        this.requestParameters = requestParameters;
     }

     public void handle() throws Exception {
@@ -99,7 +106,7 @@
         }
     }

-    private boolean doHandleCreate(CatalogCreateStatement statement) throws 
Exception {
+    protected boolean doHandleCreate(CatalogCreateStatement statement) throws 
Exception {
         MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         try {
@@ -137,17 +144,26 @@
         }
         lockUtil.dropCatalogBegin(lockManager, metadataProvider.getLocks(), 
catalogName);
         try {
-            doDropCatalog(dropStatement);
+            doHandleDrop(dropStatement);
         } finally {
             metadataProvider.getLocks().unlock();
         }
     }

-    private boolean doDropCatalog(CatalogDropStatement statement) throws 
Exception {
+    protected boolean doHandleDrop(CatalogDropStatement statement) throws 
Exception {
         MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         try {
             String catalogName = statement.getCatalogName();
+            Catalog catalog = MetadataManager.INSTANCE.getCatalog(mdTxnCtx, 
catalogName);
+            if (catalog == null) {
+                if (statement.getIfExists()) {
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    return false;
+                } else {
+                    throw CompilationException.create(UNKNOWN_CATALOG, 
catalogName);
+                }
+            }
             MetadataManager.INSTANCE.dropCatalog(mdTxnCtx, catalogName);
             beforeDropTxnCommit(metadataProvider, creator, 
EntityDetails.newCatalog(catalogName));
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj 
b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 23105fd..b08750c 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -285,7 +285,7 @@
     private static final String CONFIG = "CONFIG";
     private static final String STATISTICS = "STATISTICS";
     private static final String ADVISE = "ADVISE";
-    private static final String CATALOG = "CATALOG";
+    protected static final String CATALOG = "CATALOG";
     private static final String SOURCE = "SOURCE";
     private static final String CASCADE = "CASCADE";

diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index 6060d94..fa7db2f 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -3198,8 +3198,7 @@
         try {
             Catalog catalog = getCatalog(txnId, catalogName);
             if (catalog == null) {
-                throw new 
CompilationException(org.apache.asterix.common.exceptions.ErrorCode.UNKNOWN_CATALOG,
-                        catalogName);
+                throw CompilationException.create(UNKNOWN_CATALOG, 
catalogName);
             }
             confirmCatalogIsUnusedByCollections(txnId, catalogName);


--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20953?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: lumina
Gerrit-Change-Id: Ie4328e05b951500da6272bb6a013fd3a7a0dcd19
Gerrit-Change-Number: 20953
Gerrit-PatchSet: 1
Gerrit-Owner: Hussain Towaileb <[email protected]>

Reply via email to