Skip to content

Commit 44091c6

Browse files
committed
fixes #181, added drop deparser
1 parent ad0dd23 commit 44091c6

File tree

5 files changed

+80
-3
lines changed

5 files changed

+80
-3
lines changed

src/main/java/net/sf/jsqlparser/statement/drop/Drop.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class Drop implements Statement {
3333
private String type;
3434
private Table name;
3535
private List<String> parameters;
36+
private boolean ifExists = false;
3637

3738
@Override
3839
public void accept(StatementVisitor statementVisitor) {
@@ -63,9 +64,18 @@ public void setType(String string) {
6364
type = string;
6465
}
6566

67+
public boolean isIfExists() {
68+
return ifExists;
69+
}
70+
71+
public void setIfExists(boolean ifExists) {
72+
this.ifExists = ifExists;
73+
}
74+
6675
@Override
6776
public String toString() {
68-
String sql = "DROP " + type + " " + name.toString();
77+
String sql = "DROP " + type + " "
78+
+ (ifExists?"IF EXISTS ":"") + name.toString();
6979

7080
if (parameters != null && parameters.size() > 0) {
7181
sql += " " + PlainSelect.getStringList(parameters);
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2015 JSQLParser
6+
* %%
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU Lesser General Public License as
9+
* published by the Free Software Foundation, either version 2.1 of the
10+
* License, or (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Lesser Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Lesser Public
18+
* License along with this program. If not, see
19+
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
20+
* #L%
21+
*/
22+
package net.sf.jsqlparser.util.deparser;
23+
24+
25+
import net.sf.jsqlparser.statement.drop.Drop;
26+
import net.sf.jsqlparser.statement.select.PlainSelect;
27+
28+
/**
29+
* @author tw
30+
*/
31+
public class DropDeParser {
32+
33+
private StringBuilder buffer;
34+
35+
public DropDeParser(StringBuilder buffer) {
36+
this.buffer = buffer;
37+
}
38+
39+
public void deParse(Drop drop) {
40+
buffer.append("DROP ");
41+
buffer.append(drop.getType());
42+
if (drop.isIfExists())
43+
buffer.append(" IF EXISTS");
44+
45+
buffer.append(" ").append(drop.getName());
46+
47+
if (drop.getParameters() != null && drop.getParameters().size() > 0) {
48+
buffer.append(" ").append(PlainSelect.getStringList(drop.getParameters()));
49+
}
50+
}
51+
52+
public StringBuilder getBuffer() {
53+
return buffer;
54+
}
55+
56+
public void setBuffer(StringBuilder buffer) {
57+
this.buffer = buffer;
58+
}
59+
60+
}

src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ public void visit(Delete delete) {
7979

8080
@Override
8181
public void visit(Drop drop) {
82-
// TODO Auto-generated method stub
82+
DropDeParser dropDeParser = new DropDeParser(buffer);
83+
dropDeParser.deParse(drop);
8384
}
8485

8586
@Override
@@ -90,7 +91,6 @@ public void visit(Insert insert) {
9091
selectDeParser.setExpressionVisitor(expressionDeParser);
9192
InsertDeParser insertDeParser = new InsertDeParser(expressionDeParser, selectDeParser, buffer);
9293
insertDeParser.deParse(insert);
93-
9494
}
9595

9696
@Override

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2739,6 +2739,9 @@ Drop Drop():
27392739
tk=<K_INDEX>
27402740
)
27412741
{ drop.setType(tk.image); }
2742+
2743+
[<K_IF> <K_EXISTS> {drop.setIfExists(true);} ]
2744+
27422745
name = Table() { drop.setName(name); }
27432746
((tk=<S_IDENTIFIER> | tk=<K_CASCADE>) { dropArgs.add(tk.image); })*
27442747

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@ public void testDrop2() throws JSQLParserException {
3636
assertEquals("TABLE", drop.getType());
3737
assertEquals("\"testtable\"", drop.getName().getFullyQualifiedName());
3838
}
39+
40+
public void testDropIfExists() throws JSQLParserException {
41+
assertSqlCanBeParsedAndDeparsed("DROP TABLE IF EXISTS my_table");
42+
}
3943
}

0 commit comments

Comments
 (0)