Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/apt-packages.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
ninja-build
cmake
liblz4-dev
libgtest-dev
clang-18
libclang-rt-18-dev
Expand Down
118 changes: 59 additions & 59 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<!-- benchmark-table:start -->
## Benchmark Dashboard

`generated 2026-05-31 17:18:21` · `queries 43/43` · `warm runs 4` · `cache drop per-query` · `query mode hardcoded` · [`csv`](benchmarks/results/readme_benchmarks.csv)
`generated 2026-06-04 16:20:50` · `queries 43/43` · `warm runs 4` · `cache drop per-query` · `query mode hardcoded` · [`csv`](benchmarks/results/readme_benchmarks.csv)

<table>
<tr>
Expand All @@ -25,14 +25,14 @@
<tbody>
<tr><td>queries ok</td><td align="right">43 / 43</td></tr>
<tr><td>queries failed</td><td align="right">0</td></tr>
<tr><td>median warm time</td><td align="right">149.50 ms</td></tr>
<tr><td>average warm time</td><td align="right">190.25 ms</td></tr>
<tr><td>p95 warm time</td><td align="right">521.35 ms</td></tr>
<tr><td>cold/warm delta</td><td align="right">17.8%</td></tr>
<tr><td>median warm time</td><td align="right">105.00 ms</td></tr>
<tr><td>average warm time</td><td align="right">147.59 ms</td></tr>
<tr><td>p95 warm time</td><td align="right">389.85 ms</td></tr>
<tr><td>cold/warm delta</td><td align="right">20.3%</td></tr>
<tr><td>total output size</td><td align="right">0 B</td></tr>
<tr><td>max output size</td><td align="right">0 B</td></tr>
<tr><td>fastest query</td><td align="right">Q00 · &lt;1 ms</td></tr>
<tr><td>slowest query</td><td align="right">Q28 · 940.00 ms</td></tr>
<tr><td>slowest query</td><td align="right">Q28 · 873.00 ms</td></tr>
</tbody>
</table>
</td>
Expand All @@ -49,10 +49,10 @@
<tr><td>roundtrip csv size</td><td align="right">743.0 MB</td></tr>
<tr><td>compression ratio</td><td align="right">6.71x</td></tr>
<tr><td>columnar / csv</td><td align="right">14.9%</td></tr>
<tr><td>csv -&gt; columnar</td><td align="right">5.71s</td></tr>
<tr><td>columnar -&gt; csv</td><td align="right">9.46s</td></tr>
<tr><td>convert throughput</td><td align="right">140.5 MB/s</td></tr>
<tr><td>roundtrip throughput</td><td align="right">12.6 MB/s</td></tr>
<tr><td>csv -&gt; columnar</td><td align="right">5.87s</td></tr>
<tr><td>columnar -&gt; csv</td><td align="right">9.11s</td></tr>
<tr><td>convert throughput</td><td align="right">136.6 MB/s</td></tr>
<tr><td>roundtrip throughput</td><td align="right">13.1 MB/s</td></tr>
</tbody>
</table>
</td>
Expand All @@ -65,60 +65,60 @@

