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を操作したいんだと思ったから。