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

palashc 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 136a1b6c2a PHOENIX-7406 : Fix partial index creation on a table which 
was created with column names in double quotes (#1978)
136a1b6c2a is described below

commit 136a1b6c2a64d82a939d57ab024ab4ff7702d4c6
Author: Palash Chauhan <[email protected]>
AuthorDate: Tue Sep 17 16:12:29 2024 -0700

    PHOENIX-7406 : Fix partial index creation on a table which was created with 
column names in double quotes (#1978)
    
    Co-authored-by: Palash Chauhan 
<[email protected]>
---
 .../phoenix/compile/CreateIndexCompiler.java       |  6 ++--
 .../phoenix/end2end/index/PartialIndexIT.java      | 41 ++++++++++++++++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateIndexCompiler.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateIndexCompiler.java
index c08bfabcda..c98f9a6a5c 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateIndexCompiler.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/compile/CreateIndexCompiler.java
@@ -64,6 +64,7 @@ import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.EnvironmentEdgeManager;
 import org.apache.phoenix.util.PhoenixRuntime;
+import org.apache.phoenix.util.SchemaUtil;
 
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
@@ -161,13 +162,14 @@ public class CreateIndexCompiler {
             column =  dataTable.getColumns().get(i);
             value = column.getViewConstant();
             if (value == null) {
-                stringBuilder.append(column.getName().getString() + ",");
+                
stringBuilder.append(SchemaUtil.getEscapedArgument(column.getName().getString())
+                        + ",");
             }
         }
         column =  dataTable.getColumns().get(i);
         value = column.getViewConstant();
         if (value == null) {
-            stringBuilder.append(column.getName().getString() + ")");
+            
stringBuilder.append(SchemaUtil.getEscapedArgument(column.getName().getString())
 + ")");
         } else {
             stringBuilder.append(")");
         }
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 50bc677d86..b6e5b17c3a 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
@@ -24,6 +24,7 @@ import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest;
 import org.apache.phoenix.exception.PhoenixParserException;
 import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixResultSet;
+import org.apache.phoenix.jdbc.PhoenixStatement;
 import org.apache.phoenix.mapreduce.index.IndexTool;
 import org.apache.phoenix.query.BaseTest;
 import org.apache.phoenix.query.QueryServices;
@@ -1053,4 +1054,44 @@ public class PartialIndexIT extends BaseTest {
             assertFalse(rs.next());
         }
     }
+
+    @Test
+    public void testPartialIndexOnTableWithCaseSensitiveColumns() throws 
Exception {
+        try(Connection conn = DriverManager.getConnection(getUrl());
+            PhoenixStatement stmt = 
conn.createStatement().unwrap(PhoenixStatement.class)) {
+            String dataTableName = generateUniqueName();
+            String indexName1 = generateUniqueName();
+            String indexName2 = generateUniqueName();
+            String indexName3 = generateUniqueName();
+
+            stmt.execute("CREATE TABLE " + dataTableName
+                    + " (\"hashKeY\" VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR, 
\"CoL\" VARCHAR, \"coLUmn3\" VARCHAR)"
+                    + (salted ? " SALT_BUCKETS=4" : ""));
+
+            stmt.execute("CREATE " + (uncovered ? "UNCOVERED " : " ") + (local 
? "LOCAL " : " ")
+                    + "INDEX " + indexName1 + " on " + dataTableName + " (v1) 
" +
+                    (uncovered ? "" : "INCLUDE (\"CoL\", \"coLUmn3\")"));
+            stmt.execute("CREATE " + (uncovered ? "UNCOVERED " : " ") + (local 
? "LOCAL " : " ")
+                    + "INDEX " + indexName2 + " on " + dataTableName + " 
(\"CoL\") " +
+                    (uncovered ? "" : "INCLUDE (v1, \"coLUmn3\")"));
+            stmt.execute("CREATE " + (uncovered ? "UNCOVERED " : " ") + (local 
? "LOCAL " : " ")
+                    + "INDEX " + indexName3 + " on " + dataTableName + " 
(\"coLUmn3\") " +
+                    (uncovered ? "" : "INCLUDE (\"CoL\", v1)"));
+
+            stmt.execute("UPSERT INTO " + dataTableName + " VALUES ('a', 'b', 
'c', 'd')");
+            conn.commit();
+
+            ResultSet rs = stmt.executeQuery("SELECT \"CoL\" FROM " + 
dataTableName + " WHERE v1='b'");
+            Assert.assertTrue(rs.next());
+            Assert.assertEquals(indexName1, 
stmt.getQueryPlan().getTableRef().getTable().getTableName().toString());
+
+            rs = stmt.executeQuery("SELECT v1 FROM " + dataTableName + " WHERE 
\"CoL\"='c'");
+            Assert.assertTrue(rs.next());
+            Assert.assertEquals(indexName2, 
stmt.getQueryPlan().getTableRef().getTable().getTableName().toString());
+
+            rs = stmt.executeQuery("SELECT \"CoL\" FROM " + dataTableName + " 
WHERE \"coLUmn3\"='d'");
+            Assert.assertTrue(rs.next());
+            Assert.assertEquals(indexName3, 
stmt.getQueryPlan().getTableRef().getTable().getTableName().toString());
+        }
+    }
 }

Reply via email to