Apache Derby 10.9.1.0 Release
Distributions
Use the links below to download a distribution of Apache Derby. You should always verify the integrity of distribution files downloaded from a mirror.
There are four different distributions:
- bin distribution - contains the documentation, javadoc, and jar files for Derby.
- lib distribution - contains only the jar files for Derby.
- lib-debug distribution - contains jar files for Derby with source line numbers.
- src distribution - contains the Derby source tree at the point which the binaries were built.
db-derby-10.9.1.0-bin.zip [PGP] [MD5]
db-derby-10.9.1.0-bin.tar.gz [PGP] [MD5]
db-derby-10.9.1.0-lib.zip [PGP] [MD5]
db-derby-10.9.1.0-lib.tar.gz [PGP] [MD5]
db-derby-10.9.1.0-lib-debug.zip [PGP] [MD5]
db-derby-10.9.1.0-lib-debug.tar.gz [PGP] [MD5]
db-derby-10.9.1.0-src.zip [PGP] [MD5]
db-derby-10.9.1.0-src.tar.gz [PGP] [MD5] (Note that, due to long filenames, you will need gnu tar to unravel this tarball.)
Release Notes for Apache Derby 10.9.1.0
These notes describe the difference between Apache Derby release 10.9.1.0 and the preceding release 10.8.2.2.
Overview
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:
- Embedded engine with JDBC drivers
- Network Server
- Network client JDBC drivers
- Command line tools: ij (SQL scripting), dblook (schema dump) and sysinfo (system info)
Java and JDBC versions supported:
- Java SE 1.4 and higher with JDBC 2.1, 3.0, 4.0 and 4.1
- Java ME CDC/Foundation Profile 1.1 with JSR-169 JDBC Optional Package for CDC/Foundation Profile.
New Features
This is a feature release. The following new features were added:
- NATIVE authentication - Derby now provides better credentials management to replace BUILTIN authentication.
- JDBC 4.1 escape syntax - Most of Derby's JDBC 4.1 support was provided in release 10.8.1.2. This release supplies the remaining bits: object mapping and new escape syntax.
- Multi-column EXISTS subqueries - Multi-column SELECT lists are now allowed in EXISTS subqueries.
Bug Fixes
The following issues are addressed by Derby release 10.9.1.0. These issues are not addressed in the preceding 10.8.2.2 release.
Issue Id
| Description |
---|---|
DERBY-5777 | Update description of Maven artifact for the Derby net servlet to reflect that it is not intended for production use |
DERBY-5776 | test failure in iepnegativetests_ES with weme 6.2 (J2ME/CDC) with trunk (10.9 alpha) as of revision 1339441 |
DERBY-5774 | Failures in UpdateStatisticsTest (order-dependent test cases) |
DERBY-5771 | Use TestNullOutputStream where possible |
DERBY-5770 | Reduce window of opportunity for queries being compiled without statistics on istat update |
DERBY-5769 | Notes deprecating BUILTIN authentication need fixing |
DERBY-5768 | Remove references to NATIVE::LOCAL from Derby error messages. |
DERBY-5767 | Remove mentions of NATIVE::LOCAL authentication provider setting |
DERBY-5763 | Reference Guide should note the new casing rules for the USERNAME arguments to the NATIVE procedures |
DERBY-5760 | Missing argument in some XJ022 errors |
DERBY-5759 | Add IndexStatsUtil.release(boolean closeConnection) |
DERBY-5758 | System procedures in Reference Manual should be alphabetized |
DERBY-5756 | Document new SYSCS_DROP_STATISTICS procedure |
DERBY-5755 | Minor cleanup of DataDictionaryImpl.getRoutineList() |
DERBY-5753 | nighly regression test failure in testLeak(org.apache.derbyTesting.functionTests.tests.memory.Derby5730Test) process failed |
DERBY-5751 | Make TriggerTest less hungry on heap space |
DERBY-5749 | Implicit cast of variable length values, e.g. as arguments to stored methods and generated columns values, silently truncate if too long |
DERBY-5747 | Native user authentication: Docs do not describe what happens to schema and its SQL objects on SYSCS_UTIL.SYSCS_DROP_USER call |
DERBY-5746 | Minor refactoring of DataDictionaryImpl.getSetAutoincrementValue |
DERBY-5745 | Remove unused local variables from DataDictionaryImpl |
DERBY-5737 | Remove GenericDescriptorList.elements and replace Enumerator usage with Iterator |
DERBY-5736 | NullPointerException in GenericTriggerExecutor.executeSPS() caused by OutOfMemoryError |
DERBY-5734 | End transaction if CleanDatabaseTestSetup.decorateSQL fails |
DERBY-5733 | Source file for OrderByAndSortAvoidance contains characters not available in the C locale |
DERBY-5732 | ProtocolTest doesn't clean up its test resources |
DERBY-5730 | DataDictionaryImpl leaks references to itself via SYSFUN_AD |
DERBY-5729 | Replication tests keep references to connections after completion |
DERBY-5727 | Update POMs to deploy Maven artifacts to repository.apache.org and use ASF parent POM |
DERBY-5726 | Make it more difficult to forget calling super.tearDown() from BaseJDBCTestCase's subclasses |
DERBY-5725 | ErrorStreamTest doesn't call super.tearDown() |
DERBY-5724 | EncryptionKeyTest sometimes keeps reference to connection |
DERBY-5723 | LongColumnTest doesn't call super.tearDown() |
DERBY-5722 | InternationalConnectTest forgets to call super.tearDown() |
DERBY-5721 | ParameterMappingTest lacks call to super.tearDown() |
DERBY-5720 | UngroupedAggregatesNegativeTest doesn't call super.tearDown() |
DERBY-5719 | UniqueConstraintMultiThreadedTest doesn't call super.tearDown() |
DERBY-5718 | UniqueConstraintSetNullTest calls super.tearDown() too early |
DERBY-5717 | TableFunctionTest keeps reference to connection after completion |
DERBY-5716 | TimestampArithTest keeps references to statements after completion |
DERBY-5715 | InbetweenTest holds on to resources after completion |
DERBY-5714 | ColumnDefaultsTest holds on to resources after completion |
DERBY-5713 | AlterTableTest holds on to resources after completion |
DERBY-5712 | CheckConstraintTest holds on to resources after completion |
DERBY-5711 | NullsTest doesn't call super.tearDown() |
DERBY-5710 | BigDataTest.tearDown() doesn't call super.tearDown() |
DERBY-5709 | ResultSetFromPreparedStatementTest keeps references to non-default connections |
DERBY-5708 | simpleThread test doesn't release connection |
DERBY-5707 | Clean up statements in CharUTF8Test |
DERBY-5706 | Clean up statements in CreateTableFromQueryTest |
DERBY-5705 | Authorization decorators don't null out connections when done |
DERBY-5704 | Various cleanups in CoalesceTest |
DERBY-5701 | Make UpdatableResultSetTest less hungry on heap space |
DERBY-5700 | Delete symlinks to the 10.0 manuals from the web site |
DERBY-5699 | Disable automatic conversion to star imports in NetBeans project |
DERBY-5698 | Document performance issue with 2-arg versions of setXXXStream methods for LOBs |
DERBY-5697 | Doc changes to account for correctness fixes for sequences |
DERBY-5696 | Documentation on LOBs needs some fixes |
DERBY-5695 | Speed up population of tables in OrderByAndSortAvoidance |
DERBY-5693 | BUILTIN should say passwords are hashed not encrypted |
DERBY-5692 | intermittent test failure in storetests/st_derby715.java |
DERBY-5691 | Document that Write Caching must be disabled to avoid possible database corruption |
DERBY-5683 | BaseJDBCTestCase.getDatabaseProperty() should close resources before returning |
DERBY-5682 | ProtocolTest failures: Unsupported encoding MacGreek |
DERBY-5681 | When a foreign key constraint on a table is dropped, the associated statistics row for the conglomerate is not removed |
DERBY-5680 | indexStat daemon processing tables over an over even when there are no changes in the tables |
DERBY-5678 | LocalizedDisplayScriptTest fails on JVMs that don't support EUC_JP encoding |
DERBY-5677 | ClassNotFoundException when running suites.All without derbynet.jar |
DERBY-5671 | NsTest does not run on trunk do multiple issues stemming from concurrency improvements |
DERBY-5667 | testReadCommitted(org.apache.derbyTesting.functionTests.tests.store.UpdateLocksTest)junit.framework.AssertionFailedError: Missing rows in ResultSet |
DERBY-5664 | Include driver tests in jdbcapi suite |
DERBY-5657 | Message XCY05 for NATIVE authentication is (too?) complex |
DERBY-5655 | Preformatted text should not be used for graphic |
DERBY-5653 | We should document that the NetServlet is a testing tool and not appropriate for production use. |
DERBY-5649 | make improvements to nstest so it's easier to run/analyze/debug |
DERBY-5648 | Unclear password expiry warning when using separate credentials db |
DERBY-5647 | NATIVE warns about password expiry for DBO |
DERBY-5646 | Get upgrade tests to pass on OJEC 1.1 |
DERBY-5645 | Reference manual says setBlob()/setClob()/getBlob()/getClob() are not supported on CallableStatement |
DERBY-5644 | Typo in error message for NATIVE authentication |
DERBY-5643 | Occasional hangs in replication tests on Linux |
DERBY-5642 | OutOfMemoryError in OCRecoveryTest on phoneME |
DERBY-5641 | Remove unused BaseDataFileFactory methods plus minor cleanups |
DERBY-5640 | Use <desc> element for table summary |
DERBY-5639 | Minor code cleanup for NetServlet |
DERBY-5637 | Document Derby's JMX capabilities and how to disable them |
DERBY-5636 | Improve the overview of Derby's security mechanisms |
DERBY-5635 | Provide implementation for getMetaData() in VTITemplate |
DERBY-5633 | Add tests for state transition and behavior with Lock Timeout in XA Transaction (DERBY-5552 testing task) |
DERBY-5631 | Extend SecurityManagerSetup to add extra privileges to the set of default privileges (merge two policy files) |
DERBY-5628 | Wrong syntax description in DELETE statement doc |
DERBY-5627 | Remove unused methods in UUID classes |
DERBY-5624 | System can run out of stack space while processing DropOnCommit requests. |
DERBY-5623 | Loosen up synchronization in FileMonitor |
DERBY-5620 | Replace illegal characters from test name when creating the failure folder |
DERBY-5617 | Improve process handling in SpawnedProcess |
DERBY-5616 | demo/vtis/sql/demoFileVtis.sql needs to be adjusted: messages_en.properties has moved |
DERBY-5614 | NullPointerException with INSERT INTO (global temporary table) SELECT ... FROM (VTI) |
DERBY-5612 | Puzzling documentation about the URL to a database on the classpath |
DERBY-5609 | Prepare old test harness for running tests on Java 8 |
DERBY-5608 | BaseTestCase.readProcessOutput should read getInputStream() and getErrorStream() in separate threads |
DERBY-5604 | (patch) access static constants with static references |
DERBY-5603 | EmbedConnection.clearLOBMapping() incorrectly clears lobFiles causing a ConcurrentModificationException |
DERBY-5599 | readlocks.sql fails with extra locks. |
DERBY-5598 | testStartWithPrintWriter(org.apache.derbyTesting.functionTests.tests.derbynet.DerbyNetNewServerTest)junit.framework.AssertionFailedError: Num of log item should add |
DERBY-5596 | TIMESTAMP doc gives wrong precision limitation |
DERBY-5591 | Imprecise wording in documentation in ref man on DROP VIEW |
DERBY-5590 | Document optional modifyThreadGroup permssion in java 2 security permissions |
DERBY-5587 | Due to licensing issues, fix or remove the monohtml docs posted on Derby's documentation page. |
DERBY-5586 | Remove the fo2html.xsl script from the docs repository and fix the docs and release builds so that they don't build monohtml versions of the Derby manuals. |
DERBY-5584 | Select statement with subqueries with group by and count distinct statements returns wrong number of results |
DERBY-5580 | NativeAuthenticationServiceTest getting multiple errors trying to delete files/directories during teardown |
DERBY-5574 | encryption test in encryption nightly suite test fails with ERROR XBM0S: Unable to rename file error |
DERBY-5568 | AssertionFailedError: Should not hold locks after commit in ResultSetMiscTest |
DERBY-5567 | AlterTableTest#testDropColumn fails: drop view cannot be performed due to dependency |
DERBY-5566 | CREATE SCHEMA should state that one cannot create a new schema starting with "SYS" in case normal form |
DERBY-5565 | Network Server should reject client connections that are not Derby Network Client |
DERBY-5564 | Code does different things depending if derby.locks.deadlockTrace=true is set |
DERBY-5562 | An read-only XA transaction that has a timeout never has the timer canceled when the transaction is complete |
DERBY-5559 | AssertFailures (7, or 8) with ibm 1.6 and 1.5 on Windows XP in lang.NativeAuthProcs fixture testAll |
DERBY-5558 | NullPointerException in store.RecoveryTest launchRecoveryInsert and failure in testBasicRecovery with weme 6.2 |
DERBY-5557 | NULLIF topic in reference manual should explain NULLIF |
DERBY-5552 | Derby threads hanging when using ClientXADataSource and a deadlock or lock timeout occurs |
DERBY-5550 | Document derby.authentication.builtin.saltLength and derby.authentication.builtin.iterations |
DERBY-5547 | NSSecurityMechanismTest fixture testNetworkServerSecurityMechanism fails intermittentlyt |
DERBY-5542 | Remove checks for Java version being greater than or equal to 1.4 |
DERBY-5541 | Remove unnecessary field rwsOK in DirStorageFactory4 |
DERBY-5540 | Call initCause() and getCause() without reflection in BaseJDBCTestCase |
DERBY-5539 | Harden password hashing in the builtin authentication service |
DERBY-5536 | Client's ResultSet#getLong does not range check when converting from a DECIMAL column |
DERBY-5535 | Remove unused methods from client's CrossConverters class. |
DERBY-5533 | Client differs from embedded when rs.updateInt overflows: 22015 vs 22003 |
DERBY-5530 | SQLChar.getCollationKey NPE in index-stat-thread |
DERBY-5529 | XATransactionTest: Table/View 'DERBY1016' already exists |
DERBY-5527 | Documentation problem: 5 - Verifying the copy of the files |
DERBY-5526 | on upgrade from 10.5 to 10.8.2 , getting ERROR XBM0A: The database directory 'C:\cygwin\home\debugfat\clientdb' exists. However, it does not contain the expected 'service.properties' file. |
DERBY-5524 | Speed up clean-up after StatementJdbc30Test.xtestMaxOpenStatementsWithQueryTimeout |
DERBY-5522 | Document the NATIVE authentication scheme. |
DERBY-5521 | JDBCMBeanTest#testAttributeDriverLevel uses Java assert in lieu of JUnit assert: no real testing happens |
DERBY-5519 | Update code in JVMInfo#derbyVMLevel to give correct results for Java 7 and provisionally for 8. |
DERBY-5517 | testReplication_Local_3_p1_StateNegativeTests failed with connection refused |
DERBY-5516 | Document the fact that attributes on the connection URL trump attributes specified in a connection Properties object. |
DERBY-5515 | Derby mailing lists should be mentioned in documentation |
DERBY-5514 | SecureServerTest (and others) don't play nice with EMMA: AccessControlException |
DERBY-5512 | emma-single and emma-all don't use the instrumented jars |
DERBY-5509 | javadoc for NetServlet and NetworkServerControl are missing a few closing tags |
DERBY-5508 | Improve backup/restore documentation visibility and content to encourage proper backups and restore procedures |
DERBY-5507 | Orderly shutdown fails if you are using BUILTIN authentication and turn on derby.database.propertiesOnly |
DERBY-5506 | Document that EXISTS subquery can now select more then one column |
DERBY-5505 | BLOB and CLOB Reference Manual topics could use some fixes |
DERBY-5504 | SecureServerTest, Driver40UnbootedTest and replication tests not prepared for space in java.home |
DERBY-5502 | RestrictiveFilePermissionsTest and RecoveryTest fail with file permission errors on the OpenJDK 7 preview for Mac OS X |
DERBY-5501 | Subquery is only allowed to return a single column - When using derby with hibernate (or JPA) queries are created per JPA spec. For tables with multi-column PK, subqueries are created with two columns in select clause. |
DERBY-5499 | Document the new JDBC limit/offset escape syntax |
DERBY-5498 | ClosedByInterruptException in AuthenticationTest |
DERBY-5496 | The JUnit infrastructure package should be compiled against the small device classpath, not the JDK 1.4 classpath |
DERBY-5495 | Master issue to track fixes to sequence generators |
DERBY-5494 | Same value returned by successive calls to a sequence generator flanking an unorderly shutdown. |
DERBY-5492 | Restrictive file permissions: permissions removed also for owner on NTFS if Acl does not contain explicit entry for owner |
DERBY-5491 | (patch) new String("") or new String() is pointless, and just allocates memory needlessly - removed |
DERBY-5490 | Lots of error trying to spawn a JVM in the SecureServerTest and Replication tests when running on the preview JDK 7 on Mac OS X |
DERBY-5489 | getBinary() returns incorrect data after getObject() call on BLOB column |
DERBY-5488 | Add remaining JDBC 4.1 bits which did not appear in the Java 7 javadoc. |
DERBY-5485 | Simplify PropertySetter so that it is less brittle and easier to maintain. |
DERBY-5482 | Reduce number of jar invocations in the buildjars target |
DERBY-5480 | File handle leak in MessageVetter |
DERBY-5479 | Don't run MessageVetter unless messages have changed |
DERBY-5478 | Speed up creation of bin scripts |
DERBY-5477 | Switch from scpexe to scp for Maven deployment |
DERBY-5476 | Remove unused parameter in splitmessages |
DERBY-5474 | Speed up message splitting in build |
DERBY-5472 | Speed up MemoryLeakFixesTest.testRepeatedDatabaseCreationWithAutoStats() |
DERBY-5469 | Make it possible to build Derby if you are on Mac OS X and your JDK is JDK 7 |
DERBY-5467 | Copyright notice in the API documentation (generated by the Javadoc tool) is outdated |
DERBY-5465 | Broken null checks in NsTest |
DERBY-5464 | Add easier to find links to Derby JavaDoc on the Derby web site |
DERBY-5459 | Result set metadata are out of sync on client after underlying table is altered |
DERBY-5458 | Add ant target to generate JavaDocs bundle |
DERBY-5456 | Problems running SecureServerTest and replication tests on Open JDK 7 for Mac OS X |
DERBY-5454 | ERROR 40001 deadlock in nstest on select max(serialkey) |
DERBY-5453 | Remove unused methods in Cursor and NetCursor |
DERBY-5449 | 10.8 client with 10.5 server gives java.lang.ClassCastException: java.lang.Boolean incompatible with java.lang.Short in NetStatementRequest.buildFDODTA with CursorTest.testCursorParam() |
DERBY-5442 | Create documentation for restrictive file permissions feature |
DERBY-5440 | test failure in testBTreeForwardScan_fetchRows_resumeAfterWait_nonUnique_split(org.apache.derbyTesting.functionTests.tests.store.IndexSplitDeadlockTest)junit.framework.AssertionFailedError: expected:<1> but was:<0> |
DERBY-5439 | Remove JRE / JDBC line from sysinfo |
DERBY-5437 | Load all toursdb tables in one invocation of ij |
DERBY-5436 | Use helper method to add warning in EmbedResultSet.movePosition() |
DERBY-5434 | On linux with IBM JDK 1.7 suites.All does not run at all failing with java.lang.reflect.InvocationTargetException |
DERBY-5427 | Unauthorized shutdown should not generate thread dump and javacore. AuthenticationTest dumps over 20 javacores with IBM JVM for normal user errors |
DERBY-5420 | Regression suite appears locale sensitive: failed in TableLockBasicTest: bug in RealBasicNoPutResultSetStatistics |
DERBY-5406 | Intermittent failures in CompressTableTest and TruncateTableTest |
DERBY-5383 | Add articles and blog links to the site's Resources tab |
DERBY-5382 | Convert existing harness recovery tests to JUnit tests |
DERBY-5379 | testDERBY5120NumRowsInSydependsForTrigger - The number of values assigned is not the same as the number of specified or implied columns. |
DERBY-5378 | Update Derby web site copyright notice (2011) |
DERBY-5374 | converted ij5Test fails with weme6.2 (CDC/Foundation): junit.framework.ComparisonFailure: Output at line 1 expected:<CONNECTION0* - jdbc:derby:wombat> but was:<ERROR XJ004: Database '' not found.> |
DERBY-5370 | The toSQL method of the org.apache.derby.vti.Restriction class does not output correct constants for VARCHAR, Timestamp, Date, Time, or CHAR FOR BIT DATA types |
DERBY-5368 | Convert tools/ij2.sql to junit |
DERBY-5363 | Tighten permissions of DB files to owner with >= JDK7 |
DERBY-5357 | SQLJ.INSTALL_JAR shouldn't use identifier as file name |
DERBY-5355 | Remove *.out from svn:eol-style paragraph in docs environment instructions |
DERBY-5349 | Clean docs build fails to pick up customized map2htmtoc.xsl |
DERBY-5346 | ij3Test fails on phoneME |
DERBY-5345 | URLCheck fails on phoneME |
DERBY-5343 | Starting 7/13/2011 weme 6.2 upgrade tests started failing with 213 failures 127 errors with java.lang.IllegalAccessException |
DERBY-5342 | make ScriptTestCase support "ij.showNoCountForSelect" and "ij.showNoConnectionsAtStart" |
DERBY-5332 | Convert tools/ij3.sql to junit |
DERBY-5327 | Convert tools/ij5.sql to junit |
DERBY-5326 | Convert tools/ij6.sql to junit |
DERBY-5316 | Unload old JDBC drivers when done with them in the upgrade tests |
DERBY-5311 | Convert tools/ij4.sql to junit |
DERBY-5310 | PropertySetter prints warning when building with JDK 7 |
DERBY-5308 | Investigate if largeData/LobLimits.java can be run for client |
DERBY-5306 | Remove dead methods (June 2011) |
DERBY-5305 | Convert store/updatelocks.sql to JUnit |
DERBY-5303 | Convert tools/URLCheck.sql to junit |
DERBY-5302 | Convert tools/ij(?).sql to junit |
DERBY-5301 | Convert store/TableLockBasic.sql to junit |
DERBY-5300 | Change derby.tests.trace to print the class as well as fixture name |
DERBY-5293 | Replace bubble sort in DataDictionaryImpl and CreateTriggerNode with Collections.sort() |
DERBY-5286 | Update tools/ide/netbeans directory |
DERBY-5283 | Crash / process termination during SYSCS_DISABLE_LOG_ARCHIVE_MODE can leave service.properties broken |
DERBY-5282 | Convert store/RowLockBasic.sql to junit |
DERBY-5277 | Intermittent OutOfMemoryErrors in BasicSetup.testTriggersWithLOBcolumns() |
DERBY-5275 | Remove empty, unused methods in client/am/Lob.java |
DERBY-5269 | Remove unused methods getSocketAndInputOutputStreams and checkAlternateServerHasEqualOrHigherProductLevel in NetConnection |
DERBY-5267 | Shut down engine for old versions in upgrade tests to save memory |
DERBY-5260 | Remove unused "replace" argument to backup variant of StorageFactoryService#saveServiceProperties |
DERBY-5256 | Improve error reporting in common.sanity.AssertFailure |
DERBY-5246 | Simplify bytecode generation for concatenation operator |
DERBY-5229 | Testing README; tstjardir |
DERBY-5227 | Put a link to developers' wiki page |
DERBY-5224 | (patch) reduce cohesion by removing overzealous casting |
DERBY-5210 | Use java.nio.ByteBuffer in client.net.Request |
DERBY-5202 | Add colnum attribute to the colspecs generated by MessageBuilder in order to eliminate some severe warnings while building the pdf version of the Derby user guides. |
DERBY-5200 | (patch) embellish build.xml to automatically install junit.jar in the correct directory if it doesn't exist. |
DERBY-5189 | PropertySetter should ignore GCJ installations |
DERBY-5163 | (patch) fix up sql cleanup handling |
DERBY-5156 | convert store/longColumn.sql into junit test case |
DERBY-5155 | Make testcases pass in non-English locale |
DERBY-5145 | Provide option to limit compatibility test to combinations that include trunk |
DERBY-5127 | Convert madhare.sql to JUnit |
DERBY-5096 | DisconnectException: "Connection was refused because the database DB was not found" when creating db for first time |
DERBY-5090 | Retrieving BLOB fields sometimes fails |
DERBY-5083 | Document automatic update and creation of index cardinality statistics (istat) |
DERBY-5080 | Utilize JQL to fetch JIRA issue list for release notes generation |
DERBY-5077 | (patch) remove non productive instanceof checks |
DERBY-5068 | Investigate increased CPU usage on client after introduction of UTF-8 CcsidManager |
DERBY-5010 | (patch) bad equivalence check |
DERBY-4962 | Create a table function which efficiently migrates data out of foreign databases and which can be used for ongoing data integration |
DERBY-4795 | Starting network server with -ssl turns SSL off |
DERBY-4533 | Delete old releases from http://archive.apache.org/dist |
DERBY-4532 | Old download pages should refer to archive.apache.org only |
DERBY-4521 | Stream passed out to user does not heed close, allowing reads after next ResultSet#getXXX |
DERBY-4466 | Download page does not have link to KEYS file |
DERBY-4321 | test nstest generates errors XBM06 re reencryption and 22003 re value outside range for decimal/numeric |
DERBY-4291 | Intermittent failure in 'store/updatelocks.sql' on Windows Vista |
DERBY-4280 | Property not documented - derby.language.statementCacheSize |
DERBY-4249 | Create a simple store recovery test in JUnit |
DERBY-4201 | SecureServerTest AssertionFailedError: Timed out waiting for network server to start |
DERBY-4115 | Provide a way to drop statistics information |
DERBY-4089 | It should be possible to run unit tests right after "ant all" |
DERBY-3913 | mismatch between error XCL30 and 22003.S.4 and parameters in usage |
DERBY-3823 | NullPointerException in stress.multi test |
DERBY-3808 | Convert subquery.sql to junit |
DERBY-3790 | Investigate if request for update statistics can be skipped for certain kind of indexes, one instance may be unique indexes based on one column. |
DERBY-3740 | BlobClob4BlobTest.testLockingWithLongRowBlob fails with .AssertionFailedError: FAIL - statement should timeout |
DERBY-3146 | Adjust length restriction on user identifiers (authorization ids) to same as other identifiers |
DERBY-2720 | remove dead code associated with unsupported National Char implementation |
DERBY-2687 | store/encryptDatabase.sql fails intermittently with ClassNotFoundException, Log Corrupted |
DERBY-2402 | client ResultSetMetaData for select * after alter table does not return added columns |
DERBY-2066 | DisconnectException: The DDM object 0x1232 is not supported following shutdown of embedded engine while network server is running |
DERBY-2031 | Convert derbynet/testProtocol.java to JUnit |
DERBY-1913 | storetests/st_reclaim_longcol.java fails intermittently |
DERBY-1888 | Convert LOB tests to Junit |
DERBY-1482 | Update triggers on tables with blob columns stream blobs into memory even when the blobs are not referenced/accessed. |
DERBY-1256 | Remove usage of non-portable methods in derby code |
DERBY-1016 | javax.transaction.xa.forget (Xid) raises XAER_NOTA exception instead of XA_PROTO on a prepared transaction |
DERBY-866 | Derby User Management Enhancements |
DERBY-129 | Derby should throw a truncation error or warning when CASTing a parameter/constant to char or char for bit datatypes and the data is too large for the datatype. |
Issues
Compared with the previous release (10.8.2.2), Derby release 10.9.1.0 introduces the following new features and incompatibilities. These merit your special attention.
Note for DERBY-5749
Summary of Change
Truncation as part of implicit or explicit cast is now reported, either as exception or warning.
Symptoms Seen by Applications Affected by Change
In previous releases, implicit and explict casts from a character or binary string data type to a shorter data type would silently truncate the value if the receiving data type was not wide enough to hold the original value.
SQL now does correct checking of the length of character and binary strings, and will throw an exception in these two cases:
- Arguments to stored procedures and functions
- Values assigned to generated columns
Previously, if the actual value was longer than the datatype of the argument or column to which it was assigned, Derby would silently truncate the value and ignore the truncation. The SQL standard requires a truncation exception be thrown.
Derby now throws an SQLException with SQL state 22001 in these cases:
- Stored method calls that used to work, now throw SQLException with SQL state 22001.
- INSERT or UPDATE of tables with generated columns that used to work, now throw SQLException with SQL state 22001.
For other cases of explicit or implicit casts of string data types where the value is truncated, Derby now generates a DataTruncation warning (sub-class of SQLWarning) with SQL state 01004. The warning can be retrieved by calling getWarnings() on the ResultSet instance for SQL statements that return a ResultSet, or on the Statement instance for SQL statements that do not return a ResultSet.
Incompatibilities with Previous Release
Applications that use too long string values as arguments for stored methods, or use tables with generated columns for which the generated value is longer than the type of the generated column, may now see exceptions.
Applications that use implicit or explicit casts that truncate the value to make it fit in the receiving data type, may see warnings reported on the ResultSet or Statement.
Rationale for Change
The previous behavior could lead to inadvertent data loss, since the truncation was ignored. The previous behavior was not as per the SQL standard.
Application Changes Required
Applications should ensure that string values used as arguments to stored methods are within the range of the argument type.
Applications should ensure that string values assigned to generated columns are within the range of the argument type.
Example:
CREATE TABLE t_5749 (c VARCHAR(5) GENERATED ALWAYS
AS ('--' || b), b VARCHAR(5))
INSERT INTO t_5749 VALUES (default, '12345')
The above code would work before, but silently truncate the generated value from '--12345' to '--123'. It will now throw SQLException with SQL state 22001.
If the old behavior is desired, the generation expression could be wrapped in a call to the CAST function:
CREATE TABLE t_5749 (c VARCHAR(5) GENERATED ALWAYS
AS (CAST('--' || b AS VARCHAR(5))), b VARCHAR(5))
INSERT INTO t_5749 VALUES (default, '12345')
In that case, the INSERT statement would pass with no exceptions. Instead, the Statement instance on which it was executed will hold a DataTruncation warning with SQL state 01004, which can be retrieved by calling getWarnings() on the Statement.
Example:
s.executeUpdate("create procedure p5749 (a varchar(5)) modifies sql data
external name '...' language java parameter style java")
CallableStatement cs = conn.prepareCall("call p5749(?)");
cs.setString(1, "123456");
cs.execute();
The above code would work before, but silently truncate the generated value from '123456' to '12345'. The execute will now throw SQLException with SQL state 22001.
As with the previous example, it is possible to wrap the parameter in an explicit cast and get a warning on the CallableStatement instead of an exception:
CallableStatement cs = conn.prepareCall("call p5749(cast(? as varchar(5)))");
cs.setString(1, "123456");
cs.execute();
Note for DERBY-5565
Summary of Change
Derby Network Server has been changed to reject client connections from clients that are not Derby Network Client (Those that do not send PRDID starting with DNC).
Symptoms Seen by Applications Affected by Change
Upon attempting to connect to Derby from a client other than Derby Network Client, users will get an immediate error. On the server side they should see an Invalid client and protocol message in the derby.log, e.g:
ERROR UNSUPPORTED CLIENT: Invalid client product id JCC03580, Derby Network Client (DNC) is the only supported client Product Thu May 17 09:32:32 PDT 2012 Thread(DRDAConnThread_11,5,derby.daemons) (DATABASE = mydb), (DRDAID = {2}), Execution failed because of a Distributed Protocol Error: DRDA_Proto_SYNTAXRM; CODPNT arg = 112e; Error Code Value = 14. Plaintext connection attempt from an SSL enabled client? ...On the client side users will receive a protocol error related to the SYNTAXRM required value not found error sent by the server. The error will vary by connecting product. e.g. for the DB2 Universal JDBC Driver (JCC) this might be:
Exception in thread "main" com.ibm.db2.jcc.am.jo: (jcc)(t4)(2034)(11148)(3.58.82) Execution failed due to a distribution protocol error that caused deallocation of the conversation. A DRDA Data Stream Syntax Error was detected. Reason: 0x112e. ERRORCODE=-4499, SQLSTATE=58009 at com.ibm.db2.jcc.am.ed.a(ed.java:321) at com.ibm.db2.jcc.am.ed.a(ed.java:365) ...Incompatibilities with Previous Release
Clients that are not Derby Network Client, such as the DB2 Runtime Client and DB2 Universal JDBC driver will get a protocol error on connection on the client side and and a message that they are an Invalid Client in the derby.log. For prior releases the initial connection may have succeded giving the false impression that these were supported and would work in all cases.
Rationale for Change
There are currently no known supported network clients for Derby Network Server other than Derby Network Client. IBM support for the DB2 clients was discontinued after Derby 10.1. This change will avoid user confusion about support by ensuring that connections from non-supported clients to newer versions of Derby Network Server fail immediately and give an indication of the reason in the derby.log.
Application Changes Required
Applications should be modified to use Derby Network Client or if a non-Derby client is being developed, developers should submit a patch for Derby Network Server to accept the appropriate PRDID.
Note for DERBY-5564
Summary of Change
The SQL state of the error returned from a lock timeout when the property "derby.locks.deadlockTrace=true" is set will return 40XL1 rather than 40XL2. 40XL1 is the documented SQL state for lock timeouts returned from Derby.
Symptoms Seen by Applications Affected by Change
In the previous release, applications which set "derby.locks.deadlockTrace=true" would get error 40XL2 when a lock timeout was received. This was confusing as simply setting the system to return extra diagnostic information would change the SQL state of the error returned by the system for a lock timeout.
Incompatibilities with Previous Release
Applications which explicitly tested for SQL state error 40XL2 as a lock timeout will no longer get that error. 40XL1 will now always be returned for a lock timeout error whether lock diagnostics are enabled or not.
Rationale for Change
The previous behavior was not intended. Lock timeout should generate same SQL state whether diagnostics are enabled or not. Only the text of the error will change based on the requested diagnostic level.
Application Changes Required
If the application has been explicitly coded to take action when getting error 40XL2 and does not do the same action for 40XL1, then the application should be changed. This action is usually retry logic based on a lock timeout or deadlock.
Note for DERBY-5489
Summary of Change
getBytes and getString raise an exception if another getter has been invoked on the LOB column.
Symptoms Seen by Applications Affected by Change
In the previous release, applications were able to invoke getBytes and getString after invoking another getter on the LOB column first. In some cases this caused the data to be retured to be incorrect. Derby now raises an SQLExecption with state XCL18 when the application invokes any valid getter more than once on a given LOB column.
Rationale for Change
The previous behavior was inconsistent, and caused incorrect data to be returned to the application in some cases.
Note for DERBY-5488
Summary of Change
A typo has been corrected in a column name of the DatabaseMetaData.getColumns() ResultSet.
Symptoms Seen by Applications Affected by Change
In previous versions of Derby, SCOPE_CATLOG was the name of the 19th column of the ResultSet returned by DatabaseMetaData.getColumns(). Now that column is named SCOPE_CATALOG. In addition, the ResultSet now has an extra trailing column, called SCOPE_CATLOG. The extra column duplicates the information in SCOPE_CATALOG and was added to reduce the risk of backward incompatibilities.
Incompatibilities with Previous Release
Applications will break if they expect SCOPE_CATLOG to be the name of the 19th column of that ResultSet or if they require that the ResultSet only contain 24 columns. Applications will display different columns names and longer rows if they pass this metadata on to end users.
Applications will only see these changes if they run against a Derby 10.9 engine. The version level of the engine can be retrieved by calling DatabaseMetaData.getDatabaseMajorVersion() and DatabaseMetaData.getDatabaseMinorVersion(). Applications will not see these changes if they run the Derby 10.9 network client against an older version of the Derby engine.
Rationale for Change
JDBC 4.1 has corrected a typo in the javadoc for DatabaseMetaData.getColumns(). Derby has renamed a column in order to conform to the latest version of the JDBC spec.
Application Changes Required
Applications which inspect this metadata by column position should not be affected: the contents of column 19 have not changed. Applications which inspect this metadata by column name should also not be affected. Note that the column contents are always null because the column only has meaning for databases which support both catalogs and reference types--Derby supports neither of these features.
Applications will need to be re-coded if they require that column 19 be named SCOPE_CATLOG or if they require that the ResultSet only contain 24 columns. Applications may need to be re-coded if they passthrough the metadata to end users.
Note for DERBY-5363
Summary of Change
When running on Java 7 (or higher): when creating directories and files, the Derby server now by default limits access to the operating system account which booted the server from the command line.
Symptoms Seen by Applications Affected by Change
Other operating system accounts won't be able to access directories and file created by Derby. This is true regardless of whether looser security defaults were in place via umask(1) settings on Linux/Unix and default file visibility settings on Windows NTFS when the server was started.
Incompatibilities with Previous Release
In previous releases, the Derby server created directories and files using OS level access defaults--such as those specified by umask(1) settings on Linux/Unix and default file visibility settings on Windows NTFS. Now file access is limited to the operating system account which booted the server. Other accounts cannot view these files unless this new behavior is overridden as described below.
Note that this new behavior only affects the network server when it is started from the command line with Java 7 or higher. The new behavior does not by default affect server instances instantiated inside application code via the Derby API. Also, the new behavior does not by default affect embedded databases.
Rationale for Change
This change was made in order to make server-managed databases more secure.
Application Changes Required
Users can disable this new behavior by setting the system property derby.storage.useDefaultFilePermissions to true. Again, this is not necessary of running with Java 6 or lower, with embedded derby, or when the server is started programmatically inside application code via the API.
Conversely, by setting this system property to false, users can enhance security proactively by enabling the new behavior for embedded databases and databases managed by servers which were started programmatically inside application code via the Derby API (Java 7 and higher). The reason the default differs for the different deployment topologies is basically upwards compatibility concerns.
For information on how to set Derby system properties, see the Derby property reference section in the Derby Reference Manual.
Note for DERBY-5090
Summary of Change
Streams obtained from a result set column are always implicitly closed when obtaining the value of the next column.
Symptoms Seen by Applications Affected by Change
An IOException may be raised when accessing streams obtained from a result set, whereas no exception was seen earlier.
Rationale for Change
The previous behavior was inconsistent, and, for some of the getter methods, in violation of the JDBC standard.
Application Changes Required
Read all the data in the stream before fetching the next column value.
Note for DERBY-1482
Summary of Change
DERBY-1482 improved the resources used while procecessing triggers but this will apply only to the triggers created in databases that are created in 10.9 or higher OR to all triggers created after a database has been hard upgraded to 10.9 or higher.
Symptoms Seen by Applications Affected by Change
During trigger execution the system will continue to read all the columns from the trigger table if the trigger has been created prior to a hard upgrade to 10.9. For all the other triggers (ie the ones created in databases that are created in 10.9 or higher OR all triggers created after a database has been hard upgraded to 10.9 or higher), during trigger execution the system will now only read the columns necessary for the triggering sql and the sql associated with the executing trigger.
Rationale for Change
This work was done to improve the resource utilization during trigger execution. During trigger execution, the system will now only read the columns necessary for the triggering sql and the sql associated with the executing trigger. All the other columns columns from the triggering table will not be read into memory. This improvement is especially noticeable when the triggering table has large BLOB and/or CLOB columns. This work will affect triggers created in databases that are created in 10.9 or higher. This work will also apply to all triggers created after a database has been hard upgraded to 10.9 or higher. This work will not affect any triggers in databases running in soft upgraded databases with versions lower than 10.9.
Note for DERBY-1016
Summary of Change
Derby may throw an XAException with a different error code when clients call javax.transaction.xa.XAResource.forget(Xid).
Symptoms Seen by Applications Affected by Change.
In previous releases, when clients called javax.transaction.xa.XAResource.forget(Xid) with an active transaction id, Derby raised an XAException with the XAER_NOTA error code. According to the XA+ standard, this error code is valid only for a heuristically completed transaction branch. Derby doesn't support heuristically completed transaction branches. In this situation, the correct error code is XAER_PROTO.
Incompatibilities with Previous Release
In this release, calling javax.transaction.xa.XAResource.forget(Xid) with an active transaction id causes Derby to throw an XAException whose error code is XAER_PROTO.
Rationale for Change
Derby's behavior was changed in order to conform with the XA+ Standard.
Application Changes Required
Applications which look for the XAER_NOTA error code after calling javax.transaction.xa.XAResource.forget(Xid) with an active transaction id should be re-coded to look for the XAER_PROTO error code instead.
Note for DERBY-866
Summary of Change
This release introduces a new NATIVE authentication scheme which is easier to administer than BUILTIN authentication.
Symptoms Seen by Applications Affected by Change
Applications which rely on BUILTIN authentication should upgrade to Derby 10.9 and use NATIVE authentication instead.
Incompatibilities with Previous Release
NATIVE authentication does not introduce any incompatibilities. It is simply a new feature. The Derby Developer's Guide describes NATIVE authentication in the section titled "Working with user authentication". Newly created databases can use this authentication scheme as is.
Rationale for Change
The BUILTIN authentication mechanism was originally intended just for testing purposes. Some problems mar it:
- Maintenance - By default, only the database owner can change passwords. In addition, passwords never expire. Also, the database owner can't list the known users. Applications must solve these problems themselves.
- System-wide Credentials - You can't securely store the BUILTIN credentials needed to authenticate system-wide operations like database creation, database restoration, and engine shutdown. Those credentials must either be stated on the JVM command line (where they can be snooped by tools like the Unix ps command) or stored in a human-readable derby.properties file.
- Duplicate Credentials - BUILTIN authentication lets you store multiple credentials for the same account. Two different BUILTIN user names access the same schema provided that the user names differ only by case.
These defects do not mar NATIVE authentication. NATIVE authentication is more secure and easier to administer than BUILTIN authentication.
Application Changes Required
Follow these steps to enable NATIVE authentication in an old database:
- Upgrade - Hard-upgrade the database to 10.9.
- Set message digest - Make sure that the derby.authentication.builtin.algorithm property is set in the upgraded database. NATIVE users can't be created until this property is set to a valid message digest algorithm. For information on how to set this property, please see the "Derby properties" section of the Derby Reference Manual.
- Create users - Create new users via the syscs_util.syscs_create_user() procedure. For information on how to invoke this procedure, please see the "Built-in system procedures" section of the Derby Reference Manual. The very first credentials you create must be for the database owner. Creating credentials for the database owner will turn on NATIVE authentication.
- Bounce database - Shutdown the database and bring it back up. NATIVE authentication should be enabled.
Build Environment
Derby release 10.9.1.0 was built using the following environment:
- Branch - Source code came from the 10.9 branch.
- Machine - Mac OSX 10.7.3.
- Ant - Apache Ant version 1.7.1 compiled on June 27 2008.
- JDK 1.4 - Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_22-b02-329).
- Java 6 - Java(TM) SE Runtime Environment (build 1.6.0_31-b04-414-11M3626).
- Compiler - The 1.6.0_31-b04-414-11M3626 javac was used to compile all classes.
- JSR 169 - Java ME support was built using libraries from phoneME Advanced Milestone Release 2.
Verifying Releases
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 PGP or GPG. First download the Apache Derby KEYS 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 called md5 or md5sum, which is included in many unix distributions. It is also available as part of GNU Textutils. Windows users can get binary md5 programs from here, here, or here.
We strongly recommend that you verify your downloads with both PGP and MD5.