Hughes Technologies

History of mSQL 2 Releases




2.0 Beta 6

Release Date
    11 Apr 1997
New Features
    mSQL

  • fixed rand() srand() portability macros
  • added strptime check to autoconf script
  • added strptime function to lib mSQL if needed
  • completed Win32 porting of client API and client apps
  • completed Win32 porting of server although indexing still needs some debugging.
  • fixed per field cache pointer during tmp table creation (core dump when ordering the result of a join with a TEXT field)
  • fixed handling of 8 bit char sets in regexp matching
  • fixed ident handling in joins (particularly in self joins) when multiple idents used in the comparison clause
  • fixed timestamp bug where timestamps were reset in a condition
  • fixed NOT NULL testing for NULL fields
  • fixed NOT NULL testing for NULL indices
  • fixed resetting overflow table mapping length to 0 when dropping a table cache entry in loadTableDef()
  • fixed potential leak of mapped region in initTable()
  • updated client library to use MSQL_DEBUG not MINERVA_DEBUG
  • updated libmsql to use stderr for debugging
  • added short-circuits for condition testing (i.e. bail as soon as we can tell the result of and AND or an OR etc)
  • fixed leak of overflow buffers when deleting rows containing TEXT fields
  • added soundex based matching using the SLIKE operator
  • fixed handling on blank date fields (ie. '')
  • fixed LIMIT handling


    Lite / W3-mSQL

  • More performance upgrades
    • Symbol names no-longer malloced
    • Symbol values < 10 bytes long no longer malloced
    • Results show 300% performance increase in virtual machine operating speed
  • Fixed string length mis-match between locally created and passed variable values (e.g. html form data etc)
  • Forced flushing of output after an echo() as a call to system() following a non-flushed echo() could cause the output order to skew



2.0 Beta 5

Release Date
    20 Mar 1997
New Features
    mSQL

  • Rewrote regression test suite to obtain better code coverage
  • Added real value precision handling to solve real number rounding errors. The desired precision is now stored with the value in the database table.
  • Added code to translate system variables (eg _rowid) into "real" table fields during creation of a result table. This allows the sysvar value from the original table to be carried through a DISTINCT or an ORDER rather than it being incorrectly generated from the result table.
  • Added ability to order a result on the value of a system variable
  • Added more system diagnostics for low-level errors
  • Added more file ownership testing (for those that chown the data file and don't get it correct)
  • Added /dev/tty test in makegen macros. I though expecting /dev/tty to exists was fair but apparantly not so on IRIX 5.3.
  • Added README.sco for build details on SCO
  • Added msqlGetSequenceInfo() to API and server
  • Added support for showing sequence structure to relshow
  • Added support for dumping current sequence status to msqldump
  • Added support for UINT data type
  • Added support for DATE data type
  • Added support for TIME data type
  • Added support for MONEY data type
  • Added mmap region syncing for data files, overflow files and the mapped regions of the AVL index files. Frequency of sync's is configured in msql.conf.
  • Added support for sequences in relshow (sequence creation at the current sequence value)
  • Added msqlGetSequenceInfo() API function
  • Added _systime system variable
  • Added mSQL time and date functions to the API library. These allow for conversion from the text representations used by mSQL into a valid UNIX time_t value.
  • _sysdate system variable now returns a date type value of the current data on the server machine (not the UNIX time value as previously returned)
  • Rows are now padded to an 8 byte boundary for memory alignment reasons (mmap() access to the row headers structures on Alpha)
  • Row header timestamp now time_t rather than int for machines that use long time values (e.g. the Alpha)
  • Fixed memory leak in yyprev symbol handling
  • Fixed wild free in lexer symbol handling (core dump)
  • Fixed timestamp overwrite problem for the Alpha
  • Fixed relshow core dump for invalid index name
  • Fixed core dump in AVL code when accessing an unaligned real (i.e. a double) value in the tree node
  • Fixed bad handling of numeric index types by moving the field value auto-casting earlier in the control flow
  • Fixed AVL Lookup problem for indices comprised of real values
  • Fixed compound index handling bug (key could be incorrectly formatted on lookup resulting in no results).
  • Fixed problem with ident comparisons on single table selects
  • Fixed problem with ident to sysvar comparisons on single table selects (e.g. select * from foo where f1 = _rowid)
  • Fixed wild free problem for ident values in join code (core dump)
  • Fixed memory over-read on some TEXT field operations
  • Fixed data hole free list handling
  • Fixed multiple increment of sequence value (i.e. select _seq from foo would increment the seq for each row)
  • Fixed multiple increment of seq in conditions (i.e. "select _seq from foo where id > _seq" would increment the sequence twice (once for each call to getSysVar() )
  • Fixed handling of system variables in join results
  • Fixed 8 byte alignment problems in the AVL tree code. The entire server is now 64bit clean and passes the new regression test on an Alpha under OSF/1


    Lite / W3-mSQL

  • Rewrote all symbol table handling code to use a 64 way hash table for symbol lookups. Also added a short-cut for symbol searches. General performance increase in every aspect of the language results from this modification.
  • Added support for non-local authentication databases via the msql.conf file.
  • Added support for HTML comments and other non-Lite tags that start with Adding hooks for the mSQL time and date routines to mod_std
  • Added getTzOffset() to mod_std for hacking time values
  • Added toksplit() to mod_std
  • Added literal symbol re-use code
  • Fixed auto-casting problems with the new uint type
  • Fixed auto-base-conversion (i.e. octal & hex). Conversions now only performed on literals, not on variables during a cast or an auto-cast
  • Fixed off-by-one error in count operator for text strings
  • Fixed regression test results to reflect the current test output
  • Fixed space handling in urlEncode()
  • Fixed problem with string truncation in sub()
  • Fixed problem with handling some C styled comments
  • Fixed core dump when trying to cast an array to a scalar type
  • Fixed off by one error in array literal element length
  • Fixed handling of array indexing in text expansion (e.g. in echo() strings) when array indexed by a variable value
  • Fixed auto casting for int and uint in printf formats


    Misc

  • Fixed a couple of bugs in the time library for date/time handling
  • Added errno.h to the headers searched in setup when looking for sys_errlist (for NetBSD 1.2)
  • Added stdlib.h to the headers searched in setup when looking for ssize_t (for Irix 6.2)
  • Started total re-working of the documentation kit.
  • Code has been "linted" within and inch of its life (using gcc -Wall)



2.0 Beta 4

Release Date
    1 Feb 1997
New Features
    Lite / W3-mSQL

  • Added support for Multi-Select form data to W3-mSQL
  • Added typeof() function to Lite standard module
  • Fixed bug in expandText() handling mis-defined symbols
  • Added work-around for the gnu getopt() library
  • Added work-around for the gnu atoi() function
  • Added 'uint' type handling and "%u" to printf()
  • Fixed problem with fuction call arg count on some machines
  • Fixed last character match problem in tr()
  • Fixed a few doco bugs in the mSQL module doc's
  • Fixed up type checking during a cast
  • Fixed a problem if the first element of an array is not a CHAR val
  • Fixed urlEncode problem for the + character


    mSQL

  • Fixed token destruction in error reporting from the parser
  • Fixed documentation example for sequence creation
  • Fixed core dump in mSQL monitor on overly large error results
  • Fixed inaccurate initialisation of ident segments in msqlCreateIdent
  • Added support for MSQL_CONF_FILE environment variable
  • Fixed looping problem in wild-card delete
  • Fixed some _more_ doco bugs
  • Fixed problem with comparison of TEXT fields with NULL
  • Fixed problem with the matchVarChar() function when comparing values with TEXT fields
  • Fixed bug in LIKE and CLIKE for matching multiple % wildcards to an empty string
  • Fixed a possible problem with the static size of the connection array



2.0 Beta 3

Release Date
    14 Jan 1997
New Features
  • Fixed problem with new fast offset calculation in rowRead
  • Fixed bugs in table join logic
  • Fixed bug that allowed an update to set a non-unique value for a unique index
  • Completed dynamic loading of module object code in Lite / W3-mSQL
  • Fixed some documentation errors in the HTML manual
  • Fixed non-flushed output in user prompts from msqladmin and msql
  • Fixed problem with fields being inserted with the NULL flag set
  • Added a 0 exit val to msqldump
  • Fixed some API function prototypes
  • Added strdup() to the malloc test code (although we don't use the malloc library anymore for in-house code testing)
  • Fixed memory leaks in parser, msqlServerDelete, QUIT processing, join condition lists, and join ident fields.
  • Wrote the mod_graph dynamic loaded graphing module for Lite & W3-mSQL.
  • Added optional W3-auth security. The file .w3-auth must now be created in the directory containing the requested file to enable W3-auth access control.



2.0 Beta 2

Release Date
    6 Jan 1997
New Features
  • Fixed problem with deletion using an index for row selection (reshuffle of dup values in tree node caused getNext to skip a valid entry)
  • Fixed bug in bulk index creation where it was including non-active rows in the newly created index.
  • Added strncasecmp() for SVR4 people (so they can dodge the BSD lib)
  • Fixed bug in the AVL node swapping code wrt dup node lists.
  • Fixed core dump bug when DISTINCT used with an empty result table.
  • Fixed bug in the updating of CHAR fields.
  • Increased listen queue for UNIX socket to 128
  • Fixed bug in updateValues() where by a full field width char value would trash the active flag of the next field (i.e. NULL termination of the string).
  • Fixed param count test in Lite function calling.
  • Increased Lite VM performance by up to 20% by caching stack frames and other reuseable items.
  • mSQL Server performance increases
    • Removed some more malloc & bzero overhead
    • Added speedup for boxes without hardware multiply (like lots of the early SPARCs).
    The above modifications produced a 20% faster "killer" result on a SPARC without hardware math.
  • Added support for symbolic Macros in modules
  • Started support for dynamic loading shared modules



2.0 Beta 1

Release Date
    16 Dec 1996
New Features
  • Internal data file format modified to suit future developments. A row header has been added to each row containing information such as time stamps etc.
  • A Superblock has been added to the data file. It contains information including the format version of the database file.
  • Data holes are now managed with a free list rooted in the superblock. This mechanism replaces the "stack file" used in mSQL 1 and increases performance when inserting into or deleting from a table.
  • The basic primary key mechanism has been replaced by a complete indexing scheme. Up to 5 indices, each being comprised of 1 to 10 table fields, can be defined for each table. Any index may be flagged as unique or non-unique.
  • The sequential key management has been replaced by an AVL tree for each index. Each tree is mapped into the virtual address space of the server process.
  • Access to table rows is now via an abstraction layer called the "Candidate Row" module. This abstraction ensures that the most efficient data access method will be used whenever a data table is accessed. One of the routines in this module forms the basis of the query optimiser.
  • Variable length char fields (TEXT) have been added. They are implemented using a fixed, user defined segment of the table row for data storage in conjunction with external overflow buffers. If the value inserted fits in the user defined space it is kept in the table row space. If not, it is split between the table row and a chain of external buffers.
  • The regular expression support of mSQL has been extended. The original "UNIX Regexp" capable LIKE operator has been replaced with a standard SQL LIKE function (which is much faster). The original exhanced LIKE operator is still available as the RLIKE operator. A fast, case insensitive version of the SQL LIKE operator is also available as CLIKE.
  • The framework for supporting system variables (or pseudo fields) has been addedd to the engine. Support for the _rowid, _timestamp, _user and _sysdate variables is available in this release.
  • Sequences have been added using the pseudo field support. This provides atomic sequence operations on a per table basis.
  • Index abstraction has been included to support multiple (and experimental indexing schemes)
  • Compile time and runtime configuration information has been moved to a config file parsed on startup. An API call has been added to allow a client application to load a non-default configuration file if needed.
  • Support for dynamic configuration of the connection table to support over 200 client connections on an average machine has been included.
  • Run-time configuration now allows the server to run properly and easily as a non-root user. By default the server will run as user 'msql' but that can be changed in the config file.
  • All utilities have been modified to cope with the changed configuration management, new datatypes, and the indices.
Bug Fixes
  • No bugs were fixed in this release. With the amount of new code added to the server it is probable that a few have been added though.




Copyright © 1996 Hughes Technologies Pty. Ltd.