From d6cecfc2135f0eb8cbc0d8c4fb7b96fdbc5bdd0e Mon Sep 17 00:00:00 2001 From: David Benson Date: Mon, 17 Sep 2001 20:52:31 +0000 Subject: [PATCH] Change duration of temporary lobs to avoid leakage of temporary lob space (dbenson). --- ext/oci8/oci8.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c index d92c5943075..4a0b5306ee9 100644 --- a/ext/oci8/oci8.c +++ b/ext/oci8/oci8.c @@ -3336,8 +3336,8 @@ PHP_FUNCTION(ociwritetemporarylob) OCI_DEFAULT, OCI_DEFAULT, OCI_TEMP_CLOB, - TRUE, - OCI_DURATION_SESSION)); + OCI_ATTR_NOCACHE, + OCI_DURATION_STATEMENT)); if (connection->error) { oci_error(connection->pError, "OCILobCreateTemporary", connection->error); @@ -3361,7 +3361,7 @@ PHP_FUNCTION(ociwritetemporarylob) loblen = (*var)->value.str.len; if (loblen < 1) { - php_error(E_WARNING, "Cannot save a lob wich size is less than 1 byte"); + php_error(E_WARNING, "Cannot save a lob that is less than 1 byte"); RETURN_FALSE; } @@ -3400,6 +3400,7 @@ PHP_FUNCTION(ocicloselob) OCILobLocator *mylob; oci_connection *connection; oci_descriptor *descriptor; + int is_temporary; if ((id = getThis()) != 0) { inx = _oci_get_ocidesc(id,&descriptor TSRMLS_CC); @@ -3424,6 +3425,26 @@ PHP_FUNCTION(ocicloselob) RETURN_FALSE; } + connection->error = + OCILobIsTemporary(OCI(pEnv), + connection->pError, + mylob, + &is_temporary); + if (is_temporary) { + connection->error = + OCILobFreeTemporary(connection->pServiceContext, + connection->pError, + mylob); + + if (connection->error) { + oci_error(connection->pError, "OCILobFreeTemporary", + connection->error); + oci_handle_error(connection, connection->error); + RETURN_FALSE; + } + oci_debug("oci_lob_free_temporary: descr=%d",inx); + } + oci_debug("oci_close_lob: descr=%d",inx); RETURN_TRUE; } @@ -5100,8 +5121,8 @@ PHP_FUNCTION(ocinewcollection) } switch(coll->coll_typecode) { + case OCI_TYPECODE_TABLE: case OCI_TYPECODE_VARRAY: - case OCI_TYPECODE_TABLE: CALL_OCI_RETURN(connection->error, OCIAttrGet( (dvoid*) parmp1, (ub4) OCI_DTYPE_PARAM,