http://git-wip-us.apache.org/repos/asf/phoenix/blob/7e432be7/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
index 8c804bb..68fcae3 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/LocalIndexIT.java
@@ -30,6 +30,8 @@ import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -73,19 +75,38 @@ import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.MetaDataUtil;
 import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
+import org.apache.phoenix.util.SchemaUtil;
 import org.apache.phoenix.util.StringUtil;
 import org.apache.phoenix.util.TestUtil;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 import com.google.common.collect.Maps;
 
+@RunWith(Parameterized.class)
 public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     private static CountDownLatch latch1 = new CountDownLatch(1);
     private static CountDownLatch latch2 = new CountDownLatch(1);
     private static final int WAIT_TIME_SECONDS = 60;
+    private String schemaName="TEST";
+    private boolean isNamespaceMapped;
+    private String tableName = schemaName + ".T";
+    private String indexTableName = schemaName + ".I";
+    private String indexName = "I";
+    private String indexPhysicalTableName;
+    private TableName physicalTableName;
 
+    public LocalIndexIT(boolean isNamespaceMapped) {
+        this.isNamespaceMapped = isNamespaceMapped;
+        this.physicalTableName = 
SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
+        this.indexPhysicalTableName = Bytes
+                
.toString(MetaDataUtil.getLocalIndexPhysicalName(physicalTableName.getName()));
+    }
+    
     @BeforeClass 
     @Shadower(classBeingShadowed = BaseHBaseManagedTimeIT.class)
     public static void doSetup() throws Exception {
@@ -97,7 +118,10 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
     }
 
     private void createBaseTable(String tableName, Integer saltBuckets, String 
splits) throws SQLException {
-        Connection conn = DriverManager.getConnection(getUrl());
+        Connection conn = getConnection();
+        if (isNamespaceMapped) {
+            conn.createStatement().execute("CREATE SCHEMA IF NOT EXISTS " + 
schemaName);
+        }
         String ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT 
NULL,\n" +
                 "k1 INTEGER NOT NULL,\n" +
                 "k2 INTEGER NOT NULL,\n" +
@@ -109,79 +133,94 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
         conn.createStatement().execute(ddl);
         conn.close();
     }
-    
+
+    @Parameters(name = "isNamespaceMapped = {0}")
+    public static Collection<Boolean> data() {
+        return Arrays.asList(true, false);
+    }
+
     @Test
     public void testLocalIndexRoundTrip() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, null);
+        createBaseTable(tableName, null, null);
         Connection conn1 = DriverManager.getConnection(getUrl());
-        conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-        conn1.createStatement().executeQuery("SELECT * FROM " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME).next();
-        PTable localIndex = conn1.unwrap(PhoenixConnection.class).getTable(new 
PTableKey(null,TestUtil.DEFAULT_INDEX_TABLE_NAME));
+        conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " 
ON " + tableName + "(v1)");
+        conn1.createStatement().executeQuery("SELECT * FROM " + 
tableName).next();
+        PTable localIndex = conn1.unwrap(PhoenixConnection.class).getTable(new 
PTableKey(null, indexTableName));
         assertEquals(IndexType.LOCAL, localIndex.getIndexType());
         assertNotNull(localIndex.getViewIndexId());
     }
-    
+
     @Test
     public void testLocalIndexCreationWithSplitsShouldFail() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, null);
-        Connection conn1 = DriverManager.getConnection(getUrl());
-        Connection conn2 = DriverManager.getConnection(getUrl());
+        createBaseTable(tableName, null, null);
+        Connection conn1 = getConnection();
+        Connection conn2 = getConnection();
         try {
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)"+" split on (1,2,3)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)"+" split on (1,2,3)");
             fail("Local index cannot be pre-split");
         } catch (SQLException e) { }
         try {
-            conn2.createStatement().executeQuery("SELECT * FROM " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME).next();
-            conn2.unwrap(PhoenixConnection.class).getTable(new 
PTableKey(null,TestUtil.DEFAULT_INDEX_TABLE_NAME));
+            conn2.createStatement().executeQuery("SELECT * FROM " + 
tableName).next();
+            conn2.unwrap(PhoenixConnection.class).getTable(new 
PTableKey(null,indexName));
             fail("Local index should not be created.");
         } catch (TableNotFoundException e) { }
     }
 
     @Test
     public void testLocalIndexCreationWithSaltingShouldFail() throws Exception 
{
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, null);
-        Connection conn1 = DriverManager.getConnection(getUrl());
-        Connection conn2 = DriverManager.getConnection(getUrl());
+        createBaseTable(tableName, null, null);
+        Connection conn1 = getConnection();
+        Connection conn2 = getConnection();
         try {
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)"+" salt_buckets=16");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)"+" salt_buckets=16");
             fail("Local index cannot be salted.");
         } catch (SQLException e) { }
         try {
-            conn2.createStatement().executeQuery("SELECT * FROM " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME).next();
-            conn2.unwrap(PhoenixConnection.class).getTable(new 
PTableKey(null,TestUtil.DEFAULT_INDEX_TABLE_NAME));
+            conn2.createStatement().executeQuery("SELECT * FROM " + 
tableName).next();
+            conn2.unwrap(PhoenixConnection.class).getTable(new 
PTableKey(null,indexName));
             fail("Local index should not be created.");
         } catch (TableNotFoundException e) { }
     }
 
     @Test
     public void testLocalIndexTableRegionSplitPolicyAndSplitKeys() throws 
Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, 
null,"('e','i','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
-        Connection conn2 = DriverManager.getConnection(getUrl());
-        conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-        conn2.createStatement().executeQuery("SELECT * FROM " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME).next();
+        createBaseTable(tableName, null,"('e','i','o')");
+        Connection conn1 = getConnection();
+        Connection conn2 = getConnection();
+        conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " 
ON " + tableName + "(v1)");
+        conn2.createStatement().executeQuery("SELECT * FROM " + 
tableName).next();
         HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-        HTableDescriptor htd = 
admin.getTableDescriptor(TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)));
+        HTableDescriptor htd = admin
+                .getTableDescriptor(Bytes.toBytes(indexPhysicalTableName));
         assertEquals(IndexRegionSplitPolicy.class.getName(), 
htd.getValue(HTableDescriptor.SPLIT_POLICY));
-        try (HTable userTable = new 
HTable(admin.getConfiguration(),TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME)))
 {
-            try (HTable indexTable = new 
HTable(admin.getConfiguration(),TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME))))
 {
-                assertArrayEquals("Both user table and index table should have 
same split keys.", userTable.getStartKeys(), indexTable.getStartKeys());
+        try (HTable userTable = new HTable(admin.getConfiguration(),
+                SchemaUtil.getPhysicalTableName(tableName.getBytes(), 
isNamespaceMapped))) {
+            try (HTable indexTable = new HTable(admin.getConfiguration(), 
Bytes.toBytes(indexPhysicalTableName))) {
+                assertArrayEquals("Both user table and index table should have 
same split keys.",
+                        userTable.getStartKeys(), indexTable.getStartKeys());
             }
         }
     }
+    
+    public Connection getConnection() throws SQLException{
+        Properties props = new Properties();
+        props.put(QueryServices.DROP_METADATA_ATTRIB, Boolean.toString(true));
+        props.put(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, 
Boolean.toString(isNamespaceMapped));
+        return DriverManager.getConnection(getUrl(),props);
+    }
 
     @Test
     public void testDropLocalIndexTable() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, null);
