Sqlite3 的扩展:实现 REGEXP函数和包含字符串查找的函数 CONTAIN
来源:互联网 发布:电脑远程控制软件 编辑:程序博客网 时间:2024/05/17 05:04
// 再来一个 Sqlite3 的扩展:实现 REGEXP函数和包含字符串查找的函数 CONTAIN
// ************************************* //
// sqlite3 extend
// By Ceja
// ************************************* //
#include "../public/pcre_7.9/pcrecpp.h"
#include "sqlite3.h"
#include "regexpExt.h"
// 这个文件是我做的扩展
#include "../public/debugoption.h"
// 这个也是扩展,以后放出
#include "../public/charset.h"
// 用 PCRE 实现SQLite3的正则查询函数 REGEXP
static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg)
{
//UErrorCode status = U_ZERO_ERROR;
//URegularExpression *pExpr;
//UBool res;
//PcreMatch(_T("abcdefg"), _T("ab"), &objMath, 1, 0, &nCoutn);
//const WCHAR * pExpr= (const WCHAR *)sqlite3_get_auxdata(p, 0);
const WCHAR * zPattern = (const WCHAR *)sqlite3_value_text16(apArg[1]);
const WCHAR * zString = (const WCHAR *)sqlite3_value_text16(apArg[0]);
/* If the left hand side of the regexp operator is NULL,
** then the result is also NULL.
*/
if( !zString ){
return;
}
USES_CONVERSION_S;
pcrecpp::REreObj(T2A_S(zPattern));
BOOLbMatch= reObj.PartialMatch(T2A_S(zString));
USES_CONVERSION_CLEAR;
#ifdef_DIS_MY_DEBUG
charszTemp[1024];
memset(szTemp, 0, sizeof(szTemp));
memcpy(szTemp, zString, 10);
if (bMatch)
{
//MYDEBUGMSG(zString);
MYDEBUGOUTCONTENT(zPattern, _T("data_2.txt"));
MYDEBUGOUTCONTENT(_T("/t"), _T("data_2.txt"));
MYDEBUGOUTCONTENT(zString, _T("data_2.txt"));
MYDEBUGOUTCONTENT(_T("/t"), _T("data_2.txt"));
MYDEBUGOUTCONTENT(pExpr, _T("data_2.txt"));
MYDEBUGOUTCONTENT(_T("/r/n"), _T("data_2.txt"));
}
#endif
/* Return 1 or 0. */
sqlite3_result_int(p, bMatch ? 1 : 0);
}
// 自定义一个查询函数,用法 select * from `table1` where containi('abcde', `DataSection`) limit 100;
static void icuContainiFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg)
{
//UErrorCode status = U_ZERO_ERROR;
//URegularExpression *pExpr;
//UBool res;
//PcreMatch(_T("abcdefg"), _T("ab"), &objMath, 1, 0, &nCoutn);
//const WCHAR * pExpr= (const WCHAR *)sqlite3_get_auxdata(p, 0);
const WCHAR * lpszSource = (const WCHAR *)sqlite3_value_text16(apArg[0]);
const WCHAR * lpszDest = (const WCHAR *)sqlite3_value_text16(apArg[1]);
/* If the left hand side of the regexp operator is NULL,
** then the result is also NULL.
*/
if( !lpszSource || !lpszDest ){
return;
}
USES_CONVERSION_S;
//pcrecpp::REreObj(T2A_S(zPattern));
//BOOLbMatch= reObj.PartialMatch(T2A_S(zString));
BOOLbMatch= FALSE;
if (-1 < KMP_i(lpszSource, lpszDest))
{
bMatch= TRUE;
}
USES_CONVERSION_CLEAR;
#ifdef_DIS_MY_DEBUG
charszTemp[1024];
memset(szTemp, 0, sizeof(szTemp));
memcpy(szTemp, zString, 10);
if (bMatch)
{
//MYDEBUGMSG(zString);
MYDEBUGOUTCONTENT(zPattern, _T("data_2.txt"));
MYDEBUGOUTCONTENT(_T("/t"), _T("data_2.txt"));
MYDEBUGOUTCONTENT(zString, _T("data_2.txt"));
MYDEBUGOUTCONTENT(_T("/t"), _T("data_2.txt"));
MYDEBUGOUTCONTENT(pExpr, _T("data_2.txt"));
MYDEBUGOUTCONTENT(_T("/r/n"), _T("data_2.txt"));
}
#endif
/* Return 1 or 0. */
sqlite3_result_int(p, bMatch ? 1 : 0);
}
int AddExFunction(sqlite3 *db)
{
int nResult= 0;
nResult= sqlite3_create_function(db, "regexp", -1, SQLITE_ANY, 0, icuRegexpFunc, 0, 0);
nResult= sqlite3_create_function(db, "containi", -1, SQLITE_ANY, 0, icuContainiFunc, 0, 0);
return nResult;
}
- Sqlite3 的扩展:实现 REGEXP函数和包含字符串查找的函数 CONTAIN
- ES6-正则的扩展-RegExp构造函数
- RegExp函数的含义
- Blue Jeans(包含两个查找字符串的重要函数)
- MFC 查找字符串函数的实现
- c实现的字符串查找函数
- sqlite3的常用命令和函数
- 字节序列查找bytesBytes 和 字符串查找strstr函数的实现代码
- php strstr查找字符串中是否包含某些字符的查找函数
- php strstr查找字符串中是否包含某些字符的查找函数
- HDU5312string类的字符串赋值函数和查找函数
- 查找字符/字符串的函数
- 一个字符串查找的函数
- Sqlite3支持的数据类型和函数
- Javascript contians 函数 字符串包含函数 及 删除字符串开头和结尾空格的方法
- 实现一个字符串查找子串的函数
- json字符串中,包含函数的处理
- C语言之strstr函数类似Java字符串的contain函数
- 平衡的艺术——从菜鸟到架构师
- 关于杭州富家子撞死浙大生,一些丑恶 (转)
- Flex最佳做法[二]
- Flex最佳做法[三]
- CPL文件(转)
- Sqlite3 的扩展:实现 REGEXP函数和包含字符串查找的函数 CONTAIN
- 亮剑——狭路相逢智勇者胜
- Compiz-fusion(3D特效)的安装与配置
- 老资格程序员的经历和经验
- vista系统运行金山词霸取词慢解决方法
- C#中三种截屏方式小结
- 偶和偶的同学张二狗(真实目的!评论版)
- 实习日志
- ASP.NET谈三层结构与MVC模式的区别