コード例 #1
0
ファイル: RoutineExtensions.cs プロジェクト: deveel/deveeldb
        public static InvokeResult Execute(this IRoutine routine, InvokeArgument[] args, IRequest request, IVariableResolver resolver, IGroupResolver group)
        {
            var invoke = new Invoke(routine.ObjectInfo.FullName, args);

            var executeContext = new InvokeContext(invoke, routine, resolver, group, request);
            return routine.Execute(executeContext);
        }
コード例 #2
0
ファイル: Invoke.cs プロジェクト: meikeric/deveeldb
        public InvokeResult Execute(IRequest query, IVariableResolver resolver, IGroupResolver group)
        {
            var routine        = ResolveRoutine(query);
            var executeContext = new InvokeContext(this, routine, resolver, group, query);

            return(routine.Execute(executeContext));
        }
コード例 #3
0
        //public override SqlExpression VisitConstant(SqlConstantExpression constant) {
        //	var value = constant.Value;
        //	if (value.IsNull)
        //		return constant;

        //	var obj = value.Value;
        //	if (obj is SqlQueryObject) {
        //		return EvaluateQueryPlan((SqlQueryObject) obj);
        //	}

        //	return base.VisitConstant(constant);
        //}

        //private SqlConstantExpression EvaluateQueryPlan(SqlQueryObject obj) {
        //	if (context.QueryContext == null)
        //		throw new ExpressionEvaluateException("A query context is required to evaluate a query.");

        //	try {
        //		var plan = obj.QueryPlan;
        //		var result = plan.Evaluate(context.QueryContext);

        //		return SqlExpression.Constant(new DataObject(new TabularType(), SqlTabular.From(result)));
        //	} catch (ExpressionEvaluateException) {
        //		throw;
        //	} catch (Exception ex) {
        //		throw new ExpressionEvaluateException("Could not evaluate a query.", ex);
        //	}
        //}

        public override SqlExpression VisitFunctionCall(SqlFunctionCallExpression expression)
        {
            try {
                var               invoke           = new Invoke(expression.FunctioName, expression.Arguments);
                IRequest          request          = null;
                IVariableResolver variableResolver = null;
                IGroupResolver    groupResolver    = null;
                if (context != null)
                {
                    request          = context.Request;
                    variableResolver = context.VariableResolver;
                    groupResolver    = context.GroupResolver;
                }

                // TODO: if we don't have a return value (PROCEDURES) what should w return?
                var result = invoke.Execute(request, variableResolver, groupResolver);
                if (!result.HasReturnValue)
                {
                    return(SqlExpression.Constant(DataObject.Null()));
                }

                return(SqlExpression.Constant(result.ReturnValue));
            } catch (ExpressionEvaluateException) {
                throw;
            } catch (Exception ex) {
                throw new ExpressionEvaluateException(String.Format("Could not evaluate function expression '{0}' because of an error.", expression), ex);
            }
        }
コード例 #4
0
        /// <summary>
        /// Executes the function given the cintext provided.
        /// </summary>
        /// <param name="function">The function to execute.</param>
        /// <param name="request">The invocation information that was used to resolve 
        /// the function.</param>
        /// <param name="group"></param>
        /// <param name="resolver"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public static DataObject Execute(this IFunction function, Invoke request, IGroupResolver group,
			IVariableResolver resolver,
			IRequest query)
        {
            var execContext = new InvokeContext(request, function, resolver, group, query);
            var result = function.Execute(execContext);
            return result.ReturnValue;
        }
コード例 #5
0
        /// <summary>
        /// Executes the function given the cintext provided.
        /// </summary>
        /// <param name="function">The function to execute.</param>
        /// <param name="request">The invocation information that was used to resolve
        /// the function.</param>
        /// <param name="group"></param>
        /// <param name="resolver"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public static DataObject Execute(this IFunction function, Invoke request, IGroupResolver group,
                                         IVariableResolver resolver,
                                         IRequest query)
        {
            var execContext = new InvokeContext(request, function, resolver, group, query);
            var result      = function.Execute(execContext);

            return(result.ReturnValue);
        }
