summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2013-09-06 12:18:16 -0400
committerTim Graham <timograham@gmail.com>2013-09-06 12:31:17 -0400
commiteade315da1c8372ac1dfcf1fd20ea87f454d71ac (patch)
tree8eeb30580f8ca4a00d2a776e65b88288887f95da /django/db
parent630eb0564abd228da439d86ad93acb4089d795e7 (diff)
Fixed #10164 -- Made AutoField increase monotonically on SQLite
Thanks malte for the report.
Diffstat (limited to 'django/db')
-rw-r--r--django/db/backends/creation.py4
-rw-r--r--django/db/backends/sqlite3/base.py1
-rw-r--r--django/db/backends/sqlite3/creation.py3
-rw-r--r--django/db/backends/sqlite3/introspection.py2
-rw-r--r--django/db/models/fields/__init__.py3
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