Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 0effa08

Browse files
committed
Clean up usage of some deprecated APIs, particularly schema-unsafe
usage of RelationNameGetTupleDesc().
1 parent 08fc73c commit 0effa08

File tree

3 files changed

+39
-34
lines changed

3 files changed

+39
-34
lines changed

contrib/hstore/hstore.sql.in

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ SET search_path = public;
22

33
BEGIN;
44

5+
CREATE TYPE hstore;
6+
57
CREATE FUNCTION hstore_in(cstring)
68
RETURNS hstore
79
AS 'MODULE_PATHNAME'
8-
LANGUAGE 'C' with (isstrict);
10+
LANGUAGE C STRICT;
911

1012
CREATE FUNCTION hstore_out(hstore)
1113
RETURNS cstring
1214
AS 'MODULE_PATHNAME'
13-
LANGUAGE 'C' with (isstrict);
15+
LANGUAGE C STRICT;
1416

1517
CREATE TYPE hstore (
1618
INTERNALLENGTH = -1,
@@ -22,7 +24,7 @@ CREATE TYPE hstore (
2224
CREATE FUNCTION fetchval(hstore,text)
2325
RETURNS text
2426
AS 'MODULE_PATHNAME'
25-
LANGUAGE 'C' with (isstrict,iscachable);
27+
LANGUAGE C STRICT IMMUTABLE;
2628

2729
CREATE OPERATOR -> (
2830
LEFTARG = hstore,
@@ -33,12 +35,12 @@ CREATE OPERATOR -> (
3335
CREATE FUNCTION isexists(hstore,text)
3436
RETURNS bool
3537
AS 'MODULE_PATHNAME','exists'
36-
LANGUAGE 'C' with (isstrict,iscachable);
38+
LANGUAGE C STRICT IMMUTABLE;
3739

3840
CREATE FUNCTION exist(hstore,text)
3941
RETURNS bool
4042
AS 'MODULE_PATHNAME','exists'
41-
LANGUAGE 'C' with (isstrict,iscachable);
43+
LANGUAGE C STRICT IMMUTABLE;
4244

4345
CREATE OPERATOR ? (
4446
LEFTARG = hstore,
@@ -51,22 +53,22 @@ CREATE OPERATOR ? (
5153
CREATE FUNCTION isdefined(hstore,text)
5254
RETURNS bool
5355
AS 'MODULE_PATHNAME','defined'
54-
LANGUAGE 'C' with (isstrict,iscachable);
56+
LANGUAGE C STRICT IMMUTABLE;
5557

5658
CREATE FUNCTION defined(hstore,text)
5759
RETURNS bool
5860
AS 'MODULE_PATHNAME','defined'
59-
LANGUAGE 'C' with (isstrict,iscachable);
61+
LANGUAGE C STRICT IMMUTABLE;
6062

6163
CREATE FUNCTION delete(hstore,text)
6264
RETURNS hstore
6365
AS 'MODULE_PATHNAME','delete'
64-
LANGUAGE 'C' with (isstrict,iscachable);
66+
LANGUAGE C STRICT IMMUTABLE;
6567

6668
CREATE FUNCTION hs_concat(hstore,hstore)
6769
RETURNS hstore
6870
AS 'MODULE_PATHNAME'
69-
LANGUAGE 'C' with (isstrict,iscachable);
71+
LANGUAGE C STRICT IMMUTABLE;
7072

7173
CREATE OPERATOR || (
7274
LEFTARG = hstore,
@@ -77,12 +79,12 @@ CREATE OPERATOR || (
7779
CREATE FUNCTION hs_contains(hstore,hstore)
7880
RETURNS bool
7981
AS 'MODULE_PATHNAME'
80-
LANGUAGE 'C' with (isstrict,iscachable);
82+
LANGUAGE C STRICT IMMUTABLE;
8183

8284
CREATE FUNCTION hs_contained(hstore,hstore)
8385
RETURNS bool
8486
AS 'MODULE_PATHNAME'
85-
LANGUAGE 'C' with (isstrict,iscachable);
87+
LANGUAGE C STRICT IMMUTABLE;
8688

8789
CREATE OPERATOR @> (
8890
LEFTARG = hstore,
@@ -124,7 +126,7 @@ CREATE OPERATOR ~ (
124126
CREATE FUNCTION tconvert(text,text)
125127
RETURNS hstore
126128
AS 'MODULE_PATHNAME'
127-
LANGUAGE 'C' with (iscachable);
129+
LANGUAGE C IMMUTABLE;
128130

129131
CREATE OPERATOR => (
130132
LEFTARG = text,
@@ -135,43 +137,45 @@ CREATE OPERATOR => (
135137
CREATE FUNCTION akeys(hstore)
136138
RETURNS _text
137139
AS 'MODULE_PATHNAME'
138-
LANGUAGE 'C' with (isstrict,iscachable);
140+
LANGUAGE C STRICT IMMUTABLE;
139141

140142
CREATE FUNCTION avals(hstore)
141143
RETURNS _text
142144
AS 'MODULE_PATHNAME'
143-
LANGUAGE 'C' with (isstrict,iscachable);
145+
LANGUAGE C STRICT IMMUTABLE;
144146

145147
CREATE FUNCTION skeys(hstore)
146148
RETURNS setof text
147149
AS 'MODULE_PATHNAME'
148-
LANGUAGE 'C' with (isstrict,iscachable);
150+
LANGUAGE C STRICT IMMUTABLE;
149151

150152
CREATE FUNCTION svals(hstore)
151153
RETURNS setof text
152154
AS 'MODULE_PATHNAME'
153-
LANGUAGE 'C' with (isstrict,iscachable);
154-
155-
create type hs_each as (key text, value text);
155+
LANGUAGE C STRICT IMMUTABLE;
156156

157-
CREATE FUNCTION each(hstore)
158-
RETURNS setof hs_each
157+
CREATE FUNCTION each(IN hs hstore,
158+
OUT key text,
159+
OUT value text)
160+
RETURNS SETOF record
159161
AS 'MODULE_PATHNAME'
160-
LANGUAGE 'C' with (isstrict,iscachable);
162+
LANGUAGE C STRICT IMMUTABLE;
161163

162164

163165

164166
-- define the GiST support methods
165167

168+
CREATE TYPE ghstore;
169+
166170
CREATE FUNCTION ghstore_in(cstring)
167171
RETURNS ghstore
168172
AS 'MODULE_PATHNAME'
169-
LANGUAGE 'C' with (isstrict);
173+
LANGUAGE C STRICT;
170174

171175
CREATE FUNCTION ghstore_out(ghstore)
172176
RETURNS cstring
173177
AS 'MODULE_PATHNAME'
174-
LANGUAGE 'C' with (isstrict);
178+
LANGUAGE C STRICT;
175179

176180
CREATE TYPE ghstore (
177181
INTERNALLENGTH = -1,
@@ -182,37 +186,37 @@ CREATE TYPE ghstore (
182186
CREATE FUNCTION ghstore_compress(internal)
183187
RETURNS internal
184188
AS 'MODULE_PATHNAME'
185-
LANGUAGE 'C';
189+
LANGUAGE C;
186190

187191
CREATE FUNCTION ghstore_decompress(internal)
188192
RETURNS internal
189193
AS 'MODULE_PATHNAME'
190-
LANGUAGE 'C';
194+
LANGUAGE C;
191195

192196
CREATE FUNCTION ghstore_penalty(internal,internal,internal)
193197
RETURNS internal
194198
AS 'MODULE_PATHNAME'
195-
LANGUAGE 'C' WITH (isstrict);
199+
LANGUAGE C STRICT;
196200

197201
CREATE FUNCTION ghstore_picksplit(internal, internal)
198202
RETURNS internal
199203
AS 'MODULE_PATHNAME'
200-
LANGUAGE 'C';
204+
LANGUAGE C;
201205

202206
CREATE FUNCTION ghstore_union(internal, internal)
203207
RETURNS internal
204208
AS 'MODULE_PATHNAME'
205-
LANGUAGE 'C';
209+
LANGUAGE C;
206210

207211
CREATE FUNCTION ghstore_same(internal, internal, internal)
208212
RETURNS internal
209213
AS 'MODULE_PATHNAME'
210-
LANGUAGE 'C';
214+
LANGUAGE C;
211215

212216
CREATE FUNCTION ghstore_consistent(internal,internal,int4)
213217
RETURNS bool
214218
AS 'MODULE_PATHNAME'
215-
LANGUAGE 'C';
219+
LANGUAGE C;
216220

217221
-- register the opclass for indexing (not as default)
218222
CREATE OPERATOR CLASS gist_hstore_ops

contrib/hstore/hstore_op.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -595,8 +595,10 @@ each(PG_FUNCTION_ARGS)
595595
memcpy(st->hs, hs, VARSIZE(hs));
596596
funcctx->user_fctx = (void *) st;
597597

598-
tupdesc = RelationNameGetTupleDesc("hs_each");
599-
funcctx->slot = TupleDescGetSlot(tupdesc);
598+
/* Build a tuple descriptor for our result type */
599+
if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
600+
elog(ERROR, "return type must be a row type");
601+
600602
funcctx->attinmeta = TupleDescGetAttInMetadata(tupdesc);
601603

602604
MemoryContextSwitchTo(oldcontext);
@@ -637,7 +639,7 @@ each(PG_FUNCTION_ARGS)
637639
st->i++;
638640

639641
tuple = heap_formtuple(funcctx->attinmeta->tupdesc, dvalues, nulls);
640-
res = TupleGetDatum(funcctx->slot, tuple);
642+
res = HeapTupleGetDatum(tuple);
641643

642644
pfree(DatumGetPointer(dvalues[0]));
643645
if (nulls[1] != 'n')

contrib/hstore/uninstall_hstore.sql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ DROP FUNCTION gin_extract_hstore(internal, internal);
4040
DROP FUNCTION gin_extract_hstore_query(internal, internal, smallint);
4141

4242
DROP TYPE hstore CASCADE;
43-
DROP TYPE hs_each CASCADE;
4443
DROP TYPE ghstore CASCADE;
4544

4645
COMMIT;

0 commit comments

Comments
 (0)