3 件中 1 - 3 件を表示
Displaying posts with tag: rails (reset)
ActiveRecord でbulk insert/update

mala さんのMySQLにおけるbulk insert と bulk update - 金利0無利息キャッシング – キャッシングできます - subtechのエントリーを見て, MySQL でbulk update ができることを知り, 丁度欲しい機能だったのでとりあえず動くだけのメソッドを実装.

# User.extend BulkExecuteMethods
# User.update_multi([:id, :name, :age], [[1, 'bob', 11], [2, 'mary', 21]])
#
# refs
#  http://dev.mysql.com/doc/refman/4.1/ja/insert.html
#  http://subtech.g.hatena.ne.jp/mala/20090729/1248880239
module BulkExecuteMethods
  def update_multi(columns, values)
    cols = columns.map{|c| self.connection.quote_column_name(c) }

    ph = (['(?)'] * values.size).join(',')
    vals = sanitize_sql([ph, *values])
    
    expr = cols.map{|c| "#{c}=VALUES(#{c})" …
[さらに読む]
AGPLのライセンス互換性の問題について - 解決策はRoR

Webの世界にもGPLと同様の自由や相互運用性をもたらす小粋なAGPLであるが、運用に際しては注意点がある。それは、ライセンスの互換性である。結論から言うと、AGPLはGPLv2と互換性がない。GPLv2を利用したソフトウェアを改変またはリンクして、AGPLとしてリリースすることは出来ない。それが最大の問題である。GPLv3では一部互換で、GPLv3のソフトウェアを改変してAGPLとしてリリースすることは出来ないが、GPLv3のコードをリンクしたソフトウェアをAGPLv3としてリリースすることが可能である。

[さらに読む]
SQL のWHERE句の条件に関数を使うとインデックスが使用されない

Rails でfind_by_sql を使う場合に、大きいSQL だと次のようにSQL 中に関数を使ってしまうことがありました。
単純な例だとこんな感じ。

User.find_by_sql([<<-SQL, {:id => 1}])
SELECT *
FROM users
WHERE
  IF(
      :id,
      id = :id,
      1
    )
SQL


でも、このようにIF 関数中に条件式を書いてしまうと、インデックスが使用されません。

[test]> explain SELECT * FROM users WHERE  IF(1, id = 1,  1); …
[さらに読む]
3 件中 1 - 3 件を表示