On détaille ici les principes de la sauvegarde de données dans une base relationnelle. La seule famille de bases gérée par la version actuelle de DIESE est PostgreSQL.
Les spécifications ci-dessous requièrent que la base manipulée ait été préalablement créée dans le système hôte. Pour exemple, sous un système Linux, la base de nom 'ma_base' est créée (pour le compte de login 'durand') puis supprimée avec les commandes suivantes :
createdb ma_base ... dropdb ma_baseLes spécifications autorisées :
DBEXPORT DESCRIPTOR "voiture" ALL "postgresql" "durand" "ma_base" CLOCK "vitesse" 2 "position" 3;
DBEXPORT DESCRIPTOR SIM_IDN "voiture" ALL postgresql (durand ma_base v_speed) CLOCK "vitesse" 2 "position" 3;
On demande que les valeurs de vitesse et de position soient sauvegardées dans une table de base de données relationnelle. La table réceptrice (de nom 'v_speed' dans l'exemple) doit avoir été créée (voir ci-dessous) avec un ensemble de champs englobant la liste des descripteurs mentionnés dans la spécification. Les spécifications CLOCK et ISO_8601 sont les seules autorisées pour le format de date.
Si la specification de la destination ne comprend pas le nom de la table (i.e. : '(durand ma_base)' seulement), alors les données seront envoyées dans une table de 'ma_base' dont le nom est celui de la classe d'entité concernée (ici 'voiture'). Bien entendu, cette table doit avoit été créée.
Le mot clé 'SIM_IDN' est optionnel. S'il est présent, chaque ligne envoyée dans la table contiendra une valeur significative pour le champ 'sim_idn'. Ce champ doit alors avoit été prévu dans la structure de la table. Si absent, l'éventuel champ 'sim_idn' de la table restera vide pour toutes les lignes envoyées. La valeur envoyée pour ce champ est le numéro de la simulation courante. Ce numéro, 1 par défaut, est généralement attribué par l'option -idn de la ligne de commande (voir la page 'Interprétation des arguments de la commande de simulation'). Il est accessible dans le code utilisateur par le service GetNumId de la classe Simulation.
DBNEWTABLE POSTGRESQL (durand ma_base v_speed) sim_idn integer instanceName text T integer position numeric vitesse numeric;
On demande la création de la table 'v_speed' dans la base 'ma_base'. On précise l'utilisateur qui réalise cette tâche ('durand'). La base doit avoir été créée préalablement. Si la table existe déjà, cette demande est ignorée. La variante suivante est autorisée ... :
DBNEWTABLE POSTGRESQL (durand (mon_pwd) ma_base v_speed) sim_idn integer instanceName text T integer position numeric vitesse numeric;
... qui permet de protéger l'accès à la table par un mot de passe.
La spécification de la base (trois ou quatre éléments) est suivie par la description des champs, chacun avec son nom et son type. Les noms des trois premiers champs de cet exemple sont spéciaux et réservés : le premier champ recevra pour valeur le numéro de la simulation, le deuxième recevra le nom de l'instance dont on sauvegarde l'état, le troisième recevra le moment auquel l'état sauvegardé se rapporte. Ces champs peuvent ne pas exister, et s'ils existent, ce peut être à un emplacement quelconque dans la table.