Fix duplicate search results

This commit is contained in:
Eike Kettner 2020-06-24 01:15:53 +02:00
parent 8e0282c25f
commit 7df77208fe

View File

@ -217,6 +217,7 @@ object QItem {
private def findItemsBase( private def findItemsBase(
q: Query, q: Query,
distinct: Boolean, distinct: Boolean,
moreCols: Seq[Fragment],
ctes: (String, Fragment)* ctes: (String, Fragment)*
): Fragment = { ): Fragment = {
val IC = RItem.Columns val IC = RItem.Columns
@ -230,29 +231,31 @@ object QItem {
val equipCols = List(REquipment.Columns.eid, REquipment.Columns.name) val equipCols = List(REquipment.Columns.eid, REquipment.Columns.name)
val finalCols = commas( val finalCols = commas(
IC.id.prefix("i").f, Seq(
IC.name.prefix("i").f, IC.id.prefix("i").f,
IC.state.prefix("i").f, IC.name.prefix("i").f,
coalesce(IC.itemDate.prefix("i").f, IC.created.prefix("i").f), IC.state.prefix("i").f,
IC.dueDate.prefix("i").f, coalesce(IC.itemDate.prefix("i").f, IC.created.prefix("i").f),
IC.source.prefix("i").f, IC.dueDate.prefix("i").f,
IC.incoming.prefix("i").f, IC.source.prefix("i").f,
IC.created.prefix("i").f, IC.incoming.prefix("i").f,
fr"COALESCE(a.num, 0)", IC.created.prefix("i").f,
OC.oid.prefix("o0").f, fr"COALESCE(a.num, 0)",
OC.name.prefix("o0").f, OC.oid.prefix("o0").f,
PC.pid.prefix("p0").f, OC.name.prefix("o0").f,
PC.name.prefix("p0").f, PC.pid.prefix("p0").f,
PC.pid.prefix("p1").f, PC.name.prefix("p0").f,
PC.name.prefix("p1").f, PC.pid.prefix("p1").f,
EC.eid.prefix("e1").f, PC.name.prefix("p1").f,
EC.name.prefix("e1").f, EC.eid.prefix("e1").f,
q.orderAsc match { EC.name.prefix("e1").f,
case Some(co) => q.orderAsc match {
coalesce(co(IC).prefix("i").f, IC.created.prefix("i").f) case Some(co) =>
case None => coalesce(co(IC).prefix("i").f, IC.created.prefix("i").f)
IC.created.prefix("i").f case None =>
} IC.created.prefix("i").f
}
) ++ moreCols
) )
val withItem = selectSimple(itemCols, RItem.table, IC.cid.is(q.collective)) val withItem = selectSimple(itemCols, RItem.table, IC.cid.is(q.collective))
@ -287,7 +290,7 @@ object QItem {
val OC = ROrganization.Columns val OC = ROrganization.Columns
val EC = REquipment.Columns val EC = REquipment.Columns
val query = findItemsBase(q, true) val query = findItemsBase(q, true, Seq.empty)
// inclusive tags are AND-ed // inclusive tags are AND-ed
val tagSelectsIncl = q.tagsInclude val tagSelectsIncl = q.tagsInclude
@ -395,7 +398,8 @@ object QItem {
val from = findItemsBase( val from = findItemsBase(
q, q,
false, true,
Seq(fr"tids.weight"),
("tids(item_id, weight)", fr"(VALUES" ++ values ++ fr")") ("tids(item_id, weight)", fr"(VALUES" ++ values ++ fr")")
) ++ ) ++
fr"INNER JOIN tids ON" ++ IC.id.prefix("i").f ++ fr" = tids.item_id" ++ fr"INNER JOIN tids ON" ++ IC.id.prefix("i").f ++ fr" = tids.item_id" ++