diff --git a/quill-sql/src/main/scala/io/getquill/context/QueryExecution.scala b/quill-sql/src/main/scala/io/getquill/context/QueryExecution.scala index fd06cfec..681ffa75 100644 --- a/quill-sql/src/main/scala/io/getquill/context/QueryExecution.scala +++ b/quill-sql/src/main/scala/io/getquill/context/QueryExecution.scala @@ -570,8 +570,9 @@ object PrepareDynamicExecution { matchingExternals: List[External], secondaryLifts: List[Planter[_, _, _]] = List() ): Either[String, (List[Planter[_, _, _]], List[Planter[_, _, _]])] = { - val encodeablesMap = - lifts.map(e => (e.uid, e)).toMap + + var encodeablesMap = + lifts.groupBy(_.uid) val secondaryEncodeablesMap = secondaryLifts.map(e => (e.uid, e)).toMap @@ -594,13 +595,16 @@ object PrepareDynamicExecution { case NotFound(uid) => s"NotFoundPlanter($uid)" } } - val sortedEncodeables = uidsOfScalarTags .map { uid => encodeablesMap.get(uid) match { - case Some(element) => UidStatus.Primary(uid, element) - case None => + case Some(head::Nil) => + UidStatus.Primary(uid, head) + case Some(head::tails) => + encodeablesMap += (uid, tails) + UidStatus.Primary(uid, head) + case _ => secondaryEncodeablesMap.get(uid) match { case Some(element) => UidStatus.Secondary(uid, element) case None => UidStatus.NotFound(uid) diff --git a/quill-sql/src/test/scala/io/getquill/issues/Issue318.scala b/quill-sql/src/test/scala/io/getquill/issues/Issue318.scala new file mode 100644 index 00000000..d4538c3c --- /dev/null +++ b/quill-sql/src/test/scala/io/getquill/issues/Issue318.scala @@ -0,0 +1,24 @@ +package io.getquill.issues + +import io.getquill.* + +case class Custom(name: String) + + + +class Issue318 extends Spec { + "reproduce" in { + val nameFilter = Seq("a", "b") + + val ctx = new SqlMirrorContext(MirrorSqlDialect, Literal) + import ctx._ + + val query = dynamicQuery[Custom].filter(v => + nameFilter.map(name => quote(sql"${v.name} == ${lift(name)}".asCondition)) + .reduce((l,r) => quote(l || r)) + ) + val sql = ctx.translate(query) + assert(sql.contains("'a'")) + assert(sql.contains("'b'")) + } +}