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

     1  # LogicTest: local
     2  
     3  statement ok
     4  CREATE TABLE abc (a int primary key, b int, c int)
     5  
     6  # Updating using self join.
     7  query TTT
     8  EXPLAIN UPDATE abc SET b = other.b + 1, c = other.c + 1 FROM abc AS other WHERE abc.a = other.a
     9  ----
    10  ·                          distributed         false
    11  ·                          vectorized          false
    12  count                      ·                   ·
    13   └── update                ·                   ·
    14        │                    table               abc
    15        │                    set                 b, c
    16        │                    strategy            updater
    17        │                    auto commit         ·
    18        └── render           ·                   ·
    19             └── merge-join  ·                   ·
    20                  │          type                inner
    21                  │          equality            (a) = (a)
    22                  │          left cols are key   ·
    23                  │          right cols are key  ·
    24                  │          mergeJoinOrder      +"(a=a)"
    25                  ├── scan   ·                   ·
    26                  │          table               abc@primary
    27                  │          spans               FULL SCAN
    28                  └── scan   ·                   ·
    29  ·                          table               abc@primary
    30  ·                          spans               FULL SCAN
    31  
    32  # Update from another table.
    33  statement ok
    34  CREATE TABLE new_abc (a int, b int, c int)
    35  
    36  query TTT
    37  EXPLAIN UPDATE abc SET b = other.b, c = other.c FROM new_abc AS other WHERE abc.a = other.a
    38  ----
    39  ·                              distributed        false
    40  ·                              vectorized         false
    41  count                          ·                  ·
    42   └── update                    ·                  ·
    43        │                        table              abc
    44        │                        set                b, c
    45        │                        strategy           updater
    46        │                        auto commit        ·
    47        └── render               ·                  ·
    48             └── distinct        ·                  ·
    49                  │              distinct on        a
    50                  └── hash-join  ·                  ·
    51                       │         type               inner
    52                       │         equality           (a) = (a)
    53                       │         left cols are key  ·
    54                       ├── scan  ·                  ·
    55                       │         table              abc@primary
    56                       │         spans              FULL SCAN
    57                       └── scan  ·                  ·
    58  ·                              table              new_abc@primary
    59  ·                              spans              FULL SCAN
    60  
    61  # Returning old values.
    62  query TTT
    63  EXPLAIN UPDATE abc
    64  SET
    65    b = old.b + 1, c = old.c + 2
    66  FROM
    67    abc AS old
    68  WHERE
    69    abc.a = old.a
    70  RETURNING
    71    abc.a, abc.b AS new_b, old.b as old_b, abc.c as new_c, old.c as old_c
    72  ----
    73  ·                               distributed         false
    74  ·                               vectorized          false
    75  render                          ·                   ·
    76   └── run                        ·                   ·
    77        └── update                ·                   ·
    78             │                    table               abc
    79             │                    set                 b, c
    80             │                    strategy            updater
    81             │                    auto commit         ·
    82             └── render           ·                   ·
    83                  └── merge-join  ·                   ·
    84                       │          type                inner
    85                       │          equality            (a) = (a)
    86                       │          left cols are key   ·
    87                       │          right cols are key  ·
    88                       │          mergeJoinOrder      +"(a=a)"
    89                       ├── scan   ·                   ·
    90                       │          table               abc@primary
    91                       │          spans               FULL SCAN
    92                       └── scan   ·                   ·
    93  ·                               table               abc@primary
    94  ·                               spans               FULL SCAN
    95  
    96  # Check if RETURNING * returns everything
    97  query TTTTT
    98  EXPLAIN (VERBOSE) UPDATE abc SET b = old.b + 1, c = old.c + 2 FROM abc AS old WHERE abc.a = old.a RETURNING *
    99  ----
   100  ·                          distributed         false        ·                                 ·
   101  ·                          vectorized          false        ·                                 ·
   102  run                        ·                   ·            (a, b, c, a, b, c)                ·
   103   └── update                ·                   ·            (a, b, c, a, b, c)                ·
   104        │                    table               abc          ·                                 ·
   105        │                    set                 b, c         ·                                 ·
   106        │                    strategy            updater      ·                                 ·
   107        │                    auto commit         ·            ·                                 ·
   108        └── render           ·                   ·            (a, b, c, b_new, c_new, a, b, c)  ·
   109             │               render 0            a            ·                                 ·
   110             │               render 1            b            ·                                 ·
   111             │               render 2            c            ·                                 ·
   112             │               render 3            b + 1        ·                                 ·
   113             │               render 4            c + 2        ·                                 ·
   114             │               render 5            a            ·                                 ·
   115             │               render 6            b            ·                                 ·
   116             │               render 7            c            ·                                 ·
   117             └── merge-join  ·                   ·            (a, b, c, a, b, c)                ·
   118                  │          type                inner        ·                                 ·
   119                  │          equality            (a) = (a)    ·                                 ·
   120                  │          left cols are key   ·            ·                                 ·
   121                  │          right cols are key  ·            ·                                 ·
   122                  │          mergeJoinOrder      +"(a=a)"     ·                                 ·
   123                  ├── scan   ·                   ·            (a, b, c)                         +a
   124                  │          table               abc@primary  ·                                 ·
   125                  │          spans               FULL SCAN    ·                                 ·
   126                  └── scan   ·                   ·            (a, b, c)                         +a
   127  ·                          table               abc@primary  ·                                 ·
   128  ·                          spans               FULL SCAN    ·                                 ·
   129  
   130  # Update values of table from values expression
   131  query TTT
   132  EXPLAIN UPDATE abc SET b = other.b, c = other.c FROM (values (1, 2, 3), (2, 3, 4)) as other ("a", "b", "c") WHERE abc.a = other.a
   133  ----
   134  ·                                distributed            false
   135  ·                                vectorized             false
   136  count                            ·                      ·
   137   └── update                      ·                      ·
   138        │                          table                  abc
   139        │                          set                    b, c
   140        │                          strategy               updater
   141        │                          auto commit            ·
   142        └── render                 ·                      ·
   143             └── distinct          ·                      ·
   144                  │                distinct on            a
   145                  └── lookup-join  ·                      ·
   146                       │           table                  abc@primary
   147                       │           type                   inner
   148                       │           equality               (column1) = (a)
   149                       │           equality cols are key  ·
   150                       │           parallel               ·
   151                       └── values  ·                      ·
   152  ·                                size                   3 columns, 2 rows
   153  
   154  # Check if UPDATE ... FROM works with multiple tables.
   155  statement ok
   156  CREATE TABLE ab (a INT, b INT)
   157  
   158  statement ok
   159  CREATE TABLE ac (a INT, c INT)
   160  
   161  query TTT
   162  EXPLAIN UPDATE abc SET b = ab.b, c = ac.c FROM ab, ac WHERE abc.a = ab.a AND abc.a = ac.a
   163  ----
   164  ·                                   distributed         false
   165  ·                                   vectorized          false
   166  count                               ·                   ·
   167   └── update                         ·                   ·
   168        │                             table               abc
   169        │                             set                 b, c
   170        │                             strategy            updater
   171        │                             auto commit         ·
   172        └── render                    ·                   ·
   173             └── distinct             ·                   ·
   174                  │                   distinct on         a
   175                  └── hash-join       ·                   ·
   176                       │              type                inner
   177                       │              equality            (a) = (a)
   178                       ├── scan       ·                   ·
   179                       │              table               ab@primary
   180                       │              spans               FULL SCAN
   181                       └── hash-join  ·                   ·
   182                            │         type                inner
   183                            │         equality            (a) = (a)
   184                            │         right cols are key  ·
   185                            ├── scan  ·                   ·
   186                            │         table               ac@primary
   187                            │         spans               FULL SCAN
   188                            └── scan  ·                   ·
   189  ·                                   table               abc@primary
   190  ·                                   spans               FULL SCAN
   191  
   192  # Make sure UPDATE ... FROM works with LATERAL.
   193  query TTT
   194  EXPLAIN UPDATE abc
   195  SET
   196    b=ab.b, c = other.c
   197  FROM
   198    ab, LATERAL
   199      (SELECT * FROM ac WHERE ab.a=ac.a) AS other
   200  WHERE
   201    abc.a=ab.a
   202  RETURNING
   203    *
   204  ----
   205  ·                                   distributed         false
   206  ·                                   vectorized          false
   207  run                                 ·                   ·
   208   └── update                         ·                   ·
   209        │                             table               abc
   210        │                             set                 b, c
   211        │                             strategy            updater
   212        │                             auto commit         ·
   213        └── render                    ·                   ·
   214             └── distinct             ·                   ·
   215                  │                   distinct on         a
   216                  └── hash-join       ·                   ·
   217                       │              type                inner
   218                       │              equality            (a) = (a)
   219                       ├── scan       ·                   ·
   220                       │              table               ab@primary
   221                       │              spans               FULL SCAN
   222                       └── hash-join  ·                   ·
   223                            │         type                inner
   224                            │         equality            (a) = (a)
   225                            │         right cols are key  ·
   226                            ├── scan  ·                   ·
   227                            │         table               ac@primary
   228                            │         spans               FULL SCAN
   229                            └── scan  ·                   ·
   230  ·                                   table               abc@primary
   231  ·                                   spans               FULL SCAN