sql: don't set highest sql level when creating meta table in migrations (#7034)
This commit is contained in:
parent
6a0c0e2023
commit
cbab6a94ed
|
@ -705,7 +705,18 @@ def test_sql_level():
|
|||
conn, cur = sql.get_connection_and_cursor()
|
||||
cur.execute('DROP TABLE wcs_meta')
|
||||
assert sql.get_sql_level(conn, cur) == 0
|
||||
sql.migrate()
|
||||
assert sql.get_sql_level(conn, cur) == sql.SQL_LEVEL
|
||||
|
||||
# insert negative SQL level, to trigger an error, and check it's not
|
||||
# changed.
|
||||
cur.execute('''UPDATE wcs_meta SET value = %s WHERE key = %s''',
|
||||
(str(-1), 'sql_level'))
|
||||
assert sql.get_sql_level(conn, cur) == -1
|
||||
with pytest.raises(RuntimeError):
|
||||
sql.migrate()
|
||||
assert sql.get_sql_level(conn, cur) == -1
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
|
||||
|
|
20
wcs/sql.py
20
wcs/sql.py
|
@ -449,30 +449,29 @@ def do_tracking_code_table():
|
|||
cur.close()
|
||||
|
||||
@guard_postgres
|
||||
def do_meta_table(conn=None, cur=None):
|
||||
def do_meta_table(conn=None, cur=None, insert_current_sql_level=True):
|
||||
own_conn = False
|
||||
if not conn:
|
||||
own_conn = True
|
||||
conn, cur = get_connection_and_cursor()
|
||||
|
||||
created = False
|
||||
cur.execute('''SELECT COUNT(*) FROM information_schema.tables
|
||||
WHERE table_name = %s''', ('wcs_meta',))
|
||||
if cur.fetchone()[0] == 0:
|
||||
cur.execute('''CREATE TABLE wcs_meta (id serial PRIMARY KEY,
|
||||
key varchar,
|
||||
value varchar)''')
|
||||
if insert_current_sql_level:
|
||||
sql_level = SQL_LEVEL
|
||||
else:
|
||||
sql_level = 0
|
||||
cur.execute('''INSERT INTO wcs_meta (id, key, value)
|
||||
VALUES (DEFAULT, %s, %s)''', ('sql_level', str(SQL_LEVEL)))
|
||||
created = True
|
||||
VALUES (DEFAULT, %s, %s)''', ('sql_level', str(sql_level)))
|
||||
|
||||
if own_conn:
|
||||
conn.commit()
|
||||
cur.close()
|
||||
|
||||
return created
|
||||
|
||||
|
||||
@guard_postgres
|
||||
def redo_views(conn, cur, formdef, rebuild_global_views=False):
|
||||
if get_publisher().get_site_option('postgresql_views') == 'false':
|
||||
|
@ -1570,9 +1569,7 @@ def migrate_global_views(conn, cur):
|
|||
|
||||
@guard_postgres
|
||||
def get_sql_level(conn, cur):
|
||||
if do_meta_table(conn, cur):
|
||||
# table has just been created, return sql_level as 0
|
||||
return 0
|
||||
do_meta_table(conn, cur, insert_current_sql_level=False)
|
||||
cur.execute('''SELECT value FROM wcs_meta WHERE key = %s''', ('sql_level', ))
|
||||
sql_level = int(cur.fetchone()[0])
|
||||
return sql_level
|
||||
|
@ -1581,6 +1578,9 @@ def get_sql_level(conn, cur):
|
|||
def migrate():
|
||||
conn, cur = get_connection_and_cursor()
|
||||
sql_level = get_sql_level(conn, cur)
|
||||
if sql_level < 0:
|
||||
# fake code to help in tetsting the error code path.
|
||||
raise RuntimeError()
|
||||
if sql_level < 1: # 1: introduction of tracking_code table
|
||||
do_tracking_code_table()
|
||||
if sql_level < 2: # 2: introduction of formdef_id in views
|
||||
|
|
Loading…
Reference in New Issue