Restrictions on Natural Support

Before analyzing Natural applications in Enterprise Analyzer, you need to be aware of the following restrictions on Natural support.

Supported CALLDBPROC Syntax

The following syntax of the CALLDBPROC statement is supported:

CALLDBPROC dbproc ddm-name [USING] [ parameter [ AD = {M | O | A}] ]…
[ RESULT SETS result-set…] 
[ GIVING sqlcode ] 
[ CALLMODE = { NONE | NATURAL }]

Supported READ RESULT SET Syntax

The following syntax of the READ RESULT SET statement in structure mode is supported:

READ [(limit)] { RESULT-SET | RESULT SET } result-set
INTO { VIEW view-name | parameter,… }
FROM ddm-name
[ GIVING sqlcode]
statement…
END-RESULT

The following syntax of the READ RESULT SET statement in reporting mode is supported:

READ [(limit)] { RESULT-SET | RESULT SET } result-set
INTO { VIEW view-name | parameter,… }
FROM ddm-name
[ GIVING sqlcode]
statement…
[ [ CLOSE ] LOOP [(r)] ]

Program Analysis

The following notes apply to tools related to control flow and/or data flow analysis for programs and to component extraction.

  • It is assumed that IF, DECIDE ON, and DECIDE FOR statements always have a FALL THRU, even if all the control flows of the branches do not reach the statement after these statements.
  • Definition and usage of array slices are treated as whole array variables.
  • Control flow of cyclic constructs, such as FOR loops, have no backward edge. This rough bit of the analysis may lead to insufficiency in data dependencies between definitions inside a loop body and usages at the top of a loop body.
  • Control flow analysis between subroutines is call site-independent. It is assumed that there are paths from any call site to any return point of a subroutine. This may lead to superfluous data dependencies between definitions inside a subroutine and their usages beyond the return points.

Component Extraction

Both Computation-Based Extraction and Dead Code Elimination are supported. For Computation-Based Extraction:

  • A PERFORM statement without parameters cannot be selected as a slice point.
  • An ON ERROR statement and all statements inside an ON ERROR block cannot be selected as a slice point.

For Dead Code Elimination, statements and declarations that are unused INDIRECTLY are not detected. This means that constructions included in unused constructions are retained.

Impact Analysis

Group MOVEs are split into field MOVEs and data flow relationships are calculated for these split MOVEs. This means there are no relationships between whole structures for group MOVEs.