in zetasql-toolkit-core/src/main/java/com/google/zetasql/toolkit/tools/lineage/ColumnLineageExtractor.java [210:224]
private static Optional<ResolvedColumn> resolveUpdateItemTarget(ResolvedExpr updateTarget) {
if (updateTarget instanceof ResolvedColumnRef) {
ResolvedColumnRef columnRef = (ResolvedColumnRef) updateTarget;
return Optional.of(columnRef.getColumn());
} else if (updateTarget instanceof ResolvedGetStructField) {
ResolvedGetStructField getStructField = (ResolvedGetStructField) updateTarget;
int structFieldIdx = (int) getStructField.getFieldIdx();
String fieldName =
getStructField.getExpr().getType().asStruct().getField(structFieldIdx).getName();
return resolveUpdateItemTarget(getStructField.getExpr())
.map(target -> buildColumnSubfield(target, fieldName, getStructField.getType()));
}
return Optional.empty();
}