summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Pellerin <jpellerin@gmail.com>2006-07-25 00:45:43 +0000
committerJason Pellerin <jpellerin@gmail.com>2006-07-25 00:45:43 +0000
commit6c65e612b4907be5bc202d326599d8119a9db3ff (patch)
tree811eb6fe594e03e59f05429b403d36b77f696b57
parent14f8c838271305dc00ffacbfcfaba7c32d47aa0b (diff)
[multi-db] Added postgresql-specific SchemaBuilder subclass that includes method for sequence resets.
git-svn-id: http://code.djangoproject.com/svn/django/branches/multiple-db-support@3442 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/backends/postgresql/sql.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/django/db/backends/postgresql/sql.py b/django/db/backends/postgresql/sql.py
new file mode 100644
index 0000000000..efba646956
--- /dev/null
+++ b/django/db/backends/postgresql/sql.py
@@ -0,0 +1,41 @@
+from django.db import models
+from django.db.backends.ansi.sql import BoundStatement, SchemaBuilder, \
+ default_style
+
+class PgSchemaBuilder(SchemaBuilder):
+ """SchemaBuilder for postgres. Implements an additional method that
+ outputs SQL statements to reset the sequence(s) for a model.
+ """
+ def get_sequence_reset(self, model, style=None):
+ """Get sequence reset sql for a model.
+ """
+ if style is None:
+ style=default_style
+ for f in model._meta.fields:
+ output = []
+ db = model._default_manager.db
+ connection = db.connection
+ qn = db.backend.quote_name
+ if isinstance(f, models.AutoField):
+ output.append(BoundStatement(
+ "%s setval('%s', (%s max(%s) %s %s));" % \
+ (style.SQL_KEYWORD('SELECT'),
+ style.SQL_FIELD('%s_%s_seq' %
+ (model._meta.db_table, f.column)),
+ style.SQL_KEYWORD('SELECT'),
+ style.SQL_FIELD(qn(f.column)),
+ style.SQL_KEYWORD('FROM'),
+ style.SQL_TABLE(qn(model._meta.db_table))),
+ connection))
+ break # Only one AutoField is allowed per model, so don't bother continuing.
+ for f in model._meta.many_to_many:
+ output.append(
+ BoundStatement("%s setval('%s', (%s max(%s) %s %s));" % \
+ (style.SQL_KEYWORD('SELECT'),
+ style.SQL_FIELD('%s_id_seq' % f.m2m_db_table()),
+ style.SQL_KEYWORD('SELECT'),
+ style.SQL_FIELD(qn('id')),
+ style.SQL_KEYWORD('FROM'),
+ style.SQL_TABLE(f.m2m_db_table())),
+ connection))
+ return output