CVS update: php3/functions
| From: | nyenyon | Date: | Fri, 18 Sep 1998 13:23:45 +0000 |
| Subject: | CVS update: php3/functions | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-1221@lists.php.net to get a copy of this message | ||
Date: Friday September 18, 1998 @ 9:23
Author: nyenyon
Update of /repository/php3/functions
In directory asf:/u2/tmp/cvs-serv12511
Modified Files:
ifx.ec
Log Message:
- removing a really nasty bug while using blobs
Index: php3/functions/ifx.ec
diff -c php3/functions/ifx.ec:1.22 php3/functions/ifx.ec:1.23
*** php3/functions/ifx.ec:1.22 Thu Sep 17 16:55:14 1998
--- php3/functions/ifx.ec Fri Sep 18 09:23:44 1998
***************
*** 120,125 ****
--- 120,129 ----
#if HAVE_IFX
+ #define BL_BYTE 0
+ #define BL_TEXT 1
+ #define BL_INMEM 0
+ #define BL_INFILE 1
EXEC SQL include locator;
EXEC SQL include sqltypes;
***************
*** 1025,1032 ****
efree(Ifx_Result);
RETURN_FALSE;
}
! if(locator->loc_loctype==LOCFNAME)
locator->loc_oflags=LOC_RONLY;
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i
DATA= :*locator,
TYPE= :loc_t_type;
--- 1029,1037 ----
efree(Ifx_Result);
RETURN_FALSE;
}
! if(locator->loc_loctype==LOCFNAME) {
locator->loc_oflags=LOC_RONLY;
+ }
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i
DATA= :*locator,
TYPE= :loc_t_type;
***************
*** 1168,1187 ****
int bid;
if(fieldtype==SQLTEXT) {
! bid=php3_intifx_create_blob(1,0,"",-1,list);
}
if(fieldtype==SQLBYTES) {
if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) {
! bid=php3_intifx_create_blob(0,0,"",-1,list);
} else {
blobfilename=php3_intifx_create_tmpfile(i);
bid=php3_intifx_create_blob(
! 0,1,blobfilename,strlen(blobfilename),list);
locator=php3_intifx_get_blobloc(bid,list);
locator->loc_oflags=LOC_WONLY;
}
}
- locator=php3_intifx_get_blobloc(bid,list);
Ifx_Result->blob_id[locind]=bid;
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
++locind;
--- 1173,1194 ----
int bid;
if(fieldtype==SQLTEXT) {
! bid=php3_intifx_create_blob(BL_TEXT,BL_INMEM,"",-1,list);
! locator=php3_intifx_get_blobloc(bid,list);
}
if(fieldtype==SQLBYTES) {
if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) {
! bid=php3_intifx_create_blob(BL_BYTE,BL_INMEM,"",-1,list);
! locator=php3_intifx_get_blobloc(bid,list);
} else {
blobfilename=php3_intifx_create_tmpfile(i);
bid=php3_intifx_create_blob(
! BL_BYTE,BL_INFILE,
! blobfilename,strlen(blobfilename),list);
locator=php3_intifx_get_blobloc(bid,list);
locator->loc_oflags=LOC_WONLY;
}
}
Ifx_Result->blob_id[locind]=bid;
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
++locind;
***************
*** 1376,1384 ****
efree(Ifx_Result);
RETURN_FALSE;
}
! if(locator->loc_loctype==LOCFNAME)
locator->loc_oflags=LOC_RONLY;
! EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE=:loc_t_type;
i++;
_php3_hash_move_forward(pblobidarr->value.ht);
} /* while */
--- 1383,1394 ----
efree(Ifx_Result);
RETURN_FALSE;
}
! if(locator->loc_loctype==LOCFNAME) {
locator->loc_oflags=LOC_RONLY;
! }
! EXEC SQL SET DESCRIPTOR :descrpid VALUE :i
! DATA= :*locator,
! TYPE=:loc_t_type;
i++;
_php3_hash_move_forward(pblobidarr->value.ht);
} /* while */
***************
*** 1537,1554 ****
RETURN_FALSE;
}
if (Ifx_Result->iscursory==0) { /* execute immediate */
! if(Ifx_Result->paramquery!=0) {
! EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
! } else {
! EXEC SQL EXECUTE :statemid;
! }
! if (ifx_check() < 0) {
! Informix_GLOBAL(php3_ifx_module).sv_sqlcode = SQLCODE;
! php3_error(E_WARNING,"Execute immediate fails : %s ",
! ifx_error(ifx));
! RETURN_FALSE;
! }
! Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
} else { /* open cursor */
if (Ifx_Result->isscroll)
if (Ifx_Result->ishold)
--- 1547,1564 ----
RETURN_FALSE;
}
if (Ifx_Result->iscursory==0) { /* execute immediate */
! if(Ifx_Result->paramquery!=0) {
! EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
! } else {
! EXEC SQL EXECUTE :statemid;
! }
! if (ifx_check() < 0) {
! Informix_GLOBAL(php3_ifx_module).sv_sqlcode = SQLCODE;
! php3_error(E_WARNING,"Execute immediate fails : %s ",
! ifx_error(ifx));
! RETURN_FALSE;
! }
! Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
} else { /* open cursor */
if (Ifx_Result->isscroll)
if (Ifx_Result->ishold)
***************
*** 1583,1602 ****
int bid;
if(fieldtype==SQLTEXT) {
! bid=php3_intifx_create_blob(1,0,"",-1,list);
}
if(fieldtype==SQLBYTES) {
if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) {
! bid=php3_intifx_create_blob(0,0,"",-1,list);
} else {
blobfilename=php3_intifx_create_tmpfile(i);
bid=php3_intifx_create_blob(
! 0,1,blobfilename,strlen(blobfilename),list);
locator=php3_intifx_get_blobloc(bid,list);
locator->loc_oflags=LOC_WONLY;
}
}
- locator=php3_intifx_get_blobloc(bid,list);
Ifx_Result->blob_id[locind]=bid;
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
++locind;
--- 1593,1614 ----
int bid;
if(fieldtype==SQLTEXT) {
! bid=php3_intifx_create_blob(BL_TEXT,BL_INMEM,"",-1,list);
! locator=php3_intifx_get_blobloc(bid,list);
}
if(fieldtype==SQLBYTES) {
if(Informix_GLOBAL(php3_ifx_module).blobinfile==0) {
! bid=php3_intifx_create_blob(BL_BYTE,BL_INMEM,"",-1,list);
! locator=php3_intifx_get_blobloc(bid,list);
} else {
blobfilename=php3_intifx_create_tmpfile(i);
bid=php3_intifx_create_blob(
! BL_BYTE,BL_INFILE,
! blobfilename,strlen(blobfilename),list);
locator=php3_intifx_get_blobloc(bid,list);
locator->loc_oflags=LOC_WONLY;
}
}
Ifx_Result->blob_id[locind]=bid;
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
++locind;
***************
*** 3017,3026 ****
type=ptype->value.lval;
if(type!=0)
! type=1;
mode=pmode->value.lval;
if(mode!=0)
! mode=1;
id=php3_intifx_create_blob(type,mode,pparam->value.str.val,pparam->value.str.len,list);
if(id<0) {
--- 3029,3038 ----
type=ptype->value.lval;
if(type!=0)
! type=BL_TEXT;
mode=pmode->value.lval;
if(mode!=0)
! mode=BL_INFILE;
id=php3_intifx_create_blob(type,mode,pparam->value.str.val,pparam->value.str.len,list);
if(id<0) {
***************
*** 3052,3062 ****
php3_error(E_WARNING,"can't create blob-resource");
return -1;
}
!
Ifx_blob->type=(int)type;
Ifx_blob->mode=(int)mode;
! if(mode==0) {
if(len>=0) {
char *content=emalloc(len);
if(content==NULL) {
--- 3064,3076 ----
php3_error(E_WARNING,"can't create blob-resource");
return -1;
}
!
! memset(Ifx_blob, 0, sizeof(IFX_BLOBRES));
!
Ifx_blob->type=(int)type;
Ifx_blob->mode=(int)mode;
! if(mode==BL_INMEM) {
if(len>=0) {
char *content=emalloc(len);
if(content==NULL) {
***************
*** 3078,3084 ****
Ifx_blob->blob_data.loc_mflags=0;
Ifx_blob->blob_data.loc_oflags=0;
}
! } else {
char *filename=emalloc(len+1);
if(filename==NULL) {
php3_error(E_WARNING,"can't create blob-resource");
--- 3092,3098 ----
Ifx_blob->blob_data.loc_mflags=0;
Ifx_blob->blob_data.loc_oflags=0;
}
! } else { /* mode = BL_INFILE */
char *filename=emalloc(len+1);
if(filename==NULL) {
php3_error(E_WARNING,"can't create blob-resource");
***************
*** 3153,3165 ****
return -1;
}
Ifx_blob->type=Ifx_blob_orig->type;
Ifx_blob->mode=Ifx_blob_orig->mode;
locator=&(Ifx_blob->blob_data);
locator_orig=&(Ifx_blob_orig->blob_data);
! if(Ifx_blob->mode==0) {
char *content;
if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) {
if((content=emalloc(locator_orig->loc_size))==NULL) {
--- 3167,3181 ----
return -1;
}
+ memset(Ifx_blob, 0, sizeof(IFX_BLOBRES));
+
Ifx_blob->type=Ifx_blob_orig->type;
Ifx_blob->mode=Ifx_blob_orig->mode;
locator=&(Ifx_blob->blob_data);
locator_orig=&(Ifx_blob_orig->blob_data);
! if(Ifx_blob->mode==BL_INMEM) {
char *content;
if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) {
if((content=emalloc(locator_orig->loc_size))==NULL) {
***************
*** 3244,3256 ****
return -1;
}
if(Ifx_blob->mode==0) {
! if(Ifx_blob->blob_data.loc_buffer==NULL || Ifx_blob->blob_data.loc_size<=0 ||
Ifx_blob->blob_data.loc_indicator==-1) {} else {
! efree(Ifx_blob->blob_data.loc_buffer);
! }
} else {
! if(Ifx_blob->blob_data.loc_fname!=NULL) {
! efree(Ifx_blob->blob_data.loc_fname);
! }
}
--- 3260,3273 ----
return -1;
}
if(Ifx_blob->mode==0) {
! if(Ifx_blob->blob_data.loc_buffer==NULL
! || Ifx_blob->blob_data.loc_size<=0) {;} else {
! efree(Ifx_blob->blob_data.loc_buffer);
! }
} else {
! if(Ifx_blob->blob_data.loc_fname!=NULL) {
! efree(Ifx_blob->blob_data.loc_fname);
! }
}
***************
*** 3270,3278 ****
* list: internal hashlist of php3
*
* return -1 on error otherwise 0
! * FREES BYTE-MEMORY WITH FREE(), use this for freeing blob-source after select (in
ifx_free_result)
* ----------------------------------------------------------------------
! */long php3_intifx2_free_blob(long bid, HashTable *list) {
IFX_BLOBRES *Ifx_blob;
int type;
--- 3287,3297 ----
* list: internal hashlist of php3
*
* return -1 on error otherwise 0
! * FREES BYTE-MEMORY WITH FREE(), for blob memory allocated by ESQL/C
! * use this for freeing blob-source after select (in ifx_free_result)
* ----------------------------------------------------------------------
! */
! long php3_intifx2_free_blob(long bid, HashTable *list) {
IFX_BLOBRES *Ifx_blob;
int type;
***************
*** 3283,3295 ****
return -1;
}
if(Ifx_blob->mode==0) {
! if(Ifx_blob->blob_data.loc_buffer==NULL || Ifx_blob->blob_data.loc_size<=0 ||
Ifx_blob->blob_data.loc_indicator==-1) {} else {
! free(Ifx_blob->blob_data.loc_buffer);
! }
} else {
! if(Ifx_blob->blob_data.loc_fname!=NULL) {
! efree(Ifx_blob->blob_data.loc_fname);
! }
}
php3_list_delete(bid);
--- 3302,3315 ----
return -1;
}
if(Ifx_blob->mode==0) {
! if(Ifx_blob->blob_data.loc_buffer==NULL ||
! Ifx_blob->blob_data.loc_size<=0) {;} else {
! free(Ifx_blob->blob_data.loc_buffer);
! }
} else {
! if(Ifx_blob->blob_data.loc_fname!=NULL) {
! efree(Ifx_blob->blob_data.loc_fname);
! }
}
php3_list_delete(bid);
***************
*** 3372,3377 ****
--- 3392,3399 ----
Ifx_blob = (IFX_BLOBRES *) php3_list_find(bid,&type);
if (type!=Informix_GLOBAL(php3_ifx_module).le_blobresult) {
+ php3_error(E_WARNING,"%d is not a Informix blob-result index",
+ bid);
return NULL;
}
--
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