--- Nuno Lucas <[EMAIL PROTECTED]> wrote:
> On 10/25/05, Joe Wilson <[EMAIL PROTECTED]> wrote:
> > The built-in Sqlite length() function works just fine on blobs:
> >
> > sqlite> select length(X'0000000000');
> > 5
> >
> > Why do you think it doesn't?
>
> I remember a few months ago noticing it would count UTF-8 chars, not
> bytes, so it would not return the right length for blobs in all cases
> (a '\0' is a valid UTF-8 char, but try with the '(c)' [copyright] sign,
> which is 2 bytes).
>
> I don't have the code in front of me, and can be just my memory, but I
> don't see that behaviour changing or would break a lot of SQL during
> normal text manipulation.
>
> Regards,
> ~Nuno Lucas
You are mistaken. Text and blobs are different.
TEXT is of type "SQLITE_TEXT". BLOB is of type "SQLITE_BLOB".
length() has always correctly returned the size of a blob - look at the code:
/*
** Implementation of the length() function
*/
static void lengthFunc(
sqlite3_context *context,
int argc,
sqlite3_value **argv
){
int len;
assert( argc==1 );
switch( sqlite3_value_type(argv[0]) ){
case SQLITE_BLOB:
case SQLITE_INTEGER:
case SQLITE_FLOAT: {
sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
break;
}
case SQLITE_TEXT: {
const char *z = sqlite3_value_text(argv[0]);
for(len=0; *z; z++){ if( (0xc0&*z)!=0x80 ) len++; }
sqlite3_result_int(context, len);
break;
}
default: {
sqlite3_result_null(context);
break;
}
}
}
__________________________________
Start your day with Yahoo! - Make it your home page!
http://www.yahoo.com/r/hs