Skip to content

Commit 2056cb0

Browse files
committed
fixes #87
1 parent 6a98d2b commit 2056cb0

File tree

2 files changed

+31
-19
lines changed

2 files changed

+31
-19
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ String RelObjectName():
514514
| tk=<K_CAST> | tk=<K_DO> | tk=<K_EXTRACT> | tk=<K_FIRST> | tk=<K_FOLLOWING>
515515
| tk=<K_LAST> | tk=<K_MATERIALIZED> | tk=<K_NULLS> | tk=<K_PARTITION> | tk=<K_RANGE>
516516
| tk=<K_ROW> | tk=<K_ROWS> | tk=<K_SIBLINGS> | tk=<K_VALUE> | tk=<K_XML>
517-
| tk=<K_COLUMN> | tk=<K_REPLACE> | tk=<K_TRUNCATE> | tk=<K_KEY> )
517+
| tk=<K_COLUMN> | tk=<K_REPLACE> | tk=<K_TRUNCATE> | tk=<K_KEY> | tk=<K_ANY>)
518518

519519
{ return tk.image; }
520520
}
@@ -870,7 +870,7 @@ PivotXml PivotXml():
870870
forColumns = PivotForColumns()
871871
<K_IN> "("
872872
(
873-
<K_ANY> { retval.setInAny(true); } |
873+
LOOKAHEAD(2) <K_ANY> { retval.setInAny(true); } |
874874
LOOKAHEAD(1) inSelect = SelectBody() |
875875
LOOKAHEAD(2) singleInItems = PivotSingleInItems() |
876876
multiInItems = PivotMultiInItems()
@@ -1542,7 +1542,7 @@ Expression ComparisonItem() :
15421542
{
15431543
(
15441544
retval=AllComparisonExpression()
1545-
| retval=AnyComparisonExpression()
1545+
| LOOKAHEAD(AnyComparisonExpression()) retval=AnyComparisonExpression()
15461546
| retval=SimpleExpression()
15471547
)
15481548

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

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ public void testLimit() throws JSQLParserException {
253253
assertSqlCanBeParsedAndDeparsed(statement);
254254

255255
}
256-
256+
257257
public void testLimit2() throws JSQLParserException {
258258
String statement = "SELECT * FROM mytable WHERE mytable.col = 9 LIMIT 3, ?";
259259

@@ -496,7 +496,7 @@ public void testDistinctTop() throws JSQLParserException {
496496
assertNotNull(plainSelect.getTop());
497497
assertStatementCanBeDeparsedAs(select, statement);
498498
}
499-
499+
500500
public void testDistinctTop2() {
501501
String statement = "SELECT TOP 5 DISTINCT myid, mycol FROM mytable WHERE mytable.col = 9";
502502
try {
@@ -921,7 +921,7 @@ public void testDeparser() throws JSQLParserException {
921921
statement = "SELECT count(DISTINCT f, g, h) FROM a";
922922
assertSqlCanBeParsedAndDeparsed(statement);
923923
}
924-
924+
925925
public void testCount2() throws JSQLParserException {
926926
assertSqlCanBeParsedAndDeparsed("SELECT count(ALL col1 + col2) FROM mytable");
927927
}
@@ -1195,12 +1195,12 @@ public void testAnalyticFunction18() throws JSQLParserException {
11951195
String statement = "SELECT AVG(sal) OVER (PARTITION BY deptno ORDER BY sal RANGE CURRENT ROW) AS avg_of_current_sal FROM emp";
11961196
assertSqlCanBeParsedAndDeparsed(statement);
11971197
}
1198-
1198+
11991199
public void testAnalyticFunctionProblem1() throws JSQLParserException {
12001200
String statement = "SELECT last_value(s.revenue_hold) OVER (PARTITION BY s.id_d_insertion_order, s.id_d_product_ad_attr, trunc(s.date_id, 'mm') ORDER BY s.date_id) AS col FROM s";
12011201
assertSqlCanBeParsedAndDeparsed(statement);
12021202
}
1203-
1203+
12041204
public void testAnalyticFunctionProblem1b() throws JSQLParserException {
12051205
String statement = "SELECT last_value(s.revenue_hold) OVER (PARTITION BY s.id_d_insertion_order, s.id_d_product_ad_attr, trunc(s.date_id, 'mm') ORDER BY s.date_id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS col FROM s";
12061206
assertSqlCanBeParsedAndDeparsed(statement);
@@ -1479,7 +1479,7 @@ public void testPivotXml3() throws JSQLParserException {
14791479
String stmt = "SELECT * FROM mytable PIVOT XML (count(a) FOR b IN (ANY))";
14801480
assertSqlCanBeParsedAndDeparsed(stmt);
14811481
}
1482-
1482+
14831483
public void testPivotXmlSubquery1() throws JSQLParserException {
14841484
assertSqlCanBeParsedAndDeparsed("SELECT * FROM (SELECT times_purchased, state_code FROM customers t) PIVOT (count(state_code) FOR state_code IN ('NY', 'CT', 'NJ', 'FL', 'MO')) ORDER BY times_purchased");
14851485
}
@@ -1493,12 +1493,12 @@ public void testRegexpLike2() throws JSQLParserException {
14931493
String stmt = "SELECT CASE WHEN REGEXP_LIKE(first_name, '^Ste(v|ph)en$') THEN 1 ELSE 2 END FROM mytable";
14941494
assertSqlCanBeParsedAndDeparsed(stmt);
14951495
}
1496-
1496+
14971497
public void testRegexpMySQL() throws JSQLParserException {
14981498
String stmt = "SELECT * FROM mytable WHERE first_name REGEXP '^Ste(v|ph)en$'";
14991499
assertSqlCanBeParsedAndDeparsed(stmt);
15001500
}
1501-
1501+
15021502
public void testRegexpBinaryMySQL() throws JSQLParserException {
15031503
String stmt = "SELECT * FROM mytable WHERE first_name REGEXP BINARY '^Ste(v|ph)en$'";
15041504
assertSqlCanBeParsedAndDeparsed(stmt);
@@ -1592,33 +1592,45 @@ public void testPostgreSQLRegExpCaseSensitiveMatch4() throws JSQLParserException
15921592
String stmt = "SELECT a, b FROM foo WHERE a !~* '[help].*'";
15931593
assertSqlCanBeParsedAndDeparsed(stmt);
15941594
}
1595-
1596-
public void testReservedKeyword() throws JSQLParserException {
1595+
1596+
public void testReservedKeyword() throws JSQLParserException {
15971597
final String statement = "SELECT cast, do, extract, first, following, last, materialized, nulls, partition, range, row, rows, siblings, value, xml FROM tableName"; // all of these are legal in SQL server; 'row' and 'rows' are not legal on Oracle, though;
15981598
final Select select = (Select) parserManager.parse(new StringReader(statement));
15991599
assertStatementCanBeDeparsedAs(select, statement);
16001600
}
1601-
1601+
16021602
public void testCharacterSetClause() throws JSQLParserException {
1603-
String stmt="SELECT DISTINCT CAST(`view0`.`nick2` AS CHAR (8000) CHARACTER SET utf8) AS `v0` FROM people `view0` WHERE `view0`.`nick2` IS NOT NULL";
1603+
String stmt = "SELECT DISTINCT CAST(`view0`.`nick2` AS CHAR (8000) CHARACTER SET utf8) AS `v0` FROM people `view0` WHERE `view0`.`nick2` IS NOT NULL";
16041604
assertSqlCanBeParsedAndDeparsed(stmt);
16051605
}
1606-
1606+
16071607
public void testNotEqualsTo() throws JSQLParserException {
16081608
assertSqlCanBeParsedAndDeparsed("SELECT * FROM foo WHERE a != b");
16091609
assertSqlCanBeParsedAndDeparsed("SELECT * FROM foo WHERE a <> b");
16101610
}
1611-
1611+
16121612
public void testJsonExpression() throws JSQLParserException {
16131613
assertSqlCanBeParsedAndDeparsed("SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram");
16141614
}
1615-
1615+
16161616
public void testSelectInto1() throws JSQLParserException {
16171617
assertSqlCanBeParsedAndDeparsed("SELECT * INTO user_copy FROM user");
16181618
}
1619-
1619+
16201620
public void testSelectForUpdate() throws JSQLParserException {
16211621
assertSqlCanBeParsedAndDeparsed("SELECT * FROM user_table FOR UPDATE");
16221622
}
1623+
1624+
public void testSelectJoin() throws JSQLParserException {
1625+
assertSqlCanBeParsedAndDeparsed("SELECT pg_class.relname, pg_attribute.attname, pg_constraint.conname "
1626+
+ "FROM pg_constraint JOIN pg_class ON pg_class.oid = pg_constraint.conrelid"
1627+
+ " JOIN pg_attribute ON pg_attribute.attrelid = pg_constraint.conrelid"
1628+
+ " WHERE pg_constraint.contype = 'u' AND (pg_attribute.attnum = ANY(pg_constraint.conkey))"
1629+
+ " ORDER BY pg_constraint.conname");
1630+
}
16231631

1632+
public void testSelectJoin2() throws JSQLParserException {
1633+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM pg_constraint WHERE pg_attribute.attnum = ANY(pg_constraint.conkey)");
1634+
}
1635+
16241636
}

0 commit comments

Comments
 (0)