10
10
11
11
import static java .sql .Statement .EXECUTE_FAILED ;
12
12
import static java .sql .Statement .SUCCESS_NO_INFO ;
13
- import static org .junit .Assert .assertEquals ;
14
- import static org .junit .Assert .assertTrue ;
13
+ import static org .junit .Assert .*;
15
14
16
15
/**
17
16
* Created by Guoquan Zhao on 4/7/18.
@@ -21,9 +20,10 @@ public class OptimizerTest extends PLTestBase {
21
20
{"DROP TABLE IF EXISTS t1;" ,
22
21
"DROP TABLE IF EXISTS t2;" };
23
22
private Connection conn ;
23
+
24
24
private void initTables1 () throws FileNotFoundException , SQLException {
25
- try (BufferedReader reader = new BufferedReader (new FileReader ("create_tables_1.sql" ));
26
- Statement stmt = conn .createStatement ();){
25
+ try (BufferedReader reader = new BufferedReader (new FileReader ("create_tables_1.sql" ));
26
+ Statement stmt = conn .createStatement ();) {
27
27
reader .lines ().forEach (s -> {
28
28
try {
29
29
stmt .addBatch (s );
@@ -36,10 +36,12 @@ private void initTables1() throws FileNotFoundException, SQLException {
36
36
assertTrue ("batch failed." , (results [i ] >= 0 || results [i ] == SUCCESS_NO_INFO ) && results [i ] != EXECUTE_FAILED );
37
37
}
38
38
ResultSet resultSet = stmt .executeQuery ("SELECT COUNT(*) FROM t1;" );
39
- assertEquals (3 , resultSet .getInt (0 ));
39
+ resultSet .next ();
40
+ assertEquals (3 , resultSet .getInt (1 ));
40
41
resultSet .close ();
41
42
resultSet = stmt .executeQuery ("SELECT COUNT(*) FROM t2;" );
42
- assertEquals (3 , resultSet .getInt (0 ));
43
+ resultSet .next ();
44
+ assertEquals (3 , resultSet .getInt (1 ));
43
45
resultSet .close ();
44
46
} catch (IOException e ) {
45
47
e .printStackTrace ();
@@ -57,7 +59,6 @@ public void Setup() {
57
59
initTables1 ();
58
60
} catch (SQLException ex ) {
59
61
DumpSQLException (ex );
60
- // throw ex;
61
62
} catch (FileNotFoundException e ) {
62
63
e .printStackTrace ();
63
64
}
@@ -73,9 +74,118 @@ public void Teardown() throws SQLException {
73
74
74
75
75
76
@ Test
76
- public void testJoin1 () throws SQLException {
77
+ public void testInnerJoin () throws SQLException {
78
+ try (
79
+ Statement stmt = conn .createStatement ();
80
+ ResultSet resultSet = stmt .executeQuery ("SELECT t1.a FROM t1 INNER JOIN t2 ON (t1.b = t2.b) ORDER BY t1.a;" );) {
81
+ assertTrue (resultSet .next ());
82
+ assertEquals (1 , resultSet .getInt (1 ));
83
+ assertTrue (resultSet .next ());
84
+ assertEquals (2 , resultSet .getInt (1 ));
85
+ assertFalse (resultSet .next ());
86
+ } catch (Exception e ) {
87
+ e .printStackTrace ();
88
+ fail ();
89
+ }
90
+ try (
91
+ Statement stmt = conn .createStatement ();
92
+ ResultSet resultSet = stmt .executeQuery ("SELECT x.a FROM t1 AS x INNER JOIN t2 ON(x.b = t2.b AND x.c = t2.c) ORDER BY x.a;" );) {
93
+ assertTrue (resultSet .next ());
94
+ assertEquals (1 , resultSet .getInt (1 ));
95
+ assertTrue (resultSet .next ());
96
+ assertEquals (2 , resultSet .getInt (1 ));
97
+ assertFalse (resultSet .next ());
98
+ } catch (Exception e ) {
99
+ e .printStackTrace ();
100
+ fail ();
101
+ }
77
102
78
103
79
104
}
80
105
106
+ @ Test
107
+ public void testLeftOuterJoin () throws SQLException {
108
+ try (
109
+ Statement stmt = conn .createStatement ();
110
+ ResultSet resultSet = stmt .executeQuery ("SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d;" );) {
111
+ assertTrue (resultSet .next ());
112
+ assertEquals (3 , resultSet .getInt (4 ));
113
+ assertEquals (4 , resultSet .getInt (5 ));
114
+ assertEquals (5 , resultSet .getInt (6 ));
115
+ assertEquals (1 , resultSet .getInt (1 ));
116
+ assertEquals (2 , resultSet .getInt (2 ));
117
+ assertEquals (3 , resultSet .getInt (3 ));
118
+ assertTrue (resultSet .next ());
119
+ assertEquals (null , resultSet .getObject (1 ));
120
+ assertEquals (null , resultSet .getObject (2 ));
121
+ assertEquals (null , resultSet .getObject (3 ));
122
+ assertTrue (resultSet .next ());
123
+ assertEquals (null , resultSet .getObject (1 ));
124
+ assertEquals (null , resultSet .getObject (2 ));
125
+ assertEquals (null , resultSet .getObject (3 ));
126
+ assertFalse (resultSet .next ());
127
+ } catch (Exception e ) {
128
+ e .printStackTrace ();
129
+ fail ();
130
+ }
131
+ try (
132
+ Statement stmt = conn .createStatement ();
133
+ ResultSet resultSet = stmt .executeQuery ("SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d WHERE t1.a>1" )) {
134
+ assertTrue (resultSet .next ());
135
+ assertEquals (3 , resultSet .getInt (4 ));
136
+ assertEquals (4 , resultSet .getInt (5 ));
137
+ assertEquals (5 , resultSet .getInt (6 ));
138
+ assertEquals (1 , resultSet .getInt (1 ));
139
+ assertEquals (2 , resultSet .getInt (2 ));
140
+ assertEquals (3 , resultSet .getInt (3 ));
141
+ assertTrue (resultSet .next ());
142
+ assertEquals (null , resultSet .getObject (1 ));
143
+ assertEquals (null , resultSet .getObject (2 ));
144
+ assertEquals (null , resultSet .getObject (3 ));
145
+ assertFalse (resultSet .next ());
146
+ } catch (Exception e ) {
147
+ e .printStackTrace ();
148
+ fail ();
149
+ }
150
+ try (
151
+ Statement stmt = conn .createStatement ();
152
+ ResultSet resultSet = stmt .executeQuery ("SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.a=t2.d WHERE t1.a>1" )) {
153
+ assertTrue (resultSet .next ());
154
+ assertEquals (3 , resultSet .getInt (4 ));
155
+ assertEquals (4 , resultSet .getInt (5 ));
156
+ assertEquals (5 , resultSet .getInt (6 ));
157
+ assertEquals (1 , resultSet .getInt (1 ));
158
+ assertEquals (2 , resultSet .getInt (2 ));
159
+ assertEquals (3 , resultSet .getInt (3 ));
160
+ assertTrue (resultSet .next ());
161
+ assertEquals (null , resultSet .getObject (1 ));
162
+ assertEquals (null , resultSet .getObject (2 ));
163
+ assertEquals (null , resultSet .getObject (3 ));
164
+ assertFalse (resultSet .next ());
165
+ } catch (Exception e ) {
166
+ e .printStackTrace ();
167
+ fail ();
168
+ }
169
+
170
+ }
171
+
172
+ @ Test
173
+ public void testLeftOuterJoinWhere () {
174
+ try (
175
+ Statement stmt = conn .createStatement ();
176
+ ResultSet resultSet = stmt .executeQuery ("SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.d WHERE t2.b IS NULL OR t2.b>1" )) {
177
+ // expected result is
178
+ // t1 t2
179
+ // 1 2 3 {} {} {}
180
+ // 2 3 4 {} {} {}
181
+ assertTrue (resultSet .next ());
182
+ assertTrue (resultSet .next ());
183
+ assertFalse (resultSet .next ());
184
+ } catch (Exception e ) {
185
+ e .printStackTrace ();
186
+ fail ();
187
+ }
188
+ }
189
+
190
+
81
191
}
0 commit comments