Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
postgres-lambda-diff
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jakob Huber
postgres-lambda-diff
Commits
1a2aee2d
Commit
1a2aee2d
authored
26 years ago
by
Bruce Momjian
Browse files
Options
Downloads
Patches
Plain Diff
Add PQsetdbLogin() and cleanup.
parent
05f99661
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/man/libpq.3
+340
-249
340 additions, 249 deletions
src/man/libpq.3
with
340 additions
and
249 deletions
src/man/libpq.3
+
340
−
249
View file @
1a2aee2d
.\" 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.1
7
1998/0
6/24 13:21:27
momjian Exp $
.\" $Header: /cvsroot/pgsql/src/man/Attic/libpq.3,v 1.1
8
1998/0
7/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
...
@@ -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,
...
@@ -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
...
@@ -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
...
@@ -638,112 +669,129 @@ be silently truncated.
...
@@ -638,112 +669,129 @@ be silently truncated.
.nf M
.nf M
/*
/*
* testlibpq.c
* testlibpq.c
*
Test the C version of Libpq, the Postgres frontend library.
*
Test the C version of Libpq, the Postgres frontend library.
*
*
*
*
*/
*/
#include <stdio.h>
#include <stdio.h>
#include "libpq-fe.h"
#include "libpq-fe.h"
void
void
exit_nicely(PGconn
*
conn)
exit_nicely(PGconn
*
conn)
{
{
PQfinish(conn);
PQfinish(conn);
exit(1);
exit(1);
}
}
main()
main()
{
{
char *pghost, *pgport, *pgoptions, *pgtty;
char *pghost,
char* dbName;
*pgport,
int nFields;
*pgoptions,
int i,j;
*pgtty;
char *dbName;
int nFields;
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,
pghost = NULL; /* host name of the backend server */
* using hardwired constants
pgport = NULL; /* port of the backend server */
*/
pgoptions = NULL; /* special options to start up the backend server */
pghost = NULL; /* host name of the backend server */
pgtty = NULL; /* debugging tty for the backend server */
pgport = NULL; /* port of the backend server */
dbName = "template1";
pgoptions = NULL; /* special options to start up the backend
* server */
/* make a connection to the database */
pgtty = NULL; /* debugging tty for the backend server */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
dbName = "template1";
/* check to see that the backend connection was successfully made */
/* make a connection to the database */
if (PQstatus(conn) == CONNECTION_BAD) {
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
fprintf(stderr,"Connection to database '%s' failed.\\n", dbName);
fprintf(stderr,"%s",PQerrorMessage(conn));
/* check to see that the backend connection was successfully made */
exit_nicely(conn);
if (PQstatus(conn) == CONNECTION_BAD)
}
{
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
/* debug = fopen("/tmp/trace.out","w"); */
/* debug = fopen("/tmp/trace.out","w"); */
/* PQtrace(conn, debug); */
/* PQtrace(conn, debug); */
/* 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");
{
PQclear(res);
fprintf(stderr, "BEGIN command failed\\n");
exit_nicely(conn);
PQclear(res);
}
exit_nicely(conn);
/* should PQclear PGresult whenever it is no longer needed to avoid
}
memory leaks */
PQclear(res);
/*
* should PQclear PGresult whenever it is no longer needed to avoid
/* fetch instances from the pg_database, the system catalog of databases*/
* memory leaks
res = PQexec(conn,"DECLARE mycursor CURSOR FOR select * from pg_database");
*/
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr,"DECLARE CURSOR command failed\\n");
PQclear(res);
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
res = PQexec(conn,"FETCH ALL in mycursor");
/*
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
* fetch instances from the pg_database, the system catalog of
fprintf(stderr,"FETCH ALL command didn't return tuples properly\\n");
* databases
*/
res = PQexec(conn, "DECLARE mycursor CURSOR FOR select * from pg_database");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR command failed\\n");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
PQclear(res);
exit_nicely(conn);
}
res = PQexec(conn, "FETCH ALL in mycursor");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
/* first, print out the attribute names */
{
nFields = PQnfields(res);
fprintf(stderr, "FETCH ALL command didn't return tuples properly\\n");
for (i=0; i < nFields; i++) {
PQclear(res);
printf("%-15s",PQfname(res,i));
exit_nicely(conn);
}
printf("\\n\\n");
/* next, print out the instances */
for (i=0; i < PQntuples(res); i++) {
for (j=0 ; j < nFields; j++) {
printf("%-15s", PQgetvalue(res,i,j));
}
}
printf("\\n");
}
PQclear(res);
/* first, print out the attribute names */
nFields = PQnfields(res);
/* close the cursor */
for (i = 0; i < nFields; i++)
res = PQexec(conn, "CLOSE mycursor");
printf("%-15s", PQfname(res, i));
PQclear(res);
printf("\\n\\n");
/* next, print out the instances */
for (i = 0; i < PQntuples(res); i++)
{
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\\n");
}
/* commit the transaction */
PQclear(res);
res = PQexec(conn, "COMMIT");
PQclear(res);
/* close the cursor */
res = PQexec(conn, "CLOSE mycursor");
PQclear(res);
/* close the connection to the database and cleanup */
/* commit the transaction */
PQfinish(conn);
res = PQexec(conn, "COMMIT");
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
/* fclose(debug); */
/* fclose(debug); */
}
}
.fi
.fi
.bp
.bp
.SH "Sample Program 2"
.SH "Sample Program 2"
...
@@ -751,7 +799,7 @@ main()
...
@@ -751,7 +799,7 @@ main()
.nf M
.nf M
/*
/*
* testlibpq2.c
* testlibpq2.c
*
Test of the asynchronous notification interface
*
Test of the asynchronous notification interface
*
*
populate a database with the following:
populate a database with the following:
...
@@ -772,74 +820,91 @@ INSERT INTO TBL1 values (10);
...
@@ -772,74 +820,91 @@ 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);
}
}
main()
main()
{
{
char *pghost, *pgport, *pgoptions, *pgtty;
char *pghost,
char* dbName;
*pgport,
int nFields;
*pgoptions,
int i,j;
*pgtty;
char *dbName;
PGconn* conn;
int nFields;
PGresult* res;
int i,
PGnotify* notify;
j;
/* begin, by setting the parameters for a backend connection
PGconn *conn;
if the parameters are null, then the system will try to use
PGresult *res;
reasonable defaults by looking up environment variables
PGnotify *notify;
or, failing that, using hardwired constants */
pghost = NULL; /* host name of the backend server */
/*
pgport = NULL; /* port of the backend server */
* begin, by setting the parameters for a backend connection if the
pgoptions = NULL; /* special options to start up the backend server */
* parameters are null, then the system will try to use reasonable
pgtty = NULL; /* debugging tty for the backend server */
* defaults by looking up environment variables or, failing that,
dbName = getenv("USER"); /* change this to the name of your test database*/
* using hardwired constants
*/
/* make a connection to the database */
pghost = NULL; /* host name of the backend server */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
pgport = NULL; /* port of the backend server */
pgoptions = NULL; /* special options to start up the backend
/* check to see that the backend connection was successfully made */
* server */
if (PQstatus(conn) == CONNECTION_BAD) {
pgtty = NULL; /* debugging tty for the backend server */
fprintf(stderr,"Connection to database '%s' failed.\\n", dbName);
dbName = getenv("USER"); /* change this to the name of your test
fprintf(stderr,"%s",PQerrorMessage(conn));
* database */
exit_nicely(conn);
}
/* make a connection to the database */
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
res = PQexec(conn, "LISTEN TBL2");
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
/* check to see that the backend connection was successfully made */
fprintf(stderr,"LISTEN command failed\\n");
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
res = PQexec(conn, "LISTEN TBL2");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "LISTEN command failed\\n");
PQclear(res);
exit_nicely(conn);
}
/*
* should PQclear PGresult whenever it is no longer needed to avoid
* memory leaks
*/
PQclear(res);
PQclear(res);
exit_nicely(conn);
}
while (1)
/* should PQclear PGresult whenever it is no longer needed to avoid
{
memory leaks */
/* async notification only come back as a result of a query */
PQclear(res);
/* we can send empty queries */
res = PQexec(conn, "");
while (1) {
/* async notification only come back as a result of a query*/
/* we can send empty queries */
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,
{
"ASYNC NOTIFY of '%s' from backend pid '%d' received\\n",
fprintf(stderr,
notify->relname, notify->be_pid);
"ASYNC NOTIFY of '%s' from backend pid '%d' received\\n",
free(notify);
notify->relname, notify->be_pid);
break;
free(notify);
}
break;
PQclear(res);
}
}
PQclear(res);
}
/* close the connection to the database and cleanup */
PQfinish(conn);
/* close the connection to the database and cleanup */
PQfinish(conn);
}
}
.fi
.fi
.bp
.bp
.SH "Sample Program 3"
.SH "Sample Program 3"
...
@@ -847,13 +912,13 @@ main()
...
@@ -847,13 +912,13 @@ main()
.nf M
.nf M
/*
/*
* testlibpq3.c
* testlibpq3.c
*
Test the C version of Libpq, the Postgres frontend library.
*
Test the C version of Libpq, the Postgres frontend library.
* tests the binary cursor interface
* tests the binary cursor interface
*
*
*
*
*
*
populate a database by doing the following:
populate a database by doing the following:
CREATE TABLE test1 (i int4, d float4, p polygon);
CREATE TABLE test1 (i int4, d float4, p polygon);
INSERT INTO test1 values (1, 3.567, '(3.0, 4.0, 1.0, 2.0)'::polygon);
INSERT INTO test1 values (1, 3.567, '(3.0, 4.0, 1.0, 2.0)'::polygon);
...
@@ -875,123 +940,149 @@ tuple 1: got
...
@@ -875,123 +940,149 @@ tuple 1: got
*/
*/
#include <stdio.h>
#include <stdio.h>
#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);
}
}
main()
main()
{
{
char *pghost, *pgport, *pgoptions, *pgtty;
char *pghost,
char* dbName;
*pgport,
int nFields;
*pgoptions,
int i,j;
*pgtty;
int i_fnum, d_fnum, p_fnum;
char *dbName;
int nFields;
PGconn* conn;
int i,
PGresult* res;
j;
int i_fnum,
/* begin, by setting the parameters for a backend connection
d_fnum,
if the parameters are null, then the system will try to use
p_fnum;
reasonable defaults by looking up environment variables
or, failing that, using hardwired constants */
PGconn *conn;
pghost = NULL; /* host name of the backend server */
PGresult *res;
pgport = NULL; /* port of the backend server */
pgoptions = NULL; /* special options to start up the backend server */
/*
pgtty = NULL; /* debugging tty for the backend server */
* begin, by setting the parameters for a backend connection if the
* parameters are null, then the system will try to use reasonable
dbName = getenv("USER"); /* change this to the name of your test database*/
* defaults by looking up environment variables or, failing that,
* using hardwired constants
/* make a connection to the database */
*/
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
pghost = NULL; /* host name of the backend server */
pgport = NULL; /* port of the backend server */
/* check to see that the backend connection was successfully made */
pgoptions = NULL; /* special options to start up the backend
if (PQstatus(conn) == CONNECTION_BAD) {
* server */
fprintf(stderr,"Connection to database '%s' failed.\\n", dbName);
pgtty = NULL; /* debugging tty for the backend server */
fprintf(stderr,"%s",PQerrorMessage(conn));
exit_nicely(conn);
dbName = getenv("USER"); /* change this to the name of your test
}
* database */
/* start a transaction block */
/* make a connection to the database */
res = PQexec(conn,"BEGIN");
conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr,"BEGIN command failed\\n");
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database '%s' failed.\\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
/* start a transaction block */
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed\\n");
PQclear(res);
exit_nicely(conn);
}
/*
* should PQclear PGresult whenever it is no longer needed to avoid
* memory leaks
*/
PQclear(res);
PQclear(res);
exit_nicely(conn);
}
/*
/* should PQclear PGresult whenever it is no longer needed to avoid
* fetch instances from the pg_database, the system catalog of
memory leaks */
* databases
PQclear(res);
*/
res = PQexec(conn, "DECLARE mycursor BINARY CURSOR FOR select * from test1");
/* fetch instances from the pg_database, the system catalog of databases*/
if (PQresultStatus(res) != PGRES_COMMAND_OK)
res = PQexec(conn,"DECLARE mycursor BINARY CURSOR FOR select * from test1");
{
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "DECLARE CURSOR command failed\\n");
fprintf(stderr,"DECLARE CURSOR command failed\\n");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
PQclear(res);
exit_nicely(conn);
}
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);
exit_nicely(conn);
}
i_fnum = PQfnumber(res, "i");
d_fnum = PQfnumber(res, "d");
p_fnum = PQfnumber(res, "p");
for (i = 0; i < 3; i++)
{
printf("type[%d] = %d, size[%d] = %d\\n",
i, PQftype(res, i),
i, PQfsize(res, i));
}
for (i = 0; i < PQntuples(res); i++)
{
int *ival;
float *dval;
int plen;
POLYGON *pval;
/* we hard-wire this to the 3 fields we know about */
ival = (int *) PQgetvalue(res, i, i_fnum);
dval = (float *) PQgetvalue(res, i, d_fnum);
plen = PQgetlength(res, i, p_fnum);
/*
* plen doesn't include the length field so need to increment by
* VARHDSZ
*/
pval = (POLYGON *) malloc(plen + VARHDRSZ);
pval->size = plen;
memmove((char *) &pval->npts, PQgetvalue(res, i, p_fnum), plen);
printf("tuple %d: got\\n", i);
printf(" i = (%d bytes) %d,\\n",
PQgetlength(res, i, i_fnum), *ival);
printf(" d = (%d bytes) %f,\\n",
PQgetlength(res, i, d_fnum), *dval);
printf(" p = (%d bytes) %d points \\tboundbox = (hi=%f/%f, lo = %f,%f)\\n",
PQgetlength(res, i, d_fnum),
pval->npts,
pval->boundbox.xh,
pval->boundbox.yh,
pval->boundbox.xl,
pval->boundbox.yl);
}
PQclear(res);
PQclear(res);
exit_nicely(conn);
}
/* close the cursor */
res = PQexec(conn, "CLOSE mycursor");
i_fnum = PQfnumber(res,"i");
PQclear(res);
d_fnum = PQfnumber(res,"d");
p_fnum = PQfnumber(res,"p");
/* commit the transaction */
res = PQexec(conn, "COMMIT");
for (i=0;i<3;i++) {
PQclear(res);
printf("type[%d] = %d, size[%d] = %d\\n",
i, PQftype(res,i),
/* close the connection to the database and cleanup */
i, PQfsize(res,i));
PQfinish(conn);
}
for (i=0; i < PQntuples(res); i++) {
int *ival;
float *dval;
int plen;
POLYGON* pval;
/* we hard-wire this to the 3 fields we know about */
ival = (int*)PQgetvalue(res,i,i_fnum);
dval = (float*)PQgetvalue(res,i,d_fnum);
plen = PQgetlength(res,i,p_fnum);
/* plen doesn't include the length field so need to increment by VARHDSZ*/
pval = (POLYGON*) malloc(plen + VARHDRSZ);
pval->size = plen;
memmove((char*)&pval->npts, PQgetvalue(res,i,p_fnum), plen);
printf("tuple %d: got\\n", i);
printf(" i = (%d bytes) %d,\\n",
PQgetlength(res,i,i_fnum), *ival);
printf(" d = (%d bytes) %f,\\n",
PQgetlength(res,i,d_fnum), *dval);
printf(" p = (%d bytes) %d points \\tboundbox = (hi=%f/%f, lo = %f,%f)\\n",
PQgetlength(res,i,d_fnum),
pval->npts,
pval->boundbox.xh,
pval->boundbox.yh,
pval->boundbox.xl,
pval->boundbox.yl);
}
PQclear(res);
/* close the cursor */
res = PQexec(conn, "CLOSE mycursor");
PQclear(res);
/* commit the transaction */
res = PQexec(conn, "COMMIT");
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
}
}
.fi
.fi
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment