postgresql/src
Tom Lane 5f6f840e93 Reduce the alignment requirement of type "name" from int to char, and arrange
to suppress zero-padding of "name" entries in indexes.

The alignment change is unlikely to save any space, but it is really needed
anyway to make the world safe for our widespread practice of passing plain
old C strings to functions that are declared as taking Name.  In the previous
coding, the C compiler was entitled to assume that a Name pointer was
word-aligned; but we were failing to guarantee that.  I think the reason
we'd not seen failures is that usually the only thing that gets done with
such a pointer is strcmp(), which is hard to optimize in a way that exploits
word-alignment.  Still, some enterprising compiler guy will probably think
of a way eventually, or we might change our code in a way that exposes
more-obvious optimization opportunities.

The padding change is accomplished in one-liner fashion by declaring the
"name" index opclasses to use storage type "cstring" in pg_opclass.h.
Normally btree and hash don't allow a nondefault storage type, because they
don't have any provisions for converting the input datum to another type.
However, because name and cstring are effectively the same thing except for
padding, no conversion is needed --- we only need index_form_tuple() to treat
the datum as being cstring not name, and this is sufficient.  This seems to
make for about a one-third reduction in the typical sizes of system catalog
indexes that involve "name" columns, of which we have many.

These two changes are only weakly related, but the alignment change makes
me feel safer that the padding change won't introduce problems, so I'm
committing them together.
2008-06-24 17:58:27 +00:00
..
backend Reduce the alignment requirement of type "name" from int to char, and arrange 2008-06-24 17:58:27 +00:00
bin Update "help" output to reflect that \timing now takes an optional on/off 2008-06-11 10:55:43 +00:00
include Reduce the alignment requirement of type "name" from int to char, and arrange 2008-06-24 17:58:27 +00:00
interfaces Add libpq comment about how to determine the format used for passing 2008-06-23 21:10:49 +00:00
makefiles Implement a few changes to how shared libraries and dynamically loadable 2008-04-07 14:15:58 +00:00
pl Clean up a number of bogosities around pltcl's handling of the Tcl "result": 2008-06-17 00:52:43 +00:00
port Use CRITICAL_SECTION instead of Mutexes for thread-locking in libpq on 2008-05-21 14:20:48 +00:00
template Use SYSV semaphores rather than POSIX on Darwin >= 6.0 (i.e., OS X 10.2 2007-09-26 00:32:46 +00:00
test Refactor the handling of the various DropStmt variants so that when multiple 2008-06-14 18:04:34 +00:00
timezone Update time zone data files to tzdata release 2008c (DST law changes in 2008-06-01 18:23:00 +00:00
tools Oops, make the MSVC build put fmgroids.h where it needs to be. 2008-06-24 01:15:36 +00:00
tutorial Add $PostgreSQL$ markers to a lot of files that were missing them. 2008-05-17 01:28:26 +00:00
bcc32.mak Remove old-style win32 client-only visual c++ build infrastructure for everything except 2007-03-05 14:18:38 +00:00
DEVELOPERS Testing commit stuff 2006-07-10 15:50:02 +00:00
Makefile Catch all errors in for and while loops in makefiles. Don't ignore any 2008-03-18 16:24:50 +00:00
Makefile.global.in Upgrade to Autoconf 2.61: 2008-02-17 16:36:43 +00:00
Makefile.shlib On cygwin and win32, don't override the shlib name when building a module. 2008-04-08 09:50:29 +00:00
nls-global.mk Another fix for compiles on an empty 'po' directory. 2008-05-17 21:27:12 +00:00
win32.mak Update supported standalone VC++ version to 7.1+ only, and fix 2007-08-03 10:47:11 +00:00