can1357/oh-my-pi · error · ToolError
Unsupported SQLite query parameter '${keyName}'
Error message
Unsupported SQLite query parameter '${keyName}' What it means
The sqlite-reader tool builds a paginated table query from URL query parameters (limit, offset, order, where) on a `db.sqlite/table` selector. When any pagination parameter is present, every supplied parameter must be one of the four known keys; an unknown key means the selector string was likely mistyped or mis-encoded, so the tool throws a ToolError instead of silently ignoring it.
Source
Thrown at packages/coding-agent/src/tools/sqlite-reader.ts:605
if (!table) {
throw new ToolError("SQLite selectors must include a table name");
}
if (key !== undefined && key.length > 0) {
if (params.size > 0) {
throw new ToolError("SQLite row lookups cannot be combined with query parameters");
}
return { kind: "row", table, key };
}
const where = validateWhereClause(params.get("where") ?? undefined);
const order = params.get("order")?.trim() || undefined;
const hasQueryParams = params.has("limit") || params.has("offset") || order !== undefined || where !== undefined;
if (hasQueryParams) {
const knownKeys = new Set(["limit", "offset", "order", "where"]);
for (const keyName of params.keys()) {
if (!knownKeys.has(keyName)) {
throw new ToolError(`Unsupported SQLite query parameter '${keyName}'`);
}
}
return {
kind: "query",
table,
limit: parseLimit(params.get("limit"), DEFAULT_QUERY_LIMIT),
offset: parseOffset(params.get("offset")),
order,
where,
};
}
if (params.size > 0) {
for (const keyName of params.keys()) {
throw new ToolError(`Unsupported SQLite query parameter '${keyName}'`);
}
}
View on GitHub (pinned to 9690622007)
Solutions
- Replace the unknown parameter with a supported one: limit, offset, order, or where
- If filtering by column values, use ?where=<sql condition> instead of filter-like params
- If you need arbitrary SQL, use the raw query selector `db.sqlite?q=SELECT ...` instead of table params
- Check the query string for stray characters, typos, or duplicated parameters (URLSearchParams will surface both keys)
Example fix
// before sqlite://app.db?users?sort=name&limit=10 // after sqlite://app.db?users?order=name&limit=10
Defensive patterns
Strategy: validation
Validate before calling
const ALLOWED = new Set(["limit", "offset", "order", "where"]);
const params = new URLSearchParams(queryString);
const bad = [...params.keys()].filter(k => !ALLOWED.has(k));
if (bad.length) throw new Error(`Unsupported SQLite query parameter(s): ${bad.join(", ")}`); Try / catch
try {
const selector = parseSqliteSelector(subPath, queryString);
} catch (err) {
if (err instanceof ToolError && err.message.includes("Unsupported SQLite query parameter")) {
// strip unknown params or show allowed keys to the user
} else throw err;
} Prevention
- Only ever build selectors from the documented params: limit, offset, order, where
- Use ?where= for filtering, not ad-hoc filter params
- Double-check spelling and case of parameter names
- Prefer the q= raw query selector when you need anything beyond the four params
When it happens
Trigger: Calling parseSqliteSelector (via a sqlite:// resource like `db.sqlite:table?limit=5&foo=bar`) where at least one of limit/offset/order/where is present AND an unrecognized key such as `sort`, `filter`, `page`, or `fields` also appears in the query string.
Common situations: Developer guesses at parameter names (`sort=` instead of `order=`, `filter=` instead of `where=`); URL fragments or extra params from copy-paste; a template adds tracking-style params; case sensitivity (`Limit=` is not `limit=`).
Related errors
- Unsupported SQLite selector
- SQLite limit must be a positive integer; got '${value}'
- SQLite offset must be a non-negative integer; got '${value}'
- ${label} must be an integer; got '${key}'
- SQLite order column '${column}' not found in table schema
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/7a5cafe5384fafef.
Report an issue: GitHub.