From aa03dd1616861f06179bc69caf6ac90978989534 Mon Sep 17 00:00:00 2001 From: Grzegorz Michalski Date: Fri, 13 Mar 2026 09:11:28 +0100 Subject: [PATCH] feat: Update FILE_MANAGER package to version 3.6.1 with fixes for CHAR/NCHAR/NVARCHAR2 column definitions --- .../MARS-1409/new_version/FILE_MANAGER.pkb | 24 +++++++++++++++---- .../MARS-1409/new_version/FILE_MANAGER.pkg | 5 ++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkb b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkb index 03f019a..7015998 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkb +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkb @@ -1360,8 +1360,19 @@ AS rec.quoted_column_name || ' VARCHAR2(' || rec.data_length || ')' END -- Other character types (preserve original logic) - WHEN rec.data_type IN ('CHAR', 'NCHAR', 'NVARCHAR2') THEN - rec.quoted_column_name || ' ' || rec.data_type || '(' || rec.data_length || ')' + -- MARS-1468: Fixed CHAR to use char_used/char_length (same as VARCHAR2 fix in MARS-1056) + WHEN rec.data_type = 'CHAR' THEN + CASE + WHEN rec.char_used = 'C' THEN + rec.quoted_column_name || ' CHAR(' || rec.char_length || ' CHAR)' + WHEN rec.char_used = 'B' THEN + rec.quoted_column_name || ' CHAR(' || rec.data_length || ' BYTE)' + ELSE + rec.quoted_column_name || ' CHAR(' || rec.data_length || ')' + END + -- MARS-1468: NCHAR/NVARCHAR2 - use char_length (data_length stores bytes in AL16UTF16, e.g. NCHAR(1) => data_length=2 but char_length=1) + WHEN rec.data_type IN ('NCHAR', 'NVARCHAR2') THEN + rec.quoted_column_name || ' ' || rec.data_type || '(' || rec.char_length || ')' WHEN rec.data_type = 'NUMBER' THEN rec.quoted_column_name || ' ' || rec.data_type || CASE @@ -1396,8 +1407,13 @@ AS -- Other TIMESTAMP types (without timezone) -- SQL*Loader syntax: CHAR(length) DATE_FORMAT TIMESTAMP MASK "format" (not: TIMESTAMP 'format') rec.quoted_column_name || ' CHAR(35) DATE_FORMAT TIMESTAMP MASK ' || CHR(39) || NORMALIZE_DATE_FORMAT(GET_DATE_FORMAT(pTemplateTableName => pTemplateTableName, pColumnName => rec.column_name)) || CHR(39) - WHEN rec.data_type IN ('CHAR', 'NCHAR', 'VARCHAR2', 'NVARCHAR2') THEN - -- For CSV field definitions, use data_length for CHAR() specification + WHEN rec.data_type IN ('VARCHAR2', 'CHAR') THEN + -- MARS-1468: For CHAR use char_length when char semantics (C), otherwise data_length + rec.quoted_column_name || ' CHAR(' || + CASE WHEN rec.char_used = 'C' THEN rec.char_length ELSE rec.data_length END + || ')' + WHEN rec.data_type IN ('NCHAR', 'NVARCHAR2') THEN + -- For CSV field definitions, use data_length for NCHAR/NVARCHAR2 rec.quoted_column_name || ' CHAR(' || rec.data_length || ')' ELSE rec.quoted_column_name diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkg b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkg index 1e3ad9a..0b22c58 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkg +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_MANAGER.pkg @@ -17,12 +17,13 @@ AS **/ -- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH) - PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.6.0'; - PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-27 09:00:00'; + PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.6.1'; + PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-03-13 09:00:00'; PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski'; -- Version History (Latest changes first) VERSION_HISTORY CONSTANT VARCHAR2(4000) := + '3.6.1 (2026-03-13): MARS-1468 - Fixed CHAR/NCHAR/NVARCHAR2 column definitions in GENERATE_EXTERNAL_TABLE_PARAMS: CHAR now uses char_used/char_length semantics; NCHAR/NVARCHAR2 use char_length (data_length stores bytes in AL16UTF16)' || CHR(13)||CHR(10) || '3.6.0 (2026-02-27): MARS-1409 - Added A_WORKFLOW_HISTORY_KEY tracking in A_SOURCE_FILE_RECEIVED. Each file now stores its workflow execution key extracted during VALIDATE_SOURCE_FILE_RECEIVED' || CHR(13)||CHR(10) || '3.5.1 (2026-02-24): Fixed TIMESTAMP field syntax in GENERATE_EXTERNAL_TABLE_PARAMS for SQL*Loader compatibility (CHAR(35) DATE_FORMAT TIMESTAMP MASK format)' || CHR(13)||CHR(10) || '3.3.2 (2026-02-20): MARS-828 - Fixed threshold column names in GET_DET_SOURCE_FILE_CONFIG_INFO for MARS-828 compatibility' || CHR(13)||CHR(10) ||