Changeset 16180
- Timestamp:
- 2008-06-25T15:38:55+12:00 (15 years ago)
- Location:
- gsdl/trunk/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/src/colservr/sqlbrowsefilter.cpp
r16040 r16180 109 109 if (request.requestParams == "GetMetadataValues") 110 110 { 111 text_t metadata_element_name = "";111 text_tarray metadata_element_names; 112 112 text_t metadata_value_filter = ""; 113 113 text_t metadata_value_grouping_expression = ""; … … 115 115 while (options_iterator != request.filterOptions.end()) 116 116 { 117 if ((*options_iterator).name == "MetadataElement ")118 { 119 metadata_element_name = (*options_iterator).value;117 if ((*options_iterator).name == "MetadataElements") 118 { 119 splitchar ((*options_iterator).value.begin(), (*options_iterator).value.end(), ',', metadata_element_names); 120 120 } 121 121 if ((*options_iterator).name == "MetadataValueFilter") … … 130 130 } 131 131 132 text_tarray metadata_values = sql_db_ptr->get_metadata_values (metadata_element_name , metadata_value_filter, metadata_value_grouping_expression);132 text_tarray metadata_values = sql_db_ptr->get_metadata_values (metadata_element_names, metadata_value_filter, metadata_value_grouping_expression); 133 133 134 134 // Create a map from metadata value to ResultDocInfo_t, to remove duplicate values and obtain occurrence counts … … 168 168 else if (request.requestParams == "GetDocumentsWithMetadataValue") 169 169 { 170 text_t metadata_element_name = "";170 text_tarray metadata_element_names; 171 171 text_t metadata_value = ""; 172 172 text_t sort_by_metadata_element_name = ""; … … 174 174 while (options_iterator != request.filterOptions.end()) 175 175 { 176 if ((*options_iterator).name == "MetadataElement ")177 { 178 metadata_element_name = (*options_iterator).value;176 if ((*options_iterator).name == "MetadataElements") 177 { 178 splitchar ((*options_iterator).value.begin(), (*options_iterator).value.end(), ',', metadata_element_names); 179 179 } 180 180 if ((*options_iterator).name == "MetadataValue") … … 189 189 } 190 190 191 text_tarray document_OIDs = sql_db_ptr->get_documents_with_metadata_value (metadata_element_name , metadata_value, sort_by_metadata_element_name);191 text_tarray document_OIDs = sql_db_ptr->get_documents_with_metadata_value (metadata_element_names, metadata_value, sort_by_metadata_element_name); 192 192 193 193 // Fill in response.docInfo with the document OIDs -
gsdl/trunk/src/lib/sqldbclass.h
r16039 r16180 43 43 44 44 // returns array of document OIDs 45 virtual text_tarray get_documents_with_metadata_value (const text_t &metadata_element_name,45 virtual text_tarray get_documents_with_metadata_value (const text_tarray &metadata_element_names, 46 46 const text_t &metadata_value, 47 47 const text_t &sort_by_metadata_element_name) = 0; 48 48 49 49 // returns array of values 50 virtual text_tarray get_metadata_values (const text_t &metadata_element_name,50 virtual text_tarray get_metadata_values (const text_tarray &metadata_element_names, 51 51 const text_t &metadata_value_filter, 52 52 const text_t &metadata_value_grouping_expression) = 0; -
gsdl/trunk/src/lib/sqlitedbclass.cpp
r16041 r16180 99 99 100 100 // returns array of document OIDs 101 text_tarray sqlitedbclass::get_documents_with_metadata_value (const text_t &metadata_element_name,101 text_tarray sqlitedbclass::get_documents_with_metadata_value (const text_tarray &metadata_element_names, 102 102 const text_t &metadata_value, 103 103 const text_t &sort_by_metadata_element_name) … … 105 105 text_tarray document_OIDs; 106 106 107 // Check a metadata element andvalue has been specified108 if (metadata_element_name == ""|| metadata_value == "")107 // Check at least one metadata element and a metadata value has been specified 108 if (metadata_element_names.empty() || metadata_value == "") 109 109 { 110 110 return document_OIDs; … … 112 112 113 113 // Get the entries in the "document_metadata" table where the element and value matches those specified 114 text_t sql_cmd = "SELECT DISTINCT docOID FROM document_metadata WHERE element='" + sqlite_safe(metadata_element_name) + "' AND value='" + sqlite_safe(metadata_value) + "'"; 114 text_t sql_cmd = "SELECT DISTINCT docOID FROM document_metadata WHERE element IN ('" + sqlite_safe(metadata_element_names[0]) + "'"; 115 for (int i = 1; i < metadata_element_names.size(); i++) 116 { 117 sql_cmd += ",'" + sqlite_safe(metadata_element_names[i]) + "'"; 118 } 119 sql_cmd += ") AND value='" + sqlite_safe(metadata_value) + "'"; 115 120 116 121 // If we're sorting the documents by a certain metadata element, extend the SQL command to do this … … 190 195 191 196 // returns array of values 192 text_tarray sqlitedbclass::get_metadata_values (const text_t &metadata_element_name,197 text_tarray sqlitedbclass::get_metadata_values (const text_tarray &metadata_element_names, 193 198 const text_t &metadata_value_filter, 194 199 const text_t &metadata_value_grouping_expression) … … 196 201 text_tarray metadata_values; 197 202 198 // Check a metadata element has been specified199 if (metadata_element_name == "")203 // Check at least one metadata element has been specified 204 if (metadata_element_names.empty()) 200 205 { 201 206 return metadata_values; … … 210 215 211 216 // Get the entries in the "document_metadata" table where the element matches that specified 212 text_t sql_cmd = "SELECT DISTINCT docOID," + value_select_expression + " FROM document_metadata WHERE element='" + sqlite_safe(metadata_element_name) + "'"; 217 text_t sql_cmd = "SELECT DISTINCT docOID," + value_select_expression + " FROM document_metadata WHERE element IN ('" + sqlite_safe(metadata_element_names[0]) + "'"; 218 for (int i = 1; i < metadata_element_names.size(); i++) 219 { 220 sql_cmd += ",'" + sqlite_safe(metadata_element_names[i]) + "'"; 221 } 222 sql_cmd += ")"; 213 223 214 224 // Add value filter, if one has been defined -
gsdl/trunk/src/lib/sqlitedbclass.h
r16039 r16180 46 46 47 47 // returns array of document OIDs 48 text_tarray get_documents_with_metadata_value (const text_t &metadata_element_name,48 text_tarray get_documents_with_metadata_value (const text_tarray &metadata_element_names, 49 49 const text_t &metadata_value, 50 50 const text_t &sort_by_metadata_element_name); … … 60 60 61 61 // returns array of values 62 text_tarray get_metadata_values (const text_t &metadata_element_name,62 text_tarray get_metadata_values (const text_tarray &metadata_element_names, 63 63 const text_t &metadata_value_filter, 64 64 const text_t &metadata_value_grouping_expression); -
gsdl/trunk/src/protocol/recptprototools.cpp
r16039 r16180 251 251 252 252 253 bool get_metadata_values (const text_t metadata_element _name, const text_t metadata_value_filter,253 bool get_metadata_values (const text_t metadata_elements, const text_t metadata_value_filter, 254 254 const text_t metadata_value_grouping_expression, const text_t &collection, 255 255 recptproto *collectproto, FilterResponse_t &response, ostream &logout) … … 265 265 266 266 OptionValue_t request_option; 267 request_option.name = "MetadataElement ";268 request_option.value = metadata_element _name;267 request_option.name = "MetadataElements"; 268 request_option.value = metadata_elements; 269 269 request.filterOptions.push_back (request_option); 270 270 request_option.name = "MetadataValueFilter"; … … 281 281 outconvertclass text_t2ascii; 282 282 logout << text_t2ascii 283 << "Error: call to filter failed for " << metadata_element _name283 << "Error: call to filter failed for " << metadata_elements 284 284 << " in recptprototools::get_metadata_values (" 285 285 << get_comerror_string (err) << ")\n"; … … 291 291 292 292 293 bool get_documents_with_metadata_value (const text_t metadata_element _name, const text_t metadata_value,293 bool get_documents_with_metadata_value (const text_t metadata_elements, const text_t metadata_value, 294 294 const text_t sort_by_metadata_element_name, const text_t &collection, 295 295 recptproto *collectproto, FilterResponse_t &response, ostream &logout) … … 305 305 306 306 OptionValue_t request_option; 307 request_option.name = "MetadataElement ";308 request_option.value = metadata_element _name;307 request_option.name = "MetadataElements"; 308 request_option.value = metadata_elements; 309 309 request.filterOptions.push_back (request_option); 310 310 request_option.name = "MetadataValue"; … … 321 321 outconvertclass text_t2ascii; 322 322 logout << text_t2ascii 323 << "Error: call to filter failed for " << metadata_element _name<< " = " << metadata_value323 << "Error: call to filter failed for " << metadata_elements << " = " << metadata_value 324 324 << " in recptprototools::get_documents_with_metadata_value (" 325 325 << get_comerror_string (err) << ")\n"; -
gsdl/trunk/src/protocol/recptprototools.h
r16039 r16180 68 68 ostream &logout); 69 69 70 bool get_metadata_values (const text_t metadata_element _name, const text_t metadata_value_filter,70 bool get_metadata_values (const text_t metadata_elements, const text_t metadata_value_filter, 71 71 const text_t metadata_value_grouping_expression, const text_t &collection, 72 72 recptproto *collectproto, FilterResponse_t &response, ostream &logout); 73 73 74 bool get_documents_with_metadata_value (const text_t metadata_element _name, const text_t metadata_value,74 bool get_documents_with_metadata_value (const text_t metadata_elements, const text_t metadata_value, 75 75 const text_t sort_by_metadata_element_name, const text_t &collection, 76 76 recptproto *collectproto, FilterResponse_t &response, ostream &logout);
Note:
See TracChangeset
for help on using the changeset viewer.