Skip to content

Commit 96ea5c6

Browse files
committed
Merge origin/master
Conflicts: src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
2 parents c89139c + e9a6cd3 commit 96ea5c6

File tree

6 files changed

+65
-29
lines changed

6 files changed

+65
-29
lines changed

nb-configuration.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313
That way multiple projects can share the same settings (useful for formatting rules for example).
1414
Any value defined here will override the pom.xml file value but is only applicable to the current project.
1515
-->
16-
<netbeans.compile.on.save>none</netbeans.compile.on.save>
16+
<netbeans.compile.on.save>all</netbeans.compile.on.save>
1717
<com-junichi11-netbeans-changelf.enable>false</com-junichi11-netbeans-changelf.enable>
1818
<com-junichi11-netbeans-changelf.use-project>true</com-junichi11-netbeans-changelf.use-project>
1919
<com-junichi11-netbeans-changelf.lf-kind>LF</com-junichi11-netbeans-changelf.lf-kind>
2020
<com-junichi11-netbeans-changelf.use-global>false</com-junichi11-netbeans-changelf.use-global>
21+
<org-netbeans-modules-javascript2-requirejs.enabled>true</org-netbeans-modules-javascript2-requirejs.enabled>
22+
<netbeans.hint.jdkPlatform>JDK_1.8</netbeans.hint.jdkPlatform>
2123
</properties>
2224
</project-shared-configuration>

pom.xml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<dependency>
4747
<groupId>org.mockito</groupId>
4848
<artifactId>mockito-core</artifactId>
49-
<version>2.7.22</version>
49+
<version>2.16.0</version>
5050
<scope>test</scope>
5151
</dependency>
5252
</dependencies>
@@ -106,11 +106,6 @@
106106
</goals>
107107
</execution>
108108
</executions>
109-
<configuration>
110-
<nodeDefaultVoid>true</nodeDefaultVoid>
111-
<visitor>true</visitor>
112-
<trackTokens>true</trackTokens>
113-
</configuration>
114109
<dependencies>
115110
<dependency>
116111
<groupId>net.java.dev.javacc</groupId>
@@ -182,7 +177,7 @@
182177
<plugin>
183178
<groupId>org.apache.maven.plugins</groupId>
184179
<artifactId>maven-source-plugin</artifactId>
185-
<version>2.4</version>
180+
<version>3.0.1</version>
186181
<executions>
187182
<execution>
188183
<id>attach-sources</id>

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@
135135

136136
/**
137137
* Find all used tables within an select statement.
138+
*
139+
* Override extractTableName method to modify the extracted table names (e.g. without schema).
138140
*/
139141
public class TablesNamesFinder implements SelectVisitor, FromItemVisitor, ExpressionVisitor, ItemsListVisitor, SelectItemVisitor, StatementVisitor {
140142

@@ -218,9 +220,18 @@ public void visit(PlainSelect plainSelect) {
218220
}
219221
}
220222

