sql: drop useless columns (#3363)
This commit is contained in:
parent
fbf7f3c47d
commit
82cf4f1291
48
wcs/sql.py
48
wcs/sql.py
|
@ -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()
|
||||
|
||||
|
|
Loading…
Reference in New Issue