首页 > 解决方案 > Reusing queries with MappedProjection in slick

问题描述

How does one reuse complex queries with mapping to custom rows for query composition in slick?

Given some complex query with mapping.

case class ComplexQueryResult( someValue: SomeValue / * other values */)
val aComplexQuery =
  // many joins resulting in a complex query with a map
  // to convert the result into something more readable
  .map {
    case (/* complex touple */) =>
      ComplexQueryResult( /* value assignment */) <> ((ComplexQueryResult.apply _).tupled, ComplexQueryResult.unapply)
  }

The type of this query will be Query[MappedProjection[ComplexQueryResults, /* other query information */]

What I would like to do is reuse this query in another join, so that I can do:

val composedQuery =
  aComplexQuery
    .join(someOtherQuery)
    .on { case(complexQueryResult, /* result of someOtherQuery */) =>
      // << here lies the source of my confusion
    }

Unfortunately there seems to be no way to access the elements of a mapped projection to perform another join. How do I join such queries?

标签: scalaslick

解决方案


推荐阅读