| slot 1 | slot 2 | slot 3 | slot 4 | slot 5 | slot 6 |
| ---: | ---: | ---: | ---: | ---: | ---: |
| Q00 ⬜ `<1` | Q01 🟩 `4.00` | Q02 🟩 `7.00` | Q03 🟩 `6.00` | Q04 🟩 `34.50` | Q05 🟩 `36.50` |
| Q06 ⬜ `<1` | Q07 🟩 `8.00` | Q08 🟥 `189.50` | Q09 🟥 `205.00` | Q10 🟥 `260.50` | Q11 🟥 `271.00` |
| Q12 🟥 `223.00` | Q13 🟥 `252.50` | Q14 🟥 `226.00` | Q15 🟩 `89.50` | Q16 🟦 `143.00` | Q17 🟦 `157.00` |
| Q18 🟥 `516.00` | Q19 ⬜ `<1` | Q20 🟦 `136.50` | Q21 🟦 `156.00` | Q22 🟥 `280.00` | Q23 🟥 `239.00` |
| Q24 🟩 `39.00` | Q25 🟩 `36.50` | Q26 🟩 `39.50` | Q27 🟥 `450.50` | Q28 🟥 `940.00` | Q29 🟩 `5.00` |
| Q30 🟩 `37.50` | Q31 🟩 `52.50` | Q32 🟥 `623.00` | Q33 🟥 `322.00` | Q34 🟥 `323.00` | Q35 🟩 `20.00` |
| Q36 🟥 `358.50` | Q37 🟥 `242.50` | Q38 🟩 `70.50` | Q39 🟥 `462.00` | Q40 🟩 `53.00` | Q41 🟩 `30.00` |
| Q42 🟩 `64.50` | | | | | |
| Q00 ⬜ `<1` | Q01 🟩 `4.00` | Q02 🟩 `6.50` | Q03 🟩 `6.00` | Q04 🟩 `35.50` | Q05 🟩 `25.00` |
| Q06 ⬜ `<1` | Q07 🟩 `7.00` | Q08 🟥 `170.00` | Q09 🟥 `187.50` | Q10 🟥 `258.00` | Q11 🟥 `257.00` |
| Q12 🟥 `210.00` | Q13 🟥 `243.00` | Q14 🟥 `211.50` | Q15 🟩 `54.00` | Q16 🟩 `84.00` | Q17 🟥 `123.00` |
| Q18 🟥 `346.00` | Q19 ⬜ `<1` | Q20 🟦 `98.50` | Q21 🟦 `111.50` | Q22 🟥 `178.00` | Q23 🟥 `156.00` |
| Q24 🟩 `16.00` | Q25 🟩 `12.00` | Q26 🟩 `16.00` | Q27 🟥 `389.50` | Q28 🟥 `873.00` | Q29 🟩 `4.00` |
| Q30 🟩 `24.00` | Q31 🟩 `36.00` | Q32 🟥 `396.50` | Q33 🟥 `195.50` | Q34 🟥 `189.00` | Q35 🟩 `19.50` |
| Q36 🟥 `272.50` | Q37 🟥 `197.50` | Q38 🟩 `46.00` | Q39 🟥 `309.00` | Q40 🟩 `38.50` | Q41 🟩 `27.00` |
| Q42 🟩 `70.00` | | | | | |

### Query Table

