Skip to end of metadata
Go to start of metadata

Templates génériques 

 

Les templates SQL sont des chaînes de texte SQL qui se veulent indépendantes du moteur SQL utilisé. Le SQL est de préférence de type SQL paramétré.

Les placeholders (nombres entre accolades) suivent un ou plusieurs schémas généraux selon le type de template : INSERT, SELECT, UPDATE, DELETE.

Formats des valeurs à passer pour les placeholders de la clause WHERE

Les placeholders sont passés en tant que paramètres des méthodes de l'API de haut niveau. Les formes principales de ces paramètres sont une chaîne ou une liste de chaînes. Ces chaînes prennent quatre formats différents, chacun a une sémantique particulière :

FormatDescription

Exemple de valeur en entrée

Chaîne formatée par l'ORM

pour la requête SQL

Chaîne de texte sans espace

Nom de propriété d'un IDatabaseEntityObject qui sera cherché dans le mapping,

pour la table correspondant à ce IDatabaseEntityObject.

Le résultat est le nom de colonne en base de données, avec la protection du champ selon le moteur de base de données.

IdCustomer

[CustomerId] (MS SQL)

`CustomerId` (MySQL)

Caractère #

Indication d'un paramètre dynamique.

Le résultat est une chaîne "@p" avec nombre incrémental.

#@p0
Chaîne commençant par @

Indication d'un paramètre dynamique nommé.

Les caractères interdits en SQL : non alphanumériques et espaces, sont supprimés du nom.

@IdCustomer
@this_is_a_test

@a space

@idcustomer

@this_is_a_test

@aspace

Chaîne commençant par %

Indication d'un nom de colonne littéral.

Utile dans le cas où une partie du template est du SQL dynamique.

%CustomerId

[CustomerId] (MS SQL)

`CustomerId` (MySQL)

Chaîne commençant par %UL%Littéral non protégé.
A utiliser avec parcimonie 
%UL%ThisIsATestThisIsATest


Templates dépendants du moteur

La définition de ce type de template est volontairement limitée aux éléments spécifiques nécessaires à chaque provider pour :

  • protéger les noms de table et de colonne
  • récupérer l'identifiant du dernier enregistrement inséré.

 

Templates dépendants du moteur
  <orm:ProviderSpecific>
    <!-- SQLite -->
    <orm:Provider xsi:type="orm:DoubleFE" name="System.Data.SQLite" StartFieldEncloser="[" EndFieldEncloser="]">
        <orm:Select name="getlastinsertid">select last_insert_rowid();</orm:Select>
    </orm:Provider>
    <!-- MySQL -->
    <orm:Provider xsi:type="orm:SingleFE" name="MySql.Data.MySqlClient" FieldEncloser="`">
        <orm:Select name="getlastinsertid">select last_insert_id();</orm:Select>
    </orm:Provider>
    <!-- MS SQL -->
    <orm:Provider xsi:type="orm:DoubleFE" name="System.Data.SqlClient" StartFieldEncloser="[" EndFieldEncloser="]">
        <orm:Select name="getlastinsertid">select scope_identity();</orm:Select>
    </orm:Provider>
    <!-- POSTGRESQL -->
    <orm:Provider xsi:type="orm:SingleFE" name="Npgsql" FieldEncloser="&quot;">
      <orm:Select name="getlastinsertid">select lastval();</orm:Select>
    </orm:Provider>
    <!-- Oracle -->
    <orm:Provider xsi:type="orm:DoubleFE" name="### ORACLE ###" StartFieldEncloser="" EndFieldEncloser="">
    </orm:Provider>
    <!-- SQL Server Compact -->
    <orm:Provider xsi:type="orm:DoubleFE" name="### SQL Server Compact ###" StartFieldEncloser="" EndFieldEncloser="">
    </orm:Provider>
    <!-- pour test unitaire de configuration NOK -->
    <!--<orm:Provider xsi:type="orm:DoubleFE" name="not existing provider" StartFieldEncloser="" EndFieldEncloser="">
    </orm:Provider>-->
  </orm:ProviderSpecific>

Remarques

Si on utilise l'API de bas niveau pour exécuter une commande SQL, le code SQL fourni doit se terminer par un ; car dans le cas où la commande est de type un INSERT, un ; est attendu.
Le code SQL du fichier XML de templates est vérifié pour ajouter un ; final lorsqu'il manque.

  • No labels