Я пишу несколько тестов для автоматизации проверки, имеет ли база данных (экземпляр MS SQL Server) определенные представления, а если нет, создает эти представления с использованием объекта 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.
}
Основываясь на этом и набрасывая из Стефана Цайгера assertTablesExist
пример , я сделал небольшой метод для проверки БД на вид, и если проверка выдаетисключение вызывает 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"
- происходит нечто странное с областью действия аргумента карты v, что приводит к
"error: value tableName is not a member of type parameter
T0"
.
Извините за незнание этого вопроса, так как я подозреваю, что корень моей проблемы лежит в непонимании системы типов Скалы.Наряду с этими двумя проблемами возникает ноющее чувство, что я на самом деле не сделал VerifyViewExists
в самом лаконичном или читабельном стиле.