## Database Commands

The database commands provide a fairly straightforward mapping to the DB method functions.

> berkdb open

[-btcompare proc]
  Sets the Btree comparison function to the Tcl procedure named proc using the DB->set_bt_compare method.
[-btree|-hash|-recno|-queue|-unknown]
  Select the database type:
  DB_BTREE, DB_HASH, DB_RECNO, DB_QUEUE or DB_UNKNOWN.
[-cachesize {gbytes bytes ncaches}]
  Sets the size of the database cache to the size specified by gbytes and bytes, broken up into ncaches number of caches using the DB->set_cachesize method.
[-create]
  Selects the DB_CREATE flag to create underlying files.
[-delim delim]
  Sets the delimiting byte for variable length records to delim using the DB->set_re_delim method.
[-dup]
  Selects the DB_DUP flag to permit duplicates in the database.
[-dupcompare proc]
  Sets the duplicate data comparison function to the Tcl procedure named proc using the DB->set_dup_compare method.
[-dupsort]
  Selects the DB_DUPSORT flag to support sorted duplicates.
[-env env]
  The database environment.
[-errfile filename]
  Specifies the error file to use for this environment to filename by calling DB->set_errfile. If the file already exists then we will append to the end of the file.
[-excl]
  Selects the DB_EXCL flag to exclusively create underlying files.
[-extent size]
  Sets the size of a Queue database extent to the given size using the DB->set_q_extentsize method.
[-ffactor density]
  Sets the hash table key density to the given density using the DB->set_h_ffactor method.
[-hashproc proc]
  Sets a user-defined hash function to the Tcl procedure named proc using the DB->set_h_hash method.
[-len len]
  Sets the length of fixed-length records to len using the DB->set_re_len method.
[-lorder order]
  Sets the byte order for integers stored in the database meta-data to the given order using the DB->set_lorder method.
[-minkey minkey]
  Sets the minimum number of keys per Btree page to minkey using the DB->set_bt_minkey method.
[-mode mode]
  Specifies the mode for created files.
[-nelem size]
  Sets the hash table size estimate to the given size using the DB->set_h_nelem method.
[-nommap]
  Selects the DB_NOMMAP flag to forbid mmaping of files.
[-pad pad]
  Sets the pad character used for fixed length records to pad using the DB->set_re_pad method.
[-pagesize pagesize]
  Sets the size of the database page to pagesize using the DB->set_pagesize method.
[-rdonly]
  Selects the DB_RDONLY flag for opening in read-only mode.
[-recnum]
  Selects the DB_RECNUM flag to support record numbers in Btrees.
[-renumber]
  Selects the DB_RENUMBER flag to support mutable record numbers.
[-revsplitoff]
  Selects the DB_REVSPLITOFF flag to suppress reverse splitting of pages on deletion.
[-snapshot]
  Selects the DB_SNAPSHOT flag to support database snapshots.
[-source file]
  Sets the backing source file name to file using the DB->set_re_source method.
[-truncate]
  Selects the DB_TRUNCATE flag to truncate the database.
[--]
  Terminate the list of options and use remaining arguments as the file or subdb names (thus allowing the use of filenames beginning with a dash '-').
[filename [subdbname]]
  The names of the database and sub-database.

> berkdb upgrade [-dupsort] [-env env] [--] [filename]

This command will invoke the DB->upgrade function. If the command is given the -env option, then we will accordingly upgrade the database filename within the context of that environment. The -dupsort option selects the DB_DUPSORT flag for upgrading. The use of -- terminates the list of options, thus allowing filenames beginning with a dash.

> berkdb verify [-env env] [--] [filename]

This command will invoke the DB->verify function. If the command is given the -env option, then we will accordingly verify the database filename within the context of that environment. The use of -- terminates the list of options, thus allowing filenames beginning with a dash.

> db del

There are no undocumented options.

> db join [-nosort] db0.c0 db1.c0 ...

This command will invoke the db_join function. After it successfully joins a database, we bind it to a new Tcl command of the form dbN.cX, where X is an integer starting at 0 (e.g. db2.c0, db3.c0, etc). We use the Tcl_CreateObjCommand() to create the top level database function. It is through this cursor handle that the user can access the joined data items.

The options are:

- -nosort - This flag causes DB not to sort the cursors based on the number of data items they reference. It results in the DB_JOIN_NOSORT flag being set.

This command will invoke the db_create function. If the command is given the -env option, then we will accordingly creating the database within the context of that environment. After it successfully gets a handle to a database, we bind it to a new Tcl command of the form dbX, where X is an integer starting at 0 (e.g. db0, db1, etc).

We use the Tcl_CreateObjCommand() to create the top level database function. It is through this handle that the user can access all of the commands described in the Database Commands section. Internally, the database handle is sent as the ClientData portion of the new command set so that all future database calls access the appropriate handle.

After parsing all of the optional arguments affecting the setup of the database and making the appropriate calls to DB to manipulate those values, we open the database for the user. It translates to the DB->open method call after parsing all of the various optional arguments. We automatically set the DB_THREAD flag. The arguments are:

> db get_join [-nosort] {db key} {db key} ...

This command performs a join operation on the keys specified and returns a list of the joined {key data} pairs.

The options are:

- -nosort This flag causes DB not to sort the cursors based on the number of data items they reference. It results in the DB_JOIN_NOSORT flag being set.

> db keyrange [-txn id] key

This command returns the range for the given key. It returns a list of 3 double elements of the form {less equal greater} where less is the percentage of keys less than the given key, equal is the percentage equal to the given key and greater is the percentage greater than the given key. If the -txn option is specified it performs this operation under transaction protection.

> db put

The undocumented options are:

-nodupdata
  This flag causes DB not to insert the key/data pair if it already exists, that is, both the key and data items are already in the database. The -nodupdata flag may only be specified if the underlying database has been configured to support sorted duplicates.

> dbc put

The undocumented options are:

-nodupdata
  This flag causes DB not to insert the key/data pair if it already exists, that is, both the key and data items are already in the database. The -nodupdata flag may only be specified if the underlying database has been configured to support sorted duplicates.