A rather important part of the last commit

Refs #260
This commit is contained in:
Dan Stillman 2006-10-01 09:47:00 +00:00
parent a972a035c7
commit 2682ac0ee3

View File

@ -104,6 +104,9 @@ ZoteroAutoComplete.prototype.startSearch = function(searchString, searchParam,
searchParam = searchParts[0]; searchParam = searchParts[0];
switch (searchParam){ switch (searchParam){
case '':
break;
case 'tag': case 'tag':
var sql = "SELECT tag FROM tags WHERE tag LIKE ?"; var sql = "SELECT tag FROM tags WHERE tag LIKE ?";
var sqlParams = [searchString + '%']; var sqlParams = [searchString + '%'];
@ -114,45 +117,91 @@ ZoteroAutoComplete.prototype.startSearch = function(searchString, searchParam,
} }
sql += " ORDER BY tag"; sql += " ORDER BY tag";
var results = this._zotero.DB.columnQuery(sql, sqlParams); var results = this._zotero.DB.columnQuery(sql, sqlParams);
var resultCode = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
break; break;
case 'creator': case 'creator':
var [singleField, itemID] = extra.split('-'); // Valid fieldMode values:
// 0 == search two-field creators
// 1 == search single-field creators
// 2 == search both
var [fieldMode, itemID] = extra.split('-');
var sql = "SELECT " if (fieldMode==2)
// Full name not currently returned {
//+ "lastName" + (!singleField ? '' : "|| ', ' || firstName") var sql = "SELECT DISTINCT CASE isInstitution WHEN 1 THEN lastName "
+ searchParts[2] + "WHEN 0 THEN firstName || ' ' || lastName END AS name "
+ " AS name, creatorID " + "FROM creators WHERE CASE isInstitution "
+ "FROM creators WHERE " + searchParts[2] + " LIKE ? " + "WHEN 1 THEN lastName "
+ "AND isInstitution=?"; + "WHEN 0 THEN firstName || ' ' || lastName END "
var sqlParams = [searchString + '%', parseInt(singleField)]; + "LIKE ? ORDER BY name";
if (itemID){ var sqlParams = searchString + '%';
sql += " AND creatorID NOT IN (SELECT creatorID FROM "
+ "itemCreators WHERE itemID = ?)";
sqlParams.push(itemID);
} }
sql += " ORDER BY " + searchParts[2]; else
{
var sql = "SELECT "
// Full name not currently returned
//+ "lastName" + (!singleField ? '' : "|| ', ' || firstName")
+ searchParts[2]
+ " AS name, creatorID "
+ "FROM creators WHERE " + searchParts[2] + " LIKE ? "
+ "AND isInstitution=?";
var sqlParams = [searchString + '%', parseInt(fieldMode)];
if (itemID){
sql += " AND creatorID NOT IN (SELECT creatorID FROM "
+ "itemCreators WHERE itemID = ?)";
sqlParams.push(itemID);
}
sql += " ORDER BY " + searchParts[2];
}
var rows = this._zotero.DB.query(sql, sqlParams); var rows = this._zotero.DB.query(sql, sqlParams);
for each(var row in rows){ for each(var row in rows){
results.push(row['name']); results.push(row['name']);
// No currently used // Not currently used
//comments.push(row['creatorID']) //comments.push(row['creatorID'])
} }
var resultCode = Ci.nsIAutoCompleteResult.RESULT_SUCCESS; break;
case 'title':
// DEBUG: These two probably won't be necesary once there's a better
// date entry method
case 'dateModified':
case 'dateAdded':
var sql = "SELECT DISTINCT " + searchParam + " FROM items "
+ "WHERE " + searchParam + " LIKE ? ORDER BY " + searchParam;
var results = this._zotero.DB.columnQuery(sql, searchString + '%');
break; break;
default: default:
this._zotero.debug("'" + searchParam + "' is not a valid autocomplete scope", 1); var sql = "SELECT fieldID FROM fields WHERE fieldName=?";
var results = []; var fieldID = this._zotero.DB.valueQuery(sql, {string:searchParam});
var resultCode = Ci.nsIAutoCompleteResult.RESULT_IGNORED;
if (!fieldID){
this._zotero.debug("'" + searchParam + "' is not a valid autocomplete scope", 1);
var results = [];
var resultCode = Ci.nsIAutoCompleteResult.RESULT_IGNORED;
break;
}
var sql = "SELECT DISTINCT value FROM itemData WHERE fieldID=?1 AND "
+ "value LIKE ?2 "
var sqlParams = [fieldID, searchString + '%'];
if (extra){
sql += "AND value NOT IN (SELECT value FROM itemData "
+ "WHERE fieldID=?1 AND itemID=?3) ";
sqlParams.push(extra);
}
sql += "ORDER BY value";
var results = this._zotero.DB.columnQuery(sql, sqlParams);
} }
if (!results || !results.length){ if (!results || !results.length){
var results = []; var results = [];
var resultCode = Ci.nsIAutoCompleteResult.RESULT_NOMATCH; var resultCode = Ci.nsIAutoCompleteResult.RESULT_NOMATCH;
} }
else if (typeof resultCode == 'undefined'){
var resultCode = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
}
var result = new ZoteroAutoCompleteResult(searchString, var result = new ZoteroAutoCompleteResult(searchString,
resultCode, 0, "", results, comments); resultCode, 0, "", results, comments);