mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
At the head of wchareq, length of (multibyte) character is compared by
using pg_mblen. Therefore, pg_mblen is executed many times, and it becomes a bottleneck. This patch makes a short cut, and reduces execution frequency of pg_mblen by comparing the first byte first. a_ogawa
This commit is contained in:
parent
bbb586ff21
commit
8c792fe9cb
@ -11,7 +11,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/like.c,v 1.59 2004/12/31 22:01:22 pgsql Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/like.c,v 1.60 2005/05/25 22:59:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -50,12 +50,18 @@ static text *MB_do_like_escape(text *, text *);
|
|||||||
static int
|
static int
|
||||||
wchareq(unsigned char *p1, unsigned char *p2)
|
wchareq(unsigned char *p1, unsigned char *p2)
|
||||||
{
|
{
|
||||||
int l;
|
int p1_len;
|
||||||
|
|
||||||
l = pg_mblen(p1);
|
/* Optimization: quickly compare the first byte. */
|
||||||
if (pg_mblen(p2) != l)
|
if(*p1 != *p2)
|
||||||
return (0);
|
return (0);
|
||||||
while (l--)
|
|
||||||
|
p1_len = pg_mblen(p1);
|
||||||
|
if (pg_mblen(p2) != p1_len)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/* They are the same length */
|
||||||
|
while (p1_len--)
|
||||||
{
|
{
|
||||||
if (*p1++ != *p2++)
|
if (*p1++ != *p2++)
|
||||||
return (0);
|
return (0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user