This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 26ed4a0e7a [ASTERIXDB-3483]: Synonym Owner changes
26ed4a0e7a is described below

commit 26ed4a0e7afb97e16a2a4c53849b042ffac13886
Author: janhavitripurwar <[email protected]>
AuthorDate: Thu Oct 3 16:46:24 2024 +0530

    [ASTERIXDB-3483]: Synonym Owner changes
    
    - user model changes: no
    - storage format changes: no
    - interface changes: yes
    
    Ext-ref: MB-62971
    
    Change-Id: I2ba30fc0adcb7517a329d348105fd0fa7945dca1
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18927
    Integration-Tests: Jenkins <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Tested-by: Ali Alsuliman <[email protected]>
---
 .../asterix/app/translator/QueryTranslator.java    | 15 ++++++---
 .../synonym/synonym-01/synonym-01.9.adm            |  8 ++---
 .../asterix/metadata/entities/EntityDetails.java   |  7 +++-
 .../apache/asterix/metadata/entities/Synonym.java  |  9 ++++-
 .../SynonymTupleTranslator.java                    | 38 +++++++++++++++++++++-
 5 files changed, 65 insertions(+), 12 deletions(-)

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 02f108503e..2a26d637c6 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
@@ -455,7 +455,8 @@ public class QueryTranslator extends AbstractLangTranslator 
implements IStatemen
                         handleLibraryDropStatement(metadataProvider, stmt, 
hcc, requestParameters);
                         break;
                     case CREATE_SYNONYM:
-                        handleCreateSynonymStatement(metadataProvider, stmt, 
requestParameters);
+                        handleCreateSynonymStatement(metadataProvider, stmt, 
requestParameters,
+                                Creator.DEFAULT_CREATOR);
                         break;
                     case SYNONYM_DROP:
                         handleDropSynonymStatement(metadataProvider, stmt, 
requestParameters);
@@ -3823,7 +3824,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
     }
 
     protected void handleCreateSynonymStatement(MetadataProvider 
metadataProvider, Statement stmt,
-            IRequestParameters requestParameters) throws Exception {
+            IRequestParameters requestParameters, Creator creator) throws 
Exception {
         CreateSynonymStatement css = (CreateSynonymStatement) stmt;
         metadataProvider.validateDatabaseObjectName(css.getNamespace(), 
css.getSynonymName(), css.getSourceLocation());
         Namespace stmtActiveNamespace = getActiveNamespace(css.getNamespace());
@@ -3837,14 +3838,16 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
         }
         lockUtil.createSynonymBegin(lockManager, metadataProvider.getLocks(), 
databaseName, dataverseName, synonymName);
         try {
-            doCreateSynonym(metadataProvider, css, stmtActiveNamespace, 
synonymName, objectNamespace, objectName);
+            doCreateSynonym(metadataProvider, css, stmtActiveNamespace, 
synonymName, objectNamespace, objectName,
+                    creator);
         } finally {
             metadataProvider.getLocks().unlock();
         }
     }
 
     protected CreateResult doCreateSynonym(MetadataProvider metadataProvider, 
CreateSynonymStatement css,
-            Namespace namespace, String synonymName, Namespace 
objectNamespace, String objectName) throws Exception {
+            Namespace namespace, String synonymName, Namespace 
objectNamespace, String objectName, Creator creator)
+            throws Exception {
         String databaseName = namespace.getDatabaseName();
         DataverseName dataverseName = namespace.getDataverseName();
         MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
@@ -3869,8 +3872,10 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
                 throw new CompilationException(ErrorCode.SYNONYM_EXISTS, 
css.getSourceLocation(), synonymName);
             }
             synonym = new Synonym(databaseName, dataverseName, synonymName, 
objectNamespace.getDatabaseName(),
-                    objectNamespace.getDataverseName(), objectName);
+                    objectNamespace.getDataverseName(), objectName, creator);
             
MetadataManager.INSTANCE.addSynonym(metadataProvider.getMetadataTxnContext(), 
synonym);
+            beforeTxnCommit(metadataProvider, creator,
+                    EntityDetails.newSynonym(databaseName, dataverseName, 
synonymName));
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return CreateResult.CREATED;
         } catch (Exception e) {
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm
index 6427b887c0..886eef8947 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm
@@ -1,4 +1,4 @@
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TweetMessagesSynonym", "ObjectDataverseName": "test", "ObjectName": 
"TweetMessages", "ObjectDatabaseName": "Default" }
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TweetMessagesSynonym2", "ObjectDataverseName": "test", "ObjectName": 
"TweetMessagesSynonym", "ObjectDatabaseName": "Default" }
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TwitterUsersSynonym", "ObjectDataverseName": "test", "ObjectName": 
"TwitterUsers", "ObjectDatabaseName": "Default" }
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TwitterUsersSynonym2", "ObjectDataverseName": "test", "ObjectName": 
"TwitterUsersSynonym", "ObjectDatabaseName": "Default" }
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TweetMessagesSynonym", "ObjectDataverseName": "test", "ObjectName": 
"TweetMessages", "ObjectDatabaseName": "Default", "Creator": { "Name": "@sys", 
"Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } }
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TweetMessagesSynonym2", "ObjectDataverseName": "test", "ObjectName": 
"TweetMessagesSynonym", "ObjectDatabaseName": "Default", "Creator": { "Name": 
"@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } }
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TwitterUsersSynonym", "ObjectDataverseName": "test", "ObjectName": 
"TwitterUsers", "ObjectDatabaseName": "Default", "Creator": { "Name": "@sys", 
"Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } }
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": 
"TwitterUsersSynonym2", "ObjectDataverseName": "test", "ObjectName": 
"TwitterUsersSynonym", "ObjectDatabaseName": "Default", "Creator": { "Name": 
"@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
index 532d10763e..1e95d0b7cb 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
@@ -31,7 +31,8 @@ public class EntityDetails {
         VIEW,
         FUNCTION,
         DATABASE,
-        DATAVERSE
+        DATAVERSE,
+        SYNONYM
     }
 
     private final String databaseName;
@@ -66,6 +67,10 @@ public class EntityDetails {
         return new EntityDetails(databaseName, dataverseName, functionName, 
EntityType.FUNCTION);
     }
 
+    public static EntityDetails newSynonym(String databaseName, DataverseName 
dataverseName, String synonymName) {
+        return new EntityDetails(databaseName, dataverseName, synonymName, 
EntityType.SYNONYM);
+    }
+
     public String getDatabaseName() {
         return databaseName;
     }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java
index ebe780ad59..a355b6dc4a 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java
@@ -24,6 +24,7 @@ import java.util.Objects;
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.metadata.MetadataCache;
 import org.apache.asterix.metadata.api.IMetadataEntity;
+import org.apache.asterix.metadata.utils.Creator;
 
 public class Synonym implements IMetadataEntity<Synonym> {
 
@@ -40,15 +41,17 @@ public class Synonym implements IMetadataEntity<Synonym> {
     private final DataverseName objectDataverseName;
 
     private final String objectName;
+    private final Creator creator;
 
     public Synonym(String databaseName, DataverseName dataverseName, String 
synonymName, String objectDatabaseName,
-            DataverseName objectDataverseName, String objectName) {
+            DataverseName objectDataverseName, String objectName, Creator 
creator) {
         this.databaseName = Objects.requireNonNull(databaseName);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.synonymName = Objects.requireNonNull(synonymName);
         this.objectDatabaseName = Objects.requireNonNull(objectDatabaseName);
         this.objectDataverseName = Objects.requireNonNull(objectDataverseName);
         this.objectName = Objects.requireNonNull(objectName);
+        this.creator = creator;
     }
 
     public String getDatabaseName() {
@@ -75,6 +78,10 @@ public class Synonym implements IMetadataEntity<Synonym> {
         return objectName;
     }
 
+    public Creator getCreator() {
+        return creator;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o)
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java
index bb3ad28d0c..389322c85f 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java
@@ -19,13 +19,16 @@
 
 package org.apache.asterix.metadata.entitytupletranslators;
 
+import org.apache.asterix.builders.RecordBuilder;
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
 import org.apache.asterix.metadata.bootstrap.SynonymEntity;
 import org.apache.asterix.metadata.entities.Synonym;
+import org.apache.asterix.metadata.utils.Creator;
 import org.apache.asterix.om.base.ARecord;
 import org.apache.asterix.om.base.AString;
+import org.apache.asterix.om.pointables.base.DefaultOpenFieldType;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
@@ -70,9 +73,10 @@ public final class SynonymTupleTranslator extends 
AbstractTupleTranslator<Synony
         }
 
         String objectName = ((AString) 
synonymRecord.getValueByPos(synonymEntity.objectNameIndex())).getStringValue();
+        Creator creator = Creator.createOrDefault(synonymRecord);
 
         return new Synonym(databaseName, dataverseName, synonymName, 
objectDatabaseName, objectDataverseName,
-                objectName);
+                objectName, creator);
     }
 
     @Override
@@ -149,5 +153,37 @@ public final class SynonymTupleTranslator extends 
AbstractTupleTranslator<Synony
             stringSerde.serialize(aString, fieldValue.getDataOutput());
             recordBuilder.addField(fieldName, fieldValue);
         }
+        writeSynonymCreator(synonym);
+    }
+
+    private void writeSynonymCreator(Synonym synonym) throws 
HyracksDataException {
+        if (synonymEntity.databaseNameIndex() >= 0) {
+            Creator creatorInfo = synonym.getCreator();
+            RecordBuilder creatorObject = new RecordBuilder();
+            creatorObject.reset(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE);
+
+            fieldName.reset();
+            aString.setValue(MetadataRecordTypes.FIELD_NAME_CREATOR_NAME);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            aString.setValue(creatorInfo.getName());
+            stringSerde.serialize(aString, fieldValue.getDataOutput());
+            creatorObject.addField(fieldName, fieldValue);
+
+            fieldName.reset();
+            aString.setValue(MetadataRecordTypes.FIELD_NAME_CREATOR_UUID);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            aString.setValue(creatorInfo.getUuid());
+            stringSerde.serialize(aString, fieldValue.getDataOutput());
+            creatorObject.addField(fieldName, fieldValue);
+
+            fieldName.reset();
+            aString.setValue(MetadataRecordTypes.CREATOR_ARECORD_FIELD_NAME);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            creatorObject.write(fieldValue.getDataOutput(), true);
+            recordBuilder.addField(fieldName, fieldValue);
+        }
     }
 }

Reply via email to