I'm trying to pass a query or action as a parameter to a method. The reason is I want to run the same actions on the result of different queries on the same table.
For example:
val query1 = listItems
val query2 = listItems.filter { x => x.id===1 }
And my method:
private def findListItems(query: Query[???]): Future[Foo] = { ... }
Turns I can't just pass query1 or query2 because they have different types (this is what my ide auto completes):
val query1: TableQuery[ListItems] = listItems
val query2: Query[ListItems, ListItems.TableElementType, Seq] = listItems.filter(_.listId===1)
Where moreover the ListItems in ListItems.TableElementType causes a compiler error: "not found: value ListItems".
I also tried to pass the action instead of the query to see if I have more luck, but this was not the case. The type is the same but ListItems.TableElementType still shows the error "not found: value ListItems".
val action1: DBIOAction[Seq[ListItems.TableElementType], ListItems.TableElementType, Effect.Read] = query1.result
val action2: DBIOAction[Seq[ListItems.TableElementType], ListItems.TableElementType, Effect.Read] = query2.result
How can I pass these queries or actions as parameter to a common method?
It's a bit hard not having the table definition, but I believe that you can pass both queries by having as a parameter type something like this:
The
_
in there should work but you can make it explicit by using the proper type of your table (i.e. the one you pass to theTable
constructor when you extend it in your definition).You can achieve the same with DBIOs, just use
DBIO[YourType]
as the parameter type (where againYourType
is the type that you are mapping in the table definition).