Attention : Ce code nécessite des droits administrateur.
Le script exécute une série de tests pour valider le comportement de la macro `%mp_lockanytable`. Il commence par créer une table de contrôle (`work.controller`) et en valide la structure. Ensuite, il crée une table de test (`tmp.sometable`), la verrouille et vérifie que l'état 'LOCKED' est bien enregistré. Il procède ensuite au déverrouillage et s'assure que le statut passe à 'UNLOCKED'. Un cas d'erreur est également testé en tentant de déverrouiller une table inexistante, en s'assurant que le programme ne s'arrête pas. Finalement, il vérifie l'absence de fuite de variables macro après l'appel à la macro principale.
Analyse des données
Type : CREATION_INTERNE
Toutes les données utilisées sont créées par le script lui-même. Cela inclut la table à verrouiller (`tmp.sometable`), la table de contrôle des verrous (`work.controller`), et plusieurs petites tables de vérification (`work.checkds*`) utilisées pour les assertions.
1 Bloc de code
Macro Data
Explication : La macro `%mp_coretable` crée la table `work.controller` destinée à suivre l'état des verrous. La macro `%mp_assertcols` est ensuite utilisée pour valider que cette table de contrôle contient bien toutes les colonnes requises.
Copié !
%mp_coretable(LOCKTABLE,libds=work.controller)
%mp_assertcols(work.controller,
cols=lock_status_cd lock_lib lock_ds lock_user_nm lock_ref lock_pid
lock_start_dttm lock_end_dttm,
test=ALL,
desc=check all control columns exist
)
Explication : Ce bloc active la création de répertoires à la volée, alloue une bibliothèque `tmp` dans le dossier temporaire de la session, puis y crée une table `tmp.sometable` pour les besoins du test.
Copié !
options dlcreatedir;
libname tmp "%sysfunc(pathname(work))/tmp";
data tmp.sometable;
x=1;
run;
1
options dlcreatedir;
2
LIBNAME tmp "%sysfunc(pathname(work))/tmp";
3
DATA tmp.sometable;
4
x=1;
5
RUN;
3 Bloc de code
Macro Data
Explication : La macro `%mp_lockanytable` est appelée pour verrouiller la table `tmp.sometable`. Des tables de validation sont créées (`work.checkds1`, `work.checkds2`) et la macro `%mp_assertcolvals` vérifie que le nom de la table et le statut 'LOCKED' sont correctement enregistrés dans la table de contrôle.
Copié !
%mp_lockanytable(LOCK,lib=tmp,ds=sometable,ref=This Ref, ctl_ds=work.controller)
data work.checkds1;
checkval='SOMETABLE';
run;
%mp_assertcolvals(work.controller.lock_ds,
checkvals=work.checkds1.checkval,
desc=table is captured in lock,
test=ANYVAL
)
data work.checkds2;
checkval='LOCKED';
run;
%mp_assertcolvals(work.controller.lock_status_cd,
checkvals=work.checkds2.checkval,
desc=code is captured in lock,
test=ANYVAL
)
Explication : La table `tmp.sometable` est déverrouillée via `%mp_lockanytable`. Le script vérifie ensuite avec `%mp_assertcolvals` que le statut dans la table de contrôle est bien mis à jour à 'UNLOCKED'.
Copié !
%mp_lockanytable(UNLOCK,lib=tmp,ds=sometable,ref=bye, ctl_ds=work.controller)
data work.checkds3;
checkval='UNLOCKED';
run;
%mp_assertcolvals(work.controller.lock_status_cd,
checkvals=work.checkds3.checkval,
desc=Ref is captured in unlock,
test=ANYVAL
)
Explication : Ce bloc teste un cas d'erreur en tentant de déverrouiller une table inexistante. La macro `%mp_assert` valide que cette opération s'exécute sans erreur fatale, en vérifiant que le code retour système `&syscc` reste à 0.
Copié !
%mp_lockanytable(UNLOCK,lib=no,ds=doesnotexist,ref=bye, ctl_ds=work.controller)
%mp_assert(
iftrue=(&syscc=0),
desc=Ability to unlock a table that was never locked,
outds=work.test_results
)
desc=Ability to unlock a TABLE that was never locked,
6
outds=work.test_results
7
)
6 Bloc de code
Macro
Explication : Ce bloc teste la 'fuite' de variables macro. `%mp_assertscope(SNAPSHOT)` prend un instantané des variables macro existantes, `%mp_lockanytable` est exécutée, puis `%mp_assertscope(COMPARE)` compare le nouvel état au précédent pour s'assurer qu'aucune variable macro locale n'a été créée globalement.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.