GroovySqlのいいところ
GroovySqlはなかなかいいヤツです。例えばこんなかんじ
url = 'jdbc:oracle:thin:@hogefuga:1521:sid' driver = 'oracle.jdbc.driver.OracleDriver' user = 'scott' password = 'tiger' sql = Sql.newInstance( url, user, password, driver ) sql.eachRow("SELECT * FROM TABLE") { |row| . . . . }
このeachRow()のサポートなんて最高です。
ところで、Groovyって
"Hello, my name is ${bean.name}. i'am ${bean.age} years old"
というような文字列表現をサポートしています。これはGStringという型で実現されていて、変数の展開は、GString#toString()のタイミングで実施されます。遅延評価というかなんというか。
GroovySqlは execute()や executeUpdate()でGStringを引数に取るものがあります。例えばこんな感じ、
sql.executeUpdate("insert into table(a,b,c) values (${a},${b},${c}")
これ、普通に考えたら SQLキャッシュきかないっぽいじゃないですか。値のバリエーションごとに違うSQLが生成されますから、Oracleの場合なんかだとV$SQLAREAの結末は悲惨っぽいですよね。ところが、GStringを引数にとるGroovySqlは遅延評価の仕組みを使って
という方法で実に簡単にSQLの再利用を促進してるんです。
ちょっとしたことなんですけど、これ、絶対イイです。なんかもう惚れてしまいました。