-        Connection conn1 = DriverManager.getConnection(getUrl());
-        Connection conn2 = DriverManager.getConnection(getUrl());
-        conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-        conn2.createStatement().executeQuery("SELECT * FROM " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME).next();
+        createBaseTable(tableName, null, null);
+        Connection conn1 = getConnection();
+        Connection conn2 = getConnection();
+        conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " 
ON " + tableName + "(v1)");
+        conn2.createStatement().executeQuery("SELECT * FROM " + 
tableName).next();
         HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-        assertTrue("Local index table should be present.", 
admin.tableExists(TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME))));
-        conn1.createStatement().execute("DROP TABLE "+ 
TestUtil.DEFAULT_DATA_TABLE_NAME);
+        assertTrue("Local index table should be present.", 
admin.tableExists(indexPhysicalTableName));
+        conn1.createStatement().execute("DROP TABLE "+ tableName);
         admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-        assertFalse("Local index table should be deleted.", 
admin.tableExists(TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME))));
+        assertFalse("Local index table should be deleted.", 
admin.tableExists(indexPhysicalTableName));
         ResultSet rs = conn2.createStatement().executeQuery("SELECT "
                 + PhoenixDatabaseMetaData.SEQUENCE_SCHEMA + ","
                 + PhoenixDatabaseMetaData.SEQUENCE_NAME
@@ -191,19 +230,19 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
     
     @Test
     public void testPutsToLocalIndexTable() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
-        conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('b',1,2,4,'z')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('f',1,2,3,'z')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('j',2,4,2,'a')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('q',3,1,1,'c')");
+        createBaseTable(tableName, null, "('e','i','o')");
+        Connection conn1 = getConnection();
+        conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " 
ON " + tableName + "(v1)");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('b',1,2,4,'z')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('f',1,2,3,'z')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('j',2,4,2,'a')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('q',3,1,1,'c')");
         conn1.commit();
-        ResultSet rs = conn1.createStatement().executeQuery("SELECT COUNT(*) 
FROM " + TestUtil.DEFAULT_INDEX_TABLE_NAME);
+        ResultSet rs = conn1.createStatement().executeQuery("SELECT COUNT(*) 
FROM " + indexTableName);
         assertTrue(rs.next());
         assertEquals(4, rs.getInt(1));
         HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-        HTable indexTable = new HTable(admin.getConfiguration() 
,TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)));
+        HTable indexTable = new HTable(admin.getConfiguration(), 
indexPhysicalTableName);
         Pair<byte[][], byte[][]> startEndKeys = indexTable.getStartEndKeys();
         byte[][] startKeys = startEndKeys.getFirst();
         byte[][] endKeys = startEndKeys.getSecond();
@@ -224,19 +263,19 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
     
     @Test
     public void testBuildIndexWhenUserTableAlreadyHasData() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
+        createBaseTable(tableName, null, "('e','i','o')");
         Connection conn1 = DriverManager.getConnection(getUrl());
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('b',1,2,4,'z')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('f',1,2,3,'z')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('j',2,4,2,'a')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('q',3,1,1,'c')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('b',1,2,4,'z')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('f',1,2,3,'z')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('j',2,4,2,'a')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('q',3,1,1,'c')");
         conn1.commit();
-        conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-        ResultSet rs = conn1.createStatement().executeQuery("SELECT COUNT(*) 
FROM " + TestUtil.DEFAULT_INDEX_TABLE_NAME);
+        conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " 
ON " + tableName + "(v1)");
+        ResultSet rs = conn1.createStatement().executeQuery("SELECT COUNT(*) 
FROM " + indexTableName);
         assertTrue(rs.next());
         assertEquals(4, rs.getInt(1));
         HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-        HTable indexTable = new HTable(admin.getConfiguration() 
,TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)));
+        HTable indexTable = new 
HTable(admin.getConfiguration(),Bytes.toBytes(indexPhysicalTableName));
         Pair<byte[][], byte[][]> startEndKeys = indexTable.getStartEndKeys();
         byte[][] startKeys = startEndKeys.getFirst();
         byte[][] endKeys = startEndKeys.getSecond();
