[CARBONDATA-2531][MV] Fix alias not working on MV query Problem: when alias present on actual query then MV match not happening because alias is not ignored. Solution : Do semantic check while doing match
This closes #2475 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/04e0c574 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/04e0c574 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/04e0c574 Branch: refs/heads/branch-1.4 Commit: 04e0c5744f97d304586adf0800625023cdc3ee0f Parents: 254e6a5 Author: ravipesala <ravi.pes...@gmail.com> Authored: Sun Jul 15 17:44:07 2018 +0530 Committer: ravipesala <ravi.pes...@gmail.com> Committed: Tue Jul 31 00:11:26 2018 +0530 ---------------------------------------------------------------------- .../carbondata/mv/rewrite/DefaultMatchMaker.scala | 5 +++-- .../apache/carbondata/mv/rewrite/MVCreateTestCase.scala | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/04e0c574/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/rewrite/DefaultMatchMaker.scala ---------------------------------------------------------------------- diff --git a/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/rewrite/DefaultMatchMaker.scala b/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/rewrite/DefaultMatchMaker.scala index 3e8b2cd..3a0fa10 100644 --- a/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/rewrite/DefaultMatchMaker.scala +++ b/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/rewrite/DefaultMatchMaker.scala @@ -367,8 +367,9 @@ object GroupbyGroupbyNoChildDelta extends DefaultMatchPattern { if (isGroupingEmR && isGroupingRmE) { val isOutputEmR = gb_2q.outputList.forall { case a @ Alias(_, _) => - gb_2a.outputList.exists{a1 => - a1.isInstanceOf[Alias] && a1.asInstanceOf[Alias].child.semanticEquals(a.child) + gb_2a.outputList.exists{ + case a1: Alias => a1.child.semanticEquals(a.child) + case exp => exp.semanticEquals(a.child) } case exp => gb_2a.outputList.exists(_.semanticEquals(exp)) } http://git-wip-us.apache.org/repos/asf/carbondata/blob/04e0c574/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVCreateTestCase.scala ---------------------------------------------------------------------- diff --git a/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVCreateTestCase.scala b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVCreateTestCase.scala index d69df17..f0f9c82 100644 --- a/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVCreateTestCase.scala +++ b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVCreateTestCase.scala @@ -861,6 +861,18 @@ class MVCreateTestCase extends QueryTest with BeforeAndAfterAll { sql("drop datamap if exists MV_exp2") } + test("jira carbondata-2531") { + + sql("drop datamap if exists datamap46") + sql("create datamap datamap46 using 'mv' as select deptname, sum(salary) from fact_table1 group by deptname") + sql("rebuild datamap datamap46") + val frame = sql( + "select deptname as babu, sum(salary) from fact_table1 as tt group by deptname") + val analyzed = frame.queryExecution.analyzed + assert(verifyMVDataMap(analyzed, "datamap46")) + sql("drop datamap if exists datamap46") + } + def verifyMVDataMap(logicalPlan: LogicalPlan, dataMapName: String): Boolean = { val tables = logicalPlan collect { case l: LogicalRelation => l.catalogTable.get