Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52ae3404ee | ||
| eecb4f4f53 | |||
| 744345af81 | |||
|
|
7694d1b0fb | ||
|
|
d8010d4c0c | ||
| a57b49c936 | |||
| a84ba41ea9 | |||
| dc200646f7 | |||
| e273e870ef |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -1,3 +1,23 @@
|
||||
## [7.4.1](https://git.datacontroller.io/dc/dc/compare/v7.4.0...v7.4.1) (2026-03-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* support for SASIOSNF engine (SNOW alias) plus meta assignment ([7694d1b](https://git.datacontroller.io/dc/dc/commit/7694d1b0fb2bd0407c8598147fbae87a00d889a8))
|
||||
|
||||
# [7.4.0](https://git.datacontroller.io/dc/dc/compare/v7.3.0...v7.4.0) (2026-02-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* cli bump for mf_getscheme support ([a84ba41](https://git.datacontroller.io/dc/dc/commit/a84ba41ea9f0c97ae24f0a572b8cf5ec200f2132))
|
||||
* missing upcase on SNOW section, plus local sasjs target ([dc20064](https://git.datacontroller.io/dc/dc/commit/dc200646f7df2fd1910841f392c314532aae7581))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* SAS code changes for snowflake support ([e273e87](https://git.datacontroller.io/dc/dc/commit/e273e870efbf7875db869b760f2c7b1f39d571ae))
|
||||
|
||||
# [7.3.0](https://git.datacontroller.io/dc/dc/compare/v7.2.8...v7.3.0) (2026-02-10)
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "dcfrontend",
|
||||
"version": "7.3.0",
|
||||
"version": "7.4.1",
|
||||
"description": "Data Controller",
|
||||
"devDependencies": {
|
||||
"@saithodev/semantic-release-gitea": "^2.1.0",
|
||||
|
||||
994
sas/package-lock.json
generated
994
sas/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@sasjs/cli": "^4.13.1",
|
||||
"@sasjs/core": "^4.60.0"
|
||||
"@sasjs/cli": "^4.15.0",
|
||||
"@sasjs/core": "^4.62.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,8 +26,7 @@ NOTES:
|
||||
|
||||
One cannot use BETWEEN
|
||||
One cannot use &xx_from LE [tstamp] LE &xx_from (equivalent to above).
|
||||
Background:
|
||||
http://stackoverflow.com/questions/20005950/best-practice-for-scd-date-pairs-closing-opening-timestamps
|
||||
Background: https://stackoverflow.com/questions/20005950
|
||||
|
||||
Areas for optimisation
|
||||
- loading temporal history (currently experimental)
|
||||
@@ -220,7 +219,8 @@ Areas for optimisation
|
||||
|
||||
%local engine_type;
|
||||
%let engine_type=%mf_getengine(&base_lib);
|
||||
%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0
|
||||
%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES
|
||||
or &engine_type=SNOW or &engine_type=SASIOSNF)
|
||||
%then %do;
|
||||
%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;
|
||||
%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;
|
||||
@@ -636,7 +636,9 @@ data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )
|
||||
%dc_assignlib(WRITE,&base_lib,passthru=myAlias)
|
||||
create table work.bitemp0_base as select * from connection to myAlias(
|
||||
%end;
|
||||
%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;
|
||||
%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW
|
||||
or &engine_type=SASIOSNF
|
||||
%then %do;
|
||||
/* grab schema */
|
||||
%let baselib_schema=%mf_getschema(&base_lib);
|
||||
%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;
|
||||
@@ -652,18 +654,24 @@ data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )
|
||||
call symputx('redcnt',x,'l');
|
||||
run;
|
||||
%end;
|
||||
/* cannot persist temp tables so must create a temporary permanent table */
|
||||
%let temp_table=%mf_getuniquename(prefix=XDCTEMP);
|
||||
%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));
|
||||
%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then
|
||||
%let base_table=(select * from &baselib_schema.&base_dsn
|
||||
where timestamp &sqlnow < &tech_to );
|
||||
%else %let base_table=&baselib_schema.&base_dsn;
|
||||
/* make empty table first - must clone & drop extra cols as autoload is bad */
|
||||
/* make in-db empty table with PK + MD5 only */
|
||||
%dc_assignlib(WRITE,&base_lib,passthru=myAlias)
|
||||
|
||||
exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;
|
||||
%if &engine_type=REDSHIFT %then %do;
|
||||
exec (alter table &temp_table alter sortkey none) by myAlias;
|
||||
%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;
|
||||
exec (create transient table &baselib_schema.&temp_table
|
||||
like &baselib_schema.&base_dsn
|
||||
) by myAlias;
|
||||
%end;
|
||||
%else %do;
|
||||
/* cannot persist temp tables so must create a temporary permanent table */
|
||||
exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;
|
||||
%if &engine_type=REDSHIFT %then %do;
|
||||
exec (alter table &temp_table alter sortkey none) by myAlias;
|
||||
%end;
|
||||
%end;
|
||||
%local dropcols;
|
||||
%let dropcols=%mf_wordsinstr1butnotstr2(
|
||||
@@ -678,9 +686,12 @@ data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )
|
||||
exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;
|
||||
/* create view to strip formats and avoid warns in log */
|
||||
data work.vw_bitemp0/view=work.vw_bitemp0;
|
||||
/* inherit remote length to handle byte expansion */
|
||||
if 0 then set &base_lib..&temp_table(keep=&md5_col);
|
||||
set work.bitemp0_append(keep=&pk &md5_col);
|
||||
format _all_;
|
||||
run;
|
||||
|
||||
proc append base=&base_lib..&temp_table
|
||||
%if &engine_type=REDSHIFT %then %do;
|
||||
(
|
||||
@@ -733,6 +744,7 @@ data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )
|
||||
|
||||
|
||||
%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES
|
||||
or &engine_type=SNOW or &engine_type=SASIOSNF
|
||||
%then %do;
|
||||
); proc sql; drop table &base_lib.."&temp_table"n;
|
||||
%end;
|
||||
@@ -1187,7 +1199,7 @@ run;
|
||||
%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)
|
||||
%then %do;
|
||||
data _null_;
|
||||
putlog "&sysmacroname: &loadtype operation using &engine_type engine";
|
||||
putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";
|
||||
run;
|
||||
%local flexinow;
|
||||
proc sql;
|
||||
@@ -1203,16 +1215,27 @@ run;
|
||||
%dc_assignlib(WRITE,&base_lib,passthru=myAlias)
|
||||
execute(
|
||||
%end;
|
||||
%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;
|
||||
%let innertable=%mf_getuniquename(prefix=XDCTEMP);
|
||||
%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW
|
||||
or &engine_type=SASIOSNF
|
||||
%then %do;
|
||||
%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));
|
||||
%let top_table=&baselib_schema.&base_dsn;
|
||||
%let flexinow=timestamp &SQLNOW;
|
||||
/* make empty table first - must clone & drop extra cols
|
||||
as autoload is bad */
|
||||
%dc_assignlib(WRITE,&base_lib,passthru=myAlias)
|
||||
exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;
|
||||
%if &engine_type=REDSHIFT %then %do;
|
||||
exec (alter table &innertable alter sortkey none) by myAlias;
|
||||
%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;
|
||||
exec (create transient table &baselib_schema.&innertable
|
||||
like &baselib_schema.&base_dsn
|
||||
) by myAlias;
|
||||
%end;
|
||||
%else %do;
|
||||
exec (create table &innertable
|
||||
(like &baselib_schema.&base_dsn)
|
||||
) by myAlias;
|
||||
%if &engine_type=REDSHIFT %then %do;
|
||||
exec (alter table &innertable alter sortkey none) by myAlias;
|
||||
%end;
|
||||
%end;
|
||||
%let dropcols=%mf_wordsinstr1butnotstr2(
|
||||
str1=%upcase(%mf_getvarlist(&basecopy))
|
||||
@@ -1240,6 +1263,7 @@ run;
|
||||
execute(
|
||||
%end;
|
||||
%else %do;
|
||||
%put Not using passthrough for *&engine_type* engine;
|
||||
%let innertable=bitemp5d_subquery;
|
||||
%let top_table=&base_lib..&base_dsn;
|
||||
%let flexinow=&now;
|
||||
@@ -1292,6 +1316,7 @@ run;
|
||||
1=1);
|
||||
|
||||
%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES
|
||||
or &engine_type=SNOW or &engine_type=SASIOSNF
|
||||
%then %do;
|
||||
) by myAlias;
|
||||
execute (drop table &baselib_schema.&innertable) by myAlias;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
@file mpe_refreshtables.sas
|
||||
@file
|
||||
@brief Refreshes the data catalog
|
||||
@details Assumes library is already assigned.
|
||||
Usage:
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
@version 9.3
|
||||
@author 4GL Apps Ltd
|
||||
|
||||
**/
|
||||
|
||||
%macro mpe_refreshcatalogs(lib,cat=#all);
|
||||
|
||||
@@ -238,6 +238,43 @@
|
||||
"assetPaths": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "local",
|
||||
"serverUrl": "http://localhost:5000",
|
||||
"serverType": "SASJS",
|
||||
"httpsAgentOptions": {
|
||||
"rejectUnauthorized": false,
|
||||
"allowInsecureRequests": true
|
||||
},
|
||||
"appLoc": "/Public/app/dc",
|
||||
"deployConfig": {
|
||||
"deployServicePack": true,
|
||||
"deployScripts": []
|
||||
},
|
||||
"macroFolders": [
|
||||
"sasjs/targets/server/macros_server"
|
||||
],
|
||||
"programFolders": [
|
||||
"sasjs/db/datactrl"
|
||||
],
|
||||
"serviceConfig": {
|
||||
"serviceFolders": [
|
||||
"sasjs/targets/server/services_server/admin",
|
||||
"sasjs/targets/server/services_server/usernav"
|
||||
],
|
||||
"initProgram": "sasjs/utils/serviceinitserver.sas",
|
||||
"termProgram": "",
|
||||
"macroVars": {}
|
||||
},
|
||||
"streamConfig": {
|
||||
"streamWeb": true,
|
||||
"streamWebFolder": "web",
|
||||
"webSourcePath": "../client/dist",
|
||||
"streamServiceName": "DataController",
|
||||
"streamLogo": "favicon.ico",
|
||||
"assetPaths": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "server-mihajlo",
|
||||
"serverUrl": "https://sas9.4gl.io",
|
||||
|
||||
Reference in New Issue
Block a user