diff --git a/.sqlx/query-23c1c88674c09e208738ebdd705db4c30d6dba6e24ca6c7c7fbf06d49d40994f.json b/.sqlx/query-23c1c88674c09e208738ebdd705db4c30d6dba6e24ca6c7c7fbf06d49d40994f.json new file mode 100644 index 000000000..d520c5471 --- /dev/null +++ b/.sqlx/query-23c1c88674c09e208738ebdd705db4c30d6dba6e24ca6c7c7fbf06d49d40994f.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name FROM crates WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "23c1c88674c09e208738ebdd705db4c30d6dba6e24ca6c7c7fbf06d49d40994f" +} diff --git a/.sqlx/query-682dd9adacb3841d81633bb918bcfffb0d87d017a75e82b070ea493023a8d0f6.json b/.sqlx/query-682dd9adacb3841d81633bb918bcfffb0d87d017a75e82b070ea493023a8d0f6.json new file mode 100644 index 000000000..74ec96372 --- /dev/null +++ b/.sqlx/query-682dd9adacb3841d81633bb918bcfffb0d87d017a75e82b070ea493023a8d0f6.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT version FROM releases WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "version", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "682dd9adacb3841d81633bb918bcfffb0d87d017a75e82b070ea493023a8d0f6" +} diff --git a/migrations/20240519141105_crate-version-name-field-length.down.sql b/migrations/20240519141105_crate-version-name-field-length.down.sql index bcf3a5aea..e1ed843f3 100644 --- a/migrations/20240519141105_crate-version-name-field-length.down.sql +++ b/migrations/20240519141105_crate-version-name-field-length.down.sql @@ -1,2 +1,10 @@ +-- this reverse migration might fail when we have other records +-- referencing releases with longer names or versions. +-- If this has to be reverted we probably would have to manually run +-- db::delete::delete_crate and db::delete::delete_version for the releases +-- and crates. +DELETE FROM crates WHERE LENGTH(name) > 255; +DELETE FROM releases WHERE LENGTH(version) > 100; + ALTER TABLE crates ALTER COLUMN name TYPE VARCHAR(255); ALTER TABLE releases ALTER COLUMN version TYPE VARCHAR(100); diff --git a/src/db/add_package.rs b/src/db/add_package.rs index 6807df2b9..c5f92b493 100644 --- a/src/db/add_package.rs +++ b/src/db/add_package.rs @@ -606,6 +606,7 @@ mod test { use crate::registry_api::OwnerKind; use crate::test::*; use crate::utils::CargoMetadata; + use std::iter; use test_case::test_case; #[test] @@ -1110,4 +1111,42 @@ mod test { Ok(()) }) } + + #[test] + fn test_long_crate_name() { + async_wrapper(|env| async move { + let mut conn = env.async_db().await.async_conn().await; + + let name: String = iter::repeat("krate").take(100).collect(); + let crate_id = initialize_crate(&mut conn, &name).await?; + + let db_name = sqlx::query_scalar!("SELECT name FROM crates WHERE id = $1", crate_id) + .fetch_one(&mut *conn) + .await?; + + assert_eq!(db_name, name); + + Ok(()) + }) + } + + #[test] + fn test_long_relaase_version() { + async_wrapper(|env| async move { + let mut conn = env.async_db().await.async_conn().await; + + let crate_id = initialize_crate(&mut conn, "krate").await?; + let version: String = iter::repeat("version").take(100).collect(); + let release_id = initialize_release(&mut conn, crate_id, &version).await?; + + let db_version = + sqlx::query_scalar!("SELECT version FROM releases WHERE id = $1", release_id) + .fetch_one(&mut *conn) + .await?; + + assert_eq!(db_version, version); + + Ok(()) + }) + } }