Github user twdsilva commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/303#discussion_r192305114
  
    --- Diff: 
phoenix-core/src/it/java/org/apache/phoenix/end2end/ExplainPlanWithStatsEnabledIT.java
 ---
    @@ -1202,33 +1202,44 @@ private void 
testUseStatsForParallelizationOnSaltedTable(boolean useStatsFlag, b
             assertEquals("B", rs.getString(1));
         }
     
    -   @Test
    -   public void testUseStatsForParallelizationProperyOnViewIndex() throws 
SQLException {
    -           String tableName = generateUniqueName();
    -           String viewName = generateUniqueName();
    -           String tenantViewName = generateUniqueName();
    -           String viewIndexName = generateUniqueName();
    -           boolean useStats = !DEFAULT_USE_STATS_FOR_PARALLELIZATION;
    -           try (Connection conn = DriverManager.getConnection(getUrl())) {
    -                   conn.createStatement()
    -                                   .execute("create table " + tableName
    -                                                   + "(tenantId CHAR(15) 
NOT NULL, pk1 integer NOT NULL, v varchar CONSTRAINT PK PRIMARY KEY "
    -                                                   + "(tenantId, pk1)) 
MULTI_TENANT=true");
    -                   try (Connection tenantConn = 
getTenantConnection("tenant1")) {
    -                           conn.createStatement().execute("CREATE VIEW " + 
viewName + " AS SELECT * FROM " + tableName);
    -                           conn.createStatement().execute("CREATE INDEX " 
+ viewIndexName + " on " + viewName + " (v) ");
    -                           tenantConn.createStatement().execute("CREATE 
VIEW " + tenantViewName + " AS SELECT * FROM " + viewName);
    -                           conn.createStatement()
    -                                           .execute("ALTER TABLE " + 
tableName + " set USE_STATS_FOR_PARALLELIZATION=" + useStats);
    -                           // fetch the latest view ptable 
    -                           PhoenixRuntime.getTableNoCache(tenantConn, 
viewName);
    -                           PhoenixConnection phxConn = 
conn.unwrap(PhoenixConnection.class);
    -                           PTable viewIndex = phxConn.getTable(new 
PTableKey(phxConn.getTenantId(), viewIndexName));
    -                           assertEquals("USE_STATS_FOR_PARALLELIZATION 
property set incorrectly", useStats,
    -                                           PhoenixConfigurationUtil
    -                                                           
.getStatsForParallelizationProp(tenantConn.unwrap(PhoenixConnection.class), 
viewIndex));
    -                   }
    -           }
    -   }
    +    @Test
    +    public void testUseStatsForParallelizationProperyOnViewIndex() throws 
SQLException {
    +        String tableName = generateUniqueName();
    +        String viewName = generateUniqueName();
    +        String tenantViewName = generateUniqueName();
    +        String viewIndexName = generateUniqueName();
    +        boolean useStats = !DEFAULT_USE_STATS_FOR_PARALLELIZATION;
    +        try (Connection conn = DriverManager.getConnection(getUrl())) {
    +            conn.createStatement()
    +                    .execute("create table " + tableName
    +                            + "(tenantId CHAR(15) NOT NULL, pk1 integer 
NOT NULL, v varchar CONSTRAINT PK PRIMARY KEY "
    +                            + "(tenantId, pk1)) MULTI_TENANT=true");
    +            try (Connection tenantConn = getTenantConnection("tenant1")) {
    +                conn.createStatement().execute("CREATE VIEW " + viewName + 
" AS SELECT * FROM " + tableName);
    +                conn.createStatement().execute("CREATE INDEX " + 
viewIndexName + " on " + viewName + " (v) ");
    +                tenantConn.createStatement().execute("CREATE VIEW " + 
tenantViewName + " AS SELECT * FROM " + viewName);
    +                conn.createStatement()
    +                        .execute("ALTER TABLE " + tableName + " set 
USE_STATS_FOR_PARALLELIZATION=" + useStats);
    +                // changing a property on a base table does not change the 
property on a view
    --- End diff --
    
    In PTable we don't have access to when a table property was updated. In 
combineColumns when creating the PTable of the view if a table property is not 
mutable on a view , the value is set to the same as the base physical table. 
    If the table property is mutable on a view we don't know if the value was 
modified in the view or not so its we set the table property value to the one 
in the view. This is different from current behavior where if we change  a 
table property on a base table and a child view hasn't modified the property, 
the change is propagated to the child.  I filed PHOENIX-4763 to fix this as a 
follow-up task.


---

Reply via email to