00001
00002
00003
00004 #include "mythstorage.h"
00005 #include "settings.h"
00006
00007 void SimpleDBStorage::load(void)
00008 {
00009 MSqlQuery query(MSqlQuery::InitCon());
00010 MSqlBindings bindings;
00011 query.prepare(
00012 "SELECT " + column + " "
00013 "FROM " + table + " " +
00014 "WHERE " + whereClause(bindings));
00015 query.bindValues(bindings);
00016
00017 if (!query.exec() || !query.isActive())
00018 {
00019 MythContext::DBError("SimpleDBStorage::load()", query);
00020 }
00021 else if (query.next())
00022 {
00023 QString result = query.value(0).toString();
00024 if (!result.isNull())
00025 {
00026 result = QString::fromUtf8(query.value(0).toString());
00027 setting->setValue(result);
00028 setting->setUnchanged();
00029 }
00030 }
00031 }
00032
00033 void SimpleDBStorage::save(QString table)
00034 {
00035 if (!setting->isChanged())
00036 return;
00037
00038 MSqlBindings bindings;
00039 QString querystr = QString("SELECT * FROM " + table + " WHERE "
00040 + whereClause(bindings) + ";");
00041
00042 MSqlQuery query(MSqlQuery::InitCon());
00043 query.prepare(querystr);
00044 query.bindValues(bindings);
00045
00046 if (!query.exec())
00047 {
00048 MythContext::DBError("SimpleDBStorage::save() query", query);
00049 return;
00050 }
00051
00052 if (query.isActive() && query.next())
00053 {
00054
00055
00056 MSqlBindings bindings;
00057
00058 querystr = QString("UPDATE " + table + " SET " + setClause(bindings) +
00059 " WHERE " + whereClause(bindings) + ";");
00060
00061 query.prepare(querystr);
00062 query.bindValues(bindings);
00063
00064 if (!query.exec())
00065 MythContext::DBError("SimpleDBStorage::save() update", query);
00066 }
00067 else
00068 {
00069
00070 MSqlBindings bindings;
00071
00072 querystr = QString("INSERT INTO " + table + " SET "
00073 + setClause(bindings) + ";");
00074
00075 query.prepare(querystr);
00076 query.bindValues(bindings);
00077
00078 if (!query.exec())
00079 MythContext::DBError("SimpleDBStorage::save() insert", query);
00080 }
00081 }
00082
00083 void SimpleDBStorage::save(void)
00084 {
00085 save(table);
00086 }
00087
00088 QString SimpleDBStorage::setClause(MSqlBindings &bindings)
00089 {
00090 QString tagname(":SET" + column.upper());
00091 QString clause(column + " = " + tagname);
00092
00093 bindings.insert(tagname, setting->getValue().utf8());
00094
00095 return clause;
00096 }
00097
00099
00100 HostDBStorage::HostDBStorage(Setting *_setting, QString name) :
00101 SimpleDBStorage(_setting, "settings", "data")
00102 {
00103 _setting->setName(name);
00104 }
00105
00106 QString HostDBStorage::whereClause(MSqlBindings &bindings)
00107 {
00108
00109
00110
00111
00112 QString valueTag(":WHEREVALUE");
00113 QString hostnameTag(":WHEREHOSTNAME");
00114
00115 QString clause("value = " + valueTag + " AND hostname = " + hostnameTag);
00116
00117 bindings.insert(valueTag, setting->getName());
00118 bindings.insert(hostnameTag, gContext->GetHostName());
00119
00120 return clause;
00121 }
00122
00123 QString HostDBStorage::setClause(MSqlBindings &bindings)
00124 {
00125 QString valueTag(":SETVALUE");
00126 QString dataTag(":SETDATA");
00127 QString hostnameTag(":SETHOSTNAME");
00128 QString clause("value = " + valueTag + ", data = " + dataTag
00129 + ", hostname = " + hostnameTag);
00130
00131 bindings.insert(valueTag, setting->getName());
00132 bindings.insert(dataTag, setting->getValue().utf8());
00133 bindings.insert(hostnameTag, gContext->GetHostName());
00134
00135 return clause;
00136 }
00137
00139
00140 GlobalDBStorage::GlobalDBStorage(Setting *_setting, QString name) :
00141 SimpleDBStorage(_setting, "settings", "data")
00142 {
00143 _setting->setName(name);
00144 }
00145
00146 QString GlobalDBStorage::whereClause(MSqlBindings &bindings)
00147 {
00148 QString valueTag(":WHEREVALUE");
00149 QString clause("value = " + valueTag);
00150
00151 bindings.insert(valueTag, setting->getName());
00152
00153 return clause;
00154 }
00155
00156 QString GlobalDBStorage::setClause(MSqlBindings &bindings)
00157 {
00158 QString valueTag(":SETVALUE");
00159 QString dataTag(":SETDATA");
00160
00161 QString clause("value = " + valueTag + ", data = " + dataTag);
00162
00163 bindings.insert(valueTag, setting->getName());
00164 bindings.insert(dataTag, setting->getValue().utf8());
00165
00166 return clause;
00167 }