示例#1
0
        public override void ExitWindow_function(MiniSqlParserParser.Window_functionContext context)
        {
            var comments = this.GetComments(context.function_name().qualified_schema_name());

            comments.AddRange(this.GetComments(context.function_name()));
            comments.AddRange(this.GetComments(context));
            Identifier serverName   = null;
            Identifier databaseName = null;
            Identifier schemaName   = null;

            if (context.function_name().qualified_schema_name() != null)
            {
                serverName   = this.GetIdentifier(context.function_name().qualified_schema_name().s);
                databaseName = this.GetIdentifier(context.function_name().qualified_schema_name().d);
                schemaName   = this.GetIdentifier(context.function_name().qualified_schema_name().n);
            }
            var name = this.GetIdentifier(context.function_name().identifier());

            QuantifierType quantifier;

            if (context.K_DISTINCT() != null)
            {
                quantifier = QuantifierType.Distinct;
            }
            else if (context.K_ALL() != null)
            {
                quantifier = QuantifierType.All;
            }
            else
            {
                quantifier = QuantifierType.None;
            }

            var         hasWildcard = context.STAR() != null;
            var         orderBy     = (OrderBy)_stack.Pop();
            PartitionBy partitionBy = null;

            if (context.partitionBy_clause() != null)
            {
                partitionBy = (PartitionBy)_stack.Pop();
            }

            Exprs arguments = null;

            if (context.exprs() != null)
            {
                arguments = (Exprs)_stack.Pop();
            }

            _stack.Push(new WindowFuncExpr(serverName
                                           , databaseName
                                           , schemaName
                                           , name
                                           , quantifier
                                           , hasWildcard
                                           , arguments
                                           , partitionBy
                                           , orderBy
                                           , comments));
        }
        public override void VisitAfter(WindowFuncExpr expr)
        {
            OrderBy     orderBy     = (OrderBy)_stack.Pop();
            PartitionBy partitionBy = null;

            if (expr.PartitionBy != null)
            {
                partitionBy = (PartitionBy)_stack.Pop();
            }
            Exprs arg = null;

            if (expr.Arguments != null)
            {
                arg = (Exprs)_stack.Pop();
            }

            if (object.ReferenceEquals(expr.Arguments, arg) &&
                object.ReferenceEquals(expr.PartitionBy, partitionBy) &&
                object.ReferenceEquals(expr.OrderBy, orderBy))
            {
                _stack.Push(expr);
                return;
            }

            var node = new WindowFuncExpr(expr.ServerName
                                          , expr.DataBaseName
                                          , expr.SchemaName
                                          , expr.Name
                                          , expr.Quantifier
                                          , expr.HasWildcard
                                          , arg
                                          , partitionBy
                                          , orderBy
                                          , expr.Comments.Clone());

            _stack.Push(node);
        }
示例#3
0
 virtual public void VisitAfter(PartitionBy partitionBy)
 {
 }
示例#4
0
 virtual public void VisitBefore(PartitionBy partitionBy)
 {
 }
 public override void VisitAfter(PartitionBy partitionBy)
 {
 }
示例#6
0
 public override void VisitAfter(PartitionBy partitionBy)
 {
     --_clauseLevel;
 }
示例#7
0
 public override void VisitBefore(PartitionBy partitionBy)
 {
     ++_clauseLevel;
 }
 public void VisitAfter(PartitionBy partitionBy)
 {
     _visitor.VisitAfter(partitionBy);
 }
 public void VisitBefore(PartitionBy partitionBy)
 {
     _visitor.VisitBefore(partitionBy);
 }