diff --git a/lib/private/appframework/db/db.php b/lib/private/appframework/db/db.php index 4aa43a811b..970a3ff068 100644 --- a/lib/private/appframework/db/db.php +++ b/lib/private/appframework/db/db.php @@ -21,22 +21,23 @@ */ namespace OC\AppFramework\Db; -use \OCP\IDb; - +use OCP\IDb; +use OCP\IDBConnection; /** + * @deprecated use IDBConnection directly, will be removed in ownCloud 10 * Small Facade for being able to inject the database connection for tests */ class Db implements IDb { /** - * @var \OCP\IDBConnection + * @var IDBConnection */ protected $connection; /** - * @param \OCP\IDBConnection $connection + * @param IDBConnection $connection */ - public function __construct($connection) { + public function __construct(IDBConnection $connection) { $this->connection = $connection; } @@ -46,6 +47,7 @@ class Db implements IDb { * @param string $sql the sql query with ? placeholder for params * @param int $limit the maximum number of rows * @param int $offset from which row we want to start + * @deprecated use prepare instead, will be removed in ownCloud 10 * @return \OC_DB_StatementWrapper prepared SQL query */ public function prepareQuery($sql, $limit = null, $offset = null) { @@ -58,6 +60,7 @@ class Db implements IDb { /** * Used to get the id of the just inserted element * + * @deprecated use lastInsertId instead, will be removed in ownCloud 10 * @param string $tableName the name of the table where we inserted the item * @return int the id of the inserted element */ @@ -65,5 +68,179 @@ class Db implements IDb { return $this->connection->lastInsertId($tableName); } + /** + * Used to abstract the owncloud database access away + * @param string $sql the sql query with ? placeholder for params + * @param int $limit the maximum number of rows + * @param int $offset from which row we want to start + * @return \Doctrine\DBAL\Driver\Statement The prepared statement. + */ + public function prepare($sql, $limit=null, $offset=null) { + return $this->connection->prepare($sql, $limit, $offset); + } + + /** + * Executes an, optionally parameterized, SQL query. + * + * If the query is parameterized, a prepared statement is used. + * If an SQLLogger is configured, the execution is logged. + * + * @param string $query The SQL query to execute. + * @param string[] $params The parameters to bind to the query, if any. + * @param array $types The types the previous parameters are in. + * @return \Doctrine\DBAL\Driver\Statement The executed statement. + */ + public function executeQuery($query, array $params = array(), $types = array()) { + return $this->connection->executeQuery($query, $params, $types); + } + + /** + * Executes an SQL INSERT/UPDATE/DELETE query with the given parameters + * and returns the number of affected rows. + * + * This method supports PDO binding types as well as DBAL mapping types. + * + * @param string $query The SQL query. + * @param array $params The query parameters. + * @param array $types The parameter types. + * @return integer The number of affected rows. + */ + public function executeUpdate($query, array $params = array(), array $types = array()) { + return $this->connection->executeUpdate($query, $params, $types); + } + + /** + * Used to get the id of the just inserted element + * @param string $table the name of the table where we inserted the item + * @return int the id of the inserted element + */ + public function lastInsertId($table = null) { + return $this->connection->lastInsertId($table); + } + + /** + * Insert a row if a matching row doesn't exists. + * @param string $table The table name (will replace *PREFIX*) to perform the replace on. + * @param array $input + * @throws \OC\HintException + * + * The input array if in the form: + * + * array ( 'id' => array ( 'value' => 6, + * 'key' => true + * ), + * 'name' => array ('value' => 'Stoyan'), + * 'family' => array ('value' => 'Stefanov'), + * 'birth_date' => array ('value' => '1975-06-20') + * ); + * @return bool + * + */ + public function insertIfNotExist($table, $input) { + return $this->connection->insertIfNotExist($table, $input); + } + + /** + * Start a transaction + */ + public function beginTransaction() { + $this->connection->beginTransaction(); + } + + /** + * Commit the database changes done during a transaction that is in progress + */ + public function commit() { + $this->connection->commit(); + } + + /** + * Rollback the database changes done during a transaction that is in progress + */ + public function rollBack() { + $this->connection->rollBack(); + } + + /** + * Gets the error code and message as a string for logging + * @return string + */ + public function getError() { + return $this->connection->getError(); + } + + /** + * Fetch the SQLSTATE associated with the last database operation. + * + * @return integer The last error code. + */ + public function errorCode() { + return $this->connection->errorCode(); + } + + /** + * Fetch extended error information associated with the last database operation. + * + * @return array The last error information. + */ + public function errorInfo() { + return $this->connection->errorInfo(); + } + + /** + * Establishes the connection with the database. + * + * @return bool + */ + public function connect() { + return $this->connection->connect(); + } + + /** + * Close the database connection + */ + public function close() { + $this->connection->close(); + } + + /** + * Quotes a given input parameter. + * + * @param mixed $input Parameter to be quoted. + * @param int $type Type of the parameter. + * @return string The quoted parameter. + */ + public function quote($input, $type = \PDO::PARAM_STR) { + return $this->connection->quote($input, $type); + } + + /** + * Gets the DatabasePlatform instance that provides all the metadata about + * the platform this driver connects to. + * + * @return \Doctrine\DBAL\Platforms\AbstractPlatform The database platform. + */ + public function getDatabasePlatform() { + return $this->connection->getDatabasePlatform(); + } + + /** + * Drop a table from the database if it exists + * + * @param string $table table name without the prefix + */ + public function dropTable($table) { + $this->connection->dropTable($table); + } + + /** + * Check if a table exists + * + * @param string $table table name without the prefix + * @return bool + */ + public function tableExists($table) { + return $this->connection->tableExists($table); + } } diff --git a/lib/public/appframework/db/mapper.php b/lib/public/appframework/db/mapper.php index 0edc38ade5..2022c7bfc8 100644 --- a/lib/public/appframework/db/mapper.php +++ b/lib/public/appframework/db/mapper.php @@ -22,7 +22,7 @@ */ namespace OCP\AppFramework\Db; -use \OCP\IDb; +use \OCP\IDBConnection; /** @@ -36,12 +36,12 @@ abstract class Mapper { protected $db; /** - * @param IDb $db Instance of the Db abstraction layer + * @param IDBConnection $db Instance of the Db abstraction layer * @param string $tableName the name of the table. set this to allow entity * @param string $entityClass the name of the entity that the sql should be * mapped to queries without using sql */ - public function __construct(IDb $db, $tableName, $entityClass=null){ + public function __construct(IDBConnection $db, $tableName, $entityClass=null){ $this->db = $db; $this->tableName = '*PREFIX*' . $tableName; @@ -113,7 +113,7 @@ abstract class Mapper { $this->execute($sql, $params); - $entity->setId((int) $this->db->getInsertId($this->tableName)); + $entity->setId((int) $this->db->lastInsertId($this->tableName)); return $entity; } @@ -185,7 +185,7 @@ abstract class Mapper { * @return \PDOStatement the database query result */ protected function execute($sql, array $params=[], $limit=null, $offset=null){ - $query = $this->db->prepareQuery($sql, $limit, $offset); + $query = $this->db->prepare($sql, $limit, $offset); $index = 1; // bindParam is 1 indexed foreach($params as $param) { @@ -209,7 +209,9 @@ abstract class Mapper { $index++; } - return $query->execute(); + $query->execute(); + + return $query; } diff --git a/lib/public/idb.php b/lib/public/idb.php index 5b4001b757..690fd9155c 100644 --- a/lib/public/idb.php +++ b/lib/public/idb.php @@ -24,7 +24,7 @@ namespace OCP; /** * Small Facade for being able to inject the database connection for tests */ -interface IDb { +interface IDb extends IDBConnection { /**