| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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"/><meta http-equiv="X-UA-Compatible" content="IE=9"/><meta name="generator" content="Doxygen 1.8.20"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>openPilotLog: src/database/db.h Source File</title><link href="tabs.css" rel="stylesheet" type="text/css"/><script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="dynsections.js"></script><link href="navtree.css" rel="stylesheet" type="text/css"/><script type="text/javascript" src="resize.js"></script><script type="text/javascript" src="navtreedata.js"></script><script type="text/javascript" src="navtree.js"></script><link href="search/search.css" rel="stylesheet" type="text/css"/><script type="text/javascript" src="search/searchdata.js"></script><script type="text/javascript" src="search/search.js"></script><link href="doxygen.css" rel="stylesheet" type="text/css" /><link href="custom_dark_theme.css" rel="stylesheet" type="text/css"/></head><body><div id="top"><!-- do not remove this div, it is closed by doxygen! --><div id="titlearea"><table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;">  <td id="projectalign" style="padding-left: 0.5em;">   <div id="projectname">openPilotLog   </div>  </td> </tr> </tbody></table></div><!-- end header part --><!-- Generated by Doxygen 1.8.20 --><script type="text/javascript">/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */var searchBox = new SearchBox("searchBox", "search",false,'Search');/* @license-end */</script><script type="text/javascript" src="menudata.js"></script><script type="text/javascript" src="menu.js"></script><script type="text/javascript">/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */$(function() {  initMenu('',true,false,'search.php','Search');  $(document).ready(function() { init_search(); });});/* @license-end */</script><div id="main-nav"></div></div><!-- top --><div id="side-nav" class="ui-resizable side-nav-resizable">  <div id="nav-tree">    <div id="nav-tree-contents">      <div id="nav-sync" class="sync"></div>    </div>  </div>  <div id="splitbar" style="-moz-user-select:none;"        class="ui-resizable-handle">  </div></div><script type="text/javascript">/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */$(document).ready(function(){initNavTree('db_8h_source.html',''); initResizable(); });/* @license-end */</script><div id="doc-content"><!-- window showing the filter options --><div id="MSearchSelectWindow"     onmouseover="return searchBox.OnSearchSelectShow()"     onmouseout="return searchBox.OnSearchSelectHide()"     onkeydown="return searchBox.OnSearchSelectKey(event)"></div><!-- iframe showing the search results (closed by default) --><div id="MSearchResultsWindow"><iframe src="javascript:void(0)" frameborder="0"         name="MSearchResults" id="MSearchResults"></iframe></div><div class="header">  <div class="headertitle"><div class="title">db.h</div>  </div></div><!--header--><div class="contents"><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *openPilot Log - A FOSS Pilot Logbook Application</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *Copyright (C) 2020  Felix Turowsky</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *(at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *along with this program.  If not, see <https://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> */</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="preprocessor">#ifndef DB_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#define DB_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>  </div><div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <QCoreApplication></span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <QSqlDatabase></span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <QSqlDriver></span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <QSqlError></span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <QSqlQuery></span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <QSqlRecord></span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <QSqlField></span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <QDir></span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include <QDebug></span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>  </div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="class_db.html">   39</a></span> <span class="keyword">class </span><a class="code" href="class_db.html">Db</a></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span> {</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>     <span class="keyword">public</span>:</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>         <span class="keyword">static</span> <a class="code" href="class_db.html">Db</a>& get()</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>         {</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>             <span class="keyword">static</span> <a class="code" href="class_db.html">Db</a> instance;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>  </div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>             <span class="keywordflow">return</span> instance;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>         }</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="class_db.html#a2eb74695b795bf25b6ddfd41c86bcc7b">   52</a></span>         <span class="keyword">enum</span> <a class="code" href="class_db.html#a2eb74695b795bf25b6ddfd41c86bcc7b">editRole</a> {createNew, editExisting};</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">   58</a></span>         <span class="keyword">enum</span> <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">matchType</a> {exactMatch, partialMatch};       </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="class_db.html#af9dd776816e7941fec7b631eb2ff40b7">   64</a></span>         <span class="keyword">static</span> <span class="keywordtype">void</span>             <a class="code" href="class_db.html#af9dd776816e7941fec7b631eb2ff40b7">connect</a>(){get().iconnect();}</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="class_db.html#a9bc721f0e6cd55a0dc4b6a690794f05a">   68</a></span>         <span class="keyword">static</span> <span class="keywordtype">void</span>             <a class="code" href="class_db.html#a9bc721f0e6cd55a0dc4b6a690794f05a">disconnect</a>(){get().idisconnect();}</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>  </div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="class_db.html#aca719513ddc25d3628761da143cfde9e">   74</a></span>         <span class="keyword">static</span> QSqlDatabase     <a class="code" href="class_db.html#aca719513ddc25d3628761da143cfde9e">Database</a>(){<span class="keywordflow">return</span> get().iDatabase();}</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>  </div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="class_db.html#a05ccd0af0703255fc249e5cb9e2eb945">   83</a></span>         <span class="keyword">static</span> <span class="keywordtype">bool</span>             <a class="code" href="class_db.html#a05ccd0af0703255fc249e5cb9e2eb945">exists</a>(QString column, QString table, QString checkColumn,</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>                                        QString value, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match)</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>         {</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>             <span class="keywordflow">return</span> get().iexists(column, table, checkColumn, value, match);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>         }</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="class_db.html#a939456015e76b398af918656791e3951">   99</a></span>         <span class="keyword">static</span> <span class="keywordtype">bool</span>             <a class="code" href="class_db.html#a939456015e76b398af918656791e3951">singleUpdate</a>(QString table, QString column, QString value,</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                              QString checkColumn, QString checkvalue, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match){</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>             <span class="keywordflow">return</span> get().isingleUpdate(table,column,value,checkColumn,checkvalue,match);</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>         }</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="class_db.html#addcbd285617f8ef82f79c276d7bddfe1">  111</a></span>         <span class="keyword">static</span> QString          <a class="code" href="class_db.html#addcbd285617f8ef82f79c276d7bddfe1">singleSelect</a>(QString column, QString table, QString checkColumn,</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>                                              QString value, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match){</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>             <span class="keywordflow">return</span> get().isingleSelect(column,table,checkColumn,value,match);</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>         }</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="class_db.html#a8dcb618ebfe1ae337bb0972bec37cbd2">  124</a></span>         <span class="keyword">static</span> QVector<QString> <a class="code" href="class_db.html#a8dcb618ebfe1ae337bb0972bec37cbd2">multiSelect</a>(QVector<QString> columns, QString table,</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>                                             QString checkColumn, QString value, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match){</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>             <span class="keywordflow">return</span> get().imultiSelect(columns,table,checkColumn,value,match);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>         }</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="class_db.html#aa6c52eda14d37c9226b07e36fe6d0f86">  134</a></span>         <span class="keyword">static</span> QVector<QString> <a class="code" href="class_db.html#aa6c52eda14d37c9226b07e36fe6d0f86">multiSelect</a>(QVector<QString> columns, QString table){</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>             <span class="keywordflow">return</span> get().imultiSelect(columns, table);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>         }</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="class_db.html#aaccb09bc96d531bbc7019a7df81859ca">  143</a></span>         <span class="keyword">static</span> QVector<QString> <a class="code" href="class_db.html#aaccb09bc96d531bbc7019a7df81859ca">customQuery</a>(QString query, <span class="keywordtype">int</span> returnValues){</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>             <span class="keywordflow">return</span> get().icustomQuery(query, returnValues);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>         }</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>  </div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keyword">private</span>:</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>         <a class="code" href="class_db.html">Db</a>() {}</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>         <span class="keywordtype">void</span>             iconnect();</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>         <span class="keywordtype">void</span>             idisconnect();</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>         QSqlDatabase     iDatabase();</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>         <span class="keywordtype">bool</span>             iexists(QString column, QString table, QString checkColumn,</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>                                        QString value, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>         <span class="keywordtype">bool</span>             isingleUpdate(QString table, QString column, QString value,</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>                                              QString checkColumn, QString checkvalue, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>         QString          isingleSelect(QString column, QString table, QString checkColumn,</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                              QString value, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match);</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>         QVector<QString> imultiSelect(QVector<QString> columns, QString table,</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                             QString checkColumn, QString value, <a class="code" href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a> match);</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>         QVector<QString> imultiSelect(QVector<QString> columns, QString table);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>         QVector<QString> icustomQuery(QString query, <span class="keywordtype">int</span> returnValues);</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>  </div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keyword">public</span>:</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>         <span class="comment">// [George]: Why delete these in particular?</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>         <a class="code" href="class_db.html">Db</a>(<a class="code" href="class_db.html">Db</a> <span class="keyword">const</span>&)              = <span class="keyword">delete</span>;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>         <span class="keywordtype">void</span> operator=(<a class="code" href="class_db.html">Db</a> <span class="keyword">const</span>&)  = <span class="keyword">delete</span>;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span> };</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>  </div><div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor">#endif // DB_H</span></div></div><!-- fragment --></div><!-- contents --></div><!-- doc-content --><div class="ttc" id="aclass_db_html"><div class="ttname"><a href="class_db.html">Db</a></div><div class="ttdoc">The Db class provides a basic API for accessing the database programatically. It is used to set up th...</div><div class="ttdef"><b>Definition:</b> db.h:40</div></div><div class="ttc" id="aclass_db_html_addcbd285617f8ef82f79c276d7bddfe1"><div class="ttname"><a href="class_db.html#addcbd285617f8ef82f79c276d7bddfe1">Db::singleSelect</a></div><div class="ttdeci">static QString singleSelect(QString column, QString table, QString checkColumn, QString value, Db::matchType match)</div><div class="ttdoc">singleSelect Returns a single value from the database with a sqlite WHERE statement</div><div class="ttdef"><b>Definition:</b> db.h:111</div></div><div class="ttc" id="aclass_db_html_aa6c52eda14d37c9226b07e36fe6d0f86"><div class="ttname"><a href="class_db.html#aa6c52eda14d37c9226b07e36fe6d0f86">Db::multiSelect</a></div><div class="ttdeci">static QVector< QString > multiSelect(QVector< QString > columns, QString table)</div><div class="ttdoc">Db::multiSelect Returns a complete column(s) for a given table.</div><div class="ttdef"><b>Definition:</b> db.h:134</div></div><div class="ttc" id="aclass_db_html_a9bc721f0e6cd55a0dc4b6a690794f05a"><div class="ttname"><a href="class_db.html#a9bc721f0e6cd55a0dc4b6a690794f05a">Db::disconnect</a></div><div class="ttdeci">static void disconnect()</div><div class="ttdoc">disconnect Closes and removes the default database connection.</div><div class="ttdef"><b>Definition:</b> db.h:68</div></div><div class="ttc" id="aclass_db_html_a8dcb618ebfe1ae337bb0972bec37cbd2"><div class="ttname"><a href="class_db.html#a8dcb618ebfe1ae337bb0972bec37cbd2">Db::multiSelect</a></div><div class="ttdeci">static QVector< QString > multiSelect(QVector< QString > columns, QString table, QString checkColumn, QString value, Db::matchType match)</div><div class="ttdoc">Db::multiSelect Returns multiple values from the database with a sqlite WHERE statement.</div><div class="ttdef"><b>Definition:</b> db.h:124</div></div><div class="ttc" id="aclass_db_html_a8caadbd9713c345384823aa2f8cb951c"><div class="ttname"><a href="class_db.html#a8caadbd9713c345384823aa2f8cb951c">Db::matchType</a></div><div class="ttdeci">matchType</div><div class="ttdoc">The matchType enum {exactMatch, partialMatch} is used to determine the matching when using a WHERE sq...</div><div class="ttdef"><b>Definition:</b> db.h:58</div></div><div class="ttc" id="aclass_db_html_a939456015e76b398af918656791e3951"><div class="ttname"><a href="class_db.html#a939456015e76b398af918656791e3951">Db::singleUpdate</a></div><div class="ttdeci">static bool singleUpdate(QString table, QString column, QString value, QString checkColumn, QString checkvalue, Db::matchType match)</div><div class="ttdoc">Db::singleUpdate Updates a single value in the database. Query format: UPDATE table SET column = valu...</div><div class="ttdef"><b>Definition:</b> db.h:99</div></div><div class="ttc" id="aclass_db_html_a2eb74695b795bf25b6ddfd41c86bcc7b"><div class="ttname"><a href="class_db.html#a2eb74695b795bf25b6ddfd41c86bcc7b">Db::editRole</a></div><div class="ttdeci">editRole</div><div class="ttdoc">The editRole enum {createNew, editExisting} is used to differentiate between creating a new entry in ...</div><div class="ttdef"><b>Definition:</b> db.h:52</div></div><div class="ttc" id="aclass_db_html_aca719513ddc25d3628761da143cfde9e"><div class="ttname"><a href="class_db.html#aca719513ddc25d3628761da143cfde9e">Db::Database</a></div><div class="ttdeci">static QSqlDatabase Database()</div><div class="ttdoc">Can be used to access the database connection.</div><div class="ttdef"><b>Definition:</b> db.h:74</div></div><div class="ttc" id="aclass_db_html_af9dd776816e7941fec7b631eb2ff40b7"><div class="ttname"><a href="class_db.html#af9dd776816e7941fec7b631eb2ff40b7">Db::connect</a></div><div class="ttdeci">static void connect()</div><div class="ttdoc">connect establishes the database connection. Only needs to be called once within the application....</div><div class="ttdef"><b>Definition:</b> db.h:64</div></div><div class="ttc" id="aclass_db_html_a05ccd0af0703255fc249e5cb9e2eb945"><div class="ttname"><a href="class_db.html#a05ccd0af0703255fc249e5cb9e2eb945">Db::exists</a></div><div class="ttdeci">static bool exists(QString column, QString table, QString checkColumn, QString value, Db::matchType match)</div><div class="ttdoc">Db::exists checks if a certain value exists in the database with a sqlite WHERE statement.</div><div class="ttdef"><b>Definition:</b> db.h:83</div></div><div class="ttc" id="aclass_db_html_aaccb09bc96d531bbc7019a7df81859ca"><div class="ttname"><a href="class_db.html#aaccb09bc96d531bbc7019a7df81859ca">Db::customQuery</a></div><div class="ttdeci">static QVector< QString > customQuery(QString query, int returnValues)</div><div class="ttdoc">Db::customQuery Can be used to send a complex query to the database.</div><div class="ttdef"><b>Definition:</b> db.h:143</div></div><!-- start footer part --><div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->  <ul>    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_803ee67260c130b45d29089798491ab2.html">database</a></li><li class="navelem"><b>db.h</b></li>    <li class="footer">Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20 </li>  </ul></div></body></html>
 |