in zetasql-toolkit-core/src/main/java/com/google/zetasql/toolkit/tools/lineage/ParentColumnFinder.java [205:226]
public void expandMakeStruct(ResolvedColumn targetColumn, ResolvedMakeStruct makeStruct) {
StructType structType = makeStruct.getType().asStruct();
int numberOfFields = structType.getFieldCount();
for (int i = 0; i < numberOfFields; i++) {
String fieldName = structType.getField(i).getName();
ResolvedExpr fieldExpression = makeStruct.getFieldList().get(i);
ResolvedColumn fieldColumn =
buildColumnSubfield(targetColumn, fieldName, fieldExpression.getType());
columnsBeingComputed.push(fieldColumn);
List<ResolvedColumn> expressionParents =
ExpressionParentFinder.findDirectParentsForExpression(fieldExpression);
columnsBeingComputed.forEach(
columnBeingComputed -> addParentsToColumn(columnBeingComputed, expressionParents));
columnsBeingComputed.pop();
if (fieldExpression instanceof ResolvedMakeStruct) {
expandMakeStruct(fieldColumn, (ResolvedMakeStruct) fieldExpression);
}
}
}