diff --git a/go/vt/vtgate/planbuilder/insert.go b/go/vt/vtgate/planbuilder/insert.go index 2e3624bd884..62b2ba38586 100644 --- a/go/vt/vtgate/planbuilder/insert.go +++ b/go/vt/vtgate/planbuilder/insert.go @@ -153,14 +153,21 @@ func buildInsertShardedPlan(ins *sqlparser.Insert, table *vindexes.Table) (*engi for colIdx, col := range colVindex.Columns { routeValues[vIdx].Values[colIdx].Values = make([]sqltypes.PlanValue, len(rows)) colNum := findOrAddColumn(ins, col) - // swap bind variables - baseName := ":_" + col.CompliantName() for rowNum, row := range rows { innerpv, err := sqlparser.NewPlanValue(row[colNum]) if err != nil { return nil, fmt.Errorf("could not compute value for vindex or auto-inc column: %v", err) } routeValues[vIdx].Values[colIdx].Values[rowNum] = innerpv + } + } + } + for _, colVindex := range eins.Table.ColumnVindexes { + for _, col := range colVindex.Columns { + colNum := findOrAddColumn(ins, col) + // swap bind variables + baseName := ":_" + col.CompliantName() + for rowNum, row := range rows { row[colNum] = sqlparser.NewValArg([]byte(baseName + strconv.Itoa(rowNum))) } } diff --git a/go/vt/vtgate/planbuilder/testdata/dml_cases.txt b/go/vt/vtgate/planbuilder/testdata/dml_cases.txt index 8de0a71d9c2..a10a604d22a 100644 --- a/go/vt/vtgate/planbuilder/testdata/dml_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/dml_cases.txt @@ -1172,6 +1172,41 @@ } } +# insert for overlapped vindex columns +"insert overlap_vindex (kid, column_a, column_b) VALUES (1,2,3)" +{ + "Original": "insert overlap_vindex (kid, column_a, column_b) VALUES (1,2,3)", + "Instructions": { + "Opcode": "InsertSharded", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "insert into overlap_vindex(kid, column_a, column_b) values (:_kid0, :_column_a0, 3)", + "Values": [ + [ + [ + 1 + ] + ], + [ + [ + 2 + ], + [ + 1 + ] + ] + ], + "Table": "overlap_vindex", + "Prefix": "insert into overlap_vindex(kid, column_a, column_b) values ", + "Mid": [ + "(:_kid0, :_column_a0, 3)" + ] + } +} + + # insert multiple rows in a multi column vindex table "insert multicolvin (column_a, column_b, column_c, kid) VALUES (1,2,3,4), (5,6,7,8)" { diff --git a/go/vt/vtgate/planbuilder/testdata/schema_test.json b/go/vt/vtgate/planbuilder/testdata/schema_test.json index 01b19f5c2c2..8129f8e9a1e 100644 --- a/go/vt/vtgate/planbuilder/testdata/schema_test.json +++ b/go/vt/vtgate/planbuilder/testdata/schema_test.json @@ -26,6 +26,10 @@ "type": "lookup_test", "owner": "multicolvin" }, + "cola_kid_map": { + "type": "lookup_test", + "owner": "overlap_vindex" + }, "name_user_map": { "type": "multi", "owner": "user" @@ -165,6 +169,18 @@ } ] }, + "overlap_vindex": { + "column_vindexes": [ + { + "column": "kid", + "name": "kid_index" + }, + { + "columns": ["column_a", "kid"], + "name": "cola_kid_map" + } + ] + }, "music_extra": { "column_vindexes": [ {