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 :
Format | Description | 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 pour la table correspondant à ce 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 @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%ThisIsATest | ThisIsATest |
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é.
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.