summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Jones <sixd@php.net>2014-03-10 16:33:35 -0700
committerChristopher Jones <sixd@php.net>2014-03-10 16:33:35 -0700
commit601367ee75c570b52ac8f28c7b26d5166cad2989 (patch)
tree90f7adbbf98615ff0e2868564179aa7f89bda53a
parent8bda4c685a3342428334c286884ef73955146af1 (diff)
downloadphp-git-601367ee75c570b52ac8f28c7b26d5166cad2989.tar.gz
Fixed Bug #66875 (Improve performance of multi-row OCI_RETURN_LOB queries)
-rw-r--r--NEWS6
-rwxr-xr-xUPGRADING1
-rw-r--r--ext/oci8/oci8.c4
-rw-r--r--ext/oci8/oci8_lob.c1
-rw-r--r--ext/oci8/oci8_statement.c1
-rw-r--r--ext/oci8/package.xml25
-rw-r--r--ext/oci8/php_oci8.h2
-rw-r--r--ext/oci8/php_oci8_int.h1
8 files changed, 34 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index 0ff30c885e..915120c999 100644
--- 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)
diff --git a/UPGRADING b/UPGRADING
index e662de57d7..40d30fd72b 100755
--- 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.
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c
index a890c94dab..03927e6eed 100644
--- a/ext/oci8/oci8.c
+++ b/ext/oci8/oci8.c
@@ -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);
diff --git a/ext/oci8/oci8_lob.c b/ext/oci8/oci8_lob.c
index 4587e4ccc7..4982d0f88f 100644
--- a/ext/oci8/oci8_lob.c
+++ b/ext/oci8/oci8_lob.c
@@ -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 */
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c
index 520809c81d..3ea7935308 100644
--- a/ext/oci8/oci8_statement.c
+++ b/ext/oci8/oci8_statement.c
@@ -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;
diff --git a/ext/oci8/package.xml b/ext/oci8/package.xml
index 553b273fed..c4530bdef0 100644
--- a/ext/oci8/package.xml
+++ b/ext/oci8/package.xml
@@ -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="/">
@@ -463,6 +462,22 @@ Build change: Fix source variable definition for C89 compatibility
<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>
<api>2.0.6</api>
diff --git a/ext/oci8/php_oci8.h b/ext/oci8/php_oci8.h
index 17061066d2..5c78faaa64 100644
--- a/ext/oci8/php_oci8.h
+++ b/ext/oci8/php_oci8.h
@@ -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
diff --git a/ext/oci8/php_oci8_int.h b/ext/oci8/php_oci8_int.h
index 5da3ea5334..b9d546726f 100644
--- a/ext/oci8/php_oci8_int.h
+++ b/ext/oci8/php_oci8_int.h
@@ -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;
/* }}} */