diff --git a/crates/integrations/datafusion/src/table/mod.rs b/crates/integrations/datafusion/src/table/mod.rs index 0e296fcc0..ad74a5949 100644 --- a/crates/integrations/datafusion/src/table/mod.rs +++ b/crates/integrations/datafusion/src/table/mod.rs @@ -95,6 +95,24 @@ pub(crate) fn datafusion_arrow_schema( ))) } +/// The schema visible to SQL before authorization is fetched. +fn query_auth_output_schema(table: &Table, schema: ArrowSchemaRef) -> ArrowSchemaRef { + if !table.schema().core_options().query_auth_enabled() { + return schema; + } + // Authorization is fetched while planning, after logical optimization. + // A mask can null a NOT NULL table column, so optimizers must not fold + // IS NULL beforehand. Keep physical read fields canonical and unchanged. + Arc::new(Schema::new_with_metadata( + schema + .fields() + .iter() + .map(|field| field.as_ref().clone().with_nullable(true)) + .collect::>(), + schema.metadata().clone(), + )) +} + /// Read-only table provider for a Paimon table. /// /// Supports full table scan, column projection, and predicate pushdown for @@ -127,7 +145,7 @@ impl PaimonTableProvider { let identifier = table.identifier().clone(); crate::table_loader::ensure_paimon_served(&table, &identifier)?; let fields = datafusion_read_fields(&table); - let schema = datafusion_arrow_schema(&fields, true)?; + let schema = query_auth_output_schema(&table, datafusion_arrow_schema(&fields, true)?); Ok(Self { table, schema, @@ -166,7 +184,10 @@ impl PaimonTableProvider { return Ok(self); } let fields = datafusion_read_fields(&self.table); - self.schema = datafusion_arrow_schema(&fields, schema_force_view_types)?; + self.schema = query_auth_output_schema( + &self.table, + datafusion_arrow_schema(&fields, schema_force_view_types)?, + ); Ok(self) } diff --git a/crates/integrations/datafusion/tests/query_auth.rs b/crates/integrations/datafusion/tests/query_auth.rs index 7f821577d..a063f7ab7 100644 --- a/crates/integrations/datafusion/tests/query_auth.rs +++ b/crates/integrations/datafusion/tests/query_auth.rs @@ -513,3 +513,48 @@ async fn test_query_auth_variant_get_runs_on_the_admitted_rows_only() { "7" ); } + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn not_null_masks_are_nullable_before_sql_optimization() { + let not_null_schema = |options: &[(&str, &str)]| { + let mut builder = Schema::builder() + .column("id", DataType::Int(IntType::new())) + .column("name", DataType::VarChar(VarCharType::new(255).unwrap())) + .column( + "secret", + DataType::VarChar(VarCharType::with_nullable(false, 255).unwrap()), + ); + for (key, value) in options { + builder = builder.option(*key, *value); + } + builder.build().unwrap() + }; + let (_tmp, _server, context) = restricted_people_with_schema(masks(), not_null_schema).await; + assert_eq!( + count( + &query( + &context, + &format!("SELECT COUNT(*) FROM {TABLE} WHERE secret IS NULL") + ) + .await + ), + 4 + ); + assert_eq!( + count( + &query( + &context, + &format!("SELECT COUNT(*) FROM {TABLE} WHERE secret IS NOT NULL") + ) + .await + ), + 0 + ); + assert_eq!( + count(&query(&context, &format!("SELECT COUNT(secret) FROM {TABLE}")).await), + 0 + ); + let output = query(&context, &format!("SELECT secret FROM {TABLE} LIMIT 1")).await; + assert!(output[0].schema().field(0).is_nullable()); + assert!(output[0].column(0).is_null(0)); +} diff --git a/crates/paimon/src/arrow/cast_completion_java_test.rs b/crates/paimon/src/arrow/cast_completion_java_test.rs new file mode 100644 index 000000000..dee9fb83c --- /dev/null +++ b/crates/paimon/src/arrow/cast_completion_java_test.rs @@ -0,0 +1,421 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +//! Actual Java CAST outputs in three zones; no NaN or signed-zero cases. + +use super::{paimon_type_to_arrow, CastExecutor}; +use crate::spec::DataType; +use arrow_array::{cast::AsArray, types::*, Array, ArrayRef, BinaryArray, Int64Array}; +use arrow_schema::{DataType as ArrowType, TimeUnit}; +use serde_json::{json, Value}; +use std::sync::Arc; + +const CASES: &str = r###"{"name":"lexical STRING -> FLOAT","fields":[{"name":"v","type":"STRING"}],"rows":[["1.25"],["+1.25"],[" 1.25 "],["\t1.25\n"],["1e3"],["1.25f"],["1.25D"],["0x1.8p2"],["0X1.8P+2f"],["1e-7"],["1e400"],["1.25"],["1_000"],["1.25junk"],[""],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"FLOAT"},"expected":{"UTC":{"name":"lexical STRING -> FLOAT","results":[1.25,1.25,1.25,1.25,1000.0,1.25,1.25,6.0,6.0,1.0000000116860974e-07,"Infinity",{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"Asia/Shanghai":{"name":"lexical STRING -> FLOAT","results":[1.25,1.25,1.25,1.25,1000.0,1.25,1.25,6.0,6.0,1.0000000116860974e-07,"Infinity",{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"America/New_York":{"name":"lexical STRING -> FLOAT","results":[1.25,1.25,1.25,1.25,1000.0,1.25,1.25,6.0,6.0,1.0000000116860974e-07,"Infinity",{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]}}} +{"name":"lexical STRING -> DOUBLE","fields":[{"name":"v","type":"STRING"}],"rows":[["1.25"],["+1.25"],[" 1.25 "],["\t1.25\n"],["1e3"],["1.25f"],["1.25D"],["0x1.8p2"],["0X1.8P+2f"],["1e-7"],["1e400"],["1.25"],["1_000"],["1.25junk"],[""],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"DOUBLE"},"expected":{"UTC":{"name":"lexical STRING -> DOUBLE","results":[1.25,1.25,1.25,1.25,1000.0,1.25,1.25,6.0,6.0,1e-07,"Infinity",{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"Asia/Shanghai":{"name":"lexical STRING -> DOUBLE","results":[1.25,1.25,1.25,1.25,1000.0,1.25,1.25,6.0,6.0,1e-07,"Infinity",{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"America/New_York":{"name":"lexical STRING -> DOUBLE","results":[1.25,1.25,1.25,1.25,1000.0,1.25,1.25,6.0,6.0,1e-07,"Infinity",{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]}}} +{"name":"format FLOAT -> STRING","fields":[{"name":"v","type":"FLOAT"}],"rows":[[1.0],[1.25],[0.001],[0.0001],[1e-07],[10000000.0],[1e+20],[1e+23],[16777216.0],[0.1],[3.4028234663852886e+38],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"FLOAT"},"type":"STRING"},"expected":{"UTC":{"name":"format FLOAT -> STRING","results":["1.0","1.25","0.001","1.0E-4","1.0E-7","1.0E7","1.0E20","1.0E23","1.6777216E7","0.1","3.4028235E38",null]},"Asia/Shanghai":{"name":"format FLOAT -> STRING","results":["1.0","1.25","0.001","1.0E-4","1.0E-7","1.0E7","1.0E20","1.0E23","1.6777216E7","0.1","3.4028235E38",null]},"America/New_York":{"name":"format FLOAT -> STRING","results":["1.0","1.25","0.001","1.0E-4","1.0E-7","1.0E7","1.0E20","1.0E23","1.6777216E7","0.1","3.4028235E38",null]}}} +{"name":"format DOUBLE -> STRING","fields":[{"name":"v","type":"DOUBLE"}],"rows":[[1.0],[1.25],[0.001],[0.0001],[1e-07],[10000000.0],[1e+20],[1e+23],[9007199254740992.0],[0.1],[1.7976931348623157e+308],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DOUBLE"},"type":"STRING"},"expected":{"UTC":{"name":"format DOUBLE -> STRING","results":["1.0","1.25","0.001","1.0E-4","1.0E-7","1.0E7","1.0E20","9.999999999999999E22","9.007199254740992E15","0.1","1.7976931348623157E308",null]},"Asia/Shanghai":{"name":"format DOUBLE -> STRING","results":["1.0","1.25","0.001","1.0E-4","1.0E-7","1.0E7","1.0E20","9.999999999999999E22","9.007199254740992E15","0.1","1.7976931348623157E308",null]},"America/New_York":{"name":"format DOUBLE -> STRING","results":["1.0","1.25","0.001","1.0E-4","1.0E-7","1.0E7","1.0E20","9.999999999999999E22","9.007199254740992E15","0.1","1.7976931348623157E308",null]}}} +{"name":"format FLOAT -> CHAR(3)","fields":[{"name":"v","type":"FLOAT"}],"rows":[[1.0],[1.25],[0.001],[0.0001],[1e-07],[10000000.0],[1e+20],[1e+23],[16777216.0],[0.1],[3.4028234663852886e+38],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"FLOAT"},"type":"CHAR(3)"},"expected":{"UTC":{"name":"format FLOAT -> CHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","1.0","1.6","0.1","3.4",null]},"Asia/Shanghai":{"name":"format FLOAT -> CHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","1.0","1.6","0.1","3.4",null]},"America/New_York":{"name":"format FLOAT -> CHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","1.0","1.6","0.1","3.4",null]}}} +{"name":"format DOUBLE -> CHAR(3)","fields":[{"name":"v","type":"DOUBLE"}],"rows":[[1.0],[1.25],[0.001],[0.0001],[1e-07],[10000000.0],[1e+20],[1e+23],[9007199254740992.0],[0.1],[1.7976931348623157e+308],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DOUBLE"},"type":"CHAR(3)"},"expected":{"UTC":{"name":"format DOUBLE -> CHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","9.9","9.0","0.1","1.7",null]},"Asia/Shanghai":{"name":"format DOUBLE -> CHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","9.9","9.0","0.1","1.7",null]},"America/New_York":{"name":"format DOUBLE -> CHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","9.9","9.0","0.1","1.7",null]}}} +{"name":"format FLOAT -> VARCHAR(3)","fields":[{"name":"v","type":"FLOAT"}],"rows":[[1.0],[1.25],[0.001],[0.0001],[1e-07],[10000000.0],[1e+20],[1e+23],[16777216.0],[0.1],[3.4028234663852886e+38],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"FLOAT"},"type":"VARCHAR(3)"},"expected":{"UTC":{"name":"format FLOAT -> VARCHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","1.0","1.6","0.1","3.4",null]},"Asia/Shanghai":{"name":"format FLOAT -> VARCHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","1.0","1.6","0.1","3.4",null]},"America/New_York":{"name":"format FLOAT -> VARCHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","1.0","1.6","0.1","3.4",null]}}} +{"name":"format DOUBLE -> VARCHAR(3)","fields":[{"name":"v","type":"DOUBLE"}],"rows":[[1.0],[1.25],[0.001],[0.0001],[1e-07],[10000000.0],[1e+20],[1e+23],[9007199254740992.0],[0.1],[1.7976931348623157e+308],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DOUBLE"},"type":"VARCHAR(3)"},"expected":{"UTC":{"name":"format DOUBLE -> VARCHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","9.9","9.0","0.1","1.7",null]},"Asia/Shanghai":{"name":"format DOUBLE -> VARCHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","9.9","9.0","0.1","1.7",null]},"America/New_York":{"name":"format DOUBLE -> VARCHAR(3)","results":["1.0","1.2","0.0","1.0","1.0","1.0","1.0","9.9","9.0","0.1","1.7",null]}}} +{"name":"bytes-width BINARY(8) -> STRING","fields":[{"name":"v","type":"BINARY(8)"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BINARY(8)"},"type":"STRING"},"expected":{"UTC":{"name":"bytes-width BINARY(8) -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width BINARY(8) -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width BINARY(8) -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width BINARY(8) -> CHAR(3)","fields":[{"name":"v","type":"BINARY(8)"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BINARY(8)"},"type":"CHAR(3)"},"expected":{"UTC":{"name":"bytes-width BINARY(8) -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width BINARY(8) -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width BINARY(8) -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width BINARY(8) -> VARCHAR(3)","fields":[{"name":"v","type":"BINARY(8)"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BINARY(8)"},"type":"VARCHAR(3)"},"expected":{"UTC":{"name":"bytes-width BINARY(8) -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width BINARY(8) -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width BINARY(8) -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width VARBINARY(32) -> STRING","fields":[{"name":"v","type":"VARBINARY(32)"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"VARBINARY(32)"},"type":"STRING"},"expected":{"UTC":{"name":"bytes-width VARBINARY(32) -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width VARBINARY(32) -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width VARBINARY(32) -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width VARBINARY(32) -> CHAR(3)","fields":[{"name":"v","type":"VARBINARY(32)"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"VARBINARY(32)"},"type":"CHAR(3)"},"expected":{"UTC":{"name":"bytes-width VARBINARY(32) -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width VARBINARY(32) -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width VARBINARY(32) -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width VARBINARY(32) -> VARCHAR(3)","fields":[{"name":"v","type":"VARBINARY(32)"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"VARBINARY(32)"},"type":"VARCHAR(3)"},"expected":{"UTC":{"name":"bytes-width VARBINARY(32) -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width VARBINARY(32) -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width VARBINARY(32) -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width BYTES -> STRING","fields":[{"name":"v","type":"BYTES"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BYTES"},"type":"STRING"},"expected":{"UTC":{"name":"bytes-width BYTES -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width BYTES -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width BYTES -> STRING","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width BYTES -> CHAR(3)","fields":[{"name":"v","type":"BYTES"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BYTES"},"type":"CHAR(3)"},"expected":{"UTC":{"name":"bytes-width BYTES -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width BYTES -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width BYTES -> CHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"bytes-width BYTES -> VARCHAR(3)","fields":[{"name":"v","type":"BYTES"}],"rows":[[[97,98,99,100,101,102]],[[195,169,231,140,171]],[[255]],[[237,160,128]],[[240,128,128,128]],[[195,40]],[[]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BYTES"},"type":"VARCHAR(3)"},"expected":{"UTC":{"name":"bytes-width BYTES -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"Asia/Shanghai":{"name":"bytes-width BYTES -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]},"America/New_York":{"name":"bytes-width BYTES -> VARCHAR(3)","results":["abcdef","é猫","�","�","����","�(","",null]}}} +{"name":"text-time STRING -> DATE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"DATE"},"expected":{"UTC":{"name":"text-time STRING -> DATE","results":[1,1,{"error":"DateTimeException"},1,1,-1,11016,{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1970,31,0,1,-1,1001,-1001,{"error":"NumberFormatException"},{"error":"DateTimeException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> DATE","results":[1,1,{"error":"DateTimeException"},1,1,-1,11016,{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1970,31,0,1,-1,1001,-1001,{"error":"NumberFormatException"},{"error":"DateTimeException"},null]},"America/New_York":{"name":"text-time STRING -> DATE","results":[1,1,{"error":"DateTimeException"},1,1,-1,11016,{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1970,31,0,1,-1,1001,-1001,{"error":"NumberFormatException"},{"error":"DateTimeException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(0)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(0)"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(0)","results":[{"millis":86400000,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1970000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":1001000,"nanos":0},{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(0)","results":[{"millis":86400000,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1970000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":1001000,"nanos":0},{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(0)","results":[{"millis":86400000,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1970000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":1001000,"nanos":0},{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(1)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(1)"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(1)","results":[{"millis":86400000,"nanos":0},{"millis":97445100,"nanos":0},{"millis":97445100,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-100,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(1)","results":[{"millis":86400000,"nanos":0},{"millis":97445100,"nanos":0},{"millis":97445100,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-100,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(1)","results":[{"millis":86400000,"nanos":0},{"millis":97445100,"nanos":0},{"millis":97445100,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-100,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(2)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(2)"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(2)","results":[{"millis":86400000,"nanos":0},{"millis":97445120,"nanos":0},{"millis":97445120,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-10,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(2)","results":[{"millis":86400000,"nanos":0},{"millis":97445120,"nanos":0},{"millis":97445120,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-10,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(2)","results":[{"millis":86400000,"nanos":0},{"millis":97445120,"nanos":0},{"millis":97445120,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-10,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(3)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(3)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":0},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1970,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":-1,"nanos":0},{"millis":1001,"nanos":0},{"millis":-1001,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(3)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":0},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1970,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":-1,"nanos":0},{"millis":1001,"nanos":0},{"millis":-1001,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(3)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":0},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1970,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":-1,"nanos":0},{"millis":1001,"nanos":0},{"millis":-1001,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(4)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(4)"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(4)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":400000},{"millis":97445123,"nanos":400000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":900000},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(4)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":400000},{"millis":97445123,"nanos":400000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":900000},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(4)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":400000},{"millis":97445123,"nanos":400000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":900000},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"RuntimeException"},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(6)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(6)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":456000},{"millis":97445123,"nanos":456000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999000},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1,"nanos":970000},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":0,"nanos":1000},{"millis":-1,"nanos":999000},{"millis":1,"nanos":1000},{"millis":-2,"nanos":999000},{"millis":9223372036854775,"nanos":807000},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(6)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":456000},{"millis":97445123,"nanos":456000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999000},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1,"nanos":970000},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":0,"nanos":1000},{"millis":-1,"nanos":999000},{"millis":1,"nanos":1000},{"millis":-2,"nanos":999000},{"millis":9223372036854775,"nanos":807000},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(6)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":456000},{"millis":97445123,"nanos":456000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999000},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":1,"nanos":970000},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":0,"nanos":1000},{"millis":-1,"nanos":999000},{"millis":1,"nanos":1000},{"millis":-2,"nanos":999000},{"millis":9223372036854775,"nanos":807000},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(9)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(9)"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(9)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":456789},{"millis":97445123,"nanos":456789},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999999},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":1970},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":0,"nanos":1},{"millis":-1,"nanos":999999},{"millis":0,"nanos":1001},{"millis":-1,"nanos":998999},{"millis":9223372036854,"nanos":775807},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(9)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":456789},{"millis":97445123,"nanos":456789},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999999},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":1970},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":0,"nanos":1},{"millis":-1,"nanos":999999},{"millis":0,"nanos":1001},{"millis":-1,"nanos":998999},{"millis":9223372036854,"nanos":775807},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(9)","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":456789},{"millis":97445123,"nanos":456789},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999999},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":1970},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":0,"nanos":1},{"millis":-1,"nanos":999999},{"millis":0,"nanos":1001},{"millis":-1,"nanos":998999},{"millis":9223372036854,"nanos":775807},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":0},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":57600000,"nanos":0},{"millis":68645123,"nanos":0},{"millis":68645123,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-28800001,"nanos":0},{"millis":951753600000,"nanos":0},{"millis":983289600000,"nanos":0},{"error":"DateTimeParseException"},{"millis":57600000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":104400000,"nanos":0},{"millis":115445123,"nanos":0},{"millis":115445123,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":17999999,"nanos":0},{"millis":951800400000,"nanos":0},{"millis":983336400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":104400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]}}} +{"name":"text-time STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-01-02"],["1970-01-02 03:04:05.123456789"],["1970-01-02T03:04:05.123456789"],["1970-01-02 03:04:05.006+00:00"],["1970-01-02 03:04:05.006Z"],["1969-12-31 23:59:59.999999999"],["2000-02-29"],["2001-02-29"],["2024-13-01"],["1970-1-2"],[" 1970-01-02 "],["1970"],["1970-02"],["0"],["1"],["-1"],["1001"],["-1001"],["9223372036854775807"],["bad"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"text-time STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":86400000,"nanos":0},{"millis":97445123,"nanos":456000},{"millis":97445123,"nanos":456000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999000},{"millis":951782400000,"nanos":0},{"millis":983318400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"text-time STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":57600000,"nanos":0},{"millis":68645123,"nanos":456000},{"millis":68645123,"nanos":456000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-28800001,"nanos":999000},{"millis":951753600000,"nanos":0},{"millis":983289600000,"nanos":0},{"error":"DateTimeParseException"},{"millis":57600000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"text-time STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":104400000,"nanos":0},{"millis":115445123,"nanos":456000},{"millis":115445123,"nanos":456000},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":17999999,"nanos":999000},{"millis":951800400000,"nanos":0},{"millis":983336400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":104400000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]}}} +{"name":"date DATE -> STRING","fields":[{"name":"v","type":"DATE"}],"rows":[[-719528],[-1],[0],[1],[11016],[2147483647],[-2147483648],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"STRING"},"expected":{"UTC":{"name":"date DATE -> STRING","results":["0000-01-01","1969-12-31","1970-01-01","1970-01-02","2000-02-29",")*,0-0+-0(",")*,0-0+-0)",null]},"Asia/Shanghai":{"name":"date DATE -> STRING","results":["0000-01-01","1969-12-31","1970-01-01","1970-01-02","2000-02-29",")*,0-0+-0(",")*,0-0+-0)",null]},"America/New_York":{"name":"date DATE -> STRING","results":["0000-01-01","1969-12-31","1970-01-01","1970-01-02","2000-02-29",")*,0-0+-0(",")*,0-0+-0)",null]}}} +{"name":"date DATE -> CHAR(5)","fields":[{"name":"v","type":"DATE"}],"rows":[[-719528],[-1],[0],[1],[11016],[2147483647],[-2147483648],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"CHAR(5)"},"expected":{"UTC":{"name":"date DATE -> CHAR(5)","results":["0000-","1969-","1970-","1970-","2000-",")*,0-",")*,0-",null]},"Asia/Shanghai":{"name":"date DATE -> CHAR(5)","results":["0000-","1969-","1970-","1970-","2000-",")*,0-",")*,0-",null]},"America/New_York":{"name":"date DATE -> CHAR(5)","results":["0000-","1969-","1970-","1970-","2000-",")*,0-",")*,0-",null]}}} +{"name":"date DATE -> VARCHAR(5)","fields":[{"name":"v","type":"DATE"}],"rows":[[-719528],[-1],[0],[1],[11016],[2147483647],[-2147483648],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"VARCHAR(5)"},"expected":{"UTC":{"name":"date DATE -> VARCHAR(5)","results":["0000-","1969-","1970-","1970-","2000-",")*,0-",")*,0-",null]},"Asia/Shanghai":{"name":"date DATE -> VARCHAR(5)","results":["0000-","1969-","1970-","1970-","2000-",")*,0-",")*,0-",null]},"America/New_York":{"name":"date DATE -> VARCHAR(5)","results":["0000-","1969-","1970-","1970-","2000-",")*,0-",")*,0-",null]}}} +{"name":"date DATE -> TIMESTAMP(3)","fields":[{"name":"v","type":"DATE"}],"rows":[[-719528],[-1],[0],[1],[11016],[2147483647],[-2147483648],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"date DATE -> TIMESTAMP(3)","results":[{"millis":-62167219200000,"nanos":0},{"millis":-86400000,"nanos":0},{"millis":0,"nanos":0},{"millis":86400000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":185542587100800000,"nanos":0},{"millis":-185542587187200000,"nanos":0},null]},"Asia/Shanghai":{"name":"date DATE -> TIMESTAMP(3)","results":[{"millis":-62167219200000,"nanos":0},{"millis":-86400000,"nanos":0},{"millis":0,"nanos":0},{"millis":86400000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":185542587100800000,"nanos":0},{"millis":-185542587187200000,"nanos":0},null]},"America/New_York":{"name":"date DATE -> TIMESTAMP(3)","results":[{"millis":-62167219200000,"nanos":0},{"millis":-86400000,"nanos":0},{"millis":0,"nanos":0},{"millis":86400000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":185542587100800000,"nanos":0},{"millis":-185542587187200000,"nanos":0},null]}}} +{"name":"date DATE -> TIMESTAMP(6)","fields":[{"name":"v","type":"DATE"}],"rows":[[-719528],[-1],[0],[1],[11016],[2147483647],[-2147483648],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"date DATE -> TIMESTAMP(6)","results":[{"millis":-62167219200000,"nanos":0},{"millis":-86400000,"nanos":0},{"millis":0,"nanos":0},{"millis":86400000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":185542587100800000,"nanos":0},{"millis":-185542587187200000,"nanos":0},null]},"Asia/Shanghai":{"name":"date DATE -> TIMESTAMP(6)","results":[{"millis":-62167219200000,"nanos":0},{"millis":-86400000,"nanos":0},{"millis":0,"nanos":0},{"millis":86400000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":185542587100800000,"nanos":0},{"millis":-185542587187200000,"nanos":0},null]},"America/New_York":{"name":"date DATE -> TIMESTAMP(6)","results":[{"millis":-62167219200000,"nanos":0},{"millis":-86400000,"nanos":0},{"millis":0,"nanos":0},{"millis":86400000,"nanos":0},{"millis":951782400000,"nanos":0},{"millis":185542587100800000,"nanos":0},{"millis":-185542587187200000,"nanos":0},null]}}} +{"name":"date DATE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"DATE"}],"rows":[[-719528],[-1],[0],[1],[11016],[2147483647],[-2147483648],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"date DATE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-62167219200000,"nanos":0},{"millis":-86400000,"nanos":0},{"millis":0,"nanos":0},{"millis":86400000,"nanos":0},{"millis":951782400000,"nanos":0},{"error":"DateTimeException"},{"error":"DateTimeException"},null]},"Asia/Shanghai":{"name":"date DATE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-62167248343000,"nanos":0},{"millis":-115200000,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":57600000,"nanos":0},{"millis":951753600000,"nanos":0},{"error":"DateTimeException"},{"error":"DateTimeException"},null]},"America/New_York":{"name":"date DATE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-62167201438000,"nanos":0},{"millis":-68400000,"nanos":0},{"millis":18000000,"nanos":0},{"millis":104400000,"nanos":0},{"millis":951800400000,"nanos":0},{"error":"DateTimeException"},{"error":"DateTimeException"},null]}}} +{"name":"time-text TIME(0) -> STRING","fields":[{"name":"v","type":"TIME(0)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(0)"},"type":"STRING"},"expected":{"UTC":{"name":"time-text TIME(0) -> STRING","results":["00:00:00","00:00:00","00:00:00","03:04:05","23:59:59","23:59:59","24:00:00",null]},"Asia/Shanghai":{"name":"time-text TIME(0) -> STRING","results":["00:00:00","00:00:00","00:00:00","03:04:05","23:59:59","23:59:59","24:00:00",null]},"America/New_York":{"name":"time-text TIME(0) -> STRING","results":["00:00:00","00:00:00","00:00:00","03:04:05","23:59:59","23:59:59","24:00:00",null]}}} +{"name":"time-text TIME(0) -> CHAR(12)","fields":[{"name":"v","type":"TIME(0)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(0)"},"type":"CHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(0) -> CHAR(12)","results":["00:00:00 ","00:00:00 ","00:00:00 ","03:04:05 ","23:59:59 ","23:59:59 ","24:00:00 ",null]},"Asia/Shanghai":{"name":"time-text TIME(0) -> CHAR(12)","results":["00:00:00 ","00:00:00 ","00:00:00 ","03:04:05 ","23:59:59 ","23:59:59 ","24:00:00 ",null]},"America/New_York":{"name":"time-text TIME(0) -> CHAR(12)","results":["00:00:00 ","00:00:00 ","00:00:00 ","03:04:05 ","23:59:59 ","23:59:59 ","24:00:00 ",null]}}} +{"name":"time-text TIME(0) -> VARCHAR(12)","fields":[{"name":"v","type":"TIME(0)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(0)"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(0) -> VARCHAR(12)","results":["00:00:00","00:00:00","00:00:00","03:04:05","23:59:59","23:59:59","24:00:00",null]},"Asia/Shanghai":{"name":"time-text TIME(0) -> VARCHAR(12)","results":["00:00:00","00:00:00","00:00:00","03:04:05","23:59:59","23:59:59","24:00:00",null]},"America/New_York":{"name":"time-text TIME(0) -> VARCHAR(12)","results":["00:00:00","00:00:00","00:00:00","03:04:05","23:59:59","23:59:59","24:00:00",null]}}} +{"name":"time-text TIME(1) -> STRING","fields":[{"name":"v","type":"TIME(1)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(1)"},"type":"STRING"},"expected":{"UTC":{"name":"time-text TIME(1) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.1","03:04:05.0","23:59:59.9","23:59:59.9","24:00:00.0",null]},"Asia/Shanghai":{"name":"time-text TIME(1) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.1","03:04:05.0","23:59:59.9","23:59:59.9","24:00:00.0",null]},"America/New_York":{"name":"time-text TIME(1) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.1","03:04:05.0","23:59:59.9","23:59:59.9","24:00:00.0",null]}}} +{"name":"time-text TIME(1) -> CHAR(12)","fields":[{"name":"v","type":"TIME(1)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(1)"},"type":"CHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(1) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.1 ","03:04:05.0 ","23:59:59.9 ","23:59:59.9 ","24:00:00.0 ",null]},"Asia/Shanghai":{"name":"time-text TIME(1) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.1 ","03:04:05.0 ","23:59:59.9 ","23:59:59.9 ","24:00:00.0 ",null]},"America/New_York":{"name":"time-text TIME(1) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.1 ","03:04:05.0 ","23:59:59.9 ","23:59:59.9 ","24:00:00.0 ",null]}}} +{"name":"time-text TIME(1) -> VARCHAR(12)","fields":[{"name":"v","type":"TIME(1)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(1)"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(1) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.1","03:04:05.0","23:59:59.9","23:59:59.9","24:00:00.0",null]},"Asia/Shanghai":{"name":"time-text TIME(1) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.1","03:04:05.0","23:59:59.9","23:59:59.9","24:00:00.0",null]},"America/New_York":{"name":"time-text TIME(1) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.1","03:04:05.0","23:59:59.9","23:59:59.9","24:00:00.0",null]}}} +{"name":"time-text TIME(3) -> STRING","fields":[{"name":"v","type":"TIME(3)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(3)"},"type":"STRING"},"expected":{"UTC":{"name":"time-text TIME(3) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"Asia/Shanghai":{"name":"time-text TIME(3) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"America/New_York":{"name":"time-text TIME(3) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]}}} +{"name":"time-text TIME(3) -> CHAR(12)","fields":[{"name":"v","type":"TIME(3)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(3)"},"type":"CHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(3) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0 ",null]},"Asia/Shanghai":{"name":"time-text TIME(3) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0 ",null]},"America/New_York":{"name":"time-text TIME(3) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0 ",null]}}} +{"name":"time-text TIME(3) -> VARCHAR(12)","fields":[{"name":"v","type":"TIME(3)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(3)"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(3) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"Asia/Shanghai":{"name":"time-text TIME(3) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"America/New_York":{"name":"time-text TIME(3) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]}}} +{"name":"time-text TIME(6) -> STRING","fields":[{"name":"v","type":"TIME(6)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(6)"},"type":"STRING"},"expected":{"UTC":{"name":"time-text TIME(6) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"Asia/Shanghai":{"name":"time-text TIME(6) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"America/New_York":{"name":"time-text TIME(6) -> STRING","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]}}} +{"name":"time-text TIME(6) -> CHAR(12)","fields":[{"name":"v","type":"TIME(6)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(6)"},"type":"CHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(6) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0 ",null]},"Asia/Shanghai":{"name":"time-text TIME(6) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0 ",null]},"America/New_York":{"name":"time-text TIME(6) -> CHAR(12)","results":["00:00:00.0 ","00:00:00.1 ","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0 ",null]}}} +{"name":"time-text TIME(6) -> VARCHAR(12)","fields":[{"name":"v","type":"TIME(6)"}],"rows":[[0],[100],[101],[11045006],[86399999],[-1],[86400000],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(6)"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"time-text TIME(6) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"Asia/Shanghai":{"name":"time-text TIME(6) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]},"America/New_York":{"name":"time-text TIME(6) -> VARCHAR(12)","results":["00:00:00.0","00:00:00.1","00:00:00.101","03:04:05.006","23:59:59.999","23:59:59.999","24:00:00.0",null]}}} +{"name":"epoch-seconds BIGINT -> TIMESTAMP(0)","fields":[{"name":"v","type":"BIGINT"}],"rows":[[-1001],[-1],[0],[1],[1234567],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(0)"},"expected":{"UTC":{"name":"epoch-seconds BIGINT -> TIMESTAMP(0)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"Asia/Shanghai":{"name":"epoch-seconds BIGINT -> TIMESTAMP(0)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"America/New_York":{"name":"epoch-seconds BIGINT -> TIMESTAMP(0)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]}}} +{"name":"epoch-seconds BIGINT -> TIMESTAMP(3)","fields":[{"name":"v","type":"BIGINT"}],"rows":[[-1001],[-1],[0],[1],[1234567],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"epoch-seconds BIGINT -> TIMESTAMP(3)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"Asia/Shanghai":{"name":"epoch-seconds BIGINT -> TIMESTAMP(3)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"America/New_York":{"name":"epoch-seconds BIGINT -> TIMESTAMP(3)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]}}} +{"name":"epoch-seconds BIGINT -> TIMESTAMP(6)","fields":[{"name":"v","type":"BIGINT"}],"rows":[[-1001],[-1],[0],[1],[1234567],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"epoch-seconds BIGINT -> TIMESTAMP(6)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"Asia/Shanghai":{"name":"epoch-seconds BIGINT -> TIMESTAMP(6)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"America/New_York":{"name":"epoch-seconds BIGINT -> TIMESTAMP(6)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]}}} +{"name":"epoch-seconds BIGINT -> TIMESTAMP(9)","fields":[{"name":"v","type":"BIGINT"}],"rows":[[-1001],[-1],[0],[1],[1234567],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(9)"},"expected":{"UTC":{"name":"epoch-seconds BIGINT -> TIMESTAMP(9)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"Asia/Shanghai":{"name":"epoch-seconds BIGINT -> TIMESTAMP(9)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"America/New_York":{"name":"epoch-seconds BIGINT -> TIMESTAMP(9)","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]}}} +{"name":"epoch-seconds BIGINT -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"BIGINT"}],"rows":[[-1001],[-1],[0],[1],[1234567],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"epoch-seconds BIGINT -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"Asia/Shanghai":{"name":"epoch-seconds BIGINT -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":27799000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},{"millis":1263367000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28800000,"nanos":0},null]},"America/New_York":{"name":"epoch-seconds BIGINT -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-19001000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},{"millis":1216567000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000000,"nanos":0},null]}}} +{"name":"epoch-seconds BIGINT -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"BIGINT"}],"rows":[[-1001],[-1],[0],[1],[1234567],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"epoch-seconds BIGINT -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1234567000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},null]},"Asia/Shanghai":{"name":"epoch-seconds BIGINT -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":27799000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},{"millis":1263367000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28800000,"nanos":0},null]},"America/New_York":{"name":"epoch-seconds BIGINT -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-19001000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},{"millis":1216567000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) -> BIGINT","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"BIGINT"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,9223372036854775,-9223372036854776,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,9223372036854775,-9223372036854776,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,9223372036854775,-9223372036854776,null]}}} +{"name":"timestamp TIMESTAMP(3) -> DATE","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"DATE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-622191233,622191232,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-622191233,622191232,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-622191233,622191232,null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIME(0)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIME(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIME(3)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIME(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]}}} +{"name":"timestamp TIMESTAMP(3) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"STRING"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> STRING","results":["1969-12-31 23:59:58.999","1969-12-31 23:59:59.000","1969-12-31 23:59:59.999","1970-01-01 00:00:00.000","1970-01-01 00:00:00.001","1970-01-01 00:00:01.001","2024-03-10 02:30:00.123","2024-11-03 01:30:00.123","2024-03-10 07:30:00.123","2024-11-03 06:30:00.123","/+-.-04-06 07:12:55.807","5471-09-26 16:47:04.192",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> STRING","results":["1969-12-31 23:59:58.999","1969-12-31 23:59:59.000","1969-12-31 23:59:59.999","1970-01-01 00:00:00.000","1970-01-01 00:00:00.001","1970-01-01 00:00:01.001","2024-03-10 02:30:00.123","2024-11-03 01:30:00.123","2024-03-10 07:30:00.123","2024-11-03 06:30:00.123","/+-.-04-06 07:12:55.807","5471-09-26 16:47:04.192",null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> STRING","results":["1969-12-31 23:59:58.999","1969-12-31 23:59:59.000","1969-12-31 23:59:59.999","1970-01-01 00:00:00.000","1970-01-01 00:00:00.001","1970-01-01 00:00:01.001","2024-03-10 02:30:00.123","2024-11-03 01:30:00.123","2024-03-10 07:30:00.123","2024-11-03 06:30:00.123","/+-.-04-06 07:12:55.807","5471-09-26 16:47:04.192",null]}}} +{"name":"timestamp TIMESTAMP(3) -> VARCHAR(12)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","/+-.-04-06 0","5471-09-26 1",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","/+-.-04-06 0","5471-09-26 1",null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","/+-.-04-06 0","5471-09-26 1",null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(0)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIMESTAMP(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":9223372036854775000,"nanos":0},{"millis":9223372036854775616,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":9223372036854775000,"nanos":0},{"millis":9223372036854775616,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":9223372036854775000,"nanos":0},{"millis":9223372036854775616,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(1)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIMESTAMP(1)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":9223372036854775800,"nanos":0},{"millis":9223372036854775716,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":9223372036854775800,"nanos":0},{"millis":9223372036854775716,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":9223372036854775800,"nanos":0},{"millis":9223372036854775716,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-53757322505224193,"nanos":0},{"millis":53757322505224192,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-28801001,"nanos":0},{"millis":-28801000,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799999,"nanos":0},{"millis":-28798999,"nanos":0},{"millis":1710009000123,"nanos":0},{"millis":1730568600123,"nanos":0},{"millis":1710027000123,"nanos":0},{"millis":1730586600123,"nanos":0},{"millis":-53757322534367193,"nanos":0},{"millis":53757322476424192,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":17998999,"nanos":0},{"millis":17999000,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000001,"nanos":0},{"millis":18001001,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730611800123,"nanos":0},{"millis":1710070200123,"nanos":0},{"millis":1730633400123,"nanos":0},{"millis":-53757322487462193,"nanos":0},{"millis":53757322519624192,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-53757322505224193,"nanos":0},{"millis":53757322505224192,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-28801001,"nanos":0},{"millis":-28801000,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799999,"nanos":0},{"millis":-28798999,"nanos":0},{"millis":1710009000123,"nanos":0},{"millis":1730568600123,"nanos":0},{"millis":1710027000123,"nanos":0},{"millis":1730586600123,"nanos":0},{"millis":-53757322534367193,"nanos":0},{"millis":53757322476424192,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":17998999,"nanos":0},{"millis":17999000,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000001,"nanos":0},{"millis":18001001,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730611800123,"nanos":0},{"millis":1710070200123,"nanos":0},{"millis":1730633400123,"nanos":0},{"millis":-53757322487462193,"nanos":0},{"millis":53757322519624192,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) -> BIGINT","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"BIGINT"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]}}} +{"name":"timestamp TIMESTAMP(6) -> DATE","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"DATE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-1,0,0,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-1,0,0,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-1,0,0,null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIME(0)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIME(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIME(3)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIME(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]}}} +{"name":"timestamp TIMESTAMP(6) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"STRING"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> STRING","results":["1969-12-31 23:59:58.999000","1969-12-31 23:59:59.000000","1969-12-31 23:59:59.999000","1970-01-01 00:00:00.000000","1970-01-01 00:00:00.001000","1970-01-01 00:00:01.001000","2024-03-10 02:30:00.123000","2024-11-03 01:30:00.123000","2024-03-10 07:30:00.123000","2024-11-03 06:30:00.123000","1969-12-31 23:59:59.999999","1970-01-01 00:00:00.000123","1970-01-01 00:00:01.000001",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> STRING","results":["1969-12-31 23:59:58.999000","1969-12-31 23:59:59.000000","1969-12-31 23:59:59.999000","1970-01-01 00:00:00.000000","1970-01-01 00:00:00.001000","1970-01-01 00:00:01.001000","2024-03-10 02:30:00.123000","2024-11-03 01:30:00.123000","2024-03-10 07:30:00.123000","2024-11-03 06:30:00.123000","1969-12-31 23:59:59.999999","1970-01-01 00:00:00.000123","1970-01-01 00:00:01.000001",null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> STRING","results":["1969-12-31 23:59:58.999000","1969-12-31 23:59:59.000000","1969-12-31 23:59:59.999000","1970-01-01 00:00:00.000000","1970-01-01 00:00:00.001000","1970-01-01 00:00:01.001000","2024-03-10 02:30:00.123000","2024-11-03 01:30:00.123000","2024-03-10 07:30:00.123000","2024-11-03 06:30:00.123000","1969-12-31 23:59:59.999999","1970-01-01 00:00:00.000123","1970-01-01 00:00:01.000001",null]}}} +{"name":"timestamp TIMESTAMP(6) -> VARCHAR(12)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","1969-12-31 2","1970-01-01 0","1970-01-01 0",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","1969-12-31 2","1970-01-01 0","1970-01-01 0",null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","1969-12-31 2","1970-01-01 0","1970-01-01 0",null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(0)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIMESTAMP(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(1)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIMESTAMP(1)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-28801001,"nanos":0},{"millis":-28801000,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799999,"nanos":0},{"millis":-28798999,"nanos":0},{"millis":1710009000123,"nanos":0},{"millis":1730568600123,"nanos":0},{"millis":1710027000123,"nanos":0},{"millis":1730586600123,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":17998999,"nanos":0},{"millis":17999000,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000001,"nanos":0},{"millis":18001001,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730611800123,"nanos":0},{"millis":1710070200123,"nanos":0},{"millis":1730633400123,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18001000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-28801001,"nanos":0},{"millis":-28801000,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799999,"nanos":0},{"millis":-28798999,"nanos":0},{"millis":1710009000123,"nanos":0},{"millis":1730568600123,"nanos":0},{"millis":1710027000123,"nanos":0},{"millis":1730586600123,"nanos":0},{"millis":-28800001,"nanos":999000},{"millis":-28800000,"nanos":123000},{"millis":-28799000,"nanos":1000},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":17998999,"nanos":0},{"millis":17999000,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000001,"nanos":0},{"millis":18001001,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730611800123,"nanos":0},{"millis":1710070200123,"nanos":0},{"millis":1730633400123,"nanos":0},{"millis":17999999,"nanos":999000},{"millis":18000000,"nanos":123000},{"millis":18001000,"nanos":1000},null]}}} +{"name":"timestamp TIMESTAMP(9) -> BIGINT","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"BIGINT"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]}}} +{"name":"timestamp TIMESTAMP(9) -> DATE","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"DATE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-1,0,0,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-1,0,0,null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-1,0,0,null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIME(0)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIME(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIME(3)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIME(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]}}} +{"name":"timestamp TIMESTAMP(9) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"STRING"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> STRING","results":["1969-12-31 23:59:58.999000000","1969-12-31 23:59:59.000000000","1969-12-31 23:59:59.999000000","1970-01-01 00:00:00.000000000","1970-01-01 00:00:00.001000000","1970-01-01 00:00:01.001000000","2024-03-10 02:30:00.123000000","2024-11-03 01:30:00.123000000","2024-03-10 07:30:00.123000000","2024-11-03 06:30:00.123000000","1969-12-31 23:59:59.999999999","1970-01-01 00:00:00.000123456","1970-01-01 00:00:01.000000001",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> STRING","results":["1969-12-31 23:59:58.999000000","1969-12-31 23:59:59.000000000","1969-12-31 23:59:59.999000000","1970-01-01 00:00:00.000000000","1970-01-01 00:00:00.001000000","1970-01-01 00:00:01.001000000","2024-03-10 02:30:00.123000000","2024-11-03 01:30:00.123000000","2024-03-10 07:30:00.123000000","2024-11-03 06:30:00.123000000","1969-12-31 23:59:59.999999999","1970-01-01 00:00:00.000123456","1970-01-01 00:00:01.000000001",null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> STRING","results":["1969-12-31 23:59:58.999000000","1969-12-31 23:59:59.000000000","1969-12-31 23:59:59.999000000","1970-01-01 00:00:00.000000000","1970-01-01 00:00:00.001000000","1970-01-01 00:00:01.001000000","2024-03-10 02:30:00.123000000","2024-11-03 01:30:00.123000000","2024-03-10 07:30:00.123000000","2024-11-03 06:30:00.123000000","1969-12-31 23:59:59.999999999","1970-01-01 00:00:00.000123456","1970-01-01 00:00:01.000000001",null]}}} +{"name":"timestamp TIMESTAMP(9) -> VARCHAR(12)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","1969-12-31 2","1970-01-01 0","1970-01-01 0",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","1969-12-31 2","1970-01-01 0","1970-01-01 0",null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","1969-12-31 2","1970-01-01 0","1970-01-01 0",null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(0)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIMESTAMP(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(1)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIMESTAMP(1)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-28801001,"nanos":0},{"millis":-28801000,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799999,"nanos":0},{"millis":-28798999,"nanos":0},{"millis":1710009000123,"nanos":0},{"millis":1730568600123,"nanos":0},{"millis":1710027000123,"nanos":0},{"millis":1730586600123,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":17998999,"nanos":0},{"millis":17999000,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000001,"nanos":0},{"millis":18001001,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730611800123,"nanos":0},{"millis":1710070200123,"nanos":0},{"millis":1730633400123,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18001000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999999}],[{"millis":0,"nanos":123456}],[{"millis":1000,"nanos":1}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(9)"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-28801001,"nanos":0},{"millis":-28801000,"nanos":0},{"millis":-28800001,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28799999,"nanos":0},{"millis":-28798999,"nanos":0},{"millis":1710009000123,"nanos":0},{"millis":1730568600123,"nanos":0},{"millis":1710027000123,"nanos":0},{"millis":1730586600123,"nanos":0},{"millis":-28800001,"nanos":999000},{"millis":-28800000,"nanos":123000},{"millis":-28799000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(9) -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":17998999,"nanos":0},{"millis":17999000,"nanos":0},{"millis":17999999,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000001,"nanos":0},{"millis":18001001,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730611800123,"nanos":0},{"millis":1710070200123,"nanos":0},{"millis":1730633400123,"nanos":0},{"millis":17999999,"nanos":999000},{"millis":18000000,"nanos":123000},{"millis":18001000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> BIGINT","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"BIGINT"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-53757322505225,53757322505224,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-53757322505225,53757322505224,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-53757322505225,53757322505224,null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> DATE","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"DATE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-622191233,622191233,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> DATE","results":[0,0,0,0,0,0,19792,20030,19792,20030,-622191233,622191234,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> DATE","results":[-1,-1,-1,-1,-1,-1,19791,20029,19792,20030,-622191233,622191233,null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(0)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIME(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(0)","results":[28798999,28799000,28799999,28800000,28800001,28801001,37800123,34200123,55800123,52200123,54775807,3167192,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(0)","results":[68398999,68399000,68399999,68400000,68400001,68401001,77400123,77400123,12600123,5400123,11575807,42662192,null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(3)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIME(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,25975807,60424192,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(3)","results":[28798999,28799000,28799999,28800000,28800001,28801001,37800123,34200123,55800123,52200123,54775807,3167192,null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIME(3)","results":[68398999,68399000,68399999,68400000,68400001,68401001,77400123,77400123,12600123,5400123,11575807,42662192,null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"STRING"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","results":["1969-12-31 23:59:58.999","1969-12-31 23:59:59.000","1969-12-31 23:59:59.999","1970-01-01 00:00:00.000","1970-01-01 00:00:00.001","1970-01-01 00:00:01.001","2024-03-10 02:30:00.123","2024-11-03 01:30:00.123","2024-03-10 07:30:00.123","2024-11-03 06:30:00.123","/+-.-04-06 07:12:55.807","5471-09-26 16:47:04.192",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","results":["1970-01-01 07:59:58.999","1970-01-01 07:59:59.000","1970-01-01 07:59:59.999","1970-01-01 08:00:00.000","1970-01-01 08:00:00.001","1970-01-01 08:00:01.001","2024-03-10 10:30:00.123","2024-11-03 09:30:00.123","2024-03-10 15:30:00.123","2024-11-03 14:30:00.123","5471-09-27 00:47:04.191","5471-09-27 00:52:47.192",null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","results":["1969-12-31 18:59:58.999","1969-12-31 18:59:59.000","1969-12-31 18:59:59.999","1969-12-31 19:00:00.000","1969-12-31 19:00:00.001","1969-12-31 19:00:01.001","2024-03-09 21:30:00.123","2024-11-02 21:30:00.123","2024-03-10 03:30:00.123","2024-11-03 01:30:00.123","/+-.-04-06 03:12:55.807","/+-.-04-06 02:16:53.808",null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> VARCHAR(12)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","/+-.-04-06 0","5471-09-26 1",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> VARCHAR(12)","results":["1970-01-01 0","1970-01-01 0","1970-01-01 0","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 1","2024-11-03 0","2024-03-10 1","2024-11-03 1","5471-09-27 0","5471-09-27 0",null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> VARCHAR(12)","results":["1969-12-31 1","1969-12-31 1","1969-12-31 1","1969-12-31 1","1969-12-31 1","1969-12-31 1","2024-03-09 2","2024-11-02 2","2024-03-10 0","2024-11-03 0","/+-.-04-06 0","/+-.-04-06 0",null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":9223372036854775000,"nanos":0},{"millis":9223372036854775616,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","results":[{"millis":28798000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},{"millis":1710066600000,"nanos":0},{"millis":1730626200000,"nanos":0},{"millis":1710084600000,"nanos":0},{"millis":1730644200000,"nanos":0},{"millis":-9223372036825976000,"nanos":0},{"millis":-9223372036825633000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","results":[{"millis":-18002000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},{"millis":1710019800000,"nanos":0},{"millis":1730583000000,"nanos":0},{"millis":1710041400000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":9223372036840375000,"nanos":0},{"millis":9223372036837013000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(1)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":9223372036854775800,"nanos":0},{"millis":9223372036854775716,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","results":[{"millis":28798900,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799900,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},{"millis":1710066600100,"nanos":0},{"millis":1730626200100,"nanos":0},{"millis":1710084600100,"nanos":0},{"millis":1730644200100,"nanos":0},{"millis":-9223372036825975900,"nanos":0},{"millis":-9223372036825632900,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","results":[{"millis":-18001100,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000100,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},{"millis":1710019800100,"nanos":0},{"millis":1730583000100,"nanos":0},{"millis":1710041400100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":9223372036840375800,"nanos":0},{"millis":9223372036837013800,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","results":[{"millis":28798999,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799999,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800001,"nanos":0},{"millis":28801001,"nanos":0},{"millis":1710066600123,"nanos":0},{"millis":1730626200123,"nanos":0},{"millis":1710084600123,"nanos":0},{"millis":1730644200123,"nanos":0},{"millis":-9223372036825975809,"nanos":0},{"millis":-9223372036825632808,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","results":[{"millis":-18001001,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000001,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999999,"nanos":0},{"millis":-17998999,"nanos":0},{"millis":1710019800123,"nanos":0},{"millis":1730583000123,"nanos":0},{"millis":1710041400123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":9223372036840375807,"nanos":0},{"millis":9223372036837013808,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","results":[{"millis":28798999,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799999,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800001,"nanos":0},{"millis":28801001,"nanos":0},{"millis":1710066600123,"nanos":0},{"millis":1730626200123,"nanos":0},{"millis":1710084600123,"nanos":0},{"millis":1730644200123,"nanos":0},{"millis":-9223372036825975809,"nanos":0},{"millis":-9223372036825632808,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","results":[{"millis":-18001001,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000001,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999999,"nanos":0},{"millis":-17998999,"nanos":0},{"millis":1710019800123,"nanos":0},{"millis":1730583000123,"nanos":0},{"millis":1710041400123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":9223372036840375807,"nanos":0},{"millis":9223372036837013808,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[9223372036854775807],[-9223372036854775808],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(3) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":9223372036854775807,"nanos":0},{"millis":-9223372036854775808,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> BIGINT","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"BIGINT"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> BIGINT","results":[-2,-1,-1,0,0,1,1710037800,1730597400,1710055800,1730615400,-1,0,1,null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> DATE","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"DATE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> DATE","results":[-1,-1,-1,0,0,0,19792,20030,19792,20030,-1,0,0,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> DATE","results":[0,0,0,0,0,0,19792,20030,19792,20030,0,0,0,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> DATE","results":[-1,-1,-1,-1,-1,-1,19791,20029,19792,20030,-1,-1,-1,null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(0)","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIME(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(0)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(0)","results":[28798999,28799000,28799999,28800000,28800001,28801001,37800123,34200123,55800123,52200123,28799999,28800000,28801000,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(0)","results":[68398999,68399000,68399999,68400000,68400001,68401001,77400123,77400123,12600123,5400123,68399999,68400000,68401000,null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(3)","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIME(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(3)","results":[86398999,86399000,86399999,0,1,1001,9000123,5400123,27000123,23400123,86399999,0,1000,null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(3)","results":[28798999,28799000,28799999,28800000,28800001,28801001,37800123,34200123,55800123,52200123,28799999,28800000,28801000,null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIME(3)","results":[68398999,68399000,68399999,68400000,68400001,68401001,77400123,77400123,12600123,5400123,68399999,68400000,68401000,null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> STRING","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"STRING"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> STRING","results":["1969-12-31 23:59:58.999000","1969-12-31 23:59:59.000000","1969-12-31 23:59:59.999000","1970-01-01 00:00:00.000000","1970-01-01 00:00:00.001000","1970-01-01 00:00:01.001000","2024-03-10 02:30:00.123000","2024-11-03 01:30:00.123000","2024-03-10 07:30:00.123000","2024-11-03 06:30:00.123000","1969-12-31 23:59:59.999999","1970-01-01 00:00:00.000123","1970-01-01 00:00:01.000001",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> STRING","results":["1970-01-01 07:59:58.999000","1970-01-01 07:59:59.000000","1970-01-01 07:59:59.999000","1970-01-01 08:00:00.000000","1970-01-01 08:00:00.001000","1970-01-01 08:00:01.001000","2024-03-10 10:30:00.123000","2024-11-03 09:30:00.123000","2024-03-10 15:30:00.123000","2024-11-03 14:30:00.123000","1970-01-01 07:59:59.999999","1970-01-01 08:00:00.000123","1970-01-01 08:00:01.000001",null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> STRING","results":["1969-12-31 18:59:58.999000","1969-12-31 18:59:59.000000","1969-12-31 18:59:59.999000","1969-12-31 19:00:00.000000","1969-12-31 19:00:00.001000","1969-12-31 19:00:01.001000","2024-03-09 21:30:00.123000","2024-11-02 21:30:00.123000","2024-03-10 03:30:00.123000","2024-11-03 01:30:00.123000","1969-12-31 18:59:59.999999","1969-12-31 19:00:00.000123","1969-12-31 19:00:01.000001",null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> VARCHAR(12)","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"VARCHAR(12)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> VARCHAR(12)","results":["1969-12-31 2","1969-12-31 2","1969-12-31 2","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 0","2024-11-03 0","2024-03-10 0","2024-11-03 0","1969-12-31 2","1970-01-01 0","1970-01-01 0",null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> VARCHAR(12)","results":["1970-01-01 0","1970-01-01 0","1970-01-01 0","1970-01-01 0","1970-01-01 0","1970-01-01 0","2024-03-10 1","2024-11-03 0","2024-03-10 1","2024-11-03 1","1970-01-01 0","1970-01-01 0","1970-01-01 0",null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> VARCHAR(12)","results":["1969-12-31 1","1969-12-31 1","1969-12-31 1","1969-12-31 1","1969-12-31 1","1969-12-31 1","2024-03-09 2","2024-11-02 2","2024-03-10 0","2024-11-03 0","1969-12-31 1","1969-12-31 1","1969-12-31 1",null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(0)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","results":[{"millis":-2000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730615400000,"nanos":0},{"millis":-1000,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","results":[{"millis":28798000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},{"millis":1710066600000,"nanos":0},{"millis":1730626200000,"nanos":0},{"millis":1710084600000,"nanos":0},{"millis":1730644200000,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(0)","results":[{"millis":-18002000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},{"millis":1710019800000,"nanos":0},{"millis":1730583000000,"nanos":0},{"millis":1710041400000,"nanos":0},{"millis":1730597400000,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(1)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","results":[{"millis":-1100,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":1710037800100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":1710055800100,"nanos":0},{"millis":1730615400100,"nanos":0},{"millis":-100,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","results":[{"millis":28798900,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799900,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},{"millis":1710066600100,"nanos":0},{"millis":1730626200100,"nanos":0},{"millis":1710084600100,"nanos":0},{"millis":1730644200100,"nanos":0},{"millis":28799900,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(1)","results":[{"millis":-18001100,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000100,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},{"millis":1710019800100,"nanos":0},{"millis":1730583000100,"nanos":0},{"millis":1710041400100,"nanos":0},{"millis":1730597400100,"nanos":0},{"millis":-18000100,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","results":[{"millis":28798999,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799999,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800001,"nanos":0},{"millis":28801001,"nanos":0},{"millis":1710066600123,"nanos":0},{"millis":1730626200123,"nanos":0},{"millis":1710084600123,"nanos":0},{"millis":1730644200123,"nanos":0},{"millis":28799999,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28801000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3)","results":[{"millis":-18001001,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000001,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999999,"nanos":0},{"millis":-17998999,"nanos":0},{"millis":1710019800123,"nanos":0},{"millis":1730583000123,"nanos":0},{"millis":1710041400123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":-18000001,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","results":[{"millis":28798999,"nanos":0},{"millis":28799000,"nanos":0},{"millis":28799999,"nanos":0},{"millis":28800000,"nanos":0},{"millis":28800001,"nanos":0},{"millis":28801001,"nanos":0},{"millis":1710066600123,"nanos":0},{"millis":1730626200123,"nanos":0},{"millis":1710084600123,"nanos":0},{"millis":1730644200123,"nanos":0},{"millis":28799999,"nanos":999000},{"millis":28800000,"nanos":123000},{"millis":28801000,"nanos":1000},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6)","results":[{"millis":-18001001,"nanos":0},{"millis":-18001000,"nanos":0},{"millis":-18000001,"nanos":0},{"millis":-18000000,"nanos":0},{"millis":-17999999,"nanos":0},{"millis":-17998999,"nanos":0},{"millis":1710019800123,"nanos":0},{"millis":1730583000123,"nanos":0},{"millis":1710041400123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":-18000001,"nanos":999000},{"millis":-18000000,"nanos":123000},{"millis":-17999000,"nanos":1000},null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1000,"nanos":0},null]}}} +{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"}],"rows":[[-1001],[-1000],[-1],[0],[1],[1001],[1710037800123],[1730597400123],[1710055800123],[1730615400123],[{"millis":-1,"nanos":999000}],[{"millis":0,"nanos":123000}],[{"millis":1000,"nanos":1000}],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]},"Asia/Shanghai":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]},"America/New_York":{"name":"timestamp TIMESTAMP(6) WITH LOCAL TIME ZONE -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":-1001,"nanos":0},{"millis":-1000,"nanos":0},{"millis":-1,"nanos":0},{"millis":0,"nanos":0},{"millis":1,"nanos":0},{"millis":1001,"nanos":0},{"millis":1710037800123,"nanos":0},{"millis":1730597400123,"nanos":0},{"millis":1710055800123,"nanos":0},{"millis":1730615400123,"nanos":0},{"millis":-1,"nanos":999000},{"millis":0,"nanos":123000},{"millis":1000,"nanos":1000},null]}}} +{"name":"rebound INT -> STRING","fields":[{"name":"v","type":"INT"}],"rows":[[0],[1],[-1],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"STRING"},"expected":{"UTC":{"name":"rebound INT -> STRING","results":["1970-01-01","1970-01-02","1969-12-31",null]},"Asia/Shanghai":{"name":"rebound INT -> STRING","results":["1970-01-01","1970-01-02","1969-12-31",null]},"America/New_York":{"name":"rebound INT -> STRING","results":["1970-01-01","1970-01-02","1969-12-31",null]}}} +{"name":"rebound DATE -> STRING","fields":[{"name":"v","type":"DATE"}],"rows":[[0],[1],[-1],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIME(3)"},"type":"STRING"},"expected":{"UTC":{"name":"rebound DATE -> STRING","results":["00:00:00.0","00:00:00.001","23:59:59.999",null]},"Asia/Shanghai":{"name":"rebound DATE -> STRING","results":["00:00:00.0","00:00:00.001","23:59:59.999",null]},"America/New_York":{"name":"rebound DATE -> STRING","results":["00:00:00.0","00:00:00.001","23:59:59.999",null]}}} +{"name":"rebound TIME(3) -> STRING","fields":[{"name":"v","type":"TIME(3)"}],"rows":[[0],[1],[-1],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"DATE"},"type":"STRING"},"expected":{"UTC":{"name":"rebound TIME(3) -> STRING","results":["1970-01-01","1970-01-02","1969-12-31",null]},"Asia/Shanghai":{"name":"rebound TIME(3) -> STRING","results":["1970-01-01","1970-01-02","1969-12-31",null]},"America/New_York":{"name":"rebound TIME(3) -> STRING","results":["1970-01-01","1970-01-02","1969-12-31",null]}}} +{"name":"rebound DATE -> TIMESTAMP(3)","fields":[{"name":"v","type":"DATE"}],"rows":[[0],[1],[-1],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"rebound DATE -> TIMESTAMP(3)","results":[{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},null]},"Asia/Shanghai":{"name":"rebound DATE -> TIMESTAMP(3)","results":[{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},null]},"America/New_York":{"name":"rebound DATE -> TIMESTAMP(3)","results":[{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},null]}}} +{"name":"rebound INT -> TIMESTAMP(3)","fields":[{"name":"v","type":"INT"}],"rows":[[0],[1],[-1],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BIGINT"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"rebound INT -> TIMESTAMP(3)","results":[{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},null]},"Asia/Shanghai":{"name":"rebound INT -> TIMESTAMP(3)","results":[{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},null]},"America/New_York":{"name":"rebound INT -> TIMESTAMP(3)","results":[{"millis":0,"nanos":0},{"millis":1000,"nanos":0},{"millis":-1000,"nanos":0},null]}}} +{"name":"rebound TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[0],[1],[-1],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(6)"},"type":"STRING"},"expected":{"UTC":{"name":"rebound TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","results":["1970-01-01 00:00:00.000000","1970-01-01 00:00:00.001000","1969-12-31 23:59:59.999000",null]},"Asia/Shanghai":{"name":"rebound TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","results":["1970-01-01 00:00:00.000000","1970-01-01 00:00:00.001000","1969-12-31 23:59:59.999000",null]},"America/New_York":{"name":"rebound TIMESTAMP(3) WITH LOCAL TIME ZONE -> STRING","results":["1970-01-01 00:00:00.000000","1970-01-01 00:00:00.001000","1969-12-31 23:59:59.999000",null]}}} +{"name":"rebound TIMESTAMP(6) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[0],[1],[-1],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"TIMESTAMP(3)"},"type":"STRING"},"expected":{"UTC":{"name":"rebound TIMESTAMP(6) -> STRING","results":["1970-01-01 00:00:00.000","1970-01-01 00:00:00.001","1969-12-31 23:59:59.999",null]},"Asia/Shanghai":{"name":"rebound TIMESTAMP(6) -> STRING","results":["1970-01-01 00:00:00.000","1970-01-01 00:00:00.001","1969-12-31 23:59:59.999",null]},"America/New_York":{"name":"rebound TIMESTAMP(6) -> STRING","results":["1970-01-01 00:00:00.000","1970-01-01 00:00:00.001","1969-12-31 23:59:59.999",null]}}} +{"name":"rebound STRING -> VARCHAR(3)","fields":[{"name":"v","type":"STRING"}],"rows":[["abcdef"],["é猫"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"BINARY(8)"},"type":"VARCHAR(3)"},"expected":{"UTC":{"name":"rebound STRING -> VARCHAR(3)","results":[{"error":"ClassCastException"},{"error":"ClassCastException"},null]},"Asia/Shanghai":{"name":"rebound STRING -> VARCHAR(3)","results":[{"error":"ClassCastException"},{"error":"ClassCastException"},null]},"America/New_York":{"name":"rebound STRING -> VARCHAR(3)","results":[{"error":"ClassCastException"},{"error":"ClassCastException"},null]}}} +{"name":"rebound BINARY(8) -> VARCHAR(3)","fields":[{"name":"v","type":"BINARY(8)"}],"rows":[[[97,98,99,100,101,102]],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"VARCHAR(3)"},"expected":{"UTC":{"name":"rebound BINARY(8) -> VARCHAR(3)","results":[{"error":"ClassCastException"},null]},"Asia/Shanghai":{"name":"rebound BINARY(8) -> VARCHAR(3)","results":[{"error":"ClassCastException"},null]},"America/New_York":{"name":"rebound BINARY(8) -> VARCHAR(3)","results":[{"error":"ClassCastException"},null]}}} +{"name":"grammar STRING -> DATE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-011-022"],["1970-0101-0202"],["1970-012-022"],["1970--"],["1970--02"],["1970-01-"],["1970-01-02 0303:0404:0505"],["1970-01-02 033:044:055"],["1970-01-02 030:044:055"],["1970-01-02 03:04"],["1970-01-02T03:04"],["1970-01-02T03:04.1"],["1970-01-02 03:04:05T03:04:05"],["1970-01-02 03:04:05T06:04:05"],["1970-01-02 03:04:05.123T03:04:05.123"],["1970-01-02 03:04:05.123T03:04:05.124"],["1970-01-02 24:00:00"],["1970-01-02T24:00"],["1970-01-02 24:00:00.000"],["1970-01-02 24:00:00.001"],["1970-01-02 23:59:60"],["2001-02-30"],["2001-04-31"],["2001-04-32"],["0000-01-01"],["0001-01-01"],["-0001-01-01"],["+10000-01-01"],["10000-01-01"],["1970-01-02 03:04:05."],["+1"],["-1"],["1.0"],["١"],["12"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"DATE"},"expected":{"UTC":{"name":"grammar STRING -> DATE","results":[325,{"error":"DateTimeException"},355,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1,1,{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1,1,1,{"error":"DateTimeException"},1,1,1,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},-719528,-719162,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},1,{"error":"DateTimeException"},-1,{"error":"DateTimeException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"Asia/Shanghai":{"name":"grammar STRING -> DATE","results":[325,{"error":"DateTimeException"},355,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1,1,{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1,1,1,{"error":"DateTimeException"},1,1,1,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},-719528,-719162,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},1,{"error":"DateTimeException"},-1,{"error":"DateTimeException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"America/New_York":{"name":"grammar STRING -> DATE","results":[325,{"error":"DateTimeException"},355,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1,1,{"error":"DateTimeException"},{"error":"DateTimeException"},1,1,1,1,1,{"error":"DateTimeException"},1,1,1,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},-719528,-719162,{"error":"DateTimeException"},{"error":"DateTimeException"},{"error":"DateTimeException"},1,{"error":"DateTimeException"},-1,{"error":"DateTimeException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]}}} +{"name":"grammar STRING -> TIMESTAMP(3)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-011-022"],["1970-0101-0202"],["1970-012-022"],["1970--"],["1970--02"],["1970-01-"],["1970-01-02 0303:0404:0505"],["1970-01-02 033:044:055"],["1970-01-02 030:044:055"],["1970-01-02 03:04"],["1970-01-02T03:04"],["1970-01-02T03:04.1"],["1970-01-02 03:04:05T03:04:05"],["1970-01-02 03:04:05T06:04:05"],["1970-01-02 03:04:05.123T03:04:05.123"],["1970-01-02 03:04:05.123T03:04:05.124"],["1970-01-02 24:00:00"],["1970-01-02T24:00"],["1970-01-02 24:00:00.000"],["1970-01-02 24:00:00.001"],["1970-01-02 23:59:60"],["2001-02-30"],["2001-04-31"],["2001-04-32"],["0000-01-01"],["0001-01-01"],["-0001-01-01"],["+10000-01-01"],["10000-01-01"],["1970-01-02 03:04:05."],["+1"],["-1"],["1.0"],["١"],["12"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"grammar STRING -> TIMESTAMP(3)","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-1,"nanos":0},{"error":"DateTimeParseException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"Asia/Shanghai":{"name":"grammar STRING -> TIMESTAMP(3)","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-1,"nanos":0},{"error":"DateTimeParseException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"America/New_York":{"name":"grammar STRING -> TIMESTAMP(3)","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-1,"nanos":0},{"error":"DateTimeParseException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]}}} +{"name":"grammar STRING -> TIMESTAMP(6)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-011-022"],["1970-0101-0202"],["1970-012-022"],["1970--"],["1970--02"],["1970-01-"],["1970-01-02 0303:0404:0505"],["1970-01-02 033:044:055"],["1970-01-02 030:044:055"],["1970-01-02 03:04"],["1970-01-02T03:04"],["1970-01-02T03:04.1"],["1970-01-02 03:04:05T03:04:05"],["1970-01-02 03:04:05T06:04:05"],["1970-01-02 03:04:05.123T03:04:05.123"],["1970-01-02 03:04:05.123T03:04:05.124"],["1970-01-02 24:00:00"],["1970-01-02T24:00"],["1970-01-02 24:00:00.000"],["1970-01-02 24:00:00.001"],["1970-01-02 23:59:60"],["2001-02-30"],["2001-04-31"],["2001-04-32"],["0000-01-01"],["0001-01-01"],["-0001-01-01"],["+10000-01-01"],["10000-01-01"],["1970-01-02 03:04:05."],["+1"],["-1"],["1.0"],["١"],["12"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"grammar STRING -> TIMESTAMP(6)","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999000},{"error":"DateTimeParseException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"Asia/Shanghai":{"name":"grammar STRING -> TIMESTAMP(6)","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999000},{"error":"DateTimeParseException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]},"America/New_York":{"name":"grammar STRING -> TIMESTAMP(6)","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-1,"nanos":999000},{"error":"DateTimeParseException"},{"error":"NumberFormatException"},{"error":"NumberFormatException"},null]}}} +{"name":"grammar STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-011-022"],["1970-0101-0202"],["1970-012-022"],["1970--"],["1970--02"],["1970-01-"],["1970-01-02 0303:0404:0505"],["1970-01-02 033:044:055"],["1970-01-02 030:044:055"],["1970-01-02 03:04"],["1970-01-02T03:04"],["1970-01-02T03:04.1"],["1970-01-02 03:04:05T03:04:05"],["1970-01-02 03:04:05T06:04:05"],["1970-01-02 03:04:05.123T03:04:05.123"],["1970-01-02 03:04:05.123T03:04:05.124"],["1970-01-02 24:00:00"],["1970-01-02T24:00"],["1970-01-02 24:00:00.000"],["1970-01-02 24:00:00.001"],["1970-01-02 23:59:60"],["2001-02-30"],["2001-04-31"],["2001-04-32"],["0000-01-01"],["0001-01-01"],["-0001-01-01"],["+10000-01-01"],["10000-01-01"],["1970-01-02 03:04:05."],["+1"],["-1"],["1.0"],["١"],["12"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"grammar STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"grammar STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":57600000,"nanos":0},{"millis":57600000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-28800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-28800000,"nanos":0},{"millis":68645000,"nanos":0},{"millis":68645000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":68640000,"nanos":0},{"error":"DateTimeParseException"},{"millis":68645000,"nanos":0},{"error":"DateTimeParseException"},{"millis":68645123,"nanos":0},{"error":"DateTimeParseException"},{"millis":144000000,"nanos":0},{"millis":144000000,"nanos":0},{"millis":144000000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983289600000,"nanos":0},{"millis":988560000000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135625943000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402272000000,"nanos":0},{"error":"DateTimeParseException"},{"millis":68645000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"grammar STRING -> TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":104400000,"nanos":0},{"millis":104400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":18000000,"nanos":0},{"error":"DateTimeParseException"},{"millis":18000000,"nanos":0},{"millis":115445000,"nanos":0},{"millis":115445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":115440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":115445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":115445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":190800000,"nanos":0},{"millis":190800000,"nanos":0},{"millis":190800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983336400000,"nanos":0},{"millis":988603200000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135579038000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402318800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":115445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]}}} +{"name":"grammar STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-011-022"],["1970-0101-0202"],["1970-012-022"],["1970--"],["1970--02"],["1970-01-"],["1970-01-02 0303:0404:0505"],["1970-01-02 033:044:055"],["1970-01-02 030:044:055"],["1970-01-02 03:04"],["1970-01-02T03:04"],["1970-01-02T03:04.1"],["1970-01-02 03:04:05T03:04:05"],["1970-01-02 03:04:05T06:04:05"],["1970-01-02 03:04:05.123T03:04:05.123"],["1970-01-02 03:04:05.123T03:04:05.124"],["1970-01-02 24:00:00"],["1970-01-02T24:00"],["1970-01-02 24:00:00.000"],["1970-01-02 24:00:00.001"],["1970-01-02 23:59:60"],["2001-02-30"],["2001-04-31"],["2001-04-32"],["0000-01-01"],["0001-01-01"],["-0001-01-01"],["+10000-01-01"],["10000-01-01"],["1970-01-02 03:04:05."],["+1"],["-1"],["1.0"],["١"],["12"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"grammar STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":86400000,"nanos":0},{"millis":86400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"error":"DateTimeParseException"},{"millis":0,"nanos":0},{"millis":97445000,"nanos":0},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":97440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"millis":172800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983318400000,"nanos":0},{"millis":988588800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135596800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402300800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":97445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"Asia/Shanghai":{"name":"grammar STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":57600000,"nanos":0},{"millis":57600000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-28800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":-28800000,"nanos":0},{"millis":68645000,"nanos":0},{"millis":68645000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":68640000,"nanos":0},{"error":"DateTimeParseException"},{"millis":68645000,"nanos":0},{"error":"DateTimeParseException"},{"millis":68645123,"nanos":0},{"error":"DateTimeParseException"},{"millis":144000000,"nanos":0},{"millis":144000000,"nanos":0},{"millis":144000000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983289600000,"nanos":0},{"millis":988560000000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135625943000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402272000000,"nanos":0},{"error":"DateTimeParseException"},{"millis":68645000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]},"America/New_York":{"name":"grammar STRING -> TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":104400000,"nanos":0},{"millis":104400000,"nanos":0},{"error":"DateTimeParseException"},{"millis":18000000,"nanos":0},{"error":"DateTimeParseException"},{"millis":18000000,"nanos":0},{"millis":115445000,"nanos":0},{"millis":115445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":115440000,"nanos":0},{"error":"DateTimeParseException"},{"millis":115445000,"nanos":0},{"error":"DateTimeParseException"},{"millis":115445123,"nanos":0},{"error":"DateTimeParseException"},{"millis":190800000,"nanos":0},{"millis":190800000,"nanos":0},{"millis":190800000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":983336400000,"nanos":0},{"millis":988603200000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"millis":-62135579038000,"nanos":0},{"error":"DateTimeParseException"},{"millis":253402318800000,"nanos":0},{"error":"DateTimeParseException"},{"millis":115445000,"nanos":0},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},{"error":"DateTimeParseException"},null]}}} +{"name":"TIMESTAMP(3) rebound INT -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"America/New_York":{"name":"TIMESTAMP(3) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]}}} +{"name":"TIMESTAMP(3) rebound INT -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) rebound INT -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) rebound DOUBLE -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"America/New_York":{"name":"TIMESTAMP(3) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]}}} +{"name":"TIMESTAMP(3) rebound DOUBLE -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) rebound DOUBLE -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"America/New_York":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]}}} +{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(6) rebound INT -> STRING","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]},"America/New_York":{"name":"TIMESTAMP(6) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]}}} +{"name":"TIMESTAMP(6) rebound INT -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(6) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(6) rebound INT -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(6) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(6) rebound DOUBLE -> STRING","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]},"America/New_York":{"name":"TIMESTAMP(6) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]}}} +{"name":"TIMESTAMP(6) rebound DOUBLE -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(6) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(6) rebound DOUBLE -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(6) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]},"America/New_York":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123"]}}} +{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(6)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123000}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(6) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(9) rebound INT -> STRING","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]},"America/New_York":{"name":"TIMESTAMP(9) rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]}}} +{"name":"TIMESTAMP(9) rebound INT -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(9) rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(9) rebound INT -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(9) rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(9) rebound DOUBLE -> STRING","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]},"America/New_York":{"name":"TIMESTAMP(9) rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]}}} +{"name":"TIMESTAMP(9) rebound DOUBLE -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(9) rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(9) rebound DOUBLE -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(9) rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]},"America/New_York":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","1970-01-01T00:00:00.000123456"]}}} +{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(9)"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":0,"nanos":123456}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"Asia/Shanghai":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]},"America/New_York":{"name":"TIMESTAMP(9) rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","1970-01-01T00:00:00."]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"INT"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound INT -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DOUBLE"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DOUBLE -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> STRING","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"STRING"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> STRING","results":["1970-01-01T00:00","1970-01-01T00:00:00.001","1970-01-01T00:00:01","1969-12-31T23:59:59.999","1969-12-31T23:59:59","2023-11-14T22:13:20.123","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12:55.807"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> CHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"CHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> CHAR(20)","results":["1970-01-01T00:00 ","1970-01-01T00:00:00.","1970-01-01T00:00:01 ","1969-12-31T23:59:59.","1969-12-31T23:59:59 ","2023-11-14T22:13:20.","+10000-01-01T00:00 ","-0001-01-01T00:00 ","-1701532-04-06T07:12"]}}} +{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> VARCHAR(20)","fields":[{"name":"v","type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"}],"rows":[[{"millis":0,"nanos":0}],[{"millis":1,"nanos":0}],[{"millis":1000,"nanos":0}],[{"millis":-1,"nanos":0}],[{"millis":-1000,"nanos":0}],[{"millis":1700000000123,"nanos":0}],[{"millis":253402300800000,"nanos":0}],[{"millis":-62198755200000,"nanos":0}],[{"millis":9223372036854775807,"nanos":0}]],"transform":{"name":"CAST","fieldRef":{"index":0,"name":"v","type":"DECIMAL(12,3)"},"type":"VARCHAR(20)"},"expected":{"UTC":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"Asia/Shanghai":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]},"America/New_York":{"name":"TIMESTAMP(3) WITH LOCAL TIME ZONE rebound DECIMAL(12,3) -> VARCHAR(20)","results":["1970-01-01T00:00","1970-01-01T00:00:00.","1970-01-01T00:00:01","1969-12-31T23:59:59.","1969-12-31T23:59:59","2023-11-14T22:13:20.","+10000-01-01T00:00","-0001-01-01T00:00","-1701532-04-06T07:12"]}}} +{"name":"timefull_STRING_to_TIMESTAMP(3)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-12-T24:00"],["1970-01- 24:00:00"],["1970--T24:00"],["2000--T24:00"],["1970-01-01T24:00"],["+999999999-01-01"],["2024-03-10 02:30:00"],["2024-11-03 01:30:00"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(3)"},"expected":{"UTC":{"name":"timefull_STRING_to_TIMESTAMP(3)","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]},"Asia/Shanghai":{"name":"timefull_STRING_to_TIMESTAMP(3)","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]},"America/New_York":{"name":"timefull_STRING_to_TIMESTAMP(3)","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]}}} +{"name":"timefull_STRING_to_TIMESTAMP(6)","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-12-T24:00"],["1970-01- 24:00:00"],["1970--T24:00"],["2000--T24:00"],["1970-01-01T24:00"],["+999999999-01-01"],["2024-03-10 02:30:00"],["2024-11-03 01:30:00"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(6)"},"expected":{"UTC":{"name":"timefull_STRING_to_TIMESTAMP(6)","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]},"Asia/Shanghai":{"name":"timefull_STRING_to_TIMESTAMP(6)","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]},"America/New_York":{"name":"timefull_STRING_to_TIMESTAMP(6)","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]}}} +{"name":"timefull_STRING_to_TIMESTAMP(3) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-12-T24:00"],["1970-01- 24:00:00"],["1970--T24:00"],["2000--T24:00"],["1970-01-01T24:00"],["+999999999-01-01"],["2024-03-10 02:30:00"],["2024-11-03 01:30:00"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(3) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timefull_STRING_to_TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]},"Asia/Shanghai":{"name":"timefull_STRING_to_TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":28828800000,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":946656000000,"nanos":0},{"millis":57600000,"nanos":0},{"millis":-5336598346203103232,"nanos":0},{"millis":1710009000000,"nanos":0},{"millis":1730568600000,"nanos":0},null]},"America/New_York":{"name":"timefull_STRING_to_TIMESTAMP(3) WITH LOCAL TIME ZONE","results":[{"millis":28875600000,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000000,"nanos":0},{"millis":946702800000,"nanos":0},{"millis":104400000,"nanos":0},{"millis":-5336598346156303232,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730611800000,"nanos":0},null]}}} +{"name":"timefull_STRING_to_TIMESTAMP(6) WITH LOCAL TIME ZONE","fields":[{"name":"v","type":"STRING"}],"rows":[["1970-12-T24:00"],["1970-01- 24:00:00"],["1970--T24:00"],["2000--T24:00"],["1970-01-01T24:00"],["+999999999-01-01"],["2024-03-10 02:30:00"],["2024-11-03 01:30:00"],[null]],"transform":{"name":"CAST","fieldRef":{"index":99,"name":"v","type":"STRING"},"type":"TIMESTAMP(6) WITH LOCAL TIME ZONE"},"expected":{"UTC":{"name":"timefull_STRING_to_TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":28857600000,"nanos":0},{"millis":0,"nanos":0},{"millis":0,"nanos":0},{"millis":946684800000,"nanos":0},{"millis":86400000,"nanos":0},{"millis":-5336598346174303232,"nanos":0},{"millis":1710037800000,"nanos":0},{"millis":1730597400000,"nanos":0},null]},"Asia/Shanghai":{"name":"timefull_STRING_to_TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":28828800000,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":-28800000,"nanos":0},{"millis":946656000000,"nanos":0},{"millis":57600000,"nanos":0},{"millis":-5336598346203103232,"nanos":0},{"millis":1710009000000,"nanos":0},{"millis":1730568600000,"nanos":0},null]},"America/New_York":{"name":"timefull_STRING_to_TIMESTAMP(6) WITH LOCAL TIME ZONE","results":[{"millis":28875600000,"nanos":0},{"millis":18000000,"nanos":0},{"millis":18000000,"nanos":0},{"millis":946702800000,"nanos":0},{"millis":104400000,"nanos":0},{"millis":-5336598346156303232,"nanos":0},{"millis":1710055800000,"nanos":0},{"millis":1730611800000,"nanos":0},null]}}}"###; + +fn source(value: &Value, data_type: &DataType) -> Option { + let target = paimon_type_to_arrow(data_type).unwrap(); + if let ArrowType::Timestamp(unit, _) = &target { + let ticks = if value.is_null() { + None + } else { + let millis = value.get("millis").unwrap_or(value).as_i64().unwrap(); + let nanos = value.get("nanos").and_then(Value::as_i64).unwrap_or(0); + let full = i128::from(millis) * 1_000_000 + i128::from(nanos); + let divisor = match unit { + TimeUnit::Second => 1_000_000_000, + TimeUnit::Millisecond => 1_000_000, + TimeUnit::Microsecond => 1000, + TimeUnit::Nanosecond => 1, + }; + if full % divisor != 0 { + return None; + } + Some(i64::try_from(full / divisor).ok()?) + }; + return Some( + arrow_cast::cast( + &(Arc::new(Int64Array::from(vec![ticks])) as ArrayRef), + &target, + ) + .unwrap(), + ); + } + if matches!(target, ArrowType::Binary) { + let bytes = value.as_array().map(|v| { + v.iter() + .map(|b| b.as_u64().unwrap() as u8) + .collect::>() + }); + return Some(Arc::new(BinaryArray::from(vec![bytes.as_deref()]))); + } + if let Some(text) = value + .as_str() + .filter(|_| matches!(target, ArrowType::Float32 | ArrowType::Float64)) + { + let number = + crate::common::number::parse_java_float(text, matches!(target, ArrowType::Float32)) + .unwrap(); + let source: ArrayRef = Arc::new(arrow_array::Float64Array::from(vec![number])); + return Some(arrow_cast::cast(&source, &target).unwrap()); + } + Some(super::cast_test_utils::source(value, data_type)) +} + +fn external(array: &ArrayRef) -> Value { + if array.is_null(0) { + return Value::Null; + } + match array.data_type() { + ArrowType::Timestamp(unit, _) => { + let raw = arrow_cast::cast(array, &ArrowType::Int64).unwrap(); + let value = raw.as_primitive::().value(0); + let (millis, nanos) = super::evolution_temporal::timestamp_parts(value, unit); + json!({"millis":millis,"nanos":nanos}) + } + ArrowType::Date32 => json!(array.as_primitive::().value(0)), + ArrowType::Time32(TimeUnit::Millisecond) => { + json!(array.as_primitive::().value(0)) + } + ArrowType::Float32 if array.as_primitive::().value(0).is_infinite() => { + json!(if array + .as_primitive::() + .value(0) + .is_sign_negative() + { + "-Infinity" + } else { + "Infinity" + }) + } + ArrowType::Float64 if array.as_primitive::().value(0).is_infinite() => { + json!(if array + .as_primitive::() + .value(0) + .is_sign_negative() + { + "-Infinity" + } else { + "Infinity" + }) + } + _ => super::cast_test_utils::external(array), + } +} + +fn unrepresentable(expected: &Value, target: &ArrowType) -> bool { + let ArrowType::Timestamp(unit, _) = target else { + return false; + }; + let Some(millis) = expected.get("millis").and_then(Value::as_i64) else { + return false; + }; + let full = i128::from(millis) * 1_000_000 + i128::from(expected["nanos"].as_i64().unwrap()); + let divisor = match unit { + TimeUnit::Second => 1_000_000_000, + TimeUnit::Millisecond => 1_000_000, + TimeUnit::Microsecond => 1000, + TimeUnit::Nanosecond => 1, + }; + full % divisor != 0 || i64::try_from(full / divisor).is_err() +} + +#[test] +fn cast_completion_matches_actual_java_in_three_zones() { + let mut tested = 0; + for line in CASES.lines() { + let case: Value = serde_json::from_str(line).unwrap(); + let actual: DataType = serde_json::from_value(case["fields"][0]["type"].clone()).unwrap(); + let original: DataType = + serde_json::from_value(case["transform"]["fieldRef"]["type"].clone()).unwrap(); + let target: DataType = serde_json::from_value(case["transform"]["type"].clone()).unwrap(); + let executor = CastExecutor::new(original, actual.clone(), target.clone()).unwrap(); + let target_arrow = paimon_type_to_arrow(&target).unwrap(); + for zone in ["UTC", "Asia/Shanghai", "America/New_York"] { + let timezone = jiff::tz::TimeZone::get(zone).unwrap(); + for (row, expected) in case["rows"] + .as_array() + .unwrap() + .iter() + .zip(case["expected"][zone]["results"].as_array().unwrap()) + { + let Some(source) = source(&row[0], &actual) else { + continue; + }; + let result = executor.cast_in_zone(&source, &timezone); + let bad_utf8 = matches!(source.data_type(), ArrowType::Binary) + && row[0].as_array().is_some_and(|bytes| { + let bytes = bytes + .iter() + .map(|v| v.as_u64().unwrap() as u8) + .collect::>(); + std::str::from_utf8(&bytes).is_err() + }); + if expected.get("error").is_some() + || unrepresentable(expected, &target_arrow) + || bad_utf8 + { + assert!( + result.is_err(), + "{} {zone} {row}: {expected} -> {result:?}", + case["name"] + ); + } else { + let actual = external(&result.unwrap()); + if expected.is_number() + && matches!(target_arrow, ArrowType::Float32 | ArrowType::Float64) + { + // Compare IEEE values, not arbitrary-precision JSON spelling. + assert_eq!( + actual.as_f64(), + expected.as_f64(), + "{} {zone} {row}", + case["name"] + ); + } else { + assert_eq!(actual, *expected, "{} {zone} {row}", case["name"]); + } + } + tested += 1; + } + } + } + assert!(tested > 4000); +} + +#[test] +fn existing_python_java_capability_matrix_is_complete() { + // 20 by 20 measured pairs, captured before replacing Python pc.cast. + let types = [ + "BOOLEAN", + "TINYINT", + "SMALLINT", + "INT", + "BIGINT", + "FLOAT", + "DOUBLE", + "DECIMAL(12,3)", + "STRING", + "CHAR(8)", + "VARCHAR(8)", + "BINARY(8)", + "VARBINARY(32)", + "BYTES", + "DATE", + "TIME(3)", + "TIMESTAMP(3)", + "TIMESTAMP(6)", + "TIMESTAMP(3) WITH LOCAL TIME ZONE", + "TIMESTAMP(6) WITH LOCAL TIME ZONE", + ]; + let supported = [ + "01111110111000000000", + "11111111111000000000", + "11111111111000000000", + "11111111111000000000", + "11111111111000001111", + "01111111111000000000", + "01111111111000000000", + "01111111111000000000", + "11111111111111101111", + "11111111111111101111", + "11111111111111101111", + "00000000111111000000", + "00000000111111000000", + "00000000111111000000", + "00000000111000001111", + "00000000111000000000", + "00001000111000111111", + "00001000111000111111", + "00001000111000111111", + "00001000111000111111", + ]; + for (source, expected) in types.iter().zip(supported) { + let from: DataType = serde_json::from_value(json!(source)).unwrap(); + for (target, expected) in types.iter().zip(expected.bytes()) { + let to: DataType = serde_json::from_value(json!(target)).unwrap(); + assert_eq!( + CastExecutor::supports(&from, &to), + expected == b'1', + "{source} -> {target}" + ); + } + } +} diff --git a/crates/paimon/src/arrow/cast_executor.rs b/crates/paimon/src/arrow/cast_executor.rs new file mode 100644 index 000000000..4ce174b3f --- /dev/null +++ b/crates/paimon/src/arrow/cast_executor.rs @@ -0,0 +1,456 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +//! The existing Python scalar CAST subset, bound like Java CastExecutors. + +use std::sync::Arc; + +use arrow_array::{ + cast::AsArray, types::*, ArrayRef, Date32Array, Float32Array, Float64Array, Int64Array, + StringArray, +}; +use arrow_schema::{DataType as ArrowType, TimeUnit}; +use jiff::tz::TimeZone; + +use crate::spec::{BigIntType, DataType, DoubleType, IntType}; + +#[derive(Debug, Clone, PartialEq)] +pub(crate) struct CastExecutor { + // Java copyWithNewInputs retains the original executor. The current type + // describes the row getter/runtime class, not the executor to select. + from: DataType, + current: DataType, + to: DataType, +} + +fn character(t: &DataType) -> bool { + matches!(t, DataType::Char(_) | DataType::VarChar(_)) +} +fn binary(t: &DataType) -> bool { + matches!(t, DataType::Binary(_) | DataType::VarBinary(_)) +} +fn primitive(t: &DataType) -> bool { + matches!( + t, + DataType::TinyInt(_) + | DataType::SmallInt(_) + | DataType::Int(_) + | DataType::BigInt(_) + | DataType::Float(_) + | DataType::Double(_) + ) +} +fn numeric(t: &DataType) -> bool { + primitive(t) || matches!(t, DataType::Decimal(_)) +} +fn timestamp(t: &DataType) -> bool { + matches!(t, DataType::Timestamp(_) | DataType::LocalZonedTimestamp(_)) +} +fn number(t: &DataType) -> bool { + primitive(t) || matches!(t, DataType::Date(_) | DataType::Time(_)) +} +fn integer_object(t: &DataType) -> bool { + matches!(t, DataType::Int(_) | DataType::Date(_) | DataType::Time(_)) +} + +impl CastExecutor { + pub(crate) fn new(from: DataType, current: DataType, to: DataType) -> crate::Result { + if !Self::supports(&from, &to) { + return Err(crate::Error::Unsupported { + message: format!( + "CAST {from} -> {to} is outside the existing Python/Java scalar rules" + ), + }); + } + Ok(Self { from, current, to }) + } + + pub(crate) fn supports(from: &DataType, to: &DataType) -> bool { + super::supports_numeric_cast(from, to) + || character(to) + && (numeric(from) + || character(from) + || binary(from) + || matches!( + from, + DataType::Boolean(_) | DataType::Date(_) | DataType::Time(_) + ) + || timestamp(from)) + || binary(to) && (binary(from) || character(from)) + || character(from) + && (matches!( + to, + DataType::Float(_) | DataType::Double(_) | DataType::Date(_) + ) || timestamp(to)) + || matches!(from, DataType::BigInt(_) | DataType::Date(_)) && timestamp(to) + || timestamp(from) + && (timestamp(to) + || matches!( + to, + DataType::BigInt(_) | DataType::Date(_) | DataType::Time(_) + )) + } + + pub(crate) fn cast(&self, source: &ArrayRef) -> crate::Result { + self.cast_in_zone(source, &TimeZone::system()) + } + + pub(crate) fn cast_in_zone( + &self, + source: &ArrayRef, + zone: &TimeZone, + ) -> crate::Result { + let target = super::paimon_type_to_arrow(&self.to)?; + // A valid executor never checks the runtime class of NULL. This also + // preserves per-row short circuiting and typed-empty validation. + if source.null_count() == source.len() { + return Ok(arrow_array::new_null_array(&target, source.len())); + } + let source = strict_cast(source, &super::paimon_type_to_arrow(&self.current)?)?; + let result = if numeric(&self.from) && character(&self.to) { + self.require( + numeric(&self.current) + || timestamp(&self.current) + || character(&self.current) + || matches!( + self.current, + DataType::Boolean(_) | DataType::Date(_) | DataType::Time(_) + ), + )?; + let (source, current) = self.number_input(&source)?; + super::apply_declared_width(&number_string(&source, ¤t)?, &self.to) + } else if numeric(&self.from) && numeric(&self.to) { + self.require(if matches!(self.from, DataType::Decimal(_)) { + matches!(self.current, DataType::Decimal(_)) + } else { + number(&self.current) + })?; + let (mut source, mut current) = self.number_input(&source)?; + if matches!(self.to, DataType::Decimal(_)) && primitive(&self.from) { + if matches!(self.from, DataType::Float(_) | DataType::Double(_)) { + source = strict_cast(&source, &ArrowType::Float64)?; + current = DataType::Double(DoubleType::new()); + } else { + source = super::evolution_cast::numeric_to_integer(&source, &ArrowType::Int64)?; + current = DataType::BigInt(BigIntType::new()); + } + } + super::cast_numeric(&source, ¤t, &self.to)?.expect("validated numeric rule") + } else if primitive(&self.from) && matches!(self.to, DataType::Boolean(_)) { + self.require(number(&self.current))?; + let (source, _) = self.number_input(&source)?; + let long = super::evolution_cast::numeric_to_integer(&source, &ArrowType::Int64)?; + strict_cast(&long, &ArrowType::Boolean)? + } else if matches!(self.from, DataType::Boolean(_)) { + self.require(matches!(self.current, DataType::Boolean(_)))?; + super::apply_declared_width(&strict_cast(&source, &target)?, &self.to) + } else if character(&self.from) { + self.require(character(&self.current))?; + self.cast_string(&source, zone)? + } else if binary(&self.from) { + self.require(binary(&self.current))?; + let result = strict_cast(&source, &target)?; + // BinaryToString returns BinaryString.fromBytes and deliberately + // does not apply CHAR/VARCHAR width. Invalid UTF8 remains an error. + if character(&self.to) { + result + } else { + super::apply_declared_width(&result, &self.to) + } + } else if matches!(self.from, DataType::Date(_)) { + if timestamp(&self.to) { + self.require(number(&self.current))?; + let (number, _) = self.number_input(&source)?; + if matches!(self.to, DataType::LocalZonedTimestamp(_)) { + let integer = + super::evolution_cast::numeric_to_integer(&number, &ArrowType::Int32)?; + super::evolution_temporal::cast_in_zone_strict( + &integer, &self.from, &self.to, zone, + )? + .expect("DATE -> LTZ") + } else { + let long = + super::evolution_cast::numeric_to_integer(&number, &ArrowType::Int64)?; + let values = long + .as_primitive::() + .iter() + .map(|v| { + v.map(|v| timestamp_ticks(v.wrapping_mul(86_400_000), 0, &target)) + .transpose() + }) + .collect::>>()?; + strict_cast(&(Arc::new(Int64Array::from(values)) as ArrayRef), &target)? + } + } else { + self.require(integer_object(&self.current))?; + let integer = strict_cast(&source, &ArrowType::Int32)?; + if character(&self.to) { + let strings: ArrayRef = Arc::new(StringArray::from_iter( + integer + .as_primitive::() + .iter() + .map(|v| v.map(super::cast_text::format_date)), + )); + super::apply_declared_width(&strings, &self.to) + } else { + strict_cast(&integer, &target)? + } + } + } else if matches!(self.from, DataType::Time(_)) { + self.require(integer_object(&self.current))?; + let integer = strict_cast(&source, &ArrowType::Int32)?; + let time = strict_cast(&integer, &ArrowType::Time32(TimeUnit::Millisecond))?; + if character(&self.to) { + super::evolution_string::temporal_to_string_in_zone( + &time, &self.from, &self.to, zone, + )? + .expect("TIME -> character") + } else { + strict_cast(&time, &target)? + } + } else if timestamp(&self.from) { + self.require(timestamp(&self.current))?; + if character(&self.to) { + super::evolution_string::temporal_to_string_in_zone( + &source, &self.from, &self.to, zone, + )? + .expect("timestamp -> character") + } else if matches!(self.to, DataType::BigInt(_)) { + super::evolution_cast::timestamp_to_bigint( + &source, + matches!(self.from, DataType::LocalZonedTimestamp(_)), + )? + } else if let Some(result) = + super::evolution_temporal::cast_in_zone_strict(&source, &self.from, &self.to, zone)? + { + result + } else { + let ArrowType::Timestamp(unit, _) = source.data_type() else { + unreachable!() + }; + let raw = strict_cast(&source, &ArrowType::Int64)?; + let values = raw + .as_primitive::() + .iter() + .map(|v| { + v.map(|v| { + let (mut millis, mut nanos) = + super::evolution_temporal::timestamp_parts(v, unit); + let precision = match &self.to { + DataType::Timestamp(t) => t.precision(), + DataType::LocalZonedTimestamp(t) => t.precision(), + _ => unreachable!(), + }; + let from_precision = match &self.from { + DataType::Timestamp(t) => t.precision(), + DataType::LocalZonedTimestamp(t) => t.precision(), + _ => unreachable!(), + }; + if from_precision > precision { + if precision <= 3 { + let quantum = 10_i64.pow(3 - precision); + millis = millis.div_euclid(quantum).wrapping_mul(quantum); + nanos = 0; + } else { + let quantum = 10_i64.pow(9 - precision); + nanos = nanos / quantum * quantum; + } + } + timestamp_ticks(millis, nanos as u32, &target) + }) + .transpose() + }) + .collect::>>()?; + strict_cast(&(Arc::new(Int64Array::from(values)) as ArrayRef), &target)? + } + } else if matches!(self.from, DataType::BigInt(_)) && timestamp(&self.to) { + self.require(number(&self.current))?; + let (source, _) = self.number_input(&source)?; + let long = super::evolution_cast::numeric_to_integer(&source, &ArrowType::Int64)?; + if matches!(self.to, DataType::LocalZonedTimestamp(_)) { + super::evolution_temporal::cast_in_zone_strict(&long, &self.from, &self.to, zone)? + .expect("BIGINT -> LTZ") + } else { + let values = long + .as_primitive::() + .iter() + .map(|v| { + v.map(|v| timestamp_ticks(v.wrapping_mul(1000), 0, &target)) + .transpose() + }) + .collect::>>()?; + strict_cast(&(Arc::new(Int64Array::from(values)) as ArrayRef), &target)? + } + } else { + unreachable!("validated scalar cast executor") + }; + if timestamp(&self.to) && result.null_count() > source.null_count() { + return Err(storage_error()); + } + Ok(result) + } + + fn require(&self, valid: bool) -> crate::Result<()> { + if valid { + Ok(()) + } else { + Err(crate::Error::DataInvalid { + message: format!( + "CAST {} -> {} cannot consume the Java runtime class of {}", + self.from, self.to, self.current + ), + source: None, + }) + } + } + + fn number_input(&self, source: &ArrayRef) -> crate::Result<(ArrayRef, DataType)> { + if matches!(self.current, DataType::Date(_) | DataType::Time(_)) { + Ok(( + strict_cast(source, &ArrowType::Int32)?, + DataType::Int(IntType::new()), + )) + } else { + Ok((Arc::clone(source), self.current.clone())) + } + } + + fn cast_string(&self, source: &ArrayRef, zone: &TimeZone) -> crate::Result { + let target = super::paimon_type_to_arrow(&self.to)?; + if matches!(self.to, DataType::Float(_) | DataType::Double(_)) { + let single = matches!(self.to, DataType::Float(_)); + let values = source + .as_string::() + .iter() + .map(|v| { + v.map(|v| crate::common::number::parse_java_float(v, single)) + .transpose() + }) + .collect::>>()?; + return Ok(if single { + Arc::new(Float32Array::from_iter( + values.into_iter().map(|v| v.map(|v| v as f32)), + )) as ArrayRef + } else { + Arc::new(Float64Array::from(values)) + }); + } + if matches!(self.to, DataType::Date(_)) { + let values = source + .as_string::() + .iter() + .map(|v| v.map(super::cast_text::parse_date).transpose()) + .collect::>>()?; + return Ok(Arc::new(Date32Array::from(values))); + } + if timestamp(&self.to) { + let (precision, local) = match &self.to { + DataType::Timestamp(t) => (t.precision(), false), + DataType::LocalZonedTimestamp(t) => (t.precision(), true), + _ => unreachable!(), + }; + let values = source + .as_string::() + .iter() + .map(|v| { + v.map(|v| { + let (millis, nanos) = + super::cast_text::parse_timestamp(v, precision, local.then_some(zone))?; + timestamp_ticks(millis, nanos, &target) + }) + .transpose() + }) + .collect::>>()?; + return strict_cast(&(Arc::new(Int64Array::from(values)) as ArrayRef), &target); + } + let cast = match super::cast_numeric(source, &self.current, &self.to)? { + Some(result) => result, + None => strict_cast(source, &target)?, + }; + Ok(super::apply_declared_width(&cast, &self.to)) + } +} + +fn strict_cast(source: &ArrayRef, target: &ArrowType) -> crate::Result { + arrow_cast::cast_with_options( + source, + target, + &arrow_cast::CastOptions { + safe: false, + ..Default::default() + }, + ) + .map_err(|error| crate::Error::DataInvalid { + message: error.to_string(), + source: None, + }) +} + +fn number_string(source: &ArrayRef, current: &DataType) -> crate::Result { + let single = matches!(current, DataType::Float(_)); + if timestamp(current) { + let ArrowType::Timestamp(unit, _) = source.data_type() else { + unreachable!() + }; + let raw = strict_cast(source, &ArrowType::Int64)?; + Ok(Arc::new(StringArray::from_iter( + raw.as_primitive::().iter().map(|value| { + value.map(|value| { + let (millis, sub) = super::evolution_temporal::timestamp_parts(value, unit); + let nanos = (millis.rem_euclid(1000) * 1_000_000 + sub) as u32; + crate::common::date_time::format_iso_timestamp(millis.div_euclid(1000), nanos) + }) + }), + ))) + } else if matches!(current, DataType::Float(_) | DataType::Double(_)) { + let source = strict_cast(source, &ArrowType::Float64)?; + Ok(Arc::new(StringArray::from_iter( + source + .as_primitive::() + .iter() + .map(|v| v.map(|v| crate::common::number::java_number_string(v, single))), + ))) + } else if matches!(current, DataType::Decimal(_)) { + super::evolution_decimal::decimal_to_string(source) + } else { + strict_cast(source, &ArrowType::Utf8) + } +} + +fn storage_error() -> crate::Error { + crate::Error::DataInvalid { + message: "Java timestamp result cannot be represented by the Arrow target".into(), + source: None, + } +} + +fn timestamp_ticks(millis: i64, nanos: u32, target: &ArrowType) -> crate::Result { + let ArrowType::Timestamp(unit, _) = target else { + unreachable!() + }; + let quantum = match unit { + TimeUnit::Second => 1_000_000_000, + TimeUnit::Millisecond => 1_000_000, + TimeUnit::Microsecond => 1000, + TimeUnit::Nanosecond => 1, + }; + let value = i128::from(millis) * 1_000_000 + i128::from(nanos); + if value.rem_euclid(quantum) != 0 { + return Err(storage_error()); + } + i64::try_from(value / quantum).map_err(|_| storage_error()) +} diff --git a/crates/paimon/src/arrow/cast_test_utils.rs b/crates/paimon/src/arrow/cast_test_utils.rs new file mode 100644 index 000000000..760e2fdeb --- /dev/null +++ b/crates/paimon/src/arrow/cast_test_utils.rs @@ -0,0 +1,118 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +use crate::arrow::paimon_type_to_arrow; +use crate::spec::DataType; +use arrow_array::{ + cast::AsArray, types::*, Array, ArrayRef, BooleanArray, Decimal128Array, Float32Array, + Float64Array, Int16Array, Int32Array, Int64Array, Int8Array, StringArray, +}; +use serde_json::{json, Value}; +use std::sync::Arc; + +pub(crate) fn source(value: &Value, data_type: &DataType) -> ArrayRef { + let nullable = value.is_null(); + macro_rules! integral { + ($array:ty, $ty:ty) => { + Arc::new(<$array>::from(vec![if nullable { + None + } else { + Some(value.as_i64().unwrap() as $ty) + }])) as ArrayRef + }; + } + match data_type { + DataType::TinyInt(_) => integral!(Int8Array, i8), + DataType::SmallInt(_) => integral!(Int16Array, i16), + DataType::Int(_) => integral!(Int32Array, i32), + DataType::BigInt(_) => integral!(Int64Array, i64), + DataType::Float(_) => Arc::new(Float32Array::from(vec![value.as_f64().map(|v| v as f32)])), + DataType::Double(_) => Arc::new(Float64Array::from(vec![value.as_f64()])), + DataType::Boolean(_) => Arc::new(BooleanArray::from(vec![value.as_bool()])), + DataType::Date(_) | DataType::Time(_) => { + let integers = integral!(Int32Array, i32); + arrow_cast::cast(&integers, &paimon_type_to_arrow(data_type).unwrap()).unwrap() + } + DataType::Char(_) | DataType::VarChar(_) => { + Arc::new(StringArray::from(vec![value.as_str()])) + } + DataType::Decimal(t) => { + let value = value.as_str().map(|value| { + let negative = value.starts_with('-'); + let value = value.trim_start_matches(['-', '+']); + let (whole, fraction) = value.split_once('.').unwrap_or((value, "")); + let mut digits = format!("{whole}{fraction}"); + digits.extend(std::iter::repeat_n( + '0', + t.scale() as usize - fraction.len(), + )); + let unscaled = digits.parse::().unwrap(); + if negative { + -unscaled + } else { + unscaled + } + }); + Arc::new( + Decimal128Array::from(vec![value]) + .with_precision_and_scale(t.precision() as u8, t.scale() as i8) + .unwrap(), + ) + } + _ => panic!("unexpected golden source type {data_type:?}"), + } +} + +pub(crate) fn external(value: &ArrayRef) -> Value { + if value.is_null(0) { + return Value::Null; + } + macro_rules! number { + ($ty:ty) => { + json!(value.as_primitive::<$ty>().value(0)) + }; + } + match value.data_type() { + arrow_schema::DataType::Int8 => number!(Int8Type), + arrow_schema::DataType::Int16 => number!(Int16Type), + arrow_schema::DataType::Int32 => number!(Int32Type), + arrow_schema::DataType::Int64 => number!(Int64Type), + arrow_schema::DataType::Float32 => { + json!(f64::from(value.as_primitive::().value(0))) + } + arrow_schema::DataType::Float64 => number!(Float64Type), + arrow_schema::DataType::Boolean => json!(value.as_boolean().value(0)), + arrow_schema::DataType::Utf8 => json!(value.as_string::().value(0)), + arrow_schema::DataType::Decimal128(_, _) => { + // Format target decimals via the same plain representation as Java. + let from = crate::arrow::arrow_fields_to_paimon(&[arrow_schema::Field::new( + "v", + value.data_type().clone(), + true, + )]) + .unwrap()[0] + .data_type() + .clone(); + let text: DataType = serde_json::from_value(json!("STRING")).unwrap(); + let strings = crate::arrow::cast_numeric(value, &from, &text) + .unwrap() + .unwrap(); + json!(strings.as_string::().value(0)) + } + other => panic!("unexpected golden target type {other:?}"), + } +} diff --git a/crates/paimon/src/arrow/cast_text.rs b/crates/paimon/src/arrow/cast_text.rs new file mode 100644 index 000000000..424ec7cb8 --- /dev/null +++ b/crates/paimon/src/arrow/cast_text.rs @@ -0,0 +1,249 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +//! BinaryStringUtils date/timestamp text and DateTimeUtils DATE formatting. + +use crate::common::date_time::{ + java_date_parts, local_to_utc_seconds, ymd_to_epoch_day, ymd_to_java_date, +}; +use crate::common::number::{java_decimal_digit, parse_java_integer}; + +fn invalid(text: &str) -> crate::Error { + crate::Error::DataInvalid { + message: format!("Invalid Java temporal value: '{text}'"), + source: None, + } +} + +fn numeric(text: &str) -> bool { + let text = text.strip_prefix('-').unwrap_or(text); + !text.is_empty() && text.chars().all(|ch| java_decimal_digit(ch).is_some()) +} + +pub(super) fn format_date(value: i32) -> String { + let (year, month, day) = java_date_parts(value); + let mut text = String::with_capacity(10); + for (value, divisors) in [ + (year, &[1000, 100, 10, 1][..]), + (month, &[10, 1][..]), + (day, &[10, 1][..]), + ] { + if !text.is_empty() { + text.push('-'); + } + for divisor in divisors { + text.push((i32::from(b'0') + value / divisor % 10) as u8 as char); + } + } + text +} + +fn days_in_month(year: i32, month: i32) -> i32 { + match month { + 2 => { + if year % 400 == 0 || year % 4 == 0 && year % 100 != 0 { + 29 + } else { + 28 + } + } + 4 | 6 | 9 | 11 => 30, + 1 | 3 | 5 | 7 | 8 | 10 | 12 => 31, + _ => 0, + } +} + +pub(super) fn parse_date(text: &str) -> crate::Result { + if numeric(text) { + return parse_java_integer(text, i64::from(i32::MIN), i64::from(i32::MAX)) + .map(|v| v as i32); + } + let date = match text.find(' ') { + Some(position) if position > 0 => &text[..position], + _ => text, + }; + let components = date.split('-').collect::>(); + if components.len() > 3 { + return Err(invalid(text)); + } + let mut parsed = [0, 1, 1]; + for (index, component) in components.iter().enumerate() { + let component = component.trim_matches(|ch| ch <= ' '); + if component.is_empty() || !component.bytes().all(|ch| ch.is_ascii_digit()) { + return Err(invalid(text)); + } + parsed[index] = component.parse::().map_err(|_| invalid(text))?; + } + let [year, month, day] = parsed; + if !(0..=9999).contains(&year) || day < 1 || day > days_in_month(year, month) { + return Err(invalid(text)); + } + Ok(ymd_to_java_date(year, month, day)) +} + +// DateTimeFormatter's consecutive optional patterns [MM][M], [dd][d], +// [HH][H], etc. may repeat a value, but conflicting repeated fields fail. +fn component(text: &str) -> Option> { + if text.is_empty() { + return Some(None); + } + if text.len() > 21 || !text.bytes().all(|ch| ch.is_ascii_digit()) { + return None; + } + if text.len() <= 2 { + return text.parse().ok().map(Some); + } + let first: i32 = text[..2].parse().ok()?; + let repeated: i32 = text[2..].parse().ok()?; + (first == repeated).then_some(Some(first)) +} + +fn time_components(text: &str, space: bool) -> Option<[Option; 4]> { + let parts = text.split(':').collect::>(); + if parts.len() < if space { 3 } else { 2 } || parts.len() > 3 { + return None; + } + let mut time = [None; 4]; + time[0] = component(parts[0])?; + time[1] = component(parts[1])?; + if parts.len() == 3 { + let (second, fraction) = parts[2] + .split_once('.') + .map_or((parts[2], None), |(s, f)| (s, Some(f))); + time[2] = component(second)?; + if let Some(fraction) = fraction { + if fraction.len() > 9 || !fraction.bytes().all(|ch| ch.is_ascii_digit()) { + return None; + } + time[3] = Some(if fraction.is_empty() { + 0 + } else { + fraction.parse::().ok()? * 10_i32.pow(9 - fraction.len() as u32) + }); + } + } + Some(time) +} + +pub(super) fn parse_timestamp( + text: &str, + precision: u32, + zone: Option<&jiff::tz::TimeZone>, +) -> crate::Result<(i64, u32)> { + let local = zone.is_some(); + if !local && numeric(text) { + let ticks = parse_java_integer(text, i64::MIN, i64::MAX)?; + return Ok(match precision { + 0 => (ticks.wrapping_mul(1000), 0), + 3 => (ticks, 0), + 6 => ( + ticks.div_euclid(1000), + (ticks.rem_euclid(1000) * 1000) as u32, + ), + 9 => ( + ticks.div_euclid(1_000_000), + ticks.rem_euclid(1_000_000) as u32, + ), + _ => return Err(invalid(text)), + }); + } + let first_time = text.find([' ', 'T']).unwrap_or(text.len()); + let date = &text[..first_time]; + let parts = date.split('-').collect::>(); + if parts.len() != 3 { + return Err(invalid(text)); + } + if parts[1].is_empty() && !parts[2].is_empty() { + return Err(invalid(text)); + } + let year_text = parts[0]; + let year_digits = year_text.strip_prefix('+').unwrap_or(year_text); + if !year_digits.bytes().all(|ch| ch.is_ascii_digit()) + || (if year_text.starts_with('+') { + year_digits.len() <= 4 || year_digits.len() > 19 + } else { + year_digits.len() != 4 + }) + { + return Err(invalid(text)); + } + let year: i32 = year_digits.parse().map_err(|_| invalid(text))?; + if !(1..=999_999_999).contains(&year) { + return Err(invalid(text)); + } + let complete_date = !parts[1].is_empty() && !parts[2].is_empty(); + let month = component(parts[1]) + .ok_or_else(|| invalid(text))? + .unwrap_or(1); + let day = component(parts[2]) + .ok_or_else(|| invalid(text))? + .unwrap_or(1); + if !(1..=12).contains(&month) || !(1..=31).contains(&day) { + return Err(invalid(text)); + } + // The formatter's SMART resolver clamps a day within 1..31 to month end. + let mut epoch_day = ymd_to_epoch_day(year, month, day.min(days_in_month(year, month))); + let mut time = [None; 4]; + let mut rest = &text[first_time..]; + if let Some(after_space) = rest.strip_prefix(' ') { + let end = after_space.find('T').unwrap_or(after_space.len()); + time = time_components(&after_space[..end], true).ok_or_else(|| invalid(text))?; + rest = &after_space[end..]; + } + if let Some(after_t) = rest.strip_prefix('T') { + let other = time_components(after_t, false).ok_or_else(|| invalid(text))?; + for (old, new) in time.iter_mut().zip(other) { + if old.is_some() && new.is_some() && *old != new { + return Err(invalid(text)); + } + if new.is_some() { + *old = new; + } + } + rest = ""; + } + if !rest.is_empty() { + return Err(invalid(text)); + } + if time[0] == Some(24) + && (time[1].is_none() && time[2].is_some() || time[2].is_none() && time[3].is_some()) + { + return Err(invalid(text)); + } + let [hour, minute, second, nanos] = time.map(|v| v.unwrap_or(0)); + if !(0..=24).contains(&hour) + || !(0..=59).contains(&minute) + || !(0..=59).contains(&second) + || hour == 24 && (minute != 0 || second != 0 || nanos != 0) + { + return Err(invalid(text)); + } + if hour == 24 && complete_date { + epoch_day += 1; + } + let seconds = epoch_day * 86_400 + i64::from(hour % 24 * 3600 + minute * 60 + second); + let nanos = nanos as u32 / 10_u32.pow(9 - precision) * 10_u32.pow(9 - precision); + let millis = if local { + local_to_utc_seconds(seconds, zone.unwrap())?.wrapping_mul(1000) + } else { + seconds.wrapping_mul(1000) + }; + Ok(( + millis.wrapping_add(i64::from(nanos / 1_000_000)), + nanos % 1_000_000, + )) +} diff --git a/crates/paimon/src/arrow/cast_width.rs b/crates/paimon/src/arrow/cast_width.rs new file mode 100644 index 000000000..940e6baa2 --- /dev/null +++ b/crates/paimon/src/arrow/cast_width.rs @@ -0,0 +1,74 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +//! Java character/byte widths shared by casts and authorization transforms. + +use arrow_array::{Array, ArrayRef}; +use std::sync::Arc; + +pub(crate) fn apply_declared_width(array: &ArrayRef, to: &crate::spec::DataType) -> ArrayRef { + use crate::spec::DataType as Paimon; + match to { + Paimon::VarChar(t) => fit_strings(array, t.length() as usize, false), + Paimon::Char(t) => fit_strings(array, t.length(), true), + Paimon::VarBinary(t) => fit_bytes(array, t.length() as usize, false), + Paimon::Binary(t) => fit_bytes(array, t.length(), true), + _ => Arc::clone(array), + } +} + +/// Counts characters, as Java does. +fn fit_strings(array: &ArrayRef, length: usize, pad: bool) -> ArrayRef { + let Some(strings) = array.as_any().downcast_ref::() else { + return Arc::clone(array); + }; + let fitted: arrow_array::StringArray = strings + .iter() + .map(|value| { + value.map(|value| { + let chars = value.chars().count(); + if chars > length { + value.chars().take(length).collect::() + } else if pad && chars < length { + format!("{value}{}", " ".repeat(length - chars)) + } else { + value.to_string() + } + }) + }) + .collect(); + Arc::new(fitted) +} + +fn fit_bytes(array: &ArrayRef, length: usize, pad: bool) -> ArrayRef { + let Some(bytes) = array.as_any().downcast_ref::() else { + return Arc::clone(array); + }; + let fitted: arrow_array::BinaryArray = bytes + .iter() + .map(|value| { + value.map(|value| { + let mut value = value.to_vec(); + if value.len() > length || pad { + value.resize(length, 0); + } + value + }) + }) + .collect(); + Arc::new(fitted) +} diff --git a/crates/paimon/src/arrow/evolution_cast.rs b/crates/paimon/src/arrow/evolution_cast.rs index 4648dd6fa..c0bd85d1b 100644 --- a/crates/paimon/src/arrow/evolution_cast.rs +++ b/crates/paimon/src/arrow/evolution_cast.rs @@ -22,11 +22,161 @@ use std::sync::Arc; use arrow_array::types::{ Decimal128Type, Float32Type, Float64Type, Int16Type, Int32Type, Int64Type, Int8Type, }; -use arrow_array::{cast::AsArray, ArrayRef, Int16Array, Int32Array, Int64Array, Int8Array}; +use arrow_array::{ + cast::AsArray, ArrayRef, BooleanArray, Float32Array, Float64Array, Int16Array, Int32Array, + Int64Array, Int8Array, +}; use arrow_schema::{DataType as ArrowType, TimeUnit}; use crate::spec::DataType; +/// Existing Python-supported numeric/Boolean CAST rules whose Java semantics +/// differ from generic Arrow casts. Shared by authorization and old-file reads. +pub(crate) fn supports_numeric_cast(from: &DataType, to: &DataType) -> bool { + let integer = |t: &DataType| { + matches!( + t, + DataType::TinyInt(_) | DataType::SmallInt(_) | DataType::Int(_) | DataType::BigInt(_) + ) + }; + let numeric = |t: &DataType| { + integer(t) + || matches!( + t, + DataType::Float(_) | DataType::Double(_) | DataType::Decimal(_) + ) + }; + let text = |t: &DataType| matches!(t, DataType::Char(_) | DataType::VarChar(_)); + numeric(from) && numeric(to) + || matches!(from, DataType::Boolean(_)) + && numeric(to) + && !matches!(to, DataType::Decimal(_)) + || text(from) && (integer(to) || matches!(to, DataType::Boolean(_) | DataType::Decimal(_))) + || integer(from) && matches!(to, DataType::Boolean(_)) + || matches!(from, DataType::Decimal(_)) && text(to) +} + +pub(crate) fn cast_numeric( + source: &ArrayRef, + from: &DataType, + to: &DataType, +) -> crate::Result> { + if !supports_numeric_cast(from, to) { + return Ok(None); + } + // Old files can store a logical STRING as LargeUtf8 or Utf8View. Resolve + // that physical representation before typed access instead of panicking. + let normalized; + let source = if matches!(from, DataType::Char(_) | DataType::VarChar(_)) + && source.data_type() != &ArrowType::Utf8 + { + normalized = arrow_cast::cast(source, &ArrowType::Utf8) + .map_err(|error| invalid_numeric(error.to_string()))?; + &normalized + } else { + source + }; + if let Some(decimal) = super::evolution_decimal::cast_decimal(source, from, to)? { + return Ok(Some(decimal)); + } + let target = super::paimon_type_to_arrow(to)?; + let text = matches!(from, DataType::Char(_) | DataType::VarChar(_)); + if text && matches!(to, DataType::Boolean(_)) { + let values = source + .as_string::() + .iter() + .map(|value| { + value + .map(|value| match value.to_ascii_lowercase().as_str() { + "t" | "true" | "y" | "yes" | "1" => Ok(true), + "f" | "false" | "n" | "no" | "0" => Ok(false), + _ => Err(invalid_numeric(format!( + "Cannot parse '{value}' as BOOLEAN" + ))), + }) + .transpose() + }) + .collect::>>()?; + return Ok(Some(Arc::new(BooleanArray::from(values)))); + } + let integral = matches!( + target, + ArrowType::Int8 | ArrowType::Int16 | ArrowType::Int32 | ArrowType::Int64 + ); + if text && integral { + let (min, max) = match target { + ArrowType::Int8 => (i64::from(i8::MIN), i64::from(i8::MAX)), + ArrowType::Int16 => (i64::from(i16::MIN), i64::from(i16::MAX)), + ArrowType::Int32 => (i64::from(i32::MIN), i64::from(i32::MAX)), + _ => (i64::MIN, i64::MAX), + }; + let values = source + .as_string::() + .iter() + .map(|value| { + value + .map(|value| crate::common::number::parse_java_integer(value, min, max)) + .transpose() + }) + .collect::>>()?; + return arrow_cast::cast(&(Arc::new(Int64Array::from(values)) as ArrayRef), &target) + .map(Some) + .map_err(|error| invalid_numeric(error.to_string())); + } + if integral && !matches!(from, DataType::Boolean(_)) { + return numeric_to_integer(source, &target).map(Some); + } + if let DataType::Decimal(decimal) = from { + if matches!(to, DataType::Char(_) | DataType::VarChar(_)) { + let strings = super::evolution_decimal::decimal_to_string(source)?; + return Ok(Some(super::apply_declared_width(&strings, to))); + } + // DecimalUtils.doubleValue divides the compact long by its scale; + // only wide decimals use BigDecimal.doubleValue. FLOAT rounds that + // double rather than the decimal coefficient directly. + let values: Vec> = if decimal.precision() <= 18 { + let divisor = 10_f64.powi(decimal.scale() as i32); + source + .as_primitive::() + .iter() + .map(|value| value.map(|value| value as f64 / divisor)) + .collect() + } else { + let strings = super::evolution_decimal::decimal_to_string(source)?; + strings + .as_string::() + .iter() + .map(|value| { + value + .map(|value| { + value + .parse::() + .map_err(|_| invalid_numeric("Invalid DECIMAL value")) + }) + .transpose() + }) + .collect::>>()? + }; + return Ok(Some(match target { + ArrowType::Float32 => Arc::new(Float32Array::from_iter( + values.into_iter().map(|v| v.map(|v| v as f32)), + )) as ArrayRef, + ArrowType::Float64 => Arc::new(Float64Array::from(values)) as ArrayRef, + _ => unreachable!("validated DECIMAL numeric target"), + })); + } + arrow_cast::cast(source, &target) + .map(Some) + .map_err(|error| invalid_numeric(error.to_string())) +} + +fn invalid_numeric(message: impl Into) -> crate::Error { + crate::Error::DataInvalid { + message: message.into(), + source: None, + } +} + /// Java Number narrowing keeps low bits for integers. Floating-point values /// first truncate and saturate to int/long, then narrow to byte/short. DECIMAL /// truncates its fraction before BigDecimal.longValue keeps the low 64 bits. @@ -213,6 +363,73 @@ mod tests { use crate::spec::{LocalZonedTimestampType, TimestampType}; use arrow_array::{Decimal128Array, Float32Array, Float64Array}; + #[test] + fn physical_string_encodings_are_normalized_before_numeric_typed_access() { + use arrow_array::{LargeStringArray, StringViewArray}; + let from: DataType = serde_json::from_str("\"STRING\"").unwrap(); + for (target, values, expected) in [ + ( + "INT", + vec![ + Some("bad-prefix"), + Some("1.9"), + Some("-2.5"), + None, + Some("bad-suffix"), + ], + Arc::new(Int32Array::from(vec![Some(1), Some(-2), None])) as ArrayRef, + ), + ( + "BOOLEAN", + vec![ + Some("bad-prefix"), + Some("YES"), + Some("0"), + None, + Some("bad-suffix"), + ], + Arc::new(BooleanArray::from(vec![Some(true), Some(false), None])) as ArrayRef, + ), + ( + "DECIMAL(4,2)", + vec![ + Some("bad-prefix"), + Some("1.005"), + Some("99.995"), + None, + Some("bad-suffix"), + ], + Arc::new( + Decimal128Array::from(vec![Some(101), None, None]) + .with_precision_and_scale(4, 2) + .unwrap(), + ) as ArrayRef, + ), + ] { + let to: DataType = serde_json::from_value(serde_json::json!(target)).unwrap(); + for source in [ + Arc::new(LargeStringArray::from(values.clone())) as ArrayRef, + Arc::new(StringViewArray::from(values.clone())) as ArrayRef, + ] { + let result = + crate::arrow::nested_evolution::evolve_column(&source.slice(1, 3), &from, &to) + .unwrap(); + assert_eq!( + result.to_data(), + expected.to_data(), + "{target}: {:?}", + source.data_type() + ); + assert!(crate::arrow::nested_evolution::evolve_column( + &source.slice(0, 1), + &from, + &to + ) + .is_err()); + } + } + } + #[test] fn floating_point_narrowing_saturates_before_retaining_low_bits() { let values = vec![ diff --git a/crates/paimon/src/arrow/evolution_decimal.rs b/crates/paimon/src/arrow/evolution_decimal.rs index 548bf37a6..67c274611 100644 --- a/crates/paimon/src/arrow/evolution_decimal.rs +++ b/crates/paimon/src/arrow/evolution_decimal.rs @@ -21,8 +21,8 @@ use std::sync::Arc; use arrow_array::{ cast::AsArray, - types::{Float32Type, Float64Type}, - ArrayRef, Decimal128Array, + types::{Float32Type, Float64Type, Int64Type}, + ArrayRef, Decimal128Array, StringArray, }; use crate::common::number::java_double_decimal_text; @@ -61,6 +61,23 @@ pub(super) fn cast_decimal( .iter() .map(|v| v.map(|v| decimal_text(v, precision, scale)).transpose()) .collect::>>()?, + DataType::Decimal(_) => decimal_to_string(source)? + .as_string::() + .iter() + .map(|v| v.map(|v| decimal_text(v, precision, scale)).transpose()) + .collect::>>()?, + DataType::TinyInt(_) | DataType::SmallInt(_) | DataType::Int(_) | DataType::BigInt(_) => { + let integers = arrow_cast::cast(source, &arrow_schema::DataType::Int64) + .map_err(|error| invalid(error.to_string()))?; + integers + .as_primitive::() + .iter() + .map(|v| { + v.map(|v| decimal_text(&v.to_string(), precision, scale)) + .transpose() + }) + .collect::>>()? + } _ => return Ok(None), }; let values = values.into_iter().map(Option::flatten); @@ -70,6 +87,36 @@ pub(super) fn cast_decimal( Ok(Some(Arc::new(result))) } +/// Decimal.toString delegates to BigDecimal.toPlainString, including scaled zero. +pub(super) fn decimal_to_string(source: &ArrayRef) -> crate::Result { + let arrow_schema::DataType::Decimal128(_, scale) = source.data_type() else { + return Err(invalid("Expected DECIMAL array")); + }; + let scale = u32::try_from(*scale).map_err(|_| invalid("Invalid DECIMAL scale"))?; + let divisor = 10_u128.pow(scale); + Ok(Arc::new(StringArray::from_iter( + source + .as_primitive::() + .iter() + .map(|value| { + value.map(|value| { + let negative = if value < 0 { "-" } else { "" }; + let value = value.unsigned_abs(); + if scale == 0 { + format!("{negative}{value}") + } else { + format!( + "{negative}{}.{:0width$}", + value / divisor, + value % divisor, + width = scale as usize + ) + } + }) + }), + ))) +} + fn float_decimal(value: f64, precision: u32, scale: u32) -> crate::Result> { if !value.is_finite() { return Err(invalid("Non-finite decimal schema-evolution value")); @@ -81,6 +128,21 @@ fn float_decimal(value: f64, precision: u32, scale: u32) -> crate::Result