types-array.td 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. #
  10. # Test the BOOLEAN data type
  11. #
  12. # Insert data pre-snapshot
  13. $ postgres-execute connection=postgres://postgres:postgres@postgres
  14. ALTER USER postgres WITH replication;
  15. DROP SCHEMA IF EXISTS public CASCADE;
  16. DROP PUBLICATION IF EXISTS mz_source;
  17. CREATE SCHEMA public;
  18. # set up boolean
  19. CREATE TABLE t_boolean_array (c boolean[]);
  20. ALTER TABLE t_boolean_array REPLICA IDENTITY FULL;
  21. INSERT INTO t_boolean_array VALUES ('{true,false}');
  22. # set up smallint
  23. CREATE TABLE t_smallint_array (c smallint[]);
  24. ALTER TABLE t_smallint_array REPLICA IDENTITY FULL;
  25. INSERT INTO t_smallint_array VALUES ('{1,2}');
  26. # set up integer
  27. CREATE TABLE t_integer_array (c integer[]);
  28. ALTER TABLE t_integer_array REPLICA IDENTITY FULL;
  29. INSERT INTO t_integer_array VALUES ('{1,2}');
  30. # set up bigint
  31. CREATE TABLE t_bigint_array (c bigint[]);
  32. ALTER TABLE t_bigint_array REPLICA IDENTITY FULL;
  33. INSERT INTO t_bigint_array VALUES ('{1,2}');
  34. # set up date
  35. CREATE TABLE t_date_array (c date[]);
  36. ALTER TABLE t_date_array REPLICA IDENTITY FULL;
  37. INSERT INTO t_date_array VALUES ('{''2007-02-01'',''2007-02-02''}');
  38. # set up double_precision
  39. CREATE TABLE t_double_precision_array (c double precision[]);
  40. ALTER TABLE t_double_precision_array REPLICA IDENTITY FULL;
  41. INSERT INTO t_double_precision_array VALUES ('{1.1,2.1}');
  42. # set up interval
  43. CREATE TABLE t_interval_array (c interval[]);
  44. ALTER TABLE t_interval_array REPLICA IDENTITY FULL;
  45. INSERT INTO t_interval_array VALUES ('{''1y'',''2d''}');
  46. # set up numeric
  47. CREATE TABLE t_numeric_array (c numeric[]);
  48. ALTER TABLE t_numeric_array REPLICA IDENTITY FULL;
  49. INSERT INTO t_numeric_array VALUES ('{1.1,2E2}');
  50. # set up oid
  51. CREATE TABLE t_oid_array (c oid[]);
  52. ALTER TABLE t_oid_array REPLICA IDENTITY FULL;
  53. INSERT INTO t_oid_array VALUES ('{123,234}');
  54. # set up real
  55. CREATE TABLE t_real_array (c real[]);
  56. ALTER TABLE t_real_array REPLICA IDENTITY FULL;
  57. INSERT INTO t_real_array VALUES ('{1.1,2.1}');
  58. # set up text
  59. CREATE TABLE t_text_array (c text[]);
  60. ALTER TABLE t_text_array REPLICA IDENTITY FULL;
  61. INSERT INTO t_text_array VALUES ('{a,b}');
  62. # set up time
  63. CREATE TABLE t_time_array (c time[]);
  64. ALTER TABLE t_time_array REPLICA IDENTITY FULL;
  65. INSERT INTO t_time_array VALUES ('{''01:23:45'',''01:23:46''}');
  66. # set up timestamp
  67. CREATE TABLE t_timestamp_array (c timestamp[]);
  68. ALTER TABLE t_timestamp_array REPLICA IDENTITY FULL;
  69. INSERT INTO t_timestamp_array VALUES ('{''2007-02-01 15:04:05'',''2007-02-01 15:04:06''}');
  70. # set up timestamptz
  71. CREATE TABLE t_timestamptz_array (c timestamp with time zone[]);
  72. ALTER TABLE t_timestamptz_array REPLICA IDENTITY FULL;
  73. INSERT INTO t_timestamptz_array VALUES ('{''2007-02-01 15:04:05+06'',''2007-02-01 15:04:06+06''}');
  74. CREATE PUBLICATION mz_source FOR ALL TABLES;
  75. > CREATE SECRET pgpass AS 'postgres'
  76. > CREATE CONNECTION pg TO POSTGRES (
  77. HOST postgres,
  78. DATABASE postgres,
  79. USER postgres,
  80. PASSWORD SECRET pgpass
  81. )
  82. > CREATE SOURCE mz_source
  83. FROM POSTGRES CONNECTION pg (PUBLICATION 'mz_source')
  84. FOR ALL TABLES;
  85. # Insert the same data post-snapshot
  86. $ postgres-execute connection=postgres://postgres:postgres@postgres
  87. # rewrite boolean
  88. INSERT INTO t_boolean_array SELECT * FROM t_boolean_array;
  89. # rewrite smallint
  90. INSERT INTO t_smallint_array SELECT * FROM t_smallint_array;
  91. # rewrite integer
  92. INSERT INTO t_integer_array SELECT * FROM t_integer_array;
  93. # rewrite bigint
  94. INSERT INTO t_bigint_array SELECT * FROM t_bigint_array;
  95. # rewrite date
  96. INSERT INTO t_date_array SELECT * FROM t_date_array;
  97. # rewrite double_precision
  98. INSERT INTO t_double_precision_array SELECT * FROM t_double_precision_array;
  99. # rewrite interval
  100. INSERT INTO t_interval_array SELECT * FROM t_interval_array;
  101. # rewrite numeric
  102. INSERT INTO t_numeric_array SELECT * FROM t_numeric_array;
  103. # rewrite oid
  104. INSERT INTO t_oid_array SELECT * FROM t_oid_array;
  105. # rewrite real
  106. INSERT INTO t_real_array SELECT * FROM t_real_array;
  107. # rewrite text
  108. INSERT INTO t_text_array SELECT * FROM t_text_array;
  109. # rewrite time
  110. INSERT INTO t_time_array SELECT * FROM t_time_array;
  111. # rewrite timestamp
  112. INSERT INTO t_timestamp_array SELECT * FROM t_timestamp_array;
  113. # rewrite timestamptz
  114. INSERT INTO t_timestamptz_array SELECT * FROM t_timestamptz_array;
  115. # read boolean
  116. > SELECT pg_typeof(c) FROM t_boolean_array LIMIT 1;
  117. boolean[]
  118. > SELECT * FROM t_boolean_array;
  119. {true,false}
  120. {true,false}
  121. # read smallint
  122. > SELECT pg_typeof(c) FROM t_smallint_array LIMIT 1;
  123. smallint[]
  124. > SELECT * FROM t_smallint_array;
  125. {1,2}
  126. {1,2}
  127. # read integer
  128. > SELECT pg_typeof(c) FROM t_integer_array LIMIT 1;
  129. integer[]
  130. > SELECT * FROM t_integer_array;
  131. {1,2}
  132. {1,2}
  133. # read bigint
  134. > SELECT pg_typeof(c) FROM t_bigint_array LIMIT 1;
  135. bigint[]
  136. > SELECT * FROM t_bigint_array;
  137. {1,2}
  138. {1,2}
  139. # read date
  140. > SELECT pg_typeof(c) FROM t_date_array LIMIT 1;
  141. date[]
  142. > SELECT * FROM t_date_array;
  143. {2007-02-01,2007-02-02}
  144. {2007-02-01,2007-02-02}
  145. # read double_precision
  146. > SELECT pg_typeof(c) FROM t_double_precision_array LIMIT 1;
  147. "double precision[]"
  148. > SELECT * FROM t_double_precision_array;
  149. {1.1,2.1}
  150. {1.1,2.1}
  151. # read interval
  152. > SELECT pg_typeof(c) FROM t_interval_array LIMIT 1;
  153. interval[]
  154. > SELECT * FROM t_interval_array;
  155. "{1 year,2 days}"
  156. "{1 year,2 days}"
  157. # read numeric
  158. > SELECT pg_typeof(c) FROM t_numeric_array LIMIT 1;
  159. numeric[]
  160. > SELECT * FROM t_numeric_array;
  161. {1.1,200}
  162. {1.1,200}
  163. # read oid
  164. > SELECT pg_typeof(c) FROM t_oid_array LIMIT 1;
  165. oid[]
  166. > SELECT * FROM t_oid_array;
  167. {123,234}
  168. {123,234}
  169. # read real
  170. > SELECT pg_typeof(c) FROM t_real_array LIMIT 1;
  171. real[]
  172. > SELECT * FROM t_real_array;
  173. {1.1,2.1}
  174. {1.1,2.1}
  175. # read text
  176. > SELECT pg_typeof(c) FROM t_text_array LIMIT 1;
  177. text[]
  178. > SELECT * FROM t_text_array;
  179. {a,b}
  180. {a,b}
  181. # read time
  182. > SELECT pg_typeof(c) FROM t_time_array LIMIT 1;
  183. time[]
  184. > SELECT * FROM t_time_array;
  185. {01:23:45,01:23:46}
  186. {01:23:45,01:23:46}
  187. # read timestamp
  188. > SELECT pg_typeof(c) FROM t_timestamp_array LIMIT 1;
  189. "timestamp without time zone[]"
  190. > SELECT * FROM t_timestamp_array;
  191. "{2007-02-01 15:04:05,2007-02-01 15:04:06}"
  192. "{2007-02-01 15:04:05,2007-02-01 15:04:06}"
  193. # read timestamptz
  194. > SELECT pg_typeof(c) FROM t_timestamptz_array LIMIT 1;
  195. "timestamp with time zone[]"
  196. > SELECT * FROM t_timestamptz_array;
  197. "{2007-02-01 09:04:05 UTC,2007-02-01 09:04:06 UTC}"
  198. "{2007-02-01 09:04:05 UTC,2007-02-01 09:04:06 UTC}"
  199. # cannot handle multi-dimensional arrays
  200. $ postgres-execute connection=postgres://postgres:postgres@postgres
  201. INSERT INTO t_integer_array VALUES ('{{1},{2}}');
  202. INSERT INTO t_integer_array SELECT * FROM t_integer_array;
  203. > SELECT * FROM t_integer_array;
  204. {1,2}
  205. {1,2}
  206. {1,2}
  207. {1,2}
  208. {{1},{2}}
  209. {{1},{2}}