コード例 #6
0
        public static ExecuteResult Execute(this IRoutine routine, SqlExpression[] args, IQueryContext context, IVariableResolver resolver, IGroupResolver group)
        {
            var request = new Invoke(routine.FullName, args);

            if (context != null &&
                !context.UserCanExecuteFunction(request))
                throw new InvalidOperationException();

            var executeContext = new ExecuteContext(request, routine, resolver, group, context);
            return routine.Execute(executeContext);
        }
コード例 #7
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context)
            {
                /*
                 * TODO:
                 * if (ob2.DataType is QueryType) {
                 *      // The sub-query plan
                 *      IQueryPlanNode plan = (IQueryPlanNode) ob2.Value;
                 *      // Discover the correlated variables for this plan.
                 *      IList<CorrelatedVariable> list = plan.DiscoverCorrelatedVariables(1, new List<CorrelatedVariable>());
                 *
                 *      if (list.Count > 0) {
                 *              // Set the correlated variables from the IVariableResolver
                 *              foreach (CorrelatedVariable variable in list) {
                 *                      variable.SetFromResolver(resolver);
                 *              }
                 *              // Clear the cache in the context
                 *              context.ClearCache();
                 *      }
                 *
                 *      // Evaluate the plan,
                 *      Table t = plan.Evaluate(context);
                 *
                 *      // The ANY operation
                 *      Operator revPlainOp = GetSubQueryForm(OperatorSubType.None).Reverse();
                 *      return t.ColumnMatchesValue(0, revPlainOp, ob1);
                 * }
                 * if (ob2.DataType is ArrayType) {
                 *      Operator plain_op = GetSubQueryForm(OperatorSubType.None);
                 *      Expression[] expList = (Expression[])ob2.Object;
                 *      // Assume there are no matches
                 *      DataObject retVal = DataObject.BooleanFalse;
                 *      foreach (Expression exp in expList) {
                 *              DataObject exp_item = exp.Evaluate(group, resolver, context);
                 *              // If null value, return null if there isn't otherwise a match found.
                 *              if (exp_item.IsNull) {
                 *                      retVal = DataObject.BooleanNull;
                 *              } else if (IsTrue(plain_op.Evaluate(ob1, exp_item, null, null, null))) {
                 *                      // If there is a match, the ANY set test is true
                 *                      return DataObject.BooleanTrue;
                 *              }
                 *      }
                 *      // No matches, so return either false or NULL.  If there are no matches
                 *      // and no nulls, return false.  If there are no matches and there are
                 *      // nulls present, return null.
                 *      return retVal;
                 * }
                 *
                 * throw new ApplicationException("Unknown RHS of ANY.");
                 */

                throw new NotImplementedException();
            }
コード例 #8
0
ファイル: ExecuteContext.cs プロジェクト: prepare/deveeldb
        internal ExecuteContext(Invoke invoke, IRoutine routine, IVariableResolver resolver, IGroupResolver group, IQueryContext queryContext)
        {
            if (invoke == null)
                throw new ArgumentNullException("invoke");
            if (routine == null)
                throw new ArgumentNullException("routine");

            QueryContext = queryContext;
            GroupResolver = group;
            VariableResolver = resolver;
            Invoke = invoke;
            Routine = routine;
        }
コード例 #9
0
ファイル: InvokeContext.cs プロジェクト: deveel/deveeldb
        internal InvokeContext(Invoke invoke, IRoutine routine, IVariableResolver resolver, IGroupResolver group, IRequest request)
        {
            if (invoke == null)
                throw new ArgumentNullException("invoke");
            if (routine == null)
                throw new ArgumentNullException("routine");

            Request = request;
            GroupResolver = group;
            VariableResolver = resolver;
            Invoke = invoke;
            Routine = routine;
        }
