func buildAutoincPlan(ins *sqlparser.Insert, autoinc *vindexes.Autoinc, route *engine.Route) error { route.Generate = &engine.Generate{ Opcode: engine.SelectUnsharded, Keyspace: autoinc.Sequence.Keyspace, Query: fmt.Sprintf("select next value from `%s`", autoinc.Sequence.Name), } // If it's also a colvindex, we have to add a redirect from route.Values. // Otherwise, we have to redirect from row[pos]. if autoinc.ColVindexNum >= 0 { route.Generate.Value = route.Values.([]interface{})[autoinc.ColVindexNum] route.Values.([]interface{})[autoinc.ColVindexNum] = ":" + engine.SeqVarName return nil } row, pos := findOrInsertPos(ins, autoinc.Col) val, err := valConvert(row[pos]) if err != nil { return fmt.Errorf("could not convert val: %s, pos: %d: %v", sqlparser.String(row[pos]), pos, err) } route.Generate.Value = val row[pos] = sqlparser.ValArg([]byte(":" + engine.SeqVarName)) return nil }