00001
00002
00003
00004 #include "mythstorage.h"
00005 #include "mythdb.h"
00006
00007 void SimpleDBStorage::Load(void)
00008 {
00009 MSqlQuery query(MSqlQuery::InitCon());
00010 MSqlBindings bindings;
00011 query.prepare(
00012 "SELECT " + GetColumnName() +
00013 " FROM " + GetTableName() +
00014 " WHERE " + GetWhereClause(bindings));
00015 query.bindValues(bindings);
00016
00017 if (!query.exec() || !query.isActive())
00018 {
00019 MythDB::DBError("SimpleDBStorage::Load()", query);
00020 }
00021 else if (query.next())
00022 {
00023 QString result = query.value(0).toString();
00024 if (!result.isNull())
00025 {
00026 initval = result;
00027 user->SetDBValue(result);
00028 }
00029 }
00030 }
00031
00032 void SimpleDBStorage::Save(QString _table)
00033 {
00034 if (!IsSaveRequired())
00035 return;
00036
00037 MSqlBindings bindings;
00038 QString querystr = QString("SELECT * FROM " + _table + " WHERE "
00039 + GetWhereClause(bindings) + ';');
00040
00041 MSqlQuery query(MSqlQuery::InitCon());
00042 query.prepare(querystr);
00043 query.bindValues(bindings);
00044
00045 if (!query.exec())
00046 {
00047 MythDB::DBError("SimpleDBStorage::Save() query", query);
00048 return;
00049 }
00050
00051 if (query.isActive() && query.next())
00052 {
00053
00054
00055 MSqlBindings bindings;
00056
00057 querystr = QString("UPDATE " + _table + " SET " + GetSetClause(bindings) +
00058 " WHERE " + GetWhereClause(bindings) + ';');
00059
00060 query.prepare(querystr);
00061 query.bindValues(bindings);
00062
00063 if (!query.exec())
00064 MythDB::DBError("SimpleDBStorage::Save() update", query);
00065 }
00066 else
00067 {
00068
00069 MSqlBindings bindings;
00070
00071 querystr = QString("INSERT INTO " + _table + " SET "
00072 + GetSetClause(bindings) + ';');
00073
00074 query.prepare(querystr);
00075 query.bindValues(bindings);
00076
00077 if (!query.exec())
00078 MythDB::DBError("SimpleDBStorage::Save() insert", query);
00079 }
00080 }
00081
00082 void SimpleDBStorage::Save(void)
00083 {
00084 Save(GetTableName());
00085 }
00086
00087 QString SimpleDBStorage::GetSetClause(MSqlBindings &bindings) const
00088 {
00089 QString tagname(":SET" + GetColumnName().toUpper());
00090 QString clause(GetColumnName() + " = " + tagname);
00091
00092 bindings.insert(tagname, user->GetDBValue());
00093
00094 return clause;
00095 }
00096
00097 bool SimpleDBStorage::IsSaveRequired(void) const
00098 {
00099 return user->GetDBValue() != initval;
00100 }
00101
00102 void SimpleDBStorage::SetSaveRequired(void)
00103 {
00104 initval.clear();
00105 }
00106
00108
00109 QString GenericDBStorage::GetWhereClause(MSqlBindings &bindings) const
00110 {
00111 QString keycolumnTag = ":WHERE" + keycolumn.toUpper();
00112
00113 bindings.insert(keycolumnTag, keyvalue);
00114
00115 return keycolumn + " = " + keycolumnTag;
00116 }
00117
00118 QString GenericDBStorage::GetSetClause(MSqlBindings &bindings) const
00119 {
00120 QString keycolumnTag = ":SETKEY" + keycolumn.toUpper();
00121 QString columnTag = ":SETCOL" + GetColumnName().toUpper();
00122
00123 bindings.insert(keycolumnTag, keyvalue);
00124 bindings.insert(columnTag, user->GetDBValue());
00125
00126 return keycolumn + " = " + keycolumnTag + ", " +
00127 GetColumnName() + " = " + columnTag;
00128 }
00129
00131
00132 HostDBStorage::HostDBStorage(StorageUser *_user, const QString &name) :
00133 SimpleDBStorage(_user, "settings", "data"), settingname(name)
00134 {
00135 }
00136
00137 QString HostDBStorage::GetWhereClause(MSqlBindings &bindings) const
00138 {
00139
00140
00141
00142
00143 QString valueTag(":WHEREVALUE");
00144 QString hostnameTag(":WHEREHOSTNAME");
00145
00146 QString clause("value = " + valueTag + " AND hostname = " + hostnameTag);
00147
00148 bindings.insert(valueTag, settingname);
00149 bindings.insert(hostnameTag, MythDB::getMythDB()->GetHostName());
00150
00151 return clause;
00152 }
00153
00154 QString HostDBStorage::GetSetClause(MSqlBindings &bindings) const
00155 {
00156 QString valueTag(":SETVALUE");
00157 QString dataTag(":SETDATA");
00158 QString hostnameTag(":SETHOSTNAME");
00159 QString clause("value = " + valueTag + ", data = " + dataTag
00160 + ", hostname = " + hostnameTag);
00161
00162 bindings.insert(valueTag, settingname);
00163 bindings.insert(dataTag, user->GetDBValue());
00164 bindings.insert(hostnameTag, MythDB::getMythDB()->GetHostName());
00165
00166 return clause;
00167 }
00168
00170
00171 GlobalDBStorage::GlobalDBStorage(
00172 StorageUser *_user, const QString &name) :
00173 SimpleDBStorage(_user, "settings", "data"), settingname(name)
00174 {
00175 }
00176
00177 QString GlobalDBStorage::GetWhereClause(MSqlBindings &bindings) const
00178 {
00179 QString valueTag(":WHEREVALUE");
00180 QString clause("value = " + valueTag);
00181
00182 bindings.insert(valueTag, settingname);
00183
00184 return clause;
00185 }
00186
00187 QString GlobalDBStorage::GetSetClause(MSqlBindings &bindings) const
00188 {
00189 QString valueTag(":SETVALUE");
00190 QString dataTag(":SETDATA");
00191
00192 QString clause("value = " + valueTag + ", data = " + dataTag);
00193
00194 bindings.insert(valueTag, settingname);
00195 bindings.insert(dataTag, user->GetDBValue());
00196
00197 return clause;
00198 }