From 7ab0a62e3808d83501d6562c09f5ce0d91f87933 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 17 May 2009 07:54:42 +0000 Subject: [PATCH] Fix dragging of items with old creators with NULL values into group libraries, and store (currently unused) shortName and birthYear fields as '' and NULL, respectively --- chrome/content/zotero/xpcom/data/creators.js | 58 ++++++++------------ chrome/content/zotero/xpcom/schema.js | 5 ++ userdata.sql | 2 +- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/chrome/content/zotero/xpcom/data/creators.js b/chrome/content/zotero/xpcom/data/creators.js index 0113632d54..11ca92983e 100644 --- a/chrome/content/zotero/xpcom/data/creators.js +++ b/chrome/content/zotero/xpcom/data/creators.js @@ -34,7 +34,7 @@ Zotero.Creators = new function() { this.erase = erase; this.purge = purge; - this.fields = ['firstName', 'lastName', 'fieldMode', 'birthYear']; + this.__defineGetter__('fields', function () ['firstName', 'lastName', 'shortName', 'fieldMode', 'birthYear']); var _creatorDataHash = {}; // creatorDataIDs indexed by md5 hash of data @@ -82,15 +82,12 @@ Zotero.Creators = new function() { return _creatorDataHash[hash]; } - Zotero.DB.beginTransaction(); + var params = []; + for each(var field in fields) { + params.push(field); + } - var params = [ - fields.firstName, - fields.lastName, - '', - fields.fieldMode, - fields.birthYear - ]; + Zotero.DB.beginTransaction(); var sql = "SELECT creatorDataID FROM creatorData WHERE " + "firstName=? AND lastName=? AND shortName=? " @@ -303,31 +300,24 @@ Zotero.Creators = new function() { function _cleanFields(fields) { - var cleanedFields = { - firstName: '', - lastName: '', - fieldMode: 0, - birthYear: '' - }; - for (var field in fields) { - if (fields[field]) { - switch (field) { - // Strings - case 'firstName': - case 'lastName': - case 'shortName': - cleanedFields[field] = fields[field] + ''; - break; - - // Integer - case 'fieldMode': - cleanedFields[field] = fields[field] ? fields[field] : 0; - break; - - // Null if empty - default: - cleanedFields[field] = fields[field] ? fields[field] : null; - } + var cleanedFields = {}; + for each(var field in Zotero.Creators.fields) { + switch (field) { + // Strings + case 'firstName': + case 'lastName': + case 'shortName': + cleanedFields[field] = fields[field] ? fields[field] + '' : ''; + break; + + // Integer + case 'fieldMode': + cleanedFields[field] = fields[field] ? fields[field] : 0; + break; + + // Null if empty + case 'birthYear': + cleanedFields[field] = fields[field] ? fields[field] : null; } } return cleanedFields; diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js index 3954235ab4..c1f5479959 100644 --- a/chrome/content/zotero/xpcom/schema.js +++ b/chrome/content/zotero/xpcom/schema.js @@ -2367,6 +2367,11 @@ Zotero.Schema = new function(){ if (i==53) { Zotero.DB.query("DELETE FROM collectionItems WHERE itemID IN (SELECT itemID FROM items WHERE itemID IN (SELECT itemID FROM itemAttachments WHERE sourceItemID IS NOT NULL) OR itemID IN (SELECT itemID FROM itemNotes WHERE sourceItemID IS NOT NULL))"); } + + if (i==54) { + Zotero.DB.query("UPDATE creatorData SET shortName='' WHERE shortName IS NULL"); + Zotero.DB.query("UPDATE creatorData SET birthYear=NULL WHERE birthYear=''"); + } } _updateDBVersion('userdata', toVersion); diff --git a/userdata.sql b/userdata.sql index 4072aff974..4ca52e1a0a 100644 --- a/userdata.sql +++ b/userdata.sql @@ -1,4 +1,4 @@ --- 53 +-- 54 -- This file creates tables containing user-specific data for new users -- -- any changes made here must be mirrored in transition steps in schema.js::_migrateSchema()