You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (Jira)" <ji...@apache.org> on 2019/12/04 20:09:00 UTC

[jira] [Commented] (CALCITE-3478) Reconstructure of materialized view tests.

    [ https://issues.apache.org/jira/browse/CALCITE-3478?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16988178#comment-16988178 ] 

Julian Hyde commented on CALCITE-3478:
--------------------------------------

Can you change Jira summary and commit message to "Restructure tests for materialized views". "Reconstructure" is not a word.

> Reconstructure of materialized view tests.
> ------------------------------------------
>
>                 Key: CALCITE-3478
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3478
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: Jin Xing
>            Assignee: Jin Xing
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> h2. *Motivation*
> Currently there are two strategies for materialized view matching:
> *strategy-1*. Substitution based (SubstitutionVisitor.java) [1]
>  *strategy-2*. Plan structural information based (AbstractMaterializedViewRule.java) [2]
>  The two strategies are controlled by a single connection config of "materializationsEnabled". Calcite will apply strategy-1 firstly and then strategy-2.
> The two strategies are tested in a single integration test called MaterializationTest.java,
>  As a result we cannot run tests separately for a single strategy, which leads to:
>  # When some new matching patterns are supported by strategy-1, we might need to update the old result plan, which was previously matched and generated by stragegy-2, e.g. [3], and corresponding testing pattern for stragegy-2 will be lost.
>  # Some test failures are even hidden, e.g. MaterializationTest#testJoinMaterialization2 should but failed to be supported by stragegy-2. However strategy-1 lets the test passed.
>  # Hard to test internals for SubstutionVisitor.java, e.g. [4] has to struggle and create a unit test
> Of course we can add more system config or connection config just for testing and circle around some of the dilemmas I mentioned above. But it will make the code messy. Materialized view matching strategies are so important and worth a through unit test and to be kept clean.
> Additionally, this JIRA targets to clean the code of MaterializationTest.java. As more and more fixes get applied, this Java file tends to be messy:
>  # Helping methods and testing methods are mixed without good order.
>  # Lots of methods called checkMaterialize. We need to sort it out if there's need to add more params, e.g. [5]
>  # Some tests are not concise enough, e.g. testJoinMaterialization9 
> h2. *Approach*
> 1. Create unit test MaterializedViewSubstitutionVisitorTest to test strategy-1
>  2. Create unit test MaterializedViewRelOptRulesTest to test strategy-2
>  3. Move tests from MaterializationTest to unit tests correspondingly, and keep MaterializationTest for integration tests.
>  
> [1] [https://calcite.apache.org/docs/materialized_views.html#substitution-via-rules-transformation]
>  [2] [https://calcite.apache.org/docs/materialized_views.html#rewriting-using-plan-structural-information]
>  [3] [https://github.com/apache/calcite/pull/1451/files#diff-d7e9e44fcb5fb1b98198415a3f78f167R1831]
>  [4] [https://github.com/apache/calcite/pull/1555]
>  [5] [https://github.com/apache/calcite/pull/1504]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)