Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 44 additions & 20 deletions src/testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,39 +224,63 @@ def key(self):
def _set_value(self, key, value):
self._init_db()
value = json.dumps(value, sort_keys=True)
query = """
INSERT INTO {} (key, value) VALUES (%s, %s)
ON CONFLICT (key) DO UPDATE SET value=EXCLUDED.value
""".format(DATA_TABLE)
self._data_table_cr.execute(query, (key, value))
self._data_table_cr._cnx.commit()
klass = None
for mro in type(self).mro():
if mro.__module__ in ("odoo.upgrade.testing", "odoo.addons.base.maintenance.migrations.testing"):
klass = mro.__name__
break

cr = self._data_table_cr
query = util.format_query(
cr,
"""
INSERT INTO {} (key, class, value) VALUES (%s, %s, %s)
ON CONFLICT (key) DO UPDATE SET value=EXCLUDED.value, class=EXCLUDED.class
""",
DATA_TABLE,
)
cr.execute(query, (key, klass, value))
cr._cnx.commit()

def _get_value(self, key):
self._init_db()
query = "SELECT value FROM {} WHERE key = %s".format(DATA_TABLE)
self._data_table_cr.execute(query, [key])
result = self._data_table_cr.fetchone()
cr = self._data_table_cr
query = util.format_query(cr, "SELECT value FROM {} WHERE key = %s", DATA_TABLE)
cr.execute(query, [key])
result = cr.fetchone()
if not result:
raise KeyError(key)
return result[0]

def _key_exists(self, key):
self._init_db()
query = "SELECT 1 FROM {} WHERE key = %s".format(DATA_TABLE)
self._data_table_cr.execute(query, [key])
return bool(self._data_table_cr.rowcount)
cr = self._data_table_cr
query = util.format_query(cr, "SELECT 1 FROM {} WHERE key = %s", DATA_TABLE)
cr.execute(query, [key])
return bool(cr.rowcount)

def _init_db(self):
if not UpgradeCommon.__initialized:
self._data_table_cr.execute("SELECT 1 FROM pg_class WHERE relname=%s", [DATA_TABLE])
if not self._data_table_cr.rowcount:
cr = self._data_table_cr
cr.execute("SELECT 1 FROM pg_class WHERE relname=%s", [DATA_TABLE])
if not cr.rowcount:
_logger.info("Creating table %s", DATA_TABLE)
query = """ CREATE TABLE {} (
key VARCHAR(255) PRIMARY KEY,
value JSONB NOT NULL
)""".format(DATA_TABLE)
self._data_table_cr.execute(query)
self._data_table_cr._cnx.commit()
query = util.format_query(
cr,
"""
CREATE TABLE {} (
key VARCHAR(255) PRIMARY KEY,
class varchar,
value JSONB NOT NULL
)
""",
DATA_TABLE,
)
cr.execute(query)
else:
# upgrade existing table
util.create_column(cr, DATA_TABLE, "class", "varchar")
cr._cnx.commit()
UpgradeCommon.__initialized = True

def _setup_registry(self):
Expand Down