summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorIan Kelly <ian.g.kelly@gmail.com>2010-11-12 01:44:22 +0000
committerIan Kelly <ian.g.kelly@gmail.com>2010-11-12 01:44:22 +0000
commitee6bec6c092da5466be563cef1ecf3bcc45199f6 (patch)
treeef837ec2bb118a1706683b9594cd445da79ff52c /django
parent590bde88355b1736717d1d3936ebb4be56961a8c (diff)
Fixed #11101: Rewrote the sequence reset SQL for Oracle to prevent it from performing an implicit commit that caused all fixtures to be automatically committed, causing a large number of test failures.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14537 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/db/backends/oracle/base.py20
1 files changed, 8 insertions, 12 deletions
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index db16307866..625d95051a 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -669,19 +669,15 @@ def _get_sequence_reset_sql():
# TODO: colorize this SQL code with style.SQL_KEYWORD(), etc.
return """
DECLARE
- startvalue integer;
- cval integer;
+ table_value integer;
+ seq_value integer;
BEGIN
- LOCK TABLE %(table)s IN SHARE MODE;
- SELECT NVL(MAX(%(column)s), 0) INTO startvalue FROM %(table)s;
- SELECT "%(sequence)s".nextval INTO cval FROM dual;
- cval := startvalue - cval;
- IF cval != 0 THEN
- EXECUTE IMMEDIATE 'ALTER SEQUENCE "%(sequence)s" MINVALUE 0 INCREMENT BY '||cval;
- SELECT "%(sequence)s".nextval INTO cval FROM dual;
- EXECUTE IMMEDIATE 'ALTER SEQUENCE "%(sequence)s" INCREMENT BY 1';
- END IF;
- COMMIT;
+ SELECT NVL(MAX(%(column)s), 0) INTO table_value FROM %(table)s;
+ SELECT NVL(last_number - cache_size, 0) INTO seq_value FROM user_sequences
+ WHERE sequence_name = '%(sequence)s';
+ WHILE table_value > seq_value LOOP
+ SELECT "%(sequence)s".nextval INTO seq_value FROM dual;
+ END LOOP;
END;
/"""