DBとメソッド連鎖についておもったっこと
なんとなく、式をSQLに変換して実行してくれるライブラリとかツールがあればいいかなと思った。
persons.select { |id,name,salary| salary > 500000 }.each{|id,name,salary| salary = 60 }
が
update persons set salary = 60 where salary > 500000
みたいに変換されたり
persons.select { |id,name,salary| salary > 500000 }.map{|id,name,salary| [name,salary] }
が
select name,salary from persons where salary > 500000
に変換されたり。別に言語はなんでもよい。
で思い出した。これって確かLINQだった。LINQで探してみるとgroovyの話やらrubyの話やらでてくる。おんなじ様なことを思う人はいるんだなぁ。ちょっとほっとするよ。
ここをみると各言語のLINQ風なものがわかってよい。で、その中にこんな記述があって
結局 LINQ の新に新しいところは
from d in db.Doctors
join c in db.Calls
on d.Initials equals c.Initials
where c.DateOfCall >= new DateTime(2006, 10, 1) &&
c.DateOfCall <= new DateTime(2006, 10, 31)
orderby d.Initials
select d.Initialsみたいなコードが C#/VB として書ける点に尽きる気がしてきた. 文法の一部なら IDE の支援もあるだろ
steps to phantasien t(2006-11-23)
俺が期待したいことはなんだろうかと考えると。
レコードをエンティティとして捉えたいんじゃなくて、テーブルをコレクションとして捉えたいんだな。
あとは、この変換されたものがストアドプロシージャとして登録されて、後で透過的に呼び出せるというのがサポートされているとよいなぁ。と思った。
なんでこんなことを考えたかというとO/Rマッピングって集合演算であるRDBにそもそもマッチしてない気がして、最近のメソッド連鎖やらを見ていると、ああ俺はこんな感じでDBを操作したいんだと思ったから。