我正在编写一些测试来自动检查数据库(MS SQL)
服务器实例)具有某些视图,如果没有,则创建这些视图
使用BasicTable
对象的视图。
类似的东西:
@Test def CheckAndBuildViewsOnDB() = {
VerifyViewExists(FooTable, BarTable) //FooTable et al defined as:
FooTable extends BasicTable[Foo], where Foo is a case class & FooTable
has a DDL create defined.
}
基于此并且来自Stefan Zeiger's assertTablesExist
example,我做了一个小方法来检查数据库的视图,如果
check会抛出视图BasicTable ddl.create
:
def VerifyViewExists(views:BasicTable*) = {
DatabaseSession.session() withSession { //helper class which
initiates a db connection & session
views map {
v => (try queryNA[Int]("select 1 from '"+ v.tableName +"'
where 1<0").list
catch {case _: Exception => v.ddl.create;
println("Couldn't find view "+v.tableName+", creating it
now...");})
} } }
这对我来说似乎是合理的,但有两个问题:
BasicTable
的正确方法,
导致"error: class BasicTable takes type parameters"
"error: value tableName is not a member of type parameter
T0"
。 VerifyViewExists
。
答案 0 :(得分:1)
由于你不关心类型参数是什么,你应该能够通过添加[_]来解决#1:
def VerifyViewExists(views:BasicTable[_]*) = {
我的猜测是修复#1会导致#2消失。
顺便说一句,写foreach而不是map可能会更好,因为后者会将结果收集到一个我认为你不想要的新集合中。