Skip to content

Commit 067716c

Browse files
committed
define virtual columns on c++ side
1 parent 6ebb797 commit 067716c

5 files changed

Lines changed: 8 additions & 102 deletions

File tree

vortex-duckdb/cpp/include/duckdb_vx/table_function.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,6 @@ void duckdb_vx_tfunc_bind_result_add_column(duckdb_vx_tfunc_bind_result ffi_resu
3838
size_t name_len,
3939
duckdb_logical_type ffi_type);
4040

41-
// Opaque type for the result of get_virtual_columns
42-
typedef struct duckdb_vx_tfunc_virtual_cols_result_ *duckdb_vx_tfunc_virtual_cols_result;
43-
// Push a column into the get_virtual_columns result.
44-
void duckdb_vx_tfunc_virtual_columns_push(duckdb_vx_tfunc_virtual_cols_result ffi_result,
45-
idx_t column_idx,
46-
const char *name_str,
47-
size_t name_len,
48-
duckdb_logical_type ffi_type);
49-
5041
// String map for to_string result
5142
typedef struct duckdb_vx_string_map_ *duckdb_vx_string_map;
5243

@@ -144,8 +135,6 @@ typedef struct {
144135

145136
bool (*pushdown_complex_filter)(void *bind_data, duckdb_vx_expr expr, duckdb_vx_error *error_out);
146137

147-
void (*get_virtual_columns)(void *bind_data, duckdb_vx_tfunc_virtual_cols_result result_out);
148-
149138
void *pushdown_expression;
150139
duckdb_vx_string_map (*to_string)(void *bind_data);
151140
// void *dynamic_to_string;
@@ -162,7 +151,6 @@ typedef struct {
162151
// void *supports_pushdown_type;
163152
// void *get_partition_info;
164153
// void *get_partition_stats;
165-
// void *get_virtual_columns;
166154
// void *get_row_id_columns;
167155

168156
bool projection_pushdown;

vortex-duckdb/cpp/table_function.cpp

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -274,33 +274,6 @@ extern "C" void duckdb_vx_tfunc_bind_result_add_column(duckdb_vx_tfunc_bind_resu
274274
result->return_types.emplace_back(*logical_type);
275275
}
276276

277-
virtual_column_map_t c_get_virtual_columns(ClientContext & /*context*/,
278-
optional_ptr<FunctionData> bind_data) {
279-
auto &bind = bind_data->Cast<CTableBindData>();
280-
281-
auto result = virtual_column_map_t();
282-
bind.info->vtab.get_virtual_columns(bind_data->Cast<CTableBindData>().ffi_data->DataPtr(),
283-
reinterpret_cast<duckdb_vx_tfunc_virtual_cols_result>(&result));
284-
return result;
285-
}
286-
287-
extern "C" void duckdb_vx_tfunc_virtual_columns_push(duckdb_vx_tfunc_virtual_cols_result ffi_result,
288-
idx_t column_idx,
289-
const char *name_str,
290-
size_t name_len,
291-
duckdb_logical_type ffi_type) {
292-
if (!ffi_result || !name_str || !ffi_type) {
293-
return;
294-
}
295-
296-
auto result = reinterpret_cast<virtual_column_map_t *>(ffi_result);
297-
const auto logical_type = reinterpret_cast<LogicalType *>(ffi_type);
298-
const auto name = string(name_str, name_len);
299-
300-
auto table_col = TableColumn(std::move(name), *logical_type);
301-
result->emplace(column_idx, std::move(table_col));
302-
}
303-
304277
OperatorPartitionData c_get_partition_data(ClientContext & /*context*/,
305278
TableFunctionGetPartitionInput &input) {
306279
if (input.partition_info.RequiresPartitionColumns()) {
@@ -360,10 +333,13 @@ extern "C" duckdb_state duckdb_vx_tfunc_register(duckdb_database ffi_db, const d
360333
tf.late_materialization = vtab->late_materialization;
361334
tf.cardinality = c_cardinality;
362335
tf.get_partition_data = c_get_partition_data;
363-
tf.get_virtual_columns = c_get_virtual_columns;
364336
tf.to_string = c_to_string;
365337
tf.table_scan_progress = c_table_scan_progress;
366338

339+
tf.get_virtual_columns = [](auto &, auto) -> virtual_column_map_t {
340+
return {{COLUMN_IDENTIFIER_EMPTY, TableColumn("", LogicalTypeId::BOOLEAN)}};
341+
};
342+
367343
// Set up the parameters
368344
tf.arguments.reserve(vtab->parameter_count);
369345
for (size_t i = 0; i < vtab->parameter_count; i++) {

vortex-duckdb/src/datasource.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//!
66
//! Table functions that resolve to a [`DataSourceRef`] can implement [`DataSourceTableFunction`]
77
//! to get a blanket [`TableFunction`] implementation covering init, scan, progress, filter
8-
//! pushdown, cardinality, partitioning, and virtual columns.
8+
//! pushdown, cardinality, and partitioning.
99
1010
use std::ffi::CString;
1111
use std::fmt::Debug;
@@ -60,7 +60,6 @@ use crate::duckdb::LogicalType;
6060
use crate::duckdb::TableFilterSetRef;
6161
use crate::duckdb::TableFunction;
6262
use crate::duckdb::TableInitInput;
63-
use crate::duckdb::VirtualColumnsResultRef;
6463
use crate::exporter::ArrayExporter;
6564
use crate::exporter::ConversionCache;
6665

@@ -74,17 +73,15 @@ use crate::exporter::ConversionCache;
7473
/// If you define COLUMN_IDENTIFIER_EMPTY, planner takes it, otherwise the
7574
/// first column. As we don't want to fill the output chunk and we can leave
7675
/// it uninitialized in this case, we define COLUMN_IDENTIFIER_EMPTY as a
77-
/// virtual column in our table function vtab's get_virtual_columns.
78-
/// See vortex-duckdb/cpp/include/duckdb_vx/table_function.h
79-
/// See virtual_columns in this file
76+
/// virtual column.
77+
/// See vortex-duckdb/cpp/table_function.cpp
8078
static EMPTY_COLUMN_IDX: u64 = 18446744073709551614;
81-
static EMPTY_COLUMN_NAME: &str = "";
8279

8380
/// A trait for table functions that resolve to a [`DataSourceRef`].
8481
///
8582
/// Implementors only need to define how parameters are declared and how binding produces a
8683
/// data source. All other [`TableFunction`] methods (init, scan, progress, filter pushdown,
87-
/// cardinality, partitioning, virtual columns) are provided by a blanket implementation.
84+
/// cardinality, partitioning) are provided by a blanket implementation.
8885
pub(crate) trait DataSourceTableFunction: Sized + Debug {
8986
/// Returns the positional parameters of the table function.
9087
fn parameters() -> Vec<LogicalType> {
@@ -442,10 +439,6 @@ impl<T: DataSourceTableFunction> TableFunction for T {
442439

443440
Some(result)
444441
}
445-
446-
fn virtual_columns(_bind_data: &Self::BindData, result: &mut VirtualColumnsResultRef) {
447-
result.register(EMPTY_COLUMN_IDX, EMPTY_COLUMN_NAME, &LogicalType::bool());
448-
}
449442
}
450443

451444
// ---------------------------------------------------------------------------

vortex-duckdb/src/duckdb/table_function/mod.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,9 @@ mod init;
1515
mod partition;
1616
mod pushdown_complex_filter;
1717
mod table_scan_progress;
18-
mod virtual_columns;
1918

2019
pub use bind::*;
2120
pub use init::*;
22-
pub use virtual_columns::VirtualColumnsResult;
23-
pub use virtual_columns::VirtualColumnsResultRef;
2421

2522
use crate::cpp;
2623
use crate::cpp::duckdb_client_context;
@@ -35,7 +32,6 @@ use crate::duckdb::table_function::cardinality::cardinality_callback;
3532
use crate::duckdb::table_function::partition::get_partition_data_callback;
3633
use crate::duckdb::table_function::pushdown_complex_filter::pushdown_complex_filter_callback;
3734
use crate::duckdb::table_function::table_scan_progress::table_scan_progress_callback;
38-
use crate::duckdb::table_function::virtual_columns::get_virtual_columns_callback;
3935
use crate::duckdb_try;
4036

4137
/// A trait that defines the supported operations for a table function in DuckDB.
@@ -140,9 +136,6 @@ pub trait TableFunction: Sized + Debug {
140136
_local_init_data: &mut Self::LocalState,
141137
) -> VortexResult<u64>;
142138

143-
/// Returns the virtual columns of the table function.
144-
fn virtual_columns(_bind_data: &Self::BindData, _result: &mut VirtualColumnsResultRef) {}
145-
146139
/// Returns a vector of key-value pairs for EXPLAIN output
147140
fn to_string(_bind_data: &Self::BindData) -> Option<Vec<(String, String)>> {
148141
None
@@ -192,7 +185,6 @@ impl DatabaseRef {
192185
cardinality: Some(cardinality_callback::<T>),
193186
pushdown_complex_filter: Some(pushdown_complex_filter_callback::<T>),
194187
pushdown_expression: ptr::null_mut::<c_void>(),
195-
get_virtual_columns: Some(get_virtual_columns_callback::<T>),
196188
to_string: Some(to_string_callback::<T>),
197189
table_scan_progress: Some(table_scan_progress_callback::<T>),
198190
get_partition_data: Some(get_partition_data_callback::<T>),

vortex-duckdb/src/duckdb/table_function/virtual_columns.rs

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)