Fix sorting by editor in Creator column (since 5.0.78)
This commit is contained in:
parent
851af7f45b
commit
eec0f00784
1 changed files with 52 additions and 61 deletions
|
@ -1359,11 +1359,14 @@ Zotero.Items = function() {
|
|||
return _sortCreatorSQL;
|
||||
}
|
||||
|
||||
var editorCreatorTypeID = Zotero.CreatorTypes.getID('editor');
|
||||
var contributorCreatorTypeID = Zotero.CreatorTypes.getID('contributor');
|
||||
|
||||
var nameSQL = "lastName || ' ' || firstName ";
|
||||
|
||||
var sql = "COALESCE(" +
|
||||
var sql = "COALESCE("
|
||||
// First try for primary creator types
|
||||
"CASE (" +
|
||||
+ "CASE (" +
|
||||
"SELECT COUNT(*) FROM itemCreators IC " +
|
||||
"LEFT JOIN itemTypeCreatorTypes ITCT " +
|
||||
"ON (IC.creatorTypeID=ITCT.creatorTypeID AND ITCT.itemTypeID=O.itemTypeID) " +
|
||||
|
@ -1404,69 +1407,57 @@ Zotero.Items = function() {
|
|||
"LEFT JOIN itemTypeCreatorTypes ITCT " +
|
||||
"ON (IC.creatorTypeID=ITCT.creatorTypeID AND ITCT.itemTypeID=O.itemTypeID) " +
|
||||
"WHERE itemID=O.itemID AND primaryField=1 ORDER BY orderIndex LIMIT 2,1)" +
|
||||
") " +
|
||||
"END, " +
|
||||
") "
|
||||
+ "END, "
|
||||
|
||||
// Then try editors
|
||||
"CASE (" +
|
||||
"SELECT COUNT(*) FROM itemCreators WHERE itemID=O.itemID AND creatorTypeID IN (3)" +
|
||||
") " +
|
||||
"WHEN 0 THEN NULL " +
|
||||
"WHEN 1 THEN (" +
|
||||
"SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (3)" +
|
||||
") " +
|
||||
"WHEN 2 THEN (" +
|
||||
"SELECT " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (3) ORDER BY orderIndex LIMIT 1)" +
|
||||
" || ' ' || " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (3) ORDER BY orderIndex LIMIT 1,1) " +
|
||||
") " +
|
||||
"ELSE (" +
|
||||
"SELECT " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (3) ORDER BY orderIndex LIMIT 1)" +
|
||||
" || ' ' || " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (3) ORDER BY orderIndex LIMIT 1,1)" +
|
||||
" || ' ' || " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (3) ORDER BY orderIndex LIMIT 2,1)" +
|
||||
") " +
|
||||
"END, " +
|
||||
+ "CASE ("
|
||||
+ "SELECT COUNT(*) FROM itemCreators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${editorCreatorTypeID}`
|
||||
+ ") "
|
||||
+ "WHEN 0 THEN NULL "
|
||||
+ "WHEN 1 THEN ("
|
||||
+ "SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${editorCreatorTypeID}`
|
||||
+ ") "
|
||||
+ "END, "
|
||||
|
||||
// Then try contributors
|
||||
"CASE (" +
|
||||
"SELECT COUNT(*) FROM itemCreators WHERE itemID=O.itemID AND creatorTypeID IN (2)" +
|
||||
") " +
|
||||
"WHEN 0 THEN NULL " +
|
||||
"WHEN 1 THEN (" +
|
||||
"SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (2)" +
|
||||
") " +
|
||||
"WHEN 2 THEN (" +
|
||||
"SELECT " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (2) ORDER BY orderIndex LIMIT 1)" +
|
||||
" || ' ' || " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (2) ORDER BY orderIndex LIMIT 1,1) " +
|
||||
") " +
|
||||
"ELSE (" +
|
||||
"SELECT " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (2) ORDER BY orderIndex LIMIT 1)" +
|
||||
" || ' ' || " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (2) ORDER BY orderIndex LIMIT 1,1)" +
|
||||
" || ' ' || " +
|
||||
"(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators " +
|
||||
"WHERE itemID=O.itemID AND creatorTypeID IN (2) ORDER BY orderIndex LIMIT 2,1)" +
|
||||
") " +
|
||||
"END" +
|
||||
") AS sortCreator";
|
||||
+ "CASE ("
|
||||
+ "SELECT COUNT(*) FROM itemCreators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${contributorCreatorTypeID}`
|
||||
+ ") "
|
||||
+ "WHEN 0 THEN NULL "
|
||||
+ "WHEN 1 THEN ("
|
||||
+ "SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${contributorCreatorTypeID}`
|
||||
+ ") "
|
||||
+ "WHEN 2 THEN ("
|
||||
+ "SELECT "
|
||||
+ "(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${contributorCreatorTypeID} `
|
||||
+ "ORDER BY orderIndex LIMIT 1)"
|
||||
+ " || ' ' || "
|
||||
+ "(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${contributorCreatorTypeID} `
|
||||
+ "ORDER BY orderIndex LIMIT 1,1) "
|
||||
+ ") "
|
||||
+ "ELSE ("
|
||||
+ "SELECT "
|
||||
+ "(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${contributorCreatorTypeID} `
|
||||
+ "ORDER BY orderIndex LIMIT 1)"
|
||||
+ " || ' ' || "
|
||||
+ "(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${contributorCreatorTypeID} `
|
||||
+ "ORDER BY orderIndex LIMIT 1,1)"
|
||||
+ " || ' ' || "
|
||||
+ "(SELECT " + nameSQL + " FROM itemCreators NATURAL JOIN creators "
|
||||
+ `WHERE itemID=O.itemID AND creatorTypeID=${contributorCreatorTypeID} `
|
||||
+ "ORDER BY orderIndex LIMIT 2,1)"
|
||||
+ ") "
|
||||
+ "END"
|
||||
+ ") AS sortCreator";
|
||||
|
||||
_sortCreatorSQL = sql;
|
||||
return sql;
|
||||
|
|
Loading…
Add table
Reference in a new issue