1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| /// <summary>interface d'un générateur de Requête SQL gérant des clés primaires auto-incrémentées</summary>
ISLTDBQuerySQLIdentityGenerator = interface(ISLTDBQuerySQLGenerator)
['{D5543140-FECB-4FC8-8238-FEE76A6E5515}']
/// <summary>Génère et Prépare le SQL INSERT</summary>
/// <param name="ATableName">Nom de la table concernée par l'insertion</param>
/// <param name="AFieldValueNames">Nom des champs de la table pour lesquels seront insérés des valeurs dans la DB</param>
/// <param name="AParamValueNames">Noms des paramètres dont les valeurs seront insérées dans la DB. L'ordre des nom de paramètres AParamValueNames doit être le même pour les types dans AParamValueDataTypes pour générer une clause VALUES correcte</param>
/// <param name="AParamValueDataTypes">Type de données des paramètres dont les valeurs seront insérées dans la DB. L'ordre des types de paramètres AParamValueDataTypes doit être le même que les noms présents dans AParamValueNames pour générer une clause VALUES correcte</param>
/// <param name="AIdentityFieldName">Nom du Champ utilisé comme Identité (assimable à Clé Primaire AutoIncrémentée) dont la valeur peut-être fournie ou récupérée</param>
/// <param name="AIdentityFormula">Formule de l'Identité. Doit se conformer à la syntaxe du SQL de la DB ciblée. ISLTDBQuerySQLGeneratorSequenceManager fournit les instructions nécessaires pour obtenir cette formule SQL tout en conservant un code d'appel générique et indépendant de la DB ciblée.
/// <para>Cela peut contenir le nom d'un paramètre présent dans AParamValueNames, sa valeur sera utilisée y compris le variant Null,</para>
/// <para>cela peut contenir aussi le mot clé NULL qui sera utilisée comme une formule injecté directement dans le SQL sans passer par un Bind,</para>
/// <para>cela peut évidemment contenir une formule comme l'appel à une procédure stockée ou l'utilisation d'une séquence.</para></param>
function InsertPrepare(const ATableName: string; const AFieldValueNames: array of string; const AParamValueNames: array of string; const AParamValueDataTypes: array of TFieldType; const AIdentityFieldName: string; const AIdentityFormula: string): Boolean;
/// <summary>Execute le SQL INSERT préparé</summary>
/// <param name="AParamValueNames">Noms des paramètres dont les valeurs seront insérées dans la DB. L'ordre des nom de paramètres AParamValueNames doit être le même pour les valeurs dans AParamValues</param>
/// <param name="AParamValues">Valeurs des paramètres qui seront insérées dans la DB. L'ordre des valeurs de paramètres AParamValues doit être le même que les noms présents dans AParamValueNames</param>
function InsertExecute(const AParamValueNames: array of string; const AParamValues: array of Variant): TSLTDBQuerySQLGeneratorInsertedIdentity;
/// <summary>Génère et Prépare le SQL UPDATE</summary>
/// <param name="ATableName">Nom de la table concernée par la mise à jour</param>
/// <param name="AFieldValueNames">Nom des champs de la table qui dont les valeurs seront modifiés dans la DB</param>
/// <param name="AParamValueNames">Noms des paramètres dont les valeurs seront modifiées dans la DB. L'ordre des nom de paramètres AParamValueNames doit être le même pour les types dans AParamValueDataTypes pour générer une clause SET correcte</param>
/// <param name="AParamValueDataTypes">Type de données des paramètres dont les valeurs seront modifiées dans la DB. L'ordre des types de paramètres AParamValueDataTypes doit être le même que les noms présents dans AParamValueNames pour générer une clause SET correcte</param>
/// <param name="AIdentityFieldName">Nom du Champ utilisé comme Identité (assimable à Clé Primaire AutoIncrémentée) dont la valeur sera utilisée comme critère de mise à jour dans le WHERE</param>
function UpdatePrepare(const ATableName: string; const AFieldValueNames: array of string; const AParamValueNames: array of string; const AParamValueDataTypes: array of TFieldType; const AIdentityFieldName: string): Boolean;
/// <summary>Execute le SQL UPDATE préparé</summary>
/// <param name="AParamValueNames">Noms des paramètres dont les valeurs seront modifiées dans la DB. L'ordre des nom de paramètres AParamValueNames doit être le même pour les valeurs dans AParamValues</param>
/// <param name="AParamValues">Valeurs des paramètres qui seront modifiées dans la DB. L'ordre des valeurs de paramètres AParamValues doit être le même que les noms présents dans AParamValueNames</param>
function UpdateExecute(const AParamValueNames: array of string; const AParamValues: array of Variant): Boolean;
/// <summary>Génère et Prépare le SQL DELETE</summary>
/// <param name="ATableName">Nom de la table concernée par la supression</param>
/// <param name="AIdentityFieldName">Nom du champ utilisé comme clé primaire et critère de suppression</param>
/// <param name="AIdentityParamName">Nom du paramètre utilisé comme clé primaire et critère de suppression</param>
/// <param name="AIdentityParamType">Type du paramètre utilisé comme clé primaire et critère de suppression, principalement ftInteger ou ftLargeInt</param>
function DeletePrepare(const ATableName: string; const AIdentityFieldName: string; const AIdentityParamName: string; const AIdentityParamType: TFieldType): Boolean;
/// <summary>Execute le SQL UPDATE DELETE</summary>
/// <param name="AIdentityParamName">Nom du paramètre utilisé comme clé primaire et critère de suppression</param>
/// <param name="AIdentityParamValue">Valeur du paramètre utilisé comme clé primaire et critère de suppression</param>
function DeleteExecute(const AIdentityParamName: string; const AIdentityParamValue: Variant): Boolean;
end;
/// <summary>interface donnant accès à une potentielle gestion des séquences d'un générateur de Requête SQL gérant des clés primaires auto-incrémentées</summary>
ISLTDBQuerySQLGeneratorSequenceManager = interface
['{8D666D45-1818-4330-8D4E-BBC63F2521D7}']
/// <summary>construit un fragment de SQL contenant l'appel à une Séquence</summary>
/// <param name="ASequenceName">Noms dde la séquence dont l'on souhaite récupérer la valeur suivante</param>
/// <remarks>Un module métier utilisant ISLTDBQuerySQLIdentityGenerator.InsertPrepare ne connait pas forcément le type de la DB exploitée, il ne peut donc pas fournir le contenu SQL de AIdentityFormula adapté à sa DB, BuildFormulaFromSequenceName permet de conserver un code d'appel générique tout en s'adaptant aux différentes variantes syntaxiques gérés par les interpréteurs SQL.</remarks>
function BuildFormulaFromSequenceName(const ASequenceName: string): string;
end; |
Partager