HELPLIB.HLB  —  DCE  DCE_INTRO, dce_db_intro
  NAME
      dce_db_intro - Introduction to the DCE backing store interface

  DESCRIPTION

  The DCE backing store interface allows you to maintain typed data
  between program invocations. For example, you might store application-
  specific configuration data in a backing store, and then retrieve it
  from the backing store when the application restarts.  The backing
  store routines can be used in servers, in clients or in standalone
  programs that do not involve remote procedure calls (RPC). A program
  can have more than one backing store open at the same time.

  Sometimes the backing store is called a database.  For instance, the
  associated IDL file is dce/database.idl, and the name of the backing
  store routines begin with dce_db_.  The backing store is, however,
  not a full-fledged database in the conventional sense, and it has no
  support for SQL or for any other query system.

  BACKING STORE DATA

  The backing store interface provides for the tagged storage and
  retrieval of typed data. The tag (or retrieval key) can be either
  a UUID or a standard C string. For a specific backing store, the
  data type must be specified at compile time, and is established
  through the IDL Encoding Services.  Each backing store can contain
  only a single data type.

  Each data item (also called a data object or data record) consists
  of the data stored by a single call to a storage routine
  (dce_db_store(), dce_db_store_by_name(), or dce_db_store_by_uuid()).
  Optionally, data items can have headers. If a backing store has been
  created to use headers, then every data item must have a header. For
  a description of the data item header, see "Data Structures," below.

  ENCODING AND DECODING IN THE BACKING STORE

  When a Remote Procedure Call (RPC) sends data between a client and a
  server, it serializes the user's data structures by using the IDL
  Encoding Services (ES), described in the OSF DCE Application
  Development Guide.

  The backing store uses this same serialization scheme for encoding
  and decoding, informally called "pickling," when storing data
  structures to disk.  The IDL compiler, idl, writes the routine that
  encodes and decodes the data.  This routine is passed to dce_db_open(),
  remembered in the handle, and used by the store and fetch routines:

     +  dce_db_fetch()
     +  dce_db_fetch_by_name()
     +  dce_db_fetch_by_uuid()
     +  dce_db_header_fetch()
     +  dce_db_store()
     +  dce_db_store_by_name()
     +  dce_db_store_by_uuid()

  MEMORY ALLOCATION

  When fetching data, the Encoding Services (ES) allocate memory for
  the data structures that are returned.  These services accept a
  structure, and use rpc_sm_allocate() to provide additional memory
  needed to hold the data.

  The backing store library does not know what memory has been allocated,
  and therefore cannot free it.  For fetch calls that are made from a
  server stub, this is not a problem, because the memory is freed
  automatically when the server call terminates.  For fetch calls that
  are made from a non-server, the programmer is responsible for freeing
  the memory.

  Programs that call the fetch or store routines, such as dce_db_fetch(),
  outside of a server operation (for instance, if a server does some
  backing store initialization, or in a standalone program) must call
  rpc_sm_enable_allocate() first.

  THE BACKING STORE ROUTINES

  Many of the backing store routines appear in three versions: plain,
  by name, and by UUID.  The plain version will work with backing
  stores that were created to be indexed either by name, or by UUID,
  while the restricted versions accept only the matching type.  It is
  advantageous to use the restricted versions when they are appropriate,
  because they provide type checking by the compiler, as well as visual
  clarity of purpose.

  The backing store routines are as follows, listed in alphabetical order:

   dce_db_close()      Frees the handle returned by dce_db_open().
                       It closes any open files and releases all other
                       resources associated with the backing store.

   dce_db_delete()     Deletes an item from a backing store that is
                       indexed by name or by UUID.  The key's type must
                       match the flag that was used in dce_db_open().

   dce_db_delete_by_name()
                       Deletes an item only from a backing store that
                       is indexed by name.

   dce_db_delete_by_uuid()
                       Deletes an item only from a backing store that
                       is indexed by UUID.

   dce_db_fetch()      Retrieves data from a backing store that is
                       indexed by name or by UUID.  The key's type
                       must match the flag that was used in dce_db_open().

   dce_db_fetch_by_name()
                       Retrieves data only from a backing store that is
                       indexed by name.

   dce_db_fetch_by_uuid()
                       Retrieves data only from a backing store that is
                       indexed by UUID.

   dce_db_free()       Releases the data supplied from a backing store.

   dce_db_header_fetch()
                       Retrieves a header from a backing store.

   dce_db_inq_count()  Returns the number of items in a backing store.

   dce_db_iter_done()  Terminates and iteration operation initiated by
                       dce_db_iter_start(). It should be called when
                       iteration is done.

   dce_db_iter_next()  Returns the key for the next item from a backing
                       store that is indexed by name or by UUID.  The
                       db_s_no_more return value indicates that there
                       are no more items.

   dce_db_iter_next_by_name()
                       Returns the key for the next item only from a
                       backing store that is indexed by name. The
                       db_s_no_more return value indicates that there
                       are no more items.

   dce_db_iter_next_by_uuid()
                       Returns the key for the next item only from a
                       backing store that is indexed by UUID.  The
                       db_s_no_more return value indicates that there
                       are no more items.

   dce_db_iter_start() Prepares for the start of iteration.

   dce_db_lock()       Locks a backing store. A lock is associated with
                       an open backing store's handle.  The storage
                       routines, dce_db_store(), dce_db_store_by_name(),
                       and dce_db_store_by_uuid(), all acquire the lock
                       before updating.

   dce_db_open()       Creates a new backing store or opens an existing
                       one.  The backing store is identified by a
                       filename. Flags allow you to:

                         + Create a new backing store, or open an
                           existing one.

                         + Create a new backing store indexed by name,
                           or indexed by UUID.

                         + Open an existing backing store read/write,
                           or read-only.

                         + Use the standard data item header, or not.
   The routine returns a handle by which subsequent routines can
   reference the opened backing store.

   dce_db_std_header_init()
                       Initializes a standard backing store header
                       retrieved by dce_db_header_fetch(). It only
                       places the values into the header, and does
                       not write into the backing store.

   dce_db_store()      Stores a data item into a backing store that
                       is indexed by name or by UUID.  The key's type
                       must match the flag that was used in
                       dce_db_open().

   dce_db_store_by_name()
                       Stores a data item only into a backing store
                       that is indexed by name.

   dce_db_store_by_uuid()
                       Stores a data item only into a backing store
                       that is indexed by UUID.

   dce_db_unlock()     Unlocks a backing store.

  DATA TYPES AND STRUCTURES

   dce_db_handle_t     An opaque handle to a backing store.  Use
                       dce_db_open() to acquire the handle.

   dce_db_header_t     The data structure that defines a standard
                       backing store header for data items. Use
                       dce_db_header_fetch() to retrieve it from a
                       backing store and dce_db_std_header_init() to
                       initialize it.

   dce_db_convert_func_t
                       An opaque pointer to the data conversion
                       function to be used when storing or retrieving
                       data.  This function is specified as an
                       argument to dce_db_open() at open time.  It
                       converts between native format and on-disk
                       (serialized) format. It is generated from the
                       IDL file by the IDL compiler.

  CAUTIONS

  You can not use conformant arrays in objects stored to a backing
  store.  This is because the idl-generated code that encodes (pickles)
  the structure has no way to predict or detect the size of the array.
  When the object is fetched, there will likely be insufficient space
  provided for the structure, and the array's data will destroy
  whatever is in memory after the structure.

  FILES

      database.idl, database.h, db.h, and dbif.h

  RELATED INFORMATION

      BOOKS: OSF DCE Application Development Guide

