views.slt 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  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/views
  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. # NOTE: Keep this table at the beginning of the file to ensure that its numeric
  21. # reference is 53 (the numeric reference of the first table). If the
  22. # numbering scheme in cockroach changes, this test will break.
  23. statement ok
  24. CREATE TABLE t (a INT PRIMARY KEY, b INT)
  25. statement ok
  26. INSERT INTO t VALUES (1, 99), (2, 98), (3, 97)
  27. statement ok
  28. CREATE VIEW v1 AS SELECT a, b FROM t
  29. statement error pgcode 42P07 relation "v1" already exists
  30. CREATE VIEW v1 AS SELECT a, b FROM t
  31. statement error pgcode 42P07 relation "t" already exists
  32. CREATE VIEW t AS SELECT a, b FROM t
  33. statement ok
  34. CREATE VIEW v2 (x, y) AS SELECT a, b FROM t
  35. statement error pgcode 42601 CREATE VIEW specifies 1 column name, but data source has 2 columns
  36. CREATE VIEW v3 (x) AS SELECT a, b FROM t
  37. statement error pgcode 42601 CREATE VIEW specifies 3 column names, but data source has 2 columns
  38. CREATE VIEW v4 (x, y, z) AS SELECT a, b FROM t
  39. statement error pgcode 42P01 relation "dne" does not exist
  40. CREATE VIEW v5 AS SELECT a, b FROM dne
  41. statement ok
  42. CREATE VIEW v6 (x, y) AS SELECT a, b FROM v1
  43. statement ok
  44. CREATE VIEW v7 (x, y) AS SELECT a, b FROM v1 ORDER BY a DESC LIMIT 2
  45. query II colnames,rowsort
  46. SELECT * FROM v1
  47. ----
  48. a b
  49. 1 99
  50. 2 98
  51. 3 97
  52. query II colnames,rowsort
  53. SELECT * FROM v2
  54. ----
  55. x y
  56. 1 99
  57. 2 98
  58. 3 97
  59. query II colnames,rowsort
  60. SELECT * FROM v6
  61. ----
  62. x y
  63. 1 99
  64. 2 98
  65. 3 97
  66. query II colnames
  67. SELECT * FROM v7
  68. ----
  69. x y
  70. 3 97
  71. 2 98
  72. query II colnames
  73. SELECT * FROM v7 ORDER BY x LIMIT 1
  74. ----
  75. x y
  76. 2 98
  77. query II
  78. SELECT * FROM v2 ORDER BY x DESC LIMIT 1
  79. ----
  80. 3 97
  81. query I rowsort
  82. SELECT x FROM v2
  83. ----
  84. 1
  85. 2
  86. 3
  87. query I rowsort
  88. SELECT y FROM v2
  89. ----
  90. 99
  91. 98
  92. 97
  93. query I
  94. SELECT x FROM v7
  95. ----
  96. 3
  97. 2
  98. query I
  99. SELECT x FROM v7 ORDER BY x LIMIT 1
  100. ----
  101. 2
  102. query I
  103. SELECT y FROM v7
  104. ----
  105. 97
  106. 98
  107. query I
  108. SELECT y FROM v7 ORDER BY x LIMIT 1
  109. ----
  110. 98
  111. query IIII rowsort
  112. SELECT * FROM v1 AS v1 INNER JOIN v2 AS v2 ON v1.a = v2.x
  113. ----
  114. 1 99 1 99
  115. 2 98 2 98
  116. 3 97 3 97
  117. statement error pgcode 42809 "v1" is not a table
  118. DROP TABLE v1
  119. statement error pgcode 42809 "t" is not a view
  120. DROP VIEW t
  121. # v7 fails
  122. # statement ok
  123. # DROP VIEW v7
  124. statement ok
  125. DROP VIEW v6
  126. statement ok
  127. DROP VIEW v2
  128. statement ok
  129. DROP VIEW v1
  130. statement error pgcode 42P01 relation "v1" does not exist
  131. DROP VIEW v1
  132. statement ok
  133. create view s1 AS SELECT count(*) FROM t
  134. statement ok
  135. create view s2 AS SELECT a FROM t WHERE a IN (SELECT count(*) FROM t)
  136. statement ok
  137. create view s3 AS SELECT a, count(*) FROM t GROUP BY a
  138. statement ok
  139. create view s4 AS SELECT a, count(*) FROM t GROUP BY a HAVING a > (SELECT count(*) FROM t)
  140. # s4 fails
  141. # statement ok
  142. # DROP VIEW s4
  143. statement ok
  144. DROP VIEW s3
  145. # s2 fails
  146. # statement ok
  147. # DROP VIEW s2
  148. statement ok
  149. DROP VIEW s1
  150. statement ok
  151. DROP TABLE t
  152. # Check for memory leak (materialize#10466)
  153. statement ok
  154. CREATE VIEW foo AS SELECT catalog_name, schema_name, sql_path FROM information_schema.schemata
  155. statement error pq: relation "foo" already exists
  156. CREATE VIEW foo AS SELECT catalog_name, schema_name, sql_path FROM information_schema.schemata
  157. # Ensure views work with dates/timestamps (materialize#12420)
  158. statement ok
  159. CREATE TABLE t (d DATE, t TIMESTAMP)
  160. statement ok
  161. CREATE VIEW dt AS SELECT d, t FROM t WHERE d > DATE '1988-11-12' AND t < TIMESTAMP '2017-01-01'
  162. statement ok
  163. SELECT * FROM dt
  164. statement ok
  165. CREATE VIEW dt2 AS SELECT d, t FROM t WHERE d > d + INTERVAL '10h'
  166. statement ok
  167. SELECT * FROM dt2
  168. # Ensure that creating a view doesn't leak any session-level settings that
  169. # could affect subsequent AS OF SYSTEM TIME queries (materialize#13547).
  170. statement ok
  171. CREATE VIEW v AS SELECT d, t FROM t
  172. statement error pq: AS OF SYSTEM TIME must be provided on a top-level statement
  173. CREATE TABLE t2 AS SELECT d, t FROM t AS OF SYSTEM TIME '2017-02-13 21:30:00'
  174. statement ok
  175. DROP TABLE t CASCADE
  176. # not supported yet
  177. # statement ok
  178. # CREATE TABLE t (a INT[])
  179. #
  180. # statement ok
  181. # INSERT INTO t VALUES (array[1,2,3])
  182. #
  183. # statement ok
  184. # CREATE VIEW b AS SELECT a[1] FROM t
  185. #
  186. # query I
  187. # SELECT * FROM b
  188. # ----
  189. # 1
  190. #
  191. # statement ok
  192. # DROP TABLE t CASCADE
  193. statement ok
  194. CREATE VIEW arr(a) AS SELECT ARRAY[3]
  195. query TI
  196. SELECT *, a[1] FROM arr
  197. ----
  198. {3} 3
  199. # Regression for materialize#15951
  200. statement ok
  201. CREATE TABLE t15951 (a int, b int)
  202. statement ok
  203. CREATE VIEW Caps15951 AS SELECT a, b FROM t15951
  204. statement ok
  205. INSERT INTO t15951 VALUES (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)
  206. query R
  207. SELECT sum (Caps15951. a) FROM Caps15951 GROUP BY b ORDER BY b
  208. ----
  209. 1
  210. 3
  211. 6
  212. query R
  213. SELECT sum ("caps15951". a) FROM "caps15951" GROUP BY b ORDER BY b
  214. ----
  215. 1
  216. 3
  217. 6
  218. statement ok
  219. CREATE VIEW "QuotedCaps15951" AS SELECT a, b FROM t15951
  220. query R
  221. SELECT sum ("QuotedCaps15951". a) FROM "QuotedCaps15951" GROUP BY b ORDER BY b
  222. ----
  223. 1
  224. 3
  225. 6
  226. # Regression tests for database-issues#7154
  227. statement ok
  228. CREATE VIEW w AS WITH a AS (SELECT 1 AS x) SELECT x FROM a
  229. query T
  230. SELECT create_statement FROM [SHOW CREATE w]
  231. ----
  232. CREATE VIEW w (x) AS WITH a AS (SELECT 1 AS x) SELECT x FROM a
  233. statement ok
  234. CREATE VIEW w2 AS WITH t AS (SELECT x FROM w) SELECT x FROM t
  235. query T
  236. SELECT create_statement FROM [SHOW CREATE w2]
  237. ----
  238. CREATE VIEW w2 (x) AS WITH t AS (SELECT x FROM test.public.w) SELECT x FROM t
  239. statement ok
  240. CREATE VIEW w3 AS (WITH t AS (SELECT x FROM w) SELECT x FROM t)
  241. query T
  242. SELECT create_statement FROM [SHOW CREATE w3]
  243. ----
  244. CREATE VIEW w3 (x) AS (WITH t AS (SELECT x FROM test.public.w) SELECT x FROM t)
  245. # Test CRUD privilege in view.
  246. statement ok
  247. CREATE TABLE t (a INT PRIMARY KEY, b INT)
  248. statement ok
  249. CREATE VIEW crud_view AS SELECT a, b FROM [INSERT INTO t (a, b) VALUES (100, 100) RETURNING a, b]
  250. statement ok
  251. GRANT SELECT ON crud_view TO testuser
  252. user testuser
  253. query error user testuser does not have INSERT privilege on relation t
  254. SELECT * FROM crud_view
  255. user root