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


PHP Connection::rollback方法代码示例

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


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

示例1: run

 /**
  * Converts legacy home storage ids in the format
  * "local::/data/dir/path/userid/" to the new format "home::userid"
  */
 public function run()
 {
     // only run once
     if ($this->config->getAppValue('core', 'repairlegacystoragesdone') === 'yes') {
         return;
     }
     $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/');
     $dataDir = rtrim($dataDir, '/') . '/';
     $dataDirId = 'local::' . $dataDir;
     $count = 0;
     $this->connection->beginTransaction();
     try {
         // note: not doing a direct UPDATE with the REPLACE function
         // because regexp search/extract is needed and it is not guaranteed
         // to work on all database types
         $sql = 'SELECT `id`, `numeric_id` FROM `*PREFIX*storages`' . ' WHERE `id` LIKE ?' . ' ORDER BY `id`';
         $result = $this->connection->executeQuery($sql, array($dataDirId . '%'));
         while ($row = $result->fetch()) {
             $currentId = $row['id'];
             // one entry is the datadir itself
             if ($currentId === $dataDirId) {
                 continue;
             }
             if ($this->fixLegacyStorage($currentId, (int) $row['numeric_id'])) {
                 $count++;
             }
         }
         // check for md5 ids, not in the format "prefix::"
         $sql = 'SELECT COUNT(*) AS "c" FROM `*PREFIX*storages`' . ' WHERE `id` NOT LIKE \'%::%\'';
         $result = $this->connection->executeQuery($sql);
         $row = $result->fetch();
         // find at least one to make sure it's worth
         // querying the user list
         if ((int) $row['c'] > 0) {
             $userManager = \OC_User::getManager();
             // use chunks to avoid caching too many users in memory
             $limit = 30;
             $offset = 0;
             do {
                 // query the next page of users
                 $results = $userManager->search('', $limit, $offset);
                 $storageIds = array();
                 $userIds = array();
                 foreach ($results as $uid => $userObject) {
                     $storageId = $dataDirId . $uid . '/';
                     if (strlen($storageId) <= 64) {
                         // skip short storage ids as they were handled in the previous section
                         continue;
                     }
                     $storageIds[$uid] = $storageId;
                 }
                 if (count($storageIds) > 0) {
                     // update the storages of these users
                     foreach ($storageIds as $uid => $storageId) {
                         $numericId = \OC\Files\Cache\Storage::getNumericStorageId($storageId);
                         if (!is_null($numericId) && $this->fixLegacyStorage($storageId, (int) $numericId)) {
                             $count++;
                         }
                     }
                 }
                 $offset += $limit;
             } while (count($results) >= $limit);
         }
         $this->emit('\\OC\\Repair', 'info', array('Updated ' . $count . ' legacy home storage ids'));
         $this->connection->commit();
     } catch (\OC\RepairException $e) {
         $this->connection->rollback();
         throw $e;
     }
     $this->config->setAppValue('core', 'repairlegacystoragesdone', 'yes');
 }
开发者ID:samj1912,项目名称:repo,代码行数:75,代码来源:repairlegacystorages.php


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