prestodb/presto · error · PrestoException

WARNING_AS_ERROR

WARNING_AS_ERROR

Error message

Warning handling level set to AS_ERROR. Warnings: %n %s

What it means

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.

Source

Thrown at presto-analyzer/src/main/java/com/facebook/presto/sql/analyzer/BuiltInQueryPreparer.java:83

{
    private final SqlParser sqlParser;
    private final ProcedureRegistry procedureRegistry;

    @Inject
    public BuiltInQueryPreparer(
            SqlParser sqlParser,
            ProcedureRegistry procedureRegistry)
    {
        this.sqlParser = requireNonNull(sqlParser, "sqlParser is null");
        this.procedureRegistry = requireNonNull(procedureRegistry, "procedureRegistry is null");
    }

    @Override
    public BuiltInPreparedQuery prepareQuery(AnalyzerOptions analyzerOptions, String query, Map<String, String> preparedStatements, WarningCollector warningCollector)
    {
        Statement wrappedStatement = sqlParser.createStatement(query, createParsingOptions(analyzerOptions));
        if (warningCollector.hasWarnings() && analyzerOptions.getWarningHandlingLevel() == AS_ERROR) {
            throw new PrestoException(WARNING_AS_ERROR, format("Warning handling level set to AS_ERROR. Warnings: %n %s",
                    warningCollector.getWarnings().stream()
                            .map(PrestoWarning::getMessage)
                            .collect(joining(System.lineSeparator()))));
        }
        return prepareQuery(analyzerOptions, wrappedStatement, preparedStatements);
    }

    public BuiltInPreparedQuery prepareQuery(AnalyzerOptions analyzerOptions, Statement wrappedStatement, Map<String, String> preparedStatements)
    {
        Statement statement = wrappedStatement;
        Optional<String> prepareSql = Optional.empty();
        if (statement instanceof Execute) {
            String preparedStatementName = ((Execute) statement).getName().getValue();
            prepareSql = Optional.ofNullable(preparedStatements.get(preparedStatementName));
            String query = prepareSql.orElseThrow(() -> new PrestoException(NOT_FOUND, "Prepared statement not found: " + preparedStatementName));
            statement = sqlParser.createStatement(query, createParsingOptions(analyzerOptions));
        }

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Fix the warnings listed in the message (deprecated/invalid syntax) in the query
  2. Change the warning handling level in AnalyzerOptions to a non-fatal level (e.g. NORMAL/DISABLE) if strictness is not needed
  3. Use a fresh warning collector per parse so unrelated earlier warnings do not fail the current statement

Example fix

// before
AnalyzerOptions options = AnalyzerOptions.builder().setWarningHandlingLevel(WarningHandlingLevel.AS_ERROR).build();
// after
.setWarningHandlingLevel(WarningHandlingLevel.NORMAL)
Defensive patterns

Strategy: try-catch

Validate before calling

if (options.getWarningHandlingLevel() == WarningHandlingLevel.AS_ERROR && warningCollector.hasWarnings()) {
    // handle or clear warnings before calling prepareQuery
}

Try / catch

try {
    return preparer.prepareQuery(options, query, preparedStatements, warningCollector);
} catch (PrestoException e) {
    if (e.getErrorCode().getCode() == StandardErrorCode.WARNING_AS_ERROR.getCode()) {
        log.warn("Query rejected due to warnings: {}", e.getMessage());
    }
    throw e;
}

Prevention

When it happens

Trigger: 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()).

Common situations: Server configured with strict warning policy (warnings-as-errors) parsing queries with deprecated syntax or parse warnings; CI pipelines enforcing zero warnings.

Related errors


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/d1c130f1daed8207. Report an issue: GitHub.