Gabriel Cook wrote:
> Thanks for your reply.
>
> However, I can't normalize the data in the blob, basically, its an
arbitrary
> frame of data. I don't know what's in it or how its formatted at design
> time.
>
> I'm ok with the table scan, IF I there is any way I can get the query to
> work. I'll have to scan the data even if I move it back into a flat file.
>
> BTW I understand what your saying about normalizing the data, and in
general
> I agree with you.
>
> So, is there any way to of thing with a BLOB?
>
>
>> WHERE substr(data, 1, 1) == x'bc'
>>
Gabe,
The substr() function doesn't work because it stops at the first 0 byte
in the blob, but it is pretty easy to write your own user defined
function that would return a sub blob instead of a sub string using the
C API functions.
Define the function:
void subblob(sqlite3_context* ctx, int argc, sqlite3_value* argv[])
{
const char* blob;
int blen, start, slen, tail;
assert(argc == 3);
blob = (char*)sqlite3_value_blob(argv[0]);
blen = sqlite3_value_bytes(argv[0]);
start = sqlite3_value_int(argv[1]) - 1; /* arg is 1 based */
slen = sqlite3_value_int(argv[2]);
if (start < 0)
start = 0;
tail = blen - start;
if (tail < 0)
tail = 0;
if (tail < slen)
slen = tail;
if (start >= blen)
start = blen - 1;
sqlite3_result_blob(ctx, blob + start, slen, SQLITE_TRANSIENT);
}
Register the function:
int rc = sqlite3_create_function(db, "subblob", 3,
SQLITE_ANY, NULL, subblob, NULL, NULL);
Now you can use the function:
create table t (
id integer primary key,
data blob
);
select id from t where subblob(data, 100, 4) = X'DEADBEEF';
HTH
Dennis Cote
----------------------------------------------------------------------------
-
To unsubscribe, send email to [EMAIL PROTECTED]
----------------------------------------------------------------------------
-
Dennis,
Thanks very much for your help. Works great and is very powerful. That is
exactly what I needed to know.
-Gabe
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------