dates-times.td 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. $ set-arg-default single-replica-cluster=quickstart
  10. # This test exercises dates and times at the boundary (e.g., by sending them
  11. # through pgwire). Operations on dates and times are more thoroughly tested in
  12. # dates-times.slt.
  13. $ set schema={
  14. "name": "row",
  15. "type": "record",
  16. "fields": [
  17. {
  18. "name": "d",
  19. "type": {
  20. "type": "int",
  21. "logicalType": "date"
  22. }
  23. },
  24. {
  25. "name": "ts_millis",
  26. "type": {
  27. "type": "long",
  28. "logicalType": "timestamp-millis"
  29. }
  30. },
  31. {
  32. "name": "ts_micros",
  33. "type": {
  34. "type": "long",
  35. "logicalType": "timestamp-micros"
  36. }
  37. }
  38. ]
  39. }
  40. $ kafka-create-topic topic=data
  41. $ kafka-ingest format=avro topic=data schema=${schema} timestamp=1
  42. {"d": 18135, "ts_millis": 1566865029000000, "ts_micros": 1566865029000000}
  43. {"d": 0, "ts_millis": 65000000, "ts_micros": 65000000}
  44. > CREATE CONNECTION kafka_conn
  45. TO KAFKA (BROKER '${testdrive.kafka-addr}', SECURITY PROTOCOL PLAINTEXT);
  46. > CREATE CONNECTION csr_conn TO CONFLUENT SCHEMA REGISTRY (
  47. URL '${testdrive.schema-registry-url}'
  48. );
  49. > CREATE SOURCE data
  50. IN CLUSTER ${arg.single-replica-cluster}
  51. FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-data-${testdrive.seed}')
  52. FORMAT AVRO USING SCHEMA '${schema}'
  53. > CREATE MATERIALIZED VIEW data_view as SELECT * from data
  54. > SELECT * FROM data_view
  55. 1970-01-01 "1970-01-01 18:03:20" "1970-01-01 00:01:05"
  56. 2019-08-27 "+51621-12-22 21:50:00" "2019-08-27 00:17:09"
  57. > CREATE SINK data_sink
  58. IN CLUSTER ${arg.single-replica-cluster}
  59. FROM data
  60. INTO KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-data-roundtrip-${testdrive.seed}')
  61. KEY (d) NOT ENFORCED
  62. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  63. ENVELOPE UPSERT
  64. $ schema-registry-verify schema-type=avro subject=testdrive-data-roundtrip-${testdrive.seed}-value
  65. {"type":"record","name":"envelope","fields":[{"name":"d","type":{"type":"int","logicalType":"date"}},{"name":"ts_millis","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"ts_micros","type":{"type":"long","logicalType":"timestamp-micros"}}]}
  66. $ kafka-verify-data format=avro sink=materialize.public.data_sink sort-messages=true
  67. {"d": 0} {"d": 0, "ts_millis": 65000000, "ts_micros": 65000000}
  68. {"d": 18135} {"d": 18135, "ts_millis": 1566865029000000, "ts_micros": 1566865029000000}
  69. > CREATE MATERIALIZED VIEW ts_precision AS
  70. SELECT
  71. TRUE AS key,
  72. '1970-01-01T00:00:00.123456'::timestamp AS ts,
  73. '1970-01-01T00:00:00.123456'::timestamp(0) AS ts0,
  74. '1970-01-01T00:00:00.123456'::timestamp(1) AS ts1,
  75. '1970-01-01T00:00:00.123456'::timestamp(2) AS ts2,
  76. '1970-01-01T00:00:00.123456'::timestamp(3) AS ts3,
  77. '1970-01-01T00:00:00.123456'::timestamp(4) AS ts4,
  78. '1970-01-01T00:00:00.123456'::timestamp(5) AS ts5,
  79. '1970-01-01T00:00:00.123456'::timestamp(6) AS ts6,
  80. '1970-01-01T00:00:00.123456'::timestamptz AS tstz,
  81. '1970-01-01T00:00:00.123456'::timestamptz(0) AS tstz0,
  82. '1970-01-01T00:00:00.123456'::timestamptz(1) AS tstz1,
  83. '1970-01-01T00:00:00.123456'::timestamptz(2) AS tstz2,
  84. '1970-01-01T00:00:00.123456'::timestamptz(3) AS tstz3,
  85. '1970-01-01T00:00:00.123456'::timestamptz(4) AS tstz4,
  86. '1970-01-01T00:00:00.123456'::timestamptz(5) AS tstz5,
  87. '1970-01-01T00:00:00.123456'::timestamptz(6) AS tstz6
  88. > CREATE SINK ts_precision_sink
  89. IN CLUSTER ${arg.single-replica-cluster}
  90. FROM ts_precision
  91. INTO KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-ts-precision-${testdrive.seed}')
  92. KEY (key) NOT ENFORCED
  93. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  94. ENVELOPE UPSERT
  95. $ schema-registry-verify schema-type=avro subject=testdrive-ts-precision-${testdrive.seed}-value
  96. {"type":"record","name":"envelope","fields":[{"name":"key","type":"boolean"},{"name":"ts","type":{"type":"long","logicalType":"timestamp-micros"}},{"name":"ts0","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"ts1","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"ts2","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"ts3","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"ts4","type":{"type":"long","logicalType":"timestamp-micros"}},{"name":"ts5","type":{"type":"long","logicalType":"timestamp-micros"}},{"name":"ts6","type":{"type":"long","logicalType":"timestamp-micros"}},{"name":"tstz","type":{"type":"long","logicalType":"timestamp-micros"}},{"name":"tstz0","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"tstz1","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"tstz2","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"tstz3","type":{"type":"long","logicalType":"timestamp-millis"}},{"name":"tstz4","type":{"type":"long","logicalType":"timestamp-micros"}},{"name":"tstz5","type":{"type":"long","logicalType":"timestamp-micros"}},{"name":"tstz6","type":{"type":"long","logicalType":"timestamp-micros"}}]}
  97. $ kafka-verify-data format=avro sink=materialize.public.ts_precision_sink sort-messages=true
  98. {"key": true} {"key": true, "ts": 123456, "ts0": 0, "ts1": 100, "ts2": 120, "ts3": 123, "ts4": 123500, "ts5": 123460, "ts6": 123456, "tstz": 123456, "tstz0": 0, "tstz1": 100, "tstz2": 120, "tstz3": 123, "tstz4": 123500, "tstz5": 123460, "tstz6": 123456}
  99. ! SELECT '1970-01-01T00:00:00.123456'::timestamp(-1)
  100. contains:precision for type timestamp or timestamptz must be between 0 and 6
  101. ! SELECT '1970-01-01T00:00:00.123456'::timestamp(7)
  102. contains:precision for type timestamp or timestamptz must be between 0 and 6
  103. > SELECT INTERVAL '1' SECOND
  104. "00:00:01"
  105. > SELECT INTERVAL '2' MINUTE
  106. "00:02:00"
  107. > SELECT INTERVAL '3' HOUR
  108. "03:00:00"
  109. > SELECT INTERVAL '1' DAY
  110. "1 day"
  111. > SELECT INTERVAL '6' MONTH
  112. "6 months"
  113. > SELECT INTERVAL '10' YEAR
  114. "10 years"
  115. > SELECT TIMESTAMP WITH TIME ZONE '1989-06-01 10:10:10.410+04:00'
  116. "1989-06-01 06:10:10.410 UTC"
  117. > SELECT TIMESTAMPTZ '1989-06-01 9:10:10.410+07:00'
  118. "1989-06-01 02:10:10.410 UTC"
  119. # microseconds are returned with nanosecond precision in the binary format
  120. > SELECT TIMESTAMPTZ '1989-06-01 06:10:10.12345678+00:00'
  121. "1989-06-01 06:10:10.123457 UTC"
  122. > SELECT TIMESTAMP WITHOUT TIME ZONE '1989-06-01 10:10:10.410+04:00'
  123. "1989-06-01 10:10:10.410"
  124. > SELECT TIMESTAMP '1989-06-01 10:10:10.410+04:00'
  125. "1989-06-01 10:10:10.410"
  126. > SELECT TIMESTAMPTZ '1989-06-01 9:10:10.410+7'
  127. "1989-06-01 02:10:10.410 UTC"
  128. > SELECT TIMESTAMPTZ '1989-06-01 9:10:10.410+700'
  129. "1989-06-01 02:10:10.410 UTC"
  130. > SELECT '1989-06-01 10:10:10.410+04:00'::timestamptz::text
  131. "1989-06-01 06:10:10.41+00"
  132. > SELECT '1989-06-01 10:10:10.413+04:00'::timestamptz::text
  133. "1989-06-01 06:10:10.413+00"
  134. # The text format should only ever return microseconds
  135. > SELECT '1989-06-01 10:10:10.12345678+04:00'::timestamptz::text
  136. "1989-06-01 06:10:10.123457+00"
  137. > SELECT '1989-06-01 10:10:10.1234564+04:00'::timestamptz::text
  138. "1989-06-01 06:10:10.123456+00"
  139. # Timestamp columns with precisions
  140. > DROP TABLE IF EXISTS temporal_types;
  141. > CREATE TABLE temporal_types (timestamp_col TIMESTAMP, timestamptz_col TIMESTAMPTZ, timestamp_prec_col TIMESTAMP(3), timestamptz_prec_col TIMESTAMPTZ(1));
  142. > INSERT INTO temporal_types VALUES ('2010-10-10 10:10:10.123456789+00','2010-10-10 10:10:10.123456789+00', '2010-10-10 10:10:10.123456789+00','2010-10-10 10:10:10.123456789+00');
  143. > SELECT * FROM temporal_types;
  144. "2010-10-10 10:10:10.123457" "2010-10-10 10:10:10.123457 UTC" "2010-10-10 10:10:10.123" "2010-10-10 10:10:10.100 UTC"