Github user Indhumathi27 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2396#discussion_r197645136
  
    --- Diff: 
core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java
 ---
    @@ -156,8 +162,70 @@ private static boolean isColumnMatches(boolean 
isTransactionalTable,
         // If it is non transactional table just check the column names, no 
need to validate
         // column id as multiple sdk's output placed in a single folder 
doesn't have same
         // column ID but can have same column name
    -    return (tableColumn.getColumnId().equals(queryColumn.getColumnId()) ||
    -        (!isTransactionalTable && 
tableColumn.getColName().equals(queryColumn.getColName())));
    +    if (tableColumn.getDataType().isComplexType() && 
!(tableColumn.getDataType().getId()
    +        == DataTypes.ARRAY_TYPE_ID)) {
    +      if (tableColumn.getColumnId().equals(queryColumn.getColumnId())) {
    +        return true;
    +      } else {
    +        return isColumnMatchesStruct(tableColumn, queryColumn);
    +      }
    +    } else {
    +      return (tableColumn.getColumnId().equals(queryColumn.getColumnId()) 
|| (!isTransactionalTable
    +          && tableColumn.getColName().equals(queryColumn.getColName())));
    +    }
    +  }
    +
    +  /**
    +   * In case of Multilevel Complex column - STRUCT/STRUCTofSTRUCT, 
traverse all the child dimension
    +   * to check column Id
    +   *
    +   * @param tableColumn
    +   * @param queryColumn
    +   * @return
    +   */
    +  private static boolean isColumnMatchesStruct(CarbonColumn tableColumn, 
CarbonColumn queryColumn) {
    +    if (tableColumn instanceof CarbonDimension) {
    +      CarbonDimension dimension = (CarbonDimension) tableColumn;
    +      if 
(dimension.getColName().equalsIgnoreCase(queryColumn.getColName().split("\\.")[0]))
 {
    +        if (dimension.getListOfChildDimensions() != null) {
    +          CarbonColumn columnMatchesStructlevel =
    +              isColumnMatchesStructlevel(tableColumn, 
dimension.getListOfChildDimensions(),
    +                  queryColumn);
    +          if (null != columnMatchesStructlevel) {
    +            return true;
    +          } else {
    +            return false;
    +          }
    +        }
    +      } else {
    +        return 
(tableColumn.getColumnId().equals(queryColumn.getColumnId()));
    +      }
    +    }
    +    return false;
    +  }
    +
    +  private static CarbonColumn isColumnMatchesStructlevel(CarbonColumn 
tableColumn,
    --- End diff --
    
    changed


---

Reply via email to