@@ -257,30 +296,30 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexScan() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
+        createBaseTable(tableName, null, "('e','i','o')");
         Connection conn1 = DriverManager.getConnection(getUrl());
         try{
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('a',1,2,5,'y')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('b',1,2,4,'z')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('f',1,2,3,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('e',1,2,3,'b')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('j',2,4,2,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('q',3,1,1,'c')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('a',1,2,5,'y')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('b',1,2,4,'z')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('f',1,2,3,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('e',1,2,3,'b')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('j',2,4,2,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('q',3,1,1,'c')");
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
             
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + TestUtil.DEFAULT_INDEX_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + indexTableName);
             assertTrue(rs.next());
             
             HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-            int numRegions = 
admin.getTableRegions(TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME)).size();
+            int numRegions = admin.getTableRegions(physicalTableName).size();
             
-            String query = "SELECT * FROM " + TestUtil.DEFAULT_DATA_TABLE_NAME 
+" where v1 like 'a%'";
+            String query = "SELECT * FROM " + tableName +" where v1 like 'a%'";
             rs = conn1.createStatement().executeQuery("EXPLAIN "+ query);
             
             assertEquals(
                 "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME) + " 
[-32768,'a'] - [-32768,'b']\n"
+                        + indexPhysicalTableName + " [-32768,'a'] - 
[-32768,'b']\n"
                                 + "    SERVER FILTER BY FIRST KEY ONLY\n"
                                 + "CLIENT MERGE SORT",
                         QueryUtil.getExplainPlan(rs));
@@ -299,12 +338,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             assertEquals("a", rs.getString("v1"));
             assertEquals(2, rs.getInt("k3"));
             assertFalse(rs.next());
-            query = "SELECT t_id, k1, k2,V1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME +" where v1='a'";
+            query = "SELECT t_id, k1, k2,V1 FROM " + tableName +" where 
v1='a'";
             rs = conn1.createStatement().executeQuery("EXPLAIN "+ query);
             
             assertEquals(
                 "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME) + " 
[-32768,'a']\n"
+                        + indexPhysicalTableName + " [-32768,'a']\n"
                         + "    SERVER FILTER BY FIRST KEY ONLY\n"
                         + "CLIENT MERGE SORT",
                         QueryUtil.getExplainPlan(rs));
@@ -319,14 +358,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             assertEquals(2, rs.getInt("k1"));
             assertEquals(4, rs.getInt("k2"));
             assertFalse(rs.next());
-            query = "SELECT t_id, k1, k2,V1, k3 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME +" where v1<='z' order by k3";
+            query = "SELECT t_id, k1, k2,V1, k3 FROM " + tableName +" where 
v1<='z' order by k3";
             rs = conn1.createStatement().executeQuery("EXPLAIN "+ query);
             
-            assertEquals(
-                  "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER " + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME) + " 
[-32768,*] - [-32768,'z']\n"
-                + "    SERVER FILTER BY FIRST KEY ONLY\n"
-                + "    SERVER SORTED BY [\"K3\"]\n" +
-                "CLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
+            assertEquals("CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN 
OVER " + indexPhysicalTableName
+                    + " [-32768,*] - [-32768,'z']\n" + "    SERVER FILTER BY 
FIRST KEY ONLY\n"
+                    + "    SERVER SORTED BY [\"K3\"]\n" + "CLIENT MERGE SORT", 
QueryUtil.getExplainPlan(rs));
  
             rs = conn1.createStatement().executeQuery(query);
             assertTrue(rs.next());
@@ -343,12 +380,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             assertEquals(5, rs.getInt("k3"));
             assertFalse(rs.next());
             
-            query = "SELECT t_id, k1, k2,v1 from " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME + " order by V1,t_id";
+            query = "SELECT t_id, k1, k2,v1 from " + tableName + " order by 
V1,t_id";
             rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
             
             assertEquals(
                 "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)+" 
[-32768]\n"
+                        + indexPhysicalTableName +" [-32768]\n"
                         + "    SERVER FILTER BY FIRST KEY ONLY\n"
                         + "CLIENT MERGE SORT",
                 QueryUtil.getExplainPlan(rs));
@@ -391,28 +428,28 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexScanJoinColumnsFromDataTable() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
+        createBaseTable(tableName, null, "('e','i','o')");
+        Connection conn1 = getConnection();
         try{
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('b',1,2,4,'z')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('f',1,2,3,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('j',2,4,2,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('q',3,1,1,'c')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('b',1,2,4,'z')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('f',1,2,3,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('j',2,4,2,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('q',3,1,1,'c')");
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
             
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + TestUtil.DEFAULT_INDEX_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + indexTableName);
             assertTrue(rs.next());
             
             HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-            int numRegions = 
admin.getTableRegions(TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME)).size();
+            int numRegions = admin.getTableRegions(physicalTableName).size();
             
-            String query = "SELECT t_id, k1, k2, k3, V1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME +" where v1='a'";
+            String query = "SELECT t_id, k1, k2, k3, V1 FROM " + tableName +" 
where v1='a'";
             rs = conn1.createStatement().executeQuery("EXPLAIN "+ query);
             
             assertEquals(
                 "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME) + " 
[-32768,'a']\n"
+                        + indexPhysicalTableName + " [-32768,'a']\n"
                                 + "    SERVER FILTER BY FIRST KEY ONLY\n"
                                 + "CLIENT MERGE SORT",
                         QueryUtil.getExplainPlan(rs));
@@ -430,12 +467,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             assertEquals(2, rs.getInt("k3"));
             assertFalse(rs.next());
             
-            query = "SELECT t_id, k1, k2, k3, V1 from " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME + "  where v1<='z' order by V1,t_id";
+            query = "SELECT t_id, k1, k2, k3, V1 from " + tableName + "  where 
v1<='z' order by V1,t_id";
             rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
             
             assertEquals(
                 "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)+" 
[-32768,*] - [-32768,'z']\n"
+                        + indexPhysicalTableName +" [-32768,*] - 
[-32768,'z']\n"
                         + "    SERVER FILTER BY FIRST KEY ONLY\n"
                          + "CLIENT MERGE SORT",
                 QueryUtil.getExplainPlan(rs));
@@ -466,12 +503,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             assertEquals(4, rs.getInt("k3"));
             assertEquals("z", rs.getString("V1"));
             
-            query = "SELECT t_id, V1, k3 from " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME + "  where v1 <='z' group by v1,t_id, k3";
+            query = "SELECT t_id, V1, k3 from " + tableName + "  where v1 
<='z' group by v1,t_id, k3";
             rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
             
             assertEquals(
                 "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)+" 
[-32768,*] - [-32768,'z']\n"
+                        + indexPhysicalTableName +" [-32768,*] - 
[-32768,'z']\n"
                         + "    SERVER FILTER BY FIRST KEY ONLY\n"
                         + "    SERVER AGGREGATE INTO DISTINCT ROWS BY [\"V1\", 
\"T_ID\", \"K3\"]\nCLIENT MERGE SORT",
                 QueryUtil.getExplainPlan(rs));
@@ -494,12 +531,12 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             assertEquals(4, rs.getInt("k3"));
             assertEquals("z", rs.getString("V1"));
             
-            query = "SELECT v1,sum(k3) from " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME + " where v1 <='z'  group by v1 order by 
v1";
+            query = "SELECT v1,sum(k3) from " + tableName + " where v1 <='z'  
group by v1 order by v1";
             
             rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
             assertEquals(
                 "CLIENT PARALLEL " + numRegions + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)+" 
[-32768,*] - [-32768,'z']\n"
+                        + indexPhysicalTableName +" [-32768,*] - 
[-32768,'z']\n"
                         + "    SERVER FILTER BY FIRST KEY ONLY\n"
                         + "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[\"V1\"]\nCLIENT MERGE SORT",
                 QueryUtil.getExplainPlan(rs));
@@ -507,7 +544,7 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             PhoenixStatement stmt = 
conn1.createStatement().unwrap(PhoenixStatement.class);
             rs = stmt.executeQuery(query);
             QueryPlan plan = stmt.getQueryPlan();
-            assertEquals(TestUtil.DEFAULT_INDEX_TABLE_NAME, 
plan.getContext().getCurrentTable().getTable().getName().getString());
+            assertEquals(indexTableName, 
plan.getContext().getCurrentTable().getTable().getName().getString());
             
assertEquals(BaseScannerRegionObserver.KEY_ORDERED_GROUP_BY_EXPRESSIONS, 
plan.getGroupBy().getScanAttribName());
             assertTrue(rs.next());
             assertEquals("a", rs.getString(1));
@@ -525,36 +562,37 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void 
testIndexPlanSelectionIfBothGlobalAndLocalIndexesHasSameColumnsAndOrder() 
throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('b',1,2,4,'z')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('f',1,2,3,'a')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('j',2,4,3,'a')");
-        conn1.createStatement().execute("UPSERT INTO 
"+TestUtil.DEFAULT_DATA_TABLE_NAME+" values('q',3,1,1,'c')");
+        createBaseTable(tableName, null, "('e','i','o')");
+        Connection conn1 = getConnection();
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('b',1,2,4,'z')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('f',1,2,3,'a')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('j',2,4,3,'a')");
+        conn1.createStatement().execute("UPSERT INTO "+tableName+" 
values('q',3,1,1,'c')");
         conn1.commit();
-        conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-        conn1.createStatement().execute("CREATE INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "2" + " ON " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + "(v1)");
-        String query = "SELECT t_id, k1, k2,V1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME +" where v1='a'";
+        conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName + " 
ON " + tableName + "(v1)");
+        conn1.createStatement().execute("CREATE INDEX " + indexName + "2" + " 
ON " + tableName + "(v1)");
+        String query = "SELECT t_id, k1, k2,V1 FROM " + tableName +" where 
v1='a'";
         ResultSet rs1 = conn1.createStatement().executeQuery("EXPLAIN "+ 
query);
-        assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "2" + " ['a']\n"
-                + "    SERVER FILTER BY FIRST KEY 
ONLY",QueryUtil.getExplainPlan(rs1));
+        assertEquals("CLIENT PARALLEL 1-WAY RANGE SCAN OVER "
+                + 
SchemaUtil.getPhysicalTableName(Bytes.toBytes(indexTableName), 
isNamespaceMapped) + "2" + " ['a']\n"
+                + "    SERVER FILTER BY FIRST KEY ONLY", 
QueryUtil.getExplainPlan(rs1));
         conn1.close();
     }
 
     @Test
     public void testDropLocalIndexShouldDeleteDataFromLocalIndexTable() throws 
Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
+        createBaseTable(tableName, null, "('e','i','o')");
         Connection conn1 = DriverManager.getConnection(getUrl());
         try {
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('b',1,2,4,'z')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('f',1,2,3,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('j',2,4,2,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('q',3,1,1,'c')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('b',1,2,4,'z')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('f',1,2,3,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('j',2,4,2,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('q',3,1,1,'c')");
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-            conn1.createStatement().execute("DROP INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME);
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
+            conn1.createStatement().execute("DROP INDEX " + indexName + " ON " 
+ tableName);
             HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-            HTable indexTable = new HTable(admin.getConfiguration() 
,TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)));
+            HTable indexTable = new HTable(admin.getConfiguration() 
,TableName.valueOf(MetaDataUtil.getLocalIndexTableName(tableName)));
             Pair<byte[][], byte[][]> startEndKeys = 
indexTable.getStartEndKeys();
             byte[][] startKeys = startEndKeys.getFirst();
             byte[][] endKeys = startEndKeys.getSecond();
@@ -579,19 +617,19 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexRowsShouldBeDeletedWhenUserTableRowsDeleted() 
throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
+        createBaseTable(tableName, null, "('e','i','o')");
         Connection conn1 = DriverManager.getConnection(getUrl());
         try {
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('b',1,2,4,'z')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('f',1,2,3,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('j',2,4,2,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('q',3,1,1,'c')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('b',1,2,4,'z')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('f',1,2,3,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('j',2,4,2,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('q',3,1,1,'c')");
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-            conn1.createStatement().execute("DELETE FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " where v1='a'");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
+            conn1.createStatement().execute("DELETE FROM " + tableName + " 
where v1='a'");
             conn1.commit();
             conn1 = DriverManager.getConnection(getUrl());
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + TestUtil.DEFAULT_INDEX_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + indexTableName);
             assertTrue(rs.next());
             assertEquals(2, rs.getInt(1));
         } finally {
@@ -601,19 +639,19 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
     
     @Test
     public void testScanWhenATableHasMultipleLocalIndexes() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
+        createBaseTable(tableName, null, "('e','i','o')");
         Connection conn1 = DriverManager.getConnection(getUrl());
         try {
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('b',1,2,4,'z')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('f',1,2,3,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('j',2,4,2,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('q',3,1,1,'c')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('b',1,2,4,'z')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('f',1,2,3,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('j',2,4,2,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('q',3,1,1,'c')");
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "2 ON " + TestUtil.DEFAULT_DATA_TABLE_NAME 
+ "(k3)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ "2 ON " + tableName + "(k3)");
             conn1.commit();
             conn1 = DriverManager.getConnection(getUrl());
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + TestUtil.DEFAULT_DATA_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + tableName);
             assertTrue(rs.next());
             assertEquals(4, rs.getInt(1));
         } finally {
@@ -623,23 +661,23 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexesOnTableWithImmutableRows() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
+        createBaseTable(tableName, null, "('e','i','o')");
+        Connection conn1 = getConnection();
         try {
-            conn1.createStatement().execute("ALTER TABLE "+ 
TestUtil.DEFAULT_DATA_TABLE_NAME + " SET IMMUTABLE_ROWS=true");
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-            conn1.createStatement().execute("CREATE INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "2 ON " + TestUtil.DEFAULT_DATA_TABLE_NAME 
+ "(k3)");
+            conn1.createStatement().execute("ALTER TABLE "+ tableName + " SET 
IMMUTABLE_ROWS=true");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
+            conn1.createStatement().execute("CREATE INDEX " + indexName + "2 
ON " + tableName + "(k3)");
             conn1.commit();
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('b',1,2,4,'z')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('f',1,2,3,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('j',2,4,2,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('q',3,1,1,'c')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('b',1,2,4,'z')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('f',1,2,3,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('j',2,4,2,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('q',3,1,1,'c')");
             conn1.commit();
             conn1 = DriverManager.getConnection(getUrl());
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + TestUtil.DEFAULT_DATA_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + tableName);
             assertTrue(rs.next());
             assertEquals(4, rs.getInt(1));
-            rs = conn1.createStatement().executeQuery("SELECT v1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME);
+            rs = conn1.createStatement().executeQuery("SELECT v1 FROM " + 
tableName);
             assertTrue(rs.next());
             assertEquals("a", rs.getString("v1"));
             assertTrue(rs.next());
@@ -649,7 +687,7 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             assertTrue(rs.next());
             assertEquals("z", rs.getString("v1"));
             assertFalse(rs.next());
-            rs = conn1.createStatement().executeQuery("SELECT k3 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME);
+            rs = conn1.createStatement().executeQuery("SELECT k3 FROM " + 
tableName);
             assertTrue(rs.next());
             assertEquals(1, rs.getInt("k3"));
             assertTrue(rs.next());
@@ -666,20 +704,20 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexScanWithInList() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','i','o')");
+        createBaseTable(tableName, null, "('e','i','o')");
         Connection conn1 = DriverManager.getConnection(getUrl());
         try{
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('b',1,2,4,'z')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('f',1,2,3,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('j',2,4,2,'a')");
-            conn1.createStatement().execute("UPSERT INTO " + 
TestUtil.DEFAULT_DATA_TABLE_NAME + " values('q',3,1,1,'c')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('b',1,2,4,'z')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('f',1,2,3,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('j',2,4,2,'a')");
+            conn1.createStatement().execute("UPSERT INTO " + tableName + " 
values('q',3,1,1,'c')");
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1) include (k3)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1) include (k3)");
             
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + TestUtil.DEFAULT_INDEX_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT 
COUNT(*) FROM " + indexTableName);
             assertTrue(rs.next());
             
-            String query = "SELECT t_id FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME +" where (v1,k3) IN (('z',4),('a',2))";
+            String query = "SELECT t_id FROM " + tableName +" where (v1,k3) IN 
(('z',4),('a',2))";
             rs = conn1.createStatement().executeQuery(query);
             assertTrue(rs.next());
             assertEquals("j", rs.getString("t_id"));
@@ -711,36 +749,37 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexScanAfterRegionSplit() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','j','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
+        if (isNamespaceMapped) { return; }
+        createBaseTable(tableName, null, "('e','j','o')");
+        Connection conn1 = getConnection();
         try{
             String[] strings = 
{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
             for (int i = 0; i < 26; i++) {
                 conn1.createStatement().execute(
-                    "UPSERT INTO " + TestUtil.DEFAULT_DATA_TABLE_NAME + " 
values('"+strings[i]+"'," + i + ","
+                    "UPSERT INTO " + tableName + " values('"+strings[i]+"'," + 
i + ","
                             + (i + 1) + "," + (i + 2) + ",'" + strings[25 - i] 
+ "')");
             }
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "_2 ON " + TestUtil.DEFAULT_DATA_TABLE_NAME 
+ "(k3)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ "_2 ON " + tableName + "(k3)");
 
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + TestUtil.DEFAULT_DATA_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + tableName);
             assertTrue(rs.next());
             
-            HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
+            HBaseAdmin admin = 
conn1.unwrap(PhoenixConnection.class).getQueryServices().getAdmin();
             for (int i = 1; i < 5; i++) {
                 CatalogTracker ct = new 
CatalogTracker(admin.getConfiguration());
-                admin.split(Bytes.toBytes(TestUtil.DEFAULT_DATA_TABLE_NAME), 
ByteUtil.concat(Bytes.toBytes(strings[3*i])));
+                admin.split(physicalTableName.getName(), 
ByteUtil.concat(Bytes.toBytes(strings[3*i])));
                 List<HRegionInfo> regionsOfUserTable =
-                        MetaReader.getTableRegions(ct, 
TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME), false);
+                        MetaReader.getTableRegions(ct, physicalTableName, 
false);
 
                 while (regionsOfUserTable.size() != (4+i)) {
                     Thread.sleep(100);
-                    regionsOfUserTable = MetaReader.getTableRegions(ct, 
TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME), false);
+                    regionsOfUserTable = MetaReader.getTableRegions(ct, 
physicalTableName, false);
                 }
                 assertEquals(4+i, regionsOfUserTable.size());
                 TableName indexTable =
-                        
TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME));
+                        TableName.valueOf(indexPhysicalTableName);
                 List<HRegionInfo> regionsOfIndexTable =
                         MetaReader.getTableRegions(ct, indexTable, false);
 
@@ -749,7 +788,7 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
                     regionsOfIndexTable = MetaReader.getTableRegions(ct, 
indexTable, false);
                 }
                 assertEquals(4 + i, regionsOfIndexTable.size());
-                String query = "SELECT t_id,k1,v1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME;
+                String query = "SELECT t_id,k1,v1 FROM " + tableName;
                 rs = conn1.createStatement().executeQuery(query);
                 Thread.sleep(1000);
                 for (int j = 0; j < 26; j++) {
@@ -761,17 +800,17 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
                 rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
                 assertEquals(
                         "CLIENT PARALLEL " + (4 + i) + "-WAY RANGE SCAN OVER "
-                                + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME) + " 
[-32768]\n"
+                                + indexPhysicalTableName + " [-32768]\n"
                                         + "    SERVER FILTER BY FIRST KEY 
ONLY\n"
                                 + "CLIENT MERGE SORT", 
QueryUtil.getExplainPlan(rs));
                 
-                query = "SELECT t_id,k1,k3 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME;
+                query = "SELECT t_id,k1,k3 FROM " + tableName;
                 rs = conn1.createStatement().executeQuery("EXPLAIN "+query);
                 assertEquals(
                     "CLIENT PARALLEL "
                             + ((strings[3 * i].compareTo("j") < 0) ? (4 + i) : 
(4 + i - 1))
                             + "-WAY RANGE SCAN OVER "
-                            + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME) + " 
[-32767]\n"
+                            + indexPhysicalTableName + " [-32767]\n"
                                     + "    SERVER FILTER BY FIRST KEY ONLY\n"
                             + "CLIENT MERGE SORT", 
QueryUtil.getExplainPlan(rs));
                 rs = conn1.createStatement().executeQuery(query);
@@ -790,25 +829,26 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexScanWithSmallChunks() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, 3, null);
+        createBaseTable(tableName, 3, null);
         Properties props = new Properties();
         props.setProperty(QueryServices.SCAN_RESULT_CHUNK_SIZE, "2");
+        props.setProperty(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, 
Boolean.toString(isNamespaceMapped));
         Connection conn1 = DriverManager.getConnection(getUrl(), props);
         try{
             String[] strings = 
{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
             for (int i = 0; i < 26; i++) {
                conn1.createStatement().execute(
-                    "UPSERT INTO " + TestUtil.DEFAULT_DATA_TABLE_NAME + " 
values('"+strings[i]+"'," + i + ","
+                    "UPSERT INTO " + tableName + " values('"+strings[i]+"'," + 
i + ","
                             + (i + 1) + "," + (i + 2) + ",'" + strings[25 - i] 
+ "')");
             }
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "_2 ON " + TestUtil.DEFAULT_DATA_TABLE_NAME 
+ "(k3)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ "_2 ON " + tableName + "(k3)");
 
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + TestUtil.DEFAULT_DATA_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + tableName);
             assertTrue(rs.next());
 
-            String query = "SELECT t_id,k1,v1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME;
+            String query = "SELECT t_id,k1,v1 FROM " + tableName;
             rs = conn1.createStatement().executeQuery(query);
             for (int j = 0; j < 26; j++) {
                 assertTrue(rs.next());
@@ -816,7 +856,7 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
                 assertEquals(25 - j, rs.getInt("k1"));
                 assertEquals(strings[j], rs.getString("V1"));
             }
-            query = "SELECT t_id,k1,k3 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME;
+            query = "SELECT t_id,k1,k3 FROM " + tableName;
             rs = conn1.createStatement().executeQuery(query);
             Thread.sleep(1000);
             for (int j = 0; j < 26; j++) {
@@ -832,43 +872,43 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexScanAfterRegionsMerge() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, null, 
"('e','j','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
+        if (isNamespaceMapped) { return; }
+        createBaseTable(tableName, null, "('e','j','o')");
+        Connection conn1 = getConnection();
         try{
             String[] strings = 
{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
             for (int i = 0; i < 26; i++) {
                 conn1.createStatement().execute(
-                    "UPSERT INTO " + TestUtil.DEFAULT_DATA_TABLE_NAME + " 
values('"+strings[i]+"'," + i + ","
+                    "UPSERT INTO " + tableName + " values('"+strings[i]+"'," + 
i + ","
                             + (i + 1) + "," + (i + 2) + ",'" + strings[25 - i] 
+ "')");
             }
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + TestUtil.DEFAULT_DATA_TABLE_NAME + 
"(v1)");
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "_2 ON " + TestUtil.DEFAULT_DATA_TABLE_NAME 
+ "(k3)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName + "(v1)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ "_2 ON " + tableName + "(k3)");
 
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + TestUtil.DEFAULT_DATA_TABLE_NAME);
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + tableName);
             assertTrue(rs.next());
 
-            HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
+            HBaseAdmin admin = 
conn1.unwrap(PhoenixConnection.class).getQueryServices().getAdmin();
             CatalogTracker ct = new CatalogTracker(admin.getConfiguration());
             List<HRegionInfo> regionsOfUserTable =
                     MetaReader.getTableRegions(ct,
-                        TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME), 
false);
+                            physicalTableName, false);
             
admin.mergeRegions(regionsOfUserTable.get(0).getEncodedNameAsBytes(),
                 regionsOfUserTable.get(1).getEncodedNameAsBytes(), false);
             regionsOfUserTable =
                     MetaReader.getTableRegions(ct,
-                        TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME), 
false);
+                            physicalTableName, false);
 
             while (regionsOfUserTable.size() != 3) {
                 Thread.sleep(100);
                 regionsOfUserTable =
                         MetaReader.getTableRegions(ct,
-                            
TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME), false);
+                                physicalTableName, false);
             }
             assertEquals(3, regionsOfUserTable.size());
             TableName indexTable =
-                    TableName.valueOf(MetaDataUtil
-                            
.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME));
+                    TableName.valueOf(indexPhysicalTableName);
             List<HRegionInfo> regionsOfIndexTable =
                     MetaReader.getTableRegions(ct, indexTable, false);
 
@@ -877,7 +917,7 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
                 regionsOfIndexTable = MetaReader.getTableRegions(ct, 
indexTable, false);
             }
             assertEquals(3, regionsOfIndexTable.size());
-            String query = "SELECT t_id,k1,v1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME;
+            String query = "SELECT t_id,k1,v1 FROM " + tableName;
             rs = conn1.createStatement().executeQuery(query);
             Thread.sleep(1000);
             for (int j = 0; j < 26; j++) {
@@ -889,15 +929,15 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
             assertEquals(
                 "CLIENT PARALLEL " + 3 + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)
+                        + indexPhysicalTableName
                         + " [-32768]\n" + "    SERVER FILTER BY FIRST KEY 
ONLY\n"
                         + "CLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
 
-            query = "SELECT t_id,k1,k3 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME;
+            query = "SELECT t_id,k1,k3 FROM " + tableName;
             rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
             assertEquals(
                 "CLIENT PARALLEL " + 3 + "-WAY RANGE SCAN OVER "
-                        + 
MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME)
+                        + indexPhysicalTableName
                         + " [-32767]\n" + "    SERVER FILTER BY FIRST KEY 
ONLY\n"
                         + "CLIENT MERGE SORT", QueryUtil.getExplainPlan(rs));
 
@@ -916,31 +956,32 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
 
     @Test
     public void testLocalIndexStateWhenSplittingInProgress() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME+"2", null, 
"('e','j','o')");
-        Connection conn1 = DriverManager.getConnection(getUrl());
+        if (isNamespaceMapped) { return; }
+        createBaseTable(tableName+"2", null, "('e','j','o')");
+        Connection conn1 = getConnection();
         try{
             String[] strings = 
{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
             for (int i = 0; i < 26; i++) {
                 conn1.createStatement().execute(
-                    "UPSERT INTO " + TestUtil.DEFAULT_DATA_TABLE_NAME+"2" + " 
values('"+strings[i]+"'," + i + ","
+                    "UPSERT INTO " + tableName+"2" + " 
values('"+strings[i]+"'," + i + ","
                             + (i + 1) + "," + (i + 2) + ",'" + strings[25 - i] 
+ "')");
             }
             conn1.commit();
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + 
TestUtil.DEFAULT_DATA_TABLE_NAME+"2" + "(v1)");
-            conn1.createStatement().execute("CREATE LOCAL INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + "_2 ON " + 
TestUtil.DEFAULT_DATA_TABLE_NAME+"2" + "(k3)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ " ON " + tableName+"2" + "(v1)");
+            conn1.createStatement().execute("CREATE LOCAL INDEX " + indexName 
+ "_2 ON " + tableName+"2" + "(k3)");
 
-            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + TestUtil.DEFAULT_DATA_TABLE_NAME+"2");
+            ResultSet rs = conn1.createStatement().executeQuery("SELECT * FROM 
" + tableName+"2");
             assertTrue(rs.next());
             HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-            HTableDescriptor tableDesc = 
admin.getTableDescriptor(TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME+"2"));
+            HTableDescriptor tableDesc = 
admin.getTableDescriptor(SchemaUtil.getPhysicalTableName((tableName+"2").getBytes(),isNamespaceMapped));
             tableDesc.removeCoprocessor(LocalIndexSplitter.class.getName());
             tableDesc.addCoprocessor(MockedLocalIndexSplitter.class.getName(), 
null,
                 1, null);
             admin.disableTable(tableDesc.getTableName());
             admin.modifyTable(tableDesc.getTableName(), tableDesc);
             admin.enableTable(tableDesc.getTableName());
-            TableName indexTable =
-                    
TableName.valueOf(MetaDataUtil.getLocalIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME+"2"));
+            TableName indexTable = 
TableName.valueOf(MetaDataUtil.getLocalIndexTableName(
+                    SchemaUtil.getPhysicalTableName((tableName + 
"2").getBytes(), isNamespaceMapped).getNameAsString()));
             HTableDescriptor indexTableDesc = 
admin.getTableDescriptor(indexTable);
             
indexTableDesc.removeCoprocessor(IndexHalfStoreFileReaderGenerator.class.getName());
             
indexTableDesc.addCoprocessor(MockedIndexHalfStoreFileReaderGenerator.class.getName(),
 null,
@@ -949,13 +990,14 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT {
             admin.modifyTable(indexTable, indexTableDesc);
             admin.enableTable(indexTable);
 
-            admin.split(Bytes.toBytes(TestUtil.DEFAULT_DATA_TABLE_NAME+"2"), 
ByteUtil.concat(Bytes.toBytes(strings[3])));
+            
admin.split(SchemaUtil.getPhysicalTableName(Bytes.toBytes(tableName + "2"), 
isNamespaceMapped).getName(),
+                    ByteUtil.concat(Bytes.toBytes(strings[3])));
             List<HRegionInfo> regionsOfUserTable =
-                    
admin.getTableRegions(TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME+"2"));
+                    
admin.getTableRegions(SchemaUtil.getPhysicalTableName(Bytes.toBytes(tableName + 
"2"), isNamespaceMapped));
 
             while (regionsOfUserTable.size() != 5) {
                 Thread.sleep(100);
-                regionsOfUserTable = 
admin.getTableRegions(TableName.valueOf(TestUtil.DEFAULT_DATA_TABLE_NAME+"2"));
+                regionsOfUserTable = 
admin.getTableRegions(SchemaUtil.getPhysicalTableName(Bytes.toBytes(tableName + 
"2"), isNamespaceMapped));
             }
             assertEquals(5, regionsOfUserTable.size());
 
@@ -970,22 +1012,22 @@ public class LocalIndexIT extends BaseHBaseManagedTimeIT 
{
             boolean success = latch1.await(WAIT_TIME_SECONDS, 
TimeUnit.SECONDS);
             assertTrue("Timed out waiting for 
MockedLocalIndexSplitter.preSplitAfterPONR to complete", success);
             // Verify the metadata for index is correct.
-            rs = conn1.getMetaData().getTables(null, 
StringUtil.escapeLike(TestUtil.DEFAULT_SCHEMA_NAME), 
TestUtil.DEFAULT_INDEX_TABLE_NAME,
+            rs = conn1.getMetaData().getTables(null, 
StringUtil.escapeLike(schemaName), indexName,
                     new String[] { PTableType.INDEX.toString() });
             assertTrue(rs.next());
-            assertEquals(TestUtil.DEFAULT_INDEX_TABLE_NAME, rs.getString(3));
+            assertEquals(indexName, rs.getString(3));
             assertEquals(PIndexState.INACTIVE.toString(), 
rs.getString("INDEX_STATE"));
             assertFalse(rs.next());
-            rs = conn1.getMetaData().getTables(null, 
StringUtil.escapeLike(TestUtil.DEFAULT_SCHEMA_NAME), 
TestUtil.DEFAULT_INDEX_TABLE_NAME+"_2",
+            rs = conn1.getMetaData().getTables(null, 
StringUtil.escapeLike(schemaName), indexName+"_2",
                 new String[] { PTableType.INDEX.toString() });
             assertTrue(rs.next());
-            assertEquals(TestUtil.DEFAULT_INDEX_TABLE_NAME+"_2", 
rs.getString(3));
+            assertEquals(indexName+"_2", rs.getString(3));
             assertEquals(PIndexState.INACTIVE.toString(), 
rs.getString("INDEX_STATE"));
             assertFalse(rs.next());
 
-            String query = "SELECT t_id,k1,v1 FROM " + 
TestUtil.DEFAULT_DATA_TABLE_NAME+"2";
+            String query = "SELECT t_id,k1,v1 FROM " + tableName+"2";
             rs = conn1.createStatement().executeQuery("EXPLAIN " + query);
-            assertEquals("CLIENT PARALLEL " + 1 + "-WAY FULL SCAN OVER " + 
TestUtil.DEFAULT_DATA_TABLE_NAME+"2",
+            assertEquals("CLIENT PARALLEL " + 1 + "-WAY FULL SCAN OVER " + 
tableName+"2",
                 QueryUtil.getExplainPlan(rs));
             latch2.countDown();
        } finally {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7e432be7/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
index ebc6988..7818bcc 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexFailureIT.java
@@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.coprocessor.ObserverContext;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
 import org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver;
 import org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress;
+import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.end2end.BaseOwnClusterHBaseManagedTimeIT;
 import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest;
 import org.apache.phoenix.query.QueryServices;
@@ -83,15 +84,19 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
     private final boolean transactional;
     private final boolean localIndex;
     private final String tableDDLOptions;
+    private final boolean isNamespaceMapped;
+    private String schema = "TEST";
 
-    public MutableIndexFailureIT(boolean transactional, boolean localIndex) {
+    public MutableIndexFailureIT(boolean transactional, boolean localIndex, 
boolean isNamespaceMapped) {
         this.transactional = transactional;
         this.localIndex = localIndex;
         this.tableDDLOptions = transactional ? " TRANSACTIONAL=true " : "";
-        this.tableName = (localIndex ? "L_" : "") + 
TestUtil.DEFAULT_DATA_TABLE_NAME + (transactional ? "_TXN" : "");
+        this.tableName = (localIndex ? "L_" : "") + 
TestUtil.DEFAULT_DATA_TABLE_NAME + (transactional ? "_TXN" : "")
+                + (isNamespaceMapped ? "_NM" : "");
         this.indexName = INDEX_NAME;
-        this.fullTableName = 
SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, tableName);
-        this.fullIndexName = 
SchemaUtil.getTableName(TestUtil.DEFAULT_SCHEMA_NAME, indexName);
+        this.fullTableName = SchemaUtil.getTableName(schema, tableName);
+        this.fullIndexName = SchemaUtil.getTableName(schema, indexName);
+        this.isNamespaceMapped = isNamespaceMapped;
     }
 
     @BeforeClass
@@ -108,9 +113,11 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
         setUpTestDriver(new ReadOnlyProps(serverProps.entrySet().iterator()), 
new ReadOnlyProps(clientProps.entrySet().iterator()));
     }
 
-    @Parameters(name = "transactional = {0}, localIndex = {1}")
+    @Parameters(name = "transactional = {0}, localIndex = {1}, 
isNamespaceMapped = {2}")
     public static Collection<Boolean[]> data() {
-        return Arrays.asList(new Boolean[][] { { false, false }, { false, true 
}, { true, false }, { true, true } });
+        return Arrays.asList(new Boolean[][] { { false, false, true }, { 
false, false, false }, { false, true, true },
+                { false, true, false }, { true, false, true }, { true, true, 
true }, { true, false, false },
+                { true, true, false } });
     }
 
     @Test
@@ -120,12 +127,16 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
 
     public void helpTestWriteFailureDisablesIndex() throws Exception {
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+        props.put(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, 
String.valueOf(isNamespaceMapped));
         try (Connection conn = driver.connect(url, props)) {
             String query;
             ResultSet rs;
             conn.setAutoCommit(false);
-            conn.createStatement().execute(
-                    "CREATE TABLE " + fullTableName + " (k VARCHAR NOT NULL 
PRIMARY KEY, v1 VARCHAR, v2 VARCHAR) "+tableDDLOptions);
+            if (isNamespaceMapped) {
+                conn.createStatement().execute("CREATE SCHEMA IF NOT EXISTS " 
+ schema);
+            }
+            conn.createStatement().execute("CREATE TABLE " + fullTableName
+                    + " (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR, v2 
VARCHAR) " + tableDDLOptions);
             query = "SELECT * FROM " + fullTableName;
             rs = conn.createStatement().executeQuery(query);
             assertFalse(rs.next());
@@ -139,7 +150,7 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
             assertFalse(rs.next());
 
             // Verify the metadata for index is correct.
-            rs = conn.getMetaData().getTables(null, 
StringUtil.escapeLike(TestUtil.DEFAULT_SCHEMA_NAME), indexName,
+            rs = conn.getMetaData().getTables(null, 
StringUtil.escapeLike(schema), indexName,
                     new String[] { PTableType.INDEX.toString() });
             assertTrue(rs.next());
             assertEquals(indexName, rs.getString(3));
@@ -163,8 +174,8 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
 
             query = "SELECT /*+ NO_INDEX */ k,v1 FROM " + fullTableName;
             rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-            String expectedPlan =
-                    "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + fullTableName;
+            String expectedPlan = "CLIENT PARALLEL 1-WAY FULL SCAN OVER "
+                    + 
SchemaUtil.getPhysicalTableName(fullTableName.getBytes(), isNamespaceMapped);
             assertEquals(expectedPlan, QueryUtil.getExplainPlan(rs));
             rs = conn.createStatement().executeQuery(query);
             assertTrue(rs.next());
@@ -202,7 +213,7 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
             }
 
             // Verify the metadata for index is correct.
-            rs = conn.getMetaData().getTables(null, 
StringUtil.escapeLike(TestUtil.DEFAULT_SCHEMA_NAME), indexName,
+            rs = conn.getMetaData().getTables(null, 
StringUtil.escapeLike(schema), indexName,
                     new String[] { PTableType.INDEX.toString() });
             assertTrue(rs.next());
             assertEquals(indexName, rs.getString(3));
@@ -230,8 +241,8 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
                 // Verify previous writes succeeded to data table
                 query = "SELECT /*+ NO_INDEX */ k,v1 FROM " + fullTableName;
                 rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-                expectedPlan =
-                        "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
fullTableName;
+                expectedPlan = "CLIENT PARALLEL 1-WAY FULL SCAN OVER "
+                        + 
SchemaUtil.getPhysicalTableName(fullTableName.getBytes(), isNamespaceMapped);
                 assertEquals(expectedPlan, QueryUtil.getExplainPlan(rs));
                 rs = conn.createStatement().executeQuery(query);
                 assertTrue(rs.next());
@@ -257,7 +268,7 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
                 int maxTries = 3, nTries = 0;
                 do {
                     Thread.sleep(15 * 1000); // sleep 15 secs
-                    rs = conn.getMetaData().getTables(null, 
StringUtil.escapeLike(TestUtil.DEFAULT_SCHEMA_NAME), indexName,
+                    rs = conn.getMetaData().getTables(null, 
StringUtil.escapeLike(schema), indexName,
                             new String[] { PTableType.INDEX.toString() });
                     assertTrue(rs.next());
                     
if(PIndexState.ACTIVE.toString().equals(rs.getString("INDEX_STATE"))){
@@ -279,8 +290,11 @@ public class MutableIndexFailureIT extends 
BaseOwnClusterHBaseManagedTimeIT {
             // verify index table has correct data
             query = "SELECT /*+ INDEX(" + indexName + ") */ k,v1 FROM " + 
fullTableName;
             rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-            expectedPlan =
-                    " OVER " + (localIndex ? 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + tableName : fullIndexName);
+            expectedPlan = " OVER "
+                    + (localIndex
+                            ? 
Bytes.toString(MetaDataUtil.getLocalIndexPhysicalName(SchemaUtil
+                                    
.getPhysicalTableName(fullTableName.getBytes(), isNamespaceMapped).getName()))
+                            : 
SchemaUtil.getPhysicalTableName(fullIndexName.getBytes(), 
isNamespaceMapped).getNameAsString());
             String explainPlan = QueryUtil.getExplainPlan(rs);
             assertTrue(explainPlan.contains(expectedPlan));
             rs = conn.createStatement().executeQuery(query);

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7e432be7/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
index 34094d5..450cffa 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/ViewIndexIT.java
@@ -26,6 +26,8 @@ import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Map;
 import java.util.Properties;
 
@@ -38,16 +40,26 @@ import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.util.MetaDataUtil;
 import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
+import org.apache.phoenix.util.SchemaUtil;
 import org.apache.phoenix.util.TestUtil;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 import com.google.common.collect.Maps;
 
-
+@RunWith(Parameterized.class)
 public class ViewIndexIT extends BaseHBaseManagedTimeIT {
 
     private String VIEW_NAME = "MY_VIEW";
+    private String schemaName="TEST";
+    private boolean isNamespaceMapped;
+    private String tableName = schemaName + ".T";
+    private String indexName = "I";
+    private String viewIndexPhysicalTableName;
+    private TableName physicalTableName;
 
     @BeforeClass
     @Shadower(classBeingShadowed = BaseHBaseManagedTimeIT.class)
@@ -59,8 +71,17 @@ public class ViewIndexIT extends BaseHBaseManagedTimeIT {
         setUpTestDriver(new ReadOnlyProps(props.entrySet().iterator()));
     }
 
-    private void createBaseTable(String tableName, boolean multiTenant, 
Integer saltBuckets, String splits) throws SQLException {
-        Connection conn = DriverManager.getConnection(getUrl());
+    @Parameters(name = "isNamespaceMapped = {0}")
+    public static Collection<Boolean> data() {
+        return Arrays.asList(true, false);
+    }
+
+    private void createBaseTable(String tableName, boolean multiTenant, 
Integer saltBuckets, String splits)
+            throws SQLException {
+        Connection conn = getConnection();
+        if (isNamespaceMapped) {
+            conn.createStatement().execute("CREATE SCHEMA IF NOT EXISTS " + 
schemaName);
+        }
         String ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT 
NULL,\n" +
                 "k1 VARCHAR NOT NULL,\n" +
                 "k2 INTEGER NOT NULL,\n" +
@@ -81,20 +102,34 @@ public class ViewIndexIT extends BaseHBaseManagedTimeIT {
         conn.createStatement().execute(ddl + ddlOptions);
         conn.close();
     }
+    
+    public Connection getConnection() throws SQLException{
+        Properties props = new Properties();
+        props.put(QueryServices.DROP_METADATA_ATTRIB, Boolean.toString(true));
+        props.put(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, 
Boolean.toString(isNamespaceMapped));
+        return DriverManager.getConnection(getUrl(),props);
+    }
+    
+    public ViewIndexIT(boolean isNamespaceMapped) {
+        this.isNamespaceMapped = isNamespaceMapped;
+        this.physicalTableName = 
SchemaUtil.getPhysicalTableName(tableName.getBytes(), isNamespaceMapped);
+        this.viewIndexPhysicalTableName = 
MetaDataUtil.getLocalIndexTableName(physicalTableName.getNameAsString());
+    }
+
 
     @Test
     public void testDeleteViewIndexSequences() throws Exception {
-        createBaseTable(TestUtil.DEFAULT_DATA_TABLE_NAME, false, null, null);
-        Connection conn1 = DriverManager.getConnection(getUrl());
-        Connection conn2 = DriverManager.getConnection(getUrl());
-        conn1.createStatement().execute("CREATE VIEW " + VIEW_NAME + " AS 
SELECT * FROM " + TestUtil.DEFAULT_DATA_TABLE_NAME);
-        conn1.createStatement().execute("CREATE INDEX " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " ON " + VIEW_NAME + " (v1)");
-        conn2.createStatement().executeQuery("SELECT * FROM " + 
TestUtil.DEFAULT_DATA_TABLE_FULL_NAME).next();
+        createBaseTable(tableName, false, null, null);
+        Connection conn1 = getConnection();
+        Connection conn2 = getConnection();
+        conn1.createStatement().execute("CREATE VIEW " + VIEW_NAME + " AS 
SELECT * FROM " + tableName);
+        conn1.createStatement().execute("CREATE INDEX " + indexName + " ON " + 
VIEW_NAME + " (v1)");
+        conn2.createStatement().executeQuery("SELECT * FROM " + 
tableName).next();
         HBaseAdmin admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
         conn1.createStatement().execute("DROP VIEW " + VIEW_NAME);
-        conn1.createStatement().execute("DROP TABLE "+ 
TestUtil.DEFAULT_DATA_TABLE_NAME);
+        conn1.createStatement().execute("DROP TABLE "+ tableName);
         admin = driver.getConnectionQueryServices(getUrl(), 
TestUtil.TEST_PROPERTIES).getAdmin();
-        assertFalse("View index table should be deleted.", 
admin.tableExists(TableName.valueOf(MetaDataUtil.getViewIndexTableName(TestUtil.DEFAULT_DATA_TABLE_NAME))));
+        assertFalse("View index table should be deleted.", 
admin.tableExists(TableName.valueOf(viewIndexPhysicalTableName)));
         ResultSet rs = conn2.createStatement().executeQuery("SELECT "
                 + PhoenixDatabaseMetaData.SEQUENCE_SCHEMA + ","
                 + PhoenixDatabaseMetaData.SEQUENCE_NAME

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7e432be7/phoenix-core/src/it/java/org/apache/phoenix/tx/TxCheckpointIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/tx/TxCheckpointIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/tx/TxCheckpointIT.java
index e9ba592..c7fc053 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/tx/TxCheckpointIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/tx/TxCheckpointIT.java
@@ -37,6 +37,7 @@ import org.apache.phoenix.end2end.BaseHBaseManagedTimeIT;
 import org.apache.phoenix.end2end.Shadower;
 import org.apache.phoenix.execute.MutationState;
 import org.apache.phoenix.jdbc.PhoenixConnection;
+import org.apache.phoenix.query.BaseTest;
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.util.PropertiesUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
@@ -48,10 +49,10 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
-import co.cask.tephra.Transaction.VisibilityLevel;
-
 import com.google.common.collect.Maps;
 
+import co.cask.tephra.Transaction.VisibilityLevel;
+
 @RunWith(Parameterized.class)
 public class TxCheckpointIT extends BaseHBaseManagedTimeIT {
        

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7e432be7/phoenix-core/src/main/antlr3/PhoenixSQL.g
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/antlr3/PhoenixSQL.g 
b/phoenix-core/src/main/antlr3/PhoenixSQL.g
index a042090..99f8029 100644
--- a/phoenix-core/src/main/antlr3/PhoenixSQL.g
+++ b/phoenix-core/src/main/antlr3/PhoenixSQL.g
@@ -71,6 +71,7 @@ tokens
     ALTER='alter';
     COLUMN='column';
     TABLE='table';
+    SCHEMA='schema';
     ADD='add';
     SPLIT='split';
     EXPLAIN='explain';
@@ -125,6 +126,7 @@ tokens
     LIST = 'list';
     JARS='jars';
     ROW_TIMESTAMP='row_timestamp';
+    USE='use';
     OFFSET ='offset';
     FETCH = 'fetch';
     ROW = 'row';
@@ -397,6 +399,7 @@ oneStatement returns [BindableStatement ret]
     |  s=upsert_node
     |   s=delete_node
     |   s=create_table_node
+    |   s=create_schema_node
     |   s=create_view_node
     |   s=create_index_node
     |   s=drop_table_node
@@ -411,6 +414,8 @@ oneStatement returns [BindableStatement ret]
     |   s=delete_jar_node
     |  s=create_sequence_node
     |  s=drop_sequence_node
+    |  s=drop_schema_node
+    |  s=use_schema_node
     |   s=update_statistics_node
     |   s=explain_node) { $ret = s; }
     ;
@@ -428,6 +433,12 @@ create_table_node returns [CreateTableStatement ret]
         (SPLIT ON s=value_expression_list)?
         {ret = factory.createTable(t, p, c, pk, s, PTableType.TABLE, ex!=null, 
null, null, getBindCount()); }
     ;
+   
+// Parse a create schema statement.
+create_schema_node returns [CreateSchemaStatement ret]
+    :   CREATE SCHEMA (IF NOT ex=EXISTS)? s=identifier
+        {ret = factory.createSchema(s, ex!=null); }
+    ;
 
 // Parse a create view statement.
 create_view_node returns [CreateTableStatement ret]
@@ -533,6 +544,12 @@ drop_table_node returns [DropTableStatement ret]
         {ret = factory.dropTable(t, v==null ? 
(QueryConstants.SYSTEM_SCHEMA_NAME.equals(t.getSchemaName()) ? 
PTableType.SYSTEM : PTableType.TABLE) : PTableType.VIEW, ex!=null, c!=null); }
     ;
 
+drop_schema_node returns [DropSchemaStatement ret]
+    :   DROP SCHEMA (IF ex=EXISTS)? s=identifier (c=CASCADE)?
+        {ret = factory.dropSchema(s, ex!=null, c!=null); }
+    ;
+
+
 // Parse a drop index statement
 drop_index_node returns [DropIndexStatement ret]
     : DROP INDEX (IF ex=EXISTS)? i=index_name ON t=from_table_name
@@ -869,6 +886,11 @@ multiply_divide_modulo_expression returns [ParseNode ret]
         { $ret = lhs; }
     ;
 
+use_schema_node returns [UseSchemaStatement ret]
+       :   USE s=identifier
+        {ret = factory.useSchema(s); }
+    ;
+
 negate_expression returns [ParseNode ret]
     :   m=MINUS? e=array_expression { $ret = m==null ? e : factory.negate(e); }
     ;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7e432be7/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/controller/MetadataRpcController.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/controller/MetadataRpcController.java
 
b/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/controller/MetadataRpcController.java
index ab463e9..df833f9 100644
--- 
a/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/controller/MetadataRpcController.java
+++ 
b/phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/controller/MetadataRpcController.java
@@ -25,6 +25,7 @@ import 
org.apache.hadoop.hbase.ipc.DelegatingPayloadCarryingRpcController;
 import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
 import org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory;
 import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
+import org.apache.phoenix.util.SchemaUtil;
 
 import com.google.common.collect.ImmutableList;
 
@@ -36,7 +37,16 @@ class MetadataRpcController extends 
DelegatingPayloadCarryingRpcController {
                        .add(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME)
                        .add(PhoenixDatabaseMetaData.SYSTEM_STATS_NAME)
                        .add(PhoenixDatabaseMetaData.SYSTEM_SEQUENCE_NAME)
-                       
.add(PhoenixDatabaseMetaData.SYSTEM_FUNCTION_NAME).build();
+                       .add(PhoenixDatabaseMetaData.SYSTEM_FUNCTION_NAME)
+            
.add(SchemaUtil.getPhysicalTableName(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES,
 true)
+                    .getNameAsString())
+            
.add(SchemaUtil.getPhysicalTableName(PhoenixDatabaseMetaData.SYSTEM_STATS_NAME_BYTES,
 true)
+                    .getNameAsString())
+            
.add(SchemaUtil.getPhysicalTableName(PhoenixDatabaseMetaData.SYSTEM_SEQUENCE_NAME_BYTES,
 true)
+                    .getNameAsString())
+            
.add(SchemaUtil.getPhysicalTableName(PhoenixDatabaseMetaData.SYSTEM_FUNCTION_NAME_BYTES,
 true)
+                    .getNameAsString())
+            .build();
 
        public MetadataRpcController(PayloadCarryingRpcController delegate,
                        Configuration conf) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7e432be7/phoenix-core/src/main/java/org/apache/phoenix/compile/ColumnResolver.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/compile/ColumnResolver.java 
b/phoenix-core/src/main/java/org/apache/phoenix/compile/ColumnResolver.java
index 55253ea..6c91123 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/ColumnResolver.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/ColumnResolver.java
@@ -20,7 +20,12 @@ package org.apache.phoenix.compile;
 import java.sql.SQLException;
 import java.util.List;
 
+import org.apache.hadoop.hbase.TableNotFoundException;
 import org.apache.phoenix.parse.PFunction;
+import org.apache.phoenix.parse.PSchema;
+import org.apache.phoenix.schema.AmbiguousColumnException;
+import org.apache.phoenix.schema.AmbiguousTableException;
+import org.apache.phoenix.schema.ColumnNotFoundException;
 import org.apache.phoenix.schema.ColumnRef;
 import org.apache.phoenix.schema.TableRef;
 
@@ -77,4 +82,9 @@ public interface ColumnResolver {
     public PFunction resolveFunction(String functionName) throws SQLException;
 
     public boolean hasUDFs();
+
+    public PSchema resolveSchema(String schemaName) throws SQLException;
+
+    public List<PSchema> getSchemas();
+
 }

Reply via email to