背景:
Firefox 3包含 SQLite版本3.5.9.Firefox还允许使用javascript编写的扩展,并可以调用嵌入式SQLite引擎.
正如所料,执行以下SQL语句'SELECT"TEXT"REGEXP"T*";' 由于SQLite中没有本地包含的REGEXP函数,因此会出错.
javascript包含内置的regexp功能.
SQLite允许通过SELECT load_extension('filename')加载扩展;
问题: 是否可以在SQLite中加载一个用javascript编写的可以执行REGEXP的扩展?
是.可以调用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);