{"record":{"id":"ab9309fea7dc1cf4","repo":"clockworklabs/SpacetimeDB","slug":"too-many-positional-arguments-for-interactive-mode","errorCode":null,"errorMessage":"Too many positional arguments for interactive mode.\nUsage: spacetime sql [database] --interactive [--no-config]","messagePattern":"Too many positional arguments for interactive mode\\.\nUsage: spacetime sql \\[database\\] --interactive \\[--no-config\\]","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/cli/src/subcommands/sql.rs","lineNumber":231,"sourceCode":"    )?;\n\n    Ok((stats, table))\n}\n\npub async fn exec(config: Config, args: &ArgMatches) -> Result<(), anyhow::Error> {\n    eprintln!(\"{UNSTABLE_WARNING}\\n\");\n    let interactive = args.get_one::<bool>(\"interactive\").unwrap_or(&false);\n    let no_config = args.get_flag(\"no_config\");\n    let format = *args.get_one::<Format>(\"format\").unwrap();\n    let raw_parts: Vec<String> = args\n        .get_many::<String>(\"sql_parts\")\n        .map(|vals| vals.cloned().collect())\n        .unwrap_or_default();\n    let config_targets = load_config_db_targets(no_config)?;\n\n    if *interactive {\n        if raw_parts.len() > 1 {\n            anyhow::bail!(\n                \"Too many positional arguments for interactive mode.\\nUsage: spacetime sql [database] --interactive [--no-config]\"\n            );\n        }\n        let resolved = resolve_database_arg(\n            raw_parts.first().map(|s| s.as_str()),\n            config_targets.as_deref(),\n            \"spacetime sql [database] --interactive [--no-config]\",\n        )?;\n        let con = parse_req(config, args, &resolved.database, resolved.server.as_deref()).await?;\n\n        crate::repl::exec(con, format).await?;\n    } else {\n        let resolved = resolve_optional_database_parts(\n            &raw_parts,\n            config_targets.as_deref(),\n            \"query\",\n            \"spacetime sql [database] <query> [--no-config]\",\n        )","sourceCodeStart":213,"sourceCodeEnd":249,"githubUrl":"https://github.com/clockworklabs/SpacetimeDB/blob/eddf9f5014579a50d4b67630e28b6e15cad9c4af/crates/cli/src/subcommands/sql.rs#L213-L249","documentation":"`spacetime sql --interactive` (REPL mode) accepts at most one positional argument -- the optional database name -- because statements are typed inside the REPL. This error fires when two or more positional arguments were supplied, e.g. a database name plus a SQL string.","triggerScenarios":"Any invocation combining --interactive with more than one positional token, such as `spacetime sql mydb \"SELECT 1\" -i` or `spacetime sql a b -i`.","commonSituations":"Copy-pasting a non-interactive `spacetime sql <db> \"<query>\"` line and appending -i; shell aliases or wrappers that inject extra positional arguments.","solutions":["Drop the extra positional: `spacetime sql mydb -i`, then type statements in the REPL.","To run a single statement non-interactively, remove --interactive: `spacetime sql mydb \"SELECT ...\"."],"exampleFix":"# before\nspacetime sql mydb \"SELECT * FROM t\" --interactive\n# after\nspacetime sql mydb --interactive\n# or non-interactive one-shot\nspacetime sql mydb \"SELECT * FROM t\"","handlingStrategy":"validation","validationCode":"# Validate argv shape before spawning the CLI\nif [[ \"$INTERACTIVE\" == \"1\" && $# -gt 1 ]]; then\n  echo \"error: interactive sql accepts at most one positional (the database)\" >&2; exit 2\nfi\nspacetime sql \"$@\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["In interactive mode pass only the optional database name; put statements inside the REPL.","Keep a distinct alias/command for one-shot sql (no -i) vs REPL (-i).","Test wrappers with both zero and one positional argument."],"tags":["sql","cli","usage","interactive","arguments"],"backgroundTag":"invalid-command-arguments","analyzedSha":"eddf9f5014579a50d4b67630e28b6e15cad9c4af","analyzedAt":"2026-08-20T06:08:37.179Z","contentChangedAt":"2026-08-20T06:08:37.179Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}