Github user jackylk commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/1571#discussion_r154116722
--- 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 --
This is called in case of alter table add column, it need to be updated in
the existing table property. I will add comment for it.
---