D. Richard Hipp...
You are amazing!!! Thanks a lot for Sqlite and for help me!
God save D. Richard Hipp!
On Wed, 19 2006 17:44:46 -0400, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
"Cesar David Rodas Maldonado" <[EMAIL PROTECTED]> wrote:
> I need a funcion from compress a row with Zlib and I am wondering if
SQLite
> support or if someone did it and want to share him or her code.
>
Here some code that might help:
/*
** SQL function to compress content into a blob using libz
*/
static void compressFunc(
sqlite3_context *context,
int argc,
sqlite3_value **argv
){
int nIn, nOut;
long int nOut2;
const unsigned char *inBuf;
unsigned char *outBuf;
assert( argc==1 );
nIn = sqlite3_value_bytes(argv[0]);
inBuf = sqlite3_value_blob(argv[0]);
nOut = 13 + nIn + (nIn+999)/1000;
outBuf = malloc( nOut+4 );
outBuf[0] = nIn>>24 & 0xff;
outBuf[1] = nIn>>16 & 0xff;
outBuf[2] = nIn>>8 & 0xff;
outBuf[3] = nIn & 0xff;
nOut2 = (long int)nOut;
compress(&outBuf[4], &nOut2, inBuf, nIn);
sqlite3_result_blob(context, outBuf, nOut2+4, free);
}
/*
** An SQL function to decompress.
*/
static void uncompressFunc(
sqlite3_context *context,
int argc,
sqlite3_value **argv
){
unsigned int nIn, nOut, rc;
const unsigned char *inBuf;
unsigned char *outBuf;
long int nOut2;
assert( argc==1 );
nIn = sqlite3_value_bytes(argv[0]);
if( nIn<=4 ){
return;
}
inBuf = sqlite3_value_blob(argv[0]);
nOut = (inBuf[0]<<24) + (inBuf[1]<<16) + (inBuf[2]<<8) + inBuf[3];
outBuf = malloc( nOut );
nOut2 = (long int)nOut;
rc = uncompress(outBuf, &nOut2, &inBuf[4], nIn);
if( rc!=Z_OK ){
free(outBuf);
}else{
sqlite3_result_blob(context, outBuf, nOut2, free);
}
}
/* Make the functions above accessible to SQLite as follows:
*/
sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0,
compressFunc, 0, 0);
sqlite3_create_function(db, "uncompress", 1, SQLITE_UTF8, 0,
uncompressFunc, 0, 0);
--
D. Richard Hipp <[EMAIL PROTECTED]>