collatedstring.slt 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  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/collatedstring
  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 pq: invalid locale bad_locale: language: subtag "locale" is well-formed but unknown
  23. SELECT 'a' COLLATE bad_locale
  24. statement error pq: unsupported comparison operator: <collatedstring{en}> = <string>
  25. SELECT 'A' COLLATE en = 'a'
  26. statement error pq: unsupported comparison operator: <collatedstring{en}> = <collatedstring{de}>
  27. SELECT 'A' COLLATE en = 'a' COLLATE de
  28. statement error pq: unsupported comparison operator: \('a' COLLATE en_u_ks_level1\) IN \('A' COLLATE en_u_ks_level1, 'b' COLLATE en\): expected 'b' COLLATE en to be of type collatedstring{en_u_ks_level1}, found type collatedstring{en}
  29. SELECT ('a' COLLATE en_u_ks_level1) IN ('A' COLLATE en_u_ks_level1, 'b' COLLATE en)
  30. statement error pq: tuples \('a' COLLATE en_u_ks_level1, 'a' COLLATE en\), \('A' COLLATE en, 'B' COLLATE en\) are not comparable at index 1: unsupported comparison operator: <collatedstring{en_u_ks_level1}> < <collatedstring{en}
  31. SELECT ('a' COLLATE en_u_ks_level1, 'a' COLLATE en) < ('A' COLLATE en, 'B' COLLATE en)
  32. query T
  33. SELECT 'A' COLLATE en
  34. ----
  35. A
  36. query T
  37. SELECT NULL COLLATE en
  38. ----
  39. NULL
  40. query B
  41. SELECT 'a' COLLATE en < ('B' COLLATE de) COLLATE en
  42. ----
  43. true
  44. query B
  45. SELECT (1, 'a' COLLATE en) < (1, 'B' COLLATE en)
  46. ----
  47. true
  48. query B
  49. SELECT ('a' COLLATE en_u_ks_level1, 'a' COLLATE en) < ('A' COLLATE en_u_ks_level1, 'B' COLLATE en)
  50. ----
  51. true
  52. query B
  53. SELECT 'A' COLLATE en_u_ks_level1 = 'a' COLLATE en_u_ks_level1
  54. ----
  55. true
  56. query B
  57. SELECT 'A' COLLATE en_u_ks_level1 <> 'a' COLLATE en_u_ks_level1
  58. ----
  59. false
  60. query B
  61. SELECT 'A' COLLATE en_u_ks_level1 < 'a' COLLATE en_u_ks_level1
  62. ----
  63. false
  64. query B
  65. SELECT 'A' COLLATE en_u_ks_level1 >= 'a' COLLATE en_u_ks_level1
  66. ----
  67. true
  68. query B
  69. SELECT 'A' COLLATE en_u_ks_level1 <= 'a' COLLATE en_u_ks_level1
  70. ----
  71. true
  72. query B
  73. SELECT 'A' COLLATE en_u_ks_level1 > 'a' COLLATE en_u_ks_level1
  74. ----
  75. false
  76. query B
  77. SELECT 'a' COLLATE en_u_ks_level1 = 'B' COLLATE en_u_ks_level1
  78. ----
  79. false
  80. query B
  81. SELECT 'a' COLLATE en_u_ks_level1 <> 'B' COLLATE en_u_ks_level1
  82. ----
  83. true
  84. query B
  85. SELECT 'a' COLLATE en_u_ks_level1 < 'B' COLLATE en_u_ks_level1
  86. ----
  87. true
  88. query B
  89. SELECT 'a' COLLATE en_u_ks_level1 >= 'B' COLLATE en_u_ks_level1
  90. ----
  91. false
  92. query B
  93. SELECT 'a' COLLATE en_u_ks_level1 <= 'B' COLLATE en_u_ks_level1
  94. ----
  95. true
  96. query B
  97. SELECT 'a' COLLATE en_u_ks_level1 > 'B' COLLATE en_u_ks_level1
  98. ----
  99. false
  100. query B
  101. SELECT 'B' COLLATE en_u_ks_level1 = 'A' COLLATE en_u_ks_level1
  102. ----
  103. false
  104. query B
  105. SELECT 'B' COLLATE en_u_ks_level1 <> 'A' COLLATE en_u_ks_level1
  106. ----
  107. true
  108. query B
  109. SELECT 'B' COLLATE en_u_ks_level1 < 'A' COLLATE en_u_ks_level1
  110. ----
  111. false
  112. query B
  113. SELECT 'B' COLLATE en_u_ks_level1 >= 'A' COLLATE en_u_ks_level1
  114. ----
  115. true
  116. query B
  117. SELECT 'B' COLLATE en_u_ks_level1 <= 'A' COLLATE en_u_ks_level1
  118. ----
  119. false
  120. query B
  121. SELECT 'B' COLLATE en_u_ks_level1 > 'A' COLLATE en_u_ks_level1
  122. ----
  123. true
  124. query B
  125. SELECT ('a' COLLATE en_u_ks_level1) IN ('A' COLLATE en_u_ks_level1, 'b' COLLATE en_u_ks_level1)
  126. ----
  127. true
  128. query B
  129. SELECT ('a' COLLATE en_u_ks_level1) NOT IN ('A' COLLATE en_u_ks_level1, 'b' COLLATE en_u_ks_level1)
  130. ----
  131. false
  132. query B
  133. SELECT ('a' COLLATE en) IN ('A' COLLATE en, 'b' COLLATE en)
  134. ----
  135. false
  136. query B
  137. SELECT ('a' COLLATE en) NOT IN ('A' COLLATE en, 'b' COLLATE en)
  138. ----
  139. true
  140. query B
  141. SELECT 'Fussball' COLLATE de = 'Fußball' COLLATE de
  142. ----
  143. false
  144. query B
  145. SELECT 'Fussball' COLLATE de_u_ks_level1 = 'Fußball' COLLATE de_u_ks_level1
  146. ----
  147. true
  148. query B
  149. SELECT 'ü' COLLATE da < 'x' COLLATE da
  150. ----
  151. false
  152. query B
  153. SELECT 'ü' COLLATE de < 'x' COLLATE de
  154. ----
  155. true
  156. statement error invalid locale e: language: tag is not well-formed at or near "\)"
  157. CREATE TABLE e1 (
  158. a STRING COLLATE e
  159. )
  160. statement error multiple COLLATE declarations for column "a" at or near "\)"
  161. CREATE TABLE e2 (
  162. a STRING COLLATE en COLLATE de
  163. )
  164. statement error COLLATE declaration for non-string-typed column "a" at or near "\)"
  165. CREATE TABLE e3 (
  166. a INT COLLATE en
  167. )
  168. statement ok
  169. CREATE TABLE t (
  170. a STRING COLLATE en
  171. )
  172. query TT
  173. SHOW CREATE TABLE t
  174. ----
  175. t CREATE TABLE t (
  176. a STRING COLLATE en NULL,
  177. FAMILY "primary" (a, rowid)
  178. )
  179. statement ok
  180. INSERT INTO t VALUES
  181. ('A' COLLATE en),
  182. ('B' COLLATE en),
  183. ('a' COLLATE en),
  184. ('b' COLLATE en),
  185. ('x' COLLATE en),
  186. ('ü' COLLATE en)
  187. statement error value type collatedstring{de} doesn't match type collatedstring{en} of column "a"
  188. INSERT INTO t VALUES ('X' COLLATE de)
  189. query T
  190. SELECT a FROM t ORDER BY t.a
  191. ----
  192. a
  193. A
  194. b
  195. B
  196. ü
  197. x
  198. query T
  199. SELECT a FROM t ORDER BY t.a COLLATE da
  200. ----
  201. a
  202. A
  203. b
  204. B
  205. x
  206. ü
  207. query T
  208. SELECT a FROM t WHERE a = 'A' COLLATE en;
  209. ----
  210. A
  211. query T
  212. SELECT 'a' COLLATE en::STRING || 'b'
  213. ----
  214. ab
  215. query B
  216. SELECT 't' COLLATE en::BOOLEAN
  217. ----
  218. true
  219. query I
  220. SELECT '42' COLLATE en::INTEGER
  221. ----
  222. 42
  223. query R
  224. SELECT '42.0' COLLATE en::FLOAT
  225. ----
  226. 42
  227. query R
  228. SELECT '42.0' COLLATE en::DECIMAL
  229. ----
  230. 42.0
  231. query T
  232. SELECT 'a' COLLATE en::BYTES
  233. ----
  234. a
  235. query T
  236. SELECT '2017-01-10 16:05:50.734049+00:00' COLLATE en::TIMESTAMP
  237. ----
  238. 2017-01-10 16:05:50.734049 +0000 +0000
  239. query T
  240. SELECT '2017-01-10 16:05:50.734049+00:00' COLLATE en::TIMESTAMPTZ
  241. ----
  242. 2017-01-10 16:05:50.734049 +0000 UTC
  243. query T
  244. SELECT '40 days' COLLATE en::INTERVAL
  245. ----
  246. 40 days
  247. statement ok
  248. CREATE TABLE foo(a STRING COLLATE en_u_ks_level2)
  249. statement ok
  250. PREPARE x AS INSERT INTO foo VALUES ($1 COLLATE en_u_ks_level2) RETURNING a
  251. query T
  252. EXECUTE x(NULL)
  253. ----
  254. NULL
  255. query T
  256. SELECT a FROM foo
  257. ----
  258. NULL
  259. # Regression test for database-issues#7300
  260. statement ok
  261. INSERT INTO foo VALUES ('aBcD' COLLATE en_u_ks_level2)
  262. query T
  263. SELECT * FROM foo WHERE a = 'aBcD' COLLATE en_u_ks_level2
  264. ----
  265. aBcD
  266. query T
  267. SELECT * FROM foo WHERE a = 'abcd' COLLATE en_u_ks_level2
  268. ----
  269. aBcD
  270. # Test quoted collations.
  271. statement ok
  272. CREATE TABLE quoted_coll (
  273. a STRING COLLATE "en",
  274. b STRING COLLATE "en_US",
  275. c STRING COLLATE "en-Us" DEFAULT ('c' COLLATE "en-Us"),
  276. d STRING COLLATE "en-u-ks-level1" DEFAULT ('d'::STRING COLLATE "en-u-ks-level1"),
  277. e STRING COLLATE "en-us" AS (a COLLATE "en-us") STORED
  278. )
  279. query TT
  280. SHOW CREATE TABLE quoted_coll
  281. ----
  282. quoted_coll CREATE TABLE quoted_coll (
  283. a STRING COLLATE en NULL,
  284. b STRING COLLATE en_US NULL,
  285. c STRING COLLATE en_Us NULL DEFAULT 'c':::STRING COLLATE en_Us,
  286. d STRING COLLATE en_u_ks_level1 NULL DEFAULT 'd':::STRING::STRING COLLATE en_u_ks_level1,
  287. e STRING COLLATE en_us NULL AS (a COLLATE en_us) STORED,
  288. FAMILY "primary" (a, b, c, d, e, rowid)
  289. )