repertoire-faceting 0.7.7 → 0.7.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/Makefile +12 -7
- data/ext/README.faceting +11 -0
- data/ext/bytea/{faceting_bytea.control → faceting_bytea.control.in} +3 -3
- data/ext/signature/{faceting.control → faceting.control.in} +3 -3
- data/ext/varbit/{faceting_varbit.control → faceting_varbit.control.in} +3 -3
- data/lib/repertoire-faceting/version.rb +1 -1
- metadata +26 -31
- data/ext/faceting--0.7.7.sql +0 -251
- data/ext/faceting_bytea--0.7.7.sql +0 -207
- data/ext/faceting_varbit--0.7.7.sql +0 -198
- data/ext/signature/signature.o +0 -0
- data/ext/signature/signature.so +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee76ad87302d1b279bff45b44ff554b7001895eb
|
4
|
+
data.tar.gz: d46ffc3c8d26c895a0b6ca9a031bdc28bc1f7304
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 201fa166812f31f2bb2c7585e900d8589d947946bab3898c7d5b8602898415f810ae4633aa8ca9978ddfb712526515462bb4f145627ad4f1d9a96cbcb2eed90c
|
7
|
+
data.tar.gz: 1cf7369a282abaee24a0b6d4ffc1571098d4ab6018407df57c5293d7524fb8e6c21fee9ca557c1676dcd9d99c8b7ca6e45f425309e82f313b747e12816feb81a
|
data/ext/Makefile
CHANGED
@@ -8,30 +8,35 @@
|
|
8
8
|
#
|
9
9
|
#-------------------------------------------------------------------------
|
10
10
|
|
11
|
-
API_VERSION = 0.7.
|
11
|
+
API_VERSION = 0.7.8
|
12
12
|
|
13
13
|
MODULES = signature/signature
|
14
14
|
EXTENSION = signature/faceting \
|
15
15
|
bytea/faceting_bytea \
|
16
16
|
varbit/faceting_varbit
|
17
|
-
DATA_built = faceting--$(API_VERSION).sql \
|
18
|
-
faceting_bytea--$(API_VERSION).sql \
|
19
|
-
faceting_varbit--$(API_VERSION).sql
|
17
|
+
DATA_built = signature/faceting--$(API_VERSION).sql \
|
18
|
+
bytea/faceting_bytea--$(API_VERSION).sql \
|
19
|
+
varbit/faceting_varbit--$(API_VERSION).sql
|
20
20
|
DOCS = README.faceting
|
21
|
+
EXTRA_CLEAN = $(EXTENSION:=.control)
|
21
22
|
|
22
23
|
PG_CONFIG = pg_config
|
23
24
|
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
24
25
|
|
26
|
+
# build control files by setting default version number
|
27
|
+
%.control: %.control.in
|
28
|
+
LC_ALL=C sed -e 's/API_VERSION/$(API_VERSION)/g' < $< > $@
|
29
|
+
|
25
30
|
-include $(PGXS)
|
26
31
|
# the dash above means loading pgxs may fail silently on Heroku, but
|
27
32
|
# the API bindings will still be built:
|
28
33
|
api_bindings : $(DATA_built)
|
29
34
|
|
30
|
-
faceting--$(API_VERSION).sql: signature/signature.sql common/util.sql
|
35
|
+
signature/faceting--$(API_VERSION).sql: signature/signature.sql common/util.sql
|
31
36
|
cat signature/signature.sql common/util.sql > $@
|
32
37
|
|
33
|
-
faceting_bytea--$(API_VERSION).sql: bytea/bytea.sql common/util.sql
|
38
|
+
bytea/faceting_bytea--$(API_VERSION).sql: bytea/bytea.sql common/util.sql
|
34
39
|
cat bytea/bytea.sql common/util.sql > $@
|
35
40
|
|
36
|
-
faceting_varbit--$(API_VERSION).sql: varbit/varbit.sql common/util.sql
|
41
|
+
varbit/faceting_varbit--$(API_VERSION).sql: varbit/varbit.sql common/util.sql
|
37
42
|
cat varbit/varbit.sql common/util.sql > $@
|
data/ext/README.faceting
CHANGED
@@ -49,3 +49,14 @@
|
|
49
49
|
--
|
50
50
|
-- $ cd repertoire-faceting/ext
|
51
51
|
-- $ make; sudo make install
|
52
|
+
--
|
53
|
+
-- N.B. Policy to date is to keep the PostgreSQL API version numbers in sync with the Rubygems
|
54
|
+
-- module version numbers. To bump versions, alter these files:
|
55
|
+
--
|
56
|
+
-- ext/Makefile # the PostgreSQL API version number
|
57
|
+
-- lib/repertoire-faceting/version.rb # the Rubygems version number
|
58
|
+
--
|
59
|
+
-- Because this policy alters default_version in each postgresql extension control file with each
|
60
|
+
-- bump, only the most recent version of the PostgreSQL faceting API is available in any server
|
61
|
+
-- (legacy API support is not available.) To date, database servers have mapped onto applications
|
62
|
+
-- one-to-one, so this is not a problem.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Faceting PostgreSQL extension module
|
2
|
-
|
2
|
+
|
3
3
|
comment = 'API for faceted indexing and queries (based on builtin VARBIT bit strings)'
|
4
4
|
requires = plpgsql
|
5
5
|
superuser = false
|
6
|
-
default_version = '
|
7
|
-
schema = 'facet'
|
6
|
+
default_version = 'API_VERSION'
|
7
|
+
schema = 'facet'
|
metadata
CHANGED
@@ -1,61 +1,61 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: repertoire-faceting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher York
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.2.11
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.2.11
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: jquery-rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pg
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.11'
|
48
|
-
- -
|
48
|
+
- - <
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '0.18'
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
|
-
- -
|
55
|
+
- - '>='
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0.11'
|
58
|
-
- -
|
58
|
+
- - <
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0.18'
|
61
61
|
description: Repertoire-faceting adds scalable facet indexing, ajax facet widgets,
|
@@ -66,30 +66,19 @@ executables: []
|
|
66
66
|
extensions: []
|
67
67
|
extra_rdoc_files: []
|
68
68
|
files:
|
69
|
-
- FAQ
|
70
|
-
- INSTALL
|
71
|
-
- LICENSE
|
72
|
-
- README
|
73
|
-
- TODO
|
74
|
-
- ext/Makefile
|
75
|
-
- ext/README.faceting
|
76
69
|
- ext/bytea/bytea.sql
|
77
|
-
- ext/bytea/faceting_bytea.control
|
70
|
+
- ext/bytea/faceting_bytea.control.in
|
78
71
|
- ext/common/util.sql
|
79
72
|
- ext/extconf.rb
|
80
|
-
- ext/
|
81
|
-
- ext/
|
82
|
-
- ext/
|
83
|
-
- ext/signature/faceting.control
|
73
|
+
- ext/Makefile
|
74
|
+
- ext/README.faceting
|
75
|
+
- ext/signature/faceting.control.in
|
84
76
|
- ext/signature/signature.c
|
85
|
-
- ext/signature/signature.o
|
86
|
-
- ext/signature/signature.so
|
87
77
|
- ext/signature/signature.sql
|
88
|
-
- ext/varbit/faceting_varbit.control
|
78
|
+
- ext/varbit/faceting_varbit.control.in
|
89
79
|
- ext/varbit/varbit.sql
|
90
80
|
- lib/assets/images/repertoire-faceting/proportional_symbol.png
|
91
81
|
- lib/assets/images/repertoire-faceting/spinner_sm.gif
|
92
|
-
- lib/assets/javascripts/rep.faceting.js
|
93
82
|
- lib/assets/javascripts/rep.faceting/context.js
|
94
83
|
- lib/assets/javascripts/rep.faceting/ext/earth_facet.js
|
95
84
|
- lib/assets/javascripts/rep.faceting/facet.js
|
@@ -97,14 +86,14 @@ files:
|
|
97
86
|
- lib/assets/javascripts/rep.faceting/nested_facet.js
|
98
87
|
- lib/assets/javascripts/rep.faceting/results.js
|
99
88
|
- lib/assets/javascripts/rep.faceting/urls.js
|
89
|
+
- lib/assets/javascripts/rep.faceting.js
|
100
90
|
- lib/assets/javascripts/rep.protovis-facets.js
|
101
|
-
- lib/assets/javascripts/rep.widgets.js
|
102
91
|
- lib/assets/javascripts/rep.widgets/events.js
|
103
92
|
- lib/assets/javascripts/rep.widgets/global.js
|
104
93
|
- lib/assets/javascripts/rep.widgets/model.js
|
105
94
|
- lib/assets/javascripts/rep.widgets/widget.js
|
95
|
+
- lib/assets/javascripts/rep.widgets.js
|
106
96
|
- lib/assets/stylesheets/rep.faceting.css
|
107
|
-
- lib/repertoire-faceting.rb
|
108
97
|
- lib/repertoire-faceting/adapters/postgresql_adapter.rb
|
109
98
|
- lib/repertoire-faceting/controller.rb
|
110
99
|
- lib/repertoire-faceting/errors.rb
|
@@ -123,9 +112,15 @@ files:
|
|
123
112
|
- lib/repertoire-faceting/tasks/all.rake
|
124
113
|
- lib/repertoire-faceting/tasks/client.rake
|
125
114
|
- lib/repertoire-faceting/version.rb
|
115
|
+
- lib/repertoire-faceting.rb
|
126
116
|
- vendor/assets/javascripts/deparam.js
|
127
117
|
- vendor/assets/javascripts/google-earth-extensions.js
|
128
118
|
- vendor/assets/javascripts/protovis.js
|
119
|
+
- FAQ
|
120
|
+
- INSTALL
|
121
|
+
- LICENSE
|
122
|
+
- README
|
123
|
+
- TODO
|
129
124
|
homepage: http://github.com/repertoire/repertoire-faceting
|
130
125
|
licenses: []
|
131
126
|
metadata: {}
|
@@ -144,17 +139,17 @@ require_paths:
|
|
144
139
|
- lib
|
145
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
146
141
|
requirements:
|
147
|
-
- -
|
142
|
+
- - '>='
|
148
143
|
- !ruby/object:Gem::Version
|
149
144
|
version: 2.2.0
|
150
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
146
|
requirements:
|
152
|
-
- -
|
147
|
+
- - '>='
|
153
148
|
- !ruby/object:Gem::Version
|
154
149
|
version: 1.3.7
|
155
150
|
requirements: []
|
156
151
|
rubyforge_project: repertoire-faceting
|
157
|
-
rubygems_version: 2.
|
152
|
+
rubygems_version: 2.0.14.1
|
158
153
|
signing_key:
|
159
154
|
specification_version: 4
|
160
155
|
summary: Rails/Postgresql plugin for faceted indexing and browsing
|
data/ext/faceting--0.7.7.sql
DELETED
@@ -1,251 +0,0 @@
|
|
1
|
-
-- ============================================================================
|
2
|
-
-- Faceting API implementing bitmap indices using a custom C datatype and
|
3
|
-
-- associated functions.
|
4
|
-
--
|
5
|
-
-- This API is to be preferred in all situations where it is possible to
|
6
|
-
-- build and install the datatype (requires superuser access to PostgreSQL)
|
7
|
-
--
|
8
|
-
-- Christopher York
|
9
|
-
-- MIT Hyperstudio
|
10
|
-
-- February 2014
|
11
|
-
-- ============================================================================
|
12
|
-
|
13
|
-
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
14
|
-
\echo Use "CREATE EXTENSION faceting" to load this the default faceting API.\quit
|
15
|
-
|
16
|
-
-- functions for bitmap indices using datatype written in C
|
17
|
-
|
18
|
-
CREATE TYPE @extschema@.signature;
|
19
|
-
|
20
|
-
-- basic i/o functions for signatures
|
21
|
-
|
22
|
-
CREATE FUNCTION @extschema@.sig_in( cstring )
|
23
|
-
RETURNS signature
|
24
|
-
AS 'signature.so', 'sig_in'
|
25
|
-
LANGUAGE C STRICT;
|
26
|
-
|
27
|
-
CREATE FUNCTION @extschema@.sig_out( signature )
|
28
|
-
RETURNS cstring
|
29
|
-
AS 'signature.so', 'sig_out'
|
30
|
-
LANGUAGE C STRICT;
|
31
|
-
|
32
|
-
-- signature postgresql type
|
33
|
-
|
34
|
-
CREATE TYPE @extschema@.signature (
|
35
|
-
INTERNALLENGTH = VARIABLE,
|
36
|
-
INPUT = sig_in,
|
37
|
-
OUTPUT = sig_out,
|
38
|
-
STORAGE = extended
|
39
|
-
);
|
40
|
-
|
41
|
-
-- functions for signatures
|
42
|
-
|
43
|
-
CREATE FUNCTION @extschema@.sig_resize( signature, INT )
|
44
|
-
RETURNS signature
|
45
|
-
AS 'signature.so', 'sig_resize'
|
46
|
-
LANGUAGE C STRICT IMMUTABLE;
|
47
|
-
|
48
|
-
CREATE FUNCTION @extschema@.sig_set( signature, INT, INT )
|
49
|
-
RETURNS signature
|
50
|
-
AS 'signature.so', 'sig_set'
|
51
|
-
LANGUAGE C STRICT IMMUTABLE;
|
52
|
-
|
53
|
-
CREATE FUNCTION @extschema@.sig_set( signature, INT )
|
54
|
-
RETURNS signature
|
55
|
-
AS 'signature.so', 'sig_set'
|
56
|
-
LANGUAGE C STRICT IMMUTABLE;
|
57
|
-
|
58
|
-
CREATE FUNCTION @extschema@.sig_get( signature, INT )
|
59
|
-
RETURNS INT
|
60
|
-
AS 'signature.so', 'sig_get'
|
61
|
-
LANGUAGE C STRICT IMMUTABLE;
|
62
|
-
|
63
|
-
CREATE FUNCTION @extschema@.sig_length( signature )
|
64
|
-
RETURNS INT
|
65
|
-
AS 'signature.so', 'sig_length'
|
66
|
-
LANGUAGE C STRICT IMMUTABLE;
|
67
|
-
|
68
|
-
CREATE FUNCTION @extschema@.sig_min( signature )
|
69
|
-
RETURNS INT
|
70
|
-
AS 'signature.so', 'sig_min'
|
71
|
-
LANGUAGE C STRICT IMMUTABLE;
|
72
|
-
|
73
|
-
CREATE FUNCTION @extschema@.sig_and( signature, signature )
|
74
|
-
RETURNS signature
|
75
|
-
AS 'signature.so', 'sig_and'
|
76
|
-
LANGUAGE C STRICT IMMUTABLE;
|
77
|
-
|
78
|
-
CREATE FUNCTION @extschema@.sig_or( signature, signature )
|
79
|
-
RETURNS signature
|
80
|
-
AS 'signature.so', 'sig_or'
|
81
|
-
LANGUAGE C STRICT IMMUTABLE;
|
82
|
-
|
83
|
-
CREATE FUNCTION @extschema@.sig_xor( signature )
|
84
|
-
RETURNS signature
|
85
|
-
AS 'signature.so', 'sig_xor'
|
86
|
-
LANGUAGE C STRICT IMMUTABLE;
|
87
|
-
|
88
|
-
CREATE FUNCTION @extschema@.count( signature )
|
89
|
-
RETURNS INT
|
90
|
-
AS 'signature.so', 'count'
|
91
|
-
LANGUAGE C STRICT IMMUTABLE;
|
92
|
-
|
93
|
-
CREATE FUNCTION @extschema@.contains( signature, INT )
|
94
|
-
RETURNS BOOL
|
95
|
-
AS 'signature.so', 'contains'
|
96
|
-
LANGUAGE C STRICT IMMUTABLE;
|
97
|
-
|
98
|
-
CREATE FUNCTION @extschema@.members( signature )
|
99
|
-
RETURNS SETOF INT
|
100
|
-
AS 'signature.so', 'members'
|
101
|
-
LANGUAGE C STRICT IMMUTABLE;
|
102
|
-
|
103
|
-
CREATE FUNCTION @extschema@.sig_cmp( signature, signature )
|
104
|
-
RETURNS INT
|
105
|
-
AS 'signature.so', 'sig_cmp'
|
106
|
-
LANGUAGE C STRICT IMMUTABLE;
|
107
|
-
|
108
|
-
CREATE FUNCTION @extschema@.sig_lt( signature, signature )
|
109
|
-
RETURNS BOOL
|
110
|
-
AS 'signature.so', 'sig_lt'
|
111
|
-
LANGUAGE C STRICT IMMUTABLE;
|
112
|
-
|
113
|
-
CREATE FUNCTION @extschema@.sig_lte( signature, signature )
|
114
|
-
RETURNS BOOL
|
115
|
-
AS 'signature.so', 'sig_lte'
|
116
|
-
LANGUAGE C STRICT IMMUTABLE;
|
117
|
-
|
118
|
-
CREATE FUNCTION @extschema@.sig_eq( signature, signature )
|
119
|
-
RETURNS BOOL
|
120
|
-
AS 'signature.so', 'sig_eq'
|
121
|
-
LANGUAGE C STRICT IMMUTABLE;
|
122
|
-
|
123
|
-
CREATE FUNCTION @extschema@.sig_gt( signature, signature )
|
124
|
-
RETURNS BOOL
|
125
|
-
AS 'signature.so', 'sig_gt'
|
126
|
-
LANGUAGE C STRICT IMMUTABLE;
|
127
|
-
|
128
|
-
CREATE FUNCTION @extschema@.sig_gte( signature, signature )
|
129
|
-
RETURNS BOOL
|
130
|
-
AS 'signature.so', 'sig_gte'
|
131
|
-
LANGUAGE C STRICT IMMUTABLE;
|
132
|
-
|
133
|
-
|
134
|
-
-- operators for signatures
|
135
|
-
|
136
|
-
CREATE OPERATOR @extschema@.& (
|
137
|
-
leftarg = signature,
|
138
|
-
rightarg = signature,
|
139
|
-
procedure = @extschema@.sig_and,
|
140
|
-
commutator = &
|
141
|
-
);
|
142
|
-
|
143
|
-
CREATE OPERATOR @extschema@.| (
|
144
|
-
leftarg = signature,
|
145
|
-
rightarg = signature,
|
146
|
-
procedure = @extschema@.sig_or,
|
147
|
-
commutator = |
|
148
|
-
);
|
149
|
-
|
150
|
-
CREATE OPERATOR @extschema@.+ (
|
151
|
-
leftarg = signature,
|
152
|
-
rightarg = int,
|
153
|
-
procedure = @extschema@.sig_set
|
154
|
-
);
|
155
|
-
|
156
|
-
CREATE OPERATOR @extschema@.< (
|
157
|
-
leftarg = signature, rightarg = signature, procedure = sig_lt,
|
158
|
-
commutator = > , negator = >= ,
|
159
|
-
restrict = scalarltsel, join = scalarltjoinsel
|
160
|
-
);
|
161
|
-
|
162
|
-
CREATE OPERATOR @extschema@.<= (
|
163
|
-
leftarg = signature, rightarg = signature, procedure = sig_lte,
|
164
|
-
commutator = >= , negator = > ,
|
165
|
-
restrict = scalarltsel, join = scalarltjoinsel
|
166
|
-
);
|
167
|
-
|
168
|
-
CREATE OPERATOR @extschema@.= (
|
169
|
-
leftarg = signature, rightarg = signature, procedure = sig_eq,
|
170
|
-
commutator = = , negator = <> ,
|
171
|
-
restrict = eqsel, join = eqjoinsel
|
172
|
-
);
|
173
|
-
|
174
|
-
CREATE OPERATOR >= (
|
175
|
-
leftarg = signature, rightarg = signature, procedure = sig_gte,
|
176
|
-
commutator = <= , negator = < ,
|
177
|
-
restrict = scalargtsel, join = scalargtjoinsel
|
178
|
-
);
|
179
|
-
|
180
|
-
CREATE OPERATOR @extschema@.> (
|
181
|
-
leftarg = signature, rightarg = signature, procedure = sig_gt,
|
182
|
-
commutator = < , negator = <= ,
|
183
|
-
restrict = scalargtsel, join = scalargtjoinsel
|
184
|
-
);
|
185
|
-
|
186
|
-
-- index operator classes for signatures
|
187
|
-
|
188
|
-
CREATE OPERATOR CLASS @extschema@.signature_ops
|
189
|
-
DEFAULT FOR TYPE signature USING btree AS
|
190
|
-
OPERATOR 1 < ,
|
191
|
-
OPERATOR 2 <= ,
|
192
|
-
OPERATOR 3 = ,
|
193
|
-
OPERATOR 4 >= ,
|
194
|
-
OPERATOR 5 > ,
|
195
|
-
FUNCTION 1 sig_cmp(signature, signature);
|
196
|
-
|
197
|
-
|
198
|
-
-- aggregate functions for faceting
|
199
|
-
|
200
|
-
CREATE AGGREGATE @extschema@.collect( signature )
|
201
|
-
(
|
202
|
-
sfunc = @extschema@.sig_or,
|
203
|
-
stype = signature
|
204
|
-
);
|
205
|
-
|
206
|
-
CREATE AGGREGATE @extschema@.filter( signature )
|
207
|
-
(
|
208
|
-
sfunc = @extschema@.sig_and,
|
209
|
-
stype = signature
|
210
|
-
);
|
211
|
-
|
212
|
-
CREATE AGGREGATE @extschema@.signature( INT )
|
213
|
-
(
|
214
|
-
sfunc = @extschema@.sig_set,
|
215
|
-
stype = signature,
|
216
|
-
initcond = '0'
|
217
|
-
);-- ============================================================================
|
218
|
-
-- These functions are common to all bindings of the Repertoire faceting API
|
219
|
-
--
|
220
|
-
-- Christopher York
|
221
|
-
-- MIT Hyperstudio
|
222
|
-
-- February 2014
|
223
|
-
-- ============================================================================
|
224
|
-
|
225
|
-
|
226
|
-
-- Aggregator to measure how many bits from a loosely-packed id column would be wasted, if
|
227
|
-
-- they were all collected into a bitset signature. Returns a float between 0 (no waste)
|
228
|
-
-- and 1.0 (all waste). An example of its use:
|
229
|
-
--
|
230
|
-
-- SELECT wastage(id) FROM nobelists
|
231
|
-
-- =# 0.999999
|
232
|
-
--
|
233
|
-
-- ALTER TABLE nobelists ADD COLUMN _packed_id SERIAL
|
234
|
-
-- SELECT wastage(_packed_id) FROM nobelists
|
235
|
-
-- =# 0.015625
|
236
|
-
--
|
237
|
-
CREATE FUNCTION @extschema@.wastage_proportion( state INT[] ) RETURNS double precision AS $$
|
238
|
-
SELECT (1.0 - (state[1]::double precision / (COALESCE(state[2], 0.0) + 1.0)))
|
239
|
-
$$ LANGUAGE sql;
|
240
|
-
|
241
|
-
CREATE FUNCTION @extschema@.wastage_accum( state INT[], val INT ) RETURNS INT[] AS $$
|
242
|
-
SELECT ARRAY[ state[1]+1, GREATEST(state[2], val) ];
|
243
|
-
$$ LANGUAGE sql;
|
244
|
-
|
245
|
-
CREATE AGGREGATE @extschema@.wastage( INT )
|
246
|
-
(
|
247
|
-
sfunc = @extschema@.wastage_accum,
|
248
|
-
stype = INT[],
|
249
|
-
finalfunc = @extschema@.wastage_proportion,
|
250
|
-
initcond = '{0,0}'
|
251
|
-
);
|
@@ -1,207 +0,0 @@
|
|
1
|
-
-- ============================================================================
|
2
|
-
-- Faceting API implementing bitmap indices using PostgreSQL's built-in BYTEA
|
3
|
-
-- type, processed using plv8 typed arrays.
|
4
|
-
--
|
5
|
-
-- This API is suitable for deployment on Heroku, where plv8 is installed by
|
6
|
-
-- default. Performance is many times better than the VARBIT-based faceting
|
7
|
-
-- API, primarily because of optimisations in memory handling in the count
|
8
|
-
-- function.
|
9
|
-
--
|
10
|
-
-- See https://code.google.com/p/plv8js/wiki/PLV8
|
11
|
-
-- https://postgres.heroku.com/blog/past/2013/6/5/javascript_in_your_postgres/
|
12
|
-
--
|
13
|
-
-- Christopher York
|
14
|
-
-- MIT Hyperstudio
|
15
|
-
-- February 2014
|
16
|
-
-- ============================================================================
|
17
|
-
|
18
|
-
CREATE EXTENSION IF NOT EXISTS plv8;
|
19
|
-
|
20
|
-
SET bytea_output TO hex;
|
21
|
-
|
22
|
-
-- these functions are in pl/pgsql, because they involve appending bytea values,
|
23
|
-
-- which is easier done with direct access to the || operator
|
24
|
-
|
25
|
-
CREATE FUNCTION @extschema@.sig_resize( sig BYTEA, bits INT ) RETURNS BYTEA AS $$
|
26
|
-
DECLARE
|
27
|
-
len INT;
|
28
|
-
bytes INT;
|
29
|
-
BEGIN
|
30
|
-
bytes := ceil(bits / 8.0)::INT;
|
31
|
-
len := length(sig);
|
32
|
-
IF bytes > len THEN
|
33
|
-
-- RAISE NOTICE 'Extending signature from % to % bytes', len, bytes;
|
34
|
-
RETURN sig || ('\x' || repeat('00', bytes - len))::BYTEA;
|
35
|
-
ELSIF bits < len THEN
|
36
|
-
-- no provision in PostgreSQL for truncating a BYTEA
|
37
|
-
RETURN sig;
|
38
|
-
END IF;
|
39
|
-
RETURN sig;
|
40
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
41
|
-
|
42
|
-
CREATE FUNCTION @extschema@.sig_set( sig BYTEA, pos INT, val INT ) RETURNS BYTEA AS $$
|
43
|
-
BEGIN
|
44
|
-
RETURN set_bit(@extschema@.sig_resize(sig, pos+1), pos, val);
|
45
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
46
|
-
|
47
|
-
CREATE FUNCTION @extschema@.sig_set( sig BYTEA, pos INT ) RETURNS BYTEA AS $$
|
48
|
-
BEGIN
|
49
|
-
RETURN @extschema@.sig_set(sig, pos, 1);
|
50
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
51
|
-
|
52
|
-
-- these functions are in javascript, because (1) pl/pgsql is close
|
53
|
-
-- to the worst language in the world; (2) plv8's typed arrays make
|
54
|
-
-- the count function much faster
|
55
|
-
|
56
|
-
CREATE FUNCTION @extschema@.sig_get( sig BYTEA, pos INT ) RETURNS INT AS $$
|
57
|
-
if (pos <= sig.length * 8) {
|
58
|
-
return sig[ Math.floor(pos / 8) ] >> (pos % 8) & 1;
|
59
|
-
} else {
|
60
|
-
return 0;
|
61
|
-
}
|
62
|
-
$$ LANGUAGE plv8 STRICT IMMUTABLE;
|
63
|
-
|
64
|
-
CREATE FUNCTION @extschema@.sig_length( sig BYTEA ) RETURNS INT AS $$
|
65
|
-
return sig.length;
|
66
|
-
$$ LANGUAGE plv8 STRICT IMMUTABLE;
|
67
|
-
|
68
|
-
CREATE FUNCTION @extschema@.sig_and(sig1 BYTEA, sig2 BYTEA) RETURNS BYTEA AS $$
|
69
|
-
if (sig2.length < sig1.length) {
|
70
|
-
var tmp = sig1;
|
71
|
-
sig1 = sig2;
|
72
|
-
sig2 = tmp;
|
73
|
-
}
|
74
|
-
for (var i = 0; i < sig1.length; i++) {
|
75
|
-
sig1[i] = sig1[i] & sig2[i];
|
76
|
-
}
|
77
|
-
return sig1;
|
78
|
-
$$ LANGUAGE plv8 STRICT IMMUTABLE;
|
79
|
-
|
80
|
-
CREATE FUNCTION @extschema@.sig_or(sig1 BYTEA, sig2 BYTEA) RETURNS BYTEA AS $$
|
81
|
-
if (sig2.length > sig1.length) {
|
82
|
-
var tmp = sig1;
|
83
|
-
sig1 = sig2;
|
84
|
-
sig2 = tmp;
|
85
|
-
}
|
86
|
-
for (var i = 0; i < sig2.length; i++) {
|
87
|
-
sig1[i] = sig1[i] | sig2[i];
|
88
|
-
}
|
89
|
-
return sig1;
|
90
|
-
$$ LANGUAGE plv8 STRICT IMMUTABLE;
|
91
|
-
|
92
|
-
CREATE FUNCTION @extschema@.count( sig BYTEA ) RETURNS int4 AS $$
|
93
|
-
var count_table = [
|
94
|
-
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
|
95
|
-
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
96
|
-
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
97
|
-
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
98
|
-
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
99
|
-
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
100
|
-
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
101
|
-
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
102
|
-
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
|
103
|
-
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
104
|
-
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
105
|
-
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
106
|
-
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
|
107
|
-
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
108
|
-
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
|
109
|
-
4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8,
|
110
|
-
];
|
111
|
-
var count = 0;
|
112
|
-
for (var i = 0; i < sig.length; i++) { count += count_table[ sig[i] ]; }
|
113
|
-
return count;
|
114
|
-
$$ LANGUAGE plv8 STRICT IMMUTABLE;
|
115
|
-
|
116
|
-
CREATE FUNCTION @extschema@.contains( sig BYTEA, pos INT ) RETURNS BOOL AS $$
|
117
|
-
return (pos <= sig.length * 8) && (sig[ Math.floor(pos / 8) ] >> (pos % 8) & 1);
|
118
|
-
$$ LANGUAGE plv8 STRICT IMMUTABLE;
|
119
|
-
|
120
|
-
CREATE FUNCTION @extschema@.members( sig BYTEA ) RETURNS SETOF INT AS $$
|
121
|
-
for (var i = 0; i < sig.length; i++) {
|
122
|
-
for (var j = 0; j < 8; j++) {
|
123
|
-
if (sig[i] >> j & 1) {
|
124
|
-
plv8.return_next(i * 8 + j);
|
125
|
-
}
|
126
|
-
}
|
127
|
-
}
|
128
|
-
$$ LANGUAGE plv8 STRICT IMMUTABLE;
|
129
|
-
|
130
|
-
|
131
|
-
-- operators for faceting
|
132
|
-
|
133
|
-
CREATE OPERATOR @extschema@.& (
|
134
|
-
leftarg = BYTEA,
|
135
|
-
rightarg = BYTEA,
|
136
|
-
procedure = @extschema@.sig_and,
|
137
|
-
commutator = &
|
138
|
-
);
|
139
|
-
|
140
|
-
CREATE OPERATOR @extschema@.| (
|
141
|
-
leftarg = BYTEA,
|
142
|
-
rightarg = BYTEA,
|
143
|
-
procedure = @extschema@.sig_or,
|
144
|
-
commutator = |
|
145
|
-
);
|
146
|
-
|
147
|
-
CREATE OPERATOR @extschema@.+ (
|
148
|
-
leftarg = BYTEA,
|
149
|
-
rightarg = int,
|
150
|
-
procedure = @extschema@.sig_set
|
151
|
-
);
|
152
|
-
|
153
|
-
|
154
|
-
-- aggregate functions for faceting
|
155
|
-
|
156
|
-
CREATE AGGREGATE @extschema@.collect( BYTEA )
|
157
|
-
(
|
158
|
-
sfunc = @extschema@.sig_or,
|
159
|
-
stype = BYTEA
|
160
|
-
);
|
161
|
-
|
162
|
-
CREATE AGGREGATE @extschema@.filter( BYTEA )
|
163
|
-
(
|
164
|
-
sfunc = @extschema@.sig_and,
|
165
|
-
stype = BYTEA
|
166
|
-
);
|
167
|
-
|
168
|
-
CREATE AGGREGATE @extschema@.signature( INT )
|
169
|
-
(
|
170
|
-
sfunc = @extschema@.sig_set,
|
171
|
-
stype = BYTEA,
|
172
|
-
initcond = ''
|
173
|
-
);-- ============================================================================
|
174
|
-
-- These functions are common to all bindings of the Repertoire faceting API
|
175
|
-
--
|
176
|
-
-- Christopher York
|
177
|
-
-- MIT Hyperstudio
|
178
|
-
-- February 2014
|
179
|
-
-- ============================================================================
|
180
|
-
|
181
|
-
|
182
|
-
-- Aggregator to measure how many bits from a loosely-packed id column would be wasted, if
|
183
|
-
-- they were all collected into a bitset signature. Returns a float between 0 (no waste)
|
184
|
-
-- and 1.0 (all waste). An example of its use:
|
185
|
-
--
|
186
|
-
-- SELECT wastage(id) FROM nobelists
|
187
|
-
-- =# 0.999999
|
188
|
-
--
|
189
|
-
-- ALTER TABLE nobelists ADD COLUMN _packed_id SERIAL
|
190
|
-
-- SELECT wastage(_packed_id) FROM nobelists
|
191
|
-
-- =# 0.015625
|
192
|
-
--
|
193
|
-
CREATE FUNCTION @extschema@.wastage_proportion( state INT[] ) RETURNS double precision AS $$
|
194
|
-
SELECT (1.0 - (state[1]::double precision / (COALESCE(state[2], 0.0) + 1.0)))
|
195
|
-
$$ LANGUAGE sql;
|
196
|
-
|
197
|
-
CREATE FUNCTION @extschema@.wastage_accum( state INT[], val INT ) RETURNS INT[] AS $$
|
198
|
-
SELECT ARRAY[ state[1]+1, GREATEST(state[2], val) ];
|
199
|
-
$$ LANGUAGE sql;
|
200
|
-
|
201
|
-
CREATE AGGREGATE @extschema@.wastage( INT )
|
202
|
-
(
|
203
|
-
sfunc = @extschema@.wastage_accum,
|
204
|
-
stype = INT[],
|
205
|
-
finalfunc = @extschema@.wastage_proportion,
|
206
|
-
initcond = '{0,0}'
|
207
|
-
);
|
@@ -1,198 +0,0 @@
|
|
1
|
-
-- ============================================================================
|
2
|
-
-- Faceting API implementing bitmap indices using PostgreSQL's built-in VARBIT
|
3
|
-
-- type, processed using the built-in language pl/pgsql.
|
4
|
-
--
|
5
|
-
-- This API is suitable for deployment on any host, since it requires no
|
6
|
-
-- PostgreSQL extensions outside the default install.
|
7
|
-
--
|
8
|
-
-- However, performance is limited to around 30,000 items in practice (in part
|
9
|
-
-- because of unnecessary duplication of varbit values when pl/pgsql evaluates
|
10
|
-
-- the count function.)
|
11
|
-
--
|
12
|
-
-- The 'signature' C-based faceting API is preferable for any install where
|
13
|
-
-- you have superuser access to the database.
|
14
|
-
--
|
15
|
-
-- Christopher York
|
16
|
-
-- MIT Hyperstudio
|
17
|
-
-- February 2014
|
18
|
-
-- ============================================================================
|
19
|
-
|
20
|
-
CREATE FUNCTION @extschema@.sig_resize( sig VARBIT, bits INT ) RETURNS VARBIT AS $$
|
21
|
-
DECLARE
|
22
|
-
len INT;
|
23
|
-
BEGIN
|
24
|
-
len := length(sig);
|
25
|
-
IF bits > len THEN
|
26
|
-
RETURN sig || repeat('0', bits - len)::VARBIT;
|
27
|
-
ELSIF bits < len THEN
|
28
|
-
RETURN substring(sig FROM 1 FOR bits);
|
29
|
-
END IF;
|
30
|
-
RETURN sig;
|
31
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
32
|
-
|
33
|
-
CREATE FUNCTION @extschema@.sig_set( sig VARBIT, pos INT, val INT ) RETURNS VARBIT AS $$
|
34
|
-
DECLARE
|
35
|
-
len INT;
|
36
|
-
BEGIN
|
37
|
-
len := length(sig);
|
38
|
-
IF pos >= len THEN
|
39
|
-
IF val > 0 THEN
|
40
|
-
RETURN set_bit(@extschema@.sig_resize(sig, pos+1), pos, 1);
|
41
|
-
ELSE
|
42
|
-
RETURN sig;
|
43
|
-
END IF;
|
44
|
-
ELSE
|
45
|
-
RETURN set_bit(sig, pos, val);
|
46
|
-
END IF;
|
47
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
48
|
-
|
49
|
-
CREATE FUNCTION @extschema@.sig_set( sig VARBIT, pos INT ) RETURNS VARBIT AS $$
|
50
|
-
BEGIN
|
51
|
-
RETURN @extschema@.sig_set(sig, pos, 1);
|
52
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
53
|
-
|
54
|
-
CREATE FUNCTION @extschema@.sig_get( sig VARBIT, pos INT ) RETURNS INT AS $$
|
55
|
-
DECLARE
|
56
|
-
len INT;
|
57
|
-
BEGIN
|
58
|
-
len := length(sig);
|
59
|
-
IF pos >= len THEN
|
60
|
-
RETURN 0;
|
61
|
-
ELSE
|
62
|
-
RETURN get_bit(sig, pos);
|
63
|
-
END IF;
|
64
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
65
|
-
|
66
|
-
CREATE FUNCTION @extschema@.sig_length( sig VARBIT ) RETURNS INT AS $$
|
67
|
-
BEGIN
|
68
|
-
RETURN length(sig);
|
69
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
70
|
-
|
71
|
-
CREATE FUNCTION @extschema@.sig_min( sig VARBIT ) RETURNS INT AS $$
|
72
|
-
BEGIN
|
73
|
-
RETURN position('1' in sig) - 1;
|
74
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
75
|
-
|
76
|
-
CREATE FUNCTION @extschema@.sig_and( sig1 VARBIT, sig2 VARBIT ) RETURNS VARBIT AS $$
|
77
|
-
DECLARE
|
78
|
-
len INT;
|
79
|
-
BEGIN
|
80
|
-
len := GREATEST(length(sig1), length(sig2));
|
81
|
-
RETURN bitand(@extschema@.sig_resize(sig1, len), @extschema@.sig_resize(sig2, len)) ;
|
82
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
83
|
-
|
84
|
-
CREATE FUNCTION @extschema@.sig_or( sig1 VARBIT, sig2 VARBIT ) RETURNS VARBIT AS $$
|
85
|
-
DECLARE
|
86
|
-
len INT;
|
87
|
-
BEGIN
|
88
|
-
len := GREATEST(length(sig1), length(sig2));
|
89
|
-
RETURN bitor(@extschema@.sig_resize(sig1, len), @extschema@.sig_resize(sig2, len)) ;
|
90
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
91
|
-
|
92
|
-
CREATE FUNCTION @extschema@.sig_xor( sig1 VARBIT, sig2 VARBIT ) RETURNS VARBIT AS $$
|
93
|
-
DECLARE
|
94
|
-
len INT;
|
95
|
-
BEGIN
|
96
|
-
len := GREATEST(length(sig1), length(sig2));
|
97
|
-
RETURN bitxor(@extschema@.sig_resize(sig1, len), @extschema@.sig_resize(sig2, len)) ;
|
98
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
99
|
-
|
100
|
-
CREATE FUNCTION @extschema@.count( sig VARBIT ) RETURNS INT AS $$
|
101
|
-
BEGIN
|
102
|
-
-- This is, by any measure, horrific. However, it appears to be the only
|
103
|
-
-- way to use PostgreSQL built in functions to count bits in a bit string.
|
104
|
-
RETURN length(replace(sig::TEXT, '0', ''));
|
105
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
106
|
-
|
107
|
-
CREATE FUNCTION @extschema@.contains( sig VARBIT, pos INT ) RETURNS BOOL AS $$
|
108
|
-
BEGIN
|
109
|
-
RETURN @extschema@.sig_get(sig, pos) = 1;
|
110
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
111
|
-
|
112
|
-
CREATE FUNCTION @extschema@.members( sig VARBIT ) RETURNS SETOF INT AS $$
|
113
|
-
BEGIN
|
114
|
-
FOR i IN 0 .. length(sig) - 1 LOOP
|
115
|
-
IF @extschema@.contains(sig, i) THEN
|
116
|
-
RETURN NEXT i;
|
117
|
-
END IF;
|
118
|
-
END LOOP;
|
119
|
-
END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
|
120
|
-
|
121
|
-
|
122
|
-
-- operators for faceting
|
123
|
-
|
124
|
-
CREATE OPERATOR @extschema@.& (
|
125
|
-
leftarg = VARBIT,
|
126
|
-
rightarg = VARBIT,
|
127
|
-
procedure = @extschema@.sig_and,
|
128
|
-
commutator = &
|
129
|
-
);
|
130
|
-
|
131
|
-
CREATE OPERATOR @extschema@.| (
|
132
|
-
leftarg = VARBIT,
|
133
|
-
rightarg = VARBIT,
|
134
|
-
procedure = @extschema@.sig_or,
|
135
|
-
commutator = |
|
136
|
-
);
|
137
|
-
|
138
|
-
CREATE OPERATOR @extschema@.+ (
|
139
|
-
leftarg = VARBIT,
|
140
|
-
rightarg = int,
|
141
|
-
procedure = @extschema@.sig_set
|
142
|
-
);
|
143
|
-
|
144
|
-
|
145
|
-
-- aggregate functions for faceting
|
146
|
-
|
147
|
-
CREATE AGGREGATE @extschema@.collect( VARBIT )
|
148
|
-
(
|
149
|
-
sfunc = @extschema@.sig_or,
|
150
|
-
stype = VARBIT
|
151
|
-
);
|
152
|
-
|
153
|
-
CREATE AGGREGATE @extschema@.filter( VARBIT )
|
154
|
-
(
|
155
|
-
sfunc = @extschema@.sig_and,
|
156
|
-
stype = VARBIT
|
157
|
-
);
|
158
|
-
|
159
|
-
CREATE AGGREGATE @extschema@.signature( INT )
|
160
|
-
(
|
161
|
-
sfunc = @extschema@.sig_set,
|
162
|
-
stype = VARBIT,
|
163
|
-
initcond = '0'
|
164
|
-
);-- ============================================================================
|
165
|
-
-- These functions are common to all bindings of the Repertoire faceting API
|
166
|
-
--
|
167
|
-
-- Christopher York
|
168
|
-
-- MIT Hyperstudio
|
169
|
-
-- February 2014
|
170
|
-
-- ============================================================================
|
171
|
-
|
172
|
-
|
173
|
-
-- Aggregator to measure how many bits from a loosely-packed id column would be wasted, if
|
174
|
-
-- they were all collected into a bitset signature. Returns a float between 0 (no waste)
|
175
|
-
-- and 1.0 (all waste). An example of its use:
|
176
|
-
--
|
177
|
-
-- SELECT wastage(id) FROM nobelists
|
178
|
-
-- =# 0.999999
|
179
|
-
--
|
180
|
-
-- ALTER TABLE nobelists ADD COLUMN _packed_id SERIAL
|
181
|
-
-- SELECT wastage(_packed_id) FROM nobelists
|
182
|
-
-- =# 0.015625
|
183
|
-
--
|
184
|
-
CREATE FUNCTION @extschema@.wastage_proportion( state INT[] ) RETURNS double precision AS $$
|
185
|
-
SELECT (1.0 - (state[1]::double precision / (COALESCE(state[2], 0.0) + 1.0)))
|
186
|
-
$$ LANGUAGE sql;
|
187
|
-
|
188
|
-
CREATE FUNCTION @extschema@.wastage_accum( state INT[], val INT ) RETURNS INT[] AS $$
|
189
|
-
SELECT ARRAY[ state[1]+1, GREATEST(state[2], val) ];
|
190
|
-
$$ LANGUAGE sql;
|
191
|
-
|
192
|
-
CREATE AGGREGATE @extschema@.wastage( INT )
|
193
|
-
(
|
194
|
-
sfunc = @extschema@.wastage_accum,
|
195
|
-
stype = INT[],
|
196
|
-
finalfunc = @extschema@.wastage_proportion,
|
197
|
-
initcond = '{0,0}'
|
198
|
-
);
|
data/ext/signature/signature.o
DELETED
Binary file
|
data/ext/signature/signature.so
DELETED
Binary file
|