public override void EnterColumn(SelectSQLParser.ColumnContext context)
        {
            Column column = new Column();

            if (context.columnExpression().IsEmpty)     //不存在列表达式
            {
                throw new MissingColumnExpressionException();
            }

            var functionalColumn = context.columnExpression().functionableColumn();
            var columnName       = context.columnExpression().columnName();

            if (functionalColumn != null && !functionalColumn.IsEmpty)
            {
                column.Expression          = new ColumnExpression(ExpressionType.Function);
                column.Expression.Function = new FunctionDescription();
            }
            else if (columnName != null && !columnName.IsEmpty)
            {
                column.Expression            = new ColumnExpression(ExpressionType.ColumnName);
                column.Expression.ColumnName = columnName.GetText();
            }
            else
            {
                throw new MissingColumnExpressionException();
            }

            if (context.AS() != null)           //存在别名
            {
                columnName = context.columnName();

                if (columnName.IsEmpty)         //语法错误
                {
                    throw new MissingColumnAliasException();
                }

                column.HasAlias = true;
                column.Alias    = columnName.GetText();
            }

            this.SelectStmt.Columns.Add(column);
        }
 /// <summary>
 /// Visit a parse tree produced by <see cref="SelectSQLParser.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 VisitColumn([NotNull] SelectSQLParser.ColumnContext context)
 {
     return(VisitChildren(context));
 }
示例#3
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="SelectSQLParser.column"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitColumn([NotNull] SelectSQLParser.ColumnContext context)
 {
 }