[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

Reply via email to