QiangCai commented on a change in pull request #3778:
URL: https://github.com/apache/carbondata/pull/3778#discussion_r458509321



##########
File path: 
core/src/main/java/org/apache/carbondata/core/scan/complextypes/ArrayQueryType.java
##########
@@ -97,21 +97,35 @@ public void fillRequiredBlockData(RawBlockletColumnChunks 
blockChunkHolder)
 
   @Override
   public Object getDataBasedOnDataType(ByteBuffer dataBuffer) {
-    Object[] data = fillData(dataBuffer);
+    return getDataBasedOnDataType(dataBuffer, false);
+  }
+
+  @Override
+  public Object getDataBasedOnDataType(ByteBuffer dataBuffer, boolean 
getBytesData) {
+    Object[] data = fillData(dataBuffer, false);
     if (data == null) {
       return null;
     }
     return DataTypeUtil.getDataTypeConverter().wrapWithGenericArrayData(data);
   }
 
-  protected Object[] fillData(ByteBuffer dataBuffer) {
+  @Override
+  public Object[] getObjectArrayDataBasedOnDataType(ByteBuffer dataBuffer) {
+    Object[] data = fillData(dataBuffer, true);
+    if (data == null) {
+      return null;
+    }
+    return data;

Review comment:
       return fillData(dataBuffer, true);

##########
File path: 
integration/spark/src/main/scala/org/apache/spark/sql/secondaryindex/query/SecondaryIndexQueryResultProcessor.java
##########
@@ -281,12 +310,45 @@ private void processResult(List<CarbonIterator<RowBatch>> 
detailQueryResultItera
       }
     }
 
+    if (!complexDimensionInfoMap.isEmpty() && 
complexColumnParentBlockIndexes.length > 0) {
+      // In case of complex array type, flatten the data and add for sorting
+      // TODO: Handle for nested array and other complex types
+      for (int k = 0; k < wrapper.getComplexTypesKeys().length; k++) {
+        byte[] complexKeyByIndex = wrapper.getComplexKeyByIndex(k);
+        ByteBuffer byteArrayInput = ByteBuffer.wrap(complexKeyByIndex);
+        GenericQueryType genericQueryType =
+            complexDimensionInfoMap.get(complexColumnParentBlockIndexes[k]);
+        short length = byteArrayInput.getShort(2);
+        // get flattened array data
+        Object[] data = 
genericQueryType.getObjectArrayDataBasedOnDataType(byteArrayInput);
+        if (length != 1) {
+          for (int j = 1; j < length; j++) {
+            preparedRow[i] = getData(data, j);
+            preparedRow[i + 1] = implicitColumnByteArray;
+            addRowForSorting(preparedRow.clone());
+          }
+          // add first row
+          preparedRow[i] = getData(data, 0);
+        } else {
+          preparedRow[i] = getData(data, 0);
+        }

Review comment:
       }
   preparedRow[i] = getData(data, 0);

##########
File path: 
integration/spark/src/main/scala/org/apache/spark/sql/secondaryindex/query/SecondaryIndexQueryResultProcessor.java
##########
@@ -226,8 +239,16 @@ private void processResult(List<CarbonIterator<RowBatch>> 
detailQueryResultItera
     for (CarbonIterator<RowBatch> detailQueryIterator : 
detailQueryResultIteratorList) {
       while (detailQueryIterator.hasNext()) {
         RowBatch batchResult = detailQueryIterator.next();
+        DetailQueryResultIterator queryIterator = (DetailQueryResultIterator) 
detailQueryIterator;
+        BlockExecutionInfo blockExecutionInfo = 
queryIterator.getBlockExecutionInfo();
+        // get complex dimension info map from block execution info
+        Map<Integer, GenericQueryType> complexDimensionInfoMap =
+            blockExecutionInfo.getComplexDimensionInfoMap();
+        int[] complexColumnParentBlockIndexes =
+            blockExecutionInfo.getComplexColumnParentBlockIndexes();

Review comment:
       move to outside of while loop




----------------------------------------------------------------
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:
us...@infra.apache.org


Reply via email to