diff --git a/all.sas b/all.sas
index d706dc5..aa7d526 100644
--- a/all.sas
+++ b/all.sas
@@ -20497,7 +20497,7 @@ data _null_;
put ' sasjs_tables SYS_JES_JOB_URI; ';
put '%if %index("&_debug",log) %then %let _debug=131; ';
put ' ';
- put '%local i tempds; ';
+ put '%local i tempds table; ';
put '%let action=%upcase(&action); ';
put ' ';
put '%if &action=FETCH %then %do; ';
@@ -20512,60 +20512,35 @@ data _null_;
put ' %end; ';
put ' ';
put ' /* if the sasjs_tables param is passed, we expect param based upload */ ';
- put ' %if %length(&sasjs_tables.XX)>2 %then %do; ';
- put ' filename _sasjs "%sysfunc(pathname(work))/sasjs.lua"; ';
- put ' data _null_; ';
- put ' file _sasjs; ';
- put ' put ''s=sas.symget("sasjs_tables")''; ';
- put ' put ''if(s:sub(1,7) == "%nrstr(")''; ';
- put ' put ''then''; ';
- put ' put '' tablist=s:sub(8,s:len()-1)''; ';
- put ' put ''else''; ';
- put ' put '' tablist=s''; ';
- put ' put ''end''; ';
- put ' put ''for i = 1,sas.countw(tablist) ''; ';
- put ' put ''do ''; ';
- put ' put '' tab=sas.scan(tablist,i)''; ';
- put ' put '' sasdata=""''; ';
- put ' put '' if (sas.symexist("sasjs"..i.."data0")==0)''; ';
- put ' put '' then''; ';
- put ' /* TODO - condense this logic */ ';
- put ' put '' s=sas.symget("sasjs"..i.."data")''; ';
- put ' put '' if(s:sub(1,7) == "%nrstr(")''; ';
- put ' put '' then''; ';
- put ' put '' sasdata=s:sub(8,s:len()-1)''; ';
- put ' put '' else''; ';
- put ' put '' sasdata=s''; ';
- put ' put '' end''; ';
- put ' put '' else''; ';
- put ' put '' for d = 1, sas.symget("sasjs"..i.."data0")''; ';
- put ' put '' do''; ';
- put ' put '' s=sas.symget("sasjs"..i.."data"..d)''; ';
- put ' put '' if(s:sub(1,7) == "%nrstr(")''; ';
- put ' put '' then''; ';
- put ' put '' sasdata=sasdata..s:sub(8,s:len()-1)''; ';
- put ' put '' else''; ';
- put ' put '' sasdata=sasdata..s''; ';
- put ' put '' end''; ';
- put ' put '' end''; ';
- put ' put '' end''; ';
- put ' put '' file = io.open(sas.pathname("work").."/"..tab..".csv", "a")''; ';
- put ' put '' io.output(file)''; ';
- put ' put '' io.write(sasdata)''; ';
- put ' put '' io.close(file)''; ';
- put ' put ''end''; ';
- put ' run; ';
- put ' %inc _sasjs; ';
+ put ' %if %length(&sasjs_tables.X)>1 %then %do; ';
put ' ';
- put ' /* now read in the data */ ';
+ put ' /* convert data from macro variables to datasets */ ';
put ' %do i=1 %to %sysfunc(countw(&sasjs_tables)); ';
- put ' %local table; %let table=%scan(&sasjs_tables,&i); ';
+ put ' %let table=%scan(&sasjs_tables,&i,%str( )); ';
+ put ' %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1; ';
+ put ' data _null_; ';
+ put ' file "%sysfunc(pathname(work))/&table..csv" recfm=n; ';
+ put ' retain nrflg 0; ';
+ put ' length line $32767; ';
+ put ' do i=1 to &&sasjs&i.data0; ';
+ put ' if &&sasjs&i.data0=1 then line=symget("sasjs&i.data"); ';
+ put ' else line=symget(cats("sasjs&i.data",i)); ';
+ put ' if i=1 and substr(line,1,7)=''%nrstr('' then do; ';
+ put ' nrflg=1; ';
+ put ' line=substr(line,8); ';
+ put ' end; ';
+ put ' if i=&&sasjs&i.data0 and nrflg=1 then do; ';
+ put ' line=substr(line,1,length(line)-1); ';
+ put ' end; ';
+ put ' put line +(-1) @; ';
+ put ' end; ';
+ put ' run; ';
put ' data _null_; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' list; ';
- put ' data &table; ';
+ put ' data work.&table; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd ';
put ' termstr=crlf; ';
put ' input &input_statement; ';
@@ -24329,7 +24304,7 @@ filename &fref1 clear;
sasjs_tables SYS_JES_JOB_URI;
%if %index("&_debug",log) %then %let _debug=131;
-%local i tempds;
+%local i tempds table;
%let action=%upcase(&action);
%if &action=FETCH %then %do;
@@ -24344,60 +24319,35 @@ filename &fref1 clear;
%end;
/* if the sasjs_tables param is passed, we expect param based upload */
- %if %length(&sasjs_tables.XX)>2 %then %do;
- filename _sasjs "%sysfunc(pathname(work))/sasjs.lua";
- data _null_;
- file _sasjs;
- put 's=sas.symget("sasjs_tables")';
- put 'if(s:sub(1,7) == "%nrstr(")';
- put 'then';
- put ' tablist=s:sub(8,s:len()-1)';
- put 'else';
- put ' tablist=s';
- put 'end';
- put 'for i = 1,sas.countw(tablist) ';
- put 'do ';
- put ' tab=sas.scan(tablist,i)';
- put ' sasdata=""';
- put ' if (sas.symexist("sasjs"..i.."data0")==0)';
- put ' then';
- /* TODO - condense this logic */
- put ' s=sas.symget("sasjs"..i.."data")';
- put ' if(s:sub(1,7) == "%nrstr(")';
- put ' then';
- put ' sasdata=s:sub(8,s:len()-1)';
- put ' else';
- put ' sasdata=s';
- put ' end';
- put ' else';
- put ' for d = 1, sas.symget("sasjs"..i.."data0")';
- put ' do';
- put ' s=sas.symget("sasjs"..i.."data"..d)';
- put ' if(s:sub(1,7) == "%nrstr(")';
- put ' then';
- put ' sasdata=sasdata..s:sub(8,s:len()-1)';
- put ' else';
- put ' sasdata=sasdata..s';
- put ' end';
- put ' end';
- put ' end';
- put ' file = io.open(sas.pathname("work").."/"..tab..".csv", "a")';
- put ' io.output(file)';
- put ' io.write(sasdata)';
- put ' io.close(file)';
- put 'end';
- run;
- %inc _sasjs;
+ %if %length(&sasjs_tables.X)>1 %then %do;
- /* now read in the data */
+ /* convert data from macro variables to datasets */
%do i=1 %to %sysfunc(countw(&sasjs_tables));
- %local table; %let table=%scan(&sasjs_tables,&i);
+ %let table=%scan(&sasjs_tables,&i,%str( ));
+ %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;
+ data _null_;
+ file "%sysfunc(pathname(work))/&table..csv" recfm=n;
+ retain nrflg 0;
+ length line $32767;
+ do i=1 to &&sasjs&i.data0;
+ if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");
+ else line=symget(cats("sasjs&i.data",i));
+ if i=1 and substr(line,1,7)='%nrstr(' then do;
+ nrflg=1;
+ line=substr(line,8);
+ end;
+ if i=&&sasjs&i.data0 and nrflg=1 then do;
+ line=substr(line,1,length(line)-1);
+ end;
+ put line +(-1) @;
+ end;
+ run;
data _null_;
infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;
input;
if _n_=1 then call symputx('input_statement',_infile_);
list;
- data &table;
+ data work.&table;
infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd
termstr=crlf;
input &input_statement;
diff --git a/sasjs/sasjsconfig.json b/sasjs/sasjsconfig.json
index a88f06c..27c72a6 100644
--- a/sasjs/sasjsconfig.json
+++ b/sasjs/sasjsconfig.json
@@ -39,12 +39,6 @@
"viya",
"tests/viyaonly"
],
- "programFolders": [],
- "binaryFolders": [],
- "deployConfig": {
- "deployServicePack": true,
- "deployScripts": []
- },
"contextName": "SAS Job Execution compute context"
},
{
@@ -71,7 +65,7 @@
},
{
"name": "server",
- "serverUrl": "https://sas.analytium.co.uk:5000",
+ "serverUrl": "",
"serverType": "SASJS",
"httpsAgentOptions": {
"allowInsecureRequests": false
diff --git a/tests/crossplatform/mp_hashdataset.test.sas b/tests/crossplatform/mp_hashdataset.test.sas
index f08b9cd..72ae0ef 100644
--- a/tests/crossplatform/mp_hashdataset.test.sas
+++ b/tests/crossplatform/mp_hashdataset.test.sas
@@ -3,6 +3,7 @@
@brief Testing mp_hashdataset.sas macro
SAS Macros
+ @li mf_nobs.sas
@li mp_hashdataset.sas
@li mp_assert.sas
@li mp_assertscope.sas
diff --git a/tests/viyaonly/mv_webout.test.sas b/tests/viyaonly/mv_webout.test.sas
index 2be9b3a..24ce20c 100644
--- a/tests/viyaonly/mv_webout.test.sas
+++ b/tests/viyaonly/mv_webout.test.sas
@@ -1,15 +1,33 @@
/**
@file
- @brief Testing mm_webout macro
+ @brief Testing mv_webout macro
SAS Macros
@li mf_getuniquefileref.sas
@li mv_webout.sas
@li mp_assert.sas
+ @li mp_assertdsobs.sas
**/
+/* testing FETCHing (WEB approach) */
+
+data _null_;
+ call symputx('sasjs1data','area:$char4.'!!'0d0a'x!!'Adak');
+ call symputx('sasjs_tables','areas');
+run;
+%put &=sasjs1data;
+
+%mv_webout(FETCH)
+
+%mp_assertdsobs(work.areas,
+ desc=Test input table has 1 row,
+ test=EQUALS 1,
+ outds=work.test_results
+)
+
+
%let fref=%mf_getuniquefileref();
%global _metaperson;
data some datasets;
@@ -38,4 +56,4 @@ run;
%mp_assert(
iftrue=(%str(&checkval)=%str(&sysvlong)),
desc=Check if the sysvlong value was created
-)
\ No newline at end of file
+)
diff --git a/viya/mv_createwebservice.sas b/viya/mv_createwebservice.sas
index fcb7abf..acbc844 100644
--- a/viya/mv_createwebservice.sas
+++ b/viya/mv_createwebservice.sas
@@ -461,7 +461,7 @@ data _null_;
put ' sasjs_tables SYS_JES_JOB_URI; ';
put '%if %index("&_debug",log) %then %let _debug=131; ';
put ' ';
- put '%local i tempds; ';
+ put '%local i tempds table; ';
put '%let action=%upcase(&action); ';
put ' ';
put '%if &action=FETCH %then %do; ';
@@ -476,60 +476,35 @@ data _null_;
put ' %end; ';
put ' ';
put ' /* if the sasjs_tables param is passed, we expect param based upload */ ';
- put ' %if %length(&sasjs_tables.XX)>2 %then %do; ';
- put ' filename _sasjs "%sysfunc(pathname(work))/sasjs.lua"; ';
- put ' data _null_; ';
- put ' file _sasjs; ';
- put ' put ''s=sas.symget("sasjs_tables")''; ';
- put ' put ''if(s:sub(1,7) == "%nrstr(")''; ';
- put ' put ''then''; ';
- put ' put '' tablist=s:sub(8,s:len()-1)''; ';
- put ' put ''else''; ';
- put ' put '' tablist=s''; ';
- put ' put ''end''; ';
- put ' put ''for i = 1,sas.countw(tablist) ''; ';
- put ' put ''do ''; ';
- put ' put '' tab=sas.scan(tablist,i)''; ';
- put ' put '' sasdata=""''; ';
- put ' put '' if (sas.symexist("sasjs"..i.."data0")==0)''; ';
- put ' put '' then''; ';
- put ' /* TODO - condense this logic */ ';
- put ' put '' s=sas.symget("sasjs"..i.."data")''; ';
- put ' put '' if(s:sub(1,7) == "%nrstr(")''; ';
- put ' put '' then''; ';
- put ' put '' sasdata=s:sub(8,s:len()-1)''; ';
- put ' put '' else''; ';
- put ' put '' sasdata=s''; ';
- put ' put '' end''; ';
- put ' put '' else''; ';
- put ' put '' for d = 1, sas.symget("sasjs"..i.."data0")''; ';
- put ' put '' do''; ';
- put ' put '' s=sas.symget("sasjs"..i.."data"..d)''; ';
- put ' put '' if(s:sub(1,7) == "%nrstr(")''; ';
- put ' put '' then''; ';
- put ' put '' sasdata=sasdata..s:sub(8,s:len()-1)''; ';
- put ' put '' else''; ';
- put ' put '' sasdata=sasdata..s''; ';
- put ' put '' end''; ';
- put ' put '' end''; ';
- put ' put '' end''; ';
- put ' put '' file = io.open(sas.pathname("work").."/"..tab..".csv", "a")''; ';
- put ' put '' io.output(file)''; ';
- put ' put '' io.write(sasdata)''; ';
- put ' put '' io.close(file)''; ';
- put ' put ''end''; ';
- put ' run; ';
- put ' %inc _sasjs; ';
+ put ' %if %length(&sasjs_tables.X)>1 %then %do; ';
put ' ';
- put ' /* now read in the data */ ';
+ put ' /* convert data from macro variables to datasets */ ';
put ' %do i=1 %to %sysfunc(countw(&sasjs_tables)); ';
- put ' %local table; %let table=%scan(&sasjs_tables,&i); ';
+ put ' %let table=%scan(&sasjs_tables,&i,%str( )); ';
+ put ' %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1; ';
+ put ' data _null_; ';
+ put ' file "%sysfunc(pathname(work))/&table..csv" recfm=n; ';
+ put ' retain nrflg 0; ';
+ put ' length line $32767; ';
+ put ' do i=1 to &&sasjs&i.data0; ';
+ put ' if &&sasjs&i.data0=1 then line=symget("sasjs&i.data"); ';
+ put ' else line=symget(cats("sasjs&i.data",i)); ';
+ put ' if i=1 and substr(line,1,7)=''%nrstr('' then do; ';
+ put ' nrflg=1; ';
+ put ' line=substr(line,8); ';
+ put ' end; ';
+ put ' if i=&&sasjs&i.data0 and nrflg=1 then do; ';
+ put ' line=substr(line,1,length(line)-1); ';
+ put ' end; ';
+ put ' put line +(-1) @; ';
+ put ' end; ';
+ put ' run; ';
put ' data _null_; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' list; ';
- put ' data &table; ';
+ put ' data work.&table; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd ';
put ' termstr=crlf; ';
put ' input &input_statement; ';
diff --git a/viya/mv_webout.sas b/viya/mv_webout.sas
index 7480b4d..20a81c9 100644
--- a/viya/mv_webout.sas
+++ b/viya/mv_webout.sas
@@ -49,7 +49,7 @@
sasjs_tables SYS_JES_JOB_URI;
%if %index("&_debug",log) %then %let _debug=131;
-%local i tempds;
+%local i tempds table;
%let action=%upcase(&action);
%if &action=FETCH %then %do;
@@ -64,60 +64,35 @@
%end;
/* if the sasjs_tables param is passed, we expect param based upload */
- %if %length(&sasjs_tables.XX)>2 %then %do;
- filename _sasjs "%sysfunc(pathname(work))/sasjs.lua";
- data _null_;
- file _sasjs;
- put 's=sas.symget("sasjs_tables")';
- put 'if(s:sub(1,7) == "%nrstr(")';
- put 'then';
- put ' tablist=s:sub(8,s:len()-1)';
- put 'else';
- put ' tablist=s';
- put 'end';
- put 'for i = 1,sas.countw(tablist) ';
- put 'do ';
- put ' tab=sas.scan(tablist,i)';
- put ' sasdata=""';
- put ' if (sas.symexist("sasjs"..i.."data0")==0)';
- put ' then';
- /* TODO - condense this logic */
- put ' s=sas.symget("sasjs"..i.."data")';
- put ' if(s:sub(1,7) == "%nrstr(")';
- put ' then';
- put ' sasdata=s:sub(8,s:len()-1)';
- put ' else';
- put ' sasdata=s';
- put ' end';
- put ' else';
- put ' for d = 1, sas.symget("sasjs"..i.."data0")';
- put ' do';
- put ' s=sas.symget("sasjs"..i.."data"..d)';
- put ' if(s:sub(1,7) == "%nrstr(")';
- put ' then';
- put ' sasdata=sasdata..s:sub(8,s:len()-1)';
- put ' else';
- put ' sasdata=sasdata..s';
- put ' end';
- put ' end';
- put ' end';
- put ' file = io.open(sas.pathname("work").."/"..tab..".csv", "a")';
- put ' io.output(file)';
- put ' io.write(sasdata)';
- put ' io.close(file)';
- put 'end';
- run;
- %inc _sasjs;
+ %if %length(&sasjs_tables.X)>1 %then %do;
- /* now read in the data */
+ /* convert data from macro variables to datasets */
%do i=1 %to %sysfunc(countw(&sasjs_tables));
- %local table; %let table=%scan(&sasjs_tables,&i);
+ %let table=%scan(&sasjs_tables,&i,%str( ));
+ %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;
+ data _null_;
+ file "%sysfunc(pathname(work))/&table..csv" recfm=n;
+ retain nrflg 0;
+ length line $32767;
+ do i=1 to &&sasjs&i.data0;
+ if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");
+ else line=symget(cats("sasjs&i.data",i));
+ if i=1 and substr(line,1,7)='%nrstr(' then do;
+ nrflg=1;
+ line=substr(line,8);
+ end;
+ if i=&&sasjs&i.data0 and nrflg=1 then do;
+ line=substr(line,1,length(line)-1);
+ end;
+ put line +(-1) @;
+ end;
+ run;
data _null_;
infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;
input;
if _n_=1 then call symputx('input_statement',_infile_);
list;
- data &table;
+ data work.&table;
infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd
termstr=crlf;
input &input_statement;