1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Use memcmp() rather than strncmp() when shorter string length is known.

It appears that this will be faster for all but the shortest strings;
at least one some platforms, memcmp() can use word-at-a-time comparisons.

Noah Misch, somewhat pared down.
This commit is contained in:
Robert Haas
2010-12-21 22:11:40 -05:00
parent c5160b7eec
commit 32ba2b5160
7 changed files with 33 additions and 33 deletions

View File

@ -1286,7 +1286,7 @@ varstr_cmp(char *arg1, int len1, char *arg2, int len2)
*/
if (lc_collate_is_c())
{
result = strncmp(arg1, arg2, Min(len1, len2));
result = memcmp(arg1, arg2, Min(len1, len2));
if ((result == 0) && (len1 != len2))
result = (len1 < len2) ? -1 : 1;
}
@ -1370,7 +1370,7 @@ varstr_cmp(char *arg1, int len1, char *arg2, int len2)
*/
if (result == 0)
{
result = strncmp(arg1, arg2, Min(len1, len2));
result = memcmp(arg1, arg2, Min(len1, len2));
if ((result == 0) && (len1 != len2))
result = (len1 < len2) ? -1 : 1;
}
@ -1462,8 +1462,8 @@ texteq(PG_FUNCTION_ARGS)
if (VARSIZE_ANY_EXHDR(arg1) != VARSIZE_ANY_EXHDR(arg2))
result = false;
else
result = (strncmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2),
VARSIZE_ANY_EXHDR(arg1)) == 0);
result = (memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2),
VARSIZE_ANY_EXHDR(arg1)) == 0);
PG_FREE_IF_COPY(arg1, 0);
PG_FREE_IF_COPY(arg2, 1);
@ -1485,8 +1485,8 @@ textne(PG_FUNCTION_ARGS)
if (VARSIZE_ANY_EXHDR(arg1) != VARSIZE_ANY_EXHDR(arg2))
result = true;
else
result = (strncmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2),
VARSIZE_ANY_EXHDR(arg1)) != 0);
result = (memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2),
VARSIZE_ANY_EXHDR(arg1)) != 0);
PG_FREE_IF_COPY(arg1, 0);
PG_FREE_IF_COPY(arg2, 1);
@ -1612,7 +1612,7 @@ internal_text_pattern_compare(text *arg1, text *arg2)
len1 = VARSIZE_ANY_EXHDR(arg1);
len2 = VARSIZE_ANY_EXHDR(arg2);
result = strncmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2));
result = memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), Min(len1, len2));
if (result != 0)
return result;
else if (len1 < len2)