Skip to content

Commit

Permalink
#150 improved integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
snehlsen committed May 7, 2019
1 parent 99479c1 commit a05bbd4
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ public Capabilities getCapabilities() {
final Capabilities.Builder builder = Capabilities.builder();
builder.addMain(SELECTLIST_PROJECTION, SELECTLIST_EXPRESSIONS, FILTER_EXPRESSIONS, AGGREGATE_SINGLE_GROUP,
AGGREGATE_GROUP_BY_COLUMN, AGGREGATE_GROUP_BY_EXPRESSION, AGGREGATE_GROUP_BY_TUPLE, AGGREGATE_HAVING,
ORDER_BY_COLUMN, ORDER_BY_EXPRESSION, LIMIT, LIMIT_WITH_OFFSET,
JOIN, JOIN_TYPE_INNER, JOIN_TYPE_LEFT_OUTER, JOIN_TYPE_RIGHT_OUTER, JOIN_TYPE_FULL_OUTER, JOIN_CONDITION_EQUI);
ORDER_BY_COLUMN, ORDER_BY_EXPRESSION, LIMIT, LIMIT_WITH_OFFSET, JOIN, JOIN_TYPE_INNER,
JOIN_TYPE_LEFT_OUTER, JOIN_TYPE_RIGHT_OUTER, JOIN_TYPE_FULL_OUTER, JOIN_CONDITION_EQUI);
builder.addPredicate(AND, OR, NOT, EQUAL, NOTEQUAL, LESS, LESSEQUAL, LIKE, LIKE_ESCAPE, REGEXP_LIKE, BETWEEN,
IN_CONSTLIST, IS_NULL, IS_NOT_NULL);
builder.addLiteral(NULL, DATE, TIMESTAMP, TIMESTAMP_UTC, DOUBLE, EXACTNUMERIC, STRING, INTERVAL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.junit.jupiter.api.Assertions.assertAll;

import java.io.FileNotFoundException;
import java.math.BigDecimal;
Expand All @@ -17,7 +18,6 @@
import static org.junit.Assert.*;
import static org.junit.jupiter.api.Assertions.assertThrows;


@Tag("integration")
@ExtendWith(IntegrationTestConfigurationCondition.class)
class OracleSqlDialectIT extends AbstractIntegrationTest {
Expand Down Expand Up @@ -300,73 +300,67 @@ void testSelectNumber3602() throws SQLException {

// Join Tests -------------------------------------------------------------
@Test
void innerJoin() throws SQLException {
final String query = String.format("SELECT * FROM %1$s.t1 a INNER JOIN %1$s.t2 b ON a.x=b.x",
VIRTUAL_SCHEMA_ORA);
void testInnerJoin() throws SQLException {
final String query = "SELECT * FROM " + VIRTUAL_SCHEMA_ORA + ".t1 a INNER JOIN " + VIRTUAL_SCHEMA_ORA
+ ".t2 b ON a.x=b.x";
final ResultSet result = executeQuery(query);
matchNextRow(result, "2", "bbb", "2", "bbb");
assertFalse(result.next());
assertAll(() -> matchNextRow(result, 2L, "bbb", 2L, "bbb"), () -> assertFalse(result.next()));
}

@Test
void innerJoinWithProjection() throws SQLException {
final String query = String.format(
"SELECT b.y || %1$s.t1.y FROM %1$s.t1 INNER JOIN %1$s.t2 b ON %1$s.t1.x=b.x", VIRTUAL_SCHEMA_JDBC);
void testInnerJoinWithProjection() throws SQLException {
final String query = "SELECT b.y || " + VIRTUAL_SCHEMA_JDBC + ".t1.y FROM " + VIRTUAL_SCHEMA_JDBC
+ ".t1 INNER JOIN " + VIRTUAL_SCHEMA_JDBC + ".t2 b ON " + VIRTUAL_SCHEMA_JDBC + ".t1.x=b.x";
final ResultSet result = executeQuery(query);
matchNextRow(result, "bbbbbb");
assertFalse(result.next());
assertAll(() -> matchNextRow(result, "bbbbbb"), () -> assertFalse(result.next()));
}

@Test
void leftJoin() throws SQLException {
final String query = String.format(
"SELECT * FROM %1$s.t1 a LEFT OUTER JOIN %1$s.t2 b ON a.x=b.x ORDER BY a.x", VIRTUAL_SCHEMA_ORA);
void testLeftJoin() throws SQLException {
final String query = "SELECT * FROM " + VIRTUAL_SCHEMA_ORA + ".t1 a LEFT OUTER JOIN " + VIRTUAL_SCHEMA_ORA
+ ".t2 b ON a.x=b.x ORDER BY a.x";
final ResultSet result = executeQuery(query);
matchNextRow(result, "1", "aaa", null, null);
matchNextRow(result, "2", "bbb", "2", "bbb");
matchNextRow(result, 1L, "aaa", null, null);
matchNextRow(result, 2L, "bbb", 2L, "bbb");
assertFalse(result.next());
}

@Test
void rightJoin() throws SQLException {
final String query = String.format(
"SELECT * FROM %1$s.t1 a RIGHT OUTER JOIN %1$s.t2 b ON a.x=b.x ORDER BY a.x", VIRTUAL_SCHEMA_JDBC);
void testRightJoin() throws SQLException {
final String query = "SELECT * FROM " + VIRTUAL_SCHEMA_JDBC + ".t1 a RIGHT OUTER JOIN " + VIRTUAL_SCHEMA_JDBC
+ ".t2 b ON a.x=b.x ORDER BY a.x";
final ResultSet result = executeQuery(query);
matchNextRow(result, "2", "bbb", "2", "bbb");
matchNextRow(result, null, null, "3", "ccc");
assertFalse(result.next());
assertAll(() -> matchNextRow(result, 2L, "bbb", 2L, "bbb"),
() -> matchNextRow(result, null, null, 3L, "ccc"), () -> assertFalse(result.next()));
}

@Test
void fullOuterJoin() throws SQLException {
final String query = String.format(
"SELECT * FROM %1$s.t1 a FULL OUTER JOIN %1$s.t2 b ON a.x=b.x ORDER BY a.x", VIRTUAL_SCHEMA_ORA);
void testFullOuterJoin() throws SQLException {
final String query = "SELECT * FROM " + VIRTUAL_SCHEMA_ORA + ".t1 a FULL OUTER JOIN " + VIRTUAL_SCHEMA_ORA
+ ".t2 b ON a.x=b.x ORDER BY a.x";
final ResultSet result = executeQuery(query);
matchNextRow(result, "1", "aaa", null, null);
matchNextRow(result, "2", "bbb", "2", "bbb");
matchNextRow(result, null, null, "3", "ccc");
assertFalse(result.next());
assertAll(() -> matchNextRow(result, 1L, "aaa", null, null),
() -> matchNextRow(result, 2L, "bbb", 2L, "bbb"),
() -> matchNextRow(result, null, null, 3L, "ccc"), () -> assertFalse(result.next()));
}

@Test
void rightJoinWithComplexCondition() throws SQLException {
final String query = String.format(
"SELECT * FROM %1$s.t1 a RIGHT OUTER JOIN %1$s.t2 b ON a.x||a.y=b.x||b.y ORDER BY a.x", VIRTUAL_SCHEMA_JDBC);
void testRightJoinWithComplexCondition() throws SQLException {
final String query = "SELECT * FROM " + VIRTUAL_SCHEMA_JDBC + ".t1 a RIGHT OUTER JOIN " + VIRTUAL_SCHEMA_JDBC
+ ".t2 b ON a.x||a.y=b.x||b.y ORDER BY a.x";
final ResultSet result = executeQuery(query);
matchNextRow(result, "2", "bbb", "2", "bbb");
matchNextRow(result, null, null, "3", "ccc");
assertFalse(result.next());
assertAll(() -> matchNextRow(result, 2L, "bbb", 2L, "bbb"),
() -> matchNextRow(result, null, null, 3L, "ccc"), () -> assertFalse(result.next()));
}

@Test
void fullOuterJoinWithComplexCondition() throws SQLException {
final String query = String.format(
"SELECT * FROM %1$s.t1 a FULL OUTER JOIN %1$s.t2 b ON a.x-b.x=0 ORDER BY a.x", VIRTUAL_SCHEMA_ORA);
void testFullOuterJoinWithComplexCondition() throws SQLException {
final String query = "SELECT * FROM " + VIRTUAL_SCHEMA_ORA + ".t1 a FULL OUTER JOIN " + VIRTUAL_SCHEMA_ORA
+ ".t2 b ON a.x-b.x=0 ORDER BY a.x";
final ResultSet result = executeQuery(query);
matchNextRow(result, "1", "aaa", null, null);
matchNextRow(result, "2", "bbb", "2", "bbb");
matchNextRow(result, null, null, "3", "ccc");
assertFalse(result.next());
assertAll(() -> matchNextRow(result, 1L, "aaa", null, null),
() -> matchNextRow(result, 2L, "bbb", 2L, "bbb"),
() -> matchNextRow(result, null, null, 3L, "ccc"), () -> assertFalse(result.next()));
}

// Type Tests -------------------------------------------------------------
Expand All @@ -387,8 +381,8 @@ void testSelectExpression() throws SQLException {
matchNextRowDecimal(result, "12346.12345");
matchNextRowDecimal(result, "12356.12345");
}
runMatchSingleRowExplain(query,
"SELECT CAST((" + TYPE_TEST_T + ".\"C7\" + 1) AS FLOAT) FROM \"" + ORA_TABLE + "\" ORDER BY (" + TYPE_TEST_T + ".\"C7\" + 1)");
runMatchSingleRowExplain(query, "SELECT CAST((" + TYPE_TEST_T + ".\"C7\" + 1) AS FLOAT) FROM \"" + ORA_TABLE
+ "\" ORDER BY (" + TYPE_TEST_T + ".\"C7\" + 1)");
}

@Test
Expand All @@ -399,7 +393,8 @@ void testFilterExpression() throws SQLException {
final ResultSet resultORA = runQueryORA(query);
matchNextRow(resultORA, "01.2355123450E4");

runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T + ".\"C7\" FROM \"" + ORA_TABLE + "\" WHERE 12346 < " + TYPE_TEST_T + ".\"C7\"");
runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T + ".\"C7\" FROM \"" + ORA_TABLE + "\" WHERE 12346 < "
+ TYPE_TEST_T + ".\"C7\"");
}

@Test
Expand All @@ -408,7 +403,8 @@ void testAggregateSingleGroup() throws SQLException {
for (final ResultSet result : runQuery(query)) {
matchNextRowDecimal(result, "12345.12345");
}
runMatchSingleRowExplain(query, "SELECT CAST(MIN(" + TYPE_TEST_T + ".\"C7\") AS FLOAT) FROM \"" + ORA_TABLE + "\"");
runMatchSingleRowExplain(query,
"SELECT CAST(MIN(" + TYPE_TEST_T + ".\"C7\") AS FLOAT) FROM \"" + ORA_TABLE + "\"");
}

@Test
Expand All @@ -418,8 +414,9 @@ void testAggregateGroupByColumn() throws SQLException {
matchNextRowDecimal(result, "123456789012345678901234567890123456", "12345.12345");
matchNextRowDecimal(result, "1234567890.123456789", "12355.12345");
}
runMatchSingleRowExplain(query, "SELECT TO_CHAR(" + TYPE_TEST_T + ".\"C5\"), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \"" + ORA_TABLE
+ "\" GROUP BY " + TYPE_TEST_T + ".\"C5\" ORDER BY \"TYPE_TEST\".\"C5\" DESC");
runMatchSingleRowExplain(query,
"SELECT TO_CHAR(" + TYPE_TEST_T + ".\"C5\"), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \""
+ ORA_TABLE + "\" GROUP BY " + TYPE_TEST_T + ".\"C5\" ORDER BY \"TYPE_TEST\".\"C5\" DESC");
}

@Test
Expand All @@ -429,8 +426,10 @@ void testAggregateGroupByExpression() throws SQLException {
matchNextRowDecimal(result, "123456789012345678901234567890123457", "12345.12345");
matchNextRowDecimal(result, "1234567891.123456789", "12355.12345");
}
runMatchSingleRowExplain(query, "SELECT CAST((" + TYPE_TEST_T + ".\"C5\" + 1) AS FLOAT), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \""
+ ORA_TABLE + "\" GROUP BY (" + TYPE_TEST_T + ".\"C5\" + 1) ORDER BY (\"TYPE_TEST\".\"C5\" + 1) DESC");
runMatchSingleRowExplain(query,
"SELECT CAST((" + TYPE_TEST_T
+ ".\"C5\" + 1) AS FLOAT), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \"" + ORA_TABLE
+ "\" GROUP BY (" + TYPE_TEST_T + ".\"C5\" + 1) ORDER BY (\"TYPE_TEST\".\"C5\" + 1) DESC");
}

@Test
Expand All @@ -441,8 +440,10 @@ void testAggregateGroupByTuple() throws SQLException {
"12345.12345");
matchNextRowDecimal(result, "123456789012345678901234567890123456", "1234567890.123456789", "12355.12345");
}
runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T + ".\"C_NUMBER36\", TO_CHAR(\"TYPE_TEST\".\"C5\"), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \""
+ ORA_TABLE + "\" GROUP BY " + TYPE_TEST_T + ".\"C5\", \"TYPE_TEST\".\"C_NUMBER36\" ORDER BY \"TYPE_TEST\".\"C5\" DESC");
runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T
+ ".\"C_NUMBER36\", TO_CHAR(\"TYPE_TEST\".\"C5\"), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \""
+ ORA_TABLE + "\" GROUP BY " + TYPE_TEST_T
+ ".\"C5\", \"TYPE_TEST\".\"C_NUMBER36\" ORDER BY \"TYPE_TEST\".\"C5\" DESC");
}

@Test
Expand All @@ -451,8 +452,10 @@ void testAggregateHaving() throws SQLException, ClassNotFoundException, FileNotF
for (final ResultSet result : runQuery(query)) {
matchNextRowDecimal(result, "1234567890.123456789", "12355.12345");
}
runMatchSingleRowExplain(query, "SELECT TO_CHAR(" + TYPE_TEST_T + ".\"C5\"), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \"" + ORA_TABLE
+ "\" GROUP BY " + TYPE_TEST_T + ".\"C5\" HAVING 12350 < MIN(\"TYPE_TEST\".\"C7\")");
runMatchSingleRowExplain(query,
"SELECT TO_CHAR(" + TYPE_TEST_T + ".\"C5\"), CAST(MIN(\"TYPE_TEST\".\"C7\") AS FLOAT) FROM \""
+ ORA_TABLE + "\" GROUP BY " + TYPE_TEST_T
+ ".\"C5\" HAVING 12350 < MIN(\"TYPE_TEST\".\"C7\")");
}

@Test
Expand All @@ -462,7 +465,8 @@ void testOrderByColumn() throws SQLException {
matchNextRow(result, "aaaaaaaaaaaaaaaaaaaa ");
matchNextRow(result, (Object) null);
}
runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T + ".\"C1\" FROM \"" + ORA_TABLE + "\" ORDER BY " + TYPE_TEST_T + ".\"C1\" DESC NULLS LAST");
runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T + ".\"C1\" FROM \"" + ORA_TABLE + "\" ORDER BY "
+ TYPE_TEST_T + ".\"C1\" DESC NULLS LAST");
}

@Test
Expand All @@ -475,7 +479,8 @@ void testOrderByExpression() throws SQLException {
matchNextRow(resultORA, "01.2355123450E4");
matchNextRow(resultORA, "01.2345123450E4");

runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T + ".\"C7\" FROM \"" + ORA_TABLE + "\" ORDER BY ABS(" + TYPE_TEST_T + ".\"C7\") DESC");
runMatchSingleRowExplain(query, "SELECT " + TYPE_TEST_T + ".\"C7\" FROM \"" + ORA_TABLE + "\" ORDER BY ABS("
+ TYPE_TEST_T + ".\"C7\") DESC");
}

@Test
Expand All @@ -488,8 +493,8 @@ void testLimit() throws SQLException {
matchNextRow(resultORA, "01.2345123450E4");
matchNextRow(resultORA, "01.2355123450E4");

runMatchSingleRowExplain(query, "SELECT LIMIT_SUBSELECT.* FROM ( SELECT " + TYPE_TEST_T + ".\"C7\" FROM \"" + ORA_TABLE
+ "\" ORDER BY " + TYPE_TEST_T + ".\"C7\" ) LIMIT_SUBSELECT WHERE ROWNUM <= 2");
runMatchSingleRowExplain(query, "SELECT LIMIT_SUBSELECT.* FROM ( SELECT " + TYPE_TEST_T + ".\"C7\" FROM \""
+ ORA_TABLE + "\" ORDER BY " + TYPE_TEST_T + ".\"C7\" ) LIMIT_SUBSELECT WHERE ROWNUM <= 2");
}

@Test
Expand All @@ -501,8 +506,9 @@ void testLimitOffset() throws SQLException {
matchNextRow(resultORA, "01.2355123450E4");

runMatchSingleRowExplain(query,
"SELECT c0 FROM ( SELECT LIMIT_SUBSELECT.*, ROWNUM ROWNUM_SUB FROM ( SELECT " + TYPE_TEST_T + ".\"C7\" AS c0 FROM \""
+ ORA_TABLE + "\" ORDER BY " + TYPE_TEST_T + ".\"C7\" ) LIMIT_SUBSELECT WHERE ROWNUM <= 2 ) WHERE ROWNUM_SUB > 1");
"SELECT c0 FROM ( SELECT LIMIT_SUBSELECT.*, ROWNUM ROWNUM_SUB FROM ( SELECT " + TYPE_TEST_T
+ ".\"C7\" AS c0 FROM \"" + ORA_TABLE + "\" ORDER BY " + TYPE_TEST_T
+ ".\"C7\" ) LIMIT_SUBSELECT WHERE ROWNUM <= 2 ) WHERE ROWNUM_SUB > 1");
}

@Test
Expand Down Expand Up @@ -751,7 +757,8 @@ void testIntervalDay() throws SQLException {
matchNextRow(result, "+01 11:12:10.123000");
matchNextRow(result, "+02 02:03:04.123456");
}
runMatchSingleRowExplain(query, "SELECT TO_CHAR(" + TYPE_TEST_T + ".\"C17\") FROM \"" + ORA_TABLE + "\" ORDER BY " + TYPE_TEST_T + ".\"C17\"");
runMatchSingleRowExplain(query, "SELECT TO_CHAR(" + TYPE_TEST_T + ".\"C17\") FROM \"" + ORA_TABLE
+ "\" ORDER BY " + TYPE_TEST_T + ".\"C17\"");
assertEquals("VARCHAR(2000000) UTF8", getColumnType("C17"));
}

Expand Down

0 comments on commit a05bbd4

Please sign in to comment.