From eec0f00784de0c62720b5306372e08b771257927 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Wed, 29 Jan 2020 13:39:17 -0500 Subject: [PATCH] Fix sorting by editor in Creator column (since 5.0.78) --- chrome/content/zotero/xpcom/data/items.js | 113 ++++++++++------------ 1 file changed, 52 insertions(+), 61 deletions(-) diff --git a/chrome/content/zotero/xpcom/data/items.js b/chrome/content/zotero/xpcom/data/items.js index 2323f0f090..891b407d60 100644 --- a/chrome/content/zotero/xpcom/data/items.js +++ b/chrome/content/zotero/xpcom/data/items.js @@ -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;