use anyhow::{bail, Context};
use tokio_postgres::types::Type;
use crate::action::State;
pub async fn run_version_check(
min_version: i32,
max_version: i32,
state: &State,
) -> Result<bool, anyhow::Error> {
let query = "SELECT mz_version_num()";
let stmt = state
.materialize
.pgclient
.prepare(query)
.await
.context("failed to prepare version-check query")?;
if stmt.columns().len() != 1 || *stmt.columns()[0].type_() != Type::INT4 {
bail!(
"version-check query must return exactly one int column, but is {}",
*stmt.columns()[0].type_()
);
}
let actual_version: i32 = state
.materialize
.pgclient
.query_one(&stmt, &[])
.await
.context("executing version-check query failed")?
.get(0);
Ok(actual_version < min_version || actual_version > max_version)
}