{"record":{"id":"45d4546cb0e9aac8","repo":"vitessio/vitess","slug":"unsupported-select-expression-v-45d454","errorCode":null,"errorMessage":"unsupported select expression: %v","messagePattern":"unsupported select expression: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/wrangler/materializer.go","lineNumber":1494,"sourceCode":"\t\tcase *sqlparser.AliasedExpr:\n\t\t\tmatch := selExpr.As\n\t\t\tif match.IsEmpty() {\n\t\t\t\tif colExpr, ok := selExpr.Expr.(*sqlparser.ColName); ok {\n\t\t\t\t\tmatch = colExpr.Name\n\t\t\t\t} else {\n\t\t\t\t\t// Cannot match against a complex expression.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tif match.Equal(col) {\n\t\t\t\tcolExpr, ok := selExpr.Expr.(*sqlparser.ColName)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"vindex column cannot be a complex expression: %v\", sqlparser.String(selExpr))\n\t\t\t\t}\n\t\t\t\treturn colExpr, nil\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported select expression: %v\", sqlparser.String(selExpr))\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"could not find vindex column %v\", sqlparser.String(col))\n}\n\nfunc (mz *materializer) createStreams(ctx context.Context, insertsMap map[string]string) error {\n\treturn mz.forAllTargets(func(target *topo.ShardInfo) error {\n\t\tinserts := insertsMap[target.ShardName()]\n\t\ttargetPrimary, err := mz.wr.ts.GetTablet(ctx, target.PrimaryAlias)\n\t\tif err != nil {\n\t\t\treturn vterrors.Wrapf(err, \"GetTablet(%v) failed\", target.PrimaryAlias)\n\t\t}\n\t\tbuf := &strings.Builder{}\n\t\tt := template.Must(template.New(\"\").Parse(inserts))\n\t\tinput := map[string]string{\n\t\t\t\"keyrange\": key.KeyRangeString(target.KeyRange),\n\t\t\t\"dbname\":   targetPrimary.DbName(),\n\t\t}","sourceCodeStart":1476,"sourceCodeEnd":1512,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/wrangler/materializer.go#L1476-L1512","documentation":"While matching a vindex column against the SELECT list in matchColInSelect, an AST node type was encountered that is not a SelectExpr the matcher supports (e.g. a star expression in an unexpected position or another node kind in the select expression union). The matcher treats this as unsupported and errors out.","triggerScenarios":"SourceExpression select list contains node kinds matchColInSelect's switch does not handle — typically reached via generateInserts when resolving the primary vindex columns for a sharded target table.","commonSituations":"Complex SourceExpression filters written programmatically; parser version differences producing AST shapes the matcher doesn't expect; exotic select items (e.g. `*.col` style constructs).","solutions":["Rewrite SourceExpression as a simple `select col1, col2, ... from table [where ...]` explicitly listing columns including the vindex columns","Avoid star/derived constructs in the select list when configuring materialization","Test the expression through the same workflow path before production runs"],"exampleFix":"// before\n{\"sourceExpression\":\"select s.* from s\"}\n// after\n{\"sourceExpression\":\"select id, name, email from s\"}","handlingStrategy":"validation","validationCode":"func validSimpleSelect(p *sqlparser.Parser, expr string) error {\n    stmt, err := p.Parse(expr)\n    if err != nil { return err }\n    sel, ok := stmt.(*sqlparser.Select)\n    if !ok { return fmt.Errorf(\"not a select\") }\n    for _, e := range sel.SelectExprs {\n        switch e.(type) {\n        case *sqlparser.AliasedExpr, *sqlparser.StarExpr:\n        default:\n            return fmt.Errorf(\"unsupported select expr\")\n        }\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep select lists to plain columns or explicit stars","Re-validate stored filters after parser upgrades","Avoid programmatically constructed exotic ASTs"],"tags":["vitess","wrangler","sqlparser","validation"],"backgroundTag":"invalid-source-expression","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}