Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mv_castabsave.test.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Testing mv_castabsave macro
4
5 <h4> SAS Macros </h4>
6 @li mf_uid.sas
7 @li mp_assert.sas
8 @li mp_assertscope.sas
9 @li mv_castabsave.sas
10
11**/
12
13options mprint;
14
15/* -------------------------------------------------------------------- */
16/* Setup: start a CAS session and load a table that has a tracked */
17/* source file so mv_castabsave can discover it via the REST API */
18/* -------------------------------------------------------------------- */
19cas mysess;
20caslib _all_ assign;
21
22%let testcaslib=Public;
23
24proc cas;
25 table.caslibInfo result=r / ;
26 found=0;
27 do row over r.CASLibInfo;
28 if upcase(row.Name)=upcase("&testcaslib") then found=1;
29 end;
30 if found=0 then do;
31 print "ERROR: caslib &testcaslib not available";
32 exit;
33 end;
34quit;
35%put NOTE: Using testcaslib=&testcaslib;
36
37%let tab1=T%mf_uid();
38
39/* Load sashelp.class into CAS, save as sashdat, reload from that file
40 so the table has a tracked source path (needed for REST discovery) */
41proc casutil;
42 load data=sashelp.class
43 outcaslib="&testcaslib" casout="&tab1" replace;
44 save casdata="&tab1" incaslib="&testcaslib"
45 casout="&tab1..sashdat" outcaslib="&testcaslib" replace;
46 /* Drop any existing global-scope version before promoting */
47 /* runs twice (with quiet) as first would drop local scope if exists */
48 droptable casdata="&tab1" incaslib="&testcaslib" quiet;
49 droptable casdata="&tab1" incaslib="&testcaslib" quiet;
50
51 load casdata="&tab1..sashdat" incaslib="&testcaslib"
52 casout="&tab1" outcaslib="&testcaslib" promote;
53quit;
54
55libname mylib cas caslib="&testcaslib";
56
57
58/* -------------------------------------------------------------------- */
59%put TEST 1 - save in-memory table back to disk + no scope leakage;
60/* -------------------------------------------------------------------- */
61
62/* Source file is removed so that the reload proves mv_castabsave
63 created the file from scratch, not that a prior version existed */
64proc casutil;
65 deletesource casdata="&tab1..sashdat"
66 incaslib="&testcaslib" quiet;
67quit;
68
69/* Insert a sentinel row - it must survive the full save/drop/reload */
70data work.appendme;
71 set mylib.&tab1;
72 name='TESTROW';
73 output;
74 stop;
75proc casutil;
76 load data=work.appendme casout="&tab1" outcaslib="&testcaslib" append;
77quit;
78
79%mp_assertscope(SNAPSHOT)
80
81%mv_castabsave(lib=mylib, table=&tab1, mdebug=1)
82
83%mp_assertscope(COMPARE,
84 desc=Check mv_castabsave does not leak macro variables into GLOBAL scope,
85 ignorelist=MC0_JADP1LEN MC0_JADP2LEN MC0_JADP3LEN MC0_JADPNUM MC0_JADVLEN
86)
87
88proc casutil;
89 droptable casdata="&tab1" incaslib="&testcaslib" quiet;
90 droptable casdata="&tab1" incaslib="&testcaslib" quiet;
91 load casdata="&tab1..sashdat" incaslib="&testcaslib"
92 casout="&tab1" outcaslib="&testcaslib" promote;
93quit;
94
95%let _rowcount=0;
96proc sql noprint;
97 select count(*) into :_rowcount
98 from mylib.&tab1
99 where name='TESTROW';
100quit;
101
102%mp_assert(
103 iftrue=(&_rowcount=1),
104 desc=Check inserted row survives mv_castabsave round-trip to disk
105)
106
107
108/* -------------------------------------------------------------------- */
109%put TEST 2 - save overwrites an existing source file;
110/* -------------------------------------------------------------------- */
111
112/* Source file already exists from the TEST 1 save - append a new row */
113data work.appendme;
114 set mylib.&tab1;
115 name='TESTROW2';
116 output;
117 stop;
118proc casutil;
119 load data=work.appendme casout="&tab1"
120 outcaslib="&testcaslib" append;
121quit;
122
123%mv_castabsave(lib=mylib, table=&tab1, mdebug=1)
124
125proc casutil;
126 droptable casdata="&tab1" incaslib="&testcaslib" quiet;
127 droptable casdata="&tab1" incaslib="&testcaslib" quiet;
128 load casdata="&tab1..sashdat" incaslib="&testcaslib"
129 casout="&tab1" outcaslib="&testcaslib" promote;
130quit;
131
132%let _rowcount=0;
133proc sql noprint;
134 select count(*) into :_rowcount
135 from mylib.&tab1
136 where name='TESTROW2';
137quit;
138
139%mp_assert(
140 iftrue=(&_rowcount=1),
141 desc=Check inserted row survives save over an existing source file
142)
143
144
145/* -------------------------------------------------------------------- */
146/* Teardown */
147/* -------------------------------------------------------------------- */
148libname mylib clear;
149
150proc casutil;
151 droptable casdata="&tab1" incaslib="&testcaslib" quiet;
152 deletesource casdata="&tab1..sashdat"
153 incaslib="&testcaslib" quiet;
154quit;
155
156cas mysess terminate;
157
158%let syscc=0;