コード例 #10
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context)
            {
                /*
                 * TODO:
                 * if (ob2.TType is TQueryPlanType) {
                 *      // The sub-query plan
                 *      IQueryPlanNode plan = (IQueryPlanNode)ob2.Object;
                 *      // Discover the correlated variables for this plan.
                 *      IList<CorrelatedVariable> list = plan.DiscoverCorrelatedVariables(1, new List<CorrelatedVariable>());
                 *
                 *      if (list.Count > 0) {
                 *              // Set the correlated variables from the IVariableResolver
                 *              foreach (CorrelatedVariable variable in list) {
                 *                      variable.SetFromResolver(resolver);
                 *              }
                 *              // Clear the cache in the context
                 *              context.ClearCache();
                 *      }
                 *
                 *      // Evaluate the plan,
                 *      Table t = plan.Evaluate(context);
                 *
                 *      Operator revPlainOp = GetSubQueryForm(OperatorSubType.None).Reverse();
                 *      return t.AllColumnMatchesValue(0, revPlainOp, ob1);
                 * }
                 * if (ob2.TType is TArrayType) {
                 *      Operator plainOp = GetSubQueryForm(OperatorSubType.None);
                 *      Expression[] expList = (Expression[])ob2.Object;
                 *      // Assume true unless otherwise found to be false or NULL.
                 *      DataObject retVal = DataObject.BooleanTrue;
                 *      foreach (Expression exp in expList) {
                 *              DataObject expItem = exp.Evaluate(group, resolver, context);
                 *              // If there is a null item, we return null if not otherwise found to
                 *              // be false.
                 *              if (expItem.IsNull) {
                 *                      retVal = DataObject.BooleanNull;
                 *              } else if (!IsTrue(plainOp.Evaluate(ob1, expItem, null, null, null))) {
                 *                      // If it doesn't match return false
                 *                      return DataObject.BooleanFalse;
                 *              }
                 *      }
                 *      // Otherwise return true or null.  If all match and no NULLs return
                 *      // true.  If all match and there are NULLs then return NULL.
                 *      return retVal;
                 * }
                 *
                 * throw new ApplicationException("Unknown RHS of ALL.");
                 */

                throw new NotImplementedException();
            }
コード例 #11
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2,
                                                IGroupResolver group, IVariableResolver resolver,
                                                IQueryContext context)
            {
                if (ob1.IsNull)
                {
                    return(ob1);
                }
                if (ob2.IsNull)
                {
                    return(ob2);
                }
                String val     = ob1.CastTo(PrimitiveTypes.String()).ToStringValue();
                String pattern = ob2.CastTo(PrimitiveTypes.String()).ToStringValue();

                return(DataObject.Boolean(PatternSearch.FullPatternMatch(pattern, val, '\\')));
            }
コード例 #12
0
ファイル: InvokeContext.cs プロジェクト: meikeric/deveeldb
        internal InvokeContext(Invoke invoke, IRoutine routine, IVariableResolver resolver, IGroupResolver group, IRequest request)
        {
            if (invoke == null)
            {
                throw new ArgumentNullException("invoke");
            }
            if (routine == null)
            {
                throw new ArgumentNullException("routine");
            }

            Request          = request;
            GroupResolver    = group;
            VariableResolver = resolver;
            Invoke           = invoke;
            Routine          = routine;
        }
コード例 #13
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context)
            {
                bool?b1 = ob1.ToBoolean();
                bool?b2 = ob2.ToBoolean();

                // If either ob1 or ob2 are null
                if (!b1.HasValue)
                {
                    return(b2.HasValue && b2.Equals(false) ? DataObject.BooleanFalse : DataObject.BooleanNull);
                }
                if (!b2.HasValue)
                {
                    return(b1.Equals(false) ? DataObject.BooleanFalse : DataObject.BooleanNull);
                }

                // If both true.
                return(DataObject.Boolean(b1.Equals(true) && b2.Equals(true)));
            }
コード例 #14
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2,
                                                IGroupResolver group, IVariableResolver resolver,
                                                IQueryContext context)
            {
                if (ob1.IsNull)
                {
                    return(ob1);
                }
                if (ob2.IsNull)
                {
                    return(ob2);
                }

                string val     = ob1.CastTo(PrimitiveTypes.String()).ToStringValue();
                string pattern = ob2.CastTo(PrimitiveTypes.String()).ToStringValue();

                // TODO: return DataObject.Boolean(PatternSearch.RegexMatch(context.Context, pattern, val));
                throw new NotImplementedException();
            }
