Man Linux: Main Page and Category List

NAME

       tcadb - the abstract database API

DESCRIPTION

       Abstract  database  is  a  set  of  interfaces  to  use  on-memory hash
       database, 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
       description 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
       memory 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
       connect the abstract database object to the concrete one.  The function
       ‘tcadbopen’  is  used  to  open  a  concrete  database and the function
       ‘tcadbclose’ is used to close the database.  To avoid data  missing  or
       corruption, 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
                     database will be a fixed-length database.  If its  suffix
                     is  ".tct",  the  database  will  be  a  table  database.
                     Otherwise, 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 "limsiz".  Table database  supports  "mode",
                     "bnum",   "apow",   "fpow",   "opts",  "rcnum",  "lcnum",
                     "ncnum", "xmsiz", "dfunit", and "idx".
                     If successful, the return value  is  true,  else,  it  is
                     false.
                     The  tuning  parameter  "capnum"  specifies  the capacity
                     number 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
       database 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
       abstract 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
                     created.

       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
                     created.

       The function ‘tcadbout’ is used in order  to  remove  a  record  of  an
       abstract 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
       abstract 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
                     region 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
       iterator 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
                     region  of  the  next key, else, it is ‘NULL’.  ‘NULL’ is
                     returned 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
                     update 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
                     access   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 assured 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
                     corresponds, a new record  of  the  additional  value  is
                     stored.

       The  function  ‘tcadbsync’  is  used  in  order  to synchronize updated
       contents 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
                     database storage with data  fragmentation  by  successive
                     updating.

       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
                     transaction 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  transaction.   If  the  database  is  closed  during
                     transaction, the transaction is aborted implicitly.

       The  function  ‘tcadbtrancommit’  is  used  in  order  to  commit   the
       transaction 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
                     before 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
                     object does not connect to any database instance.

       The  function  ‘tcadbsize’  is  used  in  order  to get the size of the
       database 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
                     returns an empty list.  "get" is to  retrieve  a  record.
                     It  receives  a  key,  and  returns a list of the values.
                     "putlist" is to store  records.   It  receives  keys  and
                     values  one  after  the other, and returns an empty list.
                     "outlist" is to remove records.  It  receives  keys,  and
                     returns an empty list.  "getlist" is to retrieve records.
                     It  receives  keys,  and  returns  keys  and  values   of
                     corresponding  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
                     region.
                     ‘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)