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

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


The following commit(s) were added to refs/heads/5.2 by this push:
     new 23dc9778e9 PHOENIX-7406 : Fix partial index creation on a table which 
was created with column names in double quotes (#1978) (#1980)
23dc9778e9 is described below

commit 23dc9778e9948a8f4fd91aded693755df446a45f
Author: Palash Chauhan <[email protected]>
AuthorDate: Wed Sep 18 08:49:23 2024 -0700

    PHOENIX-7406 : Fix partial index creation on a table which was created with 
column names in double quotes (#1978) (#1980)
    
    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 35d193de5f..2d4bb52e32 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
@@ -62,6 +62,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;
@@ -157,13 +158,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 7eaa5efbd7..45dd673601 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
@@ -41,6 +41,7 @@ import org.apache.phoenix.end2end.IndexToolIT;
 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.schema.ColumnNotFoundException;
 import org.apache.phoenix.schema.PTable;
@@ -868,4 +869,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