tuple.slt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  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/tuple
  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 tb(unused INT)
  26. statement ok
  27. INSERT INTO tb VALUES (1)
  28. subtest empty_tuple
  29. query B
  30. SELECT 1 IN (SELECT * FROM tb LIMIT 0)
  31. ----
  32. false
  33. # NOTE(benesch): empty IN and ANY lists are a CockroachDB-ism that we are not
  34. # current planning to support.
  35. #
  36. # query B
  37. # SELECT 1 IN ()
  38. # ----
  39. # false
  40. #
  41. # query B
  42. # SELECT 1 = ANY ()
  43. # ----
  44. # false
  45. subtest unlabeled_tuple
  46. # TODO(bram): We don't pretty print tuples the same way as postgres. See cockroach#25522.
  47. query TT colnames
  48. SELECT (1, 2, 'hello', NULL, NULL) AS t, (true, NULL, (false, 6.6, false)) AS u FROM tb
  49. ----
  50. t u
  51. (1,2,hello,,) (t,,"(f,6.6,f)")
  52. mode standard
  53. query T multiline
  54. SELECT (1, e'hello\nworld')
  55. ----
  56. (1,"hello
  57. world")
  58. EOF
  59. mode cockroach
  60. query BBBBBBBBB colnames
  61. SELECT
  62. (2, 2) < (1, 1) AS a,
  63. (2, 2) < (1, 2) AS b,
  64. (2, 2) < (1, 3) AS c,
  65. (2, 2) < (2, 1) AS d,
  66. (2, 2) < (2, 2) AS e,
  67. (2, 2) < (2, 3) AS f,
  68. (2, 2) < (3, 1) AS g,
  69. (2, 2) < (3, 2) AS h,
  70. (2, 2) < (3, 3) AS i
  71. FROM tb
  72. ----
  73. a b c d e f g h i
  74. false false false false false true true true true
  75. query BBBBBBBBB colnames
  76. SELECT
  77. (2, 2) > (1, 1) AS a,
  78. (2, 2) > (1, 2) AS b,
  79. (2, 2) > (1, 3) AS c,
  80. (2, 2) > (2, 1) AS d,
  81. (2, 2) > (2, 2) AS e,
  82. (2, 2) > (2, 3) AS f,
  83. (2, 2) > (3, 1) AS g,
  84. (2, 2) > (3, 2) AS h,
  85. (2, 2) > (3, 3) AS i
  86. FROM tb
  87. ----
  88. a b c d e f g h i
  89. true true true true false false false false false
  90. query BBBBBBBBB colnames
  91. SELECT
  92. (2, 2) <= (1, 1) AS a,
  93. (2, 2) <= (1, 2) AS b,
  94. (2, 2) <= (1, 3) AS c,
  95. (2, 2) <= (2, 1) AS d,
  96. (2, 2) <= (2, 2) AS e,
  97. (2, 2) <= (2, 3) AS f,
  98. (2, 2) <= (3, 1) AS g,
  99. (2, 2) <= (3, 2) AS h,
  100. (2, 2) <= (3, 3) AS i
  101. FROM tb
  102. ----
  103. a b c d e f g h i
  104. false false false false true true true true true
  105. query BBBBBBBBB colnames
  106. SELECT
  107. (2, 2) >= (1, 1) AS a,
  108. (2, 2) >= (1, 2) AS b,
  109. (2, 2) >= (1, 3) AS c,
  110. (2, 2) >= (2, 1) AS d,
  111. (2, 2) >= (2, 2) AS e,
  112. (2, 2) >= (2, 3) AS f,
  113. (2, 2) >= (3, 1) AS g,
  114. (2, 2) >= (3, 2) AS h,
  115. (2, 2) >= (3, 3) AS i
  116. FROM tb
  117. ----
  118. a b c d e f g h i
  119. true true true true true false false false false
  120. query BBBBBBBBB colnames
  121. SELECT
  122. (2, 2) = (1, 1) AS a,
  123. (2, 2) = (1, 2) AS b,
  124. (2, 2) = (1, 3) AS c,
  125. (2, 2) = (2, 1) AS d,
  126. (2, 2) = (2, 2) AS e,
  127. (2, 2) = (2, 3) AS f,
  128. (2, 2) = (3, 1) AS g,
  129. (2, 2) = (3, 2) AS h,
  130. (2, 2) = (3, 3) AS i
  131. FROM tb
  132. ----
  133. a b c d e f g h i
  134. false false false false true false false false false
  135. query BBBBBBBBB colnames
  136. SELECT
  137. (2, 2) != (1, 1) AS a,
  138. (2, 2) != (1, 2) AS b,
  139. (2, 2) != (1, 3) AS c,
  140. (2, 2) != (2, 1) AS d,
  141. (2, 2) != (2, 2) AS e,
  142. (2, 2) != (2, 3) AS f,
  143. (2, 2) != (3, 1) AS g,
  144. (2, 2) != (3, 2) AS h,
  145. (2, 2) != (3, 3) AS i
  146. FROM tb
  147. ----
  148. a b c d e f g h i
  149. true true true true false true true true true
  150. query BBBB colnames
  151. SELECT
  152. (1, 1) > (0, NULL) AS a,
  153. (1, 1) > (1, NULL) AS b,
  154. (1, 1) > (2, NULL) AS c,
  155. (1, 1) > (NULL, 0) AS d
  156. FROM tb
  157. ----
  158. a b c d
  159. true NULL false NULL
  160. statement error invalid input syntax for type integer
  161. SELECT (1, 2) > (1, 'hi') FROM tb
  162. statement error unequal number of entries in row expressions
  163. SELECT (1, 2) > (1, 2, 3) FROM tb
  164. statement ok
  165. CREATE TABLE t (a int, b int, c int)
  166. statement ok
  167. INSERT INTO t VALUES (1, 2, 3), (2, 3, 1), (3, 1, 2)
  168. query III colnames
  169. SELECT * FROM t ORDER BY a, b, c
  170. ----
  171. a b c
  172. 1 2 3
  173. 2 3 1
  174. 3 1 2
  175. query III colnames
  176. SELECT * FROM t WHERE (a, b, c) > (1, 2, 3) AND (a, b, c) < (8, 9, 10) ORDER BY a, b, c
  177. ----
  178. a b c
  179. 2 3 1
  180. 3 1 2
  181. # NOTE(benesch): Cockroach mishandles this. This test has been adapted to match
  182. # PostgreSQL.
  183. query III colnames,rowsort
  184. SELECT (t.*) AS a FROM t
  185. ----
  186. a b c
  187. 2 3 1
  188. 3 1 2
  189. 1 2 3
  190. query BB colnames
  191. SELECT ((1, 2), 'equal') = ((1, 2.0), 'equal') AS a,
  192. ((1, 2), 'equal') = ((1, 2.0), 'not equal') AS b
  193. FROM tb
  194. ----
  195. a b
  196. true false
  197. query B colnames
  198. SELECT ((1, 2), 'equal') = ((1, 2.1), 'equal') AS a
  199. FROM tb
  200. ----
  201. a
  202. false
  203. query B colnames
  204. SELECT (ROW(1 + 9), 'a' || 'b') = (ROW(sqrt(100.0)), 'ab') AS a
  205. FROM tb
  206. ----
  207. a
  208. true
  209. query B colnames
  210. SELECT (ROW(sqrt(100.0)), 'ab') = (ROW(1 + 9), 'a' || 'b') AS a
  211. FROM tb
  212. ----
  213. a
  214. true
  215. query error invalid input syntax for type integer
  216. SELECT ((1, 2), 'equal') = ((1, 'huh'), 'equal') FROM tb
  217. # Issue materialize#3568
  218. statement ok
  219. CREATE TABLE kv (
  220. k INT PRIMARY KEY,
  221. v INT
  222. )
  223. statement ok
  224. INSERT INTO kv VALUES (1, 2)
  225. query II colnames
  226. SELECT k, v FROM kv WHERE (k, v) = (1, 100)
  227. ----
  228. k v
  229. query II colnames
  230. SELECT k, v FROM kv WHERE (k, v) IN ((1, 100))
  231. ----
  232. k v
  233. statement ok
  234. DROP TABLE kv
  235. # Issue database-issues#3567
  236. query B colnames
  237. SELECT 'foo' IN (x, 'aaa') AS r FROM (SELECT 'foo' AS x FROM tb)
  238. ----
  239. r
  240. true
  241. query B colnames
  242. SELECT 'foo' IN (x, 'zzz') AS r FROM (SELECT 'foo' AS x FROM tb)
  243. ----
  244. r
  245. true
  246. # Subquery tuples are already sorted
  247. query B colnames
  248. SELECT 3 IN (SELECT c FROM t ORDER BY 1 ASC) AS r
  249. ----
  250. r
  251. true
  252. query B colnames
  253. SELECT 4 IN (SELECT c FROM t ORDER BY 1 DESC) AS r
  254. ----
  255. r
  256. false
  257. query B colnames
  258. SELECT (1, 2) IN (SELECT a, b FROM t ORDER BY 1 ASC, 2 ASC) AS r
  259. ----
  260. r
  261. true
  262. query B colnames
  263. SELECT (1, 2) IN (SELECT a, b FROM t ORDER BY 1 DESC, 2 DESC) AS r
  264. ----
  265. r
  266. true
  267. statement ok
  268. DROP TABLE t
  269. # Issue materialize#12302
  270. query B colnames
  271. SELECT 1 IN (2, NULL) AS r
  272. FROM tb
  273. ----
  274. r
  275. NULL
  276. query B colnames
  277. SELECT 1 IN (2, x) AS r FROM (SELECT NULL::int AS x FROM tb)
  278. ----
  279. r
  280. NULL
  281. # Issue 10407: tuple comparisons should not require homogeneous types
  282. query B colnames
  283. SELECT (now(), 2) = (now() :: timestamp, 2) AS r
  284. FROM tb
  285. ----
  286. r
  287. true
  288. query B colnames
  289. SELECT (1, 2) > (1.0, 2.0) AS r
  290. FROM tb
  291. ----
  292. r
  293. false
  294. statement ok
  295. CREATE TABLE uvw (
  296. u INT,
  297. v INT,
  298. w INT
  299. )
  300. statement ok
  301. CREATE INDEX uvw_idx ON uvw (u, v, w)
  302. statement ok
  303. INSERT INTO uvw SELECT u, v, w FROM
  304. generate_series(0, 3) AS u,
  305. generate_series(0, 3) AS v,
  306. generate_series(0, 3) AS w
  307. statement ok
  308. UPDATE uvw SET u = NULL WHERE u = 0
  309. statement ok
  310. UPDATE uvw SET v = NULL WHERE v = 0
  311. statement ok
  312. UPDATE uvw SET w = NULL WHERE w = 0
  313. # Note: Result differs from Cockroach but matches Postgres.
  314. query III colnames
  315. SELECT * FROM uvw ORDER BY u, v, w
  316. ----
  317. u v w
  318. 1 1 1
  319. 1 1 2
  320. 1 1 3
  321. 1 1 NULL
  322. 1 2 1
  323. 1 2 2
  324. 1 2 3
  325. 1 2 NULL
  326. 1 3 1
  327. 1 3 2
  328. 1 3 3
  329. 1 3 NULL
  330. 1 NULL 1
  331. 1 NULL 2
  332. 1 NULL 3
  333. 1 NULL NULL
  334. 2 1 1
  335. 2 1 2
  336. 2 1 3
  337. 2 1 NULL
  338. 2 2 1
  339. 2 2 2
  340. 2 2 3
  341. 2 2 NULL
  342. 2 3 1
  343. 2 3 2
  344. 2 3 3
  345. 2 3 NULL
  346. 2 NULL 1
  347. 2 NULL 2
  348. 2 NULL 3
  349. 2 NULL NULL
  350. 3 1 1
  351. 3 1 2
  352. 3 1 3
  353. 3 1 NULL
  354. 3 2 1
  355. 3 2 2
  356. 3 2 3
  357. 3 2 NULL
  358. 3 3 1
  359. 3 3 2
  360. 3 3 3
  361. 3 3 NULL
  362. 3 NULL 1
  363. 3 NULL 2
  364. 3 NULL 3
  365. 3 NULL NULL
  366. NULL 1 1
  367. NULL 1 2
  368. NULL 1 3
  369. NULL 1 NULL
  370. NULL 2 1
  371. NULL 2 2
  372. NULL 2 3
  373. NULL 2 NULL
  374. NULL 3 1
  375. NULL 3 2
  376. NULL 3 3
  377. NULL 3 NULL
  378. NULL NULL 1
  379. NULL NULL 2
  380. NULL NULL 3
  381. NULL NULL NULL
  382. # Note: Result differs from Cockroach but matches Postgres.
  383. query III colnames
  384. SELECT * FROM uvw WHERE (u, v, w) >= (1, 2, 3) ORDER BY u, v, w
  385. ----
  386. u v w
  387. 1 2 3
  388. 1 3 1
  389. 1 3 2
  390. 1 3 3
  391. 1 3 NULL
  392. 2 1 1
  393. 2 1 2
  394. 2 1 3
  395. 2 1 NULL
  396. 2 2 1
  397. 2 2 2
  398. 2 2 3
  399. 2 2 NULL
  400. 2 3 1
  401. 2 3 2
  402. 2 3 3
  403. 2 3 NULL
  404. 2 NULL 1
  405. 2 NULL 2
  406. 2 NULL 3
  407. 2 NULL NULL
  408. 3 1 1
  409. 3 1 2
  410. 3 1 3
  411. 3 1 NULL
  412. 3 2 1
  413. 3 2 2
  414. 3 2 3
  415. 3 2 NULL
  416. 3 3 1
  417. 3 3 2
  418. 3 3 3
  419. 3 3 NULL
  420. 3 NULL 1
  421. 3 NULL 2
  422. 3 NULL 3
  423. 3 NULL NULL
  424. # Note: Result differs from Cockroach but matches Postgres.
  425. query III colnames
  426. SELECT * FROM uvw WHERE (u, v, w) > (2, 1, 1) ORDER BY u, v, w
  427. ----
  428. u v w
  429. 2 1 2
  430. 2 1 3
  431. 2 2 1
  432. 2 2 2
  433. 2 2 3
  434. 2 2 NULL
  435. 2 3 1
  436. 2 3 2
  437. 2 3 3
  438. 2 3 NULL
  439. 3 1 1
  440. 3 1 2
  441. 3 1 3
  442. 3 1 NULL
  443. 3 2 1
  444. 3 2 2
  445. 3 2 3
  446. 3 2 NULL
  447. 3 3 1
  448. 3 3 2
  449. 3 3 3
  450. 3 3 NULL
  451. 3 NULL 1
  452. 3 NULL 2
  453. 3 NULL 3
  454. 3 NULL NULL
  455. # Note: Result differs from Cockroach but matches Postgres.
  456. query III colnames
  457. SELECT * FROM uvw WHERE (u, v, w) <= (2, 3, 1) ORDER BY u, v, w
  458. ----
  459. u v w
  460. 1 1 1
  461. 1 1 2
  462. 1 1 3
  463. 1 1 NULL
  464. 1 2 1
  465. 1 2 2
  466. 1 2 3
  467. 1 2 NULL
  468. 1 3 1
  469. 1 3 2
  470. 1 3 3
  471. 1 3 NULL
  472. 1 NULL 1
  473. 1 NULL 2
  474. 1 NULL 3
  475. 1 NULL NULL
  476. 2 1 1
  477. 2 1 2
  478. 2 1 3
  479. 2 1 NULL
  480. 2 2 1
  481. 2 2 2
  482. 2 2 3
  483. 2 2 NULL
  484. 2 3 1
  485. # Note: Result differs from Cockroach but matches Postgres.
  486. query III colnames
  487. SELECT * FROM uvw WHERE (u, v, w) < (2, 2, 2) ORDER BY u, v, w
  488. ----
  489. u v w
  490. 1 1 1
  491. 1 1 2
  492. 1 1 3
  493. 1 1 NULL
  494. 1 2 1
  495. 1 2 2
  496. 1 2 3
  497. 1 2 NULL
  498. 1 3 1
  499. 1 3 2
  500. 1 3 3
  501. 1 3 NULL
  502. 1 NULL 1
  503. 1 NULL 2
  504. 1 NULL 3
  505. 1 NULL NULL
  506. 2 1 1
  507. 2 1 2
  508. 2 1 3
  509. 2 1 NULL
  510. 2 2 1
  511. # Note: Result differs from Cockroach but matches Postgres.
  512. query III colnames
  513. SELECT * FROM uvw WHERE (u, v, w) != (1, 2, 3) ORDER BY u, v, w
  514. ----
  515. u v w
  516. 1 1 1
  517. 1 1 2
  518. 1 1 3
  519. 1 1 NULL
  520. 1 2 1
  521. 1 2 2
  522. 1 3 1
  523. 1 3 2
  524. 1 3 3
  525. 1 3 NULL
  526. 1 NULL 1
  527. 1 NULL 2
  528. 2 1 1
  529. 2 1 2
  530. 2 1 3
  531. 2 1 NULL
  532. 2 2 1
  533. 2 2 2
  534. 2 2 3
  535. 2 2 NULL
  536. 2 3 1
  537. 2 3 2
  538. 2 3 3
  539. 2 3 NULL
  540. 2 NULL 1
  541. 2 NULL 2
  542. 2 NULL 3
  543. 2 NULL NULL
  544. 3 1 1
  545. 3 1 2
  546. 3 1 3
  547. 3 1 NULL
  548. 3 2 1
  549. 3 2 2
  550. 3 2 3
  551. 3 2 NULL
  552. 3 3 1
  553. 3 3 2
  554. 3 3 3
  555. 3 3 NULL
  556. 3 NULL 1
  557. 3 NULL 2
  558. 3 NULL 3
  559. 3 NULL NULL
  560. NULL 1 1
  561. NULL 1 2
  562. NULL 1 3
  563. NULL 1 NULL
  564. NULL 2 1
  565. NULL 2 2
  566. NULL 3 1
  567. NULL 3 2
  568. NULL 3 3
  569. NULL 3 NULL
  570. NULL NULL 1
  571. NULL NULL 2
  572. # Note: Result differs from Cockroach but matches Postgres.
  573. query III colnames
  574. SELECT * FROM uvw WHERE (u, v, w) >= (1, NULL, 3) ORDER BY u, v, w
  575. ----
  576. u v w
  577. 2 1 1
  578. 2 1 2
  579. 2 1 3
  580. 2 1 NULL
  581. 2 2 1
  582. 2 2 2
  583. 2 2 3
  584. 2 2 NULL
  585. 2 3 1
  586. 2 3 2
  587. 2 3 3
  588. 2 3 NULL
  589. 2 NULL 1
  590. 2 NULL 2
  591. 2 NULL 3
  592. 2 NULL NULL
  593. 3 1 1
  594. 3 1 2
  595. 3 1 3
  596. 3 1 NULL
  597. 3 2 1
  598. 3 2 2
  599. 3 2 3
  600. 3 2 NULL
  601. 3 3 1
  602. 3 3 2
  603. 3 3 3
  604. 3 3 NULL
  605. 3 NULL 1
  606. 3 NULL 2
  607. 3 NULL 3
  608. 3 NULL NULL
  609. # Note: Result differs from Cockroach but matches Postgres.
  610. query III colnames
  611. SELECT * FROM uvw WHERE (u, v, w) < (2, NULL, 3) ORDER BY u, v, w
  612. ----
  613. u v w
  614. 1 1 1
  615. 1 1 2
  616. 1 1 3
  617. 1 1 NULL
  618. 1 2 1
  619. 1 2 2
  620. 1 2 3
  621. 1 2 NULL
  622. 1 3 1
  623. 1 3 2
  624. 1 3 3
  625. 1 3 NULL
  626. 1 NULL 1
  627. 1 NULL 2
  628. 1 NULL 3
  629. 1 NULL NULL
  630. statement ok
  631. DROP TABLE uvw
  632. subtest tuple_placeholders
  633. # TODO(benesch): support the statement form of PREPARE and EXECUTE.
  634. #
  635. # statement ok
  636. # PREPARE x AS SELECT $1 = (1,2) AS r FROM tb
  637. #
  638. # statement ok
  639. # PREPARE y AS SELECT (1,2) = $1 AS r FROM tb
  640. #
  641. # query B colnames
  642. # EXECUTE x((1,2))
  643. # ----
  644. # r
  645. # true
  646. #
  647. # query B colnames
  648. # EXECUTE y((1,2))
  649. # ----
  650. # r
  651. # true
  652. #
  653. # query error expected EXECUTE parameter expression to have type tuple\{int, int\}, but '\(1, 2, 3\)' has type tuple\{int, int, int\}
  654. # EXECUTE x((1,2,3))
  655. # NOTE(benesch): many tests related to a CockroachDB extension called "labeled
  656. # tuples" were removed from this test file. The labeled tuple extension looks
  657. # like a bad hack to work around CockroachDB's missing support for true
  658. # composite types, and I do not expect us to ever support it.
  659. statement ok
  660. CREATE TABLE t (a int, b string)
  661. statement ok
  662. INSERT INTO t VALUES (1, 'one'), (2, 'two')
  663. query IT
  664. SELECT (x).f1, (x).f2
  665. FROM (SELECT (ROW(a, b)) AS x FROM t)
  666. ORDER BY 1
  667. LIMIT 1
  668. ----
  669. 1 one
  670. query IT colnames
  671. SELECT (t.*).* FROM t ORDER BY 1,2
  672. ----
  673. a b
  674. 1 one
  675. 2 two
  676. query I colnames rowsort
  677. SELECT (t).a FROM t
  678. ----
  679. a
  680. 1
  681. 2
  682. query B
  683. SELECT (1, 2, 3) IS NULL AS r
  684. ----
  685. false
  686. query error Expected an expression, found right parenthesis
  687. SELECT () = ()