Skip to content

Commit

Permalink
JSQLParser#1524 support hive alter sql : ALTER TABLE name ADD COLUMNS…
Browse files Browse the repository at this point in the history
… (col_spec[, col_spec ...])
  • Loading branch information
zhum@aotain.com committed Jul 30, 2022
1 parent 28d5912 commit 341d6f2
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,21 @@ public class AlterExpression {

private boolean hasColumn = false;


private boolean useBrackets=false;

public boolean hasColumn() {
return hasColumn;
}

public boolean useBrackets() {
return useBrackets;
}

public void useBrackets(boolean useBrackets) {
this.useBrackets = useBrackets;
}

public void hasColumn(boolean hasColumn) {
this.hasColumn = hasColumn;
}
Expand Down Expand Up @@ -382,7 +393,7 @@ public void setUk(boolean uk) {
public String toString() {

StringBuilder b = new StringBuilder();

if (operation== AlterOperation.UNSPECIFIC) {
b.append(optionalSpecifier);
} else if (operation== AlterOperation.RENAME_TABLE) {
Expand Down Expand Up @@ -432,7 +443,13 @@ public String toString() {
b.append("COLUMN ");
}
}
if (useBrackets && colDataTypeList.size() == 1){
b.append(" ( ");
}
b.append(PlainSelect.getStringList(colDataTypeList));
if (useBrackets && colDataTypeList.size() == 1 ){
b.append(" ) ");
}
if (colDataTypeList.size() > 1) {
b.append(")");
}
Expand Down
14 changes: 14 additions & 0 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -5864,6 +5864,20 @@ AlterExpression AlterExpression():
alterExp.addColDropNotNull( alterExpressionColumnDropNotNull);
}
|
LOOKAHEAD(4) "("
( alterExpressionColumnDataType = AlterExpressionColumnDataType() {
if (alterExp.getOperation()== AlterOperation.ADD ){
alterExp.addColDataType(alterExpressionColumnDataType);
} else if(alterExp.getOperation()== AlterOperation.ALTER){
error_skipto(K_ALTER);
}else if(alterExp.getOperation()== AlterOperation.MODIFY){
error_skipto(K_MODIFY);
}
}
(LOOKAHEAD(2) "," alterExpressionColumnDataType = AlterExpressionColumnDataType() { alterExp.addColDataType(alterExpressionColumnDataType); }) *
)
")" {alterExp.useBrackets(true);}
|
alterExpressionColumnDropDefault = AlterExpressionColumnDropDefault() {
alterExp.addColDropDefault( alterExpressionColumnDropDefault);
}
Expand Down
15 changes: 15 additions & 0 deletions src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,21 @@ public void testAlterTableAddColumn_ColumnKeyWordImplicit() throws JSQLParserExc
assertEquals("varchar (255)", colDataTypes.get(0).getColDataType().toString());
}


@Test
public void testAlterTableBackBrackets()throws JSQLParserException{
String sql="ALTER TABLE tablename add column (field string comment 'aaaaa')";
Statement statement = CCJSqlParserUtil.parse(sql);
Alter alter=(Alter) statement;
System.out.println(alter.toString());

String sql2="ALTER TABLE tablename add column (field string comment 'aaaaa', field2 string comment 'bbbbb');";
Statement statement2 = CCJSqlParserUtil.parse(sql2);
Alter alter2=(Alter) statement2;
System.out.println(alter2.toString());
}


@Test
public void testAlterTablePrimaryKey() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id)");
Expand Down

0 comments on commit 341d6f2

Please sign in to comment.