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