From 5b531cf58879ebef87bb8de045f5b6e8649f1bf8 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 24 Apr 2014 16:25:04 -0400 Subject: [PATCH] De-duplicate truncate method of drivers --- core/abstract/abstract_driver.php | 23 +++++++++++++++++++---- drivers/firebird/firebird_driver.php | 22 +++++++--------------- drivers/mysql/mysql_driver.php | 13 ------------- drivers/pgsql/pgsql_driver.php | 13 ------------- drivers/sqlite/sqlite_driver.php | 24 +++++++----------------- 5 files changed, 33 insertions(+), 62 deletions(-) diff --git a/core/abstract/abstract_driver.php b/core/abstract/abstract_driver.php index 7a693c4..295fbb7 100644 --- a/core/abstract/abstract_driver.php +++ b/core/abstract/abstract_driver.php @@ -71,6 +71,12 @@ abstract class Abstract_Driver extends \PDO implements Driver_Interface { */ public $table_prefix = ''; + /** + * Whether the driver supports 'TRUNCATE' + * @var bool + */ + public $has_truncate = TRUE; + /** * PDO constructor wrapper * @@ -607,17 +613,26 @@ abstract class Abstract_Driver extends \PDO implements Driver_Interface { return $this->table_prefix.$str; } - // ------------------------------------------------------------------------- - // ! Abstract public functions to implement in child classes // ------------------------------------------------------------------------- /** * Empty the passed table * * @param string $table - * @return void + * @return \PDOStatement */ - abstract public function truncate($table); + public function truncate($table) + { + + $sql = ($this->has_truncate) + ? 'TRUNCATE ' + : 'DELETE FROM '; + + $sql .= $this->quote_table($table); + + $this->statement = $this->query($sql); + return $this->statement; + } } // End of db_pdo.php \ No newline at end of file diff --git a/drivers/firebird/firebird_driver.php b/drivers/firebird/firebird_driver.php index ba59290..86c3aaf 100644 --- a/drivers/firebird/firebird_driver.php +++ b/drivers/firebird/firebird_driver.php @@ -65,6 +65,13 @@ class Firebird extends Abstract_Driver { */ protected $service = NULL; + /** + * Firebird doesn't have the truncate keyword + * + * @var bool + */ + protected $has_truncate = FALSE; + /** * Open the link to the database * @@ -118,21 +125,6 @@ class Firebird extends Abstract_Driver { return $this->service; } - // -------------------------------------------------------------------------- - - /** - * Empty a database table - * - * @param string $table - * @return \PDOStatement - */ - public function truncate($table) - { - // Firebird lacks a truncate command - $sql = 'DELETE FROM '.$this->quote_table($table); - $this->statement = $this->query($sql); - return $this->statement; - } // -------------------------------------------------------------------------- diff --git a/drivers/mysql/mysql_driver.php b/drivers/mysql/mysql_driver.php index 18f99c7..391eeec 100644 --- a/drivers/mysql/mysql_driver.php +++ b/drivers/mysql/mysql_driver.php @@ -52,18 +52,5 @@ class MySQL extends Abstract_Driver { parent::__construct($dsn, $username, $password, $options); } - - // -------------------------------------------------------------------------- - - /** - * Empty a table - * - * @param string $table - */ - public function truncate($table) - { - $table = $this->prefix_table($table); - $this->query("TRUNCATE `{$table}`"); - } } //End of mysql_driver.php \ No newline at end of file diff --git a/drivers/pgsql/pgsql_driver.php b/drivers/pgsql/pgsql_driver.php index 3ed0ed3..8304753 100644 --- a/drivers/pgsql/pgsql_driver.php +++ b/drivers/pgsql/pgsql_driver.php @@ -40,19 +40,6 @@ class PgSQL extends Abstract_Driver { // -------------------------------------------------------------------------- - /** - * Empty a table - * - * @param string $table - */ - public function truncate($table) - { - $sql = 'TRUNCATE "' . $table . '"'; - $this->query($sql); - } - - // -------------------------------------------------------------------------- - /** * Get a list of schemas for the current connection * diff --git a/drivers/sqlite/sqlite_driver.php b/drivers/sqlite/sqlite_driver.php index 5368bff..df65f7f 100644 --- a/drivers/sqlite/sqlite_driver.php +++ b/drivers/sqlite/sqlite_driver.php @@ -30,6 +30,13 @@ class SQLite extends Abstract_Driver { */ protected $statement; + /** + * SQLite has a truncate optimization, + * but no support for the actual keyword + * @var bool + */ + protected $has_truncate = FALSE; + /** * Open SQLite Database * @@ -44,23 +51,6 @@ class SQLite extends Abstract_Driver { parent::__construct("sqlite:{$dsn}", $user, $pass); } - // -------------------------------------------------------------------------- - - /** - * Empty a table - * - * @param string $table - */ - public function truncate($table) - { - // SQLite has a TRUNCATE optimization, - // but no support for the actual command. - $sql = 'DELETE FROM "'.$table.'"'; - - $this->statement = $this->query($sql); - - return $this->statement; - } // --------------------------------------------------------------------------