223+
/**
224+
* Override to adapt the tableName generation (e.g. with / without schema).
225+
* @param table
226+
* @return
227+
*/
228+
protected String extractTableName(Table table) {
229+
return table.getFullyQualifiedName();
230+
}
231+
221232
@Override
222233
public void visit(Table tableName) {
223-
String tableWholeName = tableName.getFullyQualifiedName();
234+
String tableWholeName = extractTableName(tableName);
224235
if (!otherItemNames.contains(tableWholeName.toLowerCase())
225236
&& !tables.contains(tableWholeName)) {
226237
tables.add(tableWholeName);
@@ -618,7 +629,7 @@ public void visit(ValueListExpression valueList) {
618629

619630
@Override
620631
public void visit(Delete delete) {
621-
tables.add(delete.getTable().getName());
632+
visit(delete.getTable());
622633

623634
if (delete.getJoins() != null) {
624635
for (Join join : delete.getJoins()) {
@@ -634,7 +645,7 @@ public void visit(Delete delete) {
634645
@Override
635646
public void visit(Update update) {
636647
for (Table table : update.getTables()) {
637-
tables.add(table.getName());
648+
visit(table);
638649
}
639650
if (update.getExpressions() != null) {
640651
for (Expression expression : update.getExpressions()) {
@@ -659,7 +670,7 @@ public void visit(Update update) {
659670

660671
@Override
661672
public void visit(Insert insert) {
662-
tables.add(insert.getTable().getName());
673+
visit(insert.getTable());
663674
if (insert.getItemsList() != null) {
664675
insert.getItemsList().accept(this);
665676
}
@@ -670,7 +681,7 @@ public void visit(Insert insert) {
670681

671682
@Override
672683
public void visit(Replace replace) {
673-
tables.add(replace.getTable().getName());
684+
visit(replace.getTable());
674685
if (replace.getExpressions() != null) {
675686
for (Expression expression : replace.getExpressions()) {
676687
expression.accept(this);
@@ -698,7 +709,7 @@ public void visit(CreateIndex createIndex) {
698709

699710
@Override
700711
public void visit(CreateTable create) {
701-
tables.add(create.getTable().getFullyQualifiedName());
712+
visit(create.getTable());
702713
if (create.getSelect() != null) {
703714
create.getSelect().accept(this);
704715
}
@@ -743,7 +754,7 @@ public void visit(HexValue hexValue) {
743754

744755
@Override
745756
public void visit(Merge merge) {
746-
tables.add(merge.getTable().getName());
757+
visit(merge.getTable());
747758
if (merge.getUsingTable() != null) {
748759
merge.getUsingTable().accept(this);
749760
} else if (merge.getUsingSelect() != null) {
@@ -780,7 +791,7 @@ public void visit(Commit commit) {
780791

781792
@Override
782793
public void visit(Upsert upsert) {
783-
tables.add(upsert.getTable().getName());
794+
visit(upsert.getTable());
784795
if (upsert.getItemsList() != null) {
785796
upsert.getItemsList().accept(this);
786797
}

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

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,21 @@
2121
*/
2222

2323
options{
24-
IGNORE_CASE=true ;
25-
STATIC=false;
26-
DEBUG_PARSER=false;
27-
DEBUG_LOOKAHEAD=false;
28-
DEBUG_TOKEN_MANAGER=false;
29-
CACHE_TOKENS=false;
30-
// FORCE_LA_CHECK=true;
31-
UNICODE_INPUT=true;
24+
IGNORE_CASE = true ;
25+
STATIC = false;
26+
DEBUG_PARSER = false;
27+
DEBUG_LOOKAHEAD = false;
28+
DEBUG_TOKEN_MANAGER = false;
29+
CACHE_TOKENS = false;
30+
// FORCE_LA_CHECK = true;
31+
UNICODE_INPUT = true;
3232
JAVA_TEMPLATE_TYPE = "modern";
3333
JDK_VERSION = "1.7";
34-
TOKEN_EXTENDS ="BaseToken";
35-
COMMON_TOKEN_ACTION=true;
34+
TOKEN_EXTENDS = "BaseToken";
35+
COMMON_TOKEN_ACTION = true;
36+
NODE_DEFAULT_VOID = true;
37+
TRACK_TOKENS = true;
38+
VISITOR = true;
3639
}
3740

3841
PARSER_BEGIN(CCJSqlParser)
@@ -278,6 +281,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
278281
| <K_USE : "USE">
279282
| <K_SQL_CALC_FOUND_ROWS: "SQL_CALC_FOUND_ROWS">
280283
| <K_USING:"USING">
284+
| <K_UNSIGNED:"UNSIGNED">
281285
| <K_VALIDATE : "VALIDATE">
282286
| <K_VALUE:"VALUE">
283287
| <K_VALUES:"VALUES">
@@ -965,6 +969,7 @@ String RelObjectNameWithoutValue() :
965969
| tk=<K_SEPARATOR> | tk=<K_NO> | tk=<K_ACTION> | tk=<K_CASCADE> | tk=<K_END>
966970
| tk=<K_TABLE> | tk=<K_DATETIMELITERAL> | tk=<K_COMMIT> | tk=<K_PRECISION>
967971
| tk=<K_INSERT> | tk=<K_INDEX> | tk=<K_PRIMARY> | tk=<K_ENABLE>
972+
| tk=<K_UNSIGNED>
968973
| tk=<K_TEMP> | tk=<K_TEMPORARY>
969974
)
970975

@@ -3180,9 +3185,13 @@ ColDataType ColDataType():
31803185
List<Integer> array = new ArrayList<Integer>();
31813186
}
31823187
{
3183-
( (tk=<K_CHARACTER> | tk=<K_BIT>) [tk2=<K_VARYING>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
3184-
| tk=<K_DOUBLE> [LOOKAHEAD(2) tk2=<K_PRECISION>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
3185-
| ( tk=<S_IDENTIFIER> | tk=<K_DATETIMELITERAL> | tk=<K_XML> | tk=<K_INTERVAL> | tk=<DT_ZONE> ) { colDataType.setDataType(tk.image); })
3188+
(
3189+
(tk=<K_CHARACTER> | tk=<K_BIT>) [tk2=<K_VARYING>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
3190+
| tk=<K_DOUBLE> [LOOKAHEAD(2) tk2=<K_PRECISION>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
3191+
| ( tk=<S_IDENTIFIER> | tk=<K_DATETIMELITERAL> | tk=<K_XML> | tk=<K_INTERVAL> | tk=<DT_ZONE> )
3192+
{ colDataType.setDataType(tk.image); }
3193+
| tk=<K_UNSIGNED> tk2=<S_IDENTIFIER> {colDataType.setDataType(tk.image + " " + tk2.image);}
3194+
)
31863195

31873196
[LOOKAHEAD(2) "(" ( (tk=<S_LONG> | tk=<S_CHAR_LITERAL> | tk=<S_IDENTIFIER> ) { argumentsStringList.add(tk.image); } ["," {/*argumentsStringList.add(",");*/}] )* ")"]
31883197
[( "[" {tk=null;} [ tk=<S_LONG> ] { array.add(tk!=null?Integer.valueOf(tk.image):null); } "]" )+ { colDataType.setArrayData(array); } ]
@@ -3307,6 +3316,8 @@ List<String> CreateParameter():
33073316
tk=<K_EXCLUDE> { param.add(tk.image); }
33083317
|
33093318
tk=<K_WHERE> { param.add(tk.image); }
3319+
|
3320+
tk=<K_UNSIGNED> { param.add(tk.image); }
33103321
|
33113322
tk=<K_TEMP> { param.add(tk.image); }
33123323
|

src/test/java/net/sf/jsqlparser/test/select/SelectTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2793,4 +2793,12 @@ public void testJoinerExpressionIssue596() throws JSQLParserException {
27932793
// public void testJoinerExpressionIssue596_2() throws JSQLParserException {
27942794
// assertSqlCanBeParsedAndDeparsed("SELECT * FROM a JOIN b JOIN c ON b.id = c.id ON a.id = c.id");
27952795
// }
2796+
2797+
public void testProblemSqlIssue603() throws JSQLParserException {
2798+
assertSqlCanBeParsedAndDeparsed("SELECT CASE WHEN MAX(CAST(a.jobNum AS INTEGER)) IS NULL THEN '1000' ELSE MAX(CAST(a.jobNum AS INTEGER)) + 1 END FROM user_employee a");
2799+
}
2800+
2801+
public void testProblemSqlIssue603_2() throws JSQLParserException {
2802+
assertSqlCanBeParsedAndDeparsed("SELECT CAST(col1 AS UNSIGNED INTEGER) FROM mytable");
2803+
}
27962804
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,4 +506,13 @@ public void testMySQLValueListExpression() throws JSQLParserException {
506506
assertTrue(tableList.contains("TABLE1"));
507507
}
508508

509+
@Test
510+
public void testSkippedSchemaIssue600() throws JSQLParserException {
511+
String sql = "delete from schema.table where id = 1";
512+
TablesNamesFinder finder = new TablesNamesFinder();
513+
List<String> tableList = finder.getTableList(CCJSqlParserUtil.parse(sql));
514+
assertEquals(1, tableList.size());
515+
assertTrue(tableList.contains("schema.table"));
516+
}
517+
509518
}

0 commit comments

Comments
 (0)