These notes describe the difference between Derby release 10.3.2.1 and the preceding release 10.3.1.4.
Derby is a pure Java relational database engine using standard SQL and JDBC as its APIs.
Derby functionality includes:
- Embedded engine with JDBC drivers
- Network Server
- Network client JDBC drivers
- Command line tools: ij (SQL scripting), dblook (schema dump) and sysinfo (system info)
This is a maintenance release. No new features have been added.
The following issues are addressed by Derby release 10.3.2.1. These issues are not addressed in the preceding 10.3.1.4 release.
Issue Id Description DERBY-3232 Top-level index.html in releases incorrectly indicates support for JDBC 2.1 in 10.3 releases DERBY-3216 do row level lock space reclamation in btree of indiv rows. DERBY-3190 New simple demo suitable for supported Java ME platforms DERBY-3187 SimpleApp (demo) does not work in a client setting DERBY-3176 J2ME support for phoneME platform disabled in 10.3 DERBY-3175 NullPointerException on INSERT after ALTER TABLE ... DROP COLUMN DERBY-3172 ConnectionEventListener.connectionErrorOccurred not being executed when SQLState 08006 Error is thrown DERBY-3159 SYSCS_SET_USER_ACCESS fails if the user name contains characters not allowed in regular identifiers. DERBY-3158 Repeat calls to SYSCS_UTIL.SYSCS_SET_USER_ACCESS() for the same user and permission fail with repeated user in list exception. DERBY-3147 Remove unused code that allow identifiers to be lower-cased. DERBY-3142 sysinfo ignores derby.ui.locale DERBY-3136 Cut down on object creations in LIKE clause implementation of territory based characters. DERBY-3133 Syntax for GRANT table permission does not mention that several privileges may be specified in a list DERBY-3126 Inserting BigDecimal value in PreparedStatement with setBigDecimal into double column loses fractional digits DERBY-3123 Style sheet (CSS) references in demo HTML files are incorrect DERBY-3119 Derby does not resolve functions to methods with Integer return type. DERBY-3118 Simple demo is out of date DERBY-3110 server hangs after trace on command fails DERBY-3109 Nonexistent property derby.database.defaultAccessMode shown in Developers Guide: User Authentication examples DERBY-3107 On client, Clob.free() does not release locators. DERBY-3099 Possible bug in interaction with buffer manager causing pages not to be freed on rollback to savepoint DERBY-3098 LOB locks are not released after free(). DERBY-3096 SSL handshake throws "bad_certificate" when server tries to authenticate client DERBY-3093 Intermittent transaction failure caused by internal duplicate savepoint name for triggers DERBY-3086 The server policy needs to grant derbynet.jar more permissions so that sysinfo and drda tracing will work DERBY-3085 Fails to handle BLOB fields with a PreparedStatement with size >32750 bytes DERBY-3081 cannot create instance of generated class because of java.lang.VerifyError in 4 tests on IBM iseries DERBY-3080 With TERRITORY_BASED collation, when multiple characters map to a single collation element '_' matches a single collation element rather than a single character DERBY-3077 Trying to reconnect with derby client after bringing server down throws SQL Exception 58009 rather than 08XXX exception DERBY-3075 Client error: 08001 Error connecting to server.. throws SQLTransientConnectionException instead of SQLNonTransientConnectionException DERBY-3074 Database shutdown exception 08006 throws SQLTransientConnectionException instead of SQLNonTransientConnectionException DERBY-3061 Wrong results from query with two conjuncts DERBY-3046 setObj(int,Object,int) causes NPE if no parameter markers are present; should generate SQLException as for setObject(int,Object) DERBY-3038 SYSCS_IMPORT_TABLE FAILS with No current connection after shutdown/reconnect to encrypted database : 10.3.1.4 regression DERBY-3033 select query results in nullpointer exception in skipScan() DERBY-3032 java.lang.ClassCastException returning null from a case statement in subquery DERBY-3025 NPE when connecting to database with securityMechanism=8 DERBY-3007 Documentation - SYSCS EXPORT TABLE system procedures cannot export data to an existing file DERBY-3000 getTables() call with 10.3 causes java.sql.SQLException: The parameter position '8' is out of range. The number of parameters for this prepared statement is '7'. DERBY-2989 Insert into table with constraints fails if the table name is "indicator" (or any other SQL keyword) DERBY-2986 Query involving CASE statement significantly slower in 10.3.1.4 than in 10.2.2.0 DERBY-2972 Update or select with function in the where clause causes with TERRITORY_BASED collation fails with ERROR 42818: Comparisons between 'VARCHAR' and 'VARCHAR' are not supported. DERBY-2967 Single character does not match high value unicode character with collation TERRITORY_BASED DERBY-2961 TriggerTest.testTypesINActionStatement fails with 'ASSERT FAILED col1.getClass() (class org.apache.derby.iapi.types.SQLClob) expected to be the same as col2.getClass() (class org.apache.derby.iapi.types.CollatorSQLClob) DERBY-2957 ASSERT FAILED col1.getClass() (class org.apache.derby.iapi.types.SQLChar) expected to be the same as col2.getClass() (class org.apache.derby.iapi.types.CollatorSQLChar) in NistScripts dml002 test with collated database DERBY-2910 SimpleStringOperatorNode in it's bindExpression method generates a character string CAST if required but does not set the correct collation. DERBY-2906 derbynet.jar & derbytools.jar incorrectly have a META-INF/services/java.sql.Driver entry DERBY-2902 AS IDENTITY (START WITH -9223372036854775808) fails DERBY-2564 ContextService.notifyAllActiveThreads() and network server code need a privileged block around the calls to Thread.interrupt() DERBY-2352 Assertion Failure with order by and group by expression DERBY-2351 ORDER BY with expression with distinct in the select list returns incorrect result DERBY-2297 In the Dev Guide example derby.database.readOnlyAccessUsers is incorrectly mentioned as derby.database.readAccessUsers DERBY-2188 Developer's Guide talks about a jdbc url property "locale" which is not supported by Derby. DERBY-2073 Inserting BigDecimal value in PreparedStatement into double column loses fractional digits DERBY-2016 ArrayIndexOutOfBoundsException for COALESCE with aggregate functions DERBY-1790 DatabaseMetaData.getTables() with passed in table type of SYNONYM returns system tables and not SYNONYMS DERBY-1769 Add mention that Derby supports rowUpdated, rowDeleted with a result set concurrency of CONCUR_READ_ONLY DERBY-974 ClientDriver can lose some connection properties DERBY-857 LDAP user authentication fails under a security manager
Compared with the previous release (10.3.1.4), Derby release 10.3.2.1 introduces the following new features and incompatibilities. These merit your special attention.
Note for DERBY-2967
Summary of Change
Databases with territory based collation might see the behavior of LIKE predicate in WHERE clause has changed.
Symptoms Seen by Applications Affected by Change
In territory based databases, the LIKE predicate will now comply with SQL specification(Derby already follows SQL specification for UCS_BASIC databases). SQL specification for LIKE predicate requires that database should do one character comparison at a time. Prior to the fix that went in as part of DERBY-2967, Derby did string comparison rather than character comparison for LIKE. This causes a problem with territory based database because the collation element(s) for a string of characters may not be same as the collation element(s) for inidivdual characters that make up that string. In addition, the metacharacter _ in the pattern in a LIKE predicate will now consume exactly one character rather than working on number of collation elements. To show the impact on application, consider following eg. Say we are working with a territory where character 'z' has same collation elements as 'xy'. For such a territory consider following LIKE predicate 'zcb' LIKE 'xy_b' Prior to DERBY-2967, Derby will return TRUE because collation elements for 'z' matched 'xy' and 'c' was consumed by '_' and 'b' matched 'b'. But this does not follow SQL specification. SQL specification requires one character comparison at a time in LIKE. With the fix for DERBY-2967, the LIKE predicate in this example will return FALSE because the collation element(s) for 'z' does not match collation element(s) for 'x'. In addition, the metacharacter _ in pattern for LIKE will consume *one* character in the string value. So for an eg clause 'xycb' LIKE '_cb' will return FALSE because metacharacter _ will consume 'x' and since 'c' does not match 'y', Derby will return FALSE.
Rationale for Change
The previous behavior violated the SQL specification. The new behavior is correct.
Derby release 10.3.2.1 was built using the following environment:
- Branch - Source code came from the 10.3 branch.
- Machine - MKS Toolkit 8.1 on Microsoft Windows XP Professional Version 2002 Service Pack 2.
- Ant - Apache Ant version 1.7.0 compiled on December 13 2006.
- JDK 1.4 - Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_07-b05)
- Java 6 - Java(TM) SE Runtime Environment (build 1.6.0_01-b06).
- OSGi - The osgi.jar was used to build org.apache.derby.osgi.EmbeddedActivator.
- Compiler - The 1.4.2_07-b05 javac was used to compile all classes except for the JDBC4 drivers. The JDBC4 driver classes were compiled using the 1.6.0_01-b06 javac.
- JSR 169 - Java ME support was built using Java ME CDC/Foundation Specification 1.1 libraries from IBM WebSphere Everyplace Micro Environment 6.1