From 925d48dae63613c835214db7366d3313478ef227 Mon Sep 17 00:00:00 2001 From: Danny Heijl Date: Thu, 22 Jul 1999 09:58:02 +0000 Subject: [PATCH] Blobs now working too. --- MODULES_STATUS | 2 +- ext/informix/ifx.ec | 52 ++++++++++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/MODULES_STATUS b/MODULES_STATUS index 39a32eb6d0..ea669373b3 100644 --- a/MODULES_STATUS +++ b/MODULES_STATUS @@ -14,4 +14,4 @@ ldap Working oci8 Working (but no blob-support yet) oracle Working iptc Working -informix Working (except blobs, and php_ini stuff needs rewriting) +informix Working (including blobs, php_ini stuff still needs rewriting) diff --git a/ext/informix/ifx.ec b/ext/informix/ifx.ec index 8f9f5bb918..79c9058dd7 100644 --- a/ext/informix/ifx.ec +++ b/ext/informix/ifx.ec @@ -746,18 +746,19 @@ static void php3_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) (void **) &index_ptr) == SUCCESS) { int type,link; void *ptr; - +#ifdef THREAD_SAFE + if (index_ptr->type != _php3_le_index_ptr()) { +#else if (index_ptr->type != le_index_ptr) { +#endif RETURN_FALSE; } link = (int) index_ptr->ptr; ptr = php3_list_find(link,&type); /* check if the link is still there */ - if (ptr && (type==IFXG(le_link) || - type==IFXG(le_plink))) { - return_value->value.lval = - IFXG(default_link) = - link; - return_value->type = IS_LONG; + if (ptr && (type==IFXG(le_link) || type==IFXG(le_plink))) { + zend_list_addref(link); + return_value->value.lval = IFXG(default_link) = link; + return_value->type = IS_RESOURCE; efree(hashed_details); return; } else { @@ -790,13 +791,16 @@ static void php3_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent) } /* add it to the list */ - return_value->value.lval = - php3_list_insert(ifx,IFXG(le_link)); - return_value->type = IS_LONG; + return_value->value.lval = php3_list_insert(ifx,IFXG(le_link)); + return_value->type = IS_RESOURCE; /* add it to the hash */ new_index_ptr.ptr = (void *) return_value->value.lval; +#ifdef THREAD_SAFE + new_index_ptr.type = _php3_le_index_ptr(); +#else new_index_ptr.type = le_index_ptr; +#endif if (_php3_hash_update(list, hashed_details, hashed_details_length+1, @@ -1083,7 +1087,7 @@ EXEC SQL END DECLARE SECTION; ## NONSELECT-STATEMENT ## */ - pval *pblobidarr, *tmp; + pval *pblobidarr, **tmp; Ifx_Result->iscursory = 0; @@ -1115,16 +1119,16 @@ EXEC SQL END DECLARE SECTION; i=1; while (_php3_hash_get_current_data(pblobidarr->value.ht, (void **) &tmp) == SUCCESS) { - convert_to_long(tmp); + convert_to_long(*tmp); if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) { EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i; } /* TEXT/BYTE */ - if(php3_intifx_getType((int)tmp->value.lval,list)==TYPE_BLTEXT || php3_intifx_getType((int)tmp->value.lval,list)==TYPE_BLBYTE) { - locator=php3_intifx_get_blobloc((int)tmp->value.lval,list); + if(php3_intifx_getType((int)(*tmp)->value.lval,list)==TYPE_BLTEXT || php3_intifx_getType((int)(*tmp)->value.lval,list)==TYPE_BLBYTE) { + locator=php3_intifx_get_blobloc((int)((*tmp)->value.lval),list); if(locator==NULL) { php3_error(E_WARNING,"%d is not a Informix blob-result index", - (int)tmp->value.lval); + (int)((*tmp)->value.lval)); EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); @@ -1139,8 +1143,8 @@ EXEC SQL END DECLARE SECTION; } /* CHAR */ - if(php3_intifx_getType((int)tmp->value.lval,list)==TYPE_CHAR) { - len=php3_intifx_get_char((int)tmp->value.lval,list,&char_tmp); + if(php3_intifx_getType((int)(*tmp)->value.lval,list)==TYPE_CHAR) { + len=php3_intifx_get_char((int)((*tmp)->value.lval),list,&char_tmp); indicator=0; if(char_tmp==NULL || len<0) indicator=-1; @@ -1485,7 +1489,7 @@ EXEC SQL END DECLARE SECTION; ## NONSELECT-STATEMENT ## */ - pval *pblobidarr, *tmp; + pval *pblobidarr, **tmp; Ifx_Result->iscursory = 0; @@ -1517,16 +1521,16 @@ EXEC SQL END DECLARE SECTION; i=1; while (_php3_hash_get_current_data(pblobidarr->value.ht, (void **) &tmp) == SUCCESS) { - convert_to_long(tmp); + convert_to_long(*tmp); if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) { EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i; } /* TEXT/BYTE */ - if(php3_intifx_getType((int)tmp->value.lval,list)==TYPE_BLTEXT || php3_intifx_getType((int)tmp->value.lval,list)==TYPE_BLBYTE) { - locator=php3_intifx_get_blobloc((int)tmp->value.lval,list); + if(php3_intifx_getType((int)((*tmp)->value.lval),list)==TYPE_BLTEXT || php3_intifx_getType((int)((*tmp)->value.lval),list)==TYPE_BLBYTE) { + locator=php3_intifx_get_blobloc((int)((*tmp)->value.lval),list); if(locator==NULL) { php3_error(E_WARNING,"%d is not a Informix blob-result index", - (int)tmp->value.lval); + (int)((*tmp)->value.lval)); EXEC SQL DEALLOCATE DESCRIPTOR :descrpid; EXEC SQL free :statemid; efree(Ifx_Result); @@ -1540,8 +1544,8 @@ EXEC SQL END DECLARE SECTION; TYPE=:loc_t_type; } /* CHAR */ - if(php3_intifx_getType((int)tmp->value.lval,list)==TYPE_CHAR) { - len=php3_intifx_get_char((int)tmp->value.lval,list,&char_tmp); + if(php3_intifx_getType((int)((*tmp)->value.lval),list)==TYPE_CHAR) { + len=php3_intifx_get_char((int)((*tmp)->value.lval),list,&char_tmp); indicator=0; if(char_tmp==NULL || len<0) indicator=-1; -- 2.40.0