コード例 #15
0
ファイル: EvaluateContext.cs プロジェクト: meikeric/deveeldb
 public EvaluateContext(IRequest request, IVariableResolver variableResolver, IGroupResolver groupResolver)
 {
     GroupResolver    = groupResolver;
     VariableResolver = variableResolver;
     Request          = request;
 }
コード例 #16
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2,
											 IGroupResolver group, IVariableResolver resolver,
											 IQueryContext context)
            {
                if (ob1.IsNull) {
                    return ob1;
                }
                if (ob2.IsNull) {
                    return ob2;
                }
                String val = ob1.CastTo(PrimitiveTypes.String()).ToStringValue();
                String pattern = ob2.CastTo(PrimitiveTypes.String()).ToStringValue();

                return DataObject.Boolean(PatternSearch.FullPatternMatch(pattern, val, '\\'));
            }
コード例 #17
0
ファイル: Invoke.cs プロジェクト: prepare/deveeldb
 public ExecuteResult Execute(IQueryContext context, IVariableResolver resolver, IGroupResolver group)
 {
     var routine = ResolveRoutine(context);
     var executeContext = new ExecuteContext(this, routine, resolver, group, context);
     return routine.Execute(executeContext);
 }
コード例 #18
0
        private async Task <SqlObject> IterateValues(MethodContext context, SqlExpression input, IGroupResolver groupResolver)
        {
            SqlObject result = null;

            for (long i = 0; i < groupResolver.Size; i++)
            {
                SqlObject value;
                var       resolver = groupResolver.GetResolver(i);

                using (var reduce = context.Create("reduce", scope => scope.AddReferenceResolver(resolver))) {
                    var reduced = await input.ReduceAsync(reduce);

                    if (reduced.ExpressionType != SqlExpressionType.Constant)
                    {
                        throw new InvalidOperationException();
                    }

                    value = ((SqlConstantExpression)reduced).Value;
                }

                using (var accumulate = new IterateContext(context, i, result, value)) {
                    await IterateAsync(accumulate);

                    if (accumulate.Result == null)
                    {
                        throw new MethodAccessException("No result value was provided by the iteration");
                    }

                    result = accumulate.Result;

                    if (!accumulate.Iterate)
                    {
                        break;
                    }
                }
            }

            return(result);
        }
コード例 #19
0
ファイル: RoutineExtensions.cs プロジェクト: deveel/deveeldb
 public static InvokeResult Execute(this IRoutine routine, IRequest request, IVariableResolver resolver, IGroupResolver group)
 {
     return Execute(routine, new InvokeArgument[0], request, resolver, group);
 }
コード例 #20
0
 public static IQuery CreateQuery(this IContext context, IGroupResolver groupResolver, IReferenceResolver resolver)
 {
     return(new QueryImpl(context, groupResolver, resolver));
 }
コード例 #21
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context)
            {
                /*
                TODO:
                if (ob2.DataType is QueryType) {
                    // The sub-query plan
                    IQueryPlanNode plan = (IQueryPlanNode) ob2.Value;
                    // Discover the correlated variables for this plan.
                    IList<CorrelatedVariable> list = plan.DiscoverCorrelatedVariables(1, new List<CorrelatedVariable>());

                    if (list.Count > 0) {
                        // Set the correlated variables from the IVariableResolver
                        foreach (CorrelatedVariable variable in list) {
                            variable.SetFromResolver(resolver);
                        }
                        // Clear the cache in the context
                        context.ClearCache();
                    }

                    // Evaluate the plan,
                    Table t = plan.Evaluate(context);

                    // The ANY operation
                    Operator revPlainOp = GetSubQueryForm(OperatorSubType.None).Reverse();
                    return t.ColumnMatchesValue(0, revPlainOp, ob1);
                }
                if (ob2.DataType is ArrayType) {
                    Operator plain_op = GetSubQueryForm(OperatorSubType.None);
                    Expression[] expList = (Expression[])ob2.Object;
                    // Assume there are no matches
                    DataObject retVal = DataObject.BooleanFalse;
                    foreach (Expression exp in expList) {
                        DataObject exp_item = exp.Evaluate(group, resolver, context);
                        // If null value, return null if there isn't otherwise a match found.
                        if (exp_item.IsNull) {
                            retVal = DataObject.BooleanNull;
                        } else if (IsTrue(plain_op.Evaluate(ob1, exp_item, null, null, null))) {
                            // If there is a match, the ANY set test is true
                            return DataObject.BooleanTrue;
                        }
                    }
                    // No matches, so return either false or NULL.  If there are no matches
                    // and no nulls, return false.  If there are no matches and there are
                    // nulls present, return null.
                    return retVal;
                }

                throw new ApplicationException("Unknown RHS of ANY.");
                */

                throw new NotImplementedException();
            }
コード例 #22
0
 protected abstract DataObject Evaluate(DataObject value1, DataObject value2, IRequest query, IGroupResolver group);
コード例 #23
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context)
            {
                /*
                TODO:
                if (ob2.TType is TQueryPlanType) {
                    // The sub-query plan
                    IQueryPlanNode plan = (IQueryPlanNode)ob2.Object;
                    // Discover the correlated variables for this plan.
                    IList<CorrelatedVariable> list = plan.DiscoverCorrelatedVariables(1, new List<CorrelatedVariable>());

                    if (list.Count > 0) {
                        // Set the correlated variables from the IVariableResolver
                        foreach (CorrelatedVariable variable in list) {
                            variable.SetFromResolver(resolver);
                        }
                        // Clear the cache in the context
                        context.ClearCache();
                    }

                    // Evaluate the plan,
                    Table t = plan.Evaluate(context);

                    Operator revPlainOp = GetSubQueryForm(OperatorSubType.None).Reverse();
                    return t.AllColumnMatchesValue(0, revPlainOp, ob1);
                }
                if (ob2.TType is TArrayType) {
                    Operator plainOp = GetSubQueryForm(OperatorSubType.None);
                    Expression[] expList = (Expression[])ob2.Object;
                    // Assume true unless otherwise found to be false or NULL.
                    DataObject retVal = DataObject.BooleanTrue;
                    foreach (Expression exp in expList) {
                        DataObject expItem = exp.Evaluate(group, resolver, context);
                        // If there is a null item, we return null if not otherwise found to
                        // be false.
                        if (expItem.IsNull) {
                            retVal = DataObject.BooleanNull;
                        } else if (!IsTrue(plainOp.Evaluate(ob1, expItem, null, null, null))) {
                            // If it doesn't match return false
                            return DataObject.BooleanFalse;
                        }
                    }
                    // Otherwise return true or null.  If all match and no NULLs return
                    // true.  If all match and there are NULLs then return NULL.
                    return retVal;
                }

                throw new ApplicationException("Unknown RHS of ALL.");
                */

                throw new NotImplementedException();
            }
コード例 #24
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context)
            {
                bool? b1 = ob1.ToBoolean();
                bool? b2 = ob2.ToBoolean();

                // If either ob1 or ob2 are null
                if (!b1.HasValue)
                    return b2.HasValue && b2.Equals(false) ? DataObject.BooleanFalse : DataObject.BooleanNull;
                if (!b2.HasValue)
                    return b1.Equals(false) ? DataObject.BooleanFalse : DataObject.BooleanNull;

                // If both true.
                return DataObject.Boolean(b1.Equals(true) && b2.Equals(true));
            }
コード例 #25
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
 public abstract DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context);
コード例 #26
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2,
											 IGroupResolver group, IVariableResolver resolver,
											 IQueryContext context)
            {
                throw new ApplicationException("SimpleOperator should never be evaluated!");
            }
コード例 #27
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2,
											 IGroupResolver group, IVariableResolver resolver,
											 IQueryContext context)
            {
                if (ob1.IsNull)
                    return ob1;
                if (ob2.IsNull)
                    return ob2;

                string val = ob1.CastTo(PrimitiveTypes.String()).ToStringValue();
                string pattern = ob2.CastTo(PrimitiveTypes.String()).ToStringValue();
                // TODO: return DataObject.Boolean(PatternSearch.RegexMatch(context.Context, pattern, val));
                throw new NotImplementedException();
            }
