From 6c65e612b4907be5bc202d326599d8119a9db3ff Mon Sep 17 00:00:00 2001 From: Jason Pellerin Date: Tue, 25 Jul 2006 00:45:43 +0000 Subject: [PATCH] [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 --- django/db/backends/postgresql/sql.py | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 django/db/backends/postgresql/sql.py 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