2016-03-29 32 views
0

'daki bir veritabanı sırasından sonuç elde etme Slick 3.0'ın DBIO.sequence() yöntemine parametre olarak iletilen eylemler dizisinin bir parçası olarak yürütülen bir sorgunun sonucunu almaya çalışıyorum. Aşağıda, aynı kod snippet'i var.Slick 3.0.0

val query = for { 
(tt, th) <- tmpTrades join TableQuery[TrdHeader] on (_.tradeNum === _.tradeNum) 
} yield (tt.tradeNum, th.internalInd, th.tradeStatusInd, th.tradeDt, th.tradeInputDt, th.lastModifyDt) 

val queryAction = query.result 

val actions = Seq(tmpTrades.schema.create, tmpTrades ++= trades.toSeq: _*, queryAction, tmpTrades.schema.drop) 

val resultFuture = db.run(DBIO.sequence(actions)) 

Ben sorgunun verim maddesi karşılık gelen altı özelliklerin bir demet olarak (eylemler) DBIO.sequence sonucunu istiyor ve değişken resultFuture atayın. Nasıl aynı şeyi yapabilirim?

Teşekkürler.

cevap

0

Sen flatMap yerine DBIO.sequence kullanmalıdır:

val myAction = tmpTrades.schema.create.flatMap { _ => 
    tmpTrades ++= trades.toSeq 
}.flatMap { _ => 
    queryAction 
}.flatMap { queryResult => 
    // Return the result at the end. 
    tmpTrades.schema.drop.map { _ => queryResult } 
} 

db.run(myAction.transactionally) 

Veya aynı şeyi bir for-yield olarak:

val myAction = for { 
    _ <- tmpTrades.schema.create 
    _ <- (tmpTrades ++= trades.toSeq) 
    queryResult <- queryAction 
    _ <- tmpTrades.schema.drop 
} yield queryResult 

db.run(myAction.transactionally)