Skip to content

Commit db1f740

Browse files
committed
add index matching test
1 parent 360d238 commit db1f740

File tree

1 file changed

+71
-6
lines changed

1 file changed

+71
-6
lines changed

fdb-relational-core/src/test/java/com/apple/foundationdb/relational/recordlayer/query/StandardQueryTests.java

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -964,39 +964,39 @@ void testNotDistinctFrom() throws Exception {
964964
Assertions.assertEquals(1, statement.executeInsert("STUDENT", row1), "Incorrect insertion count");
965965
Assertions.assertEquals(1, statement.executeInsert("STUDENT", row2), "Incorrect insertion count");
966966

967-
Assertions.assertTrue(statement.execute("SELECT * from STUDENT f WHERE score is not distinct from null"), "Did not return a result set from a select statement!");
967+
Assertions.assertTrue(statement.execute("SELECT * from STUDENT WHERE score is not distinct from null"), "Did not return a result set from a select statement!");
968968
try (final RelationalResultSet resultSet = statement.getResultSet()) {
969969
ResultSetAssert.assertThat(resultSet)
970970
.hasNextRow()
971971
.hasColumn("NAME", "Bob")
972972
.hasNoNextRow();
973973
}
974974

975-
Assertions.assertTrue(statement.execute("SELECT * from STUDENT f WHERE score is not distinct from 100"), "Did not return a result set from a select statement!");
975+
Assertions.assertTrue(statement.execute("SELECT * from STUDENT WHERE score is not distinct from 100"), "Did not return a result set from a select statement!");
976976
try (final RelationalResultSet resultSet = statement.getResultSet()) {
977977
ResultSetAssert.assertThat(resultSet)
978978
.hasNextRow()
979979
.hasColumn("NAME", "Alice")
980980
.hasNoNextRow();
981981
}
982982

983-
Assertions.assertTrue(statement.execute("SELECT * from STUDENT f WHERE null is not distinct from score"), "Did not return a result set from a select statement!");
983+
Assertions.assertTrue(statement.execute("SELECT * from STUDENT WHERE null is not distinct from score"), "Did not return a result set from a select statement!");
984984
try (final RelationalResultSet resultSet = statement.getResultSet()) {
985985
ResultSetAssert.assertThat(resultSet)
986986
.hasNextRow()
987987
.hasColumn("NAME", "Bob")
988988
.hasNoNextRow();
989989
}
990990

991-
Assertions.assertTrue(statement.execute("SELECT * from STUDENT f WHERE 100 is not distinct from score"), "Did not return a result set from a select statement!");
991+
Assertions.assertTrue(statement.execute("SELECT * from STUDENT WHERE 100 is not distinct from score"), "Did not return a result set from a select statement!");
992992
try (final RelationalResultSet resultSet = statement.getResultSet()) {
993993
ResultSetAssert.assertThat(resultSet)
994994
.hasNextRow()
995995
.hasColumn("NAME", "Alice")
996996
.hasNoNextRow();
997997
}
998998

999-
Assertions.assertTrue(statement.execute("SELECT * from STUDENT f WHERE 100 is not distinct from 100"), "Did not return a result set from a select statement!");
999+
Assertions.assertTrue(statement.execute("SELECT * from STUDENT WHERE 100 is not distinct from 100"), "Did not return a result set from a select statement!");
10001000
try (final RelationalResultSet resultSet = statement.getResultSet()) {
10011001
ResultSetAssert.assertThat(resultSet)
10021002
.hasNextRow()
@@ -1006,7 +1006,7 @@ void testNotDistinctFrom() throws Exception {
10061006
.hasNoNextRow();
10071007
}
10081008

1009-
Assertions.assertTrue(statement.execute("SELECT * from STUDENT f WHERE null is not distinct from null"), "Did not return a result set from a select statement!");
1009+
Assertions.assertTrue(statement.execute("SELECT * from STUDENT WHERE null is not distinct from null"), "Did not return a result set from a select statement!");
10101010
try (final RelationalResultSet resultSet = statement.getResultSet()) {
10111011
ResultSetAssert.assertThat(resultSet)
10121012
.hasNextRow()
@@ -1019,6 +1019,71 @@ void testNotDistinctFrom() throws Exception {
10191019
}
10201020
}
10211021

1022+
@Test
1023+
void testExplainDistinctFrom() throws Exception {
1024+
final String schemaTemplate = "CREATE TYPE AS STRUCT contact_detail(phone_number string, address string) " +
1025+
"CREATE TABLE STUDENT(id bigint, name string, contact contact_detail, score bigint, primary key(id)) " +
1026+
"CREATE index score_idx as select score from STUDENT";
1027+
try (var ddl = Ddl.builder().database(URI.create("/TEST/QT")).relationalExtension(relationalExtension).schemaTemplate(schemaTemplate).build()) {
1028+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1029+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where score is distinct from null")) {
1030+
resultSet.next();
1031+
String plan = resultSet.getString(1);
1032+
assertThat(plan).matches("ISCAN\\(SCORE_IDX \\(\\[null\\],>\\) \\| MAP \\(_\\.NAME AS NAME\\)");
1033+
}
1034+
}
1035+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1036+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where score is distinct from 100")) {
1037+
resultSet.next();
1038+
String plan = resultSet.getString(1);
1039+
assertThat(plan).matches("COVERING\\(SCORE_IDX <,> -> \\[ID: KEY\\[.*], SCORE: KEY\\[.*]\\]\\) \\| FILTER _\\.SCORE IS_DISTINCT_FROM promote\\(@.* AS LONG\\) \\| FETCH \\| MAP \\(_\\.NAME AS NAME\\)");
1040+
}
1041+
}
1042+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1043+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where null is distinct from score")) {
1044+
resultSet.next();
1045+
String plan = resultSet.getString(1);
1046+
assertThat(plan).matches("ISCAN\\(SCORE_IDX \\(\\[null\\],>\\) \\| MAP \\(_\\.NAME AS NAME\\)");
1047+
}
1048+
}
1049+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1050+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where 100 is distinct from score")) {
1051+
resultSet.next();
1052+
String plan = resultSet.getString(1);
1053+
assertThat(plan).matches("COVERING\\(SCORE_IDX <,> -> \\[ID: KEY\\[.*], SCORE: KEY\\[.*]\\]\\) \\| FILTER _\\.SCORE IS_DISTINCT_FROM promote\\(@.* AS LONG\\) \\| FETCH \\| MAP \\(_\\.NAME AS NAME\\)");
1054+
}
1055+
}
1056+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1057+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where score is not distinct from null")) {
1058+
resultSet.next();
1059+
String plan = resultSet.getString(1);
1060+
assertThat(plan).matches("ISCAN\\(SCORE_IDX \\[\\[null\\],\\[null\\]\\]\\) \\| MAP \\(_\\.NAME AS NAME\\)");
1061+
}
1062+
}
1063+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1064+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where score is not distinct from 100")) {
1065+
resultSet.next();
1066+
String plan = resultSet.getString(1);
1067+
assertThat(plan).matches("COVERING\\(SCORE_IDX <,> -> \\[ID: KEY\\[.*], SCORE: KEY\\[.*]\\]\\) \\| FILTER _\\.SCORE NOT_DISTINCT_FROM promote\\(@.* AS LONG\\) \\| FETCH \\| MAP \\(_\\.NAME AS NAME\\)");
1068+
}
1069+
}
1070+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1071+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where null is not distinct from score")) {
1072+
resultSet.next();
1073+
String plan = resultSet.getString(1);
1074+
assertThat(plan).matches("ISCAN\\(SCORE_IDX \\[\\[null\\],\\[null\\]\\]\\) \\| MAP \\(_\\.NAME AS NAME\\)");
1075+
}
1076+
}
1077+
try (var statement = ddl.setSchemaAndGetConnection().createStatement()) {
1078+
try (final RelationalResultSet resultSet = statement.executeQuery("EXPLAIN SELECT name FROM STUDENT where 100 is not distinct from score")) {
1079+
resultSet.next();
1080+
String plan = resultSet.getString(1);
1081+
assertThat(plan).matches("COVERING\\(SCORE_IDX <,> -> \\[ID: KEY\\[.*], SCORE: KEY\\[.*]\\]\\) \\| FILTER _\\.SCORE NOT_DISTINCT_FROM promote\\(@.* AS LONG\\) \\| FETCH \\| MAP \\(_\\.NAME AS NAME\\)");
1082+
}
1083+
}
1084+
}
1085+
}
1086+
10221087
@Test
10231088
void testBitmap() throws Exception {
10241089
final String query = "SELECT BITMAP_CONSTRUCT_AGG(BITMAP_BIT_POSITION(uid)) as bitmap, category, BITMAP_BUCKET_OFFSET(uid) as offset FROM T1\n" +

0 commit comments

Comments
 (0)