>From Ritik Raj <[email protected]>:
Ritik Raj has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19318 )
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
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
10 files changed, 148 insertions(+), 7 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/18/19318/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..089d591 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
@@ -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 = BuiltinType.getAnyType();
+ 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/BuiltinType.java
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/BuiltinType.java
index 2404ac2d..a15af88 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,7 +28,7 @@
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 = 1L;
private static final String TAG_FIELD = "tag";
@@ -967,6 +967,46 @@
}
};
+ public static BuiltinType getAnyType() {
+ return new BuiltinType() {
+
+ private static final long serialVersionUID = -4041457851203593309L;
+
+ @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;
+ }
+ };
+ }
+
public static final BuiltinType ANY = new BuiltinType() {
private static final long serialVersionUID = -4041457851203593309L;
@@ -1003,6 +1043,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 +1101,7 @@
@Override
public String toString() {
- return getTypeTag().toString();
+ return fieldOrdinal == -1 ? getTypeTag().toString() : "(" +
getOrdinal() + ") " + getTypeTag().toString();
}
@Override
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..ec3624e
--- /dev/null
+++
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/PositionedAType.java
@@ -0,0 +1,41 @@
+/*
+ * 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 {
+ 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/+/19318
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: Ib2972d56b65931de3805bfd5a974694be9f7d05e
Gerrit-Change-Number: 19318
Gerrit-PatchSet: 1
Gerrit-Owner: Ritik Raj <[email protected]>
Gerrit-MessageType: newchange