Skip to content

Commit d7e3b55

Browse files
committed
Merge origin/master
2 parents ff23dde + bfb8023 commit d7e3b55

File tree

5 files changed

+92
-8
lines changed

5 files changed

+92
-8
lines changed

src/main/java/net/sf/jsqlparser/schema/Table.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,18 @@ public Table() {
5151
}
5252

5353
public Table(String name) {
54-
setIndex(NAME_IDX, name);
54+
setName(name);
5555
}
5656

5757
public Table(String schemaName, String name) {
58-
setIndex(NAME_IDX, name);
59-
setIndex(SCHEMA_IDX, schemaName);
58+
setName(name);
59+
setSchemaName(schemaName);
6060
}
6161

6262
public Table(Database database, String schemaName, String name) {
63-
setIndex(NAME_IDX, name);
64-
setIndex(SCHEMA_IDX, schemaName);
65-
setIndex(DATABASE_IDX, database.getDatabaseName());
66-
setIndex(SERVER_IDX, database.getServer().getFullyQualifiedName());
63+
setName(name);
64+
setSchemaName(schemaName);
65+
setDatabase(database);
6766
}
6867

6968
public Table(List<String> partItems) {
@@ -77,6 +76,7 @@ public Database getDatabase() {
7776

7877
public void setDatabase(Database database) {
7978
setIndex(DATABASE_IDX, database.getDatabaseName());
79+
setIndex(SERVER_IDX, database.getServer().getFullyQualifiedName());
8080
}
8181

8282
public String getSchemaName() {
@@ -173,3 +173,4 @@ public String toString() {
173173
+ ((hint != null) ? hint.toString() : "");
174174
}
175175
}
176+

src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
public class AlterExpression {
3838

3939
private AlterOperation operation;
40+
private String optionalSpecifier;
4041
private String columnName;
42+
private String columnOldName;
4143
//private ColDataType dataType;
4244

4345
private List<ColumnDataType> colDataTypeList;
@@ -66,6 +68,14 @@ public void setOperation(AlterOperation operation) {
6668
this.operation = operation;
6769
}
6870

71+
public String getOptionalSpecifier() {
72+
return optionalSpecifier;
73+
}
74+
75+
public void setOptionalSpecifier(String optionalSpecifier) {
76+
this.optionalSpecifier = optionalSpecifier;
77+
}
78+
6979
public boolean isOnDeleteCascade() {
7080
return onDeleteCascade;
7181
}
@@ -137,6 +147,14 @@ public void setColumnName(String columnName) {
137147
this.columnName = columnName;
138148
}
139149

150+
public String getColOldName() {
151+
return columnOldName;
152+
}
153+
154+
public void setColOldName(String columnOldName) {
155+
this.columnOldName = columnOldName;
156+
}
157+
140158
public String getConstraintName() {
141159
return this.constraintName;
142160
}
@@ -214,7 +232,12 @@ public String toString() {
214232
if (columnName != null) {
215233
b.append("COLUMN ").append(columnName);
216234
} else if (getColDataTypeList() != null) {
217-
if (colDataTypeList.size() > 1) {
235+
if(operation == AlterOperation.CHANGE) {
236+
if(optionalSpecifier != null) {
237+
b.append(optionalSpecifier).append(" ");
238+
}
239+
b.append(columnOldName).append(" ");
240+
} else if (colDataTypeList.size() > 1) {
218241
b.append("(");
219242
} else {
220243
b.append("COLUMN ");

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
158158
| <K_CASE:"CASE">
159159
| <K_CAST:"CAST">
160160
| <K_CHARACTER:"CHARACTER">
161+
| <K_CHANGE:"CHANGE">
161162
| <K_CHECK:"CHECK">
162163
| <K_CHAR:"CHAR">
163164
| <K_COLUMN:"COLUMN">
@@ -3601,6 +3602,8 @@ List<String> CreateParameter():
36013602
tk=<K_IN> { param.add(tk.image); }
36023603
|
36033604
tk=<K_TYPE> { param.add(tk.image); }
3605+
|
3606+
tk=<K_COMMENT> { param.add(tk.image); }
36043607
)
36053608
{return param;}
36063609
}
@@ -3881,6 +3884,22 @@ AlterExpression AlterExpression():
38813884
)
38823885
)
38833886
|
3887+
(<K_CHANGE>
3888+
{
3889+
alterExp.setOperation(AlterOperation.CHANGE);
3890+
}
3891+
(
3892+
<K_COLUMN> { alterExp.setOptionalSpecifier("COLUMN"); } | {}
3893+
)
3894+
(
3895+
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>)
3896+
alterExpressionColumnDataType = AlterExpressionColumnDataType() {
3897+
alterExp.setColOldName(tk.image);
3898+
alterExp.addColDataType(alterExpressionColumnDataType);
3899+
}
3900+
)
3901+
)
3902+
|
38843903
(<K_DROP>
38853904
{
38863905
alterExp.setOperation(AlterOperation.DROP);

src/test/java/net/sf/jsqlparser/parser/CCJSqlParserUtilTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,17 @@ public void testParseStatementsIssue691_2() throws Exception {
128128
+ "---test");
129129
assertEquals("SELECT * FROM dual;\n", result.toString());
130130
}
131+
132+
@Test
133+
public void testParseStatementIssue742() throws Exception {
134+
Statements result = CCJSqlParserUtil.parseStatements("CREATE TABLE `table_name` (\n" +
135+
" `id` bigint(20) NOT NULL AUTO_INCREMENT,\n" +
136+
" `another_column_id` bigint(20) NOT NULL COMMENT 'column id as sent by SYSTEM',\n" +
137+
" PRIMARY KEY (`id`),\n" +
138+
" UNIQUE KEY `uk_another_column_id` (`another_column_id`)\n" +
139+
")");
140+
assertEquals("CREATE TABLE `table_name` (`id` bigint (20) NOT NULL AUTO_INCREMENT, `another_column_id` " +
141+
"bigint (20) NOT NULL COMMENT 'column id as sent by SYSTEM', PRIMARY KEY (`id`), UNIQUE KEY `uk_another_column_id` " +
142+
"(`another_column_id`));\n", result.toString());
143+
}
131144
}

src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,34 @@ public void testAlterTableAlterColumn() throws JSQLParserException {
262262
assertSqlCanBeParsedAndDeparsed("ALTER TABLE table_name ALTER COLUMN column_name_1 TYPE TIMESTAMP, ALTER COLUMN column_name_2 TYPE BOOLEAN");
263263
}
264264

265+
@Test
266+
public void testAlterTableChangeColumn1() throws JSQLParserException {
267+
Statement stmt = CCJSqlParserUtil.parse("ALTER TABLE tb_test CHANGE COLUMN c1 c2 INT (10)");
268+
Alter alter = (Alter) stmt;
269+
assertEquals(AlterOperation.CHANGE, alter.getAlterExpressions().get(0).getOperation());
270+
assertEquals("c1", alter.getAlterExpressions().get(0).getColOldName());
271+
assertEquals("COLUMN", alter.getAlterExpressions().get(0).getOptionalSpecifier());
272+
}
273+
274+
@Test
275+
public void testAlterTableChangeColumn2() throws JSQLParserException {
276+
Statement stmt = CCJSqlParserUtil.parse("ALTER TABLE tb_test CHANGE c1 c2 INT (10)");
277+
Alter alter = (Alter) stmt;
278+
assertEquals(AlterOperation.CHANGE, alter.getAlterExpressions().get(0).getOperation());
279+
assertEquals("c1", alter.getAlterExpressions().get(0).getColOldName());
280+
assertNull(alter.getAlterExpressions().get(0).getOptionalSpecifier());
281+
}
282+
283+
@Test
284+
public void testAlterTableChangeColumn3() throws JSQLParserException {
285+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE tb_test CHANGE COLUMN c1 c2 INT (10)");
286+
}
287+
288+
@Test
289+
public void testAlterTableChangeColumn4() throws JSQLParserException {
290+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE tb_test CHANGE c1 c2 INT (10)");
291+
}
292+
265293
@Test
266294
public void testAlterTableAddColumnWithZone() throws JSQLParserException {
267295
assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN col1 timestamp with time zone");

0 commit comments

Comments
 (0)