You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by bu...@apache.org on 2016/07/14 02:30:15 UTC
[3/4] asterixdb git commit: Support SQL-compliant group-by syntax.
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java
index d0af3e9..eaa17e2 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java
@@ -26,12 +26,8 @@ import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
public class WhereClause implements Clause {
private Expression whereExpr;
- public Expression getWhereExpr() {
- return whereExpr;
- }
-
- public void setWhereExpr(Expression whereExpr) {
- this.whereExpr = whereExpr;
+ public WhereClause() {
+ // Default constructor.
}
public WhereClause(Expression whereExpr) {
@@ -39,7 +35,12 @@ public class WhereClause implements Clause {
this.whereExpr = whereExpr;
}
- public WhereClause() {
+ public Expression getWhereExpr() {
+ return whereExpr;
+ }
+
+ public void setWhereExpr(Expression whereExpr) {
+ this.whereExpr = whereExpr;
}
@Override
@@ -52,4 +53,20 @@ public class WhereClause implements Clause {
return visitor.visit(this, arg);
}
+ @Override
+ public int hashCode() {
+ return whereExpr.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof WhereClause)) {
+ return false;
+ }
+ WhereClause whereClause = (WhereClause) object;
+ return whereExpr.equals(whereClause.getWhereExpr());
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
index c7ac0a1..2b7b748 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractAccessor.java
@@ -19,6 +19,7 @@
package org.apache.asterix.lang.common.expression;
import org.apache.asterix.lang.common.base.Expression;
+import org.apache.commons.lang.ObjectUtils;
public abstract class AbstractAccessor implements Expression {
protected Expression expr;
@@ -36,4 +37,21 @@ public abstract class AbstractAccessor implements Expression {
this.expr = expr;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(expr);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof AbstractAccessor)) {
+ return false;
+ }
+ AbstractAccessor target = (AbstractAccessor) object;
+ return expr.equals(target.expr);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/CallExpr.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/CallExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/CallExpr.java
index 44a40c4..1b7b918 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/CallExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/CallExpr.java
@@ -25,6 +25,7 @@ import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.AbstractExpression;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class CallExpr extends AbstractExpression {
private FunctionSignature functionSignature;
@@ -68,6 +69,24 @@ public class CallExpr extends AbstractExpression {
@Override
public String toString() {
- return "call " + String.valueOf(functionSignature);
+ return "call " + functionSignature;
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(exprList, functionSignature, isBuiltin);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof CallExpr)) {
+ return false;
+ }
+ CallExpr target = (CallExpr) object;
+ return ObjectUtils.equals(exprList, target.exprList)
+ && ObjectUtils.equals(functionSignature, target.functionSignature) && isBuiltin == target.isBuiltin;
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldAccessor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldAccessor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldAccessor.java
index e23c799..0a76730 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldAccessor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldAccessor.java
@@ -22,6 +22,7 @@ import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class FieldAccessor extends AbstractAccessor {
private Identifier ident;
@@ -53,4 +54,21 @@ public class FieldAccessor extends AbstractAccessor {
public String toString() {
return String.valueOf(expr) + "." + ident.toString();
}
+
+ @Override
+ public int hashCode() {
+ return 31 * super.hashCode() + ObjectUtils.hashCode(ident);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof FieldAccessor)) {
+ return false;
+ }
+ FieldAccessor target = (FieldAccessor) object;
+ return super.equals(target) && ObjectUtils.equals(ident, target.ident);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldBinding.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldBinding.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldBinding.java
index abfbbe3..afadddd 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldBinding.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/FieldBinding.java
@@ -19,12 +19,14 @@
package org.apache.asterix.lang.common.expression;
import org.apache.asterix.lang.common.base.Expression;
+import org.apache.commons.lang3.ObjectUtils;
public class FieldBinding {
private Expression leftExpr;
private Expression rightExpr;
public FieldBinding() {
+ // default constructor.
}
public FieldBinding(Expression leftExpr, Expression rightExpr) {
@@ -49,4 +51,26 @@ public class FieldBinding {
this.rightExpr = rightExpr;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(leftExpr, rightExpr);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof FieldBinding)) {
+ return false;
+ }
+ FieldBinding target = (FieldBinding) object;
+ return ObjectUtils.equals(leftExpr, target.leftExpr) && ObjectUtils.equals(rightExpr, target.rightExpr);
+ }
+
+ @Override
+ public String toString() {
+ return leftExpr + ": " + rightExpr;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/GbyVariableExpressionPair.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/GbyVariableExpressionPair.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/GbyVariableExpressionPair.java
index bb33918..aaa6526 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/GbyVariableExpressionPair.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/GbyVariableExpressionPair.java
@@ -19,6 +19,7 @@
package org.apache.asterix.lang.common.expression;
import org.apache.asterix.lang.common.base.Expression;
+import org.apache.commons.lang3.ObjectUtils;
public class GbyVariableExpressionPair {
private VariableExpr var; // can be null
@@ -50,4 +51,25 @@ public class GbyVariableExpressionPair {
this.expr = expr;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(expr, var);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof GbyVariableExpressionPair)) {
+ return false;
+ }
+ GbyVariableExpressionPair target = (GbyVariableExpressionPair) object;
+ return ObjectUtils.equals(expr, target.expr) && ObjectUtils.equals(var, target.var);
+ }
+
+ @Override
+ public String toString() {
+ return expr + " AS " + var;
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IfExpr.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IfExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IfExpr.java
index f32a9cc..2709f80 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IfExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IfExpr.java
@@ -21,6 +21,7 @@ package org.apache.asterix.lang.common.expression;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class IfExpr implements Expression {
private Expression condExpr;
@@ -28,6 +29,7 @@ public class IfExpr implements Expression {
private Expression elseExpr;
public IfExpr() {
+ // default constructor
}
public IfExpr(Expression condExpr, Expression thenExpr, Expression elseExpr) {
@@ -69,4 +71,27 @@ public class IfExpr implements Expression {
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws AsterixException {
return visitor.visit(this, arg);
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(condExpr, elseExpr, thenExpr);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof IfExpr)) {
+ return false;
+ }
+ IfExpr target = (IfExpr) object;
+ return ObjectUtils.equals(condExpr, target.condExpr) && ObjectUtils.equals(elseExpr, target.elseExpr)
+ && ObjectUtils.equals(thenExpr, target.thenExpr);
+ }
+
+ @Override
+ public String toString() {
+ return "if(" + condExpr + ") then " + thenExpr + " else " + elseExpr;
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexAccessor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexAccessor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexAccessor.java
index 898870e..07a8254 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexAccessor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexAccessor.java
@@ -21,26 +21,26 @@ package org.apache.asterix.lang.common.expression;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class IndexAccessor extends AbstractAccessor {
- private boolean any;
+ private boolean isAny;
private Expression indexExpr;
- public final static int ANY = -1;
-
public IndexAccessor(Expression expr, Expression indexExpr) {
super(expr);
- if (indexExpr == null)
- this.any = true;
+ if (indexExpr == null) {
+ this.isAny = true;
+ }
this.indexExpr = indexExpr;
}
public boolean isAny() {
- return any;
+ return isAny;
}
public void setAny(boolean any) {
- this.any = any;
+ this.isAny = any;
}
public Expression getIndexExpr() {
@@ -60,4 +60,26 @@ public class IndexAccessor extends AbstractAccessor {
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws AsterixException {
return visitor.visit(this, arg);
}
+
+ @Override
+ public int hashCode() {
+ return 31 * super.hashCode() + ObjectUtils.hashCodeMulti(indexExpr, isAny);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof IndexAccessor)) {
+ return false;
+ }
+ IndexAccessor target = (IndexAccessor) object;
+ return super.equals(target) && isAny == target.isAny && ObjectUtils.equals(indexExpr, target.indexExpr);
+ }
+
+ @Override
+ public String toString() {
+ return expr + "[" + (isAny ? "?" : indexExpr) + "]";
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/ListConstructor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/ListConstructor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/ListConstructor.java
index 10e1baa..7fdca69 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/ListConstructor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/ListConstructor.java
@@ -23,12 +23,14 @@ import java.util.List;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class ListConstructor implements Expression {
private List<Expression> exprList;
private Type type;
public ListConstructor() {
+ // default constructor.
}
public ListConstructor(Type type, List<Expression> exprList) {
@@ -66,4 +68,21 @@ public class ListConstructor implements Expression {
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws AsterixException {
return visitor.visit(this, arg);
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(exprList, type);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof ListConstructor)) {
+ return false;
+ }
+ ListConstructor target = (ListConstructor) object;
+ return ObjectUtils.equals(exprList, target.exprList) && ObjectUtils.equals(type, target.type);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java
index a9fa748..46c3c32 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java
@@ -22,11 +22,13 @@ import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Literal;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class LiteralExpr implements Expression {
private Literal value;
public LiteralExpr() {
+ // default constructor.
}
public LiteralExpr(Literal value) {
@@ -51,4 +53,21 @@ public class LiteralExpr implements Expression {
return visitor.visit(this, arg);
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(value);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof LiteralExpr)) {
+ return false;
+ }
+ LiteralExpr target = (LiteralExpr) object;
+ return ObjectUtils.equals(value, target.value);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OperatorExpr.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OperatorExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OperatorExpr.java
index bf70df4..fb64ad8 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OperatorExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OperatorExpr.java
@@ -27,6 +27,7 @@ import org.apache.asterix.lang.common.base.AbstractExpression;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.struct.OperatorType;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class OperatorExpr extends AbstractExpression {
private List<Expression> exprList;
@@ -117,4 +118,22 @@ public class OperatorExpr extends AbstractExpression {
}
return false;
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(currentop, exprBroadcastIdx, exprList, opList);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof OperatorExpr)) {
+ return false;
+ }
+ OperatorExpr target = (OperatorExpr) object;
+ return currentop == target.isCurrentop() && ObjectUtils.equals(exprBroadcastIdx, target.exprBroadcastIdx)
+ && ObjectUtils.equals(exprList, target.exprList) && ObjectUtils.equals(opList, target.opList);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
index 99d0674..08b9c53 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
@@ -20,8 +20,9 @@ package org.apache.asterix.lang.common.expression;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang.ObjectUtils;
-public class OrderedListTypeDefinition extends TypeExpression {
+public class OrderedListTypeDefinition implements TypeExpression {
private TypeExpression itemTypeExpression;
@@ -43,4 +44,20 @@ public class OrderedListTypeDefinition extends TypeExpression {
return itemTypeExpression;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(itemTypeExpression);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof OrderedListTypeDefinition)) {
+ return false;
+ }
+ OrderedListTypeDefinition target = (OrderedListTypeDefinition) object;
+ return ObjectUtils.equals(itemTypeExpression, target.itemTypeExpression);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/QuantifiedExpression.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/QuantifiedExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/QuantifiedExpression.java
index 78c8ab1..e1372cd 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/QuantifiedExpression.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/QuantifiedExpression.java
@@ -24,6 +24,7 @@ import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.struct.QuantifiedPair;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class QuantifiedExpression implements Expression {
private List<QuantifiedPair> quantifiedList;
@@ -79,4 +80,23 @@ public class QuantifiedExpression implements Expression {
EVERY,
SOME
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(quantifiedList, quantifier, satisfiesExpr);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof QuantifiedExpression)) {
+ return false;
+ }
+ QuantifiedExpression target = (QuantifiedExpression) object;
+ return ObjectUtils.equals(quantifiedList, target.quantifiedList)
+ && ObjectUtils.equals(quantifier, target.quantifier)
+ && ObjectUtils.equals(satisfiesExpr, target.satisfiesExpr);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordConstructor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordConstructor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordConstructor.java
index 6c6b415..144b27c 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordConstructor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordConstructor.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class RecordConstructor implements Expression {
private List<FieldBinding> fbList;
@@ -53,4 +54,21 @@ public class RecordConstructor implements Expression {
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws AsterixException {
return visitor.visit(this, arg);
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(fbList);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof RecordConstructor)) {
+ return false;
+ }
+ RecordConstructor target = (RecordConstructor) object;
+ return ObjectUtils.equals(fbList, target.fbList);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
index 5e5208e..800af9f 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
@@ -25,26 +25,24 @@ import org.apache.asterix.common.annotations.IRecordFieldDataGen;
import org.apache.asterix.common.annotations.UndeclaredFieldsDataGen;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
-public class RecordTypeDefinition extends TypeExpression {
+public class RecordTypeDefinition implements TypeExpression {
public enum RecordKind {
OPEN,
CLOSED
}
- private ArrayList<String> fieldNames;
- private ArrayList<TypeExpression> fieldTypes;
- private ArrayList<IRecordFieldDataGen> fieldDataGen;
- private ArrayList<Boolean> optionalFields;
+ private final List<String> fieldNames = new ArrayList<>();
+ private final List<TypeExpression> fieldTypes = new ArrayList<>();
+ private final List<IRecordFieldDataGen> fieldDataGen = new ArrayList<>();
+ private final List<Boolean> optionalFields = new ArrayList<>();
private RecordKind recordKind;
private UndeclaredFieldsDataGen undeclaredFieldsDataGen;
public RecordTypeDefinition() {
- fieldNames = new ArrayList<>();
- fieldTypes = new ArrayList<>();
- optionalFields = new ArrayList<>();
- fieldDataGen = new ArrayList<>();
+ // Default constructor.
}
@Override
@@ -102,4 +100,26 @@ public class RecordTypeDefinition extends TypeExpression {
return undeclaredFieldsDataGen;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(fieldDataGen, fieldNames, fieldTypes, optionalFields, recordKind,
+ undeclaredFieldsDataGen);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof RecordTypeDefinition)) {
+ return false;
+ }
+ RecordTypeDefinition target = (RecordTypeDefinition) object;
+ boolean equals = fieldDataGen.equals(target.getFieldDataGen()) && fieldNames.equals(target.getFieldNames())
+ && fieldTypes.equals(target.getFieldNames()) && optionalFields.equals(target.getOptionableFields());
+ equals = equals && ObjectUtils.equals(recordKind, target.getRecordKind())
+ && ObjectUtils.equals(undeclaredFieldsDataGen, target.getUndeclaredFieldsDataGen());
+ return equals;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeExpression.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeExpression.java
index 409e683..3359be6 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeExpression.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeExpression.java
@@ -20,7 +20,7 @@ package org.apache.asterix.lang.common.expression;
import org.apache.asterix.lang.common.base.ILangExpression;
-public abstract class TypeExpression implements ILangExpression {
+public interface TypeExpression extends ILangExpression {
public enum TypeExprKind {
RECORD,
@@ -29,6 +29,6 @@ public abstract class TypeExpression implements ILangExpression {
UNORDEREDLIST
}
- public abstract TypeExprKind getTypeKind();
+ public TypeExprKind getTypeKind();
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
index 2c35cc3..49f0667 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
@@ -21,8 +21,9 @@ package org.apache.asterix.lang.common.expression;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang.ObjectUtils;
-public class TypeReferenceExpression extends TypeExpression {
+public class TypeReferenceExpression implements TypeExpression {
private final Identifier ident;
@@ -43,4 +44,21 @@ public class TypeReferenceExpression extends TypeExpression {
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws AsterixException {
return visitor.visit(this, arg);
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(ident);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof TypeReferenceExpression)) {
+ return false;
+ }
+ TypeReferenceExpression target = (TypeReferenceExpression) object;
+ return ObjectUtils.equals(ident, target.ident);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnaryExpr.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnaryExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnaryExpr.java
index cf5eefe..eef8f1c 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnaryExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnaryExpr.java
@@ -21,12 +21,14 @@ package org.apache.asterix.lang.common.expression;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class UnaryExpr implements Expression {
private Sign sign;
private Expression expr;
public UnaryExpr() {
+ // default constructor
}
public UnaryExpr(Sign sign, Expression expr) {
@@ -64,4 +66,21 @@ public class UnaryExpr implements Expression {
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws AsterixException {
return visitor.visit(this, arg);
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(expr, sign);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof UnaryExpr)) {
+ return false;
+ }
+ UnaryExpr target = (UnaryExpr) object;
+ return ObjectUtils.equals(expr, target.expr) && ObjectUtils.equals(sign, target.sign);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java
index b47ade4..a0726e2 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java
@@ -20,8 +20,9 @@ package org.apache.asterix.lang.common.expression;
import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
-public class UnorderedListTypeDefinition extends TypeExpression {
+public class UnorderedListTypeDefinition implements TypeExpression {
private TypeExpression itemTypeExpression;
@@ -43,4 +44,20 @@ public class UnorderedListTypeDefinition extends TypeExpression {
return itemTypeExpression;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(itemTypeExpression);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof OrderedListTypeDefinition)) {
+ return false;
+ }
+ UnorderedListTypeDefinition target = (UnorderedListTypeDefinition) object;
+ return ObjectUtils.equals(itemTypeExpression, target.itemTypeExpression);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java
index 9eeb6f8..534c74f 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java
@@ -22,6 +22,7 @@ import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class VariableExpr implements Expression {
private VarIdentifier var;
@@ -75,16 +76,19 @@ public class VariableExpr implements Expression {
@Override
public int hashCode() {
- return var.hashCode();
+ return ObjectUtils.hashCode(var);
}
@Override
public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
if (!(obj instanceof VariableExpr)) {
return false;
}
VariableExpr expr = (VariableExpr) obj;
- return var.equals(expr.getVar());
+ return ObjectUtils.equals(var, expr.var);
}
@Override
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
index 1a5066d..f362c15 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
@@ -19,11 +19,9 @@
package org.apache.asterix.lang.common.literal;
import org.apache.asterix.lang.common.base.Literal;
+import org.apache.commons.lang.ObjectUtils;
public class DoubleLiteral extends Literal {
- /**
- *
- */
private static final long serialVersionUID = -5685491458356989250L;
private Double value;
@@ -45,4 +43,26 @@ public class DoubleLiteral extends Literal {
public Type getLiteralType() {
return Type.DOUBLE;
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(value);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof DoubleLiteral)) {
+ return false;
+ }
+ DoubleLiteral target = (DoubleLiteral) object;
+ return ObjectUtils.equals(value, target.value);
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(value);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FalseLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FalseLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FalseLiteral.java
index 61db616..bde5260 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FalseLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FalseLiteral.java
@@ -23,12 +23,11 @@ import org.apache.asterix.lang.common.base.Literal;
public class FalseLiteral extends Literal {
private static final long serialVersionUID = -750814844423165149L;
+ public static final FalseLiteral INSTANCE = new FalseLiteral();
private FalseLiteral() {
}
- public final static FalseLiteral INSTANCE = new FalseLiteral();
-
@Override
public Type getLiteralType() {
return Type.FALSE;
@@ -45,8 +44,8 @@ public class FalseLiteral extends Literal {
}
@Override
- public boolean equals(Object obj) {
- return obj == INSTANCE;
+ public Boolean getValue() {
+ return Boolean.FALSE;
}
@Override
@@ -55,7 +54,8 @@ public class FalseLiteral extends Literal {
}
@Override
- public Boolean getValue() {
- return Boolean.FALSE;
+ public boolean equals(Object obj) {
+ return obj == INSTANCE;
}
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
index d7c54fa..a3dfd6a 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
@@ -19,11 +19,9 @@
package org.apache.asterix.lang.common.literal;
import org.apache.asterix.lang.common.base.Literal;
+import org.apache.commons.lang.ObjectUtils;
public class FloatLiteral extends Literal {
- /**
- *
- */
private static final long serialVersionUID = 3273563021227964396L;
private Float value;
@@ -45,4 +43,26 @@ public class FloatLiteral extends Literal {
public Type getLiteralType() {
return Type.FLOAT;
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(value);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof FloatLiteral)) {
+ return false;
+ }
+ FloatLiteral target = (FloatLiteral) object;
+ return ObjectUtils.equals(value, target.value);
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(value);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
index e0c1de3..a46a736 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
@@ -19,11 +19,9 @@
package org.apache.asterix.lang.common.literal;
import org.apache.asterix.lang.common.base.Literal;
+import org.apache.commons.lang.ObjectUtils;
public class IntegerLiteral extends Literal {
- /**
- *
- */
private static final long serialVersionUID = -8633520244871361967L;
private Integer value;
@@ -32,6 +30,7 @@ public class IntegerLiteral extends Literal {
this.value = value;
}
+ @Override
public Integer getValue() {
return value;
}
@@ -44,4 +43,26 @@ public class IntegerLiteral extends Literal {
public Type getLiteralType() {
return Type.INTEGER;
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(value);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof IntegerLiteral)) {
+ return false;
+ }
+ IntegerLiteral target = (IntegerLiteral) object;
+ return value.equals(target.getValue());
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(value);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
index 3320dac..66164d1 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
@@ -19,11 +19,9 @@
package org.apache.asterix.lang.common.literal;
import org.apache.asterix.lang.common.base.Literal;
+import org.apache.commons.lang.ObjectUtils;
public class LongIntegerLiteral extends Literal {
- /**
- *
- */
private static final long serialVersionUID = -8633520244871361967L;
private Long value;
@@ -45,4 +43,26 @@ public class LongIntegerLiteral extends Literal {
public Type getLiteralType() {
return Type.LONG;
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(value);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof LongIntegerLiteral)) {
+ return false;
+ }
+ LongIntegerLiteral target = (LongIntegerLiteral) object;
+ return value.equals(target.getValue());
+ }
+
+ @Override
+ public String toString() {
+ return String.valueOf(value);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/MissingLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/MissingLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/MissingLiteral.java
index 2c2fa8e..c12ed6f 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/MissingLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/MissingLiteral.java
@@ -22,12 +22,11 @@ import org.apache.asterix.lang.common.base.Literal;
public class MissingLiteral extends Literal {
private static final long serialVersionUID = 1L;
+ public static final MissingLiteral INSTANCE = new MissingLiteral();
private MissingLiteral() {
}
- public final static MissingLiteral INSTANCE = new MissingLiteral();
-
@Override
public Type getLiteralType() {
return Type.MISSING;
@@ -52,4 +51,9 @@ public class MissingLiteral extends Literal {
public Object getValue() {
return null;
}
+
+ @Override
+ public String toString() {
+ return getStringValue();
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java
index e5fdb1d..197aa6e 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java
@@ -21,17 +21,12 @@ package org.apache.asterix.lang.common.literal;
import org.apache.asterix.lang.common.base.Literal;
public class NullLiteral extends Literal {
-
- /**
- *
- */
private static final long serialVersionUID = -7782153599294838739L;
+ public static final NullLiteral INSTANCE = new NullLiteral();
private NullLiteral() {
}
- public final static NullLiteral INSTANCE = new NullLiteral();
-
@Override
public Type getLiteralType() {
return Type.NULL;
@@ -56,4 +51,9 @@ public class NullLiteral extends Literal {
public Object getValue() {
return null;
}
+
+ @Override
+ public String toString() {
+ return getStringValue();
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
index 623c9ee..9caad3e 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/StringLiteral.java
@@ -19,6 +19,7 @@
package org.apache.asterix.lang.common.literal;
import org.apache.asterix.lang.common.base.Literal;
+import org.apache.commons.lang.ObjectUtils;
public class StringLiteral extends Literal {
@@ -30,6 +31,7 @@ public class StringLiteral extends Literal {
this.value = value;
}
+ @Override
public String getValue() {
return value;
}
@@ -47,4 +49,26 @@ public class StringLiteral extends Literal {
public String getStringValue() {
return value;
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCode(value);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof StringLiteral)) {
+ return false;
+ }
+ StringLiteral target = (StringLiteral) object;
+ return ObjectUtils.equals(value, target.value);
+ }
+
+ @Override
+ public String toString() {
+ return value;
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/TrueLiteral.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/TrueLiteral.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/TrueLiteral.java
index a919216..e0ae87d 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/TrueLiteral.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/TrueLiteral.java
@@ -22,12 +22,11 @@ import org.apache.asterix.lang.common.base.Literal;
public class TrueLiteral extends Literal {
private static final long serialVersionUID = -8513245514578847512L;
+ public static final TrueLiteral INSTANCE = new TrueLiteral();
private TrueLiteral() {
}
- public final static TrueLiteral INSTANCE = new TrueLiteral();
-
@Override
public Type getLiteralType() {
return Type.TRUE;
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ExpressionSubstitutionEnvironment.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ExpressionSubstitutionEnvironment.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ExpressionSubstitutionEnvironment.java
new file mode 100644
index 0000000..8f5597f
--- /dev/null
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ExpressionSubstitutionEnvironment.java
@@ -0,0 +1,165 @@
+/*
+ * 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.lang.common.rewrites;
+
+import java.util.ArrayDeque;
+import java.util.Collection;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.asterix.common.exceptions.AsterixException;
+import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+
+import com.google.common.collect.HashMultiset;
+import com.google.common.collect.Multiset;
+
+/**
+ * This class is in charge of substitute expressions by a given mapping while
+ * traversing a given AST. The traversal and expression substitution should
+ * be based on the correct variable scoping. In order to support scoping at the
+ * caller, this class provides methods like mark, reset and pop.
+ */
+public class ExpressionSubstitutionEnvironment {
+
+ @FunctionalInterface
+ public static interface FreeVariableCollector {
+ public Collection<VariableExpr> getFreeVariable(ILangExpression expr) throws AsterixException;
+ }
+
+ @FunctionalInterface
+ public static interface DeepCopier {
+ public ILangExpression deepCopy(ILangExpression expr) throws AsterixException;
+ }
+
+ private Map<Expression, Expression> exprMap = new HashMap<>();
+ private Map<VariableExpr, Expression> freeVarToExprMap = new HashMap<>();
+
+ // We use multiset here because variables can be defined multiple times
+ // in the scope stack.
+ private Multiset<Expression> disabledExpr = HashMultiset.create();
+
+ // Snapshots of variables that should be disabled for replacement,
+ // e.g., if a variable is redefined in a closer scope.
+ private Deque<Multiset<Expression>> disabledExprBackup = new ArrayDeque<>();
+
+ public ExpressionSubstitutionEnvironment() {
+ // Default constructor.
+ }
+
+ public ExpressionSubstitutionEnvironment(Map<Expression, Expression> map, FreeVariableCollector freeVarCollector)
+ throws AsterixException {
+ addMapping(map, freeVarCollector);
+ }
+
+ /**
+ * Finds a substitution expression.
+ *
+ * @param expr
+ * the original expression.
+ * @return the new, replaced expression.
+ */
+ public Expression findSubstitution(Expression expr, DeepCopier deepCopier) throws AsterixException {
+ Expression replacementExpr = exprMap.get(expr);
+ if (replacementExpr != null && !disabledExpr.contains(replacementExpr)) {
+ return (Expression) deepCopier.deepCopy(replacementExpr);
+ }
+ return expr;
+ }
+
+ /**
+ * Disable a substitution when a free variable in the expression is re-defined.
+ *
+ * @param var
+ * a re-defined variable.
+ */
+ public void disableVariable(VariableExpr var) {
+ Expression expr = freeVarToExprMap.get(var);
+ if (expr != null) {
+ disabledExpr.add(expr);
+ }
+ }
+
+ /**
+ * Re-enable a substitution when a re-defined variable exits its scope.
+ *
+ * @param var
+ * a re-defined variable.
+ */
+ public void enableVariable(VariableExpr var) {
+ Expression expr = freeVarToExprMap.get(var);
+ if (expr != null) {
+ disabledExpr.remove(expr);
+ }
+ }
+
+ /**
+ * Tasks a snapshot of the current states.
+ *
+ * @return the snapshot id that can be reset to in the future.
+ */
+ public int mark() {
+ Multiset<Expression> copyOfDisabledExprs = HashMultiset.create();
+ copyOfDisabledExprs.addAll(disabledExpr);
+ disabledExprBackup.push(copyOfDisabledExprs);
+ return disabledExprBackup.size() - 1;
+ }
+
+ /**
+ * Resets the internal states to a snapshot.
+ *
+ * @param depth,
+ * the snapshot id that the caller wants to recover to.
+ */
+ public void reset(int depth) {
+ while (disabledExprBackup.size() > depth) {
+ disabledExpr = disabledExprBackup.pop();
+ }
+ }
+
+ /**
+ * Restores to the most-recent snapshot.
+ */
+ public void pop() {
+ if (!disabledExprBackup.isEmpty()) {
+ disabledExpr = disabledExprBackup.pop();
+ }
+ }
+
+ @Override
+ public String toString() {
+ return exprMap.toString();
+ }
+
+ private void addMapping(Map<Expression, Expression> map, FreeVariableCollector freeVarCollector)
+ throws AsterixException {
+ exprMap.putAll(map);
+ // Put free variable to target expression map.
+ for (Entry<Expression, Expression> entry : map.entrySet()) {
+ Expression targetExpr = entry.getKey();
+ for (VariableExpr freeVar : freeVarCollector.getFreeVariable(targetExpr)) {
+ freeVarToExprMap.put(freeVar, targetExpr);
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
index 9036413..10cd7d8 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
@@ -25,6 +25,7 @@ import org.apache.asterix.lang.common.struct.VarIdentifier;
public final class LangRewritingContext {
private int mark = 0;
private int varCounter;
+ private int systemVarCounter = 1;
private HashMap<Integer, VarIdentifier> oldVarIdToNewVarId = new HashMap<>();
public LangRewritingContext(int varCounter) {
@@ -63,7 +64,7 @@ public final class LangRewritingContext {
public VarIdentifier newVariable() {
int id = newId();
// Prefixes system-generated variables with "#".
- return new VarIdentifier("#" + id, id);
+ return new VarIdentifier("#" + (systemVarCounter++), id);
}
public void markCounter() {
@@ -78,4 +79,5 @@ public final class LangRewritingContext {
varCounter++;
return varCounter;
}
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/VariableSubstitutionEnvironment.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/VariableSubstitutionEnvironment.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/VariableSubstitutionEnvironment.java
index 4c4767e..26f528c 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/VariableSubstitutionEnvironment.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/VariableSubstitutionEnvironment.java
@@ -29,7 +29,7 @@ public class VariableSubstitutionEnvironment {
private Map<String, Expression> oldVarToNewExpressionMap = new HashMap<String, Expression>();
public VariableSubstitutionEnvironment() {
-
+ // Default constructor.
}
public VariableSubstitutionEnvironment(Map<VariableExpr, Expression> varExprMap) {
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java
index 3a2a933..ba3440f 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java
@@ -26,6 +26,7 @@ import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class DeleteStatement implements Statement {
@@ -95,4 +96,25 @@ public class DeleteStatement implements Statement {
return datasets;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(condition, datasetName, datasets, dataverseName, dataverses, rewrittenQuery,
+ vars);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof DeleteStatement)) {
+ return false;
+ }
+ DeleteStatement target = (DeleteStatement) object;
+ boolean equals = ObjectUtils.equals(condition, target.condition)
+ && ObjectUtils.equals(datasetName, target.datasetName) && ObjectUtils.equals(datasets, target.datasets)
+ && ObjectUtils.equals(dataverseName, target.dataverseName);
+ return equals && ObjectUtils.equals(dataverses, target.dataverses)
+ && ObjectUtils.equals(rewrittenQuery, target.rewrittenQuery) && ObjectUtils.equals(vars, target.vars);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java
index de81de0..aab0979 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java
@@ -22,6 +22,7 @@ import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class InsertStatement implements Statement {
@@ -63,4 +64,22 @@ public class InsertStatement implements Statement {
return visitor.visit(this, arg);
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(datasetName, dataverseName, query);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof InsertStatement)) {
+ return false;
+ }
+ InsertStatement target = (InsertStatement) object;
+ return ObjectUtils.equals(datasetName, target.datasetName)
+ && ObjectUtils.equals(dataverseName, target.dataverseName) && ObjectUtils.equals(query, target.query);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java
index 64ca0c1..a9cba21 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java
@@ -25,16 +25,17 @@ import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class Query implements Statement {
private boolean topLevel = true;
private Expression body;
private int varCounter;
- private List<String> dataverses = new ArrayList<String>();
- private List<String> datasets = new ArrayList<String>();
+ private List<String> dataverses = new ArrayList<>();
+ private List<String> datasets = new ArrayList<>();
public Query() {
-
+ // Default constructor.
}
public Query(boolean topLevel, Expression body, int varCounter, List<String> dataverses, List<String> datasets) {
@@ -94,4 +95,22 @@ public class Query implements Statement {
public List<String> getDatasets() {
return datasets;
}
+
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(body, datasets, dataverses, topLevel);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof Query)) {
+ return false;
+ }
+ Query target = (Query) object;
+ return ObjectUtils.equals(body, target.body) && ObjectUtils.equals(datasets, target.datasets)
+ && ObjectUtils.equals(dataverses, target.dataverses) && topLevel == target.topLevel;
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java
index c82bbad..c61ec0b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java
@@ -26,6 +26,7 @@ import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.clause.UpdateClause;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.commons.lang3.ObjectUtils;
public class UpdateStatement implements Statement {
@@ -67,4 +68,22 @@ public class UpdateStatement implements Statement {
return visitor.visit(this, arg);
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(condition, target, ucs, vars);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof UpdateStatement)) {
+ return false;
+ }
+ UpdateStatement update = (UpdateStatement) object;
+ return ObjectUtils.equals(condition, update.condition) && ObjectUtils.equals(target, update.target)
+ && ObjectUtils.equals(ucs, update.ucs) && ObjectUtils.equals(vars, update.vars);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpsertStatement.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpsertStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpsertStatement.java
index f415951..fa11930 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpsertStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpsertStatement.java
@@ -31,4 +31,20 @@ public class UpsertStatement extends InsertStatement {
return Kind.UPSERT;
}
+ @Override
+ public int hashCode() {
+ return super.hashCode() + Kind.UPSERT.ordinal();
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof UpsertStatement)) {
+ return false;
+ }
+ return super.equals(object);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/AdmSplitInfo.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/AdmSplitInfo.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/AdmSplitInfo.java
deleted file mode 100644
index 64ec0af..0000000
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/AdmSplitInfo.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.lang.common.struct;
-
-public class AdmSplitInfo {
- public Identifier nodeName;
- public String fileName;
-
- public AdmSplitInfo(Identifier nodeName, String fileName) {
- this.nodeName = nodeName;
- this.fileName = fileName;
- }
-
- @Override
- public String toString() {
- return nodeName.value + ":" + fileName;
- }
-}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
index d029e3e..b77fd94 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/Identifier.java
@@ -18,10 +18,13 @@
*/
package org.apache.asterix.lang.common.struct;
+import org.apache.commons.lang.ObjectUtils;
+
public class Identifier {
protected String value;
public Identifier() {
+ // default constructor.
}
public Identifier(String value) {
@@ -36,22 +39,25 @@ public class Identifier {
this.value = value;
}
+ @Override
public String toString() {
return value;
}
@Override
public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
if (!(o instanceof Identifier)) {
return false;
- } else {
- Identifier i = (Identifier) o;
- return this.value.equals(i.value);
}
+ Identifier target = (Identifier) o;
+ return ObjectUtils.equals(value, target.value);
}
@Override
public int hashCode() {
- return value.hashCode();
+ return ObjectUtils.hashCode(value);
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/QuantifiedPair.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/QuantifiedPair.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/QuantifiedPair.java
index 6be8918..ab8a3f3 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/QuantifiedPair.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/QuantifiedPair.java
@@ -20,12 +20,14 @@ package org.apache.asterix.lang.common.struct;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.commons.lang3.ObjectUtils;
public class QuantifiedPair {
private VariableExpr varExpr;
private Expression expr;
public QuantifiedPair() {
+ // default constructor
}
public QuantifiedPair(VariableExpr varExpr, Expression expr) {
@@ -49,4 +51,17 @@ public class QuantifiedPair {
this.expr = expr;
}
+ @Override
+ public int hashCode() {
+ return ObjectUtils.hashCodeMulti(expr, varExpr);
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (!(object instanceof QuantifiedPair)) {
+ return false;
+ }
+ QuantifiedPair target = (QuantifiedPair) object;
+ return ObjectUtils.equals(expr, target.expr) && ObjectUtils.equals(varExpr, target.varExpr);
+ }
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java
index 6549151..a217bea 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.lang.common.struct;
+import org.apache.commons.lang3.ObjectUtils;
+
public final class VarIdentifier extends Identifier {
private int id = 0;
@@ -53,7 +55,7 @@ public final class VarIdentifier extends Identifier {
@Override
public int hashCode() {
- return value.hashCode();
+ return ObjectUtils.hashCodeMulti(value);
}
@Override
@@ -62,6 +64,6 @@ public final class VarIdentifier extends Identifier {
return false;
}
VarIdentifier vid = (VarIdentifier) obj;
- return value.equals(vid.value);
+ return ObjectUtils.equals(value, vid.value);
}
}
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/5b2d4c89/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java
index 29298db..1948b84 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java
@@ -34,19 +34,22 @@ import org.apache.hyracks.algebricks.common.utils.Pair;
public class VariableCloneAndSubstitutionUtil {
+ private VariableCloneAndSubstitutionUtil() {
+ }
+
public static List<GbyVariableExpressionPair> substInVarExprPair(LangRewritingContext context,
- List<GbyVariableExpressionPair> gbyVeList, VariableSubstitutionEnvironment arg,
- VariableSubstitutionEnvironment newSubs, CloneAndSubstituteVariablesVisitor visitor)
- throws AsterixException {
- List<GbyVariableExpressionPair> veList = new LinkedList<GbyVariableExpressionPair>();
+ List<GbyVariableExpressionPair> gbyVeList, VariableSubstitutionEnvironment newSubs,
+ CloneAndSubstituteVariablesVisitor visitor) throws AsterixException {
+ VariableSubstitutionEnvironment subs = newSubs;
+ List<GbyVariableExpressionPair> veList = new LinkedList<>();
for (GbyVariableExpressionPair vep : gbyVeList) {
VariableExpr oldGbyVar = vep.getVar();
VariableExpr newGbyVar = null;
if (oldGbyVar != null) {
newGbyVar = visitor.generateNewVariable(context, oldGbyVar);
- newSubs = eliminateSubstFromList(newGbyVar, newSubs);
+ subs = eliminateSubstFromList(newGbyVar, subs);
}
- Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = vep.getExpr().accept(visitor, newSubs);
+ Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = vep.getExpr().accept(visitor, subs);
GbyVariableExpressionPair ve2 = new GbyVariableExpressionPair(newGbyVar, (Expression) p1.first);
veList.add(ve2);
}
@@ -62,7 +65,7 @@ public class VariableCloneAndSubstitutionUtil {
public static List<Expression> visitAndCloneExprList(List<Expression> oldExprList,
VariableSubstitutionEnvironment arg, CloneAndSubstituteVariablesVisitor visitor) throws AsterixException {
- List<Expression> exprs = new ArrayList<Expression>(oldExprList.size());
+ List<Expression> exprs = new ArrayList<>(oldExprList.size());
for (Expression e : oldExprList) {
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = e.accept(visitor, arg);
exprs.add((Expression) p1.first);