summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Di Gregorio <fog@initd.org>2005-04-03 06:13:24 +0000
committerFederico Di Gregorio <fog@initd.org>2005-04-03 06:13:24 +0000
commitfdb68599c7bce5e5d860383f21d1ae6c8fc12c29 (patch)
treeefcd045b513dcc6b6ac213aace332fbfb285e80e
parent5db776420703e392e839d7fcb833274f65b7893f (diff)
downloadpsycopg2-fdb68599c7bce5e5d860383f21d1ae6c8fc12c29.tar.gz
psycopg1 compatibility module.
-rw-r--r--ChangeLog14
-rw-r--r--lib/__init__.py2
-rw-r--r--lib/psycopg1.py76
-rw-r--r--psycopg/psycopgmodule.c3
4 files changed, 92 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index d040f0c..693ade7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-04-03 Federico Di Gregorio <fog@debian.org>
+
+ * psycopg/psycopgmodule.c (psyco_connect): factory ->
+ connection_factory.
+
+ * lib/psycopg1.py: added psycopg 1.1.x compatibility module.
+
2005-03-29 Federico Di Gregorio <fog@debian.org>
* psycopg/pqpath.c (pq_is_busy): Staring from bug report from
@@ -6,6 +13,13 @@
2005-03-24 Federico Di Gregorio <fog@debian.org>
+ * psycopg/adapter_binary.c (binary_escape): propagated Andrea's
+ fix to binary adapter.
+
+ * psycopg/adapter_qstring.c (qstring_quote): applied patch from
+ Andrea Arcangeli to fix allocation failures (>4Gb) on 64 bit
+ arches.
+
* psycopg/typecast_array.c (typecast_array_tokenize): much better
tokenization code.
diff --git a/lib/__init__.py b/lib/__init__.py
index 2ac194c..0e87211 100644
--- a/lib/__init__.py
+++ b/lib/__init__.py
@@ -20,8 +20,6 @@ small and fast, and stable as a rock.
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
-__all__ = ['extensions', 'extras', 'tz', 'pool']
-
# import the DBAPI-2.0 stuff into top-level module
from _psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
diff --git a/lib/psycopg1.py b/lib/psycopg1.py
new file mode 100644
index 0000000..45a1783
--- /dev/null
+++ b/lib/psycopg1.py
@@ -0,0 +1,76 @@
+"""psycopg 1.1.x compatibility module
+
+This module uses the new style connection and cursor types to build a psycopg
+1.1.1.x compatibility layer. It should be considered a temporary hack to run
+old code hile porting to psycopg 2. Import as follows:
+
+ from psycopg import psycopg1 as psycopg
+"""
+# psycopg/psycopg1.py - psycopg 1.1.x compatibility module
+#
+# Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+
+import _psycopg as _2psycopg
+from psycopg.extensions import cursor as _2cursor
+from psycopg.extensions import connection as _2connection
+
+from psycopg import *
+del connect
+
+
+def connect(*args, **kwargs):
+ """connect(dsn, ...) -> new psycopg 1.1.x compatible connection object"""
+ kwargs['connection_factory'] = connection
+ return _2psycopg.connect(*args, **kwargs)
+
+
+class connection(_2connection):
+ """psycopg 1.1.x connection."""
+
+ def cursor(self):
+ """cursor() -> new psycopg 1.1.x compatible cursor object"""
+ return _2connection.cursor(self, cursor_factory=cursor)
+
+
+class cursor(_2cursor):
+ """psycopg 1.1.x cursor.
+
+ Note that this cursor implements the exact procedure used by psycopg 1 to
+ build dictionaries out of result rows. The DictCursor in the
+ psycopg.extras modules implements a much better and faster algorithm.
+ """
+
+ def __build_dict(self, row):
+ res = {}
+ for i in range(len(self.description)):
+ res[self.description[i][0]] = row[i]
+ return res
+
+ def dictfetchone(self):
+ row = _2cursor.fetchone(self)
+ return self.__build_dict(row)
+
+ def dictfetchmany(self, size):
+ res = []
+ rows = _2cursor.fetchmany(self, size)
+ for row in rows:
+ res.append(self.__build_dict(row))
+ return res
+
+ def dictfetchall(self):
+ res = []
+ rows = _2cursor.fetchall(self)
+ for row in rows:
+ res.append(self.__build_dict(row))
+ return res
+
diff --git a/psycopg/psycopgmodule.c b/psycopg/psycopgmodule.c
index da2109d..5601a33 100644
--- a/psycopg/psycopgmodule.c
+++ b/psycopg/psycopgmodule.c
@@ -102,7 +102,8 @@ psyco_connect(PyObject *self, PyObject *args, PyObject *keywds)
char *host=NULL, *port=NULL, *sslmode=NULL;
static char *kwlist[] = {"dsn", "database", "host", "port",
- "user", "password", "sslmode", "factory", NULL};
+ "user", "password", "sslmode",
+ "connection_factory", NULL};
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|sssssssO", kwlist,
&dsn, &database, &host, &port,