/*-------------------------------------------------------------------------
*
* pg_crc . c
* PostgreSQL CRC support
*
* See Ross Williams ' excellent introduction
* A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS , available from
* http : //ross.net/crc/download/crc_v3.txt or several other net sites.
*
* Portions Copyright ( c ) 1996 - 2025 , PostgreSQL Global Development Group
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
*
* IDENTIFICATION
* src / backend / utils / hash / pg_crc . c
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
#include "postgres.h"
#include "port/pg_crc32c.h"
#include "utils/fmgrprotos.h"
#include "utils/pg_crc.h"
#include "varatt.h"
/*
* Lookup table for calculating CRC - 32 using Sarwate ' s algorithm .
*
* This table is based on the polynomial
* x ^ 32 + x ^ 26 + x ^ 23 + x ^ 22 + x ^ 16 + x ^ 12 + x ^ 11 + x ^ 10 + x ^ 8 + x ^ 7 + x ^ 5 + x ^ 4 + x ^ 2 + x + 1 .
* ( This is the same polynomial used in Ethernet checksums , for instance . )
* Using Williams ' terms , this is the " normal " , not " reflected " version .
*/
const uint32 pg_crc32_table[256 ] = {
0 x00000000, 0 x77073096, 0 xEE0E612C, 0 x990951BA,
0 x076DC419, 0 x706AF48F, 0 xE963A535, 0 x9E6495A3,
0 x0EDB8832, 0 x79DCB8A4, 0 xE0D5E91E, 0 x97D2D988,
0 x09B64C2B, 0 x7EB17CBD, 0 xE7B82D07, 0 x90BF1D91,
0 x1DB71064, 0 x6AB020F2, 0 xF3B97148, 0 x84BE41DE,
0 x1ADAD47D, 0 x6DDDE4EB, 0 xF4D4B551, 0 x83D385C7,
0 x136C9856, 0 x646BA8C0, 0 xFD62F97A, 0 x8A65C9EC,
0 x14015C4F, 0 x63066CD9, 0 xFA0F3D63, 0 x8D080DF5,
0 x3B6E20C8, 0 x4C69105E, 0 xD56041E4, 0 xA2677172,
0 x3C03E4D1, 0 x4B04D447, 0 xD20D85FD, 0 xA50AB56B,
0 x35B5A8FA, 0 x42B2986C, 0 xDBBBC9D6, 0 xACBCF940,
0 x32D86CE3, 0 x45DF5C75, 0 xDCD60DCF, 0 xABD13D59,
0 x26D930AC, 0 x51DE003A, 0 xC8D75180, 0 xBFD06116,
0 x21B4F4B5, 0 x56B3C423, 0 xCFBA9599, 0 xB8BDA50F,
0 x2802B89E, 0 x5F058808, 0 xC60CD9B2, 0 xB10BE924,
0 x2F6F7C87, 0 x58684C11, 0 xC1611DAB, 0 xB6662D3D,
0 x76DC4190, 0 x01DB7106, 0 x98D220BC, 0 xEFD5102A,
0 x71B18589, 0 x06B6B51F, 0 x9FBFE4A5, 0 xE8B8D433,
0 x7807C9A2, 0 x0F00F934, 0 x9609A88E, 0 xE10E9818,
0 x7F6A0DBB, 0 x086D3D2D, 0 x91646C97, 0 xE6635C01,
0 x6B6B51F4, 0 x1C6C6162, 0 x856530D8, 0 xF262004E,
0 x6C0695ED, 0 x1B01A57B, 0 x8208F4C1, 0 xF50FC457,
0 x65B0D9C6, 0 x12B7E950, 0 x8BBEB8EA, 0 xFCB9887C,
0 x62DD1DDF, 0 x15DA2D49, 0 x8CD37CF3, 0 xFBD44C65,
0 x4DB26158, 0 x3AB551CE, 0 xA3BC0074, 0 xD4BB30E2,
0 x4ADFA541, 0 x3DD895D7, 0 xA4D1C46D, 0 xD3D6F4FB,
0 x4369E96A, 0 x346ED9FC, 0 xAD678846, 0 xDA60B8D0,
0 x44042D73, 0 x33031DE5, 0 xAA0A4C5F, 0 xDD0D7CC9,
0 x5005713C, 0 x270241AA, 0 xBE0B1010, 0 xC90C2086,
0 x5768B525, 0 x206F85B3, 0 xB966D409, 0 xCE61E49F,
0 x5EDEF90E, 0 x29D9C998, 0 xB0D09822, 0 xC7D7A8B4,
0 x59B33D17, 0 x2EB40D81, 0 xB7BD5C3B, 0 xC0BA6CAD,
0 xEDB88320, 0 x9ABFB3B6, 0 x03B6E20C, 0 x74B1D29A,
0 xEAD54739, 0 x9DD277AF, 0 x04DB2615, 0 x73DC1683,
0 xE3630B12, 0 x94643B84, 0 x0D6D6A3E, 0 x7A6A5AA8,
0 xE40ECF0B, 0 x9309FF9D, 0 x0A00AE27, 0 x7D079EB1,
0 xF00F9344, 0 x8708A3D2, 0 x1E01F268, 0 x6906C2FE,
0 xF762575D, 0 x806567CB, 0 x196C3671, 0 x6E6B06E7,
0 xFED41B76, 0 x89D32BE0, 0 x10DA7A5A, 0 x67DD4ACC,
0 xF9B9DF6F, 0 x8EBEEFF9, 0 x17B7BE43, 0 x60B08ED5,
0 xD6D6A3E8, 0 xA1D1937E, 0 x38D8C2C4, 0 x4FDFF252,
0 xD1BB67F1, 0 xA6BC5767, 0 x3FB506DD, 0 x48B2364B,
0 xD80D2BDA, 0 xAF0A1B4C, 0 x36034AF6, 0 x41047A60,
0 xDF60EFC3, 0 xA867DF55, 0 x316E8EEF, 0 x4669BE79,
0 xCB61B38C, 0 xBC66831A, 0 x256FD2A0, 0 x5268E236,
0 xCC0C7795, 0 xBB0B4703, 0 x220216B9, 0 x5505262F,
0 xC5BA3BBE, 0 xB2BD0B28, 0 x2BB45A92, 0 x5CB36A04,
0 xC2D7FFA7, 0 xB5D0CF31, 0 x2CD99E8B, 0 x5BDEAE1D,
0 x9B64C2B0, 0 xEC63F226, 0 x756AA39C, 0 x026D930A,
0 x9C0906A9, 0 xEB0E363F, 0 x72076785, 0 x05005713,
0 x95BF4A82, 0 xE2B87A14, 0 x7BB12BAE, 0 x0CB61B38,
0 x92D28E9B, 0 xE5D5BE0D, 0 x7CDCEFB7, 0 x0BDBDF21,
0 x86D3D2D4, 0 xF1D4E242, 0 x68DDB3F8, 0 x1FDA836E,
0 x81BE16CD, 0 xF6B9265B, 0 x6FB077E1, 0 x18B74777,
0 x88085AE6, 0 xFF0F6A70, 0 x66063BCA, 0 x11010B5C,
0 x8F659EFF, 0 xF862AE69, 0 x616BFFD3, 0 x166CCF45,
0 xA00AE278, 0 xD70DD2EE, 0 x4E048354, 0 x3903B3C2,
0 xA7672661, 0 xD06016F7, 0 x4969474D, 0 x3E6E77DB,
0 xAED16A4A, 0 xD9D65ADC, 0 x40DF0B66, 0 x37D83BF0,
0 xA9BCAE53, 0 xDEBB9EC5, 0 x47B2CF7F, 0 x30B5FFE9,
0 xBDBDF21C, 0 xCABAC28A, 0 x53B39330, 0 x24B4A3A6,
0 xBAD03605, 0 xCDD70693, 0 x54DE5729, 0 x23D967BF,
0 xB3667A2E, 0 xC4614AB8, 0 x5D681B02, 0 x2A6F2B94,
0 xB40BBE37, 0 xC30C8EA1, 0 x5A05DF1B, 0 x2D02EF8D
};
/*
* SQL - callable functions
*/
Datum
crc32_bytea(PG_FUNCTION_ARGS)
{
bytea *in = PG_GETARG_BYTEA_PP(0 );
pg_crc32 crc;
INIT_TRADITIONAL_CRC32(crc);
COMP_TRADITIONAL_CRC32(crc, VARDATA_ANY(in), VARSIZE_ANY_EXHDR(in));
FIN_TRADITIONAL_CRC32(crc);
PG_RETURN_INT64(crc);
}
Datum
crc32c_bytea(PG_FUNCTION_ARGS)
{
bytea *in = PG_GETARG_BYTEA_PP(0 );
pg_crc32c crc;
INIT_CRC32C(crc);
COMP_CRC32C(crc, VARDATA_ANY(in), VARSIZE_ANY_EXHDR(in));
FIN_CRC32C(crc);
PG_RETURN_INT64(crc);
}
Messung V0.5 in Prozent C=90 H=91 G=90
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland