Skip to content

Commit 9ad18d2

Browse files
Oracle Multi Column Drop (#1379)
Fixes #1363
1 parent 0c0c32e commit 9ad18d2

File tree

3 files changed

+38
-6
lines changed

3 files changed

+38
-6
lines changed

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,9 @@ public String toString() {
388388
} else if (operation== AlterOperation.DROP_FOREIGN_KEY) {
389389

390390
b.append("DROP FOREIGN KEY (").append(PlainSelect.getStringList(pkColumns)).append(')');
391+
} else if (operation== AlterOperation.DROP && columnName==null && pkColumns!=null && pkColumns.size()>0) {
392+
// Oracle Multi Column Drop
393+
b.append("DROP (").append(PlainSelect.getStringList(pkColumns)).append(')');
391394
} else {
392395
b.append(operation).append(" ");
393396

@@ -471,16 +474,18 @@ public String toString() {
471474
} else if (index != null) {
472475
b.append(index);
473476
}
477+
478+
474479
if (getConstraints() != null && !getConstraints().isEmpty()) {
475480
b.append(' ').append(PlainSelect.getStringList(constraints, false, false));
476481
}
477482
if (getUseEqual()) {
478483
b.append('=');
479484
}
485+
}
480486

481-
if (parameters != null && !parameters.isEmpty()) {
482-
b.append(' ').append(PlainSelect.getStringList(parameters, false, false));
483-
}
487+
if (parameters != null && !parameters.isEmpty()) {
488+
b.append(' ').append(PlainSelect.getStringList(parameters, false, false));
484489
}
485490

486491
return b.toString();

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

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5584,9 +5584,30 @@ AlterExpression AlterExpression():
55845584
<K_DROP> { alterExp.setOperation(AlterOperation.DROP); }
55855585
(
55865586
(
5587-
( LOOKAHEAD(2) <K_COLUMN> { alterExp.hasColumn(true); } )?
5588-
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { alterExp.setColumnName(tk.image); }
5589-
[tk=<K_CASCADE> { alterExp.addParameters(tk.image); } ]
5587+
(
5588+
// we use the PK Columns Field instead of the Column Field
5589+
// for holding multiple DROP Columns
5590+
columnNames=ColumnsNamesList() { alterExp.setPkColumns(columnNames); columnNames = null; }
5591+
5592+
[ "INVALIDATE" { alterExp.addParameters("INVALIDATE"); } ]
5593+
5594+
[
5595+
"CASCADE" { alterExp.addParameters("CASCADE"); }
5596+
[ "CONSTRAINTS" { alterExp.addParameters("CONSTRAINTS"); } ]
5597+
]
5598+
)
5599+
|
5600+
(
5601+
( LOOKAHEAD(2) <K_COLUMN> { alterExp.hasColumn(true); } )?
5602+
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { alterExp.setColumnName(tk.image); }
5603+
5604+
[ "INVALIDATE" { alterExp.addParameters("INVALIDATE"); } ]
5605+
5606+
[
5607+
"CASCADE" { alterExp.addParameters("CASCADE"); }
5608+
[ "CONSTRAINTS" { alterExp.addParameters("CONSTRAINTS"); } ]
5609+
]
5610+
)
55905611
)
55915612
|
55925613
(

src/test/java/net/sf/jsqlparser/statement/drop/DropTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,10 @@ public void testDropSchemaIssue855() throws JSQLParserException {
9494
public void testDropSequence() throws JSQLParserException {
9595
assertSqlCanBeParsedAndDeparsed("DROP SEQUENCE mysequence");
9696
}
97+
98+
@Test
99+
public void testOracleMultiColumnDrop() throws JSQLParserException {
100+
//assertSqlCanBeParsedAndDeparsed("ALTER TABLE foo DROP (bar, baz)");
101+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE foo DROP (bar, baz) CASCADE");
102+
}
97103
}

0 commit comments

Comments
 (0)