From 2c291d620a4f5585689f764a5e8ececeee09c735 Mon Sep 17 00:00:00 2001 From: ravipesala Date: Sun, 15 Jul 2018 17:42:59 +0530 Subject: [PATCH] [CARBONDATA-2534][MV] Fix substring expression not working in MV creation Problem: The column generated when subquery expression column present is wrong while creating of MV table. Solution: Corrected the column name by removing special characters. This closes #2476 --- .../org/apache/carbondata/mv/datamap/MVHelper.scala | 7 ++++++- .../carbondata/mv/rewrite/MVCreateTestCase.scala | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/datamap/MVHelper.scala b/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/datamap/MVHelper.scala index fe761c07390..8f79d64177b 100644 --- a/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/datamap/MVHelper.scala +++ b/datamap/mv/core/src/main/scala/org/apache/carbondata/mv/datamap/MVHelper.scala @@ -119,7 +119,12 @@ object MVHelper { } def updateColumnName(attr: Attribute): String = { - val name = attr.name.replace("(", "_").replace(")", "").replace(" ", "_").replace("=", "") + val name = + attr.name.replace("(", "_") + .replace(")", "") + .replace(" ", "_") + .replace("=", "") + .replace(",", "") attr.qualifier.map(qualifier => qualifier + "_" + name).getOrElse(name) } 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 4056f9203d6..7ac3c83962a 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 @@ -750,6 +750,18 @@ class MVCreateTestCase extends QueryTest with BeforeAndAfterAll { sql("drop table if exists test1") } + test("jira carbondata-2534") { + + sql("drop datamap if exists MV_exp") + sql("create datamap MV_exp using 'mv' as select sum(salary),substring(empname,2,5),designation from fact_table1 group by substring(empname,2,5),designation") + sql("rebuild datamap MV_exp") + val frame = sql( + "select sum(salary),substring(empname,2,5),designation from fact_table1 group by substring(empname,2,5),designation") + val analyzed = frame.queryExecution.analyzed + assert(verifyMVDataMap(analyzed, "MV_exp")) + sql("drop datamap if exists MV_exp") + } + def verifyMVDataMap(logicalPlan: LogicalPlan, dataMapName: String): Boolean = { val tables = logicalPlan collect { case l: LogicalRelation => l.catalogTable.get