summaryrefslogtreecommitdiff
path: root/contrib/dblink/dblink.c
diff options
context:
space:
mode:
authorBruce Momjian2001-06-18 19:09:50 +0000
committerBruce Momjian2001-06-18 19:09:50 +0000
commit10b5f0bea890afd85adbb184d0dcd8aa81d1c561 (patch)
tree16febbed0fa6db20dced0fe76fc839e2d51c0f58 /contrib/dblink/dblink.c
parentec96f1dacd7f8ea1b2a85dd6bfd2ae0157e9239f (diff)
Here's a small patch for dblink:
- fixed dblink invalid pointer causing corrupt elog message - fixed dblink_tok improper handling of null results - fixed examples in README.dblink Joe Conway
Diffstat (limited to 'contrib/dblink/dblink.c')
-rw-r--r--contrib/dblink/dblink.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index b3c9c6cbbf2..d457a76cbf9 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -57,7 +57,7 @@ dblink(PG_FUNCTION_ARGS)
conn = PQconnectdb(optstr);
if (PQstatus(conn) == CONNECTION_BAD)
{
- msg = PQerrorMessage(conn);
+ msg = pstrdup(PQerrorMessage(conn));
PQfinish(conn);
elog(ERROR, "dblink: connection error: %s", msg);
}
@@ -65,7 +65,7 @@ dblink(PG_FUNCTION_ARGS)
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
- msg = PQerrorMessage(conn);
+ msg = pstrdup(PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
elog(ERROR, "dblink: begin error: %s", msg);
@@ -84,7 +84,7 @@ dblink(PG_FUNCTION_ARGS)
res = PQexec(conn, execstatement);
if (!res || (PQresultStatus(res) != PGRES_COMMAND_OK && PQresultStatus(res) != PGRES_TUPLES_OK))
{
- msg = PQerrorMessage(conn);
+ msg = pstrdup(PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
elog(ERROR, "dblink: sql error: %s", msg);
@@ -96,7 +96,7 @@ dblink(PG_FUNCTION_ARGS)
res = PQexec(conn, "FETCH ALL in mycursor");
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) {
- msg = PQerrorMessage(conn);
+ msg = pstrdup(PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
elog(ERROR, "dblink: sql error: %s", msg);
@@ -230,20 +230,28 @@ dblink_tok(PG_FUNCTION_ARGS)
elog(ERROR, "dblink: field number %d does not exist", fldnum);
}
- text_len = PQgetlength(results->res, results->tup_num, fldnum);
+ if (PQgetisnull(results->res, results->tup_num, fldnum) == 1) {
- result = (char *) palloc(text_len + 1);
+ PG_RETURN_NULL();
- if (result != NULL) {
- strcpy(result, PQgetvalue(results->res, results->tup_num, fldnum));
- strcat(result, "\0");
} else {
- elog(ERROR, "dblink: insufficient memory" );
- }
- result_text = DatumGetTextP(DirectFunctionCall1(textin, CStringGetDatum(result)));
+ text_len = PQgetlength(results->res, results->tup_num, fldnum);
+
+ result = (char *) palloc(text_len + 1);
- PG_RETURN_TEXT_P(result_text);
+ if (result != NULL) {
+ strcpy(result, PQgetvalue(results->res, results->tup_num, fldnum));
+ strcat(result, "\0");
+ } else {
+ elog(ERROR, "dblink: insufficient memory" );
+ }
+
+ result_text = DatumGetTextP(DirectFunctionCall1(textin, CStringGetDatum(result)));
+
+ PG_RETURN_TEXT_P(result_text);
+
+ }
}