もっとも食いっぱぐれのない言語は何か

SQL
RoRActiveRecordにあまり魅力を感じない原因を考えたらこうなった。

その昔、VBのDAOばっかり触っていた時期があったのだけど、「SQLを文字列編集したほうが小回りがきいていい」ってふと思い・・・、確かに単純なロジックはDAOで充分(ってかRecordSetをデータソースプロパティに紐付ければCRUDを実現できるスプレッドシート部品とか普通にあったりしたのだが)、やれサブクエリーだの集計関数など色々つけていくうちに、「SQLのコード書いたほうが全然ラクじゃん」とふと気付いてしまった。

こう考えるとORマッピングって別に新しくもなんでもない方法だとは思うのだが、なぜいまいち主流になりきれないかといえば、実際のメソッドやクラスが言語ごとのイディオムになりがちだし、JavaRubyPerlPHPC#とか案件ごとに使用言語が変わる可能性は高いけど、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ってレプリケーション環境でちゃんと動くようになったのかな。