Reverse engineering direct d'options physiques

Lors du reverse engineering, les options physiques sont concaténées dans une seule instruction de chaîne. Toutefois, lorsque les tables système d'une base de données sont partitionnées (comme dans Oracle) ou fragmentées (comme dans Informix), les partitions/fragments partagent les mêmes attributs logiques, mais leurs propriétés physiques, telles que les spécifications de stockage, sont conservées dans chaque partition/fragment de la base de données. Les colonnes dans les partitions/fragments ont un type de données (LONG) qui permet le stockage de grandes quantités d'informations binaires non structurées.

Les options physiques dans ces colonnes ne pouvant pas être concaténées dans une instruction de chaîne lors du reverse engineering, SqlOptsQuery (catégorie Tables dans le SGBD) contient un appel à une requête définie par l'utilisateur qui va évaluer ces options physiques.

Dans Informix SQL 9, SqlOptsQuery est fourni par défaut avec les requêtes et variables utilisateur suivantes (le code suivant est un sous-ensemble de SqlOptsQuery) :

select
   t.owner,
   t.tabname,
   '%SqlFragQuery.FragSprt'||f.evalpos||'% %FragExpr'||f.evalpos||'% in %FragDbsp'||f.evalpos||'% ',
   f.evalpos
from
   informix.systables t,
   informix.sysfragments f
where 
   t.partnum = 0
   and t.tabid=f.tabid
[  and t.owner = '%SCHEMA%']
[  and t.tabname='%TABLE%']

A l'issue de l'exécution de SqlOptsQuery, la requête définie par l'utilisateur SqlFragQuery est exécutée pour évaluer FragDbsp n, FragExpr n, et FragSprt n. n représente evalpos qui définit la position du fragment dans la liste de fragmentation. n permet d'affecter des noms uniques aux variables, quel que soit le nombre de fragments définis dans la table.

FragDbsp n, FragExpr n, et FragSprt n sont des variables utilisateur qui seront évaluées pour récupérer des informations concernant les options physiques des fragments dans la base de données :

Variable utilisateur

Options physiques

FragDbsp n

Emplacement du fragment pour le fragment n

FragExpr n

Expression du fragment pour le fragment n

FragSprt n

Séparateur du fragment pour le fragment n

SqlFragQuery est défini comme suit :

{A, a(E="expression", R="round robin", H="hash"), B, b, C, c, D, d(0="", *=",")}
select
   'FragDbsp'||f.evalpos, f.dbspace,
   'FragExpr'||f.evalpos, f.exprtext,
   'FragSprt'||f.evalpos, f.evalpos
from
   informix.systables t,
   informix.sysfragments f
where 
   t.partnum = 0
   and f.fragtype='T'
   and t.tabid=f.tabid
[  and t.owner = '%SCHEMA%']
[  and t.tabname='%TABLE%']

L'en-tête de SqlFragQuery contient les noms de variable suivants.

{A, a(E="expression", R="round robin", H="hash"), B, b, C, c, D, d(0="", *=",")}

Seules les règles de conversion définies entre crochets seront utilisées lors de la concaténation de chaîne : "FragSprt0", qui contient 0 (f.evalpos), sera remplacé par " ", et "FragSprt1", qui contient 1, sera remplacé par ","

SqlFragQuery génère un jeu de résultats numérotés contenant autant de paires de nom de variable utilisateur (sans %) et de valeurs de variable que nécessaire, s'il existe de nombreuses variables à évaluer.

Les noms de variable définies par l'utilisateur sont remplacés par leur valeur dans l'instruction de chaîne pour les options physiques des fragments dans la base de données.