1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-05 00:20:05 +00:00

Compare commits

...

9 Commits

Author SHA1 Message Date
Allan Bowe
f48c291dce Merge pull request #13 from sasjs/issue12
fix: switching to data step for JSON generation in mp_jsonout and the…
2021-04-08 08:45:54 +01:00
rafgag
18be74a1c2 Update mp_jsonout.sas
mod option added to the file statement in the last %else %if statement (&action=CLOSE) to avoid output file being overwritten
2021-04-08 09:03:05 +02:00
Allan Bowe
456d10a90e fix: switching to data step for JSON generation in mp_jsonout and the sasjs/adapter for improved reliability when data contains special characters. Closes #12 2021-04-07 22:28:42 +00:00
Allan Bowe
a7fdb52231 fix: sasmeta vs basesas results 2021-04-05 18:26:31 +00:00
Allan Bowe
066ed00e44 chore: reducing line length in lint by 5 characters 2021-04-05 13:31:09 +00:00
Allan Bowe
49fbc210ad Update .gitpod.yml 2021-04-05 14:22:58 +01:00
Allan Bowe
951aa474f2 Update .gitpod.dockerfile 2021-04-05 14:16:22 +01:00
Allan Bowe
961dd54ee0 Update .gitpod.dockerfile 2021-04-05 13:29:39 +01:00
Allan Bowe
921354dac7 Update .gitpod.yml 2021-04-05 12:59:31 +01:00
9 changed files with 45 additions and 38 deletions

View File

