[PyGreSQL] [CVS] Change to pygresql: pg.py, pgmodule.c

Christoph Zwerschke cito at druid.net
Tue Dec 2 17:39:56 EST 2008


Update of /usr/cvs/Public/pygresql/module
In directory druid.net:/tmp/cvs-serv21387/module

Modified Files:
	pg.py pgmodule.c 
Log Message:
Added methods for determining the protocol and server version.
To see the diffs for this commit:
   http://www.druid.net/pygresql/viewcvs.cgi/cvs/pygresql/module/pg.py.diff?r1=1.68&r2=1.69

Index: pg.py
===================================================================
RCS file: /usr/cvs/Public/pygresql/module/pg.py,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -r1.68 -r1.69
--- pg.py	2 Dec 2008 16:50:54 -0000	1.68
+++ pg.py	2 Dec 2008 22:39:56 -0000	1.69
@@ -5,7 +5,7 @@
 # Written by D'Arcy J.M. Cain
 # Improved by Christoph Zwerschke
 #
-# $Id: pg.py,v 1.68 2008/12/02 16:50:54 darcy Exp $
+# $Id: pg.py,v 1.69 2008/12/02 22:39:56 cito Exp $
 #
 
 """PyGreSQL classic interface.
@@ -249,6 +249,22 @@
     # so we define unescape_bytea as a method as well
     unescape_bytea = staticmethod(unescape_bytea)
 
+    def server_version(self):
+        """Return an integer representing the backend version."""
+        try:
+            return self._server_version
+        except AttributeError:
+            self._server_version = self.db.server_version()
+            return self._server_version
+
+    def protocol_version(self):
+        """Interrogate the frontend/backend protocol being used."""
+        try:
+            return self._protocol_version
+        except AttributeError:
+            self._protocol_version = self.db.protocol_version()
+            return self._protocol_version
+
     def close(self):
         """Close the database connection."""
         # Wraps shared library function so we can track state.
@@ -259,6 +275,16 @@
             else:
                 raise InternalError('Connection already closed')
 
+    def reset(self):
+        """Reset connection with current parameters.
+
+        All derived queries and large objects derived from this connection
+        will not be usable after this call.
+
+        """
+        self.db.reset()
+        delattr(self, '_protocol_version')
+
     def reopen(self):
         """Reopen connection to the database.
 
@@ -272,6 +298,8 @@
             if self.db:
                 self.db.close()
             self.db = db
+            delattr(self, '_server_version')
+            delattr(self, '_protocol_version')
 
     def query(self, qstr):
         """Executes a SQL command string.

   http://www.druid.net/pygresql/viewcvs.cgi/cvs/pygresql/module/pgmodule.c.diff?r1=1.88&r2=1.89

Index: pgmodule.c
===================================================================
RCS file: /usr/cvs/Public/pygresql/module/pgmodule.c,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -r1.88 -r1.89
--- pgmodule.c	23 Nov 2008 14:07:35 -0000	1.88
+++ pgmodule.c	2 Dec 2008 22:39:56 -0000	1.89
@@ -1,5 +1,5 @@
 /*
- * $Id: pgmodule.c,v 1.88 2008/11/23 14:07:35 cito Exp $
+ * $Id: pgmodule.c,v 1.89 2008/12/02 22:39:56 cito Exp $
  * PyGres, version 2.2 A Python interface for PostgreSQL database. Written by
  * D'Arcy J.M. Cain, (darcy at druid.net).  Based heavily on code written by
  * Pascal Andre, andre at chimay.via.ecp.fr. Copyright (c) 1995, Pascal Andre
@@ -98,8 +98,16 @@
 #define DEFAULT_VARS 1			/* enables default variables use */
 #endif
 
+#ifndef PG_VERSION_NUM
+#ifdef PQnoPasswordSupplied
+#define PG_VERSION_NUM 80000
+#else
+#define PG_VERSION_NUM 70400
+#endif
+#endif
+
 /* Before 8.0, PQsetdbLogin was not thread-safe with kerberos. */
-#if defined(PQnoPasswordSupplied) || !(defined(KRB4) || defined(KRB5))
+#if PG_VERSION_NUM >= 80000 || !(defined(KRB4) || defined(KRB5))
 #define PQsetdbLoginIsThreadSafe 1
 #endif
 
@@ -1775,6 +1783,58 @@
 #endif
 }
 
+/* get protocol version */
+static char pg_protocol_version__doc__[] =
+"protocol_version() -- interrogate the frontend/backend protocol being used.";
+
+static PyObject *
+pg_protocol_version(pgobject * self, PyObject * args)
+{
+	if (!self->cnx)
+	{
+		PyErr_SetString(PyExc_TypeError, "Connection is not valid.");
+		return NULL;
+	}
+
+	/* checks args */
+	if (!PyArg_ParseTuple(args, ""))
+	{
+		PyErr_SetString(PyExc_TypeError,
+			"method server_version() takes no parameters.");
+		return NULL;
+	}
+
+	return PyInt_FromLong(PQprotocolVersion(self->cnx));
+}
+
+/* get backend version */
+static char pg_server_version__doc__[] =
+"server_version() -- return an integer representing the backend version.";
+
+static PyObject *
+pg_server_version(pgobject * self, PyObject * args)
+{
+	if (!self->cnx)
+	{
+		PyErr_SetString(PyExc_TypeError, "Connection is not valid.");
+		return NULL;
+	}
+
+	/* checks args */
+	if (!PyArg_ParseTuple(args, ""))
+	{
+		PyErr_SetString(PyExc_TypeError,
+			"method server_version() takes no parameters.");
+		return NULL;
+	}
+
+#if PG_VERSION_NUM < 80000
+	return PyInt_FromLong(PG_VERSION_NUM);
+#else
+	return PyInt_FromLong(PQserverVersion(self->cnx));
+#endif
+}
+
 /* get number of rows */
 static char pgquery_ntuples__doc__[] =
 "ntuples() -- returns number of tuples returned by query.";
@@ -2873,6 +2933,10 @@
 	{"cancel", (PyCFunction) pg_cancel, METH_VARARGS, pg_cancel__doc__},
 	{"close", (PyCFunction) pg_close, METH_VARARGS, pg_close__doc__},
 	{"fileno", (PyCFunction) pg_fileno, METH_VARARGS, pg_fileno__doc__},
+	{"protocol_version", (PyCFunction) pg_protocol_version, METH_VARARGS,
+			pg_protocol_version__doc__},
+	{"server_version", (PyCFunction) pg_server_version, METH_VARARGS,
+			pg_server_version__doc__},
 	{"getnotify", (PyCFunction) pg_getnotify, METH_VARARGS,
 			pg_getnotify__doc__},
 	{"inserttable", (PyCFunction) pg_inserttable, METH_VARARGS,



More information about the PyGreSQL mailing list