tursodatabase/turso · error · SystemExit

no results found

Error message

no results found

What it means

Generic input validation in the TPC-H plotting script's main(): after parsing the benchmark result CSV files, no rows matched the expected result set (e.g. the CSVs are empty, malformed, or contain different engine/query labels than the plot expects), so there is nothing to plot and the script aborts. It fires whenever the supplied CSV files yield zero usable result entries.

Source

Thrown at perf/tpc-h/plot/plot-tpch.py:66

# column of engine names at its left is, in cm.
TABLE_ROW_HEIGHT = 0.36
TABLE_LABEL_WIDTH = 0.95


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("csv_files", type=Path, nargs="+")
    parser.add_argument("--out", type=Path, default=Path("tpch"), metavar="PREFIX",
                        help="write PREFIX.png, PREFIX.pdf and PREFIX.tikz (default tpch)")
    parser.add_argument("--name", action="append", default=[], metavar="ENGINE=NAME",
                        help="legend name for an engine, e.g. limbo=Turso")
    args = parser.parse_args()
    names = dict(name.split("=", 1) for name in args.name)

    runs = [read_run(path) for path in args.csv_files]
    columns = runs[0].columns
    if not runs[0].rows or not columns:
        raise SystemExit("no results found")
    for run in runs[1:]:
        if run.columns != columns:
            raise SystemExit(f"{run.path} has columns {run.columns}, {runs[0].path} has {columns}")

    figure = Figure(runs, columns, names)
    for suffix in (".png", ".pdf"):
        output = args.out.with_suffix(suffix)
        figure.matplotlib(output)
        print(f"wrote {output}")
    output = args.out.with_suffix(".tikz")
    output.write_text(figure.tikz())
    print(f"wrote {output}")


class Run:
    """One CSV: the queries in file order and every engine's time for each."""

    def __init__(self, path, columns, rows):

View on GitHub (pinned to 492c4a71cd)

Solutions

  1. Check the CSV file actually contains a header row plus data rows: `wc -l results.csv` and `head results.csv`.
  2. Re-run the TPC-H benchmark to produce fresh results before plotting.
  3. Verify the --csv-files arguments point at completed benchmark outputs, not placeholder files.
  4. If partial results are expected, ensure at least the first CSV has rows (the first file drives column validation).

Example fix

// before
python plot-tpch.py --csv-files empty_run.csv -o out
// after
python plot-tpch.py --csv-files results/full_run.csv -o out
Defensive patterns

Strategy: validation

Validate before calling

import csv
def csv_has_rows(path) -> bool:
    with open(path, newline="") as f:
        r = csv.reader(f)
        header = next(r, None)
        return bool(header) and next(r, None) is not None

Prevention

When it happens

Trigger: Running plot-tpch.py with CSV files that are empty, header-only, or that failed to parse into rows/columns (read_run produced an empty run).

Common situations: Benchmark run crashed or was interrupted before any query completed, so results.csv contains only a header or is empty; wrong CSV path passed on the command line; results directory from a fresh/failed run.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of tursodatabase/turso@492c4a71cd (2026-09-13). Data as JSON: /api/errors/1726a2a4d8443cce. Report an issue: GitHub.