Skip to content

Commit

Permalink
#1524 support hive alter sql : ALTER TABLE name ADD COLUMNS (col_spec…
Browse files Browse the repository at this point in the history
…[, col_spec ...]) (#1605)

Co-authored-by: zhum@aotain.com <zm7705264>
  • Loading branch information
Zhumin-lv-wn committed Aug 3, 2022
1 parent 28d5912 commit fb6e950
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
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
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
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

1 comment on commit fb6e950

@manticore-projects
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It breaks 3 Alter Statement Tests -- how is it possible that the CI did not catch that please?
(Not blaming, just try to understand why the Build fails only after the Merge and not before).

Please sign in to comment.