Blame view

sources/lib/private/db/adapter.php 1.87 KB
31b7f2792   Kload   Upgrade to ownclo...
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
41
42
  <?php
  /**
   * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
   * This file is licensed under the Affero General Public License version 3 or
   * later.
   * See the COPYING-README file.
   */
  
  namespace OC\DB;
  
  /**
   * This handles the way we use to write queries, into something that can be
   * handled by the database abstraction layer.
   */
  class Adapter {
  
  	/**
  	 * @var \OC\DB\Connection $conn
  	 */
  	protected $conn;
  
  	public function __construct($conn) {
  		$this->conn = $conn;
  	}
  
  	/**
  	 * @param string $table name
  	 * @return int id of last insert statement
  	 */
  	public function lastInsertId($table) {
  		return $this->conn->realLastInsertId($table);
  	}
  
  	/**
  	 * @param string $statement that needs to be changed so the db can handle it
  	 * @return string changed statement
  	 */
  	public function fixupStatement($statement) {
  		return $statement;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
43
  	 * insert the @input values when they do not exist yet
31b7f2792   Kload   Upgrade to ownclo...
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  	 * @param string $table name
  	 * @param array $input key->value pairs
  	 * @return int count of inserted rows
  	 */
  	public function insertIfNotExist($table, $input) {
  		$query = 'INSERT INTO `' .$table . '` (`'
  			. implode('`,`', array_keys($input)) . '`) SELECT '
  			. str_repeat('?,', count($input)-1).'? ' // Is there a prettier alternative?
  			. 'FROM `' . $table . '` WHERE ';
  
  		foreach($input as $key => $value) {
  			$query .= '`' . $key . '` = ? AND ';
  		}
  		$query = substr($query, 0, strlen($query) - 5);
  		$query .= ' HAVING COUNT(*) = 0';
  		$inserts = array_values($input);
  		$inserts = array_merge($inserts, $inserts);
  
  		try {
  			return $this->conn->executeUpdate($query, $inserts);
  		} catch(\Doctrine\DBAL\DBALException $e) {
  			$entry = 'DB Error: "'.$e->getMessage() . '"<br />';
  			$entry .= 'Offending command was: ' . $query.'<br />';
  			\OC_Log::write('core', $entry, \OC_Log::FATAL);
  			error_log('DB error: ' . $entry);
  			\OC_Template::printErrorPage( $entry );
  		}
  	}
  }