{"record":{"id":"283fd51468af8c47","repo":"tursodatabase/turso","slug":"path-no-results-found","errorCode":null,"errorMessage":"{path}: no results found","messagePattern":"(.+?): no results found","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"perf/fts/plot/plot-fts.py","lineNumber":117,"sourceCode":"            if row.get(\"profiled\", \"false\") != \"false\":\n                raise ValueError(\"profiled timings must not be used for benchmark comparisons\")\n            current = tuple(row[key] for key in CONFIGURATION)\n            if configuration is None:\n                configuration = current\n            if configuration != current:\n                raise ValueError(\"plot only one configuration at a time\")\n            key = (row[\"engine\"], row[\"mode\"])\n            if key not in SERIES:\n                raise ValueError(f\"unsupported engine/mode: {key}\")\n            series = samples.setdefault(key, {query: [] for query in QUERIES})\n            query = row[\"query\"]\n            seen = runs.setdefault(row[\"run\"], {}).setdefault(key, set())\n            if query not in QUERIES or query in seen:\n                raise ValueError(f\"{path}: unknown or duplicate query {query}\")\n            seen.add(query)\n            series[query].append(read_measurement(row, percentile))\n    if not runs:\n        raise ValueError(f\"{path}: no results found\")\n    return configuration, runs\n\n\ndef read_measurement(row, percentile):\n    queries = int(row[\"queries\"])\n    positive_number(queries)\n    if row[\"benchmark\"] != \"memory\":\n        seconds = positive_number(row[\"seconds\"])\n    if row[\"benchmark\"] == \"memory\":\n        if row[\"engine\"] != \"turso\" or queries != int(row[\"requested_queries\"]) * int(row[\"connections\"]):\n            raise ValueError(\"heap results require Turso and the requested queries per connection\")\n        value = float(row[\"peak_heap_bytes\"]) / (1024 * 1024)\n    elif row[\"benchmark\"] == \"search\":\n        if not 0 < int(row[\"connections\"]) <= queries or queries != int(row[\"requested_queries\"]):\n            raise ValueError(\"search results require at least one sample per connection and the requested query count\")\n        value = float(row[f\"{percentile}_ms\"])\n    elif row[\"benchmark\"] == \"throughput\":\n        minimum = positive_number(row[\"min_seconds\"])","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/tursodatabase/turso/blob/8d4a589f8d13ac184700d2a8f724f27e1995be3b/perf/fts/plot/plot-fts.py#L99-L135","documentation":"After parsing every row of the benchmark CSV, no valid result rows were collected for the file, so there is nothing to plot. The guard fires when the CSV is empty, all rows were rejected by earlier checks (e.g. unsupported engine/mode or profiled rows), or the file only contains header/columns.","triggerScenarios":"CSV has a header but zero data rows; a filter or generator wrote only the header; wrong file passed in.","commonSituations":"Benchmark crashed before writing results; glob picked up an empty template CSV; all rows were removed while cleaning duplicates.","solutions":["Point the script at a results CSV that actually contains data rows","Re-run the benchmark to produce results","Check the benchmark output path/arguments if the file is unexpectedly empty"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"import csv\nwith open(path) as f:\n    if sum(1 for _ in csv.DictReader(f)) == 0:\n        raise ValueError(f\"{path}: no results found\")","typeGuard":"def has_data_rows(path) -> bool:\n    with open(path) as f:\n        return next(csv.DictReader(f), None) is not None","tryCatchPattern":"try:\n    configuration, runs = read_runs(path, percentile)\nexcept ValueError as e:\n    print(f\"no data to plot: {e}\")","preventionTips":["Confirm the benchmark run completed before plotting","Check file size/line count before passing a results file","Verify the output path argument of the benchmark harness"],"tags":["python","benchmark","empty-input"],"backgroundTag":"empty-result-set","analyzedSha":"8d4a589f8d13ac184700d2a8f724f27e1995be3b","analyzedAt":"2026-09-20T13:18:14.658Z","contentChangedAt":"2026-09-20T13:18:14.658Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}