Skip to content

Commit e719a17

Browse files
authored
Engine specific SLT (#6822)
## Allows writing engine-specific SLT tests, by putting them in the `slt/datafusion/` or `slt/duckdb/` directories --------- Signed-off-by: Adam Gutglick <adam@spiraldb.com>
1 parent fd0f661 commit e719a17

File tree

3 files changed

+58
-49
lines changed

3 files changed

+58
-49
lines changed

vortex-sqllogictest/bin/sqllogictests-runner.rs

Lines changed: 56 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ async fn main() -> anyhow::Result<()> {
5252
let mpb = mpb.clone();
5353

5454
async move {
55+
let path = path.canonicalize()?;
56+
5557
let mut errors = vec![];
5658
let factory = Arc::new(VortexFormatFactory::new());
5759
let session_state_builder = SessionStateBuilder::new()
@@ -69,61 +71,68 @@ async fn main() -> anyhow::Result<()> {
6971
.file_name()
7072
.vortex_expect("must be file")
7173
.to_string_lossy();
72-
let records = parse_file(path.canonicalize()?)?;
73-
74-
let df_pb = mpb.add(ProgressBar::new(records.len() as u64));
75-
df_pb.set_message(format!("DF {filename}"));
76-
df_pb.set_style(ProgressStyle::default_spinner());
77-
78-
let mut df_runner = Runner::new(|| async {
79-
Ok(DataFusion::new(
80-
session.clone(),
81-
path.clone(),
82-
df_pb.clone(),
83-
))
84-
});
85-
86-
df_runner.add_label("datafusion");
87-
df_runner.with_column_validator(strict_column_validator);
88-
df_runner.with_normalizer(value_normalizer);
89-
df_runner.with_validator(df_value_validator);
90-
91-
for record in records.iter() {
92-
if let Record::Halt { .. } = record {
93-
break;
74+
let records = parse_file(path.as_path())?;
75+
76+
if !path.components().any(|comp| comp.as_os_str() == "duckdb") {
77+
let df_pb = mpb.add(ProgressBar::new(records.len() as u64));
78+
df_pb.set_message(format!("DF {filename}"));
79+
df_pb.set_style(ProgressStyle::default_spinner());
80+
81+
let mut df_runner = Runner::new(|| async {
82+
Ok(DataFusion::new(
83+
session.clone(),
84+
path.clone(),
85+
df_pb.clone(),
86+
))
87+
});
88+
89+
df_runner.add_label("datafusion");
90+
df_runner.with_column_validator(strict_column_validator);
91+
df_runner.with_normalizer(value_normalizer);
92+
df_runner.with_validator(df_value_validator);
93+
94+
for record in records.iter() {
95+
if let Record::Halt { .. } = record {
96+
break;
97+
}
98+
99+
if let Err(e) = df_runner.run_async(record.clone()).await {
100+
errors.push(format!("DF Failure: {e}"));
101+
}
94102
}
95103

96-
if let Err(e) = df_runner.run_async(record.clone()).await {
97-
errors.push(format!("DF Failure: {e}"));
98-
}
104+
df_pb.finish_and_clear();
99105
}
100106

101-
df_pb.finish_and_clear();
102-
103-
let duckdb_pb = mpb.add(ProgressBar::new(records.len() as u64));
104-
duckdb_pb.set_message(format!("DuckDB {filename}"));
105-
106-
let mut duckdb_runner = Runner::new(|| async {
107-
DuckDB::try_new(duckdb_pb.clone())
108-
.map_err(|e| DuckDBTestError::Other(e.to_string()))
109-
});
110-
111-
duckdb_runner.add_label("duckdb");
112-
duckdb_runner.with_column_validator(strict_column_validator);
113-
duckdb_runner.with_normalizer(value_normalizer);
114-
115-
for record in records.iter() {
116-
if let Record::Halt { .. } = record {
117-
break;
107+
if !path
108+
.components()
109+
.any(|comp| comp.as_os_str() == "datafusion")
110+
{
111+
let duckdb_pb = mpb.add(ProgressBar::new(records.len() as u64));
112+
duckdb_pb.set_message(format!("DuckDB {filename}"));
113+
114+
let mut duckdb_runner = Runner::new(|| async {
115+
DuckDB::try_new(duckdb_pb.clone())
116+
.map_err(|e| DuckDBTestError::Other(e.to_string()))
117+
});
118+
119+
duckdb_runner.add_label("duckdb");
120+
duckdb_runner.with_column_validator(strict_column_validator);
121+
duckdb_runner.with_normalizer(value_normalizer);
122+
123+
for record in records.iter() {
124+
if let Record::Halt { .. } = record {
125+
break;
126+
}
127+
128+
if let Err(e) = duckdb_runner.run_async(record.clone()).await {
129+
errors.push(format!("DuckDB Failure: {e}"));
130+
}
118131
}
119132

120-
if let Err(e) = duckdb_runner.run_async(record.clone()).await {
121-
errors.push(format!("DuckDB Failure: {e}"));
122-
}
133+
duckdb_pb.finish_and_clear();
123134
}
124135

125-
duckdb_pb.finish_and_clear();
126-
127136
anyhow::Ok(errors)
128137
}
129138
})

vortex-sqllogictest/slt/datafusion/.keep

Whitespace-only changes.

vortex-sqllogictest/slt/string-hasjoin.slt renamed to vortex-sqllogictest/slt/duckdb/string-hasjoin.slt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
# Check a string table hashjoin with itself works correctly.
55

6-
include ./setup.slt
6+
include ../setup.slt
77

88
query I
99
COPY (SELECT '' as id) TO '$__TEST_DIR__/hashjoin.vortex';
1010
----
1111
1
1212

13-
query T
13+
query I
1414
SELECT first(t) AS sales
1515
FROM (
1616
SELECT id, 0 as t FROM read_vortex('$__TEST_DIR__/hashjoin.vortex')

0 commit comments

Comments
 (0)