1
1
import pytest
2
-
2
+ import unittest
3
3
from exasol_udf_mock_python .column import Column
4
4
from exasol_udf_mock_python .group import Group
5
5
from exasol_udf_mock_python .mock_exa_environment import MockExaEnvironment
@@ -366,26 +366,59 @@ def run(ctx):
366
366
result = executor .run ([Group ([(1 ,), (2 ,), (3 ,), (4 ,), (5 ,), (6 ,)])], exa )
367
367
368
368
369
- def test_context_parameters ():
369
+ def test_access_variadic_inputs ():
370
370
def udf_wrapper ():
371
371
def run (ctx ):
372
- ctx .emit (ctx [0 ], ctx .t1 )
373
- ctx .emit (ctx [1 ], ctx .t2 )
374
- ctx .emit (ctx [2 ], ctx .t3 )
372
+ ctx .emit (ctx [0 ])
373
+ ctx .emit (ctx [1 ])
374
+ ctx .emit (ctx ["2" ])
375
+
376
+ input_columns = [Column ("1" , int , "INTEGER" ),
377
+ Column ("2" , int , "INTEGER" ),
378
+ Column ("3" , int , "INTEGER" )]
379
+ output_columns = [Column ("o1" , int , "INTEGER" )]
380
+ meta = MockMetaData (
381
+ script_code_wrapper_function = udf_wrapper ,
382
+ input_type = "SET" ,
383
+ input_columns = input_columns ,
384
+ output_type = "EMITS" ,
385
+ output_columns = output_columns ,
386
+ is_variadic_input = True )
387
+
388
+ input_data = [(1 , 2 , 3 ), (4 , 5 , 6 )]
389
+ exa = MockExaEnvironment (meta )
390
+ executor = UDFMockExecutor ()
391
+ result = executor .run ([Group (input_data )], exa )
392
+ for i , group in enumerate (result ):
393
+ result_row = group .rows
394
+ assert len (result_row ) == len (input_columns )
395
+ for j in range (len (result_row )):
396
+ assert len (result_row [j ]) == len (output_columns )
397
+ assert input_data [i ][j ] == result_row [j ][0 ]
398
+
399
+
400
+ def test_access_non_variadic_inputs ():
401
+ def udf_wrapper ():
402
+ def run (ctx ):
403
+ ctx .emit (ctx [0 ])
404
+ ctx .emit (ctx [1 ])
405
+ ctx .emit (ctx ["t3" ])
406
+ ctx .emit (ctx ["4" ])
375
407
376
408
input_columns = [Column ("t1" , int , "INTEGER" ),
377
409
Column ("t2" , int , "INTEGER" ),
378
- Column ("t3" , int , "INTEGER" )]
379
- output_columns = [ Column ("o1 " , int , "INTEGER" ),
380
- Column ("o2 " , int , "INTEGER" )]
410
+ Column ("t3" , int , "INTEGER" ),
411
+ Column ("4 " , int , "INTEGER" )]
412
+ output_columns = [ Column ("o1 " , int , "INTEGER" )]
381
413
meta = MockMetaData (
382
414
script_code_wrapper_function = udf_wrapper ,
383
415
input_type = "SET" ,
384
416
input_columns = input_columns ,
385
417
output_type = "EMITS" ,
386
- output_columns = output_columns
387
- )
388
- input_data = [(1 , 2 , 3 ), (4 , 5 , 6 )]
418
+ output_columns = output_columns ,
419
+ is_variadic_input = False )
420
+
421
+ input_data = [(1 , 2 , 3 , 4 ), (5 , 6 , 7 , 8 )]
389
422
exa = MockExaEnvironment (meta )
390
423
executor = UDFMockExecutor ()
391
424
result = executor .run ([Group (input_data )], exa )
@@ -394,4 +427,112 @@ def run(ctx):
394
427
assert len (result_row ) == len (input_columns )
395
428
for j in range (len (result_row )):
396
429
assert len (result_row [j ]) == len (output_columns )
397
- assert input_data [i ][j ] == result_row [j ][0 ] == result_row [j ][1 ]
430
+ assert input_data [i ][j ] == result_row [j ][0 ]
431
+
432
+
433
+ class InvalidTestsForVariadicInputs (unittest .TestCase ):
434
+ def test_access_variadic_inputs_by_name (self ):
435
+ def udf_wrapper ():
436
+ def run (ctx ):
437
+ ctx .emit (ctx .t1 )
438
+
439
+ input_columns = [Column ("1" , int , "INTEGER" )]
440
+ output_columns = [Column ("o1" , int , "INTEGER" )]
441
+ meta = MockMetaData (
442
+ script_code_wrapper_function = udf_wrapper ,
443
+ input_type = "SET" ,
444
+ input_columns = input_columns ,
445
+ output_type = "EMITS" ,
446
+ output_columns = output_columns ,
447
+ is_variadic_input = True )
448
+
449
+ input_data = [(1 ,)]
450
+ exa = MockExaEnvironment (meta )
451
+ executor = UDFMockExecutor ()
452
+ with self .assertRaises (RuntimeError ):
453
+ result = executor .run ([Group (input_data )], exa )
454
+
455
+ def test_invalid_variadic_input_columns_name (self ):
456
+ def udf_wrapper ():
457
+ def run (ctx ):
458
+ ctx .emit (ctx [0 ])
459
+
460
+ invalid_input_columns_list = [
461
+ [Column ("t1" , int , "INTEGER" )],
462
+ [Column ("1" , int , "INTEGER" ), Column ("3" , int , "INTEGER" )]
463
+ ]
464
+ for input_columns in invalid_input_columns_list :
465
+ output_columns = [Column ("o1" , int , "INTEGER" )]
466
+ with self .assertRaises (AssertionError ):
467
+ meta = MockMetaData (
468
+ script_code_wrapper_function = udf_wrapper ,
469
+ input_type = "SET" ,
470
+ input_columns = input_columns ,
471
+ output_type = "EMITS" ,
472
+ output_columns = output_columns ,
473
+ is_variadic_input = True )
474
+
475
+ input_data = [(1 ,)]
476
+ exa = MockExaEnvironment (meta )
477
+ executor = UDFMockExecutor ()
478
+ result = executor .run ([Group (input_data )], exa )
479
+
480
+
481
+ class InvalidTestsForNonVariadicInputs (unittest .TestCase ):
482
+ def test_invalid_access_to_inputs (self ):
483
+ def udf_wrapper ():
484
+ def run (ctx ):
485
+ ctx .emit (ctx ["1" ])
486
+
487
+ input_columns = [Column ("t1" , int , "INTEGER" )]
488
+ output_columns = [Column ("o1" , int , "INTEGER" )]
489
+
490
+ with self .assertRaises (RuntimeError ):
491
+ meta = MockMetaData (
492
+ script_code_wrapper_function = udf_wrapper ,
493
+ input_type = "SET" ,
494
+ input_columns = input_columns ,
495
+ output_type = "EMITS" ,
496
+ output_columns = output_columns ,
497
+ is_variadic_input = False )
498
+
499
+ input_data = [(1 ,)]
500
+ exa = MockExaEnvironment (meta )
501
+ executor = UDFMockExecutor ()
502
+ result = executor .run ([Group (input_data )], exa )
503
+
504
+
505
+ class InvalidTestsForUDFTypes (unittest .TestCase ):
506
+ def test_invalid_input_types (self ):
507
+ def udf_wrapper ():
508
+ def run (ctx ):
509
+ ctx .emit (ctx .t1 )
510
+
511
+ input_columns = [Column ("1" , int , "INTEGER" )]
512
+ output_columns = [Column ("o1" , int , "INTEGER" )]
513
+ for input_type in ["SETS" , "SCALARS" , "INVALID" ]:
514
+ with self .assertRaises (AssertionError ):
515
+ MockMetaData (
516
+ script_code_wrapper_function = udf_wrapper ,
517
+ input_type = input_type ,
518
+ input_columns = input_columns ,
519
+ output_type = "EMITS" ,
520
+ output_columns = output_columns ,
521
+ is_variadic_input = True )
522
+
523
+ def test_invalid_output_types (self ):
524
+ def udf_wrapper ():
525
+ def run (ctx ):
526
+ ctx .emit (ctx .t1 )
527
+
528
+ input_columns = [Column ("1" , int , "INTEGER" )]
529
+ output_columns = [Column ("o1" , int , "INTEGER" )]
530
+ for output_types in ["EMIT" , "RETURN" , "INVALID" ]:
531
+ with self .assertRaises (AssertionError ):
532
+ MockMetaData (
533
+ script_code_wrapper_function = udf_wrapper ,
534
+ input_type = "SET" ,
535
+ input_columns = input_columns ,
536
+ output_type = output_types ,
537
+ output_columns = output_columns ,
538
+ is_variadic_input = True )
0 commit comments