Add AUTOINCREMENT to sqlite primary key for issue1748

This commit is contained in:
Cédric Krier
2010-11-07 16:50:59 +01:00
parent 3c6dc399be
commit b5c86fbbcd
3 changed files with 49 additions and 21 deletions
+2
View File
@@ -1,3 +1,5 @@
* Add AUTOINCREMENT to sqlite primary key
Version 1.8.0 - 2010-11-01
* Bug fixes (see mercurial logs for details)
* Add timestamp sequence
+17 -17
View File
@@ -1,5 +1,5 @@
CREATE TABLE ir_model (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
model VARCHAR,
name VARCHAR,
info TEXT,
@@ -7,7 +7,7 @@ CREATE TABLE ir_model (
);
CREATE TABLE ir_model_field (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
model INTEGER,
name VARCHAR,
relation VARCHAR,
@@ -19,7 +19,7 @@ CREATE TABLE ir_model_field (
CREATE TABLE ir_ui_view (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
model VARCHAR,
"type" VARCHAR,
arch TEXT,
@@ -28,14 +28,14 @@ CREATE TABLE ir_ui_view (
);
CREATE TABLE ir_ui_menu (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
parent INTEGER,
name VARCHAR,
icon VARCHAR
);
CREATE TABLE ir_translation (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
lang VARCHAR,
src TEXT,
name VARCHAR,
@@ -47,7 +47,7 @@ CREATE TABLE ir_translation (
);
CREATE TABLE ir_lang (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR,
code VARCHAR,
translatable BOOLEAN,
@@ -56,7 +56,7 @@ CREATE TABLE ir_lang (
);
CREATE TABLE res_user (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR,
active BOOLEAN,
login VARCHAR,
@@ -66,25 +66,25 @@ CREATE TABLE res_user (
INSERT INTO res_user (id, login, password, name, active) VALUES (0, 'root', NULL, 'Root', 0);
CREATE TABLE res_group (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR
);
CREATE TABLE "res_user-res_group" (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
uid INTEGER,
gid INTEGER
);
CREATE TABLE wkf (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR,
model VARCHAR,
on_create BOOLEAN
);
CREATE TABLE wkf_activity (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
workflow INTEGER,
subflow INTEGER,
split_mode VARCHAR,
@@ -98,7 +98,7 @@ CREATE TABLE wkf_activity (
);
CREATE TABLE wkf_transition (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
act_from INTEGER,
act_to INTEGER,
condition VARCHAR,
@@ -108,7 +108,7 @@ CREATE TABLE wkf_transition (
);
CREATE TABLE wkf_instance (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
workflow INTEGER,
uid INTEGER DEFAULT 0,
res_id INTEGER DEFAULT 0,
@@ -117,7 +117,7 @@ CREATE TABLE wkf_instance (
);
CREATE TABLE wkf_workitem (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
activity INTEGER,
instance INTEGER,
subflow INTEGER,
@@ -125,13 +125,13 @@ CREATE TABLE wkf_workitem (
);
CREATE TABLE wkf_witm_trans (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
trans_id INTEGER,
inst_id INTEGER
);
CREATE TABLE ir_module_module (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
create_uid INTEGER,
create_date TIMESTAMP,
write_date TIMESTAMP,
@@ -146,7 +146,7 @@ CREATE TABLE ir_module_module (
);
CREATE TABLE ir_module_module_dependency (
id INTEGER PRIMARY KEY,
id INTEGER PRIMARY KEY AUTOINCREMENT,
create_uid INTEGER,
create_date TIMESTAMP,
write_date TIMESTAMP,
+30 -4
View File
@@ -21,21 +21,47 @@ class TableHandler(TableHandlerInterface):
if not self.table_exist(self.cursor, self.table_name):
if not self.history:
self.cursor.execute('CREATE TABLE "%s" ' \
'(id INTEGER PRIMARY KEY)' % \
'(id INTEGER PRIMARY KEY AUTOINCREMENT)' % \
self.table_name)
else:
self.cursor.execute('CREATE TABLE "%s" ' \
'(__id INTEGER PRIMARY KEY, ' \
'(__id INTEGER PRIMARY KEY AUTOINCREMENT, ' \
'id INTEGER)' % self.table_name)
self._update_definitions()
@staticmethod
def table_exist(cursor, table_name):
cursor.execute("SELECT name FROM sqlite_master " \
cursor.execute("SELECT sql FROM sqlite_master " \
"WHERE type = 'table' AND name = %s",
(table_name,))
return bool(cursor.fetchone())
res = cursor.fetchone()
if not res:
return False
sql, = res
# Migration from 1.6 add autoincrement
if not 'AUTOINCREMENT' in sql.upper():
temp_sql = sql.replace(table_name, '_temp_%s' % table_name)
cursor.execute(temp_sql)
cursor.execute('PRAGMA table_info("' + table_name + '")')
columns = ['"%s"' % column for _, column, _, _, _, _
in cursor.fetchall()]
cursor.execute(('INSERT INTO "_temp_%s" '
'(' + ','.join(columns) + ') '
'SELECT ' + ','.join(columns) +
' FROM "%s"') % (table_name, table_name))
cursor.execute('DROP TABLE "%s"' % table_name)
new_sql = sql.replace('PRIMARY KEY',
'PRIMARY KEY AUTOINCREMENT')
cursor.execute(new_sql)
cursor.execute(('INSERT INTO "%s" '
'(' + ','.join(columns) + ') '
'SELECT ' + ','.join(columns) +
' FROM "_temp_%s"') % (table_name, table_name))
cursor.execute('DROP TABLE "_temp_%s"' % table_name)
return True
@staticmethod
def table_rename(cursor, old_name, new_name):