File tree Expand file tree Collapse file tree 5 files changed +47
-19
lines changed
jjtree/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser/test/select Expand file tree Collapse file tree 5 files changed +47
-19
lines changed Original file line number Diff line number Diff line change 23
23
24
24
import net .sf .jsqlparser .expression .Alias ;
25
25
26
+ import java .util .List ;
27
+
26
28
/**
27
- * A table created by "(tab1 join tab2)".
29
+ * A table created by "(tab1 [ join tab2]* )".
28
30
*/
29
31
public class SubJoin implements FromItem {
30
32
31
33
private FromItem left ;
32
- private Join join ;
33
34
private Alias alias ;
34
35
private Pivot pivot ;
36
+ private List <Join > joinList ;
35
37
36
38
@ Override
37
39
public void accept (FromItemVisitor fromItemVisitor ) {
@@ -46,12 +48,12 @@ public void setLeft(FromItem l) {
46
48
left = l ;
47
49
}
48
50
49
- public Join getJoin () {
50
- return join ;
51
+ public List < Join > getJoinList () {
52
+ return joinList ;
51
53
}
52
54
53
- public void setJoin ( Join j ) {
54
- join = j ;
55
+ public void setJoinList ( List < Join > joinList ) {
56
+ this . joinList = joinList ;
55
57
}
56
58
57
59
@ Override
@@ -76,8 +78,13 @@ public void setAlias(Alias alias) {
76
78
77
79
@ Override
78
80
public String toString () {
79
- return "(" + left + " " + join + ")"
80
- + ((alias != null ) ? alias .toString () : "" )
81
- + ((pivot != null ) ? " " + pivot : "" );
81
+ StringBuilder sb = new StringBuilder ();
82
+ sb .append ("(" ).append (left );
83
+ for (Join j : joinList ) {
84
+ sb .append (" " ).append (j );
85
+ }
86
+
87
+ sb .append (")" ).append ((alias != null ) ? (" " + alias .toString ()) : "" ).append ((pivot != null ) ? " " + pivot : "" );
88
+ return sb .toString ();
82
89
}
83
90
}
Original file line number Diff line number Diff line change @@ -458,7 +458,9 @@ public void visit(AnyComparisonExpression anyComparisonExpression) {
458
458
@ Override
459
459
public void visit (SubJoin subjoin ) {
460
460
subjoin .getLeft ().accept (this );
461
- subjoin .getJoin ().getRightItem ().accept (this );
461
+ for (Join join : subjoin .getJoinList ()) {
462
+ join .getRightItem ().accept (this );
463
+ }
462
464
}
463
465
464
466
@ Override
Original file line number Diff line number Diff line change @@ -329,7 +329,9 @@ public void setExpressionVisitor(ExpressionVisitor visitor) {
329
329
public void visit (SubJoin subjoin ) {
330
330
buffer .append ("(" );
331
331
subjoin .getLeft ().accept (this );
332
- deparseJoin (subjoin .getJoin ());
332
+ for (Join join : subjoin .getJoinList ()) {
333
+ deparseJoin (join );
334
+ }
333
335
buffer .append (")" );
334
336
335
337
if (subjoin .getPivot () != null ) {
Original file line number Diff line number Diff line change @@ -1558,11 +1558,13 @@ FromItem SubJoin():
1558
1558
{
1559
1559
FromItem fromItem = null;
1560
1560
Join join = null;
1561
+ List joinList = null;
1561
1562
SubJoin subJoin = new SubJoin();
1562
1563
}
1563
1564
{
1564
1565
fromItem=FromItem() { subJoin.setLeft(fromItem); }
1565
- join=JoinerExpression() { subJoin.setJoin(join); }
1566
+ // join=JoinerExpression() { subJoin.setJoin(join); }
1567
+ joinList=SubJoinsList() { subJoin.setJoinList(joinList); }
1566
1568
1567
1569
{
1568
1570
return subJoin;
@@ -1581,6 +1583,19 @@ List<Join> JoinsList():
1581
1583
{ return joinsList; }
1582
1584
}
1583
1585
1586
+ List SubJoinsList():
1587
+ {
1588
+ List<Join> joinsList = new ArrayList<Join>();
1589
+ Join join = null;
1590
+ }
1591
+ {
1592
+
1593
+ (join=JoinerExpression() { joinsList.add(join); })+
1594
+
1595
+ { return joinsList; }
1596
+ }
1597
+
1598
+
1584
1599
Join JoinerExpression() #JoinerExpression:
1585
1600
{
1586
1601
Join join = new Join();
Original file line number Diff line number Diff line change 18
18
*/
19
19
package net .sf .jsqlparser .test .select ;
20
20
21
- import java .io .File ;
22
- import java .io .IOException ;
23
- import java .util .logging .Level ;
24
- import java .util .logging .Logger ;
25
21
import net .sf .jsqlparser .JSQLParserException ;
26
22
import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
27
23
import net .sf .jsqlparser .statement .Statement ;
28
-
29
- import static net .sf .jsqlparser .test .TestUtils .*;
30
24
import org .apache .commons .io .FileUtils ;
31
- import static org .junit .Assert .assertTrue ;
32
25
import org .junit .ComparisonFailure ;
33
26
import org .junit .Test ;
34
27
28
+ import java .io .File ;
29
+ import java .io .IOException ;
30
+ import java .util .logging .Level ;
31
+ import java .util .logging .Logger ;
32
+
33
+ import static net .sf .jsqlparser .test .TestUtils .assertSqlCanBeParsedAndDeparsed ;
34
+ import static org .junit .Assert .assertTrue ;
35
+
35
36
/**
36
37
* Tries to parse and deparse all statments in net.sf.jsqlparser.test.oracle-tests.
37
38
*
@@ -63,6 +64,7 @@ public void testAllSqlsParseDeparse() throws IOException {
63
64
success ++;
64
65
LOG .info (" -> SUCCESS" );
65
66
} catch (JSQLParserException ex ) {
67
+ ex .printStackTrace ();
66
68
//LOG.log(Level.SEVERE, null, ex);
67
69
LOG .log (Level .INFO , " -> PROBLEM {0}" , ex .toString ());
68
70
} catch (Exception ex ) {
You can’t perform that action at this time.
0 commit comments