aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/libpq++/examples/testlibpq2.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/libpq++/examples/testlibpq2.cc')
-rw-r--r--src/interfaces/libpq++/examples/testlibpq2.cc71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/interfaces/libpq++/examples/testlibpq2.cc b/src/interfaces/libpq++/examples/testlibpq2.cc
new file mode 100644
index 00000000000..8eafea00b7a
--- /dev/null
+++ b/src/interfaces/libpq++/examples/testlibpq2.cc
@@ -0,0 +1,71 @@
+/*
+ * testlibpq2.cc
+ * Test of the asynchronous notification interface
+ *
+ populate a database with the following:
+
+CREATE TABLE TBL1 (i int4);
+
+CREATE TABLE TBL2 (i int4);
+
+CREATE RULE r1 AS ON INSERT TO TBL1 DO [INSERT INTO TBL2 values (new.i); NOTIFY TBL2];
+
+ * Then start up this program
+ * After the program has begun, do
+
+INSERT INTO TBL1 values (10);
+
+ *
+ *
+ */
+#include <stdio.h>
+#include "libpq++.H"
+
+main()
+{
+ char* dbName;
+ int nFields;
+ int i,j;
+
+ /* begin, by creating the parameter environtment for a backend
+ connection. When no parameters are given then the system will
+ try to use reasonable defaults by looking up environment variables
+ or, failing that, using hardwired constants */
+ PGenv env;
+ PGdatabase* data;
+ PGnotify* notify;
+
+ dbName = getenv("USER"); /* change this to the name of your test database */
+
+ /* make a connection to the database */
+ data = new PGdatabase(&env, dbName);
+
+ /* check to see that the backend connection was successfully made */
+ if (data->status() == CONNECTION_BAD) {
+ fprintf(stderr,"Connection to database '%s' failed.\n", dbName);
+ fprintf(stderr,"%s",data->errormessage());
+ delete data;
+ exit(1);
+ }
+
+ if (data->exec("LISTEN TBL2") != PGRES_COMMAND_OK) {
+ fprintf(stderr,"LISTEN command failed\n");
+ delete data;
+ exit(1);
+ }
+
+ while (1) {
+ /* check for asynchronous returns */
+ notify = data->notifies();
+ if (notify) {
+ fprintf(stderr,
+ "ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
+ notify->relname, notify->be_pid);
+ free(notify);
+ break;
+ }
+ }
+
+ /* close the connection to the database and cleanup */
+ delete data;
+}