Changeset 15602
- Timestamp:
- 2008-05-20T16:19:54+12:00 (16 years ago)
- Location:
- gsdl/trunk/lib
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/lib/sqliteclass.cpp
r15601 r15602 80 80 bool sqliteclass::getinfo(const text_t& key, infodbclass &info) 81 81 { 82 // !! TO IMPLEMENT 83 return false; 82 text_t sql_cmd = "SELECT value FROM table WHERE key=" + key; 83 84 vector<text_tmap> sql_results; 85 if (!sqlgetarray(sql_cmd, sql_results) || sql_results.size() == 0) 86 { 87 return false; 88 } 89 90 text_tmap sql_result = sql_results[0]; 91 92 // !! TO FINISH 93 94 return true; 84 95 } 85 96 … … 131 142 // sqlexec simply executes the given sql statement - it doesn't obtain a 132 143 // result set - returns true if the sql statement was executed successfully 133 // logerrors may be set to false to prevent this method from logging an 134 // error if it fails - this is useful in some circumstances when we execute 135 // an sql command specifically to see if it fails (e.g. when testing if a 136 // table exists in the db) 137 bool sqliteclass::sqlexec(const text_t &sql_cmd, bool logerrors) 144 bool sqliteclass::sqlexec(const text_t &sql_cmd) 138 145 { 139 146 char *sql_cmd_cstr = sql_cmd.getcstr(); … … 157 164 if (rv == SQLITE_OK) return true; 158 165 159 if (logerrors) 160 { 161 outconvertclass text_t2ascii; 162 (*logout) << text_t2ascii << "Error executing sql statement: " << sql_cmd << "\n"; 163 } 164 166 // sqlite3_exec failed - return false 167 outconvertclass text_t2ascii; 168 (*logout) << text_t2ascii << "Error executing sql statement: " << sql_cmd << "\n"; 169 return false; 170 } 171 172 173 // callback functions for sqlgetarray 174 static int sqlgetarray_callback(void *res, int numcols, char **vals, char **columnnames) 175 { 176 vector<text_tmap> *result = (vector<text_tmap>*) res; 177 text_tmap row; 178 179 for (int i = 0; i < numcols; i++) 180 { 181 row[columnnames[i]] = ""; 182 // vals[i] will be NULL if set to a NULL db value 183 if (vals[i]) 184 { 185 row[columnnames[i]] = vals[i]; 186 } 187 } 188 189 result->push_back(row); 190 return 0; 191 } 192 193 194 // sqlgetarray executes sql and returns the result set in result 195 bool sqliteclass::sqlgetarray(const text_t &sql_cmd, vector<text_tmap> &sql_results) 196 { 197 char *sql_cmd_cstr = sql_cmd.getcstr(); 198 sql_results.erase(sql_results.begin(), sql_results.end()); 199 200 int rv = 0; 201 int tries = 0; 202 while ((rv = sqlite3_exec(sqlitefile, sql_cmd_cstr, sqlgetarray_callback, &sql_results, NULL)) == SQLITE_BUSY) 203 { 204 sleep(1000); 205 tries++; 206 if (tries > SQLITE_MAX_RETRIES) 207 { 208 outconvertclass text_t2ascii; 209 (*logout) << text_t2ascii << "max_retries exceeded for sql query: " << sql_cmd << "\n"; 210 break; 211 } 212 } 213 214 delete[] sql_cmd_cstr; 215 216 if (rv == SQLITE_OK) return true; 217 218 // sqlite3_exec failed - return empty result set 219 outconvertclass text_t2ascii; 220 (*logout) << text_t2ascii << "Error executing sql statement: " << sql_cmd << "\n"; 165 221 return false; 166 222 } -
gsdl/trunk/lib/sqliteclass.h
r15601 r15602 65 65 sqlite3* sqlitefile; 66 66 67 bool sqlexec(const text_t &sql_cmd, bool logerrors); 67 bool sqlgetarray(const text_t &sql_cmd, vector<text_tmap> &sql_results); 68 bool sqlexec(const text_t &sql_cmd); 68 69 }; 69 70
Note:
See TracChangeset
for help on using the changeset viewer.