diff options
| author | woro <woro@e10066b5-e1e2-0310-b819-94efdf66514b> | 2008-04-13 05:48:48 +0000 |
|---|---|---|
| committer | woro <woro@e10066b5-e1e2-0310-b819-94efdf66514b> | 2008-04-13 05:48:48 +0000 |
| commit | 3dc9b33fb7a0acf44c5bece2824b7cbb31658f17 (patch) | |
| tree | e6032c867a992201a93f0cec172b546ed026deca | |
| parent | 2ab0a3acf1540aff556d76331791858e0b1000f4 (diff) | |
| download | vdr-plugin-muggle-3dc9b33fb7a0acf44c5bece2824b7cbb31658f17.tar.gz vdr-plugin-muggle-3dc9b33fb7a0acf44c5bece2824b7cbb31658f17.tar.bz2 | |
SQLite3: in some situations, muggle opened/closed the database
very often. And sqlite did not close the file descriptor. Now
open/close it less often
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk/muggle-plugin@1179 e10066b5-e1e2-0310-b819-94efdf66514b
| -rw-r--r-- | mg_db.c | 17 | ||||
| -rw-r--r-- | mg_db.h | 5 | ||||
| -rw-r--r-- | mg_db_gd_sqlite.c | 4 |
3 files changed, 20 insertions, 6 deletions
@@ -512,24 +512,33 @@ mgKeyNormal::AddIdClause(mgDb *db,mgParts &result,string what) const } bool -mgKey::LoadMap() const +mgKey::LoadMapFrom(mgDb *db) const { if (map_sql().empty()) return false; - mgDb *db = GenerateDB(); db->LoadMapInto(map_sql(), &map_ids[Type()], &map_values[Type()]); - delete db; return true; } +mgKeyMaps::mgKeyMaps() { + kmdb = 0; +} + +mgKeyMaps::~mgKeyMaps() { + delete kmdb; +} + mgKeyMaps KeyMaps; + bool mgKeyMaps::loadvalues (mgKeyTypes kt) const { if (map_ids[kt].size()>0) return true; mgKey* k = ktGenerate(kt); - bool result = k->LoadMap(); + if (!kmdb) + kmdb = GenerateDB(); + bool result = k->LoadMapFrom(kmdb); delete k; return result; } @@ -256,7 +256,7 @@ class mgKey virtual mgKeyTypes Type() const = 0; virtual mgSortBy SortBy() const { return mgSortByValue; } virtual bool Enabled(mgDb *db) { return true; } - virtual bool LoadMap() const; + virtual bool LoadMapFrom(mgDb *db) const; protected: virtual string map_sql() const { return ""; } }; @@ -317,7 +317,10 @@ class mgKeyMaps public: string value(mgKeyTypes kt, string idstr) const; string id(mgKeyTypes kt, string valstr) const; + mgKeyMaps(); + ~mgKeyMaps(); private: + mutable mgDb* kmdb; bool loadvalues (mgKeyTypes kt) const; }; diff --git a/mg_db_gd_sqlite.c b/mg_db_gd_sqlite.c index a7a6198..68fb03e 100644 --- a/mg_db_gd_sqlite.c +++ b/mg_db_gd_sqlite.c @@ -98,6 +98,8 @@ mgDbGd::mgDbGd(bool SeparateThread) { mgDbGd::~mgDbGd() { sqlite3_close (m_db); +// this does not release all fds even if no transaction is pending! +// try not to call sqlite3_open more often than necessary m_db = 0; } @@ -282,10 +284,10 @@ mgDbGd::ConnectDatabase () { if (stat(the_setup.DbDatadir,&stbuf)) mkdir(the_setup.DbDatadir,0755); char *s=sqlite3_mprintf("%s/%s.sqlite",the_setup.DbDatadir,the_setup.DbName); - mgDebug(1,"%X opening data base %s",m_db,s); // rework this when sqlite3.5 is available, use sqlite3_open_v2 // and do not try to create db here int rc = sqlite3_open(s,&m_db); + mgDebug(1,"opening data base %s with handle %04X",s,m_db); if (rc!=SQLITE_OK) mgWarning("Cannot open/create SQLite database %s:%d/%s", s,rc,sqlite3_errmsg(m_db)); |
