github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/logictest/testdata/logic_test/delete (about)

     1  # LogicTest: !3node-tenant
     2  statement ok
     3  CREATE TABLE kv (
     4    k INT PRIMARY KEY,
     5    v INT,
     6    UNIQUE INDEX foo (v),
     7    INDEX bar (k, v)
     8  )
     9  
    10  statement ok
    11  CREATE TABLE unindexed (
    12    k INT PRIMARY KEY,
    13    v INT
    14  )
    15  
    16  statement count 4
    17  INSERT INTO kv VALUES (1, 2), (3, 4), (5, 6), (7, 8)
    18  
    19  statement count 4
    20  INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
    21  
    22  query II rowsort
    23  SELECT * FROM kv
    24  ----
    25  1 2
    26  3 4
    27  5 6
    28  7 8
    29  
    30  statement ok
    31  CREATE VIEW kview AS SELECT k,v FROM kv
    32  
    33  query II rowsort
    34  SELECT * FROM kview
    35  ----
    36  1 2
    37  3 4
    38  5 6
    39  7 8
    40  
    41  statement error "kview" is not a table
    42  DELETE FROM kview
    43  
    44  query II rowsort
    45  SELECT * FROM kview
    46  ----
    47  1 2
    48  3 4
    49  5 6
    50  7 8
    51  
    52  statement count 2
    53  DELETE FROM kv WHERE k=3 OR v=6
    54  
    55  query II rowsort
    56  SELECT * FROM kv
    57  ----
    58  1 2
    59  7 8
    60  
    61  # delete a non-existent value.
    62  statement count 0
    63  DELETE FROM kv WHERE k=5
    64  
    65  query II
    66  DELETE FROM kv RETURNING k, v
    67  ----
    68  1 2
    69  7 8
    70  
    71  query II
    72  SELECT * FROM kv
    73  ----
    74  
    75  statement error column "nonexistent" does not exist
    76  DELETE FROM kv WHERE nonexistent = 1
    77  
    78  statement count 2
    79  DELETE FROM unindexed WHERE k=3 OR v=6
    80  
    81  query II rowsort
    82  SELECT * FROM unindexed
    83  ----
    84  1 2
    85  7 8
    86  
    87  query II
    88  DELETE FROM unindexed RETURNING k, v
    89  ----
    90  1 2
    91  7 8
    92  
    93  query II
    94  SELECT * FROM unindexed
    95  ----
    96  
    97  statement count 4
    98  INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
    99  
   100  query II colnames
   101  DELETE FROM unindexed WHERE k=3 or v=6 RETURNING *
   102  ----
   103  k v
   104  3 4
   105  5 6
   106  
   107  query II colnames
   108  DELETE FROM unindexed RETURNING unindexed.*
   109  ----
   110  k v
   111  1 2
   112  7 8
   113  
   114  statement count 4
   115  INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
   116  
   117  query II colnames,rowsort
   118  SELECT k, v FROM unindexed
   119  ----
   120  k v
   121  1 2
   122  3 4
   123  5 6
   124  7 8
   125  
   126  statement count 4
   127  DELETE FROM unindexed
   128  
   129  # Delete of range with limit.
   130  statement count 4
   131  INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
   132  
   133  statement count 1
   134  DELETE FROM unindexed WHERE k >= 4 ORDER BY k LIMIT 1
   135  
   136  query II colnames,rowsort
   137  SELECT k, v FROM unindexed
   138  ----
   139  k v
   140  1 2
   141  3 4
   142  7 8
   143  
   144  statement count 3
   145  DELETE FROM unindexed
   146  
   147  query II colnames
   148  SELECT k, v FROM unindexed
   149  ----
   150  k v
   151  
   152  statement ok
   153  CREATE TABLE indexed (id int primary key, value int, other int, index (value))
   154  
   155  statement count 0
   156  DELETE FROM indexed WHERE value = 5
   157  
   158  # Check DELETE with ORDER BY clause (MySQL extension)
   159  
   160  statement ok
   161  INSERT INTO unindexed VALUES (1, 9), (8, 2), (3, 7), (6, 4)
   162  
   163  query II
   164  DELETE FROM unindexed WHERE k > 1 AND v < 7 ORDER BY v DESC LIMIT 2 RETURNING v,k
   165  ----
   166  4  6
   167  2  8
   168  
   169  query II
   170  DELETE FROM unindexed ORDER BY v LIMIT 2 RETURNING k,v
   171  ----
   172  3  7
   173  1  9
   174  
   175  # Check DELETE with LIMIT clause (MySQL extension)
   176  
   177  statement count 4
   178  INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
   179  
   180  query I
   181  SELECT count(*) FROM [DELETE FROM unindexed LIMIT 2 RETURNING v]
   182  ----
   183  2
   184  
   185  query I
   186  SELECT count(*) FROM [DELETE FROM unindexed LIMIT 1 RETURNING v]
   187  ----
   188  1
   189  
   190  query I
   191  SELECT count(*) FROM [DELETE FROM unindexed LIMIT 5 RETURNING v]
   192  ----
   193  1
   194  
   195  subtest regression_29494
   196  
   197  statement ok
   198  CREATE TABLE t29494(x INT PRIMARY KEY); INSERT INTO t29494 VALUES (12)
   199  
   200  statement ok
   201  BEGIN; ALTER TABLE t29494 ADD COLUMN y INT NOT NULL DEFAULT 123
   202  
   203  # Check that the new column is not visible
   204  query T
   205  SELECT create_statement FROM [SHOW CREATE t29494]
   206  ----
   207  CREATE TABLE t29494 (
   208     x INT8 NOT NULL,
   209     CONSTRAINT "primary" PRIMARY KEY (x ASC),
   210     FAMILY "primary" (x)
   211  )
   212  
   213  # Check that the new column is not usable in RETURNING
   214  statement error column "y" does not exist
   215  DELETE FROM t29494 RETURNING y
   216  
   217  statement ok
   218  ROLLBACK
   219  
   220  statement ok
   221  BEGIN; ALTER TABLE t29494 ADD COLUMN y INT NOT NULL DEFAULT 123
   222  
   223  query I
   224  DELETE FROM t29494 RETURNING *
   225  ----
   226  12
   227  
   228  statement ok
   229  COMMIT
   230  
   231  subtest regression_33361
   232  
   233  # Disable automatic stats to avoid flakiness (sometimes causes retry errors).
   234  statement ok
   235  SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false
   236  
   237  statement ok
   238  CREATE TABLE t33361(x INT PRIMARY KEY, y INT UNIQUE, z INT); INSERT INTO t33361 VALUES (1, 2, 3)
   239  
   240  statement ok
   241  BEGIN; ALTER TABLE t33361 DROP COLUMN y
   242  
   243  statement error column "y" does not exist
   244  DELETE FROM t33361 RETURNING y
   245  
   246  statement ok
   247  ROLLBACK
   248  
   249  statement ok
   250  BEGIN; ALTER TABLE t33361 DROP COLUMN y
   251  
   252  query II
   253  DELETE FROM t33361 RETURNING *; COMMIT
   254  ----
   255  1 3
   256  
   257  # Test that delete works with column families (no indexes, so fast path).
   258  statement ok
   259  CREATE TABLE family (
   260      x INT PRIMARY KEY,
   261      y INT,
   262      FAMILY (x),
   263      FAMILY (y)
   264  );
   265  INSERT INTO family VALUES (1, 1), (2, 2), (3, 3)
   266  
   267  statement ok
   268  BEGIN; ALTER TABLE family ADD COLUMN z INT CREATE FAMILY
   269  
   270  statement ok
   271  DELETE FROM family WHERE x=2
   272  
   273  statement ok
   274  COMMIT
   275  
   276  query III rowsort
   277  SELECT x, y, z FROM family
   278  ----
   279  1  1  NULL
   280  3  3  NULL
   281  
   282  statement error at or near "where": syntax error: unimplemented: this syntax
   283  DELETE FROM family USING family, other_table WHERE x=2
   284  
   285  # Verify that the fast path does its deletes at the expected timestamp.
   286  statement ok
   287  CREATE TABLE a (a INT PRIMARY KEY)
   288  
   289  statement ok
   290  INSERT INTO a SELECT generate_series(1,5)
   291  
   292  let $ts
   293  SELECT cluster_logical_timestamp()
   294  
   295  statement ok
   296  DELETE FROM a WHERE a <= 3
   297  
   298  query I rowsort
   299  SELECT * FROM a
   300  ----
   301  4
   302  5
   303  
   304  query I rowsort
   305  SELECT * FROM a AS OF SYSTEM TIME $ts
   306  ----
   307  1
   308  2
   309  3
   310  4
   311  5
   312  
   313  # Similar test with interleaved tables.
   314  statement ok
   315  INSERT INTO a SELECT generate_series(1,3)
   316  
   317  statement ok
   318  CREATE TABLE ab (
   319    a INT, b INT, PRIMARY KEY (a, b), FOREIGN KEY (a) REFERENCES a(a) ON DELETE CASCADE
   320  ) INTERLEAVE IN PARENT a(a)
   321  
   322  statement ok
   323  INSERT INTO ab SELECT x, x*10 FROM generate_series(1,5) AS g(x)
   324  
   325  let $ts2
   326  SELECT cluster_logical_timestamp()
   327  
   328  statement ok
   329  DELETE FROM a WHERE a <= 3
   330  
   331  query I rowsort
   332  SELECT * FROM a
   333  ----
   334  4
   335  5
   336  
   337  query II rowsort
   338  SELECT * FROM ab
   339  ----
   340  4  40
   341  5  50
   342  
   343  query I rowsort
   344  SELECT * FROM a AS OF SYSTEM TIME $ts2
   345  ----
   346  1
   347  2
   348  3
   349  4
   350  5
   351  
   352  query II rowsort
   353  SELECT * FROM ab AS OF SYSTEM TIME $ts2
   354  ----
   355  1  10
   356  2  20
   357  3  30
   358  4  40
   359  5  50