From 9cbb659439c58107b835a7251ef8dad94bc111c1 Mon Sep 17 00:00:00 2001 From: Aaron Loucks Date: Sat, 8 Feb 2020 14:35:40 -0500 Subject: [PATCH] Fetch migration version as i64 instead of i32 CockroachDB defaults `INT` fields to `INT8` (64bit), which differs from the postgres behavior. The rust postgres driver panics when fetching the version number with the following message: error retrieving column 0: error deserializing column 0: cannot convert between the Rust type `i32` and the Postgres type `int8` Using `i64` instead of `i32` resolves the issue. --- refinery/src/drivers/postgres.rs | 5 ++++- refinery/src/drivers/tokio_postgres.rs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/refinery/src/drivers/postgres.rs b/refinery/src/drivers/postgres.rs index 4fc348ef..2ddc871a 100644 --- a/refinery/src/drivers/postgres.rs +++ b/refinery/src/drivers/postgres.rs @@ -10,7 +10,10 @@ fn query_applied_migrations( let rows = transaction.query(query, &[])?; let mut applied = Vec::new(); for row in rows.into_iter() { - let version: i32 = row.get(0); + let version: i32 = match row.try_get::<_, i32>(0) { + Ok(value) => value, + Err(_) => row.get::<_, i64>(0) as i32, + }; let applied_on: String = row.get(2); let applied_on = DateTime::parse_from_rfc3339(&applied_on) .unwrap() diff --git a/refinery/src/drivers/tokio_postgres.rs b/refinery/src/drivers/tokio_postgres.rs index 27cd9605..bb6c9348 100644 --- a/refinery/src/drivers/tokio_postgres.rs +++ b/refinery/src/drivers/tokio_postgres.rs @@ -12,7 +12,10 @@ async fn query_applied_migrations( let rows = transaction.query(query, &[]).await?; let mut applied = Vec::new(); for row in rows.into_iter() { - let version: i32 = row.get(0); + let version: i32 = match row.try_get::<_, i32>(0) { + Ok(value) => value, + Err(_) => row.get::<_, i64>(0) as i32, + }; let applied_on: String = row.get(2); let applied_on = DateTime::parse_from_rfc3339(&applied_on) .unwrap()