%! WCT_SYSTEM INSTALLED %> <%template file="F:/wwwroot/diml/wct/proto/WCT_SYSTEM/templates.dim#WCT_SYSTEM::WCT_PATHES" %> <%set %WCT_SESSION::ID% = "1" %> <%import file="<%%WCT_ROOT_PATH%%>WCT_SESSION/templates.dim#*" %> <%%WCT_SESSION::CHECK()%%> <%! /WCT_SYSTEM INSTALLED %> <%import file="../globals.dim#*" %>
<%set %TITRE% = "DIML - Séquence démo" %> <%set %SHOW_CONTROL% = "OUI" %> <%%IntroFile%%>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
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)
Ce document expérimente les fonctions d'extension SQL du moteur ESSI.
<%sqlsource name="testsource" source="DBI:mysql:mysql;host=localhost" login="root" password="" %><%sqlsource name="testsource" source="DBI:mysql:testsql;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%%> | <%%SQL::LAST_DEFINED_SOURCE%%> |
<%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 %>
<%sql source="testsource" query="SELECT * FROM user" %><%sql source="testsource" query="SELECT * FROM user" %>
Cette instruction permet d'effectuer 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.
Hosts | User | Password |
<%%SQL::Host[]%%> | <%%SQL::User[]%%> | <%%SQL::Password[]%%> |
<%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. <%sql source="testsource" query=%SQL_QUERY% alias="SQL2::" %> SELECT * FROM user WHERE host = 'localhost'
Hosts | User | Password |
<%%SQL2::Host[]%%> | <%%SQL2::User[]%%> | <%%SQL2::Password[]%%> |
<%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. <%sql source="testsource" alias="SQL3::" %> SELECT * FROM user WHERE User != '' <%endsql %>
Hosts | User | Password |
<%%SQL3::Host[]%%> | <%%SQL3::User[]%%> | <%%SQL3::Password[]%%> |
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" input="FORM::sql_" [tohtml] [quote="\'"] query="REPLACE INTO user" crypt="password" %>