rename_table.slt 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  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/rename_table
  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. # not supported yet
  20. halt
  21. mode cockroach
  22. statement error pgcode 42P01 relation "foo" does not exist
  23. ALTER TABLE foo RENAME TO bar
  24. statement ok
  25. ALTER TABLE IF EXISTS foo RENAME TO bar
  26. statement ok
  27. CREATE TABLE kv (
  28. k INT PRIMARY KEY,
  29. v INT
  30. )
  31. statement ok
  32. INSERT INTO kv VALUES (1, 2), (3, 4)
  33. query II rowsort
  34. SELECT * FROM kv
  35. ----
  36. 1 2
  37. 3 4
  38. query T
  39. SHOW TABLES
  40. ----
  41. kv
  42. statement ok
  43. ALTER TABLE kv RENAME TO new_kv
  44. statement error pgcode 42P01 relation "kv" does not exist
  45. SELECT * FROM kv
  46. query II rowsort
  47. SELECT * FROM new_kv
  48. ----
  49. 1 2
  50. 3 4
  51. query T
  52. SHOW TABLES
  53. ----
  54. new_kv
  55. # check the name in the descriptor, which is used by SHOW GRANTS, is also changed
  56. query TTTTT
  57. SHOW GRANTS ON TABLE new_kv
  58. ----
  59. test public new_kv admin ALL
  60. test public new_kv root ALL
  61. statement error invalid table name: ""
  62. ALTER TABLE "" RENAME TO foo
  63. statement error invalid table name: ""
  64. ALTER TABLE new_kv RENAME TO ""
  65. statement ok
  66. ALTER TABLE new_kv RENAME TO new_kv
  67. statement ok
  68. CREATE TABLE t (
  69. c1 INT PRIMARY KEY,
  70. c2 INT
  71. )
  72. statement ok
  73. INSERT INTO t VALUES (4, 16), (5, 25)
  74. statement error pgcode 42P07 relation "new_kv" already exists
  75. ALTER TABLE t RENAME TO new_kv
  76. user testuser
  77. statement error user testuser does not have DROP privilege on relation t
  78. ALTER TABLE test.t RENAME TO t2
  79. user root
  80. statement ok
  81. GRANT DROP ON TABLE test.t TO testuser
  82. statement ok
  83. create database test2
  84. user testuser
  85. statement error user testuser does not have CREATE privilege on database test
  86. ALTER TABLE test.t RENAME TO t2
  87. user root
  88. statement ok
  89. GRANT CREATE ON DATABASE test TO testuser
  90. statement ok
  91. ALTER TABLE test.t RENAME TO t2
  92. query T
  93. SHOW TABLES
  94. ----
  95. new_kv
  96. t2
  97. user testuser
  98. statement error user testuser does not have CREATE privilege on database test2
  99. ALTER TABLE test.t2 RENAME TO test2.t
  100. user root
  101. statement ok
  102. GRANT CREATE ON DATABASE test2 TO testuser
  103. statement ok
  104. GRANT DROP ON test.new_kv TO testuser
  105. user testuser
  106. statement ok
  107. ALTER TABLE test.new_kv RENAME TO test2.t
  108. statement ok
  109. ALTER TABLE test.t2 RENAME TO test2.t2
  110. query T
  111. SHOW TABLES
  112. ----
  113. query T
  114. SHOW TABLES FROM test2
  115. ----
  116. t
  117. t2
  118. user root
  119. query II rowsort
  120. SELECT * FROM test2.t
  121. ----
  122. 1 2
  123. 3 4
  124. query II rowsort
  125. SELECT * FROM test2.t2
  126. ----
  127. 4 16
  128. 5 25
  129. statement ok
  130. CREATE VIEW test2.v1 AS SELECT c1,c2 FROM test2.t2
  131. statement ok
  132. ALTER TABLE test2.v1 RENAME TO test2.v2
  133. statement ok
  134. ALTER TABLE test2.v2 RENAME TO test2.v1
  135. statement error cannot rename relation "test2.public.t2" because view "v1" depends on it
  136. ALTER TABLE test2.t2 RENAME TO test2.t3
  137. # Tests that uncommitted database or table names can be used by statements
  138. # in the same transaction. Also tests that if the transaction doesn't commit
  139. # the names are discarded and cannot be used by future transactions.
  140. statement ok
  141. BEGIN
  142. statement ok
  143. CREATE DATABASE d; CREATE TABLE d.kv (k CHAR PRIMARY KEY, v CHAR);
  144. statement ok
  145. INSERT INTO d.kv (k,v) VALUES ('a', 'b')
  146. statement ok
  147. COMMIT
  148. statement ok
  149. INSERT INTO d.kv (k,v) VALUES ('c', 'd')
  150. # A table rename disallows the use of the old name
  151. statement ok
  152. BEGIN
  153. statement ok
  154. ALTER TABLE d.kv RENAME TO d.kv2
  155. statement ok
  156. INSERT INTO d.kv2 (k,v) VALUES ('e', 'f')
  157. statement error pgcode 42P01 relation \"d.kv\" does not exist
  158. INSERT INTO d.kv (k,v) VALUES ('g', 'h')
  159. statement ok
  160. ROLLBACK
  161. # A database rename disallows the use of the old name.
  162. statement ok
  163. BEGIN
  164. statement ok
  165. ALTER DATABASE d RENAME TO dnew
  166. statement ok
  167. INSERT INTO dnew.kv (k,v) VALUES ('e', 'f')
  168. statement error pgcode 42P01 relation \"d.kv\" does not exist
  169. INSERT INTO d.kv (k,v) VALUES ('g', 'h')
  170. statement ok
  171. ROLLBACK
  172. # The reuse of a name is allowed.
  173. statement ok
  174. BEGIN
  175. statement ok
  176. ALTER DATABASE d RENAME TO dnew
  177. statement ok
  178. CREATE DATABASE d
  179. statement ok
  180. CREATE TABLE d.kv (k CHAR PRIMARY KEY, v CHAR)
  181. statement ok
  182. INSERT INTO d.kv (k,v) VALUES ('a', 'b')
  183. statement ok
  184. COMMIT
  185. # Check that on a rollback a database name cannot be used.
  186. statement ok
  187. BEGIN
  188. statement ok
  189. CREATE DATABASE dd; CREATE TABLE dd.kv (k CHAR PRIMARY KEY, v CHAR)
  190. statement ok
  191. INSERT INTO dd.kv (k,v) VALUES ('a', 'b')
  192. statement ok
  193. ROLLBACK
  194. statement error pgcode 42P01 relation "dd\.kv" does not exist
  195. INSERT INTO dd.kv (k,v) VALUES ('c', 'd')
  196. # Check that on a rollback a table name cannot be used.
  197. statement ok
  198. BEGIN
  199. statement ok
  200. CREATE TABLE d.kv2 (k CHAR PRIMARY KEY, v CHAR)
  201. statement ok
  202. INSERT INTO d.kv2 (k,v) VALUES ('a', 'b')
  203. statement ok
  204. ROLLBACK
  205. statement error pgcode 42P01 relation \"d.kv2\" does not exist
  206. INSERT INTO d.kv2 (k,v) VALUES ('c', 'd')
  207. statement ok
  208. USE d
  209. query T
  210. SHOW TABLES
  211. ----
  212. kv
  213. query TTT
  214. EXPLAIN OPTIMIZED PLAN WITH (humanized expressions) AS VERBOSE TEXT FOR ALTER TABLE kv RENAME TO kv2
  215. ----
  216. rename table · ·
  217. # Verify that the EXPLAIN above does not actually rename the table (cockroach#30543)
  218. query T
  219. SHOW TABLES
  220. ----
  221. kv