You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ra...@apache.org on 2024/01/31 18:00:17 UTC

(phoenix) branch master updated: PHOENIX-7187 Improvement of Integration test case with Explain Plan for Partial Index (#1803)

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

rajeshbabu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/master by this push:
     new 1671c989a9 PHOENIX-7187 Improvement of Integration test case with Explain Plan for Partial Index (#1803)
1671c989a9 is described below

commit 1671c989a950a9bf6325463854c14387795e0fe1
Author: Nikita Pande <37...@users.noreply.github.com>
AuthorDate: Wed Jan 31 23:30:11 2024 +0530

    PHOENIX-7187 Improvement of Integration test case with Explain Plan for Partial Index (#1803)
---
 .../phoenix/end2end/index/PartialIndexIT.java      | 56 ++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexIT.java
index 0f16113239..1d1d399731 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexIT.java
@@ -228,11 +228,19 @@ public class PartialIndexIT extends BaseTest {
             assertTrue(rs.next());
             assertEquals("b", rs.getString(1));
             assertFalse(rs.next());
+            //explain plan verify to check if partial index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(indexTableName));
 
             selectSql = "SELECT  D from " + dataTableName + " WHERE A = 50";
             rs = conn.createStatement().executeQuery(selectSql);
             // Verify that the index table is not used
             assertPlan((PhoenixResultSet) rs,  "", dataTableName);
+            //explain plan verify to check if partial index is not used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertFalse(rs.getString(1).contains(indexTableName));
 
             // Add more rows to test the index write path
             conn.createStatement().execute("upsert into " + dataTableName +
@@ -269,6 +277,10 @@ public class PartialIndexIT extends BaseTest {
             assertPlan((PhoenixResultSet) rs,  "", dataTableName);
             assertTrue(rs.next());
             assertEquals("id2", rs.getString(1));
+            //explain plan verify to check if partial index is not used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertFalse(rs.getString(1).contains(indexTableName));
 
             // Test index verification and repair by IndexTool
             verifyIndex(dataTableName, indexTableName);
@@ -313,11 +325,19 @@ public class PartialIndexIT extends BaseTest {
             assertTrue(rs.next());
             assertEquals("a", rs.getString(1));
             assertFalse(rs.next());
+            //explain plan verify to check if partial index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(indexTableName));
 
             selectSql = "SELECT  D from " + dataTableName + " WHERE A > 100";
             rs = conn.createStatement().executeQuery(selectSql);
             // Verify that the index table is not used
             assertPlan((PhoenixResultSet) rs,  "", dataTableName);
+            //explain plan verify to check if partial index is not used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertFalse(rs.getString(1).contains(indexTableName));
 
             // Add more rows to test the index write path
             conn.createStatement().execute("upsert into " + dataTableName +
@@ -395,6 +415,10 @@ public class PartialIndexIT extends BaseTest {
             assertEquals(70, rs.getInt(1));
             assertEquals("a", rs.getString(2));
             assertFalse(rs.next());
+            //explain plan verify to check if partial index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(indexTableName));
 
             // Add more rows to test the index write path
             conn.createStatement().execute("upsert into " + dataTableName +
@@ -422,6 +446,10 @@ public class PartialIndexIT extends BaseTest {
             assertPlan((PhoenixResultSet) rs,  "", dataTableName);
             assertTrue(rs.next());
             assertEquals(5, rs.getInt(1));
+            //explain plan verify to check if partial index is not used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + "SELECT Count(*) from " + dataTableName);
+            assertTrue(rs.next());
+            assertFalse(rs.getString(1).contains(indexTableName));
 
             // Overwrite an existing row that satisfies the index WHERE clause such that
             // the new version of the row does not satisfy the index where clause anymore. This
@@ -477,6 +505,10 @@ public class PartialIndexIT extends BaseTest {
             assertTrue(rs.next());
             assertEquals("abcdef", rs.getString(1));
             assertFalse(rs.next());
+            //explain plan verify to check if partial index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(indexTableName));
 
             // Add more rows to test the index write path
             conn.createStatement().execute("upsert into " + dataTableName +
@@ -502,6 +534,10 @@ public class PartialIndexIT extends BaseTest {
             assertPlan((PhoenixResultSet) rs,  "", dataTableName);
             assertTrue(rs.next());
             assertEquals(5, rs.getInt(1));
+            //explain plan verify to check if partial index is not used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertFalse(rs.getString(1).contains(indexTableName));
 
             // Overwrite an existing row that satisfies the index WHERE clause such that
             // the new version of the row does not satisfy the index where clause anymore. This
@@ -568,6 +604,10 @@ public class PartialIndexIT extends BaseTest {
             assertTrue(rs.next());
             assertEquals(70, rs.getInt(1));
             assertFalse(rs.next());
+            //explain plan verify to check if partial index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(indexTableName));
 
             // Add more rows to test the index write path
             conn.createStatement().execute(
@@ -582,6 +622,10 @@ public class PartialIndexIT extends BaseTest {
             assertPlan((PhoenixResultSet) rs, "", dataTableName);
             assertTrue(rs.next());
             assertEquals(4, rs.getInt(1));
+            //explain plan verify to check if partial index is not used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + "SELECT Count(*) from " + dataTableName);
+            assertTrue(rs.next());
+            assertFalse(rs.getString(1).contains(indexTableName));
 
             rs = conn.createStatement().executeQuery("SELECT Count(*) from " + indexTableName);
             assertTrue(rs.next());
@@ -600,6 +644,10 @@ public class PartialIndexIT extends BaseTest {
             assertTrue(rs.next());
             assertEquals(0, rs.getInt(1));
             assertFalse(rs.next());
+            //explain plan verify to check if partial index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(indexTableName));
 
             // Test index verification and repair by IndexTool
             verifyIndex(dataTableName, indexTableName);
@@ -754,6 +802,10 @@ public class PartialIndexIT extends BaseTest {
             assertTrue(rs.next());
             assertEquals("b", rs.getString(1));
             assertFalse(rs.next());
+            //explain plan verify to check if partial index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(partialIndexTableName));
 
             selectSql = "SELECT  D from " + dataTableName + " WHERE A < 50";
             // Verify that the full index table is used
@@ -762,6 +814,10 @@ public class PartialIndexIT extends BaseTest {
             assertTrue(rs.next());
             assertEquals("a", rs.getString(1));
             assertFalse(rs.next());
+            //explain plan verify to check if full index is used
+            rs = conn.createStatement().executeQuery("EXPLAIN " + selectSql);
+            assertTrue(rs.next());
+            assertTrue(rs.getString(1).contains(fullIndexTableName));
         }
     }
 }