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