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
- 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
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
- 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
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
- NOT_SUPPORTED
- WARNING_AS_ERROR
- UNSUPPORTED_ANALYZER_TYPE
- Unsupported EXPLAIN format:
- Unsupported EXPLAIN type:
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/d1c130f1daed8207.
Report an issue: GitHub.