Ticket #13821: 13832.diff

File 13832.diff, 3.5 KB (added by Simon Meers, 14 years ago)

Uses quote_name, and includes specific regression tesf for uppercase characters in app names

  • django/db/backends/postgresql/operations.py

     
    5656    def last_insert_id(self, cursor, table_name, pk_name):
    5757        # Use pg_get_serial_sequence to get the underlying sequence name
    5858        # from the table name and column name (available since PostgreSQL 8)
    59         cursor.execute("SELECT CURRVAL(pg_get_serial_sequence('%s','%s'))" % (table_name, pk_name))
     59        cursor.execute("SELECT CURRVAL(pg_get_serial_sequence('%s','%s'))" % (
     60                self.quote_name(table_name), pk_name))
    6061        return cursor.fetchone()[0]
    6162
    6263    def no_limit_value(self):
     
    9899                    column_name = 'id'
    99100                sql.append("%s setval(pg_get_serial_sequence('%s','%s'), 1, false);" % \
    100101                    (style.SQL_KEYWORD('SELECT'),
    101                     style.SQL_TABLE(table_name),
     102                    style.SQL_TABLE(self.quote_name(table_name)),
    102103                    style.SQL_FIELD(column_name))
    103104                )
    104105            return sql
     
    120121                if isinstance(f, models.AutoField):
    121122                    output.append("%s setval(pg_get_serial_sequence('%s','%s'), coalesce(max(%s), 1), max(%s) %s null) %s %s;" % \
    122123                        (style.SQL_KEYWORD('SELECT'),
    123                         style.SQL_TABLE(model._meta.db_table),
     124                        style.SQL_TABLE(self.quote_name(model._meta.db_table)),
    124125                        style.SQL_FIELD(f.column),
    125126                        style.SQL_FIELD(qn(f.column)),
    126127                        style.SQL_FIELD(qn(f.column)),
     
    132133                if not f.rel.through:
    133134                    output.append("%s setval(pg_get_serial_sequence('%s','%s'), coalesce(max(%s), 1), max(%s) %s null) %s %s;" % \
    134135                        (style.SQL_KEYWORD('SELECT'),
    135                         style.SQL_TABLE(model._meta.db_table),
     136                        style.SQL_TABLE(self.quote_name(model._meta.db_table)),
    136137                        style.SQL_FIELD('id'),
    137138                        style.SQL_FIELD(qn('id')),
    138139                        style.SQL_FIELD(qn('id')),
  • tests/regressiontests/Bug13832/__init__.py

     
     1
  • tests/regressiontests/Bug13832/tests.py

     
     1from django.test import TestCase
     2from regressiontests.Bug13832 import models
     3
     4class TestUppercaseAppNames(TestCase):
     5    """ Ensure app labels with uppercase characters don't cause DatabaseErrors.
     6   
     7    (As they did after changeset #13363, when using PostgreSQL).
     8    """
     9    def test_uppercase(self):
     10        models.AppNameTestClass.objects.create()
  • tests/regressiontests/Bug13832/models.py

     
     1from django.db import models
     2
     3class AppNameTestClass(models.Model):
     4    token_field = models.CharField(max_length=255)
     5 
Back to Top