Github user ravipesala commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2478#discussion_r204479220
  
    --- 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)) {
    +      throw new UnsupportedOperationException("MV with same query present")
    +    }
    +    if (!modularPlan.isSPJGH)  {
    +      throw new UnsupportedOperationException("MV is not supported for 
this query")
    --- End diff --
    
    ok


---

Reply via email to