Working with version 3.9.2 on IBM z/OS case insensitive LIKE queries do not work if case does not match. The following #if defined(SQLITE_EBCDIC) is important:
/* ** For LIKE and GLOB matching on EBCDIC machines, assume that every ** character is exactly one byte in size. Also, provde the Utf8Read() ** macro for fast reading of the next character in the common case where ** the next character is ASCII. */ #if defined(SQLITE_EBCDIC) # define sqlite3Utf8Read(A) (*((*A)++)) # define Utf8Read(A) (*(A++)) #else # define Utf8Read(A) (A[0]<0x80?*(A++):sqlite3Utf8Read(&A)) #endif Within patternCompare() there are the following checks: /* "[...]" immediately follows the "*". We have to do a slow ** recursive search in this case, but it is an unusual case. */ assert( matchOther<0x80 ); /* '[' is a single-byte character */ . . . /* At this point variable c contains the first character of the ** pattern string past the "*". Search in the input string for the ** first matching character and recursively contine the match from ** that point. ** ** For a case-insensitive search, set variable cx to be the same as ** c but in the other case and search the input string for either ** c or cx. */ if( c<=0x80 ){ . . . if( noCase && c<0x80 && c2<0x80 && sqlite3Tolower(c)==sqlite3Tolower(c2) ){ continue; } Since EBCDIC character values are mostly >0x80 these checks can produce invalid results on IBM z/OS. Thanks for the help. Roland Martin