Blame view

sources/lib/private/db/pgsqltools.php 1.25 KB
6d9380f96   Cédric Dupont   Update sources OC...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  <?php
  /**
   * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
   * Copyright (c) 2014 Andreas Fischer <bantu@owncloud.com>
   * This file is licensed under the Affero General Public License version 3 or
   * later.
   * See the COPYING-README file.
   */
  
  namespace OC\DB;
  
  /**
  * Various PostgreSQL specific helper functions.
  */
  class PgSqlTools {
  	/**
  	* @brief Resynchronizes all sequences of a database after using INSERTs
  	*        without leaving out the auto-incremented column.
  	* @param \OC\DB\Connection $conn
  	* @return null
  	*/
  	public function resynchronizeDatabaseSequences(Connection $conn) {
  		$databaseName = $conn->getDatabase();
  		foreach ($conn->getSchemaManager()->listSequences() as $sequence) {
  			$sequenceName = $sequence->getName();
  			$sqlInfo = 'SELECT table_schema, table_name, column_name
  				FROM information_schema.columns
  				WHERE column_default = ? AND table_catalog = ?';
  			$sequenceInfo = $conn->fetchAssoc($sqlInfo, array(
  				"nextval('$sequenceName'::regclass)",
  				$databaseName
  			));
  			$tableName = $sequenceInfo['table_name'];
  			$columnName = $sequenceInfo['column_name'];
  			$sqlMaxId = "SELECT MAX($columnName) FROM $tableName";
  			$sqlSetval = "SELECT setval('$sequenceName', ($sqlMaxId))";
  			$conn->executeQuery($sqlSetval);
  		}
  	}
  }