>From Wail Alkowaileet <[email protected]>:

Wail Alkowaileet has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18546 )


Change subject: [WIP][COMP] Fix pushing down repeated expressions
......................................................................

[WIP][COMP] Fix pushing down repeated expressions

Ext-ref: MB-62906
Change-Id: I6f25efc5e247d474ebbb6dba0b951aa0fe897ea3
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ArrayExpectedSchemaNode.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ObjectExpectedSchemaNode.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
3 files changed, 21 insertions(+), 4 deletions(-)



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

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
index 7b26cf6..4ca0dd8 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/AbstractComplexExpectedSchemaNode.java
@@ -105,6 +105,13 @@
                 || newType == ExpectedSchemaNodeType.UNION || 
!newNode.allowsReplacing());
     }

+    /**
+     * @return true if {@code newNode} is a replaceable {@link 
ExpectedSchemaNodeType#ANY} node, false otherwise
+     */
+    protected boolean isReplaceableAny(IExpectedSchemaNode newNode) {
+        return newNode.getType() == ExpectedSchemaNodeType.ANY && 
newNode.allowsReplacing();
+    }
+
     public static AbstractComplexExpectedSchemaNode 
createNestedNode(ExpectedSchemaNodeType type,
             AbstractComplexExpectedSchemaNode parent, SourceLocation 
sourceLocation, String functionName) {
         switch (type) {
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ArrayExpectedSchemaNode.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ArrayExpectedSchemaNode.java
index 57e0d98..e647862 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ArrayExpectedSchemaNode.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ArrayExpectedSchemaNode.java
@@ -48,8 +48,8 @@

     @Override
     public IExpectedSchemaNode replaceChild(IExpectedSchemaNode oldNode, 
IExpectedSchemaNode newNode) {
-        if (child.getType() == newNode.getType()) {
-            // We are trying to replace with the same node type
+        if (child.getType() == newNode.getType() || isReplaceableAny(newNode)) 
{
+            // We are trying to replace with the same node type, or with a 
replaceable any, ignore.
             return child;
         } else if (isChildReplaceable(child, newNode)) {
             child = newNode;
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ObjectExpectedSchemaNode.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ObjectExpectedSchemaNode.java
index aa48e60..a6d4399 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ObjectExpectedSchemaNode.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ObjectExpectedSchemaNode.java
@@ -58,8 +58,8 @@
     public IExpectedSchemaNode replaceChild(IExpectedSchemaNode oldNode, 
IExpectedSchemaNode newNode) {
         String fieldName = getChildFieldName(oldNode);
         IExpectedSchemaNode child = children.get(fieldName);
-        if (child.getType() == newNode.getType()) {
-            // We are trying to replace with the same node type
+        if (child.getType() == newNode.getType() || isReplaceableAny(newNode)) 
{
+            // We are trying to replace with the same node type, or with a 
replaceable any, ignore.
             return child;
         } else if (isChildReplaceable(child, newNode)) {
             children.replace(fieldName, newNode);

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

Gerrit-Project: asterixdb
Gerrit-Branch: goldfish
Gerrit-Change-Id: I6f25efc5e247d474ebbb6dba0b951aa0fe897ea3
Gerrit-Change-Number: 18546
Gerrit-PatchSet: 1
Gerrit-Owner: Wail Alkowaileet <[email protected]>
Gerrit-MessageType: newchange

Reply via email to