@@ -57,15 +57,15 @@ dblink(PG_FUNCTION_ARGS)
5757conn = PQconnectdb (optstr );
5858if (PQstatus (conn )== CONNECTION_BAD )
5959{
60- msg = PQerrorMessage (conn );
60+ msg = pstrdup ( PQerrorMessage (conn ) );
6161PQfinish (conn );
6262elog (ERROR ,"dblink: connection error: %s" ,msg );
6363}
6464
6565res = PQexec (conn ,"BEGIN" );
6666if (PQresultStatus (res )!= PGRES_COMMAND_OK )
6767{
68- msg = PQerrorMessage (conn );
68+ msg = pstrdup ( PQerrorMessage (conn ) );
6969PQclear (res );
7070PQfinish (conn );
7171elog (ERROR ,"dblink: begin error: %s" ,msg );
@@ -84,7 +84,7 @@ dblink(PG_FUNCTION_ARGS)
8484res = PQexec (conn ,execstatement );
8585if (!res || (PQresultStatus (res )!= PGRES_COMMAND_OK && PQresultStatus (res )!= PGRES_TUPLES_OK ))
8686{
87- msg = PQerrorMessage (conn );
87+ msg = pstrdup ( PQerrorMessage (conn ) );
8888PQclear (res );
8989PQfinish (conn );
9090elog (ERROR ,"dblink: sql error: %s" ,msg );
@@ -96,7 +96,7 @@ dblink(PG_FUNCTION_ARGS)
9696
9797res = PQexec (conn ,"FETCH ALL in mycursor" );
9898if (!res || PQresultStatus (res )!= PGRES_TUPLES_OK ) {
99- msg = PQerrorMessage (conn );
99+ msg = pstrdup ( PQerrorMessage (conn ) );
100100PQclear (res );
101101PQfinish (conn );
102102elog (ERROR ,"dblink: sql error: %s" ,msg );
@@ -230,20 +230,28 @@ dblink_tok(PG_FUNCTION_ARGS)
230230elog (ERROR ,"dblink: field number %d does not exist" ,fldnum );
231231}
232232
233- text_len = PQgetlength ( results -> res ,results -> tup_num ,fldnum );
233+ if ( PQgetisnull ( results -> res ,results -> tup_num ,fldnum )== 1 ) {
234234
235- result = ( char * ) palloc ( text_len + 1 );
235+ PG_RETURN_NULL ( );
236236
237- if (result != NULL ) {
238- strcpy (result ,PQgetvalue (results -> res ,results -> tup_num ,fldnum ));
239- strcat (result ,"\0" );
240237}else {
241- elog (ERROR ,"dblink: insufficient memory" );
242- }
243238
244- result_text = DatumGetTextP (DirectFunctionCall1 (textin ,CStringGetDatum (result )));
239+ text_len = PQgetlength (results -> res ,results -> tup_num ,fldnum );
240+
241+ result = (char * )palloc (text_len + 1 );
245242
246- PG_RETURN_TEXT_P (result_text );
243+ if (result != NULL ) {
244+ strcpy (result ,PQgetvalue (results -> res ,results -> tup_num ,fldnum ));
245+ strcat (result ,"\0" );
246+ }else {
247+ elog (ERROR ,"dblink: insufficient memory" );
248+ }
249+
250+ result_text = DatumGetTextP (DirectFunctionCall1 (textin ,CStringGetDatum (result )));
251+
252+ PG_RETURN_TEXT_P (result_text );
253+
254+ }
247255}
248256
249257