2016-03-29 2 views
0

Я пытаюсь получить результат запроса, который выполняется как часть последовательности действий, переданных в качестве параметра в метод DBIO.sequence() для Slick 3.0. Ниже приведен фрагмент кода для него.Получение результата из последовательности базы данных в 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)) 

Я хочу, чтобы результат DBIO.sequence (действия), как кортеж из шести атрибутов, соответствующих пункт выхода запроса и назначить его resultFuture переменного. Как я могу достичь того же?

Спасибо.

ответ

0

Вы должны использовать flatMap вместо DBIO.sequence:

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) 

Или то же самое, как for-yield:

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

db.run(myAction.transactionally) 

 Смежные вопросы

  • Нет связанных вопросов^_^