vitess.io/vitess@v0.16.2/go/vt/vtgate/planbuilder/testdata/wireup_cases.json (about) 1 [ 2 { 3 "comment": "join on having clause", 4 "query": "select e.col, u.id uid, e.id eid from user u join user_extra e having uid = eid", 5 "v3-plan": { 6 "QueryType": "SELECT", 7 "Original": "select e.col, u.id uid, e.id eid from user u join user_extra e having uid = eid", 8 "Instructions": { 9 "OperatorType": "Join", 10 "Variant": "Join", 11 "JoinColumnIndexes": "R:0,L:0,R:1", 12 "JoinVars": { 13 "uid": 0 14 }, 15 "TableName": "`user`_user_extra", 16 "Inputs": [ 17 { 18 "OperatorType": "Route", 19 "Variant": "Scatter", 20 "Keyspace": { 21 "Name": "user", 22 "Sharded": true 23 }, 24 "FieldQuery": "select u.id as uid from `user` as u where 1 != 1", 25 "Query": "select u.id as uid from `user` as u", 26 "Table": "`user`" 27 }, 28 { 29 "OperatorType": "Route", 30 "Variant": "Scatter", 31 "Keyspace": { 32 "Name": "user", 33 "Sharded": true 34 }, 35 "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1", 36 "Query": "select e.col, e.id as eid from user_extra as e having eid = :uid", 37 "Table": "user_extra" 38 } 39 ] 40 } 41 }, 42 "gen4-plan": { 43 "QueryType": "SELECT", 44 "Original": "select e.col, u.id uid, e.id eid from user u join user_extra e having uid = eid", 45 "Instructions": { 46 "OperatorType": "Join", 47 "Variant": "Join", 48 "JoinColumnIndexes": "L:1,R:0,L:2", 49 "JoinVars": { 50 "e_id": 0 51 }, 52 "TableName": "user_extra_`user`", 53 "Inputs": [ 54 { 55 "OperatorType": "Route", 56 "Variant": "Scatter", 57 "Keyspace": { 58 "Name": "user", 59 "Sharded": true 60 }, 61 "FieldQuery": "select e.id, e.col, e.id as eid from user_extra as e where 1 != 1", 62 "Query": "select e.id, e.col, e.id as eid from user_extra as e", 63 "Table": "user_extra" 64 }, 65 { 66 "OperatorType": "Route", 67 "Variant": "EqualUnique", 68 "Keyspace": { 69 "Name": "user", 70 "Sharded": true 71 }, 72 "FieldQuery": "select u.id as uid from `user` as u where 1 != 1", 73 "Query": "select u.id as uid from `user` as u where u.id = :e_id", 74 "Table": "`user`", 75 "Values": [ 76 ":e_id" 77 ], 78 "Vindex": "user_index" 79 } 80 ] 81 }, 82 "TablesUsed": [ 83 "user.user", 84 "user.user_extra" 85 ] 86 } 87 }, 88 { 89 "comment": "bind var already in use", 90 "query": "select e.col, u.id uid, e.id eid from user u join user_extra e having uid = eid and e.col = :uid", 91 "v3-plan": { 92 "QueryType": "SELECT", 93 "Original": "select e.col, u.id uid, e.id eid from user u join user_extra e having uid = eid and e.col = :uid", 94 "Instructions": { 95 "OperatorType": "Join", 96 "Variant": "Join", 97 "JoinColumnIndexes": "R:0,L:0,R:1", 98 "JoinVars": { 99 "uid1": 0 100 }, 101 "TableName": "`user`_user_extra", 102 "Inputs": [ 103 { 104 "OperatorType": "Route", 105 "Variant": "Scatter", 106 "Keyspace": { 107 "Name": "user", 108 "Sharded": true 109 }, 110 "FieldQuery": "select u.id as uid from `user` as u where 1 != 1", 111 "Query": "select u.id as uid from `user` as u", 112 "Table": "`user`" 113 }, 114 { 115 "OperatorType": "Route", 116 "Variant": "Scatter", 117 "Keyspace": { 118 "Name": "user", 119 "Sharded": true 120 }, 121 "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1", 122 "Query": "select e.col, e.id as eid from user_extra as e having eid = :uid1 and e.col = :uid", 123 "Table": "user_extra" 124 } 125 ] 126 } 127 }, 128 "gen4-plan": { 129 "QueryType": "SELECT", 130 "Original": "select e.col, u.id uid, e.id eid from user u join user_extra e having uid = eid and e.col = :uid", 131 "Instructions": { 132 "OperatorType": "Join", 133 "Variant": "Join", 134 "JoinColumnIndexes": "L:1,R:0,L:2", 135 "JoinVars": { 136 "e_id": 0 137 }, 138 "TableName": "user_extra_`user`", 139 "Inputs": [ 140 { 141 "OperatorType": "Route", 142 "Variant": "Scatter", 143 "Keyspace": { 144 "Name": "user", 145 "Sharded": true 146 }, 147 "FieldQuery": "select e.id, e.col, e.id as eid from user_extra as e where 1 != 1", 148 "Query": "select e.id, e.col, e.id as eid from user_extra as e where e.col = :uid", 149 "Table": "user_extra" 150 }, 151 { 152 "OperatorType": "Route", 153 "Variant": "EqualUnique", 154 "Keyspace": { 155 "Name": "user", 156 "Sharded": true 157 }, 158 "FieldQuery": "select u.id as uid from `user` as u where 1 != 1", 159 "Query": "select u.id as uid from `user` as u where u.id = :e_id", 160 "Table": "`user`", 161 "Values": [ 162 ":e_id" 163 ], 164 "Vindex": "user_index" 165 } 166 ] 167 }, 168 "TablesUsed": [ 169 "user.user", 170 "user.user_extra" 171 ] 172 } 173 }, 174 { 175 "comment": "wire-up join with join, going left", 176 "query": "select u1.id from user u1 join user u2 join user u3 where u3.col = u1.col", 177 "v3-plan": { 178 "QueryType": "SELECT", 179 "Original": "select u1.id from user u1 join user u2 join user u3 where u3.col = u1.col", 180 "Instructions": { 181 "OperatorType": "Join", 182 "Variant": "Join", 183 "JoinColumnIndexes": "L:0", 184 "JoinVars": { 185 "u1_col": 1 186 }, 187 "TableName": "`user`_`user`_`user`", 188 "Inputs": [ 189 { 190 "OperatorType": "Join", 191 "Variant": "Join", 192 "JoinColumnIndexes": "L:0,L:1", 193 "TableName": "`user`_`user`", 194 "Inputs": [ 195 { 196 "OperatorType": "Route", 197 "Variant": "Scatter", 198 "Keyspace": { 199 "Name": "user", 200 "Sharded": true 201 }, 202 "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", 203 "Query": "select u1.id, u1.col from `user` as u1", 204 "Table": "`user`" 205 }, 206 { 207 "OperatorType": "Route", 208 "Variant": "Scatter", 209 "Keyspace": { 210 "Name": "user", 211 "Sharded": true 212 }, 213 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 214 "Query": "select 1 from `user` as u2", 215 "Table": "`user`" 216 } 217 ] 218 }, 219 { 220 "OperatorType": "Route", 221 "Variant": "Scatter", 222 "Keyspace": { 223 "Name": "user", 224 "Sharded": true 225 }, 226 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 227 "Query": "select 1 from `user` as u3 where u3.col = :u1_col", 228 "Table": "`user`" 229 } 230 ] 231 } 232 }, 233 "gen4-plan": { 234 "QueryType": "SELECT", 235 "Original": "select u1.id from user u1 join user u2 join user u3 where u3.col = u1.col", 236 "Instructions": { 237 "OperatorType": "Join", 238 "Variant": "Join", 239 "JoinColumnIndexes": "R:0", 240 "TableName": "`user`_`user`_`user`", 241 "Inputs": [ 242 { 243 "OperatorType": "Route", 244 "Variant": "Scatter", 245 "Keyspace": { 246 "Name": "user", 247 "Sharded": true 248 }, 249 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 250 "Query": "select 1 from `user` as u2", 251 "Table": "`user`" 252 }, 253 { 254 "OperatorType": "Join", 255 "Variant": "Join", 256 "JoinColumnIndexes": "L:1", 257 "JoinVars": { 258 "u1_col": 0 259 }, 260 "TableName": "`user`_`user`", 261 "Inputs": [ 262 { 263 "OperatorType": "Route", 264 "Variant": "Scatter", 265 "Keyspace": { 266 "Name": "user", 267 "Sharded": true 268 }, 269 "FieldQuery": "select u1.col, u1.id from `user` as u1 where 1 != 1", 270 "Query": "select u1.col, u1.id from `user` as u1", 271 "Table": "`user`" 272 }, 273 { 274 "OperatorType": "Route", 275 "Variant": "Scatter", 276 "Keyspace": { 277 "Name": "user", 278 "Sharded": true 279 }, 280 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 281 "Query": "select 1 from `user` as u3 where u3.col = :u1_col", 282 "Table": "`user`" 283 } 284 ] 285 } 286 ] 287 }, 288 "TablesUsed": [ 289 "user.user" 290 ] 291 } 292 }, 293 { 294 "comment": "wire-up join with join, going left, then right", 295 "query": "select u1.id from user u1 join user u2 join user u3 where u3.col = u2.col", 296 "v3-plan": { 297 "QueryType": "SELECT", 298 "Original": "select u1.id from user u1 join user u2 join user u3 where u3.col = u2.col", 299 "Instructions": { 300 "OperatorType": "Join", 301 "Variant": "Join", 302 "JoinColumnIndexes": "L:0", 303 "JoinVars": { 304 "u2_col": 1 305 }, 306 "TableName": "`user`_`user`_`user`", 307 "Inputs": [ 308 { 309 "OperatorType": "Join", 310 "Variant": "Join", 311 "JoinColumnIndexes": "L:0,R:0", 312 "TableName": "`user`_`user`", 313 "Inputs": [ 314 { 315 "OperatorType": "Route", 316 "Variant": "Scatter", 317 "Keyspace": { 318 "Name": "user", 319 "Sharded": true 320 }, 321 "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", 322 "Query": "select u1.id from `user` as u1", 323 "Table": "`user`" 324 }, 325 { 326 "OperatorType": "Route", 327 "Variant": "Scatter", 328 "Keyspace": { 329 "Name": "user", 330 "Sharded": true 331 }, 332 "FieldQuery": "select u2.col from `user` as u2 where 1 != 1", 333 "Query": "select u2.col from `user` as u2", 334 "Table": "`user`" 335 } 336 ] 337 }, 338 { 339 "OperatorType": "Route", 340 "Variant": "Scatter", 341 "Keyspace": { 342 "Name": "user", 343 "Sharded": true 344 }, 345 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 346 "Query": "select 1 from `user` as u3 where u3.col = :u2_col", 347 "Table": "`user`" 348 } 349 ] 350 } 351 }, 352 "gen4-plan": { 353 "QueryType": "SELECT", 354 "Original": "select u1.id from user u1 join user u2 join user u3 where u3.col = u2.col", 355 "Instructions": { 356 "OperatorType": "Join", 357 "Variant": "Join", 358 "JoinColumnIndexes": "L:0", 359 "TableName": "`user`_`user`_`user`", 360 "Inputs": [ 361 { 362 "OperatorType": "Route", 363 "Variant": "Scatter", 364 "Keyspace": { 365 "Name": "user", 366 "Sharded": true 367 }, 368 "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", 369 "Query": "select u1.id from `user` as u1", 370 "Table": "`user`" 371 }, 372 { 373 "OperatorType": "Join", 374 "Variant": "Join", 375 "JoinVars": { 376 "u2_col": 0 377 }, 378 "TableName": "`user`_`user`", 379 "Inputs": [ 380 { 381 "OperatorType": "Route", 382 "Variant": "Scatter", 383 "Keyspace": { 384 "Name": "user", 385 "Sharded": true 386 }, 387 "FieldQuery": "select u2.col from `user` as u2 where 1 != 1", 388 "Query": "select u2.col from `user` as u2", 389 "Table": "`user`" 390 }, 391 { 392 "OperatorType": "Route", 393 "Variant": "Scatter", 394 "Keyspace": { 395 "Name": "user", 396 "Sharded": true 397 }, 398 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 399 "Query": "select 1 from `user` as u3 where u3.col = :u2_col", 400 "Table": "`user`" 401 } 402 ] 403 } 404 ] 405 }, 406 "TablesUsed": [ 407 "user.user" 408 ] 409 } 410 }, 411 { 412 "comment": "wire-up join with join, reuse existing result from a lower join", 413 "query": "select u1.id from user u1 join user u2 on u2.col = u1.col join user u3 where u3.col = u1.col", 414 "v3-plan": { 415 "QueryType": "SELECT", 416 "Original": "select u1.id from user u1 join user u2 on u2.col = u1.col join user u3 where u3.col = u1.col", 417 "Instructions": { 418 "OperatorType": "Join", 419 "Variant": "Join", 420 "JoinColumnIndexes": "L:0", 421 "JoinVars": { 422 "u1_col": 1 423 }, 424 "TableName": "`user`_`user`_`user`", 425 "Inputs": [ 426 { 427 "OperatorType": "Join", 428 "Variant": "Join", 429 "JoinColumnIndexes": "L:0,L:1", 430 "JoinVars": { 431 "u1_col": 1 432 }, 433 "TableName": "`user`_`user`", 434 "Inputs": [ 435 { 436 "OperatorType": "Route", 437 "Variant": "Scatter", 438 "Keyspace": { 439 "Name": "user", 440 "Sharded": true 441 }, 442 "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", 443 "Query": "select u1.id, u1.col from `user` as u1", 444 "Table": "`user`" 445 }, 446 { 447 "OperatorType": "Route", 448 "Variant": "Scatter", 449 "Keyspace": { 450 "Name": "user", 451 "Sharded": true 452 }, 453 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 454 "Query": "select 1 from `user` as u2 where u2.col = :u1_col", 455 "Table": "`user`" 456 } 457 ] 458 }, 459 { 460 "OperatorType": "Route", 461 "Variant": "Scatter", 462 "Keyspace": { 463 "Name": "user", 464 "Sharded": true 465 }, 466 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 467 "Query": "select 1 from `user` as u3 where u3.col = :u1_col", 468 "Table": "`user`" 469 } 470 ] 471 } 472 }, 473 "gen4-plan": { 474 "QueryType": "SELECT", 475 "Original": "select u1.id from user u1 join user u2 on u2.col = u1.col join user u3 where u3.col = u1.col", 476 "Instructions": { 477 "OperatorType": "Join", 478 "Variant": "Join", 479 "JoinColumnIndexes": "R:0", 480 "JoinVars": { 481 "u3_col": 0 482 }, 483 "TableName": "`user`_`user`_`user`", 484 "Inputs": [ 485 { 486 "OperatorType": "Route", 487 "Variant": "Scatter", 488 "Keyspace": { 489 "Name": "user", 490 "Sharded": true 491 }, 492 "FieldQuery": "select u3.col from `user` as u3 where 1 != 1", 493 "Query": "select u3.col from `user` as u3", 494 "Table": "`user`" 495 }, 496 { 497 "OperatorType": "Join", 498 "Variant": "Join", 499 "JoinColumnIndexes": "L:1", 500 "JoinVars": { 501 "u1_col": 0 502 }, 503 "TableName": "`user`_`user`", 504 "Inputs": [ 505 { 506 "OperatorType": "Route", 507 "Variant": "Scatter", 508 "Keyspace": { 509 "Name": "user", 510 "Sharded": true 511 }, 512 "FieldQuery": "select u1.col, u1.id from `user` as u1 where 1 != 1", 513 "Query": "select u1.col, u1.id from `user` as u1 where u1.col = :u3_col", 514 "Table": "`user`" 515 }, 516 { 517 "OperatorType": "Route", 518 "Variant": "Scatter", 519 "Keyspace": { 520 "Name": "user", 521 "Sharded": true 522 }, 523 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 524 "Query": "select 1 from `user` as u2 where u2.col = :u1_col", 525 "Table": "`user`" 526 } 527 ] 528 } 529 ] 530 }, 531 "TablesUsed": [ 532 "user.user" 533 ] 534 } 535 }, 536 { 537 "comment": "wire-up join with join, reuse existing result from a lower join.\n# You need two levels of join nesting to test this: when u3 requests\n# col from u1, the u1-u2 joins exports the column to u2-u3. When\n# u4 requests it, it should be reused from the u1-u2 join.", 538 "query": "select u1.id from user u1 join user u2 join user u3 on u3.id = u1.col join user u4 where u4.col = u1.col", 539 "v3-plan": { 540 "QueryType": "SELECT", 541 "Original": "select u1.id from user u1 join user u2 join user u3 on u3.id = u1.col join user u4 where u4.col = u1.col", 542 "Instructions": { 543 "OperatorType": "Join", 544 "Variant": "Join", 545 "JoinColumnIndexes": "L:0", 546 "JoinVars": { 547 "u1_col": 1 548 }, 549 "TableName": "`user`_`user`_`user`_`user`", 550 "Inputs": [ 551 { 552 "OperatorType": "Join", 553 "Variant": "Join", 554 "JoinColumnIndexes": "L:0,L:1", 555 "JoinVars": { 556 "u1_col": 1 557 }, 558 "TableName": "`user`_`user`_`user`", 559 "Inputs": [ 560 { 561 "OperatorType": "Join", 562 "Variant": "Join", 563 "JoinColumnIndexes": "L:0,L:1", 564 "TableName": "`user`_`user`", 565 "Inputs": [ 566 { 567 "OperatorType": "Route", 568 "Variant": "Scatter", 569 "Keyspace": { 570 "Name": "user", 571 "Sharded": true 572 }, 573 "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", 574 "Query": "select u1.id, u1.col from `user` as u1", 575 "Table": "`user`" 576 }, 577 { 578 "OperatorType": "Route", 579 "Variant": "Scatter", 580 "Keyspace": { 581 "Name": "user", 582 "Sharded": true 583 }, 584 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 585 "Query": "select 1 from `user` as u2", 586 "Table": "`user`" 587 } 588 ] 589 }, 590 { 591 "OperatorType": "Route", 592 "Variant": "EqualUnique", 593 "Keyspace": { 594 "Name": "user", 595 "Sharded": true 596 }, 597 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 598 "Query": "select 1 from `user` as u3 where u3.id = :u1_col", 599 "Table": "`user`", 600 "Values": [ 601 ":u1_col" 602 ], 603 "Vindex": "user_index" 604 } 605 ] 606 }, 607 { 608 "OperatorType": "Route", 609 "Variant": "Scatter", 610 "Keyspace": { 611 "Name": "user", 612 "Sharded": true 613 }, 614 "FieldQuery": "select 1 from `user` as u4 where 1 != 1", 615 "Query": "select 1 from `user` as u4 where u4.col = :u1_col", 616 "Table": "`user`" 617 } 618 ] 619 } 620 }, 621 "gen4-plan": { 622 "QueryType": "SELECT", 623 "Original": "select u1.id from user u1 join user u2 join user u3 on u3.id = u1.col join user u4 where u4.col = u1.col", 624 "Instructions": { 625 "OperatorType": "Join", 626 "Variant": "Join", 627 "JoinColumnIndexes": "R:0", 628 "TableName": "`user`_`user`_`user`_`user`", 629 "Inputs": [ 630 { 631 "OperatorType": "Route", 632 "Variant": "Scatter", 633 "Keyspace": { 634 "Name": "user", 635 "Sharded": true 636 }, 637 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 638 "Query": "select 1 from `user` as u2", 639 "Table": "`user`" 640 }, 641 { 642 "OperatorType": "Join", 643 "Variant": "Join", 644 "JoinColumnIndexes": "R:0", 645 "JoinVars": { 646 "u4_col": 0 647 }, 648 "TableName": "`user`_`user`_`user`", 649 "Inputs": [ 650 { 651 "OperatorType": "Route", 652 "Variant": "Scatter", 653 "Keyspace": { 654 "Name": "user", 655 "Sharded": true 656 }, 657 "FieldQuery": "select u4.col from `user` as u4 where 1 != 1", 658 "Query": "select u4.col from `user` as u4", 659 "Table": "`user`" 660 }, 661 { 662 "OperatorType": "Join", 663 "Variant": "Join", 664 "JoinColumnIndexes": "L:1", 665 "JoinVars": { 666 "u1_col": 0 667 }, 668 "TableName": "`user`_`user`", 669 "Inputs": [ 670 { 671 "OperatorType": "Route", 672 "Variant": "Scatter", 673 "Keyspace": { 674 "Name": "user", 675 "Sharded": true 676 }, 677 "FieldQuery": "select u1.col, u1.id from `user` as u1 where 1 != 1", 678 "Query": "select u1.col, u1.id from `user` as u1 where u1.col = :u4_col", 679 "Table": "`user`" 680 }, 681 { 682 "OperatorType": "Route", 683 "Variant": "EqualUnique", 684 "Keyspace": { 685 "Name": "user", 686 "Sharded": true 687 }, 688 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 689 "Query": "select 1 from `user` as u3 where u3.id = :u1_col", 690 "Table": "`user`", 691 "Values": [ 692 ":u1_col" 693 ], 694 "Vindex": "user_index" 695 } 696 ] 697 } 698 ] 699 } 700 ] 701 }, 702 "TablesUsed": [ 703 "user.user" 704 ] 705 } 706 }, 707 { 708 "comment": "Test reuse of join var already being supplied to the right of a node.", 709 "query": "select u1.id from user u1 join (user u2 join user u3) where u2.id = u1.col and u3.id = u1.col", 710 "v3-plan": { 711 "QueryType": "SELECT", 712 "Original": "select u1.id from user u1 join (user u2 join user u3) where u2.id = u1.col and u3.id = u1.col", 713 "Instructions": { 714 "OperatorType": "Join", 715 "Variant": "Join", 716 "JoinColumnIndexes": "L:0", 717 "JoinVars": { 718 "u1_col": 1 719 }, 720 "TableName": "`user`_`user`_`user`", 721 "Inputs": [ 722 { 723 "OperatorType": "Route", 724 "Variant": "Scatter", 725 "Keyspace": { 726 "Name": "user", 727 "Sharded": true 728 }, 729 "FieldQuery": "select u1.id, u1.col from `user` as u1 where 1 != 1", 730 "Query": "select u1.id, u1.col from `user` as u1", 731 "Table": "`user`" 732 }, 733 { 734 "OperatorType": "Join", 735 "Variant": "Join", 736 "TableName": "`user`_`user`", 737 "Inputs": [ 738 { 739 "OperatorType": "Route", 740 "Variant": "EqualUnique", 741 "Keyspace": { 742 "Name": "user", 743 "Sharded": true 744 }, 745 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 746 "Query": "select 1 from `user` as u2 where u2.id = :u1_col", 747 "Table": "`user`", 748 "Values": [ 749 ":u1_col" 750 ], 751 "Vindex": "user_index" 752 }, 753 { 754 "OperatorType": "Route", 755 "Variant": "EqualUnique", 756 "Keyspace": { 757 "Name": "user", 758 "Sharded": true 759 }, 760 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 761 "Query": "select 1 from `user` as u3 where u3.id = :u1_col", 762 "Table": "`user`", 763 "Values": [ 764 ":u1_col" 765 ], 766 "Vindex": "user_index" 767 } 768 ] 769 } 770 ] 771 } 772 }, 773 "gen4-plan": { 774 "QueryType": "SELECT", 775 "Original": "select u1.id from user u1 join (user u2 join user u3) where u2.id = u1.col and u3.id = u1.col", 776 "Instructions": { 777 "OperatorType": "Join", 778 "Variant": "Join", 779 "JoinColumnIndexes": "L:1", 780 "JoinVars": { 781 "u1_col": 0 782 }, 783 "TableName": "`user`_`user`_`user`", 784 "Inputs": [ 785 { 786 "OperatorType": "Join", 787 "Variant": "Join", 788 "JoinColumnIndexes": "L:0,L:1", 789 "JoinVars": { 790 "u1_col": 0 791 }, 792 "TableName": "`user`_`user`", 793 "Inputs": [ 794 { 795 "OperatorType": "Route", 796 "Variant": "Scatter", 797 "Keyspace": { 798 "Name": "user", 799 "Sharded": true 800 }, 801 "FieldQuery": "select u1.col, u1.id from `user` as u1 where 1 != 1", 802 "Query": "select u1.col, u1.id from `user` as u1", 803 "Table": "`user`" 804 }, 805 { 806 "OperatorType": "Route", 807 "Variant": "EqualUnique", 808 "Keyspace": { 809 "Name": "user", 810 "Sharded": true 811 }, 812 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 813 "Query": "select 1 from `user` as u2 where u2.id = :u1_col", 814 "Table": "`user`", 815 "Values": [ 816 ":u1_col" 817 ], 818 "Vindex": "user_index" 819 } 820 ] 821 }, 822 { 823 "OperatorType": "Route", 824 "Variant": "EqualUnique", 825 "Keyspace": { 826 "Name": "user", 827 "Sharded": true 828 }, 829 "FieldQuery": "select 1 from `user` as u3 where 1 != 1", 830 "Query": "select 1 from `user` as u3 where u3.id = :u1_col", 831 "Table": "`user`", 832 "Values": [ 833 ":u1_col" 834 ], 835 "Vindex": "user_index" 836 } 837 ] 838 }, 839 "TablesUsed": [ 840 "user.user" 841 ] 842 } 843 }, 844 { 845 "comment": "Join on weird columns.", 846 "query": "select `weird``name`.a, unsharded.b from `weird``name` join unsharded on `weird``name`.`a``b*c` = unsharded.id", 847 "v3-plan": { 848 "QueryType": "SELECT", 849 "Original": "select `weird``name`.a, unsharded.b from `weird``name` join unsharded on `weird``name`.`a``b*c` = unsharded.id", 850 "Instructions": { 851 "OperatorType": "Join", 852 "Variant": "Join", 853 "JoinColumnIndexes": "L:0,R:0", 854 "JoinVars": { 855 "weird_name_a_b_c": 1 856 }, 857 "TableName": "`weird``name`_unsharded", 858 "Inputs": [ 859 { 860 "OperatorType": "Route", 861 "Variant": "Scatter", 862 "Keyspace": { 863 "Name": "user", 864 "Sharded": true 865 }, 866 "FieldQuery": "select `weird``name`.a, `weird``name`.`a``b*c` from `weird``name` where 1 != 1", 867 "Query": "select `weird``name`.a, `weird``name`.`a``b*c` from `weird``name`", 868 "Table": "`weird``name`" 869 }, 870 { 871 "OperatorType": "Route", 872 "Variant": "Unsharded", 873 "Keyspace": { 874 "Name": "main", 875 "Sharded": false 876 }, 877 "FieldQuery": "select unsharded.b from unsharded where 1 != 1", 878 "Query": "select unsharded.b from unsharded where unsharded.id = :weird_name_a_b_c", 879 "Table": "unsharded" 880 } 881 ] 882 } 883 }, 884 "gen4-plan": { 885 "QueryType": "SELECT", 886 "Original": "select `weird``name`.a, unsharded.b from `weird``name` join unsharded on `weird``name`.`a``b*c` = unsharded.id", 887 "Instructions": { 888 "OperatorType": "Join", 889 "Variant": "Join", 890 "JoinColumnIndexes": "R:0,L:1", 891 "JoinVars": { 892 "unsharded_id": 0 893 }, 894 "TableName": "unsharded_`weird``name`", 895 "Inputs": [ 896 { 897 "OperatorType": "Route", 898 "Variant": "Unsharded", 899 "Keyspace": { 900 "Name": "main", 901 "Sharded": false 902 }, 903 "FieldQuery": "select unsharded.id, unsharded.b from unsharded where 1 != 1", 904 "Query": "select unsharded.id, unsharded.b from unsharded", 905 "Table": "unsharded" 906 }, 907 { 908 "OperatorType": "Route", 909 "Variant": "EqualUnique", 910 "Keyspace": { 911 "Name": "user", 912 "Sharded": true 913 }, 914 "FieldQuery": "select `weird``name`.a from `weird``name` where 1 != 1", 915 "Query": "select `weird``name`.a from `weird``name` where `weird``name`.`a``b*c` = :unsharded_id", 916 "Table": "`weird``name`", 917 "Values": [ 918 ":unsharded_id" 919 ], 920 "Vindex": "user_index" 921 } 922 ] 923 }, 924 "TablesUsed": [ 925 "main.unsharded", 926 "user.weird`name" 927 ] 928 } 929 }, 930 { 931 "comment": "Join on weird column (col is not in select)", 932 "query": "select unsharded.b from `weird``name` join unsharded on `weird``name`.`a``b*c` = unsharded.id", 933 "v3-plan": { 934 "QueryType": "SELECT", 935 "Original": "select unsharded.b from `weird``name` join unsharded on `weird``name`.`a``b*c` = unsharded.id", 936 "Instructions": { 937 "OperatorType": "Join", 938 "Variant": "Join", 939 "JoinColumnIndexes": "R:0", 940 "JoinVars": { 941 "weird_name_a_b_c": 0 942 }, 943 "TableName": "`weird``name`_unsharded", 944 "Inputs": [ 945 { 946 "OperatorType": "Route", 947 "Variant": "Scatter", 948 "Keyspace": { 949 "Name": "user", 950 "Sharded": true 951 }, 952 "FieldQuery": "select `weird``name`.`a``b*c` from `weird``name` where 1 != 1", 953 "Query": "select `weird``name`.`a``b*c` from `weird``name`", 954 "Table": "`weird``name`" 955 }, 956 { 957 "OperatorType": "Route", 958 "Variant": "Unsharded", 959 "Keyspace": { 960 "Name": "main", 961 "Sharded": false 962 }, 963 "FieldQuery": "select unsharded.b from unsharded where 1 != 1", 964 "Query": "select unsharded.b from unsharded where unsharded.id = :weird_name_a_b_c", 965 "Table": "unsharded" 966 } 967 ] 968 } 969 }, 970 "gen4-plan": { 971 "QueryType": "SELECT", 972 "Original": "select unsharded.b from `weird``name` join unsharded on `weird``name`.`a``b*c` = unsharded.id", 973 "Instructions": { 974 "OperatorType": "Join", 975 "Variant": "Join", 976 "JoinColumnIndexes": "L:1", 977 "JoinVars": { 978 "unsharded_id": 0 979 }, 980 "TableName": "unsharded_`weird``name`", 981 "Inputs": [ 982 { 983 "OperatorType": "Route", 984 "Variant": "Unsharded", 985 "Keyspace": { 986 "Name": "main", 987 "Sharded": false 988 }, 989 "FieldQuery": "select unsharded.id, unsharded.b from unsharded where 1 != 1", 990 "Query": "select unsharded.id, unsharded.b from unsharded", 991 "Table": "unsharded" 992 }, 993 { 994 "OperatorType": "Route", 995 "Variant": "EqualUnique", 996 "Keyspace": { 997 "Name": "user", 998 "Sharded": true 999 }, 1000 "FieldQuery": "select 1 from `weird``name` where 1 != 1", 1001 "Query": "select 1 from `weird``name` where `weird``name`.`a``b*c` = :unsharded_id", 1002 "Table": "`weird``name`", 1003 "Values": [ 1004 ":unsharded_id" 1005 ], 1006 "Vindex": "user_index" 1007 } 1008 ] 1009 }, 1010 "TablesUsed": [ 1011 "main.unsharded", 1012 "user.weird`name" 1013 ] 1014 } 1015 }, 1016 { 1017 "comment": "wire-up with limit primitive", 1018 "query": "select u.id, e.id from user u join user_extra e where e.id = u.col limit 10", 1019 "v3-plan": { 1020 "QueryType": "SELECT", 1021 "Original": "select u.id, e.id from user u join user_extra e where e.id = u.col limit 10", 1022 "Instructions": { 1023 "OperatorType": "Limit", 1024 "Count": "INT64(10)", 1025 "Inputs": [ 1026 { 1027 "OperatorType": "Join", 1028 "Variant": "Join", 1029 "JoinColumnIndexes": "L:0,R:0", 1030 "JoinVars": { 1031 "u_col": 1 1032 }, 1033 "TableName": "`user`_user_extra", 1034 "Inputs": [ 1035 { 1036 "OperatorType": "Route", 1037 "Variant": "Scatter", 1038 "Keyspace": { 1039 "Name": "user", 1040 "Sharded": true 1041 }, 1042 "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", 1043 "Query": "select u.id, u.col from `user` as u", 1044 "Table": "`user`" 1045 }, 1046 { 1047 "OperatorType": "Route", 1048 "Variant": "Scatter", 1049 "Keyspace": { 1050 "Name": "user", 1051 "Sharded": true 1052 }, 1053 "FieldQuery": "select e.id from user_extra as e where 1 != 1", 1054 "Query": "select e.id from user_extra as e where e.id = :u_col", 1055 "Table": "user_extra" 1056 } 1057 ] 1058 } 1059 ] 1060 } 1061 }, 1062 "gen4-plan": { 1063 "QueryType": "SELECT", 1064 "Original": "select u.id, e.id from user u join user_extra e where e.id = u.col limit 10", 1065 "Instructions": { 1066 "OperatorType": "Limit", 1067 "Count": "INT64(10)", 1068 "Inputs": [ 1069 { 1070 "OperatorType": "Join", 1071 "Variant": "Join", 1072 "JoinColumnIndexes": "L:1,R:0", 1073 "JoinVars": { 1074 "u_col": 0 1075 }, 1076 "TableName": "`user`_user_extra", 1077 "Inputs": [ 1078 { 1079 "OperatorType": "Route", 1080 "Variant": "Scatter", 1081 "Keyspace": { 1082 "Name": "user", 1083 "Sharded": true 1084 }, 1085 "FieldQuery": "select u.col, u.id from `user` as u where 1 != 1", 1086 "Query": "select u.col, u.id from `user` as u", 1087 "Table": "`user`" 1088 }, 1089 { 1090 "OperatorType": "Route", 1091 "Variant": "Scatter", 1092 "Keyspace": { 1093 "Name": "user", 1094 "Sharded": true 1095 }, 1096 "FieldQuery": "select e.id from user_extra as e where 1 != 1", 1097 "Query": "select e.id from user_extra as e where e.id = :u_col", 1098 "Table": "user_extra" 1099 } 1100 ] 1101 } 1102 ] 1103 }, 1104 "TablesUsed": [ 1105 "user.user", 1106 "user.user_extra" 1107 ] 1108 } 1109 }, 1110 { 1111 "comment": "Wire-up in subquery", 1112 "query": "select 1 from user where id in (select u.id, e.id from user u join user_extra e where e.id = u.col limit 10)", 1113 "v3-plan": { 1114 "QueryType": "SELECT", 1115 "Original": "select 1 from user where id in (select u.id, e.id from user u join user_extra e where e.id = u.col limit 10)", 1116 "Instructions": { 1117 "OperatorType": "Subquery", 1118 "Variant": "PulloutIn", 1119 "PulloutVars": [ 1120 "__sq_has_values1", 1121 "__sq1" 1122 ], 1123 "Inputs": [ 1124 { 1125 "OperatorType": "Limit", 1126 "Count": "INT64(10)", 1127 "Inputs": [ 1128 { 1129 "OperatorType": "Join", 1130 "Variant": "Join", 1131 "JoinColumnIndexes": "L:0,R:0", 1132 "JoinVars": { 1133 "u_col": 1 1134 }, 1135 "TableName": "`user`_user_extra", 1136 "Inputs": [ 1137 { 1138 "OperatorType": "Route", 1139 "Variant": "Scatter", 1140 "Keyspace": { 1141 "Name": "user", 1142 "Sharded": true 1143 }, 1144 "FieldQuery": "select u.id, u.col from `user` as u where 1 != 1", 1145 "Query": "select u.id, u.col from `user` as u", 1146 "Table": "`user`" 1147 }, 1148 { 1149 "OperatorType": "Route", 1150 "Variant": "Scatter", 1151 "Keyspace": { 1152 "Name": "user", 1153 "Sharded": true 1154 }, 1155 "FieldQuery": "select e.id from user_extra as e where 1 != 1", 1156 "Query": "select e.id from user_extra as e where e.id = :u_col", 1157 "Table": "user_extra" 1158 } 1159 ] 1160 } 1161 ] 1162 }, 1163 { 1164 "OperatorType": "Route", 1165 "Variant": "IN", 1166 "Keyspace": { 1167 "Name": "user", 1168 "Sharded": true 1169 }, 1170 "FieldQuery": "select 1 from `user` where 1 != 1", 1171 "Query": "select 1 from `user` where :__sq_has_values1 = 1 and id in ::__vals", 1172 "Table": "`user`", 1173 "Values": [ 1174 ":__sq1" 1175 ], 1176 "Vindex": "user_index" 1177 } 1178 ] 1179 } 1180 }, 1181 "gen4-plan": { 1182 "QueryType": "SELECT", 1183 "Original": "select 1 from user where id in (select u.id, e.id from user u join user_extra e where e.id = u.col limit 10)", 1184 "Instructions": { 1185 "OperatorType": "Subquery", 1186 "Variant": "PulloutIn", 1187 "PulloutVars": [ 1188 "__sq_has_values1", 1189 "__sq1" 1190 ], 1191 "Inputs": [ 1192 { 1193 "OperatorType": "Limit", 1194 "Count": "INT64(10)", 1195 "Inputs": [ 1196 { 1197 "OperatorType": "Join", 1198 "Variant": "Join", 1199 "JoinColumnIndexes": "L:1,R:0", 1200 "JoinVars": { 1201 "u_col": 0 1202 }, 1203 "TableName": "`user`_user_extra", 1204 "Inputs": [ 1205 { 1206 "OperatorType": "Route", 1207 "Variant": "Scatter", 1208 "Keyspace": { 1209 "Name": "user", 1210 "Sharded": true 1211 }, 1212 "FieldQuery": "select u.col, u.id from `user` as u where 1 != 1", 1213 "Query": "select u.col, u.id from `user` as u", 1214 "Table": "`user`" 1215 }, 1216 { 1217 "OperatorType": "Route", 1218 "Variant": "Scatter", 1219 "Keyspace": { 1220 "Name": "user", 1221 "Sharded": true 1222 }, 1223 "FieldQuery": "select e.id from user_extra as e where 1 != 1", 1224 "Query": "select e.id from user_extra as e where e.id = :u_col", 1225 "Table": "user_extra" 1226 } 1227 ] 1228 } 1229 ] 1230 }, 1231 { 1232 "OperatorType": "Route", 1233 "Variant": "IN", 1234 "Keyspace": { 1235 "Name": "user", 1236 "Sharded": true 1237 }, 1238 "FieldQuery": "select 1 from `user` where 1 != 1", 1239 "Query": "select 1 from `user` where :__sq_has_values1 = 1 and id in ::__vals", 1240 "Table": "`user`", 1241 "Values": [ 1242 ":__sq1" 1243 ], 1244 "Vindex": "user_index" 1245 } 1246 ] 1247 }, 1248 "TablesUsed": [ 1249 "user.user", 1250 "user.user_extra" 1251 ] 1252 } 1253 }, 1254 { 1255 "comment": "Wire-up in underlying primitive after pullout", 1256 "query": "select u.id, e.id, (select col from user) from user u join user_extra e where e.id = u.col limit 10", 1257 "v3-plan": { 1258 "QueryType": "SELECT", 1259 "Original": "select u.id, e.id, (select col from user) from user u join user_extra e where e.id = u.col limit 10", 1260 "Instructions": { 1261 "OperatorType": "Limit", 1262 "Count": "INT64(10)", 1263 "Inputs": [ 1264 { 1265 "OperatorType": "Subquery", 1266 "Variant": "PulloutValue", 1267 "PulloutVars": [ 1268 "__sq_has_values1", 1269 "__sq1" 1270 ], 1271 "Inputs": [ 1272 { 1273 "OperatorType": "Route", 1274 "Variant": "Scatter", 1275 "Keyspace": { 1276 "Name": "user", 1277 "Sharded": true 1278 }, 1279 "FieldQuery": "select col from `user` where 1 != 1", 1280 "Query": "select col from `user`", 1281 "Table": "`user`" 1282 }, 1283 { 1284 "OperatorType": "Join", 1285 "Variant": "Join", 1286 "JoinColumnIndexes": "L:0,R:0,L:1", 1287 "JoinVars": { 1288 "u_col": 2 1289 }, 1290 "TableName": "`user`_user_extra", 1291 "Inputs": [ 1292 { 1293 "OperatorType": "Route", 1294 "Variant": "Scatter", 1295 "Keyspace": { 1296 "Name": "user", 1297 "Sharded": true 1298 }, 1299 "FieldQuery": "select u.id, :__sq1, u.col from `user` as u where 1 != 1", 1300 "Query": "select u.id, :__sq1, u.col from `user` as u", 1301 "Table": "`user`" 1302 }, 1303 { 1304 "OperatorType": "Route", 1305 "Variant": "Scatter", 1306 "Keyspace": { 1307 "Name": "user", 1308 "Sharded": true 1309 }, 1310 "FieldQuery": "select e.id from user_extra as e where 1 != 1", 1311 "Query": "select e.id from user_extra as e where e.id = :u_col", 1312 "Table": "user_extra" 1313 } 1314 ] 1315 } 1316 ] 1317 } 1318 ] 1319 } 1320 }, 1321 "gen4-plan": { 1322 "QueryType": "SELECT", 1323 "Original": "select u.id, e.id, (select col from user) from user u join user_extra e where e.id = u.col limit 10", 1324 "Instructions": { 1325 "OperatorType": "Limit", 1326 "Count": "INT64(10)", 1327 "Inputs": [ 1328 { 1329 "OperatorType": "Subquery", 1330 "Variant": "PulloutValue", 1331 "PulloutVars": [ 1332 "__sq1" 1333 ], 1334 "Inputs": [ 1335 { 1336 "OperatorType": "Route", 1337 "Variant": "Scatter", 1338 "Keyspace": { 1339 "Name": "user", 1340 "Sharded": true 1341 }, 1342 "FieldQuery": "select col from `user` where 1 != 1", 1343 "Query": "select col from `user`", 1344 "Table": "`user`" 1345 }, 1346 { 1347 "OperatorType": "Join", 1348 "Variant": "Join", 1349 "JoinColumnIndexes": "L:1,R:0,L:2", 1350 "JoinVars": { 1351 "u_col": 0 1352 }, 1353 "TableName": "`user`_user_extra", 1354 "Inputs": [ 1355 { 1356 "OperatorType": "Route", 1357 "Variant": "Scatter", 1358 "Keyspace": { 1359 "Name": "user", 1360 "Sharded": true 1361 }, 1362 "FieldQuery": "select u.col, u.id, :__sq1 from `user` as u where 1 != 1", 1363 "Query": "select u.col, u.id, :__sq1 from `user` as u", 1364 "Table": "`user`" 1365 }, 1366 { 1367 "OperatorType": "Route", 1368 "Variant": "Scatter", 1369 "Keyspace": { 1370 "Name": "user", 1371 "Sharded": true 1372 }, 1373 "FieldQuery": "select e.id from user_extra as e where 1 != 1", 1374 "Query": "select e.id from user_extra as e where e.id = :u_col", 1375 "Table": "user_extra" 1376 } 1377 ] 1378 } 1379 ] 1380 } 1381 ] 1382 }, 1383 "TablesUsed": [ 1384 "user.user", 1385 "user.user_extra" 1386 ] 1387 } 1388 }, 1389 { 1390 "comment": "Invalid value in IN clause", 1391 "query": "select id from user where id in (18446744073709551616, 1)", 1392 "v3-plan": { 1393 "QueryType": "SELECT", 1394 "Original": "select id from user where id in (18446744073709551616, 1)", 1395 "Instructions": { 1396 "OperatorType": "Route", 1397 "Variant": "IN", 1398 "Keyspace": { 1399 "Name": "user", 1400 "Sharded": true 1401 }, 1402 "FieldQuery": "select id from `user` where 1 != 1", 1403 "Query": "select id from `user` where id in ::__vals", 1404 "Table": "`user`", 1405 "Values": [ 1406 "(DECIMAL(18446744073709551616), INT64(1))" 1407 ], 1408 "Vindex": "user_index" 1409 } 1410 }, 1411 "gen4-plan": { 1412 "QueryType": "SELECT", 1413 "Original": "select id from user where id in (18446744073709551616, 1)", 1414 "Instructions": { 1415 "OperatorType": "Route", 1416 "Variant": "IN", 1417 "Keyspace": { 1418 "Name": "user", 1419 "Sharded": true 1420 }, 1421 "FieldQuery": "select id from `user` where 1 != 1", 1422 "Query": "select id from `user` where id in ::__vals", 1423 "Table": "`user`", 1424 "Values": [ 1425 "(DECIMAL(18446744073709551616), INT64(1))" 1426 ], 1427 "Vindex": "user_index" 1428 }, 1429 "TablesUsed": [ 1430 "user.user" 1431 ] 1432 } 1433 }, 1434 { 1435 "comment": "Invalid value in IN clause from LHS of join", 1436 "query": "select u1.id from user u1 join user u2 where u1.id = 18446744073709551616", 1437 "v3-plan": { 1438 "QueryType": "SELECT", 1439 "Original": "select u1.id from user u1 join user u2 where u1.id = 18446744073709551616", 1440 "Instructions": { 1441 "OperatorType": "Join", 1442 "Variant": "Join", 1443 "JoinColumnIndexes": "L:0", 1444 "TableName": "`user`_`user`", 1445 "Inputs": [ 1446 { 1447 "OperatorType": "Route", 1448 "Variant": "EqualUnique", 1449 "Keyspace": { 1450 "Name": "user", 1451 "Sharded": true 1452 }, 1453 "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", 1454 "Query": "select u1.id from `user` as u1 where u1.id = 18446744073709551616", 1455 "Table": "`user`", 1456 "Values": [ 1457 "DECIMAL(18446744073709551616)" 1458 ], 1459 "Vindex": "user_index" 1460 }, 1461 { 1462 "OperatorType": "Route", 1463 "Variant": "Scatter", 1464 "Keyspace": { 1465 "Name": "user", 1466 "Sharded": true 1467 }, 1468 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 1469 "Query": "select 1 from `user` as u2", 1470 "Table": "`user`" 1471 } 1472 ] 1473 } 1474 }, 1475 "gen4-plan": { 1476 "QueryType": "SELECT", 1477 "Original": "select u1.id from user u1 join user u2 where u1.id = 18446744073709551616", 1478 "Instructions": { 1479 "OperatorType": "Join", 1480 "Variant": "Join", 1481 "JoinColumnIndexes": "L:0", 1482 "TableName": "`user`_`user`", 1483 "Inputs": [ 1484 { 1485 "OperatorType": "Route", 1486 "Variant": "EqualUnique", 1487 "Keyspace": { 1488 "Name": "user", 1489 "Sharded": true 1490 }, 1491 "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", 1492 "Query": "select u1.id from `user` as u1 where u1.id = 18446744073709551616", 1493 "Table": "`user`", 1494 "Values": [ 1495 "DECIMAL(18446744073709551616)" 1496 ], 1497 "Vindex": "user_index" 1498 }, 1499 { 1500 "OperatorType": "Route", 1501 "Variant": "Scatter", 1502 "Keyspace": { 1503 "Name": "user", 1504 "Sharded": true 1505 }, 1506 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 1507 "Query": "select 1 from `user` as u2", 1508 "Table": "`user`" 1509 } 1510 ] 1511 }, 1512 "TablesUsed": [ 1513 "user.user" 1514 ] 1515 } 1516 }, 1517 { 1518 "comment": "Invalid value in IN clause from RHS of join", 1519 "query": "select u1.id from user u1 join user u2 where u2.id = 18446744073709551616", 1520 "v3-plan": { 1521 "QueryType": "SELECT", 1522 "Original": "select u1.id from user u1 join user u2 where u2.id = 18446744073709551616", 1523 "Instructions": { 1524 "OperatorType": "Join", 1525 "Variant": "Join", 1526 "JoinColumnIndexes": "L:0", 1527 "TableName": "`user`_`user`", 1528 "Inputs": [ 1529 { 1530 "OperatorType": "Route", 1531 "Variant": "Scatter", 1532 "Keyspace": { 1533 "Name": "user", 1534 "Sharded": true 1535 }, 1536 "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", 1537 "Query": "select u1.id from `user` as u1", 1538 "Table": "`user`" 1539 }, 1540 { 1541 "OperatorType": "Route", 1542 "Variant": "EqualUnique", 1543 "Keyspace": { 1544 "Name": "user", 1545 "Sharded": true 1546 }, 1547 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 1548 "Query": "select 1 from `user` as u2 where u2.id = 18446744073709551616", 1549 "Table": "`user`", 1550 "Values": [ 1551 "DECIMAL(18446744073709551616)" 1552 ], 1553 "Vindex": "user_index" 1554 } 1555 ] 1556 } 1557 }, 1558 "gen4-plan": { 1559 "QueryType": "SELECT", 1560 "Original": "select u1.id from user u1 join user u2 where u2.id = 18446744073709551616", 1561 "Instructions": { 1562 "OperatorType": "Join", 1563 "Variant": "Join", 1564 "JoinColumnIndexes": "L:0", 1565 "TableName": "`user`_`user`", 1566 "Inputs": [ 1567 { 1568 "OperatorType": "Route", 1569 "Variant": "Scatter", 1570 "Keyspace": { 1571 "Name": "user", 1572 "Sharded": true 1573 }, 1574 "FieldQuery": "select u1.id from `user` as u1 where 1 != 1", 1575 "Query": "select u1.id from `user` as u1", 1576 "Table": "`user`" 1577 }, 1578 { 1579 "OperatorType": "Route", 1580 "Variant": "EqualUnique", 1581 "Keyspace": { 1582 "Name": "user", 1583 "Sharded": true 1584 }, 1585 "FieldQuery": "select 1 from `user` as u2 where 1 != 1", 1586 "Query": "select 1 from `user` as u2 where u2.id = 18446744073709551616", 1587 "Table": "`user`", 1588 "Values": [ 1589 "DECIMAL(18446744073709551616)" 1590 ], 1591 "Vindex": "user_index" 1592 } 1593 ] 1594 }, 1595 "TablesUsed": [ 1596 "user.user" 1597 ] 1598 } 1599 }, 1600 { 1601 "comment": "derived table with column aliases not supported by v3, but planner is overridden with hint", 1602 "query": "select /*vt+ PLANNER=gen4 */ u.a from (select id as b, name from user) u(a, n) where u.n = 1", 1603 "plan": { 1604 "QueryType": "SELECT", 1605 "Original": "select /*vt+ PLANNER=gen4 */ u.a from (select id as b, name from user) u(a, n) where u.n = 1", 1606 "Instructions": { 1607 "OperatorType": "VindexLookup", 1608 "Variant": "Equal", 1609 "Keyspace": { 1610 "Name": "user", 1611 "Sharded": true 1612 }, 1613 "Values": [ 1614 "INT64(1)" 1615 ], 1616 "Vindex": "name_user_map", 1617 "Inputs": [ 1618 { 1619 "OperatorType": "Route", 1620 "Variant": "IN", 1621 "Keyspace": { 1622 "Name": "user", 1623 "Sharded": true 1624 }, 1625 "FieldQuery": "select `name`, keyspace_id from name_user_vdx where 1 != 1", 1626 "Query": "select `name`, keyspace_id from name_user_vdx where `name` in ::__vals", 1627 "Table": "name_user_vdx", 1628 "Values": [ 1629 ":name" 1630 ], 1631 "Vindex": "user_index" 1632 }, 1633 { 1634 "OperatorType": "Route", 1635 "Variant": "ByDestination", 1636 "Keyspace": { 1637 "Name": "user", 1638 "Sharded": true 1639 }, 1640 "FieldQuery": "select u.a from (select id as b, `name` from `user` where 1 != 1) as u(a, n) where 1 != 1", 1641 "Query": "select /*vt+ PLANNER=gen4 */ u.a from (select id as b, `name` from `user` where `name` = 1) as u(a, n)", 1642 "Table": "`user`" 1643 } 1644 ] 1645 }, 1646 "TablesUsed": [ 1647 "user.user" 1648 ] 1649 } 1650 }, 1651 { 1652 "comment": "derived table with column aliases not supported by v3, but planner is overridden with hint", 1653 "query": "select /*vt+ PLANNER=v3 */ u.a from (select id as b, name from user) u(a, n) where u.n = 1", 1654 "plan": "VT12001: unsupported: column aliases in derived table" 1655 }, 1656 { 1657 "comment": "Three-way join using the left2right. The normal gen4 planner would merge m1 and m2 first, but the left to right doesnt", 1658 "query": "select /*vt+ PLANNER=left2right */ user.col from user join unsharded as m1 join unsharded as m2", 1659 "plan": { 1660 "QueryType": "SELECT", 1661 "Original": "select /*vt+ PLANNER=left2right */ user.col from user join unsharded as m1 join unsharded as m2", 1662 "Instructions": { 1663 "OperatorType": "Join", 1664 "Variant": "Join", 1665 "JoinColumnIndexes": "L:0", 1666 "TableName": "`user`_unsharded_unsharded", 1667 "Inputs": [ 1668 { 1669 "OperatorType": "Join", 1670 "Variant": "Join", 1671 "JoinColumnIndexes": "L:0", 1672 "TableName": "`user`_unsharded", 1673 "Inputs": [ 1674 { 1675 "OperatorType": "Route", 1676 "Variant": "Scatter", 1677 "Keyspace": { 1678 "Name": "user", 1679 "Sharded": true 1680 }, 1681 "FieldQuery": "select `user`.col from `user` where 1 != 1", 1682 "Query": "select /*vt+ PLANNER=left2right */ `user`.col from `user`", 1683 "Table": "`user`" 1684 }, 1685 { 1686 "OperatorType": "Route", 1687 "Variant": "Unsharded", 1688 "Keyspace": { 1689 "Name": "main", 1690 "Sharded": false 1691 }, 1692 "FieldQuery": "select 1 from unsharded as m1 where 1 != 1", 1693 "Query": "select /*vt+ PLANNER=left2right */ 1 from unsharded as m1", 1694 "Table": "unsharded" 1695 } 1696 ] 1697 }, 1698 { 1699 "OperatorType": "Route", 1700 "Variant": "Unsharded", 1701 "Keyspace": { 1702 "Name": "main", 1703 "Sharded": false 1704 }, 1705 "FieldQuery": "select 1 from unsharded as m2 where 1 != 1", 1706 "Query": "select /*vt+ PLANNER=left2right */ 1 from unsharded as m2", 1707 "Table": "unsharded" 1708 } 1709 ] 1710 }, 1711 "TablesUsed": [ 1712 "main.unsharded", 1713 "user.user" 1714 ] 1715 } 1716 } 1717 ]