Repository: asterixdb Updated Branches: refs/heads/master ae2d45498 -> 7090e74bb
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7090e74b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java new file mode 100644 index 0000000..2e6fb99 --- /dev/null +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ArraySliceWithoutEndPositionDescriptor.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.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.types.IAType; +import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; +import org.apache.asterix.runtime.functions.FunctionTypeInferers; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +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; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.api.exceptions.SourceLocation; + +/** + * array_slice(array, start) This function takes 2 arguments, {@code array} and {@code start} and returns + * a subset of the array that starts at position {@code start} to position {@code length - 1}. + */ +public class ArraySliceWithoutEndPositionDescriptor extends AbstractScalarFunctionDynamicDescriptor { + private static final long serialVersionUID = 1L; + private IAType inputListType; + + public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() { + @Override + public IFunctionDescriptor createFunctionDescriptor() { + return new ArraySliceWithoutEndPositionDescriptor(); + } + + @Override + public IFunctionTypeInferer createFunctionTypeInferer() { + // the type of the input list is needed in order to use the same type for the new returned list + return FunctionTypeInferers.SET_ARGUMENT_TYPE; + } + }; + + @Override + public FunctionIdentifier getIdentifier() { + return BuiltinFunctions.ARRAY_SLICE_WITHOUT_END_POSITION; + } + + @Override + public void setImmutableStates(Object... states) { + inputListType = (IAType) states[0]; + } + + @Override + public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) + throws AlgebricksException { + return new IScalarEvaluatorFactory() { + private static final long serialVersionUID = 1L; + + @Override + public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException { + return new ArraySliceEval(args, ctx, sourceLoc); + } + }; + } + + public class ArraySliceEval extends AbstractArraySliceEval { + + // Constructor + public ArraySliceEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx, SourceLocation sourceLoc) + throws HyracksDataException { + super(args, ctx, sourceLoc, ArraySliceWithoutEndPositionDescriptor.this.getIdentifier(), inputListType); + } + + // Return null, no end position + @Override + protected IScalarEvaluator getEndPositionEval(IScalarEvaluatorFactory[] args, IHyracksTaskContext ctx) { + return null; + } + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/7090e74b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java index dd1d862..2ba4b15 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java @@ -241,7 +241,9 @@ import org.apache.asterix.runtime.evaluators.functions.ArrayRemoveDescriptor; import org.apache.asterix.runtime.evaluators.functions.ArrayRepeatDescriptor; import org.apache.asterix.runtime.evaluators.functions.ArrayReplaceDescriptor; import org.apache.asterix.runtime.evaluators.functions.ArrayReverseDescriptor; +import org.apache.asterix.runtime.evaluators.functions.ArraySliceWithEndPositionDescriptor; import org.apache.asterix.runtime.evaluators.functions.ArraySortDescriptor; +import org.apache.asterix.runtime.evaluators.functions.ArraySliceWithoutEndPositionDescriptor; import org.apache.asterix.runtime.evaluators.functions.ArrayStarDescriptor; import org.apache.asterix.runtime.evaluators.functions.ArraySymDiffDescriptor; import org.apache.asterix.runtime.evaluators.functions.ArraySymDiffnDescriptor; @@ -498,6 +500,8 @@ public final class FunctionCollection implements IFunctionCollection { fc.addGenerated(ArrayRangeDescriptor.FACTORY); fc.addGenerated(ArrayFlattenDescriptor.FACTORY); fc.add(ArrayReplaceDescriptor.FACTORY); + fc.addGenerated(ArraySliceWithEndPositionDescriptor.FACTORY); + fc.addGenerated(ArraySliceWithoutEndPositionDescriptor.FACTORY); fc.addGenerated(ArraySymDiffDescriptor.FACTORY); fc.addGenerated(ArraySymDiffnDescriptor.FACTORY); fc.addGenerated(ArrayStarDescriptor.FACTORY);
