SlideShare ist ein Scribd-Unternehmen logo
1 von 31
IBM DB2 Embedded SQL for PHP

Александр Веремьев
cawaspb@gmail.com
Что такое
встраиваемый SQL
      ?????
$dbname = 'db_name';
$dbuser = 'username';
$dbpwd = 'password';

EXEC SQL connect to :$dbname user :$dbuser using :$dbpwd;
...
$userid = $_POST['userid'];
$password = $_POST['password'];
EXEC SQL select firstname, lastname
           into :$firstname, :$lastname
           from users
           where login = :$userid AND password = :$password;

if ($SQLCODE == 100 /* NOT FOUND */) {
   echo "Wrong login/password combination.n";
} else {
    echo $firstname . "n"
       . $lastname . "n";
}
EXEC SQL DECLARE c1 CURSOR for
  select id, time, subject, message
    from emails
    where userid = :$userid AND status = 'NEW';


EXEC SQL BEGIN DECLARE SECTION;
  INTEGER      $email_id;
  TMESTAMP     $time;
  VARCHAR(256) $subject;
  CLOB(16M)    $message_body;
EXEC SQL END DECLARE SECTION;

EXEC SQL OPEN c1;
EXEC SQL FETCH c1 into :$email_id, :$time, :$subject, :$message_body;

while ($SQLCODE != 100 /* NOT FOUND */) {
  // process message
  ...
  EXEC SQL FETCH c1 into :$email_id, :$time, :$subject, :$message_body;
}
Часть SQL-92 стандарта


Непосредственная поддержка со стороны СУБД в тех или иных
языках:

- IBM DB2 (C/C++, Java, COBOL, FORTRAN, REXX)
- Oracle (Ada, C/C++, COBOL, FORTRAN, Pascal, PL/I)
- PostgreSQL (C/C++, COBOL)
- Microsof SQL Server (COBOL)
- MySQL (COBOL)
- Sybase
-…
IBM DB2 Embedded SQL for PHP support:

PHP extension db2_embsql



db2_embsql_precompile($input_file, $dbname, $options_string);


db2_embsql_precompile_string($php_code, $dbname, $options_string);
Особенности реализации встроенного SQL в IBM DB2.
    Static SQL.
<?php                                                                                                        <?php
/**                                                                                                          /**
 * Zend Framework                                                                                             * Zend Framework
 *                                                                                                            *
 * LICENSE                                                                                                    * LICENSE
 *                                                                                                            *
 * This source file is subject to the new BSD license that is bundled                                         * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.                                                                 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:                                               * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd                                                                  * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to                                             * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email                                                 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.                                                 * to license@zend.com so we can send you a copy immediately.
 *                                                                                                            *
 * @category     Zend                                                                                         * @category    Zend
 * @package      Zend_Pdf                                                                                     * @package     Zend_Pdf
 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)                        * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license      http://framework.zend.com/license/new-bsd     New BSD License                                * @license     http://framework.zend.com/license/new-bsd     New BSD License
 * @version      $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $                                          * @version     $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $
 */                                                                                                           */
                                                                                                             /** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */




                                                                                                       DB2
/** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */
/** @todo Section should be removed with ZF 2.0 release as obsolete              */                          /** @todo Section should be removed with ZF 2.0 release as obsolete            */
/** Zend_Pdf_Page */                                                                                         /** Zend_Pdf_Page */
require_once 'Zend/Pdf/Page.php';                                                                            require_once 'Zend/Pdf/Page.php';
/** Zend_Pdf_Canvas */                                                                                       /** Zend_Pdf_Canvas */
require_once 'Zend/Pdf/Canvas.php';                                                                          require_once 'Zend/Pdf/Canvas.php';
/** Internally used classes */                                                                               /** Internally used classes */
require_once 'Zend/Pdf/Element/Dictionary.php';                                                              require_once 'Zend/Pdf/Element/Dictionary.php';
require_once 'Zend/Pdf/Element/Name.php';                                                                    require_once 'Zend/Pdf/Element/Name.php';
require_once 'Zend/Pdf/Element/Null.php';                                                                    require_once 'Zend/Pdf/Element/Null.php';
require_once 'Zend/Pdf/Element/Numeric.php';                                                                 require_once 'Zend/Pdf/Element/Numeric.php';
require_once 'Zend/Pdf/Element/String.php';                                                                  require_once 'Zend/Pdf/Element/String.php';
/**                                                                                                          /**
 * General entity which describes PDF document.                                                               * General entity which describes PDF document.
 * It implements document abstraction with a document level operations.                                       * It implements document abstraction with a document level operations.
 *                                                                                                            *
 * Class is used to create new PDF document or load existing document.                                        * Class is used to create new PDF document or load existing document.
 * See details in a class constructor description                                                             * See details in a class constructor description
 *                                                                                                            *
 * Class agregates document level properties and entities (pages, bookmarks,                                  * Class agregates document level properties and entities (pages, bookmarks,
 * document level actions, attachments, form object, etc)                                                     * document level actions, attachments, form object, etc)
 *                                                                                                            *
 * @category     Zend                                                                                         * @category    Zend
 * @package      Zend_Pdf                                                                                     * @package     Zend_Pdf
 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)                        * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license      http://framework.zend.com/license/new-bsd     New BSD License                                * @license     http://framework.zend.com/license/new-bsd     New BSD License
 */                                                                                                           */
