postgresql/src/tools
Tom Lane c64d0cd5ce Use perfect hashing, instead of binary search, for keyword lookup.
We've been speculating for a long time that hash-based keyword lookup
ought to be faster than binary search, but up to now we hadn't found
a suitable tool for generating the hash function.  Joerg Sonnenberger
provided the inspiration, and sample code, to show us that rolling our
own generator wasn't a ridiculous idea.  Hence, do that.

The method used here requires a lookup table of approximately 4 bytes
per keyword, but that's less than what we saved in the predecessor commit
afb0d0712, so it's not a big problem.  The time savings is indeed
significant: preliminary testing suggests that the total time for raw
parsing (flex + bison phases) drops by ~20%.

Patch by me, but it owes its existence to Joerg Sonnenberger;
thanks also to John Naylor for review.

Discussion: https://postgr.es/m/20190103163340.GA15803@britannica.bec.de
2019-01-09 19:47:46 -05:00
..
editors Update documentation editor setup instructions 2018-07-13 21:23:41 +02:00
findoidjoins Update copyright for 2019 2019-01-02 12:44:25 -05:00
ifaddrs Update copyright for 2019 2019-01-02 12:44:25 -05:00
make_diff Remove useless whitespace at end of lines 2010-11-23 22:34:55 +02:00
msvc Use perfect hashing, instead of binary search, for keyword lookup. 2019-01-09 19:47:46 -05:00
perlcheck Fix whitespace 2018-06-27 08:03:54 +02:00
pginclude Don't fall off the end of perl functions 2018-05-27 09:08:42 -04:00
pgindent Exclude temporary directories from pgindent 2018-10-29 11:39:44 +01:00
ccsym tools/ccsym: update for modern versions of gcc 2015-01-20 13:02:58 -05:00
check_bison_recursion.pl Update copyright for 2019 2019-01-02 12:44:25 -05:00
codelines Fix remaining stray references to CVS. 2010-09-22 19:51:39 -04:00
copyright.pl Update copyright for 2019 2019-01-02 12:44:25 -05:00
FAQ2txt Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
find_badmacros Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
find_static Fix omission of -X (--no-psqlrc) in some psql invocations. 2015-12-28 11:46:43 -05:00
find_typedef Refer to OS X as "macOS", except for the port name which is still "darwin". 2016-09-25 15:40:57 -04:00
fix-old-flex-code.pl Update copyright for 2019 2019-01-02 12:44:25 -05:00
gen_keywordlist.pl Use perfect hashing, instead of binary search, for keyword lookup. 2019-01-09 19:47:46 -05:00
git-external-diff Preserve information on use of git-external-diff 2018-05-24 23:45:31 +09:30
git_changelog Stamp HEAD as 12devel 2018-06-30 12:47:59 -04:00
make_ctags Mention original ctags option name. 2012-02-24 16:19:18 -05:00
make_etags Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
make_mkid Add another pgdefine path check, and a cvs-git change. 2011-08-26 21:52:35 -04:00
PerfectHash.pm Use perfect hashing, instead of binary search, for keyword lookup. 2019-01-09 19:47:46 -05:00
pgtest pgtest: run clean, build, and check stages separately 2018-07-28 15:34:06 -04:00
RELEASE_CHANGES Use more modern instructions for creating a new dev cycle 2018-07-01 07:55:05 -04:00
testint128.c Update copyright for 2019 2019-01-02 12:44:25 -05:00
valgrind.supp Add valgrind suppressions for wcsrtombs optimizations 2018-11-17 23:50:21 +01:00
version_stamp.pl Update copyright for 2019 2019-01-02 12:44:25 -05:00
win32tzlist.pl Update copyright for 2019 2019-01-02 12:44:25 -05:00