diff options
| author | Chris Wilson <chris+github@qwirx.com> | 2013-09-06 12:18:16 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2013-09-06 12:31:17 -0400 |
| commit | eade315da1c8372ac1dfcf1fd20ea87f454d71ac (patch) | |
| tree | 8eeb30580f8ca4a00d2a776e65b88288887f95da /django | |
| parent | 630eb0564abd228da439d86ad93acb4089d795e7 (diff) | |
Fixed #10164 -- Made AutoField increase monotonically on SQLite
Thanks malte for the report.
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/backends/creation.py | 4 | ||||
| -rw-r--r-- | django/db/backends/sqlite3/base.py | 1 | ||||
| -rw-r--r-- | django/db/backends/sqlite3/creation.py | 3 | ||||
| -rw-r--r-- | django/db/backends/sqlite3/introspection.py | 2 | ||||
| -rw-r--r-- | django/db/models/fields/__init__.py | 3 |
5 files changed, 12 insertions, 1 deletions
diff --git a/django/db/backends/creation.py b/django/db/backends/creation.py index 1d90f03425..eba3952d0f 100644 --- a/django/db/backends/creation.py +++ b/django/db/backends/creation.py @@ -23,6 +23,7 @@ class BaseDatabaseCreation(object): destruction of test databases. """ data_types = {} + data_types_suffix = {} data_type_check_constraints = {} def __init__(self, connection): @@ -53,6 +54,7 @@ class BaseDatabaseCreation(object): qn = self.connection.ops.quote_name for f in opts.local_fields: col_type = f.db_type(connection=self.connection) + col_type_suffix = f.db_type_suffix(connection=self.connection) tablespace = f.db_tablespace or opts.db_tablespace if col_type is None: # Skip ManyToManyFields, because they're not represented as @@ -88,6 +90,8 @@ class BaseDatabaseCreation(object): (model, f)) else: field_output.extend(ref_output) + if col_type_suffix: + field_output.append(style.SQL_KEYWORD(col_type_suffix)) table_output.append(' '.join(field_output)) for field_constraints in opts.unique_together: table_output.append(style.SQL_KEYWORD('UNIQUE') + ' (%s)' % diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 385733cb8d..889630faf9 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -106,6 +106,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): supports_check_constraints = False autocommits_when_autocommit_is_off = True supports_paramstyle_pyformat = False + supports_sequence_reset = False @cached_property def uses_savepoints(self): diff --git a/django/db/backends/sqlite3/creation.py b/django/db/backends/sqlite3/creation.py index 435cee3436..bdd4560516 100644 --- a/django/db/backends/sqlite3/creation.py +++ b/django/db/backends/sqlite3/creation.py @@ -34,6 +34,9 @@ class DatabaseCreation(BaseDatabaseCreation): 'TextField': 'text', 'TimeField': 'time', } + data_types_suffix = { + 'AutoField': 'AUTOINCREMENT', + } def sql_for_pending_references(self, model, style, pending_references): "SQLite3 doesn't support constraints" diff --git a/django/db/backends/sqlite3/introspection.py b/django/db/backends/sqlite3/introspection.py index f1d433fe0f..55e68c34b9 100644 --- a/django/db/backends/sqlite3/introspection.py +++ b/django/db/backends/sqlite3/introspection.py @@ -175,7 +175,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection): results = results[results.index('(') + 1:results.rindex(')')] for field_desc in results.split(','): field_desc = field_desc.strip() - m = re.search('"(.*)".*PRIMARY KEY$', field_desc) + m = re.search('"(.*)".*PRIMARY KEY( AUTOINCREMENT)?$', field_desc) if m: return m.groups()[0] return None diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index fe24fab589..91046f98c6 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -395,6 +395,9 @@ class Field(object): "check": check_string, } + def db_type_suffix(self, connection): + return connection.creation.data_types_suffix.get(self.get_internal_type()) + @property def unique(self): return self._unique or self.primary_key |
