diff --git a/all.sas b/all.sas
index c778135..d789111 100644
--- a/all.sas
+++ b/all.sas
@@ -15177,17 +15177,22 @@ run;
%mend mm_deletestp;
/**
@file mm_getauthinfo.sas
- @brief extracts authentication info
- @details usage:
+ @brief Extracts authentication info for each user in metadata
+ @details
+ Usage:
- %mm_getauthinfo(outds=auths)
+ %mm_getauthinfo(outds=auths)
- @param outds= the ONE LEVEL work dataset to create
+
+ @param [in] mdebug= (0) Set to 1 to enable DEBUG messages and preserve outputs
+ @param [out] outds= (mm_getauthinfo) The output dataset to create
SAS Macros
- @li mm_getobjects.sas
@li mf_getuniquefileref.sas
+ @li mf_getuniquename.sas
@li mm_getdetails.sas
+ @li mm_getobjects.sas
+
@version 9.4
@author Allan Bowe
@@ -15195,67 +15200,69 @@ run;
**/
%macro mm_getauthinfo(outds=mm_getauthinfo
+ ,mdebug=0
)/*/STORE SOURCE*/;
+%local prefix fileref;
+%let prefix=%substr(%mf_getuniquename(),1,25);
-%if %length(&outds)>30 %then %do;
- %put %str(ERR)OR: Temp tables are created with the &outds prefix, which
- therefore needs to be 30 characters or less;
- %return;
-%end;
-%if %index(&outds,'.')>0 %then %do;
- %put %str(ERR)OR: Table &outds should be ONE LEVEL (no library);
- %return;
-%end;
-
-%mm_getobjects(type=Login,outds=&outds.0)
+%mm_getobjects(type=Login,outds=&prefix.0)
%local fileref;
%let fileref=%mf_getuniquefileref();
data _null_;
file &fileref;
- set &outds.0 end=last;
+ set &prefix.0 end=last;
/* run macro */
- str=cats('%mm_getdetails(uri=',id,",outattrs=&outds.d",_n_
- ,",outassocs=&outds.a",_n_,")");
+ str=cats('%mm_getdetails(uri=',id,",outattrs=&prefix.d",_n_
+ ,",outassocs=&prefix.a",_n_,")");
put str;
/* transpose attributes */
- str=cats("proc transpose data=&outds.d",_n_,"(drop=type) out=&outds.da"
+ str=cats("proc transpose data=&prefix.d",_n_,"(drop=type) out=&prefix.da"
,_n_,"(drop=_name_);var value;id name;run;");
put str;
/* add extra info to attributes */
- str=cats("data &outds.da",_n_,";length login_id login_name $256; login_id="
- ,quote(trim(id)),";set &outds.da",_n_
+ str=cats("data &prefix.da",_n_,";length login_id login_name $256; login_id="
+ ,quote(trim(id)),";set &prefix.da",_n_
,";login_name=trim(subpad(name,1,256));drop name;run;");
put str;
/* add extra info to associations */
- str=cats("data &outds.a",_n_,";length login_id login_name $256; login_id="
+ str=cats("data &prefix.a",_n_,";length login_id login_name $256; login_id="
,quote(trim(id)),";login_name=",quote(trim(name))
- ,";set &outds.a",_n_,";run;");
+ ,";set &prefix.a",_n_,";run;");
put str;
if last then do;
/* collate attributes */
- str=cats("data &outds._logat; set &outds.da1-&outds.da",_n_,";run;");
+ str=cats("data &prefix._logat; set &prefix.da1-&prefix.da",_n_,";run;");
put str;
/* collate associations */
- str=cats("data &outds._logas; set &outds.a1-&outds.a",_n_,";run;");
+ str=cats("data &prefix._logas; set &prefix.a1-&prefix.a",_n_,";run;");
put str;
/* tidy up */
- str=cats("proc delete data=&outds.da1-&outds.da",_n_,";run;");
+ str=cats("proc delete data=&prefix.da1-&prefix.da",_n_,";run;");
put str;
- str=cats("proc delete data=&outds.d1-&outds.d",_n_,";run;");
+ str=cats("proc delete data=&prefix.d1-&prefix.d",_n_,";run;");
put str;
- str=cats("proc delete data=&outds.a1-&outds.a",_n_,";run;");
+ str=cats("proc delete data=&prefix.a1-&prefix.a",_n_,";run;");
put str;
end;
run;
+
+%if &mdebug=1 %then %do;
+ data _null_;
+ infile &fileref;
+ if _n_=1 then putlog // "Now executing the following code:" //;
+ input; putlog _infile_;
+ run;
+%end;
%inc &fileref;
+filename &fileref clear;
/* get libraries */
-proc sort data=&outds._logas(where=(assoc='Libraries')) out=&outds._temp;
+proc sort data=&prefix._logas(where=(assoc='Libraries')) out=&prefix._temp;
by login_id;
-data &outds._temp;
- set &outds._temp;
+data &prefix._temp;
+ set &prefix._temp;
by login_id;
length library_list $32767;
retain library_list;
@@ -15263,32 +15270,28 @@ data &outds._temp;
else library_list=catx(' !! ',library_list,name);
proc sql;
/* get auth domain */
-create table &outds._dom as
+create table &prefix._dom as
select login_id,name as domain
- from &outds._logas
+ from &prefix._logas
where assoc='Domain';
-create unique index login_id on &outds._dom(login_id);
+create unique index login_id on &prefix._dom(login_id);
/* join it all together */
-create table &outds._logins as
+create table &outds as
select a.*
,c.domain
,b.library_list
- from &outds._logat (drop=ishidden lockedby usageversion publictype) a
- left join &outds._temp b
+ from &prefix._logat (drop=ishidden lockedby usageversion publictype) a
+ left join &prefix._temp b
on a.login_id=b.login_id
- left join &outds._dom c
+ left join &prefix._dom c
on a.login_id=c.login_id;
-drop table &outds._temp;
-drop table &outds._logat;
-drop table &outds._logas;
-data _null_;
- infile &fileref;
- if _n_=1 then putlog // "Now executing the following code:" //;
- input; putlog _infile_;
-run;
+%if &mdebug=0 %then %do;
+ proc datasets lib=work;
+ delete &prefix:;
+ run;
+%end;
-filename &fileref clear;
%mend mm_getauthinfo;/**
@file
diff --git a/meta/mm_getauthinfo.sas b/meta/mm_getauthinfo.sas
index 423655f..58492c4 100644
--- a/meta/mm_getauthinfo.sas
+++ b/meta/mm_getauthinfo.sas
@@ -1,16 +1,21 @@
/**
@file mm_getauthinfo.sas
- @brief extracts authentication info
- @details usage:
+ @brief Extracts authentication info for each user in metadata
+ @details
+ Usage:
- %mm_getauthinfo(outds=auths)
+ %mm_getauthinfo(outds=auths)
- @param outds= the ONE LEVEL work dataset to create
+
+ @param [in] mdebug= (0) Set to 1 to enable DEBUG messages and preserve outputs
+ @param [out] outds= (mm_getauthinfo) The output dataset to create
SAS Macros
- @li mm_getobjects.sas
@li mf_getuniquefileref.sas
+ @li mf_getuniquename.sas
@li mm_getdetails.sas
+ @li mm_getobjects.sas
+
@version 9.4
@author Allan Bowe
@@ -18,67 +23,69 @@
**/
%macro mm_getauthinfo(outds=mm_getauthinfo
+ ,mdebug=0
)/*/STORE SOURCE*/;
+%local prefix fileref;
+%let prefix=%substr(%mf_getuniquename(),1,25);
-%if %length(&outds)>30 %then %do;
- %put %str(ERR)OR: Temp tables are created with the &outds prefix, which
- therefore needs to be 30 characters or less;
- %return;
-%end;
-%if %index(&outds,'.')>0 %then %do;
- %put %str(ERR)OR: Table &outds should be ONE LEVEL (no library);
- %return;
-%end;
-
-%mm_getobjects(type=Login,outds=&outds.0)
+%mm_getobjects(type=Login,outds=&prefix.0)
%local fileref;
%let fileref=%mf_getuniquefileref();
data _null_;
file &fileref;
- set &outds.0 end=last;
+ set &prefix.0 end=last;
/* run macro */
- str=cats('%mm_getdetails(uri=',id,",outattrs=&outds.d",_n_
- ,",outassocs=&outds.a",_n_,")");
+ str=cats('%mm_getdetails(uri=',id,",outattrs=&prefix.d",_n_
+ ,",outassocs=&prefix.a",_n_,")");
put str;
/* transpose attributes */
- str=cats("proc transpose data=&outds.d",_n_,"(drop=type) out=&outds.da"
+ str=cats("proc transpose data=&prefix.d",_n_,"(drop=type) out=&prefix.da"
,_n_,"(drop=_name_);var value;id name;run;");
put str;
/* add extra info to attributes */
- str=cats("data &outds.da",_n_,";length login_id login_name $256; login_id="
- ,quote(trim(id)),";set &outds.da",_n_
+ str=cats("data &prefix.da",_n_,";length login_id login_name $256; login_id="
+ ,quote(trim(id)),";set &prefix.da",_n_
,";login_name=trim(subpad(name,1,256));drop name;run;");
put str;
/* add extra info to associations */
- str=cats("data &outds.a",_n_,";length login_id login_name $256; login_id="
+ str=cats("data &prefix.a",_n_,";length login_id login_name $256; login_id="
,quote(trim(id)),";login_name=",quote(trim(name))
- ,";set &outds.a",_n_,";run;");
+ ,";set &prefix.a",_n_,";run;");
put str;
if last then do;
/* collate attributes */
- str=cats("data &outds._logat; set &outds.da1-&outds.da",_n_,";run;");
+ str=cats("data &prefix._logat; set &prefix.da1-&prefix.da",_n_,";run;");
put str;
/* collate associations */
- str=cats("data &outds._logas; set &outds.a1-&outds.a",_n_,";run;");
+ str=cats("data &prefix._logas; set &prefix.a1-&prefix.a",_n_,";run;");
put str;
/* tidy up */
- str=cats("proc delete data=&outds.da1-&outds.da",_n_,";run;");
+ str=cats("proc delete data=&prefix.da1-&prefix.da",_n_,";run;");
put str;
- str=cats("proc delete data=&outds.d1-&outds.d",_n_,";run;");
+ str=cats("proc delete data=&prefix.d1-&prefix.d",_n_,";run;");
put str;
- str=cats("proc delete data=&outds.a1-&outds.a",_n_,";run;");
+ str=cats("proc delete data=&prefix.a1-&prefix.a",_n_,";run;");
put str;
end;
run;
+
+%if &mdebug=1 %then %do;
+ data _null_;
+ infile &fileref;
+ if _n_=1 then putlog // "Now executing the following code:" //;
+ input; putlog _infile_;
+ run;
+%end;
%inc &fileref;
+filename &fileref clear;
/* get libraries */
-proc sort data=&outds._logas(where=(assoc='Libraries')) out=&outds._temp;
+proc sort data=&prefix._logas(where=(assoc='Libraries')) out=&prefix._temp;
by login_id;
-data &outds._temp;
- set &outds._temp;
+data &prefix._temp;
+ set &prefix._temp;
by login_id;
length library_list $32767;
retain library_list;
@@ -86,31 +93,27 @@ data &outds._temp;
else library_list=catx(' !! ',library_list,name);
proc sql;
/* get auth domain */
-create table &outds._dom as
+create table &prefix._dom as
select login_id,name as domain
- from &outds._logas
+ from &prefix._logas
where assoc='Domain';
-create unique index login_id on &outds._dom(login_id);
+create unique index login_id on &prefix._dom(login_id);
/* join it all together */
-create table &outds._logins as
+create table &outds as
select a.*
,c.domain
,b.library_list
- from &outds._logat (drop=ishidden lockedby usageversion publictype) a
- left join &outds._temp b
+ from &prefix._logat (drop=ishidden lockedby usageversion publictype) a
+ left join &prefix._temp b
on a.login_id=b.login_id
- left join &outds._dom c
+ left join &prefix._dom c
on a.login_id=c.login_id;
-drop table &outds._temp;
-drop table &outds._logat;
-drop table &outds._logas;
-data _null_;
- infile &fileref;
- if _n_=1 then putlog // "Now executing the following code:" //;
- input; putlog _infile_;
-run;
+%if &mdebug=0 %then %do;
+ proc datasets lib=work;
+ delete &prefix:;
+ run;
+%end;
-filename &fileref clear;
%mend mm_getauthinfo;
\ No newline at end of file
diff --git a/tests/sas9only/mm_getauthinfo.test.sas b/tests/sas9only/mm_getauthinfo.test.sas
new file mode 100644
index 0000000..b9a5a82
--- /dev/null
+++ b/tests/sas9only/mm_getauthinfo.test.sas
@@ -0,0 +1,21 @@
+/**
+ @file
+ @brief Testing mm_getauthinfo macro
+
+ SAS Macros
+ @li mf_existds.sas
+ @li mm_getauthinfo.sas
+ @li mp_assertscope.sas
+
+**/
+
+
+%mp_assertscope(SNAPSHOT)
+%mm_getauthinfo(outds=auths)
+%mp_assertscope(COMPARE)
+
+
+%mp_assert(
+ iftrue=(%mf_existds(work.auths)=1),
+ desc=Check if the auths dataset was created
+)
\ No newline at end of file