Add AUTOINCREMENT to sqlite primary key for issue1748
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user