use stoolap::Database;
#[test]
fn test_timestamp_iso_millis_z() {
let db = Database::open("memory://ts_millis_z").unwrap();
db.execute(
"CREATE TABLE events (id INTEGER PRIMARY KEY, ts TIMESTAMP NOT NULL)",
(),
)
.unwrap();
db.execute(
"INSERT INTO events VALUES (1, '2024-01-15T14:30:00.000Z')",
(),
)
.unwrap();
let rows = db.query("SELECT ts FROM events WHERE id = 1", ()).unwrap();
let ts: String = rows.into_iter().next().unwrap().unwrap().get(0).unwrap();
assert!(ts.contains("2024-01-15"), "Expected date part, got: {}", ts);
assert!(ts.contains("14:30:00"), "Expected time part, got: {}", ts);
}
#[test]
fn test_timestamp_iso_millis_no_tz() {
let db = Database::open("memory://ts_millis_no_tz").unwrap();
db.execute(
"CREATE TABLE events (id INTEGER PRIMARY KEY, ts TIMESTAMP NOT NULL)",
(),
)
.unwrap();
db.execute(
"INSERT INTO events VALUES (1, '2024-01-15T14:30:00.000')",
(),
)
.unwrap();
let rows = db.query("SELECT ts FROM events WHERE id = 1", ()).unwrap();
let ts: String = rows.into_iter().next().unwrap().unwrap().get(0).unwrap();
assert!(ts.contains("2024-01-15"), "Expected date part, got: {}", ts);
assert!(ts.contains("14:30:00"), "Expected time part, got: {}", ts);
}
#[test]
fn test_timestamp_iso_micros_z() {
let db = Database::open("memory://ts_micros_z").unwrap();
db.execute(
"CREATE TABLE events (id INTEGER PRIMARY KEY, ts TIMESTAMP NOT NULL)",
(),
)
.unwrap();
db.execute(
"INSERT INTO events VALUES (1, '2024-01-15T14:30:00.123456Z')",
(),
)
.unwrap();
let rows = db.query("SELECT ts FROM events WHERE id = 1", ()).unwrap();
let ts: String = rows.into_iter().next().unwrap().unwrap().get(0).unwrap();
assert!(ts.contains("2024-01-15"), "Expected date part, got: {}", ts);
}
#[test]
fn test_timestamp_all_formats_roundtrip() {
let db = Database::open("memory://ts_all_formats").unwrap();
db.execute(
"CREATE TABLE events (id INTEGER PRIMARY KEY, ts TIMESTAMP NOT NULL)",
(),
)
.unwrap();
let formats = [
(1, "2024-01-15T14:30:00.000Z"), (2, "2024-01-15T14:30:00.000"), (3, "2024-01-15T14:30:00Z"), (4, "2024-01-15 14:30:00.000"), (5, "2024-01-15T14:30:00"), (6, "2024-01-15 14:30:00"), ];
let stmt = db.prepare("INSERT INTO events VALUES ($1, $2)").unwrap();
for (id, ts) in &formats {
stmt.execute((*id as i64, *ts)).unwrap();
}
let rows = db.query("SELECT COUNT(*) FROM events", ()).unwrap();
let count: i64 = rows.into_iter().next().unwrap().unwrap().get(0).unwrap();
assert_eq!(count, formats.len() as i64);
}