Source for file Db2.php

Documentation is available at Db2.php

  1. <?php
  2. /*
  3.  *  $Id: Db2.php 1722 2007-06-17 17:50:05Z zYne $
  4.  *
  5.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16.  *
  17.  * This software consists of voluntary contributions made by many individuals
  18.  * and is licensed under the LGPL. For more information, see
  19.  * <http://www.phpdoctrine.com>.
  20.  */
  21. Doctrine::autoload('Doctrine_Sequence');
  22. /**
  23.  * Doctrine_Sequence_Db2
  24.  *
  25.  * @package     Doctrine
  26.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  27.  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
  28.  * @category    Object Relational Mapping
  29.  * @link        www.phpdoctrine.com
  30.  * @since       1.0
  31.  * @version     $Revision: 1722 $
  32.  */
  33. {
  34.     /**
  35.      * Return the most recent value from the specified sequence in the database.
  36.      * This is supported only on RDBMS brands that support sequences
  37.      * (e.g. Oracle, PostgreSQL, DB2).  Other RDBMS brands return null.
  38.      *
  39.      * @param string $sequenceName 
  40.      * @return integer 
  41.      * @throws Doctrine_Adapter_Db2_Exception
  42.      */
  43.     public function lastSequenceId($sequenceName)
  44.     {
  45.         $sql 'SELECT PREVVAL FOR '
  46.              . $this->quoteIdentifier($this->conn->formatter->getSequenceName($sequenceName))
  47.              . ' AS VAL FROM SYSIBM.SYSDUMMY1';
  48.  
  49.         $stmt   $this->query($sql);
  50.         $result $stmt->fetchAll(Doctrine::FETCH_ASSOC);
  51.         if ($result{
  52.             return $result[0]['VAL'];
  53.         else {
  54.             return null;
  55.         }
  56.     }
  57.  
  58.     /**
  59.      * Generate a new value from the specified sequence in the database, and return it.
  60.      * This is supported only on RDBMS brands that support sequences
  61.      * (e.g. Oracle, PostgreSQL, DB2).  Other RDBMS brands return null.
  62.      *
  63.      * @param string $sequenceName 
  64.      * @return integer 
  65.      * @throws Doctrine_Adapter_Db2_Exception
  66.      */
  67.     public function nextSequenceId($sequenceName)
  68.     {
  69.         $this->_connect();
  70.         $sql 'SELECT NEXTVAL FOR '
  71.              . $this->quoteIdentifier($this->conn->formatter->getSequenceName($sequenceName))
  72.              . ' AS VAL FROM SYSIBM.SYSDUMMY1';
  73.         $stmt $this->query($sql);
  74.         $result $stmt->fetchAll(Doctrine::FETCH_ASSOC);
  75.         if ($result{
  76.             return $result[0]['VAL'];
  77.         else {
  78.             return null;
  79.         }
  80.     }
  81.  
  82.     /**
  83.      * Gets the last ID generated automatically by an IDENTITY/AUTOINCREMENT column.
  84.      *
  85.      * As a convention, on RDBMS brands that support sequences
  86.      * (e.g. Oracle, PostgreSQL, DB2), this method forms the name of a sequence
  87.      * from the arguments and returns the last id generated by that sequence.
  88.      * On RDBMS brands that support IDENTITY/AUTOINCREMENT columns, this method
  89.      * returns the last value generated for such a column, and the table name
  90.      * argument is disregarded.
  91.      *
  92.      * The IDENTITY_VAL_LOCAL() function gives the last generated identity value
  93.      * in the current process, even if it was for a GENERATED column.
  94.      *
  95.      * @param string $tableName OPTIONAL
  96.      * @param string $primaryKey OPTIONAL
  97.      * @return integer 
  98.      * @throws Doctrine_Adapter_Db2_Exception
  99.      */
  100.     public function lastInsertId($tableName null$primaryKey null)
  101.     {
  102.         $this->_connect();
  103.  
  104.         if ($tableName !== null{
  105.             $sequenceName $tableName;
  106.             if ($primaryKey{
  107.                 $sequenceName .= "_$primaryKey";
  108.             }
  109.             $sequenceName .= '_seq';
  110.             return $this->lastSequenceId($sequenceName);
  111.         }
  112.  
  113.         $sql 'SELECT IDENTITY_VAL_LOCAL() AS VAL FROM SYSIBM.SYSDUMMY1';
  114.         $stmt $this->query($sql);
  115.         $result $stmt->fetchAll(Doctrine::FETCH_ASSOC);
  116.         if ($result{
  117.             return $result[0]['VAL'];
  118.         else {
  119.             return null;
  120.         }
  121.     }
  122. }