From 3d4f6df0de210be48fabcad72c54a6915a630798 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Mon, 15 Aug 2016 02:17:47 +0100 Subject: [PATCH 1/3] Enforce dependency on libpq version >= 9.1 PGRES_COPY_BOTH was introduced in 9.1: we can ifdef the hell out of pgpath, but we may as well bury the dead horses instead of beating them. They smell funny, too. --- doc/src/install.rst | 3 ++- psycopg/pqpath.c | 2 +- psycopg/psycopg.h | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/src/install.rst b/doc/src/install.rst index 674bbac8..4611537e 100644 --- a/doc/src/install.rst +++ b/doc/src/install.rst @@ -19,7 +19,8 @@ The current `!psycopg2` implementation supports: - Python 2 versions from 2.6 to 2.7 - Python 3 versions from 3.1 to 3.5 -- PostgreSQL versions from 7.4 to 9.4 +- PostgreSQL server versions from 7.4 to 9.5 +- PostgreSQL client library version from 9.1 .. _PostgreSQL: http://www.postgresql.org/ .. _Python: http://www.python.org/ diff --git a/psycopg/pqpath.c b/psycopg/pqpath.c index d7283d0c..d02cb708 100644 --- a/psycopg/pqpath.c +++ b/psycopg/pqpath.c @@ -1913,7 +1913,7 @@ pq_fetch(cursorObject *curs, int no_result) break; default: - /* PGRES_COPY_BOTH, PGRES_SINGLE_TUPLE, future statuses */ + /* PGRES_SINGLE_TUPLE, future statuses */ Dprintf("pq_fetch: got unsupported result: status = %d pgconn = %p", pgstatus, curs->conn); PyErr_Format(NotSupportedError, diff --git a/psycopg/psycopg.h b/psycopg/psycopg.h index 3174f309..82b4293c 100644 --- a/psycopg/psycopg.h +++ b/psycopg/psycopg.h @@ -26,6 +26,10 @@ #ifndef PSYCOPG_H #define PSYCOPG_H 1 +#if PG_VERSION_NUM < 90100 +#error "Psycopg requires PostgreSQL client library (libpq) >= 9.1" +#endif + #define PY_SSIZE_T_CLEAN #include #include From 5ddc952dbb93167d19d84981debb741011958efc Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Mon, 15 Aug 2016 02:31:39 +0100 Subject: [PATCH 2/3] Dropped ifdef guards against obsolete libpq versions One of them was actually wrong: lobject_type.c wouldn't have compiled pre 8.3 (broken in 6e841a41, 2 years ago). --- psycopg/adapter_binary.c | 2 -- psycopg/lobject_int.c | 4 ---- psycopg/lobject_type.c | 7 ------- psycopg/psycopgmodule.c | 7 ------- psycopg/utils.c | 2 -- 5 files changed, 22 deletions(-) diff --git a/psycopg/adapter_binary.c b/psycopg/adapter_binary.c index 597048d2..1727b19a 100644 --- a/psycopg/adapter_binary.c +++ b/psycopg/adapter_binary.c @@ -39,11 +39,9 @@ static unsigned char * binary_escape(unsigned char *from, size_t from_length, size_t *to_length, PGconn *conn) { -#if PG_VERSION_NUM >= 80104 if (conn) return PQescapeByteaConn(conn, from, from_length, to_length); else -#endif return PQescapeBytea(from, from_length, to_length); } diff --git a/psycopg/lobject_int.c b/psycopg/lobject_int.c index 279ef1e2..b954a76b 100644 --- a/psycopg/lobject_int.c +++ b/psycopg/lobject_int.c @@ -474,8 +474,6 @@ lobject_export(lobjectObject *self, const char *filename) return retvalue; } -#if PG_VERSION_NUM >= 80300 - RAISES_NEG int lobject_truncate(lobjectObject *self, size_t len) { @@ -510,5 +508,3 @@ lobject_truncate(lobjectObject *self, size_t len) return retvalue; } - -#endif /* PG_VERSION_NUM >= 80300 */ diff --git a/psycopg/lobject_type.c b/psycopg/lobject_type.c index d15eb20e..ddda0daf 100644 --- a/psycopg/lobject_type.c +++ b/psycopg/lobject_type.c @@ -266,8 +266,6 @@ psyco_lobj_get_closed(lobjectObject *self, void *closure) return closed; } -#if PG_VERSION_NUM >= 80300 - #define psyco_lobj_truncate_doc \ "truncate(len=0) -- Truncate large object to given size." @@ -327,10 +325,8 @@ static struct PyMethodDef lobjectObject_methods[] = { METH_NOARGS, psyco_lobj_unlink_doc}, {"export",(PyCFunction)psyco_lobj_export, METH_VARARGS, psyco_lobj_export_doc}, -#if PG_VERSION_NUM >= 80300 {"truncate",(PyCFunction)psyco_lobj_truncate, METH_VARARGS, psyco_lobj_truncate_doc}, -#endif /* PG_VERSION_NUM >= 80300 */ {NULL} }; @@ -475,6 +471,3 @@ PyTypeObject lobjectType = { 0, /*tp_alloc*/ lobject_new, /*tp_new*/ }; - -#endif - diff --git a/psycopg/psycopgmodule.c b/psycopg/psycopgmodule.c index d4a4c947..012df6b3 100644 --- a/psycopg/psycopgmodule.c +++ b/psycopg/psycopgmodule.c @@ -164,7 +164,6 @@ exit: static PyObject * psyco_quote_ident(PyObject *self, PyObject *args, PyObject *kwargs) { -#if PG_VERSION_NUM >= 90000 PyObject *ident = NULL, *obj = NULL, *result = NULL; connectionObject *conn; const char *str; @@ -204,10 +203,6 @@ exit: Py_XDECREF(ident); return result; -#else - PyErr_SetString(NotSupportedError, "PQescapeIdentifier not available in libpq < 9.0"); - return NULL; -#endif } /** type registration **/ @@ -285,9 +280,7 @@ psyco_libcrypto_threads_init(void) if ((m = PyImport_ImportModule("ssl"))) { /* disable libcrypto setup in libpq, so it won't stomp on the callbacks that have already been set up */ -#if PG_VERSION_NUM >= 80400 PQinitOpenSSL(1, 0); -#endif Py_DECREF(m); } else { diff --git a/psycopg/utils.c b/psycopg/utils.c index b919180c..631b8394 100644 --- a/psycopg/utils.c +++ b/psycopg/utils.c @@ -67,12 +67,10 @@ psycopg_escape_string(connectionObject *conn, const char *from, Py_ssize_t len, } { - #if PG_VERSION_NUM >= 80104 int err; if (conn && conn->pgconn) ql = PQescapeStringConn(conn->pgconn, to+eq+1, from, len, &err); else - #endif ql = PQescapeString(to+eq+1, from, len); } From b3792c7f02c26697dbd32197169cf90cadeef859 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Mon, 15 Aug 2016 02:38:20 +0100 Subject: [PATCH 3/3] Mention dropping Pre 9.1 libpq support in NEWS file --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index d1b9e7d9..6ada19c0 100644 --- a/NEWS +++ b/NEWS @@ -25,6 +25,8 @@ New features: Other changes: - Dropped support for Python 2.5. +- Dropped support for client library older than PostgreSQL 9.1 (but older + server versions are still supported). What's new in psycopg 2.6.3