private static function loadItems($libraryID, $itemIDs = array()) { $shardID = Zotero_Shards::getByLibraryID($libraryID); $sql = self::getPrimaryDataSQL() . "1"; // TODO: optimize if ($itemIDs) { foreach ($itemIDs as $itemID) { if (!is_int($itemID)) { throw new Exception("Invalid itemID {$itemID}"); } } $sql .= ' AND itemID IN (' . implode(',', array_fill(0, sizeOf($itemIDs), '?')) . ')'; } $stmt = Zotero_DB::getStatement($sql, "loadItems_" . sizeOf($itemIDs), $shardID); $itemRows = Zotero_DB::queryFromStatement($stmt, $itemIDs); $loadedItemIDs = array(); if ($itemRows) { foreach ($itemRows as $row) { if ($row['libraryID'] != $libraryID) { throw new Exception("Item {$itemID} isn't in library {$libraryID}", Z_ERROR_OBJECT_LIBRARY_MISMATCH); } $itemID = $row['id']; $loadedItemIDs[] = $itemID; // Item isn't loaded -- create new object and stuff in array if (!isset(self::$objectCache[$itemID])) { $item = new Zotero_Item(); $item->loadFromRow($row, true); self::$objectCache[$itemID] = $item; } else { self::$objectCache[$itemID]->loadFromRow($row, true); } } } if (!$itemIDs) { // If loading all items, remove old items that no longer exist $ids = array_keys(self::$objectCache); foreach ($ids as $id) { if (!in_array($id, $loadedItemIDs)) { throw new Exception("Unimplemented"); //$this->unload($id); } } } }
private static function loadItems($libraryID, $itemIDs = array()) { $shardID = Zotero_Shards::getByLibraryID($libraryID); $sql = 'SELECT I.*, (SELECT COUNT(*) FROM itemNotes INo WHERE sourceItemID=I.itemID AND INo.itemID NOT IN (SELECT itemID FROM deletedItems)) AS numNotes, (SELECT COUNT(*) FROM itemAttachments IA WHERE sourceItemID=I.itemID AND IA.itemID NOT IN (SELECT itemID FROM deletedItems)) AS numAttachments FROM items I WHERE 1'; // TODO: optimize if ($itemIDs) { foreach ($itemIDs as $itemID) { if (!is_int($itemID)) { throw new Exception("Invalid itemID {$itemID}"); } } $sql .= ' AND I.itemID IN (' . implode(',', array_fill(0, sizeOf($itemIDs), '?')) . ')'; } $stmt = Zotero_DB::getStatement($sql, "loadItems_" . sizeOf($itemIDs), $shardID); $itemRows = Zotero_DB::queryFromStatement($stmt, $itemIDs); $loadedItemIDs = array(); if ($itemRows) { foreach ($itemRows as $row) { if ($row['libraryID'] != $libraryID) { throw new Exception("Item {$itemID} isn't in library {$libraryID}", Z_ERROR_OBJECT_LIBRARY_MISMATCH); } $itemID = $row['itemID']; $loadedItemIDs[] = $itemID; // Item isn't loaded -- create new object and stuff in array if (!isset(self::$itemsByID[$itemID])) { $item = new Zotero_Item(); $item->loadFromRow($row, true); self::$itemsByID[$itemID] = $item; } else { self::$itemsByID[$itemID]->loadFromRow($row, true); } } } if (!$itemIDs) { // If loading all items, remove old items that no longer exist $ids = array_keys(self::$itemsByID); foreach ($ids as $id) { if (!in_array($id, $loadedItemIDs)) { throw new Exception("Unimplemented"); //$this->unload($id); } } /* _cachedFields = ['itemID', 'itemTypeID', 'dateAdded', 'dateModified', 'numNotes', 'numAttachments', 'numChildren']; */ //this._reloadCache = false; } }