class Zend_Pdf                                                                                               class Zend_Pdf
{                                                                                                            {
   /**** Class Constants ****/                                                                                  /**** Class Constants ****/
     /**                                                                                                          /**
      * Version number of generated PDF documents.                                                                 * Version number of generated PDF documents.
      */                                                                                                           */
     const PDF_VERSION = '1.4';                                                                                   const PDF_VERSION = '1.4';
     /**                                                                                                          /**
      * PDF file header.                                                                                           * PDF file header.
      */                                                                                                           */
     const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n";
     /**                                                                                                     * * *
      * Pages collection
      *                                                                                                          /**
      * @todo implement it as a class, which supports ArrayAccess and Iterator interfaces,                         * Set user defined memory manager
      *        to provide incremental parsing and pages tree updating.                                             *
      *        That will give good performance and memory (PDF size) benefits.                                     * @param Zend_Memory_Manager $memoryManager
      *                                                                                                            */
      * @var array    - array of Zend_Pdf_Page object                                                             static public function setMemoryManager(Zend_Memory_Manager $memoryManager)
      */                                                                                                          {
     public $pages = array();                                                                                         self::$_memoryManager = $memoryManager;
     /**                                                                                                          }
      * List of inheritable attributesfor pages tree                                                         }
      *
      * @var array
      */
     protected static $_inheritableAttributes = array('Resources', 'MediaBox', 'CropBox', 'Rotate');
     /**
      * Request used memory manager
      *
      * @return Zend_Memory_Manager
      */
     static public function getMemoryManager()
     {
         if (self::$_memoryManager === null) {
              require_once 'Zend/Memory.php';
              self::$_memoryManager = Zend_Memory::factory('none');
         }
         return self::$_memoryManager;
     }
     /**
      * Set user defined memory manager
      *
      * @param Zend_Memory_Manager $memoryManager
      */
     static public function setMemoryManager(Zend_Memory_Manager $memoryManager)
     {
         self::$_memoryManager = $memoryManager;
     }
     /**
      * Set the document-level JavaScript
      *
      * @param string $javascript
      */
     public function setJavaScript($javascript)
     {
         $this->_javaScript = $javascript;
     }
     /**
      * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation
      * One) defined in ISO/IEC 8824).
      *
      * @todo This really isn't the best location for this method. It should
      *    probably actually exist as Zend_Pdf_Element_Date or something like that.
      *
      * @todo Address the following E_STRICT issue:
      *    PHP Strict Standards: date(): It is not safe to rely on the system's




                                                                                                                                            .BND
      *    timezone settings. Please use the date.timezone setting, the TZ
      *    environment variable or the date_default_timezone_set() function. In
      *    case you used any of those methods and you are still getting this
      *    warning, you most likely misspelled the timezone identifier.
      *
      * @param integer $timestamp (optional) If omitted, uses the current time.
      * @return string
      */
     public static function pdfDate($timestamp = null)
     {
         if ($timestamp === null) {
              $date = date('D:YmdHisO');
         } else {
              $date = date('D:YmdHisO', $timestamp);
         }
         return substr_replace($date, ''', -2, 0) . ''';
     }
}
<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.




                                                                                                             PHP код
 *




                                                                                      PHP код
 * @category     Zend
 * @package      Zend_Pdf
 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc.
(http://www.zend.com)
 * @license      http://framework.zend.com/license/new-bsd     New BSD License
 * @version      $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $
 */
/** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */
/** @todo Section should be removed with ZF 2.0 release as obsolete              */
/** Zend_Pdf_Page */
require_once 'Zend/Pdf/Page.php';
/** Zend_Pdf_Canvas */
require_once 'Zend/Pdf/Canvas.php';
/** Internally used classes */
require_once 'Zend/Pdf/Element/Dictionary.php';
require_once 'Zend/Pdf/Element/Name.php';
require_once 'Zend/Pdf/Element/Null.php';
require_once 'Zend/Pdf/Element/Numeric.php';
require_once 'Zend/Pdf/Element/String.php';
/**
 * General entity which describes PDF document.
 * It implements document abstraction with a document level operations.
 *
 * Class is used to create new PDF document or load existing document.
 * See details in a class constructor description
 *
 * Class agregates document level properties and entities (pages, bookmarks,
 * document level actions, attachments, form object, etc)
 *
 * @category     Zend
 * @package      Zend_Pdf
 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc.
(http://www.zend.com)
 * @license      http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Pdf
{
   /**** Class Constants ****/
     /**
      * Version number of generated PDF documents.
      */
     const PDF_VERSION = '1.4';
     /**
      * PDF file header.
      */
     const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n";
     /**
      * Pages collection
      *
      * @todo implement it as a class, which supports ArrayAccess and Iterator
interfaces,
      *        to provide incremental parsing and pages tree updating.
      *        That will give good performance and memory (PDF size) benefits.
      *
      * @var array    - array of Zend_Pdf_Page object
      */
     public $pages = array();
     /**
      * List of inheritable attributesfor pages tree
      *
      * @var array
      */
     protected static $_inheritableAttributes = array('Resources', 'MediaBox',
'CropBox', 'Rotate');
     /**
      * Request used memory manager
      *
      * @return Zend_Memory_Manager
      */
     static public function getMemoryManager()
     {
         if (self::$_memoryManager === null) {
              require_once 'Zend/Memory.php';
              self::$_memoryManager = Zend_Memory::factory('none');
         }
         return self::$_memoryManager;
     }
     /**
      * Set user defined memory manager
      *
      * @param Zend_Memory_Manager $memoryManager
      */
     static public function setMemoryManager(Zend_Memory_Manager $memoryManager)
     {
         self::$_memoryManager = $memoryManager;
     }
     /**
      * Set the document-level JavaScript
      *
      * @param string $javascript
      */
     public function setJavaScript($javascript)
     {
         $this->_javaScript = $javascript;
     }
     /**
      * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation




                                                                                       SQL
      * One) defined in ISO/IEC 8824).
      *
      * @todo This really isn't the best location for this method. It should
      *    probably actually exist as Zend_Pdf_Element_Date or something like that.




                                                                                                Компиляция
      *
      * @todo Address the following E_STRICT issue:
      *    PHP Strict Standards: date(): It is not safe to rely on the system's
      *    timezone settings. Please use the date.timezone setting, the TZ
      *    environment variable or the date_default_timezone_set() function. In
      *    case you used any of those methods and you are still getting this
      *    warning, you most likely misspelled the timezone identifier.
      *
      * @param integer $timestamp (optional) If omitted, uses the current time.
      * @return string
      */
     public static function pdfDate($timestamp = null)
     {
         if ($timestamp === null) {
              $date = date('D:YmdHisO');
         } else {
              $date = date('D:YmdHisO', $timestamp);
         }
         return substr_replace($date, ''', -2, 0) . ''';
     }
}
Статический SQL.


- отсутствие повторной компиляции, использование готового плана
выполнения (отличные результаты на OLTP нагрузке);


- защита от SQL injection;


- улучшенная модель security.
Связывание типов.


              PHP                              SQL

- динамическая типизация        - статическая типизация

- слабая типизация              - строгая типизация1




 1
  поддерживается неявный кастинг для некоторого подмножества
 типов.
Связывание типов.


          PHP                 SQL


    $var1 (integer)
                      SELECT … INTO :$var1 …
    …

    $var1 (string)
                      INSERT INTO … VALUES(:$var1, …)




    $var2 (float)
                      SELECT … WHERE COL1 > :$var2
    $var1 (string)
Связывание типов, C/C++:

EXEC SQL BEGIN DECLARE SECTION;
  char dbName[16];
  char userid[30];
  char passwd[30];

  SQL TYPE IS CLOB(2M) img_data;
EXEC SQL END DECLARE SECTION;

...

EXEC SQL CONNECT TO :dbName USER :userid USING :passwd;
db2_embsql extension:


1. Декларативность секции
   EXEC SQL BEGIN DECLARE SECTION;
   …
   EXEC SQL END DECLARE SECTION;




2. Физическое размещение HV в модуле extension’а.
3. Маппинг имѐн host variables (и производных lvalue конструкций)
   на внутренние имена HV в SQL выражениях, отправляемых на
   прекомпиляцию.


   $this->myCoolVariable
   $values[$index]->val
   $options['my_cool_option']
   …
Маппинг типов:

SMALLINT (16-bit integer)   -   integrer
INTEGER (32-bit integer)    -   integrer
BIGINT   (64-bit integer)   -   integrer

REAL                        -   float
DOUBLE                      -   float

DECIMAL                     -   STRING

CHAR(n)                     -   STRING
CHAR(n) FOR BIT DATA        -   STRING
VARCHAR(n)                  -   STRING
CLOB(n)                     -   STRING
BLOB(n)                     -   STRING

DATE                        -   STRING
TIME                        -   STRING
TIMESTAMP                   -   STRING

...
Решение проблемы предугадывания типов, input/output variables:


EXEC SQL SELECT LOGIN, FIRSTNAME, LASTNAME
          INTO :$login, :$firstname, :$lastname
          FROM USERS
          WHERE ID = :$user_id;


vs


EXEC SQL INSERT INTO USERS
        VALUES( :$login, :$firstname, :$lastname);
Декларация “базовых” переменных:

EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR(32) $login;
        VARCHAR(64) $firstname,
        VARCHAR(64) $lastname;
EXEC SQL BEGIN DECLARE SECTION;

...

$login     = $this->login;
$firstname = $this->firstname;
$lastname = $this->lastname;

EXEC SQL INSERT INTO USERS
        VALUES(:$login, :$firstname, :$lastname);
Декларация “производных” переменных:

EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR(32) $this->login;
        VARCHAR(64) $this->firstname,
        VARCHAR(64) $this->lastname;
EXEC SQL BEGIN DECLARE SECTION;

...

EXEC SQL INSERT INTO USERS
        VALUES( :$this->login,
                :$this->firstname,
                :$this->lastname);
Как работают вызовы SQL statements:

<?php
/**
 * Zend Framework
 *
                                                                                                                  DB2 Run         Database
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
                                                                                                                  Time Services   Manager
                                                                                                       SELECT …
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category     Zend
 * @package      Zend_Pdf
 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license      http://framework.zend.com/license/new-bsd     New BSD License
 * @version      $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $
 */
/** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */
/** @todo Section should be removed with ZF 2.0 release as obsolete              */
/** Zend_Pdf_Page */
require_once 'Zend/Pdf/Page.php';
/** Zend_Pdf_Canvas */
require_once 'Zend/Pdf/Canvas.php';
/** Internally used classes */
require_once 'Zend/Pdf/Element/Dictionary.php';
require_once 'Zend/Pdf/Element/Name.php';




                                                                                                       :HV1
require_once 'Zend/Pdf/Element/Null.php';
require_once 'Zend/Pdf/Element/Numeric.php';
require_once 'Zend/Pdf/Element/String.php';
/**
 * General entity which describes PDF document.
 * It implements document abstraction with a document level operations.
 *
 * Class is used to create new PDF document or load existing document.
 * See details in a class constructor description
 *
 * Class agregates document level properties and entities (pages, bookmarks,




                                                                                                       :HV2
 * document level actions, attachments, form object, etc)
 *
 * @category     Zend
 * @package      Zend_Pdf
 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 * @license      http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Pdf
{
   /**** Class Constants ****/
     /**
      * Version number of generated PDF documents.
      */
     const PDF_VERSION = '1.4';
     /**
      * PDF file header.
                                                                                                                    CALL
      */
     const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n";
     /**
      * Pages collection
      *
      * @todo implement it as a class, which supports ArrayAccess and Iterator interfaces,
      *        to provide incremental parsing and pages tree updating.
      *        That will give good performance and memory (PDF size) benefits.
      *
      * @var array    - array of Zend_Pdf_Page object
      */
     public $pages = array();
     /**




                                                                                                                                             Packages
      * List of inheritable attributesfor pages tree




                                                                                                                                             Packages
      *




                                                                                                                                              Packages
      * @var array
      */
     protected static $_inheritableAttributes = array('Resources', 'MediaBox', 'CropBox', 'Rotate');
     /**
      * Request used memory manager
      *
      * @return Zend_Memory_Manager
      */
     static public function getMemoryManager()
     {
         if (self::$_memoryManager === null) {
              require_once 'Zend/Memory.php';
              self::$_memoryManager = Zend_Memory::factory('none');
         }
         return self::$_memoryManager;
     }
     /**
      * Set user defined memory manager
      *
      * @param Zend_Memory_Manager $memoryManager
      */
     static public function setMemoryManager(Zend_Memory_Manager $memoryManager)
     {
         self::$_memoryManager = $memoryManager;
     }
     /**
      * Set the document-level JavaScript
      *
      * @param string $javascript
      */
     public function setJavaScript($javascript)
     {
         $this->_javaScript = $javascript;
     }
     /**
      * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation
      * One) defined in ISO/IEC 8824).
      *




                                                                                                                                              Data
      * @todo This really isn't the best location for this method. It should




                                                                                                                                             Packages
      *    probably actually exist as Zend_Pdf_Element_Date or something like that.




                                                                                                                                             Packages
      *
      * @todo Address the following E_STRICT issue:
      *    PHP Strict Standards: date(): It is not safe to rely on the system's
      *    timezone settings. Please use the date.timezone setting, the TZ
      *    environment variable or the date_default_timezone_set() function. In
      *    case you used any of those methods and you are still getting this
      *    warning, you most likely misspelled the timezone identifier.
      *
      * @param integer $timestamp (optional) If omitted, uses the current time.
      * @return string
      */
     public static function pdfDate($timestamp = null)
     {
         if ($timestamp === null) {
              $date = date('D:YmdHisO');
         } else {



                                                                                                                   Result
              $date = date('D:YmdHisO', $timestamp);
         }
         return substr_replace($date, ''', -2, 0) . ''';
     }
}



                                                                                                       :HV3
пример прекомпилированного С кода:

/*
EXEC SQL select count(*) into :tbl_cnt   from   syscat.tables;
*/

{
#line 39 "dbconn.sqc"
  sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 39 "dbconn.sqc"
  sqlaaloc(3,1,2,0L);
    {
      struct sqla_setdata_list sql_setdlist[1];
#line 39 "dbconn.sqc"
      sql_setdlist[0].sqltype = 496; sql_setdlist[0].sqllen = 4;
#line 39 "dbconn.sqc"
      sql_setdlist[0].sqldata = (void*)&tbl_cnt;
#line 39 "dbconn.sqc"
      sql_setdlist[0].sqlind = 0L;
#line 39 "dbconn.sqc"
      sqlasetdata(3,0,1,sql_setdlist,0L,0L);
    }
#line 39 "dbconn.sqc"
  sqlacall((unsigned short)24,1,0,3,0L);
#line 39 "dbconn.sqc"
  sqlastop(0L);
}

#line 39 "dbconn.sqc"

 EMB_SQL_CHECK("Count tables");

 printf("select count(*) from syscat.tables;n--------n %dn", tbl_cnt);
Архитектура extension’а как магазинного автомата:

                                                                                            Очередь вызовов
PHP engine

  <?php
  /**
   * Zend Framework
   *




                                                                                           DB2_ESQL
   * LICENSE
   *
   * This source file is subject to the new BSD license that is bundled
   * with this package in the file LICENSE.txt.
   * It is also available through the world-wide-web at this URL:
   * http://framework.zend.com/license/new-bsd
   * If you did not receive a copy of the license and are unable to
   * obtain it through the world-wide-web, please send an email
   * to license@zend.com so we can send you a copy immediately.




                                                                                           extension
   *
   * @category     Zend
   * @package      Zend_Pdf
   * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
   * @license      http://framework.zend.com/license/new-bsd     New BSD License
   * @version      $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $
   */
  /** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */
  /** @todo Section should be removed with ZF 2.0 release as obsolete              */
  /** Zend_Pdf_Page */
  require_once 'Zend/Pdf/Page.php';
  /** Zend_Pdf_Canvas */
  require_once 'Zend/Pdf/Canvas.php';
  /** Internally used classes */
  require_once 'Zend/Pdf/Element/Dictionary.php';
  /**
   * General entity which describes PDF document.
   * It implements document abstraction with a document level operations.
   *
   * Class is used to create new PDF document or load existing document.
                                                                                           sqlaaloc(...)
   * See details in a class constructor description
   *
     *
   * @category
   * @package
                   Zend
                   Zend_Pdf
   * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
                                                                                           sqlacall(...)
   * @license      http://framework.zend.com/license/new-bsd     New BSD License


  {
   */
  class Zend_Pdf

     /**** Class Constants ****/
       /**
                                                                                           sqlacmpd(...)
        * Version number of generated PDF documents.
        */
       const PDF_VERSION = '1.4';
       /**
        * PDF file header.
        */
                                                                                           sqladloc(...)
       const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n";

  /**
       /**

        * List of inheritable attributesfor pages tree
        *
        * @var array
                                                                                           sqlastls(...)
        */
       protected static $_inheritableAttributes = array('Resources', 'MediaBox',
  'CropBox', 'Rotate');
       /**
        * Request used memory manager
        *
                                                                                           sqlastlv(...)
        * @return Zend_Memory_Manager


       {
        */
       static public function getMemoryManager()

           if (self::$_memoryManager === null) {
                require_once 'Zend/Memory.php';
                                                                                           sqlastlva(...)
                self::$_memoryManager = Zend_Memory::factory('none');


       }
       /**
           }
           return self::$_memoryManager;


        * Set user defined memory manager
                                                                                           sqlasetdata(...)
        *
        * @param Zend_Memory_Manager $memoryManager
        */
       static public function setMemoryManager(Zend_Memory_Manager $memoryManager)
       {
           self::$_memoryManager = $memoryManager;
                                                                                           sqlastop(...)
       }
       /**
        * Set the document-level JavaScript
        *
        * @param string $javascript
        */
                                                                                           sqlastrt(...)
       public function setJavaScript($javascript)
       {

       }
       /**
           $this->_javaScript = $javascript;


        * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation
                                                                                           sqlausda(...)
        * One) defined in ISO/IEC 8824).
        *
        * @todo This really isn't the best location for this method. It should
        *    probably actually exist as Zend_Pdf_Element_Date or something like that.
        *
        * @todo Address the following E_STRICT issue:
        *    PHP Strict Standards: date(): It is not safe to rely on the system's
        *    timezone settings. Please use the date.timezone setting, the TZ
        *    environment variable or the date_default_timezone_set() function. In
        *    case you used any of those methods and you are still getting this
        *    warning, you most likely misspelled the timezone identifier.
        *
        * @param integer $timestamp (optional) If omitted, uses the current time.
        * @return string
        */
       public static function pdfDate($timestamp = null)
       {
           if ($timestamp === null) {
                $date = date('D:YmdHisO');
           } else {
                $date = date('D:YmdHisO', $timestamp);
           }
           return substr_replace($date, ''', -2, 0) . ''';




                                                                                           НV area
       }
  }
Плюсы:

- cтатичность SQL;

- отсутствие фазы компиляции запроса на этапе выполнения;

- отсутствие фазы построения плана запроса на этапе выполнения;

- проверка SQL на этапе прекомпиляции;

- защищѐнность от вымывания кэшей SQL запросов;

- управляемость планов выполнения, возможность вести
сравнительную статистику по изменяемости планов
по модулям приложений, пакет как measurement объѐмов и
характера данных в проекции приложения;

- модель security – права на выполнение на уровне пакета.
Минусы:

- cтатичность SQL;

- дополнительная фаза - прекомпиляция;

- необходимость существования соответствующих объектов
базы на момент компиляции;

- прирост производительности незаметен на длительных
запросах (10 и более секунд);

- слабая ориентированность на “ad hoc” запросы:
имеется поддержка динамического SQL, но она ничем
не лучше native подходов с помощью odbc/cli;

- отсутствие выигрыша для редко выполняемых запросов.
Ограничения embedded SQL:

- невозможность использования Host variables в именах
объектов имѐн таблиц, функций, процедур, …, кроме как
при использовании динамического SQL (PREPAPRE, EXECUTE);

- невозможность использования scrollable курсоров;
IBM DB2 и динамический SQL для PHP:
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.swg.im.dbclient.php.doc/doc/c0021523.html




1. ibm_db2 extension
http://www.php.net/manual/en/book.ibm-db2.php



2. pdo_ibm driver
http://www.php.net/manual/en/book.pdo.php



3. Unified odbc extension
http://www.php.net/manual/en/book.uodbc.php
Способы увеличения производительности динамического SQL:

- увеличение размера STATEMENT CACHE – pckachesz
имеется некоторая точка насыщения, предмет для мониторинга:
* pkg_cache_lookups (package cache lookups)
* pkg_cache_inserts (package cache inserts)
* pkg_cache_size_top (package cache high water mark)
* pkg_cache_num_overflows (package cache overflows)


- использование параметризованных запросов
есть “Но” – план выполнения будет строиться без учѐта реального
значения параметра


- StmtConcentrator CLI/ODBC параметр
- конвертирование динамического SQL в статический:

1. Коллектор запросов (CLI/ODBC параметры):
STATICMODE=CAPTURE
STATICCAPFILE=<path>
STATICPACKAGE=<package_schema>.<package_name>

2. Работа приложения

3. db2cap bind …

4. STATICMODE=MATCH
Планы


- Пре-релиз конец мая – начало июня.


- Релиз, передача в Open Source – конец июня.
Embedded SQL

            vs

ORM frameworks/ActiveRecord

           ???
Вопросы




Александр Веремьев
cawaspb@gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13
Rafael Dohms
 
Migrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain PointsMigrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain Points
Steven Evatt
 
Dependency management with Composer
Dependency management with ComposerDependency management with Composer
Dependency management with Composer
Jason Grimes
 
Zend Framework 2 - presentation
Zend Framework 2 - presentationZend Framework 2 - presentation
Zend Framework 2 - presentation
yamcsha
 

Was ist angesagt? (20)

Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot World
 
Zend Framework 2 - Basic Components
Zend Framework 2  - Basic ComponentsZend Framework 2  - Basic Components
Zend Framework 2 - Basic Components
 
Zend\Expressive - höher, schneller, weiter
Zend\Expressive - höher, schneller, weiterZend\Expressive - höher, schneller, weiter
Zend\Expressive - höher, schneller, weiter
 
Dependency Management with Composer
Dependency Management with ComposerDependency Management with Composer
Dependency Management with Composer
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 
Happy porting x86 application to android
Happy porting x86 application to androidHappy porting x86 application to android
Happy porting x86 application to android
 
Submit PHP: Standards in PHP world. Михайло Морозов
Submit PHP: Standards in PHP world. Михайло МорозовSubmit PHP: Standards in PHP world. Михайло Морозов
Submit PHP: Standards in PHP world. Михайло Морозов
 
Datagrids with Symfony 2, Backbone and Backgrid
Datagrids with Symfony 2, Backbone and BackgridDatagrids with Symfony 2, Backbone and Backgrid
Datagrids with Symfony 2, Backbone and Backgrid
 
Cryptography with Zend Framework
Cryptography with Zend FrameworkCryptography with Zend Framework
Cryptography with Zend Framework
 
Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13Composer for Busy Developers - php|tek13
Composer for Busy Developers - php|tek13
 
Migrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain PointsMigrating PriceChirp to Rails 3.0: The Pain Points
Migrating PriceChirp to Rails 3.0: The Pain Points
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in php
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory CourseRuby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
 
Dependency management with Composer
Dependency management with ComposerDependency management with Composer
Dependency management with Composer
 
Commcon 2018
Commcon 2018Commcon 2018
Commcon 2018
 
Zend Framework 2 - presentation
Zend Framework 2 - presentationZend Framework 2 - presentation
Zend Framework 2 - presentation
 
Mastering Namespaces in PHP
Mastering Namespaces in PHPMastering Namespaces in PHP
Mastering Namespaces in PHP
 
Security Goodness with Ruby on Rails
Security Goodness with Ruby on RailsSecurity Goodness with Ruby on Rails
Security Goodness with Ruby on Rails
 
Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012
 

Andere mochten auch

What is a canadian
What is a canadianWhat is a canadian
What is a canadian
samspector93
 
Using Student Research Center
Using Student Research CenterUsing Student Research Center
Using Student Research Center
David Smolen
 
Using Student Research Center
Using Student Research CenterUsing Student Research Center
Using Student Research Center
David Smolen
 
Правила и Условия Программы
Правила и Условия ПрограммыПравила и Условия Программы
Правила и Условия Программы
AeroSvit Airlines
 
Anexo ás normas, calendario previo (aprobado)
Anexo ás normas, calendario previo  (aprobado)Anexo ás normas, calendario previo  (aprobado)
Anexo ás normas, calendario previo (aprobado)
oscargaliza
 
Process Consulting Perspective
Process Consulting PerspectiveProcess Consulting Perspective
Process Consulting Perspective
Vibhanshu Sharma
 
Why businesses should talktojason the Leeds public relations and communicatio...
Why businesses should talktojason the Leeds public relations and communicatio...Why businesses should talktojason the Leeds public relations and communicatio...
Why businesses should talktojason the Leeds public relations and communicatio...
Jason Kelly
 

Andere mochten auch (20)

Statby school 2555_m3_1057012007
Statby school 2555_m3_1057012007Statby school 2555_m3_1057012007
Statby school 2555_m3_1057012007
 
What is a canadian
What is a canadianWhat is a canadian
What is a canadian
 
UBiT 2010 lik UBiT next
UBiT 2010 lik UBiT nextUBiT 2010 lik UBiT next
UBiT 2010 lik UBiT next
 
Using Student Research Center
Using Student Research CenterUsing Student Research Center
Using Student Research Center
 
ALP. Short facts
ALP. Short factsALP. Short facts
ALP. Short facts
 
news file
news filenews file
news file
 
How to make your destination pintastic! (Part 1)
How to make your destination pintastic! (Part 1)How to make your destination pintastic! (Part 1)
How to make your destination pintastic! (Part 1)
 
Acta ci 121106
Acta ci 121106Acta ci 121106
Acta ci 121106
 
Using Student Research Center
Using Student Research CenterUsing Student Research Center
Using Student Research Center
 
Latino voters in Arizona and SB1070
Latino voters in Arizona and SB1070Latino voters in Arizona and SB1070
Latino voters in Arizona and SB1070
 
Правила и Условия Программы
Правила и Условия ПрограммыПравила и Условия Программы
Правила и Условия Программы
 
Mailrouting t shootingfinal
Mailrouting t shootingfinalMailrouting t shootingfinal
Mailrouting t shootingfinal
 
สถาปนากรุงรัตนโกสินทร์
สถาปนากรุงรัตนโกสินทร์สถาปนากรุงรัตนโกสินทร์
สถาปนากรุงรัตนโกสินทร์
 
Codesign Athens Course Gentes
Codesign Athens Course GentesCodesign Athens Course Gentes
Codesign Athens Course Gentes
 
Titan Awards Sponsorship Packet
Titan Awards Sponsorship PacketTitan Awards Sponsorship Packet
Titan Awards Sponsorship Packet
 
สงครามครูเสด 2003
สงครามครูเสด 2003สงครามครูเสด 2003
สงครามครูเสด 2003
 
ฟ้เดล กัสโตร
ฟ้เดล กัสโตรฟ้เดล กัสโตร
ฟ้เดล กัสโตร
 
Anexo ás normas, calendario previo (aprobado)
Anexo ás normas, calendario previo  (aprobado)Anexo ás normas, calendario previo  (aprobado)
Anexo ás normas, calendario previo (aprobado)
 
Process Consulting Perspective
Process Consulting PerspectiveProcess Consulting Perspective
Process Consulting Perspective
 
Why businesses should talktojason the Leeds public relations and communicatio...
Why businesses should talktojason the Leeds public relations and communicatio...Why businesses should talktojason the Leeds public relations and communicatio...
Why businesses should talktojason the Leeds public relations and communicatio...
 

Ähnlich wie ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL (Александр Веремьев)

Zero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutesZero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutes
Jeremy Kendall
 
modernizr-1.5.js! Modernizr JavaScript library 1.5 .docx
modernizr-1.5.js!  Modernizr JavaScript library 1.5 .docxmodernizr-1.5.js!  Modernizr JavaScript library 1.5 .docx
modernizr-1.5.js! Modernizr JavaScript library 1.5 .docx
raju957290
 
jpf.jpgmodernizr-1.5.js! Modernizr JavaScript libra.docx
jpf.jpgmodernizr-1.5.js!  Modernizr JavaScript libra.docxjpf.jpgmodernizr-1.5.js!  Modernizr JavaScript libra.docx
jpf.jpgmodernizr-1.5.js! Modernizr JavaScript libra.docx
priestmanmable
 
Decoupled Libraries for PHP
Decoupled Libraries for PHPDecoupled Libraries for PHP
Decoupled Libraries for PHP
Paul Jones
 
gbar.jpgglogo.jpgmaa.jpgmaah5txt.css New Pe.docx
gbar.jpgglogo.jpgmaa.jpgmaah5txt.css   New Pe.docxgbar.jpgglogo.jpgmaa.jpgmaah5txt.css   New Pe.docx
gbar.jpgglogo.jpgmaa.jpgmaah5txt.css New Pe.docx
budbarber38650
 

Ähnlich wie ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL (Александр Веремьев) (20)

Introduction to Zend Framework
Introduction to Zend FrameworkIntroduction to Zend Framework
Introduction to Zend Framework
 
The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09
 
The Beauty and the Beast
The Beauty and the BeastThe Beauty and the Beast
The Beauty and the Beast
 
Zero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutesZero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutes
 
D7 entities fields
D7 entities fieldsD7 entities fields
D7 entities fields
 
The beautyandthebeast phpbat2010
The beautyandthebeast phpbat2010The beautyandthebeast phpbat2010
The beautyandthebeast phpbat2010
 
modernizr-1.5.js! Modernizr JavaScript library 1.5 .docx
modernizr-1.5.js!  Modernizr JavaScript library 1.5 .docxmodernizr-1.5.js!  Modernizr JavaScript library 1.5 .docx
modernizr-1.5.js! Modernizr JavaScript library 1.5 .docx
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshopZend Framework 1.8 workshop
Zend Framework 1.8 workshop
 
jpf.jpgmodernizr-1.5.js! Modernizr JavaScript libra.docx
jpf.jpgmodernizr-1.5.js!  Modernizr JavaScript libra.docxjpf.jpgmodernizr-1.5.js!  Modernizr JavaScript libra.docx
jpf.jpgmodernizr-1.5.js! Modernizr JavaScript libra.docx
 
Composer
ComposerComposer
Composer
 
ZF2 Presentation @PHP Tour 2011 in Lille
ZF2 Presentation @PHP Tour 2011 in LilleZF2 Presentation @PHP Tour 2011 in Lille
ZF2 Presentation @PHP Tour 2011 in Lille
 
Zend Framework 2 quick start
Zend Framework 2 quick startZend Framework 2 quick start
Zend Framework 2 quick start
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
 
Decoupled Libraries for PHP
Decoupled Libraries for PHPDecoupled Libraries for PHP
Decoupled Libraries for PHP
 
gbar.jpgglogo.jpgmaa.jpgmaah5txt.css New Pe.docx
gbar.jpgglogo.jpgmaa.jpgmaah5txt.css   New Pe.docxgbar.jpgglogo.jpgmaa.jpgmaah5txt.css   New Pe.docx
gbar.jpgglogo.jpgmaa.jpgmaah5txt.css New Pe.docx
 
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
 
Zend framework 06 - zend config, pdf, i18n, l10n, sessions
Zend framework 06 - zend config, pdf, i18n, l10n, sessionsZend framework 06 - zend config, pdf, i18n, l10n, sessions
Zend framework 06 - zend config, pdf, i18n, l10n, sessions
 
Zend
ZendZend
Zend
 
Zend framework
Zend frameworkZend framework
Zend framework
 
1. react - native: setup
1. react - native: setup1. react - native: setup
1. react - native: setup
 

Mehr von ZFConf Conference

ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf Conference
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf Conference
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf Conference
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf Conference
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf Conference
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf Conference
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ruZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ru
ZFConf Conference
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend FrameworkZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf Conference
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf Conference
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf Conference
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf Conference
 
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf Conference
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
ZFConf Conference
 

Mehr von ZFConf Conference (20)

ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
 
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
ZFConf 2012: Проектирование архитектуры, внедрение и организация процесса раз...
 
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
 
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
ZFConf 2011: Создание REST-API для сторонних разработчиков и мобильных устрой...
 
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
ZFConf 2011: Что такое Sphinx, зачем он вообще нужен и как его использовать с...
 
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
ZFConf 2011: Как может помочь среда разработки при написании приложения на Ze...
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
 
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
ZFConf 2011: Behavior Driven Development в PHP и Zend Framework (Константин К...
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
ZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ruZFConf 2010: History of e-Shtab.ru
ZFConf 2010: History of e-Shtab.ru
 
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend FrameworkZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
ZFConf 2010: Fotostrana.ru: Prototyping Project with Zend Framework
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 2, Dependency I...
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
 
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
ZFConf 2010: Using Message Queues in Day-to-Day Projects (Zend_Queue)
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 

Kürzlich hochgeladen

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Kürzlich hochgeladen (20)

Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL (Александр Веремьев)

  • 1. IBM DB2 Embedded SQL for PHP Александр Веремьев cawaspb@gmail.com
  • 3. $dbname = 'db_name'; $dbuser = 'username'; $dbpwd = 'password'; EXEC SQL connect to :$dbname user :$dbuser using :$dbpwd; ... $userid = $_POST['userid']; $password = $_POST['password']; EXEC SQL select firstname, lastname into :$firstname, :$lastname from users where login = :$userid AND password = :$password; if ($SQLCODE == 100 /* NOT FOUND */) { echo "Wrong login/password combination.n"; } else { echo $firstname . "n" . $lastname . "n"; }
  • 4. EXEC SQL DECLARE c1 CURSOR for select id, time, subject, message from emails where userid = :$userid AND status = 'NEW'; EXEC SQL BEGIN DECLARE SECTION; INTEGER $email_id; TMESTAMP $time; VARCHAR(256) $subject; CLOB(16M) $message_body; EXEC SQL END DECLARE SECTION; EXEC SQL OPEN c1; EXEC SQL FETCH c1 into :$email_id, :$time, :$subject, :$message_body; while ($SQLCODE != 100 /* NOT FOUND */) { // process message ... EXEC SQL FETCH c1 into :$email_id, :$time, :$subject, :$message_body; }
  • 5. Часть SQL-92 стандарта Непосредственная поддержка со стороны СУБД в тех или иных языках: - IBM DB2 (C/C++, Java, COBOL, FORTRAN, REXX) - Oracle (Ada, C/C++, COBOL, FORTRAN, Pascal, PL/I) - PostgreSQL (C/C++, COBOL) - Microsof SQL Server (COBOL) - MySQL (COBOL) - Sybase -…
  • 6. IBM DB2 Embedded SQL for PHP support: PHP extension db2_embsql db2_embsql_precompile($input_file, $dbname, $options_string); db2_embsql_precompile_string($php_code, $dbname, $options_string);
  • 7. Особенности реализации встроенного SQL в IBM DB2. Static SQL. <?php <?php /** /** * Zend Framework * Zend Framework * * * LICENSE * LICENSE * * * This source file is subject to the new BSD license that is bundled * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * to license@zend.com so we can send you a copy immediately. * * * @category Zend * @category Zend * @package Zend_Pdf * @package Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $ * @version $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $ */ */ /** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */ DB2 /** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */ /** @todo Section should be removed with ZF 2.0 release as obsolete */ /** @todo Section should be removed with ZF 2.0 release as obsolete */ /** Zend_Pdf_Page */ /** Zend_Pdf_Page */ require_once 'Zend/Pdf/Page.php'; require_once 'Zend/Pdf/Page.php'; /** Zend_Pdf_Canvas */ /** Zend_Pdf_Canvas */ require_once 'Zend/Pdf/Canvas.php'; require_once 'Zend/Pdf/Canvas.php'; /** Internally used classes */ /** Internally used classes */ require_once 'Zend/Pdf/Element/Dictionary.php'; require_once 'Zend/Pdf/Element/Dictionary.php'; require_once 'Zend/Pdf/Element/Name.php'; require_once 'Zend/Pdf/Element/Name.php'; require_once 'Zend/Pdf/Element/Null.php'; require_once 'Zend/Pdf/Element/Null.php'; require_once 'Zend/Pdf/Element/Numeric.php'; require_once 'Zend/Pdf/Element/Numeric.php'; require_once 'Zend/Pdf/Element/String.php'; require_once 'Zend/Pdf/Element/String.php'; /** /** * General entity which describes PDF document. * General entity which describes PDF document. * It implements document abstraction with a document level operations. * It implements document abstraction with a document level operations. * * * Class is used to create new PDF document or load existing document. * Class is used to create new PDF document or load existing document. * See details in a class constructor description * See details in a class constructor description * * * Class agregates document level properties and entities (pages, bookmarks, * Class agregates document level properties and entities (pages, bookmarks, * document level actions, attachments, form object, etc) * document level actions, attachments, form object, etc) * * * @category Zend * @category Zend * @package Zend_Pdf * @package Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @license http://framework.zend.com/license/new-bsd New BSD License */ */ class Zend_Pdf class Zend_Pdf { { /**** Class Constants ****/ /**** Class Constants ****/ /** /** * Version number of generated PDF documents. * Version number of generated PDF documents. */ */ const PDF_VERSION = '1.4'; const PDF_VERSION = '1.4'; /** /** * PDF file header. * PDF file header. */ */ const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n"; /** * * * * Pages collection * /** * @todo implement it as a class, which supports ArrayAccess and Iterator interfaces, * Set user defined memory manager * to provide incremental parsing and pages tree updating. * * That will give good performance and memory (PDF size) benefits. * @param Zend_Memory_Manager $memoryManager * */ * @var array - array of Zend_Pdf_Page object static public function setMemoryManager(Zend_Memory_Manager $memoryManager) */ { public $pages = array(); self::$_memoryManager = $memoryManager; /** } * List of inheritable attributesfor pages tree } * * @var array */ protected static $_inheritableAttributes = array('Resources', 'MediaBox', 'CropBox', 'Rotate'); /** * Request used memory manager * * @return Zend_Memory_Manager */ static public function getMemoryManager() { if (self::$_memoryManager === null) { require_once 'Zend/Memory.php'; self::$_memoryManager = Zend_Memory::factory('none'); } return self::$_memoryManager; } /** * Set user defined memory manager * * @param Zend_Memory_Manager $memoryManager */ static public function setMemoryManager(Zend_Memory_Manager $memoryManager) { self::$_memoryManager = $memoryManager; } /** * Set the document-level JavaScript * * @param string $javascript */ public function setJavaScript($javascript) { $this->_javaScript = $javascript; } /** * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation * One) defined in ISO/IEC 8824). * * @todo This really isn't the best location for this method. It should * probably actually exist as Zend_Pdf_Element_Date or something like that. * * @todo Address the following E_STRICT issue: * PHP Strict Standards: date(): It is not safe to rely on the system's .BND * timezone settings. Please use the date.timezone setting, the TZ * environment variable or the date_default_timezone_set() function. In * case you used any of those methods and you are still getting this * warning, you most likely misspelled the timezone identifier. * * @param integer $timestamp (optional) If omitted, uses the current time. * @return string */ public static function pdfDate($timestamp = null) { if ($timestamp === null) { $date = date('D:YmdHisO'); } else { $date = date('D:YmdHisO', $timestamp); } return substr_replace($date, ''', -2, 0) . '''; } }
  • 8. <?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. PHP код * PHP код * @category Zend * @package Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $ */ /** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */ /** @todo Section should be removed with ZF 2.0 release as obsolete */ /** Zend_Pdf_Page */ require_once 'Zend/Pdf/Page.php'; /** Zend_Pdf_Canvas */ require_once 'Zend/Pdf/Canvas.php'; /** Internally used classes */ require_once 'Zend/Pdf/Element/Dictionary.php'; require_once 'Zend/Pdf/Element/Name.php'; require_once 'Zend/Pdf/Element/Null.php'; require_once 'Zend/Pdf/Element/Numeric.php'; require_once 'Zend/Pdf/Element/String.php'; /** * General entity which describes PDF document. * It implements document abstraction with a document level operations. * * Class is used to create new PDF document or load existing document. * See details in a class constructor description * * Class agregates document level properties and entities (pages, bookmarks, * document level actions, attachments, form object, etc) * * @category Zend * @package Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Pdf { /**** Class Constants ****/ /** * Version number of generated PDF documents. */ const PDF_VERSION = '1.4'; /** * PDF file header. */ const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n"; /** * Pages collection * * @todo implement it as a class, which supports ArrayAccess and Iterator interfaces, * to provide incremental parsing and pages tree updating. * That will give good performance and memory (PDF size) benefits. * * @var array - array of Zend_Pdf_Page object */ public $pages = array(); /** * List of inheritable attributesfor pages tree * * @var array */ protected static $_inheritableAttributes = array('Resources', 'MediaBox', 'CropBox', 'Rotate'); /** * Request used memory manager * * @return Zend_Memory_Manager */ static public function getMemoryManager() { if (self::$_memoryManager === null) { require_once 'Zend/Memory.php'; self::$_memoryManager = Zend_Memory::factory('none'); } return self::$_memoryManager; } /** * Set user defined memory manager * * @param Zend_Memory_Manager $memoryManager */ static public function setMemoryManager(Zend_Memory_Manager $memoryManager) { self::$_memoryManager = $memoryManager; } /** * Set the document-level JavaScript * * @param string $javascript */ public function setJavaScript($javascript) { $this->_javaScript = $javascript; } /** * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation SQL * One) defined in ISO/IEC 8824). * * @todo This really isn't the best location for this method. It should * probably actually exist as Zend_Pdf_Element_Date or something like that. Компиляция * * @todo Address the following E_STRICT issue: * PHP Strict Standards: date(): It is not safe to rely on the system's * timezone settings. Please use the date.timezone setting, the TZ * environment variable or the date_default_timezone_set() function. In * case you used any of those methods and you are still getting this * warning, you most likely misspelled the timezone identifier. * * @param integer $timestamp (optional) If omitted, uses the current time. * @return string */ public static function pdfDate($timestamp = null) { if ($timestamp === null) { $date = date('D:YmdHisO'); } else { $date = date('D:YmdHisO', $timestamp); } return substr_replace($date, ''', -2, 0) . '''; } }
  • 9. Статический SQL. - отсутствие повторной компиляции, использование готового плана выполнения (отличные результаты на OLTP нагрузке); - защита от SQL injection; - улучшенная модель security.
  • 10. Связывание типов. PHP SQL - динамическая типизация - статическая типизация - слабая типизация - строгая типизация1 1 поддерживается неявный кастинг для некоторого подмножества типов.
  • 11. Связывание типов. PHP SQL $var1 (integer) SELECT … INTO :$var1 … … $var1 (string) INSERT INTO … VALUES(:$var1, …) $var2 (float) SELECT … WHERE COL1 > :$var2 $var1 (string)
  • 12. Связывание типов, C/C++: EXEC SQL BEGIN DECLARE SECTION; char dbName[16]; char userid[30]; char passwd[30]; SQL TYPE IS CLOB(2M) img_data; EXEC SQL END DECLARE SECTION; ... EXEC SQL CONNECT TO :dbName USER :userid USING :passwd;
  • 13. db2_embsql extension: 1. Декларативность секции EXEC SQL BEGIN DECLARE SECTION; … EXEC SQL END DECLARE SECTION; 2. Физическое размещение HV в модуле extension’а.
  • 14. 3. Маппинг имѐн host variables (и производных lvalue конструкций) на внутренние имена HV в SQL выражениях, отправляемых на прекомпиляцию. $this->myCoolVariable $values[$index]->val $options['my_cool_option'] …
  • 15. Маппинг типов: SMALLINT (16-bit integer) - integrer INTEGER (32-bit integer) - integrer BIGINT (64-bit integer) - integrer REAL - float DOUBLE - float DECIMAL - STRING CHAR(n) - STRING CHAR(n) FOR BIT DATA - STRING VARCHAR(n) - STRING CLOB(n) - STRING BLOB(n) - STRING DATE - STRING TIME - STRING TIMESTAMP - STRING ...
  • 16. Решение проблемы предугадывания типов, input/output variables: EXEC SQL SELECT LOGIN, FIRSTNAME, LASTNAME INTO :$login, :$firstname, :$lastname FROM USERS WHERE ID = :$user_id; vs EXEC SQL INSERT INTO USERS VALUES( :$login, :$firstname, :$lastname);
  • 17. Декларация “базовых” переменных: EXEC SQL BEGIN DECLARE SECTION; VARCHAR(32) $login; VARCHAR(64) $firstname, VARCHAR(64) $lastname; EXEC SQL BEGIN DECLARE SECTION; ... $login = $this->login; $firstname = $this->firstname; $lastname = $this->lastname; EXEC SQL INSERT INTO USERS VALUES(:$login, :$firstname, :$lastname);
  • 18. Декларация “производных” переменных: EXEC SQL BEGIN DECLARE SECTION; VARCHAR(32) $this->login; VARCHAR(64) $this->firstname, VARCHAR(64) $this->lastname; EXEC SQL BEGIN DECLARE SECTION; ... EXEC SQL INSERT INTO USERS VALUES( :$this->login, :$this->firstname, :$this->lastname);
  • 19. Как работают вызовы SQL statements: <?php /** * Zend Framework * DB2 Run Database * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd Time Services Manager SELECT … * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $ */ /** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */ /** @todo Section should be removed with ZF 2.0 release as obsolete */ /** Zend_Pdf_Page */ require_once 'Zend/Pdf/Page.php'; /** Zend_Pdf_Canvas */ require_once 'Zend/Pdf/Canvas.php'; /** Internally used classes */ require_once 'Zend/Pdf/Element/Dictionary.php'; require_once 'Zend/Pdf/Element/Name.php'; :HV1 require_once 'Zend/Pdf/Element/Null.php'; require_once 'Zend/Pdf/Element/Numeric.php'; require_once 'Zend/Pdf/Element/String.php'; /** * General entity which describes PDF document. * It implements document abstraction with a document level operations. * * Class is used to create new PDF document or load existing document. * See details in a class constructor description * * Class agregates document level properties and entities (pages, bookmarks, :HV2 * document level actions, attachments, form object, etc) * * @category Zend * @package Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Pdf { /**** Class Constants ****/ /** * Version number of generated PDF documents. */ const PDF_VERSION = '1.4'; /** * PDF file header. CALL */ const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n"; /** * Pages collection * * @todo implement it as a class, which supports ArrayAccess and Iterator interfaces, * to provide incremental parsing and pages tree updating. * That will give good performance and memory (PDF size) benefits. * * @var array - array of Zend_Pdf_Page object */ public $pages = array(); /** Packages * List of inheritable attributesfor pages tree Packages * Packages * @var array */ protected static $_inheritableAttributes = array('Resources', 'MediaBox', 'CropBox', 'Rotate'); /** * Request used memory manager * * @return Zend_Memory_Manager */ static public function getMemoryManager() { if (self::$_memoryManager === null) { require_once 'Zend/Memory.php'; self::$_memoryManager = Zend_Memory::factory('none'); } return self::$_memoryManager; } /** * Set user defined memory manager * * @param Zend_Memory_Manager $memoryManager */ static public function setMemoryManager(Zend_Memory_Manager $memoryManager) { self::$_memoryManager = $memoryManager; } /** * Set the document-level JavaScript * * @param string $javascript */ public function setJavaScript($javascript) { $this->_javaScript = $javascript; } /** * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation * One) defined in ISO/IEC 8824). * Data * @todo This really isn't the best location for this method. It should Packages * probably actually exist as Zend_Pdf_Element_Date or something like that. Packages * * @todo Address the following E_STRICT issue: * PHP Strict Standards: date(): It is not safe to rely on the system's * timezone settings. Please use the date.timezone setting, the TZ * environment variable or the date_default_timezone_set() function. In * case you used any of those methods and you are still getting this * warning, you most likely misspelled the timezone identifier. * * @param integer $timestamp (optional) If omitted, uses the current time. * @return string */ public static function pdfDate($timestamp = null) { if ($timestamp === null) { $date = date('D:YmdHisO'); } else { Result $date = date('D:YmdHisO', $timestamp); } return substr_replace($date, ''', -2, 0) . '''; } } :HV3
  • 20. пример прекомпилированного С кода: /* EXEC SQL select count(*) into :tbl_cnt from syscat.tables; */ { #line 39 "dbconn.sqc" sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca); #line 39 "dbconn.sqc" sqlaaloc(3,1,2,0L); { struct sqla_setdata_list sql_setdlist[1]; #line 39 "dbconn.sqc" sql_setdlist[0].sqltype = 496; sql_setdlist[0].sqllen = 4; #line 39 "dbconn.sqc" sql_setdlist[0].sqldata = (void*)&tbl_cnt; #line 39 "dbconn.sqc" sql_setdlist[0].sqlind = 0L; #line 39 "dbconn.sqc" sqlasetdata(3,0,1,sql_setdlist,0L,0L); }
  • 21. #line 39 "dbconn.sqc" sqlacall((unsigned short)24,1,0,3,0L); #line 39 "dbconn.sqc" sqlastop(0L); } #line 39 "dbconn.sqc" EMB_SQL_CHECK("Count tables"); printf("select count(*) from syscat.tables;n--------n %dn", tbl_cnt);
  • 22. Архитектура extension’а как магазинного автомата: Очередь вызовов PHP engine <?php /** * Zend Framework * DB2_ESQL * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. extension * * @category Zend * @package Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: Pdf.php 22908 2010-08-25 20:52:47Z alexander $ */ /** User land classes and interfaces turned on by Zend/Pdf.php file inclusion. */ /** @todo Section should be removed with ZF 2.0 release as obsolete */ /** Zend_Pdf_Page */ require_once 'Zend/Pdf/Page.php'; /** Zend_Pdf_Canvas */ require_once 'Zend/Pdf/Canvas.php'; /** Internally used classes */ require_once 'Zend/Pdf/Element/Dictionary.php'; /** * General entity which describes PDF document. * It implements document abstraction with a document level operations. * * Class is used to create new PDF document or load existing document. sqlaaloc(...) * See details in a class constructor description * * * @category * @package Zend Zend_Pdf * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) sqlacall(...) * @license http://framework.zend.com/license/new-bsd New BSD License { */ class Zend_Pdf /**** Class Constants ****/ /** sqlacmpd(...) * Version number of generated PDF documents. */ const PDF_VERSION = '1.4'; /** * PDF file header. */ sqladloc(...) const PDF_HEADER = "%PDF-1.4n%xE2xE3xCFxD3n"; /** /** * List of inheritable attributesfor pages tree * * @var array sqlastls(...) */ protected static $_inheritableAttributes = array('Resources', 'MediaBox', 'CropBox', 'Rotate'); /** * Request used memory manager * sqlastlv(...) * @return Zend_Memory_Manager { */ static public function getMemoryManager() if (self::$_memoryManager === null) { require_once 'Zend/Memory.php'; sqlastlva(...) self::$_memoryManager = Zend_Memory::factory('none'); } /** } return self::$_memoryManager; * Set user defined memory manager sqlasetdata(...) * * @param Zend_Memory_Manager $memoryManager */ static public function setMemoryManager(Zend_Memory_Manager $memoryManager) { self::$_memoryManager = $memoryManager; sqlastop(...) } /** * Set the document-level JavaScript * * @param string $javascript */ sqlastrt(...) public function setJavaScript($javascript) { } /** $this->_javaScript = $javascript; * Convert date to PDF format (it's close to ASN.1 (Abstract Syntax Notation sqlausda(...) * One) defined in ISO/IEC 8824). * * @todo This really isn't the best location for this method. It should * probably actually exist as Zend_Pdf_Element_Date or something like that. * * @todo Address the following E_STRICT issue: * PHP Strict Standards: date(): It is not safe to rely on the system's * timezone settings. Please use the date.timezone setting, the TZ * environment variable or the date_default_timezone_set() function. In * case you used any of those methods and you are still getting this * warning, you most likely misspelled the timezone identifier. * * @param integer $timestamp (optional) If omitted, uses the current time. * @return string */ public static function pdfDate($timestamp = null) { if ($timestamp === null) { $date = date('D:YmdHisO'); } else { $date = date('D:YmdHisO', $timestamp); } return substr_replace($date, ''', -2, 0) . '''; НV area } }
  • 23. Плюсы: - cтатичность SQL; - отсутствие фазы компиляции запроса на этапе выполнения; - отсутствие фазы построения плана запроса на этапе выполнения; - проверка SQL на этапе прекомпиляции; - защищѐнность от вымывания кэшей SQL запросов; - управляемость планов выполнения, возможность вести сравнительную статистику по изменяемости планов по модулям приложений, пакет как measurement объѐмов и характера данных в проекции приложения; - модель security – права на выполнение на уровне пакета.
  • 24. Минусы: - cтатичность SQL; - дополнительная фаза - прекомпиляция; - необходимость существования соответствующих объектов базы на момент компиляции; - прирост производительности незаметен на длительных запросах (10 и более секунд); - слабая ориентированность на “ad hoc” запросы: имеется поддержка динамического SQL, но она ничем не лучше native подходов с помощью odbc/cli; - отсутствие выигрыша для редко выполняемых запросов.
  • 25. Ограничения embedded SQL: - невозможность использования Host variables в именах объектов имѐн таблиц, функций, процедур, …, кроме как при использовании динамического SQL (PREPAPRE, EXECUTE); - невозможность использования scrollable курсоров;
  • 26. IBM DB2 и динамический SQL для PHP: http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.swg.im.dbclient.php.doc/doc/c0021523.html 1. ibm_db2 extension http://www.php.net/manual/en/book.ibm-db2.php 2. pdo_ibm driver http://www.php.net/manual/en/book.pdo.php 3. Unified odbc extension http://www.php.net/manual/en/book.uodbc.php
  • 27. Способы увеличения производительности динамического SQL: - увеличение размера STATEMENT CACHE – pckachesz имеется некоторая точка насыщения, предмет для мониторинга: * pkg_cache_lookups (package cache lookups) * pkg_cache_inserts (package cache inserts) * pkg_cache_size_top (package cache high water mark) * pkg_cache_num_overflows (package cache overflows) - использование параметризованных запросов есть “Но” – план выполнения будет строиться без учѐта реального значения параметра - StmtConcentrator CLI/ODBC параметр
  • 28. - конвертирование динамического SQL в статический: 1. Коллектор запросов (CLI/ODBC параметры): STATICMODE=CAPTURE STATICCAPFILE=<path> STATICPACKAGE=<package_schema>.<package_name> 2. Работа приложения 3. db2cap bind … 4. STATICMODE=MATCH
  • 29. Планы - Пре-релиз конец мая – начало июня. - Релиз, передача в Open Source – конец июня.
  • 30. Embedded SQL vs ORM frameworks/ActiveRecord ???