in newswires/app/db/FingerpostWireEntry.scala [361:416]
def query(
searchParams: SearchParams,
savedSearchParamList: List[SearchParams],
maybeTextSearch: Option[String],
maybeBeforeId: Option[Int],
maybeSinceId: Option[Int],
pageSize: Int = 250
): QueryResponse = DB readOnly { implicit session =>
val effectivePageSize = clamp(0, pageSize, 250)
val whereClause = buildWhereClause(
searchParams,
savedSearchParamList,
maybeBeforeId = maybeBeforeId,
maybeSinceId = maybeSinceId
)
val highlightsClause = maybeTextSearch match {
case Some(query) =>
sqls", ts_headline('english', ${syn.content}->>'body_text', websearch_to_tsquery('english', $query), 'StartSel=<mark>, StopSel=</mark>') AS ${syn.resultName.highlight}"
case None => sqls", '' AS ${syn.resultName.highlight}"
}
val query = sql"""| SELECT $selectAllStatement $highlightsClause
| FROM ${FingerpostWireEntry as syn}
| $whereClause
| ORDER BY ${FingerpostWireEntry.syn.ingestedAt} DESC
| LIMIT $effectivePageSize
| """.stripMargin
logger.info(s"QUERY: ${query.statement}; PARAMS: ${query.parameters}")
val results = query
.map(FingerpostWireEntry(syn.resultName))
.list()
.apply()
val countQuery =
sql"""| SELECT COUNT(*)
| FROM ${FingerpostWireEntry as syn}
| $whereClause
| """.stripMargin
logger.info(
s"COUNT QUERY: ${countQuery.statement}; PARAMS: ${countQuery.parameters}"
)
val totalCount: Long =
countQuery.map(_.long(1)).single().apply().getOrElse(0)
// val keywordCounts = getKeywords(additionalWhereClauses =
// commonWhereClauses
// ) // TODO do this in parallel
QueryResponse(results, totalCount /*, keywordCounts*/ )
}