github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/exec/execbuilder/testdata/scalar (about) 1 # LogicTest: local 2 # 3 # This file tests that we build scalar expressions correctly. We do this by 4 # putting expressions inside projections and checking that they roundtrip 5 # correctly. 6 7 statement ok 8 CREATE TABLE t (a INT, b INT, c INT, d INT, j JSONB, s STRING) 9 10 query TTTTT 11 EXPLAIN (VERBOSE) SELECT 1 + 2 AS r 12 ---- 13 · distributed false · · 14 · vectorized false · · 15 values · · (r) · 16 · size 1 column, 1 row · · 17 · row 0, expr 0 3 · · 18 19 query TTTTT 20 EXPLAIN (VERBOSE) SELECT true AS r 21 ---- 22 · distributed false · · 23 · vectorized false · · 24 values · · (r) · 25 · size 1 column, 1 row · · 26 · row 0, expr 0 true · · 27 28 query TTTTT 29 EXPLAIN (VERBOSE) SELECT false AS r 30 ---- 31 · distributed false · · 32 · vectorized false · · 33 values · · (r) · 34 · size 1 column, 1 row · · 35 · row 0, expr 0 false · · 36 37 query TTTTT 38 EXPLAIN (VERBOSE) SELECT (1, 2) AS r 39 ---- 40 · distributed false · · 41 · vectorized false · · 42 values · · (r) · 43 · size 1 column, 1 row · · 44 · row 0, expr 0 (1, 2) · · 45 46 query TTTTT 47 EXPLAIN (VERBOSE) SELECT (true, false) AS r 48 ---- 49 · distributed false · · 50 · vectorized false · · 51 values · · (r) · 52 · size 1 column, 1 row · · 53 · row 0, expr 0 (true, false) · · 54 55 query TTTTT 56 EXPLAIN (VERBOSE) SELECT 1 + 2 AS r FROM t 57 ---- 58 · distributed false · · 59 · vectorized true · · 60 render · · (r) · 61 │ render 0 3 · · 62 └── scan · · () · 63 · table t@primary · · 64 · spans FULL SCAN · · 65 66 query TTTTT 67 EXPLAIN (VERBOSE) SELECT a + 2 AS r FROM t 68 ---- 69 · distributed false · · 70 · vectorized true · · 71 render · · (r) · 72 │ render 0 a + 2 · · 73 └── scan · · (a) · 74 · table t@primary · · 75 · spans FULL SCAN · · 76 77 query TTTTT 78 EXPLAIN (VERBOSE) SELECT a >= 5 AND b <= 10 AND c < 4 AS r FROM t 79 ---- 80 · distributed false · · 81 · vectorized true · · 82 render · · (r) · 83 │ render 0 ((a >= 5) AND (b <= 10)) AND (c < 4) · · 84 └── scan · · (a, b, c) · 85 · table t@primary · · 86 · spans FULL SCAN · · 87 88 query TTTTT 89 EXPLAIN (VERBOSE) SELECT a >= 5 OR b <= 10 OR c < 4 AS r FROM t 90 ---- 91 · distributed false · · 92 · vectorized true · · 93 render · · (r) · 94 │ render 0 ((a >= 5) OR (b <= 10)) OR (c < 4) · · 95 └── scan · · (a, b, c) · 96 · table t@primary · · 97 · spans FULL SCAN · · 98 99 query TTTTT 100 EXPLAIN (VERBOSE) SELECT NOT (a = 5) AS r FROM t 101 ---- 102 · distributed false · · 103 · vectorized true · · 104 render · · (r) · 105 │ render 0 a != 5 · · 106 └── scan · · (a) · 107 · table t@primary · · 108 · spans FULL SCAN · · 109 110 query TTTTT 111 EXPLAIN (VERBOSE) SELECT NOT (a > 5 AND b >= 10) AS r FROM t 112 ---- 113 · distributed false · · 114 · vectorized true · · 115 render · · (r) · 116 │ render 0 (a <= 5) OR (b < 10) · · 117 └── scan · · (a, b) · 118 · table t@primary · · 119 · spans FULL SCAN · · 120 121 query TTTTT 122 EXPLAIN (VERBOSE) SELECT (a >= 5 AND b <= 10) OR (a <= 10 AND c > 5) AS r FROM t 123 ---- 124 · distributed false · · 125 · vectorized true · · 126 render · · (r) · 127 │ render 0 ((a >= 5) AND (b <= 10)) OR ((a <= 10) AND (c > 5)) · · 128 └── scan · · (a, b, c) · 129 · table t@primary · · 130 · spans FULL SCAN · · 131 132 query TTTTT 133 EXPLAIN (VERBOSE) SELECT NOT (a >= 5 OR b <= 10) AND NOT (c >= 10) AS r FROM t 134 ---- 135 · distributed false · · 136 · vectorized true · · 137 render · · (r) · 138 │ render 0 ((a < 5) AND (b > 10)) AND (c < 10) · · 139 └── scan · · (a, b, c) · 140 · table t@primary · · 141 · spans FULL SCAN · · 142 143 query TTTTT 144 EXPLAIN (VERBOSE) SELECT (a, b) = (1, 2) AS r FROM t 145 ---- 146 · distributed false · · 147 · vectorized true · · 148 render · · (r) · 149 │ render 0 (a = 1) AND (b = 2) · · 150 └── scan · · (a, b) · 151 · table t@primary · · 152 · spans FULL SCAN · · 153 154 query TTTTT 155 EXPLAIN (VERBOSE) SELECT a IN (1, 2) AS r FROM t 156 ---- 157 · distributed false · · 158 · vectorized true · · 159 render · · (r) · 160 │ render 0 a IN (1, 2) · · 161 └── scan · · (a) · 162 · table t@primary · · 163 · spans FULL SCAN · · 164 165 query TTTTT 166 EXPLAIN (VERBOSE) SELECT (a, b) IN ((1, 2), (3, 4)) AS r FROM t 167 ---- 168 · distributed false · · 169 · vectorized true · · 170 render · · (r) · 171 │ render 0 (a, b) IN ((1, 2), (3, 4)) · · 172 └── scan · · (a, b) · 173 · table t@primary · · 174 · spans FULL SCAN · · 175 176 query TTTTT 177 EXPLAIN (VERBOSE) SELECT (a, b + c, 5 + d * 2) = (b+c, 8, a - c) AS r FROM t 178 ---- 179 · distributed false · · 180 · vectorized true · · 181 render · · (r) · 182 │ render 0 ((a = (b + c)) AND ((b + c) = 8)) AND (((d * 2) + 5) = (a - c)) · · 183 └── scan · · (a, b, c, d) · 184 · table t@primary · · 185 · spans FULL SCAN · · 186 187 query TTTTT 188 EXPLAIN (VERBOSE) SELECT ((a, b), (c, d)) = ((1, 2), (3, 4)) AS r FROM t 189 ---- 190 · distributed false · · 191 · vectorized true · · 192 render · · (r) · 193 │ render 0 (((a = 1) AND (b = 2)) AND (c = 3)) AND (d = 4) · · 194 └── scan · · (a, b, c, d) · 195 · table t@primary · · 196 · spans FULL SCAN · · 197 198 query TTTTT 199 EXPLAIN (VERBOSE) SELECT (a, (b, 'a'), (c, 'b', 5)) = (9, (a+c, s), (5, s, a)) AS r FROM t 200 ---- 201 · distributed false · · 202 · vectorized true · · 203 render · · (r) · 204 │ render 0 (((((a = 9) AND (b = (a + c))) AND (s = 'a')) AND (c = 5)) AND (s = 'b')) AND (a = 5) · · 205 └── scan · · (a, b, c, s) · 206 · table t@primary · · 207 · spans FULL SCAN · · 208 209 query TTTTT 210 EXPLAIN (VERBOSE) SELECT a IS NULL AS r FROM t 211 ---- 212 · distributed false · · 213 · vectorized true · · 214 render · · (r) · 215 │ render 0 a IS NULL · · 216 └── scan · · (a) · 217 · table t@primary · · 218 · spans FULL SCAN · · 219 220 query TTTTT 221 EXPLAIN (VERBOSE) SELECT a IS NOT DISTINCT FROM NULL AS r FROM t 222 ---- 223 · distributed false · · 224 · vectorized true · · 225 render · · (r) · 226 │ render 0 a IS NULL · · 227 └── scan · · (a) · 228 · table t@primary · · 229 · spans FULL SCAN · · 230 231 query TTTTT 232 EXPLAIN (VERBOSE) SELECT (a, b) IS NULL AS r FROM t 233 ---- 234 · distributed false · · 235 · vectorized true · · 236 render · · (r) · 237 │ render 0 (a, b) IS NULL · · 238 └── scan · · (a, b) · 239 · table t@primary · · 240 · spans FULL SCAN · · 241 242 query TTTTT 243 EXPLAIN (VERBOSE) SELECT (a, b) IS NOT DISTINCT FROM NULL AS r FROM t 244 ---- 245 · distributed false · · 246 · vectorized true · · 247 render · · (r) · 248 │ render 0 (a, b) IS NOT DISTINCT FROM NULL · · 249 └── scan · · (a, b) · 250 · table t@primary · · 251 · spans FULL SCAN · · 252 253 query TTTTT 254 EXPLAIN (VERBOSE) SELECT a IS NOT DISTINCT FROM b AS r FROM t 255 ---- 256 · distributed false · · 257 · vectorized true · · 258 render · · (r) · 259 │ render 0 a IS NOT DISTINCT FROM b · · 260 └── scan · · (a, b) · 261 · table t@primary · · 262 · spans FULL SCAN · · 263 264 query TTTTT 265 EXPLAIN (VERBOSE) SELECT a IS NOT NULL AS r FROM t 266 ---- 267 · distributed false · · 268 · vectorized true · · 269 render · · (r) · 270 │ render 0 a IS NOT NULL · · 271 └── scan · · (a) · 272 · table t@primary · · 273 · spans FULL SCAN · · 274 275 query TTTTT 276 EXPLAIN (VERBOSE) SELECT a IS DISTINCT FROM NULL AS r FROM t 277 ---- 278 · distributed false · · 279 · vectorized true · · 280 render · · (r) · 281 │ render 0 a IS NOT NULL · · 282 └── scan · · (a) · 283 · table t@primary · · 284 · spans FULL SCAN · · 285 286 query TTTTT 287 EXPLAIN (VERBOSE) SELECT (a, b) IS NOT NULL AS r FROM t 288 ---- 289 · distributed false · · 290 · vectorized true · · 291 render · · (r) · 292 │ render 0 (a, b) IS NOT NULL · · 293 └── scan · · (a, b) · 294 · table t@primary · · 295 · spans FULL SCAN · · 296 297 query TTTTT 298 EXPLAIN (VERBOSE) SELECT (a, b) IS DISTINCT FROM NULL AS r FROM t 299 ---- 300 · distributed false · · 301 · vectorized true · · 302 render · · (r) · 303 │ render 0 (a, b) IS DISTINCT FROM NULL · · 304 └── scan · · (a, b) · 305 · table t@primary · · 306 · spans FULL SCAN · · 307 308 query TTTTT 309 EXPLAIN (VERBOSE) SELECT a IS DISTINCT FROM b AS r FROM t 310 ---- 311 · distributed false · · 312 · vectorized true · · 313 render · · (r) · 314 │ render 0 a IS DISTINCT FROM b · · 315 └── scan · · (a, b) · 316 · table t@primary · · 317 · spans FULL SCAN · · 318 319 query TTTTT 320 EXPLAIN (VERBOSE) SELECT +a + (-b) AS r FROM t 321 ---- 322 · distributed false · · 323 · vectorized true · · 324 render · · (r) · 325 │ render 0 a + (-b) · · 326 └── scan · · (a, b) · 327 · table t@primary · · 328 · spans FULL SCAN · · 329 330 query TTTTT 331 EXPLAIN (VERBOSE) SELECT CASE a WHEN 1 THEN 2 WHEN 2 THEN 3 ELSE 4 END AS r FROM t 332 ---- 333 · distributed false · · 334 · vectorized true · · 335 render · · (r) · 336 │ render 0 CASE a WHEN 1 THEN 2 WHEN 2 THEN 3 ELSE 4 END · · 337 └── scan · · (a) · 338 · table t@primary · · 339 · spans FULL SCAN · · 340 341 query TTTTT 342 EXPLAIN (VERBOSE) SELECT CASE WHEN a = 2 THEN 1 ELSE 2 END AS r FROM t 343 ---- 344 · distributed false · · 345 · vectorized true · · 346 render · · (r) · 347 │ render 0 CASE WHEN a = 2 THEN 1 ELSE 2 END · · 348 └── scan · · (a) · 349 · table t@primary · · 350 · spans FULL SCAN · · 351 352 query TTTTT 353 EXPLAIN (VERBOSE) SELECT CASE a + 3 WHEN 5 * b THEN 1 % b WHEN 6 THEN 2 ELSE -1 END AS r FROM t 354 ---- 355 · distributed false · · 356 · vectorized true · · 357 render · · (r) · 358 │ render 0 CASE a + 3 WHEN b * 5 THEN 1 % b WHEN 6 THEN 2 ELSE -1 END · · 359 └── scan · · (a, b) · 360 · table t@primary · · 361 · spans FULL SCAN · · 362 363 # Tests for CASE with no ELSE statement 364 query TTTTT 365 EXPLAIN (VERBOSE) SELECT CASE WHEN a = 2 THEN 1 END AS r FROM t 366 ---- 367 · distributed false · · 368 · vectorized true · · 369 render · · (r) · 370 │ render 0 CASE WHEN a = 2 THEN 1 END · · 371 └── scan · · (a) · 372 · table t@primary · · 373 · spans FULL SCAN · · 374 375 query TTTTT 376 EXPLAIN (VERBOSE) SELECT CASE a WHEN 2 THEN 1 END AS r FROM t 377 ---- 378 · distributed false · · 379 · vectorized true · · 380 render · · (r) · 381 │ render 0 CASE a WHEN 2 THEN 1 END · · 382 └── scan · · (a) · 383 · table t@primary · · 384 · spans FULL SCAN · · 385 386 # TODO(radu): IS OF not supported yet. 387 #query TTTTT 388 #EXPLAIN (VERBOSE) SELECT a FROM t WHERE a IS OF (INT) 389 #---- 390 #filter · · (a) · 391 # │ filter t.a IS OF (INT) · · 392 # └── scan · · (a) · 393 #· table t@primary · · 394 #· spans ALL · · 395 396 query TTTTT 397 EXPLAIN (VERBOSE) SELECT length(s) FROM t 398 ---- 399 · distributed false · · 400 · vectorized true · · 401 render · · (length) · 402 │ render 0 length(s) · · 403 └── scan · · (s) · 404 · table t@primary · · 405 · spans FULL SCAN · · 406 407 query TTTTT 408 EXPLAIN (VERBOSE) SELECT j @> '{"a": 1}' AS r FROM t 409 ---- 410 · distributed false · · 411 · vectorized true · · 412 render · · (r) · 413 │ render 0 j @> '{"a": 1}' · · 414 └── scan · · (j) · 415 · table t@primary · · 416 · spans FULL SCAN · · 417 418 query TTTTT 419 EXPLAIN (VERBOSE) SELECT '{"a": 1}' <@ j AS r FROM t 420 ---- 421 · distributed false · · 422 · vectorized true · · 423 render · · (r) · 424 │ render 0 j @> '{"a": 1}' · · 425 └── scan · · (j) · 426 · table t@primary · · 427 · spans FULL SCAN · · 428 429 query TTTTT 430 EXPLAIN (VERBOSE) SELECT j->>'a' AS r FROM t 431 ---- 432 · distributed false · · 433 · vectorized true · · 434 render · · (r) · 435 │ render 0 j->>'a' · · 436 └── scan · · (j) · 437 · table t@primary · · 438 · spans FULL SCAN · · 439 440 query TTTTT 441 EXPLAIN (VERBOSE) SELECT j->'a' AS r FROM t 442 ---- 443 · distributed false · · 444 · vectorized true · · 445 render · · (r) · 446 │ render 0 j->'a' · · 447 └── scan · · (j) · 448 · table t@primary · · 449 · spans FULL SCAN · · 450 451 query TTTTT 452 EXPLAIN (VERBOSE) SELECT j ? 'a' AS r FROM t 453 ---- 454 · distributed false · · 455 · vectorized true · · 456 render · · (r) · 457 │ render 0 j ? 'a' · · 458 └── scan · · (j) · 459 · table t@primary · · 460 · spans FULL SCAN · · 461 462 query TTTTT 463 EXPLAIN (VERBOSE) SELECT j ?| ARRAY['a', 'b', 'c'] AS r FROM t 464 ---- 465 · distributed false · · 466 · vectorized true · · 467 render · · (r) · 468 │ render 0 j ?| ARRAY['a','b','c'] · · 469 └── scan · · (j) · 470 · table t@primary · · 471 · spans FULL SCAN · · 472 473 query TTTTT 474 EXPLAIN (VERBOSE) SELECT j ?& ARRAY['a', 'b', 'c'] AS r FROM t 475 ---- 476 · distributed false · · 477 · vectorized true · · 478 render · · (r) · 479 │ render 0 j ?& ARRAY['a','b','c'] · · 480 └── scan · · (j) · 481 · table t@primary · · 482 · spans FULL SCAN · · 483 484 query TTTTT 485 EXPLAIN (VERBOSE) SELECT j#>ARRAY['a'] AS r FROM t 486 ---- 487 · distributed false · · 488 · vectorized true · · 489 render · · (r) · 490 │ render 0 j#>ARRAY['a'] · · 491 └── scan · · (j) · 492 · table t@primary · · 493 · spans FULL SCAN · · 494 495 query TTTTT 496 EXPLAIN (VERBOSE) SELECT j#>>ARRAY['a'] AS r FROM t 497 ---- 498 · distributed false · · 499 · vectorized true · · 500 render · · (r) · 501 │ render 0 j#>>ARRAY['a'] · · 502 └── scan · · (j) · 503 · table t@primary · · 504 · spans FULL SCAN · · 505 506 507 query TTTTT 508 EXPLAIN (VERBOSE) SELECT CAST(a AS string), b::float FROM t 509 ---- 510 · distributed false · · 511 · vectorized true · · 512 render · · (a, b) · 513 │ render 0 a::STRING · · 514 │ render 1 b::FLOAT8 · · 515 └── scan · · (a, b) · 516 · table t@primary · · 517 · spans FULL SCAN · · 518 519 query TTTTT 520 EXPLAIN (VERBOSE) SELECT CAST(a + b + c AS string) FROM t 521 ---- 522 · distributed false · · 523 · vectorized true · · 524 render · · (text) · 525 │ render 0 (c + (a + b))::STRING · · 526 └── scan · · (a, b, c) · 527 · table t@primary · · 528 · spans FULL SCAN · · 529 530 query TTTTT 531 EXPLAIN (VERBOSE) SELECT s::VARCHAR(2) FROM t 532 ---- 533 · distributed false · · 534 · vectorized true · · 535 render · · (s) · 536 │ render 0 s::VARCHAR(2) · · 537 └── scan · · (s) · 538 · table t@primary · · 539 · spans FULL SCAN · · 540 541 query TTTTT 542 EXPLAIN (VERBOSE) SELECT COALESCE(a, b) FROM (VALUES (1, 2), (3, NULL), (NULL, 4), (NULL, NULL)) AS v(a, b) 543 ---- 544 · distributed false · · 545 · vectorized false · · 546 render · · ("coalesce") · 547 │ render 0 COALESCE(column1, column2) · · 548 └── values · · (column1, column2) · 549 · size 2 columns, 4 rows · · 550 · row 0, expr 0 1 · · 551 · row 0, expr 1 2 · · 552 · row 1, expr 0 3 · · 553 · row 1, expr 1 CAST(NULL AS INT8) · · 554 · row 2, expr 0 CAST(NULL AS INT8) · · 555 · row 2, expr 1 4 · · 556 · row 3, expr 0 CAST(NULL AS INT8) · · 557 · row 3, expr 1 CAST(NULL AS INT8) · · 558 559 query TTTTT 560 EXPLAIN (VERBOSE) SELECT COALESCE(a, b, c) FROM (VALUES (1, 2, 3), (NULL, 4, 5), (NULL, NULL, 6), (NULL, NULL, NULL)) AS v(a, b, c) 561 ---- 562 · distributed false · · 563 · vectorized false · · 564 render · · ("coalesce") · 565 │ render 0 COALESCE(column1, column2, column3) · · 566 └── values · · (column1, column2, column3) · 567 · size 3 columns, 4 rows · · 568 · row 0, expr 0 1 · · 569 · row 0, expr 1 2 · · 570 · row 0, expr 2 3 · · 571 · row 1, expr 0 CAST(NULL AS INT8) · · 572 · row 1, expr 1 4 · · 573 · row 1, expr 2 5 · · 574 · row 2, expr 0 CAST(NULL AS INT8) · · 575 · row 2, expr 1 CAST(NULL AS INT8) · · 576 · row 2, expr 2 6 · · 577 · row 3, expr 0 CAST(NULL AS INT8) · · 578 · row 3, expr 1 CAST(NULL AS INT8) · · 579 · row 3, expr 2 CAST(NULL AS INT8) · · 580 581 query TTTTT 582 EXPLAIN (VERBOSE) SELECT a FROM t WHERE a BETWEEN b AND d 583 ---- 584 · distributed false · · 585 · vectorized true · · 586 render · · (a) · 587 │ render 0 a · · 588 └── scan · · (a, b, d) · 589 · table t@primary · · 590 · spans FULL SCAN · · 591 · filter (a >= b) AND (a <= d) · · 592 593 query TTTTT 594 EXPLAIN (VERBOSE) SELECT a FROM t WHERE a NOT BETWEEN b AND d 595 ---- 596 · distributed false · · 597 · vectorized true · · 598 render · · (a) · 599 │ render 0 a · · 600 └── scan · · (a, b, d) · 601 · table t@primary · · 602 · spans FULL SCAN · · 603 · filter (a < b) OR (a > d) · · 604 605 query TTTTT 606 EXPLAIN (VERBOSE) SELECT a BETWEEN SYMMETRIC b AND d AS r FROM t 607 ---- 608 · distributed false · · 609 · vectorized true · · 610 render · · (r) · 611 │ render 0 ((a >= b) AND (a <= d)) OR ((a >= d) AND (a <= b)) · · 612 └── scan · · (a, b, d) · 613 · table t@primary · · 614 · spans FULL SCAN · · 615 616 query TTTTT 617 EXPLAIN (VERBOSE) SELECT a NOT BETWEEN SYMMETRIC b AND d AS r FROM t 618 ---- 619 · distributed false · · 620 · vectorized true · · 621 render · · (r) · 622 │ render 0 ((a < b) OR (a > d)) AND ((a < d) OR (a > b)) · · 623 └── scan · · (a, b, d) · 624 · table t@primary · · 625 · spans FULL SCAN · · 626 627 query TTTTT 628 EXPLAIN (VERBOSE) SELECT ARRAY[]:::int[] FROM t 629 ---- 630 · distributed false · · 631 · vectorized true · · 632 render · · ("array") · 633 │ render 0 ARRAY[] · · 634 └── scan · · () · 635 · table t@primary · · 636 · spans FULL SCAN · · 637 638 query TTTTT 639 EXPLAIN (VERBOSE) SELECT ARRAY[1, 2, 3] FROM t 640 ---- 641 · distributed false · · 642 · vectorized true · · 643 render · · ("array") · 644 │ render 0 ARRAY[1,2,3] · · 645 └── scan · · () · 646 · table t@primary · · 647 · spans FULL SCAN · · 648 649 query TTTTT 650 EXPLAIN (VERBOSE) SELECT ARRAY[a + 1, 2, 3] FROM t 651 ---- 652 · distributed false · · 653 · vectorized true · · 654 render · · ("array") · 655 │ render 0 ARRAY[a + 1, 2, 3] · · 656 └── scan · · (a) · 657 · table t@primary · · 658 · spans FULL SCAN · · 659 660 query TTTTT 661 EXPLAIN (VERBOSE) SELECT 1 > ANY ARRAY[a + 1, 2, 3] FROM t 662 ---- 663 · distributed false · · 664 · vectorized true · · 665 render · · ("?column?") · 666 │ render 0 1 > ANY ARRAY[a + 1, 2, 3] · · 667 └── scan · · (a) · 668 · table t@primary · · 669 · spans FULL SCAN · · 670 671 query TTTTT 672 EXPLAIN (VERBOSE) SELECT 1 = ANY (1, 2, 3) FROM t 673 ---- 674 · distributed false · · 675 · vectorized true · · 676 render · · ("?column?") · 677 │ render 0 true · · 678 └── scan · · () · 679 · table t@primary · · 680 · spans FULL SCAN · · 681 682 query TTTTT 683 EXPLAIN (VERBOSE) SELECT 1 = ANY () FROM t 684 ---- 685 · distributed false · · 686 · vectorized true · · 687 render · · ("?column?") · 688 │ render 0 false · · 689 └── scan · · () · 690 · table t@primary · · 691 · spans FULL SCAN · · 692 693 query TTTTT 694 EXPLAIN (VERBOSE) SELECT least(NULL, greatest(NULL, least(1, NULL), 2, 3), greatest(5, 6), a) FROM t 695 ---- 696 · distributed false · · 697 · vectorized true · · 698 render · · ("least") · 699 │ render 0 least(NULL, 3, 6, a) · · 700 └── scan · · (a) · 701 · table t@primary · · 702 · spans FULL SCAN · · 703 704 query TTTTT 705 EXPLAIN (VERBOSE) SELECT * FROM pg_attribute WHERE attrelid='t'::regclass 706 ---- 707 · distributed false · · 708 · vectorized false · · 709 virtual table · · (attrelid, attname, atttypid, attstattarget, attlen, attnum, attndims, attcacheoff, atttypmod, attbyval, attstorage, attalign, attnotnull, atthasdef, attisdropped, attislocal, attinhcount, attcollation, attacl, attoptions, attfdwoptions) · 710 · source pg_attribute@pg_attribute_attrelid_idx · · 711 · constraint /2: [/t - /t] · · 712 713 query TTTTT 714 EXPLAIN (VERBOSE) SELECT CASE WHEN current_database() = 'test' THEN 42 ELSE 1/3 END 715 ---- 716 · distributed false · · 717 · vectorized false · · 718 values · · ("case") · 719 · size 1 column, 1 row · · 720 · row 0, expr 0 42 · · 721 722 # Don't fold the CASE since there is an error in the ELSE clause. 723 query TTTTT 724 EXPLAIN (VERBOSE) SELECT CASE WHEN current_database() = 'test' THEN 42 ELSE 1/0 END 725 ---- 726 · distributed false · · 727 · vectorized false · · 728 values · · ("case") · 729 · size 1 column, 1 row · · 730 · row 0, expr 0 CASE WHEN true THEN 42 ELSE 1 / 0 END · · 731 732 # Don't fold random() or now(), which are impure functions. 733 query TTTTT 734 EXPLAIN (VERBOSE) SELECT random(), current_database(), now() 735 ---- 736 · distributed false · · 737 · vectorized false · · 738 values · · (random, current_database, now) · 739 · size 3 columns, 1 row · · 740 · row 0, expr 0 random() · · 741 · row 0, expr 1 'test' · · 742 · row 0, expr 2 now() · · 743 744 # Don't fold non-constants. 745 query TTTTT 746 EXPLAIN (VERBOSE) SELECT 1::FLOAT + length(upper(concat('a', 'b', 'c')))::FLOAT AS r1, 747 1::FLOAT + length(upper(concat('a', 'b', s)))::FLOAT AS r2 FROM t 748 ---- 749 · distributed false · · 750 · vectorized true · · 751 render · · (r1, r2) · 752 │ render 0 4.0 · · 753 │ render 1 length(upper(concat('a', 'b', s)))::FLOAT8 + 1.0 · · 754 └── scan · · (s) · 755 · table t@primary · · 756 · spans FULL SCAN · · 757 758 query TTTTT 759 EXPLAIN (VERBOSE) SELECT ARRAY(SELECT generate_series(1,10) ORDER BY 1 DESC) 760 ---- 761 · distributed false · · 762 · vectorized false · · 763 root · · ("array") · 764 ├── values · · ("array") · 765 │ size 1 column, 1 row · · 766 │ row 0, expr 0 ARRAY @S1 · · 767 └── subquery · · · · 768 │ id @S1 · · 769 │ original sql (SELECT generate_series(1, 10) ORDER BY 1 DESC) · · 770 │ exec mode all rows · · 771 └── sort · · (generate_series) -generate_series 772 │ order -generate_series · · 773 └── project set · · (generate_series) · 774 │ render 0 generate_series(1, 10) · · 775 └── emptyrow · · () · 776 777 query TTTTT 778 EXPLAIN (VERBOSE) SELECT ARRAY(SELECT a FROM t ORDER BY b) 779 ---- 780 · distributed false · · 781 · vectorized false · · 782 root · · ("array") · 783 ├── values · · ("array") · 784 │ size 1 column, 1 row · · 785 │ row 0, expr 0 ARRAY @S1 · · 786 └── subquery · · · · 787 │ id @S1 · · 788 │ original sql (SELECT a FROM t ORDER BY b) · · 789 │ exec mode all rows · · 790 └── render · · (a) · 791 │ render 0 a · · 792 └── sort · · (a, b) +b 793 │ order +b · · 794 └── scan · · (a, b) · 795 · table t@primary · · 796 · spans FULL SCAN · · 797 798 # Regression test for #47327. The span should have an end value of -1. 799 statement ok 800 CREATE TABLE t0(c0 DECIMAL UNIQUE); INSERT INTO t0(c0) VALUES(0); 801 802 query TTTTT 803 EXPLAIN (VERBOSE) SELECT t0.c0 FROM t0 WHERE t0.c0 BETWEEN t0.c0 AND INTERVAL '-1'::DECIMAL 804 ---- 805 · distributed false · · 806 · vectorized true · · 807 scan · · (c0) · 808 · table t0@t0_c0_key · · 809 · spans /!NULL-/-1/PrefixEnd · ·