SQLite 内置函数比较有限,有时通过添加自定义函数(User-Defined Fuctions)的方式可以实现一些通过普通 SQL 操作无法实现或者实现很麻烦的功能;也可以替换 SQLite 原有的内置函数,使其符合我们的要求。
本文以 自定义 数据压缩,解压函数(采用zlib数据库压缩数据)为例讲解 sqlite自定义函数。
1. 添加自定义接口函数
1.1 头文件加入自定义静态函数(源代码函数是加在 类 里面的)
static void sqlite_compress(sqlite3_context *context, int argc, sqlite3_value **argv);
static void sqlite_decompress(sqlite3_context *context, int argc, sqlite3_value **argv);
1.2 实现函数
压缩函数实现:
void SQLiteWrapper::sqlite_compress(sqlite3_context *context, int argc, sqlite3_value **argv)
{
const char *sourceData = (const char *)sqlite3_value_text(argv[0]); //传递来的 需要处理的原数据
fprintf(stderr,"the source data size == %d\n",sqlite3_value_bytes(argv[0]));
uLong sourceDataLen = sqlite3_value_bytes(argv[0])+1;
uLongf compressLen = 524288;
Bytef destData[compressLen];
memset(destData,0,compressLen);
int rc = compress(destData,&compressLen,(const Bytef*)sourceData,sourceDataLen); //调用zlib库压缩数据
if(rc == Z_OK){
fprintf(stderr,"compress data is succedd!!!!!!!compress after size=%d\n",compressLen);
sqlite3_result_