mirror of
https://github.com/sasjs/core.git
synced 2026-07-24 07:52:15 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8239b5e45b | ||
|
|
49171d7467 | ||
|
|
f8a6841948 | ||
|
|
199788ffe4 | ||
|
|
8624025a91 | ||
|
|
8bfc899ed4 | ||
|
|
d52b9a6eea | ||
|
|
3d6b9d0da5 |
@@ -11,10 +11,24 @@ on:
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
id-token: write # required for npm Trusted Publishing (OIDC)
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
|
||||
- name: Ensure npm supports Trusted Publishing
|
||||
run: npm install -g npm@latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm ci
|
||||
@@ -58,7 +72,9 @@ jobs:
|
||||
uses: cycjimmy/semantic-release-action@v6
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
# NPM_TOKEN no longer required: package is published via npm
|
||||
# Trusted Publishing (OIDC). The id-token: write permission above
|
||||
# allows npm CLI to authenticate to the registry automatically.
|
||||
|
||||
- name: SAS Packages Release
|
||||
run: |
|
||||
|
||||
@@ -12184,7 +12184,8 @@ https://blogs.sas.com/content/sastraining/2012/08/14/jedi-sas-tricks-reset-sas-s
|
||||
%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))
|
||||
|
||||
proc sql noprint;
|
||||
select sum(max(&retained_key),0) into: maxkey from &base_libds;
|
||||
select sum(max(&retained_key),0) format=32. into: maxkey trimmed
|
||||
from &base_libds;
|
||||
|
||||
/**
|
||||
* get base table RK and bus field values for lookup
|
||||
@@ -12253,19 +12254,19 @@ quit;
|
||||
insert into &maxkeytable
|
||||
set keytable="&base_libds"
|
||||
,keycolumn="&retained_key"
|
||||
,max_key=%eval(&maxkey+&newkey_cnt)
|
||||
,max_key=%sysevalf(&maxkey+&newkey_cnt)
|
||||
,processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;
|
||||
%end;
|
||||
%else %do;
|
||||
update &maxkeytable
|
||||
set max_key=%eval(&maxkey+&newkey_cnt)
|
||||
set max_key=%sysevalf(&maxkey+&newkey_cnt)
|
||||
,processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt
|
||||
where keytable="&base_libds";
|
||||
%end;
|
||||
%mp_lockanytable(UNLOCK
|
||||
,lib=%scan(&maxkeytable,1,.)
|
||||
,ds=%scan(&maxkeytable,2,.)
|
||||
,ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)
|
||||
,ref=Updating maxkeyvalues with maxkey=%sysevalf(&maxkey+&newkey_cnt)
|
||||
,ctl_ds=&locktable
|
||||
)
|
||||
%end;
|
||||
@@ -12273,7 +12274,7 @@ quit;
|
||||
/* fill in the missing retained key values */
|
||||
%let tempvar=%mf_getuniquename();
|
||||
data &outds(drop=&tempvar);
|
||||
retain &tempvar %eval(&maxkey+1);
|
||||
retain &tempvar %sysevalf(&maxkey+1);
|
||||
set &tempds2;
|
||||
if &retained_key =. then &retained_key=&tempvar;
|
||||
&tempvar=&tempvar+1;
|
||||
|
||||
@@ -148,7 +148,8 @@
|
||||
%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))
|
||||
|
||||
proc sql noprint;
|
||||
select sum(max(&retained_key),0) into: maxkey from &base_libds;
|
||||
select sum(max(&retained_key),0) format=32. into: maxkey trimmed
|
||||
from &base_libds;
|
||||
|
||||
/**
|
||||
* get base table RK and bus field values for lookup
|
||||
@@ -217,19 +218,19 @@ quit;
|
||||
insert into &maxkeytable
|
||||
set keytable="&base_libds"
|
||||
,keycolumn="&retained_key"
|
||||
,max_key=%eval(&maxkey+&newkey_cnt)
|
||||
,max_key=%sysevalf(&maxkey+&newkey_cnt)
|
||||
,processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;
|
||||
%end;
|
||||
%else %do;
|
||||
update &maxkeytable
|
||||
set max_key=%eval(&maxkey+&newkey_cnt)
|
||||
set max_key=%sysevalf(&maxkey+&newkey_cnt)
|
||||
,processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt
|
||||
where keytable="&base_libds";
|
||||
%end;
|
||||
%mp_lockanytable(UNLOCK
|
||||
,lib=%scan(&maxkeytable,1,.)
|
||||
,ds=%scan(&maxkeytable,2,.)
|
||||
,ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)
|
||||
,ref=Updating maxkeyvalues with maxkey=%sysevalf(&maxkey+&newkey_cnt)
|
||||
,ctl_ds=&locktable
|
||||
)
|
||||
%end;
|
||||
@@ -237,7 +238,7 @@ quit;
|
||||
/* fill in the missing retained key values */
|
||||
%let tempvar=%mf_getuniquename();
|
||||
data &outds(drop=&tempvar);
|
||||
retain &tempvar %eval(&maxkey+1);
|
||||
retain &tempvar %sysevalf(&maxkey+1);
|
||||
set &tempds2;
|
||||
if &retained_key =. then &retained_key=&tempvar;
|
||||
&tempvar=&tempvar+1;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_assert.sas
|
||||
@li mp_assertcolvals.sas
|
||||
@li mp_assertscope.sas
|
||||
@li mp_retainedkey.sas
|
||||
|
||||
**/
|
||||
@@ -114,3 +115,53 @@ run;
|
||||
desc=Checking append records created,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/** Test 3 - large numeric RK values (avoid exponential notation issue) **/
|
||||
data work.targetds3;
|
||||
set sashelp.class;
|
||||
rk_col=_n_+209100000000;
|
||||
run;
|
||||
|
||||
data work.appendtable3;
|
||||
set sashelp.class;
|
||||
if mod(_n_,2)=0 then name=cats('New',_n_);
|
||||
if _n_<7;
|
||||
run;
|
||||
|
||||
%mp_assertscope(SNAPSHOT)
|
||||
|
||||
%mp_retainedkey(
|
||||
base_lib=X
|
||||
,base_dsn=targetds3
|
||||
,append_lib=X
|
||||
,append_dsn=APPENDTABLE3
|
||||
,retained_key=rk_col
|
||||
,business_key= name
|
||||
,check_uniqueness=NO
|
||||
,maxkeytable=0
|
||||
,locktable=0
|
||||
,outds=work.APPEND3
|
||||
,filter_str=
|
||||
)
|
||||
|
||||
%mp_assertscope(COMPARE,
|
||||
desc=Checking macro scope leakage in mp_retainedkey (test 3)
|
||||
)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(&syscc=0),
|
||||
desc=Checking errors in test 3 (large numeric RK),
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
data work.check3;
|
||||
do val=209100000001,209100000003,209100000005,
|
||||
209100000020,209100000021,209100000022;
|
||||
output;
|
||||
end;
|
||||
run;
|
||||
%mp_assertcolvals(work.append3.rk_col,
|
||||
checkvals=work.check3.val,
|
||||
desc=All large numeric values have a match,
|
||||
test=ALLVALS
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user