Skip to content

Commit 53df241

Browse files
committed
implement separate set_extra_info
1 parent 1cd2dc9 commit 53df241

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

bindings/pkgs/@duckdb/node-bindings/duckdb.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,14 +1046,14 @@ export function scalar_function_add_parameter(scalar_function: ScalarFunction, l
10461046
export function scalar_function_set_return_type(scalar_function: ScalarFunction, logical_type: LogicalType): void;
10471047

10481048
// DUCKDB_C_API void duckdb_scalar_function_set_extra_info(duckdb_scalar_function scalar_function, void *extra_info, duckdb_delete_callback_t destroy);
1049-
// not exposed: combined with scalar_function_set_function
1049+
export function scalar_function_set_extra_info(scalar_function: ScalarFunction, extra_info: object): void;
10501050

10511051
// DUCKDB_C_API void duckdb_scalar_function_set_bind(duckdb_scalar_function scalar_function, duckdb_scalar_function_bind_t bind);
10521052
// DUCKDB_C_API void duckdb_scalar_function_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy);
10531053
// DUCKDB_C_API void duckdb_scalar_function_bind_set_error(duckdb_bind_info info, const char *error);
10541054

10551055
// DUCKDB_C_API void duckdb_scalar_function_set_function(duckdb_scalar_function scalar_function, duckdb_scalar_function_t function);
1056-
export function scalar_function_set_function(scalar_function: ScalarFunction, func: ScalarFunctionMainFunction, extra_info?: object): void;
1056+
export function scalar_function_set_function(scalar_function: ScalarFunction, func: ScalarFunctionMainFunction): void;
10571057

10581058
// DUCKDB_C_API duckdb_state duckdb_register_scalar_function(duckdb_connection con, duckdb_scalar_function scalar_function);
10591059
export function register_scalar_function(connection: Connection, scalar_function: ScalarFunction): void;

bindings/src/duckdb_node_bindings.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,7 @@ class DuckDBNodeAddon : public Napi::Addon<DuckDBNodeAddon> {
15921592
InstanceMethod("scalar_function_set_volatile", &DuckDBNodeAddon::scalar_function_set_volatile),
15931593
InstanceMethod("scalar_function_add_parameter", &DuckDBNodeAddon::scalar_function_add_parameter),
15941594
InstanceMethod("scalar_function_set_return_type", &DuckDBNodeAddon::scalar_function_set_return_type),
1595+
InstanceMethod("scalar_function_set_extra_info", &DuckDBNodeAddon::scalar_function_set_extra_info),
15951596
InstanceMethod("scalar_function_set_function", &DuckDBNodeAddon::scalar_function_set_function),
15961597
InstanceMethod("register_scalar_function", &DuckDBNodeAddon::register_scalar_function),
15971598
InstanceMethod("scalar_function_get_extra_info", &DuckDBNodeAddon::scalar_function_get_extra_info),
@@ -4130,22 +4131,28 @@ class DuckDBNodeAddon : public Napi::Addon<DuckDBNodeAddon> {
41304131
}
41314132

41324133
// DUCKDB_C_API void duckdb_scalar_function_set_extra_info(duckdb_scalar_function scalar_function, void *extra_info, duckdb_delete_callback_t destroy);
4133-
// not exposed: combined with scalar_function_set_function
4134+
// function scalar_function_set_extra_info(scalar_function: ScalarFunction, extra_info: object): void
4135+
Napi::Value scalar_function_set_extra_info(const Napi::CallbackInfo& info) {
4136+
auto env = info.Env();
4137+
auto holder = GetScalarFunctionHolderFromExternal(env, info[0]);
4138+
auto user_extra_info = info[1].As<Napi::Object>();
4139+
holder->EnsureInternalExtraInfo();
4140+
holder->internal_extra_info->SetUserExtraInfo(user_extra_info);
4141+
return env.Undefined();
4142+
}
41344143

41354144
// DUCKDB_C_API void duckdb_scalar_function_set_bind(duckdb_scalar_function scalar_function, duckdb_scalar_function_bind_t bind);
41364145
// DUCKDB_C_API void duckdb_scalar_function_set_bind_data(duckdb_bind_info info, void *bind_data, duckdb_delete_callback_t destroy);
41374146
// DUCKDB_C_API void duckdb_scalar_function_bind_set_error(duckdb_bind_info info, const char *error);
41384147

41394148
// DUCKDB_C_API void duckdb_scalar_function_set_function(duckdb_scalar_function scalar_function, duckdb_scalar_function_t function);
4140-
// function scalar_function_set_function(scalar_function: ScalarFunction, func: ScalarFunctionMainFunction, extra_info?: object): void
4149+
// function scalar_function_set_function(scalar_function: ScalarFunction, func: ScalarFunctionMainFunction): void
41414150
Napi::Value scalar_function_set_function(const Napi::CallbackInfo& info) {
41424151
auto env = info.Env();
41434152
auto holder = GetScalarFunctionHolderFromExternal(env, info[0]);
41444153
auto func = info[1].As<Napi::Function>();
4145-
auto user_extra_info = info[2].As<Napi::Object>();
41464154
holder->EnsureInternalExtraInfo();
41474155
holder->internal_extra_info->SetMainFunction(env, func);
4148-
holder->internal_extra_info->SetUserExtraInfo(user_extra_info);
41494156
duckdb_scalar_function_set_function(holder->scalar_function, &ScalarFunctionMainFunction);
41504157
return env.Undefined();
41514158
}
@@ -4781,7 +4788,7 @@ NODE_API_ADDON(DuckDBNodeAddon)
47814788
---
47824789
431 total functions
47834790
4784-
257 instance methods
4791+
258 instance methods
47854792
3 unimplemented client context functions
47864793
1 unimplemented table names function
47874794
1 unimplemented value to string function
@@ -4803,7 +4810,7 @@ NODE_API_ADDON(DuckDBNodeAddon)
48034810
6 unimplemented table description functions
48044811
8 unimplemented tasks functions
48054812
12 unimplemented cast function functions
4806-
24 functions not exposed
4813+
23 functions not exposed
48074814
+ 41 unimplemented deprecated functions (of 47)
48084815
---
48094816
431 functions accounted for

bindings/test/scalar_functions.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ suite('scalar functions', () => {
6565
`output_${i}_${JSON.stringify(extra_info)}`
6666
);
6767
}
68-
},
69-
{ 'my_extra_info_key': 'my_extra_info_value' }
68+
}
7069
);
70+
duckdb.scalar_function_set_extra_info(scalar_function, { 'my_extra_info_key': 'my_extra_info_value' });
7171
duckdb.register_scalar_function(connection, scalar_function);
7272
duckdb.destroy_scalar_function_sync(scalar_function);
7373

0 commit comments

Comments
 (0)