mod common;
use common::pgwire_harness::TestServer;
async fn create_table(server: &TestServer) {
server
.exec(
"CREATE COLLECTION t \
COLUMNS (id TEXT PRIMARY KEY, v INTEGER) \
WITH (engine='document_strict')",
)
.await
.unwrap();
}
#[tokio::test]
async fn count_star_reflects_point_delete_not_stale_cache() {
let srv = TestServer::start().await;
create_table(&srv).await;
srv.exec("INSERT INTO t (id, v) VALUES ('a', 1), ('b', 2), ('c', 3)")
.await
.unwrap();
let rows = srv.query_rows("SELECT COUNT(*) FROM t").await.unwrap();
assert_eq!(
rows[0].first().map(String::as_str),
Some("3"),
"COUNT(*) before delete must be 3, got {rows:?}"
);
srv.exec("DELETE FROM t WHERE id = 'b'").await.unwrap();
let rows = srv.query_rows("SELECT COUNT(*) FROM t").await.unwrap();
assert_eq!(
rows[0].first().map(String::as_str),
Some("2"),
"COUNT(*) after a point delete must drop to 2, not stay stale at 3, got {rows:?}"
);
}
#[tokio::test]
async fn count_star_reflects_bulk_delete_not_stale_cache() {
let srv = TestServer::start().await;
create_table(&srv).await;
srv.exec("INSERT INTO t (id, v) VALUES ('a', 1), ('b', 2), ('c', 3)")
.await
.unwrap();
let rows = srv.query_rows("SELECT COUNT(*) FROM t").await.unwrap();
assert_eq!(
rows[0].first().map(String::as_str),
Some("3"),
"COUNT(*) before delete must be 3, got {rows:?}"
);
srv.exec("DELETE FROM t WHERE v > 1").await.unwrap();
let rows = srv.query_rows("SELECT COUNT(*) FROM t").await.unwrap();
assert_eq!(
rows[0].first().map(String::as_str),
Some("1"),
"COUNT(*) after a bulk delete must drop to 1, not stay stale at 3, got {rows:?}"
);
}