{"record":{"id":"78859399844430be","repo":"apache/superset","slug":"only-single-queries-supported","errorCode":null,"errorMessage":"Only single queries supported","messagePattern":"Only single queries supported","errorType":"http","errorClass":"SupersetSecurityException","httpStatus":403,"severity":"error","filePath":"superset/connectors/sqla/utils.py","lineNumber":162,"sourceCode":"        # already persisted by ``UpdateDatasetCommand``. Genuinely\n        # invalid static SQL must still hard-error. See #38012.\n        if _has_jinja_markers(original_sql):\n            raise SupersetVirtualTableParseException(\n                message=_(\"Invalid SQL: %(error)s\", error=ex.error.message),\n            ) from ex\n        raise SupersetGenericDBErrorException(\n            message=_(\"Invalid SQL: %(error)s\", error=ex.error.message),\n        ) from ex\n    if parsed_script.has_mutation():\n        raise SupersetSecurityException(\n            SupersetError(\n                error_type=SupersetErrorType.DATASOURCE_SECURITY_ACCESS_ERROR,\n                message=_(\"Only `SELECT` statements are allowed\"),\n                level=ErrorLevel.ERROR,\n            )\n        )\n    if len(parsed_script.statements) > 1:\n        raise SupersetSecurityException(\n            SupersetError(\n                error_type=SupersetErrorType.DATASOURCE_SECURITY_ACCESS_ERROR,\n                message=_(\"Only single queries supported\"),\n                level=ErrorLevel.ERROR,\n            )\n        )\n    return get_columns_description(\n        dataset.database,\n        dataset.catalog,\n        dataset.schema,\n        sql,\n    )\n\n\ndef get_columns_description(\n    database: Database,\n    catalog: str | None,\n    schema: str | None,","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/apache/superset/blob/f4587218dd19d046c3e4d00063e7d27f8a2ed354/superset/connectors/sqla/utils.py#L144-L180","documentation":"Raised by get_virtual_table_metadata() when the parsed SQLScript contains more than one statement. Virtual datasets support exactly one query; multiple statements are rejected with SupersetSecurityException (DATASOURCE_SECURITY_ACCESS_ERROR, 'Only single queries supported') even when each statement is a plain SELECT.","triggerScenarios":"Dataset SQL like `SELECT ...; SELECT ...` or a SELECT followed by any second statement (including a trailing temp-table creation or a comment-only statement the parser counts). Evaluated as `len(parsed_script.statements) > 1` after rendering.","commonSituations":"Pasting a multi-statement SQL Lab script into 'Save as dataset'; CTE-plus-.final-select patterns that include an extra trailing statement; SQL copied from a notebook cell with several statements.","solutions":["Reduce the dataset SQL to a single SELECT statement (combine parts with CTEs or subqueries).","Remove trailing semicolon-separated helper statements (e.g. SET statements) — put them in the database session or engine options instead.","If you need multiple outputs, create one dataset per statement."],"exampleFix":"-- before\nSELECT id, total FROM orders_2023;\nSELECT id, total FROM orders_2024;\n\n-- after\nSELECT id, total FROM orders_2023\nUNION ALL\nSELECT id, total FROM orders_2024","handlingStrategy":"validation","validationCode":"def is_single_statement(sql: str, engine: str) -> bool:\n    try:\n        return len(SQLScript(sql, engine=engine).statements) == 1\n    except SupersetParseError:\n        return False","typeGuard":null,"tryCatchPattern":"try:\n    get_virtual_table_metadata(dataset)\nexcept SupersetSecurityException as ex:\n    if 'single queries' in str(ex):\n        # merge statements with CTEs/UNION and retry once\n        ...","preventionTips":["Save-as-dataset only from a single-statement SQL Lab selection.","Fold helper statements into CTEs.","Strip trailing semicolons and extra statements in automated dataset creators."],"tags":["dataset","sql","security","single-query"],"backgroundTag":null,"analyzedSha":"f4587218dd19d046c3e4d00063e7d27f8a2ed354","analyzedAt":"2026-08-14T22:39:27.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}