Data Injection Markup Language
Document test : extension SQL
Auteur : V.G. FREMAUX
E.I.S.T.I. / Cergy, France
Laboratoire de Recherches Appliquées / NTIC
Version: FR 1.1 / Février 2003, EN 1.1 / February 2003
Autres documents
Spécification DIML (RFC locale) : essi_fr.dim
Document de test DIML : dimltest_fr.dim
Tutoriel complet sur le DIML : accueil du tutoriel (en ligne)
Objet de ce document
Ce document expérimente les fonctions d'extension SQL du moteur ESSI.
Instruction <%sqlsource
<%sqlsource
name="testsource" source="DBI:mysql:mysql;host=localhost"
login="root" password="" %>
Cette instruction permet de définir des connexions SQL à n'importe quel modèle compatible DBI Perl. Les connexions sont mémorisées, et peuvent être utilisées par n'importe quelle autre instruction de cette extension.
La variable SQL::LAST_DEFINED_SOURCE contient le dernier nom de modèle SQL défini par l'instruction <%sqlsource. Il sert de connexion par défaut pour l'instruction <%sql :
<%%SQL::LAST_DEFINED_SOURCE%%> |
testsource |
Instructions de requête : <%sql
Syntaxes reconnues
<%sql
source="source"
query="diml-escaped-sql"
alias="aliased-scope-prefix"
[fromhtml] %>
<%sql
source="source"
query=DIML_VAR
alias="aliased-scope-prefix"
[fromhtml] %>
<%sql
source="source"
alias="aliased-scope-prefix"
[fromhtml] %>
diml-query
<%endsql %>
Requête en forme littérale
<%sql
source="testsource" query="SELECT * FROM user" %>
Cette instruction permet d'effctuer un transfert d'une table vers l'espace DIML en construisant automatiquement les tables de sorties. La requête doit être une requête de lecture pour produire un résultat tangible.
Requête dans un template
<%sql
source="testsource" query=%SQL_QUERY% %>
<TEMPLATE ID="SQL_QUERY">
SELECT
*
FROM
user
WHERE
host = 'localhost'
</TEMPLATE>
Cette deuxième forme permet de lire une requête dans une variable ou un template DIML. Elle permet par exemple de rassembler les requêtes d'un projet dans un document DIML externe, qui après importation dans ce document, pourront être appelées sous une forme courte. Cette forme est surtout utile pour les requêtes utilisées plusieurs fois dans un projet.
Requête "inline"
<%sql
source="testsource" %>
SELECT
*
FROM
user
WHERE
User != ''
<%endsql %>
Cette dernière forme permet d'écrire directement en ligne la requête SQL. Elle convient aux requêtes longues et complexes utilisées une seule fois dans un projet. Dans ce cas, l'attribut query est INTERDIT. La requête est capturée entre la tête d'instruction <%sql... et la fin d'instruction <%endsql %>. Elle peut contenir des instructions DIML, mais aucune instruction liée au SQL.
Instructions d'entrée de données : <%sqlin
Syntaxes reconnues
<%sqlin
source="data-source"
filter="variable-selecting-prefix"
[tohtml]
[quote="database-quote-escaping"]
query="query-head"
crypt="field-list-for-encryption"
[filter="perl-regexp"] %>
Entrée de formulaire
Cette forme permet d'alimenter une table d'une base de données avec les données d'un formulaire. Les données à insérer sont extraites du flux CGI par "reconnaissance de forme". Une requête de ce type ne peut effectuer qu'une seule écriture de ligne dans une table. Par contre,
en utilisant des filtres de reconnaissance différents, plusieurs appels de l'instruction <%sqlin peuvent alimenter plusiers tables différentes à partir du flux CGI d'entrée.
<%sqlin source="testsource" filter="FORM::sql_" [tohtml]
[quote="\'"] query="REPLACE INTO user" crypt="password" %>
|