Github user akashrn5 commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2422#discussion_r199402302
--- 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,
--- End diff --
give proper variable names, add comments in all places
---