From 11039aba1c07f8278ac88f3996df54fc340a516b Mon Sep 17 00:00:00 2001 From: jxnu-liguobin Date: Fri, 22 Dec 2023 23:54:13 +0800 Subject: [PATCH 1/2] Fix: ALTER INDEX COMMENT --- .../statement/alter/AlterExpression.java | 6 ++++++ .../statement/create/table/Index.java | 5 ----- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 2 +- .../jsqlparser/expression/OracleHintTest.java | 9 +++++++++ .../jsqlparser/statement/alter/AlterTest.java | 17 +++++++++++++++++ 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java index 084749e42..7d23987a5 100644 --- a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; + import net.sf.jsqlparser.statement.ReferentialAction; import net.sf.jsqlparser.statement.ReferentialAction.Action; import net.sf.jsqlparser.statement.ReferentialAction.Type; @@ -538,6 +539,11 @@ public String toString() { b.append(' ').append(PlainSelect.getStringList(parameters, false, false)); } + if (index != null && index.getCommentText() != null) { + // `USING` is a parameters + b.append(" COMMENT ").append(index.getCommentText()); + } + return b.toString(); } diff --git a/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java b/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java index 651bbe66c..720fa1abe 100644 --- a/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java +++ b/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java @@ -143,11 +143,6 @@ public String toString() { return head; } - // MYSQL: ALTER TABLE ADD INDEX COMMENT 'comment' - if (getCommentText() != null) { - return head + " " + tail + " COMMENT " + getCommentText(); - } - return head + " " + tail; } diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 26b950a98..dfe4f095b 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -6256,9 +6256,9 @@ AlterExpression AlterExpression(): index = new Index().withType(tk.image).withName(sk3).withColumnsNames(columnNames); alterExp.setIndex(index); } - [ index = IndexWithComment(index) { alterExp.setIndex(index); } ] constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); } [ sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }] + [ index = IndexWithComment(index) { alterExp.setIndex(index); } ] ) | LOOKAHEAD(3) ( diff --git a/src/test/java/net/sf/jsqlparser/expression/OracleHintTest.java b/src/test/java/net/sf/jsqlparser/expression/OracleHintTest.java index 2d76440b7..2da69721c 100644 --- a/src/test/java/net/sf/jsqlparser/expression/OracleHintTest.java +++ b/src/test/java/net/sf/jsqlparser/expression/OracleHintTest.java @@ -1,3 +1,12 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2023 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ package net.sf.jsqlparser.expression; import net.sf.jsqlparser.JSQLParserException; diff --git a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java index 0821224f8..c399bcb71 100644 --- a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java @@ -483,6 +483,23 @@ public void testIssue679() throws JSQLParserException { "ALTER TABLE tb_session_status ADD INDEX idx_user_id_name (user_id, user_name(10)), ADD INDEX idx_user_name (user_name)"); } + @Test + public void testAlterTableColumnCommentIssue1926() throws JSQLParserException { + String statement = + "ALTER TABLE `student` ADD INDEX `idx_age` (`age`) USING BTREE COMMENT 'index age'"; + assertSqlCanBeParsedAndDeparsed(statement); + + String stmt2 = + "ALTER TABLE `student` ADD INDEX `idx_name` (`name`) COMMENT 'index name', " + + "ADD INDEX `idx_age` (`age`) USING BTREE COMMENT 'index age'"; + assertSqlCanBeParsedAndDeparsed(stmt2); + + // TODO NOT SUPPORT MYSQL: ADD {INDEX | KEY} `idx_age` USING BTREE (`age`) + // String stmt3 = "ALTER TABLE `student` ADD INDEX `idx_age` USING BTREE (`age`) COMMENT + // 'index age'"; + // assertSqlCanBeParsedAndDeparsed(stmt3); + } + @Test public void testAlterTableIndex586() throws Exception { Statement result = From 7dfa6f8ac3bf4f1bc7a81611b0365fbf331e7ffc Mon Sep 17 00:00:00 2001 From: jxnu-liguobin Date: Sat, 23 Dec 2023 00:10:43 +0800 Subject: [PATCH 2/2] Fix: ALTER INDEX COMMENT --- .../net/sf/jsqlparser/statement/alter/AlterExpression.java | 1 - .../jsqlparser/statement/create/table/NamedConstraint.java | 6 ------ 2 files changed, 7 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java index 7d23987a5..c5e0f5078 100644 --- a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; - import net.sf.jsqlparser.statement.ReferentialAction; import net.sf.jsqlparser.statement.ReferentialAction.Action; import net.sf.jsqlparser.statement.ReferentialAction.Type; diff --git a/src/main/java/net/sf/jsqlparser/statement/create/table/NamedConstraint.java b/src/main/java/net/sf/jsqlparser/statement/create/table/NamedConstraint.java index b44b7a114..f9a7f391d 100644 --- a/src/main/java/net/sf/jsqlparser/statement/create/table/NamedConstraint.java +++ b/src/main/java/net/sf/jsqlparser/statement/create/table/NamedConstraint.java @@ -21,12 +21,6 @@ public String toString() { String head = getName() != null ? "CONSTRAINT " + getName() + " " : ""; String tail = getType() + " " + PlainSelect.getStringList(getColumnsNames(), true, true) + (!"".equals(idxSpecText) ? " " + idxSpecText : ""); - - // MYSQL: ALTER TABLE ADD CONSTRAINT COMMENT 'comment' - if (getCommentText() != null) { - return head + tail + " COMMENT " + getCommentText(); - } - return head + tail; }