本文整理汇总了PHP中Zotero_DB::bulkInsert方法的典型用法代码示例。如果您正苦于以下问题:PHP Zotero_DB::bulkInsert方法的具体用法?PHP Zotero_DB::bulkInsert怎么用?PHP Zotero_DB::bulkInsert使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zotero_DB
的用法示例。
在下文中一共展示了Zotero_DB::bulkInsert方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: search
//.........这里部分代码省略.........
}
break;
case 'itemType':
$locale = 'en-US';
$types = Zotero_ItemTypes::getAll($locale);
// TEMP: get localized string
// DEBUG: Why is attachment skipped in getAll()?
$types[] = array('id' => 14, 'localized' => 'Attachment');
foreach ($types as $type) {
$sql2 = "INSERT IGNORE INTO tmpItemTypeNames VALUES (?, ?, ?)";
Zotero_DB::query($sql2, array($type['id'], $locale, $type['localized']), $shardID);
}
// Join temp table to query
$sql .= "JOIN tmpItemTypeNames TITN ON (TITN.itemTypeID={$itemTypeIDSelector}) ";
break;
case 'addedBy':
$isGroup = Zotero_Libraries::getType($libraryID) == 'group';
if ($isGroup) {
$sql2 = "SELECT DISTINCT createdByUserID FROM items\n\t\t\t\t\t\t\t\tJOIN groupItems USING (itemID) WHERE\n\t\t\t\t\t\t\t\tcreatedByUserID IS NOT NULL AND ";
if ($itemIDs) {
$sql2 .= "itemID IN (" . implode(', ', array_fill(0, sizeOf($itemIDs), '?')) . ") ";
$createdByUserIDs = Zotero_DB::columnQuery($sql2, $itemIDs, $shardID);
} else {
$sql2 .= "libraryID=?";
$createdByUserIDs = Zotero_DB::columnQuery($sql2, $libraryID, $shardID);
}
// Populate temp table with usernames
if ($createdByUserIDs) {
$toAdd = array();
foreach ($createdByUserIDs as $createdByUserID) {
$toAdd[] = array($createdByUserID, Zotero_Users::getUsername($createdByUserID));
}
$sql2 = "INSERT IGNORE INTO tmpCreatedByUsers VALUES ";
Zotero_DB::bulkInsert($sql2, $toAdd, 50, false, $shardID);
// Join temp table to query
$sql .= "LEFT JOIN groupItems GI ON (GI.itemID=I.itemID)\n\t\t\t\t\t\t\t\t\tLEFT JOIN tmpCreatedByUsers TCBU ON (TCBU.userID=GI.createdByUserID) ";
}
}
break;
}
}
$sql .= "WHERE I.libraryID=? ";
if (!$includeTrashed) {
$sql .= "AND DI.itemID IS NULL ";
// Hide deleted parents in /top mode
if ($onlyTopLevel) {
$sql .= "AND DIP.itemID IS NULL ";
}
}
// Search on title, creators, and dates
if (!empty($params['q'])) {
$sql .= "AND (";
$sql .= "IDT.value LIKE ? ";
$sqlParams[] = '%' . $params['q'] . '%';
$sql .= "OR INo.title LIKE ? ";
$sqlParams[] = '%' . $params['q'] . '%';
$sql .= "OR TRIM(CONCAT(firstName, ' ', lastName)) LIKE ? ";
$sqlParams[] = '%' . $params['q'] . '%';
$sql .= "OR SUBSTR(IDD.value, 1, 4) = ?";
$sqlParams[] = $params['q'];
// Full-text search
if ($params['qmode'] == 'everything') {
$ftKeys = Zotero_FullText::searchInLibrary($libraryID, $params['q']);
if ($ftKeys) {
$sql .= " OR I.key IN (" . implode(', ', array_fill(0, sizeOf($ftKeys), '?')) . ") ";
$sqlParams = array_merge($sqlParams, $ftKeys);
示例2: save
//.........这里部分代码省略.........
$sql = "UPDATE tags SET {$fields} WHERE tagID=?";
$stmt = Zotero_DB::getStatement($sql, true, Zotero_Shards::getByLibraryID($this->libraryID));
Zotero_DB::queryFromStatement($stmt, array_merge($params, array($tagID)));
}
} catch (Exception $e) {
// If an incoming tag is the same as an existing tag, but with a different key,
// then delete the old tag and add its linked items to the new tag
if (preg_match("/Duplicate entry .+ for key 'uniqueTags'/", $e->getMessage())) {
// GET existing tag
$existing = Zotero_Tags::getIDs($this->libraryID, $this->name);
if (!$existing) {
throw new Exception("Existing tag not found");
}
foreach ($existing as $id) {
$tag = Zotero_Tags::get($this->libraryID, $id, true);
if ($tag->__get('type') == $this->type) {
$linked = $tag->getLinkedItems(true);
Zotero_Tags::delete($this->libraryID, $tag->key);
break;
}
}
// Save again
if ($isNew) {
$sql = "INSERT INTO tags SET tagID=?, {$fields}";
$stmt = Zotero_DB::getStatement($sql, true, $shardID);
Zotero_DB::queryFromStatement($stmt, array_merge(array($tagID), $params));
// Remove from delete log if it's there
$sql = "DELETE FROM syncDeleteLogKeys WHERE libraryID=? AND objectType='tag' AND `key`=?";
Zotero_DB::query($sql, array($this->libraryID, $key), $shardID);
} else {
$sql = "UPDATE tags SET {$fields} WHERE tagID=?";
$stmt = Zotero_DB::getStatement($sql, true, Zotero_Shards::getByLibraryID($this->libraryID));
Zotero_DB::queryFromStatement($stmt, array_merge($params, array($tagID)));
}
$new = array_unique(array_merge($linked, $this->getLinkedItems(true)));
$this->setLinkedItems($new);
} else {
throw $e;
}
}
// Linked items
if ($full || !empty($this->changed['linkedItems'])) {
$removed = array();
$newids = array();
$currentIDs = $this->getLinkedItems(true);
if (!$currentIDs) {
$currentIDs = array();
}
if ($full) {
$sql = "SELECT itemID FROM itemTags WHERE tagID=?";
$stmt = Zotero_DB::getStatement($sql, true, $shardID);
$dbItemIDs = Zotero_DB::columnQueryFromStatement($stmt, $tagID);
if ($dbItemIDs) {
$removed = array_diff($dbItemIDs, $currentIDs);
$newids = array_diff($currentIDs, $dbItemIDs);
} else {
$newids = $currentIDs;
}
} else {
if ($this->previousData['linkedItems']) {
$removed = array_diff($this->previousData['linkedItems'], $currentIDs);
$newids = array_diff($currentIDs, $this->previousData['linkedItems']);
} else {
$newids = $currentIDs;
}
}
if ($removed) {
$sql = "DELETE FROM itemTags WHERE tagID=? AND itemID IN (";
$q = array_fill(0, sizeOf($removed), '?');
$sql .= implode(', ', $q) . ")";
Zotero_DB::query($sql, array_merge(array($this->id), $removed), $shardID);
}
if ($newids) {
$newids = array_values($newids);
$sql = "INSERT INTO itemTags (tagID, itemID) VALUES ";
$maxInsertGroups = 50;
Zotero_DB::bulkInsert($sql, $newids, $maxInsertGroups, $tagID, $shardID);
}
//Zotero.Notifier.trigger('add', 'collection-item', $this->id . '-' . $itemID);
}
Zotero_DB::commit();
Zotero_Tags::cachePrimaryData(array('id' => $tagID, 'libraryID' => $this->libraryID, 'key' => $key, 'name' => $this->name, 'type' => $this->type ? $this->type : 0, 'dateAdded' => $dateAdded, 'dateModified' => $dateModified));
} catch (Exception $e) {
Zotero_DB::rollback();
throw $e;
}
// If successful, set values in object
if (!$this->id) {
$this->id = $tagID;
}
if (!$this->key) {
$this->key = $key;
}
$this->init();
if ($isNew) {
Zotero_Tags::cache($this);
Zotero_Tags::cacheLibraryKeyID($this->libraryID, $key, $tagID);
}
return $this->id;
}
示例3: search
public static function search($libraryID, $onlyTopLevel = false, $params = array(), $includeTrashed = false, $asKeys = false)
{
$rnd = "_" . uniqid($libraryID . "_");
if ($asKeys) {
$results = array('keys' => array(), 'total' => 0);
} else {
$results = array('items' => array(), 'total' => 0);
}
$shardID = Zotero_Shards::getByLibraryID($libraryID);
$itemIDs = array();
$keys = array();
$deleteTempTable = array();
// Pass a list of itemIDs, for when the initial search is done via SQL
if (!empty($params['itemIDs'])) {
$itemIDs = $params['itemIDs'];
}
if (!empty($params['itemKey'])) {
$keys = explode(',', $params['itemKey']);
}
$titleSort = !empty($params['order']) && $params['order'] == 'title';
$sql = "SELECT SQL_CALC_FOUND_ROWS DISTINCT " . ($asKeys ? "I.key" : "I.itemID") . " FROM items I ";
$sqlParams = array($libraryID);
if (!empty($params['q']) || $titleSort) {
$titleFieldIDs = array_merge(array(Zotero_ItemFields::getID('title')), Zotero_ItemFields::getTypeFieldsFromBase('title'));
$sql .= "LEFT JOIN itemData IDT ON (IDT.itemID=I.itemID AND IDT.fieldID IN (" . implode(',', $titleFieldIDs) . ")) ";
}
if (!empty($params['q'])) {
$sql .= "LEFT JOIN itemCreators IC ON (IC.itemID=I.itemID)\n\t\t\t\t\tLEFT JOIN creators C ON (C.creatorID=IC.creatorID) ";
}
if ($onlyTopLevel || !empty($params['q']) || $titleSort) {
$sql .= "LEFT JOIN itemNotes INo ON (INo.itemID=I.itemID) ";
}
if ($onlyTopLevel) {
$sql .= "LEFT JOIN itemAttachments IA ON (IA.itemID=I.itemID) ";
}
if (!$includeTrashed) {
$sql .= "LEFT JOIN deletedItems DI ON (DI.itemID=I.itemID) ";
}
if (!empty($params['order'])) {
switch ($params['order']) {
case 'title':
case 'creator':
$sql .= "LEFT JOIN itemSortFields ISF ON (ISF.itemID=I.itemID) ";
break;
case 'date':
$dateFieldIDs = array_merge(array(Zotero_ItemFields::getID('date')), Zotero_ItemFields::getTypeFieldsFromBase('date'));
$sql .= "LEFT JOIN itemData IDD ON (IDD.itemID=I.itemID AND IDD.fieldID IN (" . implode(',', $dateFieldIDs) . ")) ";
break;
case 'itemType':
// Create temporary table to store item type names
//
// We use IF NOT EXISTS just to make sure there are
// no problems with restoration from the binary log
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS tmpItemTypeNames{$rnd}\n\t\t\t\t\t\t\t(itemTypeID SMALLINT UNSIGNED NOT NULL,\n\t\t\t\t\t\t\titemTypeName VARCHAR(255) NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (itemTypeID),\n\t\t\t\t\t\t\tINDEX (itemTypeName))";
Zotero_DB::query($sql2, false, $shardID);
$deleteTempTable['tmpItemTypeNames'] = true;
$types = Zotero_ItemTypes::getAll('en-US');
foreach ($types as $type) {
$sql2 = "INSERT INTO tmpItemTypeNames{$rnd} VALUES (?, ?)";
Zotero_DB::query($sql2, array($type['id'], $type['localized']), $shardID);
}
// Join temp table to query
$sql .= "JOIN tmpItemTypeNames{$rnd} TITN ON (TITN.itemTypeID=I.itemTypeID) ";
break;
case 'addedBy':
$isGroup = Zotero_Libraries::getType($libraryID) == 'group';
if ($isGroup) {
// Create temporary table to store usernames
//
// We use IF NOT EXISTS just to make sure there are
// no problems with restoration from the binary log
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS tmpCreatedByUsers{$rnd}\n\t\t\t\t\t\t\t\t(userID INT UNSIGNED NOT NULL,\n\t\t\t\t\t\t\t\tusername VARCHAR(255) NOT NULL,\n\t\t\t\t\t\t\t\tPRIMARY KEY (userID),\n\t\t\t\t\t\t\t\tINDEX (username))";
Zotero_DB::query($sql2, false, $shardID);
$deleteTempTable['tmpCreatedByUsers'] = true;
$sql2 = "SELECT DISTINCT createdByUserID FROM items\n\t\t\t\t\t\t\t\tJOIN groupItems USING (itemID) WHERE\n\t\t\t\t\t\t\t\tcreatedByUserID IS NOT NULL AND ";
if ($itemIDs) {
$sql2 .= "itemID IN (" . implode(', ', array_fill(0, sizeOf($itemIDs), '?')) . ") ";
$createdByUserIDs = Zotero_DB::columnQuery($sql2, $itemIDs, $shardID);
} else {
$sql2 .= "libraryID=?";
$createdByUserIDs = Zotero_DB::columnQuery($sql2, $libraryID, $shardID);
}
// Populate temp table with usernames
if ($createdByUserIDs) {
$toAdd = array();
foreach ($createdByUserIDs as $createdByUserID) {
$toAdd[] = array($createdByUserID, Zotero_Users::getUsername($createdByUserID));
}
$sql2 = "INSERT IGNORE INTO tmpCreatedByUsers{$rnd} VALUES ";
Zotero_DB::bulkInsert($sql2, $toAdd, 50, false, $shardID);
// Join temp table to query
$sql .= "JOIN groupItems GI ON (GI.itemID=I.itemID)\n\t\t\t\t\t\t\t\t\tJOIN tmpCreatedByUsers{$rnd} TCBU ON (TCBU.userID=GI.createdByUserID) ";
}
}
break;
}
}
$sql .= "WHERE I.libraryID=? ";
if ($onlyTopLevel) {
$sql .= "AND INo.sourceItemID IS NULL AND IA.sourceItemID IS NULL ";
//.........这里部分代码省略.........
示例4: copyLibrary
public static function copyLibrary($libraryID, $newShardID, $overrideLock = false)
{
$currentShardID = self::getByLibraryID($libraryID);
if ($currentShardID == $newShardID) {
throw new Exception("Library {$libraryID} is already on shard {$newShardID}");
}
if (!self::shardIsWriteable($newShardID)) {
throw new Exception("Shard {$newShardID} is not writeable");
}
if (!$overrideLock && Zotero_Libraries::isLocked($libraryID)) {
throw new Exception("Library {$libraryID} is locked");
}
// Make sure there's no stale data on the new shard
if (self::checkForLibrary($libraryID, $newShardID)) {
throw new Exception("Library {$libraryID} data already exists on shard {$newShardID}");
}
Zotero_DB::beginTransaction();
Zotero_DB::query("SET foreign_key_checks=0", false, $newShardID);
$tables = array('shardLibraries', 'collections', 'creators', 'items', 'relations', 'savedSearches', 'tags', 'collectionItems', 'deletedItems', 'groupItems', 'itemAttachments', 'itemCreators', 'itemData', 'itemNotes', 'itemRelated', 'itemSortFields', 'itemTags', 'savedSearchConditions', 'storageFileItems', 'syncDeleteLogIDs', 'syncDeleteLogKeys');
foreach ($tables as $table) {
if (!$overrideLock && Zotero_Libraries::isLocked($libraryID)) {
Zotero_DB::rollback();
throw new Exception("Aborted due to library lock");
}
switch ($table) {
case 'collections':
case 'creators':
case 'items':
case 'relations':
case 'savedSearches':
case 'shardLibraries':
case 'syncDeleteLogIDs':
case 'syncDeleteLogKeys':
case 'tags':
$sql = "SELECT * FROM {$table} WHERE libraryID=?";
break;
case 'collectionItems':
$sql = "SELECT CI.* FROM collectionItems CI\n\t\t\t\t\t\t\tJOIN collections USING (collectionID) WHERE libraryID=?";
break;
case 'deletedItems':
case 'groupItems':
case 'itemAttachments':
case 'itemCreators':
case 'itemData':
case 'itemNotes':
case 'itemRelated':
case 'itemSortFields':
case 'itemTags':
case 'storageFileItems':
$sql = "SELECT T.* FROM {$table} T JOIN items USING (itemID) WHERE libraryID=?";
break;
case 'savedSearchConditions':
$sql = "SELECT SSC.* FROM savedSearchConditions SSC\n\t\t\t\t\t\t\tJOIN savedSearches USING (searchID) WHERE libraryID=?";
break;
}
$rows = Zotero_DB::query($sql, $libraryID, $currentShardID);
if ($rows) {
$sets = array();
foreach ($rows as $row) {
$sets[] = array_values($row);
}
$sql = "INSERT INTO {$table} VALUES ";
Zotero_DB::bulkInsert($sql, $sets, 50, false, $newShardID);
}
}
Zotero_DB::query("SET foreign_key_checks=1", false, $newShardID);
if (!$overrideLock && Zotero_Libraries::isLocked($libraryID)) {
Zotero_DB::rollback();
throw new Exception("Aborted due to library lock");
}
Zotero_DB::commit();
if (!$overrideLock && Zotero_Libraries::isLocked($libraryID)) {
self::deleteLibrary($libraryID, $newShardID);
throw new Exception("Aborted due to library lock");
}
}
示例5: testBulkInsert
public function testBulkInsert()
{
Zotero_DB::query("CREATE TABLE test (foo INTEGER, foo2 INTEGER)");
$sql = "INSERT INTO test VALUES ";
$sets = array(array(1, 2), array(2, 3), array(3, 4), array(4, 5), array(5, 6), array(6, 7));
// Different maxInsertGroups values
for ($i = 1; $i < 8; $i++) {
Zotero_DB::bulkInsert($sql, $sets, $i);
$rows = Zotero_DB::query("SELECT * FROM test");
$this->assertEquals(sizeOf($rows), sizeOf($sets));
$rowVals = array();
foreach ($rows as $row) {
$rowVals[] = array($row['foo'], $row['foo2']);
}
$this->assertEquals($rowVals, $sets);
Zotero_DB::query("DELETE FROM test");
}
// First val
$sets2 = array();
$sets2Comp = array();
foreach ($sets as $set) {
$sets2[] = $set[1];
$sets2Comp[] = array(1, $set[1]);
}
Zotero_DB::bulkInsert($sql, $sets2, 2, 1);
$rows = Zotero_DB::query("SELECT * FROM test");
$this->assertEquals(sizeOf($rows), sizeOf($sets2Comp));
$rowVals = array();
foreach ($rows as $row) {
$rowVals[] = array($row['foo'], $row['foo2']);
}
$this->assertEquals($rowVals, $sets2Comp);
}