how to call the function--pqCatenateResultError()

Started by _石头over 14 years ago2 messages
#1_石头
tanjia76@qq.com

Hello!~

Now i encounter a function call problem in PostgreSQL's psql module!

The situation is as follow:
In ./src/bin/psql/common.c, I want to call the function pqCatenateResultError().
Function pqCatenateResultError() is declared in ./src/interfaces/libpq/libpq-init.h
extern void pqCatenateResultError(PGresult *res, const char *msg);
and is defined in ./src/interfaces/libpq/fe-exec.c
void
pqCatenateResultError(PGresult *res, const char *msg)
{
PQExpBufferData errorBuf;
if (!res || !msg)
return;
initPQExpBuffer(&errorBuf);
if (res->errMsg)
appendPQExpBufferStr(&errorBuf, res->errMsg);
appendPQExpBufferStr(&errorBuf, msg);
pqSetResultError(res, errorBuf.data);
termPQExpBuffer(&errorBuf);
}

To call this function in ./common.c, I include 'libpq-init.h' in ./src/bin/psql/common.h .
As ./common.c include the header file 'common.h'.

But when I use pqCatenateResultError() in ./common.c, It appears "undefined reference to pqCatenateResultError()" first.

So I include 'extern void pqCatenateResultError(PGresult *res, const char *msg);' at the begining of './common.c' .
But this change make no difference to the result.

I do not know why this happened! Someone hlep me! Thank you.

There is another situation similar to the situation above:
Function PQexec() is declared in ./src/interfaces/libpq/libpq-fe.h and defined in ./src/interfaces/libpq/fe-exec.c
extern PGresult *PQexec(PGconn *conn, const char *query);
I can call this function with no error happening!

These two situation puzzled me!~

From: Stone

#2Robert Haas
robertmhaas@gmail.com
In reply to: _石头 (#1)
Re: how to call the function--pqCatenateResultError()

2011/6/27 _石头 <tanjia76@qq.com>:

Hello!~

       Now i encounter a function call problem in PostgreSQL's psql module!

       The situation is as follow:
        In ./src/bin/psql/common.c, I want to call the
function pqCatenateResultError().
        Function pqCatenateResultError() is declared in
./src/interfaces/libpq/libpq-init.h
                                    extern void
pqCatenateResultError(PGresult *res, const char *msg);
        and is defined in ./src/interfaces/libpq/fe-exec.c
                               void
                               pqCatenateResultError(PGresult *res, const
char *msg)
                              {
                          PQExpBufferData errorBuf;
                          if (!res || !msg)
                             return;
                          initPQExpBuffer(&errorBuf);
                          if (res->errMsg)
                  appendPQExpBufferStr(&errorBuf, res->errMsg);
                          appendPQExpBufferStr(&errorBuf, msg);
                          pqSetResultError(res, errorBuf.data);
                          termPQExpBuffer(&errorBuf);
                              }
      To call this function in ./common.c, I include 'libpq-init.h' in
./src/bin/psql/common.h .
      As ./common.c include the header file 'common.h'.
     But when I use pqCatenateResultError() in ./common.c, It appears
"undefined reference to pqCatenateResultError()" first.

     So I include 'extern void pqCatenateResultError(PGresult *res, const
char *msg);' at the begining of './common.c' .
     But this change make no difference to the result.

      I do not know why this happened! Someone hlep me!  Thank you.
      There is another situation similar to the situation above:
      Function PQexec() is declared in ./src/interfaces/libpq/libpq-fe.h and
defined in ./src/interfaces/libpq/fe-exec.c
                             extern PGresult *PQexec(PGconn *conn, const
char *query);
      I can call this function with no error happening!
      These two situation puzzled me!~

Are you developing on Windows, by any chance?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company