66using DuckDB . NET . Data . Writer ;
77using DuckDB . NET . Native ;
88using System ;
9+ using System . Collections . Generic ;
910using System . Diagnostics . CodeAnalysis ;
1011using System . Runtime . CompilerServices ;
1112using System . Runtime . InteropServices ;
@@ -16,27 +17,27 @@ partial class DuckDBConnection
1617{
1718#if NET8_0_OR_GREATER
1819 [ Experimental ( "DuckDBNET001" ) ]
19- public void RegisterScalarFunction < TResult > ( string name , Action < IDuckDBDataReader [ ] , IDuckDBDataWriter , ulong > action , bool isPureFunction = false )
20+ public void RegisterScalarFunction < TResult > ( string name , Action < IReadOnlyList < IDuckDBDataReader > , IDuckDBDataWriter , ulong > action , bool isPureFunction = false )
2021 {
2122 RegisterScalarMethod ( name , action , DuckDBTypeMap . GetLogicalType < TResult > ( ) , varargs : false , ! isPureFunction ) ;
2223 }
2324
2425 [ Experimental ( "DuckDBNET001" ) ]
25- public void RegisterScalarFunction < T , TResult > ( string name , Action < IDuckDBDataReader [ ] , IDuckDBDataWriter , ulong > action , bool isPureFunction = true , bool @params = false )
26+ public void RegisterScalarFunction < T , TResult > ( string name , Action < IReadOnlyList < IDuckDBDataReader > , IDuckDBDataWriter , ulong > action , bool isPureFunction = true , bool @params = false )
2627 {
2728 RegisterScalarMethod ( name , action , DuckDBTypeMap . GetLogicalType < TResult > ( ) , @params , ! isPureFunction , DuckDBTypeMap . GetLogicalType < T > ( ) ) ;
2829 }
2930
3031 [ Experimental ( "DuckDBNET001" ) ]
31- public void RegisterScalarFunction < T1 , T2 , TResult > ( string name , Action < IDuckDBDataReader [ ] , IDuckDBDataWriter , ulong > action , bool isPureFunction = true )
32+ public void RegisterScalarFunction < T1 , T2 , TResult > ( string name , Action < IReadOnlyList < IDuckDBDataReader > , IDuckDBDataWriter , ulong > action , bool isPureFunction = true )
3233 {
3334 RegisterScalarMethod ( name , action , DuckDBTypeMap . GetLogicalType < TResult > ( ) , varargs : false , ! isPureFunction ,
3435 DuckDBTypeMap . GetLogicalType < T1 > ( ) ,
3536 DuckDBTypeMap . GetLogicalType < T2 > ( ) ) ;
3637 }
3738
3839 [ Experimental ( "DuckDBNET001" ) ]
39- public void RegisterScalarFunction < T1 , T2 , T3 , TResult > ( string name , Action < IDuckDBDataReader [ ] , IDuckDBDataWriter , ulong > action , bool isPureFunction = true )
40+ public void RegisterScalarFunction < T1 , T2 , T3 , TResult > ( string name , Action < IReadOnlyList < IDuckDBDataReader > , IDuckDBDataWriter , ulong > action , bool isPureFunction = true )
4041 {
4142 RegisterScalarMethod ( name , action , DuckDBTypeMap . GetLogicalType < TResult > ( ) , varargs : false , ! isPureFunction ,
4243 DuckDBTypeMap . GetLogicalType < T1 > ( ) ,
@@ -45,7 +46,7 @@ public void RegisterScalarFunction<T1, T2, T3, TResult>(string name, Action<IDuc
4546 }
4647
4748 [ Experimental ( "DuckDBNET001" ) ]
48- public void RegisterScalarFunction < T1 , T2 , T3 , T4 , TResult > ( string name , Action < IDuckDBDataReader [ ] , IDuckDBDataWriter , ulong > action , bool isPureFunction = true )
49+ public void RegisterScalarFunction < T1 , T2 , T3 , T4 , TResult > ( string name , Action < IReadOnlyList < IDuckDBDataReader > , IDuckDBDataWriter , ulong > action , bool isPureFunction = true )
4950 {
5051 RegisterScalarMethod ( name , action , DuckDBTypeMap . GetLogicalType < TResult > ( ) , varargs : false , ! isPureFunction ,
5152 DuckDBTypeMap . GetLogicalType < T1 > ( ) ,
@@ -55,11 +56,14 @@ public void RegisterScalarFunction<T1, T2, T3, T4, TResult>(string name, Action<
5556 }
5657
5758 [ Experimental ( "DuckDBNET001" ) ]
58- private unsafe void RegisterScalarMethod ( string name , Action < IDuckDBDataReader [ ] , IDuckDBDataWriter , ulong > action , DuckDBLogicalType returnType ,
59+ private unsafe void RegisterScalarMethod ( string name , Action < IReadOnlyList < IDuckDBDataReader > , IDuckDBDataWriter , ulong > action , DuckDBLogicalType returnType ,
5960 bool varargs , bool @volatile , params DuckDBLogicalType [ ] parameterTypes )
6061 {
6162 var function = NativeMethods . ScalarFunction . DuckDBCreateScalarFunction ( ) ;
62- NativeMethods . ScalarFunction . DuckDBScalarFunctionSetName ( function , name . ToUnmanagedString ( ) ) ;
63+ using ( var handle = name . ToUnmanagedString ( ) )
64+ {
65+ NativeMethods . ScalarFunction . DuckDBScalarFunctionSetName ( function , handle ) ;
66+ }
6367
6468 if ( varargs )
6569 {
@@ -97,7 +101,7 @@ private unsafe void RegisterScalarMethod(string name, Action<IDuckDBDataReader[]
97101
98102 if ( ! state . IsSuccess ( ) )
99103 {
100- throw new InvalidOperationException ( "Error registering user defined scalar function" ) ;
104+ throw new InvalidOperationException ( $ "Error registering user defined scalar function: { name } ") ;
101105 }
102106 }
103107
0 commit comments