Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

qe: fix prisma/13097 #3186

Merged
merged 1 commit into from Sep 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -1,5 +1,6 @@
mod max_integer;
mod prisma_10098;
mod prisma_13097;
mod prisma_10935;
mod prisma_12929;
mod prisma_14696;
Expand Down
@@ -0,0 +1,68 @@
use query_engine_tests::*;

#[test_suite(schema(schema), only(Postgres))]
mod prisma_13097 {
fn schema() -> String {
r#"
enum AppCategories {
calendar
messaging
payment
other
}
model App {
slug String @id @unique
categories AppCategories[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Opp {
slug String @id @unique
categories Boolean[]
}
"#
.to_owned()
}

#[connector_test]
async fn group_by_enum_array(runner: Runner) -> TestResult<()> {
// Insert some data first
run_query!(
runner,
r#"mutation { createManyApp(data: [{slug:"a",categories:[calendar,other]},{slug:"b",categories:[]},{slug:"c",categories:[calendar,other]},{slug:"d",categories:[messaging, payment]}]) { count } }"#
);

let result = run_query!(
runner,
r#"{groupByApp(by: [categories], orderBy: { categories: "desc" }) { _count { slug } categories }}"#
);
assert_eq!(result, "{\"data\":{\"groupByApp\":[{\"_count\":{\"slug\":1},\"categories\":[\"messaging\",\"payment\"]},{\"_count\":{\"slug\":2},\"categories\":[\"calendar\",\"other\"]},{\"_count\":{\"slug\":1},\"categories\":[]}]}}");

let result = run_query!(
runner,
r#"{groupByApp(by: [categories], orderBy: { categories: "asc" }) { _count { slug categories } }}"#
);
assert_eq!(result, "{\"data\":{\"groupByApp\":[{\"_count\":{\"slug\":1,\"categories\":1}},{\"_count\":{\"slug\":2,\"categories\":2}},{\"_count\":{\"slug\":1,\"categories\":1}}]}}");

Ok(())
}

#[connector_test]
async fn group_by_boolean_array(runner: Runner) -> TestResult<()> {
// Insert some data first
run_query!(
runner,
r#"mutation { createManyOpp(data: [{slug:"a",categories:[true,false]},{slug:"b",categories:[]},{slug:"c",categories:[false,true]},{slug:"d",categories:[true,false]}]) { count } }"#
);

let result = run_query!(
runner,
r#"{groupByOpp(by: [categories], orderBy: { categories: "desc" }) { _count { slug } categories }}"#
);
assert_eq!(result, "{\"data\":{\"groupByOpp\":[{\"_count\":{\"slug\":2},\"categories\":[true,false]},{\"_count\":{\"slug\":1},\"categories\":[false,true]},{\"_count\":{\"slug\":1},\"categories\":[]}]}}");

Ok(())
}
}
2 changes: 1 addition & 1 deletion query-engine/connectors/query-connector/src/interface.rs
Expand Up @@ -119,7 +119,7 @@ impl AggregationSelection {
AggregationSelection::Field(field) => vec![(
field.db_name().to_owned(),
field.type_identifier.clone(),
FieldArity::Required,
field.arity,
)],

AggregationSelection::Count { all, fields } => {
Expand Down
2 changes: 1 addition & 1 deletion query-engine/connectors/sql-query-connector/src/row.rs
Expand Up @@ -122,7 +122,7 @@ impl ToSqlRow for ResultRow {
}
}

pub fn row_value_to_prisma_value(p_value: Value, meta: ColumnMetadata<'_>) -> Result<PrismaValue, SqlError> {
fn row_value_to_prisma_value(p_value: Value, meta: ColumnMetadata<'_>) -> Result<PrismaValue, SqlError> {
let create_error = |value: &Value| {
let message = match meta.name() {
Some(name) => {
Expand Down