import sqlite3 from ..connection import connect from ..slugify import slugify from .get_definition import get_definition def delete_field(slug, definition_id, field_id): """CRUD — Update d'une définition : retire un champ. Exécute un vrai ALTER TABLE ... DROP COLUMN (SQLite ≥ 3.35). Sur une version de SQLite trop ancienne pour DROP COLUMN, le champ est retiré de la définition (le moteur ne le proposera plus dans les formulaires) mais la colonne SQL peut subsister sans casser quoi que ce soit d'autre.""" definition = get_definition(slug, definition_id) field = next((f for f in definition["fields"] if f["id"] == field_id), None) if not field: return col = slugify(field["name"]).replace("-", "_") if field["type"] == "relation": col += "_id" conn = connect(slug) try: conn.execute(f"ALTER TABLE {definition['table_name']} DROP COLUMN {col}") except sqlite3.OperationalError: pass conn.execute("DELETE FROM _fields WHERE id = ?", (field_id,)) conn.commit() conn.close()