2016-09-20 8 views
1

私は古いコードをSlick 3で使用する必要がありますが、動作していません。Slick 3テスト用の切り捨てテーブル

私の古いコード:

database.withSession { implicit s: Session => 
    StaticQuery.updateNA("SET foreign_key_checks = 0").execute() 
    val q = StaticQuery.query[String, String](
    "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?" 
).apply(dbname) 
    for (table <- q) { 
    StaticQuery.updateNA("TRUNCATE " + dbname + "." + table).execute() 
    } 
    StaticQuery.updateNA("SET foreign_key_checks = 1").execute() 
} 

滑らかな3で新しいコード:

val a = for { 
    _ <- sqlu"SET foreign_key_checks = 0" 
    s <- sql"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ${ dbname }".as[String] 
    _ <- DBIO.sequence(s.map(table => sqlu"TRUNCATE #${MySQLDriver.quoteIdentifier(dbname)}.#${MySQLDriver.quoteIdentifier(table)}").map(x => DBIO.successful(x))) 
    _ <- DBIO.successful(sql"SET foreign_key_checks = 1") 
} yield() 

Await.result(db.run(a), scala.concurrent.duration.Duration(1000, SECONDS)) 

エラー:あなたがMTable.getTablesからテーブルを取得したいよう

com.googlecode.flyway.core.api.FlywayException: Unable to lock table `myLocalDB_test`.`schema_version 
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'myLocalDB_test.schema_version' doesn't exist 

答えて

0

私はGithubの上の例を発見し、それは今働いているようだ、あなたはhere

から、それを確認することができ、私はそのように変更:

val truncatesFuture = db.run(
     sql"""SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ${ dbname }""".as[String] 
    ).map { 
     _.map { case (table) => SQLActionBuilder(List(s"TRUNCATE TABLE $table"), SetUnit).asUpdate } 
    } 

Await.result(truncatesFuture.flatMap(
    truncates => 
    db.run(
     DBIO.sequence(
     List(
      List(sqlu"""SET FOREIGN_KEY_CHECKS = 0;"""), 
      truncates, 
      List(sqlu"""SET FOREIGN_KEY_CHECKS = 1;""") 
     ).flatten 
    ) 
    ) 
), scala.concurrent.duration.Duration(5000, SECONDS)) 
1

は思えます。

@ import slick.jdbc.meta.MTable 
import slick.jdbc.meta.MTable 
@ MTable.getTables 
res91: profile.BasicStreamingAction[Vector[MTable], MTable, Effect.Read] = [email protected] 
@ db.run(res91) 
res92: concurrent.Future[Vector[MTable]] = Success(Vector(MTable(MQName(TEST1.PUBLIC.COFFEES),TABLE,,None,None,None), MTable(MQName(TEST1.PUBLIC.SUPPLIERS),TABLE,,None,None,None))) 
関連する問題