/ View Ticket
Login
2016-04-18
15:58 Fixed ticket [7d7525cb]: Compatibility break on INTEGER PRIMARY KEY columns. plus 5 other changes (artifact: 7d322fdd user: drh)
15:54
Remove quotes from identifiers used as datatype names in a CREATE TABLE statement. Fix for ticket [7d7525cb01b68] (check-in: ab9d279f user: drh tags: branch-3.12.0)
15:46
Remove quotes from identifiers used as datatype names in a CREATE TABLE statement. Fix for ticket [7d7525cb01b68] (check-in: eba27d4d user: drh tags: trunk)
15:24 New ticket [7d7525cb] Compatibility break on INTEGER PRIMARY KEY columns.. (artifact: b61cd89a user: drh)

Ticket UUID: 7d7525cb01b68712495d3aa4a788ff71c45e5077
Title: Compatibility break on INTEGER PRIMARY KEY columns.
Status: Fixed Type: Code_Defect
Severity: Critical Priority: Immediate
Subsystem: Unknown Resolution: Fixed
Last Modified: 2016-04-18 15:58:37
Version Found In:
User Comments:
drh added on 2016-04-18 15:24:18:

SQLite as always allowed the datatype of a column to be quoted. For example:

CREATE TABLE t1(
  a "INTEGER" PRIMARY KEY,
  b "TEXT"
);

But beginning with version 3.12.0, quoting the "INTEGER" datatype causes SQLite to fail to recognize that the column is the INTEGER PRIMARY KEY that has special properties. This means that legacy database files that were created using INTEGER PRIMARY KEYs where the "INTEGER" keywords was quoted become unreadable.

The fact that legacy versions of SQLite allowed datatype names to be quoted is undocumented and untested, and was a fact unknown to the developers, which is how this problem managed to slip through testing.