CVS update: php3/functions
| From: | thies | Date: | Fri, 19 Feb 1999 14:00:02 +0000 |
| Subject: | CVS update: php3/functions | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-4156@lists.php.net to get a copy of this message | ||
Date: Friday February 19, 1999 @ 9:00
Author: thies
Update of /repository/php3/functions
In directory asf:/u/temp/cvs-serv14728
Modified Files:
oci8.c php3_oci8.h
Log Message:
LONG, RAW, LONG RAW can be 2MB in size now (no problem to get them "bigger")
define now uses oci8 callbacks
Index: php3/functions/oci8.c
diff -c php3/functions/oci8.c:1.56 php3/functions/oci8.c:1.57
*** php3/functions/oci8.c:1.56 Fri Feb 19 03:30:45 1999
--- php3/functions/oci8.c Fri Feb 19 09:00:01 1999
***************
*** 32,38 ****
+----------------------------------------------------------------------+
*/
! /* $Id: oci8.c,v 1.56 1999/02/19 08:30:45 thies Exp $ */
#include "php.h"
#include "internal_functions.h"
--- 32,38 ----
+----------------------------------------------------------------------+
*/
! /* $Id: oci8.c,v 1.57 1999/02/19 14:00:01 thies Exp $ */
#include "php.h"
#include "internal_functions.h"
***************
*** 55,61 ****
* - returning refcursors as statement handles
* - OCIPasswordChange()
* - Prefetching control
! * - support LONG > 64K
* - binding of arrays
* - Truncate input values to the bind size
* - Character sets for NCLOBS
--- 55,61 ----
* - returning refcursors as statement handles
* - OCIPasswordChange()
* - Prefetching control
! * - LONG, LONG RAW, RAW is now limited to 2MB (should be user-settable);
* - binding of arrays
* - Truncate input values to the bind size
* - Character sets for NCLOBS
***************
*** 386,393 ****
CONST dvoid *ocimalloc(dvoid *ctx, size_t size)
{
dvoid *ret;
- oci8_debug("ocimalloc(%d)", size);
ret = (dvoid *)emalloc(size);
return ret;
}
--- 386,393 ----
CONST dvoid *ocimalloc(dvoid *ctx, size_t size)
{
dvoid *ret;
ret = (dvoid *)emalloc(size);
+ oci8_debug("ocimalloc(%d) = %08x", size,ret);
return ret;
}
***************
*** 738,744 ****
switch (column->indicator) {
case -2: /* truncated value */
oci8_debug("%s: truncated column", func);
! size = column->size;
break;
case 0: /* intact value */
--- 738,744 ----
switch (column->indicator) {
case -2: /* truncated value */
oci8_debug("%s: truncated column", func);
! size = column->rlen;
break;
case 0: /* intact value */
***************
*** 797,824 ****
oci8_execute(oci8_statement *statement, char *func,ub4 mode)
{
oci8_out_column *outcol;
- pval *tmp;
oci8_out_column column;
! OCIParam *param;
! oci8_descriptor descr;
! oci8_descriptor *pdescr;
! oci8_define *define;
int counter;
! sword error, def_error;
ub2 define_type;
! ub2 stmttype = 0;
ub4 iters;
ub4 colcount;
OCI8_TLS_VARS;
! error = oci8_error(statement->pError,
! "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_STMT_TYPE",
! OCIAttrGet((dvoid *)statement->pStmt,
! OCI_HTYPE_STMT,
! (ub2 *)&stmttype,
! (ub4 *)0,
! OCI_ATTR_STMT_TYPE,
! statement->pError));
if (error) {
return 0;
--- 797,823 ----
oci8_execute(oci8_statement *statement, char *func,ub4 mode)
{
oci8_out_column *outcol;
oci8_out_column column;
! OCIParam *param = 0;
int counter;
! sword error;
ub2 define_type;
! ub2 stmttype;
ub4 iters;
ub4 colcount;
+ ub2 storage_size2;
OCI8_TLS_VARS;
! error = oci8_error(
! statement->pError,
! "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_STMT_TYPE",
! OCIAttrGet(
! (dvoid *)statement->pStmt,
! OCI_HTYPE_STMT,
! (ub2 *)&stmttype,
! (ub4 *)0,
! OCI_ATTR_STMT_TYPE,
! statement->pError));
if (error) {
return 0;
***************
*** 829,846 ****
} else {
iters = 1;
}
-
! error = oci8_error(statement->pError,
! "OCIStmtExecute",
! OCIStmtExecute(statement->conn->pServiceContext,
! statement->pStmt,
! statement->pError,
! iters,
! 0,
! NULL,
! NULL,
! mode));
if (error) {
return 0;
}
--- 828,846 ----
} else {
iters = 1;
}
! error = oci8_error(
! statement->pError,
! "OCIStmtExecute",
! OCIStmtExecute(
! statement->conn->pServiceContext,
! statement->pStmt,
! statement->pError,
! iters,
! 0,
! NULL,
! NULL,
! mode));
if (error) {
return 0;
}
***************
*** 856,879 ****
/* out of memory */
return 0;
}
- OCIHandleAlloc(statement->conn->pEnv,
- (dvoid **)¶m,
- OCI_DTYPE_PARAM,
- 0,
- NULL);
counter = 1;
! error = oci8_error(statement->pError,
! "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_PARAM_COUNT",
! OCIAttrGet((dvoid *)statement->pStmt,
! OCI_HTYPE_STMT,
! (dvoid *)&colcount,
! (ub4 *)0,
! OCI_ATTR_PARAM_COUNT,
! statement->pError));
if (error) {
! return 0;
}
statement->ncolumns = colcount;
--- 856,898 ----
/* out of memory */
return 0;
}
+
+ #if 0
+ error = oci8_error(
+ statement->pError,
+ "OCIHandleAlloc OCI_DTYPE_PARAM",
+ OCIHandleAlloc(
+ statement->conn->pEnv,
+ (dvoid **)¶m,
+ OCI_DTYPE_PARAM,
+ 0,
+ NULL));
+ if (error) {
+ return 0; /* XXX we loose memory!!! */
+ }
+ #endif
+ OCIHandleAlloc(
+ statement->conn->pEnv,
+ (dvoid **)¶m,
+ OCI_DTYPE_PARAM,
+ 0,
+ NULL);
+
counter = 1;
! error = oci8_error(
! statement->pError,
! "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_PARAM_COUNT",
! OCIAttrGet(
! (dvoid *)statement->pStmt,
! OCI_HTYPE_STMT,
! (dvoid *)&colcount,
! (ub4 *)0,
! OCI_ATTR_PARAM_COUNT,
! statement->pError));
if (error) {
! return 0; /* XXX we loose memory!!! */
}
statement->ncolumns = colcount;
***************
*** 890,942 ****
outcol->statement = statement;
! oci8_error(statement->pError,
! "OCIParamGet OCI_HTYPE_STMT",
! OCIParamGet((dvoid *)statement->pStmt,
! OCI_HTYPE_STMT,
! statement->pError,
! (dvoid*)¶m,
! counter));
!
! oci8_error(statement->pError,
! "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_TYPE",
! OCIAttrGet((dvoid *)param,
! OCI_DTYPE_PARAM,
! (dvoid *)&outcol->type,
! (ub4 *)0,
! OCI_ATTR_DATA_TYPE,
! statement->pError));
!
! oci8_error(statement->pError,
! "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_SIZE",
! OCIAttrGet((dvoid *)param,
! OCI_DTYPE_PARAM,
! (dvoid *)&outcol->storage_size,
! (dvoid *)0,
! OCI_ATTR_DATA_SIZE,
! statement->pError));
!
! oci8_error(statement->pError,
! "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_NAME",
! OCIAttrGet((dvoid *)param,
! OCI_DTYPE_PARAM,
! (dvoid **)&outcol->name, /* XXX this string is NOT zero terminated!!!! */
! (ub4 *)&outcol->name_len,
! (ub4)OCI_ATTR_NAME,
! statement->pError));
!
/* Remember the size Oracle told us, we have to increase the
* storage size for some types.
*/
! outcol->size = outcol->storage_size;
/* find a user-setted define */
- define = 0;
if (statement->defines) {
! _php3_hash_find(statement->defines,outcol->name,outcol->name_len,(void **)
&define);
}
- def_error = -1;
switch (outcol->type) {
case SQLT_RSET: /* ref. cursor XXX NYI */
break;
--- 909,982 ----
outcol->statement = statement;
! error = oci8_error(
! statement->pError,
! "OCIParamGet OCI_HTYPE_STMT",
! OCIParamGet(
! (dvoid *)statement->pStmt,
! OCI_HTYPE_STMT,
! statement->pError,
! (dvoid*)¶m,
! counter));
! if (error) {
! return 0; /* XXX we loose memory!!! */
! }
!
! error = oci8_error(
! statement->pError,
! "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_TYPE",
! OCIAttrGet(
! (dvoid *)param,
! OCI_DTYPE_PARAM,
! (dvoid *)&outcol->type,
! (ub4 *)0,
! OCI_ATTR_DATA_TYPE,
! statement->pError));
! if (error) {
! return 0; /* XXX we loose memory!!! */
! }
!
! error = oci8_error(
! statement->pError,
! "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_DATA_SIZE",
! OCIAttrGet(
! (dvoid *)param,
! OCI_DTYPE_PARAM,
! (dvoid *)&storage_size2,
! (dvoid *)0,
! OCI_ATTR_DATA_SIZE,
! statement->pError));
! if (error) {
! return 0; /* XXX we loose memory!!! */
! }
!
! outcol->storage_size4 = storage_size2;
!
! error = oci8_error(
! statement->pError,
! "OCIAttrGet OCI_DTYPE_PARAM/OCI_ATTR_NAME",
! OCIAttrGet(
! (dvoid *)param,
! OCI_DTYPE_PARAM,
! (dvoid **)&outcol->name, /* XXX this string is NOT zero terminated!!!! */
! (ub4 *)&outcol->name_len,
! (ub4)OCI_ATTR_NAME,
! statement->pError));
! if (error) {
! return 0; /* XXX we loose memory!!! */
! }
!
/* Remember the size Oracle told us, we have to increase the
* storage size for some types.
*/
!
! outcol->size4 = outcol->storage_size4;
/* find a user-setted define */
if (statement->defines) {
! _php3_hash_find(statement->defines,outcol->name,outcol->name_len,(void **)
&outcol->define);
}
switch (outcol->type) {
case SQLT_RSET: /* ref. cursor XXX NYI */
break;
***************
*** 945,1070 ****
case SQLT_BLOB: /* binary LOB */
case SQLT_CLOB: /* character LOB */
case SQLT_BFILE: /* binary file LOB */
- outcol->is_descr = 1;
-
- if (define) {
- if (_php3_hash_find(define->pval->value.ht, "descriptor",
sizeof("descriptor"), (void **)&tmp) == FAILURE) {
- php3_error(E_WARNING, "unable to find my descriptor property");
- break;
- }
-
- if (_php3_hash_index_find(statement->conn->descriptors, tmp->value.lval, (void
**)&pdescr) == FAILURE) {
- php3_error(E_WARNING, "unable to find my descriptor");
- break;
- }
- } else {
- if (outcol->type == SQLT_BFILE) {
- descr.type = OCI_DTYPE_FILE;
- } else if (outcol->type == SQLT_RDD ) {
- descr.type = OCI_DTYPE_ROWID;
- } else {
- descr.type = OCI_DTYPE_LOB;
- }
-
- OCIDescriptorAlloc(statement->conn->pEnv,(dvoid *)&(descr.ocidescr), descr.type,
(size_t) 0, (dvoid **) 0);
-
- _php3_hash_index_update(statement->conn->descriptors,
- statement->conn->descriptors_count,&descr,sizeof(oci8_descriptor),(void
**)&pdescr);
-
- outcol->data = (void *)(void *) statement->conn->descriptors_count++;
-
- oci8_debug("OCIExecute: new descriptor for %d ->
%x",outcol->data,descr.ocidescr);
- }
-
define_type = outcol->type;
! def_error = OCIDefineByPos(statement->pStmt,
! (OCIDefine **)&outcol->pDefine,
! statement->pError,
! counter,
! (dvoid *)&(pdescr->ocidescr),
! (sb4)-1,
! define_type,
! (dvoid *)&outcol->indicator,
! (ub2 *)&outcol->rlen,
! (ub2 *)&outcol->retcode,
! OCI_DEFAULT);
break;
default:
define_type = SQLT_STR;
!
! if ((outcol->type == SQLT_LBI) || (outcol->type == SQLT_LNG) || (outcol->type ==
SQLT_BIN)) {
! outcol->storage_size = (64*1024L)-1; /*XXX LONG fields should be done via callbacks!!! */
! } else {
! outcol->storage_size++; /* add one for string terminator */
! }
!
! /* check for user supplied define variables! */
! if (define) {
! convert_to_string(define->pval);
! if (define->pval->value.str.val &&
! (define->pval->value.str.val!=undefined_variable_string) &&
! (define->pval->value.str.val!=empty_string)) {
! efree(define->pval->value.str.val);
! }
! define->pval->value.str.val = emalloc(outcol->storage_size);
! define->pval->value.str.len = outcol->storage_size;
! outcol->data = define->pval->value.str.val;
! outcol->define = define;
! } else {
! outcol->data = (text *)emalloc(outcol->storage_size);
! }
!
! if (outcol->data == NULL) {
! efree(outcol);
! efree(statement->columns);
! /* out of memory */
! return 0;
! }
!
!
! def_error = OCIDefineByPos(
! statement->pStmt, /* IN/OUT handle to the requested SQL query */
! (OCIDefine **)&outcol->pDefine, /* IN/OUT pointer to a pointer to a define
handle */
! statement->pError, /* IN/OUT An error handle */
! counter, /* IN position in the select list */
! (dvoid *)outcol->data, /* IN/OUT pointer to a buffer */
! outcol->storage_size, /* IN The size of each valuep buffer in bytes */
! define_type, /* IN The data type */
! (dvoid *)&outcol->indicator, /* IN pointer to an indicator variable or arr
*/
! (ub2 *)&outcol->rlen, /* IN/OUT Pointer to array of length of data fetched */
! (ub2 *)&outcol->retcode, /* OUT Pointer to array of column-level return
codes */
! OCI_DEFAULT); /* IN mode (OCI_DEFAULT, OCI_DYNAMIC_FETCH) */
!
! #if 0
!
! sword OCIDefineDynamic ( OCIDefine *defnp,
! OCIError *errhp,
! dvoid *octxp,
! OCICallbackDefine (ocbfp)(/*_
! dvoid *octxp,
! OCIDefine *defnp,
! ub4 iter,
! dvoid **bufpp,
! ub4 **alenpp,
! ub1 *piecep,
! dvoid **indpp,
! ub2 **rcodep _*/) );
! #endif
break;
}
! if (def_error) {
! oci8_debug("OCIDefineByPos");
! oci8_error(statement->pError, func, def_error);
! efree(outcol->data);
! efree(outcol);
! efree(statement->columns);
! return 0;
}
!
}
}
return 1;
--- 985,1039 ----
case SQLT_BLOB: /* binary LOB */
case SQLT_CLOB: /* character LOB */
case SQLT_BFILE: /* binary file LOB */
define_type = outcol->type;
+ outcol->is_descr = 1;
+ outcol->storage_size4 = -1;
+ break;
! case SQLT_LBI:
! case SQLT_LNG:
! case SQLT_BIN:
! define_type = SQLT_STR;
! /* XXX this should be user-settable!! */
! outcol->storage_size4 = OCI8_MAX_DATA_SIZE; /* 2MB */
break;
default:
define_type = SQLT_STR;
! outcol->storage_size4++; /* add one for string terminator */
break;
}
! error = oci8_error(
! statement->pError,
! "OCIDefineByPos",
! OCIDefineByPos(
! statement->pStmt, /* IN/OUT handle to the requested SQL query */
! (OCIDefine **)&outcol->pDefine, /* IN/OUT pointer to a pointer to a define handle
*/
! statement->pError, /* IN/OUT An error handle */
! counter, /* IN position in the select list */
! (dvoid *)0, /* IN/OUT pointer to a buffer */
! outcol->storage_size4, /* IN The size of each valuep buffer in bytes */
! define_type, /* IN The data type */
! (dvoid *)&outcol->indicator, /* IN pointer to an indicator variable or arr */
! (ub2 *)0, /* IN/OUT Pointer to array of length of data fetched */
! (ub2 *)&outcol->retcode, /* OUT Pointer to array of column-level return codes
*/
! OCI_DYNAMIC_FETCH)); /* IN mode (OCI_DEFAULT, OCI_DYNAMIC_FETCH) */
! if (error) {
! return 0; /* XXX we loose memory!!! */
}
! error = oci8_error(
! statement->pError,
! "OCIDefineDynamic",
! OCIDefineDynamic(
! outcol->pDefine,
! statement->pError,
! outcol,
! oci8_define_callback));
! if (error) {
! return 0; /* XXX we loose memory!!! */
! }
}
}
return 1;
***************
*** 1097,1103 ****
continue;
}
! if (column->define) {
pval = column->define->pval;
pval->value.str.len = column->rlen;
--- 1066,1072 ----
continue;
}
! if ((column->define) && (! column->is_descr)) {
pval = column->define->pval;
pval->value.str.len = column->rlen;
***************
*** 1197,1229 ****
dvoid **indpp, /* indicator value */
ub2 **rcodep)
{
#if 0
- oci8_bind *phpbind;
- pval *val;
! phpbind = (oci8_bind *)ictxp;
! if (!phpbind || !(val = phpbind->value)) {
! php3_error(E_WARNING, "!phpbind || !phpbind->val");
! return OCI_ERROR;
! }
! if (phpbind->descr == 0) { /* "normal string bind */
! convert_to_string(val);
! *bufpp = val->value.str.val;
! *alenp = phpbind->maxsize;
! *indpp = (dvoid *)&phpbind->indicator;
! } else { /* descriptor bind */
! *bufpp = phpbind->descr;
! *alenp = -1; /* seems to be allright */
! *indpp = (dvoid *)&phpbind->indicator;
! }
! *piecep = OCI_ONE_PIECE; /* pass all data in one go */
! #endif
! return OCI_CONTINUE;
}
/* }}} */
--- 1166,1305 ----
dvoid **indpp, /* indicator value */
ub2 **rcodep)
{
+ oci8_out_column *outcol;
+ oci8_define *define;
+ pval *pval, *tmp;
+ oci8_descriptor *pdescr, descr;
+
+ outcol = (oci8_out_column *)octxp;
+ define = outcol->define;
+
+ if (outcol->is_descr) {
+ if (define && (! outcol->pdescr)) { /* column has been user-defined */
+ if (_php3_hash_find(define->pval->value.ht, "descriptor",
sizeof("descriptor"), (void **)&tmp) == FAILURE) {
+ php3_error(E_WARNING, "unable to find my descriptor property");
+ return OCI_ERROR;
+ } else if (_php3_hash_index_find(outcol->statement->conn->descriptors,
tmp->value.lval, (void **)&pdescr) == FAILURE) {
+ php3_error(E_WARNING, "unable to find my descriptor");
+ return OCI_ERROR;
+ }
+ outcol->pdescr = pdescr;
+ } else if (! outcol->pdescr) { /* we got no define value and teh descriptor hasn't been
allocated yet */
+ if (outcol->type == SQLT_BFILE) {
+ descr.type = OCI_DTYPE_FILE;
+ } else if (outcol->type == SQLT_RDD ) {
+ descr.type = OCI_DTYPE_ROWID;
+ } else {
+ descr.type = OCI_DTYPE_LOB;
+ }
+
+ OCIDescriptorAlloc(outcol->statement->conn->pEnv,(dvoid *)&(descr.ocidescr),
descr.type, (size_t) 0, (dvoid **) 0);
+
+ _php3_hash_index_update(outcol->statement->conn->descriptors,
+ outcol->statement->conn->descriptors_count,&descr,sizeof(oci8_descriptor),(void
**)&pdescr);
+
+ outcol->data = (void *) outcol->statement->conn->descriptors_count++;
+ outcol->pdescr = pdescr;
+
+ oci8_debug("OCIExecute: new descriptor for %d ->
%x",outcol->data,descr.ocidescr);
+ }
+
+ if (! outcol->pdescr) {
+ php3_error(E_WARNING, "unable to find my descriptor");
+ return OCI_ERROR;
+ }
+
+ outcol->rlen = -1;
+ *bufpp = outcol->pdescr->ocidescr;
+ } else { /* "normal variable" */
+ if (define) {
+ pval = define->pval;
+ convert_to_string(pval);
+
+ /* do some smart caching here */
+
+ if (pval->value.str.val && (pval->value.str.val!=undefined_variable_string)
&& (pval->value.str.val!=empty_string)) {
+ efree(define->pval->value.str.val);
+ }
+ pval->value.str.val = emalloc(outcol->storage_size4);
+ outcol->data = pval->value.str.val;
+ } else if (! outcol->data) {
+ outcol->data = (text *) emalloc(outcol->storage_size4);
+ }
+
+ if (! outcol->data) {
+ php3_error(E_WARNING, "OCIFetch: cannot allocate %d
bytes!",outcol->storage_size4);
+ return OCI_ERROR;
+ }
+
+ outcol->rlen = outcol->storage_size4;
+ *bufpp = outcol->data;
+ }
+
+ *alenp = &outcol->rlen;
+ *indpp = &outcol->indicator;
+ *rcodep = &outcol->retcode;
+
+ *piecep = OCI_ONE_PIECE;
+
+ return OCI_CONTINUE;
+
#if 0
! switch (outcol->type)
! case SQLT_RSET: /* ref. cursor XXX NYI */
! break;
! case SQLT_RDD: /* ROWID */
! case SQLT_BLOB: /* binary LOB */
! case SQLT_CLOB: /* character LOB */
! case SQLT_BFILE: /* binary file LOB */
! outcol->is_descr = 1;
! if (define) {
! if (_php3_hash_find(define->pval->value.ht, "descriptor",
sizeof("descriptor"), (void **)&tmp) == FAILURE) {
! php3_error(E_WARNING, "unable to find my descriptor property");
! break;
! }
! if (_php3_hash_index_find(statement->conn->descriptors, tmp->value.lval, (void
**)&pdescr) == FAILURE) {
! php3_error(E_WARNING, "unable to find my descriptor");
! break;
! }
! } else {
! if (outcol->type == SQLT_BFILE) {
! descr.type = OCI_DTYPE_FILE;
! } else if (outcol->type == SQLT_RDD ) {
! descr.type = OCI_DTYPE_ROWID;
! } else {
! descr.type = OCI_DTYPE_LOB;
! }
! OCIDescriptorAlloc(statement->conn->pEnv,(dvoid *)&(descr.ocidescr), descr.type,
(size_t) 0, (dvoid **) 0);
! _php3_hash_index_update(statement->conn->descriptors,
! statement->conn->descriptors_count,&descr,sizeof(oci8_descriptor),(void
**)&pdescr);
!
! outcol->data = (void *)(void *) statement->conn->descriptors_count++;
!
! oci8_debug("OCIExecute: new descriptor for %d ->
%x",outcol->data,descr.ocidescr);
! }
!
! define_type = outcol->type;
!
! def_error = OCIDefineByPos(statement->pStmt,
! (OCIDefine **)&outcol->pDefine,
! statement->pError,
! counter,
! (dvoid *)&(pdescr->ocidescr),
! (sb4)-1,
! define_type,
! (dvoid *)&outcol->indicator,
! (ub2 *)&outcol->rlen,
! (ub2 *)&outcol->retcode,
! OCI_DEFAULT);
! break;
! #endif
}
/* }}} */
***************
*** 1446,1451 ****
--- 1522,1530 ----
default:
convert_to_string(var);
if (ocimaxlen == -1) {
+ if (var->value.str.len == 0) {
+ php3_error(E_WARNING, "OCIBindByName bindlength is 0");
+ }
ocimaxlen = var->value.str.len + 1; /* SQLT_STR needs a trailing 0 - maybe we need to
resize the var buffers????? */
}
break;
***************
*** 1844,1850 ****
if (outcol == NULL) {
RETURN_FALSE;
}
! RETVAL_LONG(outcol->size);
}
/* }}} */
--- 1923,1929 ----
if (outcol == NULL) {
RETURN_FALSE;
}
! RETVAL_LONG(outcol->size4);
}
/* }}} */
Index: php3/functions/php3_oci8.h
diff -c php3/functions/php3_oci8.h:1.29 php3/functions/php3_oci8.h:1.30
*** php3/functions/php3_oci8.h:1.29 Fri Feb 19 03:30:45 1999
--- php3/functions/php3_oci8.h Fri Feb 19 09:00:02 1999
***************
*** 79,84 ****
--- 79,86 ----
text *name;
ub4 name_len;
ub4 type;
+ text *data; /* for pval cache */
+ int size; /* for pval cache */
} oci8_define;
***************
*** 110,122 ****
text *name;
ub4 name_len;
ub2 type;
! ub2 size;
! ub2 storage_size;
sb2 indicator;
ub2 retcode;
! ub2 rlen;
ub2 is_descr;
int descr;
void *data;
oci8_define *define;
} oci8_out_column;
--- 112,125 ----
text *name;
ub4 name_len;
ub2 type;
! ub4 size4;
! ub4 storage_size4;
sb2 indicator;
ub2 retcode;
! ub4 rlen;
ub2 is_descr;
int descr;
+ oci8_descriptor *pdescr;
void *data;
oci8_define *define;
} oci8_out_column;
--
PHP Development Mailing List http://www.php.net/
To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net
For help: php-dev-help@lists.php.net