You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2015/10/15 21:04:41 UTC

phoenix git commit: PHOENIX-2319 SELECT failed on secondary index when table's columns are ALL primary key

Repository: phoenix
Updated Branches:
  refs/heads/master f13b16800 -> 928fc62e1


PHOENIX-2319 SELECT failed on secondary index when table's columns are ALL primary key


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/928fc62e
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/928fc62e
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/928fc62e

Branch: refs/heads/master
Commit: 928fc62e1d467884918b573abc02741ede77f62d
Parents: f13b168
Author: James Taylor <jt...@salesforce.com>
Authored: Thu Oct 15 12:04:30 2015 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Thu Oct 15 12:04:30 2015 -0700

----------------------------------------------------------------------
 .../end2end/index/IndexExpressionIT.java        | 68 ++++++++++++++++++++
 .../apache/phoenix/index/IndexMaintainer.java   |  2 +-
 2 files changed, 69 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/928fc62e/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexExpressionIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexExpressionIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexExpressionIT.java
index 1a5fbcc..c193ee6 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexExpressionIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexExpressionIT.java
@@ -1343,4 +1343,72 @@ public class IndexExpressionIT extends BaseHBaseManagedTimeIT {
 		}
 	}
 
+	@Test
+	public void testImmutableTableOnlyHasPrimaryKeyIndex() throws Exception {
+		helpTestTableOnlyHasPrimaryKeyIndex(false, false);
+	}
+
+	@Test
+	public void testImmutableLocalTableOnlyHasPrimaryKeyIndex() throws Exception {
+		helpTestTableOnlyHasPrimaryKeyIndex(false, true);
+	}
+
+	@Test
+	public void testMutableTableOnlyHasPrimaryKeyIndex() throws Exception {
+		helpTestTableOnlyHasPrimaryKeyIndex(true, false);
+	}
+
+	@Test
+	public void testMutableLocalTableOnlyHasPrimaryKeyIndex() throws Exception {
+		helpTestTableOnlyHasPrimaryKeyIndex(true, true);
+	}
+
+	private void helpTestTableOnlyHasPrimaryKeyIndex(boolean mutable,
+			boolean localIndex) throws Exception {
+		Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+		Connection conn = DriverManager.getConnection(getUrl(), props);
+		String nameSuffix = "t" + (mutable ? "_mutable" : "_immutable") + (localIndex ? "_local" : "_global");
+		String tableName = "t" + nameSuffix;
+		String indexName = "idx" + nameSuffix;
+		try {
+			conn.createStatement().execute(
+				"CREATE TABLE " + tableName + " ("
+							+ "pk1 VARCHAR not null, "
+							+ "pk2 VARCHAR not null, "
+							+ "CONSTRAINT PK PRIMARY KEY (pk1, pk2))"
+							+ (!mutable ? "IMMUTABLE_ROWS=true" : ""));
+			String query = "SELECT * FROM " + tableName;
+			ResultSet rs = conn.createStatement().executeQuery(query);
+			assertFalse(rs.next());
+			conn.createStatement().execute(
+				"CREATE " + (localIndex ? "LOCAL" : "")
+					+ " INDEX " + indexName + " ON " + tableName + " (pk2, pk1)");
+			query = "SELECT * FROM " + indexName;
+			rs = conn.createStatement().executeQuery(query);
+			assertFalse(rs.next());
+
+			PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES(?,?)");
+			stmt.setString(1, "k11");
+			stmt.setString(2, "k21");
+			stmt.execute();
+			conn.commit();
+
+            query = "SELECT * FROM " + indexName;
+            rs = conn.createStatement().executeQuery(query);
+            assertTrue(rs.next());
+            assertEquals("k21", rs.getString(1));
+            assertEquals("k11", rs.getString(2));
+            assertFalse(rs.next());
+            
+			query = "SELECT * FROM " + tableName + " WHERE pk2='k21'";
+			rs = conn.createStatement().executeQuery(query);
+			assertTrue(rs.next());
+			assertEquals("k11", rs.getString(1));
+			assertEquals("k21", rs.getString(2));
+			assertFalse(rs.next());
+		} finally {
+			conn.close();
+		}
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/928fc62e/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java b/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
index a12f633..b060345 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
@@ -834,7 +834,7 @@ public class IndexMaintainer implements Writable, Iterable<ColumnReference> {
                 nDeleteCF++;
             }
         }
-        return nDeleteCF == this.nDataCFs;
+        return nDeleteCF == this.nDataCFs && nDeleteCF > 0;
     }
     
     private boolean hasIndexedColumnChanged(ValueGetter oldState, Collection<KeyValue> pendingUpdates) throws IOException {