A fix is available
APAR status
Closed as program error.
Error description
----------------------------------------------------------- Performance APAR - FASTSORT, ZSPACES, VIOMOVE, COBOL Compiler Error on DBCS Literal, Long Literal Handle Fixes "*ERROR* READ00-02,012 :UNPAIRED OR IMPROPER USE OF QUOTES" error on DBCS value when end quote ends in CC 72. Date opened: 2020-06-15 APAR: Supersedes APAR PH25942 PTF Pre-reqs: All PTFs to date (including PTF UI69636 Date built: 2020.05.20) APAR Pre-reqs: no APAR pre-requisites. Severity: high Users Affected: All IMU V4.1 users Problem Description ------------------- 1. IMU results do not compare to Easytrieve Plus when input display numeric field contains spaces. (Internal request) 2. IMU SORT is not taking advantage of FASTSORT option. (Internal request) 3. IMU CPU utilization for variable length records is high when using IOMODE=NODYNAM. (Case TS003599269 - IMU performance problem) 4. COBOL Is failing to compile when a DBCS literal is assigned to a K (DBCS) field (Case TS003761642 - COBOL fails to Compile) 5. IMU does not support literals over 256 bytes long. (Case TS003804786 - causes 'CCL00-05,012 &WVAL :<SETVM> IMPROPER DATA OR EXCEEDS MAX LENGTH' 6. IMU does not detect hex literal with odd number of digits. This causes COBOL Compiler error. 7. COBOL Compiler is failing when field value is longer than the string length. 8. Customer is getting "*ERROR* READ00-02,012 :UNPAIRED OR IMPROPER USE OF QUOTES" is issued." Problem Summation ----------------- 1. IMU expects numeric display field to contain a numeric value. Spaces is not a valid number. However, this causes IMU output to be different from the Easytrieve Plus output. 2. There was no option in IMU to take advantage of the FASTSORT sort. Note: COBOL SORT qualifies for FASTSORT when COBOL SORT Statement does not contain any exits. IMU always generates COBOL SORT with input and output procedures, thus disqualifying SORT eligibility for FASTSORT. 3. IMU moves &file-IO-AREA to &file-RECORD for the full defined record length to make sure that the trailing bytes for the current record are cleared to spaces. 4. DBCS constants in the Easytrieve Plus logic are internally generated as fields with constant value. Then the field name is used in ASSIGN/MOVE statement instead of the constant value. This works fine when the target field is an alphanumeric field but COBOL fails to compile when the target field is a K (DBCS) field. The problem was introduced by PTF: UI68036 Date: 2020-02-24, 'IMU COBOL compile error on long DBCS literal' change. 5. The maximum literal size is limited to 256 bytes due to internal variable length. 6. IMU passes field value validation to COBOL Step. 7. Literal/constant values longer than the field length are passed on to COBOL compiler. Such values are not allowed by COBOL. 8. Parser is failing to detect the end quote in DBCS string when end quote ends in CC 72. This is an existing bug. Problem Conclusion: ------------------ 1. Added ZSPACES=NO/YES option to place zeros in the receiving field when sending display numeric field is all spaces and the receiving field is A, N, B, P and U field (including BL1, BL3). When ZSPACES=YES is specified, both, signed and unsigned display numeric fields are checked. Where: NO - Do not change spaces to zeros. YES - Change spaces to zeros. The default is ZSPACES=NO (compatiblle with process prior to this change). This option is applied to ASSIGN and MOVE LIKE statements only. 2. Added VIOMOVE=FULL/PART for V/VB/VBS length file data transfer on READ from &FILE-IO-AREA to &FILE-RECORD Where: FULL - Move data into full defined record area. PART - Move data partially into the &FILE-RECORD, i.e., for the length of the sending record. The default is VIOMOVE=FULL (compatible with the process prior to this change). Note: VIOMOVE=PART moves for the size of the retrieved record (the IO-AREA), thus the tail end of the record is not cleared. This fact should be considered when choosing VIOMOVE=PART as the tail end of the record may contain undesired data. The change reduces the CPU utilization when reading variable length records, especially if the average record length is much lower than the actual maximum file record length. The option is applied only when the IOMODE=NODYNAM is in use. 3. FASTSORT=NO/YES option Where: NO - Do not build FASTSORT SORT if Easytrieve Plus SORT statement qualifies for it. YES - BUILD COBOL SORT that qualifies for the FASTSORT COBOL statement. The default is FASTSORT=NO (compatible with process prior to this change). Note: FASTSORT=YES applies to Easytrieve Plus SORTs that do not contain BEFORE exit on the Easytrieve Plus SORT statement. The option is applied only when the IOMODE=NODYNAM is in use. Currently, every SORT statement is generated with INPUT PROCEDURE and OUTPUT PROCEDURE exits. IMU does the FILE I/O. FASTSORT=YES will generate straight COBOL SORT without exits (i.e., the system takes over and does its work). When generating stand-alone COBOL, this option may speed up sorting. 4. The internally generated fields for DBCS literals was changed to a group item, with a subordinate elementary item containing the constant value. The move statement moves the group item into the target field, avoiding COBOL Compiler error. 5. IMU internal variables were changed to maximum of MAXSTR=NNN EASYTRAN/EZPARAMS option. The default size is 2048. Since COBOL literal cannot exceed 320 bytes, IMU generates a group item in working storage with FILLERs in increments of 320 bytes. This allows the literal value to exceed 320 bytes. The method is applied to character and hex literal regardless if literal contains SI/SO controls. 6. Additional checks were added to IMU to verify hex literal for proper value and even number of digits. 7. A change was made to test all literal values to make sure they do not exceed the field length. 8. IMU was changed to detect end quote for DBCS value when it ends in cc 72. Special Installation Instructions --------------------------------- 1. Apply all outstanding PTFs. 2. Apply this APAR/PTF as usual. 3. Add new options to EZPARAMS or via '* EASYTRAN: ' at the top (but before the PARM statement) of Easytrieve Plus source. Do this for options that you intend to use only. 4. Re-translate failing programs and programs with appropriate options to yield maximum results. Modules to be included in the APAR/PTF -------------------------------------- FSOFT01.V4R1M0.SFSYFJCC DEFINE - CCL1 macro byte code module EASYTRAN - CCL1 macro byte code module EASYOVRD - CCL1 macro byte code module EASYT007 - CCL1 macro byte code module FSOFT01.V4R1M0.SFSYLOAD FSCCOBOL - LOAD MODULE XXCCOBOL - LOAD MODULE FSCASSEM - LOAD MODULE FSCCOB31 - LOAD MODULE ---------------------------------------
Local fix
Problem summary
**************************************************************** * USERS AFFECTED: All IMU V4.1 users * **************************************************************** * PROBLEM DESCRIPTION: 1. IMU results do not compare to * * Easytrieve Plus when input display * * numeric field contains spaces. * * 2. IMU SORT is not taking advantage of * * FASTSORT option. * * 3. IMU CPU utilization for variable * * length records is high when using * * IOMODE=NODYNAM. * * 4. COBOL Is failing to compile when a * * DBCS literal is assigned to a K (DBCS) * * field * * 5. IMU does not support literals over * * 256 bytes long. * * 6. IMU does not detect hex literal with * * odd number of digits. * * This causes COBOL Compiler error. * * 7. COBOL Compiler is failing when field * * value is longer than the string length. * * 8. Customer is getting "*ERROR* * * READ00-02,012 :UNPAIRED OR IMPROPER * * USE OF QUOTES" is issued." * **************************************************************** 1. IMU expects numeric display field to contain a numeric value. Spaces is not a valid number. However, this causes IMU output to be different from the Easytrieve Plus output. 2. There was no option in IMU to take advantage of the FASTSORT sort. Note: COBOL SORT qualifies for FASTSORT when COBOL SORT Statement does not contain any exits. IMU always generates COBOL SORT with input and output procedures, thus disqualifying SORT eligibility for FASTSORT. 3. IMU moves &file-IO-AREA to &file-RECORD for the full defined record length to make sure that the trailing bytes for the current record are cleared to spaces. 4. DBCS constants in the Easytrieve Plus logic are internally generated as fields with constant value. Then the field name is used in ASSIGN/MOVE statement instead of the constant value. This works fine when the target field is an alphanumeric field but COBOL fails to compile when the target field is a K (DBCS) field. The problem was introduced by PTF: UI68036 Date: 2020-02-24, 'IMU COBOL compile error on long DBCS literal' change. 5. The maximum literal size is limited to 256 bytes due to internal variable length. 6. IMU passes field value validation to COBOL Step. 7. Literal/constant values longer than the field length are passed on to COBOL compiler. Such values are not allowed by COBOL. 8. Parser is failing to detect the end quote in DBCS string when end quote ends in CC 72. This is an existing bug.
Problem conclusion
1. Added ZSPACES=NO/YES option to place zeros in the receiving field when sending display numeric field is all spaces and the receiving field is A, N, B, P and U field (including BL1, BL3). When ZSPACES=YES is specified, both, signed and unsigned display numeric fields are checked. Where: NO - Do not change spaces to zeros. YES - Change spaces to zeros. The default is ZSPACES=NO (compatible with process prior to this change). This option is applied to ASSIGN and MOVE LIKE statements only. 2. Added VIOMOVE=FULL/PART for V/VB/VBS length file data transfer on READ from &FILE-IO-AREA to &FILE-RECORD Where: FULL - Move data into full defined record area. PART - Move data partially into the &FILE-RECORD, i.e., for the length of the sending record. The default is VIOMOVE=FULL (compatible with the process prior to this change). Note: VIOMOVE=PART moves for the size of the retrieved record (the IO-AREA), thus the tail end of the record is not cleared. This fact should be considered when choosing VIOMOVE=PART as the tail end of the record may contain undesired data. The change reduces the CPU utilization when reading variable length records, especially if the average record length is much lower than the actual maximum file record length. The option is applied only when the IOMODE=NODYNAM is in use. 3. FASTSORT=NO/YES option Where: NO - Do not build FASTSORT SORT if Easytrieve Plus SORT statement qualifies for it. YES - BUILD COBOL SORT that qualifies for the FASTSORT COBOL statement. The default is FASTSORT=NO (compatible with process prior to this change). Note: FASTSORT=YES applies to Easytrieve Plus SORTs that do not contain BEFORE exit on the Easytrieve Plus SORT statement. The option is applied only when the IOMODE=NODYNAM is in use. Currently, every SORT statement is generated with INPUT PROCEDURE and OUTPUT PROCEDURE exits. IMU does the FILE I/O FASTSORT=YES will generate straight COBOL SORT without exits (i.e., the system takes over and does its work). When generating stand-alone COBOL, this option may speed up sorting. 4. The internally generated fields for DBCS literals was changed to a group item, with a subordinate elementary item containing the constant value. The move statement moves the group item into the target field, avoiding COBOL Compiler error. 5. IMU internal variables were changed to maximum of MAXSTR=NNN EASYTRAN/EZPARAMS option. The default size is 2048. Since COBOL literal cannot exceed 320 bytes, IMU generates a group item in working storage with FILLERs in increments of 320 bytes. This allows the literal value to exceed 320 bytes. The method is applied to character and hex literal regardless if literal contains SI/SO controls. 6. Additional checks were added to IMU to verify hex literal for proper value and even number of digits. 7. A change was made to test all literal values to make sure they do not exceed the field length. 8. IMU was changed to detect end quote for DBCS value when it ends in cc 72.
Temporary fix
Comments
APAR Information
APAR number
PH26442
Reported component name
MIGRATION UTILI
Reported component ID
5697N4400
Reported release
410
Status
CLOSED PER
PE
NoPE
HIPER
YesHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2020-06-16
Closed date
2020-07-06
Last modified date
2021-05-17
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
UI70417
Modules/Macros
FSYASSEM FSYCCB31 FSYCCBOL FSYDFINE FSYESORD FSYET007 FSYETRAN FSYXCOBO
Fix information
Fixed component name
MIGRATION UTILI
Fixed component ID
5697N4400
Applicable component levels
R410 PSY UI70417
UP20/07/10 P F007
Fix is available
Select the PTF appropriate for your component level. You will be required to sign in. Distribution on physical media is not available in all countries.
[{"Line of Business":{"code":"LOB35","label":"Mainframe SW"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSY4B9","label":"IBM Migration Utility for z\/OS"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"410"}]
Document Information
Modified date:
18 May 2021