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/master Commit: 442f5845ead4dbb70442feb168cb69b3e6dc2d82 Parents: de02fe5 Author: Preston Carman <[email protected]> Authored: Thu Feb 13 11:26:31 2014 -0800 Committer: Preston Carman <[email protected]> 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
