6.06 - fix typo in perl version in the META files.
6.05 - clean up, removing old files that were confusing tests.
6.04 - allow call to lock for already locked things
       remove typo from perl version
6.03 - remove  'bin/record_store_convert~' from the build.
5.04 - cleanup and increase code coverage.
5.03 - changed the open_store interface to either take a single
       directory or take options, which now include :
         MODE - SINGLE || MULTI - determines if flocking should be done
                                  on the index file

         RECOD_STORE_PATH - the directory to store this record store.

5.02 - change how/when the lockfile is made so that ro stores can be opened.

5.01 - oops, actually record the update time that has a place waiting
       for it in the index. Added a last_upated($id) method to the 
       store and testing to boot.

5.00 - major number increases indicate either a change in the API
       or a change that requires an upgrade of an older version
       database.
       
       enforcing the calling convention Data::RecordStore->open_store
       meaning that Data::RecordStore::open_store wont work
  
       Adding locking for the index file.

       Removed deprecated methods.

       Adding locks methods in general

       Adding last modified timestamp to index.

       Now have a standard way to do database upgrades, for this
       and for Data::ObjectStore. Hopefully this surprises people
       the least.
         3 directories : source, destination, working
         
       Added Data::RecordStore->detect_version function.

4.06 - updating tests for windows. Windows tests seem to be
       failing because chmod is having no effect.

4.05 - allow silos to be opened read only

4.04 - update the convert program to call a module rather than have the logic
       just in the program.

4.03 - fix too agressive db format upgrading.

4.02 - Setup upgrade test in temporary directory rather than test directory. (duh)

4.01 - Update the test to use error codes rather than error
       message text. Different langauge and locales make
       comparing error text fail, but the codes will work.

4 -
 This is a major version update that will require that
 bin/record_store_convert is run for existing record stores.
 Sorry about that.


 TUNING
  The minimum silo size for records ( but _not_ the record index ) is
  4096 - 5 which is also the block size minus the stored id at the
  beginning of the record and the \0 at the end of it.
  This is to align the record stores with
  disc blocks so that the reading and writing is faster.

  removed the utf 8 int stored for each record. The utf-8 encoding
  should be handled by things that call the record store.

 TRANSACTIONS
  open_transaction is now 'start_transaction', though open_transaction
  still has an alias to start_transaction.

  Transactions are now attached to the store instance and remember
  that multiple store instances can use the store at once.

   when in transaction, values that were updated since the beginning
    of the transaction are used, rather than the values stored in
    the store.
   aliased 'create_transaction' to 'begin_transaction' and deprecated
    create_transaction
   added 'commit_transaction' and 'rollback_transaction' methods to
    the store itself

 BUGFIXES
  fixed bug where deleted space was not being reclaimed.

  fixed bug in Data::RecordStore::has_id where it
    could return false for large ids when items were
    recycled.
       
3.21 - removed bad exe files from Makefile.PL, checked Makefile.PL in
    
3.20 - updated minimum perl version to 5.20 
    
3.19 - added options to allow for filemode and group to be set for files created

3.18 - removed flocking, didn't work with windows
       added options to open_store. Just using 'group' for now.
       removed changelog (appended it to the end of this document)
          so there aren't multiples with the same thing

3.17 - fix Makefile.PL issue with junk files included
       add flock locking for datastore writes
       use binmode in hopes of getting windows tests to work

3.16 - removed silly ~ files

3.15 - removed obsolete dependency

3.14 - 

3.13 - fix broken transactions.
    
3.11 - remove backticks from tests. include version info
    
3.10 - automatically uuencode data coming into the store that has \0 in the middle
    
3.00 - Big update
	introduces transactions
	fixed record stores are not called Silos
	silos now have a max file size and span multiple files
	updates to tests

2.02 - updated version. removed old build dependencies.
      appogies, but changing open to open_store to not use
      a reserved word.
1.04 - added version, changelog, readme to manifest
1.03 - added version, changelog, readme
1.02 - updated the min perl version needed
1.01 - removed unneeded use statement
1.0 - basic API laid out

---- old changelog ----
3.15 - fix transaction error where the order was improperly sorted. Added tests for this.
	 no more pie.

3.14 - pie

3.13 - fix broken transactions
	
3.11 - remove backticks from tests, include version info

3.10 - Automatically uuencode incoming data that has a \0 in it.
	the \0 character is otherwise assumed to be end of record.
	renamed, updated the record_store_convert program.
	
3.00 - Big update
	introduces transactions
	fixed record stores are not called Silos
	silos now have a max file size and span multiple files
	updates to tests
	
 2.02 - rename methods 'open' to 'open_store' or 'open_fixed_store'
	in order to avoid collision with the 'open' reserved function. 
	
 2.00 - the databases for Data::RecordStore now automatically
	hold e^n bytes, where n is the id of the database.

	When items are moved from a database, the file is
	automatically vaccuumed. The last id is moved to
	this location and the file truncated.

	Removed recycling. We are using long ids and if those
	are not enough, the implementer can implement some sort
	of recycling.

1.09 - added Data::RecordStore::has_id method
	
1.08 - added JSON requirement for tests
	
1.07 - updated test to include unicode characters
	
1.06 - added version to Make.PL

1.05 - added version to Build.PL. changed name from DB::DataStore to Data::RecordStore
	
1.04 - added license, version and changelog files to manifest

1.03 - added use warnings, the license file and the changelog file.
	
1.02 - updated the min perl version needed

1.01 - removed unneeded use statement

1.0 - basic API laid out

	use DB::DataStore;
	
	$store = DB::DataStore->open( directory );
	my $id = $store->stow( textOrBinData );
	my $val = $store->fetch( $id );
	$id2 = $store->next_id;
	$store->stow( moreData, $id2 );
	
	$store->recycle( $id );
	my $new_id = $store->next_id; # $new_id == $id

	------------------------------------------

	use DB::DataStore; #provides DB::DataStore::FixedStore
	
	my $perlPackTemplate = "LII";
	my $store1 = DB::DataStore::FixedStore->open( $perlPackTemplate, $filename );


	my $size = 33; #must be given when the template does not have a determinate size
	my $store2 = DB::DataStore::FixedStore->open( "A*", $filename2, $size );

	my $recycle_store = DB::DataStore::FixedRecycleStore->open( "L", $filename3 );

	$store1->put_record( 1, [ 2342342432432, 12, 324 ] );
	my( $long, $int1, $int2 ) = @{ $store1->get_record( 1 ) };

	print $store->entry_count; # prints '1'
	
	my $removed_last = $store->pop;

	print $store->entry_count; # prints '0'	

	$store1->put_record( 1, [ 453242,2,12 ] );
	
	my $newid = $store->push( $data_to_put_at_end ); #newid == 2

	my $min_entry_count = 12;
	if( $store->entry_count < $min_entry_count ) {
	   $store->ensure_entry_count( $min );
	   # store now has 2 filled and 10 empty entries
	}

	$store->empty;
	$store->entry_count == 0;

	$store->unlink_store; #file removed

	$recycle_store->put_record( 1, [ 12 ] );
	$recycle_store->put_record( 2, [ 88 ] );
	$recycle_store->put_record( 3  [ 99 ] );
	
	my $next_id = $recycle_store->next_id; # $next_id == 4

	$recycle_store->recycle( 2 );

	my $new_next_id = $recycle_store->next_id # $new_next_id == 2
