sql: make sure all formdef have up-to-date tables (#7034)
This commit is contained in:
parent
cbab6a94ed
commit
a634a69265
|
@ -737,6 +737,16 @@ def test_migration_2_formdef_id_in_views():
|
|||
cur.execute('UPDATE wcs_meta SET value = 1 WHERE key = %s', ('sql_level',))
|
||||
cur.execute('DROP VIEW wcs_all_forms')
|
||||
|
||||
# hack a formdef table the wrong way, to check it is reconstructed
|
||||
# properly before the views are created
|
||||
formdef.fields[4] = fields.StringField(id='4', label='item')
|
||||
cur.execute('DROP VIEW wcs_view_1_tests')
|
||||
cur.execute('ALTER TABLE formdata_1_tests DROP COLUMN f4_display')
|
||||
sql.redo_views(conn, cur, formdef, rebuild_global_views=False)
|
||||
formdef.fields[4] = fields.ItemField(id='4', label='item', items=('apple', 'pear', 'peach', 'apricot')),
|
||||
assert table_exists(cur, 'wcs_view_1_tests')
|
||||
assert not column_exists_in_table(cur, 'wcs_view_1_tests', 'f4_display')
|
||||
|
||||
view_names = []
|
||||
cur.execute('''SELECT table_name FROM information_schema.views
|
||||
WHERE table_name LIKE %s''', ('wcs\_view\_%',))
|
||||
|
|
17
wcs/sql.py
17
wcs/sql.py
|
@ -267,10 +267,15 @@ def guard_postgres(func):
|
|||
return f
|
||||
|
||||
@guard_postgres
|
||||
def do_formdef_tables(formdef, rebuild_views=False, rebuild_global_views=False):
|
||||
def do_formdef_tables(formdef, conn=None, cur=None, rebuild_views=False, rebuild_global_views=False):
|
||||
if formdef.id is None:
|
||||
return []
|
||||
conn, cur = get_connection_and_cursor()
|
||||
|
||||
own_conn = False
|
||||
if not conn:
|
||||
own_conn = True
|
||||
conn, cur = get_connection_and_cursor()
|
||||
|
||||
table_name = get_formdef_table_name(formdef)
|
||||
|
||||
cur.execute('''SELECT COUNT(*) FROM information_schema.tables
|
||||
|
@ -352,8 +357,9 @@ def do_formdef_tables(formdef, rebuild_views=False, rebuild_global_views=False):
|
|||
# them even if not asked to.
|
||||
redo_views(conn, cur, formdef, rebuild_global_views=rebuild_global_views)
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
if own_conn:
|
||||
conn.commit()
|
||||
cur.close()
|
||||
|
||||
actions = []
|
||||
if not 'concerned_roles_array' in existing_fields:
|
||||
|
@ -1587,7 +1593,8 @@ def migrate():
|
|||
drop_views(None, conn, cur)
|
||||
from wcs.formdef import FormDef
|
||||
for formdef in FormDef.select():
|
||||
redo_views(conn, cur, formdef, rebuild_global_views=False)
|
||||
# make sure all formdefs have up-to-date views
|
||||
do_formdef_tables(formdef, conn=conn, cur=cur, rebuild_views=True)
|
||||
migrate_global_views(conn, cur)
|
||||
|
||||
cur.execute('''UPDATE wcs_meta SET value = %s WHERE key = %s''', (
|
||||
|
|
Loading…
Reference in New Issue