@@ -1,10 +1,6 @@
FROM gitpod/workspace-full FROM gitpod/workspace-full
RUN sudo apt-get update \ RUN sudo apt-get update \
&& sudo apt-get install -y \ && sudo apt-get install -y \
doxygen \ doxygen \
&& npm i -g npm@latest \
&& npm i -g @sasjs/cli \
&& npm i \
&& sudo rm -rf /var/lib/apt/lists/* && sudo rm -rf /var/lib/apt/lists/*

View File

@@ -1,5 +1,5 @@
tasks: tasks:
- init: npm i && clear - init: npm i -g @sasjs/cli
image: image:
file: .gitpod.dockerfile file: .gitpod.dockerfile

View File

@@ -3,7 +3,7 @@
"noEncodedPasswords": true, "noEncodedPasswords": true,
"hasDoxygenHeader": true, "hasDoxygenHeader": true,
"noSpacesInFileNames": true, "noSpacesInFileNames": true,
"maxLineLength": 140, "maxLineLength": 135,
"lowerCaseFileNames": true, "lowerCaseFileNames": true,
"noTabIndentation": true, "noTabIndentation": true,
"indentationMultiple": 2 "indentationMultiple": 2

17
all.sas
View File

@@ -573,21 +573,23 @@ options noquotelenmax;
or "&sysprocessmode"= "SAS Compute Server" %then %do; or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA SASVIYA
%end; %end;
%else %if "&sysprocessmode"="SAS Stored Process Server" %then %do; %else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA SASMETA
%return; %return;
%end; %end;
%else %do; %else %do;
SAS BASESAS
%return; %return;
%end; %end;
%end; %end;
%else %if %symexist(_metaport) %then %do; %else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA SASMETA
%return; %return;
%end; %end;
%else %do; %else %do;
SAS BASESAS
%return; %return;
%end; %end;
%end; %end;
@@ -4472,7 +4474,8 @@ insert into &outds select distinct * from &append_ds;
/** /**
@file @file
@brief Reset an option to original value @brief Reset an option to original value
@details Inspired by the SAS Jedi - https://blogs.sas.com/content/sastraining/2012/08/14/jedi-sas-tricks-reset-sas-system-options/ @details Inspired by the SAS Jedi -
https://blogs.sas.com/content/sastraining/2012/08/14/jedi-sas-tricks-reset-sas-system-options
Called as follows: Called as follows:
options obs=30; options obs=30;
@@ -11430,8 +11433,8 @@ options noquotelenmax;
needs to be attached to the beginning of the job needs to be attached to the beginning of the job
@param code= Fileref(s) of the actual code to be added @param code= Fileref(s) of the actual code to be added
@param access_token_var= The global macro variable to contain the access token @param access_token_var= The global macro variable to contain the access token
@param grant_type= valid values are "password" or "authorization_code" (unquoted). @param grant_type= valid values are "password" or "authorization_code"
The default is authorization_code. (unquoted). The default is authorization_code.
@param replace= select NO to avoid replacing any existing job in that location @param replace= select NO to avoid replacing any existing job in that location
@param contextname= Choose a specific context on which to run the Job. Leave @param contextname= Choose a specific context on which to run the Job. Leave
blank to use the default context. From Viya 3.5 it is possible to configure blank to use the default context. From Viya 3.5 it is possible to configure

View File

@@ -27,21 +27,23 @@
or "&sysprocessmode"= "SAS Compute Server" %then %do; or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA SASVIYA
%end; %end;
%else %if "&sysprocessmode"="SAS Stored Process Server" %then %do; %else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA SASMETA
%return; %return;
%end; %end;
%else %do; %else %do;
SAS BASESAS
%return; %return;
%end; %end;
%end; %end;
%else %if %symexist(_metaport) %then %do; %else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA SASMETA
%return; %return;
%end; %end;
%else %do; %else %do;
SAS BASESAS
%return; %return;
%end; %end;
%end; %end;

View File

@@ -4,7 +4,10 @@
@details PROC JSON is faster but will produce errs like the ones below if @details PROC JSON is faster but will produce errs like the ones below if
special chars are encountered. special chars are encountered.
> ERROR: Some code points did not transcode.
> An object or array close is not valid at this point in the JSON text. > An object or array close is not valid at this point in the JSON text.
> Date value out of range > Date value out of range
If this happens, try running with ENGINE=DATASTEP. If this happens, try running with ENGINE=DATASTEP.
@@ -14,7 +17,9 @@
filename tmp temp; filename tmp temp;
data class; set sashelp.class;run; data class; set sashelp.class;run;
%mp_jsonout(OPEN,jref=tmp)
%mp_jsonout(OBJ,class,jref=tmp) %mp_jsonout(OBJ,class,jref=tmp)
%mp_jsonout(CLOSE,jref=tmp)
data _null_; data _null_;
infile tmp; infile tmp;
@@ -27,18 +32,18 @@
For more information see https://sasjs.io For more information see https://sasjs.io
@param action Valid values: @param action Valid values:
* OPEN - opens the JSON @li OPEN - opens the JSON
* OBJ - sends a table with each row as an object @li OBJ - sends a table with each row as an object
* ARR - sends a table with each row in an array @li ARR - sends a table with each row in an array
* CLOSE - closes the JSON @li CLOSE - closes the JSON
@param ds the dataset to send. Must be a work table. @param ds the dataset to send. Must be a work table.
@param jref= the fileref to which to send the JSON @param jref= the fileref to which to send the JSON
@param dslabel= the name to give the table in the exported JSON @param dslabel= the name to give the table in the exported JSON
@param fmt= Whether to keep or strip formats from the table @param fmt= Whether to keep or strip formats from the table
@param engine= Which engine to use to send the JSON, options are: @param engine= Which engine to use to send the JSON, valid options are:
* PROCJSON (default) @li PROCJSON (default)
* DATASTEP @li DATASTEP (more reliable when data has non standard characters)
@param dbg= DEPRECATED - was used to conditionally add PRETTY to @param dbg= DEPRECATED - was used to conditionally add PRETTY to
proc json but this can cause line truncation in large files. proc json but this can cause line truncation in large files.
@@ -160,7 +165,7 @@
%end; %end;
%else %if &action=CLOSE %then %do; %else %if &action=CLOSE %then %do;
data _null_;file &jref encoding='utf-8'; data _null_;file &jref encoding='utf-8' mod;
put "}"; put "}";
run; run;
%end; %end;

View File

@@ -1,7 +1,8 @@
/** /**
@file @file
@brief Reset an option to original value @brief Reset an option to original value
@details Inspired by the SAS Jedi - https://blogs.sas.com/content/sastraining/2012/08/14/jedi-sas-tricks-reset-sas-system-options/ @details Inspired by the SAS Jedi -
https://blogs.sas.com/content/sastraining/2012/08/14/jedi-sas-tricks-reset-sas-system-options
Called as follows: Called as follows:
options obs=30; options obs=30;

View File

@@ -39,8 +39,8 @@
needs to be attached to the beginning of the job needs to be attached to the beginning of the job
@param code= Fileref(s) of the actual code to be added @param code= Fileref(s) of the actual code to be added
@param access_token_var= The global macro variable to contain the access token @param access_token_var= The global macro variable to contain the access token
@param grant_type= valid values are "password" or "authorization_code" (unquoted). @param grant_type= valid values are "password" or "authorization_code"
The default is authorization_code. (unquoted). The default is authorization_code.
@param replace= select NO to avoid replacing any existing job in that location @param replace= select NO to avoid replacing any existing job in that location
@param contextname= Choose a specific context on which to run the Job. Leave @param contextname= Choose a specific context on which to run the Job. Leave
blank to use the default context. From Viya 3.5 it is possible to configure blank to use the default context. From Viya 3.5 it is possible to configure

View File

@@ -1,5 +1,5 @@
/** /**
@file mv_webout.sas @file
@brief Send data to/from the SAS Viya Job Execution Service @brief Send data to/from the SAS Viya Job Execution Service
@details This macro should be added to the start of each Job Execution @details This macro should be added to the start of each Job Execution
Service, **immediately** followed by a call to: Service, **immediately** followed by a call to:
@@ -162,7 +162,7 @@
%end; %end;
%else %if &action=ARR or &action=OBJ %then %do; %else %if &action=ARR or &action=OBJ %then %do;
%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt
,jref=&fref,engine=PROCJSON,dbg=%str(&_debug) ,jref=&fref,engine=DATASTEP,dbg=%str(&_debug)
) )
%end; %end;
%else %if &action=CLOSE %then %do; %else %if &action=CLOSE %then %do;