diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index 541bd0e629..9289416ca4 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -11,7 +11,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * 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 wchareq(unsigned char *p1, unsigned char *p2) { - int l; + int p1_len; - l = pg_mblen(p1); - if (pg_mblen(p2) != l) + /* Optimization: quickly compare the first byte. */ + if(*p1 != *p2) 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++) return (0);