= Berkeley DB 5.1 Changelog =

== Changes between 11.2.5.1.25 and 11.2.5.1.29 ==

Fixed a bug which caused an AccessViolationException when populating a 
database with a compare delegate specified secondary database. [#18935]

Fixed a memory leak in the SQL API that happens when removing an in-memory 
or temporary database. [#19058]

Exclusive transactions will now block new transctions and will prevent 
existing transactions from making forward progress. [#19256]

Fixed a bug that would cause an assert error when opening an in-memory hash 
database with thread count configured when compiled with 
--enable-diagnostic. [#19357]

Fixed a bug that could cause a hang when deleting a table if there are 
multiple connections to a database from different processes. [#19419]

Fixed a bug in the SQL API when using a blob field with a lot of content and 
multiple concurrent connections to the database. [#19945]

Fixed a bug to correctly handle the DB_BUFFER_SMALL case on a delete operation 
when compression is enabled. [#19660]

Fixed the pragma "txn_priority" so it sets the priority of all SQL transactions 
in a session. [#19684]

Fixed a bug that could cause a crash in replication groups of more than 10 
sites, with multiple processes sharing each DB environment 
concurrently. [#19818]

Modified db_hotbackup to not read from the file system as required on 
non-UNIX systems.  Also provided the db_copy function for this 
purpose. [#19863]

Fixed a bug that could cause records in a queue extent to be missing 
if multiple threads raced to allocate a new page. [#20219]

Fixed a bug in the SQL API that could cause a corrupted environment to 
fail to run recovery automatically. [#20767]

== Changes between 11.2.5.1.19 and 11.2.5.1.25 ==

Fixed a leak of log file ids when a database is closed before the end of a transaction that references it. [#15957]

Fixed a bug in page allocation where if a non-transactional update was being done, then we release the metadata page lock too early possibly leading to the corruption of the in-memory page list used by DB->compact. [#19036]

A log write failure on a replication master will now cause a panic since the transaction may be committed on some clients. [#19054]

Removed the possibility that checkpoints will overlap in the log, decreasing the time to recover. [#19062]

Fixed several bugs that could cause an update running with MVCC to get the wrong version of a page or improperly update the metadata last page number. [#19063]

The database open code will no longer log the open and close of the master database in a file when opening a sub database in that file [#19071]

Fixed a bug where an error during an update to a hash database with DB_NOOVERWRITE set could return DB_KEYEXIST rather than the correct error. [#19077]

Fixed a bug where an updater supporting DB_READ_UNCOMMITED might downgrade its lock too soon if there was an error during the update. [#19155]

Fixed a bug that could cause the wrong page number to be on a root or metadata page if DB->compact moved the page and the operation was later rolled forward. [#19167]

Fixed a bug that could cause the close of a secondary index database to fail if the transaction doing the open aborted. [#19169]

Changed SQL API library build on *nix to link with libpthreads when necessary. [#19098]

Fixed a JDBC error where building would fail on Solaris without the flag "-D_HAVE_SQLITE_CONFIG_H". [#19189]

Fixed some bugs in log_verify when there are in-memory database logs and subdb logs. [#19157]

Fixed a bug that would return DB_NOTFOUND while searching for an existing item using
a cursor on a non-sorted duplicate btree database. [#19210]

Fixed a JDBC bug that the configure can not deal with CPPFLAGS. [#19234]

Fixed a bug in the SQL API that would cause a constraint violation when updating the primary key with the same value. [#18976]

Fixed a bug in the SQL BDBSQL_FILE_PER_TABLE option, to allow absolute path names. [#19190]

== Changes between 11.2.5.0 and 11.2.5.1.19 ==

=== Database or Log File On-Disk Format Changes === 

The database file format was unchanged in 11gR2 library version 11.2.5.1.

The log file format was unchanged in 11gR2 library version 11.2.5.1.

=== New Features ===

Added Performance event monitoring support for DTrace and SystemTap which can 
be enabled during configuration. Static probes have been defined where 
statistics values are updated, where mutex or transactional consistency lock 
waits occur, and where some other potentially lengthy operations may be 
initiated. [#15605]

Added a new acknowledge policy - DB_REPMGR_ACKS_ALL_AVAILABLE. [#16762]

Added transactional bulk loading optimization for non-nested 
transactions. [#17669]

Added exclusive transaction support for the SQL API. [#17822]

Added support for bulk update and delete in C# API. [#18011]

Added a db_replicate utility. [#18326]

Added an implementation of the Online Backup API. [#18500]

Added support in Berkeley DB SQL for the vacuum and incremental 
vacuum pragmas [#18545]

Added an option to automatically convert SQLite databases to Berkeley DB 
on opening. [#18531]

Added BDBSQL_SHARE_PRIVATE, an option to enable inter-process sharing of 
DB_PRIVATE environments using multiple-reader. [#18533]

Added database-level locking to optimize single-threaded operations and remove 
locking limitations for database load operations. [#18549]

Added support for DB_INIT_REP, DB_PRIVATE, DB_REGISTER and 
DB_THREAD in DB_CONFIG file.[#18555][#18901]

Added support for the BDBSQL_DEFAULT_PAGE_SIZE pragma to override 
Berkeley DB's choice of page size depending on the filesystem.  
Use SQLITE_DEFAULT_PAGE_SIZE rather than a hard-coded default. [#18577]

Added an extension that allows access to binary files stored outside 
of the database.  What is stored in the database is a pointer to the binary 
file. [#18635]

Added .stat command to dbsql shell to print environment, table, and index 
statistics. [#18640]

Added enhancements to reduce the size of indexes in the SQL API by allowing 
duplicates in the index database and moving the rowid from the index key 
into the index data. [#18653]

Added a compile time flag BDBSQL_FILE_PER_TABLE that causes each table to be
created in a separate file.  This flag replaces the BDBSQL_SPLIT_META_TABLE 
flag. [#18664]

Added the handling of read only and read write open of the same database in 
BDB SQL [#18672]

Added an encryption implementation to the SQL API [#18683]

=== Database Environment Changes ===

Fixed failchk behavior on QNX. [#17403]

Fixed a bug that prevented the same process from connecting to the database 
after recovery is performed.   [#18535]

Fixed a bug which would occur when recovery checkpoint was not written because 
the cache ran out of space attempting to flush the memory pool cache. The 
environment would be recovered and all database where made available, but 
some databases would incorrectly closed. This would cause a subsequent 
recovery to fail on its backward pass with the error 
"PANIC: No such file or directory". [#18590]

Fixed a bug that could cause recovery to fail with the error
"DB_LOGC->get: log record LSN %u/%u: checksum mismatch" if the last log file
was nearly full and ended with a partially written log record which was smaller
than a checkpoint record. It now erases the invalid partial record before
switching to the new log file. [#18651]

=== Access Method Changes ===

Fixed a bug such that segementation fault does not occur if 
DB->set_partition_dirs is called before DB->set_partition. [#18591]

Fixed a bug such that the error "unknown path" does not  occur if you put 
duplicate records into a duplicated sorted HASH database with 
DB_OVERWRITE_DUP option. [#18607]

Added the ability to specify that data should not be logged when removing
pages from a database.  This can be used if the ability to recover the data
is not required after the database has been removed. [#18666]

Fixed a bug that caused an aborting transaction to fail if it aborted 
while a DB->compact of the same HASH database was compacting the dynamic 
hash table [#18695]


Fixed a bug that could cause DB->compact to loop on a DB_RECNO database or
a database with an multilevel unsorted off page duplicate tree. [#18722]

Fixed a bug that could cause an illegal page type error when using a HASH 
database with MVCC and the HASH table was contracted and then 
extended. [#18785]

Fixed locking bugs: [#18789]
* The Db->compact method of BTREE with MVCC would return an unpinned page.
* The RECNO option would fail to lock the next page when splitting a leaf page.

Fixed a bug that could cause data to not be returned in a HASH database that
was one of multiple databases in a file and was opened prior to running
DB->compact method on that database in another thread of control [#18824]

Fixed a bug where doing a bulk insert with secondaries could return an 
error incorrectly. [#18878]

Fixed a bug that would return DB_NOTFOUND instead of DB_BUFFER_SMALL when the
first item in a HASH database is larger than the user supplied buffer. [#18829]

Fixed a bug that would cause handle locks to be left referencing the wrong
metadata page if DB->compact moved the metadata page of a sub-database. [#18944]

Fixed a bug that could cause records in a queue extent to be missing if multiple
threads raced to allocate a new page. [#20219]

=== API Changes ===

Fixed various items uncovered by extending DB_CONFIG support: [#18720] 
* Added missing set_cache_max method, and fixed name of log_set_config 
(was set_log_config).  
* Added new DB_ENV->repmgr_get_local_site method. 
* Fixed a bug which could fail to allocate enough mutexes when specifying a 
maximum cache size.
* Fixed a bug that could allocate multiple caches when a small cache size 
was specified.

Fixed a leak when aborting a transaction containing a DB->close. [#18951]

Fixed a bug that would leave a cursor referencing the wrong hash bucket 
when the hash table was expanded or contracted.  This would cause the new 
hash bucket not to be locked on subsequent reference but would not cause 
problems because the metadata page would be locked to the end of the 
transaction due to the reorganization.  [#18986]

Fixed a bug that could leave a buffer pinned if a DB->compact operation on
HASH had a I/O or deadlock error. [#18980]

Fixed a bug that failed to dirty a page when DB->compact moved records within a hash bucket [#18994]

Fixed a bug that might cause an update to a HASH database to fail with an 
"unpinned page returned" error if it first gets an I/O error while 
logging. [#18985]

Fixed a bug that could leave a hash bucket overflow page not linked to the 
bucket if the unlink of that page aborted. [#19001]

Fixed a bug that would leave the next page pointer of a hash bucket that 
was removed pointing to an invalid page [#19004]

=== SQL-Specific API Changes ===

Exclusive transactions will now block new transctions and will prevent existing transactions from making forward progress. [#19256]

Allowed SQL applications to attach to the same database multiple times unless
shared cache mode is explicitly requested. [#18340]

Fixed a bug where auto-removal of log files after writing a checkpoint was
not functioning correctly.  [#18413]

Fixed a race between opening and closing SQL databases from multiple threads
that could lead to the error "DB_REGISTER limits processes to one open DB_ENV
handle per environment". [#18538] 

Optimized the SQL adapter for joins. Reduce the number of Berkeley DB 
operations in a join by caching the maximum key in the primary. [#18566]

A SQLITE_LOCKED or SQLITE_BUSY error returned by a statement in an explict 
transaction will no longer invalidate the entire transaction, but just the 
statement that returned the error. [#18582]

Changed how multiple connections to the same database are detected. Used a
fileid so that different paths can be used without error. [#18646]

Fixed a bug where the journal (environment) directory was being created prior 
to the actual environment. [#18656]

Added a new PRAGMA to allow tuning of when checkpoints are run. [#18657]

Fixed spurious "column <x> not unique" error messages.[#18667]

Fixed a segmentation fault that could happen when memory could not be 
allocated for the index key in the SQL API.[#18783]

Fixed a bug causing a segfault when releasing a savepoint that was already 
released. [#18784]

=== Tcl-Specific API Changes ===

Changed to link tcl8.5 by default on Windows[#18244]

=== Java-Specific API Changes ===

Fixed a bug where getAllowPopulate and getImmutableSecondaryKey method  always 
returned false for SecondaryConfig objects returned by 
SecondaryDatabase.getSecondaryConfig method.  [#16018]

Fixed a bug which made it impossible to (re)set
VerboseConfig.REPLICATION_SYSTEM on the Java API. [#17561] 

Fixed a bug where populating a SecondaryDatabase on open could lead to 
an OutOfMemoryException. [#18529]

Fixed a bug such that segementation fault does not occur when putting records 
into callback-partitioned database. [#18596]

Fixed a bug where DatabaseConfig.getUnsortedDuplicates method returned true 
when the datbase had been configured for sorted duplicates.  [#18612]

Initialized DatabaseConfig.pageSize so that it can be queried. [#18691]

Fixed a bug by opening a write cursor for Direct Persistent Layer(DPL) 
entity's put operation in the Concurrent Data Store product. [#18692]

Synchronized Java persistence code and tests from Java Edition to 
Berkeley DB. [#18711]

Introduced the EnvironmentConfig.setReplicationInMemory method as a way to
configure in-memory internal replication files before opening the Environment
handle on the Java API. [#18719]

Fixed a bug in the bulk DatabaseEntry class, where it was possible to
overflow the buffer. [#18850]

Added LEASE_TIMEOUT field to the ReplicationTimeoutType class
that enables configuring the amount of time a client grants its 
Master Lease to a master. [#18867]
	
=== C#-Specific API Changes ===

Fixed a bug in BTree prefix comparison method such that there is no problem 
when the application needs to save a number larger than or equal to
2^31.  The BTree prefix comparison function now returns an unsigned
int instead of a signed int. [#18481]

Fixed a bug which caused the HasMultiple method to throw an
exception when there were multiple databases in a single database file.
[#18483]

Fixed a bug to ensure the CachePriority is set for Database and Cursor 
objects.  [#18716]
	
Fixed a bug that use leading to the error:
"Transaction that opened the DB handle is still active"
when applications used different transactional handles in the 
associate and open methods in a secondary database. [#18873]  

Fixed a bug which caused AccessViolationException when populating db with
a compare delegate specified secondary db. [#18935]

=== Direct Persistence Layer (DPL), Bindings and Collections API ===

All setter methods in the DPL |StoreConfig| and |EvolveConfig| now
return |this| rather than having a |void| return type. This change
requires that applications using the DPL be recompiled. [#17021]

Improve performance of |StoredCollection.removeAll|. This method
no longer iterates over all records in the stored collection. [#17727]

Several new tuple formats and binding classes have been added in
the |com.sleepycat.bind.tuple| package. See the |com.sleepycat.bind.tuple| 
package description for an
overview of the new bindings and a comparative description of all
tuple bindings. The new tuple formats are: [#18379]
* Packed integer formats have been added that support default
natural sorting. These are intended to replace the old
unsorted packed integer formats.
* Two new |BigDecimal| formats have been added. One format
supports default natural sorting. The other format is
unsorted, but has other advantages: trailing zeros after the
decimal place are preserved, and a more compact, faster
serialization format is used.

The following classes are now certified to be serializable. [#18738]
* com.sleepycat.persist.IndexNotAvailableException
* com.sleepycat.persist.StoreExistsException
* com.sleepycat.persist.StoreNotFoundException
* com.sleepycat.persist.evolve.DeletedClassException
* com.sleepycat.persist.evolve.IncompatibleClassException


=== Replication Changes ===

Replication Manager now uses the standard system implementation of
getaddrinfo() when running on Windows, which means that it can support
IPv6 addresses if support is present and configured in the operating
system.  [#18263]
	
Fixed a bug which caused a "full election" to fail if a majority of
sites were not ready when the election started. [#18456]

Fixed a bug which could occur when using bulk transfer with Replication
Manager.  When closing a DB_ENV handle, any remaining bulk buffer
contents are flushed, and Replication Manager could have tried to send
the resulting messages even though its connections had already been
closed, leading in rare circumstances to spurious EBADF error reports,
or possibly even arbitrary memory corruption.  [#18469]

Fixed a bug which caused Replication Manager to wait for
acknowledgement from client, even if it had failed to send a log
record, due to "queue limit exceeded".  Replication Manager now
returns immediately, with a PERM_FAILED indication, to avoid
a pointless delay to the commit() operation.  [#18682]

Fixed a bug where changes made in one process to Replication
Manager configuration values (such as ack policy or ack timeout) were
not observed in other processes sharing the same database environment.
[#18839]

Fixed bugs that could prevent client synchronization from completing
due to a failure to request missing log records. [#18849]

Fixed a bug where a client that had rolled back transactions to
synchronize with a new master, failed to invalidate existing database
handles later used for cursor operations based on an explicitly
provided transaction.  [#18862]

Fixed a bug where Replication Manager called for an election after
a DUPMASTER event, even when using Master Leases.  In such a case it
now simply accepts the new (remote) master.  [#18864]

Fixed a bug which would cause failure if client env attempted to
perform sync-up recovery to a point in the log that happened to fall
exactly on a log file boundary.  [#18907]
	

=== Locking Subsystem Changes ===

Moved the wait mutex from the lock structure to the locker structure,
reducing the number of mutexes required in the system. [#18685]


=== Memory Pool Subsystem Changes ===

Fixed a race condition that was causing the error:  "Unable to allocate space
from the buffer cache".  The error can only be triggered when
multiple memory pool regions are used and there is a periodic gathering and
clearing of statistics. This also fixes a second bug where if you
compile without statistics and explicitly set the memoru pool default 
pagesize, other environment handles to that environment would not see 
the correct memory pool default pagesize.  [#18386]

Fixed a bug where the get_cachesize method and the mpool_stat method returned
the initial cache size, even if the cache size had been changed. [#18706]

Changed memory pool allocation so that the EIO error is returned rather 
than the ENOMEM error when the memory cannot be allocated because 
dirty pages cannot be written. [#18740]

=== Mutex Subsystem Changes ===

Fixed problems with the printed statistics for DB_MUTEX_SHARED latches.
The DB_STAT_CLEAR flag (as specified by db_stat -Z) did not clear the counts
of the number of times a shared latch either had to wait to get access or was
able to get the latch without waiting. Also, the ownership state of a
test-and-set latch (not a hybrid one) was always displayed as not owned, even
when it was held. [#17585] [#18743]

=== Transaction Subsystem Changes ===

Fixed bugs that could caused PANIC or DB_RUNRECOVERY errors
when the synchronization of the transaction log failed.  [#18588]

Fix javadoc to note the exception to the rule that a transaction
handle may not be accessed after commit() operaton (getCommitToken() is
allowed). [#18730]

Removed the possibility that checkpoints will overlap in the log, decreasing the time to recover [#19062]

=== Utility Changes ===

Modified the db_printlog and db_dump -da so that they use the same formatting.  
The db_logprint utility now uses the message stream. Both db_dump -da and 
db_printlog accept a -D flag to indicate the numer of bytes of data items 
to display.  You can set this value when calling the  DB_ENV->set_data_len 
method or in the DB_CONFIG. [#18365]

Fixed a bug that caused a segmentation violation when using the 
db_printlog utility. [#18694]

Fixed a bug in db_hotbackup that would cause a trap if the -D flag is used
and the DB_CONFIG file does not specify a log directory. [#18841]

Fixed a bug that would cause verify to call the wrong compare function if
there are user defined compare functions used and the database has multilevel
off page sorted duplicate trees. [#20284]

Modified db_hotbackup to not read from the file system as required on non-UNIX
systems.  Also provided the db_copy function for this purpose. [#19863]
   
Fixed db_hotbackup so that when -d/-l or -D is not specified, DB_CONFIG is used
to determine the locations of the databases and logs in the source environment.
[#19994]

=== Configuration, Documentation, Sample Apps, Portability, and Build Changes ===

Added support and documentation for iPhone OS. [#18223]

Fix a bug to make the configuration option --enable-debug work when CFLAGS 
is set. [#18432]

Updated Visual Studio project files to enable ADO.NET support. [#18448]

Enhanced the source tree layout making it easier to navigate. [#18492]

Fixed the --enable-dbm argument to configure. [#18497]

Fixed Visual Studio project files so that they can load into Visual 
Studio 2010. [#18505] 

Updated Windows CE build files to be 	consistent with desktop Windows 
build files. Added Windows Mobile 6.5.3 Professional as a target 
platform. [#18516]

Added a fix so that an error message is displayed when the 'ar'
utility is missing when configured. [#18619]

Added tighter integration of JDBC on POSIX/autoconf by including
an argument --enable-jdbc to configure. [#18621]

Fix build conflicts in log verify with other configurations. [#18658]

Upgraded Berkeley DB SQL to SQLite version 3.7.0 [#18857]


=== Example Changes ===

Renamed examples/c/bench_001 to examples/c/ex_bulk.  [#18537]


=== Miscellaneous Bug Fixes ===

Provided a functionality on the Windows platform to choose a default
page size based on the underlying file system sector size. [#16538]

Changed DB_NOSYNC from an "operation" constant to a flag value. [#17775]

Changed the default permissions for files in the release tree to allow write 
access. [#17974]

Fixed a bug which caused database verification to hang when verifying a 
database in a Concurrent Data Store  environment that performs locking on an 
environment-wide basis (DB_CDB_ALLDB.)  [#18571]

Fixed temporary file naming with negative process IDs (e.g., VxWorks). [#18975]

=== Deprecated Features ===

[#18871] Removed the mod_db4 PHP/Apache wrapper. It only supported Apache 1.3
and has not been actively supported. Use php_db4 instead.

== Known Bugs ==

Hybrid shared latches have a race condition which can consume cpu
unnecessarily. The bug is triggered when a thread requests exclusive access
to a shared latch while it is locked for reading by other threads.  If you 
run into this situation, contact us for a patch. [#18982]

When doing a C# API,  64 bit build, some of the data in the lock statistical 
field may appear incorrect.  This is a data display issue.  If you run into 
this situation, contact us for a patch.  [#20769]
