{"record":{"id":"86db2cdd20204d54","repo":"PRQL/prql","slug":"format-expected-csv-or-json-found-format","errorCode":null,"errorMessage":"`format`: expected csv or json, found {format}","messagePattern":"`format`: expected csv or json, found (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"prqlc/prqlc/src/semantic/resolver/transforms.rs","lineNumber":538,"sourceCode":"                            found: format!(\"`{}`\", write_pl(text_expr.clone())),\n                        })\n                        .with_span(text_expr.span));\n                    }\n                };\n\n                let res = {\n                    let span = format.span;\n                    let format = format\n                        .try_cast(ExprKind::into_literal, Some(\"`format`\"), \"csv or json\")?\n                        .to_string();\n                    match format.as_str() {\n                        \"\\\"csv\\\"\" => from_text::parse_csv(&text)\n                            .map_err(|r| Error::new_simple(r).with_span(span))?,\n                        \"\\\"json\\\"\" => from_text::parse_json(&text)\n                            .map_err(|r| Error::new_simple(r).with_span(span))?,\n\n                        _ => {\n                            return Err(Error::new(Reason::Expected {\n                                who: Some(\"`format`\".to_string()),\n                                expected: \"csv or json\".to_string(),\n                                found: format,\n                            })\n                            .with_span(span))\n                        }\n                    }\n                };\n\n                let expr_id = text_expr.id.unwrap();\n                let input_name = text_expr.alias.unwrap_or_else(|| \"text\".to_string());\n\n                let columns: Vec<_> = res\n                    .columns\n                    .iter()\n                    .cloned()\n                    .map(|x| TyTupleField::Single(Some(x), None))\n                    .collect();","sourceCodeStart":520,"sourceCodeEnd":556,"githubUrl":"https://github.com/PRQL/prql/blob/e164e249b99485890036eb60f57c37520379b240/prqlc/prqlc/src/semantic/resolver/transforms.rs#L520-L556","documentation":"`std.from_text` supports only `\"csv\"` and `\"json\"` formats; anything else passed as the `format` argument fails with this error. The format must also be a literal string, since parsing happens at compile time.","triggerScenarios":"Calling `from_text format:\"xml\" ...`, `format:'JSON'` (case mismatch), a misspelled format (`csvv`, `jsonl`), or a non-literal format expression.","commonSituations":"Assuming other formats (TSV, XML, parquet) are supported, using uppercase variants, or trying JSON Lines which is not plain `json`.","solutions":["Use `format:\"csv\"` or `format:\"json\"` exactly (lowercase, quoted).","For other formats, convert the data to CSV/JSON before embedding it in PRQL.","For JSONL, convert to a JSON array, since only standard JSON is supported."],"exampleFix":"// before\nfrom_text format:\"xml\" text:\"<a/>\"\n// after\nfrom_text format:\"json\" text:\"[{\\\"a\\\": 1}]\"","handlingStrategy":"validation","validationCode":"const FORMATS = ['\"csv\"', '\"json\"'];\nif (!FORMATS.includes(format)) throw new Error(`from_text format must be csv or json, got ${format}`);","typeGuard":"const isFromTextFormat = (v) => v === '\"csv\"' || v === '\"json\"';","tryCatchPattern":"try { compile(prql) } catch (e) { if (e.message.includes('`format`: expected csv or json')) { /* switch format or convert data */ } }","preventionTips":["Restrict format values to the constants 'csv' and 'json' in generating code","Remember formats are lowercase quoted literals","Convert XML/TSV/JSONL data to CSV or JSON before embedding"],"tags":["prql","compile-time","invalid-enum-value","from-text"],"backgroundTag":"invalid-enum-value","analyzedSha":"e164e249b99485890036eb60f57c37520379b240","analyzedAt":"2026-09-09T12:18:38.727Z","contentChangedAt":"2026-09-09T12:18:38.727Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}