2016-12-15 8 views
0

いくつかの条件に基づいて異なるクエリを実行したい場合や、空の結果セットを返すクエリを返す場合があります。Slickで空のクエリを作成する

def myQuery(something: Boolean): Query[A, B, Seq] = { 
    if(something) 
    for { 
     x <- table 
     y <- othertable 
     // ... 
    } yield a 
    else 
    Query.empty 
} 

しかし、Query.emptyのタイプはQuery[Unit, Unit, Seq]です。私はこの書き込みをする必要がありますする原因:

def myQuery(): Query[A, B, Seq] = { 
    if(something) 
    for { 
     x <- table 
     y <- othertable 
     // other logic yielding a moderatly complex `A` and `B` 
    } yield b 
    else 
    for { 
     x <- table 
     y <- othertable 
     // Parts of logic copy pasted 
     if false 
    } yield b 
} 

が正しく入力された空のQueryを生成する簡単/明確な方法はありますか?

答えて

2

戻り値の型としてOption[Query[A,B,Seq]]を使用することをお勧めしますが、それはあまりコンテキストがありません。

0

は、あなたが「こんにちは、スリック」アクティベーターテンプレートで

for { 
    x <- table 
    y <- othertable 
    ... 
    if something 
} yield b 

のように理解自身のためにあなたの状態を移動してみてくださいすることができます(オリジナルの答えが間違っていたので、編集した):

val q = for { 
    c <- coffees 
    if cond 
} yield c 

val future = db.run(q.result).map(println) 
Await.result(future, Duration.Inf) 

condtrueの場合、

背景ログ:info:Vector(Colombian、101,7.99,0,0)、(French_Roast、49,8.99,0,0)、(Espresso、150,9.99,0,0)、(Colombian_Decaf、 101,8.99,0,0)、(French_Roast_Decaf、49,9.99,0,0))

false

背景ログ:情報:ベクトル()

Coffeesテーブル定義は

です。 qの種類は正しく Query[Coffees, (String, Int, Double, Int, Int), Seq]

と推察される
class Coffees(tag: Tag) 
    extends Table[(String, Int, Double, Int, Int)](tag, "COFFEES") 

関連する問題