ravipesala commented on a change in pull request #3201: [CARBONDATA-3371] Fix 
ArrayIndexOutOfBoundsException of compaction after sort_columns modification
URL: https://github.com/apache/carbondata/pull/3201#discussion_r281502330
 
 

 ##########
 File path: 
core/src/main/java/org/apache/carbondata/core/scan/result/iterator/RawResultIterator.java
 ##########
 @@ -66,18 +81,62 @@
 
   public RawResultIterator(CarbonIterator<RowBatch> 
detailRawQueryResultIterator,
       SegmentProperties sourceSegProperties, SegmentProperties 
destinationSegProperties,
-      boolean isStreamingHandoff) {
+      boolean isStreamingHandoff, boolean hasColumnDrift) {
     this.detailRawQueryResultIterator = detailRawQueryResultIterator;
     this.sourceSegProperties = sourceSegProperties;
     this.destinationSegProperties = destinationSegProperties;
     this.executorService = Executors.newFixedThreadPool(1);
-
+    this.hasColumnDrift = hasColumnDrift;
     if (!isStreamingHandoff) {
       init();
     }
   }
 
+  private void initForColumnDrift() {
+    List<CarbonDimension> noDictDims =
+        new ArrayList<>(destinationSegProperties.getDimensions().size());
+    for (CarbonDimension dimension : destinationSegProperties.getDimensions()) 
{
+      if (dimension.getNumberOfChild() == 0) {
+        if (!dimension.hasEncoding(Encoding.DICTIONARY)) {
+          noDictDims.add(dimension);
+        }
+      }
+    }
+    measureCount = destinationSegProperties.getMeasures().size();
+    noDictCount = noDictDims.size();
+    isColumnDrift = new boolean[noDictCount];
+    noDictMap = new int[noDictCount];
+    measureDataTypes = new DataType[noDictCount];
+    List<CarbonMeasure> sourceMeasures = sourceSegProperties.getMeasures();
+    int tableMeasureCount = sourceMeasures.size();
+    for (int i = 0; i < noDictCount; i++) {
+      for (int j = 0; j < tableMeasureCount; j++) {
+        if (RestructureUtil.isColumnMatches(true, noDictDims.get(i), 
sourceMeasures.get(j))) {
+          isColumnDrift[i] = true;
+          measureDataTypes[i] = sourceMeasures.get(j).getDataType();
+          break;
+        }
+      }
+      if (measureDataTypes[i] == null) {
 
 Review comment:
   I think this check is not needed as by default it is false

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to