mirror of https://github.com/postgres/postgres
parent
b02086b303
commit
9e74edda05
@ -1,47 +0,0 @@ |
|||||||
#!/usr/local/bin/perl |
|
||||||
|
|
||||||
# demo script, has been tested with: |
|
||||||
# - Postgres-6.1 |
|
||||||
# - apache_1.2 |
|
||||||
# - mod_perl-1.0 |
|
||||||
# - perl5.004 |
|
||||||
|
|
||||||
use CGI; |
|
||||||
use Pg; |
|
||||||
use strict; |
|
||||||
|
|
||||||
my $query = new CGI; |
|
||||||
|
|
||||||
print $query->header, |
|
||||||
$query->start_html(-title=>'A Simple Example'), |
|
||||||
$query->startform, |
|
||||||
"<CENTER><H3>Testing Module Pg</H3></CENTER>", |
|
||||||
"Enter the database name: ", |
|
||||||
$query->textfield(-name=>'dbname'), |
|
||||||
"<P>", |
|
||||||
"Enter the select command: ", |
|
||||||
$query->textfield(-name=>'cmd', -size=>40), |
|
||||||
"<P>", |
|
||||||
$query->submit(-value=>'Submit'), |
|
||||||
$query->endform; |
|
||||||
|
|
||||||
if ($query->param) { |
|
||||||
|
|
||||||
my $dbname = $query->param('dbname'); |
|
||||||
my $conn = Pg::connectdb("dbname = $dbname"); |
|
||||||
my $cmd = $query->param('cmd'); |
|
||||||
my $result = $conn->exec($cmd); |
|
||||||
my $i, $j; |
|
||||||
print "<P><CENTER><TABLE CELLPADDING=4 CELLSPACING=2 BORDER=1>\n"; |
|
||||||
for ($i=0; $i < $result->ntuples; $i++) { |
|
||||||
print "<TR>\n"; |
|
||||||
for ($j=0; $j < $result->nfields; $j++) { |
|
||||||
print "<TD ALIGN=CENTER>", $result->getvalue($i, $j), "\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
print "</TABLE></CENTER><P>\n"; |
|
||||||
} |
|
||||||
|
|
||||||
print $query->end_html; |
|
||||||
|
|
@ -1,11 +1,11 @@ |
|||||||
ApachePg.pl |
|
||||||
Changes |
Changes |
||||||
MANIFEST |
MANIFEST |
||||||
Makefile.PL |
Makefile.PL |
||||||
Pg.pm |
Pg.pm |
||||||
Pg.xs |
Pg.xs |
||||||
README |
README |
||||||
|
eg/ApachePg.pl |
||||||
|
eg/example.newstyle |
||||||
|
eg/example.oldstyle |
||||||
test.pl |
test.pl |
||||||
test.pl.newstyle |
|
||||||
test.pl.oldstyle |
|
||||||
typemap |
typemap |
||||||
|
@ -1,320 +0,0 @@ |
|||||||
#------------------------------------------------------- |
|
||||||
# |
|
||||||
# $Id: test.pl.newstyle,v 1.2 1997/06/02 19:42:11 mergl Exp $ |
|
||||||
# |
|
||||||
# Copyright (c) 1997 Edmund Mergl |
|
||||||
# |
|
||||||
#------------------------------------------------------- |
|
||||||
|
|
||||||
# Before `make install' is performed this script should be runnable with |
|
||||||
# `make test'. After `make install' it should work as `perl test.pl' |
|
||||||
|
|
||||||
######################### We start with some black magic to print on failure. |
|
||||||
|
|
||||||
BEGIN { $| = 1; print "1..60\n"; } |
|
||||||
END {print "not ok 1\n" unless $loaded;} |
|
||||||
use Pg; |
|
||||||
$loaded = 1; |
|
||||||
print "ok 1\n"; |
|
||||||
|
|
||||||
######################### End of black magic. |
|
||||||
|
|
||||||
$dbmain = 'template1'; |
|
||||||
$dbname = 'pgperltest'; |
|
||||||
$trace = '/tmp/pgtrace.out'; |
|
||||||
$cnt = 2; |
|
||||||
$DEBUG = 0; # set this to 1 for traces |
|
||||||
|
|
||||||
$| = 1; |
|
||||||
|
|
||||||
######################### the following methods will be tested |
|
||||||
|
|
||||||
# connectdb |
|
||||||
# db |
|
||||||
# user |
|
||||||
# host |
|
||||||
# port |
|
||||||
# finish |
|
||||||
# status |
|
||||||
# errorMessage |
|
||||||
# trace |
|
||||||
# untrace |
|
||||||
# exec |
|
||||||
# getline |
|
||||||
# endcopy |
|
||||||
# putline |
|
||||||
# resultStatus |
|
||||||
# ntuples |
|
||||||
# nfields |
|
||||||
# fname |
|
||||||
# fnumber |
|
||||||
# ftype |
|
||||||
# fsize |
|
||||||
# cmdStatus |
|
||||||
# oidStatus |
|
||||||
# getvalue |
|
||||||
# print |
|
||||||
# notifies |
|
||||||
# lo_import |
|
||||||
# lo_export |
|
||||||
# lo_unlink |
|
||||||
|
|
||||||
######################### the following methods will not be tested |
|
||||||
|
|
||||||
# setdb |
|
||||||
# conndefaults |
|
||||||
# reset |
|
||||||
# options |
|
||||||
# tty |
|
||||||
# getlength |
|
||||||
# getisnull |
|
||||||
# displayTuples |
|
||||||
# printTuples |
|
||||||
# lo_open |
|
||||||
# lo_close |
|
||||||
# lo_read |
|
||||||
# lo_write |
|
||||||
# lo_creat |
|
||||||
# lo_seek |
|
||||||
# lo_tell |
|
||||||
|
|
||||||
######################### handles error condition |
|
||||||
|
|
||||||
$SIG{PIPE} = sub { print "broken pipe\n" }; |
|
||||||
|
|
||||||
######################### create and connect to test database |
|
||||||
# 2-4 |
|
||||||
|
|
||||||
$conn = Pg::connectdb("dbname = $dbmain"); |
|
||||||
cmp_eq(PGRES_CONNECTION_OK, $conn->status); |
|
||||||
|
|
||||||
# might fail if $dbname doesn't exist => don't check resultStatus |
|
||||||
$result = $conn->exec("DROP DATABASE $dbname"); |
|
||||||
|
|
||||||
$result = $conn->exec("CREATE DATABASE $dbname"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
|
|
||||||
$conn = Pg::connectdb("dbname = $dbname"); |
|
||||||
cmp_eq(PGRES_CONNECTION_OK, $conn->status); |
|
||||||
|
|
||||||
######################### debug, PQtrace |
|
||||||
|
|
||||||
if ($DEBUG) { |
|
||||||
open(TRACE, ">$trace") || die "can not open $trace: $!"; |
|
||||||
$conn->trace(TRACE); |
|
||||||
} |
|
||||||
|
|
||||||
######################### check PGconn |
|
||||||
# 5-8 |
|
||||||
|
|
||||||
$db = $conn->db; |
|
||||||
cmp_eq($dbname, $db); |
|
||||||
|
|
||||||
$user = $conn->user; |
|
||||||
cmp_ne("", $user); |
|
||||||
|
|
||||||
$host = $conn->host; |
|
||||||
cmp_ne("", $host); |
|
||||||
|
|
||||||
$port = $conn->port; |
|
||||||
cmp_ne("", $port); |
|
||||||
|
|
||||||
######################### create and insert into table |
|
||||||
# 9-20 |
|
||||||
|
|
||||||
$result = $conn->exec("CREATE TABLE person (id int4, name char16)"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
cmp_eq("CREATE", $result->cmdStatus); |
|
||||||
|
|
||||||
for ($i = 1; $i <= 5; $i++) { |
|
||||||
$result = $conn->exec("INSERT INTO person VALUES ($i, 'Edmund Mergl')"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
cmp_ne(0, $result->oidStatus); |
|
||||||
} |
|
||||||
|
|
||||||
######################### copy to stdout, PQgetline |
|
||||||
# 21-27 |
|
||||||
|
|
||||||
$result = $conn->exec("COPY person TO STDOUT"); |
|
||||||
cmp_eq(PGRES_COPY_OUT, $result->resultStatus); |
|
||||||
|
|
||||||
$i = 1; |
|
||||||
while (-1 != $ret) { |
|
||||||
$ret = $conn->getline($string, 256); |
|
||||||
last if $string eq "\\."; |
|
||||||
cmp_eq("$i Edmund Mergl", $string); |
|
||||||
$i ++; |
|
||||||
} |
|
||||||
|
|
||||||
cmp_eq(0, $conn->endcopy); |
|
||||||
|
|
||||||
######################### delete and copy from stdin, PQputline |
|
||||||
# 28-33 |
|
||||||
|
|
||||||
$result = $conn->exec("BEGIN"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
|
|
||||||
$result = $conn->exec("DELETE FROM person"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
cmp_eq("DELETE", $result->cmdStatus); |
|
||||||
|
|
||||||
$result = $conn->exec("COPY person FROM STDIN"); |
|
||||||
cmp_eq(PGRES_COPY_IN, $result->resultStatus); |
|
||||||
|
|
||||||
for ($i = 1; $i <= 5; $i++) { |
|
||||||
# watch the tabs and do not forget the newlines |
|
||||||
$conn->putline("$i Edmund Mergl\n"); |
|
||||||
} |
|
||||||
$conn->putline("\\.\n"); |
|
||||||
|
|
||||||
cmp_eq(0, $conn->endcopy); |
|
||||||
|
|
||||||
$result = $conn->exec("END"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
|
|
||||||
######################### select from person, PQgetvalue |
|
||||||
# 34-47 |
|
||||||
|
|
||||||
$result = $conn->exec("SELECT * FROM person"); |
|
||||||
cmp_eq(PGRES_TUPLES_OK, $result->resultStatus); |
|
||||||
|
|
||||||
for ($k = 0; $k < $result->nfields; $k++) { |
|
||||||
$fname = $result->fname($k); |
|
||||||
$ftype = $result->ftype($k); |
|
||||||
$fsize = $result->fsize($k); |
|
||||||
if (0 == $k) { |
|
||||||
cmp_eq("id", $fname); |
|
||||||
cmp_eq(23, $ftype); |
|
||||||
cmp_eq(4, $fsize); |
|
||||||
} else { |
|
||||||
cmp_eq("name", $fname); |
|
||||||
cmp_eq(20, $ftype); |
|
||||||
cmp_eq(16, $fsize); |
|
||||||
} |
|
||||||
$fnumber = $result->fnumber($fname); |
|
||||||
cmp_eq($k, $fnumber); |
|
||||||
} |
|
||||||
|
|
||||||
for ($k = 0; $k < $result->ntuples; $k++) { |
|
||||||
$string = ""; |
|
||||||
for ($l = 0; $l < $result->nfields; $l++) { |
|
||||||
$string .= $result->getvalue($k, $l) . " "; |
|
||||||
} |
|
||||||
$i = $k + 1; |
|
||||||
cmp_eq("$i Edmund Mergl ", $string); |
|
||||||
} |
|
||||||
|
|
||||||
######################### PQnotifies |
|
||||||
# 48-50 |
|
||||||
|
|
||||||
if (! defined($pid = fork)) { |
|
||||||
die "can not fork: $!"; |
|
||||||
} elsif (! $pid) { |
|
||||||
# i'm the child |
|
||||||
sleep 2; |
|
||||||
bless $conn; |
|
||||||
$conn = Pg::connectdb("dbname = $dbname"); |
|
||||||
$result = $conn->exec("NOTIFY person"); |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
$result = $conn->exec("LISTEN person"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
cmp_eq("LISTEN", $result->cmdStatus); |
|
||||||
|
|
||||||
while (1) { |
|
||||||
$result = $conn->exec(" "); |
|
||||||
($table, $pid) = $conn->notifies; |
|
||||||
last if $pid; |
|
||||||
} |
|
||||||
|
|
||||||
cmp_eq("person", $table); |
|
||||||
|
|
||||||
######################### PQprint |
|
||||||
# 51-52 |
|
||||||
|
|
||||||
$result = $conn->exec("SELECT name FROM person WHERE id = 2"); |
|
||||||
cmp_eq(PGRES_TUPLES_OK, $result->resultStatus); |
|
||||||
open(PRINT, "| read IN; read IN; if [ \"\$IN\" = \"myName Edmund Mergl\" ]; then echo \"ok $cnt\"; else echo \"not ok $cnt\"; fi ") || die "can not fork: $|"; |
|
||||||
$cnt ++; |
|
||||||
$result->print(PRINT, 0, 0, 0, 0, 1, 0, " ", "", "", "myName"); |
|
||||||
close(PRINT) || die "bad PRINT: $!"; |
|
||||||
|
|
||||||
######################### PQlo_import, PQlo_export, PQlo_unlink |
|
||||||
# 53-58 |
|
||||||
|
|
||||||
$filename = 'typemap'; |
|
||||||
$cwd = `pwd`; |
|
||||||
chop $cwd; |
|
||||||
|
|
||||||
$result = $conn->exec("BEGIN"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
|
|
||||||
$lobjOid = $conn->lo_import("$cwd/$filename"); |
|
||||||
cmp_ne(0, $lobjOid); |
|
||||||
|
|
||||||
cmp_ne(-1, $conn->lo_export($lobjOid, "/tmp/$filename")); |
|
||||||
|
|
||||||
cmp_eq(-s "$cwd/$filename", -s "/tmp/$filename"); |
|
||||||
|
|
||||||
$result = $conn->exec("END"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
|
|
||||||
cmp_ne(-1, $conn->lo_unlink($lobjOid)); |
|
||||||
unlink "/tmp/$filename"; |
|
||||||
|
|
||||||
######################### debug, PQuntrace |
|
||||||
|
|
||||||
if ($DEBUG) { |
|
||||||
close(TRACE) || die "bad TRACE: $!"; |
|
||||||
$conn->untrace; |
|
||||||
} |
|
||||||
|
|
||||||
######################### disconnect and drop test database |
|
||||||
# 59-60 |
|
||||||
|
|
||||||
$conn = Pg::connectdb("dbname = $dbmain"); |
|
||||||
cmp_eq(PGRES_CONNECTION_OK, $conn->status); |
|
||||||
|
|
||||||
$result = $conn->exec("DROP DATABASE $dbname"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, $result->resultStatus); |
|
||||||
|
|
||||||
######################### hopefully |
|
||||||
|
|
||||||
print "all tests passed.\n" if 61 == $cnt; |
|
||||||
|
|
||||||
######################### utility functions |
|
||||||
|
|
||||||
sub cmp_eq { |
|
||||||
|
|
||||||
my $cmp = shift; |
|
||||||
my $ret = shift; |
|
||||||
my $msg; |
|
||||||
|
|
||||||
if ("$cmp" eq "$ret") { |
|
||||||
print "ok $cnt\n"; |
|
||||||
} else { |
|
||||||
$msg = $conn->errorMessage; |
|
||||||
print "not ok $cnt: $cmp, $ret\n$msg\n"; |
|
||||||
exit; |
|
||||||
} |
|
||||||
$cnt++; |
|
||||||
} |
|
||||||
|
|
||||||
sub cmp_ne { |
|
||||||
|
|
||||||
my $cmp = shift; |
|
||||||
my $ret = shift; |
|
||||||
my $msg; |
|
||||||
|
|
||||||
if ("$cmp" ne "$ret") { |
|
||||||
print "ok $cnt\n"; |
|
||||||
} else { |
|
||||||
$msg = $conn->errorMessage; |
|
||||||
print "not ok $cnt: $cmp, $ret\n$msg\n"; |
|
||||||
exit; |
|
||||||
} |
|
||||||
$cnt++; |
|
||||||
} |
|
||||||
|
|
||||||
######################### EOF |
|
@ -1,344 +0,0 @@ |
|||||||
#------------------------------------------------------- |
|
||||||
# |
|
||||||
# $Id: test.pl.oldstyle,v 1.2 1997/06/02 19:42:13 mergl Exp $ |
|
||||||
# |
|
||||||
# Copyright (c) 1997 Edmund Mergl |
|
||||||
# |
|
||||||
#------------------------------------------------------- |
|
||||||
|
|
||||||
# Before `make install' is performed this script should be runnable with |
|
||||||
# `make test'. After `make install' it should work as `perl test.pl' |
|
||||||
|
|
||||||
######################### We start with some black magic to print on failure. |
|
||||||
|
|
||||||
BEGIN { $| = 1; print "1..60\n"; } |
|
||||||
END {print "not ok 1\n" unless $loaded;} |
|
||||||
use Pg; |
|
||||||
$loaded = 1; |
|
||||||
print "ok 1\n"; |
|
||||||
|
|
||||||
######################### End of black magic. |
|
||||||
|
|
||||||
$dbmain = 'template1'; |
|
||||||
$dbname = 'pgperltest'; |
|
||||||
$trace = '/tmp/pgtrace.out'; |
|
||||||
$cnt = 2; |
|
||||||
$DEBUG = 0; # set this to 1 for traces |
|
||||||
|
|
||||||
$| = 1; |
|
||||||
|
|
||||||
######################### the following functions will be tested |
|
||||||
|
|
||||||
# PQsetdb() |
|
||||||
# PQdb() |
|
||||||
# PQhost() |
|
||||||
# PQport() |
|
||||||
# PQfinish() |
|
||||||
# PQstatus() |
|
||||||
# PQerrorMessage() |
|
||||||
# PQtrace() |
|
||||||
# PQuntrace() |
|
||||||
# PQexec() |
|
||||||
# PQgetline() |
|
||||||
# PQendcopy() |
|
||||||
# PQputline() |
|
||||||
# PQresultStatus() |
|
||||||
# PQntuples() |
|
||||||
# PQnfields() |
|
||||||
# PQfname() |
|
||||||
# PQfnumber() |
|
||||||
# PQftype() |
|
||||||
# PQfsize() |
|
||||||
# PQcmdStatus() |
|
||||||
# PQoidStatus() |
|
||||||
# PQgetvalue() |
|
||||||
# PQclear() |
|
||||||
# PQprint() |
|
||||||
# PQnotifies() |
|
||||||
# PQlo_import() |
|
||||||
# PQlo_export() |
|
||||||
# PQlo_unlink() |
|
||||||
|
|
||||||
######################### the following functions will not be tested |
|
||||||
|
|
||||||
# PQconnectdb() |
|
||||||
# PQconndefaults() |
|
||||||
# PQreset() |
|
||||||
# PQoptions() |
|
||||||
# PQtty() |
|
||||||
# PQgetlength() |
|
||||||
# PQgetisnull() |
|
||||||
# PQdisplayTuples() |
|
||||||
# PQprintTuples() |
|
||||||
# PQlo_open() |
|
||||||
# PQlo_close() |
|
||||||
# PQlo_read() |
|
||||||
# PQlo_write() |
|
||||||
# PQlo_creat() |
|
||||||
# PQlo_lseek() |
|
||||||
# PQlo_tell() |
|
||||||
|
|
||||||
######################### handles error condition |
|
||||||
|
|
||||||
$SIG{PIPE} = sub { print "broken pipe\n" }; |
|
||||||
|
|
||||||
######################### create and connect to test database |
|
||||||
# 2-4 |
|
||||||
|
|
||||||
$conn = PQsetdb('', '', '', '', $dbmain); |
|
||||||
cmp_eq(PGRES_CONNECTION_OK, PQstatus($conn)); |
|
||||||
|
|
||||||
# might fail if $dbname doesn't exist => don't check resultStatus |
|
||||||
$result = PQexec($conn, "DROP DATABASE $dbname"); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
$result = PQexec($conn, "CREATE DATABASE $dbname"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
PQfinish($conn); |
|
||||||
|
|
||||||
$conn = PQsetdb('', '', '', '', $dbname); |
|
||||||
cmp_eq(PGRES_CONNECTION_OK, PQstatus($conn)); |
|
||||||
|
|
||||||
######################### debug, PQtrace |
|
||||||
|
|
||||||
if ($DEBUG) { |
|
||||||
open(TRACE, ">$trace") || die "can not open $trace: $!"; |
|
||||||
PQtrace($conn, TRACE); |
|
||||||
} |
|
||||||
|
|
||||||
######################### check PGconn |
|
||||||
# 5-8 |
|
||||||
|
|
||||||
$db = PQdb($conn); |
|
||||||
cmp_eq($dbname, $db); |
|
||||||
|
|
||||||
$user = PQuser($conn); |
|
||||||
cmp_ne("", $user); |
|
||||||
|
|
||||||
$host = PQhost($conn); |
|
||||||
cmp_ne("", $host); |
|
||||||
|
|
||||||
$port = PQport($conn); |
|
||||||
cmp_ne("", $port); |
|
||||||
|
|
||||||
######################### create and insert into table |
|
||||||
# 9-20 |
|
||||||
|
|
||||||
$result = PQexec($conn, "CREATE TABLE person (id int4, name char16)"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
cmp_eq("CREATE", PQcmdStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
for ($i = 1; $i <= 5; $i++) { |
|
||||||
$result = PQexec($conn, "INSERT INTO person VALUES ($i, 'Edmund Mergl')"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
cmp_ne(0, PQoidStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
} |
|
||||||
|
|
||||||
######################### copy to stdout, PQgetline |
|
||||||
# 21-27 |
|
||||||
|
|
||||||
$result = PQexec($conn, "COPY person TO STDOUT"); |
|
||||||
cmp_eq(PGRES_COPY_OUT, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
$i = 1; |
|
||||||
while (-1 != $ret) { |
|
||||||
$ret = PQgetline($conn, $string, 256); |
|
||||||
last if $string eq "\\."; |
|
||||||
cmp_eq("$i Edmund Mergl", $string); |
|
||||||
$i++; |
|
||||||
} |
|
||||||
|
|
||||||
cmp_eq(0, PQendcopy($conn)); |
|
||||||
|
|
||||||
######################### delete and copy from stdin, PQputline |
|
||||||
# 28-33 |
|
||||||
|
|
||||||
$result = PQexec($conn, "BEGIN"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
$result = PQexec($conn, "DELETE FROM person"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
cmp_eq("DELETE", PQcmdStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
$result = PQexec($conn, "COPY person FROM STDIN"); |
|
||||||
cmp_eq(PGRES_COPY_IN, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
for ($i = 1; $i <= 5; $i++) { |
|
||||||
# watch the tabs and do not forget the newlines |
|
||||||
PQputline($conn, "$i Edmund Mergl\n"); |
|
||||||
} |
|
||||||
PQputline($conn, "\\.\n"); |
|
||||||
|
|
||||||
cmp_eq(0, PQendcopy($conn)); |
|
||||||
|
|
||||||
$result = PQexec($conn, "END"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
######################### select from person, PQgetvalue |
|
||||||
# 34-47 |
|
||||||
|
|
||||||
$result = PQexec($conn, "SELECT * FROM person"); |
|
||||||
cmp_eq(PGRES_TUPLES_OK, PQresultStatus($result)); |
|
||||||
|
|
||||||
for ($k = 0; $k < PQnfields($result); $k++) { |
|
||||||
$fname = PQfname($result, $k); |
|
||||||
$ftype = PQftype($result, $k); |
|
||||||
$fsize = PQfsize($result, $k); |
|
||||||
if (0 == $k) { |
|
||||||
cmp_eq("id", $fname); |
|
||||||
cmp_eq(23, $ftype); |
|
||||||
cmp_eq(4, $fsize); |
|
||||||
} else { |
|
||||||
cmp_eq("name", $fname); |
|
||||||
cmp_eq(20, $ftype); |
|
||||||
cmp_eq(16, $fsize); |
|
||||||
} |
|
||||||
$fnumber = PQfnumber($result, $fname); |
|
||||||
cmp_eq($k, $fnumber); |
|
||||||
} |
|
||||||
|
|
||||||
for ($k = 0; $k < PQntuples($result); $k++) { |
|
||||||
$string = ""; |
|
||||||
for ($l = 0; $l < PQnfields($result); $l++) { |
|
||||||
$string .= PQgetvalue($result, $k, $l) . " "; |
|
||||||
} |
|
||||||
$i = $k + 1; |
|
||||||
cmp_eq("$i Edmund Mergl ", $string); |
|
||||||
} |
|
||||||
|
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
######################### PQnotifies |
|
||||||
# 48-50 |
|
||||||
|
|
||||||
if (! defined($pid = fork)) { |
|
||||||
die "can not fork: $!"; |
|
||||||
} elsif (! $pid) { |
|
||||||
# i'm the child |
|
||||||
sleep 2; |
|
||||||
$conn = PQsetdb('', '', '', '', $dbname); |
|
||||||
$result = PQexec($conn, "NOTIFY person"); |
|
||||||
PQclear($result); |
|
||||||
PQfinish($conn); |
|
||||||
exit; |
|
||||||
} |
|
||||||
|
|
||||||
$result = PQexec($conn, "LISTEN person"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
cmp_eq("LISTEN", PQcmdStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
while (1) { |
|
||||||
$result = PQexec($conn, " "); |
|
||||||
($table, $pid) = PQnotifies($conn); |
|
||||||
PQclear($result); |
|
||||||
last if $pid; |
|
||||||
} |
|
||||||
|
|
||||||
cmp_eq("person", $table); |
|
||||||
|
|
||||||
######################### PQprint |
|
||||||
# 51-52 |
|
||||||
|
|
||||||
$result = PQexec($conn, "SELECT name FROM person WHERE id = 2"); |
|
||||||
cmp_eq(PGRES_TUPLES_OK, PQresultStatus($result)); |
|
||||||
open(PRINT, "| read IN; read IN; if [ \"\$IN\" = \"myName Edmund Mergl\" ]; then echo \"ok $cnt\"; else echo \"not ok $cnt\"; fi ") || die "can not fork: $|"; |
|
||||||
$cnt ++; |
|
||||||
PQprint(PRINT, $result, 0, 0, 0, 0, 1, 0, " ", "", "", "myName"); |
|
||||||
PQclear($result); |
|
||||||
close(PRINT) || die "bad PRINT: $!"; |
|
||||||
|
|
||||||
######################### PQlo_import, PQlo_export, PQlo_unlink |
|
||||||
# 53-59 |
|
||||||
|
|
||||||
$filename = 'typemap'; |
|
||||||
$cwd = `pwd`; |
|
||||||
chop $cwd; |
|
||||||
|
|
||||||
$result = PQexec($conn, "BEGIN"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
$lobjOid = PQlo_import($conn, "$cwd/$filename"); |
|
||||||
cmp_ne( 0, $lobjOid); |
|
||||||
|
|
||||||
cmp_ne(-1, PQlo_export($conn, $lobjOid, "/tmp/$filename")); |
|
||||||
|
|
||||||
cmp_eq(-s "$cwd/$filename", -s "/tmp/$filename"); |
|
||||||
|
|
||||||
$result = PQexec($conn, "END"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
cmp_ne(-1, PQlo_unlink($conn, $lobjOid)); |
|
||||||
unlink "/tmp/$filename"; |
|
||||||
|
|
||||||
######################### debug, PQuntrace |
|
||||||
|
|
||||||
if ($DEBUG) { |
|
||||||
close(TRACE) || die "bad TRACE: $!"; |
|
||||||
PQuntrace($conn); |
|
||||||
} |
|
||||||
|
|
||||||
######################### disconnect and drop test database |
|
||||||
# 59-60 |
|
||||||
|
|
||||||
PQfinish($conn); |
|
||||||
|
|
||||||
$conn = PQsetdb('', '', '', '', $dbmain); |
|
||||||
cmp_eq(PGRES_CONNECTION_OK, PQstatus($conn)); |
|
||||||
|
|
||||||
$result = PQexec($conn, "DROP DATABASE $dbname"); |
|
||||||
cmp_eq(PGRES_COMMAND_OK, PQresultStatus($result)); |
|
||||||
PQclear($result); |
|
||||||
|
|
||||||
PQfinish($conn); |
|
||||||
|
|
||||||
######################### hopefully |
|
||||||
|
|
||||||
print "all tests passed.\n" if 61 == $cnt; |
|
||||||
|
|
||||||
######################### utility functions |
|
||||||
|
|
||||||
sub cmp_eq { |
|
||||||
|
|
||||||
my $cmp = shift; |
|
||||||
my $ret = shift; |
|
||||||
my $msg; |
|
||||||
|
|
||||||
if ("$cmp" eq "$ret") { |
|
||||||
print "ok $cnt\n"; |
|
||||||
} else { |
|
||||||
$msg = PQerrorMessage($conn); |
|
||||||
print "not ok $cnt: $cmp, $ret\n$msg\n"; |
|
||||||
exit; |
|
||||||
} |
|
||||||
$cnt++; |
|
||||||
} |
|
||||||
|
|
||||||
sub cmp_ne { |
|
||||||
|
|
||||||
my $cmp = shift; |
|
||||||
my $ret = shift; |
|
||||||
my $msg; |
|
||||||
|
|
||||||
if ("$cmp" ne "$ret") { |
|
||||||
print "ok $cnt\n"; |
|
||||||
} else { |
|
||||||
$msg = PQerrorMessage($conn); |
|
||||||
print "not ok $cnt: $cmp, $ret\n$msg\n"; |
|
||||||
exit; |
|
||||||
} |
|
||||||
$cnt++; |
|
||||||
} |
|
||||||
|
|
||||||
######################### EOF |
|
Loading…
Reference in new issue