Пример #1
0
 // Statement
 public override Statement EmitStatement(EmitMode mode)
 {
     if (_shouldEmit)
     {
         Expression expression = new RestrictExpression((Expression)Nodes[0].EmitStatement(mode), (Expression)Nodes[1].EmitStatement(mode));
         expression.Modifiers = Modifiers;
         return(expression);
     }
     else
     {
         return(Nodes[0].EmitStatement(mode));
     }
 }
Пример #2
0
        public override object InternalExecute(Program program, object[] arguments)
        {
            var tableVar           = APIUtilities.ResolveTableVarName(program, (string)arguments[0]);
            var identifyingKey     = APIUtilities.FindIdentifyingKey(program, tableVar);
            var keyValues          = APIUtilities.GetKeyValues(program, identifyingKey, (string)arguments[1]);
            var keyEqualExpression = Compiler.BuildKeyEqualExpression(program.Plan, String.Empty, "AKey", new Schema.RowType(identifyingKey.Columns).Columns, keyValues.DataType.Columns);
            var tableVarExpression = new IdentifierExpression(tableVar.Name);
            var restrictExpression = new RestrictExpression(tableVarExpression, keyEqualExpression);
            var expression         = new D4TextEmitter().Emit(restrictExpression);
            var dataParams         = new DataParams();

            dataParams.Add(new DataParam("AKey", keyValues.DataType, Modifier.In, keyValues));

            return(APIUtilities.EvaluateSingleton(program, expression, dataParams));
        }
Пример #3
0
        protected static Expression MergeRestrictCondition(Expression expression, Expression condition)
        {
            RestrictExpression restrictExpression;

            if (expression is RestrictExpression)
            {
                restrictExpression = (RestrictExpression)expression;
            }
            else
            {
                restrictExpression            = new RestrictExpression();
                restrictExpression.Expression = expression;
            }
            if (restrictExpression.Condition == null)
            {
                restrictExpression.Condition = condition;
            }
            else
            {
                restrictExpression.Condition = new BinaryExpression(restrictExpression.Condition, Instructions.And, condition);
            }
            return(restrictExpression);
        }