{"record":{"id":"8649051381aa083f","repo":"windmill-labs/windmill","slug":"error-parsing-sql-864905","errorCode":null,"errorMessage":"Error parsing sql","messagePattern":"Error parsing sql","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/parsers/windmill-parser-sql/src/lib.rs","lineNumber":38,"sourceCode":"};\n\npub const SANITIZED_ENUM_STR: &str = \"__sanitized_enum__\";\npub const SANITIZED_RAW_STRING_STR: &str = \"__sanitized_raw_string__\";\n\npub fn parse_mysql_sig(code: &str) -> anyhow::Result<MainArgSignature> {\n    let parsed = parse_mysql_file(&code)?;\n    if let Some(x) = parsed {\n        let args = x;\n        Ok(MainArgSignature {\n            star_args: false,\n            star_kwargs: false,\n            args,\n            auto_kind: None,\n            has_preprocessor: None,\n            ..Default::default()\n        })\n    } else {\n        Err(anyhow!(\"Error parsing sql\".to_string()))\n    }\n}\n\npub fn parse_oracledb_sig(code: &str) -> anyhow::Result<MainArgSignature> {\n    let parsed = parse_oracledb_file(&code)?;\n    if let Some(x) = parsed {\n        let args = x;\n        Ok(MainArgSignature {\n            star_args: false,\n            star_kwargs: false,\n            args,\n            auto_kind: None,\n            has_preprocessor: None,\n            ..Default::default()\n        })\n    } else {\n        Err(anyhow!(\"Error parsing sql\".to_string()))\n    }","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/parsers/windmill-parser-sql/src/lib.rs#L20-L56","documentation":"`parse_mysql_sig` parses a MySQL script to extract its declared arguments (from named-argument placeholders like `:name` or the legacy comment syntax). When the underlying `parse_mysql_file` returns no recognized argument declarations (None), the function fails with this generic message. It means the SQL script carries no parseable Windmill argument signature.","triggerScenarios":"Calling `parse_mysql_sig` (e.g. via `do_mysql` when saving/hashing a script) on code where the named-args regexes match nothing — the script contains no `:param` placeholders nor legacy arg declarations, so `parse_mysql_file` yields None and the `else` branch at lib.rs:38 fires.","commonSituations":"A MySQL script written with plain SQL and no parameters; parameters written in a syntax the parser doesn't recognize (e.g. `?` placeholders instead of `:name`); parameters commented out or inside syntax the regex skips; calling the parser on an empty or unrelated snippet.","solutions":["Declare script parameters using Windmill's MySQL named-argument syntax (`:name type` or the legacy comment declarations) so the regexes match.","If the script truly has no parameters, verify the caller treats an empty signature as valid — this error means None was returned, so check which parser variant your dialect path uses.","Inspect `RE_ARG_MYSQL_NAMED`/`RE_ARG_MYSQL` in windmill-parser-sql to confirm your placeholder spelling matches.","Test the signature parse in isolation with `parse_mysql_sig(code)` on the exact script text."],"exampleFix":"// before — no parseable args\nSELECT * FROM users WHERE id = ?;\n\n// after — Windmill named argument\nSELECT * FROM users WHERE id = :user_id int;","handlingStrategy":"validation","validationCode":"// Rust: check the script declares at least one named arg before parsing\nfn declares_mysql_args(code: &str) -> bool {\n    // named args like ':name type'\n    code.contains(\":\") && code.lines().any(|l| !l.trim_start().starts_with(\"--\"))\n        || code.to_lowercase().contains(\"wmarg\")\n}","typeGuard":null,"tryCatchPattern":"// Rust\nmatch parse_mysql_sig(&code) {\n    Ok(sig) => sig,\n    Err(e) if e.to_string() == \"Error parsing sql\" => {\n        MainArgSignature::default() // treat as parameterless script\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Always declare MySQL parameters with the `:name type` placeholder style Windmill recognizes.","Avoid `?` positional placeholders — the parser only reads named declarations.","Test signature extraction with `wmill script` push/dry-run before deploying."],"tags":["mysql","sql","argument-parsing","windmill-scripts"],"backgroundTag":"sql-args-not-found","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}