
Dans l'exemple suivant, nous examinons des extraits du gestionnaire d'événement GetEstimatedSize défini sur la métaclasse Table afin d'estimer la taille de la base de données en calculant la taille de chaque table comme taille totale de toutes ses colonnes plus la taille de tous ses index.
Remarque : Pour obtenir des exemples du gestionnaire d'événement GetEstimatedSize utilisé dans Table et les autres métaclasses, voir les fichiers de définition de SGBD Sybase IQ v15.2 et HP Neoview R2.4.
Dans ce premier extrait du script, la fonction
GetEstimatedSize s'ouvre et la taille de chaque table est obtenue en bouclant sur la taille de chacune de ses colonnes. Le calcul effectif de la taille de la colonne est effectué par la ligne :
ColSize = C.GetEstimatedSize(message, false)
, qui appelle le gestionnaire d'événement
GetEstimatedSize sur la métaclasse
Column (voir
Appel du gestionnaire d'événement GetEstimatedSize sur une autre métaclasse) :
Function %GetEstimatedSize%(obj, ByRef message)
' First compute global database setting variable we will need.
' Get table size and keep column size for future use
Dim ColSizes, TblSize, ColSize, C
Set ColSizes = CreateObject("Scripting.Dictionary")
TblSize = 0 ' May be changed to take into account table definition initial size.
for each C in obj.Columns
' Start browsing table columns and use event handler defined on column metaclass (if it exists).
ColSize = C.GetEstimatedSize(message, false)
' Store column size in the map for future use in indexes.
ColSizes.Add C, ColSize
' Increase the table global size.
TblSize = TblSize + ColSize
next
Dim RawDataSize
RawDataSize = BlockSize * int(obj.Number * TblSize / BlockSize)
' At this point, the RawDataSize is the size of table in database.
Ensuite, la taille des index de table est calculée directement dans le script sans appeler de gestionnaire d'événement sur la métaclasse Index, la ligne qui produit les tailles d'index est mise en forme et la taille des index est ajoutée à la taille totale de la base de données :
' Now calculate index sizes. Set up variables to store indexes sizes.
Dim X, XMsg, XDataSize
XMsg = ""
for each X in obj.Indexes
XDataSize = 0
' Browsing index columns and get their size added in XDataSize
For each C in X.IndexColumns
XDataSize = XDataSize + ColSizes.Item(C.Column)
next
XDataSize = BlockSize * int(obj.Number * XDataSize / BlockSize)
' Format the display message in order to get size information in output and result list.
XMsg = XMsg & CStr(XDataSize) & "|" & X.ObjectID & vbCrLf
' Add the index size to table size.
RawDataSize = RawDataSize + XDataSize
next
Pour finir, l'information de taille est mise en forme pour sortie (voir
Mise en forme du résultat d'une estimation de taille de base de données). Chaque table est imprimée sur une ligne distincte à la fois dans les fenêtres Résultats et Liste de résultats, et sa taille totale incluant toutes les colonnes et index est fournie :
' set the global message to table size and all indexes (separate with carriage return).
message = CStr(RawDataSize) & "||" & obj.ShortDescription & vbCrLf & XMsg
%GetEstimatedSize% = RawDataSize
End Function
Une fois que toutes les tables ont été traitées, PowerAMC calcule et imprimer la taille totale estimée de la base de données.