This is an automated email from the ASF dual-hosted git repository.

jakevin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 684289c888 Port tests in set_variable.rs to sqllogictest (#6255)
684289c888 is described below

commit 684289c8880eae05888a9073e9a8a887a7f26ba8
Author: parkma99 <84610851+parkm...@users.noreply.github.com>
AuthorDate: Sat May 6 16:38:20 2023 +0800

    Port tests in set_variable.rs to sqllogictest (#6255)
---
 datafusion/core/tests/sql/mod.rs                   |   1 -
 datafusion/core/tests/sql/set_variable.rs          | 476 ---------------------
 .../sqllogictests/test_files/set_variable.slt      | 256 +++++++++++
 3 files changed, 256 insertions(+), 477 deletions(-)

diff --git a/datafusion/core/tests/sql/mod.rs b/datafusion/core/tests/sql/mod.rs
index cbccf333b3..cda01903c3 100644
--- a/datafusion/core/tests/sql/mod.rs
+++ b/datafusion/core/tests/sql/mod.rs
@@ -104,7 +104,6 @@ pub mod explain;
 pub mod information_schema;
 pub mod parquet_schema;
 pub mod partitioned_csv;
-pub mod set_variable;
 pub mod subqueries;
 #[cfg(feature = "unicode_expressions")]
 pub mod unicode;
diff --git a/datafusion/core/tests/sql/set_variable.rs 
b/datafusion/core/tests/sql/set_variable.rs
deleted file mode 100644
index b89264ebba..0000000000
--- a/datafusion/core/tests/sql/set_variable.rs
+++ /dev/null
@@ -1,476 +0,0 @@
-// 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 super::*;
-use arrow::util::pretty::pretty_format_batches;
-
-#[tokio::test]
-async fn set_variable_to_value() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    ctx.sql("SET datafusion.execution.batch_size to 1")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.batch_size")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------+---------+",
-        "| name                            | setting |",
-        "+---------------------------------+---------+",
-        "| datafusion.execution.batch_size | 1       |",
-        "+---------------------------------+---------+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_variable_to_value_with_equal_sign() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    ctx.sql("SET datafusion.execution.batch_size = 1")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.batch_size")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------+---------+",
-        "| name                            | setting |",
-        "+---------------------------------+---------+",
-        "| datafusion.execution.batch_size | 1       |",
-        "+---------------------------------+---------+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_variable_to_value_with_single_quoted_string() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    ctx.sql("SET datafusion.execution.batch_size to '1'")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.batch_size")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------+---------+",
-        "| name                            | setting |",
-        "+---------------------------------+---------+",
-        "| datafusion.execution.batch_size | 1       |",
-        "+---------------------------------+---------+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_variable_to_value_case_insensitive() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    ctx.sql("SET datafusion.EXECUTION.batch_size to '1'")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.batch_size")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------+---------+",
-        "| name                            | setting |",
-        "+---------------------------------+---------+",
-        "| datafusion.execution.batch_size | 1       |",
-        "+---------------------------------+---------+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_variable_unknown_variable() {
-    let ctx = SessionContext::new();
-
-    let err = plan_and_collect(&ctx, "SET aabbcc to '1'")
-        .await
-        .unwrap_err();
-    assert_eq!(
-        err.to_string(),
-        "External error: could not find config namespace for key \"aabbcc\""
-    );
-}
-
-#[tokio::test]
-async fn set_bool_variable() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    ctx.sql("SET datafusion.execution.coalesce_batches to true")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW 
datafusion.execution.coalesce_batches")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------------+---------+",
-        "| name                                  | setting |",
-        "+---------------------------------------+---------+",
-        "| datafusion.execution.coalesce_batches | true    |",
-        "+---------------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-
-    ctx.sql("SET datafusion.execution.coalesce_batches to 'false'")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW 
datafusion.execution.coalesce_batches")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------------+---------+",
-        "| name                                  | setting |",
-        "+---------------------------------------+---------+",
-        "| datafusion.execution.coalesce_batches | false   |",
-        "+---------------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_bool_variable_bad_value() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    let err = plan_and_collect(&ctx, "SET 
datafusion.execution.coalesce_batches to 1")
-        .await
-        .unwrap_err();
-
-    assert_eq!(
-        err.to_string(),
-        "Error parsing 1 as bool\ncaused by\nExternal error: provided string 
was not `true` or `false`"
-    );
-
-    let err = plan_and_collect(&ctx, "SET 
datafusion.execution.coalesce_batches to abc")
-        .await
-        .unwrap_err();
-
-    assert_eq!(
-        err.to_string(),
-        "Error parsing abc as bool\ncaused by\nExternal error: provided string 
was not `true` or `false`"
-    );
-}
-
-#[tokio::test]
-async fn set_u64_variable() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    ctx.sql("SET datafusion.execution.batch_size to 0")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.batch_size")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------+---------+",
-        "| name                            | setting |",
-        "+---------------------------------+---------+",
-        "| datafusion.execution.batch_size | 0       |",
-        "+---------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-
-    ctx.sql("SET datafusion.execution.batch_size to '1'")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.batch_size")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------+---------+",
-        "| name                            | setting |",
-        "+---------------------------------+---------+",
-        "| datafusion.execution.batch_size | 1       |",
-        "+---------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-
-    ctx.sql("SET datafusion.execution.batch_size to +2")
-        .await
-        .unwrap();
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.batch_size")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+---------------------------------+---------+",
-        "| name                            | setting |",
-        "+---------------------------------+---------+",
-        "| datafusion.execution.batch_size | 2       |",
-        "+---------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_u64_variable_bad_value() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    let err = plan_and_collect(&ctx, "SET datafusion.execution.batch_size to 
-1")
-        .await
-        .unwrap_err();
-
-    assert_eq!(
-        err.to_string(),
-        "Error parsing -1 as usize\ncaused by\nExternal error: invalid digit 
found in string"
-    );
-
-    let err = plan_and_collect(&ctx, "SET datafusion.execution.batch_size to 
abc")
-        .await
-        .unwrap_err();
-
-    assert_eq!(
-        err.to_string(),
-        "Error parsing abc as usize\ncaused by\nExternal error: invalid digit 
found in string"
-    );
-
-    let err = plan_and_collect(&ctx, "SET datafusion.execution.batch_size to 
0.1")
-        .await
-        .unwrap_err();
-
-    assert_eq!(
-        err.to_string(),
-        "Error parsing 0.1 as usize\ncaused by\nExternal error: invalid digit 
found in string"
-    );
-}
-
-#[tokio::test]
-async fn set_time_zone() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    plan_and_collect(&ctx, "SET datafusion.execution.time_zone = '+08:00'")
-        .await
-        .unwrap();
-
-    let result = plan_and_collect(&ctx, "SHOW datafusion.execution.time_zone")
-        .await
-        .unwrap();
-    let expected = vec![
-        "+--------------------------------+---------+",
-        "| name                           | setting |",
-        "+--------------------------------+---------+",
-        "| datafusion.execution.time_zone | +08:00  |",
-        "+--------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_time_zone_with_alias_variable_name() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    // TIME ZONE with space
-    plan_and_collect(&ctx, "SET TIME ZONE = '+08:00'")
-        .await
-        .unwrap();
-
-    let result = plan_and_collect(&ctx, "SHOW TIME ZONE").await.unwrap();
-    let expected = vec![
-        "+--------------------------------+---------+",
-        "| name                           | setting |",
-        "+--------------------------------+---------+",
-        "| datafusion.execution.time_zone | +08:00  |",
-        "+--------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-
-    // TIMEZONE without space
-    plan_and_collect(&ctx, "SET TIMEZONE = '+07:00'")
-        .await
-        .unwrap();
-
-    let result = plan_and_collect(&ctx, "SHOW TIMEZONE").await.unwrap();
-    let expected = vec![
-        "+--------------------------------+---------+",
-        "| name                           | setting |",
-        "+--------------------------------+---------+",
-        "| datafusion.execution.time_zone | +07:00  |",
-        "+--------------------------------+---------+",
-    ];
-    assert_batches_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_time_zone_good_time_zone_format() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    plan_and_collect(&ctx, "SET TIME ZONE = '+08:00'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-    let expected = vec![
-        "+-----------------------------+",
-        "| Utf8(\"2000-01-01T00:00:00\") |",
-        "+-----------------------------+",
-        "| 2000-01-01T08:00:00+08:00   |",
-        "+-----------------------------+",
-    ];
-    // this might break once https://github.com/apache/arrow-rs/issues/1936 
fixed
-    assert_batches_eq!(expected, &result);
-
-    plan_and_collect(&ctx, "SET TIME ZONE = '-08:00'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-    let expected = vec![
-        "+-----------------------------+",
-        "| Utf8(\"2000-01-01T00:00:00\") |",
-        "+-----------------------------+",
-        "| 1999-12-31T16:00:00-08:00   |",
-        "+-----------------------------+",
-    ];
-    // this might break once https://github.com/apache/arrow-rs/issues/1936 
fixed
-    assert_batches_eq!(expected, &result);
-
-    plan_and_collect(&ctx, "SET TIME ZONE = '+0800'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-    let expected = vec![
-        "+-----------------------------+",
-        "| Utf8(\"2000-01-01T00:00:00\") |",
-        "+-----------------------------+",
-        "| 2000-01-01T08:00:00+08:00   |",
-        "+-----------------------------+",
-    ];
-    // this might break once https://github.com/apache/arrow-rs/issues/1936 
fixed
-    assert_batches_eq!(expected, &result);
-
-    plan_and_collect(&ctx, "SET TIME ZONE = '+08'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-    let expected = vec![
-        "+-----------------------------+",
-        "| Utf8(\"2000-01-01T00:00:00\") |",
-        "+-----------------------------+",
-        "| 2000-01-01T08:00:00+08:00   |",
-        "+-----------------------------+",
-    ];
-    // this might break once https://github.com/apache/arrow-rs/issues/1936 
fixed
-    assert_batches_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn set_time_zone_bad_time_zone_format() {
-    let ctx =
-        
SessionContext::with_config(SessionConfig::new().with_information_schema(true));
-
-    plan_and_collect(&ctx, "SET TIME ZONE = '+08:00:00'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-    let err = pretty_format_batches(&result).err().unwrap().to_string();
-    assert_eq!(err, "Parser error: Invalid timezone \"+08:00:00\": '+08:00:00' 
is not a valid timezone");
-
-    plan_and_collect(&ctx, "SET TIME ZONE = '08:00'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-
-    let err = pretty_format_batches(&result).err().unwrap().to_string();
-    assert_eq!(
-        err,
-        "Parser error: Invalid timezone \"08:00\": '08:00' is not a valid 
timezone"
-    );
-
-    plan_and_collect(&ctx, "SET TIME ZONE = '08'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-
-    let err = pretty_format_batches(&result).err().unwrap().to_string();
-    assert_eq!(
-        err,
-        "Parser error: Invalid timezone \"08\": '08' is not a valid timezone"
-    );
-
-    // we support named timezones
-    plan_and_collect(&ctx, "SET TIME ZONE = 'Asia/Taipei'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-    let batch_pretty = pretty_format_batches(&result).unwrap().to_string();
-    assert_eq!(batch_pretty, "+-----------------------------+\n| 
Utf8(\"2000-01-01T00:00:00\") |\n+-----------------------------+\n| 
2000-01-01T08:00:00+08:00   |\n+-----------------------------+");
-
-    // this is invalid even after we support named time zone
-    plan_and_collect(&ctx, "SET TIME ZONE = 'Asia/Taipei2'")
-        .await
-        .unwrap();
-
-    // casting UTF-8 to TimestampTZ isn't supported yet, add Timestamp as the 
middle layer for now
-    let result =
-        plan_and_collect(&ctx, "SELECT 
'2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ")
-            .await
-            .unwrap();
-    let err = pretty_format_batches(&result).err().unwrap().to_string();
-    assert_eq!(err, "Parser error: Invalid timezone \"Asia/Taipei2\": 
'Asia/Taipei2' is not a valid timezone");
-}
diff --git a/datafusion/core/tests/sqllogictests/test_files/set_variable.slt 
b/datafusion/core/tests/sqllogictests/test_files/set_variable.slt
new file mode 100644
index 0000000000..3c276f346e
--- /dev/null
+++ b/datafusion/core/tests/sqllogictests/test_files/set_variable.slt
@@ -0,0 +1,256 @@
+# 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.
+
+# set variable to value
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET datafusion.execution.batch_size to 1
+
+query TT
+SHOW datafusion.execution.batch_size
+----
+datafusion.execution.batch_size 1
+
+# set variable to value with equal sign
+
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET datafusion.execution.batch_size = 1
+
+query TT
+SHOW datafusion.execution.batch_size
+----
+datafusion.execution.batch_size 1
+
+# set variable to value with single quoted string
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET datafusion.execution.batch_size to '1'
+
+query TT
+SHOW datafusion.execution.batch_size
+----
+datafusion.execution.batch_size 1
+
+# set variable to value case insensitive
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET datafusion.EXECUTION.batch_size to '1'
+
+query TT
+SHOW datafusion.execution.batch_size
+----
+datafusion.execution.batch_size 1
+
+# set variable unknown variable
+statement error DataFusion error: External error: could not find config 
namespace for key "aabbcc"
+SET aabbcc to '1'
+
+# set bool variable
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET datafusion.execution.coalesce_batches to true
+
+query TT
+SHOW datafusion.execution.coalesce_batches
+----
+datafusion.execution.coalesce_batches true
+
+statement ok
+SET datafusion.execution.coalesce_batches to 'false'
+
+query TT
+SHOW datafusion.execution.coalesce_batches
+----
+datafusion.execution.coalesce_batches false
+
+# set bool variable bad value
+
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement error DataFusion error: SQL error: ParserError\("Expected an SQL 
statement, found: caused"\)
+caused by
+External error: provided string was not `true` or `false`
+SET datafusion.execution.coalesce_batches to 1
+
+statement error DataFusion error: SQL error: ParserError\("Expected an SQL 
statement, found: caused"\)
+caused by
+External error: provided string was not `true` or `false`
+SET datafusion.execution.coalesce_batches to abc
+
+# set u64 variable
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET datafusion.execution.batch_size to 0
+
+query TT
+SHOW datafusion.execution.batch_size
+----
+datafusion.execution.batch_size 0
+
+statement ok
+SET datafusion.execution.batch_size to '1'
+
+query TT
+SHOW datafusion.execution.batch_size
+----
+datafusion.execution.batch_size 1
+
+statement ok
+SET datafusion.execution.batch_size to +2
+
+query TT
+SHOW datafusion.execution.batch_size
+----
+datafusion.execution.batch_size 2
+
+# set u64 variable bad value
+
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement error DataFusion error: SQL error: ParserError\("Expected an SQL 
statement, found: caused"\)
+caused by
+External error: invalid digit found in string
+SET datafusion.execution.batch_size to -1
+
+statement error DataFusion error: SQL error: ParserError\("Expected an SQL 
statement, found: caused"\)
+caused by
+External error: invalid digit found in string
+SET datafusion.execution.batch_size to abc
+
+statement error DataFusion error: SQL error: ParserError\("Expected an SQL 
statement, found: caused"\)
+caused by
+External error: invalid digit found in string
+SET datafusion.execution.batch_size to 0.1
+
+# set time zone
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET datafusion.execution.time_zone = '+08:00'
+
+query TT
+SHOW datafusion.execution.time_zone
+----
+datafusion.execution.time_zone +08:00
+
+# set time zone with alias variable name
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET TIME ZONE = '+08:00'
+
+query TT
+SHOW TIME ZONE
+----
+datafusion.execution.time_zone +08:00
+
+statement ok
+SET TIMEZONE = '+07:00'
+
+query TT
+SHOW TIMEZONE
+----
+datafusion.execution.time_zone +07:00
+
+# set time zone good time zone format
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET TIME ZONE = '+08:00'
+
+query P
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+----
+2000-01-01T08:00:00+08:00
+
+statement ok
+SET TIME ZONE = '-08:00'
+
+query P
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+----
+1999-12-31T16:00:00-08:00
+
+statement ok
+SET TIME ZONE = '+0800'
+
+query P
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+----
+2000-01-01T08:00:00+08:00
+
+statement ok
+SET TIME ZONE = '+08'
+
+query P
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+----
+2000-01-01T08:00:00+08:00
+
+# set time zone bad time zone format
+statement ok
+set datafusion.catalog.information_schema = true
+
+statement ok
+SET TIME ZONE = '+08:00:00'
+
+statement error Arrow error: Parser error: Invalid timezone "\+08:00:00": 
'\+08:00:00' is not a valid timezone
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+
+statement ok
+SET TIME ZONE = '08:00'
+
+statement error Arrow error: Parser error: Invalid timezone "08:00": '08:00' 
is not a valid timezone
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+
+statement ok
+SET TIME ZONE = '08'
+
+statement error Arrow error: Parser error: Invalid timezone "08": '08' is not 
a valid timezone
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+
+statement ok
+SET TIME ZONE = 'Asia/Taipei'
+
+query P
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ
+----
+2000-01-01T08:00:00+08:00
+
+statement ok
+SET TIME ZONE = 'Asia/Taipei2'
+
+statement error Arrow error: Parser error: Invalid timezone "Asia/Taipei2": 
'Asia/Taipei2' is not a valid timezone
+SELECT '2000-01-01T00:00:00'::TIMESTAMP::TIMESTAMPTZ

Reply via email to