Support for PostgreSQL 7.3.
Support for MySQL 3.23.55-max.
Support for MS SQL Server 7.0 SP4 and 2000 SP2.
Support for DB2 version 7.2.3.
Support for SAP DB 7.4.3.
DB2J (Cloudscape 5) is now fully supported.
Added support for connection pooling to the unit tests using Jakarta DBCP.
Bug 676897: Fixed view creation failure when a view has a dependency on another view.
Bug 631870: InverseMap can't have not null owner (thanks to David Jencks).
Query parser now parses octal sequences properly.
Fixed possible NullPointerException that could occur if the first access to a Set field came from a Query filter.
Fixed NullPointerException that can occur in StateManagerImpl.getFlagsSetTo(boolean[],int[],boolean).
Fixed setConnectionFactory2() and setConnectionFactory2Name().
Remove leading and trailing underscores from Java identifiers when converting them to SQL identifiers (thanks to J. David Beutel).
Fixed class enhancer wrapper exception when attempting to enhance many classes (~150 or more) at once.
Fixed query ordering for Oracle boolean columns.
Fixed ClassCastException in ClassViewExtent.closeAll().
Fixed identifier quote string problem with MySQL running in non-ansi mode.
Added support for Firebird (thanks to David Jencks). Much of the query generation code was reworked to adhere to SQL standards and for readability.
Added support for PostgreSQL (thanks to Levente Sántha). See notes about JDBC driver requirements in the DBMS compatibility page.
Added support for Cloudscape 5.0/DB2J (thanks to Matthew Cooper).
Put more SQL-92 keywords into the reserved words list (thanks to David Jencks).
Bug 639848: Fixed exception in Extent.closeAll() (thanks to Matthew Cooper and David Beutel).
Bug 634261: Fixed Set.remove() to return the correct value (thanks to Mike Martin).
Bug 664091: Fixed retrieving a connection in JBoss (thanks to Brian Smith).
TJDO has been upgraded to version 1.0 of the JDO spec.
In doing this many changes were incurred:
<!DOCTYPE jdo SYSTEM "jdo.dtd">
The query compiler has been completely rewritten. It now incorporates a full parser/compiler for JDOQL in place of the anemic token translator used by previous versions. This means no more restrictions on usage of white space, parentheses, boolean values, null arguments, etc.
Features:
"a == 0 | b == 0 && c == 0"
now correctly compiles to
"WHERE (A = 0 OR B = 0) AND C = 0"
(an admittedly contrived example, better written with || and parentheses instead of |).
The following new methods are now supported in Query filter strings.
These are all non-standard TriActive extensions to JDOQL. See Query Extensions for details.
Support has been added for persistent fields of type java.math.BigInteger or java.math.BigDecimal.
Query result collections were modified to improve performance slightly for any methods that operate on the collection as a whole, namely contains(), containsAll(), and toArray().
Bug fix: Querying over a view sometimes caused pathologically slow performance if the view object contained an interface field.
The store manager has to query JDO_TABLE whenever an OID refers to a class whose table isn't yet initialized. Many such calls in succession would result in many redundant SQL queries. A change was made to trigger initialization of the table after the first such call.
Support has been added for direct SQL as an alternate query language. This allows you to delegate some kinds of searching and/or computation to the database server where performance is critical, at the expense of portability. See direct SQL queries for details.
Schema management has been changed with regard to foreign key indices: a foreign key index now is not created if another index or primary key already exists that begins with the foreign key columns. In such a case, creating another index is deemed to be superfluous. The assumption is that the database is smart enough to use the existing index with the larger key even when looking for a match on only a portion of that key. See schema management for details.
If not done automatically by the database, TJDO now maintains indices for all foreign key columns. Indices are automatically validated as a part of schema validation and will be auto-created if auto-create mode is enabled. See schema management for details.
When running the new version against an existing schema you may need to run through and validate all tables at least once with auto-create mode on in order to create any missing indices. If you don't and any indices are missing a SchemaValidationException will be thrown.
Due to a bug in the Oracle JDBC driver, this feature now introduces a restriction on class naming; see unsupported features.
The String.indexOf() method is now (partially) supported in Query
filter strings. This is a non-standard TriActive extension to the Query
filter language that can be used to perform the equivalent of LIKE
'%xyz%'
in SQL.
For example, the subexpression:
str.indexOf("xyz") >= 0
will literally generate "WHERE STR LIKE '%xyz%'
" in the
resulting SQL.
However, usage of indexOf() is very limited in that it can only be used in this exact context; i.e. to test for the existence of an embedded substring. In other words, it can only be used as the X in a "X >= 0" subexpression. It cannot be used to otherwise obtain or filter on the index position of a substring; any occurrence of indexOf() must always be followed by the characters ">= 0" or an exception will be thrown.
The performance of schema validation has been improved by obtaining column info metadata for multiple tables in a single query rather than one query per table.
Bug Fix: Referencing a parameter more than once in a query filter string throws an InvalidQueryParameterTypeException.
Bug Fix: In view definitions, any macro referencing a table that is not also referenced in the column definition list could potentially cause an InvalidStateException due to that table not being initialized.