This change breaks backward compatibility, so only applying while POSTGRESQL option is enabled PR: ports/158996 Submitted by: Raphael Kubo da Costa <kubito@gmail.com>
84 lines
4.1 KiB
Diff
84 lines
4.1 KiB
Diff
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
|