背景:
> Firefox 3包含@H_301_2@SQLite版@H_301_2@3.5.9. Firefox还允许扩展,它们是用javascript和@H_301_2@可以调用嵌入式sqlite引擎.@H_301_2@>如预期的那样,执行以下操作@H_301_2@sql语句“SELECT”TEXT“REGEXP@H_301_2@“T *”;”给出错误,因为有@H_301_2@没有REGEXP函数本来包含在sqlite中.@H_301_2@> javascript包含一个内置的正则表达式函数.@H_301_2@> sqlite通过SELECT load_extension(‘filename’)允许可加载的扩展;
题:@H_301_2@可以在sqlite中加载一个扩展名,这个扩展名是用可以做REGEXP的javascript编写的?
是.可以调用javascript函数
//(thanks to Mirnal Kant,sqlManager) //Version 2 -- Prevent Firefox crashing // -- Suspect a problem with continual creation of Regex objects var g_RegExpString = null; var g_RegExp = null; //functions to be created for the db var smDbFunctions = { // (0) = Regex Expression // (1) = Column value to test 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; } } };
实例化一个sqlite实例之后:
Database.createFunction("REGEXP",2,smDbFunctions.regexp);