github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/exec/execbuilder/testdata/explain (about) 1 # LogicTest: local 2 3 query TTT colnames 4 EXPLAIN (PLAN) SELECT 1 FROM system.jobs WHERE FALSE 5 ---- 6 tree field description 7 · distributed false 8 · vectorized true 9 norows · · 10 11 query TTT colnames 12 EXPLAIN (PLAN) SELECT 1 FROM system.jobs WHERE NULL 13 ---- 14 tree field description 15 · distributed false 16 · vectorized true 17 norows · · 18 19 query TTT colnames 20 EXPLAIN (PLAN) SELECT 1 FROM system.jobs WHERE TRUE 21 ---- 22 tree field description 23 · distributed false 24 · vectorized true 25 render · · 26 └── scan · · 27 · table jobs@jobs_status_created_idx 28 · spans FULL SCAN 29 30 query TTTTT colnames 31 EXPLAIN (PLAN, VERBOSE) SELECT 1 a 32 ---- 33 tree field description columns ordering 34 · distributed false · · 35 · vectorized false · · 36 values · · (a) · 37 · size 1 column, 1 row · · 38 · row 0, expr 0 1 · · 39 40 query TTTTT colnames 41 EXPLAIN (VERBOSE,PLAN) SELECT 1 a 42 ---- 43 tree field description columns ordering 44 · distributed false · · 45 · vectorized false · · 46 values · · (a) · 47 · size 1 column, 1 row · · 48 · row 0, expr 0 1 · · 49 50 51 query TTTTT colnames 52 EXPLAIN (TYPES) SELECT 1 a 53 ---- 54 tree field description columns ordering 55 · distributed false · · 56 · vectorized false · · 57 values · · (a int) · 58 · size 1 column, 1 row · · 59 · row 0, expr 0 (1)[int] · · 60 61 statement error cannot set EXPLAIN mode more than once 62 EXPLAIN (PLAN,PLAN) SELECT 1 63 64 statement error cannot set EXPLAIN mode more than once 65 EXPLAIN (PLAN,DISTSQL) SELECT 1 66 67 statement error unsupported EXPLAIN option 68 EXPLAIN (PLAN,UNKNOWN) SELECT 1 69 70 statement error could not determine data type of placeholder \$1 71 EXPLAIN (TYPES) SELECT $1 72 73 # TODO(radu): we don't support placeholders with no values. 74 #query TTTTT colnames 75 #EXPLAIN (TYPES) SELECT $1::INT AS a 76 #---- 77 #Tree Field Description Columns Ordering 78 #render · · (a int) a=CONST 79 # │ render 0 (($1)[string]::INT)[int] · · 80 # └── emptyrow · · () · 81 82 83 # Ensure that all relevant statement types can be explained 84 query TTT 85 EXPLAIN CREATE DATABASE foo 86 ---- 87 · distributed false 88 · vectorized false 89 create database · · 90 91 query TTT 92 EXPLAIN CREATE TABLE foo (x INT) 93 ---- 94 · distributed false 95 · vectorized false 96 create table · · 97 98 statement ok 99 CREATE TABLE foo (x INT) 100 101 query TTT 102 EXPLAIN CREATE INDEX a ON foo(x) 103 ---- 104 · distributed false 105 · vectorized false 106 create index · · 107 108 statement ok 109 CREATE DATABASE foo 110 111 query TTT 112 EXPLAIN DROP DATABASE foo 113 ---- 114 · distributed false 115 · vectorized false 116 drop database · · 117 118 # explain SHOW JOBS - beware to test this before the CREATE INDEX 119 # below, otherwise the result becomes non-deterministic. 120 # Migrations with backfill will affect the number of rows. 121 query TTT 122 SELECT * FROM [EXPLAIN SHOW JOBS] WHERE field != 'size' 123 ---- 124 · distributed false 125 · vectorized false 126 render · · 127 └── sort · · 128 │ order -column18,-started 129 └── render · · 130 └── filter · · 131 │ filter ((job_type IS NULL) OR (job_type != 'AUTO CREATE STATS')) AND ((finished IS NULL) OR (finished > (now() - '12:00:00'))) 132 └── render · · 133 └── virtual table · · 134 · source jobs@primary 135 136 statement ok 137 CREATE INDEX a ON foo(x) 138 139 query TTT 140 EXPLAIN DROP INDEX foo@a 141 ---- 142 · distributed false 143 · vectorized false 144 drop index · · 145 146 query TTT 147 EXPLAIN ALTER TABLE foo ADD COLUMN y INT 148 ---- 149 · distributed false 150 · vectorized false 151 alter table · · 152 153 query TTT 154 SELECT tree, field, description FROM [EXPLAIN (VERBOSE) ALTER TABLE foo SPLIT AT VALUES (42)] 155 ---- 156 · distributed false 157 · vectorized false 158 split · · 159 └── values · · 160 · size 1 column, 1 row 161 · row 0, expr 0 42 162 163 query TTT 164 EXPLAIN DROP TABLE foo 165 ---- 166 · distributed false 167 · vectorized false 168 drop table · · 169 170 query TTT 171 EXPLAIN SHOW DATABASES 172 ---- 173 · distributed false 174 · vectorized false 175 sort · · 176 │ order +database_name 177 └── distinct · · 178 │ distinct on database_name 179 └── render · · 180 └── virtual table · · 181 · source schemata@primary 182 183 query TTT 184 SELECT * FROM [EXPLAIN SHOW TABLES] WHERE field != 'size' 185 ---- 186 · distributed false 187 · vectorized false 188 render · · 189 └── sort · · 190 │ order +nspname,+relname 191 └── render · · 192 └── hash-join · · 193 │ type inner 194 │ equality (oid) = (relnamespace) 195 ├── filter · · 196 │ │ filter nspname NOT IN ('crdb_internal', 'information_schema', 'pg_catalog', 'pg_extension') 197 │ └── render · · 198 │ └── virtual table · · 199 │ source pg_namespace@primary 200 └── filter · · 201 │ filter relkind IN ('S', 'r', 'v') 202 └── render · · 203 └── virtual table · · 204 · source pg_class@primary 205 206 query TTT 207 SELECT * FROM [EXPLAIN SHOW TABLES WITH COMMENT] WHERE field != 'size' 208 ---- 209 · distributed false 210 · vectorized false 211 render · · 212 └── sort · · 213 │ order +nspname,+relname 214 └── render · · 215 └── hash-join · · 216 │ type left outer 217 │ equality (oid) = (objoid) 218 ├── hash-join · · 219 │ │ type inner 220 │ │ equality (oid) = (relnamespace) 221 │ ├── filter · · 222 │ │ │ filter nspname NOT IN ('crdb_internal', 'information_schema', 'pg_catalog', 'pg_extension') 223 │ │ └── render · · 224 │ │ └── virtual table · · 225 │ │ source pg_namespace@primary 226 │ └── filter · · 227 │ │ filter relkind IN ('S', 'r', 'v') 228 │ └── render · · 229 │ └── virtual table · · 230 │ source pg_class@primary 231 └── filter · · 232 │ filter objsubid = 0 233 └── render · · 234 └── virtual table · · 235 · source pg_description@primary 236 237 query TTT 238 SELECT * FROM [EXPLAIN SHOW DATABASE] WHERE field != 'size' 239 ---- 240 · distributed false 241 · vectorized false 242 render · · 243 └── filter · · 244 │ filter variable = 'database' 245 └── render · · 246 └── virtual table · · 247 · source session_variables@primary 248 249 query TTT 250 SELECT * FROM [EXPLAIN SHOW TIME ZONE] WHERE field != 'size' 251 ---- 252 · distributed false 253 · vectorized false 254 render · · 255 └── filter · · 256 │ filter variable = 'timezone' 257 └── render · · 258 └── virtual table · · 259 · source session_variables@primary 260 261 query TTT 262 SELECT * FROM [EXPLAIN SHOW DEFAULT_TRANSACTION_ISOLATION] WHERE field != 'size' 263 ---- 264 · distributed false 265 · vectorized false 266 render · · 267 └── filter · · 268 │ filter variable = 'default_transaction_isolation' 269 └── render · · 270 └── virtual table · · 271 · source session_variables@primary 272 273 query TTT 274 SELECT * FROM [EXPLAIN SHOW DEFAULT_TRANSACTION_PRIORITY] WHERE field != 'size' 275 ---- 276 · distributed false 277 · vectorized false 278 render · · 279 └── filter · · 280 │ filter variable = 'default_transaction_priority' 281 └── render · · 282 └── virtual table · · 283 · source session_variables@primary 284 285 query TTT 286 SELECT * FROM [EXPLAIN SHOW TRANSACTION ISOLATION LEVEL] WHERE field != 'size' 287 ---- 288 · distributed false 289 · vectorized false 290 render · · 291 └── filter · · 292 │ filter variable = 'transaction_isolation' 293 └── render · · 294 └── virtual table · · 295 · source session_variables@primary 296 297 query TTT 298 SELECT * FROM [EXPLAIN SHOW TRANSACTION PRIORITY] WHERE field != 'size' 299 ---- 300 · distributed false 301 · vectorized false 302 render · · 303 └── filter · · 304 │ filter variable = 'transaction_priority' 305 └── render · · 306 └── virtual table · · 307 · source session_variables@primary 308 309 query TTT 310 EXPLAIN SHOW COLUMNS FROM foo 311 ---- 312 · distributed false 313 · vectorized false 314 render · · 315 └── group · · 316 │ aggregate 0 column_name 317 │ aggregate 1 ordinal_position 318 │ aggregate 2 column_default 319 │ aggregate 3 is_nullable 320 │ aggregate 4 generation_expression 321 │ aggregate 5 is_hidden 322 │ aggregate 6 crdb_sql_type 323 │ aggregate 7 array_agg(index_name) 324 │ group by column_name, ordinal_position, column_default, is_nullable, generation_expression, is_hidden, crdb_sql_type 325 │ ordered +ordinal_position 326 └── render · · 327 └── sort · · 328 │ order +ordinal_position 329 └── hash-join · · 330 │ type left outer 331 │ equality (column_name) = (column_name) 332 ├── filter · · 333 │ │ filter ((table_catalog = 'test') AND (table_schema = 'public')) AND (table_name = 'foo') 334 │ └── render · · 335 │ └── virtual table · · 336 │ source columns@primary 337 └── filter · · 338 │ filter ((table_catalog = 'test') AND (table_schema = 'public')) AND (table_name = 'foo') 339 └── render · · 340 └── virtual table · · 341 · source statistics@primary 342 343 query TTT 344 SELECT * FROM [EXPLAIN SHOW GRANTS ON foo] WHERE field != 'size' 345 ---- 346 · distributed false 347 · vectorized false 348 render · · 349 └── sort · · 350 │ order +grantee,+privilege_type 351 └── filter · · 352 │ filter (table_catalog, table_schema, table_name) IN (('test', 'public', 'foo'),) 353 └── render · · 354 └── virtual table · · 355 · source table_privileges@primary 356 357 query TTT 358 EXPLAIN SHOW INDEX FROM foo 359 ---- 360 · distributed false 361 · vectorized false 362 render · · 363 └── filter · · 364 │ filter ((table_catalog = 'test') AND (table_schema = 'public')) AND (table_name = 'foo') 365 └── render · · 366 └── virtual table · · 367 · source statistics@primary 368 369 query TTT 370 EXPLAIN SHOW CONSTRAINTS FROM foo 371 ---- 372 · distributed false 373 · vectorized false 374 render · · 375 └── sort · · 376 │ order +conname 377 └── render · · 378 └── hash-join · · 379 │ type inner 380 │ equality (oid) = (relnamespace) 381 ├── filter · · 382 │ │ filter nspname = 'public' 383 │ └── render · · 384 │ └── virtual table · · 385 │ source pg_namespace@primary 386 └── virtual-table-lookup-join · · 387 │ table pg_constraint@pg_constraint_conrelid_idx 388 │ type inner 389 │ equality (oid) = (conrelid) 390 └── filter · · 391 │ filter relname = 'foo' 392 └── render · · 393 └── virtual table · · 394 · source pg_class@primary 395 396 query TTT 397 EXPLAIN SHOW USERS 398 ---- 399 · distributed false 400 · vectorized true 401 render · · 402 └── sort · · 403 │ order +username 404 └── render · · 405 └── group · · 406 │ aggregate 0 username 407 │ aggregate 1 array_agg(role) 408 │ aggregate 2 any_not_null(any_not_null) 409 │ aggregate 3 any_not_null(role) 410 │ group by username 411 └── render · · 412 └── sort · · 413 │ order +role 414 └── hash-join · · 415 │ type left outer 416 │ equality (username) = (member) 417 │ left cols are key · 418 ├── group · · 419 │ │ aggregate 0 username 420 │ │ aggregate 1 any_not_null(string_agg) 421 │ │ group by username 422 │ └── render · · 423 │ └── window · · 424 │ └── render · · 425 │ └── merge-join · · 426 │ │ type left outer 427 │ │ equality (username) = (username) 428 │ │ left cols are key · 429 │ │ mergeJoinOrder +"(username=username)" 430 │ ├── scan · · 431 │ │ table users@primary 432 │ │ spans FULL SCAN 433 │ └── scan · · 434 │ table role_options@primary 435 │ spans FULL SCAN 436 └── scan · · 437 · table role_members@role_members_role_idx 438 · spans FULL SCAN 439 440 # EXPLAIN selecting from a sequence. 441 statement ok 442 CREATE SEQUENCE select_test 443 444 query TTTTT colnames 445 EXPLAIN (VERBOSE) SELECT * FROM select_test 446 ---- 447 tree field description columns ordering 448 · distributed false · · 449 · vectorized false · · 450 sequence select · · (last_value, log_cnt, is_called) · 451 452 query TTTTT colnames 453 EXPLAIN (VERBOSE) SELECT @1 FROM select_test 454 ---- 455 tree field description columns ordering 456 · distributed false · · 457 · vectorized false · · 458 render · · ("?column?") · 459 │ render 0 last_value · · 460 └── sequence select · · (last_value, log_cnt, is_called) · 461 462 statement ok 463 CREATE TABLE t ( 464 k INT PRIMARY KEY, 465 v INT, 466 FAMILY "primary" (k, v) 467 ) 468 469 query TTT 470 EXPLAIN INSERT INTO t VALUES (1, 2) 471 ---- 472 · distributed false 473 · vectorized false 474 count · · 475 └── insert-fast-path · · 476 · into t(k, v) 477 · strategy inserter 478 · auto commit · 479 · size 2 columns, 1 row 480 481 query I 482 SELECT max(level) FROM [EXPLAIN (VERBOSE) INSERT INTO t VALUES (1, 2)] 483 ---- 484 1 485 486 statement ok 487 INSERT INTO t VALUES (1, 2) 488 489 query TTT 490 EXPLAIN SELECT * FROM t 491 ---- 492 · distributed false 493 · vectorized true 494 scan · · 495 · table t@primary 496 · spans FULL SCAN 497 498 query TTTTT 499 EXPLAIN (VERBOSE) SELECT * FROM t 500 ---- 501 · distributed false · · 502 · vectorized true · · 503 scan · · (k, v) · 504 · table t@primary · · 505 · spans FULL SCAN · · 506 507 query TTT 508 EXPLAIN SELECT * FROM t WHERE k = 1 OR k = 3 509 ---- 510 · distributed false 511 · vectorized true 512 scan · · 513 · table t@primary 514 · spans /1-/1/# /3-/3/# 515 · parallel · 516 517 statement ok 518 CREATE TABLE t2 (x INT PRIMARY KEY) 519 520 query TTT 521 EXPLAIN (PLAN) SELECT * FROM t INNER LOOKUP JOIN t2 ON t.k = t2.x 522 ---- 523 · distributed false 524 · vectorized true 525 lookup-join · · 526 │ table t2@primary 527 │ type inner 528 │ equality (k) = (x) 529 │ equality cols are key · 530 │ parallel · 531 └── scan · · 532 · table t@primary 533 · spans FULL SCAN 534 535 query TTTTT 536 EXPLAIN (VERBOSE) SELECT * FROM t WHERE k % 2 = 0 537 ---- 538 · distributed false · · 539 · vectorized true · · 540 scan · · (k, v) · 541 · table t@primary · · 542 · spans FULL SCAN · · 543 · filter (k % 2) = 0 · · 544 545 query TTT 546 EXPLAIN VALUES (1, 2, 3), (4, 5, 6) 547 ---- 548 · distributed false 549 · vectorized false 550 values · · 551 · size 3 columns, 2 rows 552 553 query TTT 554 EXPLAIN VALUES (1) 555 ---- 556 · distributed false 557 · vectorized false 558 values · · 559 · size 1 column, 1 row 560 561 query TTT 562 SELECT tree, field, description FROM [EXPLAIN (VERBOSE) SELECT * FROM t WITH ORDINALITY LIMIT 1 OFFSET 1] 563 ---- 564 · distributed false 565 · vectorized true 566 limit · · 567 │ offset 1 568 └── ordinality · · 569 └── scan · · 570 · table t@primary 571 · spans LIMITED SCAN 572 · limit 2 573 574 query TTT 575 EXPLAIN SELECT DISTINCT v FROM t 576 ---- 577 · distributed false 578 · vectorized true 579 distinct · · 580 │ distinct on v 581 └── scan · · 582 · table t@primary 583 · spans FULL SCAN 584 585 query TTT 586 SELECT tree, field, description FROM [EXPLAIN (VERBOSE) SELECT DISTINCT v FROM t LIMIT 1 OFFSET 1] 587 ---- 588 · distributed false 589 · vectorized true 590 limit · · 591 │ offset 1 592 └── limit · · 593 │ count 2 594 └── distinct · · 595 │ distinct on v 596 └── scan · · 597 · table t@primary 598 · spans FULL SCAN 599 600 statement ok 601 CREATE TABLE tc (a INT, b INT, INDEX c(a), FAMILY "primary" (a, b, rowid)) 602 603 query TTTTT 604 EXPLAIN (VERBOSE) SELECT * FROM tc WHERE a = 10 ORDER BY b 605 ---- 606 · distributed false · · 607 · vectorized true · · 608 sort · · (a, b) +b 609 │ order +b · · 610 └── index-join · · (a, b) · 611 │ table tc@primary · · 612 │ key columns rowid · · 613 └── scan · · (a, rowid[hidden]) · 614 · table tc@c · · 615 · spans /10-/11 · · 616 617 query TTTTT colnames 618 EXPLAIN (TYPES) INSERT INTO t VALUES (1, 2) 619 ---- 620 tree field description columns ordering 621 · distributed false · · 622 · vectorized false · · 623 count · · () · 624 └── insert-fast-path · · () · 625 · into t(k, v) · · 626 · strategy inserter · · 627 · auto commit · · · 628 · size 2 columns, 1 row · · 629 · row 0, expr 0 (1)[int] · · 630 · row 0, expr 1 (2)[int] · · 631 632 query TTTTT 633 EXPLAIN (TYPES) SELECT 42 AS a 634 ---- 635 · distributed false · · 636 · vectorized false · · 637 values · · (a int) · 638 · size 1 column, 1 row · · 639 · row 0, expr 0 (42)[int] · · 640 641 query TTTTT 642 EXPLAIN (TYPES) SELECT * FROM t 643 ---- 644 · distributed false · · 645 · vectorized true · · 646 scan · · (k int, v int) · 647 · table t@primary · · 648 · spans FULL SCAN · · 649 650 query TTTTT 651 EXPLAIN (TYPES,SYMVARS) SELECT k FROM t 652 ---- 653 · distributed false · · 654 · vectorized true · · 655 scan · · (k int) · 656 · table t@primary · · 657 · spans FULL SCAN · · 658 659 query TTTTT 660 EXPLAIN (TYPES,VERBOSE) SELECT k FROM t 661 ---- 662 · distributed false · · 663 · vectorized true · · 664 scan · · (k int) · 665 · table t@primary · · 666 · spans FULL SCAN · · 667 668 query TTTTT 669 EXPLAIN (TYPES) SELECT * FROM t WHERE v > 123 670 ---- 671 · distributed false · · 672 · vectorized true · · 673 scan · · (k int, v int) · 674 · table t@primary · · 675 · spans FULL SCAN · · 676 · filter ((v)[int] > (123)[int])[bool] · · 677 678 query TTTTT 679 EXPLAIN (TYPES) VALUES (1, 2, 3), (4, 5, 6) 680 ---- 681 · distributed false · · 682 · vectorized false · · 683 values · · (column1 int, column2 int, column3 int) · 684 · size 3 columns, 2 rows · · 685 · row 0, expr 0 (1)[int] · · 686 · row 0, expr 1 (2)[int] · · 687 · row 0, expr 2 (3)[int] · · 688 · row 1, expr 0 (4)[int] · · 689 · row 1, expr 1 (5)[int] · · 690 · row 1, expr 2 (6)[int] · · 691 692 query TTTTT 693 EXPLAIN (TYPES) SELECT 2*count(k) as z, v FROM t WHERE v>123 GROUP BY v HAVING v<2 AND count(k)>1 694 ---- 695 · distributed false · · 696 · vectorized true · · 697 render · · (z int, v int) · 698 │ render 0 (z)[int] · · 699 │ render 1 (v)[int] · · 700 └── norows · · (v int, z int) · 701 702 query TTTTT 703 EXPLAIN (TYPES) DELETE FROM t WHERE v > 1 704 ---- 705 · distributed false · · 706 · vectorized false · · 707 count · · () · 708 └── delete · · () · 709 │ from t · · 710 │ strategy deleter · · 711 │ auto commit · · · 712 └── render · · (k int) · 713 │ render 0 (k)[int] · · 714 └── scan · · (k int, v int) · 715 · table t@primary · · 716 · spans FULL SCAN · · 717 · filter ((v)[int] > (1)[int])[bool] · · 718 719 query TTTTT 720 EXPLAIN (TYPES) UPDATE t SET v = k + 1 WHERE v > 123 721 ---- 722 · distributed false · · 723 · vectorized false · · 724 count · · () · 725 └── update · · () · 726 │ table t · · 727 │ set v · · 728 │ strategy updater · · 729 │ auto commit · · · 730 └── render · · (k int, v int, v_new int) · 731 │ render 0 (k)[int] · · 732 │ render 1 (v)[int] · · 733 │ render 2 ((k)[int] + (1)[int])[int] · · 734 └── scan · · (k int, v int) · 735 · table t@primary · · 736 · spans FULL SCAN · · 737 · filter ((v)[int] > (123)[int])[bool] · · 738 739 query TTTTT 740 EXPLAIN (TYPES) VALUES (1) UNION VALUES (2) 741 ---- 742 · distributed false · · 743 · vectorized false · · 744 union · · (column1 int) · 745 ├── values · · (column1 int) · 746 │ size 1 column, 1 row · · 747 │ row 0, expr 0 (2)[int] · · 748 └── values · · (column1 int) · 749 · size 1 column, 1 row · · 750 · row 0, expr 0 (1)[int] · · 751 752 query TTTTT 753 EXPLAIN (TYPES) SELECT DISTINCT k FROM t 754 ---- 755 · distributed false · · 756 · vectorized true · · 757 scan · · (k int) · 758 · table t@primary · · 759 · spans FULL SCAN · · 760 761 query TTTTT 762 EXPLAIN (TYPES) SELECT v FROM t ORDER BY v 763 ---- 764 · distributed false · · 765 · vectorized true · · 766 sort · · (v int) +v 767 │ order +v · · 768 └── scan · · (v int) · 769 · table t@primary · · 770 · spans FULL SCAN · · 771 772 query TTTTT 773 EXPLAIN (TYPES) SELECT v FROM t LIMIT 1 774 ---- 775 · distributed false · · 776 · vectorized true · · 777 scan · · (v int) · 778 · table t@primary · · 779 · spans LIMITED SCAN · · 780 · limit 1 · · 781 782 statement ok 783 CREATE TABLE tt (x INT, y INT, INDEX a(x), INDEX b(y)) 784 785 query TTTTT 786 EXPLAIN (TYPES) SELECT * FROM tt WHERE x < 10 AND y > 10 787 ---- 788 · distributed false · · 789 · vectorized true · · 790 scan · · (x int, y int) · 791 · table tt@primary · · 792 · spans FULL SCAN · · 793 · filter ((((x)[int] < (10)[int])[bool]) AND (((y)[int] > (10)[int])[bool]))[bool] · · 794 795 # TODO(radu): we don't support placeholders with no values. 796 #query TTTTT 797 #EXPLAIN (TYPES) SELECT $1 + 2 AS a 798 #---- 799 #render · · (a int) a=CONST 800 # │ render 0 (($1)[int] + (2)[int])[int] · · 801 # └── emptyrow · · () · 802 803 query TTTTT 804 EXPLAIN (TYPES) SELECT abs(2-3) AS a 805 ---- 806 · distributed false · · 807 · vectorized false · · 808 values · · (a int) · 809 · size 1 column, 1 row · · 810 · row 0, expr 0 (1)[int] · · 811 812 # Check array subscripts (#13811) 813 query TTTTT 814 EXPLAIN (TYPES) SELECT x[1] FROM (SELECT ARRAY[1,2,3] AS x) 815 ---- 816 · distributed false · · 817 · vectorized false · · 818 values · · (x int) · 819 · size 1 column, 1 row · · 820 · row 0, expr 0 (1)[int] · · 821 822 query T 823 EXPLAIN (OPT) SELECT 1 AS r 824 ---- 825 values 826 └── (1,) 827 828 query T 829 EXPLAIN (OPT,VERBOSE) SELECT 1 AS r 830 ---- 831 values 832 ├── columns: r:1 833 ├── cardinality: [1 - 1] 834 ├── stats: [rows=1] 835 ├── cost: 0.02 836 ├── key: () 837 ├── fd: ()-->(1) 838 ├── prune: (1) 839 └── (1,) 840 841 query T 842 EXPLAIN (OPT,TYPES) SELECT 1 AS r 843 ---- 844 values 845 ├── columns: r:1(int!null) 846 ├── cardinality: [1 - 1] 847 ├── stats: [rows=1] 848 ├── cost: 0.02 849 ├── key: () 850 ├── fd: ()-->(1) 851 ├── prune: (1) 852 └── tuple [type=tuple{int}] 853 └── const: 1 [type=int] 854 855 query T 856 EXPLAIN (OPT) SELECT * FROM tc WHERE a = 10 ORDER BY b 857 ---- 858 sort 859 └── index-join tc 860 └── scan tc@c 861 └── constraint: /1/3: [/10 - /10] 862 863 query T 864 EXPLAIN (OPT,VERBOSE) SELECT * FROM tc WHERE a = 10 ORDER BY b 865 ---- 866 sort 867 ├── columns: a:1 b:2 868 ├── stats: [rows=10, distinct(1)=1, null(1)=0] 869 ├── cost: 52.7943856 870 ├── fd: ()-->(1) 871 ├── ordering: +2 opt(1) [actual: +2] 872 ├── prune: (2) 873 ├── interesting orderings: (+1) 874 └── index-join tc 875 ├── columns: a:1 b:2 876 ├── stats: [rows=10, distinct(1)=1, null(1)=0] 877 ├── cost: 51.92 878 ├── fd: ()-->(1) 879 ├── prune: (2) 880 ├── interesting orderings: (+1) 881 └── scan tc@c 882 ├── columns: a:1 rowid:3 883 ├── constraint: /1/3: [/10 - /10] 884 ├── stats: [rows=10, distinct(1)=1, null(1)=0] 885 ├── cost: 10.81 886 ├── key: (3) 887 └── fd: ()-->(1) 888 889 query T 890 EXPLAIN (OPT,TYPES) SELECT * FROM tc WHERE a = 10 ORDER BY b 891 ---- 892 sort 893 ├── columns: a:1(int!null) b:2(int) 894 ├── stats: [rows=10, distinct(1)=1, null(1)=0] 895 ├── cost: 52.7943856 896 ├── fd: ()-->(1) 897 ├── ordering: +2 opt(1) [actual: +2] 898 ├── prune: (2) 899 ├── interesting orderings: (+1) 900 └── index-join tc 901 ├── columns: a:1(int!null) b:2(int) 902 ├── stats: [rows=10, distinct(1)=1, null(1)=0] 903 ├── cost: 51.92 904 ├── fd: ()-->(1) 905 ├── prune: (2) 906 ├── interesting orderings: (+1) 907 └── scan tc@c 908 ├── columns: a:1(int!null) rowid:3(int!null) 909 ├── constraint: /1/3: [/10 - /10] 910 ├── stats: [rows=10, distinct(1)=1, null(1)=0] 911 ├── cost: 10.81 912 ├── key: (3) 913 └── fd: ()-->(1) 914 915 query T 916 EXPLAIN (OPT,CATALOG) SELECT * FROM tc WHERE a = 10 ORDER BY b 917 ---- 918 TABLE tc 919 ├── a int 920 ├── b int 921 ├── rowid int not null default (unique_rowid()) [hidden] 922 ├── INDEX primary 923 │ └── rowid int not null default (unique_rowid()) [hidden] 924 └── INDEX c 925 ├── a int 926 └── rowid int not null default (unique_rowid()) [hidden] 927 sort 928 └── index-join tc 929 └── scan tc@c 930 └── constraint: /1/3: [/10 - /10] 931 932 query T 933 EXPLAIN (OPT,VERBOSE,CATALOG) SELECT * FROM tc JOIN t ON k=a 934 ---- 935 TABLE tc 936 ├── a int 937 ├── b int 938 ├── rowid int not null default (unique_rowid()) [hidden] 939 ├── INDEX primary 940 │ └── rowid int not null default (unique_rowid()) [hidden] 941 └── INDEX c 942 ├── a int 943 └── rowid int not null default (unique_rowid()) [hidden] 944 TABLE t 945 ├── k int not null 946 ├── v int 947 └── INDEX primary 948 └── k int not null 949 inner-join (hash) 950 ├── columns: a:1 b:2 k:4 v:5 951 ├── stats: [rows=990, distinct(1)=99, null(1)=0, distinct(4)=99, null(4)=0] 952 ├── cost: 2219.95 953 ├── fd: (4)-->(5), (1)==(4), (4)==(1) 954 ├── prune: (2,5) 955 ├── scan tc 956 │ ├── columns: a:1 b:2 957 │ ├── stats: [rows=1000, distinct(1)=100, null(1)=10] 958 │ ├── cost: 1100.02 959 │ ├── prune: (1,2) 960 │ └── interesting orderings: (+1) 961 ├── scan t 962 │ ├── columns: k:4 v:5 963 │ ├── stats: [rows=1000, distinct(4)=1000, null(4)=0] 964 │ ├── cost: 1080.02 965 │ ├── key: (4) 966 │ ├── fd: (4)-->(5) 967 │ ├── prune: (4,5) 968 │ └── interesting orderings: (+4) 969 └── filters 970 └── k:4 = a:1 [outer=(1,4), constraints=(/1: (/NULL - ]; /4: (/NULL - ]), fd=(1)==(4), (4)==(1)] 971 972 query T 973 EXPLAIN (OPT) SELECT * FROM tc WHERE a + 2 * b > 1 ORDER BY a*b 974 ---- 975 sort 976 └── project 977 ├── select 978 │ ├── scan tc 979 │ └── filters 980 │ └── (a + (b * 2)) > 1 981 └── projections 982 └── a * b 983 984 query T 985 EXPLAIN (OPT, VERBOSE) SELECT * FROM tc WHERE a + 2 * b > 1 ORDER BY a*b 986 ---- 987 sort 988 ├── columns: a:1 b:2 [hidden: column4:4] 989 ├── stats: [rows=333.333333] 990 ├── cost: 1179.25548 991 ├── fd: (1,2)-->(4) 992 ├── ordering: +4 993 ├── prune: (1,2,4) 994 ├── interesting orderings: (+1) 995 └── project 996 ├── columns: column4:4 a:1 b:2 997 ├── stats: [rows=333.333333] 998 ├── cost: 1116.70667 999 ├── fd: (1,2)-->(4) 1000 ├── prune: (1,2,4) 1001 ├── interesting orderings: (+1) 1002 ├── select 1003 │ ├── columns: a:1 b:2 1004 │ ├── stats: [rows=333.333333] 1005 │ ├── cost: 1110.03 1006 │ ├── interesting orderings: (+1) 1007 │ ├── scan tc 1008 │ │ ├── columns: a:1 b:2 1009 │ │ ├── stats: [rows=1000] 1010 │ │ ├── cost: 1100.02 1011 │ │ ├── prune: (1,2) 1012 │ │ └── interesting orderings: (+1) 1013 │ └── filters 1014 │ └── (a:1 + (b:2 * 2)) > 1 [outer=(1,2)] 1015 └── projections 1016 └── a:1 * b:2 [as=column4:4, outer=(1,2)] 1017 1018 query T 1019 EXPLAIN (OPT, TYPES) SELECT * FROM tc WHERE a + 2 * b > 1 ORDER BY a*b 1020 ---- 1021 sort 1022 ├── columns: a:1(int) b:2(int) [hidden: column4:4(int)] 1023 ├── stats: [rows=333.333333] 1024 ├── cost: 1179.25548 1025 ├── fd: (1,2)-->(4) 1026 ├── ordering: +4 1027 ├── prune: (1,2,4) 1028 ├── interesting orderings: (+1) 1029 └── project 1030 ├── columns: column4:4(int) a:1(int) b:2(int) 1031 ├── stats: [rows=333.333333] 1032 ├── cost: 1116.70667 1033 ├── fd: (1,2)-->(4) 1034 ├── prune: (1,2,4) 1035 ├── interesting orderings: (+1) 1036 ├── select 1037 │ ├── columns: a:1(int) b:2(int) 1038 │ ├── stats: [rows=333.333333] 1039 │ ├── cost: 1110.03 1040 │ ├── interesting orderings: (+1) 1041 │ ├── scan tc 1042 │ │ ├── columns: a:1(int) b:2(int) 1043 │ │ ├── stats: [rows=1000] 1044 │ │ ├── cost: 1100.02 1045 │ │ ├── prune: (1,2) 1046 │ │ └── interesting orderings: (+1) 1047 │ └── filters 1048 │ └── gt [type=bool, outer=(1,2)] 1049 │ ├── plus [type=int] 1050 │ │ ├── variable: a:1 [type=int] 1051 │ │ └── mult [type=int] 1052 │ │ ├── variable: b:2 [type=int] 1053 │ │ └── const: 2 [type=int] 1054 │ └── const: 1 [type=int] 1055 └── projections 1056 └── mult [as=column4:4, type=int, outer=(1,2)] 1057 ├── variable: a:1 [type=int] 1058 └── variable: b:2 [type=int] 1059 1060 query TTT colnames 1061 EXPLAIN SELECT string_agg(x, y) FROM (VALUES ('foo', 'foo'), ('bar', 'bar')) t(x, y) 1062 ---- 1063 tree field description 1064 · distributed false 1065 · vectorized false 1066 group · · 1067 │ aggregate 0 string_agg(column1, column2) 1068 │ scalar · 1069 └── values · · 1070 · size 2 columns, 2 rows 1071 1072 query TTT 1073 EXPLAIN SELECT corr(a, b) FROM tc; 1074 ---- 1075 · distributed false 1076 · vectorized true 1077 group · · 1078 │ aggregate 0 corr(a, b) 1079 │ scalar · 1080 └── scan · · 1081 · table tc@primary 1082 · spans FULL SCAN