加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite3 的扩展:实现 REGEXP函数和包含字符串查找的函数 CONTAI

发布时间:2020-12-12 23:37:48 所属栏目:百科 来源:网络整理
导读:// 再来一个 Sqlite3 的扩展:实现 REGEXP函数和包含字符串查找的函数 CONTAIN // ************************************* //// sqlite3 extend// By Ceja// ************************************* //#include "../public/pcre_7.9/pcrecpp.h"#include "sql

// 再来一个 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的正则查询函数 REGEXPstatic 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,&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::RE reObj(T2A_S(zPattern));BOOL bMatch = reObj.PartialMatch(T2A_S(zString));USES_CONVERSION_CLEAR;#ifdef _DIS_MY_DEBUGchar szTemp[1024];memset(szTemp,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(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,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::RE reObj(T2A_S(zPattern));//BOOL bMatch = reObj.PartialMatch(T2A_S(zString));BOOL bMatch = FALSE;if (-1 < KMP_i(lpszSource,lpszDest)){ bMatch = TRUE;}USES_CONVERSION_CLEAR;#ifdef _DIS_MY_DEBUGchar szTemp[1024];memset(szTemp,bMatch ? 1 : 0);}int AddExFunction(sqlite3 *db){int nResult = 0;nResult = sqlite3_create_function(db,"regexp",-1,SQLITE_ANY,icuRegexpFunc,0);nResult = sqlite3_create_function(db,"containi",icuContainiFunc,0);return nResult;}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读