[PATCH]: oci8 - type of temporary LOB in `ociwritetemporarylob'

From: Date: Tue, 22 Apr 2003 12:53:07 +0000
Subject: [PATCH]: oci8 - type of temporary LOB in `ociwritetemporarylob'
Groups: php.internals 
Request: Send a blank email to internals+get-1003@lists.php.net to get a copy of this message
Patch proposal to implement lob_type' as an optional parameter to the ociwritetemporarylob' function. Patch changes file ext/oci8/oci8.c with revision 1.183.2.3. * * * The function `ociwritetemporarylob' creates an oracle LOB object. Currently the type of object is set to OCI_TEMP_CLOB and there is no way how to create temporary BLOB. The enclosed patch defines two constants - types of temporary LOBs: OCI_TEMP_CLOB OCI_TEMP_BLOB and extends the number of parameters of function `ociwritetemporarylob' by an optional parameter LOB type (default value is set to OCI_TEMP_CLOB to preserve backward compatibility). Can someone check and commit this patch ? Thanks Marek --- Odchozí zpráva neobsahuje viry. Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz). Verze: 6.0.474 / Virová báze: 272 - datum vydání: 18.4.2003

--- php4-STABLE-200304220730.orig/ext/oci8/oci8.c 2003-04-21 21:06:43.000000000 +0200 +++ php4-STABLE-200304220730/ext/oci8/oci8.c 2003-04-22 14:44:31.000000000 +0200 @@ -560,6 +560,12 @@ REGISTER_LONG_CONSTANT("OCI_D_LOB",OCI_DTYPE_LOB, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("OCI_D_ROWID",OCI_DTYPE_ROWID, CONST_CS | CONST_PERSISTENT); +/* for OCIWriteTemporaryLob */ +#ifdef HAVE_OCI8_TEMP_LOB + REGISTER_LONG_CONSTANT("OCI_TEMP_CLOB",OCI_TEMP_CLOB, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OCI_TEMP_BLOB",OCI_TEMP_BLOB, CONST_CS | CONST_PERSISTENT); +#endif + return SUCCESS; } @@ -3429,17 +3435,18 @@ /* }}} */ #ifdef HAVE_OCI8_TEMP_LOB -/* {{{ proto bool ociwritetemporarylob(int stmt, int loc, string var) +/* {{{ proto bool ociwritetemporarylob(int stmt, int loc, string var [, int lob_type]) Return the row count of an OCI statement */ PHP_FUNCTION(ociwritetemporarylob) { - zval *id, **var; + zval *id, *var; OCILobLocator *mylob; oci_connection *connection; oci_descriptor *descr; ub4 offset = 1; ub4 loblen; + int lob_type = OCI_TEMP_CLOB; oci_debug ("oci_write_temporary_lob"); @@ -3459,19 +3466,18 @@ connection = descr->conn; - if (zend_get_parameters_ex(1, &var) == FAILURE) { - WRONG_PARAM_COUNT; + if (ZEND_NUM_ARGS() < 1) WRONG_PARAM_COUNT; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &var, &lob_type) == FAILURE) { + RETURN_FALSE; } - convert_to_string_ex(var); - CALL_OCI_RETURN(connection->error, OCILobCreateTemporary( connection->pServiceContext, connection->pError, mylob, OCI_DEFAULT, OCI_DEFAULT, - OCI_TEMP_CLOB, + lob_type, OCI_ATTR_NOCACHE, OCI_DURATION_SESSION)); @@ -3493,8 +3499,8 @@ RETURN_FALSE; } - convert_to_string_ex(var); - loblen = Z_STRLEN_PP(var); + convert_to_string_ex(&var); + loblen = Z_STRLEN_P(var); if (loblen < 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot save a lob that is less than 1 byte"); @@ -3507,7 +3513,7 @@ mylob, (ub4 *) &loblen, (ub4) offset, - (dvoid *) Z_STRVAL_PP(var), + (dvoid *) Z_STRVAL_P(var), (ub4) loblen, OCI_ONE_PIECE, (dvoid *)0,
« previous php.internals (#1003) next »