82%macro mp_filterstore(libds=,
84 queryds=work.filterquery,
85 filter_summary=PERM.FILTER_SUMMARY,
86 filter_detail=PERM.FILTER_DETAIL,
87 lock_table=PERM.LOCK_TABLE,
88 maxkeytable=PERM.MAXKEYTABLE,
89 outresult=work.result,
93%put &sysmacroname entry vars:;
96%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds targetds_used;
97%let libds=%upcase(&libds);
98%let orig_libds=&libds;
100%mp_abort(iftrue= (&syscc ne 0)
102 ,msg=%str(syscc=&syscc on macro entry)
104%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)
106 ,msg=%str(Invalid filter_summary value: &filter_summary)
108%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)
110 ,msg=%str(Invalid filter_detail value: &filter_detail)
112%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)
114 ,msg=%str(Invalid lock_table value: &lock_table)
121%if
"%substr(&libds,%length(&libds)-2,3)"=
"-FC" %then %do;
122 %let libds=%scan(&libds,1,-);
123 %let ds0=%mf_getuniquename(prefix=fmtds_);
130 %mddl_sas_cntlout(libds=&ds0)
136%
if %length(&targetds)>0 %then %let targetds_used=&targetds;
137%
else %let targetds_used=&libds;
139%mp_filtercheck(&queryds,targetds=&targetds_used,abort=YES)
142%let ds1=%mf_getuniquename(prefix=hashds);
143%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)
144%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));
145%
if &mdebug=1 %then %
do;
147 putlog
"filter_hash=&filter_hash";
156 where filter_hash=
"&filter_hash";
159%mp_abort(iftrue= (&syscc ne 0)
161 ,msg=%str(syscc=&syscc after hash check)
163%mp_abort(iftrue= (
"&filter_hash "=
" ")
165 ,msg=%str(problem with filter_hash generation)
168%
if %mf_nobs(&outresult)=0 %then %
do;
171 %let ds3=%mf_getuniquename(prefix=filtersum);
173 if 0 then
set &filter_summary;
174 filter_table=
"&orig_libds";
175 filter_hash=
"&filter_hash";
176 PROCESSED_DTTM=%sysfunc(datetime());
181 %mp_lockanytable(LOCK,
182 lib=%scan(&filter_summary,1,.)
183 ,ds=%scan(&filter_summary,2,.)
184 ,ref=MP_FILTERSTORE summary update - &filter_hash
188 %let ds4=%mf_getuniquename(prefix=filtersumappend);
190 base_lib=%scan(&filter_summary,1,.)
191 ,base_dsn=%scan(&filter_summary,2,.)
194 ,retained_key=filter_rk
195 ,business_key=filter_hash
196 ,maxkeytable=&maxkeytable
197 ,locktable=&lock_table
200 proc append base=&filter_summary data=&ds4;
203 %mp_lockanytable(UNLOCK,
204 lib=%scan(&filter_summary,1,.)
205 ,ds=%scan(&filter_summary,2,.)
206 ,ref=MP_FILTERSTORE summary update - &filter_hash
210 %
if &syscc ne 0 %then %
do;
220 where filter_hash=
"&filter_hash";
224 %let ds2=%mf_getuniquename(prefix=filterdetail);
226 if 0 then
set &filter_detail;
228 format filter_hash $hex32. filter_line 8.;
229 filter_hash=
"&filter_hash";
231 PROCESSED_DTTM=%sysfunc(datetime());
233 %mp_lockanytable(LOCK,
234 lib=%scan(&filter_detail,1,.)
235 ,ds=%scan(&filter_detail,2,.)
236 ,ref=MP_FILTERSTORE update - &filter_hash
239 proc append base=&filter_detail data=&ds2;
242 %mp_lockanytable(UNLOCK,
243 lib=%scan(&filter_detail,1,.)
244 ,ds=%scan(&filter_detail,2,.)
245 ,ref=MP_FILTERSTORE detail update &filter_hash
249 %
if &syscc ne 0 %then %
do;
259proc sort data=&filter_detail(where=(filter_hash=
"&filter_hash")) out=&outquery;
264%mp_abort(iftrue= (&syscc ne 0)
266 ,msg=%str(syscc=&syscc on macro exit)