@@ -109,6 +109,8 @@ class SnowflakeCompiler(SQLGlotCompiler):
109
109
)
110
110
111
111
SIMPLE_OPS = {
112
+ # overrides booland_agg/boolor_agg because neither of those can be used
113
+ # in a cumulative window frame, while min and max can
112
114
ops .All : "min" ,
113
115
ops .Any : "max" ,
114
116
ops .ArrayDistinct : "array_distinct" ,
@@ -130,10 +132,17 @@ class SnowflakeCompiler(SQLGlotCompiler):
130
132
ops .Hash : "hash" ,
131
133
ops .Median : "median" ,
132
134
ops .Mode : "mode" ,
135
+ ops .RandomUUID : "uuid_string" ,
133
136
ops .StringToDate : "to_date" ,
134
137
ops .StringToTimestamp : "to_timestamp_tz" ,
135
138
ops .TimeFromHMS : "time_from_parts" ,
136
139
ops .TimestampFromYMDHMS : "timestamp_from_parts" ,
140
+ ops .ToJSONMap : "as_object" ,
141
+ ops .ToJSONArray : "as_array" ,
142
+ ops .UnwrapJSONString : "as_varchar" ,
143
+ ops .UnwrapJSONInt64 : "as_integer" ,
144
+ ops .UnwrapJSONFloat64 : "as_double" ,
145
+ ops .UnwrapJSONBoolean : "as_boolean" ,
137
146
}
138
147
139
148
def __init__ (self ):
@@ -306,24 +315,6 @@ def visit_Cast(self, op, *, arg, to):
306
315
return self .if_ (self .f .is_array (arg ), arg , NULL )
307
316
return super ().visit_Cast (op , arg = arg , to = to )
308
317
309
- def visit_ToJSONMap (self , op , * , arg ):
310
- return self .if_ (self .f .is_object (arg ), arg , NULL )
311
-
312
- def visit_ToJSONArray (self , op , * , arg ):
313
- return self .if_ (self .f .is_array (arg ), arg , NULL )
314
-
315
- def visit_UnwrapJSONString (self , op , * , arg ):
316
- return self .if_ (self .f .is_varchar (arg ), self .f .as_varchar (arg ), NULL )
317
-
318
- def visit_UnwrapJSONInt64 (self , op , * , arg ):
319
- return self .if_ (self .f .is_integer (arg ), self .f .as_integer (arg ), NULL )
320
-
321
- def visit_UnwrapJSONFloat64 (self , op , * , arg ):
322
- return self .if_ (self .f .is_double (arg ), self .f .as_double (arg ), NULL )
323
-
324
- def visit_UnwrapJSONBoolean (self , op , * , arg ):
325
- return self .if_ (self .f .is_boolean (arg ), self .f .as_boolean (arg ), NULL )
326
-
327
318
def visit_IsNan (self , op , * , arg ):
328
319
return arg .eq (self .NAN )
329
320
@@ -383,14 +374,11 @@ def visit_MapLength(self, op, *, arg):
383
374
def visit_Log (self , op , * , arg , base ):
384
375
return self .f .log (base , arg )
385
376
386
- def visit_RandomScalar (self , op , ** kwargs ):
377
+ def visit_RandomScalar (self , op , ** _ ):
387
378
return self .f .uniform (
388
379
self .f .to_double (0.0 ), self .f .to_double (1.0 ), self .f .random ()
389
380
)
390
381
391
- def visit_RandomUUID (self , op , ** kwargs ):
392
- return self .f .uuid_string ()
393
-
394
382
def visit_ApproxMedian (self , op , * , arg , where ):
395
383
return self .agg .approx_percentile (arg , 0.5 , where = where )
396
384
0 commit comments