You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by ti...@apache.org on 2014/03/14 23:09:27 UTC

[06/25] git commit: Added short circuiting for both AND and OR scalar evaluators.

Added short circuiting for both AND and OR scalar evaluators.


Project: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/commit/442f5845
Tree: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/tree/442f5845
Diff: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/diff/442f5845

Branch: refs/heads/westmann/prettyprint
Commit: 442f5845ead4dbb70442feb168cb69b3e6dc2d82
Parents: de02fe5
Author: Preston Carman <pr...@apache.org>
Authored: Thu Feb 13 11:26:31 2014 -0800
Committer: Preston Carman <pr...@apache.org>
Committed: Thu Feb 13 11:26:31 2014 -0800

----------------------------------------------------------------------
 .../bool/AndScalarEvaluatorFactory.java         | 41 +++++++++++++-------
 .../bool/OrScalarEvaluatorFactory.java          | 40 ++++++++++++-------
 2 files changed, 51 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/442f5845/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
index b1785de..15570a8 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
@@ -18,8 +18,6 @@ package org.apache.vxquery.runtime.functions.bool;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.XDMConstants;
-import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -28,6 +26,7 @@ import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.data.std.api.IPointable;
 import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
 
 public class AndScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
@@ -39,20 +38,32 @@ public class AndScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalar
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
             throws AlgebricksException {
-        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
-            private final BooleanPointable bp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
-
-            @Override
-            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
-                for (TaggedValuePointable arg : args) {
-                    arg.getValue(bp);
-                    if (!bp.getBoolean()) {
-                        XDMConstants.setFalse(result);
-                        return;
-                    }
+        return new AndScalarEvaluator(args);
+    }
+
+    private class AndScalarEvaluator implements IScalarEvaluator {
+        private final IScalarEvaluator[] args;
+
+        private final BooleanPointable bp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
+
+        private final TaggedValuePointable tvp = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+
+        public AndScalarEvaluator(IScalarEvaluator[] args) {
+            this.args = args;
+        }
+
+        @Override
+        public final void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+            for (int i = 0; i < args.length; ++i) {
+                args[i].evaluate(tuple, tvp);
+                tvp.getValue(bp);
+                if (!bp.getBoolean()) {
+                    XDMConstants.setFalse(result);
+                    return;
                 }
-                XDMConstants.setTrue(result);
             }
-        };
+            XDMConstants.setTrue(result);
+        }
     }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/442f5845/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
index 5309ba5..c09de95 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
@@ -18,8 +18,6 @@ package org.apache.vxquery.runtime.functions.bool;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.XDMConstants;
-import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -28,6 +26,7 @@ import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.data.std.api.IPointable;
 import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
 
 public class OrScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
@@ -39,20 +38,31 @@ public class OrScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarE
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
             throws AlgebricksException {
-        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
-            private final BooleanPointable bp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
-
-            @Override
-            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
-                for (TaggedValuePointable arg : args) {
-                    arg.getValue(bp);
-                    if (bp.getBoolean()) {
-                        XDMConstants.setTrue(result);
-                        return;
-                    }
+        return new OrScalarEvaluator(args);
+    }
+
+    private class OrScalarEvaluator implements IScalarEvaluator {
+        private final IScalarEvaluator[] args;
+
+        private final BooleanPointable bp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
+
+        private final TaggedValuePointable tvp = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+
+        public OrScalarEvaluator(IScalarEvaluator[] args) {
+            this.args = args;
+        }
+
+        @Override
+        public final void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+            for (int i = 0; i < args.length; ++i) {
+                args[i].evaluate(tuple, tvp);
+                tvp.getValue(bp);
+                if (bp.getBoolean()) {
+                    XDMConstants.setTrue(result);
+                    return;
                 }
-                XDMConstants.setFalse(result);
             }
-        };
+            XDMConstants.setFalse(result);
+        }
     }
 }
\ No newline at end of file