forked from MaterializeInc/materialize
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdelete.slt
303 lines (238 loc) · 5.3 KB
/
delete.slt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
# Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
# Copyright Materialize, Inc. and contributors. All rights reserved.
#
# Use of this software is governed by the Business Source License
# included in the LICENSE file at the root of this repository.
#
# As of the Change Date specified in that file, in accordance with
# the Business Source License, use of this software will be governed
# by the Apache License, Version 2.0.
#
# This file is derived from the logic test suite in CockroachDB. The
# original file was retrieved on June 10, 2019 from:
#
# https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/delete
#
# The original source code is subject to the terms of the Apache
# 2.0 license, a copy of which can be found in the LICENSE file at the
# root of this repository.
# not supported yet
halt
mode cockroach
statement ok
CREATE TABLE kv (
k INT PRIMARY KEY,
v INT,
UNIQUE INDEX foo (v),
INDEX bar (k, v)
)
statement ok
CREATE TABLE unindexed (
k INT PRIMARY KEY,
v INT
)
statement count 4
INSERT INTO kv VALUES (1, 2), (3, 4), (5, 6), (7, 8)
statement count 4
INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
query II rowsort
SELECT * FROM kv
----
1 2
3 4
5 6
7 8
statement ok
CREATE VIEW kview AS SELECT k,v FROM kv
query II rowsort
SELECT * FROM kview
----
1 2
3 4
5 6
7 8
statement error "kview" is not a table
DELETE FROM kview
query II rowsort
SELECT * FROM kview
----
1 2
3 4
5 6
7 8
statement count 2
DELETE FROM kv WHERE k=3 OR v=6
query II rowsort
SELECT * FROM kv
----
1 2
7 8
# delete a non-existent value.
statement count 0
DELETE FROM kv WHERE k=5
query II
DELETE FROM kv RETURNING k, v
----
1 2
7 8
query II
SELECT * FROM kv
----
statement error column "nonexistent" does not exist
DELETE FROM kv WHERE nonexistent = 1
statement count 2
DELETE FROM unindexed WHERE k=3 OR v=6
query II rowsort
SELECT * FROM unindexed
----
1 2
7 8
query II
DELETE FROM unindexed RETURNING k, v
----
1 2
7 8
query II
SELECT * FROM unindexed
----
statement count 4
INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
query II colnames
DELETE FROM unindexed WHERE k=3 or v=6 RETURNING *
----
k v
3 4
5 6
query II colnames
DELETE FROM unindexed RETURNING unindexed.*
----
k v
1 2
7 8
statement count 4
INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
query II colnames,rowsort
SELECT k, v FROM unindexed
----
k v
1 2
3 4
5 6
7 8
statement count 4
DELETE FROM unindexed
# Delete of range with limit.
statement count 4
INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
statement count 1
DELETE FROM unindexed WHERE k >= 4 ORDER BY k LIMIT 1
query II colnames,rowsort
SELECT k, v FROM unindexed
----
k v
1 2
3 4
7 8
statement count 3
DELETE FROM unindexed
query II colnames
SELECT k, v FROM unindexed
----
k v
statement ok
CREATE TABLE indexed (id int primary key, value int, other int, index (value))
statement count 0
DELETE FROM indexed WHERE value = 5
# Check DELETE with ORDER BY clause (MySQL extension)
statement ok
INSERT INTO unindexed VALUES (1, 9), (8, 2), (3, 7), (6, 4)
query II
DELETE FROM unindexed WHERE k > 1 AND v < 7 ORDER BY v DESC LIMIT 2 RETURNING v,k
----
4 6
2 8
query II
DELETE FROM unindexed ORDER BY v LIMIT 2 RETURNING k,v
----
3 7
1 9
# Check DELETE with LIMIT clause (MySQL extension)
statement count 4
INSERT INTO unindexed VALUES (1, 2), (3, 4), (5, 6), (7, 8)
query I
SELECT count(*) FROM [DELETE FROM unindexed LIMIT 2 RETURNING v]
----
2
query I
SELECT count(*) FROM [DELETE FROM unindexed LIMIT 1 RETURNING v]
----
1
query I
SELECT count(*) FROM [DELETE FROM unindexed LIMIT 5 RETURNING v]
----
1
subtest regression_29494
statement ok
CREATE TABLE t29494(x INT PRIMARY KEY); INSERT INTO t29494 VALUES (12)
statement ok
BEGIN; ALTER TABLE t29494 ADD COLUMN y INT NOT NULL DEFAULT 123
# Check that the new column is not visible
query T
SELECT create_statement FROM [SHOW CREATE t29494]
----
CREATE TABLE t29494 (
x INT8 NOT NULL,
CONSTRAINT "primary" PRIMARY KEY (x ASC),
FAMILY "primary" (x)
)
# Check that the new column is not usable in RETURNING
statement error column "y" does not exist
DELETE FROM t29494 RETURNING y
statement ok
ROLLBACK
statement ok
BEGIN; ALTER TABLE t29494 ADD COLUMN y INT NOT NULL DEFAULT 123
query I
DELETE FROM t29494 RETURNING *
----
12
statement ok
COMMIT
subtest regression_33361
# Disable automatic stats to avoid flakiness (sometimes causes retry errors).
statement ok
SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false
statement ok
CREATE TABLE t33361(x INT PRIMARY KEY, y INT UNIQUE, z INT); INSERT INTO t33361 VALUES (1, 2, 3)
statement ok
BEGIN; ALTER TABLE t33361 DROP COLUMN y
statement error column "y" does not exist
DELETE FROM t33361 RETURNING y
statement ok
ROLLBACK
statement ok
BEGIN; ALTER TABLE t33361 DROP COLUMN y
query II
DELETE FROM t33361 RETURNING *; COMMIT
----
1 3
# Test that delete works with column families (no indexes, so fast path).
statement ok
CREATE TABLE family (
x INT PRIMARY KEY,
y INT,
FAMILY (x),
FAMILY (y)
);
INSERT INTO family VALUES (1, 1), (2, 2), (3, 3)
statement ok
BEGIN; ALTER TABLE family ADD COLUMN z INT CREATE FAMILY
statement ok
DELETE FROM family WHERE x=2
statement ok
COMMIT
query III rowsort
SELECT x, y, z FROM family
----
1 1 NULL
3 3 NULL