それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

DBアクセス抽象化で、INSERT と UPDATE でコードを共通化させるハック。

困りごと: INSERT と UPDATE の共通化をしたい。

似たようなコードを何度も書くのはめんどくさい。テーブル定義が変わったときにもう鬱陶しい。

共通化したい・・・

function insert( name , date ){
    sql = "INSERT INTO table_name VALUES( #{name} , #{date} );"
    mysql->execute();
}
function update( name , date , id ){
    sql = "UPDATE table name_name=#{name}   modified=#{date}  ) where id = #{id} ;;"
    mysql->execute();
}

解決方法を見つけた。

いろいろな設計を見ててたら、次のようにすると解決した。

さきに、空っぽのレコードを作ってしまう。

function save( name , date , id=null){
    if ( ! id ) {
         sql = "INSERT INTO table name VALUES( );"
         mysql->execute(sql);
         id = mysql->last_insert_id();
     }
    sql = "UPDATE  table_name set   name=#{name}   modified=#{date}  where id = #{id} ;"
    mysql->execute(sql);
}

ものすごいバッドノウハウで臭いカンジがするんだけど。意外とコレでスッキリするんだよなぁ、

どうでもいい話

データ・ベースのアクセスってSQLのbuildingで四苦八苦したり、Prepareと相性が悪くて、なぜかStringを結合したりとかしちゃってるのを見たことがあってですね。

ORMを使えば良いんだろうけど、どのORMを採用するかで宗教戦争になりそうだったり、 SQLでこう書くのを、ORMでどう書くかと翻訳が2段階になって、時間コストが増えたりとかですね。

ORMは遅かったり最適化がうまくできん買ったりめんどくさいですよね