コード例 #28
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
 public abstract DataObject Evaluate(DataObject ob1, DataObject ob2, IGroupResolver group, IVariableResolver resolver, IQueryContext context);
コード例 #29
0
ファイル: Operator.cs プロジェクト: kaktusan/plsqlparser
            public override DataObject Evaluate(DataObject ob1, DataObject ob2,
											 IGroupResolver group, IVariableResolver resolver,
											 IQueryContext context)
            {
                return ob1.Multiply(ob2);
            }
コード例 #30
0
 public static InvokeResult Execute(this IRoutine routine, IQuery query, IVariableResolver resolver, IGroupResolver group)
 {
     return(Execute(routine, new SqlExpression[0], query, resolver, group));
 }
コード例 #31
0
 public SqlExpression Evaluate(IRequest context, IVariableResolver variables, IGroupResolver group)
 {
     return(Evaluate(new EvaluateContext(context, variables, group)));
 }
コード例 #32
0
ファイル: Expression.cs プロジェクト: tsvmks/plsqlparser
 public Evaluator(IGroupResolver group, IVariableResolver resolver, IQueryContext context)
 {
     Context = new EvaluateContext(group, resolver, context);
 }
コード例 #33
0
 public static InvokeResult Execute(this IRoutine routine, IRequest request, IVariableResolver resolver, IGroupResolver group)
 {
     return(Execute(routine, new InvokeArgument[0], request, resolver, group));
 }
コード例 #34
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
 public override DataObject Evaluate(DataObject ob1, DataObject ob2,
                                     IGroupResolver group, IVariableResolver resolver,
                                     IQueryContext context)
 {
     return(ob1.Is(ob2));
 }
コード例 #35
0
        public static InvokeResult Execute(this IRoutine routine, InvokeArgument[] args, IRequest request, IVariableResolver resolver, IGroupResolver group)
        {
            var invoke = new Invoke(routine.ObjectInfo.FullName, args);

            var executeContext = new InvokeContext(invoke, routine, resolver, group, request);

            return(routine.Execute(executeContext));
        }
コード例 #36
0
 public QueryImpl(IContext parent, IGroupResolver groupResolver, IReferenceResolver resolver)
     : base(parent, KnownScopes.Query)
 {
     GroupResolver = groupResolver;
     Resolver      = resolver;
 }
コード例 #37
0
ファイル: Expression.cs プロジェクト: tsvmks/plsqlparser
 public EvaluateContext(IGroupResolver groupResolver, IVariableResolver variableResolver, IQueryContext queryContext)
 {
     QueryContext     = queryContext;
     VariableResolver = variableResolver;
     GroupResolver    = groupResolver;
 }
コード例 #38
0
ファイル: Invoke.cs プロジェクト: ArsenShnurkov/deveeldb
 public InvokeResult Execute(IRequest query, IVariableResolver resolver, IGroupResolver group)
 {
     var routine = ResolveRoutine(query);
     var executeContext = new InvokeContext(this, routine, resolver, group, query);
     return routine.Execute(executeContext);
 }
コード例 #39
0
 protected virtual DataObject PostEvaluate(DataObject result, IRequest query, IGroupResolver group)
 {
     // By default, do nothing....
     return(result);
 }
コード例 #40
0
        private async Task <SqlObject> IterateReference(MethodContext context, ObjectName refName, IGroupResolver groupResolver)
        {
            SqlObject result = null;

            for (long i = 0; i < groupResolver.Size; i++)
            {
                var rowValue = await groupResolver.ResolveReferenceAsync(refName, i);

                var current = rowValue;

                using (var accumulate = new IterateContext(context, i, result, current)) {
                    await IterateAsync(accumulate);

                    if (accumulate.Result == null)
                    {
                        throw new MethodAccessException("No result value was provided by the iteration");
                    }

                    result = accumulate.Result;

                    if (!accumulate.Iterate)
                    {
                        break;
                    }
                }
            }

            return(result);
        }
コード例 #41
0
ファイル: EvaluateContext.cs プロジェクト: deveel/deveeldb
 public EvaluateContext(IRequest request, IVariableResolver variableResolver, IGroupResolver groupResolver)
 {
     GroupResolver = groupResolver;
     VariableResolver = variableResolver;
     Request = request;
 }
