Dmitry Lychagin has submitted this change and it was merged. Change subject: [ASTERIXDB-1980][FUNC] Cleanup FunctionManager lifecycle ......................................................................
[ASTERIXDB-1980][FUNC] Cleanup FunctionManager lifecycle - user model changes: no - storage format changes: no - interface changes: yes Details: - Moved FunctionCollection from asterix-algebra/org.apache.asterix.translator.util to asterix-runtime/org.apache.asterix.runtime.functions - Moved FunctionManagerHolder from asterix-om/org.apache.asterix.om.functions to asterix-runtime/org.apache.asterix.runtime.functions - Removed IDataFormat.registerRuntimeFunctions() Change-Id: If96e425a096bc0312a68d81b04686d7165f1a1fd Reviewed-on: https://asterix-gerrit.ics.uci.edu/1873 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> BAD: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Yingyi Bu <[email protected]> --- M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/NullMissingTest.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java D asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/FunctionManagerHolder.java M asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java M asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java R asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java A asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerHolder.java R asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerImpl.java 13 files changed, 67 insertions(+), 95 deletions(-) Approvals: Yingyi Bu: Looks good to me, approved Jenkins: Verified; No violations found; No violations found; Verified diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java index 8258d51..b8a6d8a 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java @@ -94,13 +94,11 @@ import org.apache.asterix.om.functions.FunctionInfo; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.IAType; -import org.apache.asterix.runtime.formats.FormatUtils; import org.apache.asterix.translator.CompiledStatements.CompiledInsertStatement; import org.apache.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement; import org.apache.asterix.translator.CompiledStatements.CompiledSubscribeFeedStatement; import org.apache.asterix.translator.CompiledStatements.CompiledUpsertStatement; import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement; -import org.apache.asterix.translator.util.FunctionCollection; import org.apache.asterix.translator.util.PlanTranslationUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java index 744f99c..583302b 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java @@ -62,14 +62,12 @@ import org.apache.asterix.lang.common.util.FunctionUtil; import org.apache.asterix.metadata.declared.MetadataProvider; import org.apache.asterix.optimizer.base.FuzzyUtils; -import org.apache.asterix.runtime.formats.FormatUtils; import org.apache.asterix.runtime.job.listener.JobEventListenerFactory; import org.apache.asterix.transaction.management.service.transaction.JobIdFactory; import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement; import org.apache.asterix.translator.IStatementExecutor.Stats; import org.apache.asterix.translator.SessionConfig; import org.apache.asterix.translator.SessionOutput; -import org.apache.asterix.translator.util.FunctionCollection; import org.apache.asterix.utils.ResourceUtils; import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint; import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint; @@ -133,10 +131,6 @@ this.astPrintVisitorFactory = compilationProvider.getAstPrintVisitorFactory(); this.translatorFactory = compilationProvider.getExpressionToPlanTranslatorFactory(); this.ruleSetFactory = compilationProvider.getRuleSetFactory(); - } - - static { - FormatUtils.getDefaultFormat().registerRuntimeFunctions(FunctionCollection.getFunctionDescriptorFactories()); } private static class OptimizationContextFactory implements IOptimizationContextFactory { diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java index 0d9f789..3c54c7c 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/ExceptionIT.java @@ -28,7 +28,7 @@ import org.apache.asterix.om.functions.IFunctionDescriptorFactory; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; -import org.apache.asterix.translator.util.FunctionCollection; +import org.apache.asterix.runtime.functions.FunctionCollection; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; import org.apache.hyracks.algebricks.runtime.evaluators.ConstantEvalFactory; diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/NullMissingTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/NullMissingTest.java index 7827297..f5e7402 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/NullMissingTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/NullMissingTest.java @@ -29,7 +29,7 @@ import org.apache.asterix.om.functions.IFunctionDescriptorFactory; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; -import org.apache.asterix.translator.util.FunctionCollection; +import org.apache.asterix.runtime.functions.FunctionCollection; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; import org.apache.hyracks.algebricks.runtime.evaluators.ConstantEvalFactory; diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java index 775efbe..fa33790 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java @@ -31,8 +31,8 @@ import org.apache.asterix.metadata.entities.Dataset; import org.apache.asterix.metadata.entities.Index; import org.apache.asterix.om.functions.BuiltinFunctions; -import org.apache.asterix.om.functions.FunctionManagerHolder; import org.apache.asterix.om.functions.IFunctionDescriptor; +import org.apache.asterix.runtime.functions.FunctionManagerHolder; import org.apache.asterix.runtime.operators.LSMSecondaryIndexBulkLoadOperatorDescriptor; import org.apache.asterix.runtime.operators.LSMSecondaryIndexCreationTupleProcessorOperatorDescriptor; import org.apache.asterix.transaction.management.opcallbacks.PrimaryIndexInstantSearchOperationCallbackFactory; diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java index 8c45c11..8fc9ed7 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java @@ -42,13 +42,13 @@ import org.apache.asterix.metadata.entities.InternalDatasetDetails; import org.apache.asterix.metadata.lock.ExternalDatasetsRegistry; import org.apache.asterix.om.functions.BuiltinFunctions; -import org.apache.asterix.om.functions.FunctionManagerHolder; import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.IAType; import org.apache.asterix.runtime.evaluators.functions.AndDescriptor; import org.apache.asterix.runtime.evaluators.functions.IsUnknownDescriptor; import org.apache.asterix.runtime.evaluators.functions.NotDescriptor; +import org.apache.asterix.runtime.functions.FunctionManagerHolder; import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint; import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraintHelper; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java index 5be58cb..7624a8a 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java @@ -45,8 +45,6 @@ import org.apache.hyracks.api.dataflow.value.IPredicateEvaluatorFactoryProvider; public interface IDataFormat { - public void registerRuntimeFunctions(List<IFunctionDescriptorFactory> funcDescriptor); - public ISerializerDeserializerProvider getSerdeProvider(); public IBinaryHashFunctionFactoryProvider getBinaryHashFunctionFactoryProvider(); diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/FunctionManagerHolder.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/FunctionManagerHolder.java deleted file mode 100644 index 9193793..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/FunctionManagerHolder.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.asterix.om.functions; - -public class FunctionManagerHolder { - private static IFunctionManager functionManager; - - public static IFunctionManager getFunctionManager() { - return functionManager; - } - - public static void setFunctionManager(IFunctionManager manager) { - functionManager = manager; - } -} 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 a2a36cc..96a298f 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 @@ -19,11 +19,11 @@ package org.apache.asterix.runtime.aggregates.scalar; import org.apache.asterix.om.functions.BuiltinFunctions; -import org.apache.asterix.om.functions.FunctionManagerHolder; 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; 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 33d9f45..090352d 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 @@ -26,8 +26,6 @@ import java.util.Map; import org.apache.asterix.common.config.GlobalConfig; -import org.apache.asterix.common.exceptions.AsterixException; -import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.dataflow.data.nontagged.MissingWriterFactory; import org.apache.asterix.formats.base.IDataFormat; import org.apache.asterix.formats.nontagged.ADMPrinterFactoryProvider; @@ -51,9 +49,7 @@ import org.apache.asterix.om.base.IAObject; import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.functions.BuiltinFunctions; -import org.apache.asterix.om.functions.FunctionManagerHolder; import org.apache.asterix.om.functions.IFunctionDescriptor; -import org.apache.asterix.om.functions.IFunctionDescriptorFactory; import org.apache.asterix.om.functions.IFunctionManager; import org.apache.asterix.om.pointables.base.DefaultOpenFieldType; import org.apache.asterix.om.typecomputer.base.TypeCastUtils; @@ -64,7 +60,7 @@ 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.evaluators.common.FunctionManagerImpl; +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; @@ -107,8 +103,6 @@ public class NonTaggedDataFormat implements IDataFormat { - private static boolean registered = false; - public static final NonTaggedDataFormat INSTANCE = new NonTaggedDataFormat(); private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1); @@ -117,7 +111,7 @@ public static final String NON_TAGGED_DATA_FORMAT = "org.apache.asterix.runtime.formats.NonTaggedDataFormat"; - private Map<FunctionIdentifier, FunctionTypeInferer> functionTypeInferers = new HashMap<>(); + private final Map<FunctionIdentifier, FunctionTypeInferer> functionTypeInferers = new HashMap<>(); static { typeToValueParserFactMap.put(ATypeTag.INTEGER, IntegerParserFactory.INSTANCE); @@ -128,36 +122,7 @@ } public NonTaggedDataFormat() { - } - - @Override - public void registerRuntimeFunctions(List<IFunctionDescriptorFactory> funcDescriptors) { - - if (registered) { - return; - } - registered = true; - - if (FunctionManagerHolder.getFunctionManager() != null) { - return; - } - - IFunctionManager mgr = new FunctionManagerImpl(); - for (IFunctionDescriptorFactory fdFactory : funcDescriptors) { - mgr.registerFunction(fdFactory); - } - FunctionManagerHolder.setFunctionManager(mgr); - registerTypeInferers(); - } - - private IFunctionDescriptor lookupRuntimeFunction(FunctionIdentifier funcId) - throws AlgebricksException { - IFunctionManager mgr = FunctionManagerHolder.getFunctionManager(); - if (mgr == null) { - throw new AsterixException(ErrorCode.COMPILATION_ILLEGAL_STATE, funcId); - } - return mgr.lookupFunction(funcId); } @Override @@ -208,7 +173,8 @@ } IScalarEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength())); - IFunctionDescriptor fDesc = lookupRuntimeFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); + IFunctionDescriptor fDesc = FunctionManagerHolder.getFunctionManager() + .lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); fDesc.setImmutableStates(recType); return fDesc.createEvaluatorFactory( new IScalarEvaluatorFactory[] { recordEvalFactory, fldIndexEvalFactory }); @@ -224,14 +190,16 @@ } IScalarEvaluatorFactory fldNameEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength())); - IFunctionDescriptor fDesc = lookupRuntimeFunction(BuiltinFunctions.FIELD_ACCESS_BY_NAME); + IFunctionDescriptor fDesc = FunctionManagerHolder.getFunctionManager() + .lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_NAME); return fDesc.createEvaluatorFactory( new IScalarEvaluatorFactory[] { recordEvalFactory, fldNameEvalFactory }); } } if (fldName.size() > 1) { - IFunctionDescriptor fDesc = lookupRuntimeFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); + IFunctionDescriptor fDesc = + FunctionManagerHolder.getFunctionManager().lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); fDesc.setImmutableStates(recType, fldName); return fDesc.createEvaluatorFactory(new IScalarEvaluatorFactory[] { recordEvalFactory }); } @@ -301,7 +269,8 @@ } IScalarEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength())); - IFunctionDescriptor fDesc = lookupRuntimeFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); + IFunctionDescriptor fDesc = FunctionManagerHolder.getFunctionManager() + .lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX); fDesc.setImmutableStates(recType); IScalarEvaluatorFactory evalFactory = fDesc.createEvaluatorFactory( new IScalarEvaluatorFactory[] { recordEvalFactory, fldIndexEvalFactory }); @@ -327,7 +296,8 @@ } catch (HyracksDataException e) { throw new AlgebricksException(e); } - IFunctionDescriptor fDesc = lookupRuntimeFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); + IFunctionDescriptor fDesc = + FunctionManagerHolder.getFunctionManager().lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED); fDesc.setImmutableStates(recType, fldName); IScalarEvaluatorFactory evalFactory = fDesc.createEvaluatorFactory(new IScalarEvaluatorFactory[] { recordEvalFactory }); diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/FunctionCollection.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java similarity index 99% rename from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/FunctionCollection.java rename to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java index fa67e25..c02732f 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/FunctionCollection.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.asterix.translator.util; +package org.apache.asterix.runtime.functions; import java.lang.reflect.Field; import java.util.ArrayList; @@ -333,7 +333,7 @@ /** * This class (statically) holds a list of function descriptor factories. */ -public class FunctionCollection { +public final class FunctionCollection { private static final String FACTORY = "FACTORY"; private static final List<IFunctionDescriptorFactory> temp = new ArrayList<>(); @@ -741,4 +741,6 @@ } } + private FunctionCollection() { + } } diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerHolder.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerHolder.java new file mode 100644 index 0000000..52b61bb --- /dev/null +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerHolder.java @@ -0,0 +1,41 @@ +/* + * 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.functions; + +import org.apache.asterix.om.functions.IFunctionDescriptorFactory; +import org.apache.asterix.om.functions.IFunctionManager; + +public final class FunctionManagerHolder { + private static final IFunctionManager functionManager = createFunctionManager(); + + public static IFunctionManager getFunctionManager() { + return functionManager; + } + + private static IFunctionManager createFunctionManager() { + FunctionManagerImpl mgr = new FunctionManagerImpl(); + for (IFunctionDescriptorFactory fdFactory : FunctionCollection.getFunctionDescriptorFactories()) { + mgr.registerFunction(fdFactory); + } + return mgr; + } + + private FunctionManagerHolder() { + } +} diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerImpl.java similarity index 87% rename from asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java rename to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerImpl.java index ae9a700..4056955 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionManagerImpl.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.asterix.runtime.evaluators.common; +package org.apache.asterix.runtime.functions; import java.util.ArrayList; import java.util.HashMap; @@ -31,10 +31,10 @@ import org.apache.hyracks.algebricks.common.utils.Pair; import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; -public class FunctionManagerImpl implements IFunctionManager { +final class FunctionManagerImpl implements IFunctionManager { private final Map<Pair<FunctionIdentifier, Integer>, IFunctionDescriptorFactory> functions; - public FunctionManagerImpl() { + FunctionManagerImpl() { functions = new HashMap<>(); } @@ -51,7 +51,7 @@ @Override public synchronized void registerFunction(IFunctionDescriptorFactory descriptorFactory) { FunctionIdentifier fid = descriptorFactory.createFunctionDescriptor().getIdentifier(); - functions.put(new Pair<FunctionIdentifier, Integer>(fid, fid.getArity()), descriptorFactory); + functions.put(new Pair<>(fid, fid.getArity()), descriptorFactory); } @Override @@ -63,6 +63,6 @@ @Override public synchronized Iterator<IFunctionDescriptorFactory> iterator() { - return new ArrayList<IFunctionDescriptorFactory>(functions.values()).iterator(); + return new ArrayList<>(functions.values()).iterator(); } } -- To view, visit https://asterix-gerrit.ics.uci.edu/1873 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: If96e425a096bc0312a68d81b04686d7165f1a1fd Gerrit-PatchSet: 3 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Dmitry Lychagin <[email protected]> Gerrit-Reviewer: Dmitry Lychagin <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]> Gerrit-Reviewer: Yingyi Bu <[email protected]>
