diff options
Diffstat (limited to 'buildscripts/phing/classes/phing/tasks/ext/creole/CreoleTask.php')
-rwxr-xr-x | buildscripts/phing/classes/phing/tasks/ext/creole/CreoleTask.php | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/buildscripts/phing/classes/phing/tasks/ext/creole/CreoleTask.php b/buildscripts/phing/classes/phing/tasks/ext/creole/CreoleTask.php new file mode 100755 index 00000000..6cff2033 --- /dev/null +++ b/buildscripts/phing/classes/phing/tasks/ext/creole/CreoleTask.php @@ -0,0 +1,242 @@ +<?php + +/* + * $Id: 91a6dbbd682e6afa8befa95f01ae5fbaed11a72a $ + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * and is licensed under the LGPL. For more information please see + * <http://phing.info>. + */ + +require_once 'phing/Task.php'; +include_once 'phing/types/Reference.php'; + +/** + * Handles Creole configuration needed by SQL type tasks. + * + * @author Hans Lellelid <hans@xmpl.org> (Phing) + * @author Nick Chalko <nick@chalko.com> (Ant) + * @author Jeff Martin <jeff@custommonkey.org> (Ant) + * @author Michael McCallum <gholam@xtra.co.nz> (Ant) + * @author Tim Stephenson <tim.stephenson@sybase.com> (Ant) + * @version $Id$ + * @package phing.tasks.system + */ +abstract class CreoleTask extends Task { + + /** + * Used for caching loaders / driver. This is to avoid + * getting an OutOfMemoryError when calling this task + * multiple times in a row. + * + * NOT IMPLEMENTED YET + */ + private static $loaderMap = array(); + + private $caching = true; + + /** + * Autocommit flag. Default value is false + */ + private $autocommit = false; + + /** + * [optional] Classpath to Creole driver to use. + * @param string + */ + private $driver; + + /** + * 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() { + include_once 'creole/Creole.php'; + if (!class_exists('Creole')) { + throw new Exception("Creole task depends on Creole classes being on include_path. (i.e. include of 'creole/Creole.php' failed.)"); + } + } + + /** + * 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; + } + + /** + * Set the Creole driver to be used. + * + * @param string $driver driver class name + */ + public function setDriver($driver) + { + $this->driver = $driver; + } + + /** + * 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); + $info = new Properties(); + + $dsn = Creole::parseDSN($this->url); + + if (!isset($dsn["username"]) && $this->userId === null) { + throw new BuildException("Username must be in URL or userid attribute must be set.", $this->location); + } + + if ($this->userId) { + $dsn["username"] = $this->getUserId(); + } + + if ($this->password) { + $dsn["password"] = $this->getPassword(); + } + + if ($this->driver) { + Creole::registerDriver($dsn['phptype'], $this->driver); + } + + $conn = Creole::getConnection($dsn); + $conn->setAutoCommit($this->autocommit); + 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; + } + +} |