コード例 #42
0
 protected abstract DataObject Evaluate(DataObject value1, DataObject value2, IRequest query, IGroupResolver group);
コード例 #43
0
 public static InvokeResult Execute(this IRoutine routine, IQuery query, IVariableResolver resolver, IGroupResolver group)
 {
     return Execute(routine, new SqlExpression[0], query, resolver, group);
 }
コード例 #44
0
ファイル: Expression.cs プロジェクト: kaktusan/plsqlparser
 public Evaluator(IGroupResolver group, IVariableResolver resolver, IQueryContext context)
 {
     Context = new EvaluateContext(group, resolver, context);
 }
コード例 #45
0
ファイル: Expression.cs プロジェクト: kaktusan/plsqlparser
 public EvaluateContext(IGroupResolver groupResolver, IVariableResolver variableResolver, IQueryContext queryContext)
 {
     QueryContext = queryContext;
     VariableResolver = variableResolver;
     GroupResolver = groupResolver;
 }
コード例 #46
0
 public static ExecuteResult Execute(this IRoutine routine, IQueryContext context, IVariableResolver resolver, IGroupResolver group)
 {
     return Execute(routine, new SqlExpression[0], context, resolver, group);
 }
コード例 #47
0
ファイル: SqlExpression.cs プロジェクト: furesoft/deveeldb
 public SqlExpression Evaluate(IQueryContext context, IVariableResolver variables, IGroupResolver group)
 {
     return Evaluate(new EvaluateContext(context, variables, group));
 }
コード例 #48
0
ファイル: Operator.cs プロジェクト: tsvmks/plsqlparser
 public override DataObject Evaluate(DataObject ob1, DataObject ob2,
                                     IGroupResolver group, IVariableResolver resolver,
                                     IQueryContext context)
 {
     throw new ApplicationException("SimpleOperator should never be evaluated!");
 }
コード例 #49
0
ファイル: AggregateFunction.cs プロジェクト: prepare/deveeldb
 protected abstract DataObject Evaluate(DataObject value1, DataObject value2, IQueryContext context, IGroupResolver group);
コード例 #50
0
        public static InvokeResult Execute(this IRoutine routine, SqlExpression[] args, IQuery query, IVariableResolver resolver, IGroupResolver group)
        {
            var request = new Invoke(routine.FullName, args);

            if (query != null &&
                !query.UserCanExecuteFunction(request))
            {
                throw new InvalidOperationException();
            }

            var executeContext = new InvokeContext(request, routine, resolver, group, query);

            return(routine.Execute(executeContext));
        }
コード例 #51
0
ファイル: AggregateFunction.cs プロジェクト: prepare/deveeldb
 protected virtual DataObject PostEvaluate(DataObject result, IQueryContext context, IGroupResolver group)
 {
     // By default, do nothing....
     return result;
 }
コード例 #52
0
 protected virtual DataObject PostEvaluate(DataObject result, IRequest query, IGroupResolver group)
 {
     // By default, do nothing....
     return result;
 }
コード例 #53
0
ファイル: Expression.cs プロジェクト: tsvmks/plsqlparser
        public DataObject Evaluate(IGroupResolver group, IVariableResolver resolver, IQueryContext context)
        {
            var evaluator = new Evaluator(group, resolver, context);

            return(evaluator.Evaluate(this));
        }
コード例 #54
0
ファイル: EvaluateContext.cs プロジェクト: furesoft/deveeldb
 public EvaluateContext(IQueryContext queryContext, IVariableResolver variableResolver, IGroupResolver groupResolver)
 {
     GroupResolver = groupResolver;
     VariableResolver = variableResolver;
     QueryContext = queryContext;
 }
コード例 #55
0
ファイル: Expression.cs プロジェクト: kaktusan/plsqlparser
 public DataObject Evaluate(IGroupResolver group, IVariableResolver resolver, IQueryContext context)
 {
     var evaluator = new Evaluator(group, resolver, context);
     return evaluator.Evaluate(this);
 }