@@ -20,13 +20,65 @@ partial class DuckDBConnection
2020{
2121#if NET8_0_OR_GREATER
2222 [ Experimental ( "DuckDBNET001" ) ]
23- public unsafe void RegisterTableFunction < T > ( string name , Func < IEnumerable < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
23+ public void RegisterTableFunction < T > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
24+ {
25+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T ) ) ;
26+ }
27+
28+ [ Experimental ( "DuckDBNET001" ) ]
29+ public void RegisterTableFunction < T1 , T2 > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
30+ {
31+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T1 ) , typeof ( T2 ) ) ;
32+ }
33+
34+ [ Experimental ( "DuckDBNET001" ) ]
35+ public void RegisterTableFunction < T1 , T2 , T3 > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
36+ {
37+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T1 ) , typeof ( T2 ) , typeof ( T3 ) ) ;
38+ }
39+
40+ [ Experimental ( "DuckDBNET001" ) ]
41+ public void RegisterTableFunction < T1 , T2 , T3 , T4 > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
42+ {
43+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T1 ) , typeof ( T2 ) , typeof ( T3 ) , typeof ( T4 ) ) ;
44+ }
45+
46+ [ Experimental ( "DuckDBNET001" ) ]
47+ public void RegisterTableFunction < T1 , T2 , T3 , T4 , T5 > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
48+ {
49+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T1 ) , typeof ( T2 ) , typeof ( T3 ) , typeof ( T4 ) , typeof ( T5 ) ) ;
50+ }
51+
52+ [ Experimental ( "DuckDBNET001" ) ]
53+ public void RegisterTableFunction < T1 , T2 , T3 , T4 , T5 , T6 > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
54+ {
55+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T1 ) , typeof ( T2 ) , typeof ( T3 ) , typeof ( T4 ) , typeof ( T5 ) , typeof ( T6 ) ) ;
56+ }
57+
58+ [ Experimental ( "DuckDBNET001" ) ]
59+ public void RegisterTableFunction < T1 , T2 , T3 , T4 , T5 , T6 , T7 > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
60+ {
61+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T1 ) , typeof ( T2 ) , typeof ( T3 ) , typeof ( T4 ) , typeof ( T5 ) , typeof ( T6 ) , typeof ( T7 ) ) ;
62+ }
63+
64+ [ Experimental ( "DuckDBNET001" ) ]
65+ public void RegisterTableFunction < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback )
66+ {
67+ RegisterTableFunctionInternal ( name , resultCallback , mapperCallback , typeof ( T1 ) , typeof ( T2 ) , typeof ( T3 ) , typeof ( T4 ) , typeof ( T5 ) , typeof ( T6 ) , typeof ( T7 ) , typeof ( T8 ) ) ;
68+ }
69+
70+ [ Experimental ( "DuckDBNET001" ) ]
71+ private unsafe void RegisterTableFunctionInternal ( string name , Func < IReadOnlyList < IDuckDBValueReader > , TableFunction > resultCallback , Action < object ? , IDuckDBDataWriter [ ] , ulong > mapperCallback , params Type [ ] parameterTypes )
2472 {
2573 var function = NativeMethods . TableFunction . DuckDBCreateTableFunction ( ) ;
26- NativeMethods . TableFunction . DuckDBTableFunctionSetName ( function , name . ToUnmanagedString ( ) ) ;
74+ using ( var handle = name . ToUnmanagedString ( ) )
75+ {
76+ NativeMethods . TableFunction . DuckDBTableFunctionSetName ( function , handle ) ;
77+ }
2778
28- using ( var logicalType = DuckDBTypeMap . GetLogicalType < T > ( ) )
79+ foreach ( var type in parameterTypes )
2980 {
81+ using var logicalType = DuckDBTypeMap . GetLogicalType ( type ) ;
3082 NativeMethods . TableFunction . DuckDBTableFunctionAddParameter ( function , logicalType ) ;
3183 }
3284
@@ -69,7 +121,7 @@ public static unsafe void Bind(IntPtr info)
69121
70122 foreach ( var parameter in parameters )
71123 {
72- ( parameter as IDisposable ) ? . Dispose ( ) ;
124+ ( ( DuckDBValue ) parameter ) . Dispose ( ) ;
73125 }
74126
75127 foreach ( var columnInfo in tableFunctionData . Columns )
0 commit comments