Commit 8c792fe9 authored by Bruce Momjian's avatar Bruce Momjian

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
parent bbb586ff
...@@ -11,7 +11,7 @@ ...@@ -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 *); ...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment