@@ -16,10 +16,12 @@ using namespace duckdb;
1616
1717namespace vortex {
1818struct CTableFunctionInfo final : TableFunctionInfo {
19- explicit CTableFunctionInfo (const duckdb_vx_tfunc_vtab_t &vtab) : vtab(vtab) {
19+ explicit CTableFunctionInfo (const duckdb_vx_tfunc_vtab_t &vtab)
20+ : vtab(vtab), max_threads(vtab.max_threads) {
2021 }
2122
2223 duckdb_vx_tfunc_vtab_t vtab;
24+ idx_t max_threads;
2325};
2426
2527struct CTableBindData final : TableFunctionData {
@@ -44,13 +46,15 @@ struct CTableBindData final : TableFunctionData {
4446};
4547
4648struct CTableGlobalData final : GlobalTableFunctionState {
47- explicit CTableGlobalData (unique_ptr<vortex::CData> ffi_data_p) : ffi_data(std::move(ffi_data_p)) {
49+ explicit CTableGlobalData (unique_ptr<vortex::CData> ffi_data_p, idx_t max_threads_p)
50+ : ffi_data(std::move(ffi_data_p)), max_threads(max_threads_p) {
4851 }
4952
5053 unique_ptr<vortex::CData> ffi_data;
54+ idx_t max_threads;
5155
5256 idx_t MaxThreads () const override {
53- return GlobalTableFunctionState::MAX_THREADS ;
57+ return max_threads ;
5458 }
5559};
5660
@@ -111,7 +115,8 @@ unique_ptr<GlobalTableFunctionState> c_init_global(ClientContext &context, Table
111115 }
112116
113117 return make_uniq<CTableGlobalData>(
114- unique_ptr<vortex::CData>(reinterpret_cast <vortex::CData *>(ffi_global_data)));
118+ unique_ptr<vortex::CData>(reinterpret_cast <vortex::CData *>(ffi_global_data)),
119+ bind.info ->max_threads );
115120}
116121
117122unique_ptr<LocalTableFunctionState> c_init_local (ExecutionContext &context, TableFunctionInitInput &input,
@@ -148,8 +153,8 @@ void c_function(ClientContext &context, TableFunctionInput &input, DataChunk &ou
148153 auto local_data = input.local_state ->Cast <CTableLocalData>().ffi_data ->DataPtr ();
149154
150155 duckdb_vx_error error_out = nullptr ;
151- bind.info ->vtab .function (ctx, bind_data, global_data, local_data, reinterpret_cast <duckdb_data_chunk>(&output),
152- &error_out);
156+ bind.info ->vtab .function (ctx, bind_data, global_data, local_data,
157+ reinterpret_cast <duckdb_data_chunk>(&output), &error_out);
153158 if (error_out) {
154159 throw InvalidInputException (IntoErrString (error_out));
155160 }
@@ -255,8 +260,8 @@ virtual_column_map_t c_get_virtual_columns(ClientContext &context, optional_ptr<
255260}
256261
257262extern " C" void duckdb_vx_tfunc_virtual_columns_push (duckdb_vx_tfunc_virtual_cols_result ffi_result,
258- idx_t column_idx, const char *name_str, size_t name_len,
259- duckdb_logical_type ffi_type) {
263+ idx_t column_idx, const char *name_str, size_t name_len,
264+ duckdb_logical_type ffi_type) {
260265 if (!ffi_result || !name_str || !ffi_type) {
261266 return ;
262267 }
@@ -289,7 +294,7 @@ OperatorPartitionData c_get_partition_data(ClientContext &context, TableFunction
289294InsertionOrderPreservingMap<string> c_to_string (TableFunctionToStringInput &input) {
290295 InsertionOrderPreservingMap<string> result;
291296 auto &bind = input.bind_data ->Cast <CTableBindData>();
292-
297+
293298 // Call the Rust side to get custom string representation if available
294299 if (bind.info ->vtab .to_string ) {
295300 auto map = bind.info ->vtab .to_string (bind.ffi_data ->DataPtr ());
@@ -303,7 +308,7 @@ InsertionOrderPreservingMap<string> c_to_string(TableFunctionToStringInput &inpu
303308 duckdb_vx_string_map_free (map);
304309 }
305310 }
306-
311+
307312 return result;
308313}
309314
0 commit comments