Scala Slick-3.1.0 lib を使用しています。
TableQuery インスタンスを入力として受け取り、同じスリック フィルターを作成する汎用のスリック フィルター関数を作成するにはどうすればよいですか?
DBに格納されたデータを表すいくつかのケースクラス(たとえば2つ)があります。一部のフィールドは同じであるため、クラスは共通の祖先を継承する可能性があります。
case class FirstData(symbol: String,
date: Timestamp,
firstField: Double)
case class SecondData(symbol: String,
date: Timestamp,
secondField: String)
それらのそれぞれは、DB に独自の SQL テーブルを持ち、個別の SlickTable
クラスによって表されます。また、それらは同じ主キーを持っています:
class FirstDataTable(tag: Tag) extends Table[FirstData](tag, "firstData") {
def symbol = column[String]("symbol")
def date = column[Timestamp]("date")
def firstField= column[Double]("firstField")
def * = (symbol, date, firstField) <> ((FirstData.apply _).tupled, FirstData.unapply)
def pk = primaryKey("pk_firstData", (symbol, date))
}
class SecondDataTable(tag: Tag) extends Table[SecondData](tag, "secondData"){
def symbol = column[String]("symbol")
def date = column[Timestamp]("date")
def secondField= column[String]("secondField")
def * = (symbol, date, secondField) <> ((SecondData.apply _).tupled, SecondData.unapply)
def pk = primaryKey("pk_secondData", (symbol, date))
}
最後にTableQuery
、クラスは次のとおりです。
val firstDataTableQuery = TableQuery[FirstDataTable]
val secondDataTableQuery = TableQuery[SecondDataTable]
etc ...
firstDataTableQuery
orsecondDataTableQuery
を引数として取り、入力に対して同じ洗練されたクエリを作成する一般的な Slick フィルター クエリ関数を作成するにはどうすればよいですか 。共通のフィールドでのみフィルタリングするか、SQL テーブル表現で共通の列を別の方法でフィルタリングします。たとえば、次のようにします。
def filter(genericTableQuery: TableQuery) = {
genericTableQuery.filter { data => dataFilterFunction(data.symbol)
}.filter(_.date >= someDate).sortBy(data => data.date.asc)
}
val firstTableResult = filter(firstDataTableQuery)
val seconfTableResult = filter(secondDataTableQuery)
etc ...
このトピックを調べましたが、まだ解決策を見つけることができませんでした: