summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-02-27 14:53:45 +0000
committerwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-02-27 14:53:45 +0000
commitf417207c314d09fe7ef2a5a332f2ee1ca7ef943d (patch)
tree8a0ee98160a814aa75b6f20c67a62cb55f81bdee
parentf106c1b4a0d8e6d66e690a51f1e13a9d7a62d7a3 (diff)
downloadvdr-plugin-muggle-f417207c314d09fe7ef2a5a332f2ee1ca7ef943d.tar.gz
vdr-plugin-muggle-f417207c314d09fe7ef2a5a332f2ee1ca7ef943d.tar.bz2
remove m_db from mgKey and mgOrder
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/branches/0.1.3-wr@515 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r--mg_db.c19
-rw-r--r--mg_order.c127
-rw-r--r--mg_order.h15
3 files changed, 59 insertions, 102 deletions
diff --git a/mg_db.c b/mg_db.c
index 99c4f35..f215e92 100644
--- a/mg_db.c
+++ b/mg_db.c
@@ -374,7 +374,7 @@ unsigned int
mgSelection::RemoveFromCollection (const string Name)
{
if (!m_db) return 0;
- mgParts p = order.Parts(m_level,false);
+ mgParts p = order.Parts(m_db,m_level,false);
string sql = p.sql_delete_from_collection(id(keyCollection,Name));
exec_sql (sql);
unsigned int removed = mysql_affected_rows (m_db);
@@ -601,7 +601,7 @@ mgSelection::tracks () const
{
if (!m_db) return m_tracks;
if (!m_current_tracks.empty()) return m_tracks;
- mgParts p = order.Parts(m_level);
+ mgParts p = order.Parts(m_db,m_level);
p.fields.clear();
p.fields.push_back("tracks.id");
p.fields.push_back("tracks.title");
@@ -619,7 +619,7 @@ mgSelection::tracks () const
p.tables.push_back("tracks");
p.tables.push_back("album");
for (unsigned int i = m_level; i<order.size(); i++)
- p += order.Key(i)->Parts(true);
+ p += order.Key(i)->Parts(m_db,true);
m_current_tracks = p.sql_select(false);
m_tracks.clear ();
MYSQL_RES *rows = exec_sql (m_current_tracks);
@@ -812,7 +812,6 @@ void
mgSelection::setDB(MYSQL *db)
{
m_db = db;
- order.setDB(db);
}
void
@@ -821,7 +820,6 @@ mgSelection::setOrder(mgOrder* o)
if (o)
{
order = *o;
- order.setDB(m_db);
}
else
mgWarning("mgSelection::setOrder(0)");
@@ -864,7 +862,6 @@ void mgSelection::InitFrom(const mgSelection* s)
map_values = s->map_values;
map_ids = s->map_ids;
order = s->order;
- order.setDB(m_db);
m_level = s->m_level;
m_position = s->m_position;
m_trackid = s->m_trackid;
@@ -932,7 +929,7 @@ mgSelection::refreshValues () const
return;
if (m_current_values.empty())
{
- mgParts p = order.Parts(m_level);
+ mgParts p = order.Parts(m_db,m_level);
m_current_values = p.sql_select();
values.strings.clear ();
m_ids.clear ();
@@ -1337,7 +1334,7 @@ mgSelection::loadvalues (mgKeyTypes kt) const
if (map_ids.count(kt)>0)
return true;
map<string,string>& idmap = map_ids[kt];
- mgKey* k = ktGenerate(kt,m_db);
+ mgKey* k = ktGenerate(kt);
if (k->map_idfield().empty())
{
delete k;
@@ -1381,9 +1378,9 @@ mgSelection::keycount(mgKeyTypes kt)
int& count = keycounts[int(kt-mgKeyTypesLow)];
if (count==-1)
{
- mgKey* k = ktGenerate(kt,m_db);
- if (k->Enabled())
- count = exec_count(k->Parts(true).sql_count());
+ mgKey* k = ktGenerate(kt);
+ if (k->Enabled(m_db))
+ count = exec_count(k->Parts(m_db,true).sql_count());
else
count = 0;
delete k;
diff --git a/mg_order.c b/mg_order.c
index 3869194..6a4c855 100644
--- a/mg_order.c
+++ b/mg_order.c
@@ -28,7 +28,7 @@ string
sql_string (MYSQL *db, const string s)
{
if (!db)
- return "";
+ return "'" + s + "'";
char *buf = (char *) malloc (s.size () * 2 + 1);
mysql_real_escape_string (db, buf, s.c_str (), s.size ());
string result = "'" + string (buf) + "'";
@@ -158,7 +158,7 @@ class mgKeyNormal : public mgKey {
public:
mgKeyNormal(const mgKeyNormal& k);
mgKeyNormal(const mgKeyTypes kt, string table, string field);
- virtual mgParts Parts(bool orderby=false) const;
+ virtual mgParts Parts(MYSQL *db,bool orderby=false) const;
string value() const;
string id() const;
void set(string value,string id);
@@ -166,8 +166,8 @@ class mgKeyNormal : public mgKey {
virtual string expr() const { return m_table + "." + m_field; }
virtual string table() const { return m_table; }
protected:
- string IdClause(string what,string::size_type start=0,string::size_type len=string::npos) const;
- void AddIdClause(mgParts &result,string what) const;
+ string IdClause(MYSQL *db,string what,string::size_type start=0,string::size_type len=string::npos) const;
+ void AddIdClause(MYSQL *db,mgParts &result,string what) const;
string m_id;
string m_field;
private:
@@ -184,19 +184,19 @@ class mgKeyDate : public mgKeyNormal {
class mgKeyTrack : public mgKeyNormal {
public:
mgKeyTrack() : mgKeyNormal(keyTrack,"tracks","tracknb") {};
- mgParts Parts(bool orderby=false) const;
+ mgParts Parts(MYSQL *db,bool orderby=false) const;
};
class mgKeyAlbum : public mgKeyNormal {
public:
mgKeyAlbum() : mgKeyNormal(keyAlbum,"album","title") {};
- mgParts Parts(bool orderby=false) const;
+ mgParts Parts(MYSQL *db,bool orderby=false) const;
};
mgParts
-mgKeyAlbum::Parts(bool orderby) const
+mgKeyAlbum::Parts(MYSQL *db,bool orderby) const
{
- mgParts result = mgKeyNormal::Parts(orderby);
+ mgParts result = mgKeyNormal::Parts(db,orderby);
result.tables.push_back("tracks");
return result;
}
@@ -205,7 +205,7 @@ class mgKeyFolder : public mgKeyNormal {
public:
mgKeyFolder(mgKeyTypes kt,const char *fname)
: mgKeyNormal(kt,"tracks",fname) { m_enabled=-1;};
- bool Enabled();
+ bool Enabled(MYSQL *db);
private:
int m_enabled;
};
@@ -228,15 +228,15 @@ class mgKeyFolder4 : public mgKeyFolder {
};
bool
-mgKeyFolder::Enabled()
+mgKeyFolder::Enabled(MYSQL *db)
{
if (m_enabled<0)
{
- if (!m_db)
+ if (!db)
return false;
char *b;
asprintf(&b,"DESCRIBE tracks %s",m_field.c_str());
- MYSQL_RES * rows = exec_sql (m_db, b);
+ MYSQL_RES * rows = exec_sql (db, b);
free(b);
if (rows)
{
@@ -251,12 +251,14 @@ class mgKeyGenres : public mgKeyNormal {
public:
mgKeyGenres() : mgKeyNormal(keyGenres,"tracks","genre1") {};
mgKeyGenres(mgKeyTypes kt) : mgKeyNormal(kt,"tracks","genre1") {};
- mgParts Parts(bool orderby=false) const;
+ mgParts Parts(MYSQL *db,bool orderby=false) const;
string map_idfield() const { return "id"; }
string map_valuefield() const { return "genre"; }
string map_valuetable() const { return "genre"; }
- string GenreClauses(bool orderby) const;
+ protected:
virtual unsigned int genrelevel() const { return 4; }
+ private:
+ string GenreClauses(bool orderby) const;
};
class mgKeyGenre1 : public mgKeyGenres
@@ -302,8 +304,8 @@ mgKeyGenres::GenreClauses(bool orderby) const
{
unsigned int len=genrelevel();
if (len==4) len=0;
- g1.push_back(IdClause("tracks.genre1",0,genrelevel()));
- g2.push_back(IdClause("tracks.genre2",0,genrelevel()));
+ g1.push_back(IdClause(0,"tracks.genre1",0,genrelevel()));
+ g2.push_back(IdClause(0,"tracks.genre2",0,genrelevel()));
}
extern bool needGenre2;
@@ -321,7 +323,7 @@ mgKeyGenres::GenreClauses(bool orderby) const
mgParts
-mgKeyGenres::Parts(bool orderby) const
+mgKeyGenres::Parts(MYSQL *db,bool orderby) const
{
mgParts result;
result.clauses.push_back(GenreClauses(orderby));
@@ -340,7 +342,7 @@ mgKeyGenres::Parts(bool orderby) const
class mgKeyLanguage : public mgKeyNormal {
public:
mgKeyLanguage() : mgKeyNormal(keyLanguage,"tracks","lang") {};
- mgParts Parts(bool orderby=false) const;
+ mgParts Parts(MYSQL *db,bool orderby=false) const;
string map_idfield() const { return "id"; }
string map_valuefield() const { return "language"; }
string map_valuetable() const { return "language"; }
@@ -349,7 +351,7 @@ class mgKeyLanguage : public mgKeyNormal {
class mgKeyCollection: public mgKeyNormal {
public:
mgKeyCollection() : mgKeyNormal(keyCollection,"playlist","id") {};
- mgParts Parts(bool orderby=false) const;
+ mgParts Parts(MYSQL *db,bool orderby=false) const;
string map_idfield() const { return "id"; }
string map_valuefield() const { return "title"; }
string map_valuetable() const { return "playlist"; }
@@ -357,7 +359,7 @@ class mgKeyCollection: public mgKeyNormal {
class mgKeyCollectionItem : public mgKeyNormal {
public:
mgKeyCollectionItem() : mgKeyNormal(keyCollectionItem,"playlistitem","tracknumber") {};
- mgParts Parts(bool orderby=false) const;
+ mgParts Parts(MYSQL *db,bool orderby=false) const;
};
class mgKeyDecade : public mgKeyNormal {
@@ -379,28 +381,12 @@ mgKeyNormal::value() const
}
-mgKey::mgKey()
-{
- m_db = 0;
-}
-
-mgKey::~mgKey()
-{
-}
-
-void
-mgKey::setdb(MYSQL *db)
-{
- m_db = db;
-}
-
mgKeyNormal::mgKeyNormal(const mgKeyNormal& k)
{
m_kt = k.m_kt;
m_table = k.m_table;
m_field = k.m_field;
m_id = k.m_id;
- m_db = k.m_db;
}
mgKeyNormal::mgKeyNormal(const mgKeyTypes kt, string table, string field)
@@ -409,7 +395,6 @@ mgKeyNormal::mgKeyNormal(const mgKeyTypes kt, string table, string field)
m_table = table;
m_field = field;
m_id = EMPTY;
- m_db = 0;
}
void
@@ -430,12 +415,11 @@ mgParts::~mgParts()
}
mgParts
-mgKeyNormal::Parts(bool orderby) const
+mgKeyNormal::Parts(MYSQL *db, bool orderby) const
{
- assert(strlen(m_db->host));
mgParts result;
result.tables.push_back(table());
- AddIdClause(result,expr());
+ AddIdClause(db,result,expr());
if (orderby)
{
result.fields.push_back(expr());
@@ -445,35 +429,34 @@ mgKeyNormal::Parts(bool orderby) const
}
string
-mgKeyNormal::IdClause(string what,string::size_type start,string::size_type len) const
+mgKeyNormal::IdClause(MYSQL *db,string what,string::size_type start,string::size_type len) const
{
- assert(strlen(m_db->host));
if (len==0)
len=string::npos;
if (id() == "'NULL'")
return what + " is NULL";
else if (len==string::npos)
- return what + "=" + sql_string(m_db,id());
+ return what + "=" + sql_string(db,id());
else
{
return "substring("+what + ","+ltos(start+1)+","+ltos(len)+")="
- + sql_string(m_db,id().substr(start,len));
+ + sql_string(db,id().substr(start,len));
}
}
void
-mgKeyNormal::AddIdClause(mgParts &result,string what) const
+mgKeyNormal::AddIdClause(MYSQL *db,mgParts &result,string what) const
{
if (id() != EMPTY)
- result.clauses.push_back(IdClause(what));
+ result.clauses.push_back(IdClause(db,what));
}
mgParts
-mgKeyTrack::Parts(bool orderby) const
+mgKeyTrack::Parts(MYSQL *db,bool orderby) const
{
mgParts result;
result.tables.push_back("tracks");
- AddIdClause(result,"tracks.title");
+ AddIdClause(db,result,"tracks.title");
if (orderby)
{
// if you change tracks.title, please also
@@ -485,10 +468,10 @@ mgKeyTrack::Parts(bool orderby) const
}
mgParts
-mgKeyLanguage::Parts(bool orderby) const
+mgKeyLanguage::Parts(MYSQL *db,bool orderby) const
{
mgParts result;
- AddIdClause(result,"tracks.lang");
+ AddIdClause(db,result,"tracks.lang");
result.tables.push_back("tracks");
if (orderby)
{
@@ -501,13 +484,13 @@ mgKeyLanguage::Parts(bool orderby) const
}
mgParts
-mgKeyCollection::Parts(bool orderby) const
+mgKeyCollection::Parts(MYSQL *db,bool orderby) const
{
mgParts result;
if (orderby)
{
result.tables.push_back("playlist");
- AddIdClause(result,"playlist.id");
+ AddIdClause(db,result,"playlist.id");
result.fields.push_back("playlist.title");
result.fields.push_back("playlist.id");
result.orders.push_back("playlist.title");
@@ -515,18 +498,17 @@ mgKeyCollection::Parts(bool orderby) const
else
{
result.tables.push_back("playlistitem");
- AddIdClause(result,"playlistitem.playlist");
+ AddIdClause(db,result,"playlistitem.playlist");
}
return result;
}
mgParts
-mgKeyCollectionItem::Parts(bool orderby) const
+mgKeyCollectionItem::Parts(MYSQL *db,bool orderby) const
{
- assert(strlen(m_db->host));
mgParts result;
result.tables.push_back("playlistitem");
- AddIdClause(result,"playlistitem.tracknumber");
+ AddIdClause(db,result,"playlistitem.tracknumber");
if (orderby)
{
// tracks nur hier, fuer sql_delete_from_coll wollen wir es nicht
@@ -671,7 +653,6 @@ mgReference::mgReference(string t1,string f1,string t2,string f2)
mgOrder::mgOrder()
{
- setDB(0);
setKey (0,keyArtist);
setKey (1,keyAlbum);
setKey (2,keyTrack);
@@ -727,11 +708,10 @@ mgOrder::InitFrom(const mgOrder &from)
{
for (unsigned int i = 0; i < from.size();i++)
{
- mgKey *k = ktGenerate(from.getKeyType(i),m_db);
+ mgKey *k = ktGenerate(from.getKeyType(i));
k->set(from.getKeyValue(i),from.getKeyId(i));
Keys.push_back(k);
}
- if (from.m_db) setDB(from.m_db);
m_orderByCount=from.m_orderByCount;
}
@@ -750,12 +730,12 @@ mgOrder::Name()
void
mgOrder::setKey (const unsigned int level, const mgKeyTypes kt)
{
- mgKey *newkey = ktGenerate(kt,m_db);
+ mgKey *newkey = ktGenerate(kt);
if (level == 0 && kt == keyCollection)
{
clear ();
Keys.push_back(newkey);
- Keys.push_back(ktGenerate(keyCollectionItem,m_db));
+ Keys.push_back(ktGenerate(keyCollectionItem));
return;
}
if (level == size ())
@@ -779,7 +759,6 @@ mgOrder::setKey (const unsigned int level, const mgKeyTypes kt)
mgOrder::mgOrder(mgValmap& nv,char *prefix)
{
char *idx;
- setDB(0);
asprintf(&idx,"%s.OrderByCount",prefix);
m_orderByCount = nv.getbool(idx);
free(idx);
@@ -809,7 +788,6 @@ mgOrder::DumpState(mgValmap& nv, char *prefix) const
mgOrder::mgOrder(vector<mgKeyTypes> kt)
{
m_orderByCount = false;
- setDB(0);
setKeys(kt);
}
@@ -844,16 +822,6 @@ mgOrder::getKeyId(unsigned int idx) const
return Keys[idx]->id();
}
-void
-mgOrder::setDB(MYSQL *db)
-{
- m_db = db;
- keyvector::iterator i;
- for (i = Keys.begin () ; i != Keys.end (); ++i)
- {
- (*i)->setdb(db);
- }
-}
mgKey*
mgOrder::find(const mgKeyTypes kt)
@@ -935,17 +903,16 @@ cleanagain:
if (!IsCollection && !is_unique)
{
if (!album_found)
- Keys.push_back(ktGenerate(keyAlbum,m_db));
+ Keys.push_back(ktGenerate(keyAlbum));
if (!title_found)
- Keys.push_back(ktGenerate(keyTitle,m_db));
+ Keys.push_back(ktGenerate(keyTitle));
}
}
mgParts
-mgOrder::Parts(unsigned int level,bool orderby) const
+mgOrder::Parts(MYSQL *db,unsigned int level,bool orderby) const
{
- assert(strlen(m_db->host));
mgParts result;
result.orderByCount = m_orderByCount;
mgKeyNormal *k0 = dynamic_cast<mgKeyNormal*>(Keys[0]);
@@ -963,7 +930,6 @@ mgOrder::Parts(unsigned int level,bool orderby) const
{
if (i==Keys.size()) break;
mgKeyNormal *k = dynamic_cast<mgKeyNormal*>(Keys[i]);
- k->setdb(m_db);
mgKeyTypes kt = k->Type();
if (iskeyGenre(kt))
{
@@ -981,7 +947,7 @@ mgOrder::Parts(unsigned int level,bool orderby) const
}
}
}
- result += k->Parts(orderby && (i==level));
+ result += k->Parts(db,orderby && (i==level));
next:
continue;
}
@@ -1062,7 +1028,7 @@ mgReferences::Connect(string table1, string table2) const
mgKey*
-ktGenerate(const mgKeyTypes kt,MYSQL* db)
+ktGenerate(const mgKeyTypes kt)
{
mgKey* result = 0;
switch (kt)
@@ -1088,7 +1054,6 @@ ktGenerate(const mgKeyTypes kt,MYSQL* db)
case keyRating: result = new mgKeyNormal(kt,"tracks","rating");break;
case keyYear: result = new mgKeyNormal(kt,"tracks","year");break;
}
- if (result) result->setdb(db);
return result;
}
diff --git a/mg_order.h b/mg_order.h
index 51a7003..0943d88 100644
--- a/mg_order.h
+++ b/mg_order.h
@@ -78,9 +78,8 @@ private:
class mgKey {
public:
- mgKey();
- virtual ~mgKey();
- virtual mgParts Parts(bool orderby=false) const = 0;
+ virtual ~mgKey() {};
+ virtual mgParts Parts(MYSQL *db,bool orderby=false) const = 0;
virtual string id() const = 0;
virtual string value () const = 0;
//!\brief translate field into user friendly string
@@ -90,14 +89,12 @@ class mgKey {
virtual string map_valuefield() const { return ""; }
virtual string map_valuetable() const { return ""; }
void setdb(MYSQL *db);
- virtual bool Enabled() { return true; }
- protected:
- MYSQL *m_db;
+ virtual bool Enabled(MYSQL *db) { return true; }
};
mgKey*
-ktGenerate(const mgKeyTypes kt,MYSQL *db);
+ktGenerate(const mgKeyTypes kt);
const char * const ktName(const mgKeyTypes kt);
mgKeyTypes ktValue(const char * name);
@@ -153,8 +150,7 @@ public:
~mgOrder();
void InitFrom(const mgOrder &from);
void DumpState(mgValmap& nv, char *prefix) const;
- void setDB(MYSQL *db);
- mgParts Parts(unsigned int level,bool orderby=true) const;
+ mgParts Parts(MYSQL *db,unsigned int level,bool orderby=true) const;
const mgOrder& operator=(const mgOrder& from);
mgKey*& operator[](unsigned int idx);
unsigned int size() const { return Keys.size(); }
@@ -173,7 +169,6 @@ public:
bool getOrderByCount() { return m_orderByCount; }
private:
bool m_orderByCount;
- MYSQL *m_db;
keyvector Keys;
void setKey (const unsigned int level, const mgKeyTypes kt);
};