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)); }
/// <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) { }