postgresql/src/include
John Naylor 0aba255440 Add optimized C string hashing
Given an already-initialized hash state and a NUL-terminated string,
accumulate the hash of the string into the hash state and return the
length for the caller to (optionally) save for the finalizer. This
avoids a strlen call.

If the string pointer is aligned, we can use a word-at-a-time
algorithm for NUL lookahead. The aligned case is only used on 64-bit
platforms, since it's not worth the extra complexity for 32-bit.

Handling the tail of the string after finishing the word-wise loop
was inspired by NetBSD's strlen(), but no code was taken since that
is written in assembly language.

As demonstration, use this in the search path cache. This brings the
general case performance closer to the special case optimization done
in commit a86c61c9ee. There are other places that could benefit, but
that is left for future work.

Jeff Davis and John Naylor
Reviewed by Heikki Linnakangas, Jian He, Junwang Zhao

Discussion: https://postgr.es/m/3820f030fd008ff14134b3e9ce5cc6dd623ed479.camel%40j-davis.com
Discussion: https://postgr.es/m/b40292c99e623defe5eadedab1d438cf51a4107c.camel%40j-davis.com
2024-01-19 12:56:15 +07:00
..
access Optimize vacuuming of relations with no indexes. 2024-01-18 10:03:42 -05:00
archive Update copyright for 2024 2024-01-03 20:49:05 -05:00
backup Update copyright for 2024 2024-01-03 20:49:05 -05:00
bootstrap Update copyright for 2024 2024-01-03 20:49:05 -05:00
catalog Make attstattarget nullable 2024-01-13 18:14:53 +01:00
commands Add new COPY option SAVE_ERROR_TO 2024-01-16 23:08:53 +02:00
common Add optimized C string hashing 2024-01-19 12:56:15 +07:00
datatype Update copyright for 2024 2024-01-03 20:49:05 -05:00
executor Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe_utils Update copyright for 2024 2024-01-03 20:49:05 -05:00
foreign Update copyright for 2024 2024-01-03 20:49:05 -05:00
jit Update copyright for 2024 2024-01-03 20:49:05 -05:00
lib Update copyright for 2024 2024-01-03 20:49:05 -05:00
libpq Make dblink interruptible, via new libpqsrv APIs. 2024-01-08 11:39:56 -08:00
mb Update copyright for 2024 2024-01-03 20:49:05 -05:00
nodes Fix broken Bitmapset optimization in DiscreteKnapsack() 2024-01-19 10:44:36 +13:00
optimizer Allow examine_simple_variable() to work on INSERT RETURNING Vars. 2024-01-08 11:48:44 -05:00
parser Update copyright for 2024 2024-01-03 20:49:05 -05:00
partitioning Update copyright for 2024 2024-01-03 20:49:05 -05:00
pch Update copyright for 2024 2024-01-03 20:49:05 -05:00
port Update copyright for 2024 2024-01-03 20:49:05 -05:00
portability Update copyright for 2024 2024-01-03 20:49:05 -05:00
postmaster Add missing PGDLLIMPORT markings 2024-01-16 13:53:28 +02:00
regex Update copyright for 2024 2024-01-03 20:49:05 -05:00
replication Update copyright for 2024 2024-01-03 20:49:05 -05:00
rewrite Update copyright for 2024 2024-01-03 20:49:05 -05:00
snowball Update copyright for 2024 2024-01-03 20:49:05 -05:00
statistics Update copyright for 2024 2024-01-03 20:49:05 -05:00
storage Add missing PGDLLIMPORT markings 2024-01-16 13:53:28 +02:00
tcop Update copyright for 2024 2024-01-03 20:49:05 -05:00
tsearch Update copyright for 2024 2024-01-03 20:49:05 -05:00
utils Add inline incremental hash functions for in-memory use 2024-01-19 12:44:09 +07:00
.gitignore Refactor dlopen() support 2018-09-06 11:33:04 +02:00
c.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fmgr.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
funcapi.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
getopt_long.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
Makefile Remove distprep 2023-11-06 15:18:04 +01:00
meson.build Update copyright for 2024 2024-01-03 20:49:05 -05:00
miscadmin.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_config.h.in Use BIO_{get,set}_app_data instead of BIO_{get,set}_data. 2023-11-28 12:34:03 -05:00
pg_config_ext.h.in Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00
pg_config_ext.h.meson meson: Add initial version of meson based build system 2022-09-21 22:37:17 -07:00
pg_config_manual.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_getopt.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_trace.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgstat.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgtar.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgtime.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
port.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
postgres.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
postgres_ext.h Move RelFileNumber declarations to common/relpath.h. 2022-09-27 12:01:57 -04:00
postgres_fe.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
varatt.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
windowapi.h Update copyright for 2024 2024-01-03 20:49:05 -05:00