IBM Support

PH26442: Performance APAR - FASTSORT, ZSPACES, VIOMOVE, COBOL Compiler Error on DBCS Literal, Long Literal Handle

A fix is available

Subscribe

You can track all active APARs for this component.

 

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