http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java index 96a298f..643098f 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java @@ -18,15 +18,11 @@ */ package org.apache.asterix.runtime.aggregates.scalar; -import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; -import org.apache.asterix.om.functions.IFunctionManager; import org.apache.asterix.runtime.aggregates.base.AbstractAggregateFunctionDynamicDescriptor; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; -import org.apache.asterix.runtime.functions.FunctionManagerHolder; import org.apache.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor.ScanCollectionUnnestingFunctionFactory; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -37,6 +33,12 @@ import org.apache.hyracks.api.exceptions.HyracksDataException; public abstract class AbstractScalarAggregateDescriptor extends AbstractScalarFunctionDynamicDescriptor { private static final long serialVersionUID = 1L; + private final AbstractAggregateFunctionDynamicDescriptor aggFuncDesc; + + protected AbstractScalarAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + this.aggFuncDesc = (AbstractAggregateFunctionDynamicDescriptor) aggFuncDesc; + } + @Override public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) throws AlgebricksException { @@ -45,10 +47,6 @@ public abstract class AbstractScalarAggregateDescriptor extends AbstractScalarFu IScalarEvaluatorFactory[] aggFuncArgs = new IScalarEvaluatorFactory[1]; aggFuncArgs[0] = new ColumnAccessEvalFactory(0); // Create aggregate function from this scalar version. - FunctionIdentifier fid = BuiltinFunctions.getAggregateFunction(getIdentifier()); - IFunctionManager mgr = FunctionManagerHolder.getFunctionManager(); - IFunctionDescriptor fd = mgr.lookupFunction(fid); - AbstractAggregateFunctionDynamicDescriptor aggFuncDesc = (AbstractAggregateFunctionDynamicDescriptor) fd; final IAggregateEvaluatorFactory aggFuncFactory = aggFuncDesc.createAggregateEvaluatorFactory(aggFuncArgs); return new IScalarEvaluatorFactory() {
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java index 51419f1..9fb994a 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.AvgAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarAvgAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_AVG; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarAvgAggregateDescriptor(); + return new ScalarAvgAggregateDescriptor(AvgAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarAvgAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java index 5bdb8b1..6aba99f 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.CountAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarCountAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_COUNT; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarCountAggregateDescriptor(); + return new ScalarCountAggregateDescriptor(CountAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarCountAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java index f411bea..f18fd32 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.MaxAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarMaxAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_MAX; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarMaxAggregateDescriptor(); + return new ScalarMaxAggregateDescriptor(MaxAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarMaxAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java index b1f95b0..17d008c 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.MinAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarMinAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_MIN; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarMinAggregateDescriptor(); + return new ScalarMinAggregateDescriptor(MinAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarMinAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlAvgAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlAvgAggregateDescriptor.java index 82c301c..ecc10d2 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlAvgAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlAvgAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.SqlAvgAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarSqlAvgAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_SQL_AVG; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarSqlAvgAggregateDescriptor(); + return new ScalarSqlAvgAggregateDescriptor(SqlAvgAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarSqlAvgAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlCountAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlCountAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlCountAggregateDescriptor.java index baea906..029956a 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlCountAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlCountAggregateDescriptor.java @@ -21,18 +21,27 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.SqlCountAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarSqlCountAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_SQL_COUNT; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarSqlCountAggregateDescriptor(); + return new ScalarSqlCountAggregateDescriptor( + SqlCountAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarSqlCountAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMaxAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMaxAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMaxAggregateDescriptor.java index a182777..fb616b4 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMaxAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMaxAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.SqlMaxAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarSqlMaxAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_SQL_MAX; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarSqlMaxAggregateDescriptor(); + return new ScalarSqlMaxAggregateDescriptor(SqlMaxAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + public ScalarSqlMaxAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMinAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMinAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMinAggregateDescriptor.java index 85da97c..123b955 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMinAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlMinAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.SqlMinAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarSqlMinAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_SQL_MIN; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarSqlMinAggregateDescriptor(); + return new ScalarSqlMinAggregateDescriptor(SqlMinAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarSqlMinAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlSumAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlSumAggregateDescriptor.java index fae1a1a..078ea57 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlSumAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSqlSumAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.SqlSumAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarSqlSumAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_SQL_SUM; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarSqlSumAggregateDescriptor(); + return new ScalarSqlSumAggregateDescriptor(SqlSumAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarSqlSumAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java index d534193..4d547e1 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java @@ -21,18 +21,26 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.runtime.aggregates.std.SumAggregateDescriptor; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public class ScalarSumAggregateDescriptor extends AbstractScalarAggregateDescriptor { private static final long serialVersionUID = 1L; + public final static FunctionIdentifier FID = BuiltinFunctions.SCALAR_SUM; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { - return new ScalarSumAggregateDescriptor(); + return new ScalarSumAggregateDescriptor(SumAggregateDescriptor.FACTORY.createFunctionDescriptor()); } }; + private ScalarSumAggregateDescriptor(IFunctionDescriptor aggFuncDesc) { + super(aggFuncDesc); + } + @Override public FunctionIdentifier getIdentifier() { return FID; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ClosedRecordConstructorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ClosedRecordConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ClosedRecordConstructorDescriptor.java index 5cac892..f75f975 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ClosedRecordConstructorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ClosedRecordConstructorDescriptor.java @@ -21,22 +21,29 @@ package org.apache.asterix.runtime.evaluators.constructors; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; import org.apache.asterix.runtime.evaluators.common.ClosedRecordConstructorEvalFactory; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; public class ClosedRecordConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor { public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { return new ClosedRecordConstructorDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return FunctionTypeInferers.SET_EXPRESSION_TYPE; + } }; private static final long serialVersionUID = 1L; - private ARecordType recType; @Override @@ -53,5 +60,4 @@ public class ClosedRecordConstructorDescriptor extends AbstractScalarFunctionDyn public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) { return new ClosedRecordConstructorEvalFactory(args, recType); } - } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OpenRecordConstructorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OpenRecordConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OpenRecordConstructorDescriptor.java index 0b26583..c2c1b3f 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OpenRecordConstructorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OpenRecordConstructorDescriptor.java @@ -25,8 +25,10 @@ import org.apache.asterix.builders.RecordBuilder; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -44,6 +46,11 @@ public class OpenRecordConstructorDescriptor extends AbstractScalarFunctionDynam public IFunctionDescriptor createFunctionDescriptor() { return new OpenRecordConstructorDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.OpenRecordConstructorTypeInferer(); + } }; private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OrderedListConstructorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OrderedListConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OrderedListConstructorDescriptor.java index 977101a..3a378de 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OrderedListConstructorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/OrderedListConstructorDescriptor.java @@ -25,9 +25,11 @@ import org.apache.asterix.builders.OrderedListBuilder; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.AOrderedListType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -40,14 +42,19 @@ import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference; public class OrderedListConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor { - private static final long serialVersionUID = 1L; public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { @Override public IFunctionDescriptor createFunctionDescriptor() { return new OrderedListConstructorDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return FunctionTypeInferers.SET_EXPRESSION_TYPE; + } }; + private static final long serialVersionUID = 1L; private AOrderedListType oltype; @Override @@ -69,9 +76,7 @@ public class OrderedListConstructorDescriptor extends AbstractScalarFunctionDyna private static final long serialVersionUID = 1L; private IScalarEvaluatorFactory[] args; - private boolean selfDescList = false; - private AOrderedListType orderedlistType; public OrderedListConstructorEvaluatorFactory(IScalarEvaluatorFactory[] args, AOrderedListType type) { @@ -142,6 +147,5 @@ public class OrderedListConstructorDescriptor extends AbstractScalarFunctionDyna }; } - } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/UnorderedListConstructorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/UnorderedListConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/UnorderedListConstructorDescriptor.java index 50b7699..5f11acb 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/UnorderedListConstructorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/UnorderedListConstructorDescriptor.java @@ -25,10 +25,11 @@ import org.apache.asterix.builders.UnorderedListBuilder; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; -import org.apache.asterix.om.types.AOrderedListType; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.AUnorderedListType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -41,14 +42,19 @@ import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference; public class UnorderedListConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor { - private static final long serialVersionUID = 1L; public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { @Override public IFunctionDescriptor createFunctionDescriptor() { return new UnorderedListConstructorDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return FunctionTypeInferers.SET_EXPRESSION_TYPE; + } }; + private static final long serialVersionUID = 1L; private AUnorderedListType ultype; @Override @@ -70,7 +76,6 @@ public class UnorderedListConstructorDescriptor extends AbstractScalarFunctionDy private static final long serialVersionUID = 1L; private IScalarEvaluatorFactory[] args; - private boolean selfDescList = false; private boolean homoList = false; private AUnorderedListType unorderedlistType; @@ -144,5 +149,4 @@ public class UnorderedListConstructorDescriptor extends AbstractScalarFunctionDy } } - } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java index 7f5c58d..efc5f8a 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeDescriptor.java @@ -21,9 +21,11 @@ package org.apache.asterix.runtime.evaluators.functions; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils; import org.apache.asterix.om.types.IAType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -37,11 +39,15 @@ import org.apache.hyracks.api.exceptions.HyracksDataException; public class CastTypeDescriptor extends AbstractScalarFunctionDynamicDescriptor { public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { - @Override public IFunctionDescriptor createFunctionDescriptor() { return new CastTypeDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.CastTypeInferer(); + } }; private static final long serialVersionUID = 1L; @@ -84,4 +90,3 @@ public class CastTypeDescriptor extends AbstractScalarFunctionDynamicDescriptor }; } } - http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeLaxDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeLaxDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeLaxDescriptor.java index eea1b6e..51ea579 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeLaxDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CastTypeLaxDescriptor.java @@ -22,9 +22,11 @@ package org.apache.asterix.runtime.evaluators.functions; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils; import org.apache.asterix.om.types.IAType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -50,6 +52,11 @@ public class CastTypeLaxDescriptor extends AbstractScalarFunctionDynamicDescript public IFunctionDescriptor createFunctionDescriptor() { return new CastTypeLaxDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.CastTypeInferer(); + } }; private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/DeepEqualityDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/DeepEqualityDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/DeepEqualityDescriptor.java index 150c28e..51497ed 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/DeepEqualityDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/DeepEqualityDescriptor.java @@ -26,12 +26,14 @@ import org.apache.asterix.om.base.ABoolean; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.pointables.PointableAllocator; import org.apache.asterix.om.pointables.base.IVisitablePointable; import org.apache.asterix.om.types.BuiltinType; import org.apache.asterix.om.types.IAType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; import org.apache.asterix.runtime.evaluators.comparisons.DeepEqualAssessor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -43,11 +45,17 @@ import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference; public class DeepEqualityDescriptor extends AbstractScalarFunctionDynamicDescriptor { + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { @Override public IFunctionDescriptor createFunctionDescriptor() { return new DeepEqualityDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.DeepEqualityTypeInferer(); + } }; private static final long serialVersionUID = 1L; @@ -60,7 +68,6 @@ public class DeepEqualityDescriptor extends AbstractScalarFunctionDynamicDescrip this.inputTypeRight = (IAType) states[1]; } - @Override public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) { final IScalarEvaluatorFactory evalFactoryLeft = args[0]; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java index 7ce7dec..d641ea9 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java @@ -21,20 +21,28 @@ package org.apache.asterix.runtime.evaluators.functions.records; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; public class FieldAccessByIndexDescriptor extends AbstractScalarFunctionDynamicDescriptor { - private static final long serialVersionUID = 1L; public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { return new FieldAccessByIndexDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.FieldAccessByIndexTypeInferer(); + } }; + private static final long serialVersionUID = 1L; private ARecordType recType; @Override @@ -51,5 +59,4 @@ public class FieldAccessByIndexDescriptor extends AbstractScalarFunctionDynamicD public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) { return new FieldAccessByIndexEvalFactory(args[0], args[1], recType); } - } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java index 95b06f7..5dd3e19 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java @@ -23,20 +23,28 @@ import java.util.List; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; public class FieldAccessNestedDescriptor extends AbstractScalarFunctionDynamicDescriptor { - private static final long serialVersionUID = 1L; public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { return new FieldAccessNestedDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.FieldAccessNestedTypeInferer(); + } }; + private static final long serialVersionUID = 1L; private ARecordType recType; private List<String> fldName; @@ -55,5 +63,4 @@ public class FieldAccessNestedDescriptor extends AbstractScalarFunctionDynamicDe public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) { return new FieldAccessNestedEvalFactory(args[0], recType, fldName); } - } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java index 3419b68..631dd70 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java @@ -21,20 +21,28 @@ package org.apache.asterix.runtime.evaluators.functions.records; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; public class GetRecordFieldValueDescriptor extends AbstractScalarFunctionDynamicDescriptor { - private static final long serialVersionUID = 1L; public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { return new GetRecordFieldValueDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.GetRecordFieldValueTypeInferer(); + } }; + private static final long serialVersionUID = 1L; private ARecordType recType; @Override @@ -51,5 +59,4 @@ public class GetRecordFieldValueDescriptor extends AbstractScalarFunctionDynamic public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) { return new GetRecordFieldValueEvalFactory(args[0], args[1], recType); } - } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java index 6205d77..273e3ca 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java @@ -21,20 +21,28 @@ package org.apache.asterix.runtime.evaluators.functions.records; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; public class GetRecordFieldsDescriptor extends AbstractScalarFunctionDynamicDescriptor { - private static final long serialVersionUID = 1L; public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override public IFunctionDescriptor createFunctionDescriptor() { return new GetRecordFieldsDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.GetRecordFieldsTypeInferer(); + } }; + private static final long serialVersionUID = 1L; private ARecordType recType; @Override @@ -51,5 +59,4 @@ public class GetRecordFieldsDescriptor extends AbstractScalarFunctionDynamicDesc public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) { return new GetRecordFieldsEvalFactory(args[0], recType); } - } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java index 5df04f8..97a9ee0 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java @@ -31,6 +31,7 @@ import org.apache.asterix.dataflow.data.nontagged.hash.ListItemBinaryHashFunctio import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.pointables.AListVisitablePointable; import org.apache.asterix.om.pointables.ARecordVisitablePointable; import org.apache.asterix.om.pointables.PointableAllocator; @@ -47,6 +48,7 @@ import org.apache.asterix.runtime.evaluators.functions.BinaryHashMap; import org.apache.asterix.runtime.evaluators.functions.PointableHelper; import org.apache.asterix.runtime.exceptions.InvalidDataFormatException; import org.apache.asterix.runtime.exceptions.TypeMismatchException; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -67,7 +69,13 @@ public class RecordAddFieldsDescriptor extends AbstractScalarFunctionDynamicDesc public IFunctionDescriptor createFunctionDescriptor() { return new RecordAddFieldsDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.RecordAddFieldsTypeInferer(); + } }; + private static final long serialVersionUID = 1L; private ARecordType outRecType; private ARecordType inRecType; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java index 0b432ac..ce7ed6e 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordMergeDescriptor.java @@ -30,6 +30,7 @@ import org.apache.asterix.common.exceptions.RuntimeDataException; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.pointables.ARecordVisitablePointable; import org.apache.asterix.om.pointables.PointableAllocator; import org.apache.asterix.om.pointables.base.DefaultOpenFieldType; @@ -42,6 +43,7 @@ import org.apache.asterix.om.types.runtime.RuntimeRecordTypeInfo; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; import org.apache.asterix.runtime.evaluators.comparisons.DeepEqualAssessor; import org.apache.asterix.runtime.evaluators.functions.PointableHelper; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -68,7 +70,13 @@ public class RecordMergeDescriptor extends AbstractScalarFunctionDynamicDescript public IFunctionDescriptor createFunctionDescriptor() { return new RecordMergeDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.RecordMergeTypeInferer(); + } }; + private static final long serialVersionUID = 1L; private ARecordType outRecType; private ARecordType inRecType0; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java index 7158d2d..e5ed628 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java @@ -26,6 +26,7 @@ import org.apache.asterix.builders.OrderedListBuilder; import org.apache.asterix.builders.RecordBuilder; import org.apache.asterix.dataflow.data.nontagged.serde.AObjectSerializerDeserializer; import org.apache.asterix.om.base.AString; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.runtime.exceptions.TypeMismatchException; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; @@ -37,6 +38,7 @@ import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.utils.RecordUtil; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; @@ -54,6 +56,11 @@ public class RecordPairsDescriptor extends AbstractScalarFunctionDynamicDescript public IFunctionDescriptor createFunctionDescriptor() { return new RecordPairsDescriptor(); } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.RecordPairsTypeInferer(); + } }; private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java index 092fbfb..909c74b 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java @@ -21,29 +21,36 @@ package org.apache.asterix.runtime.evaluators.functions.records; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionTypeInferer; import org.apache.asterix.om.types.AOrderedListType; import org.apache.asterix.om.types.ARecordType; -import org.apache.asterix.om.types.IAType; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; public class RecordRemoveFieldsDescriptor extends AbstractScalarFunctionDynamicDescriptor { - private static final long serialVersionUID = 1L; + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { @Override public IFunctionDescriptor createFunctionDescriptor() { return new RecordRemoveFieldsDescriptor(); } - }; - private RecordRemoveFieldsDescriptor() { - } + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + return new FunctionTypeInferers.RecordRemoveFieldsTypeInferer(); + } + }; + private static final long serialVersionUID = 1L; private ARecordType outputRecordType; private ARecordType inputRecType; private AOrderedListType inputListType; + private RecordRemoveFieldsDescriptor() { + } + @Override public void setImmutableStates(Object... states) { outputRecordType = (ARecordType) states[0]; @@ -60,5 +67,4 @@ public class RecordRemoveFieldsDescriptor extends AbstractScalarFunctionDynamicD public FunctionIdentifier getIdentifier() { return BuiltinFunctions.REMOVE_FIELDS; } - } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/76d24d49/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java index 090352d..e237319 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java @@ -19,11 +19,8 @@ package org.apache.asterix.runtime.formats; import java.io.DataOutput; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.apache.asterix.common.config.GlobalConfig; import org.apache.asterix.dataflow.data.nontagged.MissingWriterFactory; @@ -51,20 +48,11 @@ import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.functions.IFunctionManager; -import org.apache.asterix.om.pointables.base.DefaultOpenFieldType; -import org.apache.asterix.om.typecomputer.base.TypeCastUtils; import org.apache.asterix.om.types.ARecordType; -import org.apache.asterix.om.types.ATypeTag; -import org.apache.asterix.om.types.AUnionType; import org.apache.asterix.om.types.IAType; -import org.apache.asterix.om.utils.ConstantExpressionUtil; -import org.apache.asterix.om.utils.RecordUtil; import org.apache.asterix.runtime.evaluators.common.CreateMBREvalFactory; -import org.apache.asterix.runtime.functions.FunctionManagerHolder; -import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; import org.apache.hyracks.algebricks.common.utils.Triple; import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable; @@ -73,10 +61,8 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression import org.apache.hyracks.algebricks.core.algebra.expressions.IAlgebricksConstantValue; import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionEvalSizeComputer; import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableEvalSizeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression; -import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo; import org.apache.hyracks.algebricks.data.IBinaryBooleanInspectorFactory; import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider; @@ -94,35 +80,16 @@ import org.apache.hyracks.api.dataflow.value.IMissingWriterFactory; import org.apache.hyracks.api.dataflow.value.IPredicateEvaluatorFactoryProvider; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; -import org.apache.hyracks.dataflow.common.data.parsers.DoubleParserFactory; -import org.apache.hyracks.dataflow.common.data.parsers.FloatParserFactory; -import org.apache.hyracks.dataflow.common.data.parsers.IValueParserFactory; -import org.apache.hyracks.dataflow.common.data.parsers.IntegerParserFactory; -import org.apache.hyracks.dataflow.common.data.parsers.LongParserFactory; -import org.apache.hyracks.dataflow.common.data.parsers.UTF8StringParserFactory; public class NonTaggedDataFormat implements IDataFormat { - public static final NonTaggedDataFormat INSTANCE = new NonTaggedDataFormat(); + static final NonTaggedDataFormat INSTANCE = new NonTaggedDataFormat(); private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1); - private static final HashMap<ATypeTag, IValueParserFactory> typeToValueParserFactMap = new HashMap<>(); - public static final String NON_TAGGED_DATA_FORMAT = "org.apache.asterix.runtime.formats.NonTaggedDataFormat"; - private final Map<FunctionIdentifier, FunctionTypeInferer> functionTypeInferers = new HashMap<>(); - - static { - typeToValueParserFactMap.put(ATypeTag.INTEGER, IntegerParserFactory.INSTANCE); - typeToValueParserFactMap.put(ATypeTag.FLOAT, FloatParserFactory.INSTANCE); - typeToValueParserFactMap.put(ATypeTag.DOUBLE, DoubleParserFactory.INSTANCE); - typeToValueParserFactMap.put(ATypeTag.BIGINT, LongParserFactory.INSTANCE); - typeToValueParserFactMap.put(ATypeTag.STRING, UTF8StringParserFactory.INSTANCE); - } - - public NonTaggedDataFormat() { - registerTypeInferers(); + private NonTaggedDataFormat() { } @Override @@ -152,8 +119,8 @@ public class NonTaggedDataFormat implements IDataFormat { @SuppressWarnings("unchecked") @Override - public IScalarEvaluatorFactory getFieldAccessEvaluatorFactory(ARecordType recType, List<String> fldName, - int recordColumn) throws AlgebricksException { + public IScalarEvaluatorFactory getFieldAccessEvaluatorFactory(IFunctionManager functionManager, ARecordType recType, + List<String> fldName, int recordColumn) throws AlgebricksException { IScalarEvaluatorFactory recordEvalFactory = new ColumnAccessEvalFactory(recordColumn); if (fldName.size() == 1) { @@ -173,8 +140,7 @@ public class NonTaggedDataFormat implements IDataFormat { } IScalarEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength())); - IFunctionDescriptor fDesc = FunctionManagerHolder.getFunctionManager() - .lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); + IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); fDesc.setImmutableStates(recType); return fDesc.createEvaluatorFactory( new IScalarEvaluatorFactory[] { recordEvalFactory, fldIndexEvalFactory }); @@ -190,16 +156,14 @@ public class NonTaggedDataFormat implements IDataFormat { } IScalarEvaluatorFactory fldNameEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength())); - IFunctionDescriptor fDesc = FunctionManagerHolder.getFunctionManager() - .lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_NAME); + IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_NAME); return fDesc.createEvaluatorFactory( new IScalarEvaluatorFactory[] { recordEvalFactory, fldNameEvalFactory }); } } if (fldName.size() > 1) { - IFunctionDescriptor fDesc = - FunctionManagerHolder.getFunctionManager().lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); + IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); fDesc.setImmutableStates(recType, fldName); return fDesc.createEvaluatorFactory(new IScalarEvaluatorFactory[] { recordEvalFactory }); } @@ -209,9 +173,11 @@ public class NonTaggedDataFormat implements IDataFormat { @SuppressWarnings("unchecked") @Override - public IScalarEvaluatorFactory[] createMBRFactory(ARecordType recType, List<String> fldName, int recordColumn, - int dimension, List<String> filterFieldName, boolean isPointMBR) throws AlgebricksException { - IScalarEvaluatorFactory evalFactory = getFieldAccessEvaluatorFactory(recType, fldName, recordColumn); + public IScalarEvaluatorFactory[] createMBRFactory(IFunctionManager functionManager, ARecordType recType, + List<String> fldName, int recordColumn, int dimension, List<String> filterFieldName, boolean isPointMBR) + throws AlgebricksException { + IScalarEvaluatorFactory evalFactory = + getFieldAccessEvaluatorFactory(functionManager, recType, fldName, recordColumn); int numOfFields = isPointMBR ? dimension : dimension * 2; IScalarEvaluatorFactory[] evalFactories = new IScalarEvaluatorFactory[numOfFields + (filterFieldName == null ? 0 : 1)]; @@ -242,7 +208,8 @@ public class NonTaggedDataFormat implements IDataFormat { evalFactories[i] = new CreateMBREvalFactory(evalFactory, dimensionEvalFactory, coordinateEvalFactory); } if (filterFieldName != null) { - evalFactories[numOfFields] = getFieldAccessEvaluatorFactory(recType, filterFieldName, recordColumn); + evalFactories[numOfFields] = + getFieldAccessEvaluatorFactory(functionManager, recType, filterFieldName, recordColumn); } return evalFactories; } @@ -250,7 +217,7 @@ public class NonTaggedDataFormat implements IDataFormat { @SuppressWarnings("unchecked") @Override public Triple<IScalarEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioningEvaluatorFactory( - ARecordType recType, List<String> fldName) throws AlgebricksException { + IFunctionManager functionManager, ARecordType recType, List<String> fldName) throws AlgebricksException { String[] names = recType.getFieldNames(); int n = names.length; if (fldName.size() > 1) { @@ -269,8 +236,7 @@ public class NonTaggedDataFormat implements IDataFormat { } IScalarEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength())); - IFunctionDescriptor fDesc = FunctionManagerHolder.getFunctionManager() - .lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); + IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); fDesc.setImmutableStates(recType); IScalarEvaluatorFactory evalFactory = fDesc.createEvaluatorFactory( new IScalarEvaluatorFactory[] { recordEvalFactory, fldIndexEvalFactory }); @@ -278,11 +244,9 @@ public class NonTaggedDataFormat implements IDataFormat { BuiltinFunctions.getAsterixFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); ScalarFunctionCallExpression partitionFun = new ScalarFunctionCallExpression(finfoAccess, - new MutableObject<ILogicalExpression>(new VariableReferenceExpression(METADATA_DUMMY_VAR)), - new MutableObject<ILogicalExpression>( - new ConstantExpression(new AsterixConstantValue(new AInt32(i))))); - return new Triple<IScalarEvaluatorFactory, ScalarFunctionCallExpression, IAType>(evalFactory, - partitionFun, recType.getFieldTypes()[i]); + new MutableObject<>(new VariableReferenceExpression(METADATA_DUMMY_VAR)), + new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(i))))); + return new Triple<>(evalFactory, partitionFun, recType.getFieldTypes()[i]); } } } else { @@ -296,289 +260,21 @@ public class NonTaggedDataFormat implements IDataFormat { } catch (HyracksDataException e) { throw new AlgebricksException(e); } - IFunctionDescriptor fDesc = - FunctionManagerHolder.getFunctionManager().lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); + IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); fDesc.setImmutableStates(recType, fldName); IScalarEvaluatorFactory evalFactory = fDesc.createEvaluatorFactory(new IScalarEvaluatorFactory[] { recordEvalFactory }); IFunctionInfo finfoAccess = BuiltinFunctions.getAsterixFunctionInfo(BuiltinFunctions.FIELD_ACCESS_NESTED); ScalarFunctionCallExpression partitionFun = new ScalarFunctionCallExpression(finfoAccess, - new MutableObject<ILogicalExpression>(new VariableReferenceExpression(METADATA_DUMMY_VAR)), - new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(as)))); - return new Triple<IScalarEvaluatorFactory, ScalarFunctionCallExpression, IAType>(evalFactory, partitionFun, - recType.getSubFieldType(fldName)); + new MutableObject<>(new VariableReferenceExpression(METADATA_DUMMY_VAR)), + new MutableObject<>(new ConstantExpression(new AsterixConstantValue(as)))); + return new Triple<>(evalFactory, partitionFun, recType.getSubFieldType(fldName)); } throw new AlgebricksException("Could not find field " + fldName + " in the schema."); } @Override - public IFunctionDescriptor resolveFunction(ILogicalExpression expr, IVariableTypeEnvironment context) - throws AlgebricksException { - FunctionIdentifier fnId = ((AbstractFunctionCallExpression) expr).getFunctionIdentifier(); - IFunctionManager mgr = FunctionManagerHolder.getFunctionManager(); - IFunctionDescriptor fd = mgr.lookupFunction(fnId); - if (fd == null) { - throw new AlgebricksException("Unresolved function " + fnId); - } - final FunctionIdentifier fid = fd.getIdentifier(); - if (functionTypeInferers.containsKey(fid)) { - functionTypeInferers.get(fid).infer(expr, fd, context); - } - return fd; - } - - interface FunctionTypeInferer { - void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException; - } - - void registerTypeInferers() { - functionTypeInferers.put(BuiltinFunctions.LISTIFY, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - fd.setImmutableStates(context.getType(expr)); - } - }); - functionTypeInferers.put(BuiltinFunctions.RECORD_MERGE, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr; - IAType outType = (IAType) context.getType(expr); - IAType type0 = (IAType) context.getType(f.getArguments().get(0).getValue()); - IAType type1 = (IAType) context.getType(f.getArguments().get(1).getValue()); - fd.setImmutableStates(outType, type0, type1); - } - }); - - functionTypeInferers.put(BuiltinFunctions.DEEP_EQUAL, new FunctionTypeInferer() { - - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr; - IAType type0 = (IAType) context.getType(f.getArguments().get(0).getValue()); - IAType type1 = (IAType) context.getType(f.getArguments().get(1).getValue()); - fd.setImmutableStates(type0, type1); - } - }); - - functionTypeInferers.put(BuiltinFunctions.ADD_FIELDS, new FunctionTypeInferer() { - - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr; - IAType outType = (IAType) context.getType(expr); - IAType type0 = (IAType) context.getType(f.getArguments().get(0).getValue()); - ILogicalExpression listExpr = f.getArguments().get(1).getValue(); - IAType type1 = (IAType) context.getType(listExpr); - if (type0.getTypeTag().equals(ATypeTag.ANY)) { - type0 = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE; - } - if (type1.getTypeTag().equals(ATypeTag.ANY)) { - type1 = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE; - } - fd.setImmutableStates(outType, type0, type1); - } - }); - - functionTypeInferers.put(BuiltinFunctions.REMOVE_FIELDS, new FunctionTypeInferer() { - - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr; - IAType outType = (IAType) context.getType(expr); - IAType type0 = (IAType) context.getType(f.getArguments().get(0).getValue()); - ILogicalExpression le = f.getArguments().get(1).getValue(); - IAType type1 = (IAType) context.getType(le); - if (type0.getTypeTag().equals(ATypeTag.ANY)) { - type0 = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE; - } - if (type1.getTypeTag().equals(ATypeTag.ANY)) { - type1 = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE; - } - fd.setImmutableStates(outType, type0, type1); - } - }); - functionTypeInferers.put(BuiltinFunctions.CAST_TYPE, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; - IAType rt = TypeCastUtils.getRequiredType(funcExpr); - IAType it = (IAType) context.getType(funcExpr.getArguments().get(0).getValue()); - fd.setImmutableStates(rt, it); - } - }); - functionTypeInferers.put(BuiltinFunctions.CAST_TYPE_LAX, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; - IAType rt = TypeCastUtils.getRequiredType(funcExpr); - IAType it = (IAType) context.getType(funcExpr.getArguments().get(0).getValue()); - fd.setImmutableStates(rt, it); - } - }); - functionTypeInferers.put(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - ARecordType rt = (ARecordType) context.getType(expr); - fd.setImmutableStates(rt, computeOpenFields((AbstractFunctionCallExpression) expr, rt)); - } - - private boolean[] computeOpenFields(AbstractFunctionCallExpression expr, ARecordType recType) { - int n = expr.getArguments().size() / 2; - boolean[] open = new boolean[n]; - for (int i = 0; i < n; i++) { - Mutable<ILogicalExpression> argRef = expr.getArguments().get(2 * i); - ILogicalExpression arg = argRef.getValue(); - open[i] = true; - final String fn = ConstantExpressionUtil.getStringConstant(arg); - if (fn != null) { - for (String s : recType.getFieldNames()) { - if (s.equals(fn)) { - open[i] = false; - break; - } - } - } - } - return open; - } - }); - functionTypeInferers.put(BuiltinFunctions.CLOSED_RECORD_CONSTRUCTOR, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - fd.setImmutableStates(context.getType(expr)); - } - }); - functionTypeInferers.put(BuiltinFunctions.ORDERED_LIST_CONSTRUCTOR, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - fd.setImmutableStates(context.getType(expr)); - } - }); - functionTypeInferers.put(BuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - fd.setImmutableStates(context.getType(expr)); - } - }); - functionTypeInferers.put(BuiltinFunctions.FIELD_ACCESS_BY_INDEX, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr; - IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue()); - switch (t.getTypeTag()) { - case OBJECT: { - fd.setImmutableStates(t); - break; - } - case UNION: { - AUnionType unionT = (AUnionType) t; - if (unionT.isUnknownableType()) { - IAType t2 = unionT.getActualType(); - if (t2.getTypeTag() == ATypeTag.OBJECT) { - fd.setImmutableStates(t2); - break; - } - } - throw new NotImplementedException("field-access-by-index for data of type " + t); - } - default: { - throw new NotImplementedException("field-access-by-index for data of type " + t); - } - } - } - }); - functionTypeInferers.put(BuiltinFunctions.FIELD_ACCESS_NESTED, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr; - IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue()); - AOrderedList fieldPath = (AOrderedList) (((AsterixConstantValue) ((ConstantExpression) fce - .getArguments().get(1).getValue()).getValue()).getObject()); - List<String> listFieldPath = new ArrayList<String>(); - for (int i = 0; i < fieldPath.size(); i++) { - listFieldPath.add(((AString) fieldPath.getItem(i)).getStringValue()); - } - - switch (t.getTypeTag()) { - case OBJECT: { - fd.setImmutableStates(t, listFieldPath); - break; - } - case ANY: - fd.setImmutableStates(RecordUtil.FULLY_OPEN_RECORD_TYPE, listFieldPath); - break; - default: { - throw new NotImplementedException("field-access-nested for data of type " + t); - } - } - } - }); - functionTypeInferers.put(BuiltinFunctions.GET_RECORD_FIELDS, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr; - IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue()); - ATypeTag typeTag = t.getTypeTag(); - if (typeTag.equals(ATypeTag.OBJECT)) { - fd.setImmutableStates(t); - } else if (typeTag.equals(ATypeTag.ANY)) { - fd.setImmutableStates(RecordUtil.FULLY_OPEN_RECORD_TYPE); - } else { - throw new NotImplementedException("get-record-fields for data of type " + t); - } - } - }); - functionTypeInferers.put(BuiltinFunctions.GET_RECORD_FIELD_VALUE, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr; - IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue()); - ATypeTag typeTag = t.getTypeTag(); - if (typeTag.equals(ATypeTag.OBJECT)) { - fd.setImmutableStates(t); - } else if (typeTag.equals(ATypeTag.ANY)) { - fd.setImmutableStates(RecordUtil.FULLY_OPEN_RECORD_TYPE); - } else { - throw new NotImplementedException("get-record-field-value for data of type " + t); - } - } - }); - functionTypeInferers.put(BuiltinFunctions.RECORD_PAIRS, new FunctionTypeInferer() { - @Override - public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context) - throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr; - IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue()); - ATypeTag typeTag = t.getTypeTag(); - if (typeTag.equals(ATypeTag.OBJECT)) { - fd.setImmutableStates(t); - } else if (typeTag.equals(ATypeTag.ANY)) { - fd.setImmutableStates(RecordUtil.FULLY_OPEN_RECORD_TYPE); - } else { - throw new NotImplementedException("record-fields with data of type " + t); - } - } - }); - } - - @Override public IPrinterFactoryProvider getADMPrinterFactoryProvider() { return ADMPrinterFactoryProvider.INSTANCE; }
