From 21946e74f1111158d1b3219e110297e6787db93b Mon Sep 17 00:00:00 2001 From: vrh Date: Sat, 8 Aug 2020 14:29:55 +0200 Subject: [PATCH] feat: mm_gettableid macro --- all.sas | 66 +++++++++++++++++++++++++++++++++++++++++ meta/mm_gettableid.sas | 67 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 meta/mm_gettableid.sas diff --git a/all.sas b/all.sas index 615bb67..aa7a7c4 100644 --- a/all.sas +++ b/all.sas @@ -8011,6 +8011,72 @@ run; %mend; /** + @file mm_gettableid.sas + @brief Get the metadata id for a particular table + @details Provide a libref and table name to return the corresponding metadata id + in an output datataset. + + Usage: + + - get a table id + %mm_gettableid(libref=METALIB,ds=SOMETABLE,outds=iwant) + + @param libref= The libref to search + @param ds= The input dataset to check + @param outds= the dataset to create that contains the `tableuri`` + @param mDebug= set to 1 to show debug messages in the log + + @returns outds dataset containing `tableuri` and `tablename` + + @version 9.2 + @author Allan Bowe + +**/ + +%macro mm_gettableid( + libref= + ,ds= + ,outds=work.mm_gettableid + ,mDebug=0 +)/*/STORE SOURCE*/; + +%local mD; +%if &mDebug=1 %then %let mD=; +%else %let mD=%str(*); +%&mD.put Executing &sysmacroname..sas; +%&mD.put _local_; + +data &outds; + length uri usingpkguri id type tableuri tablename tmpuri $256; + call missing(of _all_); + keep tableuri tablename; + n=1; + rc=0; + if metadata_getnobj("omsobj:SASLibrary?@Libref='&libref'",n,uri)<1 then do; + put "Library &libref not found"; + stop; + end; + &mD.putlog "uri is " uri; + if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do; + rc=metadata_resolve(usingpkguri,type,id); + &mD.putlog "Type is " type; + end; + + if type='DatabaseSchema' then tmpuri=usingpkguri; + else tmpuri=uri; + + t=1; + do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0); + t+1; + rc= metadata_getattr(tableuri, "Name", tablename); + &mD.putlog "Table is " tablename; + if upcase(tablename)="%upcase(&ds)" then do; + output; + end; + end; +run; + +%mend;/** @file @brief Creates a dataset with all metadata tables for a particular library @details Will only show the tables to which a user has the requisite diff --git a/meta/mm_gettableid.sas b/meta/mm_gettableid.sas new file mode 100644 index 0000000..def1519 --- /dev/null +++ b/meta/mm_gettableid.sas @@ -0,0 +1,67 @@ +/** + @file mm_gettableid.sas + @brief Get the metadata id for a particular table + @details Provide a libref and table name to return the corresponding metadata id + in an output datataset. + + Usage: + + - get a table id + %mm_gettableid(libref=METALIB,ds=SOMETABLE,outds=iwant) + + @param libref= The libref to search + @param ds= The input dataset to check + @param outds= the dataset to create that contains the `tableuri`` + @param mDebug= set to 1 to show debug messages in the log + + @returns outds dataset containing `tableuri` and `tablename` + + @version 9.2 + @author Allan Bowe + +**/ + +%macro mm_gettableid( + libref= + ,ds= + ,outds=work.mm_gettableid + ,mDebug=0 +)/*/STORE SOURCE*/; + +%local mD; +%if &mDebug=1 %then %let mD=; +%else %let mD=%str(*); +%&mD.put Executing &sysmacroname..sas; +%&mD.put _local_; + +data &outds; + length uri usingpkguri id type tableuri tablename tmpuri $256; + call missing(of _all_); + keep tableuri tablename; + n=1; + rc=0; + if metadata_getnobj("omsobj:SASLibrary?@Libref='&libref'",n,uri)<1 then do; + put "Library &libref not found"; + stop; + end; + &mD.putlog "uri is " uri; + if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do; + rc=metadata_resolve(usingpkguri,type,id); + &mD.putlog "Type is " type; + end; + + if type='DatabaseSchema' then tmpuri=usingpkguri; + else tmpuri=uri; + + t=1; + do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0); + t+1; + rc= metadata_getattr(tableuri, "Name", tablename); + &mD.putlog "Table is " tablename; + if upcase(tablename)="%upcase(&ds)" then do; + output; + end; + end; +run; + +%mend; \ No newline at end of file