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 2017/09/21 18:04:47 UTC

[1/5] phoenix git commit: PHOENIX-4189 Introduce a class that wraps the Map of primary key data (addendum)

Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-0.98 952260d52 -> f79891515


PHOENIX-4189 Introduce a class that wraps the Map of primary key data (addendum)


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

Branch: refs/heads/4.x-HBase-0.98
Commit: ed81dce1f0c72b6b8ddc1574b8a05448e0b8b44d
Parents: 952260d
Author: James Taylor <jt...@salesforce.com>
Authored: Mon Sep 18 16:30:19 2017 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Thu Sep 21 10:56:22 2017 -0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/phoenix/hive/PrimaryKeyData.java      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/ed81dce1/phoenix-hive/src/main/java/org/apache/phoenix/hive/PrimaryKeyData.java
----------------------------------------------------------------------
diff --git a/phoenix-hive/src/main/java/org/apache/phoenix/hive/PrimaryKeyData.java b/phoenix-hive/src/main/java/org/apache/phoenix/hive/PrimaryKeyData.java
index b5e9dd9..7773997 100644
--- a/phoenix-hive/src/main/java/org/apache/phoenix/hive/PrimaryKeyData.java
+++ b/phoenix-hive/src/main/java/org/apache/phoenix/hive/PrimaryKeyData.java
@@ -77,7 +77,7 @@ public class PrimaryKeyData implements Serializable{
     }
 
     public static PrimaryKeyData deserialize(InputStream input) throws IOException, ClassNotFoundException {
-        try (LookAheadObjectInputStream ois = new LookAheadObjectInputStream((InputStream) input)) {
+        try (LookAheadObjectInputStream ois = new LookAheadObjectInputStream(input)) {
             Object obj = ois.readObject();
             if (obj instanceof PrimaryKeyData) {
                 return (PrimaryKeyData) obj;


[5/5] phoenix git commit: PHOENIX-4221 Disallow DML operations on connections with CURRENT_SCN set - VariableLengthPKIT (Ethan Wang)

Posted by ja...@apache.org.
PHOENIX-4221 Disallow DML operations on connections with CURRENT_SCN set - VariableLengthPKIT (Ethan Wang)


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

Branch: refs/heads/4.x-HBase-0.98
Commit: f798915151ba3f8fe6bfc49e6119d8fc5e8bd9e5
Parents: 2da53a6
Author: James Taylor <jt...@salesforce.com>
Authored: Thu Sep 21 10:44:02 2017 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Thu Sep 21 11:04:02 2017 -0700

----------------------------------------------------------------------
 .../phoenix/end2end/VariableLengthPKIT.java     | 1171 +++++++++---------
 1 file changed, 570 insertions(+), 601 deletions(-)
----------------------------------------------------------------------



[2/5] phoenix git commit: PHOENIX-4212 Disallow DML operations on connections with CURRENT_SCN set - DerivedTableIT (Ethan Wang)

Posted by ja...@apache.org.
PHOENIX-4212 Disallow DML operations on connections with CURRENT_SCN set - DerivedTableIT (Ethan Wang)


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

Branch: refs/heads/4.x-HBase-0.98
Commit: c984951d69d45f8578895acc43e42cfd53ae6045
Parents: ed81dce
Author: James Taylor <jt...@salesforce.com>
Authored: Mon Sep 18 17:16:55 2017 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Thu Sep 21 11:03:20 2017 -0700

----------------------------------------------------------------------
 .../apache/phoenix/end2end/DerivedTableIT.java  | 955 ++-----------------
 1 file changed, 87 insertions(+), 868 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/c984951d/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
index 3bbd347..fd769bc 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
@@ -41,63 +41,112 @@ import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.util.Collection;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.phoenix.util.PropertiesUtil;
 import org.apache.phoenix.util.QueryUtil;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestName;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
+import com.google.common.collect.Lists;
+
+
+@RunWith(Parameterized.class)
 public class DerivedTableIT extends ParallelStatsDisabledIT {
-    private static String[] initTableWithIndex(String tableName) throws Exception {
-        String tenantId = getOrganizationId();
+    private static final String tenantId = getOrganizationId();
+    private static final String dynamicTableName = "_TABLENAME_REPLACEABLE_";
+    @Rule public TestName name = new TestName();
+
+    private String[] indexDDL;
+    private String[] plans;
+    private String tableName;
+
+
+    public DerivedTableIT(String[] indexDDL, String[] plans) {
+        this.indexDDL = indexDDL;
+        this.plans = plans;
+    }
+
+    @Before
+    public void initTable() throws Exception {
+        if(tableName!=null) throw new RuntimeException("Test has not been cleaned up.");
+        tableName = generateUniqueName();
+
         initATableValues(tableName, tenantId, getDefaultSplits(tenantId), null, null, getUrl(), null);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        String ddl="CREATE INDEX "+tableName+"_DERIVED_IDX ON "+tableName+" (a_byte) INCLUDE (A_STRING, B_STRING)";
-        conn.createStatement().execute(ddl);
-        String[] plans= {"CLIENT PARALLEL 1-WAY FULL SCAN OVER "+tableName+"_DERIVED_IDX\n" +
-                "    SERVER AGGREGATE INTO DISTINCT ROWS BY [\"A_STRING\", \"B_STRING\"]\n" +
-                "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [\"B_STRING\"]\n" +
-                "CLIENT SORTED BY [A]\n" +
-                "CLIENT AGGREGATE INTO DISTINCT ROWS BY [A]\n" +
-                "CLIENT SORTED BY [A DESC]",
-
-                "CLIENT PARALLEL 1-WAY FULL SCAN OVER "+tableName+"_DERIVED_IDX\n" +
+        if (indexDDL != null && indexDDL.length > 0) {
+            Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+            Connection conn = DriverManager.getConnection(getUrl(), props);
+            for (String ddl : indexDDL) {
+                ddl=ddl.replace(dynamicTableName,tableName);
+                conn.createStatement().execute(ddl);
+            }
+        }
+        String[] newplan=new String[plans.length];
+        if(plans !=null && plans.length>0){
+            for(int i=0;i< plans.length;i++){
+                newplan[i]=plans[i].replace(dynamicTableName,tableName);
+            }
+            plans = newplan;
+        }
+    }
+
+    @After
+    public void cleanUp(){
+        tableName=null;
+    }
+
+    @Parameters(name="DerivedTableIT_{index}") // name is used by failsafe as file name in reports
+    public static Collection<Object> data() {
+        List<Object> testCases = Lists.newArrayList();
+        testCases.add(new String[][] {
+                {
+                        "CREATE INDEX "+dynamicTableName+"_DERIVED_IDX ON "+dynamicTableName+" (a_byte) INCLUDE (A_STRING, B_STRING)"
+                }, {
+                "CLIENT PARALLEL 1-WAY FULL SCAN OVER "+dynamicTableName+"_DERIVED_IDX\n" +
+                        "    SERVER AGGREGATE INTO DISTINCT ROWS BY [\"A_STRING\", \"B_STRING\"]\n" +
+                        "CLIENT MERGE SORT\n" +
+                        "CLIENT SORTED BY [\"B_STRING\"]\n" +
+                        "CLIENT SORTED BY [A]\n" +
+                        "CLIENT AGGREGATE INTO DISTINCT ROWS BY [A]\n" +
+                        "CLIENT SORTED BY [A DESC]",
+
+                "CLIENT PARALLEL 1-WAY FULL SCAN OVER "+dynamicTableName+"_DERIVED_IDX\n" +
                         "    SERVER AGGREGATE INTO DISTINCT ROWS BY [\"A_STRING\", \"B_STRING\"]\n" +
                         "CLIENT MERGE SORT\n" +
                         "CLIENT SORTED BY [A]\n" +
                         "CLIENT AGGREGATE INTO DISTINCT ROWS BY [A]\n" +
                         "CLIENT DISTINCT ON [COLLECTDISTINCT(B)]\n" +
-                        "CLIENT SORTED BY [A DESC]"};
-        return plans;
-    }
+                        "CLIENT SORTED BY [A DESC]"}});
+        testCases.add(new String[][] {
+                {}, {
+                "CLIENT PARALLEL 4-WAY FULL SCAN OVER "+dynamicTableName+"\n" +
+                        "    SERVER AGGREGATE INTO DISTINCT ROWS BY [A_STRING, B_STRING]\n" +
+                        "CLIENT MERGE SORT\n" +
+                        "CLIENT SORTED BY [B_STRING]\n" +
+                        "CLIENT SORTED BY [A]\n" +
+                        "CLIENT AGGREGATE INTO DISTINCT ROWS BY [A]\n" +
+                        "CLIENT SORTED BY [A DESC]",
 
-    private static String[] initTableWithoutIndex(String tableName) throws Exception {
-        String tenantId = getOrganizationId();
-        initATableValues(tableName, tenantId, getDefaultSplits(tenantId), null, null, getUrl(), null);
-        String[] plans= {"CLIENT PARALLEL 4-WAY FULL SCAN OVER "+tableName+"\n" +
-                "    SERVER AGGREGATE INTO DISTINCT ROWS BY [A_STRING, B_STRING]\n" +
-                "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [B_STRING]\n" +
-                "CLIENT SORTED BY [A]\n" +
-                "CLIENT AGGREGATE INTO DISTINCT ROWS BY [A]\n" +
-                "CLIENT SORTED BY [A DESC]",
-
-                "CLIENT PARALLEL 4-WAY FULL SCAN OVER "+tableName+"\n" +
+                "CLIENT PARALLEL 4-WAY FULL SCAN OVER "+dynamicTableName+"\n" +
                         "    SERVER AGGREGATE INTO DISTINCT ROWS BY [A_STRING, B_STRING]\n" +
                         "CLIENT MERGE SORT\n" +
                         "CLIENT SORTED BY [A]\n" +
                         "CLIENT AGGREGATE INTO DISTINCT ROWS BY [A]\n" +
                         "CLIENT DISTINCT ON [COLLECTDISTINCT(B)]\n" +
-                        "CLIENT SORTED BY [A DESC]"};
-        return plans;
+                        "CLIENT SORTED BY [A DESC]"}});
+        return testCases;
     }
 
     @Test
     public void testDerivedTableWithWhere() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -259,8 +308,6 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testDerivedTableWithGroupBy() throws Exception {
-        String tableName=generateUniqueName();
-        String[] plans=initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -355,7 +402,7 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
             assertEquals(plans[1], QueryUtil.getExplainPlan(rs));
 
             // (orderby) groupby
-            // FIXME: subtle difference between master: referencing t.a_string causes a ColumnFamilyNotFoundException
+            // FIXME: If a_string is qualified with t, this query fails for HBase 0.98. We must be missing a commit somewhere.
             query = "SELECT a_string, count(*) FROM (SELECT * FROM "+tableName+" order by a_integer) AS t where a_byte != 8 group by a_string";
             statement = conn.prepareStatement(query);
             rs = statement.executeQuery();
@@ -388,8 +435,6 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testDerivedTableWithOrderBy() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -485,8 +530,6 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testDerivedTableWithLimit() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -579,8 +622,6 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testDerivedTableWithOffset() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -670,8 +711,6 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testDerivedTableWithDistinct() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -773,8 +812,6 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testDerivedTableWithAggregate() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -847,8 +884,6 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testDerivedTableWithJoin() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
@@ -897,829 +932,13 @@ public class DerivedTableIT extends ParallelStatsDisabledIT {
 
     @Test
     public void testNestedDerivedTable() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
-            // select(select(select))
-            String query = "SELECT q.id, q.x10 * 10 FROM (SELECT t.eid id, t.x + 9 x10, t.astr a, t.bstr b FROM (SELECT entity_id eid, a_string astr, b_string bstr, a_byte + 1 x FROM "+tableName+" WHERE a_byte + 1 < ?) AS t ORDER BY b, id) AS q WHERE q.a = ? OR q.b = ? OR q.b = ?";
-            PreparedStatement statement = conn.prepareStatement(query);
-            statement.setInt(1, 9);
-            statement.setString(2, A_VALUE);
-            statement.setString(3, C_VALUE);
-            statement.setString(4, E_VALUE);
-            ResultSet rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertEquals(110,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW4,rs.getString(1));
-            assertEquals(140,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertEquals(120,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertEquals(150,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW3,rs.getString(1));
-            assertEquals(130,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW6,rs.getString(1));
-            assertEquals(160,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // select(select(select) join (select(select)))
-            query = "SELECT q1.id, q2.id FROM (SELECT t.eid id, t.astr a, t.bstr b FROM (SELECT entity_id eid, a_string astr, b_string bstr, a_byte abyte FROM "+tableName+") AS t WHERE t.abyte >= ?) AS q1"
-                    + " JOIN (SELECT t.eid id, t.astr a, t.bstr b, t.abyte x FROM (SELECT entity_id eid, a_string astr, b_string bstr, a_byte abyte FROM "+tableName+") AS t) AS q2 ON q1.a = q2.b"
-                    + " WHERE q2.x != ? ORDER BY q1.id, q2.id DESC";
-            statement = conn.prepareStatement(query);
-            statement.setInt(1, 8);
-            statement.setInt(2, 5);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-            assertEquals(ROW7,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-            assertEquals(ROW4,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-            assertEquals(ROW1,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(ROW9,rs.getString(1));
-            assertEquals(ROW8,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(ROW9,rs.getString(1));
-            assertEquals(ROW2,rs.getString(2));
-
-            assertFalse(rs.next());
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testDerivedTableWithWhereWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithoutIndex(tableName);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
         try {
-            // (where)
-            String query = "SELECT t.eid, t.x + 9 FROM (SELECT entity_id eid, b_string b, a_byte + 1 x FROM "+tableName+" WHERE a_byte + 1 < 9) AS t";
-            PreparedStatement statement = conn.prepareStatement(query);
-            ResultSet rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertEquals(11,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertEquals(12,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW3,rs.getString(1));
-            assertEquals(13,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW4,rs.getString(1));
-            assertEquals(14,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertEquals(15,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW6,rs.getString(1));
-            assertEquals(16,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW7,rs.getString(1));
-            assertEquals(17,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // () where
-            query = "SELECT t.eid, t.x + 9 FROM (SELECT entity_id eid, b_string b, a_byte + 1 x FROM "+tableName+") AS t WHERE t.b = '" + C_VALUE + "'";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertEquals(12,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertEquals(15,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-            assertEquals(18,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // (where) where
-            query = "SELECT t.eid, t.x + 9 FROM (SELECT entity_id eid, b_string b, a_byte + 1 x FROM "+tableName+" WHERE a_byte + 1 < 9) AS t WHERE t.b = '" + C_VALUE + "'";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertEquals(12,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertEquals(15,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // (groupby where) where
-            query = "SELECT t.a, t.c, t.m FROM (SELECT a_string a, count(*) c, max(a_byte) m FROM "+tableName+" WHERE a_byte != 8 GROUP BY a_string) AS t WHERE t.c > 1";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(4,rs.getInt(2));
-            assertEquals(4,rs.getInt(3));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(3,rs.getInt(2));
-            assertEquals(7,rs.getInt(3));
-
-            assertFalse(rs.next());
-
-            // (groupby having where) where
-            query = "SELECT t.a, t.c, t.m FROM (SELECT a_string a, count(*) c, max(a_byte) m FROM "+tableName+" WHERE a_byte != 8 GROUP BY a_string HAVING count(*) >= 2) AS t WHERE t.a != '" + A_VALUE + "'";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(3,rs.getInt(2));
-            assertEquals(7,rs.getInt(3));
-
-            assertFalse(rs.next());
-
-            // (limit) where
-            query = "SELECT t.eid FROM (SELECT entity_id eid, b_string b FROM "+tableName+" LIMIT 2) AS t WHERE t.b = '" + C_VALUE + "'";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // ((where limit) where limit) limit
-            query = "SELECT u.eid FROM (SELECT t.eid FROM (SELECT entity_id eid, b_string b FROM "+tableName+" WHERE a_string = '" + B_VALUE + "' LIMIT 5) AS t WHERE t.b = '" + C_VALUE + "' LIMIT 4) AS u WHERE u.eid >= '" + ROW1 + "' LIMIT 3";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-
-            assertFalse(rs.next());
+            //testNestedDerivedTable require index with same name be created
+            String ddl = "CREATE INDEX IF NOT EXISTS "+tableName+"_DERIVED_IDX ON "+tableName+" (a_byte) INCLUDE (A_STRING, B_STRING)";
+            conn.createStatement().execute(ddl);
 
-            // (count) where
-            query = "SELECT t.c FROM (SELECT count(*) c FROM "+tableName+") AS t WHERE t.c > 0";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(9,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // Inner limit < outer query offset
-            query = "SELECT t.eid, t.x + 9 FROM (SELECT entity_id eid, b_string b, a_byte + 1 x FROM "+tableName+" LIMIT 1 OFFSET 1 ) AS t WHERE t.b = '"
-                    + C_VALUE + "' OFFSET 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertFalse(rs.next());
-
-            // (where) offset
-            query = "SELECT t.eid, t.x + 9 FROM (SELECT entity_id eid, b_string b, a_byte + 1 x FROM "+tableName+" WHERE a_byte + 1 < 9 ) AS t OFFSET 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(ROW3, rs.getString(1));
-            assertEquals(13, rs.getInt(2));
-            assertTrue(rs.next());
-            assertEquals(ROW4, rs.getString(1));
-            assertEquals(14, rs.getInt(2));
-            assertTrue(rs.next());
-            assertEquals(ROW5, rs.getString(1));
-            assertEquals(15, rs.getInt(2));
-            assertTrue(rs.next());
-            assertEquals(ROW6, rs.getString(1));
-            assertEquals(16, rs.getInt(2));
-            assertTrue(rs.next());
-            assertEquals(ROW7, rs.getString(1));
-            assertEquals(17, rs.getInt(2));
-
-            // (offset) where
-            query = "SELECT t.eid, t.x + 9 FROM (SELECT entity_id eid, b_string b, a_byte + 1 x FROM "+tableName+" OFFSET 4) AS t WHERE t.b = '"
-                    + C_VALUE + "'";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(ROW5, rs.getString(1));
-            assertEquals(15, rs.getInt(2));
-            assertTrue(rs.next());
-            assertEquals(ROW8, rs.getString(1));
-            assertEquals(18, rs.getInt(2));
-
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testDerivedTableWithGroupByWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        String[] plans=initTableWithoutIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
-            // () groupby having
-            String query = "SELECT t.a, count(*), max(t.s) FROM (SELECT a_string a, a_byte s FROM "+tableName+" WHERE a_byte != 8) AS t GROUP BY t.a HAVING count(*) > 1";
-            PreparedStatement statement = conn.prepareStatement(query);
-            ResultSet rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(4,rs.getInt(2));
-            assertEquals(4,rs.getInt(3));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(3,rs.getInt(2));
-            assertEquals(7,rs.getInt(3));
-
-            assertFalse(rs.next());
-
-            // (groupby) groupby
-            query = "SELECT t.c, count(*) FROM (SELECT count(*) c FROM "+tableName+" GROUP BY a_string) AS t GROUP BY t.c";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(1,rs.getInt(1));
-            assertEquals(1,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(4,rs.getInt(1));
-            assertEquals(2,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // (groupby) groupby orderby
-            query = "SELECT t.c, count(*) FROM (SELECT count(*) c FROM "+tableName+" GROUP BY a_string) AS t GROUP BY t.c ORDER BY count(*) DESC";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(4,rs.getInt(1));
-            assertEquals(2,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(1,rs.getInt(1));
-            assertEquals(1,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // (groupby a, b orderby b) groupby a orderby a
-            query = "SELECT t.a, COLLECTDISTINCT(t.b) FROM (SELECT b_string b, a_string a FROM "+tableName+" GROUP BY a_string, b_string ORDER BY b_string) AS t GROUP BY t.a ORDER BY t.a DESC";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-            String[] b = new String[1];
-            b[0] = E_VALUE;
-            Array array = conn.createArrayOf("VARCHAR", b);
-            assertEquals(array,rs.getArray(2));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            b = new String[3];
-            b[0] = B_VALUE;
-            b[1] = C_VALUE;
-            b[2] = E_VALUE;
-            array = conn.createArrayOf("VARCHAR", b);
-            assertEquals(array,rs.getArray(2));
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(array,rs.getArray(2));
-
-            assertFalse(rs.next());
-
-            rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-            assertEquals(plans[0], QueryUtil.getExplainPlan(rs));
-
-            // distinct b (groupby a, b) groupby a orderby a
-            query = "SELECT DISTINCT COLLECTDISTINCT(t.b) FROM (SELECT b_string b, a_string a FROM "+tableName+" GROUP BY a_string, b_string) AS t GROUP BY t.a ORDER BY t.a DESC";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            b = new String[1];
-            b[0] = E_VALUE;
-            array = conn.createArrayOf("VARCHAR", b);
-            assertEquals(array,rs.getArray(1));
-            assertTrue (rs.next());
-            b = new String[3];
-            b[0] = B_VALUE;
-            b[1] = C_VALUE;
-            b[2] = E_VALUE;
-            array = conn.createArrayOf("VARCHAR", b);
-            assertEquals(array,rs.getArray(1));
-
-            assertFalse(rs.next());
-
-            rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-            assertEquals(plans[1], QueryUtil.getExplainPlan(rs));
-
-            // (orderby) groupby
-            // FIXME: subtle difference between master: referencing t.a_string causes a ColumnFamilyNotFoundException
-            query = "SELECT a_string, count(*) FROM (SELECT * FROM "+tableName+" order by a_integer) AS t where a_byte != 8 group by a_string";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(4,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(3,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-            assertEquals(1,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // (groupby) groupby orderby offset
-            query = "SELECT t.c, count(*) FROM (SELECT count(*) c FROM "+tableName+" GROUP BY a_string) AS t GROUP BY t.c ORDER BY count(*) DESC OFFSET 1";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(1, rs.getInt(1));
-            assertEquals(1, rs.getInt(2));
-
-            assertFalse(rs.next());
-
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testDerivedTableWithOrderByWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithoutIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
-            // (orderby)
-            String query = "SELECT t.eid FROM (SELECT entity_id eid, b_string b FROM "+tableName+" ORDER BY b, eid) AS t";
-            PreparedStatement statement = conn.prepareStatement(query);
-            ResultSet rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW4,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW7,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW3,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW6,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW9,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // () orderby
-            query = "SELECT t.eid FROM (SELECT entity_id eid, b_string b FROM "+tableName+") AS t ORDER BY t.b, t.eid";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW4,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW7,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW3,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW6,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW9,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (orderby) orderby
-            query = "SELECT t.eid FROM (SELECT entity_id eid, b_string b FROM "+tableName+" ORDER BY b, eid) AS t ORDER BY t.b DESC, t.eid DESC";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW9,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW6,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW3,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW8,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW5,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW7,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW4,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (limit) orderby
-            query = "SELECT t.eid FROM (SELECT entity_id eid, b_string b FROM "+tableName+" LIMIT 2) AS t ORDER BY t.b DESC, t.eid";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-
-            assertFalse(rs.next());
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testDerivedTableWithLimitWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithoutIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
-            // (limit)
-            String query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT 2) AS t";
-            PreparedStatement statement = conn.prepareStatement(query);
-            ResultSet rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // () limit
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+") AS t LIMIT 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (limit 2) limit 4
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT 2) AS t LIMIT 4";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (limit 4) limit 2
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT 4) AS t LIMIT 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // limit ? limit ?
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT ?) AS t LIMIT ?";
-            statement = conn.prepareStatement(query);
-            statement.setInt(1, 4);
-            statement.setInt(2, 2);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(ROW1,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(ROW2,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (groupby orderby) limit
-            query = "SELECT a, s FROM (SELECT a_string a, sum(a_byte) s FROM "+tableName+" GROUP BY a_string ORDER BY sum(a_byte)) LIMIT 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-            assertEquals(9,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(10,rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // (union) groupby limit
-            query = "SELECT a_string, count(*) FROM (SELECT a_string FROM "+tableName+" where a_byte < 4 union all SELECT a_string FROM "+tableName+" where a_byte > 8) group by a_string limit 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(3,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-            assertEquals(1,rs.getInt(2));
-
-            assertFalse(rs.next());
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testDerivedTableWithOffsetWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithoutIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
-            // (LIMIT OFFSET )
-            String query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT 2 OFFSET 1) AS t";
-            PreparedStatement statement = conn.prepareStatement(query);
-            ResultSet rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(ROW2, rs.getString(1));
-            assertTrue(rs.next());
-            assertEquals(ROW3, rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (OFFSET) limit
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" OFFSET 1) AS t LIMIT 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(ROW2, rs.getString(1));
-            assertTrue(rs.next());
-            assertEquals(ROW3, rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (limit OFFSET) limit OFFSET
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT 2 OFFSET 1) AS t LIMIT 4 OFFSET 1";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(ROW3, rs.getString(1));
-            assertFalse(rs.next());
-
-            // (limit OFFSET) limit 2
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT 4 OFFSET 1) AS t LIMIT 2";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(ROW2, rs.getString(1));
-            assertTrue(rs.next());
-            assertEquals(ROW3, rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // (limit ? OFFSET ?) limit ? OFFSET ?
-            query = "SELECT t.eid FROM (SELECT entity_id eid FROM "+tableName+" LIMIT ? OFFSET ?) AS t LIMIT ? OFFSET ?";
-            statement = conn.prepareStatement(query);
-            statement.setInt(1, 4);
-            statement.setInt(2, 2);
-            statement.setInt(3, 2);
-            statement.setInt(4, 2);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(ROW5, rs.getString(1));
-            assertTrue(rs.next());
-            assertEquals(ROW6, rs.getString(1));
-            assertFalse(rs.next());
-
-            // (groupby orderby OFFSET)
-            query = "SELECT a, s FROM (SELECT a_string a, sum(a_byte) s FROM "+tableName+" GROUP BY a_string ORDER BY sum(a_byte) OFFSET 1)";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue(rs.next());
-            assertEquals(A_VALUE, rs.getString(1));
-            assertEquals(10, rs.getInt(2));
-            assertTrue(rs.next());
-            assertEquals(B_VALUE, rs.getString(1));
-            assertEquals(26, rs.getInt(2));
-
-            assertFalse(rs.next());
-
-            // (union OFFSET) groupby
-            query = "SELECT a_string, count(*) FROM (SELECT a_string FROM "+tableName+" where a_byte < 4 union all SELECT a_string FROM "+tableName+" where a_byte > 8 OFFSET 1) group by a_string";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(2,rs.getInt(2));
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-            assertEquals(1,rs.getInt(2));
-            assertFalse(rs.next());
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testDerivedTableWithDistinctWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithoutIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
-            // (distinct)
-            String query = "SELECT * FROM (SELECT DISTINCT a_string, b_string FROM "+tableName+") AS t WHERE t.b_string != '" + C_VALUE + "' ORDER BY t.b_string, t.a_string";
-            PreparedStatement statement = conn.prepareStatement(query);
-            ResultSet rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(B_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(B_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(E_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(E_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-            assertEquals(E_VALUE,rs.getString(2));
-
-            assertFalse(rs.next());
-
-            // distinct ()
-            query = "SELECT DISTINCT t.a, t.b FROM (SELECT a_string a, b_string b FROM "+tableName+") AS t WHERE t.b != '" + C_VALUE + "' ORDER BY t.b, t.a";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(B_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(B_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(E_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertEquals(E_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-            assertEquals(E_VALUE,rs.getString(2));
-
-            assertFalse(rs.next());
-
-            // distinct (distinct)
-            query = "SELECT DISTINCT t.a FROM (SELECT DISTINCT a_string a, b_string b FROM "+tableName+") AS t";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(B_VALUE,rs.getString(1));
-            assertTrue (rs.next());
-            assertEquals(C_VALUE,rs.getString(1));
-
-            assertFalse(rs.next());
-
-            // distinct (groupby)
-            query = "SELECT distinct t.c FROM (SELECT count(*) c FROM "+tableName+" GROUP BY a_string) AS t";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(1,rs.getInt(1));
-            assertTrue (rs.next());
-            assertEquals(4,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // distinct (groupby) orderby
-            query = "SELECT distinct t.c FROM (SELECT count(*) c FROM "+tableName+" GROUP BY a_string) AS t ORDER BY t.c DESC";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(4,rs.getInt(1));
-            assertTrue (rs.next());
-            assertEquals(1,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // distinct (limit)
-            query = "SELECT DISTINCT t.a, t.b FROM (SELECT a_string a, b_string b FROM "+tableName+" LIMIT 2) AS t";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(B_VALUE,rs.getString(2));
-            assertTrue (rs.next());
-            assertEquals(A_VALUE,rs.getString(1));
-            assertEquals(C_VALUE,rs.getString(2));
-
-            assertFalse(rs.next());
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testDerivedTableWithAggregateWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithoutIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
-            // (count)
-            String query = "SELECT * FROM (SELECT count(*) FROM "+tableName+" WHERE a_byte != 8) AS t";
-            PreparedStatement statement = conn.prepareStatement(query);
-            ResultSet rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(8,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // count ()
-            query = "SELECT count(*) FROM (SELECT a_byte FROM "+tableName+") AS t WHERE t.a_byte != 8";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(8,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // count (distinct)
-            query = "SELECT count(*) FROM (SELECT DISTINCT a_string FROM "+tableName+") AS t";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(3,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // count (groupby)
-            query = "SELECT count(*) FROM (SELECT count(*) c FROM "+tableName+" GROUP BY a_string) AS t";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(3,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // count (limit)
-            query = "SELECT count(*) FROM (SELECT entity_id FROM "+tableName+" LIMIT 2) AS t";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(2,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // count (subquery)
-            query = "SELECT count(*) FROM (SELECT * FROM "+tableName+" WHERE (organization_id, entity_id) in (SELECT organization_id, entity_id FROM "+tableName+" WHERE a_byte != 8)) AS t";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(8,rs.getInt(1));
-
-            assertFalse(rs.next());
-
-            // count (orderby)
-            query = "SELECT count(a_byte) FROM (SELECT * FROM "+tableName+" order by a_integer) AS t where a_byte != 8";
-            statement = conn.prepareStatement(query);
-            rs = statement.executeQuery();
-            assertTrue (rs.next());
-            assertEquals(8,rs.getInt(1));
-
-            assertFalse(rs.next());
-        } finally {
-            conn.close();
-        }
-    }
-
-    @Test
-    public void testNestedDerivedTableWithoutIndex() throws Exception {
-        String tableName=generateUniqueName();
-        initTableWithIndex(tableName);
-        initTableWithoutIndex(tableName);
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(getUrl(), props);
-        try {
             // select(select(select))
             String query = "SELECT q.id, q.x10 * 10 FROM (SELECT t.eid id, t.x + 9 x10, t.astr a, t.bstr b FROM (SELECT entity_id eid, a_string astr, b_string bstr, a_byte + 1 x FROM "+tableName+" WHERE a_byte + 1 < ?) AS t ORDER BY b, id) AS q WHERE q.a = ? OR q.b = ? OR q.b = ?";
             PreparedStatement statement = conn.prepareStatement(query);


[3/5] phoenix git commit: PHOENIX-4220 Upper bound not being used in partial index rebuilder

Posted by ja...@apache.org.
PHOENIX-4220 Upper bound not being used in partial index rebuilder


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

Branch: refs/heads/4.x-HBase-0.98
Commit: 2da53a65c42b5dbe59852be783a4744c27c31d1e
Parents: c984951
Author: James Taylor <jt...@salesforce.com>
Authored: Thu Sep 21 09:48:13 2017 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Thu Sep 21 11:03:47 2017 -0700

----------------------------------------------------------------------
 .../end2end/index/PartialIndexRebuilderIT.java  | 64 +++++++++++++++++++-
 .../coprocessor/MetaDataRegionObserver.java     | 12 ++--
 2 files changed, 66 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/2da53a65/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexRebuilderIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexRebuilderIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexRebuilderIT.java
index 12630f4..dfe5a28 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexRebuilderIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/PartialIndexRebuilderIT.java
@@ -20,6 +20,7 @@ package org.apache.phoenix.end2end.index;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.sql.Connection;
@@ -45,7 +46,6 @@ import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
 import org.apache.phoenix.query.ConnectionQueryServices;
 import org.apache.phoenix.query.QueryServices;
-import org.apache.phoenix.query.QueryServicesOptions;
 import org.apache.phoenix.schema.PIndexState;
 import org.apache.phoenix.schema.PMetaData;
 import org.apache.phoenix.schema.PTable;
@@ -71,12 +71,13 @@ import com.google.common.collect.Maps;
 public class PartialIndexRebuilderIT extends BaseUniqueNamesOwnClusterIT {
     private static final Random RAND = new Random(5);
     private static final int WAIT_AFTER_DISABLED = 5000;
+    private static final int REBUILD_INTERVAL = 2000;
 
     @BeforeClass
     public static void doSetup() throws Exception {
         Map<String, String> serverProps = Maps.newHashMapWithExpectedSize(10);
         serverProps.put(QueryServices.INDEX_FAILURE_HANDLING_REBUILD_ATTRIB, Boolean.TRUE.toString());
-        serverProps.put(QueryServices.INDEX_FAILURE_HANDLING_REBUILD_INTERVAL_ATTRIB, "2000");
+        serverProps.put(QueryServices.INDEX_FAILURE_HANDLING_REBUILD_INTERVAL_ATTRIB, Long.toString(REBUILD_INTERVAL));
         serverProps.put(QueryServices.INDEX_REBUILD_DISABLE_TIMESTAMP_THRESHOLD, "120000"); // give up rebuilding after 2 minutes
         serverProps.put(QueryServices.INDEX_FAILURE_HANDLING_REBUILD_OVERLAP_FORWARD_TIME_ATTRIB, Long.toString(WAIT_AFTER_DISABLED));
         setUpTestDriver(new ReadOnlyProps(serverProps.entrySet().iterator()), ReadOnlyProps.EMPTY_PROPS);
@@ -641,7 +642,64 @@ public class PartialIndexRebuilderIT extends BaseUniqueNamesOwnClusterIT {
     private final static CountDownLatch WAIT_FOR_REBUILD_TO_START = new CountDownLatch(1);
     private final static CountDownLatch WAIT_FOR_INDEX_WRITE = new CountDownLatch(1);
 
-    
+    @Test
+    public void testUpperBoundSetOnRebuild() throws Throwable {
+        String schemaName = generateUniqueName();
+        String tableName = generateUniqueName();
+        String indexName = generateUniqueName();
+        final String fullTableName = SchemaUtil.getTableName(schemaName, tableName);
+        final String fullIndexName = SchemaUtil.getTableName(schemaName, indexName);
+        PTableKey key = new PTableKey(null,fullTableName);
+        final MyClock clock = new MyClock(1000);
+        EnvironmentEdgeManager.injectEdge(clock);
+        try (Connection conn = DriverManager.getConnection(getUrl())) {
+            PMetaData metaCache = conn.unwrap(PhoenixConnection.class).getMetaDataCache();
+            conn.createStatement().execute("CREATE TABLE " + fullTableName + "(k VARCHAR PRIMARY KEY, v1 VARCHAR, v2 VARCHAR) COLUMN_ENCODED_BYTES = 0, STORE_NULLS=true");
+            clock.time += 100;
+            conn.createStatement().execute("CREATE INDEX " + indexName + " ON " + fullTableName + " (v1, v2)");
+            clock.time += 100;
+            HTableInterface metaTable = conn.unwrap(PhoenixConnection.class).getQueryServices().getTable(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES);
+            IndexUtil.updateIndexState(fullIndexName, 0L, metaTable, PIndexState.DISABLE);
+            clock.time += 100;
+            long disableTime = clock.currentTime();
+            conn.createStatement().execute("UPSERT INTO " + fullTableName + " VALUES('a','a', '0')");
+            conn.commit();
+            // Set clock forward in time past the "overlap" amount we wait for index maintenance to kick in
+            clock.time += 10 * WAIT_AFTER_DISABLED;
+            assertTrue(hasDisabledIndex(metaCache, key));
+            assertEquals(1,TestUtil.getRowCount(conn, fullTableName));
+            assertEquals(0,TestUtil.getRowCount(conn, fullIndexName));
+            conn.createStatement().execute("UPSERT INTO " + fullTableName + " VALUES('bb','bb','11')");
+            conn.commit();
+            assertEquals(2,TestUtil.getRowCount(conn, fullTableName));
+            assertEquals(0,TestUtil.getRowCount(conn, fullIndexName));
+            // Set clock back in time and start rebuild
+            clock.time = disableTime + 100;
+            IndexUtil.updateIndexState(fullIndexName, disableTime, metaTable, PIndexState.DISABLE);
+            advanceClockUntilPartialRebuildStarts(fullIndexName, clock);
+            clock.time += REBUILD_INTERVAL;
+            waitForIndexRebuild(conn, fullIndexName, PIndexState.ACTIVE, clock, REBUILD_INTERVAL);
+            assertEquals(2,TestUtil.getRowCount(conn, fullTableName));
+            // If an upper bound was set on the rebuilder, we should only have found one row
+            assertEquals(1,TestUtil.getRowCount(conn, fullIndexName));
+        } finally {
+            EnvironmentEdgeManager.injectEdge(null);
+        }
+    }
+
+    private static void waitForIndexRebuild(Connection conn, String fullIndexName, PIndexState expectedIndexState, MyClock clock, long increment) throws InterruptedException, SQLException {
+        int maxTries = 60, nTries = 0;
+        do {
+            Thread.sleep(1000); // sleep 1 sec
+            clock.time += increment;
+            if (TestUtil.checkIndexState(conn, fullIndexName, expectedIndexState, 0L)) {
+                return;
+            }
+        } while (++nTries < maxTries);
+        fail("Ran out of time waiting for index state to become " + expectedIndexState);
+    }
+
+
     @Test
     public void testDisableIndexDuringRebuild() throws Throwable {
         String schemaName = generateUniqueName();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/2da53a65/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
index 4fe137e..4cacd87 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataRegionObserver.java
@@ -426,19 +426,17 @@ public class MetaDataRegionObserver extends BaseRegionObserver {
 								continue;
 							}
 							long scanBeginTime = Math.max(0, earliestDisableTimestamp - backwardOverlapDurationMs);
+                            long scanEndTime = Math.min(latestUpperBoundTimestamp,
+                                    getTimestampForBatch(scanBeginTime,batchExecutedPerTableMap.get(dataPTable.getName())));
 							LOG.info("Starting to build " + dataPTable + " indexes " + indexesToPartiallyRebuild
-									+ " from timestamp=" + scanBeginTime + " until " + latestUpperBoundTimestamp);
+									+ " from timestamp=" + scanBeginTime + " until " + scanEndTime);
 							
 							TableRef tableRef = new TableRef(null, dataPTable, HConstants.LATEST_TIMESTAMP, false);
 							// TODO Need to set high timeout
 							PostDDLCompiler compiler = new PostDDLCompiler(conn);
-							MutationPlan plan = compiler.compile(Collections.singletonList(tableRef), null, null, null,
-									HConstants.LATEST_TIMESTAMP);
-							Scan dataTableScan = IndexManagementUtil.newLocalStateScan(plan.getContext().getScan(),
-									maintainers);
+							MutationPlan plan = compiler.compile(Collections.singletonList(tableRef), null, null, null, scanEndTime);
+							Scan dataTableScan = IndexManagementUtil.newLocalStateScan(plan.getContext().getScan(), maintainers);
 
-							long scanEndTime = Math.min(latestUpperBoundTimestamp,
-							        getTimestampForBatch(scanBeginTime,batchExecutedPerTableMap.get(dataPTable.getName())));
 							// We can't allow partial results
 							dataTableScan.setTimeRange(scanBeginTime, scanEndTime);
 							dataTableScan.setCacheBlocks(false);


[4/5] phoenix git commit: PHOENIX-4221 Disallow DML operations on connections with CURRENT_SCN set - VariableLengthPKIT (Ethan Wang)

Posted by ja...@apache.org.
http://git-wip-us.apache.org/repos/asf/phoenix/blob/f7989151/phoenix-core/src/it/java/org/apache/phoenix/end2end/VariableLengthPKIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/VariableLengthPKIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/VariableLengthPKIT.java
index 753f2c8..e45d01e 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/VariableLengthPKIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/VariableLengthPKIT.java
@@ -43,34 +43,31 @@ import java.util.Properties;
 import org.apache.phoenix.exception.SQLExceptionCode;
 import org.apache.phoenix.schema.ConstraintViolationException;
 import org.apache.phoenix.util.DateUtil;
-import org.apache.phoenix.util.PhoenixRuntime;
 import org.apache.phoenix.util.PropertiesUtil;
 import org.junit.Test;
 
 
-
-public class VariableLengthPKIT extends BaseClientManagedTimeIT {
+public class VariableLengthPKIT extends ParallelStatsDisabledIT {
     private static final String DS1 = "1970-01-01 00:58:00";
     private static final Date D1 = toDate(DS1);
 
     private static Date toDate(String dateString) {
         return DateUtil.parseDate(dateString);
     }
-
-    protected static void initGroupByRowKeyColumns(long ts) throws Exception {
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
+    
+    protected static void initGroupByRowKeyColumns(String pTSDBtableName) throws Exception {
+        ensureTableCreated(getUrl(),pTSDBtableName, PTSDB_NAME, null, null, null);
         // Insert all rows at ts
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts;
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         PreparedStatement stmt = conn.prepareStatement(
-                "upsert into " +
-                "PTSDB(" +
-                "    INST, " +
-                "    HOST," +
-                "    \"DATE\")" +
-                "VALUES (?, ?, CURRENT_DATE())");
+                "upsert into " + pTSDBtableName+
+                        " (" +
+                        "    INST, " +
+                        "    HOST," +
+                        "    \"DATE\")" +
+                        "VALUES (?, ?, CURRENT_DATE())");
         stmt.setString(1, "ab");
         stmt.setString(2, "a");
         stmt.execute();
@@ -84,44 +81,70 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         conn.close();
     }
 
-    protected static void initTableValues(byte[][] splits, long ts) throws Exception {
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, splits, ts-2, null);
+    private static void initVarcharKeyTableValues(byte[][] splits, String varcharKeyTestTableName) throws Exception {
+        String url = getUrl();
+        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+        Connection conn = DriverManager.getConnection(url, props);
+
+        String ddl = "create table " +varcharKeyTestTableName+
+                "   (pk varchar not null primary key)";
+        createTestTable(getUrl(), ddl, splits, null);
+        PreparedStatement stmt = conn.prepareStatement(
+                "upsert into " + varcharKeyTestTableName+
+                        "(pk) " +
+                        "VALUES (?)");
+        stmt.setString(1, "   def");
+        stmt.execute();
+        stmt.setString(1, "jkl   ");
+        stmt.execute();
+        stmt.setString(1, "   ghi   ");
+        stmt.execute();
+
+        conn.commit();
+        conn.close();
+    }
 
+    private static void initPTSDBTableValues(byte[][] splits, String pTSDBtableName) throws Exception {
+        ensureTableCreated(getUrl(),pTSDBtableName, PTSDB_NAME, splits, null, null);
         // Insert all rows at ts
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts;
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
         PreparedStatement stmt = conn.prepareStatement(
-                "upsert into " +
-                "PTSDB(" +
-                "    INST, " +
-                "    HOST," +
-                "    \"DATE\"," +
-                "    VAL)" +
-                "VALUES (?, ?, ?, ?)");
+                "upsert into " + pTSDBtableName +
+                        " (" +
+                        "    INST, " +
+                        "    HOST," +
+                        "    \"DATE\"," +
+                        "    VAL)" +
+                        "VALUES (?, ?, ?, ?)");
         stmt.setString(1, "abc");
         stmt.setString(2, "abc-def-ghi");
         stmt.setDate(3, new Date(System.currentTimeMillis()));
         stmt.setBigDecimal(4, new BigDecimal(.5));
         stmt.execute();
+        conn.close();
+    }
 
-        ensureTableCreated(getUrl(),BTABLE_NAME, BTABLE_NAME, splits, ts-2, null);
-        conn.setAutoCommit(false);
+    private static void initBTableValues(byte[][] splits, String bTableName) throws Exception {
+        String url = getUrl();
+        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+        Connection conn = DriverManager.getConnection(url, props);
+        ensureTableCreated(getUrl(),bTableName, BTABLE_NAME, splits, null, null);
 
-        // Insert all rows at ts
-        stmt = conn.prepareStatement(
-                "upsert into " +
-                "BTABLE(" +
-                "    A_STRING, " +
-                "    A_ID," +
-                "    B_STRING," +
-                "    A_INTEGER," +
-                "    B_INTEGER," +
-                "    C_INTEGER," +
-                "    D_STRING," +
-                "    E_STRING)" +
-                "VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
+        PreparedStatement stmt = conn.prepareStatement(
+                "upsert into " + bTableName+
+                        " (" +
+                        "    A_STRING, " +
+                        "    A_ID," +
+                        "    B_STRING," +
+                        "    A_INTEGER," +
+                        "    B_INTEGER," +
+                        "    C_INTEGER," +
+                        "    D_STRING," +
+                        "    E_STRING)" +
+                        "VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
         stmt.setString(1, "abc");
         stmt.setString(2, "111");
         stmt.setString(3, "x");
@@ -154,33 +177,19 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         stmt.setString(7, null);
         stmt.execute();
 
-        String ddl = "create table VarcharKeyTest" +
-            "   (pk varchar not null primary key)";
-        createTestTable(getUrl(), ddl, splits, ts-2);
-        stmt = conn.prepareStatement(
-                "upsert into " +
-                "VarcharKeyTest(pk) " +
-                "VALUES (?)");
-        stmt.setString(1, "   def");
-        stmt.execute();
-        stmt.setString(1, "jkl   ");
-        stmt.execute();
-        stmt.setString(1, "   ghi   ");
-        stmt.execute();
-
         conn.commit();
         conn.close();
     }
 
     @Test
     public void testSingleColumnScanKey() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING=?";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String bTableName = generateUniqueName();
+        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM "+bTableName+" WHERE A_STRING=?";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             statement.setString(1, "abc");
             ResultSet rs = statement.executeQuery();
@@ -198,13 +207,14 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSingleColumnGroupBy() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT INST FROM PTSDB GROUP BY INST";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        String query = "SELECT INST FROM "+pTSDBTableName+" GROUP BY INST";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
+
         try {
-            initTableValues(null, ts);
+            initPTSDBTableValues(null, pTSDBTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -217,13 +227,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testNonfirstColumnGroupBy() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT HOST FROM PTSDB WHERE INST='abc' GROUP BY HOST";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        String query = "SELECT HOST FROM "+pTSDBTableName+" WHERE INST='abc' GROUP BY HOST";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initPTSDBTableValues(null, pTSDBTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -236,13 +246,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testGroupByRowKeyColumns() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT SUBSTR(INST,1,1),HOST FROM PTSDB GROUP BY SUBSTR(INST,1,1),HOST";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        String query = "SELECT SUBSTR(INST,1,1),HOST FROM "+pTSDBTableName+" GROUP BY SUBSTR(INST,1,1),HOST";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initGroupByRowKeyColumns(ts);
+            initGroupByRowKeyColumns(pTSDBTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -259,13 +269,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSkipScan() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT HOST FROM PTSDB WHERE INST='abc' AND \"DATE\">=TO_DATE('1970-01-01 00:00:00') AND \"DATE\" <TO_DATE('2171-01-01 00:00:00')";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        String query = "SELECT HOST FROM "+pTSDBTableName+" WHERE INST='abc' AND \"DATE\">=TO_DATE('1970-01-01 00:00:00') AND \"DATE\" <TO_DATE('2171-01-01 00:00:00')";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initPTSDBTableValues(null, pTSDBTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -278,13 +288,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSkipMax() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT MAX(INST),MAX(\"DATE\") FROM PTSDB WHERE INST='abc' AND \"DATE\">=TO_DATE('1970-01-01 00:00:00') AND \"DATE\" <TO_DATE('2171-01-01 00:00:00')";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        String query = "SELECT MAX(INST),MAX(\"DATE\") FROM "+pTSDBTableName+" WHERE INST='abc' AND \"DATE\">=TO_DATE('1970-01-01 00:00:00') AND \"DATE\" <TO_DATE('2171-01-01 00:00:00')";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initPTSDBTableValues(null, pTSDBTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -297,13 +307,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSkipMaxWithLimit() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT MAX(INST),MAX(\"DATE\") FROM PTSDB WHERE INST='abc' AND \"DATE\">=TO_DATE('1970-01-01 00:00:00') AND \"DATE\" <TO_DATE('2171-01-01 00:00:00') LIMIT 2";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        String query = "SELECT MAX(INST),MAX(\"DATE\") FROM "+pTSDBTableName+" WHERE INST='abc' AND \"DATE\">=TO_DATE('1970-01-01 00:00:00') AND \"DATE\" <TO_DATE('2171-01-01 00:00:00') LIMIT 2";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initPTSDBTableValues(null, pTSDBTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -316,15 +326,15 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSingleColumnKeyFilter() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
         // Requires not null column to be projected, since the only one projected in the query is
         // nullable and will cause the no key value to be returned if it is the only one projected.
-        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE B_STRING=?";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM "+bTableName+" WHERE B_STRING=?";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null, bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             statement.setString(1, "xy");
             ResultSet rs = statement.executeQuery();
@@ -343,14 +353,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testMultiColumnEqScanKey() throws Exception {
-        long ts = nextTimestamp();
-        // TODO: add compile test to confirm start/stop scan key
-        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING=? AND A_ID=? AND B_STRING=?";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String bTableName = generateUniqueName();
+        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM "+bTableName+" WHERE A_STRING=? AND A_ID=? AND B_STRING=?";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null, bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             statement.setString(1, "abcd");
             statement.setString(2, "222");
@@ -371,14 +380,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testMultiColumnGTScanKey() throws Exception {
-        long ts = nextTimestamp();
-        // TODO: add compile test to confirm start/stop scan key
-        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING=? AND A_ID=? AND B_STRING>?";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String bTableName = generateUniqueName();
+        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM "+bTableName+" WHERE A_STRING=? AND A_ID=? AND B_STRING>?";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null, bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             statement.setString(1, "abcd");
             statement.setString(2, "222");
@@ -404,14 +412,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testMultiColumnGTKeyFilter() throws Exception {
-        long ts = nextTimestamp();
-        // TODO: add compile test to confirm start/stop scan key
-        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM BTABLE WHERE A_STRING>? AND A_INTEGER>=?";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String bTableName = generateUniqueName();
+        String query = "SELECT A_STRING,substr(a_id,1,1),B_STRING,A_INTEGER,B_INTEGER FROM "+bTableName+" WHERE A_STRING>? AND A_INTEGER>=?";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null, bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             statement.setString(1, "abc");
             statement.setInt(2, 4);
@@ -430,22 +437,21 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testNullValueEqualityScan() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, PTSDB_NAME, null, null, null);
         // Insert all rows at ts
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts;
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
-        PreparedStatement stmt = conn.prepareStatement("upsert into PTSDB VALUES ('', '', ?, 0.5)");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDBTableName+" VALUES ('', '', ?, 0.5)");
         stmt.setDate(1, D1);
         stmt.execute();
         conn.close();
 
         // Comparisons against null are always false.
-        String query = "SELECT HOST,\"DATE\" FROM PTSDB WHERE HOST='' AND INST=''";
-        url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String query = "SELECT HOST,\"DATE\" FROM "+pTSDBTableName+" WHERE HOST='' AND INST=''";
+        url = getUrl();
         conn = DriverManager.getConnection(url, props);
         try {
             PreparedStatement statement = conn.prepareStatement(query);
@@ -458,14 +464,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testVarLengthPKColScan() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, PTSDB_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
-        PreparedStatement stmt = conn.prepareStatement("upsert into PTSDB VALUES (?, 'y', ?, 0.5)");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDBTableName+" VALUES (?, 'y', ?, 0.5)");
         stmt.setString(1, "x");
         stmt.setDate(2, D1);
         stmt.execute();
@@ -473,8 +478,8 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         stmt.execute();
         conn.close();
 
-        String query = "SELECT HOST,\"DATE\" FROM PTSDB WHERE INST='x' AND HOST='y'";
-        url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String query = "SELECT HOST,\"DATE\" FROM "+pTSDBTableName+" WHERE INST='x' AND HOST='y'";
+        url = getUrl();
         conn = DriverManager.getConnection(url, props);
         try {
             PreparedStatement statement = conn.prepareStatement(query);
@@ -488,14 +493,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testEscapedQuoteScan() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(), PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(), pTSDBTableName, PTSDB_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
-        PreparedStatement stmt = conn.prepareStatement("upsert into PTSDB VALUES (?, 'y', ?, 0.5)");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDBTableName+" VALUES (?, 'y', ?, 0.5)");
         stmt.setString(1, "x'y");
         stmt.setDate(2, D1);
         stmt.execute();
@@ -503,9 +507,9 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         stmt.execute();
         conn.close();
 
-        String query1 = "SELECT INST,\"DATE\" FROM PTSDB WHERE INST='x''y'";
-        String query2 = "SELECT INST,\"DATE\" FROM PTSDB WHERE INST='x\\\'y'";
-        url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String query1 = "SELECT INST,\"DATE\" FROM "+pTSDBTableName+" WHERE INST='x''y'";
+        String query2 = "SELECT INST,\"DATE\" FROM "+pTSDBTableName+" WHERE INST='x\\\'y'";
+        url = getUrl();
         conn = DriverManager.getConnection(url, props);
         try {
             PreparedStatement statement = conn.prepareStatement(query1);
@@ -526,14 +530,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         }
     }
 
-    private static void initPtsdbTableValues(long ts) throws Exception {
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+    private static void initPTSDBTableValues1(String pTSDBTableName) throws Exception {
+        ensureTableCreated(getUrl(),pTSDBTableName, PTSDB_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
-        PreparedStatement stmt = conn.prepareStatement("upsert into PTSDB VALUES ('x', 'y', ?, 0.5)");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDBTableName+" VALUES ('x', 'y', ?, 0.5)");
         stmt.setDate(1, D1);
         stmt.execute();
         conn.close();
@@ -541,11 +544,10 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testToStringOnDate() throws Exception {
-        long ts = nextTimestamp();
-        initPtsdbTableValues(ts);
-
-        String query = "SELECT HOST,\"DATE\" FROM PTSDB WHERE INST='x' AND HOST='y'";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        initPTSDBTableValues1(pTSDBTableName);
+        String query = "SELECT HOST,\"DATE\" FROM "+pTSDBTableName+" WHERE INST='x' AND HOST='y'";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -559,14 +561,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         }
     }
 
-    private static void initPtsdbTableValues2(long ts, Date d) throws Exception {
-        ensureTableCreated(getUrl(),PTSDB2_NAME, PTSDB2_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+    private static void initPTSDBTableValues2(String pTSDB2TableName, Date d) throws Exception {
+        ensureTableCreated(getUrl(),pTSDB2TableName, PTSDB2_NAME, null, null, null);
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
-        PreparedStatement stmt = conn.prepareStatement("upsert into "+PTSDB2_NAME+"(inst,\"DATE\",val2) VALUES (?, ?, ?)");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDB2TableName+"(inst,\"DATE\",val2) VALUES (?, ?, ?)");
         stmt.setString(1, "a");
         stmt.setDate(2, d);
         stmt.setDouble(3, 101.3);
@@ -596,16 +597,17 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testRoundOnDate() throws Exception {
-        long ts = nextTimestamp();
+        String pTSDB2TableName = generateUniqueName();
+
         Date date = new Date(System.currentTimeMillis());
-        initPtsdbTableValues2(ts, date);
+        initPTSDBTableValues2(pTSDB2TableName, date);
 
         String query = "SELECT MAX(val2)"
-        + " FROM "+PTSDB2_NAME
-        + " WHERE inst='a'"
-        + " GROUP BY ROUND(\"DATE\",'day',1)"
-        + " ORDER BY MAX(val2)"; // disambiguate row order
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+                + " FROM "+pTSDB2TableName
+                + " WHERE inst='a'"
+                + " GROUP BY ROUND(\"DATE\",'day',1)"
+                + " ORDER BY MAX(val2)"; // disambiguate row order
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -625,16 +627,16 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testOrderBy() throws Exception {
-        long ts = nextTimestamp();
+        String pTSDB2TableName = generateUniqueName();
         Date date = new Date(System.currentTimeMillis());
-        initPtsdbTableValues2(ts, date);
+        initPTSDBTableValues2(pTSDB2TableName, date);
 
         String query = "SELECT inst,MAX(val2),MIN(val2)"
-        + " FROM "+PTSDB2_NAME
-        + " GROUP BY inst,ROUND(\"DATE\",'day',1)"
-        + " ORDER BY inst,ROUND(\"DATE\",'day',1)"
-        ;
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+                + " FROM "+pTSDB2TableName
+                + " GROUP BY inst,ROUND(\"DATE\",'day',1)"
+                + " ORDER BY inst,ROUND(\"DATE\",'day',1)"
+                ;
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -672,14 +674,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSelectCount() throws Exception {
-        long ts = nextTimestamp();
+        String pTSDB2TableName = generateUniqueName();
         Date date = new Date(System.currentTimeMillis());
-        initPtsdbTableValues2(ts, date);
-
+        initPTSDBTableValues2(pTSDB2TableName, date);
         String query = "SELECT COUNT(*)"
-        + " FROM "+PTSDB2_NAME
-        + " WHERE inst='a'";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+                + " FROM "+pTSDB2TableName
+                + " WHERE inst='a'";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -695,15 +696,14 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testBatchUpsert() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),PTSDB2_NAME, PTSDB2_NAME, null, ts-2, null);
-        Date d = new Date(ts);
+        String pTSDB2TableName = generateUniqueName();
+        Date d = new Date(System.currentTimeMillis());
+        ensureTableCreated(getUrl(),pTSDB2TableName, PTSDB2_NAME, null, null, null);
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts));
-        String query = "SELECT SUM(val1),SUM(val2),SUM(val3) FROM "+PTSDB2_NAME;
-        String sql1 = "UPSERT INTO "+PTSDB2_NAME+"(inst,\"DATE\",val1) VALUES (?, ?, ?)";
-        String sql2 = "UPSERT INTO "+PTSDB2_NAME+"(inst,\"DATE\",val2) VALUES (?, ?, ?)";
-        String sql3 = "UPSERT INTO "+PTSDB2_NAME+"(inst,\"DATE\",val3) VALUES (?, ?, ?)";
+        String query = "SELECT SUM(val1),SUM(val2),SUM(val3) FROM "+pTSDB2TableName;
+        String sql1 = "UPSERT INTO "+pTSDB2TableName+"(inst,\"DATE\",val1) VALUES (?, ?, ?)";
+        String sql2 = "UPSERT INTO "+pTSDB2TableName+"(inst,\"DATE\",val2) VALUES (?, ?, ?)";
+        String sql3 = "UPSERT INTO "+pTSDB2TableName+"(inst,\"DATE\",val3) VALUES (?, ?, ?)";
         Connection conn = DriverManager.getConnection(getUrl(), props);
         conn.setAutoCommit(false);
         // conn.setAutoCommit(true);
@@ -772,7 +772,6 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         conn.close();
 
         // Query at a time after the upsert to confirm they took place
-        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts+1));
         conn = DriverManager.getConnection(getUrl(), props);
         {
             PreparedStatement statement = conn.prepareStatement(query);
@@ -788,11 +787,10 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSelectStar() throws Exception {
-        long ts = nextTimestamp();
-        initPtsdbTableValues(ts);
-
-        String query = "SELECT * FROM PTSDB WHERE INST='x' AND HOST='y'";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String pTSDBTableName = generateUniqueName();
+        initPTSDBTableValues1(pTSDBTableName);
+        String query = "SELECT * FROM "+pTSDBTableName+" WHERE INST='x' AND HOST='y'";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -811,11 +809,12 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testToCharOnDate() throws Exception {
-        long ts = nextTimestamp();
-        initPtsdbTableValues(ts);
+        String pTSDBTableName = generateUniqueName();
 
-        String query = "SELECT HOST,TO_CHAR(\"DATE\") FROM PTSDB WHERE INST='x' AND HOST='y'";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        initPTSDBTableValues1(pTSDBTableName);
+
+        String query = "SELECT HOST,TO_CHAR(\"DATE\") FROM "+pTSDBTableName+" WHERE INST='x' AND HOST='y'";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -830,13 +829,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testToCharWithFormatOnDate() throws Exception {
-        long ts = nextTimestamp();
-        initPtsdbTableValues(ts);
+        String pTSDBTableName = generateUniqueName();
 
+        initPTSDBTableValues1(pTSDBTableName);
         String format = "HH:mm:ss";
         Format dateFormatter = DateUtil.getDateFormatter(format);
-        String query = "SELECT HOST,TO_CHAR(\"DATE\",'" + format + "') FROM PTSDB WHERE INST='x' AND HOST='y'";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String query = "SELECT HOST,TO_CHAR(\"DATE\",'" + format + "') FROM "+pTSDBTableName+" WHERE INST='x' AND HOST='y'";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -851,13 +850,14 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testToDateWithFormatOnDate() throws Exception {
-        long ts = nextTimestamp();
-        initPtsdbTableValues(ts);
+        String pTSDBTableName = generateUniqueName();
+
+        initPTSDBTableValues1(pTSDBTableName);
 
         String format = "yyyy-MM-dd HH:mm:ss.S";
         Format dateFormatter = DateUtil.getDateFormatter(format);
-        String query = "SELECT HOST,TO_CHAR(\"DATE\",'" + format + "') FROM PTSDB WHERE INST='x' AND HOST='y' and \"DATE\"=TO_DATE(?,'" + format + "')";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String query = "SELECT HOST,TO_CHAR(\"DATE\",'" + format + "') FROM "+pTSDBTableName+" WHERE INST='x' AND HOST='y' and \"DATE\"=TO_DATE(?,'" + format + "')";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
@@ -873,16 +873,15 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testMissingPKColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, PTSDB_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
         Statement stmt = conn.createStatement();
         try {
-            stmt.execute("upsert into PTSDB(INST,HOST,VAL) VALUES ('abc', 'abc-def-ghi', 0.5)");
+            stmt.execute("upsert into "+pTSDBTableName+"(INST,HOST,VAL) VALUES ('abc', 'abc-def-ghi', 0.5)");
             fail();
         } catch (SQLException e) {
             assertEquals(SQLExceptionCode.CONSTRAINT_VIOLATION.getErrorCode(), e.getErrorCode());
@@ -893,15 +892,15 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testNoKVColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),BTABLE_NAME, BTABLE_NAME, null, ts-2, null);
+        String pTSDBTableName = generateUniqueName();
 
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        ensureTableCreated(getUrl(),pTSDBTableName, BTABLE_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
         PreparedStatement stmt = conn.prepareStatement(
-                "upsert into BTABLE VALUES (?, ?, ?, ?, ?)");
+                "upsert into "+pTSDBTableName+" VALUES (?, ?, ?, ?, ?)");
         stmt.setString(1, "abc");
         stmt.setString(2, "123");
         stmt.setString(3, "x");
@@ -911,54 +910,25 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         stmt.execute();
     }
 
-    // Broken, since we don't know if insert vs update. @Test
-    public void testMissingKVColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),BTABLE_NAME, BTABLE_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
-        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        Connection conn = DriverManager.getConnection(url, props);
-        conn.setAutoCommit(true);
-        PreparedStatement stmt = conn.prepareStatement(
-                "upsert into BTABLE VALUES (?, ?, ?, ?, ?, ?)");
-        stmt.setString(1, "abc");
-        stmt.setString(2, "123");
-        stmt.setString(3, "x");
-        stmt.setInt(4, 1);
-        stmt.setString(5, "ab");
-        stmt.setInt(6, 1);
-        try {
-            stmt.execute();
-            fail();
-        } catch (ConstraintViolationException e) {
-            // Non nullable key value E_STRING has no value
-            assertTrue(e.getMessage().contains("may not be null"));
-        } finally {
-            conn.close();
-        }
-    }
-
     @Test
     public void testTooShortKVColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),BTABLE_NAME, BTABLE_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, BTABLE_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
         // Insert all rows at ts
         PreparedStatement stmt = conn.prepareStatement(
-                "upsert into " +
-                "BTABLE(" +
-                "    A_STRING, " +
-                "    A_ID," +
-                "    B_STRING," +
-                "    A_INTEGER," +
-                "    C_STRING," +
-                "    E_STRING)" +
-                "VALUES (?, ?, ?, ?, ?, ?)");
+                "upsert into " + pTSDBTableName +
+                        " (" +
+                        "    A_STRING, " +
+                        "    A_ID," +
+                        "    B_STRING," +
+                        "    A_INTEGER," +
+                        "    C_STRING," +
+                        "    E_STRING)" +
+                        "VALUES (?, ?, ?, ?, ?, ?)");
         stmt.setString(1, "abc");
         stmt.setString(2, "123");
         stmt.setString(3, "x");
@@ -977,24 +947,23 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testTooShortPKColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),BTABLE_NAME, BTABLE_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, BTABLE_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
         // Insert all rows at ts
         PreparedStatement stmt = conn.prepareStatement(
-                "upsert into " +
-                "BTABLE(" +
-                "    A_STRING, " +
-                "    A_ID," +
-                "    B_STRING," +
-                "    A_INTEGER," +
-                "    C_STRING," +
-                "    E_STRING)" +
-                "VALUES (?, ?, ?, ?, ?, ?)");
+                "upsert into " + pTSDBTableName+
+                        " (" +
+                        "    A_STRING, " +
+                        "    A_ID," +
+                        "    B_STRING," +
+                        "    A_INTEGER," +
+                        "    C_STRING," +
+                        "    E_STRING)" +
+                        "VALUES (?, ?, ?, ?, ?, ?)");
         stmt.setString(1, "abc");
         stmt.setString(2, "12");
         stmt.setString(3, "x");
@@ -1013,24 +982,23 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testTooLongPKColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),BTABLE_NAME, BTABLE_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        String bTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),bTableName, BTABLE_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
         // Insert all rows at ts
         PreparedStatement stmt = conn.prepareStatement(
-                "upsert into " +
-                "BTABLE(" +
-                "    A_STRING, " +
-                "    A_ID," +
-                "    B_STRING," +
-                "    A_INTEGER," +
-                "    C_STRING," +
-                "    E_STRING)" +
-                "VALUES (?, ?, ?, ?, ?, ?)");
+                "upsert into " + bTableName+
+                        "(" +
+                        "    A_STRING, " +
+                        "    A_ID," +
+                        "    B_STRING," +
+                        "    A_INTEGER," +
+                        "    C_STRING," +
+                        "    E_STRING)" +
+                        "VALUES (?, ?, ?, ?, ?, ?)");
         stmt.setString(1, "abc");
         stmt.setString(2, "123");
         stmt.setString(3, "x");
@@ -1050,25 +1018,24 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testTooLongKVColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),BTABLE_NAME, BTABLE_NAME, null, ts-2, null);
-
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Insert at timestamp 0
+        String bTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),bTableName, BTABLE_NAME, null, null, null);
+        String url = getUrl(); // Insert at timestamp 0
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
         // Insert all rows at ts
         PreparedStatement stmt = conn.prepareStatement(
-                "upsert into " +
-                "BTABLE(" +
-                "    A_STRING, " +
-                "    A_ID," +
-                "    B_STRING," +
-                "    A_INTEGER," +
-                "    C_STRING," +
-                "    D_STRING," +
-                "    E_STRING)" +
-                "VALUES (?, ?, ?, ?, ?, ?, ?)");
+                "upsert into " + bTableName+
+                        "(" +
+                        "    A_STRING, " +
+                        "    A_ID," +
+                        "    B_STRING," +
+                        "    A_INTEGER," +
+                        "    C_STRING," +
+                        "    D_STRING," +
+                        "    E_STRING)" +
+                        "VALUES (?, ?, ?, ?, ?, ?, ?)");
         stmt.setString(1, "abc");
         stmt.setString(2, "123");
         stmt.setString(3, "x");
@@ -1089,13 +1056,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testMultiFixedLengthNull() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT B_INTEGER,C_INTEGER,COUNT(1) FROM BTABLE GROUP BY B_INTEGER,C_INTEGER";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String bTableName = generateUniqueName();
+        String query = "SELECT B_INTEGER,C_INTEGER,COUNT(1) FROM "+bTableName+" GROUP BY B_INTEGER,C_INTEGER";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null, bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -1124,13 +1091,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSingleFixedLengthNull() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT C_INTEGER,COUNT(1) FROM BTABLE GROUP BY C_INTEGER";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String bTableName = generateUniqueName();
+        String query = "SELECT C_INTEGER,COUNT(1) FROM "+bTableName+" GROUP BY C_INTEGER";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -1150,13 +1117,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testMultiMixedTypeGroupBy() throws Exception {
-        long ts = nextTimestamp();
-        String query = "SELECT A_ID, E_STRING, D_STRING, C_INTEGER, COUNT(1) FROM BTABLE GROUP BY A_ID, E_STRING, D_STRING, C_INTEGER";
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String bTableName = generateUniqueName();
+        String query = "SELECT A_ID, E_STRING, D_STRING, C_INTEGER, COUNT(1) FROM "+bTableName+" GROUP BY A_ID, E_STRING, D_STRING, C_INTEGER";
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             PreparedStatement statement = conn.prepareStatement(query);
             ResultSet rs = statement.executeQuery();
             assertTrue(rs.next());
@@ -1189,46 +1156,48 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testSubstrFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
+        String varcharKeyTestTable = generateUniqueName();
         String query[] = {
-            "SELECT substr('ABC',-1,1) FROM BTABLE LIMIT 1",
-            "SELECT substr('ABC',-4,1) FROM BTABLE LIMIT 1",
-            "SELECT substr('ABC',2,4) FROM BTABLE LIMIT 1",
-            "SELECT substr('ABC',1,1) FROM BTABLE LIMIT 1",
-            "SELECT substr('ABC',0,1) FROM BTABLE LIMIT 1",
-            // Test for multibyte characters support.
-            "SELECT substr('ĎďĒ',0,1) FROM BTABLE LIMIT 1",
-            "SELECT substr('ĎďĒ',0,2) FROM BTABLE LIMIT 1",
-            "SELECT substr('ĎďĒ',1,1) FROM BTABLE LIMIT 1",
-            "SELECT substr('ĎďĒ',1,2) FROM BTABLE LIMIT 1",
-            "SELECT substr('ĎďĒ',2,1) FROM BTABLE LIMIT 1",
-            "SELECT substr('ĎďĒ',2,2) FROM BTABLE LIMIT 1",
-            "SELECT substr('ĎďĒ',-1,1) FROM BTABLE LIMIT 1",
-            "SELECT substr('Ďďɚʍ',2,4) FROM BTABLE LIMIT 1",
-            "SELECT pk FROM VarcharKeyTest WHERE substr(pk, 0, 3)='jkl'",
+                "SELECT substr('ABC',-1,1) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ABC',-4,1) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ABC',2,4) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ABC',1,1) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ABC',0,1) FROM "+bTableName+" LIMIT 1",
+                // Test for multibyte characters support.
+                "SELECT substr('ĎďĒ',0,1) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ĎďĒ',0,2) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ĎďĒ',1,1) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ĎďĒ',1,2) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ĎďĒ',2,1) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ĎďĒ',2,2) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('ĎďĒ',-1,1) FROM "+bTableName+" LIMIT 1",
+                "SELECT substr('Ďďɚʍ',2,4) FROM "+bTableName+" LIMIT 1",
+                "SELECT pk FROM "+varcharKeyTestTable+" WHERE substr(pk, 0, 3)='jkl'",
         };
         String result[] = {
-            "C",
-            null,
-            "BC",
-            "A",
-            "A",
-            "Ď",
-            "Ďď",
-            "Ď",
-            "Ďď",
-            "ď",
-            "ďĒ",
-            "Ē",
-            "ďɚʍ",
-            "jkl   ",
+                "C",
+                null,
+                "BC",
+                "A",
+                "A",
+                "Ď",
+                "Ďď",
+                "Ď",
+                "Ďď",
+                "ď",
+                "ďĒ",
+                "Ē",
+                "ďɚʍ",
+                "jkl   ",
         };
         assertEquals(query.length,result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
+            initVarcharKeyTableValues(null,varcharKeyTestTable);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1243,51 +1212,51 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testRegexReplaceFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
         // NOTE: we need to double escape the "\\" here because conn.prepareStatement would
         // also try to evaluate the escaping. As a result, to represent what normally would be
         // a "\d" in this test, it would become "\\\\d".
         String query[] = {
-            "SELECT regexp_replace('', '') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('', 'abc', 'def') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('123abcABC', '[a-z]+') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('123-abc-ABC', '-[a-zA-Z-]+') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('abcABC123', '\\\\d+', '') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('abcABC123', '\\\\D+', '') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('abc', 'abc', 'def') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('abc123ABC', '\\\\d+', 'def') FROM BTABLE LIMIT 1",
-            "SELECT regexp_replace('abc123ABC', '[0-9]+', '#') FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN regexp_replace('abcABC123', '[a-zA-Z]+') = '123' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT A_STRING FROM BTABLE WHERE A_ID = regexp_replace('abcABC111', '[a-zA-Z]+') LIMIT 1", // 111
-            // Test for multibyte characters support.
-            "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '[a-zA-Z]+') from BTABLE LIMIT 1",
-            "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '[Ď-ě]+', '#') from BTABLE LIMIT 1",
-            "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '.+', 'replacement') from BTABLE LIMIT 1",
-            "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', 'Ďď', 'DD') from BTABLE LIMIT 1",
+                "SELECT regexp_replace('', '') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('', 'abc', 'def') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('123abcABC', '[a-z]+') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('123-abc-ABC', '-[a-zA-Z-]+') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('abcABC123', '\\\\d+', '') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('abcABC123', '\\\\D+', '') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('abc', 'abc', 'def') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('abc123ABC', '\\\\d+', 'def') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('abc123ABC', '[0-9]+', '#') FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN regexp_replace('abcABC123', '[a-zA-Z]+') = '123' THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT A_STRING FROM "+bTableName+" WHERE A_ID = regexp_replace('abcABC111', '[a-zA-Z]+') LIMIT 1", // 111
+                // Test for multibyte characters support.
+                "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '[a-zA-Z]+') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '[Ď-ě]+', '#') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', '.+', 'replacement') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_replace('Ďď Ēĕ ĜĞ ϗϘϛϢ', 'Ďď', 'DD') FROM "+bTableName+" LIMIT 1",
         };
         String result[] = {
-            null,
-            null,
-            "123ABC",
-            "123",
-            "abcABC",
-            "123",
-            "def",
-            "abcdefABC",
-            "abc#ABC",
-            "1",
-            "abc", // the first column
-            "Ďď Ēĕ ĜĞ ϗϘϛϢ",
-            "# # ĜĞ ϗϘϛϢ",
-            "replacement",
-            "DD Ēĕ ĜĞ ϗϘϛϢ",
+                null,
+                null,
+                "123ABC",
+                "123",
+                "abcABC",
+                "123",
+                "def",
+                "abcdefABC",
+                "abc#ABC",
+                "1",
+                "abc", // the first column
+                "Ďď Ēĕ ĜĞ ϗϘϛϢ",
+                "# # ĜĞ ϗϘϛϢ",
+                "replacement",
+                "DD Ēĕ ĜĞ ϗϘϛϢ",
         };
         assertEquals(query.length,result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1302,54 +1271,54 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testRegexpSubstrFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
         String query[] = {
-            "SELECT regexp_substr('', '', 0) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('', '', 1) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('', 'abc', 0) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('abc', '', 0) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123', '123', 3) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123', '123', -4) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123ABC', '[a-z]+', 0) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123ABC', '[0-9]+', 4) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123ABCabc', '\\\\d+', 0) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123ABCabc', '\\\\D+', 0) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123ABCabc', '\\\\D+', 4) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('123ABCabc', '\\\\D+', 7) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('na11-app5-26-sjl', '[^-]+', 0) FROM BTABLE LIMIT 1",
-            "SELECT regexp_substr('na11-app5-26-sjl', '[^-]+') FROM BTABLE LIMIT 1",
-            // Test for multibyte characters support.
-            "SELECT regexp_substr('ĎďĒĕĜĞ', '.+') from BTABLE LIMIT 1",
-            "SELECT regexp_substr('ĎďĒĕĜĞ', '.+', 3) from BTABLE LIMIT 1",
-            "SELECT regexp_substr('ĎďĒĕĜĞ', '[a-zA-Z]+', 0) from BTABLE LIMIT 1",
-            "SELECT regexp_substr('ĎďĒĕĜĞ', '[Ď-ě]+', 3) from BTABLE LIMIT 1",
+                "SELECT regexp_substr('', '', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('', '', 1) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('', 'abc', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('abc', '', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123', '123', 3) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123', '123', -4) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123ABC', '[a-z]+', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123ABC', '[0-9]+', 4) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123ABCabc', '\\\\d+', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123ABCabc', '\\\\D+', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123ABCabc', '\\\\D+', 4) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('123ABCabc', '\\\\D+', 7) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('na11-app5-26-sjl', '[^-]+', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('na11-app5-26-sjl', '[^-]+') FROM "+bTableName+" LIMIT 1",
+                // Test for multibyte characters support.
+                "SELECT regexp_substr('ĎďĒĕĜĞ', '.+') FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('ĎďĒĕĜĞ', '.+', 3) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('ĎďĒĕĜĞ', '[a-zA-Z]+', 0) FROM "+bTableName+" LIMIT 1",
+                "SELECT regexp_substr('ĎďĒĕĜĞ', '[Ď-ě]+', 3) FROM "+bTableName+" LIMIT 1",
         };
         String result[] = {
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            null,
-            "123",
-            "ABCabc",
-            "ABCabc",
-            "abc",
-            "na11",
-            "na11",
-            "ĎďĒĕĜĞ",
-            "ĒĕĜĞ",
-            null,
-            "Ēĕ",
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                "123",
+                "ABCabc",
+                "ABCabc",
+                "abc",
+                "na11",
+                "na11",
+                "ĎďĒĕĜĞ",
+                "ĒĕĜĞ",
+                null,
+                "Ēĕ",
         };
         assertEquals(query.length,result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1364,17 +1333,15 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testRegexpSubstrFunction2() throws Exception {
-        long ts = nextTimestamp();
+        String tTableName = generateUniqueName();
         String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
-        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts));
         Connection conn = DriverManager.getConnection(url, props);
-        String ddl = "create table t (k INTEGER NOT NULL PRIMARY KEY, name VARCHAR)";
+        String ddl = "create table " + tTableName + " (k INTEGER NOT NULL PRIMARY KEY, name VARCHAR)";
         conn.createStatement().execute(ddl);
         conn.close();
 
-        String dml = "upsert into t values(?,?)";
-        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts+2));
+        String dml = "upsert into " + tTableName + " values(?,?)";
         conn = DriverManager.getConnection(url, props);
         PreparedStatement stmt = conn.prepareStatement(dml);
         String[] values = new String[] {"satax","jruls","hrjcu","yqtrv","jjcvw"};
@@ -1388,8 +1355,7 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
         // This matches what Oracle returns for regexp_substr, even through
         // it seems oke for "satax", it should return null.
-        String query = "select regexp_substr(name,'[^s]+',1) from t limit 5";
-        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts+5));
+        String query = "select regexp_substr(name,'[^s]+',1) from " + tTableName + " limit 5";
         conn = DriverManager.getConnection(url, props);
         ResultSet rs = conn.createStatement().executeQuery(query);
         int count = 0;
@@ -1402,27 +1368,27 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testLikeConstant() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
         String query[] = {
-            "SELECT CASE WHEN 'ABC' LIKE '' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN 'ABC' LIKE 'A_' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN 'ABC' LIKE 'A__' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN 'AB_C' LIKE 'AB\\_C' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN 'ABC%DE' LIKE 'ABC\\%D%' THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
+                "SELECT CASE WHEN 'ABC' LIKE '' THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN 'ABC' LIKE 'A_' THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN 'ABC' LIKE 'A__' THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN 'AB_C' LIKE 'AB\\_C' THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN 'ABC%DE' LIKE 'ABC\\%D%' THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
         };
         String result[] = {
-            "2",
-            "2",
-            "1",
-            "1",
-            "1",
+                "2",
+                "2",
+                "1",
+                "1",
+                "1",
         };
         assertEquals(query.length,result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1437,35 +1403,36 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testInListConstant() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
+
         String query[] = {
-            "SELECT CASE WHEN 'a' IN (null,'a') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN NOT 'a' IN (null,'b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN 'a' IN (null,'b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN NOT 'a' IN ('c','b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN 1 IN ('foo',2,1) THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN NOT null IN ('c','b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN NOT null IN (null,'c','b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN null IN (null,'c','b') THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
-            "SELECT CASE WHEN 'a' IN (null,1) THEN '1' ELSE '2' END FROM BTABLE LIMIT 1",
+                "SELECT CASE WHEN 'a' IN (null,'a') THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN NOT 'a' IN (null,'b') THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN 'a' IN (null,'b') THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN NOT 'a' IN ('c','b') THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN 1 IN ('foo',2,1) THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN NOT null IN ('c','b') THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN NOT null IN (null,'c','b') THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN null IN (null,'c','b') THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
+                "SELECT CASE WHEN 'a' IN (null,1) THEN '1' ELSE '2' END FROM "+bTableName+" LIMIT 1",
         };
         String result[] = {
-            "1",
-            "1",
-            "2",
-            "1",
-            "1",
-            "2",
-            "2",
-            "2",
-            "2"
+                "1",
+                "1",
+                "2",
+                "1",
+                "1",
+                "2",
+                "2",
+                "2",
+                "2"
         };
         assertEquals(query.length,result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1480,14 +1447,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testLikeOnColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, PTSDB_NAME, null, null, null);
         // Insert all rows at ts
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts;
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
-        PreparedStatement stmt = conn.prepareStatement("upsert into PTSDB VALUES (?, ?, ?, 0.5)");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDBTableName+" VALUES (?, ?, ?, 0.5)");
         stmt.setDate(3, D1);
 
         stmt.setString(1, "a");
@@ -1521,13 +1487,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         conn.commit();
         conn.close();
 
-        url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        url = getUrl();
         conn = DriverManager.getConnection(url, props);
         PreparedStatement statement;
         ResultSet rs;
         try {
             // Test 1
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST LIKE 'x%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE INST LIKE 'x%'");
             rs = statement.executeQuery();
 
             assertTrue(rs.next());
@@ -1548,7 +1514,7 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
             assertFalse(rs.next());
 
             // Test 2
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST LIKE 'xy_a%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE INST LIKE 'xy_a%'");
             rs = statement.executeQuery();
 
             assertTrue(rs.next());
@@ -1560,7 +1526,7 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
             assertFalse(rs.next());
 
             // Test 3
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST NOT LIKE 'xy_a%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE INST NOT LIKE 'xy_a%'");
             rs = statement.executeQuery();
 
             assertTrue(rs.next());
@@ -1581,12 +1547,12 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
             assertFalse(rs.next());
 
             // Test 4
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE 'xzabc' LIKE 'xy_a%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE 'xzabc' LIKE 'xy_a%'");
             rs = statement.executeQuery();
             assertFalse(rs.next());
 
             // Test 5
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE 'abcdef' LIKE '%bCd%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE 'abcdef' LIKE '%bCd%'");
             rs = statement.executeQuery();
             assertFalse(rs.next());
 
@@ -1597,14 +1563,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testILikeOnColumn() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, PTSDB_NAME, null, null, null);
         // Insert all rows at ts
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts;
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
-        PreparedStatement stmt = conn.prepareStatement("upsert into PTSDB(INST, HOST, \"DATE\", VAL, PATTERN VARCHAR) VALUES (?, ?, ?, 0.5, 'x_Z%')");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDBTableName+"(INST, HOST, \"DATE\", VAL, PATTERN VARCHAR) VALUES (?, ?, ?, 0.5, 'x_Z%')");
         stmt.setDate(3, D1);
 
         stmt.setString(1, "a");
@@ -1638,13 +1603,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
         conn.commit();
         conn.close();
 
-        url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        url = getUrl();
         conn = DriverManager.getConnection(url, props);
         PreparedStatement statement;
         ResultSet rs;
         try {
             // Test 1
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST ILIKE 'x%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE INST ILIKE 'x%'");
             rs = statement.executeQuery();
 
             assertTrue(rs.next());
@@ -1665,7 +1630,7 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
             assertFalse(rs.next());
 
             // Test 2
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST ILIKE 'xy_a%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE INST ILIKE 'xy_a%'");
             rs = statement.executeQuery();
 
             assertTrue(rs.next());
@@ -1677,7 +1642,7 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
             assertFalse(rs.next());
 
             // Test 3
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE INST NOT ILIKE 'xy_a%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE INST NOT ILIKE 'xy_a%'");
             rs = statement.executeQuery();
 
             assertTrue(rs.next());
@@ -1698,17 +1663,17 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
             assertFalse(rs.next());
 
             // Test 4
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE 'xzabc' ILIKE 'xy_a%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE 'xzabc' ILIKE 'xy_a%'");
             rs = statement.executeQuery();
             assertFalse(rs.next());
 
             // Test 5
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB WHERE 'abcdef' ILIKE '%bCd%'");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+" WHERE 'abcdef' ILIKE '%bCd%'");
             rs = statement.executeQuery();
             assertTrue(rs.next());
 
             // Test 5
-            statement = conn.prepareStatement("SELECT INST FROM PTSDB(PATTERN VARCHAR) WHERE INST ILIKE PATTERN");
+            statement = conn.prepareStatement("SELECT INST FROM "+pTSDBTableName+"(PATTERN VARCHAR) WHERE INST ILIKE PATTERN");
             rs = statement.executeQuery();
 
             assertTrue(rs.next());
@@ -1729,21 +1694,19 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testIsNullInPK() throws Exception {
-        long ts = nextTimestamp();
-        ensureTableCreated(getUrl(),PTSDB_NAME, PTSDB_NAME, null, ts-2, null);
-
-        // Insert all rows at ts
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts;
+        String pTSDBTableName = generateUniqueName();
+        ensureTableCreated(getUrl(),pTSDBTableName, PTSDB_NAME, null, null, null);
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         conn.setAutoCommit(true);
-        PreparedStatement stmt = conn.prepareStatement("upsert into PTSDB VALUES ('', '', ?, 0.5)");
+        PreparedStatement stmt = conn.prepareStatement("upsert into "+pTSDBTableName+" VALUES ('', '', ?, 0.5)");
         stmt.setDate(1, D1);
         stmt.execute();
         conn.close();
 
-        String query = "SELECT HOST,INST,\"DATE\" FROM PTSDB WHERE HOST IS NULL AND INST IS NULL AND \"DATE\"=?";
-        url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String query = "SELECT HOST,INST,\"DATE\" FROM "+pTSDBTableName+" WHERE HOST IS NULL AND INST IS NULL AND \"DATE\"=?";
+        url = getUrl();
         conn = DriverManager.getConnection(url, props);
         try {
             PreparedStatement statement = conn.prepareStatement(query);
@@ -1761,33 +1724,33 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testLengthFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
         String query[] = {
-            "SELECT length('') FROM BTABLE LIMIT 1",
-            "SELECT length(' ') FROM BTABLE LIMIT 1",
-            "SELECT length('1') FROM BTABLE LIMIT 1",
-            "SELECT length('1234') FROM BTABLE LIMIT 1",
-            "SELECT length('ɚɦɰɸ') FROM BTABLE LIMIT 1",
-            "SELECT length('ǢǛǟƈ') FROM BTABLE LIMIT 1",
-            "SELECT length('This is a test!') FROM BTABLE LIMIT 1",
-            "SELECT A_STRING FROM BTABLE WHERE length(A_STRING)=3",
+                "SELECT length('') FROM "+bTableName+" LIMIT 1",
+                "SELECT length(' ') FROM "+bTableName+" LIMIT 1",
+                "SELECT length('1') FROM "+bTableName+" LIMIT 1",
+                "SELECT length('1234') FROM "+bTableName+" LIMIT 1",
+                "SELECT length('ɚɦɰɸ') FROM "+bTableName+" LIMIT 1",
+                "SELECT length('ǢǛǟƈ') FROM "+bTableName+" LIMIT 1",
+                "SELECT length('This is a test!') FROM "+bTableName+" LIMIT 1",
+                "SELECT A_STRING FROM "+bTableName+" WHERE length(A_STRING)=3",
         };
         String result[] = {
-            null,
-            "1",
-            "1",
-            "4",
-            "4",
-            "4",
-            "15",
-            "abc",
+                null,
+                "1",
+                "1",
+                "4",
+                "4",
+                "4",
+                "15",
+                "abc",
         };
         assertEquals(query.length,result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1802,13 +1765,13 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testUpperFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
         String query[] = {
-                "SELECT upper('abc') FROM BTABLE LIMIT 1",
-                "SELECT upper('Abc') FROM BTABLE LIMIT 1",
-                "SELECT upper('ABC') FROM BTABLE LIMIT 1",
-                "SELECT upper('ĎďĒ') FROM BTABLE LIMIT 1",
-                "SELECT upper('ß') FROM BTABLE LIMIT 1",
+                "SELECT upper('abc') FROM "+bTableName+" LIMIT 1",
+                "SELECT upper('Abc') FROM "+bTableName+" LIMIT 1",
+                "SELECT upper('ABC') FROM "+bTableName+" LIMIT 1",
+                "SELECT upper('ĎďĒ') FROM "+bTableName+" LIMIT 1",
+                "SELECT upper('ß') FROM "+bTableName+" LIMIT 1",
         };
         String result[] = {
                 "ABC",
@@ -1818,11 +1781,11 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
                 "SS",
         };
         assertEquals(query.length, result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1837,14 +1800,14 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testLowerFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
         String query[] = {
-                "SELECT lower('abc') FROM BTABLE LIMIT 1",
-                "SELECT lower('Abc') FROM BTABLE LIMIT 1",
-                "SELECT lower('ABC') FROM BTABLE LIMIT 1",
-                "SELECT lower('ĎďĒ') FROM BTABLE LIMIT 1",
-                "SELECT lower('ß') FROM BTABLE LIMIT 1",
-                "SELECT lower('SS') FROM BTABLE LIMIT 1",
+                "SELECT lower('abc') FROM "+bTableName+" LIMIT 1",
+                "SELECT lower('Abc') FROM "+bTableName+" LIMIT 1",
+                "SELECT lower('ABC') FROM "+bTableName+" LIMIT 1",
+                "SELECT lower('ĎďĒ') FROM "+bTableName+" LIMIT 1",
+                "SELECT lower('ß') FROM "+bTableName+" LIMIT 1",
+                "SELECT lower('SS') FROM "+bTableName+" LIMIT 1",
         };
         String result[] = {
                 "abc",
@@ -1855,11 +1818,11 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
                 "ss",
         };
         assertEquals(query.length, result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1874,35 +1837,37 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testRTrimFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
+        String varcharKeyTestTable = generateUniqueName();
         String query[] = {
-            "SELECT rtrim('') FROM BTABLE LIMIT 1",
-            "SELECT rtrim(' ') FROM BTABLE LIMIT 1",
-            "SELECT rtrim('   ') FROM BTABLE LIMIT 1",
-            "SELECT rtrim('abc') FROM BTABLE LIMIT 1",
-            "SELECT rtrim('abc   ') FROM BTABLE LIMIT 1",
-            "SELECT rtrim('abc   def') FROM BTABLE LIMIT 1",
-            "SELECT rtrim('abc   def   ') FROM BTABLE LIMIT 1",
-            "SELECT rtrim('ĎďĒ   ') FROM BTABLE LIMIT 1",
-            "SELECT pk FROM VarcharKeyTest WHERE rtrim(pk)='jkl' LIMIT 1",
+                "SELECT rtrim('') FROM "+bTableName+" LIMIT 1",
+                "SELECT rtrim(' ') FROM "+bTableName+" LIMIT 1",
+                "SELECT rtrim('   ') FROM "+bTableName+" LIMIT 1",
+                "SELECT rtrim('abc') FROM "+bTableName+" LIMIT 1",
+                "SELECT rtrim('abc   ') FROM "+bTableName+" LIMIT 1",
+                "SELECT rtrim('abc   def') FROM "+bTableName+" LIMIT 1",
+                "SELECT rtrim('abc   def   ') FROM "+bTableName+" LIMIT 1",
+                "SELECT rtrim('ĎďĒ   ') FROM "+bTableName+" LIMIT 1",
+                "SELECT pk FROM "+varcharKeyTestTable+" WHERE rtrim(pk)='jkl' LIMIT 1",
         };
         String result[] = {
-            null,
-            null,
-            null,
-            "abc",
-            "abc",
-            "abc   def",
-            "abc   def",
-            "ĎďĒ",
-            "jkl   ",
+                null,
+                null,
+                null,
+                "abc",
+                "abc",
+                "abc   def",
+                "abc   def",
+                "ĎďĒ",
+                "jkl   ",
         };
         assertEquals(query.length, result.length);
-        String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
+        String url = getUrl();
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(url, props);
         try {
-            initTableValues(null, ts);
+            initBTableValues(null,bTableName);
+            initVarcharKeyTableValues(null,varcharKeyTestTable);
             for (int i = 0; i < query.length; i++) {
                 PreparedStatement statement = conn.prepareStatement(query[i]);
                 ResultSet rs = statement.executeQuery();
@@ -1917,35 +1882,37 @@ public class VariableLengthPKIT extends BaseClientManagedTimeIT {
 
     @Test
     public void testLTrimFunction() throws Exception {
-        long ts = nextTimestamp();
+        String bTableName = generateUniqueName();
+        String varcharKeyTestTable = generateUniqueName();
         String query[] = {
-            "SELECT ltrim('') FROM BTABLE LIMIT 1",
-            "SELECT ltrim(' ') FROM BTABLE LIMIT 1",
-            "SELECT ltrim('   ') FROM BTABLE LIMIT 1",
-            "SELECT ltrim('abc') FROM BTABLE LIMIT 1",
-            "SELECT ltrim('   abc') FROM BTABLE LIMIT 1",
-            "SELECT ltrim('abc   def') FROM BTABLE LIMIT 1",
-            "SELECT ltrim('   abc   def') FROM BTABLE LIMIT 1",
-            "SELECT ltrim('   ĎďĒ') FROM BTABLE LIMIT 1",
-            "SELECT pk FROM VarcharKeyTest WHERE ltrim(pk)='def' LIMIT 1",
+                "SELECT ltrim('') FROM "+bTableName+" LIMIT 1",
+                "SELECT ltrim(' ') FROM "+bTableName+" LIMIT 1",
+                "SELECT ltrim('   ') FROM "+bTableName+" LIMIT 1",
+                "SELECT ltrim('abc') FROM "+bTableName+" LIMIT 1",
+                "SELECT ltrim('   abc') FROM "+bTableName+" LIMIT 1",
+                "SELECT ltrim('abc   def') FROM "+bTableName+" LIMIT 1",
+                "SELECT ltrim('   abc   def') FROM "+bTableName+" LIMIT 1",
+                "SELECT ltrim('   ĎďĒ') FROM "+bTableName+" LIMIT 1",
+                "SELECT pk FROM "+varcharKeyTestTable+" WHERE ltrim(pk)='def' LIMIT 1",
         };
         String result[] = {
-            null,
-            null,
-            null,
-            "abc",
-            "abc",
-            "abc   def",
-            "abc   def",
-            "ĎďĒ",
-            "   def",
+            

<TRUNCATED>