1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-10 14:04:36 +00:00
Files
core/meta/mm_gettables.sas

120 lines
3.9 KiB
SAS

/**
@file
@brief Creates a dataset with all metadata tables for a particular library
@details Will only show the tables for which the executing user has the
requisite metadata access.
usage:
%mm_gettables(uri=A5X8AHW1.B40001S5)
@param [in] uri= the uri of the library for which to return tables
@param [out] outds= (work.mm_gettables) the dataset to contain the list of
tables
@param [in] getauth= (YES) Fetch the authdomain used in database connections.
Set to NO to improve runtimes in larger environments, as there can be a
performance hit on the `metadata_getattr(domainuri, "Name", AuthDomain)`
call.
@returns outds dataset containing all groups in a column named "metagroup"
(defaults to work.mm_getlibs). The following columns are provided:
- tablename
- tableuri
- libref
- libname
- libdesc
@version 9.2
@author Allan Bowe
**/
%macro mm_gettables(
uri=
,outds=work.mm_gettables
,getauth=YES
)/*/STORE SOURCE*/;
data &outds;
length uri serveruri conn_uri domainuri libname ServerContext AuthDomain
path_schema usingpkguri type tableuri $256 id $17
libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1
tablename $50 /* metadata table names can be longer than $32 */
;
keep libname libdesc libref engine ServerContext path_schema AuthDomain
tableuri tablename IsPreassigned IsDBMSLibname id;
call missing (of _all_);
uri=symget('uri');
rc= metadata_getattr(uri, "Name", libname);
if rc <0 then do;
put 'The library is not defined in this metadata repository.';
stop;
end;
rc= metadata_getattr(uri, "Desc", libdesc);
rc= metadata_getattr(uri, "Libref", libref);
rc= metadata_getattr(uri, "Engine", engine);
rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);
rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);
rc= metadata_getattr(uri, "Id", Id);
/*** Get associated ServerContext ***/
rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);
if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);
else ServerContext='';
/*** If the library is a DBMS library, get the Authentication Domain
associated with the DBMS connection credentials ***/
if IsDBMSLibname="1" and "&getauth"='YES' then do;
rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);
if rc>0 then do;
rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);
if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);
end;
end;
/*** Get the path/database schema for this library ***/
rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);
if rc>0 then do;
rc=metadata_resolve(usingpkguri,type,id);
if type='Directory' then
rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);
else if type='DatabaseSchema' then
rc=metadata_getattr(usingpkguri, "Name", path_schema);
else path_schema="unknown";
end;
/*** Get the tables associated with this library ***/
/*** If DBMS, tables are associated with DatabaseSchema ***/
if type='DatabaseSchema' then do;
t=1;
ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);
if ntab>0 then do t=1 to ntab;
tableuri='';
tablename='';
ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);
tabrc= metadata_getattr(tableuri, "Name", tablename);
output;
end;
else put 'Library ' libname ' has no tables registered';
end;
else if type in ('Directory','SASLibrary') then do;
t=1;
ntab=metadata_getnasn(uri, "Tables", t, tableuri);
if ntab>0 then do t=1 to ntab;
tableuri='';
tablename='';
ntab=metadata_getnasn(uri, "Tables", t, tableuri);
tabrc= metadata_getattr(tableuri, "Name", tablename);
output;
end;
else put 'Library ' libname ' has no tables registered';
end;
run;
proc sort;
by tablename tableuri;
run;
%mend mm_gettables;