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