This is an automated email from the ASF dual-hosted git repository.

ankit pushed a commit to branch 4.x
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/4.x by this push:
     new 7575123  PHOENIX-6034 Optimize InListIT (#838)
7575123 is described below

commit 7575123f5638d2e85bc017322b945ab9e246ad49
Author: Ankit Singhal <an...@apache.org>
AuthorDate: Tue Aug 25 21:40:55 2020 -0700

    PHOENIX-6034 Optimize InListIT (#838)
---
 .../java/org/apache/phoenix/end2end/InListIT.java  | 156 ++++++++++++++-------
 1 file changed, 107 insertions(+), 49 deletions(-)

diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/InListIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/InListIT.java
index b0aee8f..c64fa79 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/InListIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/InListIT.java
@@ -26,15 +26,18 @@ import static org.junit.Assert.assertTrue;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.sql.PreparedStatement;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Properties;
 
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
 import org.apache.phoenix.compile.QueryPlan;
 import org.apache.phoenix.iterate.ExplainTable;
 import org.apache.phoenix.schema.SortOrder;
@@ -43,27 +46,39 @@ import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.types.PInteger;
 import org.apache.phoenix.util.PhoenixRuntime;
 import org.apache.phoenix.util.PropertiesUtil;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-
 
 public class InListIT extends ParallelStatsDisabledIT {
     private static final String TENANT_SPECIFIC_URL1 = getUrl() + ';' + 
TENANT_ID_ATTRIB + "=tenant1";
-    String tableName;
-    String descViewName;
-    String ascViewName;
+    private static boolean isInitialized = false;
+    private static String tableName = generateUniqueName();
+    private static String tableName2 = generateUniqueName();
+    private static String descViewName = generateUniqueName();
+    private static String ascViewName = generateUniqueName();
+    private static String viewName1 = generateUniqueName();
+    private static String viewName2 = generateUniqueName();
+    private static String prefix = generateUniqueName();
 
     @Before
     public void setup() throws Exception {
-        tableName = generateUniqueName();
-        descViewName = generateUniqueName();
-        ascViewName = generateUniqueName();
-        buildSchema(tableName, generateUniqueName(), true);
-        buildSchema(generateUniqueName(), generateUniqueName(), false);
+        if(isInitialized){
+            return;
+        }
+        initializeTables();
+        isInitialized = true;
+    }
+
+    @After
+    public void cleanUp() throws SQLException {
+        deleteTenantData(descViewName);
+        deleteTenantData(viewName1);
+        deleteTenantData(viewName2);
+        deleteTenantData(ascViewName);
+        deleteTenantData(tableName);
+        deleteTenantData(tableName2);
     }
 
     @Test
@@ -163,7 +178,7 @@ public class InListIT extends ParallelStatsDisabledIT {
      * @return  the table or view name that should be used to access the 
created table
      */
     private static String initializeAndGetTable(Connection baseConn, 
Connection conn, boolean isMultiTenant, PDataType pkType, int saltBuckets) 
throws SQLException {
-        String tableName = generateUniqueName() + "in_test" + 
pkType.getSqlTypeName() + saltBuckets + (isMultiTenant ? "_multi" : "_single");
+        String tableName = getTableName(isMultiTenant, pkType, saltBuckets);
         String tableDDL = createTableDDL(tableName, pkType, saltBuckets, 
isMultiTenant);
         baseConn.createStatement().execute(tableDDL);
 
@@ -179,6 +194,12 @@ public class InListIT extends ParallelStatsDisabledIT {
         }
     }
 
+    private static String getTableName(boolean isMultiTenant, PDataType 
pkType, int saltBuckets) {
+        return prefix+"init_in_test_" + pkType.getSqlTypeName() + saltBuckets 
+ (isMultiTenant ?
+            "_multi" :
+            "_single");
+    }
+
     private static final String TENANT_ID = "ABC";
     private static final String TENANT_URL = getUrl() + ";" + 
PhoenixRuntime.TENANT_ID_ATTRIB + '=' + TENANT_ID;
 
@@ -189,15 +210,51 @@ public class InListIT extends ParallelStatsDisabledIT {
 
     private static final List<String> HINTS = Arrays.asList("/*+ SKIP_SCAN 
*/", "/*+ RANGE_SCAN */");
 
+    private  void initializeTables() throws Exception {
+        buildSchema(tableName, viewName1, true);
+        buildSchema(tableName2, viewName2, false);
+        for (boolean isMultiTenant : TENANCIES) {
+            Connection baseConn = DriverManager.getConnection(getUrl());
+            Connection conn = isMultiTenant ? 
DriverManager.getConnection(TENANT_URL) : baseConn;
+
+            try {
+                // test each combination of types and salting
+                for (PDataType pkType : INTEGER_TYPES) {
+                    for (int saltBuckets : SALT_BUCKET_NUMBERS) {
+                        // use a different table with a unique name for each 
variation
+                        String tableName =
+                            initializeAndGetTable(baseConn, conn, 
isMultiTenant, pkType,
+                                saltBuckets);
+
+                        // upsert the given data
+                        for (String upsertBody : DEFAULT_UPSERT_BODIES) {
+                            conn.createStatement()
+                                .execute("UPSERT INTO " + tableName + " " + 
upsertBody);
+                        }
+                        conn.commit();
+                    }
+                }
+            }
+
+            // clean up the connections used
+            finally {
+                baseConn.close();
+                if (!conn.isClosed()) {
+                    conn.close();
+                }
+
+            }
+        }
+    }
+
     /**
      * Tests the given where clause against the given upserts by comparing 
against the list of
      * expected result strings.
-     * @param upsertBodies  list of upsert bodies with the form "(pk1, pk2, 
..., nonPk) VALUES (1, 7, ..., "row1")
-     *                      excludes the "UPSERT INTO table_name " segment so 
that table name can vary
      * @param whereClause  the where clause to test. Should only refer to the 
pks upserted.
      * @param expecteds  a complete list of all of the expected result row 
names
      */
-    private void testWithIntegerTypesWithVariedSaltingAndTenancy(List<String> 
upsertBodies, String whereClause, List<String> expecteds) throws SQLException {
+    private void testWithIntegerTypesWithVariedSaltingAndTenancy(String 
whereClause,
+        List<String> expecteds) throws SQLException {
         // test single and multitenant tables
         for(boolean isMultiTenant : TENANCIES) {
             Connection baseConn = DriverManager.getConnection(getUrl());
@@ -209,13 +266,7 @@ public class InListIT extends ParallelStatsDisabledIT {
                 for(PDataType pkType : INTEGER_TYPES) {
                     for(int saltBuckets : SALT_BUCKET_NUMBERS) {
                         // use a different table with a unique name for each 
variation
-                        String tableName = initializeAndGetTable(baseConn, 
conn, isMultiTenant, pkType, saltBuckets);
-
-                        // upsert the given data
-                        for(String upsertBody : upsertBodies) {
-                            conn.createStatement().execute("UPSERT INTO " + 
tableName + " " + upsertBody);
-                        }
-                        conn.commit();
+                        String tableName = getTableName(isMultiTenant, pkType, 
saltBuckets);
 
                         for(String hint : HINTS) {
                             String context = "where: " + whereClause + ", 
type: " + pkType + ", salt buckets: "
@@ -271,7 +322,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3, pk4, pk5) IN ((1, 2, 3, 4, 
5), (1, 2, 4, 5, 3))";
         List<String> expecteds = Collections.<String>emptyList();
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -279,7 +330,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3, pk4, pk5) IN ((1, 2, 3, 4, 
5), (1, 2, 4, 5, 6))";
         List<String> expecteds = singletonList("row1");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -287,7 +338,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3, pk4) IN ((2, 3, 4, 5), (1, 
2, 4, 5))";
         List<String> expecteds = Arrays.asList("row1", "row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -295,7 +346,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk2, pk3, pk4, pk5) IN ((2, 3, 4, 5), (2, 
4, 5, 6))";
         List<String> expecteds = singletonList("row1");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -303,7 +354,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk4, pk5) IN ((1, 2, 4, 5), (6, 
5, 3, 2))";
         List<String> expecteds = singletonList("row4");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -311,7 +362,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE pk1 != 2 AND (pk3, pk4, pk5) IN ((6, 4, 
5), (5, 6, 4))";
         List<String> expecteds = Collections.<String>emptyList();
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -319,7 +370,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE pk1 = 2 AND (pk2, pk3, pk4, pk5) IN ((2, 
4, 5, 6), (3, 4, 5, 6))";
         List<String> expecteds = singletonList("row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -327,7 +378,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE pk1 = 2 AND (pk2, pk3) IN ((3, 6), (5, 
4))";
         List<String> expecteds = singletonList("row3");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -335,7 +386,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE pk2 = 2 AND (pk3, pk4, pk5) IN ((4, 5, 6), 
(5, 6, 4))";
         List<String> expecteds = singletonList("row1");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -343,7 +394,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE pk1 = 2 AND (pk3, pk4, pk5) IN ((4, 5, 6), 
(5, 6, 4))";
         List<String> expecteds = singletonList("row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -351,7 +402,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3) IN ((2, 3, 4), (2, 3, 6)) 
AND pk4 = 3";
         List<String> expecteds = Collections.<String>emptyList();
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -359,7 +410,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3, pk4) IN ((1, 2, 4, 5), (2, 
3, 4, 5)) AND pk5 = 6";
         List<String> expecteds = Arrays.asList("row1", "row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -367,7 +418,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3) IN ((2, 3, 4), (2, 3, 6)) 
AND pk4 = 4";
         List<String> expecteds = singletonList("row3");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -375,7 +426,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk2, pk3, pk4) IN ((3, 4, 5), (3, 6, 4)) 
AND pk5 = 5";
         List<String> expecteds = singletonList("row3");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -383,7 +434,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3) IN ((2, 3, 4), (2, 3, 6)) 
AND pk5 = 5";
         List<String> expecteds = singletonList("row3");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -391,7 +442,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2) IN ((1, 2), (2, 3)) AND pk2 = 
4";
         List<String> expecteds = Collections.<String>emptyList();
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -399,7 +450,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3, pk4, pk5) IN ((1, 2, 4, 5, 
6), (2, 3, 4, 5, 6)) AND pk1 = 2";
         List<String> expecteds = singletonList("row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -407,7 +458,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3) IN ((1, 2, 4), (2, 3, 6)) 
AND pk3 = 4";
         List<String> expecteds = singletonList("row1");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -415,7 +466,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk3, pk4, pk5) IN ((4, 5, 6), (4, 3, 2)) 
AND pk5 = 2";
         List<String> expecteds = singletonList("row4");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -423,7 +474,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2) IN ((1, 2), (2, 3)) AND (pk2, 
pk3) IN ((4, 4), (4, 6))";
         List<String> expecteds = Collections.<String>emptyList();
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -431,7 +482,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2, pk3) IN ((2, 3, 6), (2, 3, 4)) 
AND (pk3, pk4, pk5) IN ((4, 5, 6), (4, 3, 2))";
         List<String> expecteds = singletonList("row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test public void testOverlappingRVCWithMiddleColumn() throws Exception {
@@ -439,7 +490,7 @@ public class InListIT extends ParallelStatsDisabledIT {
             "WHERE pk2=3 and (pk1, pk2, pk3, pk4) IN ((2, 3, 6, 6), (2, 3, 4, 
5)) ";
         List<String> expecteds = singletonList("row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause,
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause,
             expecteds);
     }
 
@@ -448,7 +499,7 @@ public class InListIT extends ParallelStatsDisabledIT {
             "WHERE (pk2,pk3) in ((3,4)) and (pk1, pk2, pk3, pk4) IN ((2, 3, 6, 
6), (2, 3, 4, 5)) ";
         List<String> expecteds = singletonList("row2");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause,
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause,
             expecteds);
     }
 
@@ -457,7 +508,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk1, pk2) IN ((1, 2), (2, 3)) AND (pk2, 
pk3) IN ((3, 4), (3, 6))";
         List<String> expecteds = Arrays.asList("row2", "row3");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy( whereClause, 
expecteds);
     }
 
     @Test
@@ -465,7 +516,7 @@ public class InListIT extends ParallelStatsDisabledIT {
         String whereClause = "WHERE (pk3, pk4) IN ((4, 5), (4, 3)) AND (pk4, 
pk5) IN ((3, 2), (4, 5))";
         List<String> expecteds = singletonList("row4");
 
-        testWithIntegerTypesWithVariedSaltingAndTenancy(DEFAULT_UPSERT_BODIES, 
whereClause, expecteds);
+        testWithIntegerTypesWithVariedSaltingAndTenancy(whereClause, 
expecteds);
     }
 
     @Test
@@ -683,6 +734,7 @@ public class InListIT extends ParallelStatsDisabledIT {
                 ResultSet rs = stmt.executeQuery("SELECT ID2 FROM " + 
tenantView);
                 assertTrue(rs.next());
                 assertEquals("000000000000500", rs.getString(1));
+                stmt.execute("DELETE FROM " + tenantView);
             }
         }
     }
@@ -890,6 +942,12 @@ public class InListIT extends ParallelStatsDisabledIT {
         }
     }
 
+    private void deleteTenantData(String tenantView) throws SQLException {
+        try (Connection tenantConn = 
DriverManager.getConnection(TENANT_SPECIFIC_URL1)) {
+            tenantConn.createStatement().execute("DELETE FROM " + tenantView);
+        }
+    }
+
     @Test
     public void testInListExpressionWithRightQueryPlanForNumericalValue() 
throws Exception {
         String tenantView = generateUniqueName();

Reply via email to