Skip to content

Commit b3263c8

Browse files
rfscholtewumpz
authored andcommitted
Support Alter Table Alter Column Type (#724)
1 parent ae665e6 commit b3263c8

File tree

4 files changed

+21
-8
lines changed

4 files changed

+21
-8
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public List<ColumnDataType> getColDataTypeList() {
110110
}
111111

112112
public void addColDataType(String columnName, ColDataType colDataType) {
113-
addColDataType(new ColumnDataType(columnName, colDataType, null));
113+
addColDataType(new ColumnDataType(columnName, false, colDataType, null));
114114
}
115115

116116
public void addColDataType(ColumnDataType columnDataType) {
@@ -248,11 +248,13 @@ public String toString() {
248248
public static class ColumnDataType {
249249

250250
private final String columnName;
251+
private final boolean withType;
251252
private final ColDataType colDataType;
252253
private final List<String> columnSpecs;
253254

254-
public ColumnDataType(String columnName, ColDataType colDataType, List<String> columnSpecs) {
255+
public ColumnDataType(String columnName, boolean withType, ColDataType colDataType, List<String> columnSpecs) {
255256
this.columnName = columnName;
257+
this.withType = withType;
256258
this.colDataType = colDataType;
257259
this.columnSpecs = columnSpecs;
258260
}
@@ -274,7 +276,7 @@ public List<String> getColumnSpecs() {
274276

275277
@Override
276278
public String toString() {
277-
return columnName + " " + colDataType + parametersToString();
279+
return columnName + ( withType ? " TYPE " : " " ) + colDataType + parametersToString();
278280
}
279281

280282
private String parametersToString() {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@
2626
* @author toben
2727
*/
2828
public enum AlterOperation {
29-
ADD, DROP, MODIFY, CHANGE;
29+
ADD, ALTER, DROP, MODIFY, CHANGE;
3030
}

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
282282
| <K_TOP:"TOP">
283283
| <K_TRAILING:"TRAILING">
284284
| <K_TRUNCATE:"TRUNCATE">
285+
| <K_TYPE:"TYPE">
285286
| <K_UNBOUNDED: "UNBOUNDED">
286287
| <K_UNION:"UNION">
287288
| <K_UNIQUE:"UNIQUE">
@@ -1049,7 +1050,7 @@ String RelObjectNameWithoutValue() :
10491050
| tk=<K_TABLE> | tk=<K_DATETIMELITERAL> | tk=<K_COMMIT> | tk=<K_PRECISION>
10501051
| tk=<K_INSERT> | tk=<K_INDEX> | tk=<K_PRIMARY> | tk=<K_ENABLE>
10511052
| tk=<K_UNSIGNED>
1052-
| tk=<K_TEMP> | tk=<K_TEMPORARY> | tk=<K_ISNULL>
1053+
| tk=<K_TEMP> | tk=<K_TEMPORARY> | tk=<K_TYPE> | tk=<K_ISNULL>
10531054
| tk=<K_ZONE>
10541055
/* | tk=<K_PLACING> | tk=<K_BOTH> | tk=<K_LEADING> | tk=<K_TRAILING> */
10551056
)
@@ -3567,6 +3568,8 @@ List<String> CreateParameter():
35673568
tk=<K_BY> { param.add(tk.image); }
35683569
|
35693570
tk=<K_IN> { param.add(tk.image); }
3571+
|
3572+
tk=<K_TYPE> { param.add(tk.image); }
35703573
)
35713574
{return param;}
35723575
}
@@ -3596,7 +3599,7 @@ String ColumnsNamesListItem():
35963599
String item = null;
35973600
}
35983601
{
3599-
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { item = tk.image; }
3602+
( item = RelObjectName() )
36003603
[ "(" tk = <S_LONG> ")" { item = item + "(" + tk.image + ")"; } ]
36013604
{
36023605
return item;
@@ -3668,16 +3671,18 @@ Truncate Truncate():
36683671
AlterExpression.ColumnDataType AlterExpressionColumnDataType():
36693672
{
36703673
String columnName = null;
3674+
boolean withType = false;
36713675
ColDataType dataType = null;
36723676
List<String> columnSpecs = null;
36733677
List<String> parameter = null;
36743678
}
36753679
{
36763680
columnName = RelObjectName()
3681+
(<K_TYPE> { withType = true; } )?
36773682
dataType = ColDataType() { columnSpecs = new ArrayList(); }
36783683
( parameter = CreateParameter() { columnSpecs.addAll(parameter); } )*
36793684
{
3680-
return new AlterExpression.ColumnDataType(columnName, dataType, columnSpecs);
3685+
return new AlterExpression.ColumnDataType(columnName, withType, dataType, columnSpecs);
36813686
}
36823687
}
36833688

@@ -3735,7 +3740,7 @@ AlterExpression AlterExpression():
37353740
{
37363741

37373742
(
3738-
((<K_ADD> { alterExp.setOperation(AlterOperation.ADD); } | <K_MODIFY> { alterExp.setOperation(AlterOperation.MODIFY); })
3743+
((<K_ADD> { alterExp.setOperation(AlterOperation.ADD); } | <K_ALTER> { alterExp.setOperation(AlterOperation.ALTER); } | <K_MODIFY> { alterExp.setOperation(AlterOperation.MODIFY); })
37393744
(
37403745
LOOKAHEAD(2) ( <K_PRIMARY> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setPkColumns(columnNames); } ) constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
37413746
|

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,12 @@ public void testAlterTableModifyColumn2() throws JSQLParserException {
245245
assertEquals(AlterOperation.MODIFY, ((Alter) stmt).getAlterExpressions().get(0).
246246
getOperation());
247247
}
248+
249+
@Test
250+
public void testAlterTableAlterColumn() throws JSQLParserException {
251+
// http://www.postgresqltutorial.com/postgresql-change-column-type/
252+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE table_name ALTER COLUMN column_name_1 TYPE TIMESTAMP, ALTER COLUMN column_name_2 TYPE BOOLEAN");
253+
}
248254

249255
@Test
250256
public void testAlterTableAddColumnWithZone() throws JSQLParserException {

0 commit comments

Comments
 (0)