Github user sounakr commented on a diff in the pull request: https://github.com/apache/carbondata/pull/2417#discussion_r201225285 --- 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 -- Done
---