danny0405 commented on a change in pull request #1374: [CALCITE-3138] 
RelStructuredTypeFlattener doesn't restructure ROW type fields
URL: https://github.com/apache/calcite/pull/1374#discussion_r315523140
 
 

 ##########
 File path: 
core/src/main/java/org/apache/calcite/sql2rel/RelStructuredTypeFlattener.java
 ##########
 @@ -934,7 +968,21 @@ private RexNode flattenComparison(
         return conjunction;
       }
     }
+
+  }
+
+  private int getNewInnerOrdinal(RexNode firstOp, String literalString) {
+    int newInnerOrdinal = 0;
+    for (RelDataTypeField field : firstOp.getType().getFieldList()) {
+      if (literalString.equalsIgnoreCase(field.getName())) {
+        break;
 
 Review comment:
   1. You indeed do the check:
   ```java
         if (rexCall.op == SqlStdOperatorTable.ITEM
             && rexCall.operands.get(0).getType().isStruct()
             && rexCall.operands.get(1).isA(SqlKind.LITERAL)
             && SqlTypeUtil.inCharFamily(rexCall.operands.get(1).getType())) {
   ```
   before calling this method, but within the method, you still have a 
recursive logic to flatten all the struct fields, which i think has already 
exceed the limitation of the check.
   
   2. Assume we have an expression a(b(c, 'k1'), 'k2')['k1'] (a, b, c all 
return struct types), is it really right we return the field of field c['k1'] ? 
And how do you know that a, b, and c are all `ITEM` operators ?

----------------------------------------------------------------
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