Miscellaneous data layer fixes and tweaks
This commit is contained in:
parent
53e40bb0f4
commit
aa512f0f8d
|
@ -258,7 +258,7 @@ Zotero.Collection.prototype._initSave = Zotero.Promise.coroutine(function* (env)
|
|||
|
||||
// Verify parent
|
||||
if (this._parentKey) {
|
||||
let newParent = this.ObjectsClass.getByLibraryAndKey(
|
||||
let newParent = yield this.ObjectsClass.getByLibraryAndKeyAsync(
|
||||
this.libraryID, this._parentKey
|
||||
);
|
||||
|
||||
|
@ -285,6 +285,7 @@ Zotero.Collection.prototype._initSave = Zotero.Promise.coroutine(function* (env)
|
|||
|
||||
Zotero.Collection.prototype._saveData = Zotero.Promise.coroutine(function* (env) {
|
||||
var isNew = env.isNew;
|
||||
var options = env.options;
|
||||
|
||||
var collectionID = env.id = this._id = this.id ? this.id : yield Zotero.ID.get('collections');
|
||||
var libraryID = env.libraryID = this.libraryID || Zotero.Libraries.userLibraryID;
|
||||
|
@ -311,10 +312,14 @@ Zotero.Collection.prototype._saveData = Zotero.Promise.coroutine(function* (env)
|
|||
this.version ? this.version : 0,
|
||||
this.synced ? 1 : 0
|
||||
];
|
||||
if (isNew || !options.skipClientDateModified) {
|
||||
columns.push('clientDateModified');
|
||||
sqlValues.push(Zotero.DB.transactionDateTime);
|
||||
}
|
||||
|
||||
if (isNew) {
|
||||
var placeholders = columns.map(function () '?').join();
|
||||
|
||||
var sql = "REPLACE INTO collections (" + columns.join(', ') + ") "
|
||||
let placeholders = columns.map(function () '?').join();
|
||||
let sql = "INSERT INTO collections (" + columns.join(', ') + ") "
|
||||
+ "VALUES (" + placeholders + ")";
|
||||
var insertID = yield Zotero.DB.queryAsync(sql, sqlValues);
|
||||
if (!collectionID) {
|
||||
|
|
|
@ -169,7 +169,7 @@ Zotero.Creators = new function() {
|
|||
firstName: '',
|
||||
lastName: ''
|
||||
};
|
||||
for (i=0; i<this.fields.length; i++) {
|
||||
for (let i=0; i<this.fields.length; i++) {
|
||||
let field = this.fields[i];
|
||||
let val = data[field];
|
||||
switch (field) {
|
||||
|
|
|
@ -36,7 +36,7 @@ Zotero.Item = function(itemTypeOrID) {
|
|||
|
||||
this._disabled = false;
|
||||
|
||||
// loadPrimaryData (additional properties in dataObjet.js)
|
||||
// loadPrimaryData (additional properties in dataObject.js)
|
||||
this._itemTypeID = null;
|
||||
this._firstCreator = null;
|
||||
this._sortCreator = null;
|
||||
|
@ -290,7 +290,7 @@ Zotero.Item.prototype.getField = function(field, unformatted, includeBaseMapped)
|
|||
|
||||
/**
|
||||
* @param {Boolean} asNames
|
||||
* @return {Integer{}|String[]}
|
||||
* @return {Integer[]|String[]}
|
||||
*/
|
||||
Zotero.Item.prototype.getUsedFields = function(asNames) {
|
||||
this._requireData('itemData');
|
||||
|
@ -711,7 +711,7 @@ Zotero.Item.prototype.setField = function(field, value, loadIn) {
|
|||
this._requireData('primaryData');
|
||||
|
||||
if (loadIn) {
|
||||
throw('Cannot set primary field ' + field + ' in loadIn mode in Zotero.Item.setField()');
|
||||
throw new Error('Cannot set primary field ' + field + ' in loadIn mode in Zotero.Item.setField()');
|
||||
}
|
||||
|
||||
switch (field) {
|
||||
|
@ -736,7 +736,7 @@ Zotero.Item.prototype.setField = function(field, value, loadIn) {
|
|||
break;
|
||||
|
||||
default:
|
||||
throw ('Primary field ' + field + ' cannot be changed in Zotero.Item.setField()');
|
||||
throw new Error('Primary field ' + field + ' cannot be changed in Zotero.Item.setField()');
|
||||
|
||||
}
|
||||
|
||||
|
@ -1534,7 +1534,7 @@ Zotero.Item.prototype._saveData = Zotero.Promise.coroutine(function* (env) {
|
|||
}
|
||||
}
|
||||
|
||||
if (this.isAttachment() || this._changed.attachmentData) {
|
||||
if (this._changed.attachmentData) {
|
||||
let sql = "REPLACE INTO itemAttachments (itemID, parentItemID, linkMode, "
|
||||
+ "contentType, charsetID, path, syncState) VALUES (?,?,?,?,?,?,?)";
|
||||
let linkMode = this.attachmentLinkMode;
|
||||
|
@ -3803,7 +3803,9 @@ Zotero.Item.prototype.multiDiff = Zotero.Promise.coroutine(function* (otherItems
|
|||
|
||||
|
||||
/**
|
||||
* Returns an unsaved copy of the item
|
||||
* Returns an unsaved copy of the item without an itemID or key
|
||||
*
|
||||
* This is used to duplicate items and copy them between libraries.
|
||||
*
|
||||
* @param {Number} [libraryID] - libraryID of the new item, or the same as original if omitted
|
||||
* @param {Boolean} [skipTags=false] - Skip tags
|
||||
|
@ -3997,7 +3999,7 @@ Zotero.Item.prototype.fromJSON = Zotero.Promise.coroutine(function* (json) {
|
|||
var setFields = {};
|
||||
|
||||
// Primary data
|
||||
for (var field in json) {
|
||||
for (let field in json) {
|
||||
let val = json[field];
|
||||
|
||||
switch (field) {
|
||||
|
|
|
@ -120,48 +120,11 @@ Zotero.Search.prototype._set = function (field, value) {
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Load a saved search from the DB
|
||||
*/
|
||||
Zotero.Search.prototype.loadPrimaryData = Zotero.Promise.coroutine(function* (reload) {
|
||||
if (this._loaded.primaryData && !reload) return;
|
||||
|
||||
var id = this._id;
|
||||
var key = this._key;
|
||||
var libraryID = this._libraryID;
|
||||
var desc = id ? id : libraryID + "/" + key;
|
||||
|
||||
if (!id && !key) {
|
||||
throw new Error('ID or key not set');
|
||||
}
|
||||
|
||||
var sql = Zotero.Searches.getPrimaryDataSQL()
|
||||
if (id) {
|
||||
sql += " AND savedSearchID=?";
|
||||
var params = id;
|
||||
}
|
||||
else {
|
||||
sql += " AND key=? AND libraryID=?";
|
||||
var params = [key, libraryID];
|
||||
}
|
||||
var data = yield Zotero.DB.rowQueryAsync(sql, params);
|
||||
|
||||
this._loaded.primaryData = true;
|
||||
this._clearChanged('primaryData');
|
||||
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.loadFromRow(data);
|
||||
});
|
||||
|
||||
|
||||
Zotero.Search.prototype.loadFromRow = function (row) {
|
||||
this._id = row.savedSearchID;
|
||||
this._libraryID = row.libraryID;
|
||||
this._key = row.key;
|
||||
this._name = row.savedSearchName;
|
||||
this._name = row.name;
|
||||
this._version = row.version;
|
||||
this._synced = !!row.synced;
|
||||
|
||||
|
@ -171,15 +134,18 @@ Zotero.Search.prototype.loadFromRow = function (row) {
|
|||
}
|
||||
|
||||
Zotero.Search.prototype._initSave = Zotero.Promise.coroutine(function* (env) {
|
||||
if (!this.libraryID) {
|
||||
throw new Error('libraryID must be set before saving search');
|
||||
}
|
||||
if (!this.name) {
|
||||
throw new Error('Name not provided for saved search');
|
||||
}
|
||||
|
||||
return Zotero.Search._super.prototype._initSave.apply(this, arguments);
|
||||
});
|
||||
|
||||
Zotero.Search.prototype._saveData = Zotero.Promise.coroutine(function* (env) {
|
||||
var isNew = env.isNew;
|
||||
var options = env.options;
|
||||
|
||||
var searchID = env.id = this._id = this.id ? this.id : yield Zotero.ID.get('savedSearches');
|
||||
var libraryID = env.libraryID = this.libraryID || Zotero.Libraries.userLibraryID;
|
||||
|
@ -189,7 +155,6 @@ Zotero.Search.prototype._saveData = Zotero.Promise.coroutine(function* (env) {
|
|||
var columns = [
|
||||
'savedSearchID',
|
||||
'savedSearchName',
|
||||
'clientDateModified',
|
||||
'libraryID',
|
||||
'key',
|
||||
'version',
|
||||
|
@ -204,12 +169,27 @@ Zotero.Search.prototype._saveData = Zotero.Promise.coroutine(function* (env) {
|
|||
this.version ? this.version : 0,
|
||||
this.synced ? 1 : 0
|
||||
];
|
||||
if (isNew || !options.skipClientDateModified) {
|
||||
columns.push('clientDateModified');
|
||||
sqlValues.push(Zotero.DB.transactionDateTime);
|
||||
}
|
||||
|
||||
var sql = "REPLACE INTO savedSearches (" + columns.join(', ') + ") "
|
||||
+ "VALUES (" + placeholders + ")";
|
||||
var insertID = yield Zotero.DB.queryAsync(sql, sqlValues);
|
||||
if (!searchID) {
|
||||
searchID = env.id = insertID;
|
||||
if (isNew) {
|
||||
let placeholders = columns.map(function () '?').join();
|
||||
let sql = "INSERT INTO savedSearches (" + columns.join(', ') + ") "
|
||||
+ "VALUES (" + placeholders + ")";
|
||||
var insertID = yield Zotero.DB.queryAsync(sql, sqlValues);
|
||||
if (!searchID) {
|
||||
searchID = env.id = insertID;
|
||||
}
|
||||
}
|
||||
else {
|
||||
columns.shift();
|
||||
sqlValues.push(sqlValues.shift());
|
||||
let sql = 'UPDATE savedSearches SET '
|
||||
+ columns.map(function (x) x + '=?').join(', ')
|
||||
+ ' WHERE savedSearchID=?';
|
||||
yield Zotero.DB.queryAsync(sql, sqlValues);
|
||||
}
|
||||
|
||||
if (!isNew) {
|
||||
|
@ -1674,18 +1654,19 @@ Zotero.Searches = function() {
|
|||
this.constructor = null;
|
||||
|
||||
this._ZDO_object = 'search';
|
||||
this._ZDO_id = 'savedSearch';
|
||||
this._ZDO_id = 'savedSearchID';
|
||||
this._ZDO_table = 'savedSearches';
|
||||
|
||||
this._primaryDataSQLParts = {
|
||||
savedSearchID: "O.savedSearchID",
|
||||
name: "O.savedSearchName",
|
||||
name: "O.savedSearchName AS name",
|
||||
libraryID: "O.libraryID",
|
||||
key: "O.key",
|
||||
version: "O.version",
|
||||
synced: "O.synced"
|
||||
}
|
||||
|
||||
this._primaryDataSQLFrom = "FROM savedSearches O";
|
||||
|
||||
this.init = Zotero.Promise.coroutine(function* () {
|
||||
yield Zotero.DataObjects.prototype.init.apply(this);
|
||||
|
@ -1715,7 +1696,6 @@ Zotero.Searches = function() {
|
|||
var searches = [];
|
||||
for (var i=0; i<rows.length; i++) {
|
||||
let search = new Zotero.Search;
|
||||
search.libraryID = libraryID;
|
||||
search.id = rows[i].id;
|
||||
yield search.loadPrimaryData();
|
||||
searches.push(search);
|
||||
|
|
Loading…
Reference in New Issue
Block a user