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