1  –  dce_db_close

 NAME
   dce_db_close - Closes an open backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_close( dce_db_handle_t *handle,
                      error_status_t *status );

 PARAMETERS

   Input

   handle    A handle identifying the backing store to be closed.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_close() routine closes a backing store that was opened
   by dce_db_open().  It also frees the storage used by the handle,
   and sets the handle's value to NULL.

 ERRORS

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_open

2  –  dce_db_delete

 NAME
   dce_db_delete - Deletes an item from a backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_delete( dce_db_handle_t handle,
                       void *key,
                       error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A pointer to a string or UUID that is the key to the
             item in the backing store.  The datatype of key must
             match the key method that was selected in the flags
             parameter to dce_db_open() when the backing store was
             created.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error code.

 DESCRIPTION

   The dce_db_delete() routine deletes an item from the backing store
   that is identified by the handle parameter, which was obtained from
   dce_db_open().  It is a general deletion routine, interpreting the
   key parameter according to the type of index with which the backing
   store was created.

 ERRORS

   db_s_del_failed
             The deletion did not occur.  The global variable errno
             may indicate further information about the error.

   db_s_bad_index_type
             The key's type is wrong, or the backing store is not by
             name or by UUID.

   db_s_iter_not_allowed
             The function was called while an iteration, begun by
             dce_db_iter_start(), was in progress.  Deletion is not
             allowed during iteration.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_delete_by_name
              dce_db_delete_by_uuid
              dce_db_open

3  –  dce_db_delete_by_name

 NAME
   dce_db_delete_by_name - Deletes an item from a string-indexed
                           backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_delete_by_name( dce_db_handle_t handle,
                               char *key,
                               error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A NULL-terminated string that is the key to the item
             in the backing store.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error code.

 DESCRIPTION

   The dce_db_delete_by_name() routine deletes an item from the
   backing store that is identified by the handle parameter, which
   was obtained from dce_db_open().  It is a specialized deletion
   routine for backing stores that are indexed by name, as selected
   by the db_c_index_by_name bit in the flags parameter to
   dce_db_open() when the backing store was created.

 ERRORS

   db_s_del_failed
             The deletion did not occur.  The global variable errno
             may indicate further information about the error.

   db_s_bad_index_type
             The backing store is not indexed by name.

   db_s_iter_not_allowed
             The function was called while an iteration, begun by
             dce_db_iter_start(), was in progress.  Deletion is not
             allowed during iteration.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_delete
              dce_db_delete_by_uuid
              dce_db_open

4  –  dce_db_delete_by_uuid

 NAME
   dce_db_delete_by_uuid - Deletes an item from a UUID-indexed
                           backing-store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_delete_by_uuid( dce_db_handle_t handle,
                               uuid_t *key,
                               error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing-store being used.

   key       A pointer to a UUID that is the key to the item in the
             backing store.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error code.

 DESCRIPTION

   The dce_db_delete_by_uuid() routine deletes an item from the
   backing-store that is identified by the handle parameter, which
   was obtained from dce_db_open().  It is a specialized deletion
   routine for backing stores that are indexed by UUID, as selected
   by the db_c_index_by_uuid bit in the flags parameter to
   dce_db_open() when the backing store was created.

 ERRORS

   db_s_del_failed
             The deletion did not occur.  The global variable errno
             may indicate further information about the error.

   db_s_bad_index_type
             The backing-store is not indexed by UUID.

   db_s_iter_not_allowed
             The function was called while an iteration, begun by
             dce_db_iter_start(), was in progress.  Deletion is
             not allowed during iteration.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_delete
              dce_db_delete_by_name
              dce_db_open

5  –  dce_db_fetch

 NAME
   dce_db_fetch - Retrieves data from a backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_fetch( dce_db_handle_t handle,
                      void *key,
                      void *data,
                      error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A string or UUID that is the key to the item in the
             backing store.  The datatype of key must match the key
             method that was selected in the flags parameter to
             dce_db_open() when the backing store was created.

   Output

   data      A pointer to the returned data.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_fetch() routine retrieves data from the backing store
   that is identified by the handle parameter, which was obtained
   from dce_db_open().  It is a general retrieval routine,
   interpreting the key parameter according to the type of index
   with which the backing store was created.

   The data parameter is shown as a pointer to an arbitrary data
   type.  In actual use it will be the address of the backing-store-
   specific data type.

 NOTES

   After calling dce_db_fetch(), it may be necessary to free some
   memory, if the call was made outside of an RPC, on the server
   side.  This is done by calling rpc_sm_client_free().  (Inside
   an RPC the memory is allocated through rpc_sm_allocate(), and
   is automatically freed.)

   Programs that call dce_db_fetch() outside of a server operation
   (for instance, if a server does some backing store initialization,
   or in a standalone program) must call rpc_sm_enable_allocate()
   first.  Indeed, every thread that calls dce_db_fetch() must do
   rpc_sm_allocate(), but in the server side of an RPC, this is
   already done.

 ERRORS

   db_s_key_not_found
             The specified key was not found in the backing store.
             (This circumstance is not necessarily an error.)

   db_s_bad_index_type
             The key's type is wrong, or else the backing store is
             not by name or by UUID.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch_by_name
              dce_db_fetch_by_uuid
              dce_db_free
              dce_db_open

6  –  dce_db_fetch_by_name

 NAME
   dce_db_fetch_by_name - Retrieves data from a string-indexed
                          backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_fetch_by_name( dce_db_handle_t handle,
                              char *key,
                              void *data,
                              error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A null-terminated string that is the key to the item
             in the backing store.

   Output

   data      A pointer to the returned data.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_fetch_by_name() routine retrieves data from the
   string-indexed backing store that is identified by the handle
   parameter, which was obtained from dce_db_open().  It is a
   specialized retrieval routine for backing stores that are indexed
   by string, as selected by the db_c_index_by_name bit in the flags
   parameter to dce_db_open() when the backing store was created.

   The data parameter is shown as a pointer to an arbitrary data type.
   In actual use it will be the address of the backing-store-specific
   data type.

 NOTES

   After calling dce_db_fetch_by_name(), it may be necessary to free
   some memory, if the call was made outside of an RPC, on the server
   side.  This is done by calling rpc_sm_client_free().  (Inside an
   RPC the memory is allocated through rpc_sm_allocate(), and is
   automatically freed.)

   Programs that call dce_db_fetch_by_name() outside of a server
   operation (for instance, if a server does some backing store
   initialization, or in a standalone program) must call
   rpc_sm_enable_allocate() first.  Indeed, every thread that calls
   dce_db_fetch_by_name() must do rpc_sm_allocate(), but in the
   server side of an RPC, this is already done.

 EXAMPLES

   This example shows the use of the user-defined data type as the
   data parameter.

            extern dce_db_handle_t  db_h;
            uuid_t                  key_uuid;
            my_data_type_t          my_data;
            error_status_t          status;
            /* set key_uuid = xxx; */
            dce_db_fetch_by_name(db_h, &key_uuid, &my_data, &status);

 ERRORS

   db_s_key_not_found
             The specified key was not found in the backing store.
             (This circumstance is not necessarily an error.)

   db_s_bad_index_type
             The backing store is not indexed by name.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch
              dce_db_fetch_by_uuid
              dce_db_free
              dce_db_open

7  –  dce_db_fetch_by_uuid

 NAME
   dce_db_fetch_by_uuid - Retrieves data from a UUID-indexed backing
                          store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_fetch_by_uuid( dce_db_handle_t handle,
                              uuid_t *key,
                              void *data,
                              error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A UUID that is the key to the item in the backing store.

   Output

   data      A pointer to the returned data.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_fetch_by_uuid() routine retrieves data from the
   UUID-indexed backing store that is identified by the handle
   parameter, which was obtained from dce_db_open().  It is a
   specialized retrieval routine for backing stores that are
   indexed by UUID, as selected by the db_c_index_by_uuid bit in
   the flags parameter to dce_db_open() when the backing store was
   created.

   The data parameter is shown as a pointer to an arbitrary data type.
   In actual use it will be the address of the backing-store-specific
   data type.

 NOTES

   After calling dce_db_fetch_by_uuid(), it may be necessary to free
   some memory, if the call was made outside of an RPC, on the server
   side.  This is done by calling rpc_sm_client_free().  (Inside an
   RPC the memory is allocated through rpc_sm_allocate(), and is
   automatically freed.)

   Programs that call dce_db_fetch_by_uuid() outside of a server
   operation (for instance, if a server does some backing store
   initialization, or in a standalone program) must call
   rpc_sm_enable_allocate() first.  Indeed, every thread that calls
   dce_db_fetch_by_uuid() must do rpc_sm_allocate(), but in the
   server side of an RPC, this is already done.

 EXAMPLES

   This example shows the use of the user-defined data type as the
   data parameter.

            extern dce_db_handle_t  db_h;
            uuid_t                  key_uuid;
            my_data_type_t          my_data;
            error_status_t          status;
            /* set key_uuid = xxx; */
            dce_db_fetch_by_uuid(db_h, &key_uuid, &my_data, &status);

 ERRORS

   db_s_key_not_found
             The specified key was not found in the backing store.
             (This circumstance is not necessarily an error.)

   db_s_bad_index_type
             The backing store is not indexed by UUID.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch
              dce_db_fetch_by_name
              dce_db_free
              dce_db_open

8  –  dce_db_free

 NAME
   dce_db_free - Releases the data supplied from a backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_free( dce_db_handle_t  handle,
                     void             *data,
                     error_status_t   *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   data      The data area to be released.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_free() routine is designed to free the data
   area previously returned via a call to dce_db_fetch(),
   dce_db_fetch_by_name(), or dce_db_fetch_by_uuid().

 NOTES

   In the current implementation, the dce_db_free() routine does not
   perform any action.  For servers that execute properly this is of
   little consequence, because their allocated memory is automatically
   cleaned up when a remote procedure call finishes.  For completeness,
   and for compatibility with future releases, the use of dce_db_free()
   is recommended.

 ERRORS

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch
              dce_db_fetch_by_name
              dce_db_fetch_by_uuid

9  –  dce_db_header_fetch

 NAME
   dce_db_header_fetch - Retrieves the header from a backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_header_fetch( dce_db_handle_t handle,
                             void *key,
                             dce_db_header_t *hdr,
                             error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A string or UUID that is the backing store key.

   Output

   hdr       A pointer to a caller-supplied header structure to be
             filled in by the library.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_header_fetch() routine returns a pointer to a copy of the
   header of the object in the backing store that is identified by the
   handle parameter, which was obtained from dce_db_open().  The caller
   must free the copy's storage.  It was allocated (as with other fetch
   routines) through rpc_ss_alloc().  The key parameter is interpreted
   according to the type of index with which the backing store was
   created.

   The hdr parameter is shown as a pointer to an arbitrary data type.
   In actual use it will be the address of the backing-store-specific
   data type.

 ERRORS

   db_s_key_not_found
             The key was not found in the backing store.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch
              dce_db_std_header_init

10  –  dce_db_inq_count

 NAME
   dce_db_inq_count - Returns the number of items in a backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_inq_count( dce_db_handle_t handle,
                          unsigned32 *count,
                          error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   count     A pointer to the number of items in the backing store.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_inq_count() routine returns the number of items in the
   backing store that is identified by the handle parameter, which was
   obtained from dce_db_open().  It performs identically on backing
   stores that are indexed by UUID and those that are indexed by string.
   The count of items can be helpful when iterating through a backing
   store.

 ERRORS

   db_s_iter_not_allowed
             The function was called while an iteration, begun by
             dce_db_iter_start(), was in progress.  Determining the
             count is not allowed during iteration.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_iter_next

11  –  dce_db_iter_done

 NAME
   dce_db_iter_done - Frees the state associated with iteration

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_iter_done( dce_db_handle_t handle,
                          error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.

 DESCRIPTION

   The dce_db_iter_done() routine frees the state that permits
   iteration.  It should be called after an iteration through a
   backing store is finished.

   The iteration state is established by dce_db_iter_start().
   The routines for performing iteration over the items are
   dce_db_iter_next(), dce_db_iter_next_by_name(), and
   dce_db_iter_next_by_uuid().

 ERRORS

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_iter_next
              dce_db_iter_next_by_name
              dce_db_iter_next_by_uuid
              dce_db_iter_start

12  –  dce_db_iter_next

 NAME
   dce_db_iter_next - During iteration, returns the next key from
                      a backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_iter_next( dce_db_handle_t handle,
                          void **key,
                          error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   key       A pointer to the string or UUID that is the key to the
             item in the backing store.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_iter_next() routine retrieves the next key from the
   backing store that is identified by the handle parameter.  An
   iterator established by the dce_db_iter_start() routine maintains
   the identity of the current key.  Use one of the dce_db_fetch()
   routines to retrieve the actual data.

   The iteration functions scan sequentially through a backing store,
   in no particular order.  The dce_db_iter_start() routine initialized
   the process, a dce_db_iter_next() routine retrieves successive keys,
   for which the data can be retrieved with dce_db_fetch(), and the
   dce_db_iter_done() routine finishes the process.  The iteration can
   also use the dce_db_iter_next_by_name() and dce_db_iter_next_by_uuid()
   routines; the fetching can use the dce_db_fetch_by_name() and
   dce_db_fetch_by_uuid() routines.

   The iteration routine returns a pointer to a private space
   associated with the handle.  Each call to the iteration routine
   reuses the space, instead of using allocated space.

 ERRORS

   db_s_no_more
             All the keys in the backing store have been accessed;
             there are no more iterations remaining to be done.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch
              dce_db_fetch_by_name
              dce_db_fetch_by_uuid
              dce_db_iter_done
              dce_db_iter_next_by_name
              dce_db_iter_next_by_uuid
              dce_db_iter_start

13  –  dce_db_iter_next_by_name

 NAME
   dce_db_iter_next_by_name - During iteration, returns the next key
                              from a backing store indexed by string

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_iter_next_by_name( dce_db_handle_t handle,
                                  char **key,
                                  error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   key       The string that is the key to the item in the backing store.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_iter_next_by_name() routine retrieves the next key
   from the backing store that is identified by the handle parameter.
   An iterator established by the dce_db_iter_start() routine maintains
   the identity of the current key.  Use the dce_db_fetch_by_name()
   routine to retrieve the actual data.

   This iteration routine is the same as dce_db_iter_next(), except
   that it only works with backing stores indexed by name, and returns
   an error if the backing store index is the wrong type.

   The iteration routine returns a pointer to a private space
   associated with the handle.  Each call to the iteration routine
   reuses the space, instead of using allocated space.

 ERRORS

   db_s_no_more
             All the keys in the backing store have been accessed;
             there are no more iterations remaining to be done.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch_by_uuid
              dce_db_iter_done
              dce_db_iter_next
              dce_db_iter_next_by_uuid
              dce_db_iter_start

14  –  dce_db_iter_next_by_uuid

 NAME
   dce_db_iter_next_by_uuid - During iteration, returns the next key
                              from a backing store indexed by UUID

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_iter_next_by_uuid( dce_db_handle_t handle,
                                  uuid_t **key,
                                  error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   key       The UUID that is the key to the item in the backing store.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_iter_next_by_uuid() routine retrieves the next key
   from the backing store that is identified by the handle parameter.
   An iterator established by the dce_db_iter_start() routine maintains
   the identity of the current key.  Use the dce_db_fetch_by_uuid()
   routine to retrieve the actual data.

   This iteration routine is the same as dce_db_iter_next(), except
   that it only works with backing stores indexed by UUID, and returns
   an error if the backing store index is the wrong type.

   The iteration routine returns a pointer to a private space
   associated with the handle.  Each call to the iteration routine
   reuses the space, instead of using allocated space.

 ERRORS

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_iter_done
              dce_db_iter_next
              dce_db_iter_next_by_name
              dce_db_iter_start

15  –  dce_db_iter_start

 NAME
   dce_db_iter_start - Prepares a backing store for iteration

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_iter_start( dce_db_handle_t handle,
                           error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.

 DESCRIPTION

   The dce_db_iter_start() routine prepares the backing store that is
   identified by the handle parameter for iterative retrieval of all
   its keys in succession.

   A given handle can support only a single instance of iteration at
   one time.

   To avoid the possibility that another thread will write to the
   backing store during an iteration, always use the dce_db_lock()
   routine before calling dce_db_iter_start().

 ERRORS

   db_s_iter_not_allowed
             The function was called while an iteration was already
             in progress.  The concept of nested iterations is not
             supported.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_iter_done
              dce_db_iter_next
              dce_db_iter_next_by_name
              dce_db_iter_next_by_uuid
              dce_db_lock
              dce_db_unlock
              dce_db_open

16  –  dce_db_lock

 NAME
   dce_db_lock - Applies an advisory lock on a backing store

 SYNOPSIS
   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_lock( dce_db_handle_t handle,
                     error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_lock() routine acquires the lock associated with the
   handle.

   There is an advisory lock associated with each handle.  The routines
   for storing and deleting backing stores apply the lock before
   updating a backing store.  This routine provides a means to apply
   the lock for other purposes, such as iteration.

   Advisory locks allow cooperating threads to perform consistent
   operations on backing stores, but do not guarantee consistency;
   that is, threads may still access backing stores without using
   advisory locks, possibly resulting in inconsistencies.

 ERRORS

   db_s_already_locked
             An attempt was made to lock a backing store, but it
             was already locked.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_delete
              dce_db_delete_by_name
              dce_db_delete_by_uuid
              dce_db_store
              dce_db_store_by_name
              dce_db_store_by_uuid
              dce_db_unlock

17  –  dce_db_open

 NAME
   dce_db_open - Opens an existing backing store or creates a new one

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_open( const char *name,
                     const char *backend_type,
                     unsigned32 flags,
                     dce_db_convert_func_t convert,
                     dce_db_handle_t *handle,
                     error_status_t *status );

 PARAMETERS

   Input

   name      The filename of the backing store to be opened or created.

   backend_type
             Either of the strings, bsd4.4-hash or bsd4.4-btree, or
             a null pointer, which defaults to hash.  This parameter
             specifies the backing store backend type for licensees
             adding multiple backends.

   flags     The manner of opening, as specified by any of the
             following bits:

             db_c_index_by_name
                       The backing store is to be indexed by name.
                       Either this or db_c_index_by_uuid, but not
                       both, must be selected.

             db_c_index_by_uuid
                       The backing store is to be indexed by UUID.
                       Either this or db_c_index_by_name, but not
                       both, must be selected.

             db_c_std_header
                       The first field of each item (which is defined
                       as a union in dce_db_header_t) is the standard
                       backing store header, with the case
                       dce_db_header_std selected.  The selection for
                       header cannot have both db_c_std_header and
                       db_c_acl_uuid_header.  If neither header flag is
                       specified, no header is used.

             db_c_acl_uuid_header
                       The first field of each item (the union) is an
                       ACL UUID, with the case dce_db_header_acl_uuid
                       selected.  The selection for header cannot have
                       both db_c_std_header and db_c_acl_uuid_header.
                       If neither header flag is specified, no header
                       is used.

             db_c_readonly
                       An existing backing store is to be opened in
                       read-only mode.  Read/write is the default.

             db_c_create
                       Creates an empty backing store if one of the
                       given name does not already exist.  It is an
                       error to try to create an existing backing store.

   convert   The function, generated by the IDL compiler, that is
             called to perform serialization.

   Output

   handle    A pointer to a handle that identifies the backing
             store being used.

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_open() routine opens the specified backing store.  The
   flags parameter must specify whether the backing store is to be
   indexed by name or by UUID.  If all of a server's objects have
   entries in the CDS namespace, then it is probably best to use a
   UUID index.  If the server provides a junction or another name-based
   lookup operation, then it is probably best to use a name index.

   The IDL code in /usr/include/dce/database.idl defines the backing
   store header (selected by the flags parameter) that is placed on
   each item, the possible header types, and the form of the function
   for serializing headers.

 NOTES

   Backing stores are also called databases.  For instance, the
   associated IDL header is dce/database.idl, and the name of the
   backing store routines begin with dce_db_.  Nevertheless, backing
   stores are not databases in the conventional sense, and have no
   support for SQL or for any other query system.

 EXAMPLES

   Standardized use of the backing store library is encouraged.  The
   following is the skeleton IDL interface for a server's backing store:

        interface XXX_db
        {
            import "dce/database.idl";

            typedef XXX_data_s_t {
                dce_db_header_t header;
                /* server-specific data */
            } XXX_data_t;

            void XXX_data_convert( [in] handle_t h,
                                   [in, out] XXX_data_t *data,
                                   [out] error_status_t *st );
        }

   This interface should be compiled with the following ACF:

        interface XXX_db
        {
            [encode, decode] XXX_data_convert();
        }

   A typical call to dce_db_open(), using the preceding IDL example,
   would be:

        dce_db_open( "XXX_db", NULL,
                     db_c_std_header | db_c_index_by_uuid,
                     (dce_db_convert_func_t)XXX_data_convert,
                     &handle, &st );

 ERRORS

   db_s_bad_index_type
             The index type in flags is specified neither by name nor
             by UUID; or else it is specified as both.

   db_s_bad_header_type
             The header type in flags is specified as both standard
             header and ACL header.

   db_s_index_type_mismatch
             An existing backing store was opened with the wrong index
             type.

   db_s_open_already_exists
             The backing store file specified for creation already
             exists.

   db_s_no_name_specified
             No filename is specified.

   db_s_open_failed_eacces
             The server does not have permission to open the backing
             store file.

   db_s_open_failed_enoent
             The specified directory or backing store file was not found.

   db_s_open_failed
             The underlying database-open procedure failed.  The global
             variable errno may provide more specific information.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_close

18  –  dce_db_std_header_init

 NAME
   dce_db_std_header_init - Initializes a standard backing store header

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_std_header_init( dce_db_handle_t handle,
                                dce_db_header_t *hdr,
                                uuid_t *uuid,
                                uuid_t *acl_uuid,
                                uuid_t *def_object_acl,
                                uuid_t *def_container_acl,
                                unsigned32 ref_count,
                                error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   hdr       Pointer to the object header part of the users' structure.

   uuid      The UUID to be placed into the header.  Can be NULL.

   acl_uuid  The UUID of the ACL protecting this object, to be placed
             into the header.  Can be NULL.

   def_object_acl
             The UUID of the default object ACL, to be placed into
             the header.  Can be NULL.

   def_container_acl
             The UUID of the default container ACL, to be placed into
             the header.  Can be NULL.

   ref_count The reference count to be placed into the header.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_std_header_init() routine initializes the fields of the
   standard header for a data object whose backing store is identified
   by the handle parameter.  The fields are only set in memory and
   should be stored to the backing store by one of the store routines.
   The handle was obtained from dce_db_open(), which must have been
   called with the db_c_std_header flag.

 ERRORS

   db_s_bad_header_type
             The header type is not dce_db_header_std.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_header_fetch

19  –  dce_db_store

 NAME
   dce_db_store - Stores data into a backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_store( dce_db_handle_t handle,
                      void *key,
                      void *data,
                      error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A string or UUID that is the backing store key.  The
             datatype of key must match the key method that was
             selected in the flags parameter to dce_db_open() when
             the backing store was created.

   data      A pointer to the data structure to be stored.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_store() routine stores the data structure pointed to by
   data into the backing store.  The conversion function that was
   specified in the call to dce_db_open() serializes the structure so
   that it can be written to disk.

   If the key value is the same as a key already stored, the new data
   replaces the previously stored data associated with that key.

 NOTES

   Because the dce_db_store() routine uses the encoding services,
   and they in turn use rpc_sm_allocate(), all programs that call
   dce_db_store() outside of a server operation (for instance, if a
   server does some backing store initialization, or in a standalone
   program) must call rpc_sm_enable_allocate() first.  Indeed, every
   thread that calls dce_db_store() must do rpc_sm_enable_allocate(),
   but in the server side of an RPC, this is already done.

 ERRORS

   db_s_bad_index_type
             The key's type is wrong, or else the backing store is not
             by name or by UUID.

   db_s_readonly
             The backing store was opened with the db_c_readonly flag,
             and cannot be written to.

   db_s_store_failed
             The data could not be stored into the backing store for
             some reason.  The global variable errno may contain more
             information about the error.

   db_s_iter_not_allowed
             The function was called while an iteration, begun by
             dce_db_iter_start(), was in progress.  Storing is not
             allowed during iteration.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_fetch
              dce_db_open
              dce_db_store_by_name
              dce_db_store_by_uuid

20  –  dce_db_store_by_name

 NAME
   dce_db_store_by_name - Stores data into a string-indexed backing
                          store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_store_by_name( dce_db_handle_t handle,
                              char *key,
                              void *data,
                              error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A null-terminated string that is the backing store key.

   data      A pointer to the data structure to be stored.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_store_by_name() routine stores the data structure pointed
   to by data into the backing store.  The conversion function that was
   specified in the call to dce_db_open() serializes the structure so
   that it can be written to disk.

   This routine is specialized for storage into backing stores that
   are indexed by string, as selected by the db_c_index_by_name bit
   in the flags parameter to dce_db_open() when the backing store was
   created.

   If the key value is the same as a key already stored, the new data
   replaces the previously stored data associated with that key.

 NOTES

   Because the dce_db_store_by_name() routine uses the encoding
   services, and they in turn use rpc_sm_allocate(), all programs
   that call dce_db_store_by_name() outside of a server operation
   (for instance, if a server does some backing store initialization,
   or in a standalone program) must call rpc_sm_enable_allocate()
   first.  Indeed, every thread that calls dce_db_store_by_name() must
   do rpc_sm_enable_allocate(), but in the server side of an RPC, this
   is already done.

 ERRORS

   db_s_bad_index_type
             The backing store is not indexed by name.

   db_s_readonly
             The backing store was opened with the db_c_readonly flag,
             and cannot be written to.

   db_s_store_failed
             The data could not be stored into the backing store for
             some reason.  The global variable errno may contain more
             information about the error.

   db_s_iter_not_allowed
             The function was called while an iteration, begun by
             dce_db_iter_start(), was in progress.  Storing is not
             allowed during iteration.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_open
              dce_db_store
              dce_db_store_by_uuid

21  –  dce_db_store_by_uuid

 NAME
   dce_db_store_by_uuid - Stores data into a UUID-indexed backing store

 SYNOPSIS

   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_store_by_uuid( dce_db_handle_t handle,
                              uuid_t *key,
                              void *data,
                              error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   key       A UUID that is the backing store key.

   data      A pointer to the data structure to be stored.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_store_by_uuid() routine  stores the data structure pointed
   to by data into the backing store.  The conversion function that was
   specified in the call to dce_db_open() serializes the structure so
   that it can be written to disk.

   This routine is specialized for storage into backing stores that are
   indexed by UUID, as selected by the db_c_index_by_uuid bit in the
   flags parameter to dce_db_open() when the backing store was created.

   If the key value is the same as a key already stored, the new data
   replaces the previously stored data associated with that key.

 NOTES

   Because the dce_db_store_by_uuid() routine uses the encoding services,
   and they in turn use rpc_sm_allocate(), all programs that call
   dce_db_store_by_uuid() outside of a server operation (for instance,
   if a server does some backing store initialization, or in a standalone
   program) must call rpc_sm_enable_allocate() first.  Indeed, every
   thread that calls dce_db_store_by_uuid() must do
   rpc_sm_enable_allocate(), but in the server side of an RPC, this is
   already done.

 ERRORS

   db_s_bad_index_type
             The backing store is not indexed by UUID.

   db_s_readonly
             The backing store was opened with the db_c_readonly flag,
             and cannot be written to.

   db_s_store_failed
             The data could not be stored into the backing store for
             some reason.  The global variable errno may contain more
             information about the error.

   db_s_iter_not_allowed
             The function was called while an iteration, begun by
             dce_db_iter_start(), was in progress.  Storing is not
             allowed during iteration.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_open
              dce_db_store
              dce_db_store_by_name

22  –  dce_db_unlock

 NAME
   dce_db_unlock - Releases the backing store lock

 SYNOPSIS
   #include <dce/dce.h>
   #include <dce/dbif.h>

   void dce_db_unlock( dce_db_handle_t handle,
                       error_status_t *status );

 PARAMETERS

   Input

   handle    A handle, returned from dce_db_open(), that identifies
             the backing store being used.

   Output

   status    A pointer to the completion status.  On successful
             completion, the routine returns error_status_ok.
             Otherwise, it returns an error.

 DESCRIPTION

   The dce_db_unlock() routine releases the lock associated with the
   handle.

 ERRORS

   db_s_not_locked
             An attempt was made to unlock a backing store, but it
             was not locked.

   error_status_ok
             The call was successful.

 RELATED INFORMATION

   Functions: dce_db_lock
Close Help