From e1298b3006d19c9f7f340637bc29dccb34c1a958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 11 Jul 2017 11:07:17 +0200 Subject: [PATCH] sql: add possibility to drop formdef table (#17524) --- tests/test_sql.py | 24 ++++++++++++++++++++++++ wcs/sql.py | 13 +++++++++++++ 2 files changed, 37 insertions(+) diff --git a/tests/test_sql.py b/tests/test_sql.py index 00aa1dbd..f8251456 100644 --- a/tests/test_sql.py +++ b/tests/test_sql.py @@ -641,6 +641,30 @@ def test_sql_table_add_and_remove_fields(): data_class = test_formdef.data_class(mode='sql') data_class.select() +@postgresql +def test_sql_table_wipe_and_drop(): + test_formdef = FormDef() + test_formdef.name = 'tests wipe and drop' + test_formdef.fields = [] + test_formdef.store() + assert test_formdef.table_name is not None + data_class = test_formdef.data_class(mode='sql') + assert data_class.count() == 0 + conn, cur = sql.get_connection_and_cursor() + assert table_exists(cur, test_formdef.table_name) + conn.commit() + cur.close() + + data_class.wipe(drop=True) + conn, cur = sql.get_connection_and_cursor() + assert not table_exists(cur, test_formdef.table_name) + assert not table_exists(cur, test_formdef.table_name + '_evolutions') + conn.commit() + cur.close() + + test_formdef.store() + conn, cur = sql.get_connection_and_cursor() + assert table_exists(cur, test_formdef.table_name) @postgresql def test_sql_table_select(): diff --git a/wcs/sql.py b/wcs/sql.py index b444d735..b705e91c 100644 --- a/wcs/sql.py +++ b/wcs/sql.py @@ -1465,6 +1465,19 @@ class SqlFormData(SqlMixin, wcs.formdata.FormData): cur.close() @classmethod + @guard_postgres + def wipe(cls, drop=False): + conn, cur = get_connection_and_cursor() + if drop: + cur.execute('''DROP TABLE %s_evolutions CASCADE''' % cls._table_name) + cur.execute('''DROP TABLE %s CASCADE''' % cls._table_name) + else: + cur.execute('''DELETE FROM %s_evolutions''' % cls._table_name) + cur.execute('''DELETE FROM %s''' % cls._table_name) + conn.commit() + cur.close() + + @classmethod def do_tracking_code_table(cls): do_tracking_code_table() -- 2.13.2