mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03: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;
 | |
| }
 |