Skip to content

Commit a7566a7

Browse files
committed
begin implementation of oracle recursive queries
1 parent 9da7282 commit a7566a7

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
253253
| <K_FOREIGN:"FOREIGN">
254254
| <K_CONSTRAINT:"CONSTRAINT">
255255
| <K_REFERENCES:"REFERENCES">
256+
| <K_START:"START">
257+
| <K_CONNECT:"CONNECT">
256258
}
257259

258260

@@ -619,6 +621,7 @@ PlainSelect PlainSelect():
619621
joins=JoinsList() ]
620622

621623
[ where=WhereClause() { plainSelect.setWhere(where); }]
624+
[ OracleHierarchicalQueryClause() ]
622625
[ groupByColumnReferences=GroupByColumnReferences() { plainSelect.setGroupByColumnReferences(groupByColumnReferences); }]
623626
[ having=Having() { plainSelect.setHaving(having); }]
624627
[LOOKAHEAD(2) orderByElements = OrderByElements() { plainSelect.setOrderByElements(orderByElements); } ]
@@ -1078,6 +1081,14 @@ Expression WhereClause():
10781081
{ return retval; }
10791082
}
10801083

1084+
Expression OracleHierarchicalQueryClause(): {}
1085+
{
1086+
[ <K_START> <K_WITH> AndExpression() ]
1087+
<K_CONNECT> <K_BY> [ "NOCYCLE" ] AndExpression()
1088+
1089+
{ return null; }
1090+
}
1091+
10811092

10821093
List<Expression> GroupByColumnReferences():
10831094
{

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,4 +1117,19 @@ public void testNamedParameter2() throws JSQLParserException {
11171117
assertEquals("param2", namedParameter2.getName());
11181118
assertEquals("param3", namedParameter3.getName());
11191119
}
1120+
1121+
public void testOracleHierarchicalQuery() throws JSQLParserException {
1122+
String stmt= "SELECT last_name, employee_id, manager_id FROM employees CONNECT BY employee_id = manager_id ORDER BY last_name";
1123+
assertSqlCanBeParsedAndDeparsed(stmt);
1124+
}
1125+
1126+
public void testOracleHierarchicalQuery2() throws JSQLParserException {
1127+
String stmt= "SELECT employee_id, last_name, manager_id FROM employees CONNECT BY PRIOR employee_id = manager_id";
1128+
assertSqlCanBeParsedAndDeparsed(stmt);
1129+
}
1130+
1131+
public void testOracleHierarchicalQuery3() throws JSQLParserException {
1132+
String stmt= "SELECT last_name, employee_id, manager_id, LEVEL FROM employees START WITH employee_id = 100 CONNECT BY PRIOR employee_id = manager_id ORDER SIBLINGS BY last_name";
1133+
assertSqlCanBeParsedAndDeparsed(stmt);
1134+
}
11201135
}

0 commit comments

Comments
 (0)