java.util.Hashtable
.<!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 |).
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.