From 6b77d2f12574b6ada2407ce911c74aa649bed372 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Fri, 29 Dec 2023 00:16:17 +0800 Subject: [PATCH] fix arrays in unique where param --- Cargo.lock | 8 ++++++++ crates/generator/src/models/where_params.rs | 17 ++++++++++++----- tests/issues/issue-417/.cargo/config.toml | 2 ++ tests/issues/issue-417/Cargo.toml | 10 ++++++++++ tests/issues/issue-417/prisma/schema.prisma | 18 ++++++++++++++++++ tests/issues/issue-417/src/lib.rs | 12 ++++++++++++ 6 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 tests/issues/issue-417/.cargo/config.toml create mode 100644 tests/issues/issue-417/Cargo.toml create mode 100644 tests/issues/issue-417/prisma/schema.prisma create mode 100644 tests/issues/issue-417/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index eeb0a8bf..a0c17396 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3025,6 +3025,14 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "issue-417" +version = "0.1.0" +dependencies = [ + "prisma-client-rust", + "serde", +] + [[package]] name = "itertools" version = "0.10.5" diff --git a/crates/generator/src/models/where_params.rs b/crates/generator/src/models/where_params.rs index 9b346345..d553d72b 100644 --- a/crates/generator/src/models/where_params.rs +++ b/crates/generator/src/models/where_params.rs @@ -64,7 +64,14 @@ impl Variant { field_name: field.name().to_string(), field_required_type: field .scalar_field_type() - .to_tokens(module_path, &FieldArity::Required, field.db) + .to_tokens( + module_path, + &match field.ast_field().arity { + FieldArity::Optional => FieldArity::Required, + a => a, + }, + field.db, + ) .unwrap(), read_filter_name: read_filter.name.to_string(), optional: field.ast_field().arity.is_optional(), @@ -644,9 +651,9 @@ pub fn field_module( let mut fields = idx.fields(); idx.is_unique() && fields.len() == 1 && fields.next().map(|f| f.field_id()) == Some(scalar_field.field_id()) }), - arity.is_required() + arity.is_optional() ) { - (true, _, _) | (_, true, true) => quote! { + (true, _, _) | (_, true, false) => quote! { pub fn equals>(value: #field_type) -> T { Equals(value).into() } @@ -657,12 +664,12 @@ pub fn field_module( } } }, - (_, true, false) => quote! { + (_, true, true) => quote! { pub fn equals>(value: T::Arg) -> T { T::from_arg(value) } }, - (_, _, _) => quote! { + (false, false, _) => quote! { pub fn equals>(value: #field_type) -> T { Equals(value).into() } diff --git a/tests/issues/issue-417/.cargo/config.toml b/tests/issues/issue-417/.cargo/config.toml new file mode 100644 index 00000000..a519672d --- /dev/null +++ b/tests/issues/issue-417/.cargo/config.toml @@ -0,0 +1,2 @@ +[alias] +prisma = "run -p prisma-cli --features postgresql --" diff --git a/tests/issues/issue-417/Cargo.toml b/tests/issues/issue-417/Cargo.toml new file mode 100644 index 00000000..99756cda --- /dev/null +++ b/tests/issues/issue-417/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "issue-417" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +prisma-client-rust = { workspace = true, features = ["postgresql", "migrations"], default-features = false } +serde.workspace = true diff --git a/tests/issues/issue-417/prisma/schema.prisma b/tests/issues/issue-417/prisma/schema.prisma new file mode 100644 index 00000000..1190f303 --- /dev/null +++ b/tests/issues/issue-417/prisma/schema.prisma @@ -0,0 +1,18 @@ +datasource db { + provider = "postgresql" + url = "postgres://postgres:postgrespw@localhost:55000" +} + +generator client { + provider = "cargo prisma" + output = "../src/db" + + // necessary since the generated file won't be at crate::prisma + module_path = "db" + client_format = "folder" +} + +model Item { + numericId BigInt @unique @default(autoincrement()) + path BigInt[] @unique +} diff --git a/tests/issues/issue-417/src/lib.rs b/tests/issues/issue-417/src/lib.rs new file mode 100644 index 00000000..7d8017c0 --- /dev/null +++ b/tests/issues/issue-417/src/lib.rs @@ -0,0 +1,12 @@ +#[allow(warnings, unused)] +mod db; + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test() { + let _: db::item::WhereParam = db::item::path::equals(vec![0, 1, 2, 3]); + } +}