File tree 3 files changed +37
-3
lines changed
3 files changed +37
-3
lines changed Original file line number Diff line number Diff line change @@ -199,6 +199,15 @@ def _literal(t, op):
199
199
return base_literal (t , op )
200
200
201
201
202
+ def _arbitrary (t , op ):
203
+ if (how := op .how ) == "heavy" :
204
+ raise com .OperationNotDefinedError (
205
+ "how='heavy' not implemented for the SQLite backend"
206
+ )
207
+
208
+ return reduction (getattr (sa .func , f"_ibis_sqlite_arbitrary_{ how } " ))(t , op )
209
+
210
+
202
211
operation_registry .update (
203
212
{
204
213
# TODO(kszucs): don't dispatch on op.arg since that should be always an
@@ -322,5 +331,6 @@ def _literal(t, op):
322
331
ops .RandomScalar : fixed_arity (
323
332
lambda : 0.5 + sa .func .random () / sa .cast (- 1 << 64 , sa .REAL ), 0
324
333
),
334
+ ops .Arbitrary : _arbitrary ,
325
335
}
326
336
)
Original file line number Diff line number Diff line change 1
1
from __future__ import annotations
2
2
3
+ import abc
3
4
import functools
4
5
import inspect
5
6
import math
@@ -350,6 +351,32 @@ def __init__(self):
350
351
super ().__init__ (operator .xor )
351
352
352
353
354
+ class _ibis_sqlite_arbitrary (abc .ABC ):
355
+ def __init__ (self ) -> None :
356
+ self .value = None
357
+
358
+ @abc .abstractmethod
359
+ def step (self , value ):
360
+ ...
361
+
362
+ def finalize (self ) -> int | None :
363
+ return self .value
364
+
365
+
366
+ @udaf
367
+ class _ibis_sqlite_arbitrary_first (_ibis_sqlite_arbitrary ):
368
+ def step (self , value ):
369
+ if self .value is None :
370
+ self .value = value
371
+
372
+
373
+ @udaf
374
+ class _ibis_sqlite_arbitrary_last (_ibis_sqlite_arbitrary ):
375
+ def step (self , value ):
376
+ if value is not None :
377
+ self .value = value
378
+
379
+
353
380
def _number_of_arguments (callable ):
354
381
signature = inspect .signature (callable )
355
382
parameters = signature .parameters .values ()
Original file line number Diff line number Diff line change @@ -554,7 +554,6 @@ def mean_and_std(v):
554
554
[
555
555
'impala' ,
556
556
'mysql' ,
557
- 'sqlite' ,
558
557
'polars' ,
559
558
'datafusion' ,
560
559
"mssql" ,
@@ -571,7 +570,6 @@ def mean_and_std(v):
571
570
[
572
571
'impala' ,
573
572
'mysql' ,
574
- 'sqlite' ,
575
573
'polars' ,
576
574
'datafusion' ,
577
575
"mssql" ,
@@ -589,7 +587,6 @@ def mean_and_std(v):
589
587
[
590
588
'impala' ,
591
589
'mysql' ,
592
- 'sqlite' ,
593
590
'polars' ,
594
591
'datafusion' ,
595
592
"mssql" ,
You can’t perform that action at this time.
0 commit comments