{"record":{"id":"d1c130f1daed8207","repo":"prestodb/presto","slug":"warning-as-error","errorCode":"WARNING_AS_ERROR","errorMessage":"Warning handling level set to AS_ERROR. Warnings: %n %s","messagePattern":"Warning handling level set to AS_ERROR\\. Warnings: %n (.+?)","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-analyzer/src/main/java/com/facebook/presto/sql/analyzer/BuiltInQueryPreparer.java","lineNumber":83,"sourceCode":"{\n    private final SqlParser sqlParser;\n    private final ProcedureRegistry procedureRegistry;\n\n    @Inject\n    public BuiltInQueryPreparer(\n            SqlParser sqlParser,\n            ProcedureRegistry procedureRegistry)\n    {\n        this.sqlParser = requireNonNull(sqlParser, \"sqlParser is null\");\n        this.procedureRegistry = requireNonNull(procedureRegistry, \"procedureRegistry is null\");\n    }\n\n    @Override\n    public BuiltInPreparedQuery prepareQuery(AnalyzerOptions analyzerOptions, String query, Map<String, String> preparedStatements, WarningCollector warningCollector)\n    {\n        Statement wrappedStatement = sqlParser.createStatement(query, createParsingOptions(analyzerOptions));\n        if (warningCollector.hasWarnings() && analyzerOptions.getWarningHandlingLevel() == AS_ERROR) {\n            throw new PrestoException(WARNING_AS_ERROR, format(\"Warning handling level set to AS_ERROR. Warnings: %n %s\",\n                    warningCollector.getWarnings().stream()\n                            .map(PrestoWarning::getMessage)\n                            .collect(joining(System.lineSeparator()))));\n        }\n        return prepareQuery(analyzerOptions, wrappedStatement, preparedStatements);\n    }\n\n    public BuiltInPreparedQuery prepareQuery(AnalyzerOptions analyzerOptions, Statement wrappedStatement, Map<String, String> preparedStatements)\n    {\n        Statement statement = wrappedStatement;\n        Optional<String> prepareSql = Optional.empty();\n        if (statement instanceof Execute) {\n            String preparedStatementName = ((Execute) statement).getName().getValue();\n            prepareSql = Optional.ofNullable(preparedStatements.get(preparedStatementName));\n            String query = prepareSql.orElseThrow(() -> new PrestoException(NOT_FOUND, \"Prepared statement not found: \" + preparedStatementName));\n            statement = sqlParser.createStatement(query, createParsingOptions(analyzerOptions));\n        }\n","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-analyzer/src/main/java/com/facebook/presto/sql/analyzer/BuiltInQueryPreparer.java#L65-L101","documentation":"When the analyzer options set warning handling level to AS_ERROR, any warning accumulated by the warning collector during statement parsing is converted into a hard PrestoException (WARNING_AS_ERROR). The message lists all collected warnings.","triggerScenarios":"Calling BuiltInQueryPreparer.prepareQuery() with AnalyzerOptions whose warningHandlingLevel is AS_ERROR, and the SQL parser produced at least one warning while parsing the statement (warningCollector.hasWarnings()).","commonSituations":"Server configured with strict warning policy (warnings-as-errors) parsing queries with deprecated syntax or parse warnings; CI pipelines enforcing zero warnings.","solutions":["Fix the warnings listed in the message (deprecated/invalid syntax) in the query","Change the warning handling level in AnalyzerOptions to a non-fatal level (e.g. NORMAL/DISABLE) if strictness is not needed","Use a fresh warning collector per parse so unrelated earlier warnings do not fail the current statement"],"exampleFix":"// before\nAnalyzerOptions options = AnalyzerOptions.builder().setWarningHandlingLevel(WarningHandlingLevel.AS_ERROR).build();\n// after\n.setWarningHandlingLevel(WarningHandlingLevel.NORMAL)","handlingStrategy":"try-catch","validationCode":"if (options.getWarningHandlingLevel() == WarningHandlingLevel.AS_ERROR && warningCollector.hasWarnings()) {\n    // handle or clear warnings before calling prepareQuery\n}","typeGuard":null,"tryCatchPattern":"try {\n    return preparer.prepareQuery(options, query, preparedStatements, warningCollector);\n} catch (PrestoException e) {\n    if (e.getErrorCode().getCode() == StandardErrorCode.WARNING_AS_ERROR.getCode()) {\n        log.warn(\"Query rejected due to warnings: {}\", e.getMessage());\n    }\n    throw e;\n}","preventionTips":["Fix parser warnings in queries before enabling AS_ERROR mode","Use a per-query WarningCollector so stale warnings don't leak into the next parse","Choose NORMAL warning level unless strict enforcement is a hard requirement"],"tags":["sql-parser","warnings","analyzer","strict-mode"],"backgroundTag":"warnings-as-errors","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}