Skip to content

Commit

Permalink
Table function cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Giorgi committed Nov 25, 2024
1 parent 344fa96 commit cfb88a5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 31 deletions.
26 changes: 9 additions & 17 deletions DuckDB.NET.Data/DuckDBConnection.TableFunction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ private unsafe void RegisterTableFunctionInternal(string name, Func<IReadOnlyLis
[UnmanagedCallersOnly(CallConvs = [typeof(CallConvCdecl)])]
public static unsafe void Bind(IntPtr info)
{
IDuckDBValueReader[]? parameters = null;
IDuckDBValueReader[] parameters = [];
try
{
var handle = GCHandle.FromIntPtr(NativeMethods.TableFunction.DuckDBBindGetExtraInfo(info));
Expand Down Expand Up @@ -134,22 +134,16 @@ public static unsafe void Bind(IntPtr info)
}
catch (Exception ex)
{
using (var errMsgHandle = ex.Message.ToUnmanagedString())
{
NativeMethods.TableFunction.DuckDBBindSetError(info, errMsgHandle);
}
return;
using var errorMessage = ex.Message.ToUnmanagedString();
NativeMethods.TableFunction.DuckDBBindSetError(info, errorMessage);
}
finally
{
if (parameters!=null)
foreach (var parameter in parameters)
{
if (parameter != null)
((DuckDBValue)parameter).Dispose();
}
foreach (var parameter in parameters)
{
(parameter as IDisposable)?.Dispose();
}
}

}

[UnmanagedCallersOnly(CallConvs = [typeof(CallConvCdecl)])]
Expand Down Expand Up @@ -203,10 +197,8 @@ public static void TableFunction(IntPtr info, IntPtr chunk)
}
catch (Exception ex)
{
using (var errMsgHandle = ex.Message.ToUnmanagedString())
{
NativeMethods.TableFunction.DuckDBFunctionSetError(info, errMsgHandle);
}
using var errorMessage = ex.Message.ToUnmanagedString();
NativeMethods.TableFunction.DuckDBFunctionSetError(info, errorMessage);
}
}
#endif
Expand Down
27 changes: 13 additions & 14 deletions DuckDB.NET.Test/TableFunctionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -176,29 +176,28 @@ public void RegisterTableFunctionWithBigInteger()
}

[Fact]
public void RegisterTableFunctionWithErrors() {
Connection.RegisterTableFunction<string>("bind_err", parameters => {
public void RegisterTableFunctionWithErrors()
{
Connection.RegisterTableFunction<string>("bind_err", parameters =>
{
throw new Exception("bind_err_msg");
}, (item, writer, rowIndex) => {
}, (item, writer, rowIndex) =>
{
});

Assert.Contains("bind_err_msg",
Assert.Throws<DuckDBException>(() => {
var data = Connection.Query<int>($"SELECT * FROM bind_err('')").ToList();
}).Message);
Connection.Invoking(con=>con.Query<int>("SELECT * FROM bind_err('')")). Should().Throw<DuckDBException>().WithMessage("bind_err_msg");

Connection.RegisterTableFunction<string>("map_err", parameters => {
Connection.RegisterTableFunction<string>("map_err", parameters =>
{
return new TableFunction(
new[] { new ColumnInfo("t1", typeof(string)) },
new[] { "a" }
);
}, (item, writer, rowIndex) => {
}, (item, writer, rowIndex) =>
{
throw new NotSupportedException("map_err_msg");
});
Assert.Contains("map_err_msg",
Assert.Throws<DuckDBException>(() => {
var data = Connection.Query<int>($"SELECT * FROM map_err('')").ToList();
}).Message);
}

Connection.Invoking(con => con.Query<int>("SELECT * FROM map_err('')")).Should().Throw<DuckDBException>().WithMessage("map_err_msg");
}
}

0 comments on commit cfb88a5

Please sign in to comment.