Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc99f820

Browse files
committed
Tweak dblink functions to use int4 arguments instead of int2,
to avoid having to write explicit casts. From Joe Conway.
1 parent245b3d7 commitc99f820

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

‎contrib/dblink/dblink.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,6 +1002,9 @@ dblink_last_oid(PG_FUNCTION_ARGS)
10021002
}
10031003

10041004

1005+
#ifndefSHRT_MAX
1006+
#defineSHRT_MAX (0x7FFF)
1007+
#endif
10051008
/*
10061009
* dblink_build_sql_insert
10071010
*
@@ -1028,7 +1031,8 @@ dblink_build_sql_insert(PG_FUNCTION_ARGS)
10281031
Oidrelid;
10291032
text*relname_text;
10301033
int16*pkattnums;
1031-
int16pknumatts;
1034+
intpknumatts_tmp;
1035+
int16pknumatts=0;
10321036
char**src_pkattvals;
10331037
char**tgt_pkattvals;
10341038
ArrayType*src_pkattvals_arry;
@@ -1057,7 +1061,11 @@ dblink_build_sql_insert(PG_FUNCTION_ARGS)
10571061
elog(ERROR,"dblink_build_sql_insert: relation does not exist");
10581062

10591063
pkattnums= (int16*)PG_GETARG_POINTER(1);
1060-
pknumatts=PG_GETARG_INT16(2);
1064+
pknumatts_tmp=PG_GETARG_INT32(2);
1065+
if (pknumatts_tmp <=SHRT_MAX)
1066+
pknumatts=pknumatts_tmp;
1067+
else
1068+
elog(ERROR,"Bad input value for pknumatts; too large");
10611069

10621070
/*
10631071
* There should be at least one key attribute
@@ -1167,7 +1175,8 @@ dblink_build_sql_delete(PG_FUNCTION_ARGS)
11671175
Oidrelid;
11681176
text*relname_text;
11691177
int16*pkattnums;
1170-
int16pknumatts;
1178+
intpknumatts_tmp;
1179+
int16pknumatts=0;
11711180
char**tgt_pkattvals;
11721181
ArrayType*tgt_pkattvals_arry;
11731182
inttgt_ndim;
@@ -1191,7 +1200,11 @@ dblink_build_sql_delete(PG_FUNCTION_ARGS)
11911200
elog(ERROR,"dblink_build_sql_delete: relation does not exist");
11921201

11931202
pkattnums= (int16*)PG_GETARG_POINTER(1);
1194-
pknumatts=PG_GETARG_INT16(2);
1203+
pknumatts_tmp=PG_GETARG_INT32(2);
1204+
if (pknumatts_tmp <=SHRT_MAX)
1205+
pknumatts=pknumatts_tmp;
1206+
else
1207+
elog(ERROR,"Bad input value for pknumatts; too large");
11951208

11961209
/*
11971210
* There should be at least one key attribute
@@ -1274,7 +1287,8 @@ dblink_build_sql_update(PG_FUNCTION_ARGS)
12741287
Oidrelid;
12751288
text*relname_text;
12761289
int16*pkattnums;
1277-
int16pknumatts;
1290+
intpknumatts_tmp;
1291+
int16pknumatts=0;
12781292
char**src_pkattvals;
12791293
char**tgt_pkattvals;
12801294
ArrayType*src_pkattvals_arry;
@@ -1303,7 +1317,11 @@ dblink_build_sql_update(PG_FUNCTION_ARGS)
13031317
elog(ERROR,"dblink_build_sql_update: relation does not exist");
13041318

13051319
pkattnums= (int16*)PG_GETARG_POINTER(1);
1306-
pknumatts=PG_GETARG_INT16(2);
1320+
pknumatts_tmp=PG_GETARG_INT32(2);
1321+
if (pknumatts_tmp <=SHRT_MAX)
1322+
pknumatts=pknumatts_tmp;
1323+
else
1324+
elog(ERROR,"Bad input value for pknumatts; too large");
13071325

13081326
/*
13091327
* There should be one source array key values for each key attnum

‎contrib/dblink/dblink.sql.in

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ CREATE OR REPLACE FUNCTION dblink_get_pkey (text) RETURNS setof dblink_pkey_resu
5757
AS 'MODULE_PATHNAME','dblink_get_pkey' LANGUAGE 'c'
5858
WITH (isstrict);
5959

60-
CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector,int2, _text, _text) RETURNS text
60+
CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector,int4, _text, _text) RETURNS text
6161
AS 'MODULE_PATHNAME','dblink_build_sql_insert' LANGUAGE 'c'
6262
WITH (isstrict);
6363

64-
CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector,int2, _text) RETURNS text
64+
CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector,int4, _text) RETURNS text
6565
AS 'MODULE_PATHNAME','dblink_build_sql_delete' LANGUAGE 'c'
6666
WITH (isstrict);
6767

68-
CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector,int2, _text, _text) RETURNS text
68+
CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector,int4, _text, _text) RETURNS text
6969
AS 'MODULE_PATHNAME','dblink_build_sql_update' LANGUAGE 'c'
7070
WITH (isstrict);
7171

@@ -82,8 +82,8 @@ GRANT EXECUTE ON FUNCTION dblink (text) TO PUBLIC;
8282
GRANT EXECUTE ON FUNCTION dblink_exec (text,text) TO PUBLIC;
8383
GRANT EXECUTE ON FUNCTION dblink_exec (text) TO PUBLIC;
8484
GRANT EXECUTE ON FUNCTION dblink_get_pkey (text) TO PUBLIC;
85-
GRANT EXECUTE ON FUNCTION dblink_build_sql_insert (text, int2vector,int2, _text, _text) TO PUBLIC;
86-
GRANT EXECUTE ON FUNCTION dblink_build_sql_delete (text, int2vector,int2, _text) TO PUBLIC;
87-
GRANT EXECUTE ON FUNCTION dblink_build_sql_update (text, int2vector,int2, _text, _text) TO PUBLIC;
85+
GRANT EXECUTE ON FUNCTION dblink_build_sql_insert (text, int2vector,int4, _text, _text) TO PUBLIC;
86+
GRANT EXECUTE ON FUNCTION dblink_build_sql_delete (text, int2vector,int4, _text) TO PUBLIC;
87+
GRANT EXECUTE ON FUNCTION dblink_build_sql_update (text, int2vector,int4, _text, _text) TO PUBLIC;
8888
GRANT EXECUTE ON FUNCTION dblink_current_query () TO PUBLIC;
8989

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp