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


---

Reply via email to