読者です 読者をやめる 読者になる 読者になる

SQLiteで正規表現を使いたい場合は関数を自分で作成する必要があるみたい

SQLite3で正規表現を使えないのか調べていたら、現時点ではサポートされていない事を知りました。
自分でREGEXP関数をcreate_functionなどを使って実装すればいいみたいです。

JavascriptではSQLite Managerで実装されていたのを参考にしました。

Database.prototypeにSQL関数追加をできるようにメソッドを追加

Database.prototype = {

  createFunction: function(fnName, argLength, fnObject) {
    this.connection.createFunction(fnName, argLength, fnObject);
  },

// etc function ...

SQL関数作成

var database = new Database('dbname');

// REGEXP Function ADD
var g_RegExpString = null;
var g_RegExp = null;
var smDbFunctions = { 
    regexp: {
        onFunctionCall: function(val) {
            if (g_RegExp == null || val.getString(0) != g_RegExpString) 
            {
                g_RegExpString = val.getString(0);
                g_RegExp = new RegExp(g_RegExpString);
            }
            if (val.getString(1).match(g_RegExp)) return 1;
            else return 0;
        }
    }
};
// インスタンスに対して関数を作成する
database.createFunction("REGEXP", 2, smDbFunctions.regexp);

smDbFunctionsで作成したJavascript関数をcreateFunctionに渡すことでSQL関数を作成できるようになります。
詳しくはMDC「mozIStorageConnection - Mozilla | MDN」や「Storage | MDN」を見るとよいです。
バインドに関する事ととか他にも色々載っていました。

他言語例だとRubyC++PHPなどのエントリーもありました。

PHP

携帯農薬検索実験室/研究会
http://macs.o-ya.net/cboard/c-board.cgi?cmd=one;no=700;id=bbs

いつかREGEXPは標準で対応してくれるようになって欲しいなぁ。