Changeset 22043 for main/trunk/greenstone2/common-src
- Timestamp:
- 2010-05-06T12:49:54+12:00 (14 years ago)
- Location:
- main/trunk/greenstone2/common-src/src/lib
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/common-src/src/lib/Makefile.in
r21447 r22043 88 88 text_t.cpp \ 89 89 unitool.cpp \ 90 sqldbclass.cpp \ 90 91 $(SQLITE_SOURCES) 91 92 … … 109 110 text_t.o \ 110 111 unitool.o \ 112 sqldbclass.o \ 111 113 $(SQLITE_OBJECTS) 112 114 -
main/trunk/greenstone2/common-src/src/lib/jdbmnaiveclass.cpp
r21438 r22043 184 184 fgets(buf,256,PIN); 185 185 186 cerr << "**## buf = " << buf << endl; 187 188 cerr << "**## buf: "; 186 /* 187 * debuging code 188 189 cerr << "****## buf = " << buf << endl; 190 191 cerr << "****## buf: "; 189 192 190 193 int blen = strlen(buf); … … 192 195 cerr << "(" << buf[i] << "," << (int)buf[i] << ") "; 193 196 } 197 194 198 cerr << endl; 199 */ // ***** 195 200 196 201 … … 202 207 delete [] key_cstr; 203 208 204 cerr << "**** data before to_unicode = " << data << endl;209 // cerr << "**** data before to_unicode = " << data << endl; 205 210 206 211 data = to_uni(data); // convert to unicode -
main/trunk/greenstone2/common-src/src/lib/mssqldbclass.cpp
r17476 r22043 143 143 void mssqldbclass::deletekey (const text_t &key) 144 144 { 145 text_t sql_cmd = "DELETE FROM data_" + tableid + " WHERE one_key=N'" + mssql_safe(key) + "'";146 dbquery(sql_cmd);145 text_t sql_cmd = "DELETE FROM data_" + tableid + " WHERE one_key=N'" + sql_safe(key) + "'"; 146 sqlexec(sql_cmd); 147 147 } 148 148 … … 151 151 bool mssqldbclass::getkeydata (const text_t& key, text_t &data) 152 152 { 153 text_t sql_cmd = "SELECT one_value FROM data_" + tableid + " WHERE one_key=N'" + mssql_safe(key) + "'";153 text_t sql_cmd = "SELECT one_value FROM data_" + tableid + " WHERE one_key=N'" + sql_safe(key) + "'"; 154 154 vector<text_tmap> sql_results; 155 155 if (!sqlgetarray(sql_cmd, sql_results) || sql_results.size() == 0) … … 196 196 if (!exists(key)) 197 197 { 198 text_t sql_cmd = "INSERT INTO data_" + tableid + " (one_key, one_value) VALUES (N'" + mssql_safe(key) + "', N'" + mssql_safe(data) + "')";199 return dbquery(sql_cmd);198 text_t sql_cmd = "INSERT INTO data_" + tableid + " (one_key, one_value) VALUES (N'" + sql_safe(key) + "', N'" + sql_safe(data) + "')"; 199 return sqlexec(sql_cmd); 200 200 } 201 201 else 202 202 { 203 text_t sql_cmd = "UPDATE data_" + tableid + " SET one_value='" + mssql_safe(data) + "' WHERE one_key=N'" + mssql_safe(key) + "'";204 return dbquery(sql_cmd);203 text_t sql_cmd = "UPDATE data_" + tableid + " SET one_value='" + sql_safe(data) + "' WHERE one_key=N'" + sql_safe(key) + "'"; 204 return sqlexec(sql_cmd); 205 205 } 206 206 } … … 221 221 222 222 // Get the entries in the "document_metadata" table where the element and value matches those specified 223 text_t sql_cmd = "SELECT DISTINCT docOID FROM document_metadata_" + tableid + " WHERE element IN (N'" + mssql_safe(metadata_element_names[0]) + "'";223 text_t sql_cmd = "SELECT DISTINCT docOID FROM document_metadata_" + tableid + " WHERE element IN (N'" + sql_safe(metadata_element_names[0]) + "'"; 224 224 for (int i = 1; i < metadata_element_names.size(); i++) 225 225 { 226 sql_cmd += ",'" + mssql_safe(metadata_element_names[i]) + "'";227 } 228 sql_cmd += ") AND value='" + mssql_safe(metadata_value) + "'";226 sql_cmd += ",'" + sql_safe(metadata_element_names[i]) + "'"; 227 } 228 sql_cmd += ") AND value='" + sql_safe(metadata_value) + "'"; 229 229 230 230 // If we're sorting the documents by a certain metadata element, extend the SQL command to do this 231 231 if (sort_by_metadata_element_name != "") 232 232 { 233 sql_cmd = "SELECT docOID FROM (" + sql_cmd + ") LEFT JOIN (SELECT docOID,value from document_metadata_" + tableid + " WHERE element=N'" + mssql_safe(sort_by_metadata_element_name) + "') USING (docOID) ORDER by value";233 sql_cmd = "SELECT docOID FROM (" + sql_cmd + ") LEFT JOIN (SELECT docOID,value from document_metadata_" + tableid + " WHERE element=N'" + sql_safe(sort_by_metadata_element_name) + "') USING (docOID) ORDER by value"; 234 234 } 235 235 … … 275 275 276 276 // Get the entries in the "document_metadata" table where the element matches that specified 277 text_t sql_cmd = "SELECT DISTINCT docOID," + value_select_expression + " FROM document_metadata_" + tableid + " WHERE element IN (N'" + mssql_safe(metadata_element_names[0]) + "'";277 text_t sql_cmd = "SELECT DISTINCT docOID," + value_select_expression + " FROM document_metadata_" + tableid + " WHERE element IN (N'" + sql_safe(metadata_element_names[0]) + "'"; 278 278 for (int i = 1; i < metadata_element_names.size(); i++) 279 279 { 280 sql_cmd += ",N'" + mssql_safe(metadata_element_names[i]) + "'";280 sql_cmd += ",N'" + sql_safe(metadata_element_names[i]) + "'"; 281 281 } 282 282 sql_cmd += ")"; … … 285 285 if (metadata_value_filter != "") 286 286 { 287 sql_cmd += " AND value GLOB N'" + mssql_safe(metadata_value_filter) + "'";287 sql_cmd += " AND value GLOB N'" + sql_safe(metadata_value_filter) + "'"; 288 288 } 289 289 … … 308 308 309 309 310 //-------------------------------------------------------------------------------------// 311 // MS-SQL Private Utilities [START] 312 //-------------------------------------------------------------------------------------// 313 314 // dbquery(const text_t &sql) 310 // sqlexec(const text_t &sql) 315 311 // Takes a sql statement and executes it 316 312 // Returns false if failed, otherwise true 317 bool mssqldbclass:: dbquery(const text_t &sql)313 bool mssqldbclass::sqlexec (const text_t &sql) 318 314 { 319 315 char *sql_c = sql.getcstr(); … … 324 320 if (FAILED(cmd.CreateInstance(__uuidof(Command)))) 325 321 { 326 cerr << "mssqldbclass:: dbquery: CreateInstance failed" << endl;322 cerr << "mssqldbclass::sqlexec: CreateInstance failed" << endl; 327 323 return false; 328 324 } … … 339 335 text_t error; 340 336 error.setcstr(e.ErrorMessage()); 341 cerr << "mssqldbclass:: dbquery: _com_error: (" << sql << ") : (" << error << ")" << endl;337 cerr << "mssqldbclass::sqlexec: _com_error: (" << sql << ") : (" << error << ")" << endl; 342 338 rv = false; 343 339 } 344 340 catch (...) 345 341 { 346 cerr << "mssqldbclass:: dbquery: unknown error: (" + sql + ")" << endl;342 cerr << "mssqldbclass::sqlexec: unknown error: (" + sql + ")" << endl; 347 343 rv = false; 348 344 } … … 426 422 427 423 428 text_t mssqldbclass::mssql_safe (const text_t &value_arg) 424 // returns true if exists 425 bool sqlitedbclass::sqltableexists(const text_t &table_name) 426 { 427 cerr << "**** mssqldbclass::sqltableexists: This implementation is untested!" << endl; 428 cerr << "**** Remove warning message once confirmed/fixed to works as required" << endl; 429 430 text_t sql_cmd = "SELECT name FROM sysobjects WHERE name='" + sql_safe(table_name) 431 + "' AND OBJECTPROPERTY(id,'IsUserTable')=1"; 432 433 vector<text_tmap> sql_results; 434 if (!sqlgetarray(sql_cmd, sql_results) || sql_results.size() == 0) 435 { 436 return false; 437 } 438 439 return true; 440 } 441 442 443 text_t mssqldbclass::sql_safe (const text_t &value_arg) 429 444 { 430 445 text_t value = value_arg; … … 434 449 435 450 451 //---------------------------------------------------------------------------// 452 // MS-SQL Private Utilities [START] 453 //---------------------------------------------------------------------------// 454 455 436 456 // read_infodb_file(text_t filename) 437 // Unlike the others (sqlite and gdbm), this is a server-client based database. 438 // Therefore, instead of store the actual database, we store the infoserver-client based database. 457 // Unlike the others (sqlite and gdbm), this is a server-client based 458 // database. Therefore, instead of store the actual database, we store the 459 // infoserver-client based database. 439 460 // What we want to do here is to have the 440 461 text_tmap mssqldbclass::read_infodb_file(text_t filename) … … 494 515 } 495 516 496 //--------------------------------------------------------------------------- ----------//517 //---------------------------------------------------------------------------// 497 518 // MS-SQL Private Utilities [END] 498 //--------------------------------------------------------------------------- ----------//499 519 //---------------------------------------------------------------------------// 520 -
main/trunk/greenstone2/common-src/src/lib/mssqldbclass.h
r17476 r22043 3 3 * mssqldbclass.h -- 4 4 * Copyright (C) 2008 DL Consulting Ltd 5 * Copyright (C) 2010 New Zealand Digital Library Project 5 6 * 6 7 * A component of the Greenstone digital library software … … 35 36 class mssqldbclass : public sqldbclass 36 37 { 37 private:38 39 _ConnectionPtr dbptr;40 41 text_t tableid;42 43 // To enable the debug string to be output to cerr.44 bool debug;45 46 text_tmap read_infodb_file (text_t filename);47 48 void debug_output (text_t output_string);49 50 text_t convert_bstr_to_textt (_variant_t in);51 52 bool dbquery (const text_t &sql);53 54 bool sqlgetarray (const text_t &sql_cmd, vector<text_tmap> &sql_results);55 56 text_t mssql_safe (const text_t &value_arg);57 58 38 public: 59 39 60 40 mssqldbclass (); 61 62 ~mssqldbclass (); 41 virtual ~mssqldbclass (); 63 42 64 43 // returns true if opened … … 81 60 82 61 // returns array of document OIDs 83 text_tarray get_documents_with_metadata_value (const text_tarray &metadata_element_names,84 85 62 virutal text_tarray get_documents_with_metadata_value (const text_tarray &metadata_element_names, 63 const text_t &metadata_value, 64 const text_t &sort_by_metadata_element_name); 86 65 87 66 // returns array of values 88 text_tarray get_metadata_values (const text_tarray &metadata_element_names, 89 const text_t &metadata_value_filter, 90 const text_t &metadata_value_grouping_expression); 67 virtual text_tarray get_metadata_values (const text_tarray &metadata_element_names, 68 const text_t &metadata_value_filter, 69 const text_t &metadata_value_grouping_expression); 70 71 72 protected: 73 _ConnectionPtr dbptr; 74 text_t tableid; 75 bool debug; // To enable the debug string to be output to cerr. 76 77 virutal text_t sql_safe (const text_t &value_arg); 78 79 virtual bool sqlexec (const text_t &sql); 80 virtual bool sqlgetarray (const text_t &sql_cmd, vector<text_tmap> &sql_results); 81 virtual bool sqltableexists (const text_t &table_name); 82 83 84 text_tmap read_infodb_file (text_t filename); 85 void debug_output (text_t output_string); 86 text_t convert_bstr_to_textt (_variant_t in); 87 91 88 }; 92 89 -
main/trunk/greenstone2/common-src/src/lib/sqldbclass.h
r16180 r22043 3 3 * sqldbclass.h -- 4 4 * Copyright (C) 2008 DL Consulting Ltd 5 * Copyright (C) 2010 New Zealand Digital Library Project 5 6 * 6 7 * A component of the Greenstone digital library software … … 35 36 { 36 37 public: 37 sqldbclass() {}38 virtual ~sqldbclass() {}38 sqldbclass(); 39 virtual ~sqldbclass(); 39 40 40 41 // -----------------------------------------------------------------------------------------------42 // These functions MUST be implemented by subclasses, as they are database-specific 41 // returns array of document OIDs 42 virtual text_tarray get_documents_where (const text_t& sql_initial_cmd, 43 const text_t& sort_by_metadata_element_name); 43 44 44 45 // returns array of document OIDs … … 51 52 const text_t &metadata_value_filter, 52 53 const text_t &metadata_value_grouping_expression) = 0; 54 55 protected: 56 virtual text_t sql_safe (const text_t &value_arg) = 0; 57 58 virtual bool sqlexec(const text_t &sql_cmd) = 0; 59 virtual bool sqlgetarray(const text_t& sql_cmd, 60 vector<text_tmap>& sql_results) = 0; 61 virtual bool sqltableexists(const text_t &table_name) = 0; 62 53 63 }; 54 64 -
main/trunk/greenstone2/common-src/src/lib/sqlitedbclass.cpp
r21865 r22043 38 38 39 39 #define SQLITE_MAX_RETRIES 8 40 41 sqlitedbclass::sqlitedbclass() 42 { 43 sqlitefile = NULL; 44 } 40 45 41 46 … … 95 100 void sqlitedbclass::deletekey (const text_t &key) 96 101 { 97 text_t sql_cmd = "DELETE FROM data WHERE key='" + sql ite_safe(key) + "'";102 text_t sql_cmd = "DELETE FROM data WHERE key='" + sql_safe(key) + "'"; 98 103 sqlexec(sql_cmd); 99 104 } … … 114 119 115 120 // Get the entries in the "document_metadata" table where the element and value matches those specified 116 text_t sql_cmd = "SELECT DISTINCT docOID FROM document_metadata WHERE element IN ('" + sql ite_safe(metadata_element_names[0]) + "'";121 text_t sql_cmd = "SELECT DISTINCT docOID FROM document_metadata WHERE element IN ('" + sql_safe(metadata_element_names[0]) + "'"; 117 122 for (int i = 1; i < metadata_element_names.size(); i++) 118 123 { 119 sql_cmd += ",'" + sql ite_safe(metadata_element_names[i]) + "'";120 } 121 sql_cmd += ") AND value='" + sql ite_safe(metadata_value) + "'";124 sql_cmd += ",'" + sql_safe(metadata_element_names[i]) + "'"; 125 } 126 sql_cmd += ") AND value='" + sql_safe(metadata_value) + "'"; 122 127 123 128 // If we're sorting the documents by a certain metadata element, extend the SQL command to do this 124 129 if (sort_by_metadata_element_name != "") 125 130 { 126 sql_cmd = "SELECT docOID FROM (" + sql_cmd + ") LEFT JOIN (SELECT docOID,value from document_metadata WHERE element='" + sql ite_safe(sort_by_metadata_element_name) + "') USING (docOID) ORDER by value";131 sql_cmd = "SELECT docOID FROM (" + sql_cmd + ") LEFT JOIN (SELECT docOID,value from document_metadata WHERE element='" + sql_safe(sort_by_metadata_element_name) + "') USING (docOID) ORDER by value"; 127 132 } 128 133 … … 157 162 bool sqlitedbclass::getkeydata (const text_t& key, text_t &data) 158 163 { 159 text_t sql_cmd = "SELECT value FROM data WHERE key='" + sql ite_safe(key) + "'";164 text_t sql_cmd = "SELECT value FROM data WHERE key='" + sql_safe(key) + "'"; 160 165 vector<text_tmap> sql_results; 161 166 if (!sqlgetarray(sql_cmd, sql_results) || sql_results.size() == 0) … … 217 222 218 223 // Get the entries in the "document_metadata" table where the element matches that specified 219 text_t sql_cmd = "SELECT DISTINCT docOID," + value_select_expression + " FROM document_metadata WHERE element IN ('" + sql ite_safe(metadata_element_names[0]) + "'";224 text_t sql_cmd = "SELECT DISTINCT docOID," + value_select_expression + " FROM document_metadata WHERE element IN ('" + sql_safe(metadata_element_names[0]) + "'"; 220 225 for (int i = 1; i < metadata_element_names.size(); i++) 221 226 { 222 sql_cmd += ",'" + sql ite_safe(metadata_element_names[i]) + "'";227 sql_cmd += ",'" + sql_safe(metadata_element_names[i]) + "'"; 223 228 } 224 229 sql_cmd += ")"; … … 227 232 if (metadata_value_filter != "") 228 233 { 229 sql_cmd += " AND value GLOB '" + sql ite_safe(metadata_value_filter) + "'";234 sql_cmd += " AND value GLOB '" + sql_safe(metadata_value_filter) + "'"; 230 235 } 231 236 … … 256 261 if (!exists(key)) 257 262 { 258 text_t sql_cmd = "INSERT INTO data (key, value) VALUES ('" + sql ite_safe(key) + "', '" + sqlite_safe(data) + "')";263 text_t sql_cmd = "INSERT INTO data (key, value) VALUES ('" + sql_safe(key) + "', '" + sql_safe(data) + "')"; 259 264 return sqlexec(sql_cmd); 260 265 } 261 266 else 262 267 { 263 text_t sql_cmd = "UPDATE data SET value='" + sql ite_safe(data) + "' WHERE key='" + sqlite_safe(key) + "'";268 text_t sql_cmd = "UPDATE data SET value='" + sql_safe(data) + "' WHERE key='" + sql_safe(key) + "'"; 264 269 return sqlexec(sql_cmd); 265 270 } … … 282 287 283 288 284 text_t sqlitedbclass::sql ite_safe (const text_t &value_arg)289 text_t sqlitedbclass::sql_safe (const text_t &value_arg) 285 290 { 286 291 text_t value = value_arg; … … 380 385 bool sqlitedbclass::sqltableexists(const text_t &table_name) 381 386 { 382 text_t sql_cmd = "SELECT * FROM sqlite_master WHERE tbl_name='" + sql ite_safe(table_name) + "'";387 text_t sql_cmd = "SELECT * FROM sqlite_master WHERE tbl_name='" + sql_safe(table_name) + "'"; 383 388 vector<text_tmap> sql_results; 384 389 if (!sqlgetarray(sql_cmd, sql_results) || sql_results.size() == 0) -
main/trunk/greenstone2/common-src/src/lib/sqlitedbclass.h
r16180 r22043 3 3 * sqlitedbclass.h -- 4 4 * Copyright (C) 2008 DL Consulting Ltd 5 * Copyright (C) 2010 New Zealand Digital Library Project 5 6 * 6 7 * A component of the Greenstone digital library software … … 35 36 { 36 37 public: 37 sqlitedbclass() { sqlitefile = NULL; }38 ~sqlitedbclass();38 sqlitedbclass(); 39 virtual ~sqlitedbclass(); 39 40 40 41 // returns true if opened 41 bool opendatabase (const text_t &filename, int mode, int num_retrys, bool need_filelock); 42 bool opendatabase (const text_t &filename, int mode, int num_retrys, 43 bool need_filelock); 42 44 43 45 void closedatabase (); 44 46 45 47 void deletekey (const text_t &key); 46 47 // returns array of document OIDs48 text_tarray get_documents_with_metadata_value (const text_tarray &metadata_element_names,49 const text_t &metadata_value,50 const text_t &sort_by_metadata_element_name);51 48 52 49 // returns file extension string … … 59 56 text_tarray getkeys (); 60 57 58 59 // returns array of document OIDs 60 virtual text_tarray get_documents_with_metadata_value (const text_tarray &metadata_element_names, 61 const text_t &metadata_value, 62 const text_t &sort_by_metadata_element_name); 63 61 64 // returns array of values 62 text_tarray get_metadata_values (const text_tarray &metadata_element_names,63 const text_t &metadata_value_filter,64 const text_t &metadata_value_grouping_expression);65 virtual text_tarray get_metadata_values (const text_tarray &metadata_element_names, 66 const text_t &metadata_value_filter, 67 const text_t &metadata_value_grouping_expression); 65 68 66 69 // returns true on success … … 71 74 sqlite3* sqlitefile; 72 75 73 text_t sqlite_safe (const text_t &value_arg);76 virtual text_t sql_safe (const text_t &value_arg); 74 77 75 bool sqlexec (const text_t &sql_cmd); 76 bool sqlgetarray (const text_t &sql_cmd, vector<text_tmap> &sql_results); 77 bool sqltableexists (const text_t &table_name); 78 virtual bool sqlexec (const text_t &sql_cmd); 79 virtual bool sqlgetarray (const text_t &sql_cmd, vector<text_tmap> &sql_results); 80 virtual bool sqltableexists (const text_t &table_name); 81 78 82 }; 79 83
Note:
See TracChangeset
for help on using the changeset viewer.