11import pytest
2-
2+ import unittest
33from exasol_udf_mock_python .column import Column
44from exasol_udf_mock_python .group import Group
55from exasol_udf_mock_python .mock_exa_environment import MockExaEnvironment
@@ -366,26 +366,59 @@ def run(ctx):
366366 result = executor .run ([Group ([(1 ,), (2 ,), (3 ,), (4 ,), (5 ,), (6 ,)])], exa )
367367
368368
369- def test_context_parameters ():
369+ def test_access_variadic_inputs ():
370370 def udf_wrapper ():
371371 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" ])
375407
376408 input_columns = [Column ("t1" , int , "INTEGER" ),
377409 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" )]
381413 meta = MockMetaData (
382414 script_code_wrapper_function = udf_wrapper ,
383415 input_type = "SET" ,
384416 input_columns = input_columns ,
385417 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 )]
389422 exa = MockExaEnvironment (meta )
390423 executor = UDFMockExecutor ()
391424 result = executor .run ([Group (input_data )], exa )
@@ -394,4 +427,112 @@ def run(ctx):
394427 assert len (result_row ) == len (input_columns )
395428 for j in range (len (result_row )):
396429 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