Github user ravipesala commented on a diff in the pull request: https://github.com/apache/carbondata/pull/1571#discussion_r154072485 --- Diff: core/src/main/java/org/apache/carbondata/core/metadata/TableProperty.java --- @@ -0,0 +1,209 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.carbondata.core.metadata; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.apache.carbondata.core.constants.CarbonCommonConstants; +import org.apache.carbondata.core.metadata.datatype.DataType; +import org.apache.carbondata.core.metadata.datatype.DataTypes; +import org.apache.carbondata.core.metadata.datatype.StructField; +import org.apache.carbondata.core.metadata.datatype.StructType; +import org.apache.carbondata.core.metadata.schema.table.MalformedCarbonCommandException; +import org.apache.carbondata.core.util.CarbonUtil; + +/** + * This class encapsulate the definition of sortColumns, dictionaryColumns, noInvertedIndexColumns + * in the table. + * These columns are extracted from schema and table property map when creating instance + * of this class. + * It is used when creating table and alter table add column. + */ +public class TableProperty { + + private Map<String, String> tableProperties; + private List<String> sortColumns; + private List<String> noInvertedIndexColumns; + private List<String> dictionaryColumns; + + /** + * This is called in case of create table + */ + public TableProperty(StructType schema, Map<String, String> tableProperties) + throws MalformedCarbonCommandException { + if (tableProperties == null) { + throw new IllegalArgumentException("table property should not be null"); + } + this.tableProperties = tableProperties; + this.noInvertedIndexColumns = extractNoInvertedIndexColumns(); + this.dictionaryColumns = extractDictionaryColumns(); + this.sortColumns = extractSortColumns(schema); + } + + /** + * This is called in case of alter table add column + */ + public TableProperty( + List<StructField> newFields, + List<String> existingSortColumns, + Map<String, String> existingTableProperties, + Map<String, String> alterTableProperties) { + if (existingSortColumns == null) { + throw new IllegalArgumentException("sort columns should not be null"); + } + if (existingTableProperties == null) { + throw new IllegalArgumentException("table property should not be null"); + } + + // update the existing table property according to alter table property + for (Map.Entry<String, String> entry : alterTableProperties.entrySet()) { + String newValue = entry.getValue(); + String existingValue = existingTableProperties.get(entry.getKey()); + if (existingValue != null) { + existingTableProperties.put(entry.getKey(), existingValue + "," + newValue); --- End diff -- Why it is required to be appended with old value?
---