Re: like/ilike improvements - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: like/ilike improvements
Date
Msg-id 46546536.9070700@dunslane.net
Whole thread Raw
In response to Re: like/ilike improvements  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: like/ilike improvements  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers

Andrew Dunstan wrote:
>
>
> Tom Lane wrote:
>> Andrew Dunstan <andrew@dunslane.net> 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




pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: like/ilike improvements
Next
From: Tom Lane
Date:
Subject: Re: like/ilike improvements