From a51d9e5574383e5d1e1943c95261fbce63e8788d Mon Sep 17 00:00:00 2001 From: dc Date: Mon, 19 Oct 2026 11:37:31 +0000 Subject: [PATCH] fix(makedata): shorten the DC_MAXCELLS_WEBEDIT description to fit var_desc MPE_CONFIG.VAR_DESC is varchar(300), but the description written for DC_MAXCELLS_WEBEDIT is 336 characters, so the insert truncates it. The truncation raises a WARNING, which sets SYSCC, and makedata aborts on `&syscc ne 0` immediately after %mpe_makedata(): WARNING: Character expression will be truncated when assigned to character column var_desc. ERROR: Execution terminated by an ABORT CANCEL statement The abort happens before the settings job is written, so a fresh deploy ends with no control library and no settings.sas at all. It goes unnoticed because the SAS test suite reuses whatever library is already on the estate - the first time it bites is a deploy from scratch. The description is shortened to 201 characters in both places it is written - mpe_makedata (new installs) and the 20261003 row/cell limits migration (existing installs). The rationale it carried is user-visible help text, so it moves to a SAS comment above each insert rather than being dropped. Verified on a real Viya estate, deploying from scratch: - before: makedata aborted, "Err during VIYA1337 build", no settings.sas - after: makedata completed with zero warnings, and the SAS test suite then ran 59/59 green --- .../db/migrations/20261003_row_and_cell_limits.sas | 10 ++++++---- sas/sasjs/macros/mpe_makedata.sas | 8 +++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/sas/sasjs/db/migrations/20261003_row_and_cell_limits.sas b/sas/sasjs/db/migrations/20261003_row_and_cell_limits.sas index a679022..c332bd3 100644 --- a/sas/sasjs/db/migrations/20261003_row_and_cell_limits.sas +++ b/sas/sasjs/db/migrations/20261003_row_and_cell_limits.sas @@ -97,6 +97,10 @@ quit; set tx_to=&now where var_name='DC_MAXCELLS_WEBEDIT' and var_active=1 and &now lt tx_to; + /* Why the cell limit exists, kept out of var_desc - MPE_CONFIG.VAR_DESC + is varchar(300), and a truncation WARNING aborts the build. A wide + table is expensive long before it is tall - 250 rows of a 1000 column + table is a quarter of a million cells. */ insert into &dclib..mpe_config set tx_from=&now ,tx_to='31DEC9999:23:59:59'dt @@ -106,10 +110,8 @@ quit; ,var_active=1 ,var_desc='This sets the maximum number of CELLS (rows multiplied by' !!' columns) that can be loaded into the browser for editing in the' - !!' EDIT screen. It exists because a wide table is expensive long' - !!' before it is tall - 250 rows of a 1000 column table is a quarter' - !!' of a million cells. Whichever of this and DC_MAXOBS_WEBEDIT is' - !!' reached first applies.'; + !!' EDIT screen. Whichever of this and DC_MAXOBS_WEBEDIT is reached' + !!' first applies.'; quit; %end; %else %do; diff --git a/sas/sasjs/macros/mpe_makedata.sas b/sas/sasjs/macros/mpe_makedata.sas index 8cd33f7..5416c93 100644 --- a/sas/sasjs/macros/mpe_makedata.sas +++ b/sas/sasjs/macros/mpe_makedata.sas @@ -79,6 +79,10 @@ insert into &lib..mpe_config set !!' will require a decent browser (ie, not IE) and more memory on the' !!' client side. The DC_MAXCELLS_WEBEDIT limit is applied at the same' !!' time, whichever is reached first.'; +/* Why the cell limit exists, kept out of var_desc - MPE_CONFIG.VAR_DESC is + varchar(300), and a truncation WARNING aborts this whole build. A wide + table is expensive long before it is tall - 250 rows of a 1000 column + table is a quarter of a million cells. */ insert into &lib..mpe_config set tx_from=0 ,tx_to='31DEC9999:23:59:59'dt @@ -88,9 +92,7 @@ insert into &lib..mpe_config set ,var_active=1 ,var_desc='This sets the maximum number of CELLS (rows multiplied by' !!' columns) that can be loaded into the browser for editing in the EDIT' - !!' screen. It exists because a wide table is expensive long before it' - !!' is tall - 250 rows of a 1000 column table is a quarter of a million' - !!' cells. Whichever of this and DC_MAXOBS_WEBEDIT is reached first' + !!' screen. Whichever of this and DC_MAXOBS_WEBEDIT is reached first' !!' applies.'; insert into &lib..mpe_config set tx_from=0