Ignore:
Timestamp:
2010-05-06T12:49:54+12:00 (14 years ago)
Author:
davidb
Message:

Upgrading of database backends to allow support for sql-query support. Opportunity also taken to make calls to sql related classes (such as mssql and sqlite) to be more unified.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/common-src/src/lib/mssqldbclass.cpp

    r17476 r22043  
    143143void mssqldbclass::deletekey (const text_t &key)
    144144{
    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);
    147147}
    148148
     
    151151bool mssqldbclass::getkeydata (const text_t& key, text_t &data)
    152152{
    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) + "'";
    154154  vector<text_tmap> sql_results;
    155155  if (!sqlgetarray(sql_cmd, sql_results) || sql_results.size() == 0)
     
    196196  if (!exists(key))
    197197  {
    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);
    200200  }
    201201  else
    202202  {
    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);
    205205  }
    206206}
     
    221221 
    222222  // 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]) + "'";
    224224  for (int i = 1; i < metadata_element_names.size(); i++)
    225225  {
    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) + "'";
    229229 
    230230  // If we're sorting the documents by a certain metadata element, extend the SQL command to do this
    231231  if (sort_by_metadata_element_name != "")
    232232  {
    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";
    234234  }
    235235 
     
    275275 
    276276  // 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]) + "'";
    278278  for (int i = 1; i < metadata_element_names.size(); i++)
    279279  {
    280     sql_cmd += ",N'" + mssql_safe(metadata_element_names[i]) + "'";
     280    sql_cmd += ",N'" + sql_safe(metadata_element_names[i]) + "'";
    281281  }
    282282  sql_cmd += ")";
     
    285285  if (metadata_value_filter != "")
    286286  {
    287     sql_cmd += " AND value GLOB N'" + mssql_safe(metadata_value_filter) + "'";
     287    sql_cmd += " AND value GLOB N'" + sql_safe(metadata_value_filter) + "'";
    288288  }
    289289 
     
    308308
    309309
    310 //-------------------------------------------------------------------------------------//
    311 // MS-SQL Private Utilities [START]
    312 //-------------------------------------------------------------------------------------//
    313 
    314 // dbquery(const text_t &sql)
     310// sqlexec(const text_t &sql)
    315311// Takes a sql statement and executes it
    316312// Returns false if failed, otherwise true
    317 bool mssqldbclass::dbquery (const text_t &sql)
     313bool mssqldbclass::sqlexec (const text_t &sql)
    318314{
    319315  char *sql_c = sql.getcstr();
     
    324320  if (FAILED(cmd.CreateInstance(__uuidof(Command))))
    325321  {
    326     cerr << "mssqldbclass::dbquery: CreateInstance failed" << endl;
     322    cerr << "mssqldbclass::sqlexec: CreateInstance failed" << endl;
    327323    return false;
    328324  }
     
    339335    text_t error;
    340336    error.setcstr(e.ErrorMessage());
    341     cerr << "mssqldbclass::dbquery: _com_error: (" << sql << ") : (" << error << ")" << endl;
     337    cerr << "mssqldbclass::sqlexec: _com_error: (" << sql << ") : (" << error << ")" << endl;
    342338    rv = false;
    343339  }
    344340  catch (...)
    345341  {
    346     cerr << "mssqldbclass::dbquery: unknown error: (" + sql + ")" << endl;
     342    cerr << "mssqldbclass::sqlexec: unknown error: (" + sql + ")" << endl;
    347343    rv = false;
    348344  }
     
    426422
    427423
    428 text_t mssqldbclass::mssql_safe (const text_t &value_arg)
     424// returns true if exists
     425bool 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
     443text_t mssqldbclass::sql_safe (const text_t &value_arg)
    429444{
    430445  text_t value = value_arg;
     
    434449
    435450
     451//---------------------------------------------------------------------------//
     452// MS-SQL Private Utilities [START]
     453//---------------------------------------------------------------------------//
     454
     455
    436456// 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.
    439460// What we want to do here is to have the
    440461text_tmap mssqldbclass::read_infodb_file(text_t filename)
     
    494515}
    495516
    496 //-------------------------------------------------------------------------------------//
     517//---------------------------------------------------------------------------//
    497518// MS-SQL Private Utilities [END]
    498 //-------------------------------------------------------------------------------------//
    499 
     519//---------------------------------------------------------------------------//
     520
Note: See TracChangeset for help on using the changeset viewer.