Skip to content

Commit 642194b

Browse files
committed
1 parent af7d257 commit 642194b

File tree

14 files changed

+3701
-1
lines changed

14 files changed

+3701
-1
lines changed

contrib/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# $PostgreSQL: pgsql/contrib/Makefile,v 1.68 2006/09/05 17:20:26 tgl Exp $
1+
# $PostgreSQL: pgsql/contrib/Makefile,v 1.69 2006/09/05 18:00:57 teodor Exp $
22

33
subdir = contrib
44
top_builddir = ..
@@ -12,6 +12,7 @@ WANTED_DIRS = \
1212
dblink \
1313
earthdistance \
1414
fuzzystrmatch \
15+
hstore \
1516
intagg \
1617
intarray \
1718
isbn_issn \

contrib/README

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ fuzzystrmatch -
5252
Levenshtein, metaphone, and soundex fuzzy string matching
5353
by Joe Conway <mail@joeconway.com>, Joel Burton <jburton@scw.org>
5454

55+
hstore -
56+
Hstore - module for storing (key,value) pairs
57+
by Oleg Bartunov <oleg@sai.msu.su> and Teodor Sigaev <teodor@sigaev.ru>
58+
5559
intagg -
5660
Integer aggregator
5761
by mlw <markw@mohawksoft.com>

contrib/hstore/Makefile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
subdir = contrib/hstore
2+
top_builddir = ../..
3+
include $(top_builddir)/src/Makefile.global
4+
5+
6+
override CPPFLAGS := -I. $(CPPFLAGS)
7+
8+
MODULE_big = hstore
9+
OBJS = hstore_io.o hstore_op.o hstore_gist.o crc32.o
10+
11+
DATA_built = hstore.sql
12+
DOCS = README.hstore
13+
REGRESS = hstore
14+
15+
include $(top_srcdir)/contrib/contrib-global.mk
16+
# DO NOT DELETE
17+

