mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Add PQsetdbLogin() and cleanup.
This commit is contained in:
parent
05f9966183
commit
1a2aee2d73
205
src/man/libpq.3
205
src/man/libpq.3
@ -1,6 +1,6 @@
|
|||||||
.\" This is -*-nroff-*-
|
.\" This is -*-nroff-*-
|
||||||
.\" XXX standard disclaimer belongs here....
|
.\" XXX standard disclaimer belongs here....
|
||||||
.\" $Header: /cvsroot/pgsql/src/man/Attic/libpq.3,v 1.17 1998/06/24 13:21:27 momjian Exp $
|
.\" $Header: /cvsroot/pgsql/src/man/Attic/libpq.3,v 1.18 1998/07/04 17:50:04 momjian Exp $
|
||||||
.TH LIBPQ INTRO 03/12/94 PostgreSQL PostgreSQL
|
.TH LIBPQ INTRO 03/12/94 PostgreSQL PostgreSQL
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
Libpq is the programmer's interface to Postgres. Libpq is a set of
|
Libpq is the programmer's interface to Postgres. Libpq is a set of
|
||||||
@ -109,8 +109,14 @@ The following routines deal with making a connection to a backend
|
|||||||
from a C program.
|
from a C program.
|
||||||
.PP
|
.PP
|
||||||
.B PQsetdb
|
.B PQsetdb
|
||||||
|
.br
|
||||||
|
.B PQsetdbLogin
|
||||||
.IP
|
.IP
|
||||||
Makes a new connection to a backend.
|
Makes a new connection to a backend.
|
||||||
|
.B PQsetdb
|
||||||
|
is the method usually used to
|
||||||
|
connect to the database when username/password authentication is not
|
||||||
|
needed.
|
||||||
.nf
|
.nf
|
||||||
PGconn *PQsetdb(char *pghost,
|
PGconn *PQsetdb(char *pghost,
|
||||||
char *pgport,
|
char *pgport,
|
||||||
@ -118,12 +124,30 @@ PGconn *PQsetdb(char *pghost,
|
|||||||
char *pgtty,
|
char *pgtty,
|
||||||
char *dbName);
|
char *dbName);
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
|
.IP
|
||||||
|
.B PQsetdbLogin
|
||||||
|
is the method used to
|
||||||
|
connect to the database when username/password authentication is
|
||||||
|
needed.
|
||||||
|
.nf
|
||||||
|
PGconn *PQsetdbLogin(char *pghost,
|
||||||
|
char *pgport,
|
||||||
|
char *pgoptions,
|
||||||
|
char *pgtty,
|
||||||
|
char *dbName,
|
||||||
|
char *login,
|
||||||
|
char *pwd);
|
||||||
|
.fi
|
||||||
|
|
||||||
If any argument is NULL, then the corresponding environment variable
|
If any argument is NULL, then the corresponding environment variable
|
||||||
is checked. If the environment variable is also not set, then hardwired
|
is checked. If the environment variable is also not set, then hardwired
|
||||||
defaults are used.
|
defaults are used.
|
||||||
.IP
|
.IP
|
||||||
.I PQsetdb
|
.I PQsetdb
|
||||||
always returns a valid PGconn pointer. The
|
and
|
||||||
|
.I PQsetdbLogin
|
||||||
|
always return a valid PGconn pointer. The
|
||||||
.I PQstatus
|
.I PQstatus
|
||||||
(see below) command should be called to ensure that a connection was
|
(see below) command should be called to ensure that a connection was
|
||||||
properly made before queries are sent via the connection. Libpq
|
properly made before queries are sent via the connection. Libpq
|
||||||
@ -132,37 +156,44 @@ the accessor functions below to get at the contents of PGconn. Avoid
|
|||||||
directly referencing the fields of the PGconn structure as they are
|
directly referencing the fields of the PGconn structure as they are
|
||||||
subject to change in the future.
|
subject to change in the future.
|
||||||
.IP
|
.IP
|
||||||
|
|
||||||
.B PQdb
|
.B PQdb
|
||||||
returns the database name of the connection.
|
returns the database name of the connection.
|
||||||
.nf
|
.nf
|
||||||
char *PQdb(PGconn *conn)
|
char *PQdb(PGconn *conn)
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
.B PQhost
|
.B PQhost
|
||||||
returns the host name of the connection.
|
returns the host name of the connection.
|
||||||
.nf
|
.nf
|
||||||
char *PQhost(PGconn *conn)
|
char *PQhost(PGconn *conn)
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
.B PQoptions
|
.B PQoptions
|
||||||
returns the pgoptions used in the connection.
|
returns the pgoptions used in the connection.
|
||||||
.nf
|
.nf
|
||||||
char *PQoptions(PGconn *conn)
|
char *PQoptions(PGconn *conn)
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
.B PQport
|
.B PQport
|
||||||
returns the pgport of the connection.
|
returns the pgport of the connection.
|
||||||
.nf
|
.nf
|
||||||
char *PQport(PGconn *conn)
|
char *PQport(PGconn *conn)
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
.B PQtty
|
.B PQtty
|
||||||
returns the pgtty of the connection.
|
returns the pgtty of the connection.
|
||||||
.nf
|
.nf
|
||||||
char *PQtty(PGconn *conn)
|
char *PQtty(PGconn *conn)
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
.B PQstatus
|
.B PQstatus
|
||||||
Returns the status of the connection. The status can be CONNECTION_OK or
|
Returns the status of the connection. The status can be CONNECTION_OK or
|
||||||
CONNECTION_BAD.
|
CONNECTION_BAD.
|
||||||
.nf
|
.nf
|
||||||
ConnStatusType *PQstatus(PGconn *conn)
|
ConnStatusType *PQstatus(PGconn *conn)
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
.B PQerrorMessage
|
.B PQerrorMessage
|
||||||
returns the error message associated with the connection
|
returns the error message associated with the connection
|
||||||
.nf
|
.nf
|
||||||
@ -654,23 +685,30 @@ exit_nicely(PGconn* conn)
|
|||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
char *pghost, *pgport, *pgoptions, *pgtty;
|
char *pghost,
|
||||||
|
*pgport,
|
||||||
|
*pgoptions,
|
||||||
|
*pgtty;
|
||||||
char *dbName;
|
char *dbName;
|
||||||
int nFields;
|
int nFields;
|
||||||
int i,j;
|
int i,
|
||||||
|
j;
|
||||||
|
|
||||||
/* FILE *debug; */
|
/* FILE *debug; */
|
||||||
|
|
||||||
PGconn *conn;
|
PGconn *conn;
|
||||||
PGresult *res;
|
PGresult *res;
|
||||||
|
|
||||||
/* begin, by setting the parameters for a backend connection
|
/*
|
||||||
if the parameters are null, then the system will try to use
|
* begin, by setting the parameters for a backend connection if the
|
||||||
reasonable defaults by looking up environment variables
|
* parameters are null, then the system will try to use reasonable
|
||||||
or, failing that, using hardwired constants */
|
* defaults by looking up environment variables or, failing that,
|
||||||
|
* using hardwired constants
|
||||||
|
*/
|
||||||
pghost = NULL; /* host name of the backend server */
|
pghost = NULL; /* host name of the backend server */
|
||||||
pgport = NULL; /* port of the backend server */
|
pgport = NULL; /* port of the backend server */
|
||||||
pgoptions = NULL; /* special options to start up the backend server */
|
pgoptions = NULL; /* special options to start up the backend
|
||||||
|
* server */
|
||||||
pgtty = NULL; /* debugging tty for the backend server */
|
pgtty = NULL; /* debugging tty for the backend server */
|
||||||
dbName = "template1";
|
dbName = "template1";
|
||||||
|
|
||||||
@ -678,7 +716,8 @@ main()
|
|||||||
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
|
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
|
||||||
|
|
||||||
/* check to see that the backend connection was successfully made */
|
/* check to see that the backend connection was successfully made */
|
||||||
if (PQstatus(conn) == CONNECTION_BAD) {
|
if (PQstatus(conn) == CONNECTION_BAD)
|
||||||
|
{
|
||||||
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
|
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
|
||||||
fprintf(stderr, "%s", PQerrorMessage(conn));
|
fprintf(stderr, "%s", PQerrorMessage(conn));
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
@ -689,18 +728,26 @@ main()
|
|||||||
|
|
||||||
/* start a transaction block */
|
/* start a transaction block */
|
||||||
res = PQexec(conn, "BEGIN");
|
res = PQexec(conn, "BEGIN");
|
||||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
|
{
|
||||||
fprintf(stderr, "BEGIN command failed\\n");
|
fprintf(stderr, "BEGIN command failed\\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
}
|
}
|
||||||
/* should PQclear PGresult whenever it is no longer needed to avoid
|
|
||||||
memory leaks */
|
/*
|
||||||
|
* should PQclear PGresult whenever it is no longer needed to avoid
|
||||||
|
* memory leaks
|
||||||
|
*/
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
|
|
||||||
/* fetch instances from the pg_database, the system catalog of databases*/
|
/*
|
||||||
|
* fetch instances from the pg_database, the system catalog of
|
||||||
|
* databases
|
||||||
|
*/
|
||||||
res = PQexec(conn, "DECLARE mycursor CURSOR FOR select * from pg_database");
|
res = PQexec(conn, "DECLARE mycursor CURSOR FOR select * from pg_database");
|
||||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
|
{
|
||||||
fprintf(stderr, "DECLARE CURSOR command failed\\n");
|
fprintf(stderr, "DECLARE CURSOR command failed\\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
@ -708,7 +755,8 @@ main()
|
|||||||
PQclear(res);
|
PQclear(res);
|
||||||
|
|
||||||
res = PQexec(conn, "FETCH ALL in mycursor");
|
res = PQexec(conn, "FETCH ALL in mycursor");
|
||||||
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||||
|
{
|
||||||
fprintf(stderr, "FETCH ALL command didn't return tuples properly\\n");
|
fprintf(stderr, "FETCH ALL command didn't return tuples properly\\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
@ -716,16 +764,15 @@ main()
|
|||||||
|
|
||||||
/* first, print out the attribute names */
|
/* first, print out the attribute names */
|
||||||
nFields = PQnfields(res);
|
nFields = PQnfields(res);
|
||||||
for (i=0; i < nFields; i++) {
|
for (i = 0; i < nFields; i++)
|
||||||
printf("%-15s", PQfname(res, i));
|
printf("%-15s", PQfname(res, i));
|
||||||
}
|
|
||||||
printf("\\n\\n");
|
printf("\\n\\n");
|
||||||
|
|
||||||
/* next, print out the instances */
|
/* next, print out the instances */
|
||||||
for (i=0; i < PQntuples(res); i++) {
|
for (i = 0; i < PQntuples(res); i++)
|
||||||
for (j=0 ; j < nFields; j++) {
|
{
|
||||||
|
for (j = 0; j < nFields; j++)
|
||||||
printf("%-15s", PQgetvalue(res, i, j));
|
printf("%-15s", PQgetvalue(res, i, j));
|
||||||
}
|
|
||||||
printf("\\n");
|
printf("\\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -744,6 +791,7 @@ main()
|
|||||||
|
|
||||||
/* fclose(debug); */
|
/* fclose(debug); */
|
||||||
}
|
}
|
||||||
|
|
||||||
.fi
|
.fi
|
||||||
.bp
|
.bp
|
||||||
.SH "Sample Program 2"
|
.SH "Sample Program 2"
|
||||||
@ -772,7 +820,8 @@ INSERT INTO TBL1 values (10);
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "libpq-fe.h"
|
#include "libpq-fe.h"
|
||||||
|
|
||||||
void exit_nicely(PGconn* conn)
|
void
|
||||||
|
exit_nicely(PGconn *conn)
|
||||||
{
|
{
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -780,53 +829,68 @@ void exit_nicely(PGconn* conn)
|
|||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
char *pghost, *pgport, *pgoptions, *pgtty;
|
char *pghost,
|
||||||
|
*pgport,
|
||||||
|
*pgoptions,
|
||||||
|
*pgtty;
|
||||||
char *dbName;
|
char *dbName;
|
||||||
int nFields;
|
int nFields;
|
||||||
int i,j;
|
int i,
|
||||||
|
j;
|
||||||
|
|
||||||
PGconn *conn;
|
PGconn *conn;
|
||||||
PGresult *res;
|
PGresult *res;
|
||||||
PGnotify *notify;
|
PGnotify *notify;
|
||||||
|
|
||||||
/* begin, by setting the parameters for a backend connection
|
/*
|
||||||
if the parameters are null, then the system will try to use
|
* begin, by setting the parameters for a backend connection if the
|
||||||
reasonable defaults by looking up environment variables
|
* parameters are null, then the system will try to use reasonable
|
||||||
or, failing that, using hardwired constants */
|
* defaults by looking up environment variables or, failing that,
|
||||||
|
* using hardwired constants
|
||||||
|
*/
|
||||||
pghost = NULL; /* host name of the backend server */
|
pghost = NULL; /* host name of the backend server */
|
||||||
pgport = NULL; /* port of the backend server */
|
pgport = NULL; /* port of the backend server */
|
||||||
pgoptions = NULL; /* special options to start up the backend server */
|
pgoptions = NULL; /* special options to start up the backend
|
||||||
|
* server */
|
||||||
pgtty = NULL; /* debugging tty for the backend server */
|
pgtty = NULL; /* debugging tty for the backend server */
|
||||||
dbName = getenv("USER"); /* change this to the name of your test database*/
|
dbName = getenv("USER"); /* change this to the name of your test
|
||||||
|
* database */
|
||||||
|
|
||||||
/* make a connection to the database */
|
/* make a connection to the database */
|
||||||
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
|
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
|
||||||
|
|
||||||
/* check to see that the backend connection was successfully made */
|
/* check to see that the backend connection was successfully made */
|
||||||
if (PQstatus(conn) == CONNECTION_BAD) {
|
if (PQstatus(conn) == CONNECTION_BAD)
|
||||||
|
{
|
||||||
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
|
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
|
||||||
fprintf(stderr, "%s", PQerrorMessage(conn));
|
fprintf(stderr, "%s", PQerrorMessage(conn));
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = PQexec(conn, "LISTEN TBL2");
|
res = PQexec(conn, "LISTEN TBL2");
|
||||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
|
{
|
||||||
fprintf(stderr, "LISTEN command failed\\n");
|
fprintf(stderr, "LISTEN command failed\\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
}
|
}
|
||||||
/* should PQclear PGresult whenever it is no longer needed to avoid
|
|
||||||
memory leaks */
|
/*
|
||||||
|
* should PQclear PGresult whenever it is no longer needed to avoid
|
||||||
|
* memory leaks
|
||||||
|
*/
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
|
|
||||||
while (1) {
|
while (1)
|
||||||
|
{
|
||||||
/* async notification only come back as a result of a query */
|
/* async notification only come back as a result of a query */
|
||||||
/* we can send empty queries */
|
/* we can send empty queries */
|
||||||
res = PQexec(conn, "");
|
res = PQexec(conn, "");
|
||||||
/* printf("res->status = %s\\n", pgresStatus[PQresultStatus(res)]); */
|
/* printf("res->status = %s\\n", pgresStatus[PQresultStatus(res)]); */
|
||||||
/* check for asynchronous returns */
|
/* check for asynchronous returns */
|
||||||
notify = PQnotifies(conn);
|
notify = PQnotifies(conn);
|
||||||
if (notify) {
|
if (notify)
|
||||||
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"ASYNC NOTIFY of '%s' from backend pid '%d' received\\n",
|
"ASYNC NOTIFY of '%s' from backend pid '%d' received\\n",
|
||||||
notify->relname, notify->be_pid);
|
notify->relname, notify->be_pid);
|
||||||
@ -840,6 +904,7 @@ main()
|
|||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.fi
|
.fi
|
||||||
.bp
|
.bp
|
||||||
.SH "Sample Program 3"
|
.SH "Sample Program 3"
|
||||||
@ -877,7 +942,8 @@ tuple 1: got
|
|||||||
#include "libpq-fe.h"
|
#include "libpq-fe.h"
|
||||||
#include "utils/geo-decls.h" /* for the POLYGON type */
|
#include "utils/geo-decls.h" /* for the POLYGON type */
|
||||||
|
|
||||||
void exit_nicely(PGconn* conn)
|
void
|
||||||
|
exit_nicely(PGconn *conn)
|
||||||
{
|
{
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -885,31 +951,42 @@ void exit_nicely(PGconn* conn)
|
|||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
char *pghost, *pgport, *pgoptions, *pgtty;
|
char *pghost,
|
||||||
|
*pgport,
|
||||||
|
*pgoptions,
|
||||||
|
*pgtty;
|
||||||
char *dbName;
|
char *dbName;
|
||||||
int nFields;
|
int nFields;
|
||||||
int i,j;
|
int i,
|
||||||
int i_fnum, d_fnum, p_fnum;
|
j;
|
||||||
|
int i_fnum,
|
||||||
|
d_fnum,
|
||||||
|
p_fnum;
|
||||||
|
|
||||||
PGconn *conn;
|
PGconn *conn;
|
||||||
PGresult *res;
|
PGresult *res;
|
||||||
|
|
||||||
/* begin, by setting the parameters for a backend connection
|
/*
|
||||||
if the parameters are null, then the system will try to use
|
* begin, by setting the parameters for a backend connection if the
|
||||||
reasonable defaults by looking up environment variables
|
* parameters are null, then the system will try to use reasonable
|
||||||
or, failing that, using hardwired constants */
|
* defaults by looking up environment variables or, failing that,
|
||||||
|
* using hardwired constants
|
||||||
|
*/
|
||||||
pghost = NULL; /* host name of the backend server */
|
pghost = NULL; /* host name of the backend server */
|
||||||
pgport = NULL; /* port of the backend server */
|
pgport = NULL; /* port of the backend server */
|
||||||
pgoptions = NULL; /* special options to start up the backend server */
|
pgoptions = NULL; /* special options to start up the backend
|
||||||
|
* server */
|
||||||
pgtty = NULL; /* debugging tty for the backend server */
|
pgtty = NULL; /* debugging tty for the backend server */
|
||||||
|
|
||||||
dbName = getenv("USER"); /* change this to the name of your test database*/
|
dbName = getenv("USER"); /* change this to the name of your test
|
||||||
|
* database */
|
||||||
|
|
||||||
/* make a connection to the database */
|
/* make a connection to the database */
|
||||||
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
|
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
|
||||||
|
|
||||||
/* check to see that the backend connection was successfully made */
|
/* check to see that the backend connection was successfully made */
|
||||||
if (PQstatus(conn) == CONNECTION_BAD) {
|
if (PQstatus(conn) == CONNECTION_BAD)
|
||||||
|
{
|
||||||
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
|
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
|
||||||
fprintf(stderr, "%s", PQerrorMessage(conn));
|
fprintf(stderr, "%s", PQerrorMessage(conn));
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
@ -917,18 +994,26 @@ main()
|
|||||||
|
|
||||||
/* start a transaction block */
|
/* start a transaction block */
|
||||||
res = PQexec(conn, "BEGIN");
|
res = PQexec(conn, "BEGIN");
|
||||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
|
{
|
||||||
fprintf(stderr, "BEGIN command failed\\n");
|
fprintf(stderr, "BEGIN command failed\\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
}
|
}
|
||||||
/* should PQclear PGresult whenever it is no longer needed to avoid
|
|
||||||
memory leaks */
|
/*
|
||||||
|
* should PQclear PGresult whenever it is no longer needed to avoid
|
||||||
|
* memory leaks
|
||||||
|
*/
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
|
|
||||||
/* fetch instances from the pg_database, the system catalog of databases*/
|
/*
|
||||||
|
* fetch instances from the pg_database, the system catalog of
|
||||||
|
* databases
|
||||||
|
*/
|
||||||
res = PQexec(conn, "DECLARE mycursor BINARY CURSOR FOR select * from test1");
|
res = PQexec(conn, "DECLARE mycursor BINARY CURSOR FOR select * from test1");
|
||||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
if (PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
|
{
|
||||||
fprintf(stderr, "DECLARE CURSOR command failed\\n");
|
fprintf(stderr, "DECLARE CURSOR command failed\\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
@ -936,7 +1021,8 @@ main()
|
|||||||
PQclear(res);
|
PQclear(res);
|
||||||
|
|
||||||
res = PQexec(conn, "FETCH ALL in mycursor");
|
res = PQexec(conn, "FETCH ALL in mycursor");
|
||||||
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
|
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
||||||
|
{
|
||||||
fprintf(stderr, "FETCH ALL command didn't return tuples properly\\n");
|
fprintf(stderr, "FETCH ALL command didn't return tuples properly\\n");
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
exit_nicely(conn);
|
exit_nicely(conn);
|
||||||
@ -946,22 +1032,28 @@ main()
|
|||||||
d_fnum = PQfnumber(res, "d");
|
d_fnum = PQfnumber(res, "d");
|
||||||
p_fnum = PQfnumber(res, "p");
|
p_fnum = PQfnumber(res, "p");
|
||||||
|
|
||||||
for (i=0;i<3;i++) {
|
for (i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
printf("type[%d] = %d, size[%d] = %d\\n",
|
printf("type[%d] = %d, size[%d] = %d\\n",
|
||||||
i, PQftype(res, i),
|
i, PQftype(res, i),
|
||||||
i, PQfsize(res, i));
|
i, PQfsize(res, i));
|
||||||
}
|
}
|
||||||
for (i=0; i < PQntuples(res); i++) {
|
for (i = 0; i < PQntuples(res); i++)
|
||||||
|
{
|
||||||
int *ival;
|
int *ival;
|
||||||
float *dval;
|
float *dval;
|
||||||
int plen;
|
int plen;
|
||||||
POLYGON *pval;
|
POLYGON *pval;
|
||||||
|
|
||||||
/* we hard-wire this to the 3 fields we know about */
|
/* we hard-wire this to the 3 fields we know about */
|
||||||
ival = (int *) PQgetvalue(res, i, i_fnum);
|
ival = (int *) PQgetvalue(res, i, i_fnum);
|
||||||
dval = (float *) PQgetvalue(res, i, d_fnum);
|
dval = (float *) PQgetvalue(res, i, d_fnum);
|
||||||
plen = PQgetlength(res, i, p_fnum);
|
plen = PQgetlength(res, i, p_fnum);
|
||||||
|
|
||||||
/* plen doesn't include the length field so need to increment by VARHDSZ*/
|
/*
|
||||||
|
* plen doesn't include the length field so need to increment by
|
||||||
|
* VARHDSZ
|
||||||
|
*/
|
||||||
pval = (POLYGON *) malloc(plen + VARHDRSZ);
|
pval = (POLYGON *) malloc(plen + VARHDRSZ);
|
||||||
pval->size = plen;
|
pval->size = plen;
|
||||||
memmove((char *) &pval->npts, PQgetvalue(res, i, p_fnum), plen);
|
memmove((char *) &pval->npts, PQgetvalue(res, i, p_fnum), plen);
|
||||||
@ -994,4 +1086,3 @@ main()
|
|||||||
|
|
||||||
}
|
}
|
||||||
.fi
|
.fi
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user