List of fixed bugs in the commercial version of OpenQM (Current as of 2.8-10)
The list of fixed issues below are in reverse version order. If one is fixed, please use the <strike></strike> html command to block out the fixed bug.
The QMBasic compiler allowed use of EQ as an alternative to the = symbol as an assignment operator. Query commands that used closed range tests (e.g. A > 5 and < 8) with fields for which an alternate key index was present could return incorrect data.
The N() funcion in an A-correlative did not allow for field names that did not comply with QM's naming rules. Where a file had multiple alternate key indices, if an index was built from a calculated value that used a T-conversion or a TRANS() function to reference a record that did not exist, all later index updates for the same write would damage the index. Use of PSTAT could cause the process being queried to crash if it had a very deep execution stack or was executing a very long command. A phantom would fail to start correctly if the parent process terminated before it had commenced its initialisation. The Proc A command did not treat semicolons in the source data as a special character separating multiple items. A Proc with a command of H with no qualifying text caused the Proc processor to loop. The LPTR keyword was not recognised by the FILE.STAT command. The WHEN clause of the query processor was not handling some complex conditions correctly. A Pick style qualified display clause on a multivalued field was equivalent to use of WITH when it should have been equivalent to use of WHEN. Quitting out of a PSTAT command could result in not being able to start pahntom processes.
The @FILENAME synonym for @FILE.NAME was not recognised by the QMBasic compiler.The QMBasic OPENSEQ statement did not return the blocking user number via the STATUS() function if the record was locked by another user. Some PDA devices would report errors on access to files on the removeable memory card if the PDA had powered down while the file was open.
Relational operators in correlatives were not implying use of the reuse option. The C operation in F-correlatives did not handle negative numbers. Format codes applied to integer numeric values when non-default NLS delimiters were selected returned an incorrect result. The SET.FILE command did not handle multi-files correctly. Use of the NEXT qualifer to SETPTR or SET.QUEUE could cause QM to terminate abnormally on subsequent use of the CAPTURING clause to EXECUTE. The QMBasic CLEAR statement caused updates to subroutine argument variables that were passed by reference not to be treated as though they were passed by value, not returning the new value to the calling program.
The QMBasic SUM() and SUMMATION() functions should ignore non-numeric elements in the dynamic array that they are summing.
Deleting a record from a file that used record level encryption could fail to remove the record from an alternate key index.
The SED editor hung when trying to delete a record via the explore buffer if that record was locked by another user. The query processor treated Fn field references as being single valued. Reference to a dimensioned matrix on a QMBasic source line above the corresponding DIM statement generated a compilation error. A performance optimisation in the QMBasic LOCATE statement could result in the incorrect field position being returned or a QM fatal error. Also, LOCATE could incorrectly report an item as found if the leading characters matched the final item in the dynamci array being searched.
The installer on some Linux systems could fail to set permissions correctly. There was an assumption that $HOLD was always in its default location. FORMAT was creating a VOC record named X.
The init.d scripts on Linux and FreeBSD did not allow for installation with the QMSYS directory in a non-default location. The -R option of qmfix could report that the file was unusable.
A direct network connection to QM using ports 4242 (telnet) or 4243 (QMClient) would fail on some versions of the network management software used by Linux and the PowerPC version of the Mac. Attempting to open a file that uses record level encryption was causing an abort for users with no access to the encryption key. This should have taken the ELSE clause of the open. FILE.SAVE was ignoring any account name given on the command line and saving all accounts. Using SEL.RESTORE to restore the VOC needed the file name to be entered as VOC-RESTORE. A QMBasic source line that generate a very large volume of object code could result in the program terminating unexpectedly. AccuSoft have supplied a correction to the terminfo definition for F5 in the vt100-at, vt220-at, vt320-at and vt420-at terminal types.
Attempting to access a hashed file for which a user was locked out by file permissions could appear to open it as a directory file though it would not be possible to read or write records. Creating an alternate key index with an I-type, C-type or correlative that compiles to more than 512 bytes caused QM to terminate with a fatal error and left the index file corrupt. QM could terminate with a fatal error if a command executed using OS.EXECUTE with the CAPTURING clause returned only a newline. Use of an invalid pathname with the QMBasic OSWRITE statement did not take the ON ERROR clause.
The ANALYSE.FILE command could wrongly report a file as having resizing disabled when it did not, or vice versa. The CREATE.INDEX and MAKE.INDEX commands did not always correctly recognise equivalent indices, resulting an an extra index being created where another that already existed could be used instead. Deleting all lines below the current position in ED and then saving the item could sometimes add a blank line to the end of the data. The query processor did not apply CSV quoting rules to column headings when creating comma separated output. A QMBasic class module with more than 255 entry points would appear to compile correctly but would produce run time errors. The QMBasic READCSV statement could cause a fatal error that terminated the QM session. A QMBasic class module in which a public function or subroutine aborted and the destructor routine then also aborted did not clean up correctly from the first abort.
ACCOUNT.RESTORE could restore data to an incorrectly formed file name. The query processor BY.EXP.DSND operator was sorting in ascending order.
The account restore tools did not handle filenames containing illegal characters correctly.
The VOC $RELEASE record command editor control flags (field 3) were lost when installing a new release. The CODEPAGE option of the PTERM command was rejected. The QMBasic compiler could report an error if an include item had the same name as an equated token.
A QMBasic indirect call where the indirection variable as an equated token failed to compile correctly. A QMBasic expression containing a Pick style implicit format element could sometimes be interpreted as a dimensioned matrix reference. The MT conversion code was returning 00:00 for a null input value.
The FORMAT command reported an internal data mismatch if the program being formatted started with a blank line.The QMBasic SELECTV statement generated a run time error if the source and target variables were the same. SELECTV "" TO VAR created a list with a single item named "__". --Unable to replicate. Need source code example-- The mc4 and mc5 terminfo keys were incorrect for some AccuTerm terminal types causing use of auxiliary port printing to display the data at the same time as it was printed. Also, pagination prompts could appear while the data was sent to the terminal. The QMCall() function of the qmclilib library on PPC Mac systems did not update returned argument values correctly.
Use of an equate token that matched the alphabetic part of an @-variable name caused compilation errors. --Unable to replicate. Need source code example-- A null string in the data supplied to the !SORT() subroutine could cause QM to crash.
Phantom processes failed to start when launched from sessions logged in as specific user numbers by use of the PORTMAP configuration parameter. The Hot Spot Monitor (HSM) did not count direct calls correctly. QMBasic programs accepted a string containing only a period as being a valid number and treated it as zero.