mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-22 14:13:23 +02:00
Not much to say here --- does what it says on the tin. The "binary"
representation in each case is really just the same as the text format,
though we prefix a version-number byte in case anyone ever feels
motivated to change that. Thus, there's not any expectation of improved
speed or reduced space; the point here is just to allow clients to use
binary format for all columns of a query result or COPY data.
This makes use of the recently added ALTER TYPE support to add binary
I/O functions to an existing data type. As in commit a80818605
,
we can piggy-back on there already being a new-for-v13 version of the
ltree extension, so we don't need a new update script file.
Nino Floris, reviewed by Alexander Korotkov and myself
Discussion: https://postgr.es/m/CANmj9Vxx50jOo1L7iSRxd142NyTz6Bdcgg7u9P3Z8o0=HGkYyQ@mail.gmail.com
40 lines
676 B
C
40 lines
676 B
C
/* contrib/ltree/crc32.c */
|
|
|
|
/*
|
|
* Implements CRC-32, as used in ltree.
|
|
*
|
|
* Note that the CRC is used in the on-disk format of GiST indexes, so we
|
|
* must stay backwards-compatible!
|
|
*/
|
|
|
|
#include "postgres.h"
|
|
|
|
#ifdef LOWER_NODE
|
|
#include <ctype.h>
|
|
#define TOLOWER(x) tolower((unsigned char) (x))
|
|
#else
|
|
#define TOLOWER(x) (x)
|
|
#endif
|
|
|
|
#include "crc32.h"
|
|
#include "utils/pg_crc.h"
|
|
|
|
unsigned int
|
|
ltree_crc32_sz(const char *buf, int size)
|
|
{
|
|
pg_crc32 crc;
|
|
const char *p = buf;
|
|
|
|
INIT_TRADITIONAL_CRC32(crc);
|
|
while (size > 0)
|
|
{
|
|
char c = (char) TOLOWER(*p);
|
|
|
|
COMP_TRADITIONAL_CRC32(crc, &c, 1);
|
|
size--;
|
|
p++;
|
|
}
|
|
FIN_TRADITIONAL_CRC32(crc);
|
|
return (unsigned int) crc;
|
|
}
|