. */ require_once 'phing/Task.php'; include_once 'phing/types/Reference.php'; /** * Handles PDO configuration needed by SQL type tasks. * * @author Hans Lellelid (Phing) * @author Nick Chalko (Ant) * @author Jeff Martin (Ant) * @author Michael McCallum (Ant) * @author Tim Stephenson (Ant) * @version $Revision: 905 $ * @package phing.tasks.system */ abstract class PDOTask extends Task { private $caching = true; /** * Autocommit flag. Default value is false */ private $autocommit = false; /** * DB url. */ private $url; /** * User name. */ private $userId; /** * Password */ private $password; /** * RDBMS Product needed for this SQL. **/ private $rdbms; /** * Initialize CreoleTask. * This method includes any necessary Creole libraries and triggers * appropriate error if they cannot be found. This is not done in header * because we may want this class to be loaded w/o triggering an error. */ function init() { if (!class_exists('PDO')) { throw new Exception("PDOTask depends on PDO feature being included in PHP."); } } /** * Caching loaders / driver. This is to avoid * getting an OutOfMemoryError when calling this task * multiple times in a row; default: true * @param $enable */ public function setCaching($enable) { $this->caching = $enable; } /** * Sets the database connection URL; required. * @param url The url to set */ public function setUrl($url) { $this->url = $url; } /** * Sets the password; required. * @param password The password to set */ public function setPassword($password) { $this->password = $password; } /** * Auto commit flag for database connection; * optional, default false. * @param autocommit The autocommit to set */ public function setAutocommit($autocommit) { $this->autocommit = $autocommit; } /** * Sets the version string, execute task only if * rdbms version match; optional. * @param version The version to set */ public function setVersion($version) { $this->version = $version; } protected function getLoaderMap() { return self::$loaderMap; } /** * Creates a new Connection as using the driver, url, userid and password specified. * The calling method is responsible for closing the connection. * @return Connection the newly created connection. * @throws BuildException if the UserId/Password/Url is not set or there is no suitable driver or the driver fails to load. */ protected function getConnection() { if ($this->url === null) { throw new BuildException("Url attribute must be set!", $this->location); } try { $this->log("Connecting to " . $this->getUrl(), Project::MSG_VERBOSE); $user = null; $pass = null; if ($this->userId) { $user = $this->getUserId(); } if ($this->password) { $pass = $this->getPassword(); } $conn = new PDO($this->getUrl(), $user, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if ($this->autocommit) { try { $conn->setAttribute(PDO::ATTR_AUTOCOMMIT, $this->autocommit); } catch (PDOException $pe) { $this->log("Unable to enable auto-commit for this database: " . $pe->getMessage(), Project::MSG_WARN); } } return $conn; } catch (SQLException $e) { throw new BuildException($e->getMessage(), $this->location); } } public function isCaching($value) { $this->caching = $value; } /** * Gets the autocommit. * @return Returns a boolean */ public function isAutocommit() { return $this->autocommit; } /** * Gets the url. * @return Returns a String */ public function getUrl() { return $this->url; } /** * Gets the userId. * @return Returns a String */ public function getUserId() { return $this->userId; } /** * Set the user name for the connection; required. * @param userId The userId to set */ public function setUserid($userId) { $this->userId = $userId; } /** * Gets the password. * @return Returns a String */ public function getPassword() { return $this->password; } }