doc/evsql.dox
branchnew-evsql
changeset 53 0d6e07f4c9a1
child 54 7dc8ff496da1
equal deleted inserted replaced
52:f5037572c326 53:0d6e07f4c9a1
       
     1 /**
       
     2 @mainpage evsql
       
     3 @author Tero Marttila
       
     4 
       
     5 @section Introduction
       
     6 Evsql is a C-language SQL library designed for use with libevent, and primarily PostgreSQL's libpq.
       
     7 
       
     8 Evsql was born as a result of wanting to use a SQL database from within a libevent application, and discovering
       
     9 libpq's asynchronous API. Since the libpq API is somewhat cumbersome to use, I wrote a separate interface that
       
    10 drives libpq using libevent and makes writing asynchronous SQL clients a lot easier - plus adding some conveniance
       
    11 for parametrized queries and such along the way.
       
    12 
       
    13 The evsql API doesn't expose the underlying database library's API, although since the only currently existing
       
    14 implementation is libpq, this should really be thought of as a generically-named PostgreSQL library rather than a
       
    15 database-agnostic API...
       
    16 
       
    17 @section Usage
       
    18 Include the top-level evsql.h header, making sure you also have the evpq and lib modules available.
       
    19 
       
    20 @section Connecting
       
    21 Evsql sessions are represented using an opaque struct, called simply evsql. Use the \ref evsql_ evsql_new_ function corresponding to your
       
    22 database engine (PostgreSQL -> evsql_new_pq()) to allocate this handle. It is valid for use immediately, although the 
       
    23 initial connection may not yet be complete.
       
    24 
       
    25 There is an evsql_close function, but it is currently not implemented.
       
    26 
       
    27 \ref evsql_
       
    28 
       
    29 @section Transactions
       
    30 Evsql supports both non-transactional queries and transactional queries. A transaction is allocated its own dedicated
       
    31 connection which it can use for its queries without being interfered by other queries/transactions. Evsql takes care of
       
    32 sending the initial "BEGIN TRANSACTION" query, and provides evsql_trans_commit()/evsql_trans_abort() functions to send the
       
    33 "COMMIT TRANSACTION" and "ROLLBACK TRANSACTION" queries.
       
    34 
       
    35 Note, however, that transactions can only handle one outstanding query at a time, whereas transactionless queries can
       
    36 be enqueued by evsql itself.
       
    37 
       
    38 \ref evsql_trans_
       
    39 
       
    40 @section Querying
       
    41 There is a single evsql_query function used for both transactional and non-transactional queries; you can pass NULL
       
    42 as the trans argument.
       
    43 
       
    44 The given callback function is invoked once the query has been processed and the result is available, or the query
       
    45 failed.
       
    46 
       
    47 The important distinction between transactional and non-transactional queries is that transactions only support one
       
    48 outstanding query at a time, meaning that you must wait for your callback to be invoked before calling evsql_query
       
    49 again for the transaction. Non-transactional queries are sent using an idle connection, and will be enqueued for later
       
    50 execution if no idle connections are available.
       
    51 
       
    52 evsql_query returns a handle that can be passed to evsql_query_abort to abort the query, ensuring that the callback
       
    53 given to evsql_query is not invoked, and any associated resources released.
       
    54 
       
    55 @section Parametrized Queries
       
    56 Evsql also provides functions to send parametrized queries, the behaviour of evsql_query explained above applies as
       
    57 well. 
       
    58 
       
    59 The first of these is evsql_query_params, which takes the parametrized SQL command and a struct containing the
       
    60 parameter types and values as arguments.
       
    61 
       
    62 The second of these is evsql_query_exec, which takes a evsql_query_info struct containing the parametrized SQL command
       
    63 and the parameter types, and the parameter values themselves as a list of variable arguments (of the correct type!).
       
    64 
       
    65 @section API Reference
       
    66 The entire API is defined in the top-level evsql.h header.
       
    67 
       
    68 */