vitessio/vitess · error
unsupported query %s
Error message
unsupported query %s
What it means
vtexplain's simulated tablet only handles a fixed set of statement kinds (select/insert/replace/update/delete and a few others) in HandleQuery. Any other statement type reaching the tablet hits the default branch and returns this error. It signals that vtexplain cannot produce a meaningful simulated result for that statement.
Source
Thrown at go/vt/vtexplain/vtexplain_vttablet.go:603
switch sqlparser.Preview(query) {
case sqlparser.StmtSelect:
var err error
result, err = t.handleSelect(query)
if err != nil {
return err
}
case sqlparser.StmtBegin, sqlparser.StmtCommit, sqlparser.StmtSet,
sqlparser.StmtSavepoint, sqlparser.StmtSRollback, sqlparser.StmtRelease:
result = &sqltypes.Result{}
case sqlparser.StmtShow:
result = &sqltypes.Result{Fields: sqltypes.MakeTestFields("", "")}
case sqlparser.StmtInsert, sqlparser.StmtReplace, sqlparser.StmtUpdate, sqlparser.StmtDelete:
result = &sqltypes.Result{
RowsAffected: 1,
}
default:
return fmt.Errorf("unsupported query %s", query)
}
return callback(result)
}
func (t *explainTablet) handleSelect(query string) (*sqltypes.Result, error) {
// Parse the select statement to figure out the table and columns
// that were referenced so that the synthetic response has the
// expected field names and types.
stmt, err := t.vte.env.Parser().Parse(query)
if err != nil {
return nil, err
}
var selStmt *sqlparser.Select
switch stmt := stmt.(type) {
case *sqlparser.Select:
selStmt = stmtView on GitHub (pinned to 01a25a7d17)
Solutions
- Remove unsupported statements (SET, SHOW, transaction control) from the workload being explained.
- Explain only DML and SELECT statements; keep them in a dedicated workload file.
- If new statement support is needed, extend the switch in vtexplain_vttablet.go HandleQuery.
Example fix
-- before workload SET @@session.sql_mode='STRICT'; SELECT * FROM user; -- after workload SELECT * FROM user;
Defensive patterns
Strategy: validation
Validate before calling
stmtType := sqlparser.Preview(query)
switch stmtType {
case sqlparser.StmtSelect, sqlparser.StmtInsert, sqlparser.StmtReplace, sqlparser.StmtUpdate, sqlparser.StmtDelete:
// ok to explain
default:
return fmt.Errorf("skipping unsupported %v in workload", stmtType)
} Try / catch
if err := vtexplain.Run(...); err != nil {
if strings.Contains(err.Error(), "unsupported query") {
// filter the statement out of the workload and retry
}
} Prevention
- Keep explain workloads to pure DML/SELECT statements.
- Strip SET/transaction statements when exporting workloads.
- Add a pre-filter in tooling that parses and checks each statement.
When it happens
Trigger: Running vtexplain on a workload containing a statement whose sqlparser.StmtType is not among the supported cases (e.g. SET, SHOW, BEGIN/COMMIT, admin statements) — anything other than select/dml handled in HandleQuery's switch.
Common situations: Feeding a vtctl/vtexplain workload file that contains SET statements or transaction control; explaining mixed maintenance scripts; tools sending session statements through the explain pipeline.
Related errors
- vtexplain: unsupported statement type +%v
- cannot find serving, non-primary tablet in keyspace=%s: %w
- GetSchema(%s): %w
- GetSrvVSchema(%s): %w
- %w: keyspace %s
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/65344eedde77a6b4.
Report an issue: GitHub.