>From Ritik Raj <ritik....@couchbase.com>:

Ritik Raj has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20130 )


Change subject: [ASTERIXDB-3548][COMP] Introduce ordering in the IAType
......................................................................

[ASTERIXDB-3548][COMP] Introduce ordering in the IAType

- user model changes: no
- storage format changes: no
- interface changes: yes

Details:
Introduced ordering in the IAType, so that the ordering is
maintained when sent to the runtime.

Patch-seq: 5

Ext-ref: MB-63032
Change-Id: Ib2972d56b65931de3805bfd5a974694be9f7d05e
---
A 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/PositionedAType.java
A asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AnyType.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ExpectedSchemaNodeToIATypeTranslatorVisitor.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ProjectionFiltrationTypeUtil.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
11 files changed, 183 insertions(+), 10 deletions(-)



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

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ExpectedSchemaNodeToIATypeTranslatorVisitor.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ExpectedSchemaNodeToIATypeTranslatorVisitor.java
index a16229f..e56da22 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ExpectedSchemaNodeToIATypeTranslatorVisitor.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/ExpectedSchemaNodeToIATypeTranslatorVisitor.java
@@ -28,7 +28,7 @@
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.AUnionType;
-import org.apache.asterix.om.types.BuiltinType;
+import org.apache.asterix.om.types.AnyType;
 import org.apache.asterix.om.types.IAType;
 import 
org.apache.asterix.optimizer.rules.pushdown.schema.AbstractComplexExpectedSchemaNode;
 import 
org.apache.asterix.optimizer.rules.pushdown.schema.AnyExpectedSchemaNode;
@@ -52,6 +52,8 @@
     private final Map<String, FunctionCallInformation> sourceInformationMap;
     //To give a unique name for each type
     private int counter;
