update.slt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
  2. # Copyright Materialize, Inc. and contributors. All rights reserved.
  3. #
  4. # Use of this software is governed by the Business Source License
  5. # included in the LICENSE file at the root of this repository.
  6. #
  7. # As of the Change Date specified in that file, in accordance with
  8. # the Business Source License, use of this software will be governed
  9. # by the Apache License, Version 2.0.
  10. #
  11. # This file is derived from the logic test suite in CockroachDB. The
  12. # original file was retrieved on June 10, 2019 from:
  13. #
  14. # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/update
  15. #
  16. # The original source code is subject to the terms of the Apache
  17. # 2.0 license, a copy of which can be found in the LICENSE file at the
  18. # root of this repository.
  19. mode cockroach
  20. simple conn=mz_system,user=mz_system
  21. ALTER SYSTEM SET unsafe_enable_table_keys = true
  22. ----
  23. COMPLETE 0
  24. statement ok
  25. CREATE TABLE kv (
  26. k INT PRIMARY KEY,
  27. v INT
  28. )
  29. # statement error value type tuple\{int, int\} doesn't match type int of column "v"
  30. # UPDATE kv SET v = (SELECT (10, 11))
  31. # statement error value type decimal doesn't match type int of column "v"
  32. # UPDATE kv SET v = 3.2
  33. # statement error value type decimal doesn't match type int of column "v"
  34. # UPDATE kv SET (k, v) = (3, 3.2)
  35. # statement error value type decimal doesn't match type int of column "v"
  36. # UPDATE kv SET (k, v) = (SELECT 3, 3.2)
  37. statement count 4
  38. INSERT INTO kv VALUES (1, 2), (3, 4), (5, 6), (7, 8)
  39. statement count 2
  40. UPDATE kv SET v = 9 WHERE k IN (1, 3)
  41. query II rowsort
  42. SELECT * FROM kv
  43. ----
  44. 1 9
  45. 3 9
  46. 5 6
  47. 7 8
  48. statement count 4
  49. UPDATE kv SET v = k + v
  50. query II rowsort
  51. SELECT * FROM kv
  52. ----
  53. 1 10
  54. 3 12
  55. 5 11
  56. 7 15
  57. statement error pgcode 42703 unknown column m
  58. UPDATE kv SET m = 9 WHERE k IN (1, 3)
  59. # statement error unimplemented at or near "k"
  60. # UPDATE kv SET kv.k = 9
  61. # statement error unimplemented at or near "*"
  62. # UPDATE kv SET k.* = 9
  63. # statement error unimplemented at or near "v"
  64. # UPDATE kv SET k.v = 9
  65. statement ok
  66. CREATE VIEW kview as SELECT k,v from kv
  67. query II rowsort
  68. SELECT * FROM kview
  69. ----
  70. 1 10
  71. 3 12
  72. 5 11
  73. 7 15
  74. # statement error "kview" is not a table
  75. # UPDATE kview SET v = 99 WHERE k IN (1, 3)
  76. query II rowsort
  77. SELECT * FROM kview
  78. ----
  79. 1 10
  80. 3 12
  81. 5 11
  82. 7 15
  83. statement ok
  84. CREATE TABLE kv2 (
  85. k CHAR PRIMARY KEY,
  86. v CHAR,
  87. UNIQUE (v)
  88. )
  89. statement count 4
  90. INSERT INTO kv2 VALUES ('a', 'b'), ('c', 'd'), ('e', 'f'), ('f', 'g')
  91. query TT rowsort
  92. SELECT * FROM kv2
  93. ----
  94. a b
  95. c d
  96. e f
  97. f g
  98. # TODO: enforce primary keys.
  99. # statement error duplicate key value violates unique constraint "kv2_v_key"
  100. # UPDATE kv2 SET v = 'g' WHERE k IN ('a')
  101. statement count 1
  102. UPDATE kv2 SET v = 'i' WHERE k IN ('a')
  103. query TT rowsort
  104. SELECT * FROM kv2
  105. ----
  106. a i
  107. c d
  108. e f
  109. f g
  110. statement count 1
  111. UPDATE kv2 SET v = 'b' WHERE k IN ('a')
  112. query TT rowsort
  113. SELECT * FROM kv2
  114. ----
  115. a b
  116. c d
  117. e f
  118. f g
  119. statement ok
  120. CREATE TABLE kv3 (
  121. k CHAR PRIMARY KEY,
  122. v CHAR NOT NULL
  123. )
  124. statement count 1
  125. INSERT INTO kv3 VALUES ('a', 'b')
  126. statement error null value in column "v" violates not-null constraint
  127. UPDATE kv3 SET v = NULL WHERE k = 'a'
  128. query TT
  129. SELECT * FROM kv3
  130. ----
  131. a b
  132. statement error column "nonexistent" does not exist
  133. UPDATE kv3 SET v = NULL WHERE nonexistent = 'a'
  134. # TODO(benesch): support the rest of this file.
  135. halt
  136. statement ok
  137. CREATE TABLE abc (
  138. a INT PRIMARY KEY,
  139. b INT,
  140. c INT,
  141. UNIQUE INDEX d (c)
  142. )
  143. statement count 1
  144. INSERT INTO abc VALUES (1, 2, 3)
  145. statement error number of columns \(2\) does not match number of values \(1\)
  146. UPDATE abc SET (b, c) = (4)
  147. statement error DEFAULT can only appear in a VALUES list within INSERT or on the right side of a SET
  148. UPDATE abc SET (b, c) = (SELECT (VALUES (DEFAULT, DEFAULT)))
  149. statement count 1
  150. UPDATE abc SET (b, c) = (4, 5)
  151. query III
  152. SELECT * FROM abc
  153. ----
  154. 1 4 5
  155. statement count 1
  156. UPDATE abc SET a = 1, (b, c) = (SELECT 1, 2)
  157. query III colnames
  158. UPDATE abc SET (b, c) = (8, 9) RETURNING abc.b, c, 4 AS d
  159. ----
  160. b c d
  161. 8 9 4
  162. query III colnames
  163. UPDATE abc SET (b, c) = (8, 9) RETURNING b as col1, c as col2, 4 as col3
  164. ----
  165. col1 col2 col3
  166. 8 9 4
  167. query I colnames
  168. UPDATE abc SET (b, c) = (8, 9) RETURNING a
  169. ----
  170. a
  171. 1
  172. query IIII colnames
  173. UPDATE abc SET (b, c) = (5, 6) RETURNING a, b, c, 4 AS d
  174. ----
  175. a b c d
  176. 1 5 6 4
  177. query III colnames
  178. UPDATE abc SET (b, c) = (7, 8) RETURNING *
  179. ----
  180. a b c
  181. 1 7 8
  182. query IIII colnames
  183. UPDATE abc SET (b, c) = (7, 8) RETURNING *, 4 AS d
  184. ----
  185. a b c d
  186. 1 7 8 4
  187. query III colnames
  188. UPDATE abc SET (b, c) = (8, 9) RETURNING abc.*
  189. ----
  190. a b c
  191. 1 8 9
  192. statement error pq: "abc.*" cannot be aliased
  193. UPDATE abc SET (b, c) = (8, 9) RETURNING abc.* as x
  194. query III
  195. SELECT * FROM abc
  196. ----
  197. 1 8 9
  198. statement count 1
  199. INSERT INTO abc VALUES (4, 5, 6)
  200. statement error duplicate key value \(a\)=\(4\) violates unique constraint "primary"
  201. UPDATE abc SET a = 4, b = 3
  202. statement error duplicate key value \(c\)=\(6\) violates unique constraint "d"
  203. UPDATE abc SET a = 2, c = 6
  204. query III
  205. UPDATE abc SET a = 2, b = 3 WHERE a = 1 RETURNING *
  206. ----
  207. 2 3 9
  208. query III rowsort
  209. SELECT * FROM abc
  210. ----
  211. 2 3 9
  212. 4 5 6
  213. query III
  214. SELECT * FROM abc@d WHERE c = 9
  215. ----
  216. 2 3 9
  217. statement error multiple assignments to the same column "b"
  218. UPDATE abc SET b = 10, b = 11
  219. statement error multiple assignments to the same column "b"
  220. UPDATE abc SET (b, b) = (10, 11)
  221. statement error multiple assignments to the same column "b"
  222. UPDATE abc SET (b, c) = (10, 11), b = 12
  223. statement ok
  224. CREATE TABLE xyz (
  225. x INT PRIMARY KEY,
  226. y INT,
  227. z INT
  228. )
  229. statement count 1
  230. INSERT INTO xyz VALUES (111, 222, 333)
  231. # TODO(jordan): re-enable post cockroach#28716
  232. # statement count 1
  233. # UPDATE xyz SET (z, y) = (SELECT 666, 777), x = (SELECT 2)
  234. #
  235. # query III
  236. # SELECT * from xyz
  237. # ----
  238. # 2 777 666
  239. statement ok
  240. CREATE TABLE lots (
  241. k1 INT,
  242. k2 INT,
  243. k3 INT,
  244. k4 INT,
  245. k5 INT
  246. )
  247. statement count 1
  248. INSERT INTO lots VALUES (1, 2, 3, 4, 5)
  249. statement count 1
  250. UPDATE lots SET (k1, k2) = (6, 7), k3 = 8, (k4, k5) = (9, 10)
  251. query IIIII
  252. SELECT * FROM lots
  253. ----
  254. 6 7 8 9 10
  255. statement count 1
  256. UPDATE lots SET (k5, k4, k3, k2, k1) = (SELECT * FROM lots)
  257. query IIIII
  258. SELECT * FROM lots
  259. ----
  260. 10 9 8 7 6
  261. statement ok
  262. CREATE TABLE pks (
  263. k1 INT,
  264. k2 INT,
  265. v INT,
  266. PRIMARY KEY (k1, k2),
  267. UNIQUE INDEX i (k2, v),
  268. FAMILY (k1, k2),
  269. FAMILY (v)
  270. )
  271. statement count 2
  272. INSERT INTO pks VALUES (1, 2, 3), (4, 5, 3)
  273. statement error duplicate key value \(k2,v\)=\(5,3\) violates unique constraint "i"
  274. UPDATE pks SET k2 = 5 where k1 = 1
  275. # Test updating only one of the columns of a multi-column primary key.
  276. statement count 1
  277. UPDATE pks SET k1 = 2 WHERE k1 = 1
  278. query III rowsort
  279. SELECT * FROM pks
  280. ----
  281. 2 2 3
  282. 4 5 3
  283. # Check that UPDATE properly supports ORDER BY (MySQL extension)
  284. statement count 0
  285. TRUNCATE kv
  286. statement count 4
  287. INSERT INTO kv VALUES (1, 9), (8, 2), (3, 7), (6, 4)
  288. query II
  289. UPDATE kv SET v = v + 1 ORDER BY v DESC LIMIT 3 RETURNING k,v
  290. ----
  291. 1 10
  292. 3 8
  293. 6 5
  294. # Check that UPDATE properly supports LIMIT (MySQL extension)
  295. statement count 3
  296. TRUNCATE kv; INSERT INTO kv VALUES (1, 2), (2, 3), (3, 4)
  297. query II
  298. UPDATE kv SET v = v - 1 WHERE k < 10 ORDER BY k LIMIT 1 RETURNING k, v
  299. ----
  300. 1 1
  301. query II rowsort
  302. SELECT * FROM kv
  303. ----
  304. 1 1
  305. 2 3
  306. 3 4
  307. # Check that updates on tables with multiple column families behave as
  308. # they should.
  309. statement ok
  310. CREATE TABLE tu (a INT PRIMARY KEY, b INT, c INT, d INT, FAMILY (a), FAMILY (b), FAMILY (c,d));
  311. INSERT INTO tu VALUES (1, 2, 3, 4)
  312. statement ok
  313. UPDATE tu SET b = NULL, c = NULL, d = NULL
  314. query IIII rowsort
  315. SELECT * FROM tu
  316. ----
  317. 1 NULL NULL NULL
  318. subtest contraint_check_validation_ordering
  319. # Verification of column constraints vs CHECK handling. The column
  320. # constraint verification must take place first.
  321. #
  322. # This test requires that the error message for a CHECK constraint
  323. # validation error be different than a column validation error. So we
  324. # test the former first, as a sanity check.
  325. statement ok
  326. CREATE TABLE tn(x INT NULL CHECK(x IS NOT NULL), y CHAR(4) CHECK(length(y) < 4));
  327. INSERT INTO tn(x, y) VALUES (123, 'abc');
  328. statement error failed to satisfy CHECK constraint
  329. UPDATE tn SET x = NULL
  330. statement error failed to satisfy CHECK constraint
  331. UPDATE tn SET y = 'abcd'
  332. # Now we test that the column validation occurs before the CHECK constraint.
  333. statement ok
  334. CREATE TABLE tn2(x INT NOT NULL CHECK(x IS NOT NULL), y CHAR(3) CHECK(length(y) < 4));
  335. INSERT INTO tn2(x, y) VALUES (123, 'abc');
  336. statement error null value in column "x" violates not-null constraint
  337. UPDATE tn2 SET x = NULL
  338. statement error value too long for type CHAR\(3\)
  339. UPDATE tn2 SET y = 'abcd'
  340. subtest fk_contraint_check_validation_ordering
  341. # Verify that column constraints and CHECK handling occur before
  342. # foreign key validation.
  343. statement ok
  344. CREATE TABLE src(x VARCHAR PRIMARY KEY);
  345. INSERT INTO src(x) VALUES ('abc');
  346. CREATE TABLE derived(x CHAR(3) REFERENCES src(x),
  347. y VARCHAR CHECK(length(y) < 4) REFERENCES src(x));
  348. INSERT INTO derived(x, y) VALUES ('abc', 'abc')
  349. # Sanity check that the FK constraints gets actually validated
  350. statement error foreign key violation
  351. UPDATE derived SET x = 'xxx'
  352. statement error value too long for type CHAR\(3\)
  353. UPDATE derived SET x = 'abcd'
  354. statement error failed to satisfy CHECK constraint
  355. UPDATE derived SET y = 'abcd'
  356. subtest regression_29494
  357. statement ok
  358. CREATE TABLE t29494(x INT PRIMARY KEY); INSERT INTO t29494 VALUES (12)
  359. statement ok
  360. BEGIN; ALTER TABLE t29494 ADD COLUMN y INT NOT NULL DEFAULT 123
  361. # Check that the new column is not visible
  362. query T
  363. SELECT create_statement FROM [SHOW CREATE t29494]
  364. ----
  365. CREATE TABLE t29494 (
  366. x INT8 NOT NULL,
  367. CONSTRAINT "primary" PRIMARY KEY (x ASC),
  368. FAMILY "primary" (x)
  369. )
  370. # Check that the new column is not usable in RETURNING
  371. statement error column "y" does not exist
  372. UPDATE t29494 SET x = 123 RETURNING y
  373. # Check the new column is not assignable. We need to restart
  374. # the txn because the error above trashed it.
  375. statement ok
  376. ROLLBACK; BEGIN; ALTER TABLE t29494 ADD COLUMN y INT NOT NULL DEFAULT 123
  377. # Returning * doesn't return y
  378. query I
  379. UPDATE t29494 SET x = 124 WHERE x = 12 RETURNING *
  380. ----
  381. 124
  382. statement error column "y" does not exist
  383. UPDATE t29494 SET y = 123
  384. # Check the new column is not usable in assignments. We need to
  385. # restart the txn because the error above trashed it.
  386. statement ok
  387. ROLLBACK; BEGIN; ALTER TABLE t29494 ADD COLUMN y INT NOT NULL DEFAULT 123
  388. statement error column "y" is being backfilled
  389. UPDATE t29494 SET x = y
  390. statement ok
  391. COMMIT
  392. # Use delete-only mutation columns with default and computed expressions.
  393. statement ok
  394. CREATE TABLE mutation (m INT PRIMARY KEY, n INT)
  395. statement ok
  396. INSERT INTO mutation VALUES (1, 1)
  397. statement ok
  398. BEGIN; ALTER TABLE mutation add COLUMN o INT DEFAULT(10), ADD COLUMN p INT AS (o + n) STORED
  399. statement ok
  400. UPDATE mutation SET m=2 WHERE n=1
  401. statement ok
  402. COMMIT TRANSACTION
  403. query IIII colnames
  404. SELECT * FROM mutation
  405. ----
  406. m n o p
  407. 2 1 10 11
  408. #regression test for cockroach#32477
  409. subtest reject_special_funcs_inset
  410. statement ok
  411. CREATE TABLE t32477(x) AS SELECT 1
  412. statement error aggregate functions are not allowed in UPDATE SET
  413. UPDATE t32477 SET x = count(x)
  414. statement error window functions are not allowed in UPDATE SET
  415. UPDATE t32477 SET x = rank() OVER ()
  416. statement error generator functions are not allowed in UPDATE SET
  417. UPDATE t32477 SET x = generate_series(1,2)
  418. #regression test for cockroach#32054
  419. subtest empty_update_subquery
  420. statement ok
  421. CREATE TABLE t32054(x,y) AS SELECT 1,2
  422. statement ok
  423. CREATE TABLE t32054_empty(x INT, y INT)
  424. statement ok
  425. UPDATE t32054 SET (x,y) = (SELECT x,y FROM t32054_empty)
  426. query II
  427. SELECT * FROM t32054
  428. ----
  429. NULL NULL
  430. # ------------------------------------------------------------------------------
  431. # Regression for cockroach#35364.
  432. # ------------------------------------------------------------------------------
  433. subtest regression_35364
  434. statement ok
  435. CREATE TABLE t35364(x DECIMAL(1,0) CHECK (x >= 1))
  436. statement ok
  437. INSERT INTO t35364 VALUES (2)
  438. statement ok
  439. UPDATE t35364 SET x=0.5
  440. query T
  441. SELECT x FROM t35364
  442. ----
  443. 1
  444. # ------------------------------------------------------------------------------
  445. # Regression for cockroach#35970.
  446. # ------------------------------------------------------------------------------
  447. statement ok
  448. CREATE TABLE table35970 (
  449. a INT PRIMARY KEY,
  450. b INT,
  451. c INT8[],
  452. FAMILY fam0 (a, b),
  453. FAMILY fam1 (c)
  454. )
  455. statement ok
  456. INSERT INTO table35970 VALUES (1, 1, NULL);
  457. query I
  458. UPDATE table35970
  459. SET c = c
  460. RETURNING b
  461. ----
  462. 1