aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/perl5/examples/example.newstyle
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/perl5/examples/example.newstyle')
-rw-r--r--src/interfaces/perl5/examples/example.newstyle274
1 files changed, 274 insertions, 0 deletions
diff --git a/src/interfaces/perl5/examples/example.newstyle b/src/interfaces/perl5/examples/example.newstyle
new file mode 100644
index 00000000000..30538400333
--- /dev/null
+++ b/src/interfaces/perl5/examples/example.newstyle
@@ -0,0 +1,274 @@
+#!/usr/local/bin/perl
+
+# $Id: example.newstyle,v 1.1 2000/06/01 03:05:24 momjian Exp $
+
+######################### globals
+
+$| = 1;
+use Pg;
+
+$dbmain = 'template1';
+$dbname = 'pgperltest';
+$trace = '/tmp/pgtrace.out';
+$DEBUG = 0; # set this to 1 for traces
+
+######################### the following methods will be used
+
+# connectdb
+# conndefaults
+# db
+# user
+# port
+# status
+# errorMessage
+# trace
+# untrace
+# exec
+# consumeInput
+# getline
+# putline
+# endcopy
+# resultStatus
+# ntuples
+# nfields
+# fname
+# fnumber
+# ftype
+# fsize
+# cmdStatus
+# oidStatus
+# cmdTuples
+# getvalue
+# print
+# notifies
+# lo_import
+# lo_export
+# lo_unlink
+
+######################### the following methods will not be used
+
+# setdb
+# setdbLogin
+# reset
+# requestCancel
+# pass
+# host
+# tty
+# options
+# socket
+# backendPID
+# sendQuery
+# getResult
+# isBusy
+# getlineAsync
+# putnbytes
+# makeEmptyPGresult
+# fmod
+# 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
+
+$Option_ref = Pg::conndefaults();
+($key, $val);
+print "connection defaults:\n";
+while (($key, $val) = each %$Option_ref) {
+ printf " keyword = %-12.12s val = >%s<\n", $key, $val;
+}
+
+$conn = Pg::connectdb("dbname=$dbmain");
+die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status;
+print "connected to $dbmain\n";
+
+# do not complain when dropping $dbname
+$conn->exec("DROP DATABASE $dbname");
+
+$result = $conn->exec("CREATE DATABASE $dbname");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+print "created database $dbname\n";
+
+$conn = Pg::connectdb("dbname=$dbname");
+die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status;
+print "connected to $dbname\n";
+
+######################### debug, trace
+
+if ($DEBUG) {
+ open(TRACE, ">$trace") || die "can not open $trace: $!";
+ $conn->trace(TRACE);
+ print "enabled tracing into $trace\n";
+}
+
+######################### check PGconn
+
+$db = $conn->db;
+print " database: $db\n";
+
+$user = $conn->user;
+print " user: $user\n";
+
+$port = $conn->port;
+print " port: $port\n";
+
+######################### create and insert into table
+
+$result = $conn->exec("CREATE TABLE person (id int4, name char(16))");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+print "created table, status = ", $result->cmdStatus, "\n";
+
+for ($i = 1; $i <= 5; $i++) {
+ $result = $conn->exec("INSERT INTO person VALUES ($i, 'Edmund Mergl')");
+ die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+}
+print "insert into table, last oid = ", $result->oidStatus, "\n";
+
+######################### copy to stdout, getline
+
+$result = $conn->exec("COPY person TO STDOUT");
+die $conn->errorMessage unless PGRES_COPY_OUT eq $result->resultStatus;
+print "copy table to STDOUT:\n";
+
+$ret = 0;
+$i = 1;
+while (-1 != $ret) {
+ $ret = $conn->getline($string, 256);
+ last if $string eq "\\.";
+ print " ", $string, "\n";
+ $i ++;
+}
+
+die $conn->errorMessage unless 0 == $conn->endcopy;
+
+######################### delete and copy from stdin, putline
+
+$result = $conn->exec("BEGIN");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+
+$result = $conn->exec("DELETE FROM person");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+print "delete from table, command status = ", $result->cmdStatus, ", no. of tuples = ", $result->cmdTuples, "\n";
+
+$result = $conn->exec("COPY person FROM STDIN");
+die $conn->errorMessage unless PGRES_COPY_IN eq $result->resultStatus;
+print "copy table from STDIN: ";
+
+for ($i = 1; $i <= 5; $i++) {
+ # watch the tabs and do not forget the newlines
+ $conn->putline("$i Edmund Mergl\n");
+}
+$conn->putline("\\.\n");
+
+die $conn->errorMessage unless 0 == $conn->endcopy;
+
+$result = $conn->exec("END");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+print "ok\n";
+
+######################### select from person, getvalue
+
+$result = $conn->exec("SELECT * FROM person");
+die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus;
+print "select from table:\n";
+
+for ($k = 0; $k < $result->nfields; $k++) {
+ print " field = ", $k, "\tfname = ", $result->fname($k), "\tftype = ", $result->ftype($k), "\tfsize = ", $result->fsize($k), "\tfnumber = ", $result->fnumber($result->fname($k)), "\n";
+}
+
+while (@row = $result->fetchrow) {
+ print " ", join(" ", @row), "\n";
+}
+
+######################### notifies
+
+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");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+print "listen table: status = ", $result->cmdStatus, "\n";
+
+while (1) {
+ $conn->consumeInput;
+ ($table, $pid) = $conn->notifies;
+ last if $pid;
+}
+print "got notification: table = ", $table, " pid = ", $pid, "\n";
+
+######################### print
+
+$result = $conn->exec("SELECT * FROM person");
+die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus;
+print "select from table and print:\n";
+$result->print(STDOUT, 0, 0, 0, 0, 0, 0, " ", "", "", "");
+
+######################### lo_import, lo_export, lo_unlink
+
+$lobject_in = '/tmp/gaga.in';
+$lobject_out = '/tmp/gaga.out';
+
+$data = "testing large objects using lo_import and lo_export";
+open(FD, ">$lobject_in") or die "can not open $lobject_in";
+print(FD $data);
+close(FD);
+
+$result = $conn->exec("BEGIN");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+
+$lobjOid = $conn->lo_import("$lobject_in") or die $conn->errorMessage;
+print "importing file as large object, Oid = ", $lobjOid, "\n";
+
+die $conn->errorMessage unless 1 == $conn->lo_export($lobjOid, "$lobject_out");
+print "exporting large object as temporary file\n";
+
+$result = $conn->exec("END");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+
+print "comparing imported file with exported file: ";
+print "not " unless (-s "$lobject_in" == -s "$lobject_out");
+print "ok\n";
+
+die $conn->errorMessage if -1 == $conn->lo_unlink($lobjOid);
+unlink $lobject_in;
+unlink $lobject_out;
+print "unlink large object\n";
+
+######################### debug, untrace
+
+if ($DEBUG) {
+ close(TRACE) || die "bad TRACE: $!";
+ $conn->untrace;
+ print "tracing disabled\n";
+}
+
+######################### disconnect and drop test database
+
+$conn = Pg::connectdb("dbname=$dbmain");
+die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status;
+print "connected to $dbmain\n";
+
+$result = $conn->exec("DROP DATABASE $dbname");
+die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
+print "drop database\n";
+
+######################### EOF