Warehouse Release 3.01.2310

03/31/2006

The features in the 3.01.2310 release are:

 

 

. A problem reading Oracle databases with a condition containing an

  AND where one side of the AND contains a Warehouse function and the

  other side does not has been fixed.  This example does not work on

  previous releases, but now works:

 

 

      READ ORD = ORADB.ORDER FOR &

           SIZEOF(SEARCHTYPE) > 10 AND STR(FULLORDERNO, 1, 1) <> "*"

 

 

. Warehouse message files have been added on all platforms except

  MPE/iX.  Warehouse message files are intended to duplicate the message

  files available natively on the MPE/iX operating system.  To access a

  Warehouse message file, use the keyword MSG on the OPEN statement of

  a FIXED file.  The syntax is:

 

 

    OPEN tag FIXED filename MODE={ r | w } MSG

 

 

    Message files must be open with a mode of either r for reading or

    w for writing.  When reading from a message file, the keyword NDR

    may be used instead of MSG.  This is to maintain script

    compatibility between MPE/iX systems and other systems.

 

 

  When a record is written to a capture file, it is always appended to

  the end of the file.

 

  Whenever a record is read from a message file, the oldest record is

  read.  After the record has been read and processed, it is destroyed.

  In other words, the first read is nondestructive and a destructive

  read is performed later to remove the record.

 

 

  If attempting to read from a file that is empty, Warehouse waits until

  a record is written if at least one other process has the file open

  for writing.  If attempting to read from a file that is empty and no

  process has the file open for writing, an end of file condition is

  returned.  There is an exception for the first read of the file.  The

  first read of the file always waits if the file is empty.  Thereafter,

  a read will only wait on an empty file if there is at least one other

  process writing to the file.

 

 

. A performance problem with the IF() function has been fixed.  If prior

  releases, nesting many levels of the IF() function could cause a

  severe performance problem during the compilation phase.  This was

  caused by Warehouse reevaluating the inner IF() functions a great

  number of times.  Warehouse now evaluates the inner IF() functions

  only one time.

 

. Added the ISNUMP and NUMP functions to test and convert strings

  storing packed decimal digits.  ISNUMP tests a string if it

  contains packed decimal digits and NUMP converts a string

  containing packed decimal to a number.

 

 

    ISNUMP determines if a string is a valid packed decimal

    string that can be converted using the NUMP function.

    To be a valid packed decimal string, all nibbles (4-bits)

    except the last nibble must contain a binary value from

    0 through 9.  The last nibble must contain one either 12,

    13, or 15 as follows:

 

 

        Decimal Hexadecimal Description

        12          C       Number is positive

        13          D       Number is negative

        15          F       Number is unsigned (treated as positive)

 

 

    Syntax:

        result = ISNUMP(source-string)

 

 

        source-string   is the string to be checked be a valid

                        packed decimal string.

 

 

    Examples:

 

 

        Note that since a hexadecimal digit also requires 4-bits to

        represent, packed decimal digits can often be represented

        using hexadecimal.  This makes it convenient in the examples

        below to use the CHR($xx) function to create one byte of

        packed decimal where $xx is two hexadecimal digits.

 

 

        Expression                                  Result

        ISNUMP(CHR($00) || CHR($00) || CHR($00))    FALSE

        ISNUMP(CHR($00) || CHR($00) || CHR($0F))    TRUE

        ISNUMP(CHR($12) || CHR($34) || CHR($56))    FALSE

        ISNUMP(CHR($12) || CHR($34) || CHR($5D))    TRUE

        ISNUMP(CHR($12) || CHR($CC) || CHR($5C))    FALSE

        ISNUMP(CHR($01) || CHR($20) || CHR($0C))    TRUE

 

 

 

    NUMP converts a packed decimal string to a number.  See

    ISNUMP above for description of a packed decimal number.

    If the string passed to NUMP is not a valid packed

    decimal string, a warning is issued and the result is

    undefined. (The TRY function or statement can used to

    catch the warning.)

 

 

    result = NUMP(source-string)

 

 

    source-string   is the string to be checked be a valid

                    packed decimal string.

 

 

    Examples:

        Expression                                  Result

        NUMP(CHR($00) || CHR($00) || CHR($00))      Error

        NUMP(CHR($00) || CHR($00) || CHR($0F))      0

        NUMP(CHR($12) || CHR($34) || CHR($56))      Error

        NUMP(CHR($12) || CHR($34) || CHR($5C))      12345

        NUMP(CHR($12) || CHR($34) || CHR($5D))      -12345

        NUMP(CHR($01) || CHR($20) || CHR($0C))      1200

 

 

 

Release 3.01.2310 is available now on all supported platforms.

 

 

ÿ