vitess.io/vitess@v0.16.2/go/vt/vtgate/planbuilder/testdata/dml_cases.json (about)

     1  [
     2    {
     3      "comment": "update table not found",
     4      "query": "update nouser set val = 1",
     5      "plan": "table nouser not found"
     6    },
     7    {
     8      "comment": "delete table not found",
     9      "query": "delete from nouser",
    10      "plan": "table nouser not found"
    11    },
    12    {
    13      "comment": "explicit keyspace reference",
    14      "query": "update main.m1 set val = 1",
    15      "plan": {
    16        "QueryType": "UPDATE",
    17        "Original": "update main.m1 set val = 1",
    18        "Instructions": {
    19          "OperatorType": "Update",
    20          "Variant": "Unsharded",
    21          "Keyspace": {
    22            "Name": "main",
    23            "Sharded": false
    24          },
    25          "TargetTabletType": "PRIMARY",
    26          "MultiShardAutocommit": false,
    27          "Query": "update m1 set val = 1",
    28          "Table": "m1"
    29        },
    30        "TablesUsed": [
    31          "main.m1"
    32        ]
    33      }
    34    },
    35    {
    36      "comment": "update unsharded",
    37      "query": "update unsharded set val = 1",
    38      "plan": {
    39        "QueryType": "UPDATE",
    40        "Original": "update unsharded set val = 1",
    41        "Instructions": {
    42          "OperatorType": "Update",
    43          "Variant": "Unsharded",
    44          "Keyspace": {
    45            "Name": "main",
    46            "Sharded": false
    47          },
    48          "TargetTabletType": "PRIMARY",
    49          "MultiShardAutocommit": false,
    50          "Query": "update unsharded set val = 1",
    51          "Table": "unsharded"
    52        },
    53        "TablesUsed": [
    54          "main.unsharded"
    55        ]
    56      }
    57    },
    58    {
    59      "comment": "subqueries in unsharded update",
    60      "query": "update unsharded set col = (select col from unsharded limit 1)",
    61      "plan": {
    62        "QueryType": "UPDATE",
    63        "Original": "update unsharded set col = (select col from unsharded limit 1)",
    64        "Instructions": {
    65          "OperatorType": "Update",
    66          "Variant": "Unsharded",
    67          "Keyspace": {
    68            "Name": "main",
    69            "Sharded": false
    70          },
    71          "TargetTabletType": "PRIMARY",
    72          "MultiShardAutocommit": false,
    73          "Query": "update unsharded set col = (select col from unsharded limit 1)",
    74          "Table": "unsharded"
    75        },
    76        "TablesUsed": [
    77          "main.unsharded"
    78        ]
    79      }
    80    },
    81    {
    82      "comment": "unsharded union in subquery of unsharded update",
    83      "query": "update unsharded set col = (select id from unsharded union select id from unsharded)",
    84      "plan": {
    85        "QueryType": "UPDATE",
    86        "Original": "update unsharded set col = (select id from unsharded union select id from unsharded)",
    87        "Instructions": {
    88          "OperatorType": "Update",
    89          "Variant": "Unsharded",
    90          "Keyspace": {
    91            "Name": "main",
    92            "Sharded": false
    93          },
    94          "TargetTabletType": "PRIMARY",
    95          "MultiShardAutocommit": false,
    96          "Query": "update unsharded set col = (select id from unsharded union select id from unsharded)",
    97          "Table": "unsharded"
    98        },
    99        "TablesUsed": [
   100          "main.unsharded"
   101        ]
   102      }
   103    },
   104    {
   105      "comment": "unsharded join in subquery of unsharded update",
   106      "query": "update unsharded set col = (select id from unsharded a join unsharded b on a.id = b.id)",
   107      "plan": {
   108        "QueryType": "UPDATE",
   109        "Original": "update unsharded set col = (select id from unsharded a join unsharded b on a.id = b.id)",
   110        "Instructions": {
   111          "OperatorType": "Update",
   112          "Variant": "Unsharded",
   113          "Keyspace": {
   114            "Name": "main",
   115            "Sharded": false
   116          },
   117          "TargetTabletType": "PRIMARY",
   118          "MultiShardAutocommit": false,
   119          "Query": "update unsharded set col = (select id from unsharded as a join unsharded as b on a.id = b.id)",
   120          "Table": "unsharded"
   121        },
   122        "TablesUsed": [
   123          "main.unsharded"
   124        ]
   125      }
   126    },
   127    {
   128      "comment": "update with join subquery",
   129      "query": "update unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id set col1 = 'asdf' where keepers.id is null and foo.col is not null and foo.col < 1000",
   130      "plan": {
   131        "QueryType": "UPDATE",
   132        "Original": "update unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id set col1 = 'asdf' where keepers.id is null and foo.col is not null and foo.col < 1000",
   133        "Instructions": {
   134          "OperatorType": "Update",
   135          "Variant": "Unsharded",
   136          "Keyspace": {
   137            "Name": "main",
   138            "Sharded": false
   139          },
   140          "TargetTabletType": "PRIMARY",
   141          "MultiShardAutocommit": false,
   142          "Query": "update unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id set col1 = 'asdf' where keepers.id is null and foo.col is not null and foo.col < 1000",
   143          "Table": "unsharded"
   144        },
   145        "TablesUsed": [
   146          "main.unsharded"
   147        ]
   148      }
   149    },
   150    {
   151      "comment": "routing rules: updated of a routed table",
   152      "query": "update route1 set a=1 where id=1",
   153      "v3-plan": {
   154        "QueryType": "UPDATE",
   155        "Original": "update route1 set a=1 where id=1",
   156        "Instructions": {
   157          "OperatorType": "Update",
   158          "Variant": "Equal",
   159          "Keyspace": {
   160            "Name": "user",
   161            "Sharded": true
   162          },
   163          "TargetTabletType": "PRIMARY",
   164          "MultiShardAutocommit": false,
   165          "Query": "update `user` as route1 set a = 1 where id = 1",
   166          "Table": "user",
   167          "Values": [
   168            "INT64(1)"
   169          ],
   170          "Vindex": "user_index"
   171        },
   172        "TablesUsed": [
   173          "user.user"
   174        ]
   175      },
   176      "gen4-plan": {
   177        "QueryType": "UPDATE",
   178        "Original": "update route1 set a=1 where id=1",
   179        "Instructions": {
   180          "OperatorType": "Update",
   181          "Variant": "EqualUnique",
   182          "Keyspace": {
   183            "Name": "user",
   184            "Sharded": true
   185          },
   186          "TargetTabletType": "PRIMARY",
   187          "MultiShardAutocommit": false,
   188          "Query": "update `user` as route1 set a = 1 where id = 1",
   189          "Table": "user",
   190          "Values": [
   191            "INT64(1)"
   192          ],
   193          "Vindex": "user_index"
   194        },
   195        "TablesUsed": [
   196          "user.user"
   197        ]
   198      }
   199    },
   200    {
   201      "comment": "update: routing rules for subquery.",
   202      "query": "update unsharded_a set a=(select a from route2)",
   203      "v3-plan": {
   204        "QueryType": "UPDATE",
   205        "Original": "update unsharded_a set a=(select a from route2)",
   206        "Instructions": {
   207          "OperatorType": "Update",
   208          "Variant": "Unsharded",
   209          "Keyspace": {
   210            "Name": "main",
   211            "Sharded": false
   212          },
   213          "TargetTabletType": "PRIMARY",
   214          "MultiShardAutocommit": false,
   215          "Query": "update unsharded_a set a = (select a from unsharded as route2)",
   216          "Table": "unsharded, unsharded_a"
   217        },
   218        "TablesUsed": [
   219          "main.unsharded_a"
   220        ]
   221      },
   222      "gen4-plan": {
   223        "QueryType": "UPDATE",
   224        "Original": "update unsharded_a set a=(select a from route2)",
   225        "Instructions": {
   226          "OperatorType": "Update",
   227          "Variant": "Unsharded",
   228          "Keyspace": {
   229            "Name": "main",
   230            "Sharded": false
   231          },
   232          "TargetTabletType": "PRIMARY",
   233          "MultiShardAutocommit": false,
   234          "Query": "update unsharded_a set a = (select a from unsharded as route2)",
   235          "Table": "unsharded, unsharded_a"
   236        },
   237        "TablesUsed": [
   238          "main.unsharded",
   239          "main.unsharded_a"
   240        ]
   241      }
   242    },
   243    {
   244      "comment": "delete unsharded",
   245      "query": "delete from unsharded",
   246      "plan": {
   247        "QueryType": "DELETE",
   248        "Original": "delete from unsharded",
   249        "Instructions": {
   250          "OperatorType": "Delete",
   251          "Variant": "Unsharded",
   252          "Keyspace": {
   253            "Name": "main",
   254            "Sharded": false
   255          },
   256          "TargetTabletType": "PRIMARY",
   257          "MultiShardAutocommit": false,
   258          "Query": "delete from unsharded",
   259          "Table": "unsharded"
   260        },
   261        "TablesUsed": [
   262          "main.unsharded"
   263        ]
   264      }
   265    },
   266    {
   267      "comment": "delete from sequence",
   268      "query": "DELETE FROM seq",
   269      "plan": {
   270        "QueryType": "DELETE",
   271        "Original": "DELETE FROM seq",
   272        "Instructions": {
   273          "OperatorType": "Delete",
   274          "Variant": "Unsharded",
   275          "Keyspace": {
   276            "Name": "main",
   277            "Sharded": false
   278          },
   279          "TargetTabletType": "PRIMARY",
   280          "MultiShardAutocommit": false,
   281          "Query": "delete from seq",
   282          "Table": "seq"
   283        },
   284        "TablesUsed": [
   285          "main.seq"
   286        ]
   287      }
   288    },
   289    {
   290      "comment": "delete from reference table in unsharded keyspace",
   291      "query": "DELETE FROM unsharded_ref",
   292      "plan": {
   293        "QueryType": "DELETE",
   294        "Original": "DELETE FROM unsharded_ref",
   295        "Instructions": {
   296          "OperatorType": "Delete",
   297          "Variant": "Unsharded",
   298          "Keyspace": {
   299            "Name": "main",
   300            "Sharded": false
   301          },
   302          "TargetTabletType": "PRIMARY",
   303          "MultiShardAutocommit": false,
   304          "Query": "delete from unsharded_ref",
   305          "Table": "unsharded_ref"
   306        },
   307        "TablesUsed": [
   308          "main.unsharded_ref"
   309        ]
   310      }
   311    },
   312    {
   313      "comment": "update by primary keyspace id",
   314      "query": "update user set val = 1 where id = 1",
   315      "v3-plan": {
   316        "QueryType": "UPDATE",
   317        "Original": "update user set val = 1 where id = 1",
   318        "Instructions": {
   319          "OperatorType": "Update",
   320          "Variant": "Equal",
   321          "Keyspace": {
   322            "Name": "user",
   323            "Sharded": true
   324          },
   325          "TargetTabletType": "PRIMARY",
   326          "MultiShardAutocommit": false,
   327          "Query": "update `user` set val = 1 where id = 1",
   328          "Table": "user",
   329          "Values": [
   330            "INT64(1)"
   331          ],
   332          "Vindex": "user_index"
   333        },
   334        "TablesUsed": [
   335          "user.user"
   336        ]
   337      },
   338      "gen4-plan": {
   339        "QueryType": "UPDATE",
   340        "Original": "update user set val = 1 where id = 1",
   341        "Instructions": {
   342          "OperatorType": "Update",
   343          "Variant": "EqualUnique",
   344          "Keyspace": {
   345            "Name": "user",
   346            "Sharded": true
   347          },
   348          "TargetTabletType": "PRIMARY",
   349          "MultiShardAutocommit": false,
   350          "Query": "update `user` set val = 1 where id = 1",
   351          "Table": "user",
   352          "Values": [
   353            "INT64(1)"
   354          ],
   355          "Vindex": "user_index"
   356        },
   357        "TablesUsed": [
   358          "user.user"
   359        ]
   360      }
   361    },
   362    {
   363      "comment": "update by primary keyspace id with alias",
   364      "query": "update user as user_alias set val = 1 where user_alias.id = 1",
   365      "v3-plan": {
   366        "QueryType": "UPDATE",
   367        "Original": "update user as user_alias set val = 1 where user_alias.id = 1",
   368        "Instructions": {
   369          "OperatorType": "Update",
   370          "Variant": "Equal",
   371          "Keyspace": {
   372            "Name": "user",
   373            "Sharded": true
   374          },
   375          "TargetTabletType": "PRIMARY",
   376          "MultiShardAutocommit": false,
   377          "Query": "update `user` as user_alias set val = 1 where user_alias.id = 1",
   378          "Table": "user",
   379          "Values": [
   380            "INT64(1)"
   381          ],
   382          "Vindex": "user_index"
   383        },
   384        "TablesUsed": [
   385          "user.user"
   386        ]
   387      },
   388      "gen4-plan": {
   389        "QueryType": "UPDATE",
   390        "Original": "update user as user_alias set val = 1 where user_alias.id = 1",
   391        "Instructions": {
   392          "OperatorType": "Update",
   393          "Variant": "EqualUnique",
   394          "Keyspace": {
   395            "Name": "user",
   396            "Sharded": true
   397          },
   398          "TargetTabletType": "PRIMARY",
   399          "MultiShardAutocommit": false,
   400          "Query": "update `user` as user_alias set val = 1 where user_alias.id = 1",
   401          "Table": "user",
   402          "Values": [
   403            "INT64(1)"
   404          ],
   405          "Vindex": "user_index"
   406        },
   407        "TablesUsed": [
   408          "user.user"
   409        ]
   410      }
   411    },
   412    {
   413      "comment": "update by primary keyspace id with parenthesized expression",
   414      "query": "update user set val = 1 where (id = 1)",
   415      "v3-plan": {
   416        "QueryType": "UPDATE",
   417        "Original": "update user set val = 1 where (id = 1)",
   418        "Instructions": {
   419          "OperatorType": "Update",
   420          "Variant": "Equal",
   421          "Keyspace": {
   422            "Name": "user",
   423            "Sharded": true
   424          },
   425          "TargetTabletType": "PRIMARY",
   426          "MultiShardAutocommit": false,
   427          "Query": "update `user` set val = 1 where id = 1",
   428          "Table": "user",
   429          "Values": [
   430            "INT64(1)"
   431          ],
   432          "Vindex": "user_index"
   433        },
   434        "TablesUsed": [
   435          "user.user"
   436        ]
   437      },
   438      "gen4-plan": {
   439        "QueryType": "UPDATE",
   440        "Original": "update user set val = 1 where (id = 1)",
   441        "Instructions": {
   442          "OperatorType": "Update",
   443          "Variant": "EqualUnique",
   444          "Keyspace": {
   445            "Name": "user",
   446            "Sharded": true
   447          },
   448          "TargetTabletType": "PRIMARY",
   449          "MultiShardAutocommit": false,
   450          "Query": "update `user` set val = 1 where id = 1",
   451          "Table": "user",
   452          "Values": [
   453            "INT64(1)"
   454          ],
   455          "Vindex": "user_index"
   456        },
   457        "TablesUsed": [
   458          "user.user"
   459        ]
   460      }
   461    },
   462    {
   463      "comment": "update by primary keyspace id with multi-part where clause with parens",
   464      "query": "update user set val = 1 where (name = 'foo' and id = 1)",
   465      "v3-plan": {
   466        "QueryType": "UPDATE",
   467        "Original": "update user set val = 1 where (name = 'foo' and id = 1)",
   468        "Instructions": {
   469          "OperatorType": "Update",
   470          "Variant": "Equal",
   471          "Keyspace": {
   472            "Name": "user",
   473            "Sharded": true
   474          },
   475          "TargetTabletType": "PRIMARY",
   476          "MultiShardAutocommit": false,
   477          "Query": "update `user` set val = 1 where `name` = 'foo' and id = 1",
   478          "Table": "user",
   479          "Values": [
   480            "INT64(1)"
   481          ],
   482          "Vindex": "user_index"
   483        },
   484        "TablesUsed": [
   485          "user.user"
   486        ]
   487      },
   488      "gen4-plan": {
   489        "QueryType": "UPDATE",
   490        "Original": "update user set val = 1 where (name = 'foo' and id = 1)",
   491        "Instructions": {
   492          "OperatorType": "Update",
   493          "Variant": "EqualUnique",
   494          "Keyspace": {
   495            "Name": "user",
   496            "Sharded": true
   497          },
   498          "TargetTabletType": "PRIMARY",
   499          "MultiShardAutocommit": false,
   500          "Query": "update `user` set val = 1 where `name` = 'foo' and id = 1",
   501          "Table": "user",
   502          "Values": [
   503            "INT64(1)"
   504          ],
   505          "Vindex": "user_index"
   506        },
   507        "TablesUsed": [
   508          "user.user"
   509        ]
   510      }
   511    },
   512    {
   513      "comment": "update by primary keyspace id, changing one vindex column",
   514      "query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1",
   515      "v3-plan": {
   516        "QueryType": "UPDATE",
   517        "Original": "update user_metadata set email = 'juan@vitess.io' where user_id = 1",
   518        "Instructions": {
   519          "OperatorType": "Update",
   520          "Variant": "Equal",
   521          "Keyspace": {
   522            "Name": "user",
   523            "Sharded": true
   524          },
   525          "TargetTabletType": "PRIMARY",
   526          "ChangedVindexValues": [
   527            "email_user_map:3"
   528          ],
   529          "KsidLength": 1,
   530          "KsidVindex": "user_index",
   531          "MultiShardAutocommit": false,
   532          "OwnedVindexQuery": "select user_id, email, address, email = 'juan@vitess.io' from user_metadata where user_id = 1 for update",
   533          "Query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1",
   534          "Table": "user_metadata",
   535          "Values": [
   536            "INT64(1)"
   537          ],
   538          "Vindex": "user_index"
   539        },
   540        "TablesUsed": [
   541          "user.user_metadata"
   542        ]
   543      },
   544      "gen4-plan": {
   545        "QueryType": "UPDATE",
   546        "Original": "update user_metadata set email = 'juan@vitess.io' where user_id = 1",
   547        "Instructions": {
   548          "OperatorType": "Update",
   549          "Variant": "EqualUnique",
   550          "Keyspace": {
   551            "Name": "user",
   552            "Sharded": true
   553          },
   554          "TargetTabletType": "PRIMARY",
   555          "ChangedVindexValues": [
   556            "email_user_map:3"
   557          ],
   558          "KsidLength": 1,
   559          "KsidVindex": "user_index",
   560          "MultiShardAutocommit": false,
   561          "OwnedVindexQuery": "select user_id, email, address, email = 'juan@vitess.io' from user_metadata where user_id = 1 for update",
   562          "Query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1",
   563          "Table": "user_metadata",
   564          "Values": [
   565            "INT64(1)"
   566          ],
   567          "Vindex": "user_index"
   568        },
   569        "TablesUsed": [
   570          "user.user_metadata"
   571        ]
   572      }
   573    },
   574    {
   575      "comment": "update by primary keyspace id, changing same vindex twice",
   576      "query": "update user_metadata set email = 'a', email = 'b' where user_id = 1",
   577      "plan": "VT03015: column has duplicate set values: 'email'"
   578    },
   579    {
   580      "comment": "update by primary keyspace id, changing multiple vindex columns",
   581      "query": "update user_metadata set email = 'juan@vitess.io', address = '155 5th street' where user_id = 1",
   582      "v3-plan": {
   583        "QueryType": "UPDATE",
   584        "Original": "update user_metadata set email = 'juan@vitess.io', address = '155 5th street' where user_id = 1",
   585        "Instructions": {
   586          "OperatorType": "Update",
   587          "Variant": "Equal",
   588          "Keyspace": {
   589            "Name": "user",
   590            "Sharded": true
   591          },
   592          "TargetTabletType": "PRIMARY",
   593          "ChangedVindexValues": [
   594            "address_user_map:4",
   595            "email_user_map:3"
   596          ],
   597          "KsidLength": 1,
   598          "KsidVindex": "user_index",
   599          "MultiShardAutocommit": false,
   600          "OwnedVindexQuery": "select user_id, email, address, email = 'juan@vitess.io', address = '155 5th street' from user_metadata where user_id = 1 for update",
   601          "Query": "update user_metadata set email = 'juan@vitess.io', address = '155 5th street' where user_id = 1",
   602          "Table": "user_metadata",
   603          "Values": [
   604            "INT64(1)"
   605          ],
   606          "Vindex": "user_index"
   607        },
   608        "TablesUsed": [
   609          "user.user_metadata"
   610        ]
   611      },
   612      "gen4-plan": {
   613        "QueryType": "UPDATE",
   614        "Original": "update user_metadata set email = 'juan@vitess.io', address = '155 5th street' where user_id = 1",
   615        "Instructions": {
   616          "OperatorType": "Update",
   617          "Variant": "EqualUnique",
   618          "Keyspace": {
   619            "Name": "user",
   620            "Sharded": true
   621          },
   622          "TargetTabletType": "PRIMARY",
   623          "ChangedVindexValues": [
   624            "address_user_map:4",
   625            "email_user_map:3"
   626          ],
   627          "KsidLength": 1,
   628          "KsidVindex": "user_index",
   629          "MultiShardAutocommit": false,
   630          "OwnedVindexQuery": "select user_id, email, address, email = 'juan@vitess.io', address = '155 5th street' from user_metadata where user_id = 1 for update",
   631          "Query": "update user_metadata set email = 'juan@vitess.io', address = '155 5th street' where user_id = 1",
   632          "Table": "user_metadata",
   633          "Values": [
   634            "INT64(1)"
   635          ],
   636          "Vindex": "user_index"
   637        },
   638        "TablesUsed": [
   639          "user.user_metadata"
   640        ]
   641      }
   642    },
   643    {
   644      "comment": "update by primary keyspace id, changing one vindex column, using order by and limit",
   645      "query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1 order by user_id asc limit 10",
   646      "v3-plan": {
   647        "QueryType": "UPDATE",
   648        "Original": "update user_metadata set email = 'juan@vitess.io' where user_id = 1 order by user_id asc limit 10",
   649        "Instructions": {
   650          "OperatorType": "Update",
   651          "Variant": "Equal",
   652          "Keyspace": {
   653            "Name": "user",
   654            "Sharded": true
   655          },
   656          "TargetTabletType": "PRIMARY",
   657          "ChangedVindexValues": [
   658            "email_user_map:3"
   659          ],
   660          "KsidLength": 1,
   661          "KsidVindex": "user_index",
   662          "MultiShardAutocommit": false,
   663          "OwnedVindexQuery": "select user_id, email, address, email = 'juan@vitess.io' from user_metadata where user_id = 1 order by user_id asc limit 10 for update",
   664          "Query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1 order by user_id asc limit 10",
   665          "Table": "user_metadata",
   666          "Values": [
   667            "INT64(1)"
   668          ],
   669          "Vindex": "user_index"
   670        },
   671        "TablesUsed": [
   672          "user.user_metadata"
   673        ]
   674      },
   675      "gen4-plan": {
   676        "QueryType": "UPDATE",
   677        "Original": "update user_metadata set email = 'juan@vitess.io' where user_id = 1 order by user_id asc limit 10",
   678        "Instructions": {
   679          "OperatorType": "Update",
   680          "Variant": "EqualUnique",
   681          "Keyspace": {
   682            "Name": "user",
   683            "Sharded": true
   684          },
   685          "TargetTabletType": "PRIMARY",
   686          "ChangedVindexValues": [
   687            "email_user_map:3"
   688          ],
   689          "KsidLength": 1,
   690          "KsidVindex": "user_index",
   691          "MultiShardAutocommit": false,
   692          "OwnedVindexQuery": "select user_id, email, address, email = 'juan@vitess.io' from user_metadata where user_id = 1 order by user_id asc limit 10 for update",
   693          "Query": "update user_metadata set email = 'juan@vitess.io' where user_id = 1 order by user_id asc limit 10",
   694          "Table": "user_metadata",
   695          "Values": [
   696            "INT64(1)"
   697          ],
   698          "Vindex": "user_index"
   699        },
   700        "TablesUsed": [
   701          "user.user_metadata"
   702        ]
   703      }
   704    },
   705    {
   706      "comment": "update changes non owned vindex column",
   707      "query": "update music_extra set music_id = 1 where user_id = 1",
   708      "v3-plan": {
   709        "QueryType": "UPDATE",
   710        "Original": "update music_extra set music_id = 1 where user_id = 1",
   711        "Instructions": {
   712          "OperatorType": "Update",
   713          "Variant": "Equal",
   714          "Keyspace": {
   715            "Name": "user",
   716            "Sharded": true
   717          },
   718          "TargetTabletType": "PRIMARY",
   719          "ChangedVindexValues": [
   720            "music_user_map:1"
   721          ],
   722          "KsidLength": 1,
   723          "KsidVindex": "user_index",
   724          "MultiShardAutocommit": false,
   725          "OwnedVindexQuery": "select user_id, music_id = 1 from music_extra where user_id = 1 for update",
   726          "Query": "update music_extra set music_id = 1 where user_id = 1",
   727          "Table": "music_extra",
   728          "Values": [
   729            "INT64(1)"
   730          ],
   731          "Vindex": "user_index"
   732        },
   733        "TablesUsed": [
   734          "user.music_extra"
   735        ]
   736      },
   737      "gen4-plan": {
   738        "QueryType": "UPDATE",
   739        "Original": "update music_extra set music_id = 1 where user_id = 1",
   740        "Instructions": {
   741          "OperatorType": "Update",
   742          "Variant": "EqualUnique",
   743          "Keyspace": {
   744            "Name": "user",
   745            "Sharded": true
   746          },
   747          "TargetTabletType": "PRIMARY",
   748          "ChangedVindexValues": [
   749            "music_user_map:1"
   750          ],
   751          "KsidLength": 1,
   752          "KsidVindex": "user_index",
   753          "MultiShardAutocommit": false,
   754          "OwnedVindexQuery": "select user_id, music_id = 1 from music_extra where user_id = 1 for update",
   755          "Query": "update music_extra set music_id = 1 where user_id = 1",
   756          "Table": "music_extra",
   757          "Values": [
   758            "INT64(1)"
   759          ],
   760          "Vindex": "user_index"
   761        },
   762        "TablesUsed": [
   763          "user.music_extra"
   764        ]
   765      }
   766    },
   767    {
   768      "comment": "update by primary keyspace id, stray where clause",
   769      "query": "update user set val = 1 where id = id2 and id = 1",
   770      "v3-plan": {
   771        "QueryType": "UPDATE",
   772        "Original": "update user set val = 1 where id = id2 and id = 1",
   773        "Instructions": {
   774          "OperatorType": "Update",
   775          "Variant": "Equal",
   776          "Keyspace": {
   777            "Name": "user",
   778            "Sharded": true
   779          },
   780          "TargetTabletType": "PRIMARY",
   781          "MultiShardAutocommit": false,
   782          "Query": "update `user` set val = 1 where id = id2 and id = 1",
   783          "Table": "user",
   784          "Values": [
   785            "INT64(1)"
   786          ],
   787          "Vindex": "user_index"
   788        },
   789        "TablesUsed": [
   790          "user.user"
   791        ]
   792      },
   793      "gen4-plan": {
   794        "QueryType": "UPDATE",
   795        "Original": "update user set val = 1 where id = id2 and id = 1",
   796        "Instructions": {
   797          "OperatorType": "Update",
   798          "Variant": "EqualUnique",
   799          "Keyspace": {
   800            "Name": "user",
   801            "Sharded": true
   802          },
   803          "TargetTabletType": "PRIMARY",
   804          "MultiShardAutocommit": false,
   805          "Query": "update `user` set val = 1 where id = id2 and id = 1",
   806          "Table": "user",
   807          "Values": [
   808            "INT64(1)"
   809          ],
   810          "Vindex": "user_index"
   811        },
   812        "TablesUsed": [
   813          "user.user"
   814        ]
   815      }
   816    },
   817    {
   818      "comment": "update by primary keyspace id, stray where clause with conversion error",
   819      "query": "update user set val = 1 where id = 18446744073709551616 and id = 1",
   820      "v3-plan": {
   821        "QueryType": "UPDATE",
   822        "Original": "update user set val = 1 where id = 18446744073709551616 and id = 1",
   823        "Instructions": {
   824          "OperatorType": "Update",
   825          "Variant": "Equal",
   826          "Keyspace": {
   827            "Name": "user",
   828            "Sharded": true
   829          },
   830          "TargetTabletType": "PRIMARY",
   831          "MultiShardAutocommit": false,
   832          "Query": "update `user` set val = 1 where id = 18446744073709551616 and id = 1",
   833          "Table": "user",
   834          "Values": [
   835            "INT64(1)"
   836          ],
   837          "Vindex": "user_index"
   838        },
   839        "TablesUsed": [
   840          "user.user"
   841        ]
   842      },
   843      "gen4-plan": {
   844        "QueryType": "UPDATE",
   845        "Original": "update user set val = 1 where id = 18446744073709551616 and id = 1",
   846        "Instructions": {
   847          "OperatorType": "Update",
   848          "Variant": "EqualUnique",
   849          "Keyspace": {
   850            "Name": "user",
   851            "Sharded": true
   852          },
   853          "TargetTabletType": "PRIMARY",
   854          "MultiShardAutocommit": false,
   855          "Query": "update `user` set val = 1 where id = 18446744073709551616 and id = 1",
   856          "Table": "user",
   857          "Values": [
   858            "INT64(1)"
   859          ],
   860          "Vindex": "user_index"
   861        },
   862        "TablesUsed": [
   863          "user.user"
   864        ]
   865      }
   866    },
   867    {
   868      "comment": "delete from by primary keyspace id",
   869      "query": "delete from user where id = 1",
   870      "v3-plan": {
   871        "QueryType": "DELETE",
   872        "Original": "delete from user where id = 1",
   873        "Instructions": {
   874          "OperatorType": "Delete",
   875          "Variant": "Equal",
   876          "Keyspace": {
   877            "Name": "user",
   878            "Sharded": true
   879          },
   880          "TargetTabletType": "PRIMARY",
   881          "KsidLength": 1,
   882          "KsidVindex": "user_index",
   883          "MultiShardAutocommit": false,
   884          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id = 1 for update",
   885          "Query": "delete from `user` where id = 1",
   886          "Table": "user",
   887          "Values": [
   888            "INT64(1)"
   889          ],
   890          "Vindex": "user_index"
   891        },
   892        "TablesUsed": [
   893          "user.user"
   894        ]
   895      },
   896      "gen4-plan": {
   897        "QueryType": "DELETE",
   898        "Original": "delete from user where id = 1",
   899        "Instructions": {
   900          "OperatorType": "Delete",
   901          "Variant": "EqualUnique",
   902          "Keyspace": {
   903            "Name": "user",
   904            "Sharded": true
   905          },
   906          "TargetTabletType": "PRIMARY",
   907          "KsidLength": 1,
   908          "KsidVindex": "user_index",
   909          "MultiShardAutocommit": false,
   910          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id = 1 for update",
   911          "Query": "delete from `user` where id = 1",
   912          "Table": "user",
   913          "Values": [
   914            "INT64(1)"
   915          ],
   916          "Vindex": "user_index"
   917        },
   918        "TablesUsed": [
   919          "user.user"
   920        ]
   921      }
   922    },
   923    {
   924      "comment": "multi-table delete with comma join",
   925      "query": "delete a from unsharded_a a, unsharded_b b where a.id = b.id and b.val = 1",
   926      "plan": {
   927        "QueryType": "DELETE",
   928        "Original": "delete a from unsharded_a a, unsharded_b b where a.id = b.id and b.val = 1",
   929        "Instructions": {
   930          "OperatorType": "Delete",
   931          "Variant": "Unsharded",
   932          "Keyspace": {
   933            "Name": "main",
   934            "Sharded": false
   935          },
   936          "TargetTabletType": "PRIMARY",
   937          "MultiShardAutocommit": false,
   938          "Query": "delete a from unsharded_a as a, unsharded_b as b where a.id = b.id and b.val = 1",
   939          "Table": "unsharded_a, unsharded_b"
   940        },
   941        "TablesUsed": [
   942          "main.unsharded_a",
   943          "main.unsharded_b"
   944        ]
   945      }
   946    },
   947    {
   948      "comment": "multi-table delete with ansi join",
   949      "query": "delete a from unsharded_a a join unsharded_b b on a.id = b.id where b.val = 1",
   950      "plan": {
   951        "QueryType": "DELETE",
   952        "Original": "delete a from unsharded_a a join unsharded_b b on a.id = b.id where b.val = 1",
   953        "Instructions": {
   954          "OperatorType": "Delete",
   955          "Variant": "Unsharded",
   956          "Keyspace": {
   957            "Name": "main",
   958            "Sharded": false
   959          },
   960          "TargetTabletType": "PRIMARY",
   961          "MultiShardAutocommit": false,
   962          "Query": "delete a from unsharded_a as a join unsharded_b as b on a.id = b.id where b.val = 1",
   963          "Table": "unsharded_a, unsharded_b"
   964        },
   965        "TablesUsed": [
   966          "main.unsharded_a",
   967          "main.unsharded_b"
   968        ]
   969      }
   970    },
   971    {
   972      "comment": "delete with join from subquery",
   973      "query": "delete foo from unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
   974      "plan": {
   975        "QueryType": "DELETE",
   976        "Original": "delete foo from unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
   977        "Instructions": {
   978          "OperatorType": "Delete",
   979          "Variant": "Unsharded",
   980          "Keyspace": {
   981            "Name": "main",
   982            "Sharded": false
   983          },
   984          "TargetTabletType": "PRIMARY",
   985          "MultiShardAutocommit": false,
   986          "Query": "delete foo from unsharded as foo left join (select id from unsharded where col is not null order by col desc limit 10) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
   987          "Table": "unsharded"
   988        },
   989        "TablesUsed": [
   990          "main.unsharded"
   991        ]
   992      }
   993    },
   994    {
   995      "comment": "routing rules: deleted from a routed table",
   996      "query": "delete from route1 where id = 1",
   997      "v3-plan": {
   998        "QueryType": "DELETE",
   999        "Original": "delete from route1 where id = 1",
  1000        "Instructions": {
  1001          "OperatorType": "Delete",
  1002          "Variant": "Equal",
  1003          "Keyspace": {
  1004            "Name": "user",
  1005            "Sharded": true
  1006          },
  1007          "TargetTabletType": "PRIMARY",
  1008          "KsidLength": 1,
  1009          "KsidVindex": "user_index",
  1010          "MultiShardAutocommit": false,
  1011          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as route1 where id = 1 for update",
  1012          "Query": "delete from `user` as route1 where id = 1",
  1013          "Table": "user",
  1014          "Values": [
  1015            "INT64(1)"
  1016          ],
  1017          "Vindex": "user_index"
  1018        },
  1019        "TablesUsed": [
  1020          "user.user"
  1021        ]
  1022      },
  1023      "gen4-plan": {
  1024        "QueryType": "DELETE",
  1025        "Original": "delete from route1 where id = 1",
  1026        "Instructions": {
  1027          "OperatorType": "Delete",
  1028          "Variant": "EqualUnique",
  1029          "Keyspace": {
  1030            "Name": "user",
  1031            "Sharded": true
  1032          },
  1033          "TargetTabletType": "PRIMARY",
  1034          "KsidLength": 1,
  1035          "KsidVindex": "user_index",
  1036          "MultiShardAutocommit": false,
  1037          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as route1 where id = 1 for update",
  1038          "Query": "delete from `user` as route1 where id = 1",
  1039          "Table": "user",
  1040          "Values": [
  1041            "INT64(1)"
  1042          ],
  1043          "Vindex": "user_index"
  1044        },
  1045        "TablesUsed": [
  1046          "user.user"
  1047        ]
  1048      }
  1049    },
  1050    {
  1051      "comment": "delete: routing rules for subquery",
  1052      "query": "delete from  unsharded_a where a=(select a from route2)",
  1053      "v3-plan": {
  1054        "QueryType": "DELETE",
  1055        "Original": "delete from  unsharded_a where a=(select a from route2)",
  1056        "Instructions": {
  1057          "OperatorType": "Delete",
  1058          "Variant": "Unsharded",
  1059          "Keyspace": {
  1060            "Name": "main",
  1061            "Sharded": false
  1062          },
  1063          "TargetTabletType": "PRIMARY",
  1064          "MultiShardAutocommit": false,
  1065          "Query": "delete from unsharded_a where a = (select a from unsharded as route2)",
  1066          "Table": "unsharded, unsharded_a"
  1067        },
  1068        "TablesUsed": [
  1069          "main.unsharded_a"
  1070        ]
  1071      },
  1072      "gen4-plan": {
  1073        "QueryType": "DELETE",
  1074        "Original": "delete from  unsharded_a where a=(select a from route2)",
  1075        "Instructions": {
  1076          "OperatorType": "Delete",
  1077          "Variant": "Unsharded",
  1078          "Keyspace": {
  1079            "Name": "main",
  1080            "Sharded": false
  1081          },
  1082          "TargetTabletType": "PRIMARY",
  1083          "MultiShardAutocommit": false,
  1084          "Query": "delete from unsharded_a where a = (select a from unsharded as route2)",
  1085          "Table": "unsharded, unsharded_a"
  1086        },
  1087        "TablesUsed": [
  1088          "main.unsharded",
  1089          "main.unsharded_a"
  1090        ]
  1091      }
  1092    },
  1093    {
  1094      "comment": "update by lookup",
  1095      "query": "update music set val = 1 where id = 1",
  1096      "v3-plan": {
  1097        "QueryType": "UPDATE",
  1098        "Original": "update music set val = 1 where id = 1",
  1099        "Instructions": {
  1100          "OperatorType": "Update",
  1101          "Variant": "Equal",
  1102          "Keyspace": {
  1103            "Name": "user",
  1104            "Sharded": true
  1105          },
  1106          "TargetTabletType": "PRIMARY",
  1107          "MultiShardAutocommit": false,
  1108          "Query": "update music set val = 1 where id = 1",
  1109          "Table": "music",
  1110          "Values": [
  1111            "INT64(1)"
  1112          ],
  1113          "Vindex": "music_user_map"
  1114        },
  1115        "TablesUsed": [
  1116          "user.music"
  1117        ]
  1118      },
  1119      "gen4-plan": {
  1120        "QueryType": "UPDATE",
  1121        "Original": "update music set val = 1 where id = 1",
  1122        "Instructions": {
  1123          "OperatorType": "Update",
  1124          "Variant": "EqualUnique",
  1125          "Keyspace": {
  1126            "Name": "user",
  1127            "Sharded": true
  1128          },
  1129          "TargetTabletType": "PRIMARY",
  1130          "MultiShardAutocommit": false,
  1131          "Query": "update music set val = 1 where id = 1",
  1132          "Table": "music",
  1133          "Values": [
  1134            "INT64(1)"
  1135          ],
  1136          "Vindex": "music_user_map"
  1137        },
  1138        "TablesUsed": [
  1139          "user.music"
  1140        ]
  1141      }
  1142    },
  1143    {
  1144      "comment": "update multi-table ansi join",
  1145      "query": "update unsharded_a a join unsharded_b b on a.id = b.id set a.val = 'foo' where b.val = 1",
  1146      "plan": {
  1147        "QueryType": "UPDATE",
  1148        "Original": "update unsharded_a a join unsharded_b b on a.id = b.id set a.val = 'foo' where b.val = 1",
  1149        "Instructions": {
  1150          "OperatorType": "Update",
  1151          "Variant": "Unsharded",
  1152          "Keyspace": {
  1153            "Name": "main",
  1154            "Sharded": false
  1155          },
  1156          "TargetTabletType": "PRIMARY",
  1157          "MultiShardAutocommit": false,
  1158          "Query": "update unsharded_a as a join unsharded_b as b on a.id = b.id set a.val = 'foo' where b.val = 1",
  1159          "Table": "unsharded_a, unsharded_b"
  1160        },
  1161        "TablesUsed": [
  1162          "main.unsharded_a",
  1163          "main.unsharded_b"
  1164        ]
  1165      }
  1166    },
  1167    {
  1168      "comment": "update multi-table comma join",
  1169      "query": "update unsharded_a a, unsharded_b b set a.val = 'foo' where a.id = b.id and b.val = 1",
  1170      "plan": {
  1171        "QueryType": "UPDATE",
  1172        "Original": "update unsharded_a a, unsharded_b b set a.val = 'foo' where a.id = b.id and b.val = 1",
  1173        "Instructions": {
  1174          "OperatorType": "Update",
  1175          "Variant": "Unsharded",
  1176          "Keyspace": {
  1177            "Name": "main",
  1178            "Sharded": false
  1179          },
  1180          "TargetTabletType": "PRIMARY",
  1181          "MultiShardAutocommit": false,
  1182          "Query": "update unsharded_a as a, unsharded_b as b set a.val = 'foo' where a.id = b.id and b.val = 1",
  1183          "Table": "unsharded_a, unsharded_b"
  1184        },
  1185        "TablesUsed": [
  1186          "main.unsharded_a",
  1187          "main.unsharded_b"
  1188        ]
  1189      }
  1190    },
  1191    {
  1192      "comment": "delete from by lookup",
  1193      "query": "delete from music where id = 1",
  1194      "v3-plan": {
  1195        "QueryType": "DELETE",
  1196        "Original": "delete from music where id = 1",
  1197        "Instructions": {
  1198          "OperatorType": "Delete",
  1199          "Variant": "Equal",
  1200          "Keyspace": {
  1201            "Name": "user",
  1202            "Sharded": true
  1203          },
  1204          "TargetTabletType": "PRIMARY",
  1205          "KsidLength": 1,
  1206          "KsidVindex": "user_index",
  1207          "MultiShardAutocommit": false,
  1208          "OwnedVindexQuery": "select user_id, id from music where id = 1 for update",
  1209          "Query": "delete from music where id = 1",
  1210          "Table": "music",
  1211          "Values": [
  1212            "INT64(1)"
  1213          ],
  1214          "Vindex": "music_user_map"
  1215        },
  1216        "TablesUsed": [
  1217          "user.music"
  1218        ]
  1219      },
  1220      "gen4-plan": {
  1221        "QueryType": "DELETE",
  1222        "Original": "delete from music where id = 1",
  1223        "Instructions": {
  1224          "OperatorType": "Delete",
  1225          "Variant": "EqualUnique",
  1226          "Keyspace": {
  1227            "Name": "user",
  1228            "Sharded": true
  1229          },
  1230          "TargetTabletType": "PRIMARY",
  1231          "KsidLength": 1,
  1232          "KsidVindex": "user_index",
  1233          "MultiShardAutocommit": false,
  1234          "OwnedVindexQuery": "select user_id, id from music where id = 1 for update",
  1235          "Query": "delete from music where id = 1",
  1236          "Table": "music",
  1237          "Values": [
  1238            "INT64(1)"
  1239          ],
  1240          "Vindex": "music_user_map"
  1241        },
  1242        "TablesUsed": [
  1243          "user.music"
  1244        ]
  1245      }
  1246    },
  1247    {
  1248      "comment": "delete from, no owned vindexes",
  1249      "query": "delete from music_extra where user_id = 1",
  1250      "v3-plan": {
  1251        "QueryType": "DELETE",
  1252        "Original": "delete from music_extra where user_id = 1",
  1253        "Instructions": {
  1254          "OperatorType": "Delete",
  1255          "Variant": "Equal",
  1256          "Keyspace": {
  1257            "Name": "user",
  1258            "Sharded": true
  1259          },
  1260          "TargetTabletType": "PRIMARY",
  1261          "MultiShardAutocommit": false,
  1262          "Query": "delete from music_extra where user_id = 1",
  1263          "Table": "music_extra",
  1264          "Values": [
  1265            "INT64(1)"
  1266          ],
  1267          "Vindex": "user_index"
  1268        },
  1269        "TablesUsed": [
  1270          "user.music_extra"
  1271        ]
  1272      },
  1273      "gen4-plan": {
  1274        "QueryType": "DELETE",
  1275        "Original": "delete from music_extra where user_id = 1",
  1276        "Instructions": {
  1277          "OperatorType": "Delete",
  1278          "Variant": "EqualUnique",
  1279          "Keyspace": {
  1280            "Name": "user",
  1281            "Sharded": true
  1282          },
  1283          "TargetTabletType": "PRIMARY",
  1284          "MultiShardAutocommit": false,
  1285          "Query": "delete from music_extra where user_id = 1",
  1286          "Table": "music_extra",
  1287          "Values": [
  1288            "INT64(1)"
  1289          ],
  1290          "Vindex": "user_index"
  1291        },
  1292        "TablesUsed": [
  1293          "user.music_extra"
  1294        ]
  1295      }
  1296    },
  1297    {
  1298      "comment": "simple insert, no values",
  1299      "query": "insert into unsharded values()",
  1300      "plan": {
  1301        "QueryType": "INSERT",
  1302        "Original": "insert into unsharded values()",
  1303        "Instructions": {
  1304          "OperatorType": "Insert",
  1305          "Variant": "Unsharded",
  1306          "Keyspace": {
  1307            "Name": "main",
  1308            "Sharded": false
  1309          },
  1310          "TargetTabletType": "PRIMARY",
  1311          "MultiShardAutocommit": false,
  1312          "Query": "insert into unsharded values ()",
  1313          "TableName": "unsharded"
  1314        },
  1315        "TablesUsed": [
  1316          "main.unsharded"
  1317        ]
  1318      }
  1319    },
  1320    {
  1321      "comment": "simple insert unsharded",
  1322      "query": "insert into unsharded values(1, 2)",
  1323      "plan": {
  1324        "QueryType": "INSERT",
  1325        "Original": "insert into unsharded values(1, 2)",
  1326        "Instructions": {
  1327          "OperatorType": "Insert",
  1328          "Variant": "Unsharded",
  1329          "Keyspace": {
  1330            "Name": "main",
  1331            "Sharded": false
  1332          },
  1333          "TargetTabletType": "PRIMARY",
  1334          "MultiShardAutocommit": false,
  1335          "Query": "insert into unsharded values (1, 2)",
  1336          "TableName": "unsharded"
  1337        },
  1338        "TablesUsed": [
  1339          "main.unsharded"
  1340        ]
  1341      }
  1342    },
  1343    {
  1344      "comment": "simple upsert unsharded",
  1345      "query": "insert into unsharded values(1, 2) on duplicate key update x = 3",
  1346      "plan": {
  1347        "QueryType": "INSERT",
  1348        "Original": "insert into unsharded values(1, 2) on duplicate key update x = 3",
  1349        "Instructions": {
  1350          "OperatorType": "Insert",
  1351          "Variant": "Unsharded",
  1352          "Keyspace": {
  1353            "Name": "main",
  1354            "Sharded": false
  1355          },
  1356          "TargetTabletType": "PRIMARY",
  1357          "MultiShardAutocommit": false,
  1358          "Query": "insert into unsharded values (1, 2) on duplicate key update x = 3",
  1359          "TableName": "unsharded"
  1360        },
  1361        "TablesUsed": [
  1362          "main.unsharded"
  1363        ]
  1364      }
  1365    },
  1366    {
  1367      "comment": "unsharded insert, no col list with auto-inc and authoritative column list",
  1368      "query": "insert into unsharded_authoritative values(1,1)",
  1369      "plan": {
  1370        "QueryType": "INSERT",
  1371        "Original": "insert into unsharded_authoritative values(1,1)",
  1372        "Instructions": {
  1373          "OperatorType": "Insert",
  1374          "Variant": "Unsharded",
  1375          "Keyspace": {
  1376            "Name": "main",
  1377            "Sharded": false
  1378          },
  1379          "TargetTabletType": "PRIMARY",
  1380          "MultiShardAutocommit": false,
  1381          "Query": "insert into unsharded_authoritative(col1, col2) values (:__seq0, 1)",
  1382          "TableName": "unsharded_authoritative"
  1383        },
  1384        "TablesUsed": [
  1385          "main.unsharded_authoritative"
  1386        ]
  1387      }
  1388    },
  1389    {
  1390      "comment": "sharded upsert with sharding key set to vindex column",
  1391      "query": "insert into music(user_id, id) values(1, 2) on duplicate key update user_id = values(user_id)",
  1392      "plan": {
  1393        "QueryType": "INSERT",
  1394        "Original": "insert into music(user_id, id) values(1, 2) on duplicate key update user_id = values(user_id)",
  1395        "Instructions": {
  1396          "OperatorType": "Insert",
  1397          "Variant": "Sharded",
  1398          "Keyspace": {
  1399            "Name": "user",
  1400            "Sharded": true
  1401          },
  1402          "TargetTabletType": "PRIMARY",
  1403          "InsertIgnore": true,
  1404          "MultiShardAutocommit": false,
  1405          "Query": "insert into music(user_id, id) values (:_user_id_0, :_id_0) on duplicate key update user_id = values(user_id)",
  1406          "TableName": "music",
  1407          "VindexValues": {
  1408            "music_user_map": "INT64(2)",
  1409            "user_index": "INT64(1)"
  1410          }
  1411        },
  1412        "TablesUsed": [
  1413          "user.music"
  1414        ]
  1415      }
  1416    },
  1417    {
  1418      "comment": "sharded bulk upsert with sharding key set to vindex column",
  1419      "query": "insert into music(user_id, id) values (1, 2), (3,4) on duplicate key update user_id = values(user_id)",
  1420      "plan": {
  1421        "QueryType": "INSERT",
  1422        "Original": "insert into music(user_id, id) values (1, 2), (3,4) on duplicate key update user_id = values(user_id)",
  1423        "Instructions": {
  1424          "OperatorType": "Insert",
  1425          "Variant": "Sharded",
  1426          "Keyspace": {
  1427            "Name": "user",
  1428            "Sharded": true
  1429          },
  1430          "TargetTabletType": "PRIMARY",
  1431          "InsertIgnore": true,
  1432          "MultiShardAutocommit": false,
  1433          "Query": "insert into music(user_id, id) values (:_user_id_0, :_id_0), (:_user_id_1, :_id_1) on duplicate key update user_id = values(user_id)",
  1434          "TableName": "music",
  1435          "VindexValues": {
  1436            "music_user_map": "INT64(2), INT64(4)",
  1437            "user_index": "INT64(1), INT64(3)"
  1438          }
  1439        },
  1440        "TablesUsed": [
  1441          "user.music"
  1442        ]
  1443      }
  1444    },
  1445    {
  1446      "comment": "insert unsharded with select",
  1447      "query": "insert into unsharded select id from unsharded_auto",
  1448      "v3-plan": {
  1449        "QueryType": "INSERT",
  1450        "Original": "insert into unsharded select id from unsharded_auto",
  1451        "Instructions": {
  1452          "OperatorType": "Insert",
  1453          "Variant": "Unsharded",
  1454          "Keyspace": {
  1455            "Name": "main",
  1456            "Sharded": false
  1457          },
  1458          "TargetTabletType": "PRIMARY",
  1459          "MultiShardAutocommit": false,
  1460          "Query": "insert into unsharded select id from unsharded_auto for update",
  1461          "TableName": "unsharded"
  1462        },
  1463        "TablesUsed": [
  1464          "main.unsharded"
  1465        ]
  1466      },
  1467      "gen4-plan": {
  1468        "QueryType": "INSERT",
  1469        "Original": "insert into unsharded select id from unsharded_auto",
  1470        "Instructions": {
  1471          "OperatorType": "Insert",
  1472          "Variant": "Unsharded",
  1473          "Keyspace": {
  1474            "Name": "main",
  1475            "Sharded": false
  1476          },
  1477          "TargetTabletType": "PRIMARY",
  1478          "MultiShardAutocommit": false,
  1479          "Query": "insert into unsharded select id from unsharded_auto for update",
  1480          "TableName": "unsharded"
  1481        },
  1482        "TablesUsed": [
  1483          "main.unsharded",
  1484          "main.unsharded_auto"
  1485        ]
  1486      }
  1487    },
  1488    {
  1489      "comment": "insert unsharded with select with join",
  1490      "query": "insert into unsharded select id from unsharded join unsharded_auto",
  1491      "v3-plan": {
  1492        "QueryType": "INSERT",
  1493        "Original": "insert into unsharded select id from unsharded join unsharded_auto",
  1494        "Instructions": {
  1495          "OperatorType": "Insert",
  1496          "Variant": "Unsharded",
  1497          "Keyspace": {
  1498            "Name": "main",
  1499            "Sharded": false
  1500          },
  1501          "TargetTabletType": "PRIMARY",
  1502          "MultiShardAutocommit": false,
  1503          "Query": "insert into unsharded select id from unsharded join unsharded_auto for update",
  1504          "TableName": "unsharded"
  1505        },
  1506        "TablesUsed": [
  1507          "main.unsharded"
  1508        ]
  1509      },
  1510      "gen4-plan": {
  1511        "QueryType": "INSERT",
  1512        "Original": "insert into unsharded select id from unsharded join unsharded_auto",
  1513        "Instructions": {
  1514          "OperatorType": "Insert",
  1515          "Variant": "Unsharded",
  1516          "Keyspace": {
  1517            "Name": "main",
  1518            "Sharded": false
  1519          },
  1520          "TargetTabletType": "PRIMARY",
  1521          "MultiShardAutocommit": false,
  1522          "Query": "insert into unsharded select id from unsharded join unsharded_auto for update",
  1523          "TableName": "unsharded"
  1524        },
  1525        "TablesUsed": [
  1526          "main.unsharded",
  1527          "main.unsharded_auto"
  1528        ]
  1529      }
  1530    },
  1531    {
  1532      "comment": "insert unsharded, invalid value for auto-inc",
  1533      "query": "insert into unsharded_auto(id, val) values(18446744073709551616, 'aa')",
  1534      "plan": {
  1535        "QueryType": "INSERT",
  1536        "Original": "insert into unsharded_auto(id, val) values(18446744073709551616, 'aa')",
  1537        "Instructions": {
  1538          "OperatorType": "Insert",
  1539          "Variant": "Unsharded",
  1540          "Keyspace": {
  1541            "Name": "main",
  1542            "Sharded": false
  1543          },
  1544          "TargetTabletType": "PRIMARY",
  1545          "MultiShardAutocommit": false,
  1546          "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa')",
  1547          "TableName": "unsharded_auto"
  1548        },
  1549        "TablesUsed": [
  1550          "main.unsharded_auto"
  1551        ]
  1552      }
  1553    },
  1554    {
  1555      "comment": "insert unsharded, column present",
  1556      "query": "insert into unsharded_auto(id, val) values(1, 'aa')",
  1557      "plan": {
  1558        "QueryType": "INSERT",
  1559        "Original": "insert into unsharded_auto(id, val) values(1, 'aa')",
  1560        "Instructions": {
  1561          "OperatorType": "Insert",
  1562          "Variant": "Unsharded",
  1563          "Keyspace": {
  1564            "Name": "main",
  1565            "Sharded": false
  1566          },
  1567          "TargetTabletType": "PRIMARY",
  1568          "MultiShardAutocommit": false,
  1569          "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa')",
  1570          "TableName": "unsharded_auto"
  1571        },
  1572        "TablesUsed": [
  1573          "main.unsharded_auto"
  1574        ]
  1575      }
  1576    },
  1577    {
  1578      "comment": "insert unsharded, column absent",
  1579      "query": "insert into unsharded_auto(val) values('aa')",
  1580      "plan": {
  1581        "QueryType": "INSERT",
  1582        "Original": "insert into unsharded_auto(val) values('aa')",
  1583        "Instructions": {
  1584          "OperatorType": "Insert",
  1585          "Variant": "Unsharded",
  1586          "Keyspace": {
  1587            "Name": "main",
  1588            "Sharded": false
  1589          },
  1590          "TargetTabletType": "PRIMARY",
  1591          "MultiShardAutocommit": false,
  1592          "Query": "insert into unsharded_auto(val, id) values ('aa', :__seq0)",
  1593          "TableName": "unsharded_auto"
  1594        },
  1595        "TablesUsed": [
  1596          "main.unsharded_auto"
  1597        ]
  1598      }
  1599    },
  1600    {
  1601      "comment": "insert unsharded, column absent",
  1602      "query": "insert into unsharded_auto(val) values(false)",
  1603      "plan": {
  1604        "QueryType": "INSERT",
  1605        "Original": "insert into unsharded_auto(val) values(false)",
  1606        "Instructions": {
  1607          "OperatorType": "Insert",
  1608          "Variant": "Unsharded",
  1609          "Keyspace": {
  1610            "Name": "main",
  1611            "Sharded": false
  1612          },
  1613          "TargetTabletType": "PRIMARY",
  1614          "MultiShardAutocommit": false,
  1615          "Query": "insert into unsharded_auto(val, id) values (false, :__seq0)",
  1616          "TableName": "unsharded_auto"
  1617        },
  1618        "TablesUsed": [
  1619          "main.unsharded_auto"
  1620        ]
  1621      }
  1622    },
  1623    {
  1624      "comment": "insert unsharded, multi-val",
  1625      "query": "insert into unsharded_auto(id, val) values(1, 'aa'), (null, 'bb')",
  1626      "plan": {
  1627        "QueryType": "INSERT",
  1628        "Original": "insert into unsharded_auto(id, val) values(1, 'aa'), (null, 'bb')",
  1629        "Instructions": {
  1630          "OperatorType": "Insert",
  1631          "Variant": "Unsharded",
  1632          "Keyspace": {
  1633            "Name": "main",
  1634            "Sharded": false
  1635          },
  1636          "TargetTabletType": "PRIMARY",
  1637          "MultiShardAutocommit": false,
  1638          "Query": "insert into unsharded_auto(id, val) values (:__seq0, 'aa'), (:__seq1, 'bb')",
  1639          "TableName": "unsharded_auto"
  1640        },
  1641        "TablesUsed": [
  1642          "main.unsharded_auto"
  1643        ]
  1644      }
  1645    },
  1646    {
  1647      "comment": "unsharded insert subquery in insert value",
  1648      "query": "insert into unsharded values((select 1 from dual), 1)",
  1649      "plan": {
  1650        "QueryType": "INSERT",
  1651        "Original": "insert into unsharded values((select 1 from dual), 1)",
  1652        "Instructions": {
  1653          "OperatorType": "Insert",
  1654          "Variant": "Unsharded",
  1655          "Keyspace": {
  1656            "Name": "main",
  1657            "Sharded": false
  1658          },
  1659          "TargetTabletType": "PRIMARY",
  1660          "MultiShardAutocommit": false,
  1661          "Query": "insert into unsharded values (1, 1)",
  1662          "TableName": "unsharded"
  1663        },
  1664        "TablesUsed": [
  1665          "main.unsharded"
  1666        ]
  1667      }
  1668    },
  1669    {
  1670      "comment": "sharded insert subquery in insert value",
  1671      "query": "insert into user(id, val) values((select 1), 1)",
  1672      "plan": {
  1673        "QueryType": "INSERT",
  1674        "Original": "insert into user(id, val) values((select 1), 1)",
  1675        "Instructions": {
  1676          "OperatorType": "Insert",
  1677          "Variant": "Sharded",
  1678          "Keyspace": {
  1679            "Name": "user",
  1680            "Sharded": true
  1681          },
  1682          "TargetTabletType": "PRIMARY",
  1683          "MultiShardAutocommit": false,
  1684          "Query": "insert into `user`(id, val, `Name`, Costly) values (:_Id_0, 1, :_Name_0, :_Costly_0)",
  1685          "TableName": "user",
  1686          "VindexValues": {
  1687            "costly_map": "NULL",
  1688            "name_user_map": "NULL",
  1689            "user_index": ":__seq0"
  1690          }
  1691        },
  1692        "TablesUsed": [
  1693          "user.user"
  1694        ]
  1695      }
  1696    },
  1697    {
  1698      "comment": "insert into a routed table",
  1699      "query": "insert into route1(id) values (1)",
  1700      "plan": {
  1701        "QueryType": "INSERT",
  1702        "Original": "insert into route1(id) values (1)",
  1703        "Instructions": {
  1704          "OperatorType": "Insert",
  1705          "Variant": "Sharded",
  1706          "Keyspace": {
  1707            "Name": "user",
  1708            "Sharded": true
  1709          },
  1710          "TargetTabletType": "PRIMARY",
  1711          "MultiShardAutocommit": false,
  1712          "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)",
  1713          "TableName": "user",
  1714          "VindexValues": {
  1715            "costly_map": "NULL",
  1716            "name_user_map": "NULL",
  1717            "user_index": ":__seq0"
  1718          }
  1719        },
  1720        "TablesUsed": [
  1721          "user.user"
  1722        ]
  1723      }
  1724    },
  1725    {
  1726      "comment": "insert with mimatched column list",
  1727      "query": "insert into user(id) values (1, 2)",
  1728      "plan": "VT13001: [BUG] column list does not match values"
  1729    },
  1730    {
  1731      "comment": "insert no column list for sharded authoritative table",
  1732      "query": "insert into authoritative values(1, 2, 3)",
  1733      "plan": {
  1734        "QueryType": "INSERT",
  1735        "Original": "insert into authoritative values(1, 2, 3)",
  1736        "Instructions": {
  1737          "OperatorType": "Insert",
  1738          "Variant": "Sharded",
  1739          "Keyspace": {
  1740            "Name": "user",
  1741            "Sharded": true
  1742          },
  1743          "TargetTabletType": "PRIMARY",
  1744          "MultiShardAutocommit": false,
  1745          "Query": "insert into authoritative(user_id, col1, col2) values (:_user_id_0, 2, 3)",
  1746          "TableName": "authoritative",
  1747          "VindexValues": {
  1748            "user_index": "INT64(1)"
  1749          }
  1750        },
  1751        "TablesUsed": [
  1752          "user.authoritative"
  1753        ]
  1754      }
  1755    },
  1756    {
  1757      "comment": "insert sharded, no values",
  1758      "query": "insert into user values()",
  1759      "plan": {
  1760        "QueryType": "INSERT",
  1761        "Original": "insert into user values()",
  1762        "Instructions": {
  1763          "OperatorType": "Insert",
  1764          "Variant": "Sharded",
  1765          "Keyspace": {
  1766            "Name": "user",
  1767            "Sharded": true
  1768          },
  1769          "TargetTabletType": "PRIMARY",
  1770          "MultiShardAutocommit": false,
  1771          "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)",
  1772          "TableName": "user",
  1773          "VindexValues": {
  1774            "costly_map": "NULL",
  1775            "name_user_map": "NULL",
  1776            "user_index": ":__seq0"
  1777          }
  1778        },
  1779        "TablesUsed": [
  1780          "user.user"
  1781        ]
  1782      }
  1783    },
  1784    {
  1785      "comment": "insert with one vindex",
  1786      "query": "insert into user(id) values (1)",
  1787      "plan": {
  1788        "QueryType": "INSERT",
  1789        "Original": "insert into user(id) values (1)",
  1790        "Instructions": {
  1791          "OperatorType": "Insert",
  1792          "Variant": "Sharded",
  1793          "Keyspace": {
  1794            "Name": "user",
  1795            "Sharded": true
  1796          },
  1797          "TargetTabletType": "PRIMARY",
  1798          "MultiShardAutocommit": false,
  1799          "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)",
  1800          "TableName": "user",
  1801          "VindexValues": {
  1802            "costly_map": "NULL",
  1803            "name_user_map": "NULL",
  1804            "user_index": ":__seq0"
  1805          }
  1806        },
  1807        "TablesUsed": [
  1808          "user.user"
  1809        ]
  1810      }
  1811    },
  1812    {
  1813      "comment": "insert ignore sharded",
  1814      "query": "insert ignore into user(id) values (1)",
  1815      "plan": {
  1816        "QueryType": "INSERT",
  1817        "Original": "insert ignore into user(id) values (1)",
  1818        "Instructions": {
  1819          "OperatorType": "Insert",
  1820          "Variant": "Sharded",
  1821          "Keyspace": {
  1822            "Name": "user",
  1823            "Sharded": true
  1824          },
  1825          "TargetTabletType": "PRIMARY",
  1826          "InsertIgnore": true,
  1827          "MultiShardAutocommit": false,
  1828          "Query": "insert ignore into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)",
  1829          "TableName": "user",
  1830          "VindexValues": {
  1831            "costly_map": "NULL",
  1832            "name_user_map": "NULL",
  1833            "user_index": ":__seq0"
  1834          }
  1835        },
  1836        "TablesUsed": [
  1837          "user.user"
  1838        ]
  1839      }
  1840    },
  1841    {
  1842      "comment": "insert on duplicate key",
  1843      "query": "insert into user(id) values(1) on duplicate key update col = 2",
  1844      "plan": {
  1845        "QueryType": "INSERT",
  1846        "Original": "insert into user(id) values(1) on duplicate key update col = 2",
  1847        "Instructions": {
  1848          "OperatorType": "Insert",
  1849          "Variant": "Sharded",
  1850          "Keyspace": {
  1851            "Name": "user",
  1852            "Sharded": true
  1853          },
  1854          "TargetTabletType": "PRIMARY",
  1855          "InsertIgnore": true,
  1856          "MultiShardAutocommit": false,
  1857          "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0) on duplicate key update col = 2",
  1858          "TableName": "user",
  1859          "VindexValues": {
  1860            "costly_map": "NULL",
  1861            "name_user_map": "NULL",
  1862            "user_index": ":__seq0"
  1863          }
  1864        },
  1865        "TablesUsed": [
  1866          "user.user"
  1867        ]
  1868      }
  1869    },
  1870    {
  1871      "comment": "insert with one vindex and bind var",
  1872      "query": "insert into user(id) values (:aa)",
  1873      "plan": {
  1874        "QueryType": "INSERT",
  1875        "Original": "insert into user(id) values (:aa)",
  1876        "Instructions": {
  1877          "OperatorType": "Insert",
  1878          "Variant": "Sharded",
  1879          "Keyspace": {
  1880            "Name": "user",
  1881            "Sharded": true
  1882          },
  1883          "TargetTabletType": "PRIMARY",
  1884          "MultiShardAutocommit": false,
  1885          "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0)",
  1886          "TableName": "user",
  1887          "VindexValues": {
  1888            "costly_map": "NULL",
  1889            "name_user_map": "NULL",
  1890            "user_index": ":__seq0"
  1891          }
  1892        },
  1893        "TablesUsed": [
  1894          "user.user"
  1895        ]
  1896      }
  1897    },
  1898    {
  1899      "comment": "insert with non vindex",
  1900      "query": "insert into user(nonid) values (2)",
  1901      "plan": {
  1902        "QueryType": "INSERT",
  1903        "Original": "insert into user(nonid) values (2)",
  1904        "Instructions": {
  1905          "OperatorType": "Insert",
  1906          "Variant": "Sharded",
  1907          "Keyspace": {
  1908            "Name": "user",
  1909            "Sharded": true
  1910          },
  1911          "TargetTabletType": "PRIMARY",
  1912          "MultiShardAutocommit": false,
  1913          "Query": "insert into `user`(nonid, id, `Name`, Costly) values (2, :_Id_0, :_Name_0, :_Costly_0)",
  1914          "TableName": "user",
  1915          "VindexValues": {
  1916            "costly_map": "NULL",
  1917            "name_user_map": "NULL",
  1918            "user_index": ":__seq0"
  1919          }
  1920        },
  1921        "TablesUsed": [
  1922          "user.user"
  1923        ]
  1924      }
  1925    },
  1926    {
  1927      "comment": "insert with default seq",
  1928      "query": "insert into user(id, nonid) values (default, 2)",
  1929      "plan": {
  1930        "QueryType": "INSERT",
  1931        "Original": "insert into user(id, nonid) values (default, 2)",
  1932        "Instructions": {
  1933          "OperatorType": "Insert",
  1934          "Variant": "Sharded",
  1935          "Keyspace": {
  1936            "Name": "user",
  1937            "Sharded": true
  1938          },
  1939          "TargetTabletType": "PRIMARY",
  1940          "MultiShardAutocommit": false,
  1941          "Query": "insert into `user`(id, nonid, `Name`, Costly) values (:_Id_0, 2, :_Name_0, :_Costly_0)",
  1942          "TableName": "user",
  1943          "VindexValues": {
  1944            "costly_map": "NULL",
  1945            "name_user_map": "NULL",
  1946            "user_index": ":__seq0"
  1947          }
  1948        },
  1949        "TablesUsed": [
  1950          "user.user"
  1951        ]
  1952      }
  1953    },
  1954    {
  1955      "comment": "insert with non vindex bool value",
  1956      "query": "insert into user(nonid) values (true)",
  1957      "plan": {
  1958        "QueryType": "INSERT",
  1959        "Original": "insert into user(nonid) values (true)",
  1960        "Instructions": {
  1961          "OperatorType": "Insert",
  1962          "Variant": "Sharded",
  1963          "Keyspace": {
  1964            "Name": "user",
  1965            "Sharded": true
  1966          },
  1967          "TargetTabletType": "PRIMARY",
  1968          "MultiShardAutocommit": false,
  1969          "Query": "insert into `user`(nonid, id, `Name`, Costly) values (true, :_Id_0, :_Name_0, :_Costly_0)",
  1970          "TableName": "user",
  1971          "VindexValues": {
  1972            "costly_map": "NULL",
  1973            "name_user_map": "NULL",
  1974            "user_index": ":__seq0"
  1975          }
  1976        },
  1977        "TablesUsed": [
  1978          "user.user"
  1979        ]
  1980      }
  1981    },
  1982    {
  1983      "comment": "insert with all vindexes supplied",
  1984      "query": "insert into user(nonid, name, id) values (2, 'foo', 1)",
  1985      "plan": {
  1986        "QueryType": "INSERT",
  1987        "Original": "insert into user(nonid, name, id) values (2, 'foo', 1)",
  1988        "Instructions": {
  1989          "OperatorType": "Insert",
  1990          "Variant": "Sharded",
  1991          "Keyspace": {
  1992            "Name": "user",
  1993            "Sharded": true
  1994          },
  1995          "TargetTabletType": "PRIMARY",
  1996          "MultiShardAutocommit": false,
  1997          "Query": "insert into `user`(nonid, `name`, id, Costly) values (2, :_Name_0, :_Id_0, :_Costly_0)",
  1998          "TableName": "user",
  1999          "VindexValues": {
  2000            "costly_map": "NULL",
  2001            "name_user_map": "VARCHAR(\"foo\")",
  2002            "user_index": ":__seq0"
  2003          }
  2004        },
  2005        "TablesUsed": [
  2006          "user.user"
  2007        ]
  2008      }
  2009    },
  2010    {
  2011      "comment": "insert for non-vindex autoinc",
  2012      "query": "insert into user_extra(nonid) values (2)",
  2013      "plan": {
  2014        "QueryType": "INSERT",
  2015        "Original": "insert into user_extra(nonid) values (2)",
  2016        "Instructions": {
  2017          "OperatorType": "Insert",
  2018          "Variant": "Sharded",
  2019          "Keyspace": {
  2020            "Name": "user",
  2021            "Sharded": true
  2022          },
  2023          "TargetTabletType": "PRIMARY",
  2024          "MultiShardAutocommit": false,
  2025          "Query": "insert into user_extra(nonid, extra_id, user_id) values (2, :__seq0, :_user_id_0)",
  2026          "TableName": "user_extra",
  2027          "VindexValues": {
  2028            "user_index": "NULL"
  2029          }
  2030        },
  2031        "TablesUsed": [
  2032          "user.user_extra"
  2033        ]
  2034      }
  2035    },
  2036    {
  2037      "comment": "insert for non-compliant names",
  2038      "query": "insert into `weird``name`(`a``b*c`, `b*c`) values(1, 2)",
  2039      "plan": {
  2040        "QueryType": "INSERT",
  2041        "Original": "insert into `weird``name`(`a``b*c`, `b*c`) values(1, 2)",
  2042        "Instructions": {
  2043          "OperatorType": "Insert",
  2044          "Variant": "Sharded",
  2045          "Keyspace": {
  2046            "Name": "user",
  2047            "Sharded": true
  2048          },
  2049          "TargetTabletType": "PRIMARY",
  2050          "MultiShardAutocommit": false,
  2051          "Query": "insert into `weird``name`(`a``b*c`, `b*c`) values (:_a_b_c_0, 2)",
  2052          "TableName": "weird`name",
  2053          "VindexValues": {
  2054            "user_index": "INT64(1)"
  2055          }
  2056        },
  2057        "TablesUsed": [
  2058          "user.weird`name"
  2059        ]
  2060      }
  2061    },
  2062    {
  2063      "comment": "unsharded insert from union",
  2064      "query": "insert into unsharded select 1 from dual union select 1 from dual",
  2065      "v3-plan": {
  2066        "QueryType": "INSERT",
  2067        "Original": "insert into unsharded select 1 from dual union select 1 from dual",
  2068        "Instructions": {
  2069          "OperatorType": "Insert",
  2070          "Variant": "Unsharded",
  2071          "Keyspace": {
  2072            "Name": "main",
  2073            "Sharded": false
  2074          },
  2075          "TargetTabletType": "PRIMARY",
  2076          "MultiShardAutocommit": false,
  2077          "Query": "insert into unsharded select 1 from dual union select 1 from dual for update",
  2078          "TableName": "unsharded"
  2079        },
  2080        "TablesUsed": [
  2081          "main.unsharded"
  2082        ]
  2083      },
  2084      "gen4-plan": {
  2085        "QueryType": "INSERT",
  2086        "Original": "insert into unsharded select 1 from dual union select 1 from dual",
  2087        "Instructions": {
  2088          "OperatorType": "Insert",
  2089          "Variant": "Unsharded",
  2090          "Keyspace": {
  2091            "Name": "main",
  2092            "Sharded": false
  2093          },
  2094          "TargetTabletType": "PRIMARY",
  2095          "MultiShardAutocommit": false,
  2096          "Query": "insert into unsharded select 1 from dual union select 1 from dual for update",
  2097          "TableName": "unsharded"
  2098        },
  2099        "TablesUsed": [
  2100          "main.dual",
  2101          "main.unsharded"
  2102        ]
  2103      }
  2104    },
  2105    {
  2106      "comment": "insert for non-vindex autoinc, invalid value",
  2107      "query": "insert into user_extra(nonid, extra_id) values (2, 18446744073709551616)",
  2108      "plan": {
  2109        "QueryType": "INSERT",
  2110        "Original": "insert into user_extra(nonid, extra_id) values (2, 18446744073709551616)",
  2111        "Instructions": {
  2112          "OperatorType": "Insert",
  2113          "Variant": "Sharded",
  2114          "Keyspace": {
  2115            "Name": "user",
  2116            "Sharded": true
  2117          },
  2118          "TargetTabletType": "PRIMARY",
  2119          "MultiShardAutocommit": false,
  2120          "Query": "insert into user_extra(nonid, extra_id, user_id) values (2, :__seq0, :_user_id_0)",
  2121          "TableName": "user_extra",
  2122          "VindexValues": {
  2123            "user_index": "NULL"
  2124          }
  2125        },
  2126        "TablesUsed": [
  2127          "user.user_extra"
  2128        ]
  2129      }
  2130    },
  2131    {
  2132      "comment": "insert invalid index value",
  2133      "query": "insert into music_extra(music_id, user_id) values(1, 18446744073709551616)",
  2134      "plan": {
  2135        "QueryType": "INSERT",
  2136        "Original": "insert into music_extra(music_id, user_id) values(1, 18446744073709551616)",
  2137        "Instructions": {
  2138          "OperatorType": "Insert",
  2139          "Variant": "Sharded",
  2140          "Keyspace": {
  2141            "Name": "user",
  2142            "Sharded": true
  2143          },
  2144          "TargetTabletType": "PRIMARY",
  2145          "MultiShardAutocommit": false,
  2146          "Query": "insert into music_extra(music_id, user_id) values (:_music_id_0, :_user_id_0)",
  2147          "TableName": "music_extra",
  2148          "VindexValues": {
  2149            "music_user_map": "INT64(1)",
  2150            "user_index": "DECIMAL(18446744073709551616)"
  2151          }
  2152        },
  2153        "TablesUsed": [
  2154          "user.music_extra"
  2155        ]
  2156      }
  2157    },
  2158    {
  2159      "comment": "insert invalid index value",
  2160      "query": "insert into music_extra(music_id, user_id) values(1, id)",
  2161      "plan": "column access not supported here"
  2162    },
  2163    {
  2164      "comment": "insert invalid table",
  2165      "query": "insert into noexist(music_id, user_id) values(1, 18446744073709551616)",
  2166      "plan": "table noexist not found"
  2167    },
  2168    {
  2169      "comment": "insert with multiple rows",
  2170      "query": "insert into user(id) values (1), (2)",
  2171      "plan": {
  2172        "QueryType": "INSERT",
  2173        "Original": "insert into user(id) values (1), (2)",
  2174        "Instructions": {
  2175          "OperatorType": "Insert",
  2176          "Variant": "Sharded",
  2177          "Keyspace": {
  2178            "Name": "user",
  2179            "Sharded": true
  2180          },
  2181          "TargetTabletType": "PRIMARY",
  2182          "MultiShardAutocommit": false,
  2183          "Query": "insert into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0), (:_Id_1, :_Name_1, :_Costly_1)",
  2184          "TableName": "user",
  2185          "VindexValues": {
  2186            "costly_map": "NULL, NULL",
  2187            "name_user_map": "NULL, NULL",
  2188            "user_index": ":__seq0, :__seq1"
  2189          }
  2190        },
  2191        "TablesUsed": [
  2192          "user.user"
  2193        ]
  2194      }
  2195    },
  2196    {
  2197      "comment": "insert with query timeout",
  2198      "query": "insert /*vt+ QUERY_TIMEOUT_MS=1 */ into user(id) values (1), (2)",
  2199      "plan": {
  2200        "QueryType": "INSERT",
  2201        "Original": "insert /*vt+ QUERY_TIMEOUT_MS=1 */ into user(id) values (1), (2)",
  2202        "Instructions": {
  2203          "OperatorType": "Insert",
  2204          "Variant": "Sharded",
  2205          "Keyspace": {
  2206            "Name": "user",
  2207            "Sharded": true
  2208          },
  2209          "TargetTabletType": "PRIMARY",
  2210          "MultiShardAutocommit": false,
  2211          "Query": "insert /*vt+ QUERY_TIMEOUT_MS=1 */ into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0), (:_Id_1, :_Name_1, :_Costly_1)",
  2212          "QueryTimeout": 1,
  2213          "TableName": "user",
  2214          "VindexValues": {
  2215            "costly_map": "NULL, NULL",
  2216            "name_user_map": "NULL, NULL",
  2217            "user_index": ":__seq0, :__seq1"
  2218          }
  2219        },
  2220        "TablesUsed": [
  2221          "user.user"
  2222        ]
  2223      }
  2224    },
  2225    {
  2226      "comment": "insert with multiple rows - multi-shard autocommit",
  2227      "query": "insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into user(id) values (1), (2)",
  2228      "plan": {
  2229        "QueryType": "INSERT",
  2230        "Original": "insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into user(id) values (1), (2)",
  2231        "Instructions": {
  2232          "OperatorType": "Insert",
  2233          "Variant": "Sharded",
  2234          "Keyspace": {
  2235            "Name": "user",
  2236            "Sharded": true
  2237          },
  2238          "TargetTabletType": "PRIMARY",
  2239          "MultiShardAutocommit": true,
  2240          "Query": "insert /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ into `user`(id, `Name`, Costly) values (:_Id_0, :_Name_0, :_Costly_0), (:_Id_1, :_Name_1, :_Costly_1)",
  2241          "TableName": "user",
  2242          "VindexValues": {
  2243            "costly_map": "NULL, NULL",
  2244            "name_user_map": "NULL, NULL",
  2245            "user_index": ":__seq0, :__seq1"
  2246          }
  2247        },
  2248        "TablesUsed": [
  2249          "user.user"
  2250        ]
  2251      }
  2252    },
  2253    {
  2254      "comment": "insert into a vindex not allowed",
  2255      "query": "insert into user_index(id) values(1)",
  2256      "plan": "VT12001: unsupported: multi-shard or vindex write statement"
  2257    },
  2258    {
  2259      "comment": "simple replace unsharded",
  2260      "query": "replace into unsharded values(1, 2)",
  2261      "plan": {
  2262        "QueryType": "INSERT",
  2263        "Original": "replace into unsharded values(1, 2)",
  2264        "Instructions": {
  2265          "OperatorType": "Insert",
  2266          "Variant": "Unsharded",
  2267          "Keyspace": {
  2268            "Name": "main",
  2269            "Sharded": false
  2270          },
  2271          "TargetTabletType": "PRIMARY",
  2272          "MultiShardAutocommit": false,
  2273          "Query": "replace into unsharded values (1, 2)",
  2274          "TableName": "unsharded"
  2275        },
  2276        "TablesUsed": [
  2277          "main.unsharded"
  2278        ]
  2279      }
  2280    },
  2281    {
  2282      "comment": "replace unsharded with select",
  2283      "query": "replace into unsharded select id from unsharded_auto",
  2284      "v3-plan": {
  2285        "QueryType": "INSERT",
  2286        "Original": "replace into unsharded select id from unsharded_auto",
  2287        "Instructions": {
  2288          "OperatorType": "Insert",
  2289          "Variant": "Unsharded",
  2290          "Keyspace": {
  2291            "Name": "main",
  2292            "Sharded": false
  2293          },
  2294          "TargetTabletType": "PRIMARY",
  2295          "MultiShardAutocommit": false,
  2296          "Query": "replace into unsharded select id from unsharded_auto for update",
  2297          "TableName": "unsharded"
  2298        },
  2299        "TablesUsed": [
  2300          "main.unsharded"
  2301        ]
  2302      },
  2303      "gen4-plan": {
  2304        "QueryType": "INSERT",
  2305        "Original": "replace into unsharded select id from unsharded_auto",
  2306        "Instructions": {
  2307          "OperatorType": "Insert",
  2308          "Variant": "Unsharded",
  2309          "Keyspace": {
  2310            "Name": "main",
  2311            "Sharded": false
  2312          },
  2313          "TargetTabletType": "PRIMARY",
  2314          "MultiShardAutocommit": false,
  2315          "Query": "replace into unsharded select id from unsharded_auto for update",
  2316          "TableName": "unsharded"
  2317        },
  2318        "TablesUsed": [
  2319          "main.unsharded",
  2320          "main.unsharded_auto"
  2321        ]
  2322      }
  2323    },
  2324    {
  2325      "comment": "replace unsharded, invalid value for auto-inc",
  2326      "query": "replace into unsharded_auto(id, val) values(18446744073709551616, 'aa')",
  2327      "plan": {
  2328        "QueryType": "INSERT",
  2329        "Original": "replace into unsharded_auto(id, val) values(18446744073709551616, 'aa')",
  2330        "Instructions": {
  2331          "OperatorType": "Insert",
  2332          "Variant": "Unsharded",
  2333          "Keyspace": {
  2334            "Name": "main",
  2335            "Sharded": false
  2336          },
  2337          "TargetTabletType": "PRIMARY",
  2338          "MultiShardAutocommit": false,
  2339          "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa')",
  2340          "TableName": "unsharded_auto"
  2341        },
  2342        "TablesUsed": [
  2343          "main.unsharded_auto"
  2344        ]
  2345      }
  2346    },
  2347    {
  2348      "comment": "replace unsharded, column present",
  2349      "query": "replace into unsharded_auto(id, val) values(1, 'aa')",
  2350      "plan": {
  2351        "QueryType": "INSERT",
  2352        "Original": "replace into unsharded_auto(id, val) values(1, 'aa')",
  2353        "Instructions": {
  2354          "OperatorType": "Insert",
  2355          "Variant": "Unsharded",
  2356          "Keyspace": {
  2357            "Name": "main",
  2358            "Sharded": false
  2359          },
  2360          "TargetTabletType": "PRIMARY",
  2361          "MultiShardAutocommit": false,
  2362          "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa')",
  2363          "TableName": "unsharded_auto"
  2364        },
  2365        "TablesUsed": [
  2366          "main.unsharded_auto"
  2367        ]
  2368      }
  2369    },
  2370    {
  2371      "comment": "replace unsharded, column absent",
  2372      "query": "replace into unsharded_auto(val) values('aa')",
  2373      "plan": {
  2374        "QueryType": "INSERT",
  2375        "Original": "replace into unsharded_auto(val) values('aa')",
  2376        "Instructions": {
  2377          "OperatorType": "Insert",
  2378          "Variant": "Unsharded",
  2379          "Keyspace": {
  2380            "Name": "main",
  2381            "Sharded": false
  2382          },
  2383          "TargetTabletType": "PRIMARY",
  2384          "MultiShardAutocommit": false,
  2385          "Query": "replace into unsharded_auto(val, id) values ('aa', :__seq0)",
  2386          "TableName": "unsharded_auto"
  2387        },
  2388        "TablesUsed": [
  2389          "main.unsharded_auto"
  2390        ]
  2391      }
  2392    },
  2393    {
  2394      "comment": "replace unsharded, multi-val",
  2395      "query": "replace into unsharded_auto(id, val) values(1, 'aa'), (null, 'bb')",
  2396      "plan": {
  2397        "QueryType": "INSERT",
  2398        "Original": "replace into unsharded_auto(id, val) values(1, 'aa'), (null, 'bb')",
  2399        "Instructions": {
  2400          "OperatorType": "Insert",
  2401          "Variant": "Unsharded",
  2402          "Keyspace": {
  2403            "Name": "main",
  2404            "Sharded": false
  2405          },
  2406          "TargetTabletType": "PRIMARY",
  2407          "MultiShardAutocommit": false,
  2408          "Query": "replace into unsharded_auto(id, val) values (:__seq0, 'aa'), (:__seq1, 'bb')",
  2409          "TableName": "unsharded_auto"
  2410        },
  2411        "TablesUsed": [
  2412          "main.unsharded_auto"
  2413        ]
  2414      }
  2415    },
  2416    {
  2417      "comment": "replace invalid table",
  2418      "query": "replace into noexist(music_id, user_id) values(1, 18446744073709551616)",
  2419      "plan": "table noexist not found"
  2420    },
  2421    {
  2422      "comment": "insert a row in a multi column vindex table",
  2423      "query": "insert multicolvin (column_a, column_b, column_c, kid) VALUES (1,2,3,4)",
  2424      "plan": {
  2425        "QueryType": "INSERT",
  2426        "Original": "insert multicolvin (column_a, column_b, column_c, kid) VALUES (1,2,3,4)",
  2427        "Instructions": {
  2428          "OperatorType": "Insert",
  2429          "Variant": "Sharded",
  2430          "Keyspace": {
  2431            "Name": "user",
  2432            "Sharded": true
  2433          },
  2434          "TargetTabletType": "PRIMARY",
  2435          "MultiShardAutocommit": false,
  2436          "Query": "insert into multicolvin(column_a, column_b, column_c, kid) values (:_column_a_0, :_column_b_0, :_column_c_0, :_kid_0)",
  2437          "TableName": "multicolvin",
  2438          "VindexValues": {
  2439            "cola_map": "INT64(1)",
  2440            "colb_colc_map": "INT64(2), INT64(3)",
  2441            "kid_index": "INT64(4)"
  2442          }
  2443        },
  2444        "TablesUsed": [
  2445          "user.multicolvin"
  2446        ]
  2447      }
  2448    },
  2449    {
  2450      "comment": "insert for overlapped vindex columns",
  2451      "query": "insert overlap_vindex (kid, column_a, column_b) VALUES (1,2,3)",
  2452      "plan": {
  2453        "QueryType": "INSERT",
  2454        "Original": "insert overlap_vindex (kid, column_a, column_b) VALUES (1,2,3)",
  2455        "Instructions": {
  2456          "OperatorType": "Insert",
  2457          "Variant": "Sharded",
  2458          "Keyspace": {
  2459            "Name": "user",
  2460            "Sharded": true
  2461          },
  2462          "TargetTabletType": "PRIMARY",
  2463          "MultiShardAutocommit": false,
  2464          "Query": "insert into overlap_vindex(kid, column_a, column_b) values (:_kid_0, :_column_a_0, 3)",
  2465          "TableName": "overlap_vindex",
  2466          "VindexValues": {
  2467            "cola_kid_map": "INT64(2), INT64(1)",
  2468            "kid_index": "INT64(1)"
  2469          }
  2470        },
  2471        "TablesUsed": [
  2472          "user.overlap_vindex"
  2473        ]
  2474      }
  2475    },
  2476    {
  2477      "comment": "insert multiple rows in a multi column vindex table",
  2478      "query": "insert multicolvin (column_a, column_b, column_c, kid) VALUES (1,2,3,4), (5,6,7,8)",
  2479      "plan": {
  2480        "QueryType": "INSERT",
  2481        "Original": "insert multicolvin (column_a, column_b, column_c, kid) VALUES (1,2,3,4), (5,6,7,8)",
  2482        "Instructions": {
  2483          "OperatorType": "Insert",
  2484          "Variant": "Sharded",
  2485          "Keyspace": {
  2486            "Name": "user",
  2487            "Sharded": true
  2488          },
  2489          "TargetTabletType": "PRIMARY",
  2490          "MultiShardAutocommit": false,
  2491          "Query": "insert into multicolvin(column_a, column_b, column_c, kid) values (:_column_a_0, :_column_b_0, :_column_c_0, :_kid_0), (:_column_a_1, :_column_b_1, :_column_c_1, :_kid_1)",
  2492          "TableName": "multicolvin",
  2493          "VindexValues": {
  2494            "cola_map": "INT64(1), INT64(5)",
  2495            "colb_colc_map": "INT64(2), INT64(6), INT64(3), INT64(7)",
  2496            "kid_index": "INT64(4), INT64(8)"
  2497          }
  2498        },
  2499        "TablesUsed": [
  2500          "user.multicolvin"
  2501        ]
  2502      }
  2503    },
  2504    {
  2505      "comment": "delete row in a multi column vindex table",
  2506      "query": "delete from multicolvin where kid=1",
  2507      "v3-plan": {
  2508        "QueryType": "DELETE",
  2509        "Original": "delete from multicolvin where kid=1",
  2510        "Instructions": {
  2511          "OperatorType": "Delete",
  2512          "Variant": "Equal",
  2513          "Keyspace": {
  2514            "Name": "user",
  2515            "Sharded": true
  2516          },
  2517          "TargetTabletType": "PRIMARY",
  2518          "KsidLength": 1,
  2519          "KsidVindex": "kid_index",
  2520          "MultiShardAutocommit": false,
  2521          "OwnedVindexQuery": "select kid, column_a, column_b, column_c from multicolvin where kid = 1 for update",
  2522          "Query": "delete from multicolvin where kid = 1",
  2523          "Table": "multicolvin",
  2524          "Values": [
  2525            "INT64(1)"
  2526          ],
  2527          "Vindex": "kid_index"
  2528        },
  2529        "TablesUsed": [
  2530          "user.multicolvin"
  2531        ]
  2532      },
  2533      "gen4-plan": {
  2534        "QueryType": "DELETE",
  2535        "Original": "delete from multicolvin where kid=1",
  2536        "Instructions": {
  2537          "OperatorType": "Delete",
  2538          "Variant": "EqualUnique",
  2539          "Keyspace": {
  2540            "Name": "user",
  2541            "Sharded": true
  2542          },
  2543          "TargetTabletType": "PRIMARY",
  2544          "KsidLength": 1,
  2545          "KsidVindex": "kid_index",
  2546          "MultiShardAutocommit": false,
  2547          "OwnedVindexQuery": "select kid, column_a, column_b, column_c from multicolvin where kid = 1 for update",
  2548          "Query": "delete from multicolvin where kid = 1",
  2549          "Table": "multicolvin",
  2550          "Values": [
  2551            "INT64(1)"
  2552          ],
  2553          "Vindex": "kid_index"
  2554        },
  2555        "TablesUsed": [
  2556          "user.multicolvin"
  2557        ]
  2558      }
  2559    },
  2560    {
  2561      "comment": "update columns of multi column vindex",
  2562      "query": "update multicolvin set column_b = 1, column_c = 2 where kid = 1",
  2563      "v3-plan": {
  2564        "QueryType": "UPDATE",
  2565        "Original": "update multicolvin set column_b = 1, column_c = 2 where kid = 1",
  2566        "Instructions": {
  2567          "OperatorType": "Update",
  2568          "Variant": "Equal",
  2569          "Keyspace": {
  2570            "Name": "user",
  2571            "Sharded": true
  2572          },
  2573          "TargetTabletType": "PRIMARY",
  2574          "ChangedVindexValues": [
  2575            "colb_colc_map:4"
  2576          ],
  2577          "KsidLength": 1,
  2578          "KsidVindex": "kid_index",
  2579          "MultiShardAutocommit": false,
  2580          "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_b = 1 and column_c = 2 from multicolvin where kid = 1 for update",
  2581          "Query": "update multicolvin set column_b = 1, column_c = 2 where kid = 1",
  2582          "Table": "multicolvin",
  2583          "Values": [
  2584            "INT64(1)"
  2585          ],
  2586          "Vindex": "kid_index"
  2587        },
  2588        "TablesUsed": [
  2589          "user.multicolvin"
  2590        ]
  2591      },
  2592      "gen4-plan": {
  2593        "QueryType": "UPDATE",
  2594        "Original": "update multicolvin set column_b = 1, column_c = 2 where kid = 1",
  2595        "Instructions": {
  2596          "OperatorType": "Update",
  2597          "Variant": "EqualUnique",
  2598          "Keyspace": {
  2599            "Name": "user",
  2600            "Sharded": true
  2601          },
  2602          "TargetTabletType": "PRIMARY",
  2603          "ChangedVindexValues": [
  2604            "colb_colc_map:4"
  2605          ],
  2606          "KsidLength": 1,
  2607          "KsidVindex": "kid_index",
  2608          "MultiShardAutocommit": false,
  2609          "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_b = 1 and column_c = 2 from multicolvin where kid = 1 for update",
  2610          "Query": "update multicolvin set column_b = 1, column_c = 2 where kid = 1",
  2611          "Table": "multicolvin",
  2612          "Values": [
  2613            "INT64(1)"
  2614          ],
  2615          "Vindex": "kid_index"
  2616        },
  2617        "TablesUsed": [
  2618          "user.multicolvin"
  2619        ]
  2620      }
  2621    },
  2622    {
  2623      "comment": "update multiple vindexes, with multi column vindex",
  2624      "query": "update multicolvin set column_a = 0, column_b = 1, column_c = 2 where kid = 1",
  2625      "v3-plan": {
  2626        "QueryType": "UPDATE",
  2627        "Original": "update multicolvin set column_a = 0, column_b = 1, column_c = 2 where kid = 1",
  2628        "Instructions": {
  2629          "OperatorType": "Update",
  2630          "Variant": "Equal",
  2631          "Keyspace": {
  2632            "Name": "user",
  2633            "Sharded": true
  2634          },
  2635          "TargetTabletType": "PRIMARY",
  2636          "ChangedVindexValues": [
  2637            "cola_map:4",
  2638            "colb_colc_map:5"
  2639          ],
  2640          "KsidLength": 1,
  2641          "KsidVindex": "kid_index",
  2642          "MultiShardAutocommit": false,
  2643          "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_a = 0, column_b = 1 and column_c = 2 from multicolvin where kid = 1 for update",
  2644          "Query": "update multicolvin set column_a = 0, column_b = 1, column_c = 2 where kid = 1",
  2645          "Table": "multicolvin",
  2646          "Values": [
  2647            "INT64(1)"
  2648          ],
  2649          "Vindex": "kid_index"
  2650        },
  2651        "TablesUsed": [
  2652          "user.multicolvin"
  2653        ]
  2654      },
  2655      "gen4-plan": {
  2656        "QueryType": "UPDATE",
  2657        "Original": "update multicolvin set column_a = 0, column_b = 1, column_c = 2 where kid = 1",
  2658        "Instructions": {
  2659          "OperatorType": "Update",
  2660          "Variant": "EqualUnique",
  2661          "Keyspace": {
  2662            "Name": "user",
  2663            "Sharded": true
  2664          },
  2665          "TargetTabletType": "PRIMARY",
  2666          "ChangedVindexValues": [
  2667            "cola_map:4",
  2668            "colb_colc_map:5"
  2669          ],
  2670          "KsidLength": 1,
  2671          "KsidVindex": "kid_index",
  2672          "MultiShardAutocommit": false,
  2673          "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_a = 0, column_b = 1 and column_c = 2 from multicolvin where kid = 1 for update",
  2674          "Query": "update multicolvin set column_a = 0, column_b = 1, column_c = 2 where kid = 1",
  2675          "Table": "multicolvin",
  2676          "Values": [
  2677            "INT64(1)"
  2678          ],
  2679          "Vindex": "kid_index"
  2680        },
  2681        "TablesUsed": [
  2682          "user.multicolvin"
  2683        ]
  2684      }
  2685    },
  2686    {
  2687      "comment": "update with no primary vindex on where clause (scatter update)",
  2688      "query": "update user_extra set val = 1",
  2689      "plan": {
  2690        "QueryType": "UPDATE",
  2691        "Original": "update user_extra set val = 1",
  2692        "Instructions": {
  2693          "OperatorType": "Update",
  2694          "Variant": "Scatter",
  2695          "Keyspace": {
  2696            "Name": "user",
  2697            "Sharded": true
  2698          },
  2699          "TargetTabletType": "PRIMARY",
  2700          "MultiShardAutocommit": false,
  2701          "Query": "update user_extra set val = 1",
  2702          "Table": "user_extra"
  2703        },
  2704        "TablesUsed": [
  2705          "user.user_extra"
  2706        ]
  2707      }
  2708    },
  2709    {
  2710      "comment": "update with target destination",
  2711      "query": "update `user[-]`.user_extra set val = 1",
  2712      "plan": {
  2713        "QueryType": "UPDATE",
  2714        "Original": "update `user[-]`.user_extra set val = 1",
  2715        "Instructions": {
  2716          "OperatorType": "Update",
  2717          "Variant": "ByDestination",
  2718          "Keyspace": {
  2719            "Name": "user",
  2720            "Sharded": true
  2721          },
  2722          "TargetTabletType": "PRIMARY",
  2723          "MultiShardAutocommit": false,
  2724          "Query": "update user_extra set val = 1",
  2725          "Table": "user_extra"
  2726        },
  2727        "TablesUsed": [
  2728          "user.user_extra"
  2729        ]
  2730      }
  2731    },
  2732    {
  2733      "comment": "update with no primary vindex on where clause (scatter update)   - multi shard autocommit",
  2734      "query": "update /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */  user_extra set val = 1",
  2735      "plan": {
  2736        "QueryType": "UPDATE",
  2737        "Original": "update /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */  user_extra set val = 1",
  2738        "Instructions": {
  2739          "OperatorType": "Update",
  2740          "Variant": "Scatter",
  2741          "Keyspace": {
  2742            "Name": "user",
  2743            "Sharded": true
  2744          },
  2745          "TargetTabletType": "PRIMARY",
  2746          "MultiShardAutocommit": true,
  2747          "Query": "update /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ user_extra set val = 1",
  2748          "Table": "user_extra"
  2749        },
  2750        "TablesUsed": [
  2751          "user.user_extra"
  2752        ]
  2753      }
  2754    },
  2755    {
  2756      "comment": "update with no primary vindex on where clause (scatter update)   - query timeout",
  2757      "query": "update /*vt+ QUERY_TIMEOUT_MS=1 */  user_extra set val = 1",
  2758      "plan": {
  2759        "QueryType": "UPDATE",
  2760        "Original": "update /*vt+ QUERY_TIMEOUT_MS=1 */  user_extra set val = 1",
  2761        "Instructions": {
  2762          "OperatorType": "Update",
  2763          "Variant": "Scatter",
  2764          "Keyspace": {
  2765            "Name": "user",
  2766            "Sharded": true
  2767          },
  2768          "TargetTabletType": "PRIMARY",
  2769          "MultiShardAutocommit": false,
  2770          "Query": "update /*vt+ QUERY_TIMEOUT_MS=1 */ user_extra set val = 1",
  2771          "QueryTimeout": 1,
  2772          "Table": "user_extra"
  2773        },
  2774        "TablesUsed": [
  2775          "user.user_extra"
  2776        ]
  2777      }
  2778    },
  2779    {
  2780      "comment": "update with non-comparison expr",
  2781      "query": "update user_extra set val = 1 where id between 1 and 2",
  2782      "plan": {
  2783        "QueryType": "UPDATE",
  2784        "Original": "update user_extra set val = 1 where id between 1 and 2",
  2785        "Instructions": {
  2786          "OperatorType": "Update",
  2787          "Variant": "Scatter",
  2788          "Keyspace": {
  2789            "Name": "user",
  2790            "Sharded": true
  2791          },
  2792          "TargetTabletType": "PRIMARY",
  2793          "MultiShardAutocommit": false,
  2794          "Query": "update user_extra set val = 1 where id between 1 and 2",
  2795          "Table": "user_extra"
  2796        },
  2797        "TablesUsed": [
  2798          "user.user_extra"
  2799        ]
  2800      }
  2801    },
  2802    {
  2803      "comment": "update with primary id through IN clause",
  2804      "query": "update user_extra set val = 1 where user_id in (1, 2)",
  2805      "plan": {
  2806        "QueryType": "UPDATE",
  2807        "Original": "update user_extra set val = 1 where user_id in (1, 2)",
  2808        "Instructions": {
  2809          "OperatorType": "Update",
  2810          "Variant": "IN",
  2811          "Keyspace": {
  2812            "Name": "user",
  2813            "Sharded": true
  2814          },
  2815          "TargetTabletType": "PRIMARY",
  2816          "MultiShardAutocommit": false,
  2817          "Query": "update user_extra set val = 1 where user_id in (1, 2)",
  2818          "Table": "user_extra",
  2819          "Values": [
  2820            "(INT64(1), INT64(2))"
  2821          ],
  2822          "Vindex": "user_index"
  2823        },
  2824        "TablesUsed": [
  2825          "user.user_extra"
  2826        ]
  2827      }
  2828    },
  2829    {
  2830      "comment": "update with non-unique key",
  2831      "query": "update user_extra set val = 1 where name = 'foo'",
  2832      "plan": {
  2833        "QueryType": "UPDATE",
  2834        "Original": "update user_extra set val = 1 where name = 'foo'",
  2835        "Instructions": {
  2836          "OperatorType": "Update",
  2837          "Variant": "Scatter",
  2838          "Keyspace": {
  2839            "Name": "user",
  2840            "Sharded": true
  2841          },
  2842          "TargetTabletType": "PRIMARY",
  2843          "MultiShardAutocommit": false,
  2844          "Query": "update user_extra set val = 1 where `name` = 'foo'",
  2845          "Table": "user_extra"
  2846        },
  2847        "TablesUsed": [
  2848          "user.user_extra"
  2849        ]
  2850      }
  2851    },
  2852    {
  2853      "comment": "update by lookup with IN clause",
  2854      "query": "update user_extra set val = 1 where id in (1, 2)",
  2855      "plan": {
  2856        "QueryType": "UPDATE",
  2857        "Original": "update user_extra set val = 1 where id in (1, 2)",
  2858        "Instructions": {
  2859          "OperatorType": "Update",
  2860          "Variant": "Scatter",
  2861          "Keyspace": {
  2862            "Name": "user",
  2863            "Sharded": true
  2864          },
  2865          "TargetTabletType": "PRIMARY",
  2866          "MultiShardAutocommit": false,
  2867          "Query": "update user_extra set val = 1 where id in (1, 2)",
  2868          "Table": "user_extra"
  2869        },
  2870        "TablesUsed": [
  2871          "user.user_extra"
  2872        ]
  2873      }
  2874    },
  2875    {
  2876      "comment": "update with where clause with parens",
  2877      "query": "update user_extra set val = 1 where (name = 'foo' or id = 1)",
  2878      "plan": {
  2879        "QueryType": "UPDATE",
  2880        "Original": "update user_extra set val = 1 where (name = 'foo' or id = 1)",
  2881        "Instructions": {
  2882          "OperatorType": "Update",
  2883          "Variant": "Scatter",
  2884          "Keyspace": {
  2885            "Name": "user",
  2886            "Sharded": true
  2887          },
  2888          "TargetTabletType": "PRIMARY",
  2889          "MultiShardAutocommit": false,
  2890          "Query": "update user_extra set val = 1 where `name` = 'foo' or id = 1",
  2891          "Table": "user_extra"
  2892        },
  2893        "TablesUsed": [
  2894          "user.user_extra"
  2895        ]
  2896      }
  2897    },
  2898    {
  2899      "comment": "delete from with no where clause",
  2900      "query": "delete from user_extra",
  2901      "plan": {
  2902        "QueryType": "DELETE",
  2903        "Original": "delete from user_extra",
  2904        "Instructions": {
  2905          "OperatorType": "Delete",
  2906          "Variant": "Scatter",
  2907          "Keyspace": {
  2908            "Name": "user",
  2909            "Sharded": true
  2910          },
  2911          "TargetTabletType": "PRIMARY",
  2912          "MultiShardAutocommit": false,
  2913          "Query": "delete from user_extra",
  2914          "Table": "user_extra"
  2915        },
  2916        "TablesUsed": [
  2917          "user.user_extra"
  2918        ]
  2919      }
  2920    },
  2921    {
  2922      "comment": "delete with target destination",
  2923      "query": "delete from `user[-]`.user_extra",
  2924      "plan": {
  2925        "QueryType": "DELETE",
  2926        "Original": "delete from `user[-]`.user_extra",
  2927        "Instructions": {
  2928          "OperatorType": "Delete",
  2929          "Variant": "ByDestination",
  2930          "Keyspace": {
  2931            "Name": "user",
  2932            "Sharded": true
  2933          },
  2934          "TargetTabletType": "PRIMARY",
  2935          "MultiShardAutocommit": false,
  2936          "Query": "delete from user_extra",
  2937          "Table": "user_extra"
  2938        },
  2939        "TablesUsed": [
  2940          "user.user_extra"
  2941        ]
  2942      }
  2943    },
  2944    {
  2945      "comment": "delete with non-comparison expr",
  2946      "query": "delete from user_extra where user_id between 1 and 2",
  2947      "plan": {
  2948        "QueryType": "DELETE",
  2949        "Original": "delete from user_extra where user_id between 1 and 2",
  2950        "Instructions": {
  2951          "OperatorType": "Delete",
  2952          "Variant": "Scatter",
  2953          "Keyspace": {
  2954            "Name": "user",
  2955            "Sharded": true
  2956          },
  2957          "TargetTabletType": "PRIMARY",
  2958          "MultiShardAutocommit": false,
  2959          "Query": "delete from user_extra where user_id between 1 and 2",
  2960          "Table": "user_extra"
  2961        },
  2962        "TablesUsed": [
  2963          "user.user_extra"
  2964        ]
  2965      }
  2966    },
  2967    {
  2968      "comment": "delete from with no index match",
  2969      "query": "delete from user_extra where name = 'jose'",
  2970      "plan": {
  2971        "QueryType": "DELETE",
  2972        "Original": "delete from user_extra where name = 'jose'",
  2973        "Instructions": {
  2974          "OperatorType": "Delete",
  2975          "Variant": "Scatter",
  2976          "Keyspace": {
  2977            "Name": "user",
  2978            "Sharded": true
  2979          },
  2980          "TargetTabletType": "PRIMARY",
  2981          "MultiShardAutocommit": false,
  2982          "Query": "delete from user_extra where `name` = 'jose'",
  2983          "Table": "user_extra"
  2984        },
  2985        "TablesUsed": [
  2986          "user.user_extra"
  2987        ]
  2988      }
  2989    },
  2990    {
  2991      "comment": "delete from with no index match - multi shard autocommit",
  2992      "query": "delete /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ from user_extra where name = 'jose'",
  2993      "plan": {
  2994        "QueryType": "DELETE",
  2995        "Original": "delete /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ from user_extra where name = 'jose'",
  2996        "Instructions": {
  2997          "OperatorType": "Delete",
  2998          "Variant": "Scatter",
  2999          "Keyspace": {
  3000            "Name": "user",
  3001            "Sharded": true
  3002          },
  3003          "TargetTabletType": "PRIMARY",
  3004          "MultiShardAutocommit": true,
  3005          "Query": "delete /*vt+ MULTI_SHARD_AUTOCOMMIT=1 */ from user_extra where `name` = 'jose'",
  3006          "Table": "user_extra"
  3007        },
  3008        "TablesUsed": [
  3009          "user.user_extra"
  3010        ]
  3011      }
  3012    },
  3013    {
  3014      "comment": "delete from with no index match - query timeout",
  3015      "query": "delete /*vt+ QUERY_TIMEOUT_MS=1 */ from user_extra where name = 'jose'",
  3016      "plan": {
  3017        "QueryType": "DELETE",
  3018        "Original": "delete /*vt+ QUERY_TIMEOUT_MS=1 */ from user_extra where name = 'jose'",
  3019        "Instructions": {
  3020          "OperatorType": "Delete",
  3021          "Variant": "Scatter",
  3022          "Keyspace": {
  3023            "Name": "user",
  3024            "Sharded": true
  3025          },
  3026          "TargetTabletType": "PRIMARY",
  3027          "MultiShardAutocommit": false,
  3028          "Query": "delete /*vt+ QUERY_TIMEOUT_MS=1 */ from user_extra where `name` = 'jose'",
  3029          "QueryTimeout": 1,
  3030          "Table": "user_extra"
  3031        },
  3032        "TablesUsed": [
  3033          "user.user_extra"
  3034        ]
  3035      }
  3036    },
  3037    {
  3038      "comment": "delete from with primary id in through IN clause",
  3039      "query": "delete from user_extra where user_id in (1, 2)",
  3040      "plan": {
  3041        "QueryType": "DELETE",
  3042        "Original": "delete from user_extra where user_id in (1, 2)",
  3043        "Instructions": {
  3044          "OperatorType": "Delete",
  3045          "Variant": "IN",
  3046          "Keyspace": {
  3047            "Name": "user",
  3048            "Sharded": true
  3049          },
  3050          "TargetTabletType": "PRIMARY",
  3051          "MultiShardAutocommit": false,
  3052          "Query": "delete from user_extra where user_id in (1, 2)",
  3053          "Table": "user_extra",
  3054          "Values": [
  3055            "(INT64(1), INT64(2))"
  3056          ],
  3057          "Vindex": "user_index"
  3058        },
  3059        "TablesUsed": [
  3060          "user.user_extra"
  3061        ]
  3062      }
  3063    },
  3064    {
  3065      "comment": "unsharded update where inner query references outer query",
  3066      "query": "update unsharded set col = (select id from unsharded_a where id = unsharded.col) where col = (select id from unsharded_b)",
  3067      "v3-plan": {
  3068        "QueryType": "UPDATE",
  3069        "Original": "update unsharded set col = (select id from unsharded_a where id = unsharded.col) where col = (select id from unsharded_b)",
  3070        "Instructions": {
  3071          "OperatorType": "Update",
  3072          "Variant": "Unsharded",
  3073          "Keyspace": {
  3074            "Name": "main",
  3075            "Sharded": false
  3076          },
  3077          "TargetTabletType": "PRIMARY",
  3078          "MultiShardAutocommit": false,
  3079          "Query": "update unsharded set col = (select id from unsharded_a where id = unsharded.col) where col = (select id from unsharded_b)",
  3080          "Table": "unsharded, unsharded_a, unsharded_b"
  3081        },
  3082        "TablesUsed": [
  3083          "main.unsharded"
  3084        ]
  3085      },
  3086      "gen4-plan": {
  3087        "QueryType": "UPDATE",
  3088        "Original": "update unsharded set col = (select id from unsharded_a where id = unsharded.col) where col = (select id from unsharded_b)",
  3089        "Instructions": {
  3090          "OperatorType": "Update",
  3091          "Variant": "Unsharded",
  3092          "Keyspace": {
  3093            "Name": "main",
  3094            "Sharded": false
  3095          },
  3096          "TargetTabletType": "PRIMARY",
  3097          "MultiShardAutocommit": false,
  3098          "Query": "update unsharded set col = (select id from unsharded_a where id = unsharded.col) where col = (select id from unsharded_b)",
  3099          "Table": "unsharded, unsharded_a, unsharded_b"
  3100        },
  3101        "TablesUsed": [
  3102          "main.unsharded",
  3103          "main.unsharded_a",
  3104          "main.unsharded_b"
  3105        ]
  3106      }
  3107    },
  3108    {
  3109      "comment": "unsharded delete where inner query references outer query",
  3110      "query": "delete from unsharded where col = (select id from unsharded_a where id = unsharded.col)",
  3111      "v3-plan": {
  3112        "QueryType": "DELETE",
  3113        "Original": "delete from unsharded where col = (select id from unsharded_a where id = unsharded.col)",
  3114        "Instructions": {
  3115          "OperatorType": "Delete",
  3116          "Variant": "Unsharded",
  3117          "Keyspace": {
  3118            "Name": "main",
  3119            "Sharded": false
  3120          },
  3121          "TargetTabletType": "PRIMARY",
  3122          "MultiShardAutocommit": false,
  3123          "Query": "delete from unsharded where col = (select id from unsharded_a where id = unsharded.col)",
  3124          "Table": "unsharded, unsharded_a"
  3125        },
  3126        "TablesUsed": [
  3127          "main.unsharded"
  3128        ]
  3129      },
  3130      "gen4-plan": {
  3131        "QueryType": "DELETE",
  3132        "Original": "delete from unsharded where col = (select id from unsharded_a where id = unsharded.col)",
  3133        "Instructions": {
  3134          "OperatorType": "Delete",
  3135          "Variant": "Unsharded",
  3136          "Keyspace": {
  3137            "Name": "main",
  3138            "Sharded": false
  3139          },
  3140          "TargetTabletType": "PRIMARY",
  3141          "MultiShardAutocommit": false,
  3142          "Query": "delete from unsharded where col = (select id from unsharded_a where id = unsharded.col)",
  3143          "Table": "unsharded, unsharded_a"
  3144        },
  3145        "TablesUsed": [
  3146          "main.unsharded",
  3147          "main.unsharded_a"
  3148        ]
  3149      }
  3150    },
  3151    {
  3152      "comment": "update vindex value to null",
  3153      "query": "update user set name = null where id = 1",
  3154      "v3-plan": {
  3155        "QueryType": "UPDATE",
  3156        "Original": "update user set name = null where id = 1",
  3157        "Instructions": {
  3158          "OperatorType": "Update",
  3159          "Variant": "Equal",
  3160          "Keyspace": {
  3161            "Name": "user",
  3162            "Sharded": true
  3163          },
  3164          "TargetTabletType": "PRIMARY",
  3165          "ChangedVindexValues": [
  3166            "name_user_map:3"
  3167          ],
  3168          "KsidLength": 1,
  3169          "KsidVindex": "user_index",
  3170          "MultiShardAutocommit": false,
  3171          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` where id = 1 for update",
  3172          "Query": "update `user` set `name` = null where id = 1",
  3173          "Table": "user",
  3174          "Values": [
  3175            "INT64(1)"
  3176          ],
  3177          "Vindex": "user_index"
  3178        },
  3179        "TablesUsed": [
  3180          "user.user"
  3181        ]
  3182      },
  3183      "gen4-plan": {
  3184        "QueryType": "UPDATE",
  3185        "Original": "update user set name = null where id = 1",
  3186        "Instructions": {
  3187          "OperatorType": "Update",
  3188          "Variant": "EqualUnique",
  3189          "Keyspace": {
  3190            "Name": "user",
  3191            "Sharded": true
  3192          },
  3193          "TargetTabletType": "PRIMARY",
  3194          "ChangedVindexValues": [
  3195            "name_user_map:3"
  3196          ],
  3197          "KsidLength": 1,
  3198          "KsidVindex": "user_index",
  3199          "MultiShardAutocommit": false,
  3200          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` where id = 1 for update",
  3201          "Query": "update `user` set `name` = null where id = 1",
  3202          "Table": "user",
  3203          "Values": [
  3204            "INT64(1)"
  3205          ],
  3206          "Vindex": "user_index"
  3207        },
  3208        "TablesUsed": [
  3209          "user.user"
  3210        ]
  3211      }
  3212    },
  3213    {
  3214      "comment": "insert using last_insert_id",
  3215      "query": "insert into unsharded values(last_insert_id(), 2)",
  3216      "plan": {
  3217        "QueryType": "INSERT",
  3218        "Original": "insert into unsharded values(last_insert_id(), 2)",
  3219        "Instructions": {
  3220          "OperatorType": "Insert",
  3221          "Variant": "Unsharded",
  3222          "Keyspace": {
  3223            "Name": "main",
  3224            "Sharded": false
  3225          },
  3226          "TargetTabletType": "PRIMARY",
  3227          "MultiShardAutocommit": false,
  3228          "Query": "insert into unsharded values (:__lastInsertId, 2)",
  3229          "TableName": "unsharded"
  3230        },
  3231        "TablesUsed": [
  3232          "main.unsharded"
  3233        ]
  3234      }
  3235    },
  3236    {
  3237      "comment": "update vindex value to null with multiple primary keyspace id",
  3238      "query": "update user set name = null where id in (1, 2, 3)",
  3239      "plan": {
  3240        "QueryType": "UPDATE",
  3241        "Original": "update user set name = null where id in (1, 2, 3)",
  3242        "Instructions": {
  3243          "OperatorType": "Update",
  3244          "Variant": "IN",
  3245          "Keyspace": {
  3246            "Name": "user",
  3247            "Sharded": true
  3248          },
  3249          "TargetTabletType": "PRIMARY",
  3250          "ChangedVindexValues": [
  3251            "name_user_map:3"
  3252          ],
  3253          "KsidLength": 1,
  3254          "KsidVindex": "user_index",
  3255          "MultiShardAutocommit": false,
  3256          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` where id in (1, 2, 3) for update",
  3257          "Query": "update `user` set `name` = null where id in (1, 2, 3)",
  3258          "Table": "user",
  3259          "Values": [
  3260            "(INT64(1), INT64(2), INT64(3))"
  3261          ],
  3262          "Vindex": "user_index"
  3263        },
  3264        "TablesUsed": [
  3265          "user.user"
  3266        ]
  3267      }
  3268    },
  3269    {
  3270      "comment": "update vindex value to null without a where clause",
  3271      "query": "update user set name = null",
  3272      "plan": {
  3273        "QueryType": "UPDATE",
  3274        "Original": "update user set name = null",
  3275        "Instructions": {
  3276          "OperatorType": "Update",
  3277          "Variant": "Scatter",
  3278          "Keyspace": {
  3279            "Name": "user",
  3280            "Sharded": true
  3281          },
  3282          "TargetTabletType": "PRIMARY",
  3283          "ChangedVindexValues": [
  3284            "name_user_map:3"
  3285          ],
  3286          "KsidLength": 1,
  3287          "KsidVindex": "user_index",
  3288          "MultiShardAutocommit": false,
  3289          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` for update",
  3290          "Query": "update `user` set `name` = null",
  3291          "Table": "user"
  3292        },
  3293        "TablesUsed": [
  3294          "user.user"
  3295        ]
  3296      }
  3297    },
  3298    {
  3299      "comment": "update vindex value to null with complex where clause",
  3300      "query": "update user set name = null where id + 1 = 2",
  3301      "plan": {
  3302        "QueryType": "UPDATE",
  3303        "Original": "update user set name = null where id + 1 = 2",
  3304        "Instructions": {
  3305          "OperatorType": "Update",
  3306          "Variant": "Scatter",
  3307          "Keyspace": {
  3308            "Name": "user",
  3309            "Sharded": true
  3310          },
  3311          "TargetTabletType": "PRIMARY",
  3312          "ChangedVindexValues": [
  3313            "name_user_map:3"
  3314          ],
  3315          "KsidLength": 1,
  3316          "KsidVindex": "user_index",
  3317          "MultiShardAutocommit": false,
  3318          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = null from `user` where id + 1 = 2 for update",
  3319          "Query": "update `user` set `name` = null where id + 1 = 2",
  3320          "Table": "user"
  3321        },
  3322        "TablesUsed": [
  3323          "user.user"
  3324        ]
  3325      }
  3326    },
  3327    {
  3328      "comment": "delete from user by primary keyspace id with in clause",
  3329      "query": "delete from user where id in (1, 2, 3)",
  3330      "plan": {
  3331        "QueryType": "DELETE",
  3332        "Original": "delete from user where id in (1, 2, 3)",
  3333        "Instructions": {
  3334          "OperatorType": "Delete",
  3335          "Variant": "IN",
  3336          "Keyspace": {
  3337            "Name": "user",
  3338            "Sharded": true
  3339          },
  3340          "TargetTabletType": "PRIMARY",
  3341          "KsidLength": 1,
  3342          "KsidVindex": "user_index",
  3343          "MultiShardAutocommit": false,
  3344          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id in (1, 2, 3) for update",
  3345          "Query": "delete from `user` where id in (1, 2, 3)",
  3346          "Table": "user",
  3347          "Values": [
  3348            "(INT64(1), INT64(2), INT64(3))"
  3349          ],
  3350          "Vindex": "user_index"
  3351        },
  3352        "TablesUsed": [
  3353          "user.user"
  3354        ]
  3355      }
  3356    },
  3357    {
  3358      "comment": "delete from user by complex expression",
  3359      "query": "delete from user where id + 1 = 2",
  3360      "plan": {
  3361        "QueryType": "DELETE",
  3362        "Original": "delete from user where id + 1 = 2",
  3363        "Instructions": {
  3364          "OperatorType": "Delete",
  3365          "Variant": "Scatter",
  3366          "Keyspace": {
  3367            "Name": "user",
  3368            "Sharded": true
  3369          },
  3370          "TargetTabletType": "PRIMARY",
  3371          "KsidLength": 1,
  3372          "KsidVindex": "user_index",
  3373          "MultiShardAutocommit": false,
  3374          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where id + 1 = 2 for update",
  3375          "Query": "delete from `user` where id + 1 = 2",
  3376          "Table": "user"
  3377        },
  3378        "TablesUsed": [
  3379          "user.user"
  3380        ]
  3381      }
  3382    },
  3383    {
  3384      "comment": "delete from user without a where clause",
  3385      "query": "delete from user",
  3386      "plan": {
  3387        "QueryType": "DELETE",
  3388        "Original": "delete from user",
  3389        "Instructions": {
  3390          "OperatorType": "Delete",
  3391          "Variant": "Scatter",
  3392          "Keyspace": {
  3393            "Name": "user",
  3394            "Sharded": true
  3395          },
  3396          "TargetTabletType": "PRIMARY",
  3397          "KsidLength": 1,
  3398          "KsidVindex": "user_index",
  3399          "MultiShardAutocommit": false,
  3400          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update",
  3401          "Query": "delete from `user`",
  3402          "Table": "user"
  3403        },
  3404        "TablesUsed": [
  3405          "user.user"
  3406        ]
  3407      }
  3408    },
  3409    {
  3410      "comment": "delete with single table targets",
  3411      "query": "delete music from music where id = 1",
  3412      "v3-plan": {
  3413        "QueryType": "DELETE",
  3414        "Original": "delete music from music where id = 1",
  3415        "Instructions": {
  3416          "OperatorType": "Delete",
  3417          "Variant": "Equal",
  3418          "Keyspace": {
  3419            "Name": "user",
  3420            "Sharded": true
  3421          },
  3422          "TargetTabletType": "PRIMARY",
  3423          "KsidLength": 1,
  3424          "KsidVindex": "user_index",
  3425          "MultiShardAutocommit": false,
  3426          "OwnedVindexQuery": "select user_id, id from music where id = 1 for update",
  3427          "Query": "delete from music where id = 1",
  3428          "Table": "music",
  3429          "Values": [
  3430            "INT64(1)"
  3431          ],
  3432          "Vindex": "music_user_map"
  3433        },
  3434        "TablesUsed": [
  3435          "user.music"
  3436        ]
  3437      },
  3438      "gen4-plan": {
  3439        "QueryType": "DELETE",
  3440        "Original": "delete music from music where id = 1",
  3441        "Instructions": {
  3442          "OperatorType": "Delete",
  3443          "Variant": "EqualUnique",
  3444          "Keyspace": {
  3445            "Name": "user",
  3446            "Sharded": true
  3447          },
  3448          "TargetTabletType": "PRIMARY",
  3449          "KsidLength": 1,
  3450          "KsidVindex": "user_index",
  3451          "MultiShardAutocommit": false,
  3452          "OwnedVindexQuery": "select user_id, id from music where id = 1 for update",
  3453          "Query": "delete from music where id = 1",
  3454          "Table": "music",
  3455          "Values": [
  3456            "INT64(1)"
  3457          ],
  3458          "Vindex": "music_user_map"
  3459        },
  3460        "TablesUsed": [
  3461          "user.music"
  3462        ]
  3463      }
  3464    },
  3465    {
  3466      "comment": "scatter update table with owned vindexes without changing lookup vindex",
  3467      "query": "update user set val = 1",
  3468      "plan": {
  3469        "QueryType": "UPDATE",
  3470        "Original": "update user set val = 1",
  3471        "Instructions": {
  3472          "OperatorType": "Update",
  3473          "Variant": "Scatter",
  3474          "Keyspace": {
  3475            "Name": "user",
  3476            "Sharded": true
  3477          },
  3478          "TargetTabletType": "PRIMARY",
  3479          "MultiShardAutocommit": false,
  3480          "Query": "update `user` set val = 1",
  3481          "Table": "user"
  3482        },
  3483        "TablesUsed": [
  3484          "user.user"
  3485        ]
  3486      }
  3487    },
  3488    {
  3489      "comment": "scatter delete with owned lookup vindex",
  3490      "query": "delete from user",
  3491      "plan": {
  3492        "QueryType": "DELETE",
  3493        "Original": "delete from user",
  3494        "Instructions": {
  3495          "OperatorType": "Delete",
  3496          "Variant": "Scatter",
  3497          "Keyspace": {
  3498            "Name": "user",
  3499            "Sharded": true
  3500          },
  3501          "TargetTabletType": "PRIMARY",
  3502          "KsidLength": 1,
  3503          "KsidVindex": "user_index",
  3504          "MultiShardAutocommit": false,
  3505          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update",
  3506          "Query": "delete from `user`",
  3507          "Table": "user"
  3508        },
  3509        "TablesUsed": [
  3510          "user.user"
  3511        ]
  3512      }
  3513    },
  3514    {
  3515      "comment": "update multi column vindex, without values for all the vindex columns",
  3516      "query": "update multicolvin set column_c = 2 where kid = 1",
  3517      "v3-plan": {
  3518        "QueryType": "UPDATE",
  3519        "Original": "update multicolvin set column_c = 2 where kid = 1",
  3520        "Instructions": {
  3521          "OperatorType": "Update",
  3522          "Variant": "Equal",
  3523          "Keyspace": {
  3524            "Name": "user",
  3525            "Sharded": true
  3526          },
  3527          "TargetTabletType": "PRIMARY",
  3528          "ChangedVindexValues": [
  3529            "colb_colc_map:4"
  3530          ],
  3531          "KsidLength": 1,
  3532          "KsidVindex": "kid_index",
  3533          "MultiShardAutocommit": false,
  3534          "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_c = 2 from multicolvin where kid = 1 for update",
  3535          "Query": "update multicolvin set column_c = 2 where kid = 1",
  3536          "Table": "multicolvin",
  3537          "Values": [
  3538            "INT64(1)"
  3539          ],
  3540          "Vindex": "kid_index"
  3541        },
  3542        "TablesUsed": [
  3543          "user.multicolvin"
  3544        ]
  3545      },
  3546      "gen4-plan": {
  3547        "QueryType": "UPDATE",
  3548        "Original": "update multicolvin set column_c = 2 where kid = 1",
  3549        "Instructions": {
  3550          "OperatorType": "Update",
  3551          "Variant": "EqualUnique",
  3552          "Keyspace": {
  3553            "Name": "user",
  3554            "Sharded": true
  3555          },
  3556          "TargetTabletType": "PRIMARY",
  3557          "ChangedVindexValues": [
  3558            "colb_colc_map:4"
  3559          ],
  3560          "KsidLength": 1,
  3561          "KsidVindex": "kid_index",
  3562          "MultiShardAutocommit": false,
  3563          "OwnedVindexQuery": "select kid, column_a, column_b, column_c, column_c = 2 from multicolvin where kid = 1 for update",
  3564          "Query": "update multicolvin set column_c = 2 where kid = 1",
  3565          "Table": "multicolvin",
  3566          "Values": [
  3567            "INT64(1)"
  3568          ],
  3569          "Vindex": "kid_index"
  3570        },
  3571        "TablesUsed": [
  3572          "user.multicolvin"
  3573        ]
  3574      }
  3575    },
  3576    {
  3577      "comment": "update with binary value",
  3578      "query": "update user set name = _binary 'abc' where id = 1",
  3579      "v3-plan": {
  3580        "QueryType": "UPDATE",
  3581        "Original": "update user set name = _binary 'abc' where id = 1",
  3582        "Instructions": {
  3583          "OperatorType": "Update",
  3584          "Variant": "Equal",
  3585          "Keyspace": {
  3586            "Name": "user",
  3587            "Sharded": true
  3588          },
  3589          "TargetTabletType": "PRIMARY",
  3590          "ChangedVindexValues": [
  3591            "name_user_map:3"
  3592          ],
  3593          "KsidLength": 1,
  3594          "KsidVindex": "user_index",
  3595          "MultiShardAutocommit": false,
  3596          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = _binary 'abc' from `user` where id = 1 for update",
  3597          "Query": "update `user` set `name` = _binary 'abc' where id = 1",
  3598          "Table": "user",
  3599          "Values": [
  3600            "INT64(1)"
  3601          ],
  3602          "Vindex": "user_index"
  3603        },
  3604        "TablesUsed": [
  3605          "user.user"
  3606        ]
  3607      },
  3608      "gen4-plan": {
  3609        "QueryType": "UPDATE",
  3610        "Original": "update user set name = _binary 'abc' where id = 1",
  3611        "Instructions": {
  3612          "OperatorType": "Update",
  3613          "Variant": "EqualUnique",
  3614          "Keyspace": {
  3615            "Name": "user",
  3616            "Sharded": true
  3617          },
  3618          "TargetTabletType": "PRIMARY",
  3619          "ChangedVindexValues": [
  3620            "name_user_map:3"
  3621          ],
  3622          "KsidLength": 1,
  3623          "KsidVindex": "user_index",
  3624          "MultiShardAutocommit": false,
  3625          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = _binary 'abc' from `user` where id = 1 for update",
  3626          "Query": "update `user` set `name` = _binary 'abc' where id = 1",
  3627          "Table": "user",
  3628          "Values": [
  3629            "INT64(1)"
  3630          ],
  3631          "Vindex": "user_index"
  3632        },
  3633        "TablesUsed": [
  3634          "user.user"
  3635        ]
  3636      }
  3637    },
  3638    {
  3639      "comment": "delete with binary value",
  3640      "query": "delete from user where name = _binary 'abc'",
  3641      "v3-plan": {
  3642        "QueryType": "DELETE",
  3643        "Original": "delete from user where name = _binary 'abc'",
  3644        "Instructions": {
  3645          "OperatorType": "Delete",
  3646          "Variant": "Scatter",
  3647          "Keyspace": {
  3648            "Name": "user",
  3649            "Sharded": true
  3650          },
  3651          "TargetTabletType": "PRIMARY",
  3652          "KsidLength": 1,
  3653          "KsidVindex": "user_index",
  3654          "MultiShardAutocommit": false,
  3655          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `name` = _binary 'abc' for update",
  3656          "Query": "delete from `user` where `name` = _binary 'abc'",
  3657          "Table": "user"
  3658        },
  3659        "TablesUsed": [
  3660          "user.user"
  3661        ]
  3662      },
  3663      "gen4-plan": {
  3664        "QueryType": "DELETE",
  3665        "Original": "delete from user where name = _binary 'abc'",
  3666        "Instructions": {
  3667          "OperatorType": "Delete",
  3668          "Variant": "Equal",
  3669          "Keyspace": {
  3670            "Name": "user",
  3671            "Sharded": true
  3672          },
  3673          "TargetTabletType": "PRIMARY",
  3674          "KsidLength": 1,
  3675          "KsidVindex": "user_index",
  3676          "MultiShardAutocommit": false,
  3677          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `name` = _binary 'abc' for update",
  3678          "Query": "delete from `user` where `name` = _binary 'abc'",
  3679          "Table": "user",
  3680          "Values": [
  3681            "VARBINARY(\"abc\")"
  3682          ],
  3683          "Vindex": "name_user_map"
  3684        },
  3685        "TablesUsed": [
  3686          "user.user"
  3687        ]
  3688      }
  3689    },
  3690    {
  3691      "comment": "delete with shard targeting",
  3692      "query": "delete from `user[-]`.user",
  3693      "plan": {
  3694        "QueryType": "DELETE",
  3695        "Original": "delete from `user[-]`.user",
  3696        "Instructions": {
  3697          "OperatorType": "Delete",
  3698          "Variant": "ByDestination",
  3699          "Keyspace": {
  3700            "Name": "user",
  3701            "Sharded": true
  3702          },
  3703          "TargetTabletType": "PRIMARY",
  3704          "KsidLength": 1,
  3705          "KsidVindex": "user_index",
  3706          "MultiShardAutocommit": false,
  3707          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update",
  3708          "Query": "delete from `user`",
  3709          "Table": "user"
  3710        },
  3711        "TablesUsed": [
  3712          "user.user"
  3713        ]
  3714      }
  3715    },
  3716    {
  3717      "comment": "update with shard targeting",
  3718      "query": "update `user[-]`.user set name = 'myname'",
  3719      "plan": {
  3720        "QueryType": "UPDATE",
  3721        "Original": "update `user[-]`.user set name = 'myname'",
  3722        "Instructions": {
  3723          "OperatorType": "Update",
  3724          "Variant": "ByDestination",
  3725          "Keyspace": {
  3726            "Name": "user",
  3727            "Sharded": true
  3728          },
  3729          "TargetTabletType": "PRIMARY",
  3730          "ChangedVindexValues": [
  3731            "name_user_map:3"
  3732          ],
  3733          "KsidLength": 1,
  3734          "KsidVindex": "user_index",
  3735          "MultiShardAutocommit": false,
  3736          "OwnedVindexQuery": "select Id, `Name`, Costly, `name` = 'myname' from `user` for update",
  3737          "Query": "update `user` set `name` = 'myname'",
  3738          "Table": "user"
  3739        },
  3740        "TablesUsed": [
  3741          "user.user"
  3742        ]
  3743      }
  3744    },
  3745    {
  3746      "comment": "update with shard targeting without vindex",
  3747      "query": "update `user[-]`.user_extra set val = 1",
  3748      "plan": {
  3749        "QueryType": "UPDATE",
  3750        "Original": "update `user[-]`.user_extra set val = 1",
  3751        "Instructions": {
  3752          "OperatorType": "Update",
  3753          "Variant": "ByDestination",
  3754          "Keyspace": {
  3755            "Name": "user",
  3756            "Sharded": true
  3757          },
  3758          "TargetTabletType": "PRIMARY",
  3759          "MultiShardAutocommit": false,
  3760          "Query": "update user_extra set val = 1",
  3761          "Table": "user_extra"
  3762        },
  3763        "TablesUsed": [
  3764          "user.user_extra"
  3765        ]
  3766      }
  3767    },
  3768    {
  3769      "comment": "multi-table delete with single table",
  3770      "query": "delete u.* from user u where u.id * u.col = u.foo",
  3771      "plan": {
  3772        "QueryType": "DELETE",
  3773        "Original": "delete u.* from user u where u.id * u.col = u.foo",
  3774        "Instructions": {
  3775          "OperatorType": "Delete",
  3776          "Variant": "Scatter",
  3777          "Keyspace": {
  3778            "Name": "user",
  3779            "Sharded": true
  3780          },
  3781          "TargetTabletType": "PRIMARY",
  3782          "KsidLength": 1,
  3783          "KsidVindex": "user_index",
  3784          "MultiShardAutocommit": false,
  3785          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where `user`.id * `user`.col = `user`.foo for update",
  3786          "Query": "delete from `user` where `user`.id * `user`.col = `user`.foo",
  3787          "Table": "user"
  3788        },
  3789        "TablesUsed": [
  3790          "user.user"
  3791        ]
  3792      }
  3793    },
  3794    {
  3795      "comment": "delete with unknown reference",
  3796      "query": "delete music from user where id = 1",
  3797      "plan": "VT03003: unknown table 'music' in MULTI DELETE"
  3798    },
  3799    {
  3800      "comment": "delete with derived tables",
  3801      "query": "delete music from (select * from user) music where id = 1",
  3802      "plan": "VT03004: the target table music of the DELETE is not updatable"
  3803    },
  3804    {
  3805      "comment": "delete with derived tables with unknown table",
  3806      "query": "delete user from (select * from user) music where id = 1",
  3807      "plan": "VT03003: unknown table 'user' in MULTI DELETE"
  3808    },
  3809    {
  3810      "comment": "INSERT INTO main.user_privacy_consents (user_id, accepted_at)  SELECT user_id, accepted_at FROM (SELECT 1 as user_id, 1629194864 as accepted_at) AS tmp WHERE NOT EXISTS (SELECT user_id FROM main.user_privacy_consents WHERE user_id = 1)",
  3811      "query": "INSERT INTO main.user_privacy_consents (user_id, accepted_at)  SELECT user_id, accepted_at FROM (SELECT 1 as user_id, 1629194864 as accepted_at) AS tmp WHERE NOT EXISTS (SELECT user_id FROM main.user_privacy_consents WHERE user_id = 1)",
  3812      "v3-plan": {
  3813        "QueryType": "INSERT",
  3814        "Original": "INSERT INTO main.user_privacy_consents (user_id, accepted_at)  SELECT user_id, accepted_at FROM (SELECT 1 as user_id, 1629194864 as accepted_at) AS tmp WHERE NOT EXISTS (SELECT user_id FROM main.user_privacy_consents WHERE user_id = 1)",
  3815        "Instructions": {
  3816          "OperatorType": "Insert",
  3817          "Variant": "Unsharded",
  3818          "Keyspace": {
  3819            "Name": "main",
  3820            "Sharded": false
  3821          },
  3822          "TargetTabletType": "PRIMARY",
  3823          "MultiShardAutocommit": false,
  3824          "Query": "insert into user_privacy_consents(user_id, accepted_at) select user_id, accepted_at from (select 1 as user_id, 1629194864 as accepted_at from dual) as tmp where not exists (select 1 from user_privacy_consents where user_id = 1 limit 1) for update",
  3825          "TableName": "user_privacy_consents"
  3826        },
  3827        "TablesUsed": [
  3828          "main.user_privacy_consents"
  3829        ]
  3830      },
  3831      "gen4-plan": {
  3832        "QueryType": "INSERT",
  3833        "Original": "INSERT INTO main.user_privacy_consents (user_id, accepted_at)  SELECT user_id, accepted_at FROM (SELECT 1 as user_id, 1629194864 as accepted_at) AS tmp WHERE NOT EXISTS (SELECT user_id FROM main.user_privacy_consents WHERE user_id = 1)",
  3834        "Instructions": {
  3835          "OperatorType": "Insert",
  3836          "Variant": "Unsharded",
  3837          "Keyspace": {
  3838            "Name": "main",
  3839            "Sharded": false
  3840          },
  3841          "TargetTabletType": "PRIMARY",
  3842          "MultiShardAutocommit": false,
  3843          "Query": "insert into user_privacy_consents(user_id, accepted_at) select user_id, accepted_at from (select 1 as user_id, 1629194864 as accepted_at from dual) as tmp where not exists (select 1 from user_privacy_consents where user_id = 1 limit 1) for update",
  3844          "TableName": "user_privacy_consents"
  3845        },
  3846        "TablesUsed": [
  3847          "main.dual",
  3848          "main.user_privacy_consents"
  3849        ]
  3850      }
  3851    },
  3852    {
  3853      "comment": "Delete on backfilling unique lookup vindex should be a scatter",
  3854      "query": "delete from zlookup_unique.t1 where c2 = 20",
  3855      "plan": {
  3856        "QueryType": "DELETE",
  3857        "Original": "delete from zlookup_unique.t1 where c2 = 20",
  3858        "Instructions": {
  3859          "OperatorType": "Delete",
  3860          "Variant": "Scatter",
  3861          "Keyspace": {
  3862            "Name": "zlookup_unique",
  3863            "Sharded": true
  3864          },
  3865          "TargetTabletType": "PRIMARY",
  3866          "KsidLength": 1,
  3867          "KsidVindex": "xxhash",
  3868          "MultiShardAutocommit": false,
  3869          "OwnedVindexQuery": "select c1, c2, c3 from t1 where c2 = 20 for update",
  3870          "Query": "delete from t1 where c2 = 20",
  3871          "Table": "t1"
  3872        },
  3873        "TablesUsed": [
  3874          "zlookup_unique.t1"
  3875        ]
  3876      }
  3877    },
  3878    {
  3879      "comment": "Update on backfilling unique lookup vindex should be a scatter",
  3880      "query": "update zlookup_unique.t1 set c2 = 1 where c2 = 20",
  3881      "plan": {
  3882        "QueryType": "UPDATE",
  3883        "Original": "update zlookup_unique.t1 set c2 = 1 where c2 = 20",
  3884        "Instructions": {
  3885          "OperatorType": "Update",
  3886          "Variant": "Scatter",
  3887          "Keyspace": {
  3888            "Name": "zlookup_unique",
  3889            "Sharded": true
  3890          },
  3891          "TargetTabletType": "PRIMARY",
  3892          "ChangedVindexValues": [
  3893            "lookup_t1:3"
  3894          ],
  3895          "KsidLength": 1,
  3896          "KsidVindex": "xxhash",
  3897          "MultiShardAutocommit": false,
  3898          "OwnedVindexQuery": "select c1, c2, c3, c2 = 1 from t1 where c2 = 20 for update",
  3899          "Query": "update t1 set c2 = 1 where c2 = 20",
  3900          "Table": "t1"
  3901        },
  3902        "TablesUsed": [
  3903          "zlookup_unique.t1"
  3904        ]
  3905      }
  3906    },
  3907    {
  3908      "comment": "Delete on backfilling and non-backfilling unique lookup vindexes should be a delete equal",
  3909      "query": "delete from zlookup_unique.t1 where c2 = 10 and c3 = 20",
  3910      "v3-plan": {
  3911        "QueryType": "DELETE",
  3912        "Original": "delete from zlookup_unique.t1 where c2 = 10 and c3 = 20",
  3913        "Instructions": {
  3914          "OperatorType": "Delete",
  3915          "Variant": "Equal",
  3916          "Keyspace": {
  3917            "Name": "zlookup_unique",
  3918            "Sharded": true
  3919          },
  3920          "TargetTabletType": "PRIMARY",
  3921          "KsidLength": 1,
  3922          "KsidVindex": "xxhash",
  3923          "MultiShardAutocommit": false,
  3924          "OwnedVindexQuery": "select c1, c2, c3 from t1 where c2 = 10 and c3 = 20 for update",
  3925          "Query": "delete from t1 where c2 = 10 and c3 = 20",
  3926          "Table": "t1",
  3927          "Values": [
  3928            "INT64(20)"
  3929          ],
  3930          "Vindex": "lookup_t1_2"
  3931        },
  3932        "TablesUsed": [
  3933          "zlookup_unique.t1"
  3934        ]
  3935      },
  3936      "gen4-plan": {
  3937        "QueryType": "DELETE",
  3938        "Original": "delete from zlookup_unique.t1 where c2 = 10 and c3 = 20",
  3939        "Instructions": {
  3940          "OperatorType": "Delete",
  3941          "Variant": "EqualUnique",
  3942          "Keyspace": {
  3943            "Name": "zlookup_unique",
  3944            "Sharded": true
  3945          },
  3946          "TargetTabletType": "PRIMARY",
  3947          "KsidLength": 1,
  3948          "KsidVindex": "xxhash",
  3949          "MultiShardAutocommit": false,
  3950          "OwnedVindexQuery": "select c1, c2, c3 from t1 where c2 = 10 and c3 = 20 for update",
  3951          "Query": "delete from t1 where c2 = 10 and c3 = 20",
  3952          "Table": "t1",
  3953          "Values": [
  3954            "INT64(20)"
  3955          ],
  3956          "Vindex": "lookup_t1_2"
  3957        },
  3958        "TablesUsed": [
  3959          "zlookup_unique.t1"
  3960        ]
  3961      }
  3962    },
  3963    {
  3964      "comment": "Update on backfilling and non-backfilling unique lookup vindexes should be an equal",
  3965      "query": "update zlookup_unique.t1 set c2 = 1 where c2 = 10 and c3 = 20",
  3966      "v3-plan": {
  3967        "QueryType": "UPDATE",
  3968        "Original": "update zlookup_unique.t1 set c2 = 1 where c2 = 10 and c3 = 20",
  3969        "Instructions": {
  3970          "OperatorType": "Update",
  3971          "Variant": "Equal",
  3972          "Keyspace": {
  3973            "Name": "zlookup_unique",
  3974            "Sharded": true
  3975          },
  3976          "TargetTabletType": "PRIMARY",
  3977          "ChangedVindexValues": [
  3978            "lookup_t1:3"
  3979          ],
  3980          "KsidLength": 1,
  3981          "KsidVindex": "xxhash",
  3982          "MultiShardAutocommit": false,
  3983          "OwnedVindexQuery": "select c1, c2, c3, c2 = 1 from t1 where c2 = 10 and c3 = 20 for update",
  3984          "Query": "update t1 set c2 = 1 where c2 = 10 and c3 = 20",
  3985          "Table": "t1",
  3986          "Values": [
  3987            "INT64(20)"
  3988          ],
  3989          "Vindex": "lookup_t1_2"
  3990        },
  3991        "TablesUsed": [
  3992          "zlookup_unique.t1"
  3993        ]
  3994      },
  3995      "gen4-plan": {
  3996        "QueryType": "UPDATE",
  3997        "Original": "update zlookup_unique.t1 set c2 = 1 where c2 = 10 and c3 = 20",
  3998        "Instructions": {
  3999          "OperatorType": "Update",
  4000          "Variant": "EqualUnique",
  4001          "Keyspace": {
  4002            "Name": "zlookup_unique",
  4003            "Sharded": true
  4004          },
  4005          "TargetTabletType": "PRIMARY",
  4006          "ChangedVindexValues": [
  4007            "lookup_t1:3"
  4008          ],
  4009          "KsidLength": 1,
  4010          "KsidVindex": "xxhash",
  4011          "MultiShardAutocommit": false,
  4012          "OwnedVindexQuery": "select c1, c2, c3, c2 = 1 from t1 where c2 = 10 and c3 = 20 for update",
  4013          "Query": "update t1 set c2 = 1 where c2 = 10 and c3 = 20",
  4014          "Table": "t1",
  4015          "Values": [
  4016            "INT64(20)"
  4017          ],
  4018          "Vindex": "lookup_t1_2"
  4019        },
  4020        "TablesUsed": [
  4021          "zlookup_unique.t1"
  4022        ]
  4023      }
  4024    },
  4025    {
  4026      "comment": "Delete EQUAL and IN on backfilling and non-backfilling unique lookup vindexes should be a delete IN",
  4027      "query": "delete from zlookup_unique.t1 where c2 = 10 and c3 in (20, 21)",
  4028      "plan": {
  4029        "QueryType": "DELETE",
  4030        "Original": "delete from zlookup_unique.t1 where c2 = 10 and c3 in (20, 21)",
  4031        "Instructions": {
  4032          "OperatorType": "Delete",
  4033          "Variant": "IN",
  4034          "Keyspace": {
  4035            "Name": "zlookup_unique",
  4036            "Sharded": true
  4037          },
  4038          "TargetTabletType": "PRIMARY",
  4039          "KsidLength": 1,
  4040          "KsidVindex": "xxhash",
  4041          "MultiShardAutocommit": false,
  4042          "OwnedVindexQuery": "select c1, c2, c3 from t1 where c2 = 10 and c3 in (20, 21) for update",
  4043          "Query": "delete from t1 where c2 = 10 and c3 in (20, 21)",
  4044          "Table": "t1",
  4045          "Values": [
  4046            "(INT64(20), INT64(21))"
  4047          ],
  4048          "Vindex": "lookup_t1_2"
  4049        },
  4050        "TablesUsed": [
  4051          "zlookup_unique.t1"
  4052        ]
  4053      }
  4054    },
  4055    {
  4056      "comment": "Update EQUAL and IN on backfilling and non-backfilling unique lookup vindexes should be an update IN",
  4057      "query": "update zlookup_unique.t1 set c2 = 1 where c2 = 10 and c3 in (20, 21)",
  4058      "plan": {
  4059        "QueryType": "UPDATE",
  4060        "Original": "update zlookup_unique.t1 set c2 = 1 where c2 = 10 and c3 in (20, 21)",
  4061        "Instructions": {
  4062          "OperatorType": "Update",
  4063          "Variant": "IN",
  4064          "Keyspace": {
  4065            "Name": "zlookup_unique",
  4066            "Sharded": true
  4067          },
  4068          "TargetTabletType": "PRIMARY",
  4069          "ChangedVindexValues": [
  4070            "lookup_t1:3"
  4071          ],
  4072          "KsidLength": 1,
  4073          "KsidVindex": "xxhash",
  4074          "MultiShardAutocommit": false,
  4075          "OwnedVindexQuery": "select c1, c2, c3, c2 = 1 from t1 where c2 = 10 and c3 in (20, 21) for update",
  4076          "Query": "update t1 set c2 = 1 where c2 = 10 and c3 in (20, 21)",
  4077          "Table": "t1",
  4078          "Values": [
  4079            "(INT64(20), INT64(21))"
  4080          ],
  4081          "Vindex": "lookup_t1_2"
  4082        },
  4083        "TablesUsed": [
  4084          "zlookup_unique.t1"
  4085        ]
  4086      }
  4087    },
  4088    {
  4089      "comment": "update with alias table",
  4090      "query": "update user u set u.name = 'john' where u.col > 20",
  4091      "plan": {
  4092        "QueryType": "UPDATE",
  4093        "Original": "update user u set u.name = 'john' where u.col > 20",
  4094        "Instructions": {
  4095          "OperatorType": "Update",
  4096          "Variant": "Scatter",
  4097          "Keyspace": {
  4098            "Name": "user",
  4099            "Sharded": true
  4100          },
  4101          "TargetTabletType": "PRIMARY",
  4102          "ChangedVindexValues": [
  4103            "name_user_map:3"
  4104          ],
  4105          "KsidLength": 1,
  4106          "KsidVindex": "user_index",
  4107          "MultiShardAutocommit": false,
  4108          "OwnedVindexQuery": "select Id, `Name`, Costly, u.`name` = 'john' from `user` as u where u.col > 20 for update",
  4109          "Query": "update `user` as u set u.`name` = 'john' where u.col > 20",
  4110          "Table": "user"
  4111        },
  4112        "TablesUsed": [
  4113          "user.user"
  4114        ]
  4115      }
  4116    },
  4117    {
  4118      "comment": "delete with alias table",
  4119      "query": "delete from user u where u.col > 20",
  4120      "plan": {
  4121        "QueryType": "DELETE",
  4122        "Original": "delete from user u where u.col > 20",
  4123        "Instructions": {
  4124          "OperatorType": "Delete",
  4125          "Variant": "Scatter",
  4126          "Keyspace": {
  4127            "Name": "user",
  4128            "Sharded": true
  4129          },
  4130          "TargetTabletType": "PRIMARY",
  4131          "KsidLength": 1,
  4132          "KsidVindex": "user_index",
  4133          "MultiShardAutocommit": false,
  4134          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` as u where u.col > 20 for update",
  4135          "Query": "delete from `user` as u where u.col > 20",
  4136          "Table": "user"
  4137        },
  4138        "TablesUsed": [
  4139          "user.user"
  4140        ]
  4141      }
  4142    },
  4143    {
  4144      "comment": "update with a multicol vindex",
  4145      "query": "update multicol_tbl set x = 1 where cola = 1 and colb = 2",
  4146      "v3-plan": {
  4147        "QueryType": "UPDATE",
  4148        "Original": "update multicol_tbl set x = 1 where cola = 1 and colb = 2",
  4149        "Instructions": {
  4150          "OperatorType": "Update",
  4151          "Variant": "Equal",
  4152          "Keyspace": {
  4153            "Name": "user",
  4154            "Sharded": true
  4155          },
  4156          "TargetTabletType": "PRIMARY",
  4157          "MultiShardAutocommit": false,
  4158          "Query": "update multicol_tbl set x = 1 where cola = 1 and colb = 2",
  4159          "Table": "multicol_tbl",
  4160          "Values": [
  4161            "INT64(1)",
  4162            "INT64(2)"
  4163          ],
  4164          "Vindex": "multicolIdx"
  4165        },
  4166        "TablesUsed": [
  4167          "user.multicol_tbl"
  4168        ]
  4169      },
  4170      "gen4-plan": {
  4171        "QueryType": "UPDATE",
  4172        "Original": "update multicol_tbl set x = 1 where cola = 1 and colb = 2",
  4173        "Instructions": {
  4174          "OperatorType": "Update",
  4175          "Variant": "EqualUnique",
  4176          "Keyspace": {
  4177            "Name": "user",
  4178            "Sharded": true
  4179          },
  4180          "TargetTabletType": "PRIMARY",
  4181          "MultiShardAutocommit": false,
  4182          "Query": "update multicol_tbl set x = 1 where cola = 1 and colb = 2",
  4183          "Table": "multicol_tbl",
  4184          "Values": [
  4185            "INT64(1)",
  4186            "INT64(2)"
  4187          ],
  4188          "Vindex": "multicolIdx"
  4189        },
  4190        "TablesUsed": [
  4191          "user.multicol_tbl"
  4192        ]
  4193      }
  4194    },
  4195    {
  4196      "comment": "update with a multicol vindex - reverse order",
  4197      "query": "update multicol_tbl set x = 1 where colb = 2 and cola = 1",
  4198      "v3-plan": {
  4199        "QueryType": "UPDATE",
  4200        "Original": "update multicol_tbl set x = 1 where colb = 2 and cola = 1",
  4201        "Instructions": {
  4202          "OperatorType": "Update",
  4203          "Variant": "Equal",
  4204          "Keyspace": {
  4205            "Name": "user",
  4206            "Sharded": true
  4207          },
  4208          "TargetTabletType": "PRIMARY",
  4209          "MultiShardAutocommit": false,
  4210          "Query": "update multicol_tbl set x = 1 where colb = 2 and cola = 1",
  4211          "Table": "multicol_tbl",
  4212          "Values": [
  4213            "INT64(1)",
  4214            "INT64(2)"
  4215          ],
  4216          "Vindex": "multicolIdx"
  4217        },
  4218        "TablesUsed": [
  4219          "user.multicol_tbl"
  4220        ]
  4221      },
  4222      "gen4-plan": {
  4223        "QueryType": "UPDATE",
  4224        "Original": "update multicol_tbl set x = 1 where colb = 2 and cola = 1",
  4225        "Instructions": {
  4226          "OperatorType": "Update",
  4227          "Variant": "EqualUnique",
  4228          "Keyspace": {
  4229            "Name": "user",
  4230            "Sharded": true
  4231          },
  4232          "TargetTabletType": "PRIMARY",
  4233          "MultiShardAutocommit": false,
  4234          "Query": "update multicol_tbl set x = 1 where colb = 2 and cola = 1",
  4235          "Table": "multicol_tbl",
  4236          "Values": [
  4237            "INT64(1)",
  4238            "INT64(2)"
  4239          ],
  4240          "Vindex": "multicolIdx"
  4241        },
  4242        "TablesUsed": [
  4243          "user.multicol_tbl"
  4244        ]
  4245      }
  4246    },
  4247    {
  4248      "comment": "update with a multicol vindex using an IN clause",
  4249      "query": "update multicol_tbl set x = 1 where colb IN (1,2) and cola = 1",
  4250      "plan": {
  4251        "QueryType": "UPDATE",
  4252        "Original": "update multicol_tbl set x = 1 where colb IN (1,2) and cola = 1",
  4253        "Instructions": {
  4254          "OperatorType": "Update",
  4255          "Variant": "IN",
  4256          "Keyspace": {
  4257            "Name": "user",
  4258            "Sharded": true
  4259          },
  4260          "TargetTabletType": "PRIMARY",
  4261          "MultiShardAutocommit": false,
  4262          "Query": "update multicol_tbl set x = 1 where colb in (1, 2) and cola = 1",
  4263          "Table": "multicol_tbl",
  4264          "Values": [
  4265            "INT64(1)",
  4266            "(INT64(1), INT64(2))"
  4267          ],
  4268          "Vindex": "multicolIdx"
  4269        },
  4270        "TablesUsed": [
  4271          "user.multicol_tbl"
  4272        ]
  4273      }
  4274    },
  4275    {
  4276      "comment": "update with a multicol vindex using an IN clause",
  4277      "query": "update multicol_tbl set x = 1 where colb IN (1,2) and cola IN (3,4)",
  4278      "plan": {
  4279        "QueryType": "UPDATE",
  4280        "Original": "update multicol_tbl set x = 1 where colb IN (1,2) and cola IN (3,4)",
  4281        "Instructions": {
  4282          "OperatorType": "Update",
  4283          "Variant": "IN",
  4284          "Keyspace": {
  4285            "Name": "user",
  4286            "Sharded": true
  4287          },
  4288          "TargetTabletType": "PRIMARY",
  4289          "MultiShardAutocommit": false,
  4290          "Query": "update multicol_tbl set x = 1 where colb in (1, 2) and cola in (3, 4)",
  4291          "Table": "multicol_tbl",
  4292          "Values": [
  4293            "(INT64(3), INT64(4))",
  4294            "(INT64(1), INT64(2))"
  4295          ],
  4296          "Vindex": "multicolIdx"
  4297        },
  4298        "TablesUsed": [
  4299          "user.multicol_tbl"
  4300        ]
  4301      }
  4302    },
  4303    {
  4304      "comment": "delete with a multicol vindex",
  4305      "query": "delete from multicol_tbl where cola = 1 and colb = 2",
  4306      "v3-plan": {
  4307        "QueryType": "DELETE",
  4308        "Original": "delete from multicol_tbl where cola = 1 and colb = 2",
  4309        "Instructions": {
  4310          "OperatorType": "Delete",
  4311          "Variant": "Equal",
  4312          "Keyspace": {
  4313            "Name": "user",
  4314            "Sharded": true
  4315          },
  4316          "TargetTabletType": "PRIMARY",
  4317          "KsidLength": 2,
  4318          "KsidVindex": "multicolIdx",
  4319          "MultiShardAutocommit": false,
  4320          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola = 1 and colb = 2 for update",
  4321          "Query": "delete from multicol_tbl where cola = 1 and colb = 2",
  4322          "Table": "multicol_tbl",
  4323          "Values": [
  4324            "INT64(1)",
  4325            "INT64(2)"
  4326          ],
  4327          "Vindex": "multicolIdx"
  4328        },
  4329        "TablesUsed": [
  4330          "user.multicol_tbl"
  4331        ]
  4332      },
  4333      "gen4-plan": {
  4334        "QueryType": "DELETE",
  4335        "Original": "delete from multicol_tbl where cola = 1 and colb = 2",
  4336        "Instructions": {
  4337          "OperatorType": "Delete",
  4338          "Variant": "EqualUnique",
  4339          "Keyspace": {
  4340            "Name": "user",
  4341            "Sharded": true
  4342          },
  4343          "TargetTabletType": "PRIMARY",
  4344          "KsidLength": 2,
  4345          "KsidVindex": "multicolIdx",
  4346          "MultiShardAutocommit": false,
  4347          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola = 1 and colb = 2 for update",
  4348          "Query": "delete from multicol_tbl where cola = 1 and colb = 2",
  4349          "Table": "multicol_tbl",
  4350          "Values": [
  4351            "INT64(1)",
  4352            "INT64(2)"
  4353          ],
  4354          "Vindex": "multicolIdx"
  4355        },
  4356        "TablesUsed": [
  4357          "user.multicol_tbl"
  4358        ]
  4359      }
  4360    },
  4361    {
  4362      "comment": "delete with a multicol vindex - reverse order",
  4363      "query": "delete from multicol_tbl where colb = 2 and cola = 1",
  4364      "v3-plan": {
  4365        "QueryType": "DELETE",
  4366        "Original": "delete from multicol_tbl where colb = 2 and cola = 1",
  4367        "Instructions": {
  4368          "OperatorType": "Delete",
  4369          "Variant": "Equal",
  4370          "Keyspace": {
  4371            "Name": "user",
  4372            "Sharded": true
  4373          },
  4374          "TargetTabletType": "PRIMARY",
  4375          "KsidLength": 2,
  4376          "KsidVindex": "multicolIdx",
  4377          "MultiShardAutocommit": false,
  4378          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where colb = 2 and cola = 1 for update",
  4379          "Query": "delete from multicol_tbl where colb = 2 and cola = 1",
  4380          "Table": "multicol_tbl",
  4381          "Values": [
  4382            "INT64(1)",
  4383            "INT64(2)"
  4384          ],
  4385          "Vindex": "multicolIdx"
  4386        },
  4387        "TablesUsed": [
  4388          "user.multicol_tbl"
  4389        ]
  4390      },
  4391      "gen4-plan": {
  4392        "QueryType": "DELETE",
  4393        "Original": "delete from multicol_tbl where colb = 2 and cola = 1",
  4394        "Instructions": {
  4395          "OperatorType": "Delete",
  4396          "Variant": "EqualUnique",
  4397          "Keyspace": {
  4398            "Name": "user",
  4399            "Sharded": true
  4400          },
  4401          "TargetTabletType": "PRIMARY",
  4402          "KsidLength": 2,
  4403          "KsidVindex": "multicolIdx",
  4404          "MultiShardAutocommit": false,
  4405          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where colb = 2 and cola = 1 for update",
  4406          "Query": "delete from multicol_tbl where colb = 2 and cola = 1",
  4407          "Table": "multicol_tbl",
  4408          "Values": [
  4409            "INT64(1)",
  4410            "INT64(2)"
  4411          ],
  4412          "Vindex": "multicolIdx"
  4413        },
  4414        "TablesUsed": [
  4415          "user.multicol_tbl"
  4416        ]
  4417      }
  4418    },
  4419    {
  4420      "comment": "delete with a multicol vindex using an IN clause",
  4421      "query": "delete from multicol_tbl where colb IN (1,2) and cola = 1",
  4422      "plan": {
  4423        "QueryType": "DELETE",
  4424        "Original": "delete from multicol_tbl where colb IN (1,2) and cola = 1",
  4425        "Instructions": {
  4426          "OperatorType": "Delete",
  4427          "Variant": "IN",
  4428          "Keyspace": {
  4429            "Name": "user",
  4430            "Sharded": true
  4431          },
  4432          "TargetTabletType": "PRIMARY",
  4433          "KsidLength": 2,
  4434          "KsidVindex": "multicolIdx",
  4435          "MultiShardAutocommit": false,
  4436          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where colb in (1, 2) and cola = 1 for update",
  4437          "Query": "delete from multicol_tbl where colb in (1, 2) and cola = 1",
  4438          "Table": "multicol_tbl",
  4439          "Values": [
  4440            "INT64(1)",
  4441            "(INT64(1), INT64(2))"
  4442          ],
  4443          "Vindex": "multicolIdx"
  4444        },
  4445        "TablesUsed": [
  4446          "user.multicol_tbl"
  4447        ]
  4448      }
  4449    },
  4450    {
  4451      "comment": "delete with a multicol vindex using an IN clause",
  4452      "query": "delete from multicol_tbl where colb IN (1,2) and cola IN (3,4)",
  4453      "plan": {
  4454        "QueryType": "DELETE",
  4455        "Original": "delete from multicol_tbl where colb IN (1,2) and cola IN (3,4)",
  4456        "Instructions": {
  4457          "OperatorType": "Delete",
  4458          "Variant": "IN",
  4459          "Keyspace": {
  4460            "Name": "user",
  4461            "Sharded": true
  4462          },
  4463          "TargetTabletType": "PRIMARY",
  4464          "KsidLength": 2,
  4465          "KsidVindex": "multicolIdx",
  4466          "MultiShardAutocommit": false,
  4467          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where colb in (1, 2) and cola in (3, 4) for update",
  4468          "Query": "delete from multicol_tbl where colb in (1, 2) and cola in (3, 4)",
  4469          "Table": "multicol_tbl",
  4470          "Values": [
  4471            "(INT64(3), INT64(4))",
  4472            "(INT64(1), INT64(2))"
  4473          ],
  4474          "Vindex": "multicolIdx"
  4475        },
  4476        "TablesUsed": [
  4477          "user.multicol_tbl"
  4478        ]
  4479      }
  4480    },
  4481    {
  4482      "comment": "update with multicol and an owned vindex which changes",
  4483      "query": "update multicol_tbl set colc = 1 where cola = 1 and colb = 2",
  4484      "v3-plan": {
  4485        "QueryType": "UPDATE",
  4486        "Original": "update multicol_tbl set colc = 1 where cola = 1 and colb = 2",
  4487        "Instructions": {
  4488          "OperatorType": "Update",
  4489          "Variant": "Equal",
  4490          "Keyspace": {
  4491            "Name": "user",
  4492            "Sharded": true
  4493          },
  4494          "TargetTabletType": "PRIMARY",
  4495          "ChangedVindexValues": [
  4496            "colc_map:4"
  4497          ],
  4498          "KsidLength": 2,
  4499          "KsidVindex": "multicolIdx",
  4500          "MultiShardAutocommit": false,
  4501          "OwnedVindexQuery": "select cola, colb, colc, `name`, colc = 1 from multicol_tbl where cola = 1 and colb = 2 for update",
  4502          "Query": "update multicol_tbl set colc = 1 where cola = 1 and colb = 2",
  4503          "Table": "multicol_tbl",
  4504          "Values": [
  4505            "INT64(1)",
  4506            "INT64(2)"
  4507          ],
  4508          "Vindex": "multicolIdx"
  4509        },
  4510        "TablesUsed": [
  4511          "user.multicol_tbl"
  4512        ]
  4513      },
  4514      "gen4-plan": {
  4515        "QueryType": "UPDATE",
  4516        "Original": "update multicol_tbl set colc = 1 where cola = 1 and colb = 2",
  4517        "Instructions": {
  4518          "OperatorType": "Update",
  4519          "Variant": "EqualUnique",
  4520          "Keyspace": {
  4521            "Name": "user",
  4522            "Sharded": true
  4523          },
  4524          "TargetTabletType": "PRIMARY",
  4525          "ChangedVindexValues": [
  4526            "colc_map:4"
  4527          ],
  4528          "KsidLength": 2,
  4529          "KsidVindex": "multicolIdx",
  4530          "MultiShardAutocommit": false,
  4531          "OwnedVindexQuery": "select cola, colb, colc, `name`, colc = 1 from multicol_tbl where cola = 1 and colb = 2 for update",
  4532          "Query": "update multicol_tbl set colc = 1 where cola = 1 and colb = 2",
  4533          "Table": "multicol_tbl",
  4534          "Values": [
  4535            "INT64(1)",
  4536            "INT64(2)"
  4537          ],
  4538          "Vindex": "multicolIdx"
  4539        },
  4540        "TablesUsed": [
  4541          "user.multicol_tbl"
  4542        ]
  4543      }
  4544    },
  4545    {
  4546      "comment": "update with routing using non-unique lookup vindex",
  4547      "query": "update multicol_tbl set x = 42 where name = 'foo'",
  4548      "plan": {
  4549        "QueryType": "UPDATE",
  4550        "Original": "update multicol_tbl set x = 42 where name = 'foo'",
  4551        "Instructions": {
  4552          "OperatorType": "Update",
  4553          "Variant": "Equal",
  4554          "Keyspace": {
  4555            "Name": "user",
  4556            "Sharded": true
  4557          },
  4558          "TargetTabletType": "PRIMARY",
  4559          "MultiShardAutocommit": false,
  4560          "Query": "update multicol_tbl set x = 42 where `name` = 'foo'",
  4561          "Table": "multicol_tbl",
  4562          "Values": [
  4563            "VARCHAR(\"foo\")"
  4564          ],
  4565          "Vindex": "name_muticoltbl_map"
  4566        },
  4567        "TablesUsed": [
  4568          "user.multicol_tbl"
  4569        ]
  4570      }
  4571    },
  4572    {
  4573      "comment": "update with routing using subsharding column",
  4574      "query": "update multicol_tbl set x = 42 where cola = 1",
  4575      "v3-plan": {
  4576        "QueryType": "UPDATE",
  4577        "Original": "update multicol_tbl set x = 42 where cola = 1",
  4578        "Instructions": {
  4579          "OperatorType": "Update",
  4580          "Variant": "Equal",
  4581          "Keyspace": {
  4582            "Name": "user",
  4583            "Sharded": true
  4584          },
  4585          "TargetTabletType": "PRIMARY",
  4586          "MultiShardAutocommit": false,
  4587          "Query": "update multicol_tbl set x = 42 where cola = 1",
  4588          "Table": "multicol_tbl",
  4589          "Values": [
  4590            "INT64(1)"
  4591          ],
  4592          "Vindex": "multicolIdx"
  4593        },
  4594        "TablesUsed": [
  4595          "user.multicol_tbl"
  4596        ]
  4597      },
  4598      "gen4-plan": {
  4599        "QueryType": "UPDATE",
  4600        "Original": "update multicol_tbl set x = 42 where cola = 1",
  4601        "Instructions": {
  4602          "OperatorType": "Update",
  4603          "Variant": "SubShard",
  4604          "Keyspace": {
  4605            "Name": "user",
  4606            "Sharded": true
  4607          },
  4608          "TargetTabletType": "PRIMARY",
  4609          "MultiShardAutocommit": false,
  4610          "Query": "update multicol_tbl set x = 42 where cola = 1",
  4611          "Table": "multicol_tbl",
  4612          "Values": [
  4613            "INT64(1)"
  4614          ],
  4615          "Vindex": "multicolIdx"
  4616        },
  4617        "TablesUsed": [
  4618          "user.multicol_tbl"
  4619        ]
  4620      }
  4621    },
  4622    {
  4623      "comment": "update with routing using subsharding column on lookup vindex",
  4624      "query": "update multicol_tbl set name = 'bar' where cola = 1",
  4625      "v3-plan": {
  4626        "QueryType": "UPDATE",
  4627        "Original": "update multicol_tbl set name = 'bar' where cola = 1",
  4628        "Instructions": {
  4629          "OperatorType": "Update",
  4630          "Variant": "Equal",
  4631          "Keyspace": {
  4632            "Name": "user",
  4633            "Sharded": true
  4634          },
  4635          "TargetTabletType": "PRIMARY",
  4636          "ChangedVindexValues": [
  4637            "name_muticoltbl_map:4"
  4638          ],
  4639          "KsidLength": 2,
  4640          "KsidVindex": "multicolIdx",
  4641          "MultiShardAutocommit": false,
  4642          "OwnedVindexQuery": "select cola, colb, colc, `name`, `name` = 'bar' from multicol_tbl where cola = 1 for update",
  4643          "Query": "update multicol_tbl set `name` = 'bar' where cola = 1",
  4644          "Table": "multicol_tbl",
  4645          "Values": [
  4646            "INT64(1)"
  4647          ],
  4648          "Vindex": "multicolIdx"
  4649        },
  4650        "TablesUsed": [
  4651          "user.multicol_tbl"
  4652        ]
  4653      },
  4654      "gen4-plan": {
  4655        "QueryType": "UPDATE",
  4656        "Original": "update multicol_tbl set name = 'bar' where cola = 1",
  4657        "Instructions": {
  4658          "OperatorType": "Update",
  4659          "Variant": "SubShard",
  4660          "Keyspace": {
  4661            "Name": "user",
  4662            "Sharded": true
  4663          },
  4664          "TargetTabletType": "PRIMARY",
  4665          "ChangedVindexValues": [
  4666            "name_muticoltbl_map:4"
  4667          ],
  4668          "KsidLength": 2,
  4669          "KsidVindex": "multicolIdx",
  4670          "MultiShardAutocommit": false,
  4671          "OwnedVindexQuery": "select cola, colb, colc, `name`, `name` = 'bar' from multicol_tbl where cola = 1 for update",
  4672          "Query": "update multicol_tbl set `name` = 'bar' where cola = 1",
  4673          "Table": "multicol_tbl",
  4674          "Values": [
  4675            "INT64(1)"
  4676          ],
  4677          "Vindex": "multicolIdx"
  4678        },
  4679        "TablesUsed": [
  4680          "user.multicol_tbl"
  4681        ]
  4682      }
  4683    },
  4684    {
  4685      "comment": "update with routing using subsharding column with in query",
  4686      "query": "update multicol_tbl set name = 'bar' where cola in (1,2)",
  4687      "plan": {
  4688        "QueryType": "UPDATE",
  4689        "Original": "update multicol_tbl set name = 'bar' where cola in (1,2)",
  4690        "Instructions": {
  4691          "OperatorType": "Update",
  4692          "Variant": "IN",
  4693          "Keyspace": {
  4694            "Name": "user",
  4695            "Sharded": true
  4696          },
  4697          "TargetTabletType": "PRIMARY",
  4698          "ChangedVindexValues": [
  4699            "name_muticoltbl_map:4"
  4700          ],
  4701          "KsidLength": 2,
  4702          "KsidVindex": "multicolIdx",
  4703          "MultiShardAutocommit": false,
  4704          "OwnedVindexQuery": "select cola, colb, colc, `name`, `name` = 'bar' from multicol_tbl where cola in (1, 2) for update",
  4705          "Query": "update multicol_tbl set `name` = 'bar' where cola in (1, 2)",
  4706          "Table": "multicol_tbl",
  4707          "Values": [
  4708            "(INT64(1), INT64(2))"
  4709          ],
  4710          "Vindex": "multicolIdx"
  4711        },
  4712        "TablesUsed": [
  4713          "user.multicol_tbl"
  4714        ]
  4715      }
  4716    },
  4717    {
  4718      "comment": "update with routing using subsharding column with in query as lower cost over lookup vindex",
  4719      "query": "update multicol_tbl set x = 1 where name = 'foo' and cola = 2",
  4720      "v3-plan": {
  4721        "QueryType": "UPDATE",
  4722        "Original": "update multicol_tbl set x = 1 where name = 'foo' and cola = 2",
  4723        "Instructions": {
  4724          "OperatorType": "Update",
  4725          "Variant": "Equal",
  4726          "Keyspace": {
  4727            "Name": "user",
  4728            "Sharded": true
  4729          },
  4730          "TargetTabletType": "PRIMARY",
  4731          "MultiShardAutocommit": false,
  4732          "Query": "update multicol_tbl set x = 1 where `name` = 'foo' and cola = 2",
  4733          "Table": "multicol_tbl",
  4734          "Values": [
  4735            "INT64(2)"
  4736          ],
  4737          "Vindex": "multicolIdx"
  4738        },
  4739        "TablesUsed": [
  4740          "user.multicol_tbl"
  4741        ]
  4742      },
  4743      "gen4-plan": {
  4744        "QueryType": "UPDATE",
  4745        "Original": "update multicol_tbl set x = 1 where name = 'foo' and cola = 2",
  4746        "Instructions": {
  4747          "OperatorType": "Update",
  4748          "Variant": "Equal",
  4749          "Keyspace": {
  4750            "Name": "user",
  4751            "Sharded": true
  4752          },
  4753          "TargetTabletType": "PRIMARY",
  4754          "MultiShardAutocommit": false,
  4755          "Query": "update multicol_tbl set x = 1 where `name` = 'foo' and cola = 2",
  4756          "Table": "multicol_tbl",
  4757          "Values": [
  4758            "VARCHAR(\"foo\")"
  4759          ],
  4760          "Vindex": "name_muticoltbl_map"
  4761        },
  4762        "TablesUsed": [
  4763          "user.multicol_tbl"
  4764        ]
  4765      }
  4766    },
  4767    {
  4768      "comment": "delete with routing using non-unique lookup vindex",
  4769      "query": "delete from multicol_tbl where name = 'foo'",
  4770      "plan": {
  4771        "QueryType": "DELETE",
  4772        "Original": "delete from multicol_tbl where name = 'foo'",
  4773        "Instructions": {
  4774          "OperatorType": "Delete",
  4775          "Variant": "Equal",
  4776          "Keyspace": {
  4777            "Name": "user",
  4778            "Sharded": true
  4779          },
  4780          "TargetTabletType": "PRIMARY",
  4781          "KsidLength": 2,
  4782          "KsidVindex": "multicolIdx",
  4783          "MultiShardAutocommit": false,
  4784          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where `name` = 'foo' for update",
  4785          "Query": "delete from multicol_tbl where `name` = 'foo'",
  4786          "Table": "multicol_tbl",
  4787          "Values": [
  4788            "VARCHAR(\"foo\")"
  4789          ],
  4790          "Vindex": "name_muticoltbl_map"
  4791        },
  4792        "TablesUsed": [
  4793          "user.multicol_tbl"
  4794        ]
  4795      }
  4796    },
  4797    {
  4798      "comment": "delete with routing using subsharding column",
  4799      "query": "delete from multicol_tbl where cola = 1",
  4800      "v3-plan": {
  4801        "QueryType": "DELETE",
  4802        "Original": "delete from multicol_tbl where cola = 1",
  4803        "Instructions": {
  4804          "OperatorType": "Delete",
  4805          "Variant": "Equal",
  4806          "Keyspace": {
  4807            "Name": "user",
  4808            "Sharded": true
  4809          },
  4810          "TargetTabletType": "PRIMARY",
  4811          "KsidLength": 2,
  4812          "KsidVindex": "multicolIdx",
  4813          "MultiShardAutocommit": false,
  4814          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola = 1 for update",
  4815          "Query": "delete from multicol_tbl where cola = 1",
  4816          "Table": "multicol_tbl",
  4817          "Values": [
  4818            "INT64(1)"
  4819          ],
  4820          "Vindex": "multicolIdx"
  4821        },
  4822        "TablesUsed": [
  4823          "user.multicol_tbl"
  4824        ]
  4825      },
  4826      "gen4-plan": {
  4827        "QueryType": "DELETE",
  4828        "Original": "delete from multicol_tbl where cola = 1",
  4829        "Instructions": {
  4830          "OperatorType": "Delete",
  4831          "Variant": "SubShard",
  4832          "Keyspace": {
  4833            "Name": "user",
  4834            "Sharded": true
  4835          },
  4836          "TargetTabletType": "PRIMARY",
  4837          "KsidLength": 2,
  4838          "KsidVindex": "multicolIdx",
  4839          "MultiShardAutocommit": false,
  4840          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola = 1 for update",
  4841          "Query": "delete from multicol_tbl where cola = 1",
  4842          "Table": "multicol_tbl",
  4843          "Values": [
  4844            "INT64(1)"
  4845          ],
  4846          "Vindex": "multicolIdx"
  4847        },
  4848        "TablesUsed": [
  4849          "user.multicol_tbl"
  4850        ]
  4851      }
  4852    },
  4853    {
  4854      "comment": "delete with routing using subsharding column with in query",
  4855      "query": "delete from multicol_tbl where cola in (1,2)",
  4856      "plan": {
  4857        "QueryType": "DELETE",
  4858        "Original": "delete from multicol_tbl where cola in (1,2)",
  4859        "Instructions": {
  4860          "OperatorType": "Delete",
  4861          "Variant": "IN",
  4862          "Keyspace": {
  4863            "Name": "user",
  4864            "Sharded": true
  4865          },
  4866          "TargetTabletType": "PRIMARY",
  4867          "KsidLength": 2,
  4868          "KsidVindex": "multicolIdx",
  4869          "MultiShardAutocommit": false,
  4870          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where cola in (1, 2) for update",
  4871          "Query": "delete from multicol_tbl where cola in (1, 2)",
  4872          "Table": "multicol_tbl",
  4873          "Values": [
  4874            "(INT64(1), INT64(2))"
  4875          ],
  4876          "Vindex": "multicolIdx"
  4877        },
  4878        "TablesUsed": [
  4879          "user.multicol_tbl"
  4880        ]
  4881      }
  4882    },
  4883    {
  4884      "comment": "delete with routing using subsharding column with in query as lower cost over lookup vindex",
  4885      "query": "delete from multicol_tbl where name = 'foo' and cola = 2",
  4886      "v3-plan": {
  4887        "QueryType": "DELETE",
  4888        "Original": "delete from multicol_tbl where name = 'foo' and cola = 2",
  4889        "Instructions": {
  4890          "OperatorType": "Delete",
  4891          "Variant": "Equal",
  4892          "Keyspace": {
  4893            "Name": "user",
  4894            "Sharded": true
  4895          },
  4896          "TargetTabletType": "PRIMARY",
  4897          "KsidLength": 2,
  4898          "KsidVindex": "multicolIdx",
  4899          "MultiShardAutocommit": false,
  4900          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where `name` = 'foo' and cola = 2 for update",
  4901          "Query": "delete from multicol_tbl where `name` = 'foo' and cola = 2",
  4902          "Table": "multicol_tbl",
  4903          "Values": [
  4904            "INT64(2)"
  4905          ],
  4906          "Vindex": "multicolIdx"
  4907        },
  4908        "TablesUsed": [
  4909          "user.multicol_tbl"
  4910        ]
  4911      },
  4912      "gen4-plan": {
  4913        "QueryType": "DELETE",
  4914        "Original": "delete from multicol_tbl where name = 'foo' and cola = 2",
  4915        "Instructions": {
  4916          "OperatorType": "Delete",
  4917          "Variant": "Equal",
  4918          "Keyspace": {
  4919            "Name": "user",
  4920            "Sharded": true
  4921          },
  4922          "TargetTabletType": "PRIMARY",
  4923          "KsidLength": 2,
  4924          "KsidVindex": "multicolIdx",
  4925          "MultiShardAutocommit": false,
  4926          "OwnedVindexQuery": "select cola, colb, colc, `name` from multicol_tbl where `name` = 'foo' and cola = 2 for update",
  4927          "Query": "delete from multicol_tbl where `name` = 'foo' and cola = 2",
  4928          "Table": "multicol_tbl",
  4929          "Values": [
  4930            "VARCHAR(\"foo\")"
  4931          ],
  4932          "Vindex": "name_muticoltbl_map"
  4933        },
  4934        "TablesUsed": [
  4935          "user.multicol_tbl"
  4936        ]
  4937      }
  4938    },
  4939    {
  4940      "comment": "insert using select with simple table.",
  4941      "query": "insert into music(id, user_id) select * from user",
  4942      "v3-plan": {
  4943        "QueryType": "INSERT",
  4944        "Original": "insert into music(id, user_id) select * from user",
  4945        "Instructions": {
  4946          "OperatorType": "Insert",
  4947          "Variant": "Select",
  4948          "Keyspace": {
  4949            "Name": "user",
  4950            "Sharded": true
  4951          },
  4952          "TargetTabletType": "PRIMARY",
  4953          "MultiShardAutocommit": false,
  4954          "TableName": "music",
  4955          "VindexOffsetFromSelect": {
  4956            "music_user_map": "[0]",
  4957            "user_index": "[1]"
  4958          },
  4959          "Inputs": [
  4960            {
  4961              "OperatorType": "Route",
  4962              "Variant": "Scatter",
  4963              "Keyspace": {
  4964                "Name": "user",
  4965                "Sharded": true
  4966              },
  4967              "FieldQuery": "select * from `user` where 1 != 1",
  4968              "Query": "select * from `user` for update",
  4969              "Table": "`user`"
  4970            }
  4971          ]
  4972        },
  4973        "TablesUsed": [
  4974          "user.music"
  4975        ]
  4976      },
  4977      "gen4-plan": {
  4978        "QueryType": "INSERT",
  4979        "Original": "insert into music(id, user_id) select * from user",
  4980        "Instructions": {
  4981          "OperatorType": "Insert",
  4982          "Variant": "Select",
  4983          "Keyspace": {
  4984            "Name": "user",
  4985            "Sharded": true
  4986          },
  4987          "TargetTabletType": "PRIMARY",
  4988          "MultiShardAutocommit": false,
  4989          "TableName": "music",
  4990          "VindexOffsetFromSelect": {
  4991            "music_user_map": "[0]",
  4992            "user_index": "[1]"
  4993          },
  4994          "Inputs": [
  4995            {
  4996              "OperatorType": "Route",
  4997              "Variant": "Scatter",
  4998              "Keyspace": {
  4999                "Name": "user",
  5000                "Sharded": true
  5001              },
  5002              "FieldQuery": "select * from `user` where 1 != 1",
  5003              "Query": "select * from `user` for update",
  5004              "Table": "`user`"
  5005            }
  5006          ]
  5007        },
  5008        "TablesUsed": [
  5009          "user.music",
  5010          "user.user"
  5011        ]
  5012      }
  5013    },
  5014    {
  5015      "comment": "insert using select with more columns in insert",
  5016      "query": "insert into music(id, user_id) select 1",
  5017      "plan": "VT03006: column count does not match value count at row 1"
  5018    },
  5019    {
  5020      "comment": "insert using select with more columns in select",
  5021      "query": "insert into music(id, user_id) select id, count(user_id), sum(user_id) from user group by id",
  5022      "plan": "VT03006: column count does not match value count at row 1"
  5023    },
  5024    {
  5025      "comment": "insert using select with more columns in select after accounting for star column",
  5026      "query": "insert into music(id, user_id) select id, *, 2 from user",
  5027      "plan": "VT03006: column count does not match value count at row 1"
  5028    },
  5029    {
  5030      "comment": "insert using select with auto-inc column using vitess sequence, sequence column not present",
  5031      "query": "insert into user_extra(user_id) select id from user",
  5032      "v3-plan": {
  5033        "QueryType": "INSERT",
  5034        "Original": "insert into user_extra(user_id) select id from user",
  5035        "Instructions": {
  5036          "OperatorType": "Insert",
  5037          "Variant": "Select",
  5038          "Keyspace": {
  5039            "Name": "user",
  5040            "Sharded": true
  5041          },
  5042          "TargetTabletType": "PRIMARY",
  5043          "AutoIncrement": "main:1",
  5044          "MultiShardAutocommit": false,
  5045          "TableName": "user_extra",
  5046          "VindexOffsetFromSelect": {
  5047            "user_index": "[0]"
  5048          },
  5049          "Inputs": [
  5050            {
  5051              "OperatorType": "Route",
  5052              "Variant": "Scatter",
  5053              "Keyspace": {
  5054                "Name": "user",
  5055                "Sharded": true
  5056              },
  5057              "FieldQuery": "select id from `user` where 1 != 1",
  5058              "Query": "select id from `user` for update",
  5059              "Table": "`user`"
  5060            }
  5061          ]
  5062        },
  5063        "TablesUsed": [
  5064          "user.user_extra"
  5065        ]
  5066      },
  5067      "gen4-plan": {
  5068        "QueryType": "INSERT",
  5069        "Original": "insert into user_extra(user_id) select id from user",
  5070        "Instructions": {
  5071          "OperatorType": "Insert",
  5072          "Variant": "Select",
  5073          "Keyspace": {
  5074            "Name": "user",
  5075            "Sharded": true
  5076          },
  5077          "TargetTabletType": "PRIMARY",
  5078          "AutoIncrement": "main:1",
  5079          "MultiShardAutocommit": false,
  5080          "TableName": "user_extra",
  5081          "VindexOffsetFromSelect": {
  5082            "user_index": "[0]"
  5083          },
  5084          "Inputs": [
  5085            {
  5086              "OperatorType": "Route",
  5087              "Variant": "Scatter",
  5088              "Keyspace": {
  5089                "Name": "user",
  5090                "Sharded": true
  5091              },
  5092              "FieldQuery": "select id from `user` where 1 != 1",
  5093              "Query": "select id from `user` for update",
  5094              "Table": "`user`"
  5095            }
  5096          ]
  5097        },
  5098        "TablesUsed": [
  5099          "user.user",
  5100          "user.user_extra"
  5101        ]
  5102      }
  5103    },
  5104    {
  5105      "comment": "insert using select with auto-inc column using vitess sequence, sequence column present",
  5106      "query": "insert into user_extra(id, user_id) select null, id from user",
  5107      "v3-plan": {
  5108        "QueryType": "INSERT",
  5109        "Original": "insert into user_extra(id, user_id) select null, id from user",
  5110        "Instructions": {
  5111          "OperatorType": "Insert",
  5112          "Variant": "Select",
  5113          "Keyspace": {
  5114            "Name": "user",
  5115            "Sharded": true
  5116          },
  5117          "TargetTabletType": "PRIMARY",
  5118          "AutoIncrement": "main:2",
  5119          "MultiShardAutocommit": false,
  5120          "TableName": "user_extra",
  5121          "VindexOffsetFromSelect": {
  5122            "user_index": "[1]"
  5123          },
  5124          "Inputs": [
  5125            {
  5126              "OperatorType": "Route",
  5127              "Variant": "Scatter",
  5128              "Keyspace": {
  5129                "Name": "user",
  5130                "Sharded": true
  5131              },
  5132              "FieldQuery": "select null, id from `user` where 1 != 1",
  5133              "Query": "select null, id from `user` for update",
  5134              "Table": "`user`"
  5135            }
  5136          ]
  5137        },
  5138        "TablesUsed": [
  5139          "user.user_extra"
  5140        ]
  5141      },
  5142      "gen4-plan": {
  5143        "QueryType": "INSERT",
  5144        "Original": "insert into user_extra(id, user_id) select null, id from user",
  5145        "Instructions": {
  5146          "OperatorType": "Insert",
  5147          "Variant": "Select",
  5148          "Keyspace": {
  5149            "Name": "user",
  5150            "Sharded": true
  5151          },
  5152          "TargetTabletType": "PRIMARY",
  5153          "AutoIncrement": "main:2",
  5154          "MultiShardAutocommit": false,
  5155          "TableName": "user_extra",
  5156          "VindexOffsetFromSelect": {
  5157            "user_index": "[1]"
  5158          },
  5159          "Inputs": [
  5160            {
  5161              "OperatorType": "Route",
  5162              "Variant": "Scatter",
  5163              "Keyspace": {
  5164                "Name": "user",
  5165                "Sharded": true
  5166              },
  5167              "FieldQuery": "select null, id from `user` where 1 != 1",
  5168              "Query": "select null, id from `user` for update",
  5169              "Table": "`user`"
  5170            }
  5171          ]
  5172        },
  5173        "TablesUsed": [
  5174          "user.user",
  5175          "user.user_extra"
  5176        ]
  5177      }
  5178    },
  5179    {
  5180      "comment": "sharded insert from select",
  5181      "query": "insert into user(id) select 1 from dual",
  5182      "v3-plan": {
  5183        "QueryType": "INSERT",
  5184        "Original": "insert into user(id) select 1 from dual",
  5185        "Instructions": {
  5186          "OperatorType": "Insert",
  5187          "Variant": "Select",
  5188          "Keyspace": {
  5189            "Name": "user",
  5190            "Sharded": true
  5191          },
  5192          "TargetTabletType": "PRIMARY",
  5193          "AutoIncrement": "main:0",
  5194          "MultiShardAutocommit": false,
  5195          "TableName": "user",
  5196          "VindexOffsetFromSelect": {
  5197            "costly_map": "[-1]",
  5198            "name_user_map": "[-1]",
  5199            "user_index": "[0]"
  5200          },
  5201          "Inputs": [
  5202            {
  5203              "OperatorType": "Projection",
  5204              "Expressions": [
  5205                "INT64(1) as 1"
  5206              ],
  5207              "Inputs": [
  5208                {
  5209                  "OperatorType": "SingleRow"
  5210                }
  5211              ]
  5212            }
  5213          ]
  5214        },
  5215        "TablesUsed": [
  5216          "user.user"
  5217        ]
  5218      },
  5219      "gen4-plan": {
  5220        "QueryType": "INSERT",
  5221        "Original": "insert into user(id) select 1 from dual",
  5222        "Instructions": {
  5223          "OperatorType": "Insert",
  5224          "Variant": "Select",
  5225          "Keyspace": {
  5226            "Name": "user",
  5227            "Sharded": true
  5228          },
  5229          "TargetTabletType": "PRIMARY",
  5230          "AutoIncrement": "main:0",
  5231          "MultiShardAutocommit": false,
  5232          "TableName": "user",
  5233          "VindexOffsetFromSelect": {
  5234            "costly_map": "[-1]",
  5235            "name_user_map": "[-1]",
  5236            "user_index": "[0]"
  5237          },
  5238          "Inputs": [
  5239            {
  5240              "OperatorType": "Projection",
  5241              "Expressions": [
  5242                "INT64(1) as 1"
  5243              ],
  5244              "Inputs": [
  5245                {
  5246                  "OperatorType": "SingleRow"
  5247                }
  5248              ]
  5249            }
  5250          ]
  5251        },
  5252        "TablesUsed": [
  5253          "main.dual",
  5254          "user.user"
  5255        ]
  5256      }
  5257    },
  5258    {
  5259      "comment": "insert using select with sharding column is autoinc and not present in the insert column query",
  5260      "query": "insert into user(pattern) SELECT 1",
  5261      "v3-plan": {
  5262        "QueryType": "INSERT",
  5263        "Original": "insert into user(pattern) SELECT 1",
  5264        "Instructions": {
  5265          "OperatorType": "Insert",
  5266          "Variant": "Select",
  5267          "Keyspace": {
  5268            "Name": "user",
  5269            "Sharded": true
  5270          },
  5271          "TargetTabletType": "PRIMARY",
  5272          "AutoIncrement": "main:1",
  5273          "MultiShardAutocommit": false,
  5274          "TableName": "user",
  5275          "VindexOffsetFromSelect": {
  5276            "costly_map": "[-1]",
  5277            "name_user_map": "[-1]",
  5278            "user_index": "[1]"
  5279          },
  5280          "Inputs": [
  5281            {
  5282              "OperatorType": "Projection",
  5283              "Expressions": [
  5284                "INT64(1) as 1"
  5285              ],
  5286              "Inputs": [
  5287                {
  5288                  "OperatorType": "SingleRow"
  5289                }
  5290              ]
  5291            }
  5292          ]
  5293        },
  5294        "TablesUsed": [
  5295          "user.user"
  5296        ]
  5297      },
  5298      "gen4-plan": {
  5299        "QueryType": "INSERT",
  5300        "Original": "insert into user(pattern) SELECT 1",
  5301        "Instructions": {
  5302          "OperatorType": "Insert",
  5303          "Variant": "Select",
  5304          "Keyspace": {
  5305            "Name": "user",
  5306            "Sharded": true
  5307          },
  5308          "TargetTabletType": "PRIMARY",
  5309          "AutoIncrement": "main:1",
  5310          "MultiShardAutocommit": false,
  5311          "TableName": "user",
  5312          "VindexOffsetFromSelect": {
  5313            "costly_map": "[-1]",
  5314            "name_user_map": "[-1]",
  5315            "user_index": "[1]"
  5316          },
  5317          "Inputs": [
  5318            {
  5319              "OperatorType": "Projection",
  5320              "Expressions": [
  5321                "INT64(1) as 1"
  5322              ],
  5323              "Inputs": [
  5324                {
  5325                  "OperatorType": "SingleRow"
  5326                }
  5327              ]
  5328            }
  5329          ]
  5330        },
  5331        "TablesUsed": [
  5332          "main.dual",
  5333          "user.user"
  5334        ]
  5335      }
  5336    },
  5337    {
  5338      "comment": "insert using select with sharding column is not an autoinc and not present in the insert column query",
  5339      "query": "insert into user_extra(pattern) SELECT 1",
  5340      "plan": "VT09003: INSERT query does not have primary vindex column 'user_id' in the column list"
  5341    },
  5342    {
  5343      "comment": "sharded same keyspace",
  5344      "query": "insert into user_extra(user_id, col) select col1, col2 from user",
  5345      "v3-plan": {
  5346        "QueryType": "INSERT",
  5347        "Original": "insert into user_extra(user_id, col) select col1, col2 from user",
  5348        "Instructions": {
  5349          "OperatorType": "Insert",
  5350          "Variant": "Select",
  5351          "Keyspace": {
  5352            "Name": "user",
  5353            "Sharded": true
  5354          },
  5355          "TargetTabletType": "PRIMARY",
  5356          "AutoIncrement": "main:2",
  5357          "MultiShardAutocommit": false,
  5358          "TableName": "user_extra",
  5359          "VindexOffsetFromSelect": {
  5360            "user_index": "[0]"
  5361          },
  5362          "Inputs": [
  5363            {
  5364              "OperatorType": "Route",
  5365              "Variant": "Scatter",
  5366              "Keyspace": {
  5367                "Name": "user",
  5368                "Sharded": true
  5369              },
  5370              "FieldQuery": "select col1, col2 from `user` where 1 != 1",
  5371              "Query": "select col1, col2 from `user` for update",
  5372              "Table": "`user`"
  5373            }
  5374          ]
  5375        },
  5376        "TablesUsed": [
  5377          "user.user_extra"
  5378        ]
  5379      },
  5380      "gen4-plan": {
  5381        "QueryType": "INSERT",
  5382        "Original": "insert into user_extra(user_id, col) select col1, col2 from user",
  5383        "Instructions": {
  5384          "OperatorType": "Insert",
  5385          "Variant": "Select",
  5386          "Keyspace": {
  5387            "Name": "user",
  5388            "Sharded": true
  5389          },
  5390          "TargetTabletType": "PRIMARY",
  5391          "AutoIncrement": "main:2",
  5392          "MultiShardAutocommit": false,
  5393          "TableName": "user_extra",
  5394          "VindexOffsetFromSelect": {
  5395            "user_index": "[0]"
  5396          },
  5397          "Inputs": [
  5398            {
  5399              "OperatorType": "Route",
  5400              "Variant": "Scatter",
  5401              "Keyspace": {
  5402                "Name": "user",
  5403                "Sharded": true
  5404              },
  5405              "FieldQuery": "select col1, col2 from `user` where 1 != 1",
  5406              "Query": "select col1, col2 from `user` for update",
  5407              "Table": "`user`"
  5408            }
  5409          ]
  5410        },
  5411        "TablesUsed": [
  5412          "user.user",
  5413          "user.user_extra"
  5414        ]
  5415      }
  5416    },
  5417    {
  5418      "comment": "unsharded same keyspace",
  5419      "query": "insert into unsharded(col) select col from unsharded_auto",
  5420      "v3-plan": {
  5421        "QueryType": "INSERT",
  5422        "Original": "insert into unsharded(col) select col from unsharded_auto",
  5423        "Instructions": {
  5424          "OperatorType": "Insert",
  5425          "Variant": "Unsharded",
  5426          "Keyspace": {
  5427            "Name": "main",
  5428            "Sharded": false
  5429          },
  5430          "TargetTabletType": "PRIMARY",
  5431          "MultiShardAutocommit": false,
  5432          "Query": "insert into unsharded(col) select col from unsharded_auto for update",
  5433          "TableName": "unsharded"
  5434        },
  5435        "TablesUsed": [
  5436          "main.unsharded"
  5437        ]
  5438      },
  5439      "gen4-plan": {
  5440        "QueryType": "INSERT",
  5441        "Original": "insert into unsharded(col) select col from unsharded_auto",
  5442        "Instructions": {
  5443          "OperatorType": "Insert",
  5444          "Variant": "Unsharded",
  5445          "Keyspace": {
  5446            "Name": "main",
  5447            "Sharded": false
  5448          },
  5449          "TargetTabletType": "PRIMARY",
  5450          "MultiShardAutocommit": false,
  5451          "Query": "insert into unsharded(col) select col from unsharded_auto for update",
  5452          "TableName": "unsharded"
  5453        },
  5454        "TablesUsed": [
  5455          "main.unsharded",
  5456          "main.unsharded_auto"
  5457        ]
  5458      }
  5459    },
  5460    {
  5461      "comment": "sharded different keyspace",
  5462      "query": "insert into user_extra(user_id, col) select col1, col2 from t1",
  5463      "v3-plan": {
  5464        "QueryType": "INSERT",
  5465        "Original": "insert into user_extra(user_id, col) select col1, col2 from t1",
  5466        "Instructions": {
  5467          "OperatorType": "Insert",
  5468          "Variant": "Select",
  5469          "Keyspace": {
  5470            "Name": "user",
  5471            "Sharded": true
  5472          },
  5473          "TargetTabletType": "PRIMARY",
  5474          "AutoIncrement": "main:2",
  5475          "MultiShardAutocommit": false,
  5476          "TableName": "user_extra",
  5477          "VindexOffsetFromSelect": {
  5478            "user_index": "[0]"
  5479          },
  5480          "Inputs": [
  5481            {
  5482              "OperatorType": "Route",
  5483              "Variant": "Scatter",
  5484              "Keyspace": {
  5485                "Name": "zlookup_unique",
  5486                "Sharded": true
  5487              },
  5488              "FieldQuery": "select col1, col2 from t1 where 1 != 1",
  5489              "Query": "select col1, col2 from t1 for update",
  5490              "Table": "t1"
  5491            }
  5492          ]
  5493        },
  5494        "TablesUsed": [
  5495          "user.user_extra"
  5496        ]
  5497      },
  5498      "gen4-plan": {
  5499        "QueryType": "INSERT",
  5500        "Original": "insert into user_extra(user_id, col) select col1, col2 from t1",
  5501        "Instructions": {
  5502          "OperatorType": "Insert",
  5503          "Variant": "Select",
  5504          "Keyspace": {
  5505            "Name": "user",
  5506            "Sharded": true
  5507          },
  5508          "TargetTabletType": "PRIMARY",
  5509          "AutoIncrement": "main:2",
  5510          "MultiShardAutocommit": false,
  5511          "TableName": "user_extra",
  5512          "VindexOffsetFromSelect": {
  5513            "user_index": "[0]"
  5514          },
  5515          "Inputs": [
  5516            {
  5517              "OperatorType": "Route",
  5518              "Variant": "Scatter",
  5519              "Keyspace": {
  5520                "Name": "zlookup_unique",
  5521                "Sharded": true
  5522              },
  5523              "FieldQuery": "select col1, col2 from t1 where 1 != 1",
  5524              "Query": "select col1, col2 from t1 for update",
  5525              "Table": "t1"
  5526            }
  5527          ]
  5528        },
  5529        "TablesUsed": [
  5530          "user.user_extra",
  5531          "zlookup_unique.t1"
  5532        ]
  5533      }
  5534    },
  5535    {
  5536      "comment": "sharded insert table, unsharded select table",
  5537      "query": "insert into user_extra(user_id, col) select col1, col2 from unsharded_tab",
  5538      "v3-plan": {
  5539        "QueryType": "INSERT",
  5540        "Original": "insert into user_extra(user_id, col) select col1, col2 from unsharded_tab",
  5541        "Instructions": {
  5542          "OperatorType": "Insert",
  5543          "Variant": "Select",
  5544          "Keyspace": {
  5545            "Name": "user",
  5546            "Sharded": true
  5547          },
  5548          "TargetTabletType": "PRIMARY",
  5549          "AutoIncrement": "main:2",
  5550          "MultiShardAutocommit": false,
  5551          "TableName": "user_extra",
  5552          "VindexOffsetFromSelect": {
  5553            "user_index": "[0]"
  5554          },
  5555          "Inputs": [
  5556            {
  5557              "OperatorType": "Route",
  5558              "Variant": "Unsharded",
  5559              "Keyspace": {
  5560                "Name": "main_2",
  5561                "Sharded": false
  5562              },
  5563              "FieldQuery": "select col1, col2 from unsharded_tab where 1 != 1",
  5564              "Query": "select col1, col2 from unsharded_tab for update",
  5565              "Table": "unsharded_tab"
  5566            }
  5567          ]
  5568        },
  5569        "TablesUsed": [
  5570          "user.user_extra"
  5571        ]
  5572      },
  5573      "gen4-plan": {
  5574        "QueryType": "INSERT",
  5575        "Original": "insert into user_extra(user_id, col) select col1, col2 from unsharded_tab",
  5576        "Instructions": {
  5577          "OperatorType": "Insert",
  5578          "Variant": "Select",
  5579          "Keyspace": {
  5580            "Name": "user",
  5581            "Sharded": true
  5582          },
  5583          "TargetTabletType": "PRIMARY",
  5584          "AutoIncrement": "main:2",
  5585          "MultiShardAutocommit": false,
  5586          "TableName": "user_extra",
  5587          "VindexOffsetFromSelect": {
  5588            "user_index": "[0]"
  5589          },
  5590          "Inputs": [
  5591            {
  5592              "OperatorType": "Route",
  5593              "Variant": "Unsharded",
  5594              "Keyspace": {
  5595                "Name": "main_2",
  5596                "Sharded": false
  5597              },
  5598              "FieldQuery": "select col1, col2 from unsharded_tab where 1 != 1",
  5599              "Query": "select col1, col2 from unsharded_tab for update",
  5600              "Table": "unsharded_tab"
  5601            }
  5602          ]
  5603        },
  5604        "TablesUsed": [
  5605          "main_2.unsharded_tab",
  5606          "user.user_extra"
  5607        ]
  5608      }
  5609    },
  5610    {
  5611      "comment": "unsharded different keyspace",
  5612      "query": "insert into unsharded(col) select col from unsharded_tab",
  5613      "v3-plan": {
  5614        "QueryType": "INSERT",
  5615        "Original": "insert into unsharded(col) select col from unsharded_tab",
  5616        "Instructions": {
  5617          "OperatorType": "Insert",
  5618          "Variant": "Unsharded",
  5619          "Keyspace": {
  5620            "Name": "main",
  5621            "Sharded": false
  5622          },
  5623          "TargetTabletType": "PRIMARY",
  5624          "MultiShardAutocommit": false,
  5625          "TableName": "unsharded",
  5626          "Inputs": [
  5627            {
  5628              "OperatorType": "Route",
  5629              "Variant": "Unsharded",
  5630              "Keyspace": {
  5631                "Name": "main_2",
  5632                "Sharded": false
  5633              },
  5634              "FieldQuery": "select col from unsharded_tab where 1 != 1",
  5635              "Query": "select col from unsharded_tab for update",
  5636              "Table": "unsharded_tab"
  5637            }
  5638          ]
  5639        },
  5640        "TablesUsed": [
  5641          "main.unsharded"
  5642        ]
  5643      },
  5644      "gen4-plan": {
  5645        "QueryType": "INSERT",
  5646        "Original": "insert into unsharded(col) select col from unsharded_tab",
  5647        "Instructions": {
  5648          "OperatorType": "Insert",
  5649          "Variant": "Unsharded",
  5650          "Keyspace": {
  5651            "Name": "main",
  5652            "Sharded": false
  5653          },
  5654          "TargetTabletType": "PRIMARY",
  5655          "MultiShardAutocommit": false,
  5656          "TableName": "unsharded",
  5657          "Inputs": [
  5658            {
  5659              "OperatorType": "Route",
  5660              "Variant": "Unsharded",
  5661              "Keyspace": {
  5662                "Name": "main_2",
  5663                "Sharded": false
  5664              },
  5665              "FieldQuery": "select col from unsharded_tab where 1 != 1",
  5666              "Query": "select col from unsharded_tab for update",
  5667              "Table": "unsharded_tab"
  5668            }
  5669          ]
  5670        },
  5671        "TablesUsed": [
  5672          "main.unsharded",
  5673          "main_2.unsharded_tab"
  5674        ]
  5675      }
  5676    },
  5677    {
  5678      "comment": "unsharded insert table, sharded select table",
  5679      "query": "insert into unsharded(col) select col from t1",
  5680      "v3-plan": {
  5681        "QueryType": "INSERT",
  5682        "Original": "insert into unsharded(col) select col from t1",
  5683        "Instructions": {
  5684          "OperatorType": "Insert",
  5685          "Variant": "Unsharded",
  5686          "Keyspace": {
  5687            "Name": "main",
  5688            "Sharded": false
  5689          },
  5690          "TargetTabletType": "PRIMARY",
  5691          "MultiShardAutocommit": false,
  5692          "TableName": "unsharded",
  5693          "Inputs": [
  5694            {
  5695              "OperatorType": "Route",
  5696              "Variant": "Scatter",
  5697              "Keyspace": {
  5698                "Name": "zlookup_unique",
  5699                "Sharded": true
  5700              },
  5701              "FieldQuery": "select col from t1 where 1 != 1",
  5702              "Query": "select col from t1 for update",
  5703              "Table": "t1"
  5704            }
  5705          ]
  5706        },
  5707        "TablesUsed": [
  5708          "main.unsharded"
  5709        ]
  5710      },
  5711      "gen4-plan": {
  5712        "QueryType": "INSERT",
  5713        "Original": "insert into unsharded(col) select col from t1",
  5714        "Instructions": {
  5715          "OperatorType": "Insert",
  5716          "Variant": "Unsharded",
  5717          "Keyspace": {
  5718            "Name": "main",
  5719            "Sharded": false
  5720          },
  5721          "TargetTabletType": "PRIMARY",
  5722          "MultiShardAutocommit": false,
  5723          "TableName": "unsharded",
  5724          "Inputs": [
  5725            {
  5726              "OperatorType": "Route",
  5727              "Variant": "Scatter",
  5728              "Keyspace": {
  5729                "Name": "zlookup_unique",
  5730                "Sharded": true
  5731              },
  5732              "FieldQuery": "select col from t1 where 1 != 1",
  5733              "Query": "select col from t1 for update",
  5734              "Table": "t1"
  5735            }
  5736          ]
  5737        },
  5738        "TablesUsed": [
  5739          "main.unsharded",
  5740          "zlookup_unique.t1"
  5741        ]
  5742      }
  5743    },
  5744    {
  5745      "comment": "unsharded subquery in sharded update, not the same keyspace between outer and inner",
  5746      "query": "update user set col = (select id from unsharded)",
  5747      "v3-plan": "VT12001: unsupported: sharded subqueries in DML",
  5748      "gen4-plan": {
  5749        "QueryType": "UPDATE",
  5750        "Original": "update user set col = (select id from unsharded)",
  5751        "Instructions": {
  5752          "OperatorType": "Subquery",
  5753          "Variant": "PulloutValue",
  5754          "PulloutVars": [
  5755            "__sq1"
  5756          ],
  5757          "Inputs": [
  5758            {
  5759              "OperatorType": "Route",
  5760              "Variant": "Unsharded",
  5761              "Keyspace": {
  5762                "Name": "main",
  5763                "Sharded": false
  5764              },
  5765              "FieldQuery": "select id from unsharded where 1 != 1",
  5766              "Query": "select id from unsharded lock in share mode",
  5767              "Table": "unsharded"
  5768            },
  5769            {
  5770              "OperatorType": "Update",
  5771              "Variant": "Scatter",
  5772              "Keyspace": {
  5773                "Name": "user",
  5774                "Sharded": true
  5775              },
  5776              "TargetTabletType": "PRIMARY",
  5777              "MultiShardAutocommit": false,
  5778              "Query": "update `user` set col = :__sq1",
  5779              "Table": "user"
  5780            }
  5781          ]
  5782        },
  5783        "TablesUsed": [
  5784          "main.unsharded",
  5785          "user.user"
  5786        ]
  5787      }
  5788    },
  5789    {
  5790      "comment": "sharded subquery in unsharded update, not the same keyspace",
  5791      "query": "update unsharded set col = (select id from user)",
  5792      "v3-plan": "VT12001: unsupported: sharded subqueries in DML",
  5793      "gen4-plan": {
  5794        "QueryType": "UPDATE",
  5795        "Original": "update unsharded set col = (select id from user)",
  5796        "Instructions": {
  5797          "OperatorType": "Subquery",
  5798          "Variant": "PulloutValue",
  5799          "PulloutVars": [
  5800            "__sq1"
  5801          ],
  5802          "Inputs": [
  5803            {
  5804              "OperatorType": "Route",
  5805              "Variant": "Scatter",
  5806              "Keyspace": {
  5807                "Name": "user",
  5808                "Sharded": true
  5809              },
  5810              "FieldQuery": "select id from `user` where 1 != 1",
  5811              "Query": "select id from `user` lock in share mode",
  5812              "Table": "`user`"
  5813            },
  5814            {
  5815              "OperatorType": "Update",
  5816              "Variant": "Unsharded",
  5817              "Keyspace": {
  5818                "Name": "main",
  5819                "Sharded": false
  5820              },
  5821              "TargetTabletType": "PRIMARY",
  5822              "MultiShardAutocommit": false,
  5823              "Query": "update unsharded set col = :__sq1",
  5824              "Table": "unsharded"
  5825            }
  5826          ]
  5827        },
  5828        "TablesUsed": [
  5829          "main.unsharded",
  5830          "user.user"
  5831        ]
  5832      }
  5833    },
  5834    {
  5835      "comment": "sharded join unsharded subqueries in unsharded update",
  5836      "query": "update unsharded set col = (select id from unsharded join user on unsharded.id = user.id)",
  5837      "v3-plan": "VT12001: unsupported: sharded subqueries in DML",
  5838      "gen4-plan": {
  5839        "QueryType": "UPDATE",
  5840        "Original": "update unsharded set col = (select id from unsharded join user on unsharded.id = user.id)",
  5841        "Instructions": {
  5842          "OperatorType": "Subquery",
  5843          "Variant": "PulloutValue",
  5844          "PulloutVars": [
  5845            "__sq1"
  5846          ],
  5847          "Inputs": [
  5848            {
  5849              "OperatorType": "Join",
  5850              "Variant": "Join",
  5851              "JoinColumnIndexes": "R:0",
  5852              "JoinVars": {
  5853                "unsharded_id": 0
  5854              },
  5855              "TableName": "unsharded_`user`",
  5856              "Inputs": [
  5857                {
  5858                  "OperatorType": "Route",
  5859                  "Variant": "Unsharded",
  5860                  "Keyspace": {
  5861                    "Name": "main",
  5862                    "Sharded": false
  5863                  },
  5864                  "FieldQuery": "select unsharded.id from unsharded where 1 != 1",
  5865                  "Query": "select unsharded.id from unsharded lock in share mode",
  5866                  "Table": "unsharded"
  5867                },
  5868                {
  5869                  "OperatorType": "Route",
  5870                  "Variant": "EqualUnique",
  5871                  "Keyspace": {
  5872                    "Name": "user",
  5873                    "Sharded": true
  5874                  },
  5875                  "FieldQuery": "select id from `user` where 1 != 1",
  5876                  "Query": "select id from `user` where `user`.id = :unsharded_id lock in share mode",
  5877                  "Table": "`user`",
  5878                  "Values": [
  5879                    ":unsharded_id"
  5880                  ],
  5881                  "Vindex": "user_index"
  5882                }
  5883              ]
  5884            },
  5885            {
  5886              "OperatorType": "Update",
  5887              "Variant": "Unsharded",
  5888              "Keyspace": {
  5889                "Name": "main",
  5890                "Sharded": false
  5891              },
  5892              "TargetTabletType": "PRIMARY",
  5893              "MultiShardAutocommit": false,
  5894              "Query": "update unsharded set col = :__sq1",
  5895              "Table": "unsharded"
  5896            }
  5897          ]
  5898        },
  5899        "TablesUsed": [
  5900          "main.unsharded",
  5901          "user.user"
  5902        ]
  5903      }
  5904    },
  5905    {
  5906      "comment": "sharded update with sub query where the sources can be merged into a single query",
  5907      "query": "update user set col = (select count(*) from user_extra where user_extra.user_id = 5) where id = 5",
  5908      "v3-plan": "VT12001: unsupported: sharded subqueries in DML",
  5909      "gen4-plan": {
  5910        "QueryType": "UPDATE",
  5911        "Original": "update user set col = (select count(*) from user_extra where user_extra.user_id = 5) where id = 5",
  5912        "Instructions": {
  5913          "OperatorType": "Update",
  5914          "Variant": "EqualUnique",
  5915          "Keyspace": {
  5916            "Name": "user",
  5917            "Sharded": true
  5918          },
  5919          "TargetTabletType": "PRIMARY",
  5920          "MultiShardAutocommit": false,
  5921          "Query": "update `user` set col = (select count(*) from user_extra where user_extra.user_id = 5) where id = 5",
  5922          "Table": "user",
  5923          "Values": [
  5924            "INT64(5)"
  5925          ],
  5926          "Vindex": "user_index"
  5927        },
  5928        "TablesUsed": [
  5929          "user.user",
  5930          "user.user_extra"
  5931        ]
  5932      }
  5933    },
  5934    {
  5935      "comment": "merge through correlated subquery",
  5936      "query": "update user set col = (select count(*) from user_extra where user_extra.user_id = user.id) where id = 5",
  5937      "v3-plan": "VT12001: unsupported: sharded subqueries in DML",
  5938      "gen4-plan": {
  5939        "QueryType": "UPDATE",
  5940        "Original": "update user set col = (select count(*) from user_extra where user_extra.user_id = user.id) where id = 5",
  5941        "Instructions": {
  5942          "OperatorType": "Update",
  5943          "Variant": "EqualUnique",
  5944          "Keyspace": {
  5945            "Name": "user",
  5946            "Sharded": true
  5947          },
  5948          "TargetTabletType": "PRIMARY",
  5949          "MultiShardAutocommit": false,
  5950          "Query": "update `user` set col = (select count(*) from user_extra where user_extra.user_id = `user`.id) where id = 5",
  5951          "Table": "user",
  5952          "Values": [
  5953            "INT64(5)"
  5954          ],
  5955          "Vindex": "user_index"
  5956        },
  5957        "TablesUsed": [
  5958          "user.user",
  5959          "user.user_extra"
  5960        ]
  5961      }
  5962    },
  5963    {
  5964      "comment": "merge through correlated subquery #2",
  5965      "query": "update user set col = (select count(*) from user_extra where user_extra.user_id = user.id) where id > 5",
  5966      "v3-plan": "VT12001: unsupported: sharded subqueries in DML",
  5967      "gen4-plan": {
  5968        "QueryType": "UPDATE",
  5969        "Original": "update user set col = (select count(*) from user_extra where user_extra.user_id = user.id) where id > 5",
  5970        "Instructions": {
  5971          "OperatorType": "Update",
  5972          "Variant": "Scatter",
  5973          "Keyspace": {
  5974            "Name": "user",
  5975            "Sharded": true
  5976          },
  5977          "TargetTabletType": "PRIMARY",
  5978          "MultiShardAutocommit": false,
  5979          "Query": "update `user` set col = (select count(*) from user_extra where user_extra.user_id = `user`.id) where id > 5",
  5980          "Table": "user"
  5981        },
  5982        "TablesUsed": [
  5983          "user.user",
  5984          "user.user_extra"
  5985        ]
  5986      }
  5987    },
  5988    {
  5989      "comment": "all defaults empty column, empty values",
  5990      "query": "insert into authoritative () values ()",
  5991      "plan": {
  5992        "QueryType": "INSERT",
  5993        "Original": "insert into authoritative () values ()",
  5994        "Instructions": {
  5995          "OperatorType": "Insert",
  5996          "Variant": "Sharded",
  5997          "Keyspace": {
  5998            "Name": "user",
  5999            "Sharded": true
  6000          },
  6001          "TargetTabletType": "PRIMARY",
  6002          "MultiShardAutocommit": false,
  6003          "Query": "insert into authoritative(user_id) values (:_user_id_0)",
  6004          "TableName": "authoritative",
  6005          "VindexValues": {
  6006            "user_index": "NULL"
  6007          }
  6008        },
  6009        "TablesUsed": [
  6010          "user.authoritative"
  6011        ]
  6012      }
  6013    },
  6014    {
  6015      "comment": "explain dml without any directive should fail",
  6016      "query": "explain format=vtexplain delete from user",
  6017      "plan": "VT09008: vexplain queries/all will actually run queries"
  6018    },
  6019    {
  6020      "comment": "vexplain dml with actually_run_query directive",
  6021      "query": "vexplain /*vt+ execute_dml_queries */ queries delete from user",
  6022      "plan": {
  6023        "QueryType": "EXPLAIN",
  6024        "Original": "vexplain /*vt+ execute_dml_queries */ queries delete from user",
  6025        "Instructions": {
  6026          "OperatorType": "VEXPLAIN",
  6027          "Type": "queries",
  6028          "Inputs": [
  6029            {
  6030              "OperatorType": "Delete",
  6031              "Variant": "Scatter",
  6032              "Keyspace": {
  6033                "Name": "user",
  6034                "Sharded": true
  6035              },
  6036              "TargetTabletType": "PRIMARY",
  6037              "KsidLength": 1,
  6038              "KsidVindex": "user_index",
  6039              "MultiShardAutocommit": false,
  6040              "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update",
  6041              "Query": "delete from `user`",
  6042              "Table": "user"
  6043            }
  6044          ]
  6045        },
  6046        "TablesUsed": [
  6047          "user.user"
  6048        ]
  6049      }
  6050    },
  6051    {
  6052      "comment": "explain dml with actually_run_query directive - 2",
  6053      "query": "vexplain /*vt+ eXECUTE_DML_QUERIES */ queries delete from user",
  6054      "plan": {
  6055        "QueryType": "EXPLAIN",
  6056        "Original": "vexplain /*vt+ eXECUTE_DML_QUERIES */ queries delete from user",
  6057        "Instructions": {
  6058          "OperatorType": "VEXPLAIN",
  6059          "Type": "queries",
  6060          "Inputs": [
  6061            {
  6062              "OperatorType": "Delete",
  6063              "Variant": "Scatter",
  6064              "Keyspace": {
  6065                "Name": "user",
  6066                "Sharded": true
  6067              },
  6068              "TargetTabletType": "PRIMARY",
  6069              "KsidLength": 1,
  6070              "KsidVindex": "user_index",
  6071              "MultiShardAutocommit": false,
  6072              "OwnedVindexQuery": "select Id, `Name`, Costly from `user` for update",
  6073              "Query": "delete from `user`",
  6074              "Table": "user"
  6075            }
  6076          ]
  6077        },
  6078        "TablesUsed": [
  6079          "user.user"
  6080        ]
  6081      }
  6082    },
  6083    {
  6084      "comment": "Here V3 populates the TablesUsed incorrectly\n# delete with join from multi table join subquery.",
  6085      "query": "delete foo from unsharded as foo join (select id from unsharded a join unsharded_b b on a.user_id = b.user_id) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
  6086      "v3-plan": {
  6087        "QueryType": "DELETE",
  6088        "Original": "delete foo from unsharded as foo join (select id from unsharded a join unsharded_b b on a.user_id = b.user_id) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
  6089        "Instructions": {
  6090          "OperatorType": "Delete",
  6091          "Variant": "Unsharded",
  6092          "Keyspace": {
  6093            "Name": "main",
  6094            "Sharded": false
  6095          },
  6096          "TargetTabletType": "PRIMARY",
  6097          "MultiShardAutocommit": false,
  6098          "Query": "delete foo from unsharded as foo join (select id from unsharded as a join unsharded_b as b on a.user_id = b.user_id) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
  6099          "Table": "unsharded, unsharded, unsharded_b"
  6100        },
  6101        "TablesUsed": [
  6102          "main.unsharded",
  6103          "main.unsharded, unsharded_b"
  6104        ]
  6105      },
  6106      "gen4-plan": {
  6107        "QueryType": "DELETE",
  6108        "Original": "delete foo from unsharded as foo join (select id from unsharded a join unsharded_b b on a.user_id = b.user_id) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
  6109        "Instructions": {
  6110          "OperatorType": "Delete",
  6111          "Variant": "Unsharded",
  6112          "Keyspace": {
  6113            "Name": "main",
  6114            "Sharded": false
  6115          },
  6116          "TargetTabletType": "PRIMARY",
  6117          "MultiShardAutocommit": false,
  6118          "Query": "delete foo from unsharded as foo join (select id from unsharded as a join unsharded_b as b on a.user_id = b.user_id) as keepers on foo.id = keepers.id where keepers.id is null and foo.col is not null and foo.col < 1000",
  6119          "Table": "unsharded, unsharded_b"
  6120        },
  6121        "TablesUsed": [
  6122          "main.unsharded",
  6123          "main.unsharded_b"
  6124        ]
  6125      }
  6126    },
  6127    {
  6128      "comment": "update with routing using multi column vindex",
  6129      "query": "update user set col = 1 where (name, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6130      "v3-plan": {
  6131        "QueryType": "UPDATE",
  6132        "Original": "update user set col = 1 where (name, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6133        "Instructions": {
  6134          "OperatorType": "Update",
  6135          "Variant": "Scatter",
  6136          "Keyspace": {
  6137            "Name": "user",
  6138            "Sharded": true
  6139          },
  6140          "TargetTabletType": "PRIMARY",
  6141          "MultiShardAutocommit": false,
  6142          "Query": "update `user` set col = 1 where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6143          "Table": "user"
  6144        },
  6145        "TablesUsed": [
  6146          "user.user"
  6147        ]
  6148      },
  6149      "gen4-plan": {
  6150        "QueryType": "UPDATE",
  6151        "Original": "update user set col = 1 where (name, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6152        "Instructions": {
  6153          "OperatorType": "Update",
  6154          "Variant": "MultiEqual",
  6155          "Keyspace": {
  6156            "Name": "user",
  6157            "Sharded": true
  6158          },
  6159          "TargetTabletType": "PRIMARY",
  6160          "MultiShardAutocommit": false,
  6161          "Query": "update `user` set col = 1 where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6162          "Table": "user",
  6163          "Values": [
  6164            "(VARCHAR(\"aa\"), VARCHAR(\"cc\"))"
  6165          ],
  6166          "Vindex": "name_user_map"
  6167        },
  6168        "TablesUsed": [
  6169          "user.user"
  6170        ]
  6171      }
  6172    },
  6173    {
  6174      "comment": "delete with routing using multi column vindex",
  6175      "query": "delete from user where (name, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6176      "v3-plan": {
  6177        "QueryType": "DELETE",
  6178        "Original": "delete from user where (name, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6179        "Instructions": {
  6180          "OperatorType": "Delete",
  6181          "Variant": "Scatter",
  6182          "Keyspace": {
  6183            "Name": "user",
  6184            "Sharded": true
  6185          },
  6186          "TargetTabletType": "PRIMARY",
  6187          "KsidLength": 1,
  6188          "KsidVindex": "user_index",
  6189          "MultiShardAutocommit": false,
  6190          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd')) for update",
  6191          "Query": "delete from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6192          "Table": "user"
  6193        },
  6194        "TablesUsed": [
  6195          "user.user"
  6196        ]
  6197      },
  6198      "gen4-plan": {
  6199        "QueryType": "DELETE",
  6200        "Original": "delete from user where (name, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6201        "Instructions": {
  6202          "OperatorType": "Delete",
  6203          "Variant": "MultiEqual",
  6204          "Keyspace": {
  6205            "Name": "user",
  6206            "Sharded": true
  6207          },
  6208          "TargetTabletType": "PRIMARY",
  6209          "KsidLength": 1,
  6210          "KsidVindex": "user_index",
  6211          "MultiShardAutocommit": false,
  6212          "OwnedVindexQuery": "select Id, `Name`, Costly from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd')) for update",
  6213          "Query": "delete from `user` where (`name`, col) in (('aa', 'bb'), ('cc', 'dd'))",
  6214          "Table": "user",
  6215          "Values": [
  6216            "(VARCHAR(\"aa\"), VARCHAR(\"cc\"))"
  6217          ],
  6218          "Vindex": "name_user_map"
  6219        },
  6220        "TablesUsed": [
  6221          "user.user"
  6222        ]
  6223      }
  6224    },
  6225    {
  6226      "comment": "insert into ref; TODO(maxeng) is this a bug?",
  6227      "query": "insert into ref(col) values(1)",
  6228      "plan": {
  6229        "QueryType": "INSERT",
  6230        "Original": "insert into ref(col) values(1)",
  6231        "Instructions": {
  6232          "OperatorType": "Insert",
  6233          "Variant": "Sharded",
  6234          "Keyspace": {
  6235            "Name": "user",
  6236            "Sharded": true
  6237          },
  6238          "TargetTabletType": "PRIMARY",
  6239          "MultiShardAutocommit": false,
  6240          "Query": "insert into ref(col) values (1)",
  6241          "TableName": "ref"
  6242        },
  6243        "TablesUsed": [
  6244          "user.ref"
  6245        ]
  6246      }
  6247    },
  6248    {
  6249      "comment": "update using last_insert_id with an argument",
  6250      "query": "update main.m1 set foo = last_insert_id(foo+1) where id = 12345",
  6251      "plan": {
  6252        "QueryType": "UPDATE",
  6253        "Original": "update main.m1 set foo = last_insert_id(foo+1) where id = 12345",
  6254        "Instructions": {
  6255          "OperatorType": "Update",
  6256          "Variant": "Unsharded",
  6257          "Keyspace": {
  6258            "Name": "main",
  6259            "Sharded": false
  6260          },
  6261          "TargetTabletType": "PRIMARY",
  6262          "MultiShardAutocommit": false,
  6263          "Query": "update m1 set foo = last_insert_id(foo + 1) where id = 12345",
  6264          "Table": "m1"
  6265        },
  6266        "TablesUsed": [
  6267          "main.m1"
  6268        ]
  6269      }
  6270    }
  6271  ]