use sqlx::{Postgres, Transaction};
use uuid::Uuid;
pub async fn next_revision(
transaction: &mut Transaction<'_, Postgres>,
owner_id: Uuid,
) -> Result<i64, sqlx::Error> {
sqlx::query_scalar(
"UPDATE sync_revisions
SET last_revision = last_revision + 1
WHERE owner_id = $1
RETURNING last_revision",
)
.bind(owner_id)
.fetch_one(&mut **transaction)
.await
}
pub async fn ensure_owner(
transaction: &mut Transaction<'_, Postgres>,
owner_id: Uuid,
) -> Result<(), sqlx::Error> {
sqlx::query(
"INSERT INTO sync_revisions (owner_id)
VALUES ($1)
ON CONFLICT (owner_id) DO NOTHING",
)
.bind(owner_id)
.execute(&mut **transaction)
.await
.map(|_| ())
}
pub async fn current_revision(
transaction: &mut Transaction<'_, Postgres>,
owner_id: Uuid,
) -> Result<Option<i64>, sqlx::Error> {
sqlx::query_scalar("SELECT last_revision FROM sync_revisions WHERE owner_id = $1")
.bind(owner_id)
.fetch_optional(&mut **transaction)
.await
}
pub async fn current_revision_for_update(
transaction: &mut Transaction<'_, Postgres>,
owner_id: Uuid,
) -> Result<Option<i64>, sqlx::Error> {
sqlx::query_scalar("SELECT last_revision FROM sync_revisions WHERE owner_id = $1 FOR UPDATE")
.bind(owner_id)
.fetch_optional(&mut **transaction)
.await
}