From: Tom Lane Date: Sun, 26 Aug 2007 23:36:32 +0000 (+0000) Subject: Clean up usage of some deprecated APIs, particularly schema-unsafe X-Git-Tag: REL8_3_BETA1~291 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0effa088f5a5b55ab5b963159d18cc26dc7ccc4e;p=postgresql Clean up usage of some deprecated APIs, particularly schema-unsafe usage of RelationNameGetTupleDesc(). --- diff --git a/contrib/hstore/hstore.sql.in b/contrib/hstore/hstore.sql.in index 3e0821a952..e5fb21ebfa 100644 --- a/contrib/hstore/hstore.sql.in +++ b/contrib/hstore/hstore.sql.in @@ -2,15 +2,17 @@ SET search_path = public; BEGIN; +CREATE TYPE hstore; + CREATE FUNCTION hstore_in(cstring) RETURNS hstore AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict); +LANGUAGE C STRICT; CREATE FUNCTION hstore_out(hstore) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict); +LANGUAGE C STRICT; CREATE TYPE hstore ( INTERNALLENGTH = -1, @@ -22,7 +24,7 @@ CREATE TYPE hstore ( CREATE FUNCTION fetchval(hstore,text) RETURNS text AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE OPERATOR -> ( LEFTARG = hstore, @@ -33,12 +35,12 @@ CREATE OPERATOR -> ( CREATE FUNCTION isexists(hstore,text) RETURNS bool AS 'MODULE_PATHNAME','exists' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION exist(hstore,text) RETURNS bool AS 'MODULE_PATHNAME','exists' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE OPERATOR ? ( LEFTARG = hstore, @@ -51,22 +53,22 @@ CREATE OPERATOR ? ( CREATE FUNCTION isdefined(hstore,text) RETURNS bool AS 'MODULE_PATHNAME','defined' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION defined(hstore,text) RETURNS bool AS 'MODULE_PATHNAME','defined' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION delete(hstore,text) RETURNS hstore AS 'MODULE_PATHNAME','delete' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION hs_concat(hstore,hstore) RETURNS hstore AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE OPERATOR || ( LEFTARG = hstore, @@ -77,12 +79,12 @@ CREATE OPERATOR || ( CREATE FUNCTION hs_contains(hstore,hstore) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION hs_contained(hstore,hstore) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE OPERATOR @> ( LEFTARG = hstore, @@ -124,7 +126,7 @@ CREATE OPERATOR ~ ( CREATE FUNCTION tconvert(text,text) RETURNS hstore AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (iscachable); +LANGUAGE C IMMUTABLE; CREATE OPERATOR => ( LEFTARG = text, @@ -135,43 +137,45 @@ CREATE OPERATOR => ( CREATE FUNCTION akeys(hstore) RETURNS _text AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION avals(hstore) RETURNS _text AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION skeys(hstore) RETURNS setof text AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION svals(hstore) RETURNS setof text AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); - -create type hs_each as (key text, value text); +LANGUAGE C STRICT IMMUTABLE; -CREATE FUNCTION each(hstore) -RETURNS setof hs_each +CREATE FUNCTION each(IN hs hstore, + OUT key text, + OUT value text) +RETURNS SETOF record AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict,iscachable); +LANGUAGE C STRICT IMMUTABLE; -- define the GiST support methods +CREATE TYPE ghstore; + CREATE FUNCTION ghstore_in(cstring) RETURNS ghstore AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict); +LANGUAGE C STRICT; CREATE FUNCTION ghstore_out(ghstore) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'C' with (isstrict); +LANGUAGE C STRICT; CREATE TYPE ghstore ( INTERNALLENGTH = -1, @@ -182,37 +186,37 @@ CREATE TYPE ghstore ( CREATE FUNCTION ghstore_compress(internal) RETURNS internal AS 'MODULE_PATHNAME' -LANGUAGE 'C'; +LANGUAGE C; CREATE FUNCTION ghstore_decompress(internal) RETURNS internal AS 'MODULE_PATHNAME' -LANGUAGE 'C'; +LANGUAGE C; CREATE FUNCTION ghstore_penalty(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' -LANGUAGE 'C' WITH (isstrict); +LANGUAGE C STRICT; CREATE FUNCTION ghstore_picksplit(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' -LANGUAGE 'C'; +LANGUAGE C; CREATE FUNCTION ghstore_union(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' -LANGUAGE 'C'; +LANGUAGE C; CREATE FUNCTION ghstore_same(internal, internal, internal) RETURNS internal AS 'MODULE_PATHNAME' -LANGUAGE 'C'; +LANGUAGE C; CREATE FUNCTION ghstore_consistent(internal,internal,int4) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'C'; +LANGUAGE C; -- register the opclass for indexing (not as default) CREATE OPERATOR CLASS gist_hstore_ops diff --git a/contrib/hstore/hstore_op.c b/contrib/hstore/hstore_op.c index 326948afc1..74597c3490 100644 --- a/contrib/hstore/hstore_op.c +++ b/contrib/hstore/hstore_op.c @@ -595,8 +595,10 @@ each(PG_FUNCTION_ARGS) memcpy(st->hs, hs, VARSIZE(hs)); funcctx->user_fctx = (void *) st; - tupdesc = RelationNameGetTupleDesc("hs_each"); - funcctx->slot = TupleDescGetSlot(tupdesc); + /* Build a tuple descriptor for our result type */ + if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) + elog(ERROR, "return type must be a row type"); + funcctx->attinmeta = TupleDescGetAttInMetadata(tupdesc); MemoryContextSwitchTo(oldcontext); @@ -637,7 +639,7 @@ each(PG_FUNCTION_ARGS) st->i++; tuple = heap_formtuple(funcctx->attinmeta->tupdesc, dvalues, nulls); - res = TupleGetDatum(funcctx->slot, tuple); + res = HeapTupleGetDatum(tuple); pfree(DatumGetPointer(dvalues[0])); if (nulls[1] != 'n') diff --git a/contrib/hstore/uninstall_hstore.sql b/contrib/hstore/uninstall_hstore.sql index a24bc72f9f..84be1b75ff 100644 --- a/contrib/hstore/uninstall_hstore.sql +++ b/contrib/hstore/uninstall_hstore.sql @@ -40,7 +40,6 @@ DROP FUNCTION gin_extract_hstore(internal, internal); DROP FUNCTION gin_extract_hstore_query(internal, internal, smallint); DROP TYPE hstore CASCADE; -DROP TYPE hs_each CASCADE; DROP TYPE ghstore CASCADE; COMMIT;