public override Statement EmitStatement(EmitMode mode) { QuotaExpression expression = new QuotaExpression(); expression.Expression = (Expression)Nodes[0].Nodes[0].EmitStatement(mode); expression.Quota = (Expression)Nodes[1].EmitStatement(mode); expression.HasByClause = true; for (int index = 0; index < QuotaOrder.Columns.Count; index++) { expression.Columns.Add(QuotaOrder.Columns[index].EmitStatement(mode)); } expression.Modifiers = Modifiers; return(expression); }
private void EnsureValidateNode(Plan plan) { if (_validateNode == null) { plan.Symbols.Push(new Symbol("ARow", TableVar.DataType.RowType)); try { // ARow in (((table { ARow }) union <source expression>) <quota clause>) QuotaExpression quotaExpression = (QuotaExpression)EmitStatement(EmitMode.ForCopy); quotaExpression.Expression = new UnionExpression(new TableSelectorExpression(new Expression[] { new IdentifierExpression("ARow") }), quotaExpression.Expression); Expression validateExpression = new BinaryExpression(new IdentifierExpression("ARow"), Instructions.In, quotaExpression); _validateNode = Compiler.Compile(plan, validateExpression).ExtractNode <ExpressionStatementNode>().Nodes[0]; } finally { plan.Symbols.Pop(); } } }