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