apache > db
Apache DB Project
 
Font size:      

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-5777Update description of Maven artifact for the Derby net servlet to reflect that it is not intended for production use
DERBY-5776test failure in iepnegativetests_ES with weme 6.2 (J2ME/CDC) with trunk (10.9 alpha) as of revision 1339441
DERBY-5774Failures in UpdateStatisticsTest (order-dependent test cases)
DERBY-5771Use TestNullOutputStream where possible
DERBY-5770Reduce window of opportunity for queries being compiled without statistics on istat update
DERBY-5769Notes deprecating BUILTIN authentication need fixing
DERBY-5768Remove references to NATIVE::LOCAL from Derby error messages.
DERBY-5767Remove mentions of NATIVE::LOCAL authentication provider setting
DERBY-5763Reference Guide should note the new casing rules for the USERNAME arguments to the NATIVE procedures
DERBY-5760Missing argument in some XJ022 errors
DERBY-5759Add IndexStatsUtil.release(boolean closeConnection)
DERBY-5758System procedures in Reference Manual should be alphabetized
DERBY-5756Document new SYSCS_DROP_STATISTICS procedure
DERBY-5755Minor cleanup of DataDictionaryImpl.getRoutineList()
DERBY-5753nighly regression test failure in testLeak(org.apache.derbyTesting.functionTests.tests.memory.Derby5730Test) process failed
DERBY-5751Make TriggerTest less hungry on heap space
DERBY-5749Implicit cast of variable length values, e.g. as arguments to stored methods and generated columns values, silently truncate if too long
DERBY-5747Native user authentication: Docs do not describe what happens to schema and its SQL objects on SYSCS_UTIL.SYSCS_DROP_USER call
DERBY-5746Minor refactoring of DataDictionaryImpl.getSetAutoincrementValue
DERBY-5745Remove unused local variables from DataDictionaryImpl
DERBY-5737Remove GenericDescriptorList.elements and replace Enumerator usage with Iterator
DERBY-5736NullPointerException in GenericTriggerExecutor.executeSPS() caused by OutOfMemoryError
DERBY-5734End transaction if CleanDatabaseTestSetup.decorateSQL fails
DERBY-5733Source file for OrderByAndSortAvoidance contains characters not available in the C locale
DERBY-5732ProtocolTest doesn't clean up its test resources
DERBY-5730DataDictionaryImpl leaks references to itself via SYSFUN_AD
DERBY-5729Replication tests keep references to connections after completion
DERBY-5727Update POMs to deploy Maven artifacts to repository.apache.org and use ASF parent POM
DERBY-5726Make it more difficult to forget calling super.tearDown() from BaseJDBCTestCase's subclasses
DERBY-5725ErrorStreamTest doesn't call super.tearDown()
DERBY-5724EncryptionKeyTest sometimes keeps reference to connection
DERBY-5723LongColumnTest doesn't call super.tearDown()
DERBY-5722InternationalConnectTest forgets to call super.tearDown()
DERBY-5721ParameterMappingTest lacks call to super.tearDown()
DERBY-5720UngroupedAggregatesNegativeTest doesn't call super.tearDown()
DERBY-5719UniqueConstraintMultiThreadedTest doesn't call super.tearDown()
DERBY-5718UniqueConstraintSetNullTest calls super.tearDown() too early
DERBY-5717TableFunctionTest keeps reference to connection after completion
DERBY-5716TimestampArithTest keeps references to statements after completion
DERBY-5715InbetweenTest holds on to resources after completion
DERBY-5714ColumnDefaultsTest holds on to resources after completion
DERBY-5713AlterTableTest holds on to resources after completion
DERBY-5712CheckConstraintTest holds on to resources after completion
DERBY-5711NullsTest doesn't call super.tearDown()
DERBY-5710BigDataTest.tearDown() doesn't call super.tearDown()
DERBY-5709ResultSetFromPreparedStatementTest keeps references to non-default connections
DERBY-5708simpleThread test doesn't release connection
DERBY-5707Clean up statements in CharUTF8Test
DERBY-5706Clean up statements in CreateTableFromQueryTest
DERBY-5705Authorization decorators don't null out connections when done
DERBY-5704Various cleanups in CoalesceTest
DERBY-5701Make UpdatableResultSetTest less hungry on heap space
DERBY-5700Delete symlinks to the 10.0 manuals from the web site
DERBY-5699Disable automatic conversion to star imports in NetBeans project
DERBY-5698Document performance issue with 2-arg versions of setXXXStream methods for LOBs
DERBY-5697Doc changes to account for correctness fixes for sequences
DERBY-5696Documentation on LOBs needs some fixes
DERBY-5695Speed up population of tables in OrderByAndSortAvoidance
DERBY-5693BUILTIN should say passwords are hashed not encrypted
DERBY-5692intermittent test failure in storetests/st_derby715.java
DERBY-5691Document that Write Caching must be disabled to avoid possible database corruption
DERBY-5683BaseJDBCTestCase.getDatabaseProperty() should close resources before returning
DERBY-5682ProtocolTest failures: Unsupported encoding MacGreek
DERBY-5681When a foreign key constraint on a table is dropped, the associated statistics row for the conglomerate is not removed
DERBY-5680indexStat daemon processing tables over an over even when there are no changes in the tables
DERBY-5678LocalizedDisplayScriptTest fails on JVMs that don't support EUC_JP encoding
DERBY-5677ClassNotFoundException when running suites.All without derbynet.jar
DERBY-5671NsTest does not run on trunk do multiple issues stemming from concurrency improvements
DERBY-5667testReadCommitted(org.apache.derbyTesting.functionTests.tests.store.UpdateLocksTest)junit.framework.AssertionFailedError: Missing rows in ResultSet
DERBY-5664Include driver tests in jdbcapi suite
DERBY-5657Message XCY05 for NATIVE authentication is (too?) complex
DERBY-5655Preformatted text should not be used for graphic
DERBY-5653We should document that the NetServlet is a testing tool and not appropriate for production use.
DERBY-5649make improvements to nstest so it's easier to run/analyze/debug
DERBY-5648Unclear password expiry warning when using separate credentials db
DERBY-5647NATIVE warns about password expiry for DBO
DERBY-5646Get upgrade tests to pass on OJEC 1.1
DERBY-5645Reference manual says setBlob()/setClob()/getBlob()/getClob() are not supported on CallableStatement
DERBY-5644Typo in error message for NATIVE authentication
DERBY-5643Occasional hangs in replication tests on Linux
DERBY-5642OutOfMemoryError in OCRecoveryTest on phoneME
DERBY-5641Remove unused BaseDataFileFactory methods plus minor cleanups
DERBY-5640Use <desc> element for table summary
DERBY-5639Minor code cleanup for NetServlet
DERBY-5637Document Derby's JMX capabilities and how to disable them
DERBY-5636Improve the overview of Derby's security mechanisms
DERBY-5635Provide implementation for getMetaData() in VTITemplate
DERBY-5633Add tests for state transition and behavior with Lock Timeout in XA Transaction (DERBY-5552 testing task)
DERBY-5631Extend SecurityManagerSetup to add extra privileges to the set of default privileges (merge two policy files)
DERBY-5628Wrong syntax description in DELETE statement doc
DERBY-5627Remove unused methods in UUID classes
DERBY-5624System can run out of stack space while processing DropOnCommit requests.
DERBY-5623Loosen up synchronization in FileMonitor
DERBY-5620Replace illegal characters from test name when creating the failure folder
DERBY-5617Improve process handling in SpawnedProcess
DERBY-5616demo/vtis/sql/demoFileVtis.sql needs to be adjusted: messages_en.properties has moved
DERBY-5614NullPointerException with INSERT INTO (global temporary table) SELECT ... FROM (VTI)
DERBY-5612Puzzling documentation about the URL to a database on the classpath
DERBY-5609Prepare old test harness for running tests on Java 8
DERBY-5608BaseTestCase.readProcessOutput should read getInputStream() and getErrorStream() in separate threads
DERBY-5604(patch) access static constants with static references
DERBY-5603EmbedConnection.clearLOBMapping() incorrectly clears lobFiles causing a ConcurrentModificationException
DERBY-5599readlocks.sql fails with extra locks.
DERBY-5598testStartWithPrintWriter(org.apache.derbyTesting.functionTests.tests.derbynet.DerbyNetNewServerTest)junit.framework.AssertionFailedError: Num of log item should add
DERBY-5596TIMESTAMP doc gives wrong precision limitation
DERBY-5591Imprecise wording in documentation in ref man on DROP VIEW
DERBY-5590Document optional modifyThreadGroup permssion in java 2 security permissions
DERBY-5587Due to licensing issues, fix or remove the monohtml docs posted on Derby's documentation page.
DERBY-5586Remove 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-5584Select statement with subqueries with group by and count distinct statements returns wrong number of results
DERBY-5580NativeAuthenticationServiceTest getting multiple errors trying to delete files/directories during teardown
DERBY-5574encryption test in encryption nightly suite test fails with ERROR XBM0S: Unable to rename file error
DERBY-5568AssertionFailedError: Should not hold locks after commit in ResultSetMiscTest
DERBY-5567AlterTableTest#testDropColumn fails: drop view cannot be performed due to dependency
DERBY-5566CREATE SCHEMA should state that one cannot create a new schema starting with "SYS" in case normal form
DERBY-5565Network Server should reject client connections that are not Derby Network Client
DERBY-5564Code does different things depending if derby.locks.deadlockTrace=true is set
DERBY-5562An read-only XA transaction that has a timeout never has the timer canceled when the transaction is complete
DERBY-5559AssertFailures (7, or 8) with ibm 1.6 and 1.5 on Windows XP in lang.NativeAuthProcs fixture testAll
DERBY-5558NullPointerException in store.RecoveryTest launchRecoveryInsert and failure in testBasicRecovery with weme 6.2
DERBY-5557NULLIF topic in reference manual should explain NULLIF
DERBY-5552Derby threads hanging when using ClientXADataSource and a deadlock or lock timeout occurs
DERBY-5550Document derby.authentication.builtin.saltLength and derby.authentication.builtin.iterations
DERBY-5547NSSecurityMechanismTest fixture testNetworkServerSecurityMechanism fails intermittentlyt
DERBY-5542Remove checks for Java version being greater than or equal to 1.4
DERBY-5541Remove unnecessary field rwsOK in DirStorageFactory4
DERBY-5540Call initCause() and getCause() without reflection in BaseJDBCTestCase
DERBY-5539Harden password hashing in the builtin authentication service
DERBY-5536Client's ResultSet#getLong does not range check when converting from a DECIMAL column
DERBY-5535Remove unused methods from client's CrossConverters class.
DERBY-5533Client differs from embedded when rs.updateInt overflows: 22015 vs 22003
DERBY-5530SQLChar.getCollationKey NPE in index-stat-thread
DERBY-5529XATransactionTest: Table/View 'DERBY1016' already exists
DERBY-5527Documentation problem: 5 - Verifying the copy of the files
DERBY-5526on 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-5524Speed up clean-up after StatementJdbc30Test.xtestMaxOpenStatementsWithQueryTimeout
DERBY-5522Document the NATIVE authentication scheme.
DERBY-5521JDBCMBeanTest#testAttributeDriverLevel uses Java assert in lieu of JUnit assert: no real testing happens
DERBY-5519Update code in JVMInfo#derbyVMLevel to give correct results for Java 7 and provisionally for 8.
DERBY-5517testReplication_Local_3_p1_StateNegativeTests failed with connection refused
DERBY-5516Document the fact that attributes on the connection URL trump attributes specified in a connection Properties object.
DERBY-5515Derby mailing lists should be mentioned in documentation
DERBY-5514SecureServerTest (and others) don't play nice with EMMA: AccessControlException
DERBY-5512emma-single and emma-all don't use the instrumented jars
DERBY-5509javadoc for NetServlet and NetworkServerControl are missing a few closing tags
DERBY-5508Improve backup/restore documentation visibility and content to encourage proper backups and restore procedures
DERBY-5507Orderly shutdown fails if you are using BUILTIN authentication and turn on derby.database.propertiesOnly
DERBY-5506Document that EXISTS subquery can now select more then one column
DERBY-5505BLOB and CLOB Reference Manual topics could use some fixes
DERBY-5504SecureServerTest, Driver40UnbootedTest and replication tests not prepared for space in java.home
DERBY-5502RestrictiveFilePermissionsTest and RecoveryTest fail with file permission errors on the OpenJDK 7 preview for Mac OS X
DERBY-5501Subquery 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-5499Document the new JDBC limit/offset escape syntax
DERBY-5498ClosedByInterruptException in AuthenticationTest
DERBY-5496The JUnit infrastructure package should be compiled against the small device classpath, not the JDK 1.4 classpath
DERBY-5495Master issue to track fixes to sequence generators
DERBY-5494Same value returned by successive calls to a sequence generator flanking an unorderly shutdown.
DERBY-5492Restrictive 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-5490Lots 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-5489getBinary() returns incorrect data after getObject() call on BLOB column
DERBY-5488Add remaining JDBC 4.1 bits which did not appear in the Java 7 javadoc.
DERBY-5485Simplify PropertySetter so that it is less brittle and easier to maintain.
DERBY-5482Reduce number of jar invocations in the buildjars target
DERBY-5480File handle leak in MessageVetter
DERBY-5479Don't run MessageVetter unless messages have changed
DERBY-5478Speed up creation of bin scripts
DERBY-5477Switch from scpexe to scp for Maven deployment
DERBY-5476Remove unused parameter in splitmessages
DERBY-5474Speed up message splitting in build
DERBY-5472Speed up MemoryLeakFixesTest.testRepeatedDatabaseCreationWithAutoStats()
DERBY-5469Make it possible to build Derby if you are on Mac OS X and your JDK is JDK 7
DERBY-5467Copyright notice in the API documentation (generated by the Javadoc tool) is outdated
DERBY-5465Broken null checks in NsTest
DERBY-5464Add easier to find links to Derby JavaDoc on the Derby web site
DERBY-5459Result set metadata are out of sync on client after underlying table is altered
DERBY-5458Add ant target to generate JavaDocs bundle
DERBY-5456Problems running SecureServerTest and replication tests on Open JDK 7 for Mac OS X
DERBY-5454ERROR 40001 deadlock in nstest on select max(serialkey)
DERBY-5453Remove unused methods in Cursor and NetCursor
DERBY-544910.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-5442Create documentation for restrictive file permissions feature
DERBY-5440test failure in testBTreeForwardScan_fetchRows_resumeAfterWait_nonUnique_split(org.apache.derbyTesting.functionTests.tests.store.IndexSplitDeadlockTest)junit.framework.AssertionFailedError: expected:<1> but was:<0>
DERBY-5439Remove JRE / JDBC line from sysinfo
DERBY-5437Load all toursdb tables in one invocation of ij
DERBY-5436Use helper method to add warning in EmbedResultSet.movePosition()
DERBY-5434On linux with IBM JDK 1.7 suites.All does not run at all failing with java.lang.reflect.InvocationTargetException
DERBY-5427Unauthorized shutdown should not generate thread dump and javacore. AuthenticationTest dumps over 20 javacores with IBM JVM for normal user errors
DERBY-5420Regression suite appears locale sensitive: failed in TableLockBasicTest: bug in RealBasicNoPutResultSetStatistics
DERBY-5406Intermittent failures in CompressTableTest and TruncateTableTest
DERBY-5383Add articles and blog links to the site's Resources tab
DERBY-5382Convert existing harness recovery tests to JUnit tests
DERBY-5379testDERBY5120NumRowsInSydependsForTrigger - The number of values assigned is not the same as the number of specified or implied columns.
DERBY-5378Update Derby web site copyright notice (2011)
DERBY-5374converted 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-5370The 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-5368Convert tools/ij2.sql to junit
DERBY-5363Tighten permissions of DB files to owner with >= JDK7
DERBY-5357SQLJ.INSTALL_JAR shouldn't use identifier as file name
DERBY-5355Remove *.out from svn:eol-style paragraph in docs environment instructions
DERBY-5349Clean docs build fails to pick up customized map2htmtoc.xsl
DERBY-5346ij3Test fails on phoneME
DERBY-5345URLCheck fails on phoneME
DERBY-5343Starting 7/13/2011 weme 6.2 upgrade tests started failing with 213 failures 127 errors with java.lang.IllegalAccessException
DERBY-5342make ScriptTestCase support "ij.showNoCountForSelect" and "ij.showNoConnectionsAtStart"
DERBY-5332Convert tools/ij3.sql to junit
DERBY-5327Convert tools/ij5.sql to junit
DERBY-5326Convert tools/ij6.sql to junit
DERBY-5316Unload old JDBC drivers when done with them in the upgrade tests
DERBY-5311Convert tools/ij4.sql to junit
DERBY-5310PropertySetter prints warning when building with JDK 7
DERBY-5308Investigate if largeData/LobLimits.java can be run for client
DERBY-5306Remove dead methods (June 2011)
DERBY-5305Convert store/updatelocks.sql to JUnit
DERBY-5303Convert tools/URLCheck.sql to junit
DERBY-5302Convert tools/ij(?).sql to junit
DERBY-5301Convert store/TableLockBasic.sql to junit
DERBY-5300Change derby.tests.trace to print the class as well as fixture name
DERBY-5293Replace bubble sort in DataDictionaryImpl and CreateTriggerNode with Collections.sort()
DERBY-5286Update tools/ide/netbeans directory
DERBY-5283Crash / process termination during SYSCS_DISABLE_LOG_ARCHIVE_MODE can leave service.properties broken
DERBY-5282Convert store/RowLockBasic.sql to junit
DERBY-5277Intermittent OutOfMemoryErrors in BasicSetup.testTriggersWithLOBcolumns()
DERBY-5275Remove empty, unused methods in client/am/Lob.java
DERBY-5269Remove unused methods getSocketAndInputOutputStreams and checkAlternateServerHasEqualOrHigherProductLevel in NetConnection
DERBY-5267Shut down engine for old versions in upgrade tests to save memory
DERBY-5260Remove unused "replace" argument to backup variant of StorageFactoryService#saveServiceProperties
DERBY-5256Improve error reporting in common.sanity.AssertFailure
DERBY-5246Simplify bytecode generation for concatenation operator
DERBY-5229Testing README; tstjardir
DERBY-5227Put a link to developers' wiki page
DERBY-5224(patch) reduce cohesion by removing overzealous casting
DERBY-5210Use java.nio.ByteBuffer in client.net.Request
DERBY-5202Add 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-5189PropertySetter should ignore GCJ installations
DERBY-5163(patch) fix up sql cleanup handling
DERBY-5156convert store/longColumn.sql into junit test case
DERBY-5155Make testcases pass in non-English locale
DERBY-5145Provide option to limit compatibility test to combinations that include trunk
DERBY-5127Convert madhare.sql to JUnit
DERBY-5096DisconnectException: "Connection was refused because the database DB was not found" when creating db for first time
DERBY-5090Retrieving BLOB fields sometimes fails
DERBY-5083Document automatic update and creation of index cardinality statistics (istat)
DERBY-5080Utilize JQL to fetch JIRA issue list for release notes generation
DERBY-5077(patch) remove non productive instanceof checks
DERBY-5068Investigate increased CPU usage on client after introduction of UTF-8 CcsidManager
DERBY-5010(patch) bad equivalence check
DERBY-4962Create a table function which efficiently migrates data out of foreign databases and which can be used for ongoing data integration
DERBY-4795Starting network server with -ssl turns SSL off
DERBY-4533Delete old releases from http://archive.apache.org/dist
DERBY-4532Old download pages should refer to archive.apache.org only
DERBY-4521Stream passed out to user does not heed close, allowing reads after next ResultSet#getXXX
DERBY-4466Download page does not have link to KEYS file
DERBY-4321test nstest generates errors XBM06 re reencryption and 22003 re value outside range for decimal/numeric
DERBY-4291Intermittent failure in 'store/updatelocks.sql' on Windows Vista
DERBY-4280Property not documented - derby.language.statementCacheSize
DERBY-4249Create a simple store recovery test in JUnit
DERBY-4201SecureServerTest AssertionFailedError: Timed out waiting for network server to start
DERBY-4115Provide a way to drop statistics information
DERBY-4089It should be possible to run unit tests right after "ant all"
DERBY-3913mismatch between error XCL30 and 22003.S.4 and parameters in usage
DERBY-3823NullPointerException in stress.multi test
DERBY-3808Convert subquery.sql to junit
DERBY-3790Investigate if request for update statistics can be skipped for certain kind of indexes, one instance may be unique indexes based on one column.
DERBY-3740BlobClob4BlobTest.testLockingWithLongRowBlob fails with .AssertionFailedError: FAIL - statement should timeout
DERBY-3146Adjust length restriction on user identifiers (authorization ids) to same as other identifiers
DERBY-2720remove dead code associated with unsupported National Char implementation
DERBY-2687store/encryptDatabase.sql fails intermittently with ClassNotFoundException, Log Corrupted
DERBY-2402client ResultSetMetaData for select * after alter table does not return added columns
DERBY-2066DisconnectException: The DDM object 0x1232 is not supported following shutdown of embedded engine while network server is running
DERBY-2031Convert derbynet/testProtocol.java to JUnit
DERBY-1913storetests/st_reclaim_longcol.java fails intermittently
DERBY-1888Convert LOB tests to Junit
DERBY-1482Update triggers on tables with blob columns stream blobs into memory even when the blobs are not referenced/accessed.
DERBY-1256Remove usage of non-portable methods in derby code
DERBY-1016javax.transaction.xa.forget (Xid) raises XAER_NOTA exception instead of XA_PROTO on a prepared transaction
DERBY-866Derby User Management Enhancements
DERBY-129Derby 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.