QM 2.12-0 (released 27 Apr 2011)
This release introduces the concept of a "user mode" installation on Linux, Unix and Mac based systems. An installation of this type does not require the user to have root access to the system but, as a result of this, potentially reduces system security. It is possible to install multiple user mode instances of QM on the same system, each operating in its own isolated environment and each separately licensed. There are some important rules to observe when using a user mode installation as detailed in the Installation section of the QM Reference Manual. QM now has limited support for triggers on directory files. These will be called for all updates made to the file from within QM except for sequential file processing (WRITESEQ, etc) and use of OSWRITE or OSDELETE. It is no longer necessary for trigger subroutines and subroutines called from either triggers or alternate key index expressions to be visible in the cataloguing system from the QMSYS account when using QMNet. The QMNet server process will effectively execute in the account in which the file was opened. A similar modification to the replication subscriber process means that it is also no longer necessary for subroutines called from index expressions to be catalogued in the QMSYS account when using replication. Account replication now includes an option to prompt for confirmation before replicating a command on a remote system. The DIR_DICT file in the QMSYS account (a template dictionary to use with directory files) has been extended to contain three new items: DAYS for the number of days since the record was modified, DTM for the actual date/time of modification, and OWNER for the username of the owner of the record (not Windows). The TRANS() function in a dictionary I-type item can now return the value of an A, S or C type item from the target file. The MCS conversion code converts the first alphabetic character of each sentence in the supplied data to uppercase. The CREATE.ACCOUNT and CREATE.FILE commands now support options to set ownership of the account or file to a specific user and group on Linux, Unix and Mac systems. In the case of CREATE.FILE, the behaviour when these options are not present defaults to using the user and group of the process that executes the command but can be set to inherit ownership from the account directory by use of the INHERIT.OWNERSHIP mode of the OPTION command. The CREATE.INDEX and MAKE.INDEX commands now check for a VOC record named $INDEX.PATH to specify the default location for indices. A command option is available to override this action. The LISTF, LISTFL and LISTFR commands can now include a WITH or WITHOUT clause that references ENCRYPTION, REPLICATION or TRIGGER to show only files that meet the specified criteria. The LIST.REPLICATED command can be used to report a summary of files for which replication is active. The LIST.TRIGGERS command has been extended to handle multi-files and to report triggers applied to dictionaries. The REDO command can be used to repeat a command at specified intervals and/or a specified number of times. The SP.ASSIGN command now shows the form queue associated with the default printer if no command options are present. The query processor SEARCH command now includes a FOR keyword to allow search strings to be specified on the command line. There is also now no limit on the number of search strings that may be specified in a SEARCH command. The QMBasic compiler now supports use of the NO.QUERY keyword in either the $CATALOGUE directive or the CATALOGUE entry in the $BASIC.OPTIONS record to suppress the prompt that normally appears if the program is already catalogued in a different mode. Key value 1045 to the QMBasic SYSTEM() function returns the time at which QM was started as an epoch value. A new command, WINDOW, in the full screen mode of the QMBasic debugger can be used to change the command window size. Two new functions, QMCallx() and QMGetArg(), are available in the C version of the QMClient API. These remove the need for an application to pre-allocate space for the longest possible value of argument variables returned by a called subroutine. A new function, QMGetVar(), has been added to the QMClient API to retrieve the value of an @-variable from the server. The SECURITY configuration parameter can be used to set system wide security options. At this release the only option available is to require the user to have write access to the dictionary when using the EVAL clause in a query. This release introduces a new manual to the documentation set, tyqm.pdf, that is a "Teach Yourself QM" self-study training package. Based on material used by Ladybridge Systems for trainer led courses, this package assumes no prior knowledge and works through a series of practical exercises that ultimately construct a simple sales order processing system. |