sql: drop useless columns (#3363)

This commit is contained in:
Thomas NOËL 2013-07-29 17:04:46 +02:00
parent fbf7f3c47d
commit 82cf4f1291
1 changed files with 36 additions and 12 deletions

View File

@ -101,12 +101,10 @@ def do_formdef_tables(formdef):
return
conn, cur = get_connection_and_cursor()
table_name = get_formdef_table_name(formdef)
table_change = False
cur.execute('''SELECT COUNT(*) FROM information_schema.tables
WHERE table_name = %s''', (table_name,))
if cur.fetchone()[0] == 0:
table_change = True
cur.execute('''CREATE TABLE %s (id serial PRIMARY KEY,
user_id varchar,
user_hash varchar,
@ -125,9 +123,15 @@ def do_formdef_tables(formdef):
table_name, table_name))
cur.execute('''SELECT column_name FROM information_schema.columns
WHERE table_name = %s''', (table_name,))
existing_fields = [x[0] for x in cur.fetchall()]
existing_fields = set([x[0] for x in cur.fetchall()])
needed_fields = set(['id', 'user_id', 'user_hash', 'receipt_time',
'status', 'workflow_data', 'id_display', 'fts',
'workflow_roles', 'workflow_roles_array'])
# migrations
if not 'fts' in existing_fields:
# full text search
cur.execute('''ALTER TABLE %s ADD COLUMN fts tsvector''' % table_name)
cur.execute('''CREATE INDEX %s_fts ON %s USING gin(fts)''' % (
table_name, table_name))
@ -136,19 +140,27 @@ def do_formdef_tables(formdef):
cur.execute('''ALTER TABLE %s ADD COLUMN workflow_roles bytea''' % table_name)
cur.execute('''ALTER TABLE %s ADD COLUMN workflow_roles_array text[]''' % table_name)
# add new fields
for field in formdef.fields:
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
if sql_type is None:
continue
needed_fields.add('f%s' % field.id)
if 'f%s' % field.id not in existing_fields:
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
if sql_type is None:
continue
cur.execute('''ALTER TABLE %s ADD COLUMN %s %s''' % (
table_name,
'f%s' % field.id,
sql_type))
if field.store_display_value:
if field.store_display_value:
needed_fields.add('f%s_display' % field.id)
if 'f%s_display' % field.id not in existing_fields:
cur.execute('''ALTER TABLE %s ADD COLUMN %s varchar''' % (
table_name, 'f%s_display' % field.id))
# delete obsolete fields
for field in (existing_fields - needed_fields):
cur.execute('''ALTER TABLE %s DROP COLUMN %s''' % (table_name, field))
conn.commit()
cur.close()
@ -173,23 +185,35 @@ def do_user_table():
last_seen timestamp)''' % table_name)
cur.execute('''SELECT column_name FROM information_schema.columns
WHERE table_name = %s''', (table_name,))
existing_fields = [x[0] for x in cur.fetchall()]
existing_fields = set([x[0] for x in cur.fetchall()])
needed_fields = set(['id', 'name', 'email', 'roles', 'is_admin',
'anonymous', 'name_identifiers', 'identification_token',
'lasso_dump', 'last_seen'])
from admin.settings import UserFieldsFormDef
formdef = UserFieldsFormDef()
for field in formdef.fields:
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
if sql_type is None:
continue
needed_fields.add('f%s' % field.id)
if 'f%s' % field.id not in existing_fields:
sql_type = SQL_TYPE_MAPPING.get(field.key, 'varchar')
if sql_type is None:
continue
cur.execute('''ALTER TABLE %s ADD COLUMN %s %s''' % (
table_name,
'f%s' % field.id,
sql_type))
if field.store_display_value:
if field.store_display_value:
needed_fields.add('f%s_display' % field.id)
if 'f%s_display' % field.id not in existing_fields:
cur.execute('''ALTER TABLE %s ADD COLUMN %s varchar''' % (
table_name, 'f%s_display' % field.id))
# delete obsolete fields
for field in (existing_fields - needed_fields):
cur.execute('''ALTER TABLE %s DROP COLUMN %s''' % (table_name, field))
conn.commit()
cur.close()