@@ -92,6 +92,16 @@ def _aggregate(self, funcname: str, *args, where):
92
92
return sge .Filter (this = expr , expression = sge .Where (this = where ))
93
93
return expr
94
94
95
+ def visit_StructColumn (self , op , * , names , values ):
96
+ return sge .Struct .from_arg_list (
97
+ [
98
+ sge .PropertyEQ (
99
+ this = sg .to_identifier (name , quoted = self .quoted ), expression = value
100
+ )
101
+ for name , value in zip (names , values )
102
+ ]
103
+ )
104
+
95
105
def visit_ArrayDistinct (self , op , * , arg ):
96
106
return self .if_ (
97
107
arg .is_ (NULL ),
@@ -314,6 +324,18 @@ def visit_NonNullLiteral(self, op, *, value, dtype):
314
324
args .append (tz )
315
325
316
326
return self .f [funcname ](* args )
327
+ elif dtype .is_struct ():
328
+ return sge .Struct .from_arg_list (
329
+ [
330
+ sge .PropertyEQ (
331
+ this = sg .to_identifier (k , quoted = self .quoted ),
332
+ expression = self .visit_Literal (
333
+ ops .Literal (v , field_dtype ), value = v , dtype = field_dtype
334
+ ),
335
+ )
336
+ for field_dtype , (k , v ) in zip (dtype .types , value .items ())
337
+ ]
338
+ )
317
339
else :
318
340
return None
319
341
0 commit comments