Skip to content

Commit d99e603

Browse files
committed
fixes #134
1 parent 8b54061 commit d99e603

File tree

5 files changed

+83
-29
lines changed

5 files changed

+83
-29
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
package net.sf.jsqlparser.statement.drop;
2323

2424
import java.util.List;
25+
import net.sf.jsqlparser.schema.Table;
2526

2627
import net.sf.jsqlparser.statement.Statement;
2728
import net.sf.jsqlparser.statement.StatementVisitor;
@@ -30,15 +31,15 @@
3031
public class Drop implements Statement {
3132

3233
private String type;
33-
private String name;
34+
private Table name;
3435
private List<String> parameters;
3536

3637
@Override
3738
public void accept(StatementVisitor statementVisitor) {
3839
statementVisitor.visit(this);
3940
}
4041

41-
public String getName() {
42+
public Table getName() {
4243
return name;
4344
}
4445

@@ -50,7 +51,7 @@ public String getType() {
5051
return type;
5152
}
5253

53-
public void setName(String string) {
54+
public void setName(Table string) {
5455
name = string;
5556
}
5657

@@ -64,7 +65,7 @@ public void setType(String string) {
6465

6566
@Override
6667
public String toString() {
67-
String sql = "DROP " + type + " " + name;
68+
String sql = "DROP " + type + " " + name.toString();
6869

6970
if (parameters != null && parameters.size() > 0) {
7071
sql += " " + PlainSelect.getStringList(parameters);

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
import java.util.ArrayList;
3838
import java.util.List;
39+
import net.sf.jsqlparser.statement.create.table.CreateTable;
3940

4041
/**
4142
* Find all used tables within an select statement.
@@ -78,6 +79,9 @@ public List<String> getTableList(Insert insert) {
7879
if (insert.getItemsList() != null) {
7980
insert.getItemsList().accept(this);
8081
}
82+
if (insert.getSelect() != null) {
83+
visit(insert.getSelect());
84+
}
8185

8286
return tables;
8387
}
@@ -111,14 +115,18 @@ public List<String> getTableList(Replace replace) {
111115
*/
112116
public List<String> getTableList(Select select) {
113117
init();
118+
visit(select);
119+
120+
return tables;
121+
}
122+
123+
public void visit(Select select) {
114124
if (select.getWithItemsList() != null) {
115125
for (WithItem withItem : select.getWithItemsList()) {
116126
withItem.accept(this);
117127
}
118128
}
119129
select.getSelectBody().accept(this);
120-
121-
return tables;
122130
}
123131

124132
/**
@@ -155,6 +163,16 @@ public List<String> getTableList(Update update) {
155163
return tables;
156164
}
157165

166+
public List<String> getTableList(CreateTable create) {
167+
init();
168+
tables.add(create.getTable().getFullyQualifiedName());
169+
if (create.getSelect() != null) {
170+
visit(create.getSelect());
171+
}
172+
173+
return tables;
174+
}
175+
158176
@Override
159177
public void visit(WithItem withItem) {
160178
otherItemNames.add(withItem.getName().toLowerCase());
@@ -509,7 +527,7 @@ public void visit(UserVariable var) {
509527

510528
@Override
511529
public void visit(NumericBind bind) {
512-
530+
513531
}
514532

515533
@Override

src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2531,6 +2531,7 @@ Drop Drop():
25312531
{
25322532
Drop drop = new Drop();
25332533
Token tk = null;
2534+
Table name;
25342535
List<String> dropArgs = new ArrayList<String>();
25352536
}
25362537
{
@@ -2543,7 +2544,7 @@ Drop Drop():
25432544
tk=<K_INDEX>
25442545
)
25452546
{ drop.setType(tk.image); }
2546-
tk=<S_IDENTIFIER> { drop.setName(tk.image); }
2547+
name = Table() { drop.setName(name); }
25472548
(tk=<S_IDENTIFIER> { dropArgs.add(tk.image); })*
25482549

25492550
{

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

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,34 @@
66
import net.sf.jsqlparser.JSQLParserException;
77
import net.sf.jsqlparser.parser.CCJSqlParserManager;
88
import net.sf.jsqlparser.statement.drop.Drop;
9+
import static net.sf.jsqlparser.test.TestUtils.*;
910

1011
public class DropTest extends TestCase {
11-
12-
CCJSqlParserManager parserManager = new CCJSqlParserManager();
13-
14-
public DropTest(String arg0) {
15-
super(arg0);
16-
}
17-
18-
public void testDrop() throws JSQLParserException {
19-
String statement = "DROP TABLE mytab";
20-
Drop drop = (Drop) parserManager.parse(new StringReader(statement));
21-
assertEquals("TABLE", drop.getType());
22-
assertEquals("mytab", drop.getName());
23-
assertEquals(statement, "" + drop);
24-
25-
statement = "DROP INDEX myindex CASCADE";
26-
drop = (Drop) parserManager.parse(new StringReader(statement));
27-
assertEquals("INDEX", drop.getType());
28-
assertEquals("myindex", drop.getName());
29-
assertEquals("CASCADE", drop.getParameters().get(0));
30-
assertEquals(statement, "" + drop);
31-
}
12+
13+
CCJSqlParserManager parserManager = new CCJSqlParserManager();
14+
15+
public DropTest(String arg0) {
16+
super(arg0);
17+
}
18+
19+
public void testDrop() throws JSQLParserException {
20+
String statement = "DROP TABLE mytab";
21+
Drop drop = (Drop) parserManager.parse(new StringReader(statement));
22+
assertEquals("TABLE", drop.getType());
23+
assertEquals("mytab", drop.getName().getFullyQualifiedName());
24+
assertEquals(statement, "" + drop);
25+
26+
statement = "DROP INDEX myindex CASCADE";
27+
drop = (Drop) parserManager.parse(new StringReader(statement));
28+
assertEquals("INDEX", drop.getType());
29+
assertEquals("myindex", drop.getName().getFullyQualifiedName());
30+
assertEquals("CASCADE", drop.getParameters().get(0));
31+
assertEquals(statement, "" + drop);
32+
}
33+
34+
public void testDrop2() throws JSQLParserException {
35+
Drop drop = (Drop) parserManager.parse(new StringReader("DROP TABLE \"testtable\""));
36+
assertEquals("TABLE", drop.getType());
37+
assertEquals("\"testtable\"", drop.getName().getFullyQualifiedName());
38+
}
3239
}

src/test/java/net/sf/jsqlparser/util/TablesNamesFinderTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.StringTokenizer;
1010

1111
import net.sf.jsqlparser.parser.CCJSqlParserManager;
12+
import net.sf.jsqlparser.statement.create.table.CreateTable;
1213
import net.sf.jsqlparser.statement.delete.Delete;
1314
import net.sf.jsqlparser.statement.insert.Insert;
1415
import net.sf.jsqlparser.statement.replace.Replace;
@@ -278,6 +279,32 @@ public void testCmplxSelectProblem() throws Exception {
278279
assertTrue(tableList.contains("tbl"));
279280
assertTrue(tableList.contains("tbl2"));
280281
}
282+
283+
@Test
284+
public void testInsertSelect() throws Exception {
285+
String sql = "INSERT INTO mytable (mycolumn) SELECT mycolumn FROM mytable2";
286+
net.sf.jsqlparser.statement.Statement statement = pm.parse(new StringReader(sql));
287+
288+
Insert insertStatement = (Insert) statement;
289+
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
290+
List<String> tableList = tablesNamesFinder.getTableList(insertStatement);
291+
assertEquals(2, tableList.size());
292+
assertTrue(tableList.contains("mytable"));
293+
assertTrue(tableList.contains("mytable2"));
294+
}
295+
296+
@Test
297+
public void testCreateSelect() throws Exception {
298+
String sql = "CREATE TABLE mytable AS SELECT mycolumn FROM mytable2";
299+
net.sf.jsqlparser.statement.Statement statement = pm.parse(new StringReader(sql));
300+
301+
CreateTable createTable = (CreateTable) statement;
302+
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
303+
List<String> tableList = tablesNamesFinder.getTableList(createTable);
304+
assertEquals(2, tableList.size());
305+
assertTrue(tableList.contains("mytable"));
306+
assertTrue(tableList.contains("mytable2"));
307+
}
281308

282309
private String getLine(BufferedReader in) throws Exception {
283310
return CCJSqlParserManagerTest.getLine(in);

0 commit comments

Comments
 (0)