Vous pouvez étendre les instructions de génération de script afin de compléter la génération en utilisant les instructions d'extension. Le mécanisme d'extension permet de générer des instructions immédiatement avant ou après les instructions Create, Drop et Modify, et de récupérer ces instructions lors du reverse engineering.
Les instructions d'extension sont rédigées en 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é dans le script global.
.if (%ExtTablePartition% > 1) %CreatePartition% go .endif
alter table [%QUALIFIER%]%TABLE% partition %ExtTablePartition%
Cet élément génère l'instruction permettant de créer le nombre de partitions spécifié dans %ExtTablePartition%.
L'instruction d'extension BeforeCreate est définie dans la catégorie User pour créer l'ID utilisateur d'un utilisateur avant l'exécution de l'instruction Create sur l'utilisateur :
sp_addlogin %Name% %Password% go
L'ID utilisateur généré automatiquement aura le même nom et le même mot de passe que l'utilisateur. L'instruction BeforeCreate est affichée avant l'instruction de création de l'utilisateur dans l'Aperçu :
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 le schéma créé 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 dans le modèle depuis la dernière génération. Vous pouvez passer outre cette règle en ajoutant des attributs étendus dans la 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.
Par exemple, vous pouvez vérifier que la valeur de l'attribut étendu ExtTablePartition a été modifiée grâce à la syntaxe de langage de génération par template suivante :
.if (%OLDOBJECT.ExtTablePartition% != %NEWOBJECT.ExtTablePartition%)
Si la valeur de l'attribut étendu a été changée, une instruction étendue sera générée pour mettre à jour la base de données. Dans la syntaxe Sybase ASE, l'instruction étendue ModifyPartition se présente comme suit car en cas de changement de partition vous devez être en mesure de supprimer la partition précédente puis de la recréer :
.if (%OLDOBJECT.ExtTablePartition% != %NEWOBJECT.ExtTablePartition%) .if (%NEWOBJECT.ExtTablePartition% > 1) .if (%OLDOBJECT.ExtTablePartition% > 1) %DropPartition% .endif %CreatePartition% .else %DropPartition% .endif .endif