#![cfg(any(feature = "libpq", feature = "rustls-tls"))]
use pg_walstream::PgReplicationConnection;
fn regular_conn_string() -> String {
std::env::var("DATABASE_URL_REGULAR").unwrap_or_else(|_| {
"postgresql://postgres:postgres@localhost:5432/test_walstream".to_string()
})
}
#[test]
#[ignore = "requires live PostgreSQL"]
fn test_get_bytes_bytea_lossless() {
let mut conn = PgReplicationConnection::connect(®ular_conn_string()).expect("connection");
let result = conn
.exec("SELECT '\\xDEADBEEF'::bytea")
.expect("SELECT bytea");
assert_eq!(result.ntuples(), 1);
let text = result.get_value(0, 0).expect("get_value");
let raw = result.get_bytes(0, 0).expect("get_bytes");
assert_eq!(raw, text.as_bytes());
assert_eq!(raw, b"\\xdeadbeef");
}
#[test]
#[ignore = "requires live PostgreSQL"]
fn test_get_bytes_null_is_none() {
let mut conn = PgReplicationConnection::connect(®ular_conn_string()).expect("connection");
let result = conn.exec("SELECT NULL::bytea").expect("SELECT NULL");
assert_eq!(result.ntuples(), 1);
assert_eq!(result.get_bytes(0, 0), None);
}
#[test]
#[ignore = "requires live PostgreSQL"]
fn test_get_bytes_empty_bytea() {
let mut conn = PgReplicationConnection::connect(®ular_conn_string()).expect("connection");
let result = conn.exec("SELECT ''::bytea").expect("SELECT empty bytea");
assert_eq!(result.ntuples(), 1);
let text = result.get_value(0, 0).expect("get_value");
let raw = result.get_bytes(0, 0).expect("get_bytes");
assert_eq!(raw, text.as_bytes());
assert_eq!(result.get_bytes(0, 0), Some(b"\\x".as_ref()));
}
#[test]
#[ignore = "requires live PostgreSQL"]
fn test_get_bytes_matches_get_value_for_text() {
let mut conn = PgReplicationConnection::connect(®ular_conn_string()).expect("connection");
let result = conn.exec("SELECT 'hello'::text").expect("SELECT text");
assert_eq!(result.ntuples(), 1);
let text = result.get_value(0, 0).expect("get_value");
assert_eq!(result.get_bytes(0, 0), Some("hello".as_bytes()));
assert_eq!(result.get_bytes(0, 0), Some(text.as_bytes()));
}
#[test]
#[ignore = "requires live PostgreSQL"]
fn test_get_bytes_multi_row() {
let mut conn = PgReplicationConnection::connect(®ular_conn_string()).expect("connection");
let result = conn
.exec("SELECT * FROM (VALUES ('\\xAA'::bytea), ('\\xBB'::bytea)) AS t(b)")
.expect("SELECT multi-row bytea");
assert_eq!(result.ntuples(), 2);
assert_eq!(result.get_bytes(0, 0), Some(b"\\xaa".as_ref()));
assert_eq!(result.get_bytes(1, 0), Some(b"\\xbb".as_ref()));
}
#[test]
#[ignore = "requires live PostgreSQL"]
fn test_get_bytes_out_of_bounds_live() {
let mut conn = PgReplicationConnection::connect(®ular_conn_string()).expect("connection");
let result = conn.exec("SELECT 'x'::bytea").expect("SELECT bytea");
assert_eq!(result.ntuples(), 1);
assert_eq!(result.get_bytes(5, 0), None);
assert_eq!(result.get_bytes(0, 5), None);
}