Génération de script

Les instructions de génération de script sont disponibles dans la catégorie Script, sous les différentes catégories d'objet. Par exemple, dans Sybase ASA 8, l'instruction Create de la catégorie Table se présente comme suit :

create table [%QUALIFIER%]%TABLE% 
(
  %TABLDEFN%
)
[%OPTIONS%]

Cette instruction contient les paramètres de création de la table ainsi que le nom de son propriétaire et ses options physiques.

Mécanisme d'extension

Vous pouvez étendre des instructions de génération de script pour compléter la génération en utilisant les instructions d'extension. Le mécanisme d'extension permet de générer les instructions immédiatement avant ou après les instructions Create, Drop et Modify, et d'extraire ces instructions lors du reverse engineering.

Pour plus d'informations sur le reverse engineering d'instructions supplémentaires, reportez-vous à la section Reverse engineering de script.

Langage de génération par template (GTL)

Les instructions d'extension sont définies à l'aide du mécanisme de langage de génération par template (GTL) PowerAMC.

Une instruction d'extension peut contenir :

  • Une référence à d'autres instructions qui sera évaluée lors de la génération. Ces éléments sont des éléments de texte qui doivent être définis dans la même catégorie que les objet des instructions d'extension

  • Des variables utilisées pour évaluer des propriétés d'objet et des attributs étendus. Les variables sont encadrées par des caractères %

  • Des macros, telles que ".if", fournissant des structures de programmation générique pour tester des variables. Remarque : nous vous recommandons d'éviter d'utiliser des macros du GTL dans les scripts de génération, car elles ne peuvent pas être reconstituées lors d'un reverse engineering par script. La génération et le reverse engineering via une connexion directe ne sont pas concernés par cette limitation.

Pour plus d'informations sur le langage de génération par template, voir Personnalisation de la génération à l'aide du langage de génération par template.

Lors de la génération, les instructions et variables sont évaluées et le résultat est ajouté au script global.

Exemple 1

L'instruction d'extension AfterCreate est définie dans la catégorie Table pour compléter l'instruction Create de la table, en ajoutant des partitions à la table si la valeur de l'attribut étendu de la table le requiert.

AfterCreate est défini dans la syntaxe de GTL comme suit :

.if (%ExtTablePartition% > 1)
%CreatePartition%
go
.endif

La macro .if est utilisée pour évaluer la variable %ExtTablePartition%. Cette variable est un attribut étendu qui contient le nombre de partitions de la table. Si la valeur de %ExtTablePartition% est supérieure à 1, %CreatePartition% sera généré suivi de "go". %CreatePartition% est une instruction définie dans la catégorie Table comme suit :

alter table [%QUALIFIER%]%TABLE%
 partition %ExtTablePartition%

%CreatePartition% génère l'instruction de création du nombre de partitions de table spécifié dans %ExtTablePartition%.

Exemple 2

Vous créez dans Sybase ASE une instruction étendue pour créer automatiquement un login d'utilisateur avant l'exécution de l'instruction Create user. L'instruction BeforeCreate se présente comme suit :

sp_addlogin %Name% %Password%
go

Le login généré automatiquement aura le même nom que l'utilisateur et son mot de passe. Vous pouvez afficher un aperçu de l'instruction dans la feuille de propriétés de l'objet, l'instruction BeforeCreate apparaît avant l'instruction de création de l'utilisateur :



Instructions Modify

Vous pouvez également ajouter des instructions BeforeModify et AfterModify aux instructions modify standard.

Les instructions Modify sont exécutées afin de synchroniser la base de données avec la structure créée dans le MPD. Par défaut, la fonctionnalité de modification de base de données ne prend pas en compte les attributs étendus lorsqu'elle compare les changements effectués sur le modèle depuis la dernière génération. Vous pouvez contourner cette règle en ajoutant des attributs étendus dans l'élément de liste ModifiableAttributes. Les attributs étendus définis dans cette liste seront pris en compte dans la boîte de dialogue de fusion lors de la synchronisation de base de données.

Pour détecter qu'une valeur d'attribut étendu a été modifiée, vous pouvez utiliser les variables suivantes :

  • %OLDOBJECT% pour accéder à l'ancienne valeur de l'objet

  • %NEWOBJECT% pour accéder à la nouvelle valeur de l'objet

Par exemple, vous pouvez vérifier que la valeur de l'attribut étendu ExtTablePartition a été modifiée à l'aide de la syntaxe de GTL suivante :

.if (%OLDOBJECT.ExtTablePartition% != %NEWOBJECT.ExtTablePartition%)

Si la valeur d'attribut étendu a été modifiée, une instruction étendue sera générée pour mettre à jour la base de données. Dans la syntaxe de Sybase ASE, l'instruction étendue ModifyPartition se présente comme suit, car en cas de changement de partition vous devez supprimer la précédente partition avant de la recréer :

.if (%OLDOBJECT.ExtTablePartition% != %NEWOBJECT.ExtTablePartition%)
 .if (%NEWOBJECT.ExtTablePartition% > 1)
  .if (%OLDOBJECT.ExtTablePartition% > 1)
%DropPartition%
  .endif
%CreatePartition%
 .else
%DropPartition%
 .endif
.endif 

Pour plus d'informations sur le langage de génération par template (GTL) PowerAMC, voir Personnalisation de la génération à l'aide du langage de génération par template.