もっとも食いっぱぐれのない言語は何か
SQL。
RoRのActiveRecordにあまり魅力を感じない原因を考えたらこうなった。
その昔、VBのDAOばっかり触っていた時期があったのだけど、「SQLを文字列編集したほうが小回りがきいていい」ってふと思い・・・、確かに単純なロジックはDAOで充分(ってかRecordSetをデータソースプロパティに紐付ければCRUDを実現できるスプレッドシート部品とか普通にあったりしたのだが)、やれサブクエリーだの集計関数など色々つけていくうちに、「SQLのコード書いたほうが全然ラクじゃん」とふと気付いてしまった。
こう考えるとORマッピングって別に新しくもなんでもない方法だとは思うのだが、なぜいまいち主流になりきれないかといえば、実際のメソッドやクラスが言語ごとのイディオムになりがちだし、Java、Ruby、Perl、PHP、C#とか案件ごとに使用言語が変わる可能性は高いけど、SQLの構文だけは大体同じだし、それ故に皆一番使用経験が長いのはSQLだから。
汎用性を高めようとすると、HibernateのHQL言語みたいな「ってかSQLでよくなくない?」みたいな事態に陥ったり。
それとDBMSは地方色豊かなので方言を利用する為にはSQLをベタ書きしなくてはならないという話もある。
例えば、MySQLのINSERT 構文
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ((expression | DEFAULT),...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expression, ... ] または INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... または INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=(expression | DEFAULT), ... [ ON DUPLICATE KEY UPDATE col_name=expression, ... ]
LOW_PRIORITY、DELAYED、IGONOREとかは便利だと思うのだが、ORマッピングの辿ってきた歴史を考えると、こういう拡張オプションの使用に耐え得るものは多分出ないな、とちょっと諦観。
ところでDELAYEDってレプリケーション環境でちゃんと動くようになったのかな。