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 では直ってるぽい。
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
# かげ [もしかして、もりきゅうさんですか? ]
# moriq [そうです。^^ お久しぶりです。]