La création d'une table est faite, dans le progiciel, par l'intermédiaire d'un outil nommé valfil. Cet outil est appelé directement par l'environnement de développement intégré à ADONIX, dans différents cas : création d'une table depuis l'éditeur des tables, modification d'une table depuis la même fonction, extraction ou intégration de données, intégration d'un patch conduisant au changement de structure d'une table de la base.
A la base, une table est définie par des fichiers physiques se trouvant dans le répertoire FIL du dossier, et par une table de la base de données. Les fichiers physiques sont les suivants :
Lorsque la table n'est pas stockée dans la base, mais a été déchargée sous forme d'un fichier transportable, on trouvera ses données sous la forme de deux ou trois fichiers supplémentaires :
Les informations contenues dans ces différents fichiers permettent la création d'une table avec des options « a minima » qui sont les suivantes :
Il peut être intéressant de définir des informations complémentaires utilisées lors de la création de la table et à chacune de ses mises à jour, pour modifier ces règles de dimensionnement ou de localisation, en tenant compte des particularités des différentes bases de données et ainsi obtenir de meilleures performances. Mais ceci suppose de stocker ces éléments hors de la base, afin que l'outil valfil puisse les appliquer à chaque fois qu'une validation ou une revalidation de la table sera faite. C'est pourquoi, il est possible de créer un fichier d'extension cfg dans le répertoire FIL. Ce fichier permet d'enregistrer un ensemble de directives optionnelles qui complèteront l'ordre SQL Create table ou Create Index qui sera réalisé par valfil. Tout comme les fichiers d'extension .srf, il est en format « ascii » (décrit ci-dessous).
Le contenu de ce fichier de configuration apparaît en bas de l'onglet de définition des index, en gestion des tables. La suite de ce document décrit la syntaxe d'écriture de ce fichier de configuration.
Ce fichier est composé de lignes de texte formant des sections. Chaque section commence par une étiquette préfixée par le caractère $, suivi d'un code indiquant pour quelle base de donnée est faite cette section (c'est soit ORACLE, soit MSSQL), suivi d'un caractère de soulignement et du nom de la table ou d'un index.
On y trouve ensuite des clauses encadrées par les caractères {" (accolade ouvrante suivie d'une double quote) et "} (accolade fermante précédée d'une double quote). Ces clauses seront passées telles quelles à la base de données lors de la création ou la modification de la table ou de l'index. S'il en existe plusieurs, elles sont passées les unes après les autres, séparées par une fin de ligne. Le nombre de caractères d'une clause est limitée à 256.
On y trouve ensuite le mot-clé End, qui termine une section.
Des commentaires peuvent être insérés dans le fichier de configuration, sous la forme de textes libres préfixés par le caractère # (dièse). Un commentaire ne peut se trouver qu'en début de ligne.
Dès lors qu'une section non vide (avec au moins une clause) existe, toutes les règles de dimensionnement ou de stockage par défaut de l'élément (table ou index) décrit sont ignorées au profit des clauses passées.
Une section correspondant à un élément inexistant, ou relative à une base de donnée qui n'est pas la base de données courante, est purement et simplement ignorée.
Les clauses de stockage peuvent être, par exemple :
Tablespace imposé | {" Tablespace ts1 "} |
Dimensionnement des extents de la table | {" Storage (Initial 100K Next 50K Maxextents 10 Pctincrease 20) "} |
Partitionnement d'une table sur plusieurs tablespaces selon la valeur d'un champ | {" partition by range (DHIDAT_0) (partition p1 values less then ('01-APR-1999') tablespace ts1, "} |
Dans les versions de moteur livrées avant la version 6.4, la seule clause de stockage possible est:
Volume imposé | {" On volume1 "} |
A partir de la version 6.4, il est également possible de définir que le premier index (et lui seul) est "clustered", c'est-à-dire que les données de la table dont physiquement rangées dans l'ordre de cette clé. Ceci peut être utilisé à des fins d'optimisation, le principe étant alors d'ajouter la section suivante (XXXX étant le nom de l'index en question) :
$CLUSTERED
{ "XXXX" }
End
Il est important, pour que cette directive soit prise en compte, de revalider la table en mode forcé après avoir modifié le fichier de configuration.
Attention : cette syntaxe pour définir l'index "clustered" est temporaire. En effet, dans la prochaine version majeure, la définition des index de ce type sera défini de façon plus naturelle dans le dictionnaire.
On trouvera ci-dessous un exemple de fichier de configuration. On notera qu'ici une partie seulement des directives seront utilisées (selon la base utilisée, puisque seules celles s'appliquant à la base de données réellement utilisée seront mises en œuvre).
Il est à noter que la fourniture standard du progiciel ne comporte aucun fichier de configuration, et qu'une mise à jour respecte les fichiers de configuration existants. En effet, les fichiers de configuration sont considérés comme des éléments d'implémentation et sont forcément liés à une installation donnée et pas à un standard quelconque.
| #--- Règle pour Oracle : Fichier des factures #--- Règle pour Sql Server #--- Premier index sous Oracle (Pas de règle pour les autres index) |
Le moteur ADONIX utilise des fichiers ascii de type « Unix », c'est-à-dire que le séparateur de ligne est le Line Feed (caractère de code 10), et non par Carriage Return, Line Feed (caractères 13, puis 10) comme pour les fichiers textes Windows™. Il est donc fondamental de ne pas éditer de tels textes sous notepad (ou du moins de ne pas les réécrire avec notepad), faute de quoi le moteur adonix serait en peine de les réexploiter. Par contre, sous UNIX, l'éditeur vi est utilisable. Les éditeur adonix gèrent tout à fait correctement ces fichiers.
Il est par ailleurs à noter que le format utilisé par ces fichiers est en réalité le format UTF8 (qui est un format permettant de traiter les caractères UNICODE - chinois par exemple - de façon totalement transparente. Il s'agit donc en réalité d'un codage sur 1 à 4 octets pour un seul caractère. Le format UTF8 correspond à l'ASCII pour tous les caractères non accentués, mais dès que le bit de poids le plus fort est1, le caractère est codé sur plus d'un octet. Ceci signifie que les caractères accentués français ne sont pas visualisés correctement avec les éditeurs « classiques » (mais les éditeurs adonix traitent tout à fait correctement ce transcodage).
En l'absence de fichier de configuration, l'algorithme de dimensionnement utilisé pour tailler les tables oracle est le suivant :