5
-- /* Exemple de jointure */
--public static String EP_T0_SELECT_BY_T1 =
SELECT t0.Attribute1, t1.Attribute1
FROM T0 t0, T1 t1
WHERE t0.ForeignKeyT1 = t1.IdGlobal AND t1.Attribute2 = ?
/
Un point important est l'utilisation du symbole '?', qui correspond à une valeur d'attribut non
encore déterminée.
En effet, contrairement à l'utilisation classique client/serveur des SGBD, où l'on spécifie
directement la valeur voulue des attributs dans la clause 'WHERE', on crée ici des requêtes qui
peuvent être vues comme des fonctions prenant en paramètre la valeur des attributs.
L’intérêt est de disposer des plans d’exécution des requêtes spécifiées dans le fichier queries.sql,
et de pouvoir les exécuter plusieurs fois avec des valeurs d’attributs variables, sans avoir besoin
de créer un nouveau plan d’exécution { chaque fois que la valeur change.
Néanmoins, si on le souhaite, on peut spécifier directement la ou les valeurs d'attribut(s) dans la
requête. Cela implique que cette requête sera statique et ne pourra prendre d'autres valeurs
dans la clause WHERE.
Par exemple :
-- /* Exemple de selection statique */
--public static String EP_T0_SELECT_BY_STRING =
SELECT * FROM T0 WHERE Attribute1 = 'Something'
/
Le texte présent après les ‘--‘ est considéré comme un commentaire par QGen, et écrit tel quel
dans le fichier de sortie.
Chaque requête est précédée par la déclaration d’une String statique en Java, par exemple:
--public static String EP_T0_SELECT_BY_STRING =
Le QEP produit sera considéré comme une chaine de caractère dans le fichier Java généré, et
sera appelé plus tard par le programme utilisant JDBC pour exécuter la requête.
4 Résultat produit
Le résultat généré par QGen est une classe Java qui sera utilisée par l’application cliente.
La classe est constituée d'une String statique META, qui correspond au codage du schema.sql,
ainsi que des requêtes transformées en QEP.
Chaque QEP correspond à une String statique dans la classe.
5 Erreurs à l’exécution
Une exécution qui s'est bien déroulée affichera 'DONE' { la dernière ligne de l’output dans la
console.
Autrement, le programme plantera et affichera une ou plusieurs erreurs, qui indiqueront la
plupart du temps où se situe l’erreur.
Néanmoins, si cela ne suffit pas, la façon la plus simple pour savoir où a planté le programme est
d'afficher QEP.java et voir où l’exécution s’est arrêtée :
o Si QEP.java est vide : l'erreur est probablement au niveau du schéma : vérifiez la syntaxe
de la création des tables et des SKT. Vérifiez également que les fichiers passés en
paramètres sont les bons.
o Si QEP.java s'est arrêté au niveau d'un QEP : la requête est probablement mal déclarée.
Vérifier la syntaxe et la cohérence de la requête. Des optimisations dans QGen font
qu'une requête syntaxiquement correcte mais sémantiquement incohérente plantera
probablement.