aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-09-23 18:03:32 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-09-23 18:03:32 +0000
commitc99f82005320baffd5d0a976f247090a94873986 (patch)
treea8a7876a3123b02a651783bbb7fbbb691eb4ed5a
parent245b3d7d5cc247f5b12dd3bae18f1ea988907596 (diff)
downloadpostgresql-c99f82005320baffd5d0a976f247090a94873986.tar.gz
postgresql-c99f82005320baffd5d0a976f247090a94873986.zip
Tweak dblink functions to use int4 arguments instead of int2,
to avoid having to write explicit casts. From Joe Conway.
-rw-r--r--contrib/dblink/dblink.c30
-rw-r--r--contrib/dblink/dblink.sql.in12
2 files changed, 30 insertions, 12 deletions
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index b19625bb9ef..67a9d30d64e 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -1002,6 +1002,9 @@ dblink_last_oid(PG_FUNCTION_ARGS)
}
+#ifndef SHRT_MAX
+#define SHRT_MAX (0x7FFF)
+#endif
/*
* dblink_build_sql_insert
*
@@ -1028,7 +1031,8 @@ dblink_build_sql_insert(PG_FUNCTION_ARGS)
Oid relid;
text *relname_text;
int16 *pkattnums;
- int16 pknumatts;
+ int pknumatts_tmp;
+ int16 pknumatts = 0;
char **src_pkattvals;
char **tgt_pkattvals;
ArrayType *src_pkattvals_arry;
@@ -1057,7 +1061,11 @@ dblink_build_sql_insert(PG_FUNCTION_ARGS)
elog(ERROR, "dblink_build_sql_insert: relation does not exist");
pkattnums = (int16 *) PG_GETARG_POINTER(1);
- pknumatts = PG_GETARG_INT16(2);
+ pknumatts_tmp = PG_GETARG_INT32(2);
+ if (pknumatts_tmp <= SHRT_MAX)
+ pknumatts = pknumatts_tmp;
+ else
+ elog(ERROR, "Bad input value for pknumatts; too large");
/*
* There should be at least one key attribute
@@ -1167,7 +1175,8 @@ dblink_build_sql_delete(PG_FUNCTION_ARGS)
Oid relid;
text *relname_text;
int16 *pkattnums;
- int16 pknumatts;
+ int pknumatts_tmp;
+ int16 pknumatts = 0;
char **tgt_pkattvals;
ArrayType *tgt_pkattvals_arry;
int tgt_ndim;
@@ -1191,7 +1200,11 @@ dblink_build_sql_delete(PG_FUNCTION_ARGS)
elog(ERROR, "dblink_build_sql_delete: relation does not exist");
pkattnums = (int16 *) PG_GETARG_POINTER(1);
- pknumatts = PG_GETARG_INT16(2);
+ pknumatts_tmp = PG_GETARG_INT32(2);
+ if (pknumatts_tmp <= SHRT_MAX)
+ pknumatts = pknumatts_tmp;
+ else
+ elog(ERROR, "Bad input value for pknumatts; too large");
/*
* There should be at least one key attribute
@@ -1274,7 +1287,8 @@ dblink_build_sql_update(PG_FUNCTION_ARGS)
Oid relid;
text *relname_text;
int16 *pkattnums;
- int16 pknumatts;
+ int pknumatts_tmp;
+ int16 pknumatts = 0;
char **src_pkattvals;
char **tgt_pkattvals;
ArrayType *src_pkattvals_arry;
@@ -1303,7 +1317,11 @@ dblink_build_sql_update(PG_FUNCTION_ARGS)
elog(ERROR, "dblink_build_sql_update: relation does not exist");
pkattnums = (int16 *) PG_GETARG_POINTER(1);
- pknumatts = PG_GETARG_INT16(2);
+ pknumatts_tmp = PG_GETARG_INT32(2);
+ if (pknumatts_tmp <= SHRT_MAX)
+ pknumatts = pknumatts_tmp;
+ else
+ elog(ERROR, "Bad input value for pknumatts; too large");
/*
* There should be one source array key values for each key attnum
diff --git a/contrib/dblink/dblink.sql.in b/contrib/dblink/dblink.sql.in
index 9a2e05a20e9..7f76ffc5018 100644
--- a/contrib/dblink/dblink.sql.in
+++ b/contrib/dblink/dblink.sql.in
@@ -57,15 +57,15 @@ CREATE OR REPLACE FUNCTION dblink_get_pkey (text) RETURNS setof dblink_pkey_resu
AS 'MODULE_PATHNAME','dblink_get_pkey' LANGUAGE 'c'
WITH (isstrict);
-CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector, int2, _text, _text) RETURNS text
+CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector, int4, _text, _text) RETURNS text
AS 'MODULE_PATHNAME','dblink_build_sql_insert' LANGUAGE 'c'
WITH (isstrict);
-CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector, int2, _text) RETURNS text
+CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector, int4, _text) RETURNS text
AS 'MODULE_PATHNAME','dblink_build_sql_delete' LANGUAGE 'c'
WITH (isstrict);
-CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector, int2, _text, _text) RETURNS text
+CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector, int4, _text, _text) RETURNS text
AS 'MODULE_PATHNAME','dblink_build_sql_update' LANGUAGE 'c'
WITH (isstrict);
@@ -82,8 +82,8 @@ GRANT EXECUTE ON FUNCTION dblink (text) TO PUBLIC;
GRANT EXECUTE ON FUNCTION dblink_exec (text,text) TO PUBLIC;
GRANT EXECUTE ON FUNCTION dblink_exec (text) TO PUBLIC;
GRANT EXECUTE ON FUNCTION dblink_get_pkey (text) TO PUBLIC;
-GRANT EXECUTE ON FUNCTION dblink_build_sql_insert (text, int2vector, int2, _text, _text) TO PUBLIC;
-GRANT EXECUTE ON FUNCTION dblink_build_sql_delete (text, int2vector, int2, _text) TO PUBLIC;
-GRANT EXECUTE ON FUNCTION dblink_build_sql_update (text, int2vector, int2, _text, _text) TO PUBLIC;
+GRANT EXECUTE ON FUNCTION dblink_build_sql_insert (text, int2vector, int4, _text, _text) TO PUBLIC;
+GRANT EXECUTE ON FUNCTION dblink_build_sql_delete (text, int2vector, int4, _text) TO PUBLIC;
+GRANT EXECUTE ON FUNCTION dblink_build_sql_update (text, int2vector, int4, _text, _text) TO PUBLIC;
GRANT EXECUTE ON FUNCTION dblink_current_query () TO PUBLIC;