Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
TCADB(3)			 Tokyo Cabinet			      TCADB(3)

NAME
       tcadb - the abstract database API

DESCRIPTION
       Abstract	 database  is  a set of	interfaces to use on-memory hash data-
       base,  on-memory	 tree  database,  hash	database,  B+  tree  database,
       fixed-length database, and table	database with the same API.

       To  use	the  abstract database API, include `tcutil.h',	`tcadb.h', and
       related standard	header files.  Usually,	write the  following  descrip-
       tion near the front of a	source file.

	      #include <tcutil.h>
	      #include <tcadb.h>
	      #include <stdlib.h>
	      #include <stdbool.h>
	      #include <stdint.h>

       Objects	whose  type  is	pointer	to `TCADB' are used to handle abstract
       databases.  An abstract database	object is created  with	 the  function
       `tcadbnew'  and is deleted with the function `tcadbdel'.	 To avoid mem-
       ory leak, it is important to delete every object	when it	is  no	longer
       in use.

       Before operations to store or retrieve records, it is necessary to con-
       nect  the  abstract  database object to the concrete one.  The function
       `tcadbopen' is used to open a concrete database and the function	`tcad-
       bclose' is used to close	the database.  To avoid	data missing  or  cor-
       ruption,	it is important	to close every database	instance when it is no
       longer  in  use.	  It  is  forbidden for	multible database objects in a
       process to open the same	database at the	same time.

API
       The function `tcadbnew' is used in order	to create an abstract database
       object.

	      TCADB *tcadbnew(void);
		     The return	value is the new abstract database object.

       The function `tcadbdel' is used in order	to delete an abstract database
       object.

	      void tcadbdel(TCADB *adb);
		     `adb' specifies the abstract database object.

       The function `tcadbopen'	is used	in order to open an abstract database.

	      bool tcadbopen(TCADB *adb, const char *name);
		     `adb' specifies the abstract database object.
		     `name' specifies the name of the database.	 If it is "*",
		     the database will be an on-memory hash database.	If  it
		     is	 "+", the database will	be an on-memory	tree database.
		     If	its suffix is ".tch", the  database  will  be  a  hash
		     database.	 If its	suffix is ".tcb", the database will be
		     a B+ tree database.  If its suffix	is ".tcf",  the	 data-
		     base  will	 be a fixed-length database.  If its suffix is
		     ".tct", the database will be a  table  database.	Other-
		     wise,  this  function fails.  Tuning parameters can trail
		     the name, separated by "#".  Each parameter  is  composed
		     of	 the  name and the value, separated by "=".  On-memory
		     hash database supports "bnum",  "capnum",	and  "capsiz".
		     On-memory	tree  database supports	"capnum" and "capsiz".
		     Hash database supports "mode",  "bnum",  "apow",  "fpow",
		     "opts", "rcnum", "xmsiz", and "dfunit".  B+ tree database
		     supports	"mode",	  "lmemb",  "nmemb",  "bnum",  "apow",
		     "fpow", "opts", "lcnum", "ncnum", "xmsiz",	and  "dfunit".
		     Fixed-length database supports "mode", "width", and "lim-
		     siz".   Table  database  supports "mode", "bnum", "apow",
		     "fpow", "opts", "rcnum", "lcnum", "ncnum",	"xmsiz", "dfu-
		     nit", and "idx".
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.
		     The tuning	parameter "capnum" specifies the capacity num-
		     ber  of records.  "capsiz"	specifies the capacity size of
		     using memory.  Records spilled the	capacity  are  removed
		     by	 the storing order.  "mode" can	contain	"w" of writer,
		     "r" of reader, "c"	of creating, "t" of truncating,	"e" of
		     no	locking, and "f" of non-blocking  lock.	  The  default
		     mode  is  relevant	 to  "wc".  "opts" can contains	"l" of
		     large option, "d" of Deflate option, "b" of BZIP2 option,
		     and "t" of	TCBS option.  "idx" specifies the column  name
		     of	 an index and its type separated by ":".  For example,
		     "casket.tch#bnum=1000000#opts=ld" means that the name  of
		     the  database file	is "casket.tch", and the bucket	number
		     is	1000000, and the options are large and Deflate.

       The function `tcadbclose' is used in order to close an  abstract	 data-
       base object.

	      bool tcadbclose(TCADB *adb);
		     `adb' specifies the abstract database object.
		     If	 successful,  the  return  value  is true, else, it is
		     false.
		     Update of a database is assured to	be  written  when  the
		     database  is  closed.   If	 a writer opens	a database but
		     does not close it appropriately,  the  database  will  be
		     broken.

       The  function `tcadbput'	is used	in order to store a record into	an ab-
       stract database object.

	      bool tcadbput(TCADB *adb,	const void *kbuf, int ksiz, const void
	      *vbuf, int vsiz);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     `vbuf' specifies the pointer to the region	of the value.
		     `vsiz' specifies the size of the region of	the value.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.
		     If	 a record with the same	key exists in the database, it
		     is	overwritten.

       The function `tcadbput2'	is used	in order to store a string record into
       an abstract object.

	      bool tcadbput2(TCADB *adb, const char *kstr, const char *vstr);
		     `adb' specifies the abstract database object.
		     `kstr' specifies the string of the	key.
		     `vstr' specifies the string of the	value.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.
		     If	 a record with the same	key exists in the database, it
		     is	overwritten.

       The function `tcadbputkeep' is used in order to store a new record into
       an abstract database object.

	      bool tcadbputkeep(TCADB *adb, const void *kbuf, int ksiz,	 const
	      void *vbuf, int vsiz);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     `vbuf' specifies the pointer to the region	of the value.
		     `vsiz' specifies the size of the region of	the value.
		     If	 successful,  the  return  value  is true, else, it is
		     false.
		     If	a record with the same key  exists  in	the  database,
		     this function has no effect.

       The  function  `tcadbputkeep2'  is  used	in order to store a new	string
       record into an abstract database	object.

	      bool tcadbputkeep2(TCADB *adb,  const  char  *kstr,  const  char
	      *vstr);
		     `adb' specifies the abstract database object.
		     `kstr' specifies the string of the	key.
		     `vstr' specifies the string of the	value.
		     If	 successful,  the  return  value  is true, else, it is
		     false.
		     If	a record with the same key  exists  in	the  database,
		     this function has no effect.

       The  function  `tcadbputcat' is used in order to	concatenate a value at
       the end of the existing record in an abstract database object.

	      bool tcadbputcat(TCADB *adb, const void *kbuf, int  ksiz,	 const
	      void *vbuf, int vsiz);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     `vbuf' specifies the pointer to the region	of the value.
		     `vsiz' specifies the size of the region of	the value.
		     If	 successful,  the  return  value  is true, else, it is
		     false.
		     If	there is no corresponding record, a new	record is cre-
		     ated.

       The function `tcadbputcat2' is used in order to	concatenate  a	string
       value at	the end	of the existing	record in an abstract database object.

	      bool  tcadbputcat2(TCADB	*adb,  const  char  *kstr,  const char
	      *vstr);
		     `adb' specifies the abstract database object.
		     `kstr' specifies the string of the	key.
		     `vstr' specifies the string of the	value.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.
		     If	there is no corresponding record, a new	record is cre-
		     ated.

       The  function  `tcadbout' is used in order to remove a record of	an ab-
       stract database object.

	      bool tcadbout(TCADB *adb,	const void *kbuf, int ksiz);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.

       The  function `tcadbout2' is used in order to remove a string record of
       an abstract database object.

	      bool tcadbout2(TCADB *adb, const char *kstr);
		     `adb' specifies the abstract database object.
		     `kstr' specifies the string of the	key.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.

       The function `tcadbget' is used in order	to retrieve a record in	an ab-
       stract database object.

	      void *tcadbget(TCADB *adb, const void *kbuf, int ksiz, int *sp);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     `sp' specifies the	pointer	to the variable	into which the
		     size of the region	of the return value is assigned.
		     If	successful, the	return value is	the pointer to the re-
		     gion of the value of the corresponding record.  `NULL' is
		     returned if no record corresponds.
		     Because an	additional zero	code is	appended at the	end of
		     the  region  of the return	value, the return value	can be
		     treated as	a character string.  Because the region	of the
		     return value is allocated	with  the  `malloc'  call,  it
		     should  be	 released  with	 the `free' call when it is no
		     longer in use.

       The function `tcadbget2'	is used	in order to retrieve a	string	record
       in an abstract database object.

	      char *tcadbget2(TCADB *adb, const	char *kstr);
		     `adb' specifies the abstract database object.
		     `kstr' specifies the string of the	key.
		     If	 successful,  the  return  value  is the string	of the
		     value of the corresponding	record.	 `NULL'	is returned if
		     no	record corresponds.
		     Because the region	of the return value is allocated  with
		     the  `malloc' call, it should be released with the	`free'
		     call when it is no	longer in use.

       The function `tcadbvsiz'	is used	in order to get	the size of the	 value
       of a record in an abstract database object.

	      int tcadbvsiz(TCADB *adb,	const void *kbuf, int ksiz);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     If	 successful, the return	value is the size of the value
		     of	the corresponding record, else,	it is -1.

       The function `tcadbvsiz2' is used in order to get the size of the value
       of a string record in an	abstract database object.

	      int tcadbvsiz2(TCADB *adb, const char *kstr);
		     `adb' specifies the abstract database object.
		     `kstr' specifies the string of the	key.
		     If	successful, the	return value is	the size of the	 value
		     of	the corresponding record, else,	it is -1.

       The  function `tcadbiterinit' is	used in	order to initialize the	itera-
       tor of an abstract database object.

	      bool tcadbiterinit(TCADB *adb);
		     `adb' specifies the abstract database object.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.
		     The  iterator is used in order to access the key of every
		     record stored in a	database.

       The function `tcadbiternext' is used in order to	get the	 next  key  of
       the iterator of an abstract database object.

	      void *tcadbiternext(TCADB	*adb, int *sp);
		     `adb' specifies the abstract database object.
		     `sp' specifies the	pointer	to the variable	into which the
		     size of the region	of the return value is assigned.
		     If	successful, the	return value is	the pointer to the re-
		     gion  of the next key, else, it is	`NULL'.	 `NULL'	is re-
		     turned when no record is to be get	out of the iterator.
		     Because an	additional zero	code is	appended at the	end of
		     the region	of the return value, the return	value  can  be
		     treated as	a character string.  Because the region	of the
		     return  value  is	allocated  with	 the `malloc' call, it
		     should be released	with the `free'	call  when  it	is  no
		     longer  in	use.  It is possible to	access every record by
		     iteration of calling this function.  It is	allowed	to up-
		     date or remove records whose keys are fetched  while  the
		     iteration.	  However,  it	is not assured if updating the
		     database is occurred while	the iteration.	 Besides,  the
		     order of this traversal access method is arbitrary, so it
		     is	 not assured that the order of storing matches the one
		     of	the traversal access.

       The function `tcadbiternext2' is	used in	order  to  get	the  next  key
       string of the iterator of an abstract database object.

	      char *tcadbiternext2(TCADB *adb);
		     `adb' specifies the abstract database object.
		     If	successful, the	return value is	the string of the next
		     key,  else,  it  is  `NULL'.   `NULL' is returned when no
		     record is to be get out of	the iterator.
		     Because the region	of the return value is allocated  with
		     the  `malloc' call, it should be released with the	`free'
		     call when it is no	longer in use.	It is possible to  ac-
		     cess  every record	by iteration of	calling	this function.
		     However, it is not	assured	if updating  the  database  is
		     occurred while the	iteration.  Besides, the order of this
		     traversal	access	method	is arbitrary, so it is not as-
		     sured that	the order of storing matches the  one  of  the
		     traversal access.

       The  function  `tcadbfwmkeys'  is used in order to get forward matching
       keys in an abstract database object.

	      TCLIST *tcadbfwmkeys(TCADB *adb, const void *pbuf, int psiz, int
	      max);
		     `adb' specifies the abstract database object.
		     `pbuf' specifies the pointer to the region	of the prefix.
		     `psiz' specifies the size of the region of	the prefix.
		     `max' specifies the maximum number	of keys	to be fetched.
		     If	it is negative,	no limit is specified.
		     The return	value is a list	object	of  the	 corresponding
		     keys.   This  function  does  never  fail.	 It returns an
		     empty list	even if	no key corresponds.
		     Because the object	of the return value  is	 created  with
		     the  function  `tclistnew', it should be deleted with the
		     function `tclistdel' when it is no	longer in  use.	  Note
		     that  this	function may be	very slow because every	key in
		     the database is scanned.

       The function `tcadbfwmkeys2' is used in order to	get  forward  matching
       string keys in an abstract database object.

	      TCLIST *tcadbfwmkeys2(TCADB *adb,	const char *pstr, int max);
		     `adb' specifies the abstract database object.
		     `pstr' specifies the string of the	prefix.
		     `max' specifies the maximum number	of keys	to be fetched.
		     If	it is negative,	no limit is specified.
		     The  return  value	 is a list object of the corresponding
		     keys.  This function does	never  fail.   It  returns  an
		     empty list	even if	no key corresponds.
		     Because  the  object  of the return value is created with
		     the function `tclistnew', it should be deleted  with  the
		     function  `tclistdel'  when it is no longer in use.  Note
		     that this function	may be very slow because every key  in
		     the database is scanned.

       The  function  `tcadbaddint'  is	 used  in order	to add an integer to a
       record in an abstract database object.

	      int tcadbaddint(TCADB *adb, const	 void  *kbuf,  int  ksiz,  int
	      num);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     `num' specifies the additional value.
		     If	 successful,  the return value is the summation	value,
		     else, it is `INT_MIN'.
		     If	the corresponding record exists, the value is  treated
		     as	an integer and is added	to.  If	no record corresponds,
		     a new record of the additional value is stored.

       The  function `tcadbadddouble' is used in order to add a	real number to
       a record	in an abstract database	object.

	      double tcadbadddouble(TCADB *adb,	const void  *kbuf,  int	 ksiz,
	      double num);
		     `adb' specifies the abstract database object.
		     `kbuf' specifies the pointer to the region	of the key.
		     `ksiz' specifies the size of the region of	the key.
		     `num' specifies the additional value.
		     If	 successful,  the return value is the summation	value,
		     else, it is Not-a-Number.
		     If	the corresponding record exists, the value is  treated
		     as	 a  real  number and is	added to.  If no record	corre-
		     sponds, a new record of the additional value is stored.

       The function `tcadbsync'	is used	in order to synchronize	 updated  con-
       tents of	an abstract database object with the file and the device.

	      bool tcadbsync(TCADB *adb);
		     `adb' specifies the abstract database object.
		     If	 successful,  the  return  value  is true, else, it is
		     false.

       The function `tcadboptimize' is used in order to	optimize  the  storage
       of an abstract database object.

	      bool tcadboptimize(TCADB *adb, const char	*params);
		     `adb' specifies the abstract database object.
		     `params'  specifies  the string of	the tuning parameters,
		     which works as with the tuning of parameters the function
		     `tcadbopen'.  If it is `NULL', it is not used.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.
		     This  function  is	useful to reduce the size of the data-
		     base storage with data fragmentation by successive	updat-
		     ing.

       The function `tcadbvanish' is used in order to remove all records of an
       abstract	database object.

	      bool tcadbvanish(TCADB *adb);
		     `adb' specifies the abstract database object.
		     If	successful, the	return value  is  true,	 else,	it  is
		     false.

       The  function `tcadbcopy' is used in order to copy the database file of
       an abstract database object.

	      bool tcadbcopy(TCADB *adb, const char *path);
		     `adb' specifies the abstract database object.
		     `path' specifies the path of the destination file.	 If it
		     begins with `@', the trailing substring is	executed as  a
		     command line.
		     If	 successful,  the  return  value  is true, else, it is
		     false.  False is returned if the executed command returns
		     non-zero code.
		     The database file is assured to be	kept synchronized  and
		     not  modified while the copying or	executing operation is
		     in	progress.  So, this function is	 useful	 to  create  a
		     backup file of the	database file.

       The function `tcadbtranbegin' is	used in	order to begin the transaction
       of an abstract database object.

	      bool tcadbtranbegin(TCADB	*adb);
		     `adb' specifies the abstract database object.
		     If	 successful,  the  return  value  is true, else, it is
		     false.
		     The database is locked by the thread while	 the  transac-
		     tion so that only one transaction can be activated	with a
		     database object at	the same time.	Thus, the serializable
		     isolation level is	assumed	if every database operation is
		     performed	in  the	 transaction.  All updated regions are
		     kept track	of by write ahead logging while	 the  transac-
		     tion.   If	the database is	closed during transaction, the
		     transaction is aborted implicitly.

       The function `tcadbtrancommit' is used in order to commit the  transac-
       tion of an abstract database object.

	      bool tcadbtrancommit(TCADB *adb);
		     `adb' specifies the abstract database object.
		     If	 successful,  the  return  value  is true, else, it is
		     false.
		     Update in the transaction is fixed	when it	 is  committed
		     successfully.

       The function `tcadbtranabort' is	used in	order to abort the transaction
       of an abstract database object.

	      bool tcadbtranabort(TCADB	*adb);
		     `adb' specifies the abstract database object.
		     If	 successful,  the  return  value  is true, else, it is
		     false.
		     Update  in	 the  transaction  is  discarded  when	it  is
		     aborted.	The state of the database is rollbacked	to be-
		     fore transaction.

       The function `tcadbpath'	is used	in order to get	the file  path	of  an
       abstract	database object.

	      const char *tcadbpath(TCADB *adb);
		     `adb' specifies the abstract database object.
		     The  return  value	 is  the  path of the database file or
		     `NULL' if the object does not connect  to	any  database.
		     "*"  stands  for on-memory	hash database.	"+" stands for
		     on-memory tree database.

       The function `tcadbrnum'	is used	in order to get	the number of  records
       of an abstract database object.

	      uint64_t tcadbrnum(TCADB *adb);
		     `adb' specifies the abstract database object.
		     The return	value is the number of records or 0 if the ob-
		     ject does not connect to any database instance.

       The  function `tcadbsize' is used in order to get the size of the data-
       base of an abstract database object.

	      uint64_t tcadbsize(TCADB *adb);
		     `adb' specifies the abstract database object.
		     The return	value is the size of the database or 0 if  the
		     object does not connect to	any database instance.

       The  function `tcadbmisc' is used in order to call a versatile function
       for miscellaneous operations of an abstract database object.

	      TCLIST *tcadbmisc(TCADB *adb, const  char	 *name,	 const	TCLIST
	      *args);
		     `adb' specifies the abstract database object.
		     `name' specifies the name of the function.	 All databases
		     support   "put",	"out",	"get",	"putlist",  "outlist",
		     "getlist",	and "getpart".	"put" is to  store  a  record.
		     It	receives a key and a value, and	returns	an empty list.
		     "out"  is to remove a record.  It receives	a key, and re-
		     turns an empty list.  "get" is to retrieve	a record.   It
		     receives  a key, and returns a list of the	values.	 "put-
		     list" is to store records.	 It receives keys  and	values
		     one  after	 the  other, and returns an empty list.	 "out-
		     list" is to remove	records.  It receives  keys,  and  re-
		     turns  an	empty list.  "getlist" is to retrieve records.
		     It	receives keys, and returns keys	and values  of	corre-
		     sponding  records	one  after the other.  "getpart" is to
		     retrieve the partial value	of a record.   It  receives  a
		     key,  the offset of the region, and the length of the re-
		     gion.
		     `args' specifies a	list object containing arguments.
		     If	successful, the	return value is	a list object  of  the
		     result.  `NULL' is	returned on failure.
		     Because  the  object  of the return value is created with
		     the function `tclistnew', it should be deleted  with  the
		     function `tclistdel' when it is no	longer in use.

SEE ALSO
       tcatest(1), tcamttest(1), tcamgr(1), tokyocabinet(3)

Man Page			  2012-08-18			      TCADB(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=tcadb&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help