Sophie

Sophie

distrib > Mandriva > 2010.2 > x86_64 > by-pkgid > e68df492b0c9f27db58b721fc79af4ec > files > 20

apache-mod_spin-1.2.0-2mdv2010.1.x86_64.rpm

<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>mod_spin: Database functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.1 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <img id="MSearchSelect" src="search/search.png"
             onmouseover="return searchBox.OnSearchSelectShow()"
             onmouseout="return searchBox.OnSearchSelectHide()"
             alt=""/>
        <input type="text" id="MSearchField" value="Search" accesskey="S"
             onfocus="searchBox.OnSearchFieldFocus(true)" 
             onblur="searchBox.OnSearchFieldFocus(false)" 
             onkeyup="searchBox.OnSearchFieldChange(event)"/>
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
        </div>
      </li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>Database functions</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">apr_pool_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga1fb4a463a6ad6f8105c55481ccd9434e">rxv_spin_db_pool</a> (<a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga5c178a21980b4694ec5f06ba7144a69d">rxv_spin_db_cinfo</a> (<a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const apr_dbd_driver_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga4b555c8da55f2d8db1cf4b3ed83dfe9e">rxv_spin_db_driver</a> (<a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">apr_dbd_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#gaa10145e6dcf81f46b3fc81c534129e25">rxv_spin_db_handle</a> (<a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">apr_dbd_transaction_t *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga307c32d69cac568eb076563764005b22">rxv_spin_db_txn</a> (<a class="el" href="rxv__spin_8h.html#a40fe17e33fb3d0772f9844ba872f8af5">rxv_spin_db_txn_t</a> *txn)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#gab06735f0747d4e9c9aa20c03207c0aaf">rxv_spin_db_open</a> (<a class="el" href="group__rxv__spin__context__functions.html#ga30804b0a2d35ece781c2d23fead40600">rxv_spin_ctx_t</a> *ctx, const char *conninfo)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">apr_status_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga8a59c484a035233fda8ad3ff3bb63d48">rxv_spin_db_close</a> (<a class="el" href="group__rxv__spin__context__functions.html#ga30804b0a2d35ece781c2d23fead40600">rxv_spin_ctx_t</a> *ctx, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">apr_status_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga4d835116dcf16db082e93fb49c999f14">rxv_spin_db_status</a> (<a class="el" href="group__rxv__spin__context__functions.html#ga30804b0a2d35ece781c2d23fead40600">rxv_spin_ctx_t</a> *ctx, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__rxv__spin__data__functions.html#gaf40e2976488da2cfc4c1ec4464f8c6be">rxv_spin_data_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga1414eace1c9d5c6a604206f05be95c3b">rxv_spin_db_data</a> (apr_pool_t *pool, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db, apr_dbd_results_t *dbdres)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__rxv__spin__data__functions.html#gaf40e2976488da2cfc4c1ec4464f8c6be">rxv_spin_data_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga2336419159b06c0b91e4570c58a771ca">rxv_spin_db_select</a> (apr_pool_t *pool, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db, const char *query)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#gae8391448cb15bb0c372932546999a630">rxv_spin_db_query</a> (apr_pool_t *pool, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db, const char *query)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__rxv__spin__data__functions.html#gaf40e2976488da2cfc4c1ec4464f8c6be">rxv_spin_data_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga2a5964b4c6405c1c6d54009dab7fe158">rxv_spin_db_pselect</a> (apr_pool_t *pool, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db, const char *query,...)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga04a11df00ab1649a68d822b1cd1e955a">rxv_spin_db_pquery</a> (apr_pool_t *pool, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db, const char *query,...)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rxv__spin_8h.html#a40fe17e33fb3d0772f9844ba872f8af5">rxv_spin_db_txn_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#ga155ab21e150496c1e9cf0115e8c1ce41">rxv_spin_db_start</a> (apr_pool_t *pool, <a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *db)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">apr_status_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rxv__spin__database__functions.html#gaba5eef03ee065f9b598cb3f5b8b9ba5f">rxv_spin_db_end</a> (<a class="el" href="rxv__spin_8h.html#a40fe17e33fb3d0772f9844ba872f8af5">rxv_spin_db_txn_t</a> *txn)</td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Database functions (mod_spin API) </p>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga1fb4a463a6ad6f8105c55481ccd9434e"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_pool" ref="ga1fb4a463a6ad6f8105c55481ccd9434e" args="(rxv_spin_db_t *db)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_pool_t* rxv_spin_db_pool </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Retrieve database specific pool.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to database specific pool, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#ga1fb4a463a6ad6f8105c55481ccd9434e">rxv_spin_db_pool</a>(db);
</pre></div> </dd></dl>

</div>
</div>
<a class="anchor" id="ga5c178a21980b4694ec5f06ba7144a69d"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_cinfo" ref="ga5c178a21980b4694ec5f06ba7144a69d" args="(rxv_spin_db_t *db)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* rxv_spin_db_cinfo </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Retrieve database connection information.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to connection information, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#ga5c178a21980b4694ec5f06ba7144a69d">rxv_spin_db_cinfo</a>(db);
</pre></div> </dd></dl>

</div>
</div>
<a class="anchor" id="ga4b555c8da55f2d8db1cf4b3ed83dfe9e"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_driver" ref="ga4b555c8da55f2d8db1cf4b3ed83dfe9e" args="(rxv_spin_db_t *db)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const apr_dbd_driver_t* rxv_spin_db_driver </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Retrieve database driver.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to database driver, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#ga4b555c8da55f2d8db1cf4b3ed83dfe9e">rxv_spin_db_driver</a>(db);
</pre></div> </dd></dl>

</div>
</div>
<a class="anchor" id="gaa10145e6dcf81f46b3fc81c534129e25"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_handle" ref="gaa10145e6dcf81f46b3fc81c534129e25" args="(rxv_spin_db_t *db)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_dbd_t* rxv_spin_db_handle </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Retrieve database handle.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to database handle, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#gaa10145e6dcf81f46b3fc81c534129e25">rxv_spin_db_handle</a>(db);
</pre></div> </dd></dl>

</div>
</div>
<a class="anchor" id="ga307c32d69cac568eb076563764005b22"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_txn" ref="ga307c32d69cac568eb076563764005b22" args="(rxv_spin_db_txn_t *txn)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_dbd_transaction_t* rxv_spin_db_txn </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#a40fe17e33fb3d0772f9844ba872f8af5">rxv_spin_db_txn_t</a> *&nbsp;</td>
          <td class="paramname"> <em>txn</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Retrieve database transaction.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>txn</em>&nbsp;</td><td>Database transaction </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to database transaction, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#ga307c32d69cac568eb076563764005b22">rxv_spin_db_txn</a>(txn);
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>This function returns underlying Apache Portable Runtime DBD transaction. </dd></dl>

</div>
</div>
<a class="anchor" id="gab06735f0747d4e9c9aa20c03207c0aaf"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_open" ref="gab06735f0747d4e9c9aa20c03207c0aaf" args="(rxv_spin_ctx_t *ctx, const char *conninfo)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a>* rxv_spin_db_open </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__rxv__spin__context__functions.html#ga30804b0a2d35ece781c2d23fead40600">rxv_spin_ctx_t</a> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>conninfo</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Connect to a database and optionally pool the connection.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>Context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>conninfo</em>&nbsp;</td><td>Connection string </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to a database connection, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#gab06735f0747d4e9c9aa20c03207c0aaf">rxv_spin_db_open</a>(ctx,<span class="stringliteral">&quot;pgsql:dbname=spintest&quot;</span>);
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>Whether or not the connection will be pooled, depends on what has been set as connection pool value in the context. And this depends on the SpinConnPool configuration parameter (default is on). Valid database prefixes are pgsql, mysql, sqlite2, sqlite3, oracle, freetds etc., depending on the drivers that have been compiled and linked with Apache Portable Runtime Utilities Library (APU). </dd>
<dd>
Connections will be pooled by using connection string as a key into the hash. So, if a connection string differs in the amount of white space or case, this will open a new connection. </dd>
<dd>
Cleanup will be registered with the context pool. </dd></dl>

</div>
</div>
<a class="anchor" id="ga8a59c484a035233fda8ad3ff3bb63d48"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_close" ref="ga8a59c484a035233fda8ad3ff3bb63d48" args="(rxv_spin_ctx_t *ctx, rxv_spin_db_t *db)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_status_t rxv_spin_db_close </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__rxv__spin__context__functions.html#ga30804b0a2d35ece781c2d23fead40600">rxv_spin_ctx_t</a> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Close a database connection.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>Context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Pointer to a database connection </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>APR_SUCCESS on success, otherwise an error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#ga8a59c484a035233fda8ad3ff3bb63d48">rxv_spin_db_close</a>(ctx,db);
</pre></div> </dd></dl>

</div>
</div>
<a class="anchor" id="ga4d835116dcf16db082e93fb49c999f14"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_status" ref="ga4d835116dcf16db082e93fb49c999f14" args="(rxv_spin_ctx_t *ctx, rxv_spin_db_t *db)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_status_t rxv_spin_db_status </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__rxv__spin__context__functions.html#ga30804b0a2d35ece781c2d23fead40600">rxv_spin_ctx_t</a> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get the status of the connection.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>Context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>APR_SUCCESS if OK, otherwise an error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <span class="keywordflow">if</span>(<a class="code" href="group__rxv__spin__database__functions.html#ga4d835116dcf16db082e93fb49c999f14">rxv_spin_db_status</a>(ctx,db)!=APR_SUCCESS){
   ...
 }
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>If this function returns any code other than success (for valid ctx and db), the database connection should not be used again. </dd></dl>

</div>
</div>
<a class="anchor" id="ga1414eace1c9d5c6a604206f05be95c3b"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_data" ref="ga1414eace1c9d5c6a604206f05be95c3b" args="(apr_pool_t *pool, rxv_spin_db_t *db, apr_dbd_results_t *dbdres)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__rxv__spin__data__functions.html#gaf40e2976488da2cfc4c1ec4464f8c6be">rxv_spin_data_t</a>* rxv_spin_db_data </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&nbsp;</td>
          <td class="paramname"> <em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">apr_dbd_results_t *&nbsp;</td>
          <td class="paramname"> <em>dbdres</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Convert APR DBD SQL result set to mod_spin database result.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pool</em>&nbsp;</td><td>Pool used for memory allocation </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dbdres</em>&nbsp;</td><td>APR DBD results </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Valid rxv_spin_data_t pointer, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#ga1414eace1c9d5c6a604206f05be95c3b">rxv_spin_db_data</a>(pool,conn,db,dbdres);
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>Make sure the pool passed into this function is the same one used for select or you will have memory allocation problems. </dd></dl>

</div>
</div>
<a class="anchor" id="ga2336419159b06c0b91e4570c58a771ca"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_select" ref="ga2336419159b06c0b91e4570c58a771ca" args="(apr_pool_t *pool, rxv_spin_db_t *db, const char *query)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__rxv__spin__data__functions.html#gaf40e2976488da2cfc4c1ec4464f8c6be">rxv_spin_data_t</a>* rxv_spin_db_select </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&nbsp;</td>
          <td class="paramname"> <em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>query</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Execute a database query that returns a result set (i.e. SELECT).</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pool</em>&nbsp;</td><td>Pool used for memory allocation </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>SQL query to be performed </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Valid rxv_spin_data_t pointer, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> result=<a class="code" href="group__rxv__spin__database__functions.html#ga2336419159b06c0b91e4570c58a771ca">rxv_spin_db_select</a>(pool,db,<span class="stringliteral">&quot;select * from spintest&quot;</span>);
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>If the query finished successfully, returned data will not be NULL, but a pointer to an empty data structure. </dd></dl>

</div>
</div>
<a class="anchor" id="gae8391448cb15bb0c372932546999a630"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_query" ref="gae8391448cb15bb0c372932546999a630" args="(apr_pool_t *pool, rxv_spin_db_t *db, const char *query)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rxv_spin_db_query </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&nbsp;</td>
          <td class="paramname"> <em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>query</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Execute a database query that doesn't return a result set.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pool</em>&nbsp;</td><td>Pool used for memory allocation </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>SQL query to be performed </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Number of rows affected, -1 on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> nrows=<a class="code" href="group__rxv__spin__database__functions.html#gae8391448cb15bb0c372932546999a630">rxv_spin_db_query</a>(pool,db,<span class="stringliteral">&quot;delete from spintest&quot;</span>);
</pre></div> </dd></dl>

</div>
</div>
<a class="anchor" id="ga2a5964b4c6405c1c6d54009dab7fe158"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_pselect" ref="ga2a5964b4c6405c1c6d54009dab7fe158" args="(apr_pool_t *pool, rxv_spin_db_t *db, const char *query,...)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__rxv__spin__data__functions.html#gaf40e2976488da2cfc4c1ec4464f8c6be">rxv_spin_data_t</a>* rxv_spin_db_pselect </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&nbsp;</td>
          <td class="paramname"> <em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>query</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&nbsp;</td>
          <td class="paramname"> <em>...</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Prepare and execute database that returns a result set (i.e. SELECT)</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pool</em>&nbsp;</td><td>Pool used for memory allocation </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>SQL query to be prepared and executed </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>...</em>&nbsp;</td><td>Parameters for prepared statement, (constant pointer to nul terminated string) </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Valid rxv_spin_data_t pointer, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> result=<a class="code" href="group__rxv__spin__database__functions.html#ga2a5964b4c6405c1c6d54009dab7fe158">rxv_spin_db_pselect</a>(pool,db,<span class="stringliteral">&quot;select * from names where name = %s&quot;</span>,
                            <span class="stringliteral">&quot;Dude&quot;</span>,NULL);
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>Prepared statements done using this function only accept string parameters. For anything more complicated, use native database API and then convert the data so it can be used within the context. Make sure the number of paramters passed is correct, or you may be in for a nasty surprise when your program segfaults. </dd></dl>
<dl class="warning"><dt><b>Warning:</b></dt><dd>Make sure you use %s where the replaced parameter is supposed to go. This is the official Apache Portable Runtime DBD way :-). </dd>
<dd>
The last parameter in the list should be NULL and it has to be specified even when there are no other parameters. </dd></dl>

</div>
</div>
<a class="anchor" id="ga04a11df00ab1649a68d822b1cd1e955a"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_pquery" ref="ga04a11df00ab1649a68d822b1cd1e955a" args="(apr_pool_t *pool, rxv_spin_db_t *db, const char *query,...)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int rxv_spin_db_pquery </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&nbsp;</td>
          <td class="paramname"> <em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>query</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&nbsp;</td>
          <td class="paramname"> <em>...</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Prepare and execute database that doesn't return a result set.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pool</em>&nbsp;</td><td>Pool used for memory allocation </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>SQL query to be prepared and executed </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>...</em>&nbsp;</td><td>Parameters for prepared statement, (constant pointer to nul terminated string) </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Number of rows affected, -1 on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> nrows=<a class="code" href="group__rxv__spin__database__functions.html#ga04a11df00ab1649a68d822b1cd1e955a">rxv_spin_db_pquery</a>(pool,db,<span class="stringliteral">&quot;delete from names where name = %s&quot;</span>,
                          <span class="stringliteral">&quot;Dude&quot;</span>,NULL);
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>Prepared statements done using this function only accept string parameters. For anything more complicated, use native database API and then convert the data so it can be used within the context. Make sure the number of paramters passed is correct, or you may be in for a nasty surprise when your program segfaults. </dd></dl>
<dl class="warning"><dt><b>Warning:</b></dt><dd>Make sure you use %s where the replaced parameter is supposed to go. This is the official Apache Portable Runtime DBD way :-). </dd>
<dd>
The last parameter in the list should be NULL and it has to be specified even when there are no other parameters. </dd></dl>

