SQLite3と鬼車で正規表現検索 + sqlite3-ruby-1.2.1パッチ当て
力尽きたりバタバタしてたりで放っておいたマトメを。
SQLite3.3.8以降用 正規表現エクステンション(鬼車 VERSION 2.5.8を利用)
解凍するとソースコードと、IntelMac(.bundle)、Win(.dll)用バイナリが出てきます。
sqlite3.exeを起動して
select load_extension('sqlite3-onig.dll'); select * from tbl where field1 REGEXP 'ABC';
のように使えます。sqlite3-rubyを使ったRubyサンプルも入ってますが、これを実行するには次のパッチを当てる必要があります。
sqlite3-rubyでエクステンションを使うためのパッチ
作業レベルのメモは http://d.hatena.ne.jp/yotaropg/20070223/1172234315 あたりを。
sqlite3-ruby-1.2.1.tar.gz用のパッチファイルと、patch当て実行コマンド。
Windowsな人はコンパイルする環境を作るのが面倒でしょう*1から、MinGWでビルド*2した結果も置いておきます。
この書庫内の「lib」を、普通に入れたsqlite3-ruby-1.2.1*3の「C:\ruby\lib\ruby\gems\1.8\gems\sqlite3-ruby-1.2.1-mswin32\lib」と置き換えれば、
require 'rubygems' require_gem 'sqlite3-ruby' db = SQLite3::Database.new( ":memory:" ) db.enable_load_extension(1) db.load_extension('./sqlite3-onig.dll') db.execute( "create table test_table (id integer, message string)" ) db.execute( "insert into test_table values(1, 'Hello, world.')" ) db.execute( "insert into test_table values(2, 'Hello, Ruby.')" ) db.execute( "insert into test_table values(3, 'Hi, SQLite3.')" ) db.execute( "insert into test_table values(4, 'Hi, Ruby on Rails.')" ) db.execute( "select * from test_table where message REGEXP 'Hello'" ) { |row| p row } db.close
みたいに使えます。数十万件レベルなら余裕な速度で動きまする。
ご利用は自己責任で。
適当に作りすぎたので、お使いになった方で「動きが怪しい・・・」と思われたらぜひ教えてくださいまし。