From 0cce28faccab200ed7d3b8bd7de689574a10749e Mon Sep 17 00:00:00 2001 From: Julius de Bruijn Date: Mon, 16 Mar 2020 10:20:46 +0100 Subject: [PATCH] Dedup IN values --- .../connectors/query-connector/src/filter/scalar.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/query-engine/connectors/query-connector/src/filter/scalar.rs b/query-engine/connectors/query-connector/src/filter/scalar.rs index b3943e8aced..78c499b5210 100644 --- a/query-engine/connectors/query-connector/src/filter/scalar.rs +++ b/query-engine/connectors/query-connector/src/filter/scalar.rs @@ -1,7 +1,7 @@ use super::Filter; use crate::compare::ScalarCompare; use prisma_models::{DataSourceFieldRef, ModelProjection, PrismaListValue, PrismaValue}; -use std::sync::Arc; +use std::{collections::BTreeSet, sync::Arc}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum ScalarProjection { @@ -31,11 +31,12 @@ impl ScalarFilter { } pub fn batched(self) -> Vec { - fn inner(list: PrismaListValue) -> Vec { + fn inner(mut list: PrismaListValue) -> Vec { + let dedup_list: BTreeSet<_> = list.drain(..).collect(); let mut batches = Vec::with_capacity(list.len() % BATCH_SIZE + 1); batches.push(Vec::with_capacity(BATCH_SIZE)); - for (idx, item) in list.into_iter().enumerate() { + for (idx, item) in dedup_list.into_iter().enumerate() { if idx != 0 && idx % BATCH_SIZE == 0 { batches.push(Vec::with_capacity(BATCH_SIZE)); }