diff -rduP -x .svn -x '*.pyc' django-trunk/django/db/backends/ado_mssql/base.py django-new/django/db/backends/ado_mssql/base.py --- django-trunk/django/db/backends/ado_mssql/base.py 2008-02-26 15:22:14.000000000 +0100 +++ django-new/django/db/backends/ado_mssql/base.py 2008-02-26 15:04:52.000000000 +0100 @@ -66,7 +66,9 @@ def deferrable_sql(self): return " DEFERRABLE INITIALLY DEFERRED" - def last_insert_id(self, cursor, table_name, pk_name): + # FIXME: seq_name might be a useful thing to add to backends other + # than PostgreSQL + def last_insert_id(self, cursor, table_name, pk_name, seq_name): cursor.execute("SELECT %s FROM %s WHERE %s = @@IDENTITY" % (pk_name, table_name, pk_name)) return cursor.fetchone()[0] diff -rduP -x .svn -x '*.pyc' django-trunk/django/db/backends/__init__.py django-new/django/db/backends/__init__.py --- django-trunk/django/db/backends/__init__.py 2008-02-26 15:22:14.000000000 +0100 +++ django-new/django/db/backends/__init__.py 2008-02-26 15:11:26.000000000 +0100 @@ -149,7 +149,9 @@ return smart_unicode(sql) % u_params - def last_insert_id(self, cursor, table_name, pk_name): + # FIXME: seq_name might be a useful thing to add to backends other + # than PostgreSQL + def last_insert_id(self, cursor, table_name, pk_name, seq_name): """ Given a cursor object that has just performed an INSERT statement into a table that has an auto-incrementing ID, returns the newly created ID. diff -rduP -x .svn -x '*.pyc' django-trunk/django/db/backends/postgresql/operations.py django-new/django/db/backends/postgresql/operations.py --- django-trunk/django/db/backends/postgresql/operations.py 2008-02-26 15:22:14.000000000 +0100 +++ django-new/django/db/backends/postgresql/operations.py 2008-02-26 15:08:46.000000000 +0100 @@ -32,8 +32,10 @@ return 'CAST(%s AS TEXT)' return '%s' - def last_insert_id(self, cursor, table_name, pk_name): - cursor.execute("SELECT CURRVAL('\"%s_%s_seq\"')" % (table_name, pk_name)) + def last_insert_id(self, cursor, table_name, pk_name, seq_name): + if seq_name is None: + seq_name = "%s_%s_seq" % (table_name, pk_name) + cursor.execute("SELECT CURRVAL('\"%s\"')" % seq_name) return cursor.fetchone()[0] def quote_name(self, name): diff -rduP -x .svn -x '*.pyc' django-trunk/django/db/models/base.py django-new/django/db/models/base.py --- django-trunk/django/db/models/base.py 2008-02-26 15:22:14.000000000 +0100 +++ django-new/django/db/models/base.py 2008-02-26 15:17:19.000000000 +0100 @@ -268,7 +268,7 @@ (qn(self._meta.db_table), qn(self._meta.pk.column), connection.ops.pk_default_value())) if self._meta.has_auto_field and not pk_set: - setattr(self, self._meta.pk.attname, connection.ops.last_insert_id(cursor, self._meta.db_table, self._meta.pk.column)) + setattr(self, self._meta.pk.attname, connection.ops.last_insert_id(cursor, self._meta.db_table, self._meta.pk.column, self._meta.pk.seq_name)) transaction.commit_unless_managed() # Run any post-save hooks. diff -rduP -x .svn -x '*.pyc' django-trunk/django/db/models/fields/__init__.py django-new/django/db/models/fields/__init__.py --- django-trunk/django/db/models/fields/__init__.py 2008-02-26 15:22:14.000000000 +0100 +++ django-new/django/db/models/fields/__init__.py 2008-02-26 15:19:27.000000000 +0100 @@ -83,7 +83,7 @@ core=False, rel=None, default=NOT_PROVIDED, editable=True, serialize=True, prepopulate_from=None, unique_for_date=None, unique_for_month=None, unique_for_year=None, validator_list=None, choices=None, radio_admin=None, - help_text='', db_column=None, db_tablespace=None): + help_text='', db_column=None, db_tablespace=None, seq_name=None): self.name = name self.verbose_name = verbose_name self.primary_key = primary_key @@ -105,6 +105,7 @@ self.help_text = help_text self.db_column = db_column self.db_tablespace = db_tablespace or settings.DEFAULT_INDEX_TABLESPACE + self.seq_name = seq_name # Set db_index to True if the field has a relationship and doesn't explicitly set db_index. self.db_index = db_index