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

comphead 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 be361fdd80 Port tests in timestamp.rs to sqllogictest (#8818)
be361fdd80 is described below

commit be361fdd8079a2f44da70f6af6e9d8eb3f7d0020
Author: Cancai Cai <[email protected]>
AuthorDate: Sun Jan 14 03:25:25 2024 +0800

    Port tests in timestamp.rs to sqllogictest (#8818)
---
 datafusion/core/tests/sql/timestamp.rs            | 464 ----------------------
 datafusion/sqllogictest/test_files/timestamps.slt |  53 +++
 2 files changed, 53 insertions(+), 464 deletions(-)

diff --git a/datafusion/core/tests/sql/timestamp.rs 
b/datafusion/core/tests/sql/timestamp.rs
index ada66503a1..e74857cb31 100644
--- a/datafusion/core/tests/sql/timestamp.rs
+++ b/datafusion/core/tests/sql/timestamp.rs
@@ -18,470 +18,6 @@
 use super::*;
 use std::ops::Add;
 
-#[tokio::test]
-async fn test_current_timestamp_expressions() -> Result<()> {
-    let t1 = chrono::Utc::now().timestamp();
-    let ctx = SessionContext::new();
-    let actual = execute(&ctx, "SELECT NOW(), NOW() as t2").await;
-    let res1 = actual[0][0].as_str();
-    let res2 = actual[0][1].as_str();
-    let t3 = Utc::now().timestamp();
-    let t2_naive = DateTime::parse_from_rfc3339(res1).unwrap();
-
-    let t2 = t2_naive.timestamp();
-    assert!(t1 <= t2 && t2 <= t3);
-    assert_eq!(res2, res1);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn test_now_in_same_stmt_using_sql_function() -> Result<()> {
-    let ctx = SessionContext::new();
-
-    let df1 = ctx.sql("select now(), now() as now2").await?;
-    let result = result_vec(&df1.collect().await?);
-    assert_eq!(result[0][0], result[0][1]);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn test_now_across_statements() -> Result<()> {
-    let ctx = SessionContext::new();
-
-    let actual1 = execute(&ctx, "SELECT NOW()").await;
-    let res1 = actual1[0][0].as_str();
-
-    let actual2 = execute(&ctx, "SELECT NOW()").await;
-    let res2 = actual2[0][0].as_str();
-
-    assert!(res1 < res2);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn test_now_across_statements_using_sql_function() -> Result<()> {
-    let ctx = SessionContext::new();
-
-    let df1 = ctx.sql("select now()").await?;
-    let rb1 = df1.collect().await?;
-    let result1 = result_vec(&rb1);
-    let res1 = result1[0][0].as_str();
-
-    let df2 = ctx.sql("select now()").await?;
-    let rb2 = df2.collect().await?;
-    let result2 = result_vec(&rb2);
-    let res2 = result2[0][0].as_str();
-
-    assert!(res1 < res2);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn test_now_dataframe_api() -> Result<()> {
-    let ctx = SessionContext::new();
-    let df = ctx.sql("select 1").await?; // use this to get a DataFrame
-    let df = df.select(vec![now(), now().alias("now2")])?;
-    let result = result_vec(&df.collect().await?);
-    assert_eq!(result[0][0], result[0][1]);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn test_now_dataframe_api_across_statements() -> Result<()> {
-    let ctx = SessionContext::new();
-    let df = ctx.sql("select 1").await?; // use this to get a DataFrame
-    let df = df.select(vec![now()])?;
-    let result = result_vec(&df.collect().await?);
-
-    let df = ctx.sql("select 1").await?;
-    let df = df.select(vec![now()])?;
-    let result2 = result_vec(&df.collect().await?);
-
-    assert_ne!(result[0][0], result2[0][0]);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn test_now_in_view() -> Result<()> {
-    let ctx = SessionContext::new();
-    let _df = ctx
-        .sql("create or replace view test_now as select now()")
-        .await?
-        .collect()
-        .await?;
-
-    let df = ctx.sql("select * from test_now").await?;
-    let result = result_vec(&df.collect().await?);
-
-    let df1 = ctx.sql("select * from test_now").await?;
-    let result2 = result_vec(&df1.collect().await?);
-
-    assert_ne!(result[0][0], result2[0][0]);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn timestamp_minmax() -> Result<()> {
-    let ctx = SessionContext::new();
-    let table_a = make_timestamp_tz_table::<TimestampMillisecondType>(None)?;
-    let table_b =
-        
make_timestamp_tz_table::<TimestampNanosecondType>(Some("+00:00".into()))?;
-    ctx.register_table("table_a", table_a)?;
-    ctx.register_table("table_b", table_b)?;
-
-    let sql = "SELECT MIN(table_a.ts), MAX(table_b.ts) FROM table_a, table_b";
-    let actual = execute_to_batches(&ctx, sql).await;
-    let expected = [
-        "+-------------------------+-----------------------------+",
-        "| MIN(table_a.ts)         | MAX(table_b.ts)             |",
-        "+-------------------------+-----------------------------+",
-        "| 2020-09-08T11:42:29.190 | 2020-09-08T13:42:29.190855Z |",
-        "+-------------------------+-----------------------------+",
-    ];
-    assert_batches_eq!(expected, &actual);
-
-    Ok(())
-}
-
-#[tokio::test]
-async fn timestamp_coercion() -> Result<()> {
-    {
-        let ctx = SessionContext::new();
-        let table_a =
-            
make_timestamp_tz_table::<TimestampSecondType>(Some("+00:00".into()))?;
-        let table_b =
-            
make_timestamp_tz_table::<TimestampMillisecondType>(Some("+00:00".into()))?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+----------------------+--------------------------+-------------------------+",
-            "| ts                   | ts                       | table_a.ts = 
table_b.ts |",
-            
"+----------------------+--------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29Z | 2020-09-08T13:42:29.190Z | true          
          |",
-            "| 2020-09-08T13:42:29Z | 2020-09-08T12:42:29.190Z | false         
          |",
-            "| 2020-09-08T13:42:29Z | 2020-09-08T11:42:29.190Z | false         
          |",
-            "| 2020-09-08T12:42:29Z | 2020-09-08T13:42:29.190Z | false         
          |",
-            "| 2020-09-08T12:42:29Z | 2020-09-08T12:42:29.190Z | true          
          |",
-            "| 2020-09-08T12:42:29Z | 2020-09-08T11:42:29.190Z | false         
          |",
-            "| 2020-09-08T11:42:29Z | 2020-09-08T13:42:29.190Z | false         
          |",
-            "| 2020-09-08T11:42:29Z | 2020-09-08T12:42:29.190Z | false         
          |",
-            "| 2020-09-08T11:42:29Z | 2020-09-08T11:42:29.190Z | true          
          |",
-            
"+----------------------+--------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampSecondType>()?;
-        let table_b = make_timestamp_table::<TimestampMicrosecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+---------------------+----------------------------+-------------------------+",
-            "| ts                  | ts                         | table_a.ts = 
table_b.ts |",
-            
"+---------------------+----------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29 | 2020-09-08T13:42:29.190855 | true         
           |",
-            "| 2020-09-08T13:42:29 | 2020-09-08T12:42:29.190855 | false        
           |",
-            "| 2020-09-08T13:42:29 | 2020-09-08T11:42:29.190855 | false        
           |",
-            "| 2020-09-08T12:42:29 | 2020-09-08T13:42:29.190855 | false        
           |",
-            "| 2020-09-08T12:42:29 | 2020-09-08T12:42:29.190855 | true         
           |",
-            "| 2020-09-08T12:42:29 | 2020-09-08T11:42:29.190855 | false        
           |",
-            "| 2020-09-08T11:42:29 | 2020-09-08T13:42:29.190855 | false        
           |",
-            "| 2020-09-08T11:42:29 | 2020-09-08T12:42:29.190855 | false        
           |",
-            "| 2020-09-08T11:42:29 | 2020-09-08T11:42:29.190855 | true         
           |",
-            
"+---------------------+----------------------------+-------------------------+",
-
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampSecondType>()?;
-        let table_b = make_timestamp_table::<TimestampNanosecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+---------------------+----------------------------+-------------------------+",
-            "| ts                  | ts                         | table_a.ts = 
table_b.ts |",
-            
"+---------------------+----------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29 | 2020-09-08T13:42:29.190855 | true         
           |",
-            "| 2020-09-08T13:42:29 | 2020-09-08T12:42:29.190855 | false        
           |",
-            "| 2020-09-08T13:42:29 | 2020-09-08T11:42:29.190855 | false        
           |",
-            "| 2020-09-08T12:42:29 | 2020-09-08T13:42:29.190855 | false        
           |",
-            "| 2020-09-08T12:42:29 | 2020-09-08T12:42:29.190855 | true         
           |",
-            "| 2020-09-08T12:42:29 | 2020-09-08T11:42:29.190855 | false        
           |",
-            "| 2020-09-08T11:42:29 | 2020-09-08T13:42:29.190855 | false        
           |",
-            "| 2020-09-08T11:42:29 | 2020-09-08T12:42:29.190855 | false        
           |",
-            "| 2020-09-08T11:42:29 | 2020-09-08T11:42:29.190855 | true         
           |",
-            
"+---------------------+----------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampMillisecondType>()?;
-        let table_b = make_timestamp_table::<TimestampSecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+-------------------------+---------------------+-------------------------+",
-            "| ts                      | ts                  | table_a.ts = 
table_b.ts |",
-            
"+-------------------------+---------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T13:42:29 | true            
        |",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T12:42:29 | false           
        |",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T11:42:29 | false           
        |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T13:42:29 | false           
        |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T12:42:29 | true            
        |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T11:42:29 | false           
        |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T13:42:29 | false           
        |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T12:42:29 | false           
        |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T11:42:29 | true            
        |",
-            
"+-------------------------+---------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampMillisecondType>()?;
-        let table_b = make_timestamp_table::<TimestampMicrosecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+-------------------------+----------------------------+-------------------------+",
-            "| ts                      | ts                         | 
table_a.ts = table_b.ts |",
-            
"+-------------------------+----------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T13:42:29.190855 | true     
               |",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T12:42:29.190855 | false    
               |",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T11:42:29.190855 | false    
               |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T13:42:29.190855 | false    
               |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T12:42:29.190855 | true     
               |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T11:42:29.190855 | false    
               |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T13:42:29.190855 | false    
               |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T12:42:29.190855 | false    
               |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T11:42:29.190855 | true     
               |",
-            
"+-------------------------+----------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampMillisecondType>()?;
-        let table_b = make_timestamp_table::<TimestampNanosecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+-------------------------+----------------------------+-------------------------+",
-            "| ts                      | ts                         | 
table_a.ts = table_b.ts |",
-            
"+-------------------------+----------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T13:42:29.190855 | true     
               |",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T12:42:29.190855 | false    
               |",
-            "| 2020-09-08T13:42:29.190 | 2020-09-08T11:42:29.190855 | false    
               |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T13:42:29.190855 | false    
               |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T12:42:29.190855 | true     
               |",
-            "| 2020-09-08T12:42:29.190 | 2020-09-08T11:42:29.190855 | false    
               |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T13:42:29.190855 | false    
               |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T12:42:29.190855 | false    
               |",
-            "| 2020-09-08T11:42:29.190 | 2020-09-08T11:42:29.190855 | true     
               |",
-            
"+-------------------------+----------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampMicrosecondType>()?;
-        let table_b = make_timestamp_table::<TimestampSecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+----------------------------+---------------------+-------------------------+",
-            "| ts                         | ts                  | table_a.ts = 
table_b.ts |",
-            
"+----------------------------+---------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T13:42:29 | true         
           |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T12:42:29 | false        
           |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T11:42:29 | false        
           |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T13:42:29 | false        
           |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T12:42:29 | true         
           |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T11:42:29 | false        
           |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T13:42:29 | false        
           |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T12:42:29 | false        
           |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T11:42:29 | true         
           |",
-            
"+----------------------------+---------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampMicrosecondType>()?;
-        let table_b = make_timestamp_table::<TimestampMillisecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+----------------------------+-------------------------+-------------------------+",
-            "| ts                         | ts                      | 
table_a.ts = table_b.ts |",
-            
"+----------------------------+-------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T13:42:29.190 | true     
               |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T12:42:29.190 | false    
               |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T11:42:29.190 | false    
               |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T13:42:29.190 | false    
               |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T12:42:29.190 | true     
               |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T11:42:29.190 | false    
               |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T13:42:29.190 | false    
               |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T12:42:29.190 | false    
               |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T11:42:29.190 | true     
               |",
-            
"+----------------------------+-------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampMicrosecondType>()?;
-        let table_b = make_timestamp_table::<TimestampNanosecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+----------------------------+----------------------------+-------------------------+",
-            "| ts                         | ts                         | 
table_a.ts = table_b.ts |",
-            
"+----------------------------+----------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T13:42:29.190855 | true  
                  |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T12:42:29.190855 | false 
                  |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T11:42:29.190855 | false 
                  |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T13:42:29.190855 | false 
                  |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T12:42:29.190855 | true  
                  |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T11:42:29.190855 | false 
                  |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T13:42:29.190855 | false 
                  |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T12:42:29.190855 | false 
                  |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T11:42:29.190855 | true  
                  |",
-            
"+----------------------------+----------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampNanosecondType>()?;
-        let table_b = make_timestamp_table::<TimestampSecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+----------------------------+---------------------+-------------------------+",
-            "| ts                         | ts                  | table_a.ts = 
table_b.ts |",
-            
"+----------------------------+---------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T13:42:29 | true         
           |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T12:42:29 | false        
           |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T11:42:29 | false        
           |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T13:42:29 | false        
           |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T12:42:29 | true         
           |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T11:42:29 | false        
           |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T13:42:29 | false        
           |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T12:42:29 | false        
           |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T11:42:29 | true         
           |",
-            
"+----------------------------+---------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampNanosecondType>()?;
-        let table_b = make_timestamp_table::<TimestampMillisecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+----------------------------+-------------------------+-------------------------+",
-            "| ts                         | ts                      | 
table_a.ts = table_b.ts |",
-            
"+----------------------------+-------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T13:42:29.190 | true     
               |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T12:42:29.190 | false    
               |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T11:42:29.190 | false    
               |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T13:42:29.190 | false    
               |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T12:42:29.190 | true     
               |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T11:42:29.190 | false    
               |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T13:42:29.190 | false    
               |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T12:42:29.190 | false    
               |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T11:42:29.190 | true     
               |",
-            
"+----------------------------+-------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    {
-        let ctx = SessionContext::new();
-        let table_a = make_timestamp_table::<TimestampNanosecondType>()?;
-        let table_b = make_timestamp_table::<TimestampMicrosecondType>()?;
-        ctx.register_table("table_a", table_a)?;
-        ctx.register_table("table_b", table_b)?;
-
-        let sql = "SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM 
table_a, table_b order by table_a.ts desc, table_b.ts desc";
-        let actual = execute_to_batches(&ctx, sql).await;
-        let expected = vec![
-            
"+----------------------------+----------------------------+-------------------------+",
-            "| ts                         | ts                         | 
table_a.ts = table_b.ts |",
-            
"+----------------------------+----------------------------+-------------------------+",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T13:42:29.190855 | true  
                  |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T12:42:29.190855 | false 
                  |",
-            "| 2020-09-08T13:42:29.190855 | 2020-09-08T11:42:29.190855 | false 
                  |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T13:42:29.190855 | false 
                  |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T12:42:29.190855 | true  
                  |",
-            "| 2020-09-08T12:42:29.190855 | 2020-09-08T11:42:29.190855 | false 
                  |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T13:42:29.190855 | false 
                  |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T12:42:29.190855 | false 
                  |",
-            "| 2020-09-08T11:42:29.190855 | 2020-09-08T11:42:29.190855 | true  
                  |",
-            
"+----------------------------+----------------------------+-------------------------+",
-        ];
-        assert_batches_eq!(expected, &actual);
-    }
-
-    Ok(())
-}
-
 #[tokio::test]
 async fn group_by_timestamp_millis() -> Result<()> {
     let ctx = SessionContext::new();
diff --git a/datafusion/sqllogictest/test_files/timestamps.slt 
b/datafusion/sqllogictest/test_files/timestamps.slt
index 8b0f50cedf..7829ce53ac 100644
--- a/datafusion/sqllogictest/test_files/timestamps.slt
+++ b/datafusion/sqllogictest/test_files/timestamps.slt
@@ -1894,3 +1894,56 @@ query B
 select arrow_cast(now(), 'Date64') < arrow_cast('2022-02-02 02:02:02', 
'Timestamp(Nanosecond, None)');
 ----
 false
+
+##########
+## Test query MAX Timestamp and MiN Timestamp
+##########
+
+statement ok
+create table table_a (val int, ts timestamp) as values (1, 
'2020-09-08T11:42:29.190'::timestamp), (2, '2000-02-01T00:00:00'::timestamp)
+
+query P
+SELECT MIN(table_a.ts) FROM table_a;
+----
+2000-02-01T00:00:00
+
+query P
+SELECT MAX(table_a.ts) FROM table_a;
+----
+2020-09-08T11:42:29.190
+
+statement ok
+drop table table_a
+
+##########
+## Test query MAX Timestamp and MiN Timestamp
+##########
+
+statement ok
+create table table_a (ts timestamp) as values 
+    ('2020-09-08T11:42:29Z'::timestamp), 
+    ('2020-09-08T12:42:29Z'::timestamp),
+    ('2020-09-08T13:42:29Z'::timestamp)
+
+statement ok
+create table table_b (ts timestamp) as values 
+    ('2020-09-08T11:42:29.190Z'::timestamp),
+    ('2020-09-08T13:42:29.190Z'::timestamp),
+    ('2020-09-08T12:42:29.190Z'::timestamp)
+
+query PPB
+SELECT table_a.ts, table_b.ts, table_a.ts = table_b.ts FROM table_a, table_b 
order by table_a.ts desc, table_b.ts desc
+----
+2020-09-08T13:42:29 2020-09-08T13:42:29.190 false
+2020-09-08T13:42:29 2020-09-08T12:42:29.190 false
+2020-09-08T13:42:29 2020-09-08T11:42:29.190 false
+2020-09-08T12:42:29 2020-09-08T13:42:29.190 false
+2020-09-08T12:42:29 2020-09-08T12:42:29.190 false
+2020-09-08T12:42:29 2020-09-08T11:42:29.190 false
+2020-09-08T11:42:29 2020-09-08T13:42:29.190 false
+2020-09-08T11:42:29 2020-09-08T12:42:29.190 false
+2020-09-08T11:42:29 2020-09-08T11:42:29.190 false
+
+
+
+

Reply via email to