From 15d1f994205a701610ab46b9ad3e1eccc7a44b20 Mon Sep 17 00:00:00 2001 From: "Thomas S. Chen" Date: Wed, 3 Sep 2014 10:48:08 +0800 Subject: [PATCH 1/6] PHOENIX-1225 --- .../main/java/org/apache/phoenix/compile/WhereOptimizer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index 635dbc4f1cb..5e031580473 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -685,7 +685,7 @@ private KeySlots orKeySlots(OrExpression orExpression, List childSlots for (KeySlot slot : childSlot) { // We have a nested OR with nothing for this slot, so continue if (slot == null) { - continue; // FIXME: I don't think this is ever necessary + return null; //If one childSlot does not have the PK columns, let Phoenix scan all the key ranges of the table. } /* * If we see a different PK column than before, we can't From c4e60617883b434c96b1ccd2bdab3c60611c2b99 Mon Sep 17 00:00:00 2001 From: "Thomas S. Chen" Date: Wed, 3 Sep 2014 17:17:36 +0800 Subject: [PATCH 2/6] Add the test code for evaluation of OR --- .../phoenix/end2end/EvaluationOfORIT.java | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java new file mode 100644 index 00000000000..3e893b33a51 --- /dev/null +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java @@ -0,0 +1,159 @@ +package org.apache.phoenix.end2end; + + +import static org.junit.Assert.*; + + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Properties; + +import org.apache.phoenix.util.PhoenixRuntime; +import org.apache.phoenix.util.TestUtil; +import org.junit.Test; + +public class EvaluationOfORIT extends BaseClientManagedTimeIT{ + + @Test + public void testPKOrNotPKInOREvaluation() throws SQLException { + Connection conn = DriverManager.getConnection(getUrl()); + String create = "CREATE TABLE DIE ( ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(50) NOT NULL)"; + PreparedStatement createStmt = conn.prepareStatement(create); + createStmt.executeUpdate(); + conn.close(); + Connection conn1 = DriverManager.getConnection(getUrl()); + PreparedStatement stmt = conn1.prepareStatement( + "upsert into " + + "DIE VALUES (?, ?)"); + stmt.setInt(1, 1); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,2); + stmt.setString(2, "Tester2"); + stmt.execute(); + + stmt.setInt(1,3); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,4); + stmt.setString(2, "LikeTester1"); + stmt.execute(); + + stmt.setInt(1,5); + stmt.setString(2, "LikeTester2"); + stmt.execute(); + + stmt.setInt(1,6); + stmt.setString(2, "LikeTesterEnd"); + stmt.execute(); + + stmt.setInt(1,7); + stmt.setString(2, "LikeTesterEnd2"); + stmt.execute(); + + stmt.setInt(1,8); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,9); + stmt.setString(2, "Tester4"); + stmt.execute(); + + stmt.setInt(1,10); + stmt.setString(2, "Tester5"); + stmt.execute(); + + stmt.setInt(1,11); + stmt.setString(2, "Tester6"); + stmt.execute(); + + stmt.setInt(1,12); + stmt.setString(2, "tester6"); + stmt.execute(); + + stmt.setInt(1,13); + stmt.setString(2, "lester1"); + stmt.execute(); + + stmt.setInt(1,14); + stmt.setString(2, "le50ster1"); + stmt.execute(); + + stmt.setInt(1,15); + stmt.setString(2, "LE50ster1"); + stmt.execute(); + + stmt.setInt(1,16); + stmt.setString(2, "LiketesterEnd"); + stmt.execute(); + + stmt.setInt(1,17); + stmt.setString(2, "la50ster1"); + stmt.execute(); + + stmt.setInt(1,18); + stmt.setString(2, "lA50ster0"); + stmt.execute(); + + stmt.setInt(1,19); + stmt.setString(2, "lA50ster2"); + stmt.execute(); + + stmt.setInt(1,20); + stmt.setString(2, "la50ster0"); + stmt.execute(); + + stmt.setInt(1,21); + stmt.setString(2, "la50ster2"); + stmt.execute(); + + stmt.setInt(1,22); + stmt.setString(2, "La50ster3"); + stmt.execute(); + + stmt.setInt(1,23); + stmt.setString(2, "la50ster3"); + stmt.execute(); + + stmt.setInt(1,24); + stmt.setString(2, "l[50ster3"); + stmt.execute(); + + stmt.setInt(1,25); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,26); + stmt.setString(2, "Tester100"); + stmt.execute(); + + conn1.commit(); + conn1.close(); + + Connection conn2 = DriverManager.getConnection(getUrl()); + String select = "Select * from DIE where ID=6 or Name between 'Tester1' and 'Tester3'"; + ResultSet rs; + rs = conn2.createStatement().executeQuery(select); + assertTrue(rs.next()); + assertEquals(1,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(2,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(3,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(6,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(8,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(25,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(26,rs.getInt(1)); + conn2.close(); + } + +} From 322a1d1bf8e2e9c795b98649bac49403e60cd446 Mon Sep 17 00:00:00 2001 From: "Thomas S. Chen" Date: Thu, 4 Sep 2014 09:50:23 +0800 Subject: [PATCH 3/6] Add the testUnfoundSingleColumnCaseStatement() --- .../phoenix/end2end/EvaluationOfORIT.java | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java index 3e893b33a51..f4d0b651308 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java @@ -1,6 +1,8 @@ package org.apache.phoenix.end2end; +import static org.apache.phoenix.util.TestUtil.ROW5; +import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; import static org.junit.Assert.*; @@ -12,11 +14,18 @@ import java.util.Properties; import org.apache.phoenix.util.PhoenixRuntime; -import org.apache.phoenix.util.TestUtil; +import org.junit.Before; import org.junit.Test; public class EvaluationOfORIT extends BaseClientManagedTimeIT{ - + private static final String tenantId = getOrganizationId(); + private long ts; + + @Before + public void initTable() throws Exception { + ts = nextTimestamp(); + } + @Test public void testPKOrNotPKInOREvaluation() throws SQLException { Connection conn = DriverManager.getConnection(getUrl()); @@ -155,5 +164,37 @@ public void testPKOrNotPKInOREvaluation() throws SQLException { assertEquals(26,rs.getInt(1)); conn2.close(); } - + + @Test + public void testUnfoundSingleColumnCaseStatement() throws Exception { + String query = "SELECT entity_id, b_string FROM ATABLE WHERE organization_id=? and CASE WHEN a_integer = 0 or a_integer != 0 THEN 1 ELSE 0 END = 0"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = new Properties(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + // Set ROW5.A_INTEGER to null so that we have one row + // where the else clause of the CASE statement will + // fire. + url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 1); // Run query at timestamp 5 + Connection upsertConn = DriverManager.getConnection(url, props); + String upsertStmt = + "upsert into " + + "ATABLE(" + + " ENTITY_ID, " + + " ORGANIZATION_ID, " + + " A_INTEGER) " + + "VALUES ('" + ROW5 + "','" + tenantId + "', null)"; + upsertConn.setAutoCommit(true); // Test auto commit + // Insert all rows at ts + PreparedStatement stmt = upsertConn.prepareStatement(upsertStmt); + stmt.execute(); // should commit too + upsertConn.close(); + + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals(ROW5, rs.getString(1)); + assertFalse(rs.next()); + conn.close(); + } } From 39373bca31e634c722f78afcb033004b8d27adf5 Mon Sep 17 00:00:00 2001 From: "Thomas S. Chen" Date: Thu, 4 Sep 2014 10:01:31 +0800 Subject: [PATCH 4/6] Code Conventions --- .../phoenix/end2end/EvaluationOfORIT.java | 343 +++++++++--------- 1 file changed, 173 insertions(+), 170 deletions(-) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java index f4d0b651308..e754b50b086 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java @@ -7,6 +7,7 @@ import java.sql.Connection; +import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -20,181 +21,183 @@ public class EvaluationOfORIT extends BaseClientManagedTimeIT{ private static final String tenantId = getOrganizationId(); private long ts; - + private Date date; + @Before - public void initTable() throws Exception { - ts = nextTimestamp(); - } + public void initTable() throws Exception { + ts = nextTimestamp(); + initATableValues(tenantId, getDefaultSplits(tenantId), date=new Date(System.currentTimeMillis()), ts); + } @Test public void testPKOrNotPKInOREvaluation() throws SQLException { - Connection conn = DriverManager.getConnection(getUrl()); - String create = "CREATE TABLE DIE ( ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(50) NOT NULL)"; - PreparedStatement createStmt = conn.prepareStatement(create); - createStmt.executeUpdate(); - conn.close(); - Connection conn1 = DriverManager.getConnection(getUrl()); - PreparedStatement stmt = conn1.prepareStatement( - "upsert into " + - "DIE VALUES (?, ?)"); - stmt.setInt(1, 1); - stmt.setString(2, "Tester1"); - stmt.execute(); - - stmt.setInt(1,2); - stmt.setString(2, "Tester2"); - stmt.execute(); - - stmt.setInt(1,3); - stmt.setString(2, "Tester3"); - stmt.execute(); - - stmt.setInt(1,4); - stmt.setString(2, "LikeTester1"); - stmt.execute(); - - stmt.setInt(1,5); - stmt.setString(2, "LikeTester2"); - stmt.execute(); - - stmt.setInt(1,6); - stmt.setString(2, "LikeTesterEnd"); - stmt.execute(); - - stmt.setInt(1,7); - stmt.setString(2, "LikeTesterEnd2"); - stmt.execute(); - - stmt.setInt(1,8); - stmt.setString(2, "Tester3"); - stmt.execute(); - - stmt.setInt(1,9); - stmt.setString(2, "Tester4"); - stmt.execute(); - - stmt.setInt(1,10); - stmt.setString(2, "Tester5"); - stmt.execute(); - - stmt.setInt(1,11); - stmt.setString(2, "Tester6"); - stmt.execute(); - - stmt.setInt(1,12); - stmt.setString(2, "tester6"); - stmt.execute(); - - stmt.setInt(1,13); - stmt.setString(2, "lester1"); - stmt.execute(); - - stmt.setInt(1,14); - stmt.setString(2, "le50ster1"); - stmt.execute(); - - stmt.setInt(1,15); - stmt.setString(2, "LE50ster1"); - stmt.execute(); - - stmt.setInt(1,16); - stmt.setString(2, "LiketesterEnd"); - stmt.execute(); - - stmt.setInt(1,17); - stmt.setString(2, "la50ster1"); - stmt.execute(); - - stmt.setInt(1,18); - stmt.setString(2, "lA50ster0"); - stmt.execute(); - - stmt.setInt(1,19); - stmt.setString(2, "lA50ster2"); - stmt.execute(); - - stmt.setInt(1,20); - stmt.setString(2, "la50ster0"); - stmt.execute(); - - stmt.setInt(1,21); - stmt.setString(2, "la50ster2"); - stmt.execute(); - - stmt.setInt(1,22); - stmt.setString(2, "La50ster3"); - stmt.execute(); - - stmt.setInt(1,23); - stmt.setString(2, "la50ster3"); - stmt.execute(); - - stmt.setInt(1,24); - stmt.setString(2, "l[50ster3"); - stmt.execute(); - - stmt.setInt(1,25); - stmt.setString(2, "Tester1"); - stmt.execute(); - - stmt.setInt(1,26); - stmt.setString(2, "Tester100"); - stmt.execute(); - - conn1.commit(); - conn1.close(); - - Connection conn2 = DriverManager.getConnection(getUrl()); - String select = "Select * from DIE where ID=6 or Name between 'Tester1' and 'Tester3'"; - ResultSet rs; - rs = conn2.createStatement().executeQuery(select); - assertTrue(rs.next()); - assertEquals(1,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(2,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(3,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(6,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(8,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(25,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(26,rs.getInt(1)); - conn2.close(); + Connection conn = DriverManager.getConnection(getUrl()); + String create = "CREATE TABLE DIE ( ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(50) NOT NULL)"; + PreparedStatement createStmt = conn.prepareStatement(create); + createStmt.executeUpdate(); + conn.close(); + Connection conn1 = DriverManager.getConnection(getUrl()); + PreparedStatement stmt = conn1.prepareStatement( + "upsert into " + + "DIE VALUES (?, ?)"); + stmt.setInt(1, 1); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,2); + stmt.setString(2, "Tester2"); + stmt.execute(); + + stmt.setInt(1,3); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,4); + stmt.setString(2, "LikeTester1"); + stmt.execute(); + + stmt.setInt(1,5); + stmt.setString(2, "LikeTester2"); + stmt.execute(); + + stmt.setInt(1,6); + stmt.setString(2, "LikeTesterEnd"); + stmt.execute(); + + stmt.setInt(1,7); + stmt.setString(2, "LikeTesterEnd2"); + stmt.execute(); + + stmt.setInt(1,8); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,9); + stmt.setString(2, "Tester4"); + stmt.execute(); + + stmt.setInt(1,10); + stmt.setString(2, "Tester5"); + stmt.execute(); + + stmt.setInt(1,11); + stmt.setString(2, "Tester6"); + stmt.execute(); + + stmt.setInt(1,12); + stmt.setString(2, "tester6"); + stmt.execute(); + + stmt.setInt(1,13); + stmt.setString(2, "lester1"); + stmt.execute(); + + stmt.setInt(1,14); + stmt.setString(2, "le50ster1"); + stmt.execute(); + + stmt.setInt(1,15); + stmt.setString(2, "LE50ster1"); + stmt.execute(); + + stmt.setInt(1,16); + stmt.setString(2, "LiketesterEnd"); + stmt.execute(); + + stmt.setInt(1,17); + stmt.setString(2, "la50ster1"); + stmt.execute(); + + stmt.setInt(1,18); + stmt.setString(2, "lA50ster0"); + stmt.execute(); + + stmt.setInt(1,19); + stmt.setString(2, "lA50ster2"); + stmt.execute(); + + stmt.setInt(1,20); + stmt.setString(2, "la50ster0"); + stmt.execute(); + + stmt.setInt(1,21); + stmt.setString(2, "la50ster2"); + stmt.execute(); + + stmt.setInt(1,22); + stmt.setString(2, "La50ster3"); + stmt.execute(); + + stmt.setInt(1,23); + stmt.setString(2, "la50ster3"); + stmt.execute(); + + stmt.setInt(1,24); + stmt.setString(2, "l[50ster3"); + stmt.execute(); + + stmt.setInt(1,25); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,26); + stmt.setString(2, "Tester100"); + stmt.execute(); + + conn1.commit(); + conn1.close(); + + Connection conn2 = DriverManager.getConnection(getUrl()); + String select = "Select * from DIE where ID=6 or Name between 'Tester1' and 'Tester3'"; + ResultSet rs; + rs = conn2.createStatement().executeQuery(select); + assertTrue(rs.next()); + assertEquals(1,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(2,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(3,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(6,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(8,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(25,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(26,rs.getInt(1)); + conn2.close(); } @Test - public void testUnfoundSingleColumnCaseStatement() throws Exception { - String query = "SELECT entity_id, b_string FROM ATABLE WHERE organization_id=? and CASE WHEN a_integer = 0 or a_integer != 0 THEN 1 ELSE 0 END = 0"; - String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 - Properties props = new Properties(TEST_PROPERTIES); - Connection conn = DriverManager.getConnection(url, props); - // Set ROW5.A_INTEGER to null so that we have one row - // where the else clause of the CASE statement will - // fire. - url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 1); // Run query at timestamp 5 - Connection upsertConn = DriverManager.getConnection(url, props); - String upsertStmt = - "upsert into " + - "ATABLE(" + - " ENTITY_ID, " + - " ORGANIZATION_ID, " + - " A_INTEGER) " + - "VALUES ('" + ROW5 + "','" + tenantId + "', null)"; - upsertConn.setAutoCommit(true); // Test auto commit - // Insert all rows at ts - PreparedStatement stmt = upsertConn.prepareStatement(upsertStmt); - stmt.execute(); // should commit too - upsertConn.close(); - - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals(ROW5, rs.getString(1)); - assertFalse(rs.next()); - conn.close(); - } + public void testUnfoundSingleColumnCaseStatement() throws Exception { + String query = "SELECT entity_id, b_string FROM ATABLE WHERE organization_id=? and CASE WHEN a_integer = 0 or a_integer != 0 THEN 1 ELSE 0 END = 0"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = new Properties(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + // Set ROW5.A_INTEGER to null so that we have one row + // where the else clause of the CASE statement will + // fire. + url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 1); // Run query at timestamp 5 + Connection upsertConn = DriverManager.getConnection(url, props); + String upsertStmt = + "upsert into " + + "ATABLE(" + + " ENTITY_ID, " + + " ORGANIZATION_ID, " + + " A_INTEGER) " + + "VALUES ('" + ROW5 + "','" + tenantId + "', null)"; + upsertConn.setAutoCommit(true); // Test auto commit + // Insert all rows at ts + PreparedStatement stmt = upsertConn.prepareStatement(upsertStmt); + stmt.execute(); // should commit too + upsertConn.close(); + + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals(ROW5, rs.getString(1)); + assertFalse(rs.next()); + conn.close(); + } } From 41784b88f271fb8c8e33687affa9a34015c36561 Mon Sep 17 00:00:00 2001 From: "Thomas S. Chen" Date: Thu, 4 Sep 2014 15:27:11 +0800 Subject: [PATCH 5/6] Modify and remove unused test --- .../phoenix/end2end/EvaluationOfORIT.java | 321 ++++++++---------- 1 file changed, 136 insertions(+), 185 deletions(-) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java index e754b50b086..f72561b027c 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java @@ -1,203 +1,154 @@ package org.apache.phoenix.end2end; - -import static org.apache.phoenix.util.TestUtil.ROW5; -import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; import static org.junit.Assert.*; import java.sql.Connection; -import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Properties; -import org.apache.phoenix.util.PhoenixRuntime; -import org.junit.Before; + import org.junit.Test; +import org.junit.experimental.categories.Category; -public class EvaluationOfORIT extends BaseClientManagedTimeIT{ - private static final String tenantId = getOrganizationId(); - private long ts; - private Date date; - - @Before - public void initTable() throws Exception { - ts = nextTimestamp(); - initATableValues(tenantId, getDefaultSplits(tenantId), date=new Date(System.currentTimeMillis()), ts); - } - +@Category({BaseHBaseManagedTimeIT.class }) +public class EvaluationOfORIT extends BaseHBaseManagedTimeIT{ + @Test public void testPKOrNotPKInOREvaluation() throws SQLException { - Connection conn = DriverManager.getConnection(getUrl()); - String create = "CREATE TABLE DIE ( ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(50) NOT NULL)"; - PreparedStatement createStmt = conn.prepareStatement(create); - createStmt.executeUpdate(); - conn.close(); - Connection conn1 = DriverManager.getConnection(getUrl()); - PreparedStatement stmt = conn1.prepareStatement( - "upsert into " + - "DIE VALUES (?, ?)"); - stmt.setInt(1, 1); - stmt.setString(2, "Tester1"); - stmt.execute(); - - stmt.setInt(1,2); - stmt.setString(2, "Tester2"); - stmt.execute(); - - stmt.setInt(1,3); - stmt.setString(2, "Tester3"); - stmt.execute(); - - stmt.setInt(1,4); - stmt.setString(2, "LikeTester1"); - stmt.execute(); - - stmt.setInt(1,5); - stmt.setString(2, "LikeTester2"); - stmt.execute(); - - stmt.setInt(1,6); - stmt.setString(2, "LikeTesterEnd"); - stmt.execute(); - - stmt.setInt(1,7); - stmt.setString(2, "LikeTesterEnd2"); - stmt.execute(); - - stmt.setInt(1,8); - stmt.setString(2, "Tester3"); - stmt.execute(); - - stmt.setInt(1,9); - stmt.setString(2, "Tester4"); - stmt.execute(); - - stmt.setInt(1,10); - stmt.setString(2, "Tester5"); - stmt.execute(); - - stmt.setInt(1,11); - stmt.setString(2, "Tester6"); - stmt.execute(); - - stmt.setInt(1,12); - stmt.setString(2, "tester6"); - stmt.execute(); - - stmt.setInt(1,13); - stmt.setString(2, "lester1"); - stmt.execute(); - - stmt.setInt(1,14); - stmt.setString(2, "le50ster1"); - stmt.execute(); - - stmt.setInt(1,15); - stmt.setString(2, "LE50ster1"); - stmt.execute(); - - stmt.setInt(1,16); - stmt.setString(2, "LiketesterEnd"); - stmt.execute(); - - stmt.setInt(1,17); - stmt.setString(2, "la50ster1"); - stmt.execute(); - - stmt.setInt(1,18); - stmt.setString(2, "lA50ster0"); - stmt.execute(); - - stmt.setInt(1,19); - stmt.setString(2, "lA50ster2"); - stmt.execute(); - - stmt.setInt(1,20); - stmt.setString(2, "la50ster0"); - stmt.execute(); - - stmt.setInt(1,21); - stmt.setString(2, "la50ster2"); - stmt.execute(); - - stmt.setInt(1,22); - stmt.setString(2, "La50ster3"); - stmt.execute(); - - stmt.setInt(1,23); - stmt.setString(2, "la50ster3"); - stmt.execute(); - - stmt.setInt(1,24); - stmt.setString(2, "l[50ster3"); - stmt.execute(); - - stmt.setInt(1,25); - stmt.setString(2, "Tester1"); - stmt.execute(); - - stmt.setInt(1,26); - stmt.setString(2, "Tester100"); - stmt.execute(); - - conn1.commit(); - conn1.close(); - - Connection conn2 = DriverManager.getConnection(getUrl()); - String select = "Select * from DIE where ID=6 or Name between 'Tester1' and 'Tester3'"; - ResultSet rs; - rs = conn2.createStatement().executeQuery(select); - assertTrue(rs.next()); - assertEquals(1,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(2,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(3,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(6,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(8,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(25,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(26,rs.getInt(1)); - conn2.close(); + Connection conn = DriverManager.getConnection(getUrl()); + String create = "CREATE TABLE DIE ( ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(50) NOT NULL)"; + PreparedStatement createStmt = conn.prepareStatement(create); + createStmt.executeUpdate(); + PreparedStatement stmt = conn.prepareStatement( + "upsert into " + + "DIE VALUES (?, ?)"); + stmt.setInt(1, 1); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,2); + stmt.setString(2, "Tester2"); + stmt.execute(); + + stmt.setInt(1,3); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,4); + stmt.setString(2, "LikeTester1"); + stmt.execute(); + + stmt.setInt(1,5); + stmt.setString(2, "LikeTester2"); + stmt.execute(); + + stmt.setInt(1,6); + stmt.setString(2, "LikeTesterEnd"); + stmt.execute(); + + stmt.setInt(1,7); + stmt.setString(2, "LikeTesterEnd2"); + stmt.execute(); + + stmt.setInt(1,8); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,9); + stmt.setString(2, "Tester4"); + stmt.execute(); + + stmt.setInt(1,10); + stmt.setString(2, "Tester5"); + stmt.execute(); + + stmt.setInt(1,11); + stmt.setString(2, "Tester6"); + stmt.execute(); + + stmt.setInt(1,12); + stmt.setString(2, "tester6"); + stmt.execute(); + + stmt.setInt(1,13); + stmt.setString(2, "lester1"); + stmt.execute(); + + stmt.setInt(1,14); + stmt.setString(2, "le50ster1"); + stmt.execute(); + + stmt.setInt(1,15); + stmt.setString(2, "LE50ster1"); + stmt.execute(); + + stmt.setInt(1,16); + stmt.setString(2, "LiketesterEnd"); + stmt.execute(); + + stmt.setInt(1,17); + stmt.setString(2, "la50ster1"); + stmt.execute(); + + stmt.setInt(1,18); + stmt.setString(2, "lA50ster0"); + stmt.execute(); + + stmt.setInt(1,19); + stmt.setString(2, "lA50ster2"); + stmt.execute(); + + stmt.setInt(1,20); + stmt.setString(2, "la50ster0"); + stmt.execute(); + + stmt.setInt(1,21); + stmt.setString(2, "la50ster2"); + stmt.execute(); + + stmt.setInt(1,22); + stmt.setString(2, "La50ster3"); + stmt.execute(); + + stmt.setInt(1,23); + stmt.setString(2, "la50ster3"); + stmt.execute(); + + stmt.setInt(1,24); + stmt.setString(2, "l[50ster3"); + stmt.execute(); + + stmt.setInt(1,25); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,26); + stmt.setString(2, "Tester100"); + stmt.execute(); + conn.commit(); + + String select = "Select * from DIE where ID=6 or Name between 'Tester1' and 'Tester3'"; + ResultSet rs; + rs = conn.createStatement().executeQuery(select); + assertTrue(rs.next()); + assertEquals(1,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(2,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(3,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(6,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(8,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(25,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(26,rs.getInt(1)); + conn.close(); } - @Test - public void testUnfoundSingleColumnCaseStatement() throws Exception { - String query = "SELECT entity_id, b_string FROM ATABLE WHERE organization_id=? and CASE WHEN a_integer = 0 or a_integer != 0 THEN 1 ELSE 0 END = 0"; - String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 - Properties props = new Properties(TEST_PROPERTIES); - Connection conn = DriverManager.getConnection(url, props); - // Set ROW5.A_INTEGER to null so that we have one row - // where the else clause of the CASE statement will - // fire. - url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 1); // Run query at timestamp 5 - Connection upsertConn = DriverManager.getConnection(url, props); - String upsertStmt = - "upsert into " + - "ATABLE(" + - " ENTITY_ID, " + - " ORGANIZATION_ID, " + - " A_INTEGER) " + - "VALUES ('" + ROW5 + "','" + tenantId + "', null)"; - upsertConn.setAutoCommit(true); // Test auto commit - // Insert all rows at ts - PreparedStatement stmt = upsertConn.prepareStatement(upsertStmt); - stmt.execute(); // should commit too - upsertConn.close(); - - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals(ROW5, rs.getString(1)); - assertFalse(rs.next()); - conn.close(); - } + } From 36e578ccdf738a816610e8e7e9d9bf2eb1412411 Mon Sep 17 00:00:00 2001 From: "Thomas S. Chen" Date: Thu, 4 Sep 2014 15:39:04 +0800 Subject: [PATCH 6/6] Modify code for BaseHBaseManagedTimeIT --- .../phoenix/end2end/EvaluationOfORIT.java | 269 +++++++++--------- 1 file changed, 137 insertions(+), 132 deletions(-) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java index f72561b027c..13eaf001461 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/EvaluationOfORIT.java @@ -1,153 +1,158 @@ package org.apache.phoenix.end2end; import static org.junit.Assert.*; - +import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Properties; import org.junit.Test; import org.junit.experimental.categories.Category; -@Category({BaseHBaseManagedTimeIT.class }) +@Category(BaseHBaseManagedTimeIT.class) public class EvaluationOfORIT extends BaseHBaseManagedTimeIT{ @Test public void testPKOrNotPKInOREvaluation() throws SQLException { - Connection conn = DriverManager.getConnection(getUrl()); - String create = "CREATE TABLE DIE ( ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(50) NOT NULL)"; - PreparedStatement createStmt = conn.prepareStatement(create); - createStmt.executeUpdate(); - PreparedStatement stmt = conn.prepareStatement( - "upsert into " + - "DIE VALUES (?, ?)"); - stmt.setInt(1, 1); - stmt.setString(2, "Tester1"); - stmt.execute(); - - stmt.setInt(1,2); - stmt.setString(2, "Tester2"); - stmt.execute(); - - stmt.setInt(1,3); - stmt.setString(2, "Tester3"); - stmt.execute(); - - stmt.setInt(1,4); - stmt.setString(2, "LikeTester1"); - stmt.execute(); - - stmt.setInt(1,5); - stmt.setString(2, "LikeTester2"); - stmt.execute(); - - stmt.setInt(1,6); - stmt.setString(2, "LikeTesterEnd"); - stmt.execute(); - - stmt.setInt(1,7); - stmt.setString(2, "LikeTesterEnd2"); - stmt.execute(); - - stmt.setInt(1,8); - stmt.setString(2, "Tester3"); - stmt.execute(); - - stmt.setInt(1,9); - stmt.setString(2, "Tester4"); - stmt.execute(); - - stmt.setInt(1,10); - stmt.setString(2, "Tester5"); - stmt.execute(); - - stmt.setInt(1,11); - stmt.setString(2, "Tester6"); - stmt.execute(); - - stmt.setInt(1,12); - stmt.setString(2, "tester6"); - stmt.execute(); - - stmt.setInt(1,13); - stmt.setString(2, "lester1"); - stmt.execute(); - - stmt.setInt(1,14); - stmt.setString(2, "le50ster1"); - stmt.execute(); - - stmt.setInt(1,15); - stmt.setString(2, "LE50ster1"); - stmt.execute(); - - stmt.setInt(1,16); - stmt.setString(2, "LiketesterEnd"); - stmt.execute(); - - stmt.setInt(1,17); - stmt.setString(2, "la50ster1"); - stmt.execute(); - - stmt.setInt(1,18); - stmt.setString(2, "lA50ster0"); - stmt.execute(); - - stmt.setInt(1,19); - stmt.setString(2, "lA50ster2"); - stmt.execute(); - - stmt.setInt(1,20); - stmt.setString(2, "la50ster0"); - stmt.execute(); - - stmt.setInt(1,21); - stmt.setString(2, "la50ster2"); - stmt.execute(); - - stmt.setInt(1,22); - stmt.setString(2, "La50ster3"); - stmt.execute(); - - stmt.setInt(1,23); - stmt.setString(2, "la50ster3"); - stmt.execute(); - - stmt.setInt(1,24); - stmt.setString(2, "l[50ster3"); - stmt.execute(); - - stmt.setInt(1,25); - stmt.setString(2, "Tester1"); - stmt.execute(); - - stmt.setInt(1,26); - stmt.setString(2, "Tester100"); - stmt.execute(); - conn.commit(); - - String select = "Select * from DIE where ID=6 or Name between 'Tester1' and 'Tester3'"; - ResultSet rs; - rs = conn.createStatement().executeQuery(select); - assertTrue(rs.next()); - assertEquals(1,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(2,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(3,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(6,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(8,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(25,rs.getInt(1)); - assertTrue(rs.next()); - assertEquals(26,rs.getInt(1)); - conn.close(); + Properties props = new Properties(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + conn.setAutoCommit(false); + + String create = "CREATE TABLE DIE ( ID INTEGER NOT NULL PRIMARY KEY,NAME VARCHAR(50) NOT NULL)"; + PreparedStatement createStmt = conn.prepareStatement(create); + createStmt.executeUpdate(); + PreparedStatement stmt = conn.prepareStatement( + "upsert into " + + "DIE VALUES (?, ?)"); + + stmt.setInt(1, 1); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,2); + stmt.setString(2, "Tester2"); + stmt.execute(); + + stmt.setInt(1,3); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,4); + stmt.setString(2, "LikeTester1"); + stmt.execute(); + + stmt.setInt(1,5); + stmt.setString(2, "LikeTester2"); + stmt.execute(); + + stmt.setInt(1,6); + stmt.setString(2, "LikeTesterEnd"); + stmt.execute(); + + stmt.setInt(1,7); + stmt.setString(2, "LikeTesterEnd2"); + stmt.execute(); + + stmt.setInt(1,8); + stmt.setString(2, "Tester3"); + stmt.execute(); + + stmt.setInt(1,9); + stmt.setString(2, "Tester4"); + stmt.execute(); + + stmt.setInt(1,10); + stmt.setString(2, "Tester5"); + stmt.execute(); + + stmt.setInt(1,11); + stmt.setString(2, "Tester6"); + stmt.execute(); + + stmt.setInt(1,12); + stmt.setString(2, "tester6"); + stmt.execute(); + + stmt.setInt(1,13); + stmt.setString(2, "lester1"); + stmt.execute(); + + stmt.setInt(1,14); + stmt.setString(2, "le50ster1"); + stmt.execute(); + + stmt.setInt(1,15); + stmt.setString(2, "LE50ster1"); + stmt.execute(); + + stmt.setInt(1,16); + stmt.setString(2, "LiketesterEnd"); + stmt.execute(); + + stmt.setInt(1,17); + stmt.setString(2, "la50ster1"); + stmt.execute(); + + stmt.setInt(1,18); + stmt.setString(2, "lA50ster0"); + stmt.execute(); + + stmt.setInt(1,19); + stmt.setString(2, "lA50ster2"); + stmt.execute(); + + stmt.setInt(1,20); + stmt.setString(2, "la50ster0"); + stmt.execute(); + + stmt.setInt(1,21); + stmt.setString(2, "la50ster2"); + stmt.execute(); + + stmt.setInt(1,22); + stmt.setString(2, "La50ster3"); + stmt.execute(); + + stmt.setInt(1,23); + stmt.setString(2, "la50ster3"); + stmt.execute(); + + stmt.setInt(1,24); + stmt.setString(2, "l[50ster3"); + stmt.execute(); + + stmt.setInt(1,25); + stmt.setString(2, "Tester1"); + stmt.execute(); + + stmt.setInt(1,26); + stmt.setString(2, "Tester100"); + stmt.execute(); + conn.commit(); + + String select = "Select * from DIE where ID=6 or Name between 'Tester1' and 'Tester3'"; + ResultSet rs; + rs = conn.createStatement().executeQuery(select); + assertTrue(rs.next()); + assertEquals(1,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(2,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(3,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(6,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(8,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(25,rs.getInt(1)); + assertTrue(rs.next()); + assertEquals(26,rs.getInt(1)); + conn.close(); }