123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
- <section id="db_interface" xmlns:xi="http://www.w3.org/2001/XInclude">
- <sectioninfo>
- <revhistory>
- <revision>
- <revnumber>$Revision$</revnumber>
- <date>$Date$</date>
- </revision>
- </revhistory>
- </sectioninfo>
- <title>The Database Interface</title>
- <para>
- This is a generic database interface for modules that need to utilize a
- database. The interface should be used by all modules that access
- database. The interface will be independent of the underlying database
- server.
- </para>
- <note>
- <para>
- If possible, use predefined macros if you need to access any
- structure attributes.
- </para>
- <para>
- For additional description, see comments in sources of mysql
- module.
- </para>
- <para>
- If you want to see more complicated examples of how the API could
- be used, see sources of dbexample, usrloc or auth modules.
- </para>
- </note>
-
- <section id="data_types">
- <title>Data types</title>
- <para>
- There are several data types. All of them are defined in header
- files under <filename>db</filename> subdirectory, a client must
- include <filename>db.h</filename> header file to be able to use
- them.
- </para>
- <xi:include href="db_con_t.xml"/>
- <xi:include href="db_key_t.xml"/>
- <xi:include href="db_type_t.xml"/>
- <xi:include href="db_val_t.xml"/>
- <xi:include href="db_row_t.xml"/>
- <xi:include href="db_res_t.xml"/>
- </section>
-
- <section id="db_functions">
- <title>Functions</title>
- <para>
- There are several functions that implement the database
- <acronym>API</acronym> logic. All function names start with db_
- prefix, except <function>bind_dbmod</function>.
- <function>bind_dbmod</function> is implemented in
- <filename>db.c</filename> file, all other functions are implemented
- in a standalone module. Detailed description of functions follows.
- </para>
-
- <section id="bind_dbmod">
- <title><function>bind_dbmod</function></title>
- <para>
- This function is special, it's only purpose is to call
- <function>find_export</function> function in the
- <acronym>SER</acronym> core and find addresses of all other
- functions (starting with db_ prefix). This function
- <emphasis>MUST</emphasis> be called <emphasis>FIRST</emphasis>
- !
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>int <function>bind_dbmod</function></funcdef>
- <void/>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes no parameters.
- </para>
- <para>
- The function returns 0 if it was able to find addresses of all
- other functions, otherwise value < 0 is returned.
- </para>
- </section> <!-- bind_dbmod -->
-
- <section id="db_init">
- <title><function>db_init</function></title>
- <para>
- Use this function to initialize the database
- <acronym>API</acronym> and open a new database connection. This
- function must be called after <function>bind_dbmod</function>
- but before any other function is called.
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>db_con_t* <function>db_init</function></funcdef>
- <paramdef>const char* <parameter>_sql_url</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes one parameter, the parameter must contain
- database connection <acronym>URL</acronym>. The
- <acronym>URL</acronym> is of the form
- mysql://username:password@host:port/database where:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>username</emphasis> - Username to use
- when logging into database (optional).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>password</emphasis> - Password if it was
- set (optional).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>host</emphasis> - Hostname or IP address
- of the host where database server lives
- (mandatory).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>port</emphasis> - Port number of the
- server if the port differs from default value
- (optional).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>database</emphasis> - If the database server supports
- multiple databases, you must specify name of the database (optional).
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- The function returns pointer to <type>db_con_t</type>*
- representing the connection if it was successful, otherwise 0
- is returned.
- </para>
- </section> <!-- db-init -->
-
- <section id="db_close">
- <title><function>db_close</function></title>
- <para>
- The function closes previously open connection and frees all
- previously allocated memory. The function
- <function>db_close</function> must be the very last function
- called.
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>void <function>db_close</function></funcdef>
- <paramdef>db_con_t* <parameter>_h</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes one parameter, this parameter is a pointer
- to <type>db_con_t</type> structure representing database
- connection that should be closed.
- </para>
- <para>
- Function doesn't return anything.
- </para>
- </section> <!-- db-close -->
-
- <section id="db_query">
- <title><function>db_query</function></title>
- <para>
- This function implements SELECT <acronym>SQL</acronym> directive.
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>int <function>db_query</function></funcdef>
- <paramdef>db_con_t* <parameter>_h</parameter></paramdef>
- <paramdef>db_key_t* <parameter>_k</parameter></paramdef>
- <paramdef>db_val_t* <parameter>_v</parameter></paramdef>
- <paramdef>db_key_t* <parameter>_c</parameter></paramdef>
- <paramdef>int <parameter>_n</parameter></paramdef>
- <paramdef>int <parameter>_nc</parameter></paramdef>
- <paramdef>db_key_t* <parameter>_o</parameter></paramdef>
- <paramdef>db_res_t** <parameter>_r</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes 8 parameters:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>_h</emphasis> - Database connection handle.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>_k</emphasis> - Array of column names
- that will be compared and their values must
- match.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>_v</emphasis> - Array of values,
- columns specified in _k parameter must match
- these values.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>_c</emphasis> - Array of column names
- that you are interested in.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>_n</emphasis> - Number of key-value
- pairs to match in _k and _v parameters.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>_nc</emphasis> - Number of columns in
- _c parameter.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>_o</emphasis> - Order by.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>_r</emphasis> - Address of variable
- where pointer to the result will be stored.
- </para>
- </listitem>
- </itemizedlist>
- If _k and _v parameters are NULL and _n is zero, you will get
- the whole table. If _c is NULL and _nc is zero, you will get
- all table columns in the result
- </para>
- <para>
- _r will point to a dynamically allocated structure, it is
- necessary to call db_free_result function once you are finished
- with the result.
- </para>
- <para>
- Strings in the result are not duplicated, they will be
- discarded if you call db_free_result, make a copy yourself if
- you need to keep it after db_free_result.
- </para>
- <para>
- You must call db_free_result <emphasis>BEFORE</emphasis> you
- can call db_query again !
- </para>
- <para>
- The function returns 0 if everything is OK, otherwise value
- < 0 is returned.
- </para>
- </section> <!-- db_query -->
-
- <section id="db_free_result">
- <title><function>db_free_result</function></title>
- <para>
- This function frees all memory allocated previously in
- <function>db_query</function>, it is necessary to call this
- function for a <type>db_res_t</type> structure if you don't
- need the structure anymore. You must call this function
- <emphasis>BEFORE</emphasis> you call
- <function>db_query</function> again !
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>int <function>db_free_result</function></funcdef>
- <paramdef>db_con_t* <parameter>_h</parameter></paramdef>
- <paramdef>db_res_t* <parameter>_r</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes 2 parameters:
- <itemizedlist>
- <listitem>
- <para>
- <parameter>_h</parameter> - Database connection handle.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_r</parameter> - Pointer to db_res_t
- structure to destroy.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- The function returns 0 if everything is OK, otherwise the
- function returns value < 0.
- </para>
- </section> <!-- db_free_result -->
-
- <section id="db_insert">
- <title><function>db_insert</function></title>
- <para>
- This function implements INSERT SQL directive, you can
- insert one or more rows in a table using this function.
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>int <function>db_insert</function></funcdef>
- <paramdef>db_con_t* <parameter>_h</parameter></paramdef>
- <paramdef>db_key_t* <parameter>_k</parameter></paramdef>
- <paramdef>db_val_t* <parameter>_v</parameter></paramdef>
- <paramdef>int <parameter>_n</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes 4 parameters:
- <itemizedlist>
- <listitem>
- <para>
- <parameter>_h</parameter> - Database connection handle.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_k</parameter> - Array of keys (column names).
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_v</parameter> - Array of values for
- keys specified in _k parameter.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_n</parameter> - Number of
- keys-value pairs int _k and _v parameters.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- The function returns 0 if everything is OK, otherwise the
- function returns value < 0.
- </para>
- </section> <!-- db_insert -->
-
- <section id="db_delete">
- <title><function>db_delete</function></title>
- <para>
- This function implements DELETE SQL directive, it is
- possible to delete one or more rows from a table.
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>int <function>db_delete</function></funcdef>
- <paramdef>db_con_t* <parameter>_h</parameter></paramdef>
- <paramdef>db_key_t* <parameter>_k</parameter></paramdef>
- <paramdef>db_val_t* <parameter>_v</parameter></paramdef>
- <paramdef>int <parameter>_n</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes 4 parameters:
- <itemizedlist>
- <listitem>
- <para>
- <parameter>_h</parameter> - Database connection handle.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_k</parameter> - Array of keys
- (column names) that will be matched.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_v</parameter> - Array of values
- that the row must match to be deleted.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_n</parameter> - Number of
- keys-value parameters in _k and _v parameters.
- </para>
- </listitem>
- </itemizedlist>
- If _k is NULL and _v is NULL and _n is zero, all rows are
- deleted (table will be empty).
- </para>
- <para>
- The function returns 0 if everything is OK, otherwise the
- function returns value < 0.
- </para>
- </section> <!-- db_delete -->
-
- <section id="db_update">
- <title><function>db_update</function></title>
- <para>
- The function implements UPDATE SQL directive. It is possible to
- modify one or more rows in a table using this function.
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>int <function>db_update</function></funcdef>
- <paramdef>db_con_t* <parameter>_h</parameter></paramdef>
- <paramdef>db_key_t* <parameter>_k</parameter></paramdef>
- <paramdef>db_val_t* <parameter>_v</parameter></paramdef>
- <paramdef>db_key_t* <parameter>_uk</parameter></paramdef>
- <paramdef>db_val_t* <parameter>_uv</parameter></paramdef>
- <paramdef>int <parameter>_n</parameter></paramdef>
- <paramdef>int <parameter>_un</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes 7 parameters:
- <itemizedlist>
- <listitem>
- <para>
- <parameter>_h</parameter> - Database connection handle.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_k</parameter> - Array of keys (column names) that will be matched.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_v</parameter> - Array of values that the row must match
- to be modified.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_uk</parameter> - Array of keys (column names) that will be modified.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_uv</parameter> - New values for keys specified in _k parameter.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_n</parameter> - Number of key-value pairs in _k and _v parameters.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_un</parameter> - Number of key-value pairs
- in _uk and _uv parameters.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- The function returns 0 if everything is OK, otherwise the function returns
- value < 0.
- </para>
- </section> <!-- db_update -->
- <section id="db_use_table">
- <title><function>db_use_table</function></title>
- <para>
- The function db_use_table takes a table name and stores it
- in db_con_t structure. All subsequent operations (insert,
- delete, update, query) are performed on that table.
- </para>
- <funcsynopsis>
- <funcprototype>
- <funcdef>int <function>db_use-table</function></funcdef>
- <paramdef>db_con_t* <parameter>_h</parameter></paramdef>
- <paramdef>cons char* <parameter>_t</parameter></paramdef>
- </funcprototype>
- </funcsynopsis>
- <para>
- The function takes 2 parameters:
- <itemizedlist>
- <listitem>
- <para>
- <parameter>_h</parameter> - Database connection handle.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter>_t</parameter> - Table name.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- The function returns 0 if everything is OK, otherwise the
- function returns value < 0.
- </para>
- </section>
- </section>
- </section>
|