+    // since currently we are not traversing in an array. this flag helps 
tracking that.
+    private boolean enteredArray;

     public ExpectedSchemaNodeToIATypeTranslatorVisitor(Map<String, 
FunctionCallInformation> sourceInformationMap) {
         this.sourceInformationMap = sourceInformationMap;
@@ -76,9 +78,12 @@

     @Override
     public IAType visit(ArrayExpectedSchemaNode node, String arg) throws 
AlgebricksException {
+        enteredArray = true;
         IAType itemType = node.getChild().accept(this, 
String.valueOf(counter++));
         IAType listType = new AOrderedListType(itemType, arg);
+        listType.setOrdinal(node.getFieldOrdinal());
         sourceInformationMap.put(arg, createFunctionCallInformation(node));
+        enteredArray = false;
         return listType;
     }

@@ -95,7 +100,11 @@

     @Override
     public IAType visit(AnyExpectedSchemaNode node, String arg) {
-        return BuiltinType.ANY;
+        IAType anyType = new AnyType();
+        if (!enteredArray) {
+            anyType.setOrdinal(node.getFieldOrdinal());
+        }
+        return anyType;
     }

     private ARecordType createRecordType(ObjectExpectedSchemaNode node, String 
arg) throws AlgebricksException {
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
index 426d361..18a2b1b 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AOrderedListType.java
@@ -53,7 +53,7 @@

     @Override
     public String toString() {
-        return "[ " + getItemType() + " ]";
+        return super.toString() + "[ " + getItemType() + " ]";
     }

     @Override
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
index ba352ac..96298f3 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/ARecordType.java
@@ -192,6 +192,7 @@
             sb.append(typeName).append(": ");
         }
         sb.append(isOpen ? "open" : "closed");
+        sb.append(super.toString());
         sb.append(" {\n");
         int n = fieldNames.length;
         for (int i = 0; i < n; i++) {
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
index caa926d..4f36b53 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnionType.java
@@ -70,6 +70,16 @@
         return false;
     }

+    @Override
+    public void setOrdinal(int ordinal) {
+        throw new UnsupportedOperationException("AUnionType does not support 
setOrdinal");
+    }
+
+    @Override
+    public int getOrdinal() {
+        throw new UnsupportedOperationException("AUnionType does not support 
getOrdinal");
+    }
+
     public IAType getType(ATypeTag typeTag) {
         for (int i = 0; i < unionList.size(); i++) {
             IAType type = unionList.get(i);
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
index 6d72119..a6394c1 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AUnorderedListType.java
@@ -53,7 +53,7 @@

     @Override
     public String toString() {
-        return "{{ " + getItemType() + " }}";
+        return super.toString() + "{{ " + getItemType() + " }}";
     }

     @Override
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
index 16f83f5..31937d7 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AbstractComplexType.java
@@ -23,7 +23,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;

-public abstract class AbstractComplexType implements IAType {
+public abstract class AbstractComplexType extends PositionedAType {

     private static final long serialVersionUID = 1L;
     protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AnyType.java 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AnyType.java
new file mode 100644
index 0000000..4e4b22f
--- /dev/null
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/AnyType.java
@@ -0,0 +1,71 @@
+/*
+ * 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.om.types;
+
+import org.apache.hyracks.api.io.IPersistedResourceRegistry;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+public class AnyType extends BuiltinType {
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public ATypeTag getTypeTag() {
+        return ATypeTag.ANY;
+    }
+
+    @Override
+    public String getTypeName() {
+        return "any";
+    }
+
+    @Override
+    public String getDisplayName() {
+        return "ANY";
+    }
+
+    @Override
+    public String getConstructor() {
+        return null;
+    }
+
+    @Override
+    public JsonNode toJson(IPersistedResourceRegistry registry) {
+        return convertToJson(registry, getTypeTag().serialize(), 
serialVersionUID);
+    }
+
+    @Override
+    public ObjectNode toJSON() {
+        ObjectMapper om = new ObjectMapper();
+        ObjectNode type = om.createObjectNode();
+        type.put("type", "ANY");
+        return type;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (!(object instanceof BuiltinType)) {
+            return false;
+        }
+        BuiltinType t = (BuiltinType) object;
+        return t.getTypeTag() == ATypeTag.ANY;
+    }
+}
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
index 2404ac2d..3806721 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
@@ -28,9 +28,9 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;

-public abstract class BuiltinType implements IAType {
+public abstract class BuiltinType extends PositionedAType {
+    private static final long serialVersionUID = 5770246838953329916L;

-    private static final long serialVersionUID = 1L;
     private static final String TAG_FIELD = "tag";

     public abstract static class LowerCaseConstructorType extends BuiltinType {
@@ -1003,6 +1003,15 @@
             type.put("type", "ANY");
             return type;
         }
+
+        @Override
+        public boolean equals(Object object) {
+            if (!(object instanceof BuiltinType)) {
+                return false;
+            }
+            BuiltinType t = (BuiltinType) object;
+            return t.getTypeTag() == ATypeTag.ANY;
+        }
     };

     public static final BuiltinType SHORTWITHOUTTYPEINFO = new BuiltinType() {
@@ -1052,7 +1061,7 @@

     @Override
     public String toString() {
-        return getTypeTag().toString();
+        return fieldOrdinal == -1 ? getTypeTag().toString() : "(" + 
getOrdinal() + ") " + getTypeTag().toString();
     }

     @Override
@@ -1089,7 +1098,7 @@
         return visitor.visitFlat(this, arg);
     }

-    private static JsonNode convertToJson(IPersistedResourceRegistry registry, 
short tag, long version) {
+    protected static JsonNode convertToJson(IPersistedResourceRegistry 
registry, short tag, long version) {
         ObjectNode jsonNode = registry.getClassIdentifier(BuiltinType.class, 
version);
         jsonNode.put(TAG_FIELD, tag);
         return jsonNode;
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
index ed4c2bb..6f3c237 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/IAType.java
@@ -32,6 +32,16 @@
     public String getTypeName();

     /**
+     * set the field position of the type in a nested type
+     */
+    public void setOrdinal(int ordinal);
+
+    /**
+     * @return the field's position in a nested type
+     */
+    public int getOrdinal();
+
+    /**
      * Allow for additional traversal and processing for {@link IAType}
      *
      * @param visitor visitor
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/PositionedAType.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/PositionedAType.java
new file mode 100644
index 0000000..4fc1a21
--- /dev/null
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/PositionedAType.java
@@ -0,0 +1,42 @@
+/*
+ * 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.om.types;
+
+public abstract class PositionedAType implements IAType {
+    private static final long serialVersionUID = 5770246838953329916L;
+    protected int fieldOrdinal = -1;
+
+    @Override
+    public void setOrdinal(int ordinal) {
+        this.fieldOrdinal = ordinal;
+    }
+
+    @Override
+    public int getOrdinal() {
+        return fieldOrdinal;
+    }
+
+    @Override
+    public String toString() {
+        if (fieldOrdinal != -1) {
+            return "(" + fieldOrdinal + ") ";
+        }
+        return "";
+    }
+}
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ProjectionFiltrationTypeUtil.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ProjectionFiltrationTypeUtil.java
index 94ff865..2e47710 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ProjectionFiltrationTypeUtil.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/ProjectionFiltrationTypeUtil.java
@@ -28,6 +28,7 @@
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.types.IATypeVisitor;
+import org.apache.asterix.om.types.PositionedAType;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;

 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -165,7 +166,7 @@
         return new ARecordType(typeName, new String[] {}, new IAType[] {}, 
true);
     }

-    public static class RenamedType implements IAType {
+    public static class RenamedType extends PositionedAType {
         private static final long serialVersionUID = 992690669300951839L;
         private final IAType originalType;
         private final String name;

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

Gerrit-Project: asterixdb
Gerrit-Branch: ionic
Gerrit-Change-Id: Ib2972d56b65931de3805bfd5a974694be9f7d05e
Gerrit-Change-Number: 20130
Gerrit-PatchSet: 1
Gerrit-Owner: Ritik Raj <ritik....@couchbase.com>
Gerrit-MessageType: newchange

Reply via email to