/// <summary>
 /// Ctor.
 /// </summary>
 /// <param name="distinct">flag indicating unique or non-unique value aggregation</param>
 /// <param name="config">The configuration.</param>
 /// <param name="pluginAggregationMultiFunctionFactory">the factory</param>
 /// <param name="functionName">is the aggregation function name</param>
 public ExprPlugInAggMultiFunctionNode(bool distinct, ConfigurationPlugInAggregationMultiFunction config, PlugInAggregationMultiFunctionFactory pluginAggregationMultiFunctionFactory, string functionName)
     : base(distinct)
 {
     _pluginAggregationMultiFunctionFactory = pluginAggregationMultiFunctionFactory;
     _functionName = functionName;
     _config       = config;
 }
Esempio n. 2
0
        public static ExprNode TryResolveAsAggregation(
            EngineImportService engineImportService,
            bool distinct,
            String functionName,
            LazyAllocatedMap <ConfigurationPlugInAggregationMultiFunction, PlugInAggregationMultiFunctionFactory> plugInAggregations,
            String engineURI)
        {
            try
            {
                AggregationFunctionFactory aggregationFactory = engineImportService.ResolveAggregationFactory(functionName);
                return(new ExprPlugInAggNode(distinct, aggregationFactory, functionName));
            }
            catch (EngineImportUndefinedException)
            {
                // Not an aggregation function
            }
            catch (EngineImportException e)
            {
                throw new IllegalStateException("Error resolving aggregation: " + e.Message, e);
            }

            // try plug-in aggregation multi-function
            ConfigurationPlugInAggregationMultiFunction config =
                engineImportService.ResolveAggregationMultiFunction(functionName);

            if (config != null)
            {
                PlugInAggregationMultiFunctionFactory factory = plugInAggregations.Map.Get(config);
                if (factory == null)
                {
                    factory = TypeHelper.Instantiate <PlugInAggregationMultiFunctionFactory>(
                        config.MultiFunctionFactoryClassName);
                    plugInAggregations.Map.Put(config, factory);
                }
                factory.AddAggregationFunction(
                    new PlugInAggregationMultiFunctionDeclarationContext(
                        functionName.ToLower(), distinct, engineURI, config));
                return(new ExprPlugInAggMultiFunctionNode(distinct, config, factory, functionName));
            }

            // try built-in expanded set of aggregation functions
            return(engineImportService.ResolveAggExtendedBuiltin(functionName, distinct));
        }