| Query | Output CSV | First run, ms | Warm avg, ms | Warm median, ms | Warm min, ms | Warm max, ms | Status |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| [Q00](benchmarks/queries/query_0.sql) | 0 B | <1 | <1 | <1 | <1 | <1 | ok |
| [Q01](benchmarks/queries/query_1.sql) | 0 B | 16.00 | 4.00 | 4.00 | 4.00 | 4.00 | ok |
| [Q02](benchmarks/queries/query_2.sql) | 0 B | 31.00 | 7.00 | 7.00 | 7.00 | 7.00 | ok |
| [Q03](benchmarks/queries/query_3.sql) | 0 B | 24.00 | 6.00 | 6.00 | 6.00 | 6.00 | ok |
| [Q04](benchmarks/queries/query_4.sql) | 0 B | 52.00 | 34.50 | 34.50 | 34.00 | 35.00 | ok |
| [Q05](benchmarks/queries/query_5.sql) | 0 B | 65.00 | 36.75 | 36.50 | 36.00 | 38.00 | ok |
| [Q01](benchmarks/queries/query_1.sql) | 0 B | 17.00 | 4.00 | 4.00 | 4.00 | 4.00 | ok |
| [Q02](benchmarks/queries/query_2.sql) | 0 B | 28.00 | 6.50 | 6.50 | 6.00 | 7.00 | ok |
| [Q03](benchmarks/queries/query_3.sql) | 0 B | 21.00 | 6.00 | 6.00 | 6.00 | 6.00 | ok |
| [Q04](benchmarks/queries/query_4.sql) | 0 B | 50.00 | 35.50 | 35.50 | 35.00 | 36.00 | ok |
| [Q05](benchmarks/queries/query_5.sql) | 0 B | 46.00 | 25.25 | 25.00 | 25.00 | 26.00 | ok |
| [Q06](benchmarks/queries/query_6.sql) | 0 B | <1 | <1 | <1 | <1 | <1 | ok |
| [Q07](benchmarks/queries/query_7.sql) | 0 B | 18.00 | 7.75 | 8.00 | 7.00 | 8.00 | ok |
| [Q08](benchmarks/queries/query_8.sql) | 0 B | 213.00 | 189.25 | 189.50 | 186.00 | 192.00 | ok |
| [Q09](benchmarks/queries/query_9.sql) | 0 B | 257.00 | 205.25 | 205.00 | 204.00 | 207.00 | ok |
| [Q10](benchmarks/queries/query_10.sql) | 0 B | 296.00 | 262.25 | 260.50 | 260.00 | 268.00 | ok |
| [Q11](benchmarks/queries/query_11.sql) | 0 B | 306.00 | 269.50 | 271.00 | 262.00 | 274.00 | ok |
| [Q12](benchmarks/queries/query_12.sql) | 0 B | 260.00 | 224.25 | 223.00 | 221.00 | 230.00 | ok |
| [Q13](benchmarks/queries/query_13.sql) | 0 B | 298.00 | 253.00 | 252.50 | 251.00 | 256.00 | ok |
| [Q14](benchmarks/queries/query_14.sql) | 0 B | 257.00 | 226.00 | 226.00 | 225.00 | 227.00 | ok |
| [Q15](benchmarks/queries/query_15.sql) | 0 B | 108.00 | 89.75 | 89.50 | 88.00 | 92.00 | ok |
| [Q16](benchmarks/queries/query_16.sql) | 0 B | 193.00 | 143.00 | 143.00 | 142.00 | 144.00 | ok |
| [Q17](benchmarks/queries/query_17.sql) | 0 B | 216.00 | 157.75 | 157.00 | 154.00 | 163.00 | ok |
| [Q18](benchmarks/queries/query_18.sql) | 0 B | 589.00 | 517.50 | 516.00 | 509.00 | 529.00 | ok |
| [Q19](benchmarks/queries/query_19.sql) | 0 B | 3.00 | <1 | <1 | <1 | <1 | ok |
| [Q20](benchmarks/queries/query_20.sql) | 0 B | 202.00 | 136.25 | 136.50 | 135.00 | 137.00 | ok |
| [Q21](benchmarks/queries/query_21.sql) | 0 B | 245.00 | 156.75 | 156.00 | 156.00 | 159.00 | ok |
| [Q22](benchmarks/queries/query_22.sql) | 0 B | 383.00 | 284.50 | 280.00 | 272.00 | 306.00 | ok |
| [Q23](benchmarks/queries/query_23.sql) | 0 B | 365.00 | 241.25 | 239.00 | 238.00 | 249.00 | ok |
| [Q24](benchmarks/queries/query_24.sql) | 0 B | 101.00 | 38.75 | 39.00 | 38.00 | 39.00 | ok |
| [Q25](benchmarks/queries/query_25.sql) | 0 B | 65.00 | 36.50 | 36.50 | 36.00 | 37.00 | ok |
| [Q26](benchmarks/queries/query_26.sql) | 0 B | 103.00 | 39.75 | 39.50 | 39.00 | 41.00 | ok |
| [Q27](benchmarks/queries/query_27.sql) | 0 B | 534.00 | 454.75 | 450.50 | 447.00 | 471.00 | ok |
| [Q28](benchmarks/queries/query_28.sql) | 0 B | 993.00 | 940.75 | 940.00 | 934.00 | 949.00 | ok |
| [Q29](benchmarks/queries/query_29.sql) | 0 B | 17.00 | 4.75 | 5.00 | 4.00 | 5.00 | ok |
| [Q30](benchmarks/queries/query_30.sql) | 0 B | 99.00 | 37.75 | 37.50 | 37.00 | 39.00 | ok |
| [Q31](benchmarks/queries/query_31.sql) | 0 B | 161.00 | 53.50 | 52.50 | 51.00 | 58.00 | ok |
| [Q32](benchmarks/queries/query_32.sql) | 0 B | 744.00 | 633.25 | 623.00 | 614.00 | 673.00 | ok |
| [Q33](benchmarks/queries/query_33.sql) | 0 B | 381.00 | 323.00 | 322.00 | 319.00 | 329.00 | ok |
| [Q34](benchmarks/queries/query_34.sql) | 0 B | 386.00 | 323.75 | 323.00 | 319.00 | 330.00 | ok |
| [Q35](benchmarks/queries/query_35.sql) | 0 B | 43.00 | 20.00 | 20.00 | 20.00 | 20.00 | ok |
| [Q36](benchmarks/queries/query_36.sql) | 0 B | 414.00 | 358.25 | 358.50 | 354.00 | 362.00 | ok |
| [Q37](benchmarks/queries/query_37.sql) | 0 B | 284.00 | 242.25 | 242.50 | 240.00 | 244.00 | ok |
| [Q38](benchmarks/queries/query_38.sql) | 0 B | 118.00 | 70.25 | 70.50 | 68.00 | 72.00 | ok |
| [Q39](benchmarks/queries/query_39.sql) | 0 B | 528.00 | 461.00 | 462.00 | 455.00 | 465.00 | ok |
| [Q40](benchmarks/queries/query_40.sql) | 0 B | 105.00 | 53.00 | 53.00 | 52.00 | 54.00 | ok |
| [Q41](benchmarks/queries/query_41.sql) | 0 B | 70.00 | 30.00 | 30.00 | 30.00 | 30.00 | ok |
| [Q42](benchmarks/queries/query_42.sql) | 0 B | 95.00 | 64.50 | 64.50 | 64.00 | 65.00 | ok |
| [Q07](benchmarks/queries/query_7.sql) | 0 B | 17.00 | 7.00 | 7.00 | 7.00 | 7.00 | ok |
| [Q08](benchmarks/queries/query_8.sql) | 0 B | 190.00 | 170.25 | 170.00 | 169.00 | 172.00 | ok |
| [Q09](benchmarks/queries/query_9.sql) | 0 B | 231.00 | 188.25 | 187.50 | 186.00 | 192.00 | ok |
| [Q10](benchmarks/queries/query_10.sql) | 0 B | 296.00 | 258.00 | 258.00 | 256.00 | 260.00 | ok |
| [Q11](benchmarks/queries/query_11.sql) | 0 B | 293.00 | 257.50 | 257.00 | 257.00 | 259.00 | ok |
| [Q12](benchmarks/queries/query_12.sql) | 0 B | 236.00 | 209.50 | 210.00 | 206.00 | 212.00 | ok |
| [Q13](benchmarks/queries/query_13.sql) | 0 B | 271.00 | 248.75 | 243.00 | 239.00 | 270.00 | ok |
| [Q14](benchmarks/queries/query_14.sql) | 0 B | 251.00 | 211.25 | 211.50 | 209.00 | 213.00 | ok |
| [Q15](benchmarks/queries/query_15.sql) | 0 B | 70.00 | 54.25 | 54.00 | 52.00 | 57.00 | ok |
| [Q16](benchmarks/queries/query_16.sql) | 0 B | 120.00 | 84.75 | 84.00 | 83.00 | 88.00 | ok |
| [Q17](benchmarks/queries/query_17.sql) | 0 B | 166.00 | 123.00 | 123.00 | 122.00 | 124.00 | ok |
| [Q18](benchmarks/queries/query_18.sql) | 0 B | 398.00 | 347.50 | 346.00 | 334.00 | 364.00 | ok |
| [Q19](benchmarks/queries/query_19.sql) | 0 B | 4.00 | <1 | <1 | <1 | <1 | ok |
| [Q20](benchmarks/queries/query_20.sql) | 0 B | 157.00 | 98.50 | 98.50 | 98.00 | 99.00 | ok |
| [Q21](benchmarks/queries/query_21.sql) | 0 B | 181.00 | 111.25 | 111.50 | 109.00 | 113.00 | ok |
| [Q22](benchmarks/queries/query_22.sql) | 0 B | 273.00 | 178.50 | 178.00 | 176.00 | 182.00 | ok |
| [Q23](benchmarks/queries/query_23.sql) | 0 B | 284.00 | 155.75 | 156.00 | 155.00 | 156.00 | ok |
| [Q24](benchmarks/queries/query_24.sql) | 0 B | 64.00 | 16.00 | 16.00 | 16.00 | 16.00 | ok |
| [Q25](benchmarks/queries/query_25.sql) | 0 B | 29.00 | 12.00 | 12.00 | 12.00 | 12.00 | ok |
| [Q26](benchmarks/queries/query_26.sql) | 0 B | 68.00 | 16.00 | 16.00 | 16.00 | 16.00 | ok |
| [Q27](benchmarks/queries/query_27.sql) | 0 B | 450.00 | 389.00 | 389.50 | 382.00 | 395.00 | ok |
| [Q28](benchmarks/queries/query_28.sql) | 0 B | 929.00 | 875.50 | 873.00 | 865.00 | 891.00 | ok |
| [Q29](benchmarks/queries/query_29.sql) | 0 B | 16.00 | 4.00 | 4.00 | 4.00 | 4.00 | ok |
| [Q30](benchmarks/queries/query_30.sql) | 0 B | 72.00 | 24.00 | 24.00 | 24.00 | 24.00 | ok |
| [Q31](benchmarks/queries/query_31.sql) | 0 B | 131.00 | 36.25 | 36.00 | 36.00 | 37.00 | ok |
| [Q32](benchmarks/queries/query_32.sql) | 0 B | 484.00 | 398.75 | 396.50 | 383.00 | 419.00 | ok |
| [Q33](benchmarks/queries/query_33.sql) | 0 B | 253.00 | 196.75 | 195.50 | 186.00 | 210.00 | ok |
| [Q34](benchmarks/queries/query_34.sql) | 0 B | 248.00 | 188.25 | 189.00 | 184.00 | 191.00 | ok |
| [Q35](benchmarks/queries/query_35.sql) | 0 B | 34.00 | 19.75 | 19.50 | 19.00 | 21.00 | ok |
| [Q36](benchmarks/queries/query_36.sql) | 0 B | 315.00 | 273.25 | 272.50 | 271.00 | 277.00 | ok |
| [Q37](benchmarks/queries/query_37.sql) | 0 B | 235.00 | 197.25 | 197.50 | 195.00 | 199.00 | ok |
| [Q38](benchmarks/queries/query_38.sql) | 0 B | 86.00 | 45.75 | 46.00 | 45.00 | 46.00 | ok |
| [Q39](benchmarks/queries/query_39.sql) | 0 B | 378.00 | 308.75 | 309.00 | 304.00 | 313.00 | ok |
| [Q40](benchmarks/queries/query_40.sql) | 0 B | 76.00 | 38.75 | 38.50 | 38.00 | 40.00 | ok |
| [Q41](benchmarks/queries/query_41.sql) | 0 B | 64.00 | 26.75 | 27.00 | 26.00 | 27.00 | ok |
| [Q42](benchmarks/queries/query_42.sql) | 0 B | 100.00 | 70.25 | 70.00 | 70.00 | 71.00 | ok |
<!-- benchmark-table:end -->
2 changes: 1 addition & 1 deletion benchmarks/benchmark_csv_to_columnar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#define COLUMNAR_BENCHMARK_DEFAULT_ROUNDTRIP_SCHEMA "benchmarks/schema_sample_new.csv"
#endif

static constexpr size_t RowsPerGroup = 1 << 14;
static constexpr auto DefaultCompression = Compression::Lz4;

struct CsvCompareResult {
Expand Down Expand Up @@ -66,6 +65,7 @@ static CsvCompareResult CompareCsvFiles(const std::filesystem::path& lhs_path, c
int main(const int argc, char** argv) {
try {
size_t rows_per_group = RowsPerGroup;

if (argc == 2) {
rows_per_group = std::stoull(argv[1]);
}
Expand Down
60 changes: 57 additions & 3 deletions benchmarks/benchmark_queries.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,51 @@ static constexpr int LastQueryId = 42;

enum class QueryRunStatus {
Passed,
Executed,
Failed,
Skipped,
Recorded,
NoReference,
};

enum class ReferenceCheckMode {
Auto,
Always,
Never,
};

static std::string_view ModeName(const QueryExecutionMode mode) {
return mode == QueryExecutionMode::Parser ? "parser" : "hardcoded";
}

static std::string_view ReferenceCheckModeName(const ReferenceCheckMode mode) {
switch (mode) {
case ReferenceCheckMode::Auto:
return "auto";
case ReferenceCheckMode::Always:
return "always";
case ReferenceCheckMode::Never:
return "never";
}

return "unknown";
}

static bool LooksLikeSampleInput(const std::filesystem::path& data_path, const std::filesystem::path& queries_dir) {
const std::filesystem::path sample_path = queries_dir.parent_path() / "hits_sample.columnar";
std::error_code error;

if (std::filesystem::equivalent(data_path, sample_path, error)) {
return true;
}

return data_path.filename() == sample_path.filename();
}

QueryRunStatus RunQuery(const Executor& executor, const std::filesystem::path& path, const int query_id,
const QueryExecutionMode mode, const PlannedQuery* planned_query, bool record = false,
const std::optional<std::filesystem::path>& output_csv = std::nullopt) {
const std::optional<std::filesystem::path>& output_csv = std::nullopt,
const bool check_reference = true) {
const std::string query_sql = std::filesystem::exists(path) ? ReadTextFile(path) : "";
const bool compare_unordered = QueryUsesGroupBy(query_sql);

Expand Down Expand Up @@ -69,6 +101,7 @@ QueryRunStatus RunQuery(const Executor& executor, const std::filesystem::path& p
}

Batch result_batch = std::move(*result);

if (output_csv.has_value()) {
WriteBatchCsv(*output_csv, result_batch);
}
Expand All @@ -86,7 +119,16 @@ QueryRunStatus RunQuery(const Executor& executor, const std::filesystem::path& p
std::cout << "query_" << query_id << ": rows=" << result_batch.RowsCount() << ", time=" << duration_ms
<< "ms, status=" << status << std::endl;
return QueryRunStatus::Recorded;
} else if (std::filesystem::exists(ref_path)) {
}

if (!check_reference) {
status = "executed";
std::cout << "query_" << query_id << ": rows=" << result_batch.RowsCount() << ", time=" << duration_ms
<< "ms, status=" << status << std::endl;
return QueryRunStatus::Executed;
}

if (std::filesystem::exists(ref_path)) {
const std::string expected_result = ReadTextFile(ref_path);
if (actual_result == expected_result ||
EqualWithLimitTies(query_sql, result_batch.GetSchema(), actual_result, expected_result) ||
Expand Down Expand Up @@ -123,6 +165,7 @@ int main(const int argc, char** argv) {
try {
bool record = false;
bool strict_status = false;
auto reference_check_mode = ReferenceCheckMode::Auto;

auto mode = QueryExecutionMode::Hardcoded;

Expand All @@ -138,6 +181,10 @@ int main(const int argc, char** argv) {
record = true;
} else if (arg == "--strict-status") {
strict_status = true;
} else if (arg == "--check-reference") {
reference_check_mode = ReferenceCheckMode::Always;
} else if (arg == "--skip-reference-check") {
reference_check_mode = ReferenceCheckMode::Never;
} else if (arg == "--parser") {
mode = QueryExecutionMode::Parser;
} else if (arg == "--hardcoded") {
Expand Down Expand Up @@ -182,12 +229,17 @@ int main(const int argc, char** argv) {
const std::filesystem::path queries_dir = COLUMNAR_BENCHMARK_QUERIES_DIR;
const std::filesystem::path data_path =
input_path.empty() ? queries_dir.parent_path() / "hits_sample.columnar" : input_path;
const bool check_reference = reference_check_mode == ReferenceCheckMode::Always ? true
: reference_check_mode == ReferenceCheckMode::Never
? false
: LooksLikeSampleInput(data_path, queries_dir);

Executor executor;
executor.SetUnsupportedFallbackEnabled(true);
executor.RegisterTable("hits", data_path);

std::vector<std::optional<PlannedQuery>> hardcoded_plans(LastQueryId + 1);

if (mode == QueryExecutionMode::Hardcoded) {
for (int query_id = FirstQueryId; query_id <= LastQueryId; ++query_id) {
if (HasHardcodedClickBenchQuery(query_id)) {
Expand All @@ -202,6 +254,8 @@ int main(const int argc, char** argv) {
std::cout << "queries_dir=" << queries_dir << std::endl;
std::cout << "input=" << data_path << std::endl;
std::cout << "mode=" << ModeName(mode) << std::endl;
std::cout << "reference_check=" << (check_reference ? "enabled" : "disabled")
<< " (mode=" << ReferenceCheckModeName(reference_check_mode) << ")" << std::endl;

for (int query_id = from_query; query_id <= to_query; ++query_id) {
const std::filesystem::path query_path = queries_dir / ("query_" + std::to_string(query_id) + ".sql");
Expand All @@ -212,7 +266,7 @@ int main(const int argc, char** argv) {
const PlannedQuery* planned_query =
hardcoded_plans[query_id].has_value() ? &*hardcoded_plans[query_id] : nullptr;
const QueryRunStatus status =
RunQuery(executor, query_path, query_id, mode, planned_query, record, output_csv);
RunQuery(executor, query_path, query_id, mode, planned_query, record, output_csv, check_reference);
if (status == QueryRunStatus::Failed) {
saw_failure = true;
}
Expand Down
Loading
Loading