75%macro mp_filterstore(libds=,
76 queryds=work.filterquery,
77 filter_summary=PERM.FILTER_SUMMARY,
78 filter_detail=PERM.FILTER_DETAIL,
79 lock_table=PERM.LOCK_TABLE,
80 maxkeytable=PERM.MAXKEYTABLE,
81 outresult=work.result,
85%put &sysmacroname entry vars:;
88%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;
89%let libds=%upcase(&libds);
90%let orig_libds=&libds;
92%mp_abort(iftrue= (&syscc ne 0)
94 ,msg=%str(syscc=&syscc on macro entry)
96%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)
98 ,msg=%str(Invalid filter_summary value: &filter_summary)
100%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)
102 ,msg=%str(Invalid filter_detail value: &filter_detail)
104%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)
106 ,msg=%str(Invalid lock_table value: &lock_table)
113%if
"%substr(&libds,%length(&libds)-2,3)"=
"-FC" %then %do;
114 %let libds=%scan(&libds,1,-);
115 %let ds0=%mf_getuniquename(prefix=fmtds_);
122 %mddl_sas_cntlout(libds=&ds0)
125%mp_filtercheck(&queryds,targetds=&libds,abort=YES)
128%let ds1=%mf_getuniquename(prefix=hashds);
129%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)
130%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));
131%
if &mdebug=1 %then %
do;
133 putlog
"filter_hash=&filter_hash";
142 where filter_hash=
"&filter_hash";
145%mp_abort(iftrue= (&syscc ne 0)
147 ,msg=%str(syscc=&syscc after hash check)
149%mp_abort(iftrue= (
"&filter_hash "=
" ")
151 ,msg=%str(problem with filter_hash generation)
154%
if %mf_nobs(&outresult)=0 %then %
do;
157 %let ds3=%mf_getuniquename(prefix=filtersum);
159 if 0 then
set &filter_summary;
160 filter_table=
"&orig_libds";
161 filter_hash=
"&filter_hash";
162 PROCESSED_DTTM=%sysfunc(datetime());
167 %mp_lockanytable(LOCK,
168 lib=%scan(&filter_summary,1,.)
169 ,ds=%scan(&filter_summary,2,.)
170 ,ref=MP_FILTERSTORE summary update - &filter_hash
174 %let ds4=%mf_getuniquename(prefix=filtersumappend);
176 base_lib=%scan(&filter_summary,1,.)
177 ,base_dsn=%scan(&filter_summary,2,.)
180 ,retained_key=filter_rk
181 ,business_key=filter_hash
182 ,maxkeytable=&maxkeytable
183 ,locktable=&lock_table
186 proc append base=&filter_summary data=&ds4;
189 %mp_lockanytable(UNLOCK,
190 lib=%scan(&filter_summary,1,.)
191 ,ds=%scan(&filter_summary,2,.)
192 ,ref=MP_FILTERSTORE summary update - &filter_hash
196 %
if &syscc ne 0 %then %
do;
206 where filter_hash=
"&filter_hash";
210 %let ds2=%mf_getuniquename(prefix=filterdetail);
212 if 0 then
set &filter_detail;
214 format filter_hash $hex32. filter_line 8.;
215 filter_hash=
"&filter_hash";
217 PROCESSED_DTTM=%sysfunc(datetime());
219 %mp_lockanytable(LOCK,
220 lib=%scan(&filter_detail,1,.)
221 ,ds=%scan(&filter_detail,2,.)
222 ,ref=MP_FILTERSTORE update - &filter_hash
225 proc append base=&filter_detail data=&ds2;
228 %mp_lockanytable(UNLOCK,
229 lib=%scan(&filter_detail,1,.)
230 ,ds=%scan(&filter_detail,2,.)
231 ,ref=MP_FILTERSTORE detail update &filter_hash
235 %
if &syscc ne 0 %then %
do;
245proc sort data=&filter_detail(where=(filter_hash=
"&filter_hash")) out=&outquery;
250%mp_abort(iftrue= (&syscc ne 0)
252 ,msg=%str(syscc=&syscc on macro exit)