Please email any bug reports, comments or suggestions to:
peter.hearty@ceasar.demon.co.uk
The database classes, the JDBC driver classes, and the database
format that they support, will always be kept in synch. Version
numbers are shown in the form "maj.min". Minor versions are
intended to be bug fix releases. Major versions imply significant
changes in functionality or a change in the database format.
Major versions will always be capable of reading at least the
previous, as well as the current, database format.
Known Bugs and Limitations
- SELECT COUNT(*) FROM table WHERE cond
If no rows satisfy the given condition, then the above
expression returns an empty result set instead of the single
value 0.
- Limitation on the use of the UNIQUE keyword in a CREATE TABLE statment.
If several columns are included in a UNIQUE clause, then InstantDB
ensures that each column is individually unique. This deviates
from the ANSI SQL specification where the columns should be
collectively unique.
- Doesn't understand the standard timstamp escape sequence.
- Doesn't understand repeated single quotes '' or double quotes "" as
a single character.
- Doesn't support REPEATABLE_READ and READ_COMMITTED transaction isolation levels.
- Only supports a single active results set per statement.
- String and Blob string comparisons sometimes crash.
- "Now" gets interpreted as a date, even when its being used for a string field.
History
- 0.1, 9th Jul 1997, Initial Release.
- 0.2, 13th Jul 1997
- Bugfix - idbDriver class made public and default constructor made public.
- some minor performance enhancements.
- 0.3, 20th July 1997
- Caching re-implemented using arrays instead of vectors.
- initialCacheSize and cacheExpansion properties no longer used.
- Row cache is now dynamic.
- Perform less garbage collection when running under the Microsoft
virtual machine.
- 0.4, 27th July 1997
- UNIQUE keyword now understood (limited to a single column
when not used in the CREATE UNIQUE UNDEX command).
- Using an empty string as a parameter in a prepared statement
no longer causes an out of bounds exception
- 0.5, 28th July 1997
- Indexing bug fixed.
- Bug on OR of non-numeric column comparisons fixed.
- 0.6, 3rd August 1997
- Multi-threading support added.
- Sample program modified to illustrate multi-threading.
- 0.7, 19th August 1997
- Shorter file names for some system tables and indexes. Some of the
file name sizes were causing problems on the Apple Mac. Old style
names are still recognised, so it should still be possible to open
databases created with previous versions.
- WHERE clause in DELETE is now optional.
- BINARY type added.
- More OR bugs fixed.
- Strings accept several escape sequences.
- IGNORE CASE option added to LIKE clause.
- 0.8, 30th September 1997
- Question mark (?) can now be used in string parameters in prepapared statements.
- RecentRowCache now flushes old values properly,
- Transaction processing added.
- transLevel and transImports properties added.
- When re-opening a database, it is no longer assumed that columns
will be read in, in the correct order.
- Several bugs relating to system table corruption removed.
- Numerous internal consistency checks added.
- WHERE clause in update now optional.
- Rudimentary getIndexInfo() added.
- 0.9, 12th October 1997
- ORDER BY support added.
- Tracing re-organised.
- Several deadlocking transaction bugs fixed. Specifically, result set close, some
DDL statements, and multi-statement connections all failed to commit correctly. These
have now been fixed.
- 0.91, 18th October 1997
- If all tracing was switched off, then a NullPointerException was generated during
a query. This has been fixed.
- Previous releases assumed that a transaction could only lock a table within a single
thread. This assumption was incorrect. Only a single SQL statement can use a transaction
at any one time. However when the currently executing SQL completes another thread can
continue to use the transaction and lock some or all of the same tables.
- Prefixing any of the path properties with a $ now causes that property to be
interpreted as a system property. This has been introduced for use with read only file
systems (e.g. CD-ROMs) where locations such as the temporary files directory have to
be determined at runtime.
- 1.0, 1st Nov 1997
- Several race conditions relating to table drops fixed.
- Updating a table with auto-increment columns caused the next auto-increment
value to be allocated. This has been corrected.
- ORDER BY clause did not accept fully qualified column names. Fixed.
- Several bugs in ORDER BY corrected.
- 1.1, 16th Nov 1997
- URLs of the form jdbc:idb:name.prp now accepted. Old style URLs, of the form
jdbc:idb=name.prp are still accepted.
- Currency and Date formatting information in results sets is now based on the
column from which the results are derived, and not from the current SET CURRENCY,
and SET DATE settings.
- Current currency and date format settings are now held on a per connection basis.
- The DATE type has been extended to include times.
- Tries to provide more helpful error messages, rather than the generally unhelpful
"invalid SQL" message.
- File paths relative to the properties file are now supported. The property
relativeToProperties has been added to support this feature.
- Invalid clauses at the end of an otherwise valid SQL statement are now
detected and rejected. In particular, a syntactically incorrect WHERE clause will now
cause the entire SQL statement to be rejected.
- The methods "getAutoClose" and "setAutoClose" in idbConnection seem to be expected
by the OS2 Warp V4 JDBC driver manager. These have been added. I can't find any documention
on these methods, even in IBM's own "Visual Age for Java" files. Does anyone know what
they are?
- ORDER by clauses required column names to be qualified by their table name when
SELECT * from more than one table was performed, but required unqualified names when
an explicit list of columns was selected. This has been made more consistent by allowing
either qualified or unqualified columns references in the latter case.
- It is now possible to close down one database and open a different one. However it
is still not possible to open more than one database at a time (and may well never be).
- 1.2, 30th Nov 1997
- Index construction could occasionally generate an ArrayIndexOutOfBounds exception.
This has been fixed.
- This document mistakenly listed TEXT as a pseudonym for the CHAR data type. TEXT is
in fact interpreted as a BINARY type.
- The JDBC driver sometimes failed to synchronise multiple threads sharing a
connection. This has been fixed.
- String comparisons of the form LIKE "abcd%" would somtimes fail to match strings of the
form "abcd". This has been fixed.
- Automatic deadlock detection lead to infinite recursion. This has been fixed.
- Notes on limitations on the use of relative paths, and on simultaneous ResultSet
usage have been added to the sections on Installation and JDBC Implementation repectively.
- 1.3, 2nd Jan 1998
- It was possible to overide AUTO INC values in some cases. This has been fixed.
- ResultSetMetaData.getColumnDisplaySize returned the wrong size for String columns.
This has been fixed.
- The IMPORT statement would stop if an error was encountered. In long imports this
could be quite frustrating. This has been modified to report the problem to
System.out, and then to continue with the import.
- Neither an UPDATE statement, nor the PreparedStatement.setNUll() method, were properly
implemented in previous releases. The UPDATE statement and the setNull method both
work as expected now.
- A binary string could not take part in STRING expressions. This release introduces
limited string expression capabilities for BLOB strings. This is sufficient to
compare string constants and BLOB columns in WHERE clauses.
- Indexes on binary columns didn't work. This has been fixed.
- A couple of GUI based examples have been included, including an example of
accessing InstantDB from JavaScript.
- 1.4, 25th Jan 1998
- The IMPORT statement now produces a stack trace, rather than just
a one line message when a line fails to import correctly.
- Added the facility to auto-generate large tables for test purposes
using the IMPORT statement.
- IMPORT no longer needs to start a table from fresh. If the table
already exists then IMPORT will add further lines to the end.
- Failed to auto-commit when no results set was generated - fixed.
- Numerous performance improvements - non-cached string equality
tests up to 100 times faster.
- Recent row cache removed.
- Addition of database Triggers.
- Timing command added to the sample program.
- 1.5, 22nd Feb 1998
- Prior to 1.5, once a table was created it could not be moved. From
1.5 onwards, tables are always opened using the property file's
specifications for creating new tables. Tables can therefore be moved
from one directory to another, or even from one machine to another,
provided the properties file specifies their new location correctly.
- Tables are now only marked as modified when an actual table
change occurs. Prior to 1.5, table were marked as modified as soon
as they were opened. If the database was not proeprly closed then it
could take a considerable time to recover.
- The IMPORT syntax has been extended to allow column delimiters
to take precendence over string constant delimiters. See information
on the STRICT keyword for more information.
- The IMPORT syntax has been extended to allow for performance
improvements during imports. See the
BUFFER keyword for more information.
- A new trace level has been added to debug table scans. See
TR_TABLESCAN for more information.
- Performance improvements to indexed lookups.
- 1.51, 1st March 1998
- Index tables not properly closed in 1.5, Fixed.
- Indexed numeric comparisons in 1.5 included NULL values
and erroneous border line values. Fixed.
- INSERTs used a case sensitive table lookup. Fixed.
- Float/Double NULL testing fixed.
- Quoted strings passed to preparedStatement.setString()
now handled correctly.