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 2323
2424import net .sf .jsqlparser .expression .Alias ;
2525
26+ import java .util .List ;
27+
2628/**
27- * A table created by "(tab1 join tab2)".
29+ * A table created by "(tab1 [ join tab2]* )".
2830 */
2931public class SubJoin implements FromItem {
3032
3133 private FromItem left ;
32- private Join join ;
3334 private Alias alias ;
3435 private Pivot pivot ;
36+ private List <Join > joinList ;
3537
3638 @ Override
3739 public void accept (FromItemVisitor fromItemVisitor ) {
@@ -46,12 +48,12 @@ public void setLeft(FromItem l) {
4648 left = l ;
4749 }
4850
49- public Join getJoin () {
50- return join ;
51+ public List < Join > getJoinList () {
52+ return joinList ;
5153 }
5254
53- public void setJoin ( Join j ) {
54- join = j ;
55+ public void setJoinList ( List < Join > joinList ) {
56+ this . joinList = joinList ;
5557 }
5658
5759 @ Override
@@ -76,8 +78,13 @@ public void setAlias(Alias alias) {
7678
7779 @ Override
7880 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 ();
8289 }
8390}
Original file line number Diff line number Diff line change @@ -458,7 +458,9 @@ public void visit(AnyComparisonExpression anyComparisonExpression) {
458458 @ Override
459459 public void visit (SubJoin subjoin ) {
460460 subjoin .getLeft ().accept (this );
461- subjoin .getJoin ().getRightItem ().accept (this );
461+ for (Join join : subjoin .getJoinList ()) {
462+ join .getRightItem ().accept (this );
463+ }
462464 }
463465
464466 @ Override
Original file line number Diff line number Diff line change @@ -329,7 +329,9 @@ public void setExpressionVisitor(ExpressionVisitor visitor) {
329329 public void visit (SubJoin subjoin ) {
330330 buffer .append ("(" );
331331 subjoin .getLeft ().accept (this );
332- deparseJoin (subjoin .getJoin ());
332+ for (Join join : subjoin .getJoinList ()) {
333+ deparseJoin (join );
334+ }
333335 buffer .append (")" );
334336
335337 if (subjoin .getPivot () != null ) {
Original file line number Diff line number Diff line change @@ -1558,11 +1558,13 @@ FromItem SubJoin():
15581558{
15591559 FromItem fromItem = null;
15601560 Join join = null;
1561+ List joinList = null;
15611562 SubJoin subJoin = new SubJoin();
15621563}
15631564{
15641565 fromItem=FromItem() { subJoin.setLeft(fromItem); }
1565- join=JoinerExpression() { subJoin.setJoin(join); }
1566+ // join=JoinerExpression() { subJoin.setJoin(join); }
1567+ joinList=SubJoinsList() { subJoin.setJoinList(joinList); }
15661568
15671569 {
15681570 return subJoin;
@@ -1581,6 +1583,19 @@ List<Join> JoinsList():
15811583 { return joinsList; }
15821584}
15831585
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+
15841599Join JoinerExpression() #JoinerExpression:
15851600{
15861601 Join join = new Join();
Original file line number Diff line number Diff line change 1818 */
1919package net .sf .jsqlparser .test .select ;
2020
21- import java .io .File ;
22- import java .io .IOException ;
23- import java .util .logging .Level ;
24- import java .util .logging .Logger ;
2521import net .sf .jsqlparser .JSQLParserException ;
2622import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
2723import net .sf .jsqlparser .statement .Statement ;
28-
29- import static net .sf .jsqlparser .test .TestUtils .*;
3024import org .apache .commons .io .FileUtils ;
31- import static org .junit .Assert .assertTrue ;
3225import org .junit .ComparisonFailure ;
3326import org .junit .Test ;
3427
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+
3536/**
3637 * Tries to parse and deparse all statments in net.sf.jsqlparser.test.oracle-tests.
3738 *
@@ -63,6 +64,7 @@ public void testAllSqlsParseDeparse() throws IOException {
6364 success ++;
6465 LOG .info (" -> SUCCESS" );
6566 } catch (JSQLParserException ex ) {
67+ ex .printStackTrace ();
6668 //LOG.log(Level.SEVERE, null, ex);
6769 LOG .log (Level .INFO , " -> PROBLEM {0}" , ex .toString ());
6870 } catch (Exception ex ) {
You can’t perform that action at this time.
0 commit comments