// 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)); } }
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)); }
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); }