You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2016/11/18 18:57:45 UTC
phoenix git commit: PHOENIX-3498 Query with index failed when query
back to data table with desc PK column
Repository: phoenix
Updated Branches:
refs/heads/master 8152131e4 -> 3b3d8ad3a
PHOENIX-3498 Query with index failed when query back to data table with desc PK column
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/3b3d8ad3
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/3b3d8ad3
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/3b3d8ad3
Branch: refs/heads/master
Commit: 3b3d8ad3ab3bb0fae013154878ba0467691c5b30
Parents: 8152131
Author: William Yang <yh...@163.com>
Authored: Fri Nov 18 10:57:19 2016 -0800
Committer: maryannxue <ma...@gmail.com>
Committed: Fri Nov 18 10:57:19 2016 -0800
----------------------------------------------------------------------
.../apache/phoenix/end2end/index/IndexIT.java | 45 ++++++++++++++++++++
.../apache/phoenix/join/HashCacheClient.java | 4 +-
2 files changed, 47 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/3b3d8ad3/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java
index 8ab563c..48fe3e6 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexIT.java
@@ -1093,4 +1093,49 @@ public class IndexIT extends ParallelStatsDisabledIT {
}
}
+ @Test
+ public void testQueryBackToDataTableWithDescPKColumn() throws SQLException {
+ doTestQueryBackToDataTableWithDescPKColumn(true);
+ doTestQueryBackToDataTableWithDescPKColumn(false);
+ }
+
+ private void doTestQueryBackToDataTableWithDescPKColumn(boolean isSecondPKDesc) throws SQLException {
+ Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+ String tableName = "TBL_" + generateUniqueName();
+ String indexName = "IND_" + generateUniqueName();
+ String fullTableName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName);
+ String fullIndexName = SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName);
+
+ try (Connection conn = DriverManager.getConnection(getUrl(), props)) {
+ // create data table and index table
+ conn.setAutoCommit(true);
+ Statement stmt = conn.createStatement();
+ String ddl = "CREATE TABLE " + fullTableName + "(p1 integer not null, p2 integer not null, " +
+ " a integer, b integer CONSTRAINT PK PRIMARY KEY ";
+ if (isSecondPKDesc) {
+ ddl += "(p1, p2 desc))";
+ } else {
+ ddl += "(p1 desc, p2))";
+ }
+ stmt.executeUpdate(ddl);
+ ddl = "CREATE "+ (localIndex ? "LOCAL " : "") + " INDEX " + fullIndexName + " on " + fullTableName + "(a)";
+ stmt.executeUpdate(ddl);
+
+ // upsert a single row
+ String upsert = "UPSERT INTO " + fullTableName + " VALUES(1,2,3,4)";
+ stmt.executeUpdate(upsert);
+
+ // try select with index
+ // a = 3, should hit index table, but we select column B, so it will query back to data table
+ String query = "SELECT /*+index(" + fullTableName + " " + fullIndexName + "*/ b from " + fullTableName +
+ " WHERE a = 3";
+ ResultSet rs = stmt.executeQuery(query);
+ assertTrue(rs.next());
+ assertEquals(4, rs.getInt(1));
+ assertFalse(rs.next());
+ rs.close();
+ stmt.close();
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/3b3d8ad3/phoenix-core/src/main/java/org/apache/phoenix/join/HashCacheClient.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/join/HashCacheClient.java b/phoenix-core/src/main/java/org/apache/phoenix/join/HashCacheClient.java
index e8b3389..32d0469 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/join/HashCacheClient.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/join/HashCacheClient.java
@@ -158,7 +158,7 @@ public class HashCacheClient {
PDataType type = keyExpression.getDataType();
keyExpression.reset();
if (keyExpression.evaluate(tuple, ptr)) {
- return LiteralExpression.newConstant(type.toObject(ptr), type);
+ return LiteralExpression.newConstant(type.toObject(ptr, keyExpression.getSortOrder()), type);
}
return LiteralExpression.newConstant(null, type);
@@ -170,7 +170,7 @@ public class HashCacheClient {
PDataType type = child.getDataType();
child.reset();
if (child.evaluate(tuple, ptr)) {
- values.add(LiteralExpression.newConstant(type.toObject(ptr), type));
+ values.add(LiteralExpression.newConstant(type.toObject(ptr, child.getSortOrder()), type));
} else {
values.add(LiteralExpression.newConstant(null, type));
}