Andrew Dunstan wrote:


Tom Lane wrote:
Andrew Dunstan <[EMAIL PROTECTED]> writes:
We should only be able to get out of step from the "%_" case, I believe, so we should only need to do the first-byte test in that case (which is in a different code path from the normal "_" case. Does that seem right?

At least put Assert(IsFirstByte()) in the main path.

I'm a bit suspicious of the separate-path business anyway.  Will it do
the right thing with say "%%%_" ?


Yes:


           /* %% is the same as % according to the SQL standard */
           /* Advance past all %'s */
           while ((plen > 0) && (*p == '%'))
               NextByte(p, plen);

I am also wondering if it might be sensible to make this choice once at backend startup and store a function pointer, instead of doing it for every string processed by like/ilike:

   if (pg_database_encoding_max_length() == 1)
       return SB_MatchText(s, slen, p, plen);
   else if (GetDatabaseEncoding() == PG_UTF8)
       return UTF8_MatchText(s, slen, p, plen);
   else
       return MB_MatchText(s, slen, p, plen);

I guess that might make matters harder if we ever got per-column encodings.

cheers

andrew



---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

              http://www.postgresql.org/docs/faq

Reply via email to