2015-06-15 24 views
8

W Slick 2.1 miałem poniższy kod, aby wykonać zapytania SQL z pliku:Jak korzystać z StaticQuery w Slick 3.0.0?

def fetchResult[T](sql: String)(implicit getResult: GetResult[T]): List[T] = { 
    val query = Q.queryNA[T](sql) 
    try { 
     Database.forDataSource(DB.getDataSource()) 
      .withSession { implicit session => query.list } 
    } 
    catch { 
     case e: Throwable => 
     throw new RunSqlException(s"Query $name execution error", e) 
    } 
} 

W Slick 3.0.0 użyć metody dbConfig.db.run wykonać DBIOAction i uzyskać przyszłości wyniku . Ale nie mogę znaleźć sposobu na przekształcenie wyniku Q.queryNA (który jest StaticQuery[Unit, R]) w DBIOAction. Czy taki sposób istnieje?

Na tym skończyłem z przestarzałymi połączeniami. Pomóż mi być lepszym!

def fetchResult[T](sql: String)(implicit getResult: GetResult[T]): Future[List[T]] = Future { 
    val query = Q.queryNA[T](sql) 
    try { 
     this.dbConfig.db.withSession { implicit session => query.list } 
    } 
    catch { 
     case e: Throwable => 
     throw new RunSqlException(s"Query $name execution error", e) 
    } 
} 
+0

Występuje problem https://github.com/slick/slick/issues/1161 o subj na GitHub. – sedovav

Odpowiedz

3

jedynym rozwiązaniem udało mi się znaleźć była nieco hackish:

import slick.driver.HsqldbDriver.api._ 

def fetchResult[T](sql: String) = { 
    database.run(sqlu"""#$sql""") 
}