These notes describe the difference between Apache Derby release 10.10.0.0 and the preceding release 10.9.1.0.
The most up to date information about Derby releases can be found on the Derby download page.
Apache Derby is a pure Java relational database engine using standard SQL and JDBC as its APIs. More information about Derby can be found on the Apache web site. Derby functionality includes:
Java and JDBC versions supported:
This is a feature release. The following new features were added:
The following issues are addressed by Derby release 10.10.0.0. These issues are not addressed in the preceding 10.9.1.0 release.
|DERBY-6106||Remove the outdated Japanese and Portuguese docs|
|DERBY-6100||Upgrade tests fail on compact2|
|DERBY-6098||Skip compatibility testing of old servers on compact profile 2|
|DERBY-6097||Management test suite fails when JMX is not supported|
|DERBY-6094||Derby ignores DriverManager.setLoginTimeout()|
|DERBY-6089||CallableStatement#registerOutParameter on client lacks check of legal types.|
|DERBY-6088||PreparedStatementTest42 lacks "fail" call when operation unexpectedly succeeds|
|DERBY-6087||Can't build Javadoc with JDK 1.8 if explicit j15lib, j16lib and j17lib paths are set|
|DERBY-6086||Factor out logic for creating custom connection in jdbcapi.StatementPoolingTest|
|DERBY-6085||Improve error reporting when server port is unavailable|
|DERBY-6083||Update minimum/maximum floating-point values to align with DERBY-3398 fixes|
|DERBY-6081||JDBC 4.2 setObject() and updateObject() methods throw NPE when type is null|
|DERBY-6079||100's of errors in nightly test run on weme after jacoco property/priviledges checkin|
|DERBY-6078||Propagate a set of properties to the junit tasks in build.xml|
|DERBY-6077||web site needs updating on a few points|
|DERBY-6076||Folder.gif icon missing from derby documentation website|
|DERBY-6073||Test ordering instability in StatementPoolingTest|
|DERBY-6072||Move lang/reopenScan.sql to LangScripts|
|DERBY-6071||trunk javadoc build fails with Javadoc failed: java.io.IOException: Cannot run program \bin\javadoc.exe": CreateProcess error=206, The filename or extension is too long.|
|DERBY-6070||Document Derby's JDBC 4.2 implementation|
|DERBY-6065||LockTable API link in the documentation is broken|
|DERBY-6064||Failures in upgradeTests.Changes10_9 related to index cardinality statistics|
|DERBY-6063||Access static variables by class name in TabInfoImpl, InsertResultSet and ControlRow|
|DERBY-6061||Upgrade language is inconsistent|
|DERBY-6060||Fix Javadoc for UpgradeTrajectoryTest dangling reference|
|DERBY-6059||Document Derby usage running on Java 8 JEP 161 Compact Profiles|
|DERBY-6058||2 ClassNotFoundException failures on trunk with ibm's weme6.2 since build 1433263|
|DERBY-6053||Client should use a prepared statement rather than regular statement for Connection.setTransactionIsolation|
|DERBY-6052||Text files under build/site do not have svn:eol-style=native|
|DERBY-6050||Make all topics visible in ToCs|
|DERBY-6044||Fix poor word breaking in table on download page(s)|
|DERBY-6043||Make JQL default query mode for 'ant genrelnotes'|
|DERBY-6042||Document the syscs_util.syscs_register_tool procedure added by DERBY-6022.|
|DERBY-6041||Remove unused parameters from the BTreeLockingPolicy interface|
|DERBY-6039||Intermittent failure in LangProcedureTest.testDynamicResultSets: Table/View 'T1' does not exist.|
|DERBY-6038||Intermittent failure in LangProcedureTest: cannot drop table because of open ResultSet|
|DERBY-6034||Fix documentation on procedure argument limits|
|DERBY-6033||Lift the arbitrary limit on the number of routine parameters.|
|DERBY-6030||Length of escape string in LIKE ... ESCAPE not properly checked with territory based collation|
|DERBY-6027||ORDER BY a cast expression gives NPE|
|DERBY-6018||Document varargs routines.|
|DERBY-6017||IN lists with mixed types may return wrong results|
|DERBY-6010||Reference Manual should clarify what ALTER TABLE ADD COLUMN does|
|DERBY-6009||Need stricter checking of ORDER BY clause in VALUES expressions|
|DERBY-6008||Allow ORDER BY and FETCH/OFFSET in set operands|
|DERBY-6006||NullPointerException in INSERT INTO ... SELECT FROM ... ORDER BY|
|DERBY-6003||Create row templates outside of the generated code|
|DERBY-6002||Reference manual is unclear on when territory can be set|
|DERBY-6001||ErrorMessageTest assert failure: Only one of the waiters should be aborted|
|DERBY-6000||Implement support for JDBC 4.2|
|DERBY-5999||Improve documentation on index key lengths|
|DERBY-5998||Replication tests fail on CDC platforms without optional JSSE package|
|DERBY-5996||Create readme files (cautioning users against modifying database files) at database hard upgrade time|
|DERBY-5995||Add a test case to check the 3 readme files get created even when log directory has been changed with jdbc url attribute logDevice|
|DERBY-5993||The Reference Manual shows an embedded url in its example for the client-side-only retrieveMessageText attribute.|
|DERBY-5992||Use BaseTestCase.execJavaCmd() to start process from NetworkServerTestSetup|
|DERBY-5989||Stop producing byte code for non-existent qualifiers|
|DERBY-5986||Make ArithmeticTest test DECIMAL data type|
|DERBY-5977||Run storemore and possibly other store .sql tests in junit harness using ScriptTest mechanism.|
|DERBY-5976||Document the new SQLWarning raised when trying to change the encryption state of an already booted database.|
|DERBY-5972||Grammar doesn't accept OR operator without parentheses|
|DERBY-5971||Improve test coverage for SQLBoolean class|
|DERBY-5969||Encryption, re-encryption, and un-encryption silently fail if the database is already booted.|
|DERBY-5966||NativeAuthenticationServiceTest.testAll() failure: [ FILE, NATIVE authentication on, LOCAL authentication ON, Authentication/Authorization turned OFF, SecurityManager ON, Embedded ]: Connection to fifthDB unexpectedly failed.|
|DERBY-5964||Timestamp comparison failure in AutomaticIndexStatisticsTest.testStatisticsCorrectness|
|DERBY-5962||Internationalize error messages for database decryption|
|DERBY-5961||Developer's guide mentions SQL state 40XL2 which is no longer used|
|DERBY-5960||VirtualRandomAccessFile.close() is not idempotent|
|DERBY-5955||Prepare Derby to run with Compact Profiles (JEP 161)|
|DERBY-5954||NPE in SELECT involving subselects and windows functions|
|DERBY-5951||Missing method exception raised when using Clobs with territory based collation|
|DERBY-5948||Update JVMInfo.java to include JDK 8|
|DERBY-5947||Factor out common code from generated classes|
|DERBY-5945||Inappropriate error message when calling a procedure as a function (as if it had a return value)|
|DERBY-5940||Disable securityMechanism=8 in NSSecurityMechanismTest on ARM platforms|
|DERBY-5939||Document URL attribute for database decryption|
|DERBY-5938||Documentation says Derby works with Java 1.4.2|
|DERBY-5937||File handle is leaked when a Slave replication is shutdown with failover=true|
|DERBY-5935||Remove unused code for factory classes in the reflection service|
|DERBY-5933||SQL sorting error|
|DERBY-5929||Release numbers in a few topics need updating|
|DERBY-5928||Add more task focus to Derby security documentation|
|DERBY-5927||Add utility methods to query state of URL attributes in EmbedConnection|
|DERBY-5926||Document user-defined aggregates (DERBY-672)|
|DERBY-5925||Document derby.log changes resulting from DERBY-5240|
|DERBY-5918||CREATE TABLE AS SELECT doesn't work on tables with BOOLEAN columns|
|DERBY-5917||NoClassDefFoundErrors when running tests without derbynet.jar and derbyclient.jar|
|DERBY-5916||java.lang.NullPointerException org.apache.derby.impl.store.raw.data.BaseDataFileFactory.stop() connecting to network server|
|DERBY-5914||Incorrect list of compatible JRE versions in client trace #2|
|DERBY-5913||Remove unused classes [GS]et*Action in client.am|
|DERBY-5912||testIsValidImplemented fails for NetworkServer in some slow running machines/configurations|
|DERBY-5911||WHERE condition getting pushed into sub-query with FETCH|
|DERBY-5910||Document use of Connection.close() with try-with-resources|
|DERBY-5909||The lang attribute in toc.html always says 'en-us'|
|DERBY-5906||In the Reference Manual, sin() is used as the example for the sinh() function.|
|DERBY-5905||Derby html documentation doesn't render properly and prints garbage on Internet Explorer|
|DERBY-5900||Need to correct Reference Guide description of contents of SYS.SYSPERMS.OBJECTTYPE|
|DERBY-5898||add ibm18 class to functionTests.harness|
|DERBY-5897||Broken handling of paths with special characters in compatibility/VersionCombinationConfigurator|
|DERBY-5896||Change java/drda source code to use spaces instead of tabs and clean up tab creep in java/client|
|DERBY-5894||NPE in OnlineBackupTest1 while backing up in stubFileToRemoveAfterCheckPoint|
|DERBY-5885||The order of argument names in messages.xml is sometimes wrong when the arguments occur in the message out of sequence.|
|DERBY-5883||Simplify JSR-169 implementation class tree|
|DERBY-5880||Move java.sql.Wrapper implementations to base classes in embedded driver|
|DERBY-5878||Add message argument names, as comments, to English message file produced by MessageBuilder.|
|DERBY-5877||Prune the brokered class tree|
|DERBY-5874||Remove JDBC 3 constants from client.am.Statement|
|DERBY-5873||Avoid unnecessary allocation of Number instances in client/server|
|DERBY-5872||Inconsistency between isWrapperFor() and unwrap() in logical statements|
|DERBY-5871||Invoke logical statements with existing statement tests|
|DERBY-5868||Move java.sql.Wrapper implementations to base classes on the client|
|DERBY-5864||weme 6.2 (J2ME) runs fail to start with Failed to invoke class org.apache.derbyTesting.functionTests.tests.derbynet._Suite java.lang.reflect.InvocationTargetException|
|DERBY-5860||Remove unused methods in DDMReader and DDMWriter|
|DERBY-5854||Test for methods in BrokeredCallableStatement|
|DERBY-5851||Inconsistent code coverage shown for LogicalPreparedStatement40|
|DERBY-5847||Clean up IDE warnings in DRDAConnThread|
|DERBY-5839||dblook run on toursdb fails on triggers with java.lang.StringIndexOutOfBoundsException in dblook.log|
|DERBY-5836||Move assertDirectoryDeleted from BaseJDBCTestCase to BaseTestCase|
|DERBY-5834||Remove unused methods in NetPreparedStatement class|
|DERBY-5833||Remove unused methods in NetCallableStatement class|
|DERBY-5831||Update information on BIS EAR (export control)|
|DERBY-5830||Make DoubleProperties.propertyNames() thread-safe|
|DERBY-5829||Lift DB2 restriction on the DEFAULT clause|
|DERBY-5828||Remove unused methods in NetPackageReply class|
|DERBY-5827||Remove unused methods in NetStatementReply class|
|DERBY-5826||Remove unused methods in NetConnectionReply class|
|DERBY-5822||Document the new SQL standard behavior of the SPACE_TABLE vti|
|DERBY-5821||tools/derbyrunjartest.java doesn't use jvmflags|
|DERBY-5820||emma-instrumentation target should instrument derbyrun.jar|
|DERBY-5819||Add logic to BaseTestCase to start subprocesses ready to be attached to from a Java debugger|
|DERBY-5817||Add support for the JaCoCo code coverage tool|
|DERBY-5815||Add replicationTests.ReplicationSuite to junit-core ant target|
|DERBY-5814||Source cleanup in catalogs "impl.sql.catalog" and "impl.sql.compile"|
|DERBY-5813||Remove unused class ErrorKey|
|DERBY-5810||Include emma.jar on classpath when running compatibility test with instrumented jars|
|DERBY-5808||Compatibility test should use BaseTestCase.execJavaCmd()|
|DERBY-5805||Database encryption topics in Reference Manual need more information|
|DERBY-5804||Remove unused class GenericClassInfo|
|DERBY-5803||Make error handling in xaHelper more explicit|
|DERBY-5802||Remove unused class ExecProcUtil|
|DERBY-5801||Sub-processes should write EMMA coverage data to separate files|
|DERBY-5799||add more info on when Derby chooses 32k page size for tables.|
|DERBY-5798||Disable i18n/JapanCodeConversion.sql on platforms that don't support EUC_JP or SJIS|
|DERBY-5797||AssertionFailedError in functionTests.tests.lang.UpdateStatisticsTest.testDisposableStatsEagerness|
|DERBY-5796||Remove unused methods in client.am.DateTime|
|DERBY-5795||Documentation in release doesn't include stylesheets|
|DERBY-5793||Document new SYSCS_INVALIDATE_STORED_STATEMENTS procedure|
|DERBY-5791||Replication tests should use BaseTestCase.execJavaCmd() to run local commands|
|DERBY-5787||[patch] remove dead allocation|
|DERBY-5786||Duplicate copies of InputStreamUtil.java and DynamicByteArrayOutputStream.java classes in client.net package|
|DERBY-5783||Remove duplicated code for starting remote processes in replication tests|
|DERBY-5779||Table functions should only accept arguments which are constant in their query block.|
|DERBY-5775||Upgrade tests should print full IOException stack trace when it fails to access old versions|
|DERBY-5764||Make DatabaseMetaDataTest more robust wrt changes made by other tests|
|DERBY-5752||LOBStreamControl should materialize less aggressively|
|DERBY-5750||Sending an empty string as table name to compress table procedure or empty string as index name to update statistics procedure makes the parser throw an exception.|
|DERBY-5740||Remove unsued code in AlterTableConstantaction.columnDroppedAndTriggerDependencies|
|DERBY-5632||Logical deadlock happened when freezing/unfreezing the database|
|DERBY-5622||Reduce the chance for hash collisions when checking bootPassword at boot time and when changing password.|
|DERBY-5578||Provide a way to invalidate stored prepared statements|
|DERBY-5546||ResultSet#updateBigDecimal on a REAL column does not do underflow checking|
|DERBY-5531||Assert failure when inserting NULL into indexed column with territory-based collation|
|DERBY-5462||ant release needs to accommodate for different ant executables on different systems|
|DERBY-5460||ant release should allow local.properties to exist|
|DERBY-5425||Updateable holdable ResultSet terminates early after 65638 updates|
|DERBY-5407||When run across the network, dblook produces unusable DDL for VARCHAR FOR BIT DATA columns.|
|DERBY-5359||Missing xmlns attribute for html element in docs|
|DERBY-5358||SYSCS_COMPRESS_TABLE failed with conglomerate not found exception|
|DERBY-5340||Comment in demo server policy should follow RFC 2606 convention|
|DERBY-5240||Log Operating system information to derby.log on boot|
|DERBY-5232||Put a stern README file in log and seg0 directories to warn users of corrpution they will cause if they touch files there|
|DERBY-5213||Write tests to verify the interaction of TRUNCATE TABLE and online backup|
|DERBY-4841||Improve projecthelp for the top level Derby build script|
|DERBY-4811||Remove unused clean targets from the Derby build.|
|DERBY-4323||test failure in lang.ErrorMessageTest with IBM iseries IBM 1.5|
|DERBY-4279||Statement cache deadlock|
|DERBY-4259||Document database property for determining database format version|
|DERBY-4229||encryptionKeyLength connection attribute should be documented|
|DERBY-3398||Support min/max values for Java types float/double in real/double columns|
|DERBY-3371||Strange (and untested) code fragment in RAMTransaction.addColumnToConglomerate()|
|DERBY-3275||Mismatch between comments and actual use of initialSize parameter in CacheFactory and Clock|
|DERBY-2920||Share code between readExternal() and readExternalFromArray()|
|DERBY-2774||Desciption of variable part in error message of XSLAM was not exists in Derby reference manual.|
|DERBY-2705||Description of error message for X0X61/X0Y59/X0Y69/X0Y70 in SQL error messages and exceptions of Reference manual is not appropriate.|
|DERBY-2699||performance of like in territory based collation databases may be improved by changing way collation elements are calculated.|
|DERBY-2601||Server SQLException error codes are not returned to client|
|DERBY-2572||Write a master script which creates a release branch.|
|DERBY-2516||Network Client allows execution of callable statement when one of the parameters is not set|
|DERBY-2461||Convert lang/procedure.java to junit|
|DERBY-2076||Rewrite junitTests/derbyNet/CompatibilityTest to conform to current JUnit usage|
|DERBY-1982||Remove support for JDK 1.3 in 10.3 and onwards|
|DERBY-1721||DOCS - Remove duplicate information in Dev Guide re: Encryption|
|DERBY-1400||Cleanup code in network server's DRDAStatement class|
|DERBY-1048||Include run of junitTests/CompatibilitySuite, or converted compatibility test suite with 10.1/trunk combination into suites.All|
|DERBY-436||clean up imports and static field references in DRDA classes|
Compared with the previous release (10.9.1.0), Derby release 10.10.0.0 introduces the following new features and incompatibilities. These merit your special attention.
A SQLWarning is now raised if you try to change the encryption state of an already booted database.
A SQLWarning is raised if an application sets any of the following attributes while trying to connect to an already booted database:
The connection attempt will succeed but a SQLWarning will appear on the warning chain returned by Connection.getWarnings(). The warning will have SQLState 01J17 and the following message text: You cannot encrypt, re-encrypt, or decrypt a database which is already booted. You must shutdown the database before attempting these operations.
In previous releases, Derby did not raise a SQLWarning when an application set the above attributes while connecting to an already booted database. This may cause an incompatibility now if an application always sets the dataEncryption attribute when connecting to an encrypted database. In previous releases, that attribute was simply ignored. Now the application sees an extra SQLWarning on the warnings chain after connecting to the encrypted database.
All of the affected attributes share a common meaning: change the encryption state of the database. When the database was already booted, the request to change its encryption state was ignored silently. The application could not tell whether the encryption state of the database had actually been changed. Now the application can check the warning chain to determine whether the database was encrypted, re-encrypted, or decrypted as requested.
Applications should check the warning chain after requesting a change to the encryption state of the database.
Applications which check the warning chain may need to be adjusted if they set the dataEncryption attribute whenever they connect to an encrypted database.
Changed SQL states for errors while re-encrypting a database.
When re-encryption of a database fails and
SQLException, the SQL state returned
SQLException.getSQLState() may not be the same as it
was in earlier releases.
The following SQL states and messages have changed in this version:
The new SQL states and messages reported for the above failure scenarios, are:
The SQL states for some errors during re-encryption of a database have changed.
The consolidated messages simplify the error handling in the database encryption code.
Applications that look for the old SQL states should be changed to look for the new SQL states.
Table function arguments may no longer refer to other tables in the same query block.
In previous releases, table functions could be invoked with arguments which referred to other tables in the same query block. Now Derby will reject those queries when the statement is prepared. For instance, the following query, which used to work...
select * from T, table( F( T.a ) ) S;
...now raises this error:
ERROR 42ZB7: Illegal reference to column 'T.A'. Table function parameters may not refer to other tables in the same query block.
Applications may fail if they join table functions to other tables inside the FROM list.
The old syntax violated the SQL Standard and did not have a well-defined meaning.
No change is required if table function arguments refer to tables in outer query blocks. For instance, the following query still works:
select * from T where exists ( select B from table( F( T.a ) ) S );
However, applications need to re-write any query which uses the FROM list to join a table function to another table in the same query block. Developers should reason carefully about what the old syntax meant to express and then re-write the query in a legal way. In many cases, the following transformations may result in a query which expresses what the developer originally intended:
After applying these transformations, the failing query (given above) would look like this:
select * from T, table( F() ) S where T.A = S.A;
A new system procedure helps correct misbehaving triggers and metadata queries.
Applications did not have a way to recompile metadata queries and triggers if a Derby bug made the queries and triggers behave incorrectly. If you suspect that your metadata queries or triggers are misbehaving, you may be able to fix their behavior by calling the following new system procedure:
The new SYSCS_UTIL.SYSCS_INVALIDATE_STORED_STATEMENTS procedure was introduced as a workaround when Derby bugs break metadata queries and triggers.
ResultSet#updateBigDecimal on a REAL or DOUBLE column now does underflow checking.
Using ResultSet#updateBigDecimal will throw SQL error 22003 in applications that didn't use to throw.
If the application performs ResultSet#updateBigDecimal on a REAL or a DOUBLE column with a value that is too small to be represented in Derby and didn't include code to handle SQLDataException 22003, it would now need to handle this (and possibly update the value with 0.0 itself if that is the desired behavior).
To make Derby behavior more consistent and to reliably detect underflow behavior.
If the application would sometimes try to perform ResultSet#updateBigDecimal with a number that can't be represented by REAL or DOUBLE, as the case may be, an exception handler may have to be added.
Derby will create readme files in the database directories.
A database created with Derby 10.10, or upgraded to 10.10, will contain readme files named README_DO_NOT_TOUCH_FILES.txt in the top-level database directory and in the subdirectories seg0 and log.
Unintentional editing of the database files by the users can leave the database in a non-recoverable state. To caution users against such an action, a database created with 10.10 or upgraded to Derby 10.10 will have three readme files which will warn users against touching any files in the various database directories. These readme files are in the top-level database directory and in the subdirectories seg0 and log.
Legacy DB2 compatibility limits on REAL and DOUBLE values have been lifted.
SQLDataException 22003 may not be raised for applications which use float and double Java values outside DB2's limits for SQL REAL and DOUBLE.
In soft upgrade mode, the checking of the limits is still in place, but is deferred from ResultSet#updateXXX to ResultSet#updateRow.
The application cannot rely on Derby to detect when values outside the legacy DB2 limits are used. These limits are:
float DB2_SMALLEST_REAL = -3.402E+38f; float DB2_LARGEST_REAL = +3.402E+38f; float DB2_SMALLEST_POSITIVE_REAL = +1.175E-37f; float DB2_LARGEST_NEGATIVE_REAL = -1.175E-37f; double DB2_SMALLEST_DOUBLE = -1.79769E+308d; double DB2_LARGEST_DOUBLE = +1.79769E+308d; double DB2_SMALLEST_POSITIVE_DOUBLE = +2.225E-307d; double DB2_LARGEST_NEGATIVE_DOUBLE = -2.225E-307d;
In soft upgrade mode, the place where the limits are checked has changed, cf. above.
We do this to allow applications to store a wider range of the Java floating point number types in Derby. It lets the application use Derby for all Java float and double values with the exception of NaN (not a number), -0.0 (normalized to +0.0) and +/- infinity as defined in the IEEE-754 1985 floating-point standard.
If the application relied on Derby to detect when use of numbers outside the DB2 limits were used, the application would now need to perform such checks itself.
Error codes match severity levels on the network client.
In previous releases, an
SQLException raised by the
network client would in nearly every case return -1
Starting with this release, if both the network server and the network
client are running Derby version 10.10 or
getErrorCode() returns a value that represents
the severity of the error, and that is different from -1.
Special note for mixed version environments: If either the server or
the client is at version 10.10 or higher, and the other party is at
version 10.9 or lower,
getErrorCode() may return a value
that is neither -1 nor the severity of the error.
Applications that check the value returned
SQLException.getErrorCode() will see a different
value in the new release.
The change makes
getErrorCode() behave consistently in
the network client driver and the embedded driver.
If the application is coded in a way that depends
SQLException.getErrorCode() returning -1, it will have
to be recoded to ignore the error code or to accept a different value.
In environments where the server version and the client driver version
differ, and the return value
SQLException.getErrorCode() has significance for the
application, it is recommended to upgrade both the client driver and
the server to version 10.10 or higher.
Derby release 10.10.0.0 was built using the following environment:
It is essential that you verify the integrity of the downloaded files using the PGP and MD5 signatures. MD5 verification ensures the file was not corrupted during the download process. PGP verification ensures that the file came from a certain person.
The PGP signatures can be verified using
First download the Apache Derby
as well as the
asc signature file for the particular
distribution. It is important that you get these files from the ultimate
trusted source - the main ASF distribution site, rather than from a mirror.
Then verify the signatures using ...
% pgpk -a KEYS % pgpv db-derby-X.Y.tar.gz.asc or % pgp -ka KEYS % pgp db-derby-X.Y.tar.gz.asc or % gpg --import KEYS % gpg --verify db-derby-X.Y.tar.gz.asc
To verify the MD5 signature on the files, you need to use a program
md5sum, which is
included in many unix distributions. It is also available as part of
Textutils. Windows users can get binary md5 programs from here, here, or
We strongly recommend that you verify your downloads with both PGP and MD5.