Skip to content

Commit fb6e950

Browse files
authored
#1524 support hive alter sql : ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...]) (#1605)
Co-authored-by: [email protected] <zm7705264>
1 parent 28d5912 commit fb6e950

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,21 @@ public class AlterExpression {
6565

6666
private boolean hasColumn = false;
6767

68+
69+
private boolean useBrackets=false;
70+
6871
public boolean hasColumn() {
6972
return hasColumn;
7073
}
7174

75+
public boolean useBrackets() {
76+
return useBrackets;
77+
}
78+
79+
public void useBrackets(boolean useBrackets) {
80+
this.useBrackets = useBrackets;
81+
}
82+
7283
public void hasColumn(boolean hasColumn) {
7384
this.hasColumn = hasColumn;
7485
}
@@ -382,7 +393,7 @@ public void setUk(boolean uk) {
382393
public String toString() {
383394

384395
StringBuilder b = new StringBuilder();
385-
396+
386397
if (operation== AlterOperation.UNSPECIFIC) {
387398
b.append(optionalSpecifier);
388399
} else if (operation== AlterOperation.RENAME_TABLE) {
@@ -432,7 +443,13 @@ public String toString() {
432443
b.append("COLUMN ");
433444
}
434445
}
446+
if (useBrackets && colDataTypeList.size() == 1){
447+
b.append(" ( ");
448+
}
435449
b.append(PlainSelect.getStringList(colDataTypeList));
450+
if (useBrackets && colDataTypeList.size() == 1 ){
451+
b.append(" ) ");
452+
}
436453
if (colDataTypeList.size() > 1) {
437454
b.append(")");
438455
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5864,6 +5864,20 @@ AlterExpression AlterExpression():
58645864
alterExp.addColDropNotNull( alterExpressionColumnDropNotNull);
58655865
}
58665866
|
5867+
LOOKAHEAD(4) "("
5868+
( alterExpressionColumnDataType = AlterExpressionColumnDataType() {
5869+
if (alterExp.getOperation()== AlterOperation.ADD ){
5870+
alterExp.addColDataType(alterExpressionColumnDataType);
5871+
} else if(alterExp.getOperation()== AlterOperation.ALTER){
5872+
error_skipto(K_ALTER);
5873+
}else if(alterExp.getOperation()== AlterOperation.MODIFY){
5874+
error_skipto(K_MODIFY);
5875+
}
5876+
}
5877+
(LOOKAHEAD(2) "," alterExpressionColumnDataType = AlterExpressionColumnDataType() { alterExp.addColDataType(alterExpressionColumnDataType); }) *
5878+
)
5879+
")" {alterExp.useBrackets(true);}
5880+
|
58675881
alterExpressionColumnDropDefault = AlterExpressionColumnDropDefault() {
58685882
alterExp.addColDropDefault( alterExpressionColumnDropDefault);
58695883
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,21 @@ public void testAlterTableAddColumn_ColumnKeyWordImplicit() throws JSQLParserExc
6565
assertEquals("varchar (255)", colDataTypes.get(0).getColDataType().toString());
6666
}
6767

68+
69+
@Test
70+
public void testAlterTableBackBrackets()throws JSQLParserException{
71+
String sql="ALTER TABLE tablename add column (field string comment 'aaaaa')";
72+
Statement statement = CCJSqlParserUtil.parse(sql);
73+
Alter alter=(Alter) statement;
74+
System.out.println(alter.toString());
75+
76+
String sql2="ALTER TABLE tablename add column (field string comment 'aaaaa', field2 string comment 'bbbbb');";
77+
Statement statement2 = CCJSqlParserUtil.parse(sql2);
78+
Alter alter2=(Alter) statement2;
79+
System.out.println(alter2.toString());
80+
}
81+
82+
6883
@Test
6984
public void testAlterTablePrimaryKey() throws JSQLParserException {
7085
assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id)");

0 commit comments

Comments
 (0)