summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoulder Sprinters <boulder-sprinters@djangoproject.com>2007-04-10 23:41:54 +0000
committerBoulder Sprinters <boulder-sprinters@djangoproject.com>2007-04-10 23:41:54 +0000
commitf44429224a874dac9028f56d6803d1f1dc1b382f (patch)
tree6cca60af97088e877e23d1b3f1286638295a6a5f
parent0b57189aa27862f2b0a09f7e62e9a3a70ddcb328 (diff)
boulder-oracle-sprint: Fixed fixtures_regress test case by implementing
get_sql_sequence_reset() in the Oracle backend. Thanks, Ian Kelly. git-svn-id: http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint@4995 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/backends/oracle/base.py30
1 files changed, 28 insertions, 2 deletions
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index e95fffcf76..4387991337 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -225,8 +225,34 @@ def get_sequence_name(table):
def get_sql_sequence_reset(style, model_list):
"Returns a list of the SQL statements to reset sequences for the given models."
- # TODO: Run ALTER statements to reset Oracle sequence w/out dropping it.
- return []
+ from django.db import models
+ output = []
+ query = """
+ DECLARE
+ startvalue integer;
+ cval integer;
+ BEGIN
+ SELECT NVL(MAX(id), 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;
+ END; """
+ for model in model_list:
+ for f in model._meta.fields:
+ if isinstance(f, models.AutoField):
+ sequence_name = get_sequence_name(model._meta.db_table)
+ query1 = query % {'sequence':sequence_name, 'table':model._meta.db_table}
+ output.append(query1)
+ break # Only one AutoField is allowed per model, so don't bother continuing.
+ for f in model._meta.many_to_many:
+ sequence_name = get_sequence_name(f.m2m_db_table())
+ query2 = query % {'sequence':sequence_name, 'table':f.m2m_db_table()}
+ output.append(query2)
+ return output
def get_trigger_name(table):
name_length = get_max_name_length() - 3