Changeset 15836


Ignore:
Timestamp:
2008-05-30T16:00:47+12:00 (16 years ago)
Author:
mdewsnip
Message:

(Adding dynamic classifiers) Not sure if this is necessarily the best place to do this, but added the ability to request the documents from a "get_documents_with_metadata_value()" call to be sorted based on a certain metadata element. Thanks to John Thompson for the SQL statement help.

Location:
gsdl/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/lib/sqldbclass.h

    r15803 r15836  
    4444  // returns array of document OIDs
    4545  virtual text_tarray get_documents_with_metadata_value (const text_t &metadata_element_name,
    46                              const text_t &metadata_value) = 0;
     46                             const text_t &metadata_value,
     47                             const text_t &sort_by_metadata_element_name) = 0;
    4748
    4849  // returns array of values
  • gsdl/trunk/lib/sqlitedbclass.cpp

    r15811 r15836  
    100100// returns array of document OIDs
    101101text_tarray sqlitedbclass::get_documents_with_metadata_value (const text_t &metadata_element_name,
    102                                   const text_t &metadata_value)
     102                                  const text_t &metadata_value,
     103                                  const text_t &sort_by_metadata_element_name)
    103104{
    104105  text_tarray document_OIDs;
     
    111112
    112113  // Get the entries in the "document_metadata" table where the element and value matches those specified
    113   text_t sql_cmd = "SELECT docOID FROM document_metadata WHERE element='" + metadata_element_name + "' AND value='" + metadata_value + "'";
     114  text_t sql_cmd;
     115  if (sort_by_metadata_element_name == "")
     116  {
     117    // No sorting required
     118    sql_cmd = "SELECT docOID FROM document_metadata WHERE element='" + metadata_element_name + "' AND value='" + metadata_value + "'";
     119  }
     120  else
     121  {
     122    // Sort the documents by a certain metadata element
     123    // John Thompson thinks this may not be the most efficient solution, and recommends using ON instead of WHERE
     124    sql_cmd = "SELECT b.docOID FROM document_metadata AS a LEFT JOIN document_metadata AS b USING (docOID) WHERE a.element='" + metadata_element_name + "' AND a.value='" + metadata_value + "' AND b.element='" + sort_by_metadata_element_name + "' ORDER BY b.value";
     125  }
    114126  vector<text_tmap> sql_results;
    115127  if (!sqlgetarray(sql_cmd, sql_results) || sql_results.size() == 0)
  • gsdl/trunk/lib/sqlitedbclass.h

    r15803 r15836  
    4747  // returns array of document OIDs
    4848  text_tarray get_documents_with_metadata_value (const text_t &metadata_element_name,
    49                          const text_t &metadata_value);
     49                         const text_t &metadata_value,
     50                         const text_t &sort_by_metadata_element_name);
    5051
    5152  // returns file extension string
  • gsdl/trunk/src/colservr/sqlbrowsefilter.cpp

    r15804 r15836  
    160160    text_t metadata_element_name = "";
    161161    text_t metadata_value = "";
     162    text_t sort_by_metadata_element_name = "";
    162163    OptionValue_tarray::const_iterator options_iterator = request.filterOptions.begin();
    163164    while (options_iterator != request.filterOptions.end())
     
    171172    metadata_value = (*options_iterator).value;
    172173      }
     174      if ((*options_iterator).name == "SortByMetadataElement")
     175      {
     176    sort_by_metadata_element_name = (*options_iterator).value;
     177      }
    173178      options_iterator++;
    174179    }
    175180
    176     text_tarray document_OIDs = sql_db_ptr->get_documents_with_metadata_value (metadata_element_name, metadata_value);
     181    text_tarray document_OIDs = sql_db_ptr->get_documents_with_metadata_value (metadata_element_name, metadata_value, sort_by_metadata_element_name);
    177182
    178183    // Fill in response.docInfo with the document OIDs
  • gsdl/trunk/src/protocol/recptprototools.cpp

    r15806 r15836  
    284284
    285285
    286 bool get_documents_with_metadata_value (const text_t metadata_element_name, const text_t metadata_value, 
    287                     const text_t &collection, recptproto *collectproto,
    288                     FilterResponse_t &response, ostream &logout)
     286bool get_documents_with_metadata_value (const text_t metadata_element_name, const text_t metadata_value,
     287                    const text_t sort_by_metadata_element_name, const text_t &collection,
     288                    recptproto *collectproto, FilterResponse_t &response, ostream &logout)
    289289{
    290290  response.clear();
     
    304304  request_option.value = metadata_value;
    305305  request.filterOptions.push_back (request_option);
     306  request_option.name = "SortByMetadataElement";
     307  request_option.value = sort_by_metadata_element_name;
     308  request.filterOptions.push_back (request_option);
    306309
    307310  assert (collectproto != NULL);
  • gsdl/trunk/src/protocol/recptprototools.h

    r15806 r15836  
    7171              recptproto *collectproto, FilterResponse_t &response, ostream &logout);
    7272
    73 bool get_documents_with_metadata_value (const text_t metadata_element_name, const text_t metadata_value, 
    74                     const text_t &collection, recptproto *collectproto,
    75                     FilterResponse_t &response, ostream &logout);
     73bool get_documents_with_metadata_value (const text_t metadata_element_name, const text_t metadata_value,
     74                    const text_t sort_by_metadata_element_name, const text_t &collection,
     75                    recptproto *collectproto, FilterResponse_t &response, ostream &logout);
    7676
    7777#endif
  • gsdl/trunk/src/recpt/dynamicclassifieraction.cpp

    r15834 r15836  
    168168    text_t metadata_value = arg_dcn;
    169169    FilterResponse_t document_OIDs_response;
    170     get_documents_with_metadata_value (metadata_element_name, metadata_value, args["c"], collectproto, document_OIDs_response, logout);
     170    get_documents_with_metadata_value (metadata_element_name, metadata_value, "dls.Title", args["c"], collectproto, document_OIDs_response, logout);
    171171
    172172    // Check the metadata value is valid
Note: See TracChangeset for help on using the changeset viewer.