Skip to content

Commit

Permalink
Test for Postgres date-time types
Browse files Browse the repository at this point in the history
Signed-off-by: itowlson <ivan.towlson@fermyon.com>
  • Loading branch information
itowlson committed Oct 17, 2024
1 parent d8e9b6f commit b17f132
Showing 1 changed file with 41 additions and 6 deletions.
47 changes: 41 additions & 6 deletions tests/test-components/components/outbound-postgres/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use helper::{ensure, ensure_eq, ensure_matches, ensure_ok};

use bindings::fermyon::spin2_0_0::{postgres, rdbms_types};
use bindings::spin::postgres::postgres;

helper::define_component!(Component);
const DB_URL_ENV: &str = "DB_URL";
Expand All @@ -21,15 +21,19 @@ impl Component {

let rowset = ensure_ok!(numeric_types(&conn));
ensure!(rowset.rows.iter().all(|r| r.len() == 12));
ensure_matches!(rowset.rows[0][11], rdbms_types::DbValue::Floating64(f) if f == 1.0);
ensure_matches!(rowset.rows[0][11], postgres::DbValue::Floating64(f) if f == 1.0);

let rowset = ensure_ok!(character_types(&conn));
ensure!(rowset.rows.iter().all(|r| r.len() == 3));
ensure!(matches!(rowset.rows[0][0], rdbms_types::DbValue::Str(ref s) if s == "rvarchar"));
ensure!(matches!(rowset.rows[0][0], postgres::DbValue::Str(ref s) if s == "rvarchar"));

let rowset = ensure_ok!(date_time_types(&conn));
ensure!(rowset.rows.iter().all(|r| r.len() == 3));
ensure_matches!(rowset.rows[0][0], postgres::DbValue::Date((y, m, d)) if y == 2525 && m == 12 && d == 25);

let rowset = ensure_ok!(nullable(&conn));
ensure!(rowset.rows.iter().all(|r| r.len() == 1));
ensure!(matches!(rowset.rows[0][0], rdbms_types::DbValue::DbNull));
ensure!(matches!(rowset.rows[0][0], postgres::DbValue::DbNull));

let pid1 = format!("{:?}", ensure_ok!(pg_backend_pid(&conn)));
let pid2 = format!("{:?}", ensure_ok!(pg_backend_pid(&conn)));
Expand Down Expand Up @@ -117,6 +121,37 @@ fn character_types(conn: &postgres::Connection) -> Result<postgres::RowSet, post
conn.query(sql, &[])
}

fn date_time_types(conn: &postgres::Connection) -> Result<postgres::RowSet, postgres::Error> {
let create_table_sql = r#"
CREATE TEMPORARY TABLE test_date_time_types (
rdate date NOT NULL,
rtime time NOT NULL,
rtimestamp timestamp NOT NULL
);
"#;

conn.execute(create_table_sql, &[])?;

let insert_sql = r#"
INSERT INTO test_date_time_types
(rdate, rtime, rtimestamp)
VALUES
(date '2525-12-25', time '04:05:06.789', timestamp '1989-11-24 01:02:03');
"#;

conn.execute(insert_sql, &[])?;

let sql = r#"
SELECT
rdate,
rtime,
rtimestamp
FROM test_date_time_types;
"#;

conn.query(sql, &[])
}

fn nullable(conn: &postgres::Connection) -> Result<postgres::RowSet, postgres::Error> {
let create_table_sql = r#"
CREATE TEMPORARY TABLE test_nullable (
Expand All @@ -133,7 +168,7 @@ fn nullable(conn: &postgres::Connection) -> Result<postgres::RowSet, postgres::E
($1);
"#;

conn.execute(insert_sql, &[rdbms_types::ParameterValue::DbNull])?;
conn.execute(insert_sql, &[postgres::ParameterValue::DbNull])?;

let sql = r#"
SELECT
Expand All @@ -144,7 +179,7 @@ fn nullable(conn: &postgres::Connection) -> Result<postgres::RowSet, postgres::E
conn.query(sql, &[])
}

fn pg_backend_pid(conn: &postgres::Connection) -> Result<rdbms_types::DbValue, postgres::Error> {
fn pg_backend_pid(conn: &postgres::Connection) -> Result<postgres::DbValue, postgres::Error> {
let sql = "SELECT pg_backend_pid()";

let rowset = conn.query(sql, &[])?;
Expand Down

0 comments on commit b17f132

Please sign in to comment.