当前位置: 首页>>代码示例>>PHP>>正文


PHP IDatabase::startAtomic方法代码示例

本文整理汇总了PHP中IDatabase::startAtomic方法的典型用法代码示例。如果您正苦于以下问题:PHP IDatabase::startAtomic方法的具体用法?PHP IDatabase::startAtomic怎么用?PHP IDatabase::startAtomic使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IDatabase的用法示例。


在下文中一共展示了IDatabase::startAtomic方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: finishWrite

 public function finishWrite()
 {
     if ($this->readOnly) {
         return;
     } elseif (is_null($this->currentLang)) {
         throw new MWException(__CLASS__ . ': must call startWrite() before finishWrite()');
     }
     $this->dbw->startAtomic(__METHOD__);
     try {
         $this->dbw->delete('l10n_cache', ['lc_lang' => $this->currentLang], __METHOD__);
         foreach (array_chunk($this->batch, 500) as $rows) {
             $this->dbw->insert('l10n_cache', $rows, __METHOD__);
         }
         $this->writesDone = true;
     } catch (DBQueryError $e) {
         if ($this->dbw->wasReadOnlyError()) {
             $this->readOnly = true;
             // just avoid site down time
         } else {
             throw $e;
         }
     }
     $this->dbw->endAtomic(__METHOD__);
     $this->currentLang = null;
     $this->batch = [];
 }
开发者ID:claudinec,项目名称:galan-wiki,代码行数:26,代码来源:LCStoreDB.php

示例2: initConnection

 protected function initConnection($lockDb, IDatabase $db)
 {
     # Let this transaction see lock rows from other transactions
     $db->query("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
     # Do everything in a transaction as it all gets rolled back eventually
     $db->startAtomic(__CLASS__);
 }
开发者ID:paladox,项目名称:mediawiki,代码行数:7,代码来源:MySqlLockManager.php

示例3: doBatchPushInternal

 /**
  * This function should *not* be called outside of JobQueueDB
  *
  * @param IDatabase $dbw
  * @param IJobSpecification[] $jobs
  * @param int $flags
  * @param string $method
  * @throws DBError
  * @return void
  */
 public function doBatchPushInternal(IDatabase $dbw, array $jobs, $flags, $method)
 {
     if (!count($jobs)) {
         return;
     }
     $rowSet = array();
     // (sha1 => job) map for jobs that are de-duplicated
     $rowList = array();
     // list of jobs for jobs that are not de-duplicated
     foreach ($jobs as $job) {
         $row = $this->insertFields($job);
         if ($job->ignoreDuplicates()) {
             $rowSet[$row['job_sha1']] = $row;
         } else {
             $rowList[] = $row;
         }
     }
     if ($flags & self::QOS_ATOMIC) {
         $dbw->startAtomic($method);
         // wrap all the job additions in one transaction
     }
     try {
         // Strip out any duplicate jobs that are already in the queue...
         if (count($rowSet)) {
             $res = $dbw->select('job', 'job_sha1', array('job_sha1' => array_keys($rowSet), 'job_token' => ''), $method);
             foreach ($res as $row) {
                 wfDebug("Job with hash '{$row->job_sha1}' is a duplicate.\n");
                 unset($rowSet[$row->job_sha1]);
                 // already enqueued
             }
         }
         // Build the full list of job rows to insert
         $rows = array_merge($rowList, array_values($rowSet));
         // Insert the job rows in chunks to avoid slave lag...
         foreach (array_chunk($rows, 50) as $rowBatch) {
             $dbw->insert('job', $rowBatch, $method);
         }
         JobQueue::incrStats('inserts', $this->type, count($rows));
         JobQueue::incrStats('dupe_inserts', $this->type, count($rowSet) + count($rowList) - count($rows));
     } catch (DBError $e) {
         if ($flags & self::QOS_ATOMIC) {
             $dbw->rollback($method);
         }
         throw $e;
     }
     if ($flags & self::QOS_ATOMIC) {
         $dbw->endAtomic($method);
     }
     return;
 }
开发者ID:OrBin,项目名称:mediawiki,代码行数:60,代码来源:JobQueueDB.php


注:本文中的IDatabase::startAtomic方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。