apache/shardingsphere · error · SQLParsingException
42000
42000
Error message
You have an error in your SQL syntax: %s
What it means
Thrown by UtilityDistSQLStatementParserEngine.parseToASTNode when the utility DistSQL parser (UtilityDistSQLLexer/Parser) fails with an ANTLR ParseCancellationException. Utility DistSQL covers statements like SHOW SHARDING or preview-style helpers; when the token stream violates the grammar, the parser's error strategy cancels and the SQL is wrapped in SQLParsingException (SQLState 42000).
Source
Thrown at parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/utility/UtilityDistSQLStatementParserEngine.java:48
*/
public final class UtilityDistSQLStatementParserEngine {
/**
* Parse SQL.
*
* @param sql SQL to be parsed
* @return SQL statement
*/
public SQLStatement parse(final String sql) {
ASTNode astNode = parseToASTNode(sql);
return getSQLStatement(sql, (ParseASTNode) astNode);
}
private ASTNode parseToASTNode(final String sql) {
try {
return SQLParserFactory.newInstance(sql, UtilityDistSQLLexer.class, UtilityDistSQLParser.class).parse();
} catch (final ParseCancellationException ignored) {
throw new SQLParsingException(sql);
}
}
private SQLStatement getSQLStatement(final String sql, final ParseASTNode parseASTNode) {
if (parseASTNode.getRootNode() instanceof ErrorNode) {
throw new SQLParsingException(sql);
}
return (SQLStatement) (new UtilityDistSQLStatementVisitor()).visit(parseASTNode.getRootNode());
}
}
View on GitHub (pinned to e952770a21)
Solutions
- Verify the statement against utility DistSQL grammar (UtilityDistSQL.g4) for your version
- Ensure the statement category matches the engine (utility vs kernel vs featured)
- Fix quoting/escaping of embedded SQL inside PREVIEW-like statements
- Upgrade if the utility grammar in your version has a known gap for the statement
Example fix
// before
engine.parse("PREVIEW SELECT * FROM t WHERE"); // incomplete inner SQL
// after
engine.parse("PREVIEW SELECT * FROM t WHERE id = 1"); Defensive patterns
Strategy: try-catch
Try / catch
try { engine.parse(sql); } catch (SQLParsingException e) { throw new UserInputException("Invalid utility DistSQL: " + sql, e); } Prevention
- Validate PREVIEW inner SQL separately before wrapping it in DistSQL
- Quote embedded SQL correctly inside utility statements
- Test utility DistSQL scripts against the same proxy version in CI
When it happens
Trigger: Calling UtilityDistSQLStatementParserEngine.parse with a statement that does not match utility DistSQL grammar: invalid PREVIEW/SHOW-like syntax, wrong clause keywords, unbalanced tokens, or a statement of another DistSQL category sent to the utility engine.
Common situations: Preview workflows where users pass arbitrary SQL to PREVIEW with wrong wrapping; mistyped utility commands in ops scripts; grammar changes across ShardingSphere versions; using utility DistSQL reserved words as plain identifiers.
Related errors
AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14).
Data as JSON: /api/errors/93c94b6191f063d6.
Report an issue: GitHub.