# Commandes BERKIOS — tableaux, médias, SQL et stockage (v0.7.176)

Source : https://docs.berkios.online/studio/tableaux-medias-sql/ · Section : Studio · Documentation officielle BERKIOS (https://docs.berkios.online)


Les commandes sont enregistrées dans `bridge/system-command-registry.mjs` et exécutées par `bridge/system-commands.mjs`.

## Tableaux structurés
- `tableau-creer(rows)` : clone une liste de lignes objet.
- `tableau-ligne(rows, row)` : retourne le tableau avec une ligne ajoutée.
- `tableau-colonne(rows, column, values?)` : ajoute une colonne ; `values` doit avoir le même nombre d'éléments que `rows`.
- `tableau-trier-par-colonne(rows, column, direction?)` : `asc` par défaut, ou `desc`.
- `tableau-filtrer(rows, column, operator, value)` : opérateurs `egal`, `different`, `contient`, `superieur`, `inferieur`, `superieur_ou_egal`, `inferieur_ou_egal`.
- `tableau-agreger(rows, groupBy, aggregates?)` : agrégations `count`, `sum`, `avg`, `min`, `max`.
- `tableau-pivoter(rows, {index, column, value, operation?})` : `sum`, `avg`, `count`.

Les tableaux sont des listes d'objets, pas des chaînes séparées par virgules : les types, nombres, booléens et valeurs nulles sont préservés.

## SQL
- `sql-lire(table, filters?)`, `sql-inserer(table, data)`, `sql-mettre-a-jour(table, data, where)`, `sql-supprimer(table, where)`.
- `sql-executer(sql, params?)` exécute une instruction avec paramètres séparés.
- `sql-requete-parametree(sql, params?)` lit une requête paramétrée.
- `sql-transaction(actions)` exécute les actions atomiquement et tente un rollback en cas d'échec.

Les noms de tables/colonnes sont validés comme identifiants SQL simples. Les valeurs sont toujours transmises avec des placeholders. `sql-supprimer` exige au moins une condition pour éviter un effacement accidentel de table. L'hôte doit vérifier les permissions SQL avant d'appeler le moteur. L'adaptateur DB doit exposer `prepare(sql)` avec `run/all`, et `exec(sql)` ou `transaction(fn)` pour les transactions.

## Stockage
- `stocker(key, value)`, `charger(key)`, `oublier(key)` utilisent `options.storage` fourni par l'hôte (`get`, `set`, `delete`). Un `Map` fonctionne pour les tests et le stockage temporaire, mais n'est pas persistant au redémarrage. Pour la persistance réelle, l'hôte doit fournir un adaptateur durable (par exemple SQLite ou stockage local).

## Médias
- `image-charger`, `image-redimensionner`, `image-compresser`, `photo-prendre`, `fichier-choisir`, `audio-jouer`, `audio-enregistrer` délèguent aux fonctions de `options.media`. Ces opérations nécessitent une implémentation native/web et les permissions correspondantes. Si l'adaptateur n'est pas présent, le moteur renvoie `media_unavailable` au lieu de simuler une réussite.

## Intégration et tests
L'API exécutable se trouve dans `bridge/data-media-sql-commands.mjs`; le dispatcher du Bridge est `executeSystemCommand` dans `bridge/system-commands.mjs`. Voir `bridge/tests/data-media-sql-commands.test.mjs`.
