Type : CREATION_INTERNE
Todos los datos utilizados son creados por el propio script. Esto incluye la tabla a bloquear (`tmp.sometable`), la tabla de control de bloqueos (`work.controller`) y varias tablas pequeñas de verificación (`work.checkds*`) utilizadas para las aserciones.
| 1 | %mp_coretable(LOCKTABLE,libds=work.controller) |
| 2 | |
| 3 | %mp_assertcols(work.controller, |
| 4 | cols=lock_status_cd lock_lib lock_ds lock_user_nm lock_ref lock_pid |
| 5 | lock_start_dttm lock_end_dttm, |
| 6 | test=ALL, |
| 7 | desc=check all control columns exist |
| 8 | ) |
| 1 | options dlcreatedir; |
| 2 | LIBNAME tmp "%sysfunc(pathname(work))/tmp"; |
| 3 | DATA tmp.sometable; |
| 4 | x=1; |
| 5 | RUN; |
| 1 | %mp_lockanytable(LOCK,lib=tmp,ds=sometable,ref=This Ref, ctl_ds=work.controller) |
| 2 | |
| 3 | DATA work.checkds1; |
| 4 | checkval='SOMETABLE'; |
| 5 | RUN; |
| 6 | %mp_assertcolvals(work.controller.lock_ds, |
| 7 | checkvals=work.checkds1.checkval, |
| 8 | desc=TABLE is captured in lock, |
| 9 | test=ANYVAL |
| 10 | ) |
| 11 | |
| 12 | DATA work.checkds2; |
| 13 | checkval='LOCKED'; |
| 14 | RUN; |
| 15 | %mp_assertcolvals(work.controller.lock_status_cd, |
| 16 | checkvals=work.checkds2.checkval, |
| 17 | desc=code is captured in lock, |
| 18 | test=ANYVAL |
| 19 | ) |
| 1 | %mp_lockanytable(UNLOCK,lib=tmp,ds=sometable,ref=bye, ctl_ds=work.controller) |
| 2 | |
| 3 | DATA work.checkds3; |
| 4 | checkval='UNLOCKED'; |
| 5 | RUN; |
| 6 | %mp_assertcolvals(work.controller.lock_status_cd, |
| 7 | checkvals=work.checkds3.checkval, |
| 8 | desc=Ref is captured in unlock, |
| 9 | test=ANYVAL |
| 10 | ) |
| 1 | %mp_lockanytable(UNLOCK,lib=no,ds=doesnotexist,ref=bye, ctl_ds=work.controller) |
| 2 | |
| 3 | %mp_assert( |
| 4 | iftrue=(&syscc=0), |
| 5 | desc=Ability to unlock a TABLE that was never locked, |
| 6 | outds=work.test_results |
| 7 | ) |
| 1 | %mp_assertscope(SNAPSHOT) |
| 2 | %mp_lockanytable(LOCK,lib=tmp,ds=testscope,ref=This Ref, ctl_ds=work.controller) |
| 3 | %mp_assertscope(COMPARE) |