1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
diff -uprN Django-1.3-vanilla/django/db/backends/creation.py Django-1.3/django/db/backends/creation.py
--- django/db/backends/creation.py 2011-02-02 12:02:14.000000000 -0200
+++ django/db/backends/creation.py 2011-07-16 20:21:28.000000000 -0300
@@ -413,7 +413,7 @@ class BaseDatabaseCreation(object):
# if the database supports it because PostgreSQL doesn't allow
# CREATE/DROP DATABASE statements within transactions.
cursor = self.connection.cursor()
- self.set_autocommit()
+ self._prepare_for_test_db_ddl()
try:
cursor.execute("CREATE DATABASE %s %s" % (qn(test_database_name), suffix))
except Exception, e:
@@ -458,20 +458,27 @@ class BaseDatabaseCreation(object):
# to do so, because it's not allowed to delete a database while being
# connected to it.
cursor = self.connection.cursor()
- self.set_autocommit()
+ self._prepare_for_test_db_ddl()
time.sleep(1) # To avoid "database is being accessed by other users" errors.
cursor.execute("DROP DATABASE %s" % self.connection.ops.quote_name(test_database_name))
self.connection.close()
def set_autocommit(self):
- "Make sure a connection is in autocommit mode."
- if hasattr(self.connection.connection, "autocommit"):
- if callable(self.connection.connection.autocommit):
- self.connection.connection.autocommit(True)
- else:
- self.connection.connection.autocommit = True
- elif hasattr(self.connection.connection, "set_isolation_level"):
- self.connection.connection.set_isolation_level(0)
+ """
+ Make sure a connection is in autocommit mode. - Deprecated, not used
+ anymore by Django code. Kept for compatibility with user code that
+ might use it.
+ """
+ pass
+
+ def _prepare_for_test_db_ddl(self):
+ """
+ Internal implementation - Hook for tasks that should be performed before
+ the ``CREATE DATABASE``/``DROP DATABASE`` clauses used by testing code
+ to create/ destroy test databases. Needed e.g. in PostgreSQL to rollback
+ and close any active transaction.
+ """
+ pass
def sql_table_creation_suffix(self):
"SQL to append to the end of the test table creation statements"
diff -uprN Django-1.3-vanilla/django/db/backends/oracle/creation.py Django-1.3/django/db/backends/oracle/creation.py
--- django/db/backends/oracle/creation.py 2011-02-19 05:41:17.000000000 -0200
+++ django/db/backends/oracle/creation.py 2011-07-16 20:32:14.000000000 -0300
@@ -269,3 +269,6 @@ class DatabaseCreation(BaseDatabaseCreat
settings_dict['NAME'],
self._test_database_user(),
)
+
+ def set_autocommit(self):
+ self.connection.connection.autocommit = True
diff -uprN Django-1.3-vanilla/django/db/backends/postgresql/creation.py Django-1.3/django/db/backends/postgresql/creation.py
--- django/db/backends/postgresql/creation.py 2010-07-29 23:54:47.000000000 -0300
+++ django/db/backends/postgresql/creation.py 2011-07-16 20:28:39.000000000 -0300
@@ -74,3 +74,11 @@ class DatabaseCreation(BaseDatabaseCreat
else:
output = []
return output
+
+ def set_autocommit(self):
+ self._prepare_for_test_db_ddl()
+
+ def _prepare_for_test_db_ddl(self):
+ """Rollback and close the active transaction."""
+ self.connection.connection.rollback()
+ self.connection.connection.set_isolation_level(0)
diff -uprN Django-1.3-vanilla/django/db/backends/sqlite3/creation.py Django-1.3/django/db/backends/sqlite3/creation.py
--- django/db/backends/sqlite3/creation.py 2010-12-08 21:48:28.000000000 -0200
+++ django/db/backends/sqlite3/creation.py 2011-07-16 20:28:57.000000000 -0300
@@ -68,3 +68,6 @@ class DatabaseCreation(BaseDatabaseCreat
if test_database_name and test_database_name != ":memory:":
# Remove the SQLite database file
os.remove(test_database_name)
+
+ def set_autocommit(self):
+ self.connection.connection.isolation_level = None
|