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 = stmt

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Remove unsupported statements (SET, SHOW, transaction control) from the workload being explained.
  2. Explain only DML and SELECT statements; keep them in a dedicated workload file.
  3. 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

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


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/65344eedde77a6b4. Report an issue: GitHub.