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

    https://github.com/apache/carbondata/pull/2422#discussion_r199559152
  
    --- Diff: 
integration/spark-common/src/main/scala/org/apache/spark/sql/execution/command/carbonTableSchemaCommon.scala
 ---
    @@ -299,17 +303,112 @@ class AlterTableColumnSchemaGenerator(
         val columnValidator = CarbonSparkFactory.getCarbonColumnValidator
         columnValidator.validateColumns(allColumns)
     
    +
    +    def getLocalDictColumnList(tableProperties: 
scala.collection.mutable.Map[String, String],
    +        columns: scala.collection.mutable.ListBuffer[ColumnSchema]): 
(scala.collection.mutable
    +    .ListBuffer[ColumnSchema], 
scala.collection.mutable.ListBuffer[ColumnSchema]) = {
    +      val includeColumns = new 
scala.collection.mutable.ListBuffer[ColumnSchema]
    +      val excludeColumns = new 
scala.collection.mutable.ListBuffer[ColumnSchema]
    +      val localDictIncludeColumns = if (tableProperties
    +        .get(CarbonCommonConstants.LOCAL_DICTIONARY_INCLUDE).isDefined) {
    +        tableProperties(CarbonCommonConstants.LOCAL_DICTIONARY_INCLUDE)
    +      } else {
    +        null
    +      }
    +      val localDictExcludeColumns = if (tableProperties
    +        .get(CarbonCommonConstants.LOCAL_DICTIONARY_EXCLUDE).isDefined) {
    +        tableProperties(CarbonCommonConstants.LOCAL_DICTIONARY_EXCLUDE)
    +      } else {
    +        null
    +      }
    +      if (null != localDictIncludeColumns) {
    +        if (null == localDictExcludeColumns) {
    +          columns.foreach { column =>
    +            if (localDictIncludeColumns.contains(column.getColumnName)) {
    +              includeColumns.append(column)
    +            } else {
    +              if (column.getDataType.equals(DataTypes.STRING) ||
    +                  column.getDataType.toString.equals("ARRAY") ||
    +                  column.getDataType.toString.equals("STRUCT")) {
    +                excludeColumns.append(column)
    +              }
    +            }
    +          }
    +        } else {
    +          columns.foreach { column =>
    +            if (localDictIncludeColumns.contains(column.getColumnName) &&
    +                !localDictExcludeColumns.contains(column.getColumnName)) {
    +              includeColumns.append(column)
    +            } else if 
(localDictExcludeColumns.contains(column.getColumnName)) {
    +              excludeColumns.append(column)
    +            }
    +          }
    +        }
    +      } else {
    +        if (null == localDictExcludeColumns) {
    +          columns.foreach { column =>
    +            if (column.getDataType.equals(DataTypes.STRING) ||
    +                column.getDataType.toString.equals("ARRAY") ||
    +                column.getDataType.toString.equals("STRUCT")) {
    +              includeColumns.append(column)
    +            }
    +          }
    +        } else {
    +          columns.foreach { column =>
    +            if (!localDictExcludeColumns.contains(column.getColumnName) &&
    +                (column.getDataType.equals(DataTypes.STRING) ||
    +                 column.getDataType.toString.equals("ARRAY") ||
    +                 column.getDataType.toString.equals("STRUCT"))) {
    +              includeColumns.append(column)
    +            } else if 
(localDictExcludeColumns.contains(column.getColumnName)) {
    +              excludeColumns.append(column)
    +            }
    +          }
    +        }
    +      }
    +
    +      (includeColumns, excludeColumns)
    +    }
    +
    +    val columnsWithoutNewCols = new 
scala.collection.mutable.ListBuffer[ColumnSchema]
    +    allColumns.foreach { column =>
    +      if (!newCols.exists(x => 
x.getColumnName.equalsIgnoreCase(column.getColumnName))) {
    +        columnsWithoutNewCols += column
    +      }
    +    }
    +
    +
         if (alterTableModel.tableProperties != null) {
           CarbonUtil
             .setLocalDictColumnsToWrapperSchema(newCols.asJava,
               alterTableModel.tableProperties.asJava,
               
tableSchema.getTableProperties.get(CarbonCommonConstants.LOCAL_DICTIONARY_ENABLE))
         }
     
    +    val newMainList = 
getLocalDictColumnList(tableSchema.getTableProperties.asScala,
    +      columnsWithoutNewCols)
    +    val ss: scala.collection.mutable.Map[String, String] = mutable
    +      .Map(alterTableModel.tableProperties.toSeq: _*)
    +    val newAlterList = getLocalDictColumnList(ss,
    +      newCols.to[mutable.ListBuffer])
    +
    +    newMainList._1.appendAll(newAlterList._1)
    +    newMainList._2.appendAll(newAlterList._2)
    +
    +    val localDictioanryIncludeColumn = new StringBuilder
    +    val localDictioanryExcludeColumn = new StringBuilder
    +    newMainList._1.foreach { column =>
    +      localDictioanryIncludeColumn.append(column.getColumnName).append(",")
    +    }
    +    newMainList._2.foreach { column =>
    +      localDictioanryExcludeColumn.append(column.getColumnName).append(",")
    +    }
    +
         // populate table properties map
         val tablePropertiesMap = tableSchema.getTableProperties
         alterTableModel.tableProperties.foreach {
    -      x => val value = tablePropertiesMap.get(x._1)
    +      x =>
    --- End diff --
    
    .use a tuple of (key, value) instead of x like .foreach { (key, value) => }


---

Reply via email to