From 5444cf660a1c0f401f5f2cc3b30b71e22e0f5773 Mon Sep 17 00:00:00 2001 From: consultoria-as Date: Sun, 15 Feb 2026 02:12:36 +0000 Subject: [PATCH] fix(console): deduplicate models and engines in vehicle navigation Models and engines tables have many duplicate names (e.g. 24 ASTRA rows, 210 F-150 rows, 398 "5.7L 350CID V8" rows). Changed get_models() and get_engines() to use GROUP BY UPPER(name) instead of DISTINCT on id+name so each model/engine appears only once in the navigation lists. Co-Authored-By: Claude Opus 4.6 --- console/db.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/console/db.py b/console/db.py index cda8815..cee7676 100644 --- a/console/db.py +++ b/console/db.py @@ -67,16 +67,17 @@ class Database: if brand: return self._query( """ - SELECT DISTINCT m.id, m.name + SELECT MIN(m.id) AS id, m.name FROM models m JOIN brands b ON m.brand_id = b.id WHERE UPPER(b.name) = UPPER(?) + GROUP BY UPPER(m.name) ORDER BY m.name """, (brand,), ) return self._query( - "SELECT id, name FROM models ORDER BY name" + "SELECT MIN(id) AS id, name FROM models GROUP BY UPPER(name) ORDER BY name" ) def get_years( @@ -109,8 +110,13 @@ class Database: ) -> list[dict]: """Return engines, optionally filtered by brand/model/year.""" sql = """ - SELECT DISTINCT e.id, e.name, e.displacement_cc, e.cylinders, - e.fuel_type, e.power_hp, e.torque_nm, e.engine_code + SELECT MIN(e.id) AS id, e.name, + MAX(e.displacement_cc) AS displacement_cc, + MAX(e.cylinders) AS cylinders, + MAX(e.fuel_type) AS fuel_type, + MAX(e.power_hp) AS power_hp, + MAX(e.torque_nm) AS torque_nm, + MAX(e.engine_code) AS engine_code FROM engines e JOIN model_year_engine mye ON e.id = mye.engine_id JOIN models m ON mye.model_id = m.id @@ -128,7 +134,7 @@ class Database: if year: sql += " AND y.year = ?" params.append(int(year)) - sql += " ORDER BY e.name" + sql += " GROUP BY UPPER(e.name) ORDER BY e.name" return self._query(sql, tuple(params)) def get_model_year_engine(