Skip to content

Commit 8da8c7b

Browse files
committed
correctly propagate version instead of editions
1 parent f50ddfa commit 8da8c7b

6 files changed

Lines changed: 42 additions & 59 deletions

File tree

‎vortex-duckdb/build.rs‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,32 @@ fn cbindgen_rust2c(crate_dir: &Path) {
627627
}
628628
}
629629

630+
fn git(crate_dir: &Path, args: &[&str]) -> Option<String> {
631+
let output = Command::new("git")
632+
.arg("-C")
633+
.arg(crate_dir)
634+
.args(args)
635+
.output()
636+
.ok()?;
637+
if !output.status.success() {
638+
return None;
639+
}
640+
let stdout = String::from_utf8(output.stdout).ok()?;
641+
let stdout = stdout.trim();
642+
(!stdout.is_empty()).then(|| stdout.to_owned())
643+
}
644+
645+
fn vortex_version(crate_dir: &Path) {
646+
println!("cargo:rerun-if-env-changed=VORTEX_VERSION");
647+
let version = env::var("VORTEX_VERSION")
648+
.ok()
649+
.filter(|version| !version.is_empty())
650+
.or_else(|| git(crate_dir, &["describe", "--tags", "--exact-match", "HEAD"]))
651+
.or_else(|| git(crate_dir, &["rev-parse", "HEAD"]))
652+
.unwrap_or_else(|| "unknown".to_owned());
653+
println!("cargo:rustc-env=VORTEX_VERSION={version}");
654+
}
655+
630656
fn main() {
631657
println!("cargo:rerun-if-changed=cpp/include");
632658
println!("cargo:rerun-if-changed=patches");
@@ -653,6 +679,7 @@ fn main() {
653679
// in vortex's CI.
654680

655681
let crate_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
682+
vortex_version(&crate_dir);
656683
if let Some(source_dir) = env::var_os("DUCKDB_SOURCE_DIR") {
657684
let source_dir = PathBuf::from(source_dir);
658685
let duckdb_include_dir = source_dir.join("src").join("include");

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ typedef struct {
7676
} duckdb_vx_written_column_statistics;
7777

7878
duckdb_state duckdb_vx_register_table_functions(duckdb_database ffi_db);
79-
80-
duckdb_state duckdb_vx_register_version_function(duckdb_database ffi_db,
81-
const char *const *editions,
82-
size_t editions_count);
79+
duckdb_state duckdb_vx_register_version_function(duckdb_database ffi_db, const char *version);
8380

8481
typedef struct duckdb_vx_agg_input_ *duckdb_vx_agg_input;
8582
idx_t duckdb_vx_aggregate_len(duckdb_vx_agg_input ffi);

‎vortex-duckdb/cpp/table_function.cpp‎

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -222,22 +222,13 @@ duckdb_state register_table_function(DatabaseInstance &db, LogicalType parameter
222222
return DuckDBSuccess;
223223
}
224224

225-
extern "C" duckdb_state duckdb_vx_register_version_function(duckdb_database ffi_db,
226-
const char *const *editions,
227-
size_t editions_count) {
225+
extern "C" duckdb_state duckdb_vx_register_version_function(duckdb_database ffi_db, const char *version) {
228226
D_ASSERT(ffi_db);
229-
D_ASSERT(editions || editions_count == 0);
227+
D_ASSERT(version);
230228
const DatabaseWrapper &wrapper = *reinterpret_cast<DatabaseWrapper *>(ffi_db);
231229
DatabaseInstance &db = *wrapper.database->instance;
232230

233-
string sql = "SELECT unnest([";
234-
for (size_t i = 0; i < editions_count; i++) {
235-
if (i > 0) {
236-
sql += ", ";
237-
}
238-
sql += KeywordHelper::WriteQuoted(editions[i]);
239-
}
240-
sql += "]) AS edition";
231+
const string sql = "SELECT " + KeywordHelper::WriteQuoted(version) + " AS version";
241232

242233
const DefaultTableMacro macro {DEFAULT_SCHEMA,
243234
"vortex_version",

‎vortex-duckdb/src/duckdb/database.rs‎

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,26 +62,11 @@ impl DatabaseRef {
6262
Ok(())
6363
}
6464

65-
pub fn register_version_function(&self, editions: &[String]) -> VortexResult<()> {
66-
let editions = editions
67-
.iter()
68-
.map(|edition| {
69-
CString::new(edition.as_str())
70-
.map_err(|_| vortex_err!("Invalid edition: string contains null bytes"))
71-
})
72-
.collect::<VortexResult<Vec<_>>>()?;
73-
let pointers = editions
74-
.iter()
75-
.map(|edition| edition.as_ptr())
76-
.collect::<Vec<_>>();
65+
pub fn register_version_function(&self, version: &str) -> VortexResult<()> {
66+
let version = CString::new(version)
67+
.map_err(|_| vortex_err!("Invalid version: string contains null bytes"))?;
7768
duckdb_try!(
78-
unsafe {
79-
cpp::duckdb_vx_register_version_function(
80-
self.as_ptr(),
81-
pointers.as_ptr(),
82-
pointers.len(),
83-
)
84-
},
69+
unsafe { cpp::duckdb_vx_register_version_function(self.as_ptr(), version.as_ptr()) },
8570
"Failed to register vortex_version function"
8671
);
8772
Ok(())

‎vortex-duckdb/src/e2e_test/vortex_scan_test.rs‎

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -204,19 +204,13 @@ fn test_scan_function_registration() {
204204
#[test]
205205
fn test_vortex_version() -> Result<()> {
206206
let conn = database_connection();
207-
let result = conn.query("SELECT edition FROM vortex_version()")?;
208-
let mut chunk = result.into_iter().next().unwrap();
209-
let len: usize = chunk.len().as_();
210-
211-
let editions = unsafe { chunk.get_vector_mut(0).as_slice_mut::<duckdb_string_t>(len) }
212-
.iter_mut()
213-
.map(String::from_duckdb_value)
214-
.collect::<Vec<_>>();
215-
216-
assert_eq!(
217-
editions,
218-
["core2026.08.3", "json2026.08.0", "spatial2026.08.0"]
207+
let query = format!(
208+
"SELECT count(*) FROM vortex_version() WHERE version = '{}'",
209+
env!("VORTEX_VERSION")
219210
);
211+
let result = conn.query(&query)?;
212+
let chunk = result.into_iter().next().unwrap();
213+
assert_eq!(chunk.get_vector(0).as_slice_with_len::<i64>(1), [1]);
220214
Ok(())
221215
}
222216

‎vortex-duckdb/src/lib.rs‎

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,11 @@ fn init_tracing() {
7878
/// separately (e.g., before creating connections), call `register_extension_options` first.
7979
pub fn initialize(db: &DatabaseRef) -> VortexResult<()> {
8080
db.register_table_functions()?;
81-
db.register_version_function(&enabled_editions())?;
81+
db.register_version_function(env!("VORTEX_VERSION"))?;
8282
db.register_optimizer_extension()?;
8383
db.register_copy_function()
8484
}
8585

86-
fn enabled_editions() -> Vec<String> {
87-
let mut editions = SESSION
88-
.enabled_editions()
89-
.editions()
90-
.iter()
91-
.map(|edition| edition.to_string())
92-
.collect::<Vec<_>>();
93-
editions.sort_unstable();
94-
editions
95-
}
96-
9786
/// Initialize the DuckDB extension from a raw DuckDB database pointer.
9887
pub unsafe fn initialize_extension_from_raw(db: *mut c_void) {
9988
init_tracing();

0 commit comments

Comments
 (0)