]> granicus.if.org Git - postgresql/commitdiff
Clean up usage of some deprecated APIs, particularly schema-unsafe
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 26 Aug 2007 23:36:32 +0000 (23:36 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 26 Aug 2007 23:36:32 +0000 (23:36 +0000)
usage of RelationNameGetTupleDesc().

contrib/hstore/hstore.sql.in
contrib/hstore/hstore_op.c
contrib/hstore/uninstall_hstore.sql

index 3e0821a952594864818d5da91345969f472e2aca..e5fb21ebfa55dec04bdb7b453454e0e50372fb52 100644 (file)
@@ -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
index 326948afc146d17eb5fb4bc8e7381fa5eba098c6..74597c3490009eae734a49b1b108c857b353dd04 100644 (file)
@@ -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')
index a24bc72f9f808b40e9000576a2acb4697589fc97..84be1b75ffad98946b362d91e59098d37d565843 100644 (file)
@@ -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;