Skip to content

Commit

Permalink
Adding more test cases to TestCompoundIndexParamSearch.
Browse files Browse the repository at this point in the history
  • Loading branch information
kiss034 committed Dec 5, 2023
1 parent 0407317 commit 4203ba1
Showing 1 changed file with 99 additions and 19 deletions.
118 changes: 99 additions & 19 deletions h2/src/test/org/h2/test/db/TestCompoundIndexParamSearch.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ public class TestCompoundIndexParamSearch extends TestDb {

private static final String DB_NAME = "paramSearch";

private static final Pattern SCAN_COUNT_PATTERN = Pattern.compile("\\/\\* scanCount: (\\d+) \\*\\/");

/**
* Run just this test.
*
Expand Down Expand Up @@ -75,8 +77,7 @@ private Connection prepare() throws Exception {
}

private static String findScanCount(String input) {
Pattern pattern = Pattern.compile("\\/\\* scanCount: (\\d+) \\*\\/");
Matcher matcher = pattern.matcher(input.replaceAll("[\\r\\n\\s]+", " "));
Matcher matcher = SCAN_COUNT_PATTERN.matcher(input.replaceAll("[\\r\\n\\s]+", " "));
if (matcher.find()) {
return matcher.group(1);
}
Expand All @@ -91,14 +92,22 @@ private void simpleInAgainstSimpleIndexCheck(Connection conn) throws Exception {
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (a) IN (1, 4)");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (a) IN (?, ?)");
PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (a) IN (1, ?)");
pStat.setInt(1, 4);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (a) IN (?, ?)");
pStat.setInt(1, 1);
pStat.setInt(2, 4);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -110,14 +119,22 @@ private void simpleInAgainstFirstCompoundIndex(Connection conn) throws Exception
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b IN (1, 2)");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b IN (?, ?)");
PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b IN (1, ?)");
pStat.setInt(1, 2);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b IN (?, ?)");
pStat.setInt(1, 1);
pStat.setInt(2, 2);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -129,14 +146,22 @@ private void simpleInAgainstSecondCompoundIndex(Connection conn) throws Exceptio
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT b, c FROM test WHERE c IN ('1', '2')");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE c IN (?, ?)");
PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE c IN ('1', ?)");
pStat.setString(1, "2");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE c IN (?, ?)");
pStat.setString(1, "1");
pStat.setString(2, "2");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -147,16 +172,25 @@ private void compoundInAgainstCompoundIndex(Connection conn) throws Exception {
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) IN ((2, '1'), (3, '2'))");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) IN ((2, ?), (3, ?))");
pStat.setString(1, "1");
pStat.setString(2, "2");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) IN ((?, ?), (?, ?))");
pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) IN ((?, ?), (?, ?))");
pStat.setInt(1, 2);
pStat.setString(2, "1");
pStat.setInt(3, 3);
pStat.setString(4, "2");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -169,16 +203,25 @@ private void compoundInAgainstCompoundIndexUnordered(Connection conn) throws Exc
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (c, b) IN (('1', 2), ('2', 3))");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (c, b) IN (('1', ?), ('2', ?))");
pStat.setInt(1, 2);
pStat.setInt(2, 3);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (c, b) IN ((?, ?), (?, ?))");
pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (c, b) IN ((?, ?), (?, ?))");
pStat.setString(1, "1");
pStat.setInt(2, 2);
pStat.setString(3, "2");
pStat.setInt(4, 3);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -192,8 +235,20 @@ private void compoundInNoIndexAndNull(Connection conn) throws Exception {
"WHERE (A, B) IN ((1, 1), (2, 1), (2, 2), (2, NULL))");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT * FROM TEST_NULL " +
"WHERE (A, B) IN ((1, ?), (2, ?), (2, ?), (2, ?))");
pStat.setInt(1, 1);
pStat.setInt(2, 1);
pStat.setInt(3, 2);
pStat.setObject(4, null);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT * FROM TEST_NULL " +
"WHERE (A, B) IN ((?, ?), (?, ?), (?, ?), (?, ?))");
pStat.setInt(1, 1);
pStat.setInt(2, 1);
Expand All @@ -206,7 +261,7 @@ private void compoundInNoIndexAndNull(Connection conn) throws Exception {
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -217,16 +272,25 @@ private void compoundInAgainstSimpleIndex(Connection conn) throws Exception {
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT a, d FROM test WHERE (a, d) IN ((1, 3), (2, 4))");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT a, d FROM test WHERE (a, d) IN ((?, ?), (?, ?))");
PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT a, d FROM test WHERE (a, d) IN ((1, ?), (2, ?))");
pStat.setInt(1, 3);
pStat.setInt(2, 2);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT a, d FROM test WHERE (a, d) IN ((?, ?), (?, ?))");
pStat.setInt(1, 1);
pStat.setInt(2, 3);
pStat.setInt(3, 2);
pStat.setInt(4, 4);
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -237,14 +301,22 @@ private void compoundEqAgainstCompoundIndex(Connection conn) throws Exception {
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) = (1, '1')");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) = (1, ?)");
pStat.setString(1, "1");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) = (?, ?)");
pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE (b, c) = (?, ?)");
pStat.setInt(1, 1);
pStat.setString(2, "1");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

/**
Expand All @@ -255,14 +327,22 @@ private void multipleEqAgainstCompoundIndex(Connection conn) throws Exception {
ResultSet rs = stat.executeQuery("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b=1 AND c='1'");
rs.next();
String expected = findScanCount(rs.getString(1));
stat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b=1 AND c=?");
pStat.setString(1, "1");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
pStat.close();

PreparedStatement pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b=? AND c=?");
pStat = conn.prepareStatement("EXPLAIN ANALYZE SELECT b, c FROM test WHERE b=? AND c=?");
pStat.setInt(1, 1);
pStat.setString(2, "1");
rs = pStat.executeQuery();
rs.next();
assertEquals(findScanCount(rs.getString(1)), expected);
stat.close();
pStat.close();
}

}

0 comments on commit 4203ba1

Please sign in to comment.