データベース(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.
}
これとStefanZeigerのassertTablesExist
例からの引用に基づいて、ビューのdbをチェックするための小さなメソッドを作成しました。チェックによって例外がスローされた場合は、そのビューの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...");})
} } }
これは私には合理的に思えますが、2つの問題があります。
BasicTable
これは、viewsパラメータをとして入力する正しい方法ではありません。"error: class BasicTable takes type parameters"
- マップ引数vのスコープで何かファンキーなことが起こっており、結果として
"error: value tableName is not a member of type parameter T0"
。
私の問題の根本はScalaの型システムを理解していないことにあると思うので、この質問についての私の無知を許してください。VerifyViewExists
これらの2つの問題に加えて、私が最も簡潔で読みやすいスタイルで実際に行ったことがないというしつこい感じがあります。