From c6aeb602aa9c78e8982bfa0ab23ad7a1cf554351 Mon Sep 17 00:00:00 2001 From: Michael Zikeli <michael.zikeli@fau.de> Date: Thu, 6 Feb 2025 17:46:02 +0100 Subject: [PATCH] Enhance benchmark_configs_RDM.py to check existing columns before updating schema, preventing errors from duplicate columns. --- .../simulation_setup/benchmark_configs_RDM.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/benchmarks/UniformGridGPU/simulation_setup/benchmark_configs_RDM.py b/apps/benchmarks/UniformGridGPU/simulation_setup/benchmark_configs_RDM.py index fb3422479..82222270e 100755 --- a/apps/benchmarks/UniformGridGPU/simulation_setup/benchmark_configs_RDM.py +++ b/apps/benchmarks/UniformGridGPU/simulation_setup/benchmark_configs_RDM.py @@ -189,12 +189,23 @@ class Scenario: result = data sequenceValuesToScalars(result) num_tries = 4 - # check multiple times e.g. may fail when multiple benchmark processes are running table_name = f"runs_{data['stencil']}_{data['streamingPattern']}_{data['collisionSetup']}_{prod(self.blocks)}" table_name = table_name.replace("-", "_") # - not allowed for table name would lead to syntax error + for num_try in range(num_tries): try: - checkAndUpdateSchema(result, table_name, self.db_file_name) + # Check existing columns + conn = sqlite3.connect(self.db_file_name) + c = conn.cursor() + c.execute(f"PRAGMA table_info({table_name})") + existing_columns = [info[1] for info in c.fetchall()] + conn.close() + + # Filter out existing columns + new_columns = {k: v for k, v in result.items() if k not in existing_columns} + + if new_columns: + checkAndUpdateSchema(new_columns, table_name, self.db_file_name, alter_table=True) storeSingle(result, table_name, self.db_file_name) break except sqlite3.OperationalError as e: -- GitLab