From e12d64c07b84826ba15dfdb6581d1ed9e509619e Mon Sep 17 00:00:00 2001 From: zyc Date: Fri, 3 Feb 2023 15:23:07 +0800 Subject: [PATCH] fix SQL SERVER ALTER TABLE ADD COLUMN BUG. --- .../druid/sql/parser/SQLStatementParser.java | 3 ++ .../druid/sql/parser/SqlserverAlterTest.java | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 core/src/test/java/com/alibaba/druid/sql/parser/SqlserverAlterTest.java diff --git a/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index c88ae88fe9..04aa03b5ca 100644 --- a/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -2494,6 +2494,9 @@ public class SQLStatementParser extends SQLParser { SQLConstraint constraint = this.exprParser.parseConstaint(); SQLAlterTableAddConstraint item = new SQLAlterTableAddConstraint(constraint); stmt.addItem(item); + } else if (lexer.token == LITERAL_ALIAS && dbType == DbType.sqlserver) { + SQLAlterTableAddColumn item = parseAlterTableAddColumn(); + stmt.addItem(item); } else { throw new ParserException("TODO " + lexer.info()); } diff --git a/core/src/test/java/com/alibaba/druid/sql/parser/SqlserverAlterTest.java b/core/src/test/java/com/alibaba/druid/sql/parser/SqlserverAlterTest.java new file mode 100644 index 0000000000..10f3bcae17 --- /dev/null +++ b/core/src/test/java/com/alibaba/druid/sql/parser/SqlserverAlterTest.java @@ -0,0 +1,33 @@ +package com.alibaba.druid.sql.parser; + +import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; +import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; +import junit.framework.TestCase; +import org.junit.Assert; + +/** + * Created by zyc@byshell.org on 2016/8/16. + */ +public class SqlserverAlterTest extends TestCase { + public void testAlter1() { + String sql = "alter table alert_config_detail\n" + " add age14 int"; + SQLStatementParser parser = new SQLServerStatementParser(sql); + SQLAlterTableStatement stmt = (SQLAlterTableStatement) parser.parseStatement(); // + try { + stmt.toString(); + } catch (ClassCastException e) { + Assert.fail(e.getMessage()); + } + } + + public void testAlter2() { + String sql = "ALTER TABLE \"console\".\"dbo\".\"alert_config_detail\"\n" + "\tADD \"age14\" int"; + SQLStatementParser parser = new SQLServerStatementParser(sql); + SQLAlterTableStatement stmt = (SQLAlterTableStatement) parser.parseStatement(); // + try { + stmt.toString(); + } catch (ClassCastException e) { + Assert.fail(e.getMessage()); + } + } +}