def query()

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*/ )
  }