Github user ravipesala commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2478#discussion_r204479397
--- Diff:
datamap/mv/core/src/main/scala/org/apache/carbondata/mv/datamap/MVHelper.scala
---
@@ -118,6 +122,43 @@ object MVHelper {
DataMapStoreManager.getInstance().saveDataMapSchema(dataMapSchema)
}
+ private def validateMVQuery(sparkSession: SparkSession,
+ logicalPlan: LogicalPlan) {
+ val dataMapProvider = DataMapManager.get().getDataMapProvider(null,
+ new DataMapSchema("", DataMapClassProvider.MV.getShortName),
sparkSession)
+ dataMapProvider
+ var catalog =
DataMapStoreManager.getInstance().getDataMapCatalog(dataMapProvider,
+
DataMapClassProvider.MV.getShortName).asInstanceOf[SummaryDatasetCatalog]
+ if (catalog == null) {
+ catalog = new SummaryDatasetCatalog(sparkSession)
+ }
+ val modularPlan =
+ catalog.mvSession.sessionState.modularizer.modularize(
+
catalog.mvSession.sessionState.optimizer.execute(logicalPlan)).next().semiHarmonized
+
+ val isValid = modularPlan match {
+ case g: GroupBy =>
+ // Make sure all predicates are present in projections.
+ g.predicateList.forall{p =>
+ g.outputList.exists{
+ case a: Alias =>
+ a.semanticEquals(p) || a.child.semanticEquals(p)
+ case other => other.semanticEquals(p)
+ }
+ }
+ case _ => true
+ }
+ if (!isValid) {
+ throw new UnsupportedOperationException("Group by columns must be
present in project columns")
+ }
+ if(catalog.isMVWithSameQueryPresent(logicalPlan)) {
--- End diff --
ok
---