</div>
</div>
<a class="anchor" id="ga155ab21e150496c1e9cf0115e8c1ce41"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_start" ref="ga155ab21e150496c1e9cf0115e8c1ce41" args="(apr_pool_t *pool, rxv_spin_db_t *db)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="rxv__spin_8h.html#a40fe17e33fb3d0772f9844ba872f8af5">rxv_spin_db_txn_t</a>* rxv_spin_db_start </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&nbsp;</td>
          <td class="paramname"> <em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#aa7861069f3410c1904a3f959f8e3c69b">rxv_spin_db_t</a> *&nbsp;</td>
          <td class="paramname"> <em>db</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Start a transaction.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pool</em>&nbsp;</td><td>Pool used for memory allocation </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>db</em>&nbsp;</td><td>Database connection </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to a valid transaction, NULL on error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> txn=<a class="code" href="group__rxv__spin__database__functions.html#ga155ab21e150496c1e9cf0115e8c1ce41">rxv_spin_db_start</a>(pool,db);
</pre></div> </dd></dl>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>The pool is also used to register a cleanup function for the transaction. It makes little sense to have transactions more permanent than one request, so this should always be the request pool, which can be obtained from the context. </dd></dl>

</div>
</div>
<a class="anchor" id="gaba5eef03ee065f9b598cb3f5b8b9ba5f"></a><!-- doxytag: member="rxv_spin.h::rxv_spin_db_end" ref="gaba5eef03ee065f9b598cb3f5b8b9ba5f" args="(rxv_spin_db_txn_t *txn)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_status_t rxv_spin_db_end </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="rxv__spin_8h.html#a40fe17e33fb3d0772f9844ba872f8af5">rxv_spin_db_txn_t</a> *&nbsp;</td>
          <td class="paramname"> <em>txn</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>End a transaction.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>txn</em>&nbsp;</td><td>Database transaction </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>APR_SUCCESS on success, otherwise an error </dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="group__rxv__spin__database__functions.html#gaba5eef03ee065f9b598cb3f5b8b9ba5f">rxv_spin_db_end</a>(txn);
</pre></div> </dd></dl>

</div>
</div>
</div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&nbsp;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&nbsp;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr size="1"/><address style="text-align: right;"><small>Generated on 29 Dec 2009 for mod_spin by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>