Fixed #18319 -- Added 'supports_sequence_reset' DB feature

Added a new feature to allow 3rd party backends to skip tests which
test sequence resetting.

Thanks to manfre for report and patch.
This commit is contained in:
Anssi Kääriäinen 2012-05-22 23:46:27 +03:00
parent 8ee1a664f9
commit 0df4593f0e
3 changed files with 7 additions and 8 deletions

View File

@ -399,6 +399,9 @@ class BaseDatabaseFeatures(object):
# in the SQL standard. # in the SQL standard.
supports_tablespaces = False supports_tablespaces = False
# Does the backend reset sequences between tests?
supports_sequence_reset = True
# Features that need to be confirmed at runtime # Features that need to be confirmed at runtime
# Cache whether the confirmation has been performed. # Cache whether the confirmation has been performed.
_confirmed = False _confirmed = False

View File

@ -83,6 +83,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
ignores_nulls_in_unique_constraints = False ignores_nulls_in_unique_constraints = False
has_bulk_insert = True has_bulk_insert = True
supports_tablespaces = True supports_tablespaces = True
supports_sequence_reset = False
class DatabaseOperations(BaseDatabaseOperations): class DatabaseOperations(BaseDatabaseOperations):
compiler_module = "django.db.backends.oracle.compiler" compiler_module = "django.db.backends.oracle.compiler"

View File

@ -8,8 +8,7 @@ from optparse import make_option
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.management import call_command from django.core.management import call_command
from django import db from django import db
from django.db import connection from django.test import simple, TransactionTestCase, skipUnlessDBFeature
from django.test import simple, TransactionTestCase
from django.test.simple import DjangoTestSuiteRunner, get_tests from django.test.simple import DjangoTestSuiteRunner, get_tests
from django.test.testcases import connections_support_transactions from django.test.testcases import connections_support_transactions
from django.utils import unittest from django.utils import unittest
@ -291,16 +290,12 @@ class AutoIncrementResetTest(TransactionTestCase):
and check that both times they get "1" as their PK value. That is, we test and check that both times they get "1" as their PK value. That is, we test
that AutoField values start from 1 for each transactional test case. that AutoField values start from 1 for each transactional test case.
""" """
@unittest.skipIf(connection.vendor == 'oracle', @skipUnlessDBFeature('supports_sequence_reset')
"Oracle's auto-increment fields are not reset between "
"tests")
def test_autoincrement_reset1(self): def test_autoincrement_reset1(self):
p = Person.objects.create(first_name='Jack', last_name='Smith') p = Person.objects.create(first_name='Jack', last_name='Smith')
self.assertEqual(p.pk, 1) self.assertEqual(p.pk, 1)
@unittest.skipIf(connection.vendor == 'oracle', @skipUnlessDBFeature('supports_sequence_reset')
"Oracle's auto-increment fields are not reset between "
"tests")
def test_autoincrement_reset2(self): def test_autoincrement_reset2(self):
p = Person.objects.create(first_name='Jack', last_name='Smith') p = Person.objects.create(first_name='Jack', last_name='Smith')
self.assertEqual(p.pk, 1) self.assertEqual(p.pk, 1)