CVS update: php3/functions

From: 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 **)&param, - 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 **)&param, + OCI_DTYPE_PARAM, + 0, + NULL)); + if (error) { + return 0; /* XXX we loose memory!!! */ + } + #endif + OCIHandleAlloc( + statement->conn->pEnv, + (dvoid **)&param, + 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*)&param, ! 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*)&param, ! 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

« previous php.dev (#4156) next »