home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / phing / tasks / ext / CreoleTask.php < prev    next >
Encoding:
PHP Script  |  2007-12-21  |  6.6 KB  |  243 lines

  1. <?php
  2.  
  3. /*
  4.  *  $Id: CreoleTask.php 59 2006-04-28 14:49:47Z mrook $
  5.  *
  6.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  7.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  8.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  9.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  10.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  11.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  12.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  13.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  14.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  15.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  16.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  17.  *
  18.  * This software consists of voluntary contributions made by many individuals
  19.  * and is licensed under the LGPL. For more information please see
  20.  * <http://phing.info>.
  21.  */
  22.  
  23. require_once 'phing/Task.php';
  24. include_once 'phing/types/Reference.php';
  25.  
  26. /**
  27.  * Handles Creole configuration needed by SQL type tasks.
  28.  *
  29.  * @author    Hans Lellelid <hans@xmpl.org> (Phing)
  30.  * @author    Nick Chalko <nick@chalko.com> (Ant)
  31.  * @author    Jeff Martin <jeff@custommonkey.org> (Ant)
  32.  * @author    Michael McCallum <gholam@xtra.co.nz> (Ant)
  33.  * @author    Tim Stephenson <tim.stephenson@sybase.com> (Ant)
  34.  * @version   $Revision: 1.13 $
  35.  * @package   phing.tasks.system
  36.  */
  37. abstract class CreoleTask extends Task {
  38.  
  39.     /**
  40.      * Used for caching loaders / driver. This is to avoid
  41.      * getting an OutOfMemoryError when calling this task
  42.      * multiple times in a row.
  43.      * 
  44.      * NOT IMPLEMENTED YET
  45.      */
  46.     private static $loaderMap = array();
  47.  
  48.     private $caching = true;
  49.  
  50.     /**
  51.      * Autocommit flag. Default value is false
  52.      */
  53.     private $autocommit = false;
  54.     
  55.     /**
  56.      * [optional] Classpath to Creole driver to use.
  57.      * @param string
  58.      */
  59.     private $driver;
  60.     
  61.     /**
  62.      * DB url.
  63.      */
  64.     private $url;
  65.  
  66.     /**
  67.      * User name.
  68.      */
  69.     private $userId;
  70.  
  71.     /**
  72.      * Password
  73.      */
  74.     private $password;
  75.  
  76.     /**
  77.      * RDBMS Product needed for this SQL.
  78.      **/
  79.     private $rdbms;
  80.    
  81.       /**
  82.      * Initialize CreoleTask.
  83.      * This method includes any necessary Creole libraries and triggers
  84.      * appropriate error if they cannot be found.  This is not done in header
  85.      * because we may want this class to be loaded w/o triggering an error.
  86.      */
  87.     function init() {
  88.         include_once 'creole/Creole.php';
  89.         if (!class_exists('Creole')) {
  90.             throw new Exception("Creole task depends on Creole classes being on include_path. (i.e. include of 'creole/Creole.php' failed.)");
  91.         }
  92.     }
  93.  
  94.     /**
  95.      * Caching loaders / driver. This is to avoid
  96.      * getting an OutOfMemoryError when calling this task
  97.      * multiple times in a row; default: true
  98.      * @param $enable
  99.      */
  100.     public function setCaching($enable) {
  101.         $this->caching = $enable;
  102.     }
  103.  
  104.     /**
  105.      * Sets the database connection URL; required.
  106.      * @param url The url to set
  107.      */
  108.     public function setUrl($url) {
  109.         $this->url = $url;
  110.     }
  111.  
  112.     /**
  113.      * Set the Creole driver to be used.
  114.      *
  115.      * @param string $driver driver class name
  116.      */
  117.     public function setDriver($driver)
  118.     {
  119.         $this->driver = $driver;
  120.     }
  121.         
  122.     /**
  123.      * Sets the password; required.
  124.      * @param password The password to set
  125.      */
  126.     public function setPassword($password) {
  127.         $this->password = $password;
  128.     }
  129.  
  130.     /**
  131.      * Auto commit flag for database connection;
  132.      * optional, default false.
  133.      * @param autocommit The autocommit to set
  134.      */
  135.     public function setAutocommit($autocommit) {
  136.         $this->autocommit = $autocommit;
  137.     }
  138.  
  139.     /**
  140.      * Sets the version string, execute task only if 
  141.      * rdbms version match; optional.
  142.      * @param version The version to set
  143.      */
  144.     public function setVersion($version) {
  145.         $this->version = $version;
  146.     }
  147.        
  148.     protected function getLoaderMap() {
  149.         return self::$loaderMap;
  150.     }
  151.  
  152.  
  153.     /**
  154.      * Creates a new Connection as using the driver, url, userid and password specified.
  155.      * The calling method is responsible for closing the connection.
  156.      * @return Connection the newly created connection.
  157.      * @throws BuildException if the UserId/Password/Url is not set or there is no suitable driver or the driver fails to load.
  158.      */
  159.     protected function getConnection() {
  160.             
  161.         if ($this->url === null) {
  162.             throw new BuildException("Url attribute must be set!", $this->location);
  163.         }
  164.                 
  165.         try {
  166.  
  167.             $this->log("Connecting to " . $this->getUrl(), PROJECT_MSG_VERBOSE);
  168.             $info = new Properties();
  169.             
  170.             $dsn = Creole::parseDSN($this->url);
  171.             
  172.             if (!isset($dsn["username"]) && $this->userId === null) {
  173.                 throw new BuildException("Username must be in URL or userid attribute must be set.", $this->location);                
  174.             }                        
  175.             
  176.             if ($this->userId) {
  177.                 $dsn["username"] = $this->getUserId();
  178.             }
  179.             
  180.             if ($this->password) {
  181.                 $dsn["password"] = $this->getPassword();
  182.             }
  183.             
  184.             if ($this->driver) {
  185.                 Creole::registerDriver($dsn['phptype'], $this->driver);
  186.             }
  187.             
  188.             $conn = Creole::getConnection($dsn);
  189.             $conn->setAutoCommit($this->autocommit);
  190.             return $conn;
  191.             
  192.         } catch (SQLException $e) {
  193.             throw new BuildException($e->getMessage(), $this->location);
  194.         }
  195.  
  196.     }
  197.  
  198.     public function isCaching($value) {
  199.         $this->caching = $value;
  200.     }
  201.  
  202.     /**
  203.      * Gets the autocommit.
  204.      * @return Returns a boolean
  205.      */
  206.     public function isAutocommit() {
  207.         return $this->autocommit;
  208.     }
  209.  
  210.     /**
  211.      * Gets the url.
  212.      * @return Returns a String
  213.      */
  214.     public function getUrl() {
  215.         return $this->url;
  216.     }
  217.  
  218.     /**
  219.      * Gets the userId.
  220.      * @return Returns a String
  221.      */
  222.     public function getUserId() {
  223.         return $this->userId;
  224.     }
  225.  
  226.     /**
  227.      * Set the user name for the connection; required.
  228.      * @param userId The userId to set
  229.      */
  230.     public function setUserid($userId) {
  231.         $this->userId = $userId;
  232.     }
  233.  
  234.     /**
  235.      * Gets the password.
  236.      * @return Returns a String
  237.      */
  238.     public function getPassword() {
  239.         return $this->password;
  240.     }
  241.  
  242. }
  243.