Hi,
I recently upgraded from zVM 4.3 to 5.3 and at the same time, upgraded
to a more recent CMS pipelines runtime library (1.0111, 16 March 2008).
As a result of the move and upgrade, we have found the following two
problems that affected some applications that use pipes. One of the
problems is related to the IBM supplied pipelines library on zVM 5.3
and the other is related to the runtime library.
I have reported the IBM library problem to IBM and they, after review,
have decided to not address the problem because it may affect customers.
I thought I would point these out here in case it is helpful to others...
Problem 1:
When using an IF selection stage with operands like = or < the
IBM supplied pipeline library does not generate an error if
the operand is a string value and the appropriate operator == or <<
is not used. In other words, if you do a string comparison and
use a single = sign, no error is generated with the IBM library
but an error (correctly) will be generated with the runtime
library. IBM plans to leave this bug alone but if you plan to use
the runtime library, you must take care to correct this issue.
Example:
"PIPE < pipetest data a",
"| specs fs 00 a: F1 . b: F2 . c: F3 .",
"if (b<<'1' & a='00001') then",
"F2 1 `?` n F3 n `?` n F2 n " ,
"endif" ,
"| console"
In the above, the a='00001' should be coded as a=='00001' otherwise
the following message is generated correctly by the runtime library.
FPLSPX1087E String operand not acceptable to operator.
The IBM supplied library generates no error message.
Problem 2:
This problem is in the Pipelines runtime library version listed
at the top. I have not downloaded the recent update so I am not
sure if it is corrected by now or not. The IBM supplied library
operates correctly.
If an expression such as a=="whatever" is used and the variable
'a' contains an empty string, then the result of the expression
is always true. This appears to be a bug.
Example:
'pipe strliteral /a,,b/',
'| specs f: substr 1.1 of fs , f2 .',
'if (f=="something") then /match/ 1',
'else /no match/ 1',
'endif',
'| console'
The output is 'match' when it should not be.
Thanks in advance,
Aria.