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