SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

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
 

What's hot (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
 

Viewers also liked

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
 

Viewers also liked (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...
 

Similar to 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
 

Similar to 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
 

More from 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
 

More from 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
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

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 ???