]> granicus.if.org Git - php/commitdiff
Fixed Bug #66875 (Improve performance of multi-row OCI_RETURN_LOB queries)
authorChristopher Jones <sixd@php.net>
Mon, 10 Mar 2014 23:33:35 +0000 (16:33 -0700)
committerChristopher Jones <sixd@php.net>
Mon, 10 Mar 2014 23:33:35 +0000 (16:33 -0700)
NEWS
UPGRADING
ext/oci8/oci8.c
ext/oci8/oci8_lob.c
ext/oci8/oci8_statement.c
ext/oci8/package.xml
ext/oci8/php_oci8.h
ext/oci8/php_oci8_int.h

diff --git a/NEWS b/NEWS
index 0ff30c885e970965cca1a80e3e1c4177439bf994..915120c999bf0b902027528f9412bda9ce2dbeb2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -35,9 +35,13 @@ PHP                                                                        NEWS
     (Nikita)
 
 - MySQLi:
-  . Fixed bug #66762i (Segfault in mysqli_stmt::bind_result() when link closed)
+  . Fixed bug #66762 (Segfault in mysqli_stmt::bind_result() when link closed)
     (Remi)
 
+- OCI8
+  . Fixed Bug #66875 (Improve performance of multi-row OCI_RETURN_LOB queries)
+   (Perrier, Chris Jones)
+
 - OpenSSL:
   . Fixed memory leak in windows cert verification on verify failure.
     (Chris Wright)
index e662de57d7b08e1f48d791aa82db3175f8081ac9..40d30fd72b034d2ca2a27f051afc9b6404e20728 100755 (executable)
--- a/UPGRADING
+++ b/UPGRADING
@@ -225,6 +225,7 @@ PHP 5.6 UPGRADE NOTES
   - Using 'oci_execute($s, OCI_NO_AUTO_COMMIT)' for a SELECT no longer
     unnecessarily initiates an internal ROLLBACK during connection
     close.
+  - Multi-row OCI_RETURN_LOB queries require fewer "round trips" to the database.
   - Added DTrace probes enabled with PHP's generic --enable-dtrace
   - The oci_internal_debug() function is now a no-op.
   - The phpinfo() output format for OCI8 has changed.
index a890c94dabeb0d73876d5fe297cda5c0d26ae38a..03927e6eedb1761b62e1297ef7867a3cb20d04ef 100644 (file)
@@ -2578,7 +2578,11 @@ int php_oci_column_to_zval(php_oci_out_column *column, zval *value, int mode TSR
                if (column->data_type != SQLT_RDD && (mode & PHP_OCI_RETURN_LOBS)) {
                        /* PHP_OCI_RETURN_LOBS means that we want the content of the LOB back instead of the locator */
 
+                       if (column->chunk_size)
+                               descriptor->chunk_size = column->chunk_size;                    
                        lob_fetch_status = php_oci_lob_read(descriptor, -1, 0, &lob_buffer, &lob_length TSRMLS_CC);
+                       if (descriptor->chunk_size)  /* Cache the chunk_size to avoid recalling OCILobGetChunkSize */
+                               column->chunk_size = descriptor->chunk_size;
                        php_oci_temp_lob_close(descriptor TSRMLS_CC);
                        if (lob_fetch_status) {
                                ZVAL_FALSE(value);
index 4587e4ccc7ed0004207e95a7250aec3849fe56b9..4982d0f88f6261389058a46c71e2962461acb632 100644 (file)
@@ -92,6 +92,7 @@ php_oci_descriptor *php_oci_lob_create (php_oci_connection *connection, long typ
        descriptor->charset_form = SQLCS_IMPLICIT;      /* default value */
        descriptor->charset_id = connection->charset;
        descriptor->is_open = 0;
+       descriptor->chunk_size = 0;
 
        if (descriptor->type == OCI_DTYPE_LOB || descriptor->type == OCI_DTYPE_FILE) {
                /* add Lobs & Files to hash. we'll flush them at the end */
index 520809c81d2bb30d7e2da27e9698b08cf155880a..3ea79353083dea3e4c97e0ab405f33b546640c16 100644 (file)
@@ -713,6 +713,7 @@ int php_oci_statement_execute(php_oci_statement *statement, ub4 mode TSRMLS_DC)
                                        outcol->is_descr = 1;
                                        outcol->statement->has_descr = 1;
                                        outcol->storage_size4 = -1;
+                                       outcol->chunk_size = 0;
                                        dynamic = OCI_DYNAMIC_FETCH;
                                        break;
 
index 553b273fed5e9e2488eb145db76bfd0131153d18..c4530bdef029870e250660b6b82741f4451661c7 100644 (file)
@@ -45,12 +45,12 @@ libraries are available.
   <active>no</active>
  </lead>
 
- <date>2014-02-10</date>
+ <date>2014-03-11</date>
  <time>12:00:00</time>
 
   <version>
-   <release>2.0.7</release>
-   <api>2.0.7</api>
+   <release>2.0.8</release>
+   <api>2.0.8</api>
   </version>
   <stability>
    <release>stable</release>
@@ -58,8 +58,7 @@ libraries are available.
   </stability>
   <license uri="http://www.php.net/license">PHP</license>
   <notes>
-Added oci_bind_by_name() support for PL/SQL BOOLEAN type    
-Build change: Fix source variable definition for C89 compatibility
+Enhancement - Improve performance of multi-row OCI_RETURN_LOB queries (Bug #66875)
   </notes>
  <contents>
   <dir name="/">
@@ -462,6 +461,22 @@ Build change: Fix source variable definition for C89 compatibility
  </extsrcrelease>
  <changelog>
 
+<release>
+  <version>
+   <release>2.0.7</release>
+   <api>2.0.7</api>
+  </version>
+  <stability>
+   <release>stable</release>
+   <api>stable</api>
+  </stability>
+  <license uri="http://www.php.net/license">PHP</license>
+  <notes>
+Added oci_bind_by_name() support for PL/SQL BOOLEAN type    
+Build change: Fix source variable definition for C89 compatibility
+  </notes>
+</release>
+
 <release>
  <version>
   <release>2.0.6</release>
index 17061066d2dcaccf0969b06a64720e2483efce72..5c78faaa646e22a89ff5278aee623d18add3c229 100644 (file)
@@ -45,7 +45,7 @@
  */
 #undef PHP_OCI8_VERSION
 #endif
-#define PHP_OCI8_VERSION "2.0.7"
+#define PHP_OCI8_VERSION "2.0.8"
 
 extern zend_module_entry oci8_module_entry;
 #define phpext_oci8_ptr &oci8_module_entry
index 5da3ea533462b9be2a1dc2d541b5cd992ab8c2a5..b9d546726fd78827a3fa927853bb2c9ac559063f 100644 (file)
@@ -283,6 +283,7 @@ typedef struct {
        sb2                                      precision;                             /* column precision */
        ub1                                      charset_form;                  /* charset form, required for NCLOBs */
        ub2                                      charset_id;                    /* charset ID */
+       ub4                                      chunk_size;                    /* LOB chunk size */
 } php_oci_out_column;
 /* }}} */