diff options
Diffstat (limited to 'contrib/hstore/hstore.h')
-rw-r--r-- | contrib/hstore/hstore.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/contrib/hstore/hstore.h b/contrib/hstore/hstore.h new file mode 100644 index 00000000000..5fb59996103 --- /dev/null +++ b/contrib/hstore/hstore.h @@ -0,0 +1,49 @@ +#ifndef __HSTORE_H__ +#define __HSTORE_H__ + +#include "postgres.h" +#include "funcapi.h" +#include "access/gist.h" +#include "access/itup.h" +#include "utils/elog.h" +#include "utils/palloc.h" +#include "utils/builtins.h" +#include "storage/bufpage.h" + + +typedef struct { + uint16 keylen; + uint16 vallen; + uint32 + valisnull:1, + pos:31; +} HEntry; + + +typedef struct { + int4 len; + int4 size; + char data[1]; +} HStore; + +#define HSHRDSIZE (2*sizeof(int4)) +#define CALCDATASIZE(x, lenstr) ( (x) * sizeof(HEntry) + HSHRDSIZE + (lenstr) ) +#define ARRPTR(x) ( (HEntry*) ( (char*)(x) + HSHRDSIZE ) ) +#define STRPTR(x) ( (char*)(x) + HSHRDSIZE + ( sizeof(HEntry) * ((HStore*)x)->size ) ) + + +#define PG_GETARG_HS(x) ((HStore*)PG_DETOAST_DATUM(PG_GETARG_DATUM(x))) + +typedef struct { + char *key; + char *val; + uint16 keylen; + uint16 vallen; + bool isnull; + bool needfree; +} Pairs; + +int comparePairs(const void *a, const void *b); +int uniquePairs(Pairs * a, int4 l, int4 *buflen); + +#endif |