コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="lstParameters"></param>
        /// <param name="template"></param>
        /// <returns></returns>
        public string DonutFunctionToMongoAggregateElement(List <ParameterExpression> lstParameters, string template)
        {
            for (int i = 0; i < lstParameters.Count; i++)
            {
                var    parameter = lstParameters[i];
                object paramOutputObj;
                var    pValue        = parameter.Value;
                var    argExpVisitor = new AggregateFeatureGeneratingExpressionVisitor(_script);
                //If we visit functions here, note that in the pipeline
                var paramStr         = argExpVisitor.Visit(parameter as IExpression, out paramOutputObj);
                var subAggregateTree = argExpVisitor.AggregateTree;
                if (pValue is NameExpression varValue && varValue.Member != null)
                {
                    var isRootIntegrationVar = varValue.Name == _script.GetRootIntegration().Name;
                    //Strip the root integration name in cases of [IntegrationName].[Function].
                    if (isRootIntegrationVar)
                    {
                        pValue = varValue.Member;
                    }
                }
                if (pValue is MemberExpression memberValue)
                {
                    pValue = memberValue.Parent;
                }
                ChildStages.AddRange(subAggregateTree.Stages);
                if (pValue is CallExpression || paramOutputObj is IDonutTemplateFunction <string> )
                {
                    if (Function.Type == DonutFunctionType.GroupField)
                    {
                        if (paramOutputObj is IDonutTemplateFunction <string> iDonutFn &&
                            iDonutFn.Type == DonutFunctionType.Project)
                        {
                            throw new System.Exception(
                                      $"Function {Function} is a grouping and cannot have projection arguments.");
                        }
                    }
                }
                template = FormatDonutFnAggregateParameter(template, pValue, paramOutputObj, i, paramStr);
            }

            return(template);
        }
コード例 #2
0
 public AggregateFeatureCodeGenerator(DonutScript script, AggregateFeatureGeneratingExpressionVisitor expVisitor)
     : base(script)
 {
     _donutFnResolver = new DonutFunctions();
     _rootIntegration = script.Integrations.FirstOrDefault();
     if (_rootIntegration == null)
     {
         throw new InvalidIntegrationException("Script has no integrations");
     }
     if (_rootIntegration.Fields == null || _rootIntegration.Fields.Count == 0)
     {
         throw new InvalidIntegrationException("Integration has no fields");
     }
     _rootDataMember   = script.GetDatasetMember(_rootIntegration.Name);
     _outputCollection = _rootIntegration.FeaturesCollection;
     if (string.IsNullOrEmpty(_outputCollection))
     {
         throw new InvalidOperationException("Root integration must have a features collection set.");
     }
     _expVisitor        = expVisitor ?? throw new ArgumentNullException(nameof(expVisitor));
     _aggregateJobTrees = new List <AggregateJobTree>();
 }
コード例 #3
0
        //private DataIntegration _integration;

        public DonutScriptCodeGenerator(DonutScript script)
        {
            _expVisitor = new AggregateFeatureGeneratingExpressionVisitor(script);
            //_integration = integration;
        }