github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/exec/execbuilder/testdata/srfs (about)

     1  # LogicTest: local
     2  
     3  subtest generate_series
     4  
     5  query TTT
     6  EXPLAIN SELECT * FROM generate_series(1, 3)
     7  ----
     8  ·              distributed  false
     9  ·              vectorized   true
    10  project set    ·            ·
    11   └── emptyrow  ·            ·
    12  
    13  query TTT
    14  EXPLAIN SELECT * FROM generate_series(1, 2), generate_series(1, 2)
    15  ----
    16  ·                   distributed  false
    17  ·                   vectorized   true
    18  cross-join          ·            ·
    19   │                  type         cross
    20   ├── project set    ·            ·
    21   │    └── emptyrow  ·            ·
    22   └── project set    ·            ·
    23        └── emptyrow  ·            ·
    24  
    25  query TTT
    26  EXPLAIN SELECT * FROM ROWS FROM (cos(1))
    27  ----
    28  ·              distributed  false
    29  ·              vectorized   true
    30  project set    ·            ·
    31   └── emptyrow  ·            ·
    32  
    33  query TTT
    34  EXPLAIN SELECT generate_series(1, 3)
    35  ----
    36  ·              distributed  false
    37  ·              vectorized   true
    38  project set    ·            ·
    39   └── emptyrow  ·            ·
    40  
    41  subtest multiple_SRFs
    42  # See #20511
    43  
    44  query TTT
    45  EXPLAIN SELECT generate_series(1, 2), generate_series(1, 2)
    46  ----
    47  ·              distributed  false
    48  ·              vectorized   true
    49  project set    ·            ·
    50   └── emptyrow  ·            ·
    51  
    52  statement ok
    53  CREATE TABLE t (a string)
    54  
    55  statement ok
    56  CREATE TABLE u (b string)
    57  
    58  query TTTTT
    59  EXPLAIN (VERBOSE) SELECT t.*, u.*, generate_series(1,2), generate_series(3, 4) FROM t, u
    60  ----
    61  ·                             distributed  false                  ·                                         ·
    62  ·                             vectorized   true                   ·                                         ·
    63  render                        ·            ·                      (a, b, generate_series, generate_series)  ·
    64   │                            render 0     a                      ·                                         ·
    65   │                            render 1     b                      ·                                         ·
    66   │                            render 2     generate_series        ·                                         ·
    67   │                            render 3     generate_series        ·                                         ·
    68   └── cross-join               ·            ·                      (b, generate_series, generate_series, a)  ·
    69        │                       type         cross                  ·                                         ·
    70        ├── cross-join          ·            ·                      (b, generate_series, generate_series)     ·
    71        │    │                  type         cross                  ·                                         ·
    72        │    ├── scan           ·            ·                      (b)                                       ·
    73        │    │                  table        u@primary              ·                                         ·
    74        │    │                  spans        FULL SCAN              ·                                         ·
    75        │    └── project set    ·            ·                      (generate_series, generate_series)        ·
    76        │         │             render 0     generate_series(1, 2)  ·                                         ·
    77        │         │             render 1     generate_series(3, 4)  ·                                         ·
    78        │         └── emptyrow  ·            ·                      ()                                        ·
    79        └── scan                ·            ·                      (a)                                       ·
    80  ·                             table        t@primary              ·                                         ·
    81  ·                             spans        FULL SCAN              ·                                         ·
    82  
    83  subtest correlated_SRFs
    84  
    85  statement ok
    86  CREATE TABLE data (a INT PRIMARY KEY)
    87  
    88  query TTTTT
    89  EXPLAIN (VERBOSE) SELECT a, generate_series(a, a + 1) FROM data ORDER BY 1, 2
    90  ----
    91  ·                 distributed  false                        ·                     ·
    92  ·                 vectorized   true                         ·                     ·
    93  sort              ·            ·                            (a, generate_series)  +a,+generate_series
    94   │                order        +a,+generate_series          ·                     ·
    95   └── project set  ·            ·                            (a, generate_series)  ·
    96        │           render 0     generate_series(@1, @1 + 1)  ·                     ·
    97        └── scan    ·            ·                            (a)                   ·
    98  ·                 table        data@primary                 ·                     ·
    99  ·                 spans        FULL SCAN                    ·                     ·
   100  
   101  statement ok
   102  CREATE TABLE xy (x INT PRIMARY KEY, y INT)
   103  
   104  statement ok
   105  CREATE TABLE xz (x INT PRIMARY KEY, z INT)
   106  
   107  query TTTTT
   108  EXPLAIN (VERBOSE) SELECT x, y, z, information_schema._pg_expandarray(ARRAY[x, y, z])
   109    FROM xy NATURAL JOIN xz WHERE y < z ORDER BY 1, 2, 3
   110  ----
   111  ·                               distributed         false                                                  ·                                                ·
   112  ·                               vectorized          true                                                   ·                                                ·
   113  render                          ·                   ·                                                      (x, y, z, "information_schema._pg_expandarray")  ·
   114   │                              render 0            x                                                      ·                                                ·
   115   │                              render 1            y                                                      ·                                                ·
   116   │                              render 2            z                                                      ·                                                ·
   117   │                              render 3            "information_schema._pg_expandarray"                   ·                                                ·
   118   └── sort                       ·                   ·                                                      ("information_schema._pg_expandarray", x, y, z)  +x
   119        │                         order               +x                                                     ·                                                ·
   120        └── render                ·                   ·                                                      ("information_schema._pg_expandarray", x, y, z)  ·
   121             │                    render 0            ((x, n) AS x, n)                                       ·                                                ·
   122             │                    render 1            x                                                      ·                                                ·
   123             │                    render 2            y                                                      ·                                                ·
   124             │                    render 3            z                                                      ·                                                ·
   125             └── project set      ·                   ·                                                      (x, y, x, z, x, n)                               ·
   126                  │               render 0            information_schema._pg_expandarray(ARRAY[@1, @2, @4])  ·                                                ·
   127                  └── merge-join  ·                   ·                                                      (x, y, x, z)                                     ·
   128                       │          type                inner                                                  ·                                                ·
   129                       │          equality            (x) = (x)                                              ·                                                ·
   130                       │          left cols are key   ·                                                      ·                                                ·
   131                       │          right cols are key  ·                                                      ·                                                ·
   132                       │          mergeJoinOrder      +"(x=x)"                                               ·                                                ·
   133                       │          pred                y < z                                                  ·                                                ·
   134                       ├── scan   ·                   ·                                                      (x, y)                                           +x
   135                       │          table               xy@primary                                             ·                                                ·
   136                       │          spans               FULL SCAN                                              ·                                                ·
   137                       └── scan   ·                   ·                                                      (x, z)                                           +x
   138  ·                               table               xz@primary                                             ·                                                ·
   139  ·                               spans               FULL SCAN                                              ·                                                ·
   140  
   141  query TTTTT
   142  EXPLAIN (VERBOSE) SELECT generate_series(x, z) FROM xz WHERE z < ANY(SELECT generate_series(x, y) FROM xy)
   143  ----
   144  ·                           distributed  false                    ·                        ·
   145  ·                           vectorized   true                     ·                        ·
   146  render                      ·            ·                        (generate_series)        ·
   147   │                          render 0     generate_series          ·                        ·
   148   └── project set            ·            ·                        (x, z, generate_series)  ·
   149        │                     render 0     generate_series(@1, @2)  ·                        ·
   150        └── cross-join        ·            ·                        (x, z)                   ·
   151             │                type         semi                     ·                        ·
   152             │                pred         z < generate_series      ·                        ·
   153             ├── scan         ·            ·                        (x, z)                   ·
   154             │                table        xz@primary               ·                        ·
   155             │                spans        FULL SCAN                ·                        ·
   156             └── project set  ·            ·                        (x, y, generate_series)  ·
   157                  │           render 0     generate_series(@1, @2)  ·                        ·
   158                  └── scan    ·            ·                        (x, y)                   ·
   159  ·                           table        xy@primary               ·                        ·
   160  ·                           spans        FULL SCAN                ·                        ·
   161  
   162  query TTTTT
   163  EXPLAIN (VERBOSE) SELECT generate_subscripts(ARRAY[0, x, 1, 2]), generate_series(x, y), unnest(ARRAY[0, x, y, z]), y, z
   164    FROM xy NATURAL LEFT OUTER JOIN xz
   165  ----
   166  ·                     distributed         false                                    ·                                                           ·
   167  ·                     vectorized          true                                     ·                                                           ·
   168  render                ·                   ·                                        (generate_subscripts, generate_series, unnest, y, z)        ·
   169   │                    render 0            generate_subscripts                      ·                                                           ·
   170   │                    render 1            generate_series                          ·                                                           ·
   171   │                    render 2            unnest                                   ·                                                           ·
   172   │                    render 3            y                                        ·                                                           ·
   173   │                    render 4            z                                        ·                                                           ·
   174   └── project set      ·                   ·                                        (x, y, x, z, generate_subscripts, generate_series, unnest)  ·
   175        │               render 0            generate_subscripts(ARRAY[0, @1, 1, 2])  ·                                                           ·
   176        │               render 1            generate_series(@1, @2)                  ·                                                           ·
   177        │               render 2            unnest(ARRAY[0, @1, @2, @4])             ·                                                           ·
   178        └── merge-join  ·                   ·                                        (x, y, x, z)                                                ·
   179             │          type                left outer                               ·                                                           ·
   180             │          equality            (x) = (x)                                ·                                                           ·
   181             │          left cols are key   ·                                        ·                                                           ·
   182             │          right cols are key  ·                                        ·                                                           ·
   183             │          mergeJoinOrder      +"(x=x)"                                 ·                                                           ·
   184             ├── scan   ·                   ·                                        (x, y)                                                      +x
   185             │          table               xy@primary                               ·                                                           ·
   186             │          spans               FULL SCAN                                ·                                                           ·
   187             └── scan   ·                   ·                                        (x, z)                                                      +x
   188  ·                     table               xz@primary                               ·                                                           ·
   189  ·                     spans               FULL SCAN                                ·                                                           ·
   190  
   191  query TTTTT
   192  EXPLAIN (VERBOSE) SELECT generate_series((SELECT unnest(ARRAY[x, y]) FROM xy), z) FROM xz
   193  ----
   194  ·                               distributed   false                                 ·                     ·
   195  ·                               vectorized    true                                  ·                     ·
   196  root                            ·             ·                                     (generate_series)     ·
   197   ├── render                     ·             ·                                     (generate_series)     ·
   198   │    │                         render 0      generate_series                       ·                     ·
   199   │    └── project set           ·             ·                                     (z, generate_series)  ·
   200   │         │                    render 0      generate_series(@S1, @1)              ·                     ·
   201   │         └── scan             ·             ·                                     (z)                   ·
   202   │                              table         xz@primary                            ·                     ·
   203   │                              spans         FULL SCAN                             ·                     ·
   204   └── subquery                   ·             ·                                     ·                     ·
   205        │                         id            @S1                                   ·                     ·
   206        │                         original sql  (SELECT unnest(ARRAY[x, y]) FROM xy)  ·                     ·
   207        │                         exec mode     one row                               ·                     ·
   208        └── max1row               ·             ·                                     (unnest)              ·
   209             └── render           ·             ·                                     (unnest)              ·
   210                  │               render 0      unnest                                ·                     ·
   211                  └── apply-join  ·             ·                                     (x, y, unnest)        ·
   212                       │          type          inner                                 ·                     ·
   213                       └── scan   ·             ·                                     (x, y)                ·
   214  ·                               table         xy@primary                            ·                     ·
   215  ·                               spans         FULL SCAN                             ·                     ·
   216  
   217  # Regression test for #24676.
   218  statement ok
   219  CREATE TABLE groups(
   220    id SERIAL,
   221    data jsonb,
   222    primary key (id)
   223  )
   224  
   225  query TTTTT
   226  EXPLAIN (VERBOSE) SELECT
   227    g.data->>'name' AS group_name,
   228    jsonb_array_elements( (SELECT gg.data->'members' FROM groups gg WHERE gg.data->>'name' = g.data->>'name') )
   229  FROM
   230    groups g
   231  ----
   232  ·                                   distributed         false                     ·                                             ·
   233  ·                                   vectorized          true                      ·                                             ·
   234  render                              ·                   ·                         (group_name, jsonb_array_elements)            ·
   235   │                                  render 0            data->>'name'             ·                                             ·
   236   │                                  render 1            jsonb_array_elements      ·                                             ·
   237   └── project set                    ·                   ·                         (id, data, "?column?", jsonb_array_elements)  ·
   238        │                             render 0            jsonb_array_elements(@3)  ·                                             ·
   239        └── distinct                  ·                   ·                         (id, data, "?column?")                        ·
   240             │                        distinct on         id                        ·                                             ·
   241             │                        error on duplicate  ·                         ·                                             ·
   242             └── render               ·                   ·                         (id, data, "?column?")                        ·
   243                  │                   render 0            id                        ·                                             ·
   244                  │                   render 1            data                      ·                                             ·
   245                  │                   render 2            "?column?"                ·                                             ·
   246                  └── hash-join       ·                   ·                         (column8, id, data, column9, "?column?")      ·
   247                       │              type                left outer                ·                                             ·
   248                       │              equality            (column8) = (column9)     ·                                             ·
   249                       ├── render     ·                   ·                         (column8, id, data)                           ·
   250                       │    │         render 0            data->>'name'             ·                                             ·
   251                       │    │         render 1            id                        ·                                             ·
   252                       │    │         render 2            data                      ·                                             ·
   253                       │    └── scan  ·                   ·                         (id, data)                                    ·
   254                       │              table               groups@primary            ·                                             ·
   255                       │              spans               FULL SCAN                 ·                                             ·
   256                       └── render     ·                   ·                         (column9, "?column?")                         ·
   257                            │         render 0            data->>'name'             ·                                             ·
   258                            │         render 1            data->'members'           ·                                             ·
   259                            └── scan  ·                   ·                         (data)                                        ·
   260  ·                                   table               groups@primary            ·                                             ·
   261  ·                                   spans               FULL SCAN                 ·                                             ·
   262  
   263  # Regression test for #32162.
   264  query TTTTT
   265  EXPLAIN (VERBOSE) SELECT * FROM ROWS FROM (IF(length('abc') = length('def'), 1, 0))
   266  ----
   267  ·              distributed  false  ·       ·
   268  ·              vectorized   true   ·       ·
   269  project set    ·            ·      ("if")  ·
   270   │             render 0     1      ·       ·
   271   └── emptyrow  ·            ·      ()      ·
   272  
   273  statement ok
   274  CREATE TABLE articles (
   275    id INT PRIMARY KEY,
   276    body STRING,
   277    description STRING,
   278    title STRING,
   279    slug STRING,
   280    tag_list STRING[],
   281    user_id STRING,
   282    created_at TIMESTAMP,
   283    updated_at TIMESTAMP
   284  )
   285  
   286  # Regression test for #31706.
   287  query TTTTT
   288  EXPLAIN (VERBOSE) SELECT a0.id, a0.body, a0.description, a0.title, a0.slug, a0.tag_list, a0.user_id, a0.created_at, a0.updated_at
   289      FROM articles AS a0
   290     WHERE EXISTS(SELECT * FROM unnest(a0.tag_list) AS tag WHERE tag = 'dragons')
   291  ORDER BY a0.created_at
   292     LIMIT 10
   293    OFFSET 0;
   294  ----
   295  ·                                     distributed  false                      ·                                                                                        ·
   296  ·                                     vectorized   true                       ·                                                                                        ·
   297  limit                                 ·            ·                          (id, body, description, title, slug, tag_list, user_id, created_at, updated_at)          +created_at
   298   │                                    count        10                         ·                                                                                        ·
   299   └── sort                             ·            ·                          (id, body, description, title, slug, tag_list, user_id, created_at, updated_at)          +created_at
   300        │                               order        +created_at                ·                                                                                        ·
   301        └── group                       ·            ·                          (id, body, description, title, slug, tag_list, user_id, created_at, updated_at)          ·
   302             │                          aggregate 0  id                         ·                                                                                        ·
   303             │                          aggregate 1  any_not_null(body)         ·                                                                                        ·
   304             │                          aggregate 2  any_not_null(description)  ·                                                                                        ·
   305             │                          aggregate 3  any_not_null(title)        ·                                                                                        ·
   306             │                          aggregate 4  any_not_null(slug)         ·                                                                                        ·
   307             │                          aggregate 5  any_not_null(tag_list)     ·                                                                                        ·
   308             │                          aggregate 6  any_not_null(user_id)      ·                                                                                        ·
   309             │                          aggregate 7  any_not_null(created_at)   ·                                                                                        ·
   310             │                          aggregate 8  any_not_null(updated_at)   ·                                                                                        ·
   311             │                          group by     id                         ·                                                                                        ·
   312             └── render                 ·            ·                          (id, body, description, title, slug, tag_list, user_id, created_at, updated_at)          ·
   313                  │                     render 0     id                         ·                                                                                        ·
   314                  │                     render 1     body                       ·                                                                                        ·
   315                  │                     render 2     description                ·                                                                                        ·
   316                  │                     render 3     title                      ·                                                                                        ·
   317                  │                     render 4     slug                       ·                                                                                        ·
   318                  │                     render 5     tag_list                   ·                                                                                        ·
   319                  │                     render 6     user_id                    ·                                                                                        ·
   320                  │                     render 7     created_at                 ·                                                                                        ·
   321                  │                     render 8     updated_at                 ·                                                                                        ·
   322                  └── filter            ·            ·                          (id, body, description, title, slug, tag_list, user_id, created_at, updated_at, unnest)  ·
   323                       │                filter       unnest = 'dragons'         ·                                                                                        ·
   324                       └── project set  ·            ·                          (id, body, description, title, slug, tag_list, user_id, created_at, updated_at, unnest)  ·
   325                            │           render 0     unnest(@6)                 ·                                                                                        ·
   326                            └── scan    ·            ·                          (id, body, description, title, slug, tag_list, user_id, created_at, updated_at)          ·
   327  ·                                     table        articles@primary           ·                                                                                        ·
   328  ·                                     spans        FULL SCAN                  ·                                                                                        ·
   329  
   330  # Regression test for #32723.
   331  query TTTTT
   332  EXPLAIN (VERBOSE)
   333      SELECT
   334          generate_series(a + 1, a + 1)
   335      FROM
   336          (SELECT a FROM ((SELECT 1 AS a, 1) EXCEPT ALL (SELECT 0, 0)))
   337  ----
   338  ·                           distributed    false                            ·                         ·
   339  ·                           vectorized     false                            ·                         ·
   340  render                      ·              ·                                (generate_series)         ·
   341   │                          render 0       generate_series                  ·                         ·
   342   └── project set            ·              ·                                (a, a, generate_series)   ·
   343        │                     render 0       generate_series(@2 + 1, @2 + 1)  ·                         ·
   344        └── union             ·              ·                                (a, a)                    ·
   345             ├── render       ·              ·                                (a, a)                    ·
   346             │    │           render 0       a                                ·                         ·
   347             │    │           render 1       a                                ·                         ·
   348             │    └── values  ·              ·                                (a)                       ·
   349             │                size           1 column, 1 row                  ·                         ·
   350             │                row 0, expr 0  1                                ·                         ·
   351             └── render       ·              ·                                ("?column?", "?column?")  ·
   352                  │           render 0       "?column?"                       ·                         ·
   353                  │           render 1       "?column?"                       ·                         ·
   354                  └── values  ·              ·                                ("?column?")              ·
   355  ·                           size           1 column, 1 row                  ·                         ·
   356  ·                           row 0, expr 0  0                                ·                         ·