Github user gvramana commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2417#discussion_r200967561
--- Diff:
core/src/main/java/org/apache/carbondata/core/datastore/page/ComplexColumnPage.java
---
@@ -63,25 +66,42 @@ public ComplexColumnPage(List<ColumnType>
complexColumnType) {
* below method will be used to initlize the column page of complex type
* @param columnToDictMap
* dictionary map
- * @param columnNames
- * list of columns
* @param pageSize
* number of records
* @throws MemoryException
* if memory is not sufficient
*/
- public void initialize(Map<String, LocalDictionaryGenerator>
columnToDictMap,
- List<String> columnNames, int pageSize) throws MemoryException {
+ public void initialize(Map<String, LocalDictionaryGenerator>
columnToDictMap, int pageSize)
+ throws MemoryException {
+ DataType dataType;
for (int i = 0; i < this.columnPages.length; i++) {
- LocalDictionaryGenerator localDictionaryGenerator =
columnToDictMap.get(columnNames.get(i));
+ ComplexColumnInfo complexColumnInfo = complexColumnInfoList.get(i);
+ LocalDictionaryGenerator localDictionaryGenerator =
+ columnToDictMap.get(complexColumnInfo.getColumnNames());
if (null == localDictionaryGenerator) {
- TableSpec.ColumnSpec spec = TableSpec.ColumnSpec
- .newInstance(columnNames.get(i), DataTypes.BYTE_ARRAY,
complexColumnType.get(i));
- this.columnPages[i] = ColumnPage.newPage(spec,
DataTypes.BYTE_ARRAY, pageSize);
- this.columnPages[i].setStatsCollector(new DummyStatsCollector());
+ dataType = complexColumnInfo.getColumnDataTypes();
+ if ((complexColumnInfo.isNoDictionary() &&
!((DataTypes.isStructType(dataType) || DataTypes
+ .isArrayType(dataType) || (dataType == DataTypes.STRING) ||
(dataType
+ == DataTypes.VARCHAR) || (dataType == DataTypes.DATE) ||
DataTypes
+ .isDecimal(dataType))))) {
+ TableSpec.ColumnSpec spec = TableSpec.ColumnSpec
+ .newInstance(complexColumnInfo.getColumnNames(), dataType,
+ complexColumnInfo.getComplexColumnType());
+ // no dictionary primitive types need adaptive encoding,
+ // hence store as object instead of byte array
+ this.columnPages[i] = ColumnPage.newPage(spec, dataType,
pageSize);
+
this.columnPages[i].setStatsCollector(PrimitivePageStatsCollector.newInstance(dataType));
+ } else {
+ TableSpec.ColumnSpec spec = TableSpec.ColumnSpec
--- End diff --
remove duplicate logic
---