|
MythTV
0.26-pre
|
00001 // -*- Mode: c++ -*- 00002 00003 // Myth headers 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 // Row already exists 00054 // Don"t change this QString. See the CVS logs rev 1.91. 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 // Row does not exist yet 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 /* Returns a where clause of the form: 00140 * "value = :VALUE AND hostname = :HOSTNAME" 00141 * The necessary bindings are added to the MSQLBindings& 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 }
1.7.6.1