トップ 追記

3 日坊主日記


2009-11-30 [長年日記]

_ senna 1.1.4 macports

先日オープンセミナー広島でpostgresqlでの全文検索の仕組みとしてtextsearch_ja textsearch_sennaについて発表しました。

発表内容は後で書く。

その前にsenna 1.1.4 on macosx (macports)はreallocでこけるのでpatchをあてた話を忘れないうちにまとめ。

patchはこちら(てきとう)。

$ cat files/patch-lib-ctx.c.diff
--- lib/ctx.c.orig	2008-11-14 21:41:14.000000000 +0900
+++ lib/ctx.c	2009-11-26 03:04:51.000000000 +0900
@@ -646,10 +646,8 @@
   void *res;
   if (!size) {
     alloc_count--;
-#if defined __FreeBSD__
     free(ptr);
     return NULL;
-#endif /* __FreeBSD__ */
   }
   res = realloc(ptr, size);
   if (!ptr && res) { alloc_count++; }

macportsでpatchをあてる手順を確認。 macportsのドキュメントはこちら。

macportsのlocal reposを用意する。

mkdir /Users/moriq/ports

dir構成をまねしてPortfileをcp

/Users/moriq/ports/textprocs/senna/Portfile

Portfileの内容が簡潔すぎてびびる。

portindexを実行。

cd /Users/moriq/ports
portindex

sources.confで指定

/opt/local/etc/macports/sources.conf:
file:///Users/moriq/ports

認識しているか

port file senna

で確認。

patchを作ってfilesに置く。 Portfileでpatchfilesを指定。

patchfiles          patch-lib-ctx.c.diff

いじょ。

後はinstallだけど手順を段階的に確認することもできる。

port extract senna
port patch senna
port configure senna
port build senna
port install senna

できた。


2009-11-20 [長年日記]

_ ruby postgresql

rubyのpostgresqlアダプタを調べ中。 PGconn.quote_identとかはまりまくった。

$ port search postgres
rb-postgres @0.7.1 (ruby, databases) # x 古い
$ gem search postgres -r
postgres (0.7.9.2008.01.28) # x 古い; libpq
postgres-pr (0.6.1) # x 古い; pure ruby
ruby-postgres (0.7.1.2006.04.06) # x 古い; macportsはこのversion

$ gem search pg -r
pg (0.8.0) # o これが正解; libpq
ruby-pg (0.7.9.2008.01.28) # 古い

わかんねえよ……

activerecord-2.3.4で

rake test_postgresql

が通ることを確認。


2009-11-10 [長年日記]

_ rspec-rr

  • rr (0.10.4)
mock(User).find_or_initialize_by_name("author") { user }

find_by_*がnilになるバグがあるもよう。

めも


2009-03-11 [長年日記]

_ [Rails] will_paginate-2.2.2

will_paginateでGETパラメータが一部しか渡らないバグがあって調べてみると、 どうやらwill_paginate-2.2.2 (gem) がバグってる。

fixed nested hash

diff -r d65a9e0d35c7 -r 4a8b7f2c4754 lib/will_paginate/view_helpers.rb
--- a/lib/will_paginate/view_helpers.rb	Wed Mar 11 04:51:19 2009 +0900
+++ b/lib/will_paginate/view_helpers.rb	Wed Mar 11 04:52:32 2009 +0900
@@ -317,7 +317,7 @@
           target[key] = existing = {} if existing.nil?
           if existing.is_a?(Hash)
             stringified_merge(existing, value)
-            return
+            next
           end
         end

git では直ってるぽい。

本日のツッコミ(全2件) [ツッコミを入れる]

# かげ [もしかして、もりきゅうさんですか? ]

# moriq [そうです。^^ お久しぶりです。]


2009-02-20 [長年日記]

_ [Rails][MySQL] FOUND_ROWS

昔作ったRails appを2.1系まで上げていじっていたところ FOUND_ROWS() の値がおかしくなってることに気づいた 。

Customer Load (0.969000)  SELECT SQL_CALC_FOUND_ROWS * FROM customers WHERE (point >= '100' and shop_id = '2') ORDER BY code LIMIT 50
Customer Columns (0.015000)  SHOW FIELDS FROM `customers` # こいつめ
SQL (0.000000)  SELECT FOUND_ROWS()

testを書いてなかった……

Columns の取得は find_by_sql(sql) の中で instantiate(record) するときに行われる。 仕方ないので find_by_sql(sql) の実装を展開して対応してみた。

  def self.find_all_with_calc_found_rows(conditions = nil, orderings = nil, limit = nil, joins = nil)
    sql  = "SELECT SQL_CALC_FOUND_ROWS * FROM #{table_name} "
    sql << "#{joins} " if joins
    add_conditions!(sql, conditions)
    sql << "ORDER BY #{orderings} " unless orderings.nil?
    add_limit!(sql, :limit => limit)

    # ret = find_by_sql(sql)
    row = connection.select_all(sanitize_sql(sql), "#{name} Load")
    @found_rows = connection.select_one("SELECT FOUND_ROWS()")["FOUND_ROWS()"].to_i
    row.collect! { |record| instantiate(record) }
  end

  def self.found_rows
    @found_rows
  end