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());
+ }
+ }
}