contrib/hstore/README.hstore

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
Hstore - contrib module for storing (key,value) pairs
2+
3+
[Online version] (http://www.sai.msu.su/~megera/oddmuse/index.cgi?Hstore)
4+
5+
Motivation
6+
7+
Many attributes rarely searched, semistructural data, lazy DBA
8+
9+
Authors
10+
11+
* Oleg Bartunov <oleg@sai.msu.su>, Moscow, Moscow University, Russia
12+
* Teodor Sigaev <teodor@sigaev.ru>, Moscow, Delta-Soft Ltd.,Russia
13+
14+
License
15+
16+
Stable version, included into PostgreSQL distribution, released under BSD license. Development version, available from this site, released under the GNU General Public License, version 2 (June 1991).
17+
18+
Operations
19+
20+
* hstore -> text - get value , perl analogy $h{key}
21+
22+
select 'a=>q, b=>g'->'a';
23+
?
24+
------
25+
q
26+
27+
* hstore || hstore - concatenation, perl analogy %a=( %b, %c );
28+
29+
regression=# select 'a=>b'::hstore || 'c=>d'::hstore;
30+
?column?
31+
--------------------
32+
"a"=>"b", "c"=>"d"
33+
(1 row)
34+
35+
but, notice
36+
37+
regression=# select 'a=>b'::hstore || 'a=>d'::hstore;
38+
?column?
39+
----------
40+
"a"=>"d"
41+
(1 row)
42+
43+
* text => text - creates hstore type from two text strings
44+
45+
select 'a'=>'b';
46+
?column?
47+
----------
48+
"a"=>"b"
49+
50+
* hstore @ hstore - contains operation, check if left operand contains right.
51+
52+
regression=# select 'a=>b, b=>1, c=>NULL'::hstore @ 'a=>c';
53+
?column?
54+
----------
55+
f
56+
(1 row)
57+
58+
regression=# select 'a=>b, b=>1, c=>NULL'::hstore @ 'b=>1';
59+
?column?
60+
----------
61+
t
62+
(1 row)
63+
64+
* hstore ~ hstore - contained operation, check if left operand is contained in right
65+
66+
Functions
67+
68+
* akeys(hstore) - returns all keys from hstore as array
69+
70+
regression=# select akeys('a=>1,b=>2');
71+
akeys
72+
-------
73+
{a,b}
74+
75+
* skeys(hstore) - returns all keys from hstore as strings
76+
77+
regression=# select skeys('a=>1,b=>2');
78+
skeys
79+
-------
80+
a
81+
b
82+
83+
* avals(hstore) - returns all values from hstore as array
84+
85+
regression=# select avals('a=>1,b=>2');
86+
avals
87+
-------
88+
{1,2}
89+
90+
* svals(hstore) - returns all values from hstore as strings
91+
92+
regression=# select svals('a=>1,b=>2');
93+
svals
94+
-------
95+
1
96+
2
97+
98+
* delete (hstore,text) - delete (key,value) from hstore if key matches argument.
99+
100+
regression=# select delete('a=>1,b=>2','b');
101+
delete
102+
----------
103+
"a"=>"1"
104+
105+
* each(hstore) return (key, value) pairs
106+
107+
regression=# select * from each('a=>1,b=>2');
108+
key | value
109+
-----+-------
110+
a | 1
111+
b | 2
112+
113+
* isexists (hstore,text) - returns 'true if key is exists in hstore and false otherwise.
114+
115+
regression=# select isexists('a=>1','a');
116+
isexists
117+
----------
118+
t
119+
120+
* isdefined (hstore,text) - returns true if key is exists in hstore and its value is not NULL.
121+
122+
regression=# select isdefined('a=>NULL','a');
123+
isdefined
124+
-----------
125+
f
126+
127+
Indices
128+
129+
Module provides index support for '@' and '~' operations.
130+
131+
create index hidx on testhstore using gist(h);
132+
133+
Note
134+
135+
Use parenthesis in select below, because priority of 'is' is higher than that of '->'
136+
137+
select id from entrants where (info->'education_period') is not null;
138+
139+
Examples
140+
141+
* add key
142+
143+
update tt set h=h||'c=>3';
144+
145+
* delete key
146+
147+
update tt set h=delete(h,'k1');
148+
149+
* Statistics
150+
151+
hstore type, because of its intrinsic liberality, could contain a lot of different keys. Checking for valid keys is the task of application. Examples below demonstrate several techniques how to check keys statistics.
152+
153+
o simple example
154+
155+
select * from each('aaa=>bq, b=>NULL, ""=>1 ');
156+
157+
o using table
158+
159+
select (each(h)).key, (each(h)).value into stat from testhstore ;
160+
161+
o online stat
162+
163+
select key, count(*) from (select (each(h)).key from testhstore) as stat group by key order by count desc, key;
164+
key | count
165+
-----------+-------
166+
line | 883
167+
query | 207
168+
pos | 203
169+
node | 202
170+
space | 197
171+
status | 195
172+
public | 194
173+
title | 190
174+
org | 189
175+
...................

contrib/hstore/crc32.c

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/* Both POSIX and CRC32 checksums */
2+
3+
#include <sys/types.h>
4+
#include <stdio.h>
5+
#include <sys/types.h>
6+
7+
#include "crc32.h"
8+
9+
/*
10+
* This code implements the AUTODIN II polynomial
11+
* The variable corresponding to the macro argument "crc" should
12+
* be an unsigned long.
13+
* Oroginal code by Spencer Garrett <srg@quick.com>
14+
*/
15+
16+
#define _CRC32_(crc, ch) (crc = (crc >> 8) ^ crc32tab[(crc ^ (ch)) & 0xff])
17+
18+
/* generated using the AUTODIN II polynomial
19+
* x^32 + x^26 + x^23 + x^22 + x^16 +
20+
* x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
21+
*/
22+
23+
static const unsigned int crc32tab[256] = {
24+
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
25+
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
26+
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
27+
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
28+
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
29+
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
30+
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
31+
0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
32+
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
33+
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
34+
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
35+
0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
36+
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
37+
0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
38+
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
39+
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
40+
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
41+
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
42+
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
43+
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
44+
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
45+
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
46+
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
47+
0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
48+
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
49+
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
50+
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
51+
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
52+
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
53+
0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
54+
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
55+
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
56+
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
57+
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
58+
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
59+
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
60+
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
61+
0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
62+
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
63+
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
64+
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
65+
0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
66+
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
67+
0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
68+
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
69+
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
70+
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
71+
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
72+
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
73+
0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
74+
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
75+
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
76+
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
77+
0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
78+
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
79+
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
80+
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
81+
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
82+
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
83+
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
84+
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
85+
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
86+
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
87+
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
88+
};
89+
90+
unsigned int
91+
crc32_sz(char *buf, int size)
92+
{
93+
unsigned int crc = ~0;
94+
char *p;
95+
int len,
96+
nr;
97+
98+
len = 0;
99+
nr = size;
100+
for (len += nr, p = buf; nr--; ++p)
101+
_CRC32_(crc, *p);
102+
return ~crc;
103+
}

contrib/hstore/crc32.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#ifndef _CRC32_H
2+
#define _CRC32_H
3+
4+
/* Returns crc32 of data block */
5+
extern unsigned int crc32_sz(char *buf, int size);
6+
7+
/* Returns crc32 of null-terminated string */
8+
#define crc32(buf) crc32_sz((buf),strlen(buf))
9+
10+
#endif

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy