Author: aaugustin
Date: 2011-11-19 06:18:44 -0800 (Sat, 19 Nov 2011)
New Revision: 17112

Modified:
   django/trunk/django/db/backends/postgresql_psycopg2/base.py
   django/trunk/django/db/backends/postgresql_psycopg2/creation.py
Log:
Used symbolic constants for psycopg2 isolation levels.

Django used the value 1 = ISOLATION_LEVEL_READ_UNCOMMITTED in some places, but
PostgreSQL doesn't provide "read uncommited", it uses "read committed" instead:
http://www.postgresql.org/docs/9.1/static/transaction-iso.html. For clarity,
this commit uses ISOLATION_LEVEL_READ_COMMITTED = 2 where 1 was previously used.



Modified: django/trunk/django/db/backends/postgresql_psycopg2/base.py
===================================================================
--- django/trunk/django/db/backends/postgresql_psycopg2/base.py 2011-11-19 
11:38:40 UTC (rev 17111)
+++ django/trunk/django/db/backends/postgresql_psycopg2/base.py 2011-11-19 
14:18:44 UTC (rev 17112)
@@ -108,7 +108,11 @@
         self.features = DatabaseFeatures(self)
         autocommit = self.settings_dict["OPTIONS"].get('autocommit', False)
         self.features.uses_autocommit = autocommit
-        self._set_isolation_level(int(not autocommit))
+        if autocommit:
+            level = psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT
+        else:
+            level = psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED
+        self._set_isolation_level(level)
         self.ops = DatabaseOperations(self)
         self.client = DatabaseClient(self)
         self.creation = DatabaseCreation(self)
@@ -189,7 +193,7 @@
         the same transaction is visible across all the queries.
         """
         if self.features.uses_autocommit and managed and not 
self.isolation_level:
-            self._set_isolation_level(1)
+            
self._set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED)
 
     def _leave_transaction_management(self, managed):
         """
@@ -197,7 +201,7 @@
         leaving transaction management.
         """
         if self.features.uses_autocommit and not managed and 
self.isolation_level:
-            self._set_isolation_level(0)
+            
self._set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
 
     def _set_isolation_level(self, level):
         """
@@ -205,7 +209,7 @@
         levels. This doesn't touch the uses_autocommit feature, since that
         controls the movement *between* isolation levels.
         """
-        assert level in (0, 1)
+        assert level in range(5)
         try:
             if self.connection is not None:
                 self.connection.set_isolation_level(level)

Modified: django/trunk/django/db/backends/postgresql_psycopg2/creation.py
===================================================================
--- django/trunk/django/db/backends/postgresql_psycopg2/creation.py     
2011-11-19 11:38:40 UTC (rev 17111)
+++ django/trunk/django/db/backends/postgresql_psycopg2/creation.py     
2011-11-19 14:18:44 UTC (rev 17112)
@@ -1,3 +1,5 @@
+import psycopg2.extensions
+
 from django.db.backends.creation import BaseDatabaseCreation
 from django.db.backends.util import truncate_name
 
@@ -81,4 +83,5 @@
     def _prepare_for_test_db_ddl(self):
         """Rollback and close the active transaction."""
         self.connection.connection.rollback()
-        self.connection.connection.set_isolation_level(0)
+        self.connection.connection.set_isolation_level(
+                psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to