Package io.vertigo.basics.task
Class AbstractTaskEngineSQL
java.lang.Object
io.vertigo.datamodel.task.model.TaskEngine
io.vertigo.basics.task.AbstractTaskEngineSQL
- Direct Known Subclasses:
TaskEngineInsert,TaskEngineInsertBatch,TaskEngineProc,TaskEngineProcBatch,TaskEngineSelect
Fournit des méthodes de haut niveau pour les services de type SQL.
Un Service SQL est composé de paramètre de type primitif, DTO ou DTC, en IN, OUT ou INOUT et d'une requête SQL sous forme de texte. La requête est parsée puis préparée pour replacer les paramètres dynamo par des variables bindées. Grammaire des requêtes :
où est :
"primitif" : LON_IDENTIFIANT_ID ou DAT_DATE_SAISIE
"champ de dto" :. : DTO_PERSONNE.NOM ou encore DTO_PERSONNE.PER_ID
"champ de dtc" :.<n°_de_ligne>. : DTC_PERSONNE.2.NOM ou encore DTC_PERSONNE.0.PER_ID
Les DTO et DTC n'ont pas besoin d'être en OUT ou en INOUT pour être mutées.
Intérêt de gérer des paramètres DTC : il existe maintenant un moyen d'accéder aux champs d'une DTC, qui peut être utilisé pour créer des ServiceProviderSQL pseudo-dynamiques (ajout de mots clefs dans la requête SQL du KSP pour gérer des itérations sur DTC par ex).
Exemple de requête :
SELECT TOTO_ID, NOM
FROM TOTO
WHERE TOTO_ID = #LON_TOTO_ID#
AND NOM like #DTO_FILTRE.NOM#||'%'
AND TYPE_ID IN (#DTC_TYPE.0.TYPE_ID#,#DTC_TYPE.1.TYPE_ID#,#DTC_TYPE.2.TYPE_ID#)
De plus permet de créer du SQL dynamiquement interprété. Les paramètres IN de la tache peuvent être invoqués pour construire la requête SQL. Exemple : request = " Select * From PRODUIT <%if (dtoProduitCritere.getPrdLibelle()!=null) {%> Where PRD_LIBELLE like #DTO_PRODUIT_CRITERE.PRD_LIBELLE#||'%%' <%}%> order by <%=1%>";
Un Service SQL est composé de paramètre de type primitif, DTO ou DTC, en IN, OUT ou INOUT et d'une requête SQL sous forme de texte. La requête est parsée puis préparée pour replacer les paramètres dynamo par des variables bindées. Grammaire des requêtes :
## : paramètre IN %% : paramètre OUT @@ : paramètre INOUT où
"primitif" : LON_IDENTIFIANT_ID ou DAT_DATE_SAISIE
"champ de dto" :
"champ de dtc" :
Les DTO et DTC n'ont pas besoin d'être en OUT ou en INOUT pour être mutées.
Intérêt de gérer des paramètres DTC : il existe maintenant un moyen d'accéder aux champs d'une DTC, qui peut être utilisé pour créer des ServiceProviderSQL pseudo-dynamiques (ajout de mots clefs dans la requête SQL du KSP pour gérer des itérations sur DTC par ex).
Exemple de requête :
SELECT TOTO_ID, NOM
FROM TOTO
WHERE TOTO_ID = #LON_TOTO_ID#
AND NOM like #DTO_FILTRE.NOM#||'%'
AND TYPE_ID IN (#DTC_TYPE.0.TYPE_ID#,#DTC_TYPE.1.TYPE_ID#,#DTC_TYPE.2.TYPE_ID#)
De plus permet de créer du SQL dynamiquement interprété. Les paramètres IN de la tache peuvent être invoqués pour construire la requête SQL. Exemple : request = " Select * From PRODUIT <%if (dtoProduitCritere.getPrdLibelle()!=null) {%> Where PRD_LIBELLE like #DTO_PRODUIT_CRITERE.PRD_LIBELLE#||'%%' <%}%> order by <%=1%>";
- Author:
- pchretien, npiedeloup
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final io.vertigo.commons.transaction.VTransactionResourceId<SqlConnection>Identifiant de ressource SQL par défaut.static final StringNom de l'attribut recevant le nombre de lignes affectées par un Statement. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractTaskEngineSQL(io.vertigo.commons.script.ScriptManager scriptManager, io.vertigo.commons.transaction.VTransactionManager transactionManager, SqlManager sqlManager, SmartTypeManager smartTypeManager) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract OptionalIntdoExecute(SqlStatement sqlStatement, SqlConnection connection) Exécution de la requête.voidexecute()protected SqlConnectionProviderIl est possible de surcharger la configuration SQL d'un service.protected final SmartTypeManagerprotected final SqlManagerprotected StringRetourne la Query qui sera parsée Par défaut il s'agit de la request définie sur le serviceprotected io.vertigo.commons.transaction.VTransactionResourceId<SqlConnection>protected final StringpreProcessQuery(String sqlQuery) Permet de créer du SQL dynamiquement interprété.protected voidsetNamedParameters(SqlStatementBuilder sqlStatementBuilder) Methods inherited from class io.vertigo.datamodel.task.model.TaskEngine
getContextProperties, getContextProperty, getTaskDefinition, getValue, process, setResult
-
Field Details
-
SQL_MAIN_RESOURCE_ID
public static final io.vertigo.commons.transaction.VTransactionResourceId<SqlConnection> SQL_MAIN_RESOURCE_IDIdentifiant de ressource SQL par défaut. -
SQL_ROWCOUNT
Nom de l'attribut recevant le nombre de lignes affectées par un Statement. Dans le cas des Batchs ce nombre correspond à la somme de toutes les lignes affectées par le batch.- See Also:
-
-
Constructor Details
-
AbstractTaskEngineSQL
protected AbstractTaskEngineSQL(io.vertigo.commons.script.ScriptManager scriptManager, io.vertigo.commons.transaction.VTransactionManager transactionManager, SqlManager sqlManager, SmartTypeManager smartTypeManager) Constructor.- Parameters:
scriptManager- Manager de traitment de scripts
-
-
Method Details
-
doExecute
protected abstract OptionalInt doExecute(SqlStatement sqlStatement, SqlConnection connection) throws SQLException Exécution de la requête.- Parameters:
connection- Connexion BDD- Returns:
- Nombre de lignes affectées (Insert/ Update / Delete)
- Throws:
SQLException- Erreur sql
-
execute
public void execute()- Specified by:
executein classTaskEngine
-
getSqlQuery
Retourne la Query qui sera parsée Par défaut il s'agit de la request définie sur le service- Returns:
- Chaine de configuration
-
preProcessQuery
Permet de créer du SQL dynamiquement interprété. Les paramètres IN de la tache peuvent être invoqués pour construire la requête SQL. Exemple : request = " Select * From PRODUIT <%if (dtoProduitCritere.getPrdLibelle()!=null) {%> Where PRD_LIBELLE like #DTO_PRODUIT_CRITERE.PRD_LIBELLE#||'%%' <%}%> order by <%=1%>";- Parameters:
sqlQuery- Requete à évaluer- Returns:
- Requete évaluée
-
setNamedParameters
-
getVTransactionResourceId
protected io.vertigo.commons.transaction.VTransactionResourceId<SqlConnection> getVTransactionResourceId()- Returns:
- Id de la Ressource Connexion SQL dans la transaction
-
getSqlManager
- Returns:
- Manager de base de données
-
getSmartTypeManager
- Returns:
- Manager du modèle
-
getConnectionProvider
Il est possible de surcharger la configuration SQL d'un service.- Returns:
- Configuration SQL.
-