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 · ·