>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