Exemplo n.º 1
0
        public override object VisitResult_column([NotNull] SqlParser.Result_columnContext context)
        {
            ColumnExpression column = null;

            if (context.GetText().EndsWith("*"))
            {
                var table = context.table_name() == null ? "" : context.table_name().GetText();

                var tableMap = queryTableStack.Peek();

                GetTableNameAlias(tableMap, table, out var tableName, out var tableAlias);

                column = new ColumnExpression()
                {
                    ColumnName = "*",
                    TableName  = tableName,
                    TableAlias = tableAlias,
                };
            }
            else
            {
                // in case of resut column it should only set alias, but not use alias.
                var expr = (IExpression)VisitExpr(context.expr(), false);
                if (expr is ColumnExpression)
                {
                    column = expr as ColumnExpression;
                }
                else
                {
                    column = new ColumnExpression
                    {
                        IsExpression   = true,
                        ColumnName     = context.expr().GetText(),
                        SubExpressions = new List <IExpression>
                        {
                            expr
                        }
                    };
                }

                if (context.column_alias() != null)
                {
                    column.Alias = EscapeTableOrColumnName(context.column_alias().GetText());
                    var columnMap = queryColumnStack.Peek();
                    if (columnMap != null)
                    {
                        columnMap[column.Alias] = column;
                    }
                }
            }

            return(column);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="SqlParser.result_column"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitResult_column([NotNull] SqlParser.Result_columnContext context)
 {
     return(VisitChildren(context));
 }