What Was New in Release 2.9?

QM 2.9-9 (released 4 Nov 2009)

This release includes a modification to the sort algorithm used for right justified fields in the query processor and in alternate key indices. This modification provides greater compatibility with other multivalue products where the items contain a mix of numeric and non-numeric data. It is recommended that any right justified alternate key indices should be rebuilt in case of incompatibility. Note that this change does not affect tha action of right justified items in the QMBasic LOCATE statement as this would potentially make existing data inaccessible.

The VOC $PRIVATE.CATALOGUE record may now use the American spelling, $PRIVATE.CATALOG. If both records are present, the British spelling takes priority.

The LISTU, LIST.PHANTOMS and STATUS commands now show the login time of the processes reported in the local time zone of the user executing the command.

The query processor IN and NOT.IN operators have been extended to allow the list of acceptable/unacceptable values to be stored in files other than $SAVEDLISTS.

Two new QMBasic functions, FILE.EVENT() and WAIT.FILE.EVENT(), allow a program to wait for changes in a Windows directory in an efficient manner.

For compatibility with other systems, the last accessed and last modified date/time values returned by the QMBasic STATUS statement are now in the user's local timezone. Two new fields have been added to the returned data that hold the equivalent data in epoch format.

The QMBasic debugger has been modified to show the conditional element of a CASE statement prior to executing the conditioned code.

The CLEANUP configuration parameter allows system administators to set the interval in seconds between automated scans for QM processes that have terminated abnormally, perhaps as a result of a network connection loss. If not present, this interval defaults to five minutes as in previous releases.

The STARTUP configuration parameter has been extended to allow the account name and user name to be specified. Multiple STARTUP parameters may also be used.

QM 2.9-8 (released 8 Oct 2009)

This release is primarilly to correct an issue where the Windows installer did not complete successfully.

The CORRELATIVE.REUSE mode of the OPTION command causes all operators in correlative expressions to behave as though the reuse (R) option was present.

QM 2.9-7 (released 30 Sep 2009)

The COPY and COPYP commands now both have an option to override the default action of using binary mode data transfer when both files are directory files. This is particularly relevant when using QMNet to move data between Linux and Windows.

The ED command now supports a FIT.SCREEN option in the $ED.OPTIONS record to cause the default display size of the P, PL and PP commands to be set based on the screen size.

As an aid to diagnosing printing problems, the SPOOL.COMMAND option of the OPTION command can be used to display the operating system command used to initiate printing (not Windows).

The SED editor has been extended to support Esc-M as a shortcut to compile a program from within the editor without running it.

The SED editor search sequence for editor extensions now looks in the &SED.EXTENSIONS& file in the QMSYS account if the extension is not found in any of the defined search location. This file is now shipped with the WALK extension that appears in the QM Reference Manual.

Multivalued fields are now handled by delimited reports from the query processor.

QM 2.9-6 (released 17 Aug 2009)

A bug fix in the QMBasic LOCATE statement means that programs compiled on this release that use LOCATE will not run on earlier releases. Forward compatibility for programs compiled on earlier releases has been maintained.

For improved compatibility with other multivalue environments, the default Pick style select list variable used by SELECTV (and SELECT when the SELECTV option of $MODE is active) if no target variable is specificed is now the same as numbered select list zero.

The DIR.DTM mode of the OPTION command can be used to cause QM to update the date/time modified of the directory when writing to a directory file or on closing a sequential file that has been written. This option is not available on Windows.

The Virtual File System (VFS) now supports use of Pick style select list variables. The changes to add this new functionality also remove the risk of a VFS handler overwriting a numbered select list that is used by the application. For improved performance, the VFS now also supports partial select list generation where the list is generated as it is being processed. Applications that use the VFS may need changes to the VFS handler select list generation functions. Details are included in the template VFS.CLS in the BP file of the QMSYS account.

The CATALOGUE verb now skips items with invalid catalogue names, reporting the error to the user.

The OPTION command can now take multiple option names.

The QMBasic FORMLISTV statement can be used to build a Pick style select list variable from a dynamic array.

Two new QMBasic functions, ROUNDDOWN() and ROUNDUP(), have been added.

The QMBasic RETURN FROM PROGRAM statement provides a neater and faster way to return from a CALL regardless of internal subroutine depth than use of repeated RETURN TO statements.

The operating system level qm -u command now shows the command line used to start a phantom process as an aid to identifying specific QM processes.

The QMSAVE tool, documented in the QM KnowledgeBase on the openqm.com web site, can be used to transfer data to QM from other environments.

QM 2.9-5 (released 8 Jul 2009)

Two new QMClient functions have been introduced. QMSelectPartial() builds a select list and returns multiple record ids in a single operation. QMNextPartial() returns the next part of the list. These functions provide better performance than reading the list item by item with QMReadNext() or in its entirety with QMReadList().

QM 2.9-4 (released 26 Jun 2009)

The F-type VOC entry record has been extended to add open mode flags in field 6. Only one is currently defined. A letter T suppresses translation of restricted characters in record ids in directory files, leaving it up to the application to ensure compliance with operating system naming rules.

Procs now support the U01AD user exit.

The command stack editor Ctrl-R function has been enhanced to work more like its equivalent in other multivalue sytems.

The BASIC command now supports use of a $BASIC.IGNORE control record which, determines which, if any, source records are skipped when using a select list or the * option.

The FIND.PROGRAM command can be used to locate and report details of a catalogued program.

The REBUILD.ALL.INDICES command has been extended to support the CONCURRENT option.

The QMBasic FUNCTION, SUBROUTINE, PUBLIC FUNCTION and PUBLIC SUBROUTINE statements now support provision of a default value for arguments not passed by the caller when declared using the VAR.ARGS option.

The NO.MAP qualifier to the QMBasic OPEN, OPENPATH, OPENSEQ and DELETESEQ statements suppresses record id translation in directory files.

Use of the Linux/Unix kill command with signal 1 or 15 will now pass this on to the child process if the QM process is executing an operating system command.

QM 2.9-2 (released 8 Jun 2009)

The Windows Configuration Editor and QMAdmin tools are no longer included with QM. This is because Microsoft have withdrawn functions that are needed by these tools. Configuration parameter changes can be applied to the qmconfig file with any text editor. All functions of QMAdmin can be achieved using command line tools.

For improved consistency, both MIN.MODULUS and MINIMUM.MODULUS are accepted by the CREATE.FILE command and the equivalent QMBasic statement where previously each took just one of these synonyms.

QM 2.9-1 (released 2 Jun 2009)

This is a support release. There is no new functionality.

QM 2.9-0 (released 29 May 2009)

This release adds support for the PowerPC variant of the IBM RS6000 under AIX.

This release introduces distributed files that provide a view of multiple separate hashed files as though they were a single file. Uses of distributed files include improved query performance by working with a reduced data set, load balancing over multiple disks, avoiding operating system file size limits and geographical separation of data over multiple servers.

This release extends date and time handling to include support for applications that operate across multiple time zones. The QMBasic EPOCH() function can be used to return the current date and time in time zone independent epoch form. The E conversion code can be used to convert this to external form and vice versa. The time zone used by the E conversion is determined by the TIMEZONE private configuration parameter that may be updated for an individual QM session using the CONFIG command or the QMBasic SET.TIMEZONE statement. The default time zone is taken from the operating system TZ environment variable. As part of this development, the D conversion code has been extended to support two ISO 8601 date formats. There are several functions to convert between epoch values and traditional multivalue date/time values. Note that epoch handling is only fully supported in the Linux, FreeBSD and Mac versions of QM. AIX provides partial support. Windows support of time zones is very limited and cannot provide the full functionality of other platforms.

The number of digits in the cyclic sequence number used by the NEXT option of the SETPTR and SET.QUEUE commands can be changed from its default value of four by entering the required number of digits in field 3 of the record named $NEXT in the dictionary of the $HOLD file. This value must be in the range 3 to 9.

The AUTHENTICATE command has been extended to support encrypted passwords.

The COPY.LISTP command has been introduced as a Pick syntax version of COPY.LIST.

The LIST.INDEX command has been extended to allow the report to be directed to a printer. It can now also report indices in all files in the account.

The LIST.PHANTOMS command provides a variant on the information shown by LISTU and STATUS.

The LIST.TRIGGERS command has been added to provide a summary of all trigger subroutines used by files in an account.

The Pick style LISTDICT command (as distinct from use of LIST DICT) has been enhanced to include D and I-type records.

The MAKE.INDEX and BUILD.INDEX command now support a CONCURRENT option that allows an index to be built while the file is in use. There is a performance penalty for this and the QMBasic SELECTINDEX, SELECTLEFT and SELECTRIGHT statements may stall waiting for the build to complete.

The PSTAT command has been extended to allow selection of the processes to report by user login name. Multiple user numbers or login names may be included in a single command.

The SET.DATE command has been withdrawn.

The CHAINED.SELECT mode of the OPTION command enables Pick style behaviour of a SELECT operation where, if the data queue is active, the command in the data queue will be executed on completion of the select if at least one record was selected. If no records were selected, the data queue is cleared.

The OPTION D3 and OPTION MVBASE commands provide shortcuts for setting multiple options that provide closer compatibility with other products.

The IMPLIED.STOP option of the $MODE compiler directive will insert an implied STOP at the end of a program, subroutine or function in place of the RETURN that is normally inserted.

The QMBasic DIR() function has been modified to preserve the case of items in case insensitive file systems (e.g. Windows). This change may require some applications that use this function to be modified to convert the returned data to uppercase. This function now also returns a third value containing the file attributes for each item. The format of this new data is platform dependant.

The QMBasic FLUSH.DH.CACHE statement can be used to force other QM processes to flush their cache of recently closed dynamic files. This should rarely be needed but allows a process to ensure that it is not blocked in an operating system level file action by some other process having a file cached.

Two new styles of the FOR/NEXT loop have been introduced in QMBasic. These allow execution of a loop for a comma separated list of values and for each mark character delimited item in a variable.

When the SELECTV option of the $MODE compiler directive is in effect, the QMBasic SELECT and READNEXT statements treat the list variable as optional, defaulting to an internal variable that is local to the program in which these statements are used.

The QMBasic VOCPATH() function can be used to resolve a filename to its corresponding pathname, following Q-pointers and applying extended filename syntax rules.

The !PHLOG() subroutine can be used to determine the name of the log record for a phantom process.

Where both ends of the connection support it, QMClient and QMNet now encrypt network traffic. As a consequence of this change, the qmclilib.o object module previously released on Linux, FreeBSD and Mac has been replaced with the libqmclient.a library. The only change required in non-Windows QMClient applications is to use this new library in place of the old qmclilib.o when linking the program. Existing programs will continue to run but will not encrypt network traffic.

The QMRevision() function of the QMClient API can be used to determine the version levels of the client and server sides of the connection.

A new private configuration parameter, DHCACHE, has been added to control the size of the dynamic file cache. In most instances, the default value of 10 is probably adequate.

A process started by the STARTUP configuration parameter now runs with @TTY set to "startup". This allows, for example, special handling in the LOGIN paragraph.