select.slt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  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/select
  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. # SELECT with no table.
  25. query I
  26. SELECT 1
  27. ----
  28. 1
  29. query T
  30. SELECT NULL
  31. ----
  32. NULL
  33. query II colnames
  34. SELECT 1+1 AS two, 2+2 AS four
  35. ----
  36. two four
  37. 2 4
  38. # SELECT expression tests.
  39. statement ok
  40. CREATE TABLE abc (a INT PRIMARY KEY, b INT, c INT)
  41. query error syntax error at or near "from"
  42. SELECT FROM abc
  43. query error could not parse "hello" as type bool
  44. SELECT * FROM abc WHERE 'hello'
  45. statement ok
  46. INSERT INTO abc VALUES (1, 2, 3)
  47. query III colnames
  48. SELECT * FROM abc
  49. ----
  50. a b c
  51. 1 2 3
  52. query TIII colnames
  53. SELECT NULL AS z, * FROM abc
  54. ----
  55. z a b c
  56. NULL 1 2 3
  57. # synonym for SELECT * FROM abc
  58. query III
  59. TABLE abc
  60. ----
  61. 1 2 3
  62. query error syntax error at or near "*"
  63. TABLE abc.*
  64. query III colnames
  65. SELECT * FROM abc WHERE NULL
  66. ----
  67. a b c
  68. query III colnames
  69. SELECT * FROM abc WHERE a = NULL
  70. ----
  71. a b c
  72. query IIIIII colnames
  73. SELECT *,* FROM abc
  74. ----
  75. a b c a b c
  76. 1 2 3 1 2 3
  77. query IIII colnames
  78. SELECT a,a,a,a FROM abc
  79. ----
  80. a a a a
  81. 1 1 1 1
  82. query II colnames
  83. SELECT a,c FROM abc
  84. ----
  85. a c
  86. 1 3
  87. query I colnames
  88. SELECT a+b+c AS foo FROM abc
  89. ----
  90. foo
  91. 6
  92. # Contradiction
  93. query III
  94. SELECT * FROM abc WHERE a > 5 AND a < 5
  95. ----
  96. # Contradiction with remainder filter
  97. query III
  98. SELECT * FROM abc WHERE a > 5 AND a < 5 AND b>=100
  99. ----
  100. statement ok
  101. INSERT INTO abc VALUES (0, 1, 2)
  102. query II
  103. SELECT a,b FROM abc WHERE CASE WHEN a != 0 THEN b/a > 1.5 ELSE false END
  104. ----
  105. 1 2
  106. # SELECT of NULL value.
  107. statement ok
  108. CREATE TABLE kv (k CHAR PRIMARY KEY, v CHAR)
  109. statement ok
  110. INSERT INTO kv (k) VALUES ('a')
  111. query TT
  112. SELECT * FROM kv
  113. ----
  114. a NULL
  115. query TT
  116. SELECT k,v FROM kv
  117. ----
  118. a NULL
  119. query T
  120. SELECT v||'foo' FROM kv
  121. ----
  122. NULL
  123. query T
  124. SELECT lower(v) FROM kv
  125. ----
  126. NULL
  127. query T
  128. SELECT k FROM kv
  129. ----
  130. 1 value hashing to 60b725f10c9c85c70d97880dfe8191b3
  131. query TT
  132. SELECT kv.K,KV.v FROM kv
  133. ----
  134. a NULL
  135. query TT
  136. SELECT kv.* FROM kv
  137. ----
  138. a NULL
  139. # Regression tests for database-issues#7241
  140. query TT
  141. SELECT test.kv.* FROM kv
  142. ----
  143. a NULL
  144. query TT
  145. SELECT test.public.kv.* FROM kv
  146. ----
  147. a NULL
  148. query TT
  149. SELECT test.public.kv.* FROM test.kv
  150. ----
  151. a NULL
  152. query TT
  153. SELECT test.kv.* FROM test.public.kv
  154. ----
  155. a NULL
  156. query error no data source matches pattern: foo.\*
  157. SELECT foo.* FROM kv
  158. query error cannot use "\*" without a FROM clause
  159. SELECT *
  160. query error "kv.*" cannot be aliased
  161. SELECT kv.* AS foo FROM kv
  162. query error no data source matches pattern: bar.kv.\*
  163. SELECT bar.kv.* FROM kv
  164. # Don't panic with invalid names (materialize#8024)
  165. query error cannot subscript type tuple\{char AS k, char AS v\} because it is not an array
  166. SELECT kv.*[1] FROM kv
  167. query T colnames
  168. SELECT FOO.k FROM kv AS foo WHERE foo.k = 'a'
  169. ----
  170. k
  171. a
  172. query T
  173. SELECT "foo"."v" FROM kv AS foo WHERE foo.k = 'a'
  174. ----
  175. NULL
  176. statement ok
  177. CREATE TABLE kw ("from" INT PRIMARY KEY)
  178. statement ok
  179. INSERT INTO kw VALUES (1)
  180. query III colnames
  181. SELECT *, "from", kw."from" FROM kw
  182. ----
  183. from from from
  184. 1 1 1
  185. # SELECT from index.
  186. statement ok
  187. CREATE TABLE xyzw (
  188. x INT PRIMARY KEY,
  189. y INT,
  190. z INT,
  191. w INT,
  192. INDEX foo (z, y)
  193. )
  194. statement ok
  195. INSERT INTO xyzw VALUES (4, 5, 6, 7), (1, 2, 3, 4)
  196. query error pq: column "x" does not exist
  197. SELECT * FROM xyzw LIMIT x
  198. query error pq: column "y" does not exist
  199. SELECT * FROM xyzw OFFSET 1 + y
  200. query error argument of LIMIT must be type int, not type decimal
  201. SELECT * FROM xyzw LIMIT 3.3
  202. query IIII
  203. SELECT * FROM xyzw ORDER BY 1 LIMIT '1'
  204. ----
  205. 1 2 3 4
  206. query error argument of OFFSET must be type int, not type decimal
  207. SELECT * FROM xyzw OFFSET 1.5
  208. query error negative value for LIMIT
  209. SELECT * FROM xyzw LIMIT -100
  210. query error negative value for OFFSET
  211. SELECT * FROM xyzw OFFSET -100
  212. query error numeric constant out of int64 range
  213. SELECT * FROM xyzw LIMIT 9223372036854775808
  214. query error numeric constant out of int64 range
  215. SELECT * FROM xyzw OFFSET 9223372036854775808
  216. query IIII
  217. SELECT * FROM xyzw ORDER BY x OFFSET 1 + 0.0
  218. ----
  219. 4 5 6 7
  220. query T rowsort
  221. SELECT (x,y) FROM xyzw
  222. ----
  223. (1,2)
  224. (4,5)
  225. query IIII
  226. SELECT * FROM xyzw LIMIT 0
  227. ----
  228. query IIII
  229. SELECT * FROM xyzw ORDER BY x LIMIT 1
  230. ----
  231. 1 2 3 4
  232. query IIII
  233. SELECT * FROM xyzw ORDER BY x LIMIT 1 OFFSET 1
  234. ----
  235. 4 5 6 7
  236. query IIII
  237. SELECT * FROM xyzw ORDER BY y OFFSET 1
  238. ----
  239. 4 5 6 7
  240. query IIII
  241. SELECT * FROM xyzw ORDER BY y OFFSET 1 LIMIT 1
  242. ----
  243. 4 5 6 7
  244. # Multiplying by zero so the result is deterministic.
  245. query IIII
  246. SELECT * FROM xyzw LIMIT (random() * 0.0)::int OFFSET (random() * 0.0)::int
  247. ----
  248. query error pgcode 42601 multiple LIMIT clauses not allowed
  249. ((SELECT a FROM t LIMIT 1)) LIMIT 1
  250. query IIII
  251. SELECT * FROM (SELECT * FROM xyzw LIMIT 5) OFFSET 5
  252. ----
  253. query II rowsort
  254. SELECT z, y FROM xyzw@foo
  255. ----
  256. 3 2
  257. 6 5
  258. query I
  259. SELECT z FROM test.xyzw@foo WHERE y = 5
  260. ----
  261. 6
  262. query I
  263. SELECT xyzw.y FROM test.xyzw@foo WHERE z = 3
  264. ----
  265. 2
  266. query error pgcode 42P01 relation "test.unknown" does not exist
  267. SELECT z FROM test.unknown@foo WHERE y = 5
  268. query error index "unknown" not found
  269. SELECT z FROM test.xyzw@unknown WHERE y = 5
  270. query I
  271. SELECT w FROM test.xyzw@foo WHERE y = 5
  272. ----
  273. 7
  274. statement ok
  275. CREATE TABLE boolean_table (
  276. id INTEGER PRIMARY KEY NOT NULL,
  277. value BOOLEAN
  278. )
  279. statement ok
  280. INSERT INTO boolean_table (id, value) VALUES (1, NULL)
  281. query I
  282. SELECT value FROM boolean_table
  283. ----
  284. NULL
  285. query I
  286. SELECT CASE WHEN NULL THEN 1 ELSE 2 END
  287. ----
  288. 2
  289. statement ok
  290. INSERT INTO abc VALUES (42, NULL, NULL)
  291. query III rowsort
  292. SELECT 0 * b, b % 1, 0 % b from abc
  293. ----
  294. 0 0 0
  295. 0 0 0
  296. NULL NULL NULL
  297. # Doing an index lookup by MaxInt used to not work.
  298. # https://github.com/cockroachdb/cockroach/issues/3587
  299. statement ok
  300. CREATE TABLE MaxIntTest (a INT PRIMARY KEY)
  301. statement ok
  302. INSERT INTO MaxIntTest VALUES (9223372036854775807)
  303. query I
  304. SELECT a FROM MaxIntTest WHERE a = 9223372036854775807
  305. ----
  306. 9223372036854775807
  307. query error no value provided for placeholder
  308. SELECT $1::int
  309. # Regression tests for materialize#22670.
  310. query B
  311. SELECT 1 IN (1, 2)
  312. ----
  313. true
  314. query B
  315. SELECT NULL IN (1, 2)
  316. ----
  317. NULL
  318. query B
  319. SELECT 1 IN (1, NULL)
  320. ----
  321. true
  322. query B
  323. SELECT 1 IN (NULL, 2)
  324. ----
  325. NULL
  326. query B
  327. SELECT (1, NULL) IN ((1, 1))
  328. ----
  329. NULL
  330. query B
  331. SELECT (2, NULL) IN ((1, 1))
  332. ----
  333. false
  334. query B
  335. SELECT (1, 1) IN ((1, NULL))
  336. ----
  337. NULL
  338. query B
  339. SELECT (1, 1) IN ((2, NULL))
  340. ----
  341. false
  342. # Tests with a tuple coming from a subquery.
  343. query B
  344. SELECT NULL::int IN (SELECT * FROM (VALUES (1)) AS t(a))
  345. ----
  346. NULL
  347. query B
  348. SELECT (1, NULL::int) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  349. ----
  350. NULL
  351. query B
  352. SELECT (2, NULL::int) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  353. ----
  354. false
  355. query B
  356. SELECT (NULL::int, 1) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  357. ----
  358. NULL
  359. query B
  360. SELECT (NULL::int, 2) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  361. ----
  362. false
  363. query B
  364. SELECT (NULL::int, NULL::int) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  365. ----
  366. NULL
  367. query B
  368. SELECT NULL::int NOT IN (SELECT * FROM (VALUES (1)) AS t(a))
  369. ----
  370. NULL
  371. query B
  372. SELECT (1, NULL::int) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  373. ----
  374. NULL
  375. query B
  376. SELECT (2, NULL::int) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  377. ----
  378. true
  379. query B
  380. SELECT (NULL::int, 1) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  381. ----
  382. NULL
  383. query B
  384. SELECT (NULL::int, 2) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  385. ----
  386. true
  387. query B
  388. SELECT (NULL::int, NULL::int) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b))
  389. ----
  390. NULL
  391. # Tests with an empty IN tuple.
  392. query B
  393. SELECT NULL::int IN (SELECT * FROM (VALUES (1)) AS t(a) WHERE a > 1)
  394. ----
  395. false
  396. query B
  397. SELECT (1, NULL::int) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b) WHERE a > 1)
  398. ----
  399. false
  400. query B
  401. SELECT (NULL::int, 1) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b) WHERE a > 1)
  402. ----
  403. false
  404. query B
  405. SELECT (NULL::int, NULL::int) IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b) WHERE a > 1)
  406. ----
  407. false
  408. query B
  409. SELECT NULL::int NOT IN (SELECT * FROM (VALUES (1)) AS t(a) WHERE a > 1)
  410. ----
  411. true
  412. query B
  413. SELECT (1, NULL::int) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b) WHERE a > 1)
  414. ----
  415. true
  416. query B
  417. SELECT (NULL::int, 1) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b) WHERE a > 1)
  418. ----
  419. true
  420. query B
  421. SELECT (NULL::int, NULL::int) NOT IN (SELECT * FROM (VALUES (1, 1)) AS t(a, b) WHERE a > 1)
  422. ----
  423. true
  424. statement ok
  425. CREATE TABLE a (x INT PRIMARY KEY, y INT)
  426. statement ok
  427. INSERT INTO a VALUES (1, 10), (2, 20), (3, 30)
  428. query II rowsort
  429. SELECT * FROM a WHERE x > 1
  430. ----
  431. 2 20
  432. 3 30
  433. query II rowsort
  434. SELECT * FROM a WHERE y > 1
  435. ----
  436. 1 10
  437. 2 20
  438. 3 30
  439. query II
  440. SELECT * FROM a WHERE x > 1 AND x < 3
  441. ----
  442. 2 20
  443. query II
  444. SELECT * FROM a WHERE x > 1 AND y < 30
  445. ----
  446. 2 20
  447. query I rowsort
  448. SELECT x + 1 FROM a
  449. ----
  450. 2
  451. 3
  452. 4
  453. query IIIII rowsort
  454. SELECT x, x + 1, y, y + 1, x + y FROM a
  455. ----
  456. 1 2 10 11 11
  457. 2 3 20 21 22
  458. 3 4 30 31 33
  459. query I rowsort
  460. SELECT u + v FROM (SELECT x + 3, y + 10 FROM a) AS foo(u, v)
  461. ----
  462. 24
  463. 35
  464. 46
  465. query IIII rowsort
  466. SELECT x, x, y, x FROM a
  467. ----
  468. 1 1 10 1
  469. 2 2 20 2
  470. 3 3 30 3
  471. query II rowsort
  472. SELECT x + 1, x + y FROM a WHERE x + y > 20
  473. ----
  474. 3 22
  475. 4 33
  476. # ------------------------------------------------------------------------------
  477. # Test with a hidden column.
  478. # ------------------------------------------------------------------------------
  479. statement ok
  480. CREATE TABLE b (x INT, y INT);
  481. INSERT INTO b VALUES (1, 10), (2, 20), (3, 30)
  482. query II rowsort
  483. SELECT * FROM b
  484. ----
  485. 1 10
  486. 2 20
  487. 3 30
  488. query I rowsort
  489. SELECT x FROM b WHERE rowid > 0
  490. ----
  491. 1
  492. 2
  493. 3
  494. # ------------------------------------------------------------------------------
  495. # String inequality filter.
  496. # ------------------------------------------------------------------------------
  497. statement ok
  498. CREATE TABLE c (n INT PRIMARY KEY, str STRING, INDEX str(str DESC));
  499. INSERT INTO c SELECT i, to_english(i) FROM generate_series(1, 10) AS g(i)
  500. query IT rowsort
  501. SELECT * FROM c WHERE str >= 'moo'
  502. ----
  503. 1 one
  504. 2 two
  505. 3 three
  506. 6 six
  507. 7 seven
  508. 9 nine
  509. 10 one-zero
  510. # ------------------------------------------------------------------------------
  511. # "*" must expand to zero columns if there are zero columns to select.
  512. # ------------------------------------------------------------------------------
  513. statement ok
  514. CREATE TABLE nocols(x INT); ALTER TABLE nocols DROP COLUMN x
  515. query I
  516. SELECT 1, * FROM nocols
  517. ----