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

     1  # LogicTest: local
     2  
     3  statement ok
     4  CREATE TABLE xyz (
     5    x INT PRIMARY KEY,
     6    y INT,
     7    z INT,
     8    INDEX foo (z, y)
     9  )
    10  
    11  query TTT
    12  EXPLAIN SELECT DISTINCT y, z FROM xyz
    13  ----
    14  ·          distributed  false
    15  ·          vectorized   true
    16  distinct   ·            ·
    17   │         distinct on  y, z
    18   │         order key    y, z
    19   └── scan  ·            ·
    20  ·          table        xyz@foo
    21  ·          spans        FULL SCAN
    22  
    23  query TTT
    24  EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY z
    25  ----
    26  ·          distributed  false
    27  ·          vectorized   true
    28  distinct   ·            ·
    29   │         distinct on  y, z
    30   │         order key    y, z
    31   └── scan  ·            ·
    32  ·          table        xyz@foo
    33  ·          spans        FULL SCAN
    34  
    35  query TTT
    36  EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY y
    37  ----
    38  ·               distributed  false
    39  ·               vectorized   true
    40  sort            ·            ·
    41   │              order        +y
    42   └── distinct   ·            ·
    43        │         distinct on  y, z
    44        │         order key    y, z
    45        └── scan  ·            ·
    46  ·               table        xyz@foo
    47  ·               spans        FULL SCAN
    48  
    49  query TTT
    50  EXPLAIN SELECT DISTINCT y, z FROM xyz ORDER BY y, z
    51  ----
    52  ·               distributed  false
    53  ·               vectorized   true
    54  sort            ·            ·
    55   │              order        +y,+z
    56   └── distinct   ·            ·
    57        │         distinct on  y, z
    58        │         order key    y, z
    59        └── scan  ·            ·
    60  ·               table        xyz@foo
    61  ·               spans        FULL SCAN
    62  
    63  query TTT
    64  EXPLAIN SELECT DISTINCT y + z AS r FROM xyz ORDER BY y + z
    65  ----
    66  ·                    distributed  false
    67  ·                    vectorized   true
    68  distinct             ·            ·
    69   │                   distinct on  r
    70   │                   order key    r
    71   └── sort            ·            ·
    72        │              order        +r
    73        └── render     ·            ·
    74             └── scan  ·            ·
    75  ·                    table        xyz@primary
    76  ·                    spans        FULL SCAN
    77  
    78  query TTT
    79  EXPLAIN SELECT DISTINCT y AS w, z FROM xyz ORDER BY z
    80  ----
    81  ·          distributed  false
    82  ·          vectorized   true
    83  distinct   ·            ·
    84   │         distinct on  w, z
    85   │         order key    w, z
    86   └── scan  ·            ·
    87  ·          table        xyz@foo
    88  ·          spans        FULL SCAN
    89  
    90  query TTT
    91  EXPLAIN SELECT DISTINCT y AS w FROM xyz ORDER BY y
    92  ----
    93  ·               distributed  false
    94  ·               vectorized   true
    95  sort            ·            ·
    96   │              order        +w
    97   └── distinct   ·            ·
    98        │         distinct on  w
    99        └── scan  ·            ·
   100  ·               table        xyz@primary
   101  ·               spans        FULL SCAN
   102  
   103  query TTTTT
   104  EXPLAIN (VERBOSE) SELECT DISTINCT x FROM xyz
   105  ----
   106  ·     distributed  false        ·    ·
   107  ·     vectorized   true         ·    ·
   108  scan  ·            ·            (x)  ·
   109  ·     table        xyz@primary  ·    ·
   110  ·     spans        FULL SCAN    ·    ·
   111  
   112  query TTTTT
   113  EXPLAIN (VERBOSE) SELECT DISTINCT x, y, z FROM xyz
   114  ----
   115  ·     distributed  false        ·          ·
   116  ·     vectorized   true         ·          ·
   117  scan  ·            ·            (x, y, z)  ·
   118  ·     table        xyz@primary  ·          ·
   119  ·     spans        FULL SCAN    ·          ·
   120  
   121  # Test the case when the DistinctOn operator is projecting away a column.
   122  query TTTTT
   123  EXPLAIN (VERBOSE) SELECT DISTINCT z FROM (SELECT y, z FROM xyz WHERE y > 1)
   124  ----
   125  ·               distributed  false      ·       ·
   126  ·               vectorized   true       ·       ·
   127  distinct        ·            ·          (z)     ·
   128   │              distinct on  z          ·       ·
   129   │              order key    z          ·       ·
   130   └── render     ·            ·          (z)     +z
   131        │         render 0     z          ·       ·
   132        └── scan  ·            ·          (y, z)  +z
   133  ·               table        xyz@foo    ·       ·
   134  ·               spans        FULL SCAN  ·       ·
   135  ·               filter       y > 1      ·       ·
   136  
   137  statement ok
   138  CREATE TABLE abcd (
   139    a INT,
   140    b INT,
   141    c INT,
   142    d INT NOT NULL,
   143    PRIMARY KEY (a, b, c),
   144    UNIQUE INDEX (d, b)
   145  )
   146  
   147  query TTTTT
   148  EXPLAIN (VERBOSE) SELECT DISTINCT 1 AS z, d, b FROM abcd ORDER BY d, b
   149  ----
   150  ·          distributed  false              ·          ·
   151  ·          vectorized   true               ·          ·
   152  render     ·            ·                  (z, d, b)  ·
   153   │         render 0     1                  ·          ·
   154   │         render 1     d                  ·          ·
   155   │         render 2     b                  ·          ·
   156   └── scan  ·            ·                  (b, d)     +d,+b
   157  ·          table        abcd@abcd_d_b_key  ·          ·
   158  ·          spans        FULL SCAN          ·          ·
   159  
   160  query TTTTT
   161  EXPLAIN (VERBOSE) SELECT DISTINCT a, b FROM abcd
   162  ----
   163  ·          distributed  false         ·       ·
   164  ·          vectorized   true          ·       ·
   165  distinct   ·            ·             (a, b)  ·
   166   │         distinct on  a, b          ·       ·
   167   │         order key    a, b          ·       ·
   168   └── scan  ·            ·             (a, b)  +a,+b
   169  ·          table        abcd@primary  ·       ·
   170  ·          spans        FULL SCAN     ·       ·
   171  
   172  query TTTTT
   173  EXPLAIN (VERBOSE) SELECT DISTINCT a, b, c FROM abcd
   174  ----
   175  ·     distributed  false         ·          ·
   176  ·     vectorized   true          ·          ·
   177  scan  ·            ·             (a, b, c)  ·
   178  ·     table        abcd@primary  ·          ·
   179  ·     spans        FULL SCAN     ·          ·
   180  
   181  query TTTTT
   182  EXPLAIN (VERBOSE) SELECT DISTINCT a, b, c, d FROM abcd
   183  ----
   184  ·     distributed  false         ·             ·
   185  ·     vectorized   true          ·             ·
   186  scan  ·            ·             (a, b, c, d)  ·
   187  ·     table        abcd@primary  ·             ·
   188  ·     spans        FULL SCAN     ·             ·
   189  
   190  statement ok
   191  CREATE TABLE kv (k INT PRIMARY KEY, v INT, UNIQUE INDEX idx(v))
   192  
   193  query TTTTT
   194  EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv
   195  ----
   196  ·          distributed  false      ·    ·
   197  ·          vectorized   true       ·    ·
   198  distinct   ·            ·          (v)  ·
   199   │         distinct on  v          ·    ·
   200   │         order key    v          ·    ·
   201   └── scan  ·            ·          (v)  +v
   202  ·          table        kv@idx     ·    ·
   203  ·          spans        FULL SCAN  ·    ·
   204  
   205  # Verify we don't incorrectly elide the distinct node when we only have a weak key (#19343).
   206  query TTTTT
   207  EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv@idx
   208  ----
   209  ·          distributed  false      ·    ·
   210  ·          vectorized   true       ·    ·
   211  distinct   ·            ·          (v)  ·
   212   │         distinct on  v          ·    ·
   213   │         order key    v          ·    ·
   214   └── scan  ·            ·          (v)  +v
   215  ·          table        kv@idx     ·    ·
   216  ·          spans        FULL SCAN  ·    ·
   217  
   218  # Here we can infer that v is not-NULL so eliding the node is correct.
   219  query TTTTT
   220  EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv@idx WHERE v > 0
   221  ----
   222  ·     distributed  false   ·    ·
   223  ·     vectorized   true    ·    ·
   224  scan  ·            ·       (v)  ·
   225  ·     table        kv@idx  ·    ·
   226  ·     spans        /1-     ·    ·
   227  
   228  statement ok
   229  CREATE TABLE kv2 (k INT PRIMARY KEY, v INT NOT NULL, UNIQUE INDEX idx(v))
   230  
   231  # In this case it is correct to elide the distinct node.
   232  query TTTTT
   233  EXPLAIN (VERBOSE) SELECT DISTINCT v FROM kv2@idx
   234  ----
   235  ·     distributed  false      ·    ·
   236  ·     vectorized   true       ·    ·
   237  scan  ·            ·          (v)  ·
   238  ·     table        kv2@idx    ·    ·
   239  ·     spans        FULL SCAN  ·    ·