コード例 #1
0
ファイル: QuotaNode.cs プロジェクト: laszlo-kiss/Dataphor
        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);
        }
コード例 #2
0
ファイル: QuotaNode.cs プロジェクト: laszlo-kiss/Dataphor
 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();
         }
     }
 }