summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2003-02-21 06:50:25 +0000
committerfoobar <sniper@php.net>2003-02-21 06:50:25 +0000
commit12ce594f64606d62e276a5d8cda5e2b7e65da448 (patch)
treea8d45ccbaec4093d187f06cab243d4a25b379398
parent161d31c8bc564b0afd156ad8b5c04655179d42bb (diff)
downloadphp-git-12ce594f64606d62e276a5d8cda5e2b7e65da448.tar.gz
MFB
-rw-r--r--ext/informix/ifx.ec1808
-rw-r--r--ext/informix/php_informix_includes.h10
2 files changed, 1092 insertions, 726 deletions
diff --git a/ext/informix/ifx.ec b/ext/informix/ifx.ec
index 7d167e7134..1de8632de2 100644
--- a/ext/informix/ifx.ec
+++ b/ext/informix/ifx.ec
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2002 The PHP Group |
+ | Copyright (c) 1997-2003 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -67,13 +67,19 @@
static void php_ifx_set_default_link(int id TSRMLS_DC);
static long php_intifx_getType(long id, HashTable *list TSRMLS_DC);
static long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC);
+static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC);
+static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC);
+static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC);
+static void php_intifx_release_blob(loc_t *blob TSRMLS_DC);
static long php_intifx_free_blob(long id, HashTable *list TSRMLS_DC);
-static long php_intifx2_free_blob(long id, HashTable *list TSRMLS_DC);
static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS_DC);
static long php_intifx_update_blob(long bid, char* param, long len, HashTable *list TSRMLS_DC);
static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC);
-static char* php_intifx_create_tmpfile(long bid TSRMLS_DC);
+static char* php_intifx_create_tmpfile(TSRMLS_D);
static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC);
+static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC);
+static long php_intifx_preparse(char *statement TSRMLS_DC);
+static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC);
static char* php_intifx_null(TSRMLS_D);
static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS_DC);
static long php_intifx_free_char(long id, HashTable *list TSRMLS_DC);
@@ -111,7 +117,7 @@ EXEC SQL include sqlstype;
#include <errno.h>
typedef char IFX[128];
-#define SAFE_STRING(s) ((s)?(s):"")
+#define SAFE_STRING(s) ((s) ? (s) : "")
#define PHP_IFX_CHECK_CONNECTION(ifx) \
{ \
if (ifx_check() < 0) { \
@@ -258,7 +264,7 @@ EXEC SQL END DECLARE SECTION;
}
ifx_err_msg = emalloc(64);
- sprintf(ifx_err_msg,"%c [SQLSTATE=%c%c %c%c%c SQLCODE=%d]",
+ sprintf(ifx_err_msg, "%c [SQLSTATE=%c%c %c%c%c SQLCODE=%d]",
c,
SQLSTATE[0],
SQLSTATE[1],
@@ -312,6 +318,14 @@ static void ifx_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
efree(Ifx_Result);
}
+static void ifx_free_blob(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+{
+ IFX_IDRES *Ifx_blob = (IFX_IDRES *)rsrc->ptr;
+
+ php_intifx_release_blob(&Ifx_blob->BLOB.blob_data TSRMLS_CC);
+ efree(Ifx_blob);
+}
+
PHP_INI_BEGIN()
STD_PHP_INI_BOOLEAN("ifx.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateInt, allow_persistent, zend_ifx_globals, ifx_globals)
STD_PHP_INI_ENTRY_EX("ifx.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_persistent, zend_ifx_globals, ifx_globals, display_link_numbers)
@@ -341,12 +355,12 @@ PHP_MINIT_FUNCTION(ifx)
REGISTER_INI_ENTRIES();
- le_result = zend_register_list_destructors_ex(ifx_free_result,NULL, "informix result", module_number);
- le_idresult = zend_register_list_destructors_ex(NULL, NULL, "informix id result", module_number);
- le_link = zend_register_list_destructors_ex(_close_ifx_link,NULL, "informix link", module_number);
- le_plink = zend_register_list_destructors_ex(NULL,_close_ifx_plink,"informix persistent link", module_number);
+ le_result = zend_register_list_destructors_ex(ifx_free_result, NULL, "informix result", module_number);
+ le_idresult = zend_register_list_destructors_ex(ifx_free_blob, NULL, "informix id result", module_number);
+ le_link = zend_register_list_destructors_ex(_close_ifx_link, NULL, "informix link", module_number);
+ le_plink = zend_register_list_destructors_ex(NULL, _close_ifx_plink, "informix persistent link", module_number);
ifx_module_entry.type = type;
-
+
REGISTER_LONG_CONSTANT("IFX_SCROLL", IFX_SCROLL, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("IFX_HOLD", IFX_HOLD, CONST_CS | CONST_PERSISTENT);
$ifdef HAVE_IFX_IUS;
@@ -369,7 +383,7 @@ PHP_MSHUTDOWN_FUNCTION(ifx)
PHP_RINIT_FUNCTION(ifx)
{
- IFXG(default_link)=-1;
+ IFXG(default_link) = -1;
IFXG(num_links) = IFXG(num_persistent);
return SUCCESS;
}
@@ -409,7 +423,7 @@ static void php_ifx_set_default_link(int id TSRMLS_DC)
** ----------------------------------------------------------------------
*/
-static void php_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
+static void php_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
{
char *hashed_details;
int hashed_details_length;
@@ -420,14 +434,14 @@ EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
if (PG(sql_safe_mode)) {
- if (ZEND_NUM_ARGS()>0) {
+ if (ZEND_NUM_ARGS() > 0) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
}
host = passwd = NULL;
user = php_get_current_user();
- hashed_details_length = strlen(user)+3+3;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"ifx__%s_",user);
+ hashed_details_length = strlen(user) + 3 + 3;
+ hashed_details = (char *) emalloc(hashed_details_length + 1);
+ sprintf(hashed_details, "ifx__%s_", user);
} else {
int host_len = 0, user_len = 0, passwd_len = 0;
host = user = passwd = NULL;
@@ -451,28 +465,29 @@ EXEC SQL END DECLARE SECTION;
}
hashed_details_length = sizeof("ifx___") - 1 + host_len + user_len + passwd_len;
- hashed_details = (char *) emalloc(hashed_details_length+1);
- sprintf(hashed_details,"ifx_%s_%s_%s", SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd));
+ hashed_details = (char *) emalloc(hashed_details_length + 1);
+ sprintf(hashed_details, "ifx_%s_%s_%s", SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd));
}
IFXG(sv_sqlcode) = 0;
if (!IFXG(allow_persistent)) {
- persistent=0;
+ persistent = 0;
}
+
if (persistent) {
list_entry *le;
/* try to find if we already have this link in our persistent list */
- if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length+1, (void **) &le)==FAILURE) { /* we don't */
+ if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le) == FAILURE) { /* we don't */
list_entry new_le;
- if (IFXG(max_links)!=-1 && IFXG(num_links) >= IFXG(max_links)) {
+ if (IFXG(max_links) != -1 && IFXG(num_links) >= IFXG(max_links)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", IFXG(num_links));
efree(hashed_details);
RETURN_FALSE;
}
- if (IFXG(max_persistent)!=-1 && IFXG(num_persistent) >= IFXG(max_persistent)) {
+ if (IFXG(max_persistent) != -1 && IFXG(num_persistent) >= IFXG(max_persistent)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%d)", IFXG(num_persistent));
efree(hashed_details);
RETURN_FALSE;
@@ -481,7 +496,7 @@ EXEC SQL END DECLARE SECTION;
/* create the link */
ifx = (char *) malloc(sizeof(IFX));
IFXG(connectionid)++;
- sprintf(ifx,"%s%x", SAFE_STRING(user), IFXG(connectionid));
+ sprintf(ifx, "%s%x", SAFE_STRING(user), IFXG(connectionid));
EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
@@ -496,8 +511,7 @@ EXEC SQL END DECLARE SECTION;
/* hash it up */
new_le.type = le_plink;
new_le.ptr = ifx;
- if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE)
- {
+ if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void *) &new_le, sizeof(list_entry), NULL) == FAILURE) {
free(ifx);
efree(hashed_details);
RETURN_FALSE;
@@ -518,7 +532,7 @@ EXEC SQL END DECLARE SECTION;
if (ifx_check() == IFX_ERROR) {
IFXG(sv_sqlcode) = SQLCODE;
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link to server lost, unable to reconnect (%s)", ifx_error(ifx));
- zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
+ zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length + 1);
efree(hashed_details);
RETURN_FALSE;
}
@@ -534,7 +548,7 @@ EXEC SQL END DECLARE SECTION;
* if it doesn't, open a new ifx link, add it to the resource list,
* and add a pointer to it with hashed_details as the key.
*/
- if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length+1, (void **) &index_ptr) == SUCCESS)
+ if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1, (void **) &index_ptr) == SUCCESS)
{
int type,link;
void *ptr;
@@ -544,7 +558,7 @@ EXEC SQL END DECLARE SECTION;
}
link = (int) index_ptr->ptr;
ptr = zend_list_find(link, &type); /* check if the link is still there */
- if (ptr && (type==le_link || type==le_plink)) {
+ if (ptr && (type == le_link || type == le_plink)) {
/* ensure that the link is not closed */
ifx = ptr;
EXEC SQL SET CONNECTION :ifx;
@@ -556,7 +570,7 @@ EXEC SQL END DECLARE SECTION;
if (ifx_check() == IFX_ERROR) {
IFXG(sv_sqlcode) = SQLCODE;
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect (%s)", ifx_error(ifx));
- zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
+ zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
efree(hashed_details);
RETURN_FALSE;
}
@@ -568,7 +582,7 @@ EXEC SQL END DECLARE SECTION;
efree(hashed_details);
return;
} else {
- zend_hash_del(&EG(regular_list),hashed_details,hashed_details_length+1);
+ zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length + 1);
}
}
if (IFXG(max_links) != -1 && IFXG(num_links) >= IFXG(max_links)) {
@@ -579,7 +593,7 @@ EXEC SQL END DECLARE SECTION;
ifx = (char *) emalloc(sizeof(IFX));
IFXG(connectionid)++;
- sprintf(ifx,"connec%x", IFXG(connectionid));
+ sprintf(ifx, "connec%x", IFXG(connectionid));
EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;
@@ -597,8 +611,7 @@ EXEC SQL END DECLARE SECTION;
/* add it to the hash */
new_index_ptr.ptr = (void *) return_value->value.lval;
new_index_ptr.type = le_index_ptr;
- if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length+1, (void *) &new_index_ptr, sizeof(list_entry), NULL) == FAILURE)
- {
+ if (zend_hash_update(&EG(regular_list), hashed_details, hashed_details_length + 1, (void *) &new_index_ptr, sizeof(list_entry), NULL) == FAILURE) {
efree(hashed_details);
RETURN_FALSE;
}
@@ -648,7 +661,7 @@ EXEC SQL END DECLARE SECTION;
id = IFXG(default_link);
break;
case 1:
- if (zend_get_parameters_ex(1, &ifx_link)==FAILURE) {
+ if (zend_get_parameters_ex(1, &ifx_link) == FAILURE) {
RETURN_FALSE;
}
id=-1;
@@ -662,11 +675,11 @@ EXEC SQL END DECLARE SECTION;
ZEND_FETCH_RESOURCE2(ifx, char *, ifx_link, id, "Informix link", le_link, le_plink);
- if (id==-1) { /* explicit resource number */
+ if (id == -1) { /* explicit resource number */
zend_list_delete(Z_RESVAL_PP(ifx_link));
}
- if (id!=-1 || (ifx_link && Z_RESVAL_PP(ifx_link)==IFXG(default_link))) {
+ if (id != -1 || (ifx_link && Z_RESVAL_PP(ifx_link) == IFXG(default_link))) {
zend_list_delete(IFXG(default_link));
IFXG(default_link) = -1;
}
@@ -710,22 +723,23 @@ EXEC SQL BEGIN DECLARE SECTION;
char cursorid[32]; /* query cursor id */
char statemid[32]; /* statement id */
char descrpid[32]; /* descriptor id */
+ char i_descrpid[32]; /* input descriptor binding */
char *statement; /* query text */
int fieldcount; /* field count */
int i; /* field index */
short fieldtype;
- loc_t *locator;
+ loc_t *locator=NULL;
int loc_t_type=CLOCATORTYPE; /* WORKAROUND:TYPE=CLOCATORTYPE doesn't work, */
int sqlchar_type=SQLCHAR; /* don't ask me, why. */
char *char_tmp;
long len;
int indicator;
+ int desc_count;
$ifdef HAVE_IFX_IUS;
fixed binary 'blob' ifx_lo_t *slocator;
$endif;
EXEC SQL END DECLARE SECTION;
- char *blobfilename;
int locind;
int ctype;
int affected_rows;
@@ -735,8 +749,9 @@ EXEC SQL END DECLARE SECTION;
int cursoryproc;
int argc=ZEND_NUM_ARGS();
long ifx_type;
+ int num_params;
- if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) {
+ if (argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -752,6 +767,7 @@ EXEC SQL END DECLARE SECTION;
sprintf(statemid, "statem%x", IFXG(cursorid));
sprintf(cursorid, "cursor%x", IFXG(cursorid));
sprintf(descrpid, "descrp%x", IFXG(cursorid));
+ sprintf(i_descrpid, "i_descrp%x", IFXG(cursorid));
EXEC SQL set connection :ifx;
PHP_IFX_CHECK_CONNECTION(ifx);
@@ -766,7 +782,43 @@ EXEC SQL END DECLARE SECTION;
affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */
for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e];
- EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384;
+ num_params = php_intifx_preparse(statement TSRMLS_CC);
+
+ Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
+ if (Ifx_Result == NULL) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
+ EXEC SQL free :statemid;
+ RETURN_FALSE;
+ }
+
+ /* initialize result data structure */
+ Ifx_Result->rowid = 0;
+ strcpy(Ifx_Result->connecid, ifx);
+ strcpy(Ifx_Result->cursorid, cursorid);
+ strcpy(Ifx_Result->descrpid, descrpid);
+ strcpy(Ifx_Result->i_descrpid, i_descrpid);
+ strcpy(Ifx_Result->statemid, statemid);
+ Ifx_Result->numcols = 0;
+ Ifx_Result->numicols = 0;
+
+ for (i = 0; i < MAX_RESID; ++i) {
+ Ifx_Result->res_id[i] = -1;
+ }
+
+ if (!php_intifx_alloc_ibind(Ifx_Result, num_params TSRMLS_CC)) {
+ IFXG(sv_sqlcode) = SQLCODE;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s> fails (%s)", i_descrpid, ifx_error(ifx));
+ RETURN_FALSE;
+ }
+
+ desc_count = php_intifx_count_descriptors(statemid TSRMLS_CC);
+ if (desc_count == 0) {
+ desc_count = 1;
+ }
+
+ EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
if (ifx_check() < 0) {
IFXG(sv_sqlcode) = SQLCODE;
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx));
@@ -785,23 +837,6 @@ EXEC SQL END DECLARE SECTION;
query_type = sqlca.sqlcode;
- Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
- if (Ifx_Result == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- /* initialize result data structure */
-
- Ifx_Result->rowid = 0;
- strcpy(Ifx_Result->connecid, ifx);
- strcpy(Ifx_Result->descrpid, descrpid);
- for (i = 0; i < MAX_RESID; ++i) {
- Ifx_Result->res_id[i] = -1;
- }
-
cursoryproc = 0;
if (query_type == SQ_EXECPROC) {
EXEC SQL GET DESCRIPTOR :descrpid :i = COUNT;
@@ -810,8 +845,8 @@ EXEC SQL END DECLARE SECTION;
}
}
- Ifx_Result->iscursory = -1; /* prevent ifx_do */
- Ifx_Result->paramquery=0;
+ Ifx_Result->iscursory = -1; /* prevent ifx_do */
+ Ifx_Result->paramquery = 0;
if ((query_type != 0) && (!cursoryproc)) { /* NO RESULT SET */
/* ##
@@ -820,19 +855,28 @@ EXEC SQL END DECLARE SECTION;
*/
zval **pblobidarr, **tmp;
+ /* We don't need this descriptor anymore, NONSELECT-STATEMENT */
+ EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+
Ifx_Result->iscursory = 0;
- strcpy(Ifx_Result->cursorid, "");
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->statemid, statemid);
- if(argc > 3) {
+ if (argc > 3) {
WRONG_PARAM_COUNT;
}
- if(argc == 3) {
+ if (argc == 3) {
+
+ if (Ifx_Result->numicols <= 0) {
+ IFXG(sv_sqlcode) = SQLCODE;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "No placeholders (?) in Statement, but blob array param supplied");
+ RETURN_FALSE;
+ }
+
if (zend_get_parameters_ex(3, &dummy, &dummy, &pblobidarr) == FAILURE) {
IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param");
@@ -840,7 +884,7 @@ EXEC SQL END DECLARE SECTION;
}
if (Z_TYPE_PP(pblobidarr) != IS_ARRAY) {
IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter is not an array");
@@ -848,37 +892,33 @@ EXEC SQL END DECLARE SECTION;
}
zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
- i=1;
- while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) {
+ for (i = 1; i <= Ifx_Result->numicols && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) {
convert_to_long(*tmp);
- if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) {
- EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i;
- }
- ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC);
- switch(ifx_type) {
+ ifx_type = php_intifx_getType((int)(*tmp)->value.lval, &EG(regular_list) TSRMLS_CC);
+ switch (ifx_type) {
case TYPE_BLTEXT:
case TYPE_BLBYTE:
- locator=php_intifx_get_blobloc((int)((*tmp)->value.lval),&EG(regular_list) TSRMLS_CC);
- if(locator==NULL) {
+ locator = php_intifx_get_blobloc((int)((*tmp)->value.lval), &EG(regular_list) TSRMLS_CC);
+ if (locator == NULL) {
IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not an Informix blob-result index", (int)((*tmp)->value.lval));
RETURN_FALSE;
}
- if(locator->loc_loctype==LOCFNAME) {
+ if (locator->loc_loctype == LOCFNAME) {
locator->loc_oflags=LOC_RONLY;
}
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE= :loc_t_type;
+ EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type;
break;
case TYPE_CHAR:
- len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC);
- indicator=0;
- if(char_tmp==NULL || len<0) {
- indicator=-1;
+ len = php_intifx_get_char((int) ((*tmp)->value.lval), &EG(regular_list), &char_tmp TSRMLS_CC);
+ indicator = 0;
+ if (char_tmp == NULL || len < 0) {
+ indicator = -1;
}
len++;
@@ -889,25 +929,46 @@ EXEC SQL END DECLARE SECTION;
TYPE= :sqlchar_type;
break;
}
- i++;
+
+ if (ifx_check() < 0) {
+ IFXG(sv_sqlcode) = SQLCODE;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : %s", ifx_error(ifx));
+ RETURN_FALSE;
+ }
+
zend_hash_move_forward((*pblobidarr)->value.ht);
}
Ifx_Result->paramquery=1;
- EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
+
+ if (i - 1 != Ifx_Result->numicols) {
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : number of created blobs doesn't match placeholders (?)");
+ RETURN_FALSE;
+ }
+ EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid;
} else {
EXEC SQL EXECUTE :statemid;
}
if (ifx_check() < 0) {
IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+ if (Ifx_Result->numicols > 0) {
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
+ }
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : %s (%s)", statement, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : %s", ifx_error(ifx));
RETURN_FALSE;
}
Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
+ for (e = 0; e < 6; e++) {
+ Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
+ }
} else {
/* ##
## SELECT-STATEMENT
@@ -920,7 +981,7 @@ EXEC SQL END DECLARE SECTION;
case 2:
break;
case 3:
- if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype)==FAILURE) {
+ if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype) == FAILURE) {
RETURN_FALSE;
}
convert_to_long_ex(cursortype);
@@ -932,8 +993,10 @@ EXEC SQL END DECLARE SECTION;
}
Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlerrd[e];
-
+ for (e = 0; e < 6; e++) {
+ Ifx_Result->sqlerrd[e] = sqlerrd[e];
+ }
+
EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
if (ifx_check() < 0) {
IFXG(sv_sqlcode) = SQLCODE;
@@ -954,6 +1017,10 @@ EXEC SQL END DECLARE SECTION;
Ifx_Result->ishold = 1;
}
+ /*
+ * ifx_do() part
+ */
+
if (Ifx_Result->isscroll) {
if (Ifx_Result->ishold) {
EXEC SQL DECLARE :cursorid SCROLL CURSOR WITH HOLD FOR :statemid;
@@ -987,9 +1054,6 @@ EXEC SQL END DECLARE SECTION;
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails (%s)", ifx_error(ifx));
RETURN_FALSE;
}
- strcpy(Ifx_Result->cursorid, cursorid);
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->statemid, statemid);
/* check for text/blob columns */
locind = 0;
@@ -997,31 +1061,36 @@ EXEC SQL END DECLARE SECTION;
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
+ || (fieldtype == SQLUDTFIXED)
$endif;
) {
int bid = 0;
- if(fieldtype==SQLTEXT) {
- bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
+ if (fieldtype == SQLTEXT) {
+ if (IFXG(blobinfile) == 0) {
+ bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
+ } else {
+ bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE, "",-1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
+ }
+
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
- }
- if(fieldtype==SQLBYTES) {
- if(IFXG(blobinfile)==0) {
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
+ } else if (fieldtype == SQLBYTES) {
+ if (IFXG(blobinfile) == 0) {
+ bid = php_intifx_create_blob(TYPE_BLBYTE, BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
} else {
- blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC);
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC);
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- locator->loc_oflags=LOC_WONLY;
+ bid = php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, "", -1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
}
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
}
+
+ php_intifx_release_blob(locator TSRMLS_CC);
$ifdef HAVE_IFX_IUS;
- if(fieldtype==SQLUDTFIXED) {
+ if (fieldtype == SQLUDTFIXED) {
bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
- slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
+ slocator = php_intifxus_get_slobloc(bid, &EG(regular_list) TSRMLS_CC);
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
}
$endif;
@@ -1066,6 +1135,7 @@ EXEC SQL BEGIN DECLARE SECTION;
char cursorid[32]; /* query cursor id */
char statemid[32]; /* statement id */
char descrpid[32]; /* descriptor id */
+ char i_descrpid[32]; /* input descriptor binding */
char *statement; /* query text */
int fieldcount; /* field count */
int i; /* field index */
@@ -1077,16 +1147,17 @@ EXEC SQL BEGIN DECLARE SECTION;
int indicator;
long sqlerrd[6];
int e;
+ int desc_count;
EXEC SQL END DECLARE SECTION;
-
int ctype;
int affected_rows;
int query_type;
int cursoryproc;
int argc=ZEND_NUM_ARGS();
long ifx_type;
+ int num_params;
- if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) {
+ if (argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -1102,6 +1173,7 @@ EXEC SQL END DECLARE SECTION;
sprintf(statemid, "statem%x", IFXG(cursorid));
sprintf(cursorid, "cursor%x", IFXG(cursorid));
sprintf(descrpid, "descrp%x", IFXG(cursorid));
+ sprintf(i_descrpid, "i_descrp%x", IFXG(cursorid));
EXEC SQL set connection :ifx;
PHP_IFX_CHECK_CONNECTION(ifx);
@@ -1114,9 +1186,47 @@ EXEC SQL END DECLARE SECTION;
}
affected_rows = sqlca.sqlerrd[0]; /* save estimated affected rows */
- for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e];
+ for (e = 0; e < 6; e++) {
+ sqlerrd[e] = sqlca.sqlerrd[e];
+ }
+ num_params = php_intifx_preparse(statement TSRMLS_CC);
- EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384;
+ Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
+ if (Ifx_Result == NULL) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
+ EXEC SQL free :statemid;
+ RETURN_FALSE;
+ }
+
+ /* initialize result data structure */
+
+ Ifx_Result->rowid = 0;
+ strcpy(Ifx_Result->connecid, ifx);
+ strcpy(Ifx_Result->cursorid, cursorid);
+ strcpy(Ifx_Result->descrpid, descrpid);
+ strcpy(Ifx_Result->i_descrpid, i_descrpid);
+ strcpy(Ifx_Result->statemid, statemid);
+ Ifx_Result->numcols = 0;
+ Ifx_Result->numicols = 0;
+
+ for (i = 0; i < MAX_RESID; ++i) {
+ Ifx_Result->res_id[i] = -1;
+ }
+
+ if (!php_intifx_alloc_ibind(Ifx_Result, num_params TSRMLS_CC)) {
+ IFXG(sv_sqlcode) = SQLCODE;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s> fails (%s)", i_descrpid, ifx_error(ifx));
+ RETURN_FALSE;
+ }
+
+ desc_count = php_intifx_count_descriptors(statemid TSRMLS_CC);
+ if (desc_count == 0) {
+ desc_count = 1;
+ }
+
+ EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
if (ifx_check() < 0) {
IFXG(sv_sqlcode) = SQLCODE;
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx));
@@ -1135,24 +1245,6 @@ EXEC SQL END DECLARE SECTION;
query_type = sqlca.sqlcode;
- Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
- if (Ifx_Result == NULL) {
- IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
- EXEC SQL free :statemid;
- RETURN_FALSE;
- }
-
- /* initialize result data structure */
- Ifx_Result->rowid = 0;
- strcpy(Ifx_Result->connecid, ifx);
- strcpy(Ifx_Result->descrpid, descrpid);
- strcpy(Ifx_Result->statemid, statemid);
- for (i = 0; i < MAX_RESID; ++i) {
- Ifx_Result->res_id[i] = -1;
- }
-
cursoryproc = 0;
if (query_type == SQ_EXECPROC) {
EXEC SQL GET DESCRIPTOR :descrpid :i = COUNT;
@@ -1171,29 +1263,38 @@ EXEC SQL END DECLARE SECTION;
*/
zval **pblobidarr, **tmp;
+ /* We don't need this descriptor anymore, NONSELECT-STATEMENT */
+ EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+
Ifx_Result->iscursory = 0;
- strcpy(Ifx_Result->cursorid, cursorid);
- strcpy(Ifx_Result->cursorid, "");
- strcpy(Ifx_Result->descrpid, descrpid);
- if(argc > 3) {
+ if (argc > 3) {
WRONG_PARAM_COUNT;
}
- if(argc == 3) {
- Ifx_Result->paramquery=1;
- if (zend_get_parameters_ex(3, &dummy, &dummy,&pblobidarr) == FAILURE) {
+ if (argc == 3) {
+ Ifx_Result->paramquery = 1;
+
+ if (Ifx_Result->numicols <= 0) {
IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "No placeholders (?) in Statement, but blob array param supplied");
+ RETURN_FALSE;
+ }
+
+ if (zend_get_parameters_ex(3, &dummy, &dummy, &pblobidarr) == FAILURE) {
+ IFXG(sv_sqlcode) = SQLCODE;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param");
RETURN_FALSE;
}
- if((*pblobidarr)->type != IS_ARRAY) {
+ if ((*pblobidarr)->type != IS_ARRAY) {
IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter not an array");
@@ -1201,37 +1302,33 @@ EXEC SQL END DECLARE SECTION;
}
zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
- i=1;
- while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) {
+ for (i = 1; i <= num_params && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) {
convert_to_long(*tmp);
- if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) {
- EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i;
- }
- ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC);
- switch(ifx_type) {
+ ifx_type = php_intifx_getType((int)(*tmp)->value.lval, &EG(regular_list) TSRMLS_CC);
+ switch (ifx_type) {
case TYPE_BLTEXT:
case TYPE_BLBYTE:
- locator=php_intifx_get_blobloc((int)((*tmp)->value.lval),&EG(regular_list) TSRMLS_CC);
- if(locator==NULL) {
+ locator = php_intifx_get_blobloc((int)((*tmp)->value.lval), &EG(regular_list) TSRMLS_CC);
+ if (locator == NULL) {
IFXG(sv_sqlcode) = SQLCODE;
- EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", (int)((*tmp)->value.lval));
RETURN_FALSE;
}
- if(locator->loc_loctype==LOCFNAME) {
+ if (locator->loc_loctype == LOCFNAME) {
locator->loc_oflags=LOC_RONLY;
}
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE=:loc_t_type;
+ EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type;
break;
case TYPE_CHAR:
- len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC);
+ len = php_intifx_get_char((int)((*tmp)->value.lval), &EG(regular_list), &char_tmp TSRMLS_CC);
- indicator=0;
- if(char_tmp==NULL || len < 0) {
- indicator=-1;
+ indicator = 0;
+ if (char_tmp == NULL || len < 0) {
+ indicator = -1;
}
len++;
@@ -1242,14 +1339,34 @@ EXEC SQL END DECLARE SECTION;
TYPE= :sqlchar_type;
break;
}
- i++;
+
+ if (ifx_check() < 0) {
+ IFXG(sv_sqlcode) = SQLCODE;
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails : %s", ifx_error(ifx));
+ RETURN_FALSE;
+ }
+
zend_hash_move_forward((*pblobidarr)->value.ht);
}
+
+ if (i - 1 != Ifx_Result->numicols) {
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
+ EXEC SQL free :statemid;
+ efree(Ifx_Result);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails : number of created blobs doesn't match placeholders (?)");
+ RETURN_FALSE;
+ }
+
}
Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlerrd[e];
-
+ for (e = 0; e < 6; e++) {
+ Ifx_Result->sqlerrd[e] = sqlerrd[e];
+ }
+
} else {
/* ##
## SELECT-STATEMENT
@@ -1257,11 +1374,11 @@ EXEC SQL END DECLARE SECTION;
*/
ctype = 0; /* preset */
- switch(argc) {
+ switch (argc) {
case 2:
break;
case 3:
- if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype)==FAILURE) {
+ if (zend_get_parameters_ex(3, &dummy, &dummy, &cursortype) == FAILURE) {
RETURN_FALSE;
}
convert_to_long_ex(cursortype);
@@ -1272,11 +1389,12 @@ EXEC SQL END DECLARE SECTION;
break;
}
- strcpy(Ifx_Result->cursorid, cursorid);
Ifx_Result->iscursory = 1;
Ifx_Result->affected_rows = affected_rows; /* saved estimated from prepare */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlerrd[e];
+ for (e = 0; e < 6; e++) {
+ Ifx_Result->sqlerrd[e] = sqlerrd[e];
+ }
EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
if (ifx_check() < 0) {
@@ -1297,6 +1415,7 @@ EXEC SQL END DECLARE SECTION;
Ifx_Result->ishold = 1;
}
}
+
ZEND_REGISTER_RESOURCE(return_value, Ifx_Result, le_result);
}
/* }}} */
@@ -1326,10 +1445,11 @@ EXEC SQL BEGIN DECLARE SECTION;
char *cursorid; /* query cursor id */
char *statemid; /* statement id */
char *descrpid; /* descriptor id */
+ char *i_descrpid; /* descriptor id */
int fieldcount; /* field count */
int i; /* field index */
short fieldtype;
- loc_t *locator;
+ loc_t *locator=NULL;
int e;
$ifdef HAVE_IFX_IUS;
fixed binary 'blob' ifx_lo_t *slocator;
@@ -1337,9 +1457,8 @@ $endif;
EXEC SQL END DECLARE SECTION;
int locind;
- char *blobfilename;
- if(ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result)==FAILURE)) {
+ if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result) == FAILURE)) {
WRONG_PARAM_COUNT;
}
@@ -1351,6 +1470,7 @@ EXEC SQL END DECLARE SECTION;
cursorid = Ifx_Result->cursorid;
statemid = Ifx_Result->statemid;
descrpid = Ifx_Result->descrpid;
+ i_descrpid = Ifx_Result->i_descrpid;
fieldcount = Ifx_Result->numcols;
EXEC SQL set connection :ifx;
@@ -1361,9 +1481,9 @@ EXEC SQL END DECLARE SECTION;
RETURN_FALSE;
}
- if (Ifx_Result->iscursory==0) { /* execute immediate */
- if(Ifx_Result->paramquery!=0) {
- EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
+ if (Ifx_Result->iscursory == 0) { /* execute immediate */
+ if (Ifx_Result->paramquery != 0) {
+ EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid;
} else {
EXEC SQL EXECUTE :statemid;
}
@@ -1373,7 +1493,9 @@ EXEC SQL END DECLARE SECTION;
RETURN_FALSE;
}
Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
- for (e = 0; e < 6; e++) Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
+ for (e = 0; e < 6; e++) {
+ Ifx_Result->sqlerrd[e] = sqlca.sqlerrd[e];
+ }
} else { /* open cursor */
if (Ifx_Result->isscroll) {
if (Ifx_Result->ishold) {
@@ -1408,36 +1530,43 @@ EXEC SQL END DECLARE SECTION;
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
+ || (fieldtype == SQLUDTFIXED)
$endif;
) {
int bid = 0;
- if(fieldtype==SQLTEXT) {
- bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
+ if (fieldtype == SQLTEXT) {
+ if (IFXG(blobinfile) == 0) {
+ bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
+ } else {
+ bid = php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE, "", -1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
+ }
+
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
}
- if(fieldtype==SQLBYTES) {
- if(IFXG(blobinfile)==0) {
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
+ else if (fieldtype == SQLBYTES) {
+ if (IFXG(blobinfile) == 0) {
+ bid = php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM, "", -1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
} else {
- blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC);
- bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE,blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC);
- locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
- locator->loc_oflags=LOC_WONLY;
+ bid = php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, "", -1, &EG(regular_list) TSRMLS_CC);
+ locator = php_intifx_get_blobloc(bid, &EG(regular_list) TSRMLS_CC);
+ locator->loc_oflags = LOC_WONLY;
}
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
}
+
+ php_intifx_release_blob(locator TSRMLS_CC);
$ifdef HAVE_IFX_IUS;
- if(fieldtype==SQLUDTFIXED) {
- bid=php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
- slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
+ if (fieldtype == SQLUDTFIXED) {
+ bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
+ slocator = php_intifxus_get_slobloc(bid, &EG(regular_list) TSRMLS_CC);
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
}
$endif;
- Ifx_Result->res_id[locind]=bid;
+ Ifx_Result->res_id[locind] = bid;
++locind;
}
}
@@ -1467,7 +1596,7 @@ PHP_FUNCTION(ifx_error)
id = IFXG(default_link);
break;
case 1:
- if (zend_get_parameters_ex(1, &ifx_link)==FAILURE) {
+ if (zend_get_parameters_ex(1, &ifx_link) == FAILURE) {
RETURN_FALSE;
}
break;
@@ -1476,7 +1605,7 @@ PHP_FUNCTION(ifx_error)
break;
}
- RETURN_STRING(ifx_error(0),0); /* ifx_error returns emalloced string */
+ RETURN_STRING(ifx_error(0), 0); /* ifx_error returns emalloced string */
}
/* }}} */
@@ -1509,7 +1638,7 @@ PHP_FUNCTION(ifx_errormsg)
}
break;
case 1:
- if (zend_get_parameters_ex(1, &errcode)==FAILURE) {
+ if (zend_get_parameters_ex(1, &errcode) == FAILURE) {
RETURN_FALSE;
}
convert_to_long_ex(errcode);
@@ -1521,7 +1650,7 @@ PHP_FUNCTION(ifx_errormsg)
}
maxmsglen = 255;
- ifx_errmsg = (char *)malloc(maxmsglen+1);
+ ifx_errmsg = (char *)malloc(maxmsglen + 1);
if (ifx_errorcode != 0) {
rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);
if (msglen > maxmsglen) {
@@ -1535,7 +1664,7 @@ PHP_FUNCTION(ifx_errormsg)
}
returnmsg = (char *) emalloc(strlen(ifx_errmsg) + 128);
- sprintf(returnmsg,ifx_errmsg, sqlca.sqlerrm);
+ sprintf(returnmsg, ifx_errmsg, sqlca.sqlerrm);
free(ifx_errmsg);
RETURN_STRING(returnmsg,0);
}
@@ -1558,10 +1687,10 @@ PHP_FUNCTION(ifx_affected_rows)
zval **result;
IFX_RES *Ifx_Result;
- if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result))==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result)) == FAILURE) {
WRONG_PARAM_COUNT;
}
- IFXG(sv_sqlcode )= 0;
+ IFXG(sv_sqlcode) = 0;
ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
RETURN_LONG(Ifx_Result->affected_rows);
@@ -1625,20 +1754,19 @@ EXEC SQL END DECLARE SECTION;
char string_data[256];
long long_data;
char *p;
- char *blobfilename;
char *fetch_pos;
char *nullstr;
- switch(ZEND_NUM_ARGS()) {
+ switch (ZEND_NUM_ARGS()) {
case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (zend_get_parameters_ex(1, &result) == FAILURE) {
RETURN_FALSE;
}
fetch_pos = NULL;
fetch_row = 0;
break;
case 2:
- if (zend_get_parameters_ex(2, &result, &position)==FAILURE) {
+ if (zend_get_parameters_ex(2, &result, &position) == FAILURE) {
RETURN_FALSE;
}
if (Z_TYPE_PP(position) != IS_STRING) {
@@ -1656,10 +1784,10 @@ EXEC SQL END DECLARE SECTION;
ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
- nullstr=php_intifx_null(TSRMLS_C);
+ nullstr = php_intifx_null(TSRMLS_C);
IFXG(sv_sqlcode) = 0;
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
+ if (strcmp(Ifx_Result->cursorid, "") == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
RETURN_FALSE;
}
@@ -1673,6 +1801,32 @@ EXEC SQL END DECLARE SECTION;
EXEC SQL set connection :ifx;
PHP_IFX_CHECK_CONNECTION(ifx);
+ locind = 0;
+ for (i = 1; i <= Ifx_Result->numcols; i++) {
+
+ EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
+ if (fieldtype == SQLBYTES || fieldtype == SQLTEXT) {
+
+ bid_b = Ifx_Result->res_id[locind];
+
+ if ((locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC)) == NULL) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cant get BLOB from Result Set!");
+ RETURN_FALSE;
+ }
+
+ locind++;
+
+ if (IFXG(blobinfile) == 0) {
+ php_intifx_init_blob(locator_b, BLMODE_INMEM, 1 TSRMLS_CC);
+ } else {
+ php_intifx_init_blob(locator_b, BLMODE_INFILE, 1 TSRMLS_CC);
+ }
+
+ EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator_b;
+
+ }
+ }
+
if (!Ifx_Result->isscroll) {
EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
} else {
@@ -1683,15 +1837,15 @@ EXEC SQL END DECLARE SECTION;
EXEC SQL FETCH NEXT :cursorid USING SQL DESCRIPTOR :descrpid;
}
} else {
- if (!strcasecmp(fetch_pos,"NEXT")) {
+ if (!strcasecmp(fetch_pos, "NEXT")) {
EXEC SQL FETCH NEXT :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"PREVIOUS")) {
+ } else if (!strcasecmp(fetch_pos, "PREVIOUS")) {
EXEC SQL FETCH PREVIOUS :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"FIRST")) {
+ } else if (!strcasecmp(fetch_pos, "FIRST")) {
EXEC SQL FETCH FIRST :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"LAST")) {
+ } else if (!strcasecmp(fetch_pos, "LAST")) {
EXEC SQL FETCH LAST :cursorid USING SQL DESCRIPTOR :descrpid;
- } else if (!strcasecmp(fetch_pos,"CURRENT")) {
+ } else if (!strcasecmp(fetch_pos, "CURRENT")) {
EXEC SQL FETCH CURRENT :cursorid USING SQL DESCRIPTOR :descrpid;
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid positioning arg on fetch");
@@ -1699,7 +1853,7 @@ EXEC SQL END DECLARE SECTION;
}
}
- if(SQLCODE!=-451) {
+ if (SQLCODE != -451) {
switch (ifx_check()) {
case IFX_ERROR:
IFXG(sv_sqlcode) = SQLCODE;
@@ -1740,105 +1894,114 @@ EXEC SQL END DECLARE SECTION;
}
if (indicator == -1) { /* NULL */
- if( (IFXG(textasvarchar)==0 && fieldtype==SQLTEXT) ||
- (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) {
- bid_b=Ifx_Result->res_id[locind];
- bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
- php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC);
- add_assoc_long(return_value,fieldname,bid);
+ if ((IFXG(textasvarchar) == 0 && fieldtype == SQLTEXT) ||
+ (IFXG(byteasvarchar) == 0 && fieldtype == SQLBYTES)) {
+ bid_b = Ifx_Result->res_id[locind];
+ /* call php_intifx_get_blobloc() to reset locator_b */
+ locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
+ bid = php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
+ php_intifx_update_blob(bid,nullstr, strlen(nullstr), &EG(regular_list) TSRMLS_CC);
+ add_assoc_long(return_value, fieldname, bid);
++locind;
+ php_intifx_release_blob(locator_b TSRMLS_CC);
continue;
}
- if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
+ if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
+ || (fieldtype == SQLUDTFIXED)
$endif;
) {
+ /* call php_intifx_get_blobloc() to reset locator_b */
+ bid_b = Ifx_Result->res_id[locind];
+ locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
++locind;
+ php_intifx_release_blob(locator_b TSRMLS_CC);
}
add_assoc_string(return_value, fieldname, nullstr, DUP);
continue;
} /* NULL */
switch (fieldtype) {
- case SQLSERIAL :
- case SQLINT :
+ case SQLSERIAL:
+ case SQLINT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int_data = DATA;
long_data = int_data;
- sprintf(string_data,"%ld", long_data);
+ sprintf(string_data, "%ld", long_data);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLSMINT :
+ case SQLSMINT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :short_data = DATA;
long_data = short_data;
- sprintf(string_data,"%ld", long_data);
+ sprintf(string_data, "%ld", long_data);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLDECIMAL :
- case SQLMONEY :
+ case SQLDECIMAL:
+ case SQLMONEY:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dec_data = DATA;
memset(string_data, 0x20, 64);
dectoasc(&dec_data, string_data, 63, -1);
- for (p =string_data; *p != ' '; ++p) ;
+ for (p = string_data; *p != ' '; ++p) ;
*p = 0;
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLSMFLOAT :
+ case SQLSMFLOAT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :float_data = DATA;
double_data = float_data;
- sprintf(string_data,"%17.17g", double_data);
+ sprintf(string_data, "%17.17g", double_data);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLFLOAT :
+ case SQLFLOAT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :double_data = DATA;
- sprintf(string_data,"%17.17g", double_data);
+ sprintf(string_data, "%17.17g", double_data);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLDATE :
+ case SQLDATE:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :date_data = DATA;
rdatestr(date_data, string_data);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLDTIME :
+ case SQLDTIME:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dt_data = DATA;
dttoasc(&dt_data, string_data);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLINTERVAL :
+ case SQLINTERVAL:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :intvl_data = DATA;
intoasc(&intvl_data, string_data);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
$ifdef HAVE_IFX_IUS;
- case SQLSERIAL8 :
- case SQLINT8 :
+ case SQLSERIAL8:
+ case SQLINT8:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int8_var = DATA;
memset(string_data, ' ', sizeof(string_data));
- ifx_int8toasc(&int8_var,string_data,200);
+ ifx_int8toasc(&int8_var, string_data, 200);
p = string_data; /* rtrim string_data */
while ((*p != ' ') && (p < &string_data[sizeof(string_data) - 1])) ++p;
- *p = 0;
+ *p = 0;
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
- case SQLLVARCHAR :
- ifx_var_flag(&lvar_tmp,1);
+ case SQLLVARCHAR:
+ ifx_var_flag(&lvar_tmp, 1);
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :lvar_tmp = DATA;
- fieldleng=ifx_var_getlen(&lvar_tmp);
- if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */
+ fieldleng = ifx_var_getlen(&lvar_tmp);
+ if (fieldleng > 2) { /* fix by Alex Shepherd */
+ fieldleng -= 2;
+ }
if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
RETURN_FALSE;
}
- memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng);
+ memcpy(char_data, ifx_var_getdata(&lvar_tmp), fieldleng);
ifx_var_dealloc(&lvar_tmp);
- add_assoc_stringl(return_value, fieldname, char_data, fieldleng,0);
+ add_assoc_stringl(return_value, fieldname, char_data, fieldleng, 0);
break;
- case SQLBOOL :
+ case SQLBOOL:
$endif;
- case SQLVCHAR :
- case SQLNVCHAR :
- case SQLCHAR :
- case SQLNCHAR :
+ case SQLVCHAR:
+ case SQLNVCHAR:
+ case SQLCHAR:
+ case SQLNCHAR:
if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
RETURN_FALSE;
@@ -1852,21 +2015,28 @@ $endif;
char_data = NULL;
break;
$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED :
- bid_b=Ifx_Result->res_id[locind];
- add_assoc_long(return_value,fieldname,bid_b);
- bid=php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
- slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
+ case SQLUDTFIXED:
+ bid_b = Ifx_Result->res_id[locind];
+ add_assoc_long(return_value, fieldname,bid_b);
+ bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
+ slocator = php_intifxus_get_slobloc(bid, &EG(regular_list) TSRMLS_CC);
EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;
- Ifx_Result->res_id[locind]=bid;
+ Ifx_Result->res_id[locind] = bid;
++locind;
break;
$endif;
- case SQLBYTES :
- case SQLTEXT :
- bid_b=Ifx_Result->res_id[locind];
- locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC);
+ case SQLBYTES:
+ case SQLTEXT:
+ bid_b = Ifx_Result->res_id[locind];
+ locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
++locind;
+
+ if (IFXG(blobinfile) == 0) {
+ php_intifx_init_blob(locator_b, BLMODE_INMEM, 0 TSRMLS_CC);
+ } else {
+ php_intifx_init_blob(locator_b, BLMODE_INFILE, 0 TSRMLS_CC);
+ }
+
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA;
/* work around for ESQL/C bug with NULL values and BLOBS */
@@ -1876,20 +2046,22 @@ $endif;
/* normal check for NULL values */
if (locator_b->loc_indicator == -1) {
- if((IFXG(textasvarchar)==0 && fieldtype==SQLTEXT)
- || (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) {
- bid_b=Ifx_Result->res_id[locind];
- bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
- php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC);
- add_assoc_long(return_value,fieldname,bid);
+ if ((IFXG(textasvarchar) == 0 && fieldtype == SQLTEXT) ||
+ (IFXG(byteasvarchar) == 0 && fieldtype == SQLBYTES)
+ ) {
+ bid = php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
+ php_intifx_update_blob(bid,nullstr, strlen(nullstr), &EG(regular_list) TSRMLS_CC);
+ add_assoc_long(return_value, fieldname, bid);
+ php_intifx_release_blob(locator_b TSRMLS_CC);
break;
}
- if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
+ if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
+ || (fieldtype == SQLUDTFIXED)
$endif;
) {
add_assoc_string(return_value, fieldname, nullstr, DUP);
+ php_intifx_release_blob(locator_b TSRMLS_CC);
break;
}
}
@@ -1899,44 +2071,37 @@ $endif;
RETURN_FALSE;
}
- /* copy blob */
- bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
-
- /* and generate new tempfile for next row */
- if(locator_b->loc_loctype==LOCFNAME) {
- blobfilename=php_intifx_create_tmpfile(bid_b TSRMLS_CC);
- php_intifx_update_blob(bid_b,blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC);
- efree(blobfilename);
- EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator_b;
- }
-
/* return blob as VARCHAR ? */
/* note that in case of "blobinfile" */
/* you get the file name */
/* a new one for every row ! */
- if((IFXG(textasvarchar) !=0
- && fieldtype==SQLTEXT)
- || (IFXG(byteasvarchar)!=0
- && fieldtype==SQLBYTES)) {
-
+ if ((IFXG(textasvarchar) != 0 && fieldtype == SQLTEXT) ||
+ (IFXG(byteasvarchar) != 0 && fieldtype == SQLBYTES)
+ ) {
char *content;
long lg;
- lg=php_intifx_get_blob(bid, &EG(regular_list), &content TSRMLS_CC);
- if(content == NULL || lg < 0) {
- add_assoc_string(return_value,fieldname,nullstr,DUP);
+ lg = php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC);
+ if (content == NULL || lg < 0) {
+ add_assoc_string(return_value, fieldname, nullstr, DUP);
} else {
- add_assoc_stringl(return_value,fieldname,content,lg,DUP);
+ add_assoc_stringl(return_value, fieldname, content, lg, DUP);
}
- php_intifx_free_blob(bid, &EG(regular_list) TSRMLS_CC);
+
+ php_intifx_release_blob(locator_b TSRMLS_CC);
break;
}
+ /* copy blob */
+ bid = php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
+
/* no, return as blob id */
- add_assoc_long(return_value,fieldname,bid);
+ add_assoc_long(return_value, fieldname, bid);
+ php_intifx_release_blob(locator_b TSRMLS_CC);
break;
- default :
- sprintf(string_data,"ESQL/C : %s : unsupported field type[%d]", fieldname, fieldleng);
+
+ default:
+ sprintf(string_data, "ESQL/C : %s : unsupported field type[%d]", fieldname, fieldleng);
add_assoc_string(return_value, fieldname, string_data, DUP);
break;
}
@@ -2003,13 +2168,13 @@ EXEC SQL END DECLARE SECTION;
switch (ZEND_NUM_ARGS()) {
case 1:
- if (zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (zend_get_parameters_ex(1, &result) == FAILURE) {
RETURN_FALSE;
}
table_options = NULL;
break;
case 2:
- if (zend_get_parameters_ex(2, &result, &arg2)==FAILURE) {
+ if (zend_get_parameters_ex(2, &result, &arg2) == FAILURE) {
RETURN_FALSE;
}
table_options = (*arg2)->value.str.val;
@@ -2023,7 +2188,7 @@ EXEC SQL END DECLARE SECTION;
ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
+ if (strcmp(Ifx_Result->cursorid, "") == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
RETURN_FALSE;
}
@@ -2053,7 +2218,7 @@ EXEC SQL END DECLARE SECTION;
break;
}
- if(!moredata) {
+ if (!moredata) {
php_printf("<h2>No rows found</h2>\n");
RETURN_LONG(0);
}
@@ -2104,7 +2269,7 @@ EXEC SQL END DECLARE SECTION;
}
if (indicator == -1) { /* NULL */
- if(fieldtype==SQLTEXT || fieldtype==SQLBYTES) {
+ if (fieldtype == SQLTEXT || fieldtype == SQLBYTES) {
++locind;
}
php_printf("<td>%s</td>", nullstr);
@@ -2112,45 +2277,45 @@ EXEC SQL END DECLARE SECTION;
}
switch (fieldtype) {
- case SQLSERIAL :
- case SQLINT :
+ case SQLSERIAL:
+ case SQLINT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int_data = DATA;
long_data = int_data;
- sprintf(string_data,"%ld", long_data);
+ sprintf(string_data, "%ld", long_data);
php_printf("<td>%s</td>", string_data);
break;
- case SQLSMINT :
+ case SQLSMINT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :short_data = DATA;
long_data = short_data;
- sprintf(string_data,"%ld", long_data);
+ sprintf(string_data, "%ld", long_data);
php_printf("<td>%s</td>", string_data);
break;
- case SQLDECIMAL :
- case SQLMONEY :
+ case SQLDECIMAL:
+ case SQLMONEY:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dec_data = DATA;
memset(string_data, 0x20, 64);
dectoasc(&dec_data, string_data, 63, -1);
- for (p =string_data; *p != ' '; ++p) ;
+ for (p = string_data; *p != ' '; ++p) ;
*p = 0;
php_printf("<td>%s</td>", string_data);
break;
- case SQLSMFLOAT :
+ case SQLSMFLOAT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :float_data = DATA;
double_data = float_data;
- sprintf(string_data,"%17.17g", double_data);
+ sprintf(string_data, "%17.17g", double_data);
php_printf("<td>%s</td>", string_data);
break;
- case SQLFLOAT :
+ case SQLFLOAT:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :double_data = DATA;
- sprintf(string_data,"%17.17g", double_data);
+ sprintf(string_data, "%17.17g", double_data);
php_printf("<td>%s</td>", string_data);
break;
- case SQLDATE :
+ case SQLDATE:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :date_data = DATA;
rdatestr(date_data, string_data);
php_printf("<td>%s</td>", string_data);
break;
- case SQLDTIME :
+ case SQLDTIME:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dt_data = DATA;
dttoasc(&dt_data, string_data);
php_printf("<td>%s</td>", string_data);
@@ -2162,35 +2327,36 @@ EXEC SQL END DECLARE SECTION;
break;
$ifdef HAVE_IFX_IUS;
case SQLSERIAL8:
- case SQLINT8 :
+ case SQLINT8:
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int8_var = DATA;
memset(string_data, ' ', sizeof(string_data));
- ifx_int8toasc(&int8_var,string_data,200);
- p = string_data; /* rtrim string_data */
+ ifx_int8toasc(&int8_var, string_data, 200);
+ p = string_data; /* rtrim string_data */
while ((*p != ' ') && (p < &string_data[sizeof(string_data) - 1])) ++p;
- *p = 0;
+ *p = 0;
php_printf("<td>%s</td>", string_data);
break;
case SQLLVARCHAR:
- ifx_var_flag(&lvar_tmp,1);
+ ifx_var_flag(&lvar_tmp, 1);
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :lvar_tmp = DATA;
- fieldleng=ifx_var_getlen(&lvar_tmp);
- if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */
-
+ fieldleng = ifx_var_getlen(&lvar_tmp);
+ if (fieldleng > 2) { /* fix by Alex Shepherd */
+ fieldleng -= 2;
+ }
if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
RETURN_FALSE;
}
- memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng);
+ memcpy(char_data, ifx_var_getdata(&lvar_tmp), fieldleng);
ifx_var_dealloc(&lvar_tmp);
- add_assoc_stringl(return_value, fieldname, char_data, fieldleng,0);
+ add_assoc_stringl(return_value, fieldname, char_data, fieldleng, 0);
break;
- case SQLBOOL :
+ case SQLBOOL:
$endif;
- case SQLCHAR :
- case SQLVCHAR :
- case SQLNCHAR :
- case SQLNVCHAR :
+ case SQLCHAR:
+ case SQLVCHAR:
+ case SQLNCHAR:
+ case SQLNVCHAR:
if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
RETURN_FALSE;
@@ -2206,9 +2372,9 @@ $endif;
case SQLTEXT :
/* treated always as a long VARCHAR here */
/* if blobinbfile, too bad */
- bid_b=Ifx_Result->res_id[locind];
+ bid_b = Ifx_Result->res_id[locind];
++locind;
- locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC);
+ locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_CC);
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA;
/* work around for ESQL/C bug with NULL values and BLOBS */
@@ -2218,9 +2384,9 @@ $endif;
/* normal check for NULL values */
if (locator_b->loc_indicator == -1) {
- if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
+ if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)
$ifdef HAVE_IFX_IUS;
- || (fieldtype==SQLUDTFIXED)
+ || (fieldtype == SQLUDTFIXED)
$endif;
) {
php_printf("<td>%s</td>", nullstr);
@@ -2233,9 +2399,9 @@ $endif;
}
/* get blob contents */
- lg=php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC);
+ lg = php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC);
- if(content==NULL || lg<0) {
+ if (content == NULL || lg < 0) {
php_printf("<td>%s</td>", nullstr);
} else {
/* need an extra byte for string terminator */
@@ -2245,7 +2411,7 @@ $endif;
RETURN_FALSE;
}
memcpy(copy_content, content, lg);
- copy_content[lg]=0;
+ copy_content[lg] = 0;
php_printf("<td>%s</td>", copy_content);
free(copy_content);
}
@@ -2263,6 +2429,7 @@ $endif;
continue;
}
php_printf("</tr>\n");
+
/* fetch next row */
EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
switch (ifx_check()) {
@@ -2315,7 +2482,7 @@ EXEC SQL END DECLARE SECTION;
int num_fields;
char *p;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -2323,7 +2490,7 @@ EXEC SQL END DECLARE SECTION;
ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
+ if (strcmp(Ifx_Result->cursorid, "") == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
RETURN_FALSE;
}
@@ -2347,7 +2514,7 @@ EXEC SQL END DECLARE SECTION;
RETURN_FALSE;
}
- p = fieldname; /* rtrim fieldname */
+ p = fieldname; /* rtrim fieldname */
while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
*p = 0;
if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
@@ -2355,74 +2522,74 @@ EXEC SQL END DECLARE SECTION;
}
switch (fieldtype) {
- case SQLSERIAL :
+ case SQLSERIAL:
char_data = "SQLSERIAL";
break;
- case SQLINT :
+ case SQLINT:
char_data = "SQLINT";
break;
- case SQLSMINT :
+ case SQLSMINT:
char_data = "SQLSMINT";
break;
- case SQLDECIMAL :
+ case SQLDECIMAL:
char_data = "SQLDECIMAL";
break;
- case SQLMONEY :
+ case SQLMONEY:
char_data = "SQLMONEY";
break;
- case SQLSMFLOAT :
+ case SQLSMFLOAT:
char_data = "SQLSMFLOAT";
break;
- case SQLFLOAT :
+ case SQLFLOAT:
char_data = "SQLFLOAT";
break;
- case SQLDATE :
+ case SQLDATE:
char_data = "SQLDATE";
break;
- case SQLDTIME :
+ case SQLDTIME:
char_data = "SQLDTIME";
break;
case SQLINTERVAL:
char_data = "SQLINTERVAL";
break;
- case SQLCHAR :
+ case SQLCHAR:
char_data = "SQLCHAR";
break;
- case SQLVCHAR :
+ case SQLVCHAR:
char_data = "SQLVCHAR";
break;
- case SQLNCHAR :
+ case SQLNCHAR:
char_data = "SQLNCHAR";
break;
- case SQLNVCHAR :
+ case SQLNVCHAR:
char_data = "SQLNVCHAR";
break;
- case SQLTEXT :
+ case SQLTEXT:
char_data = "SQLTEXT";
break;
- case SQLBYTES :
+ case SQLBYTES:
char_data = "SQLBYTES";
break;
$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED :
+ case SQLUDTFIXED:
char_data = "SQLUDTFIXED";
break;
- case SQLBOOL :
+ case SQLBOOL:
char_data = "SQLBOOL";
break;
- case SQLINT8 :
+ case SQLINT8:
char_data = "SQLINT8";
break;
- case SQLSERIAL8 :
+ case SQLSERIAL8:
char_data = "SQLSERIAL8";
break;
- case SQLLVARCHAR :
+ case SQLLVARCHAR:
char_data = "SQLLVARCHAR";
break;
$endif;
- default :
- char_data=emalloc(20);
- sprintf(char_data,"ESQL/C : %i",fieldtype);
+ default:
+ char_data = emalloc(20);
+ sprintf(char_data, "ESQL/C : %i", fieldtype);
break;
} /* switch (fieldtype) */
@@ -2471,7 +2638,7 @@ EXEC SQL END DECLARE SECTION;
char string_data[256];
char *p;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -2479,7 +2646,7 @@ EXEC SQL END DECLARE SECTION;
ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
- if (strcmp(Ifx_Result->cursorid,"") == 0) {
+ if (strcmp(Ifx_Result->cursorid, "") == 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
RETURN_FALSE;
}
@@ -2510,7 +2677,7 @@ EXEC SQL END DECLARE SECTION;
RETURN_FALSE;
}
- p = fieldname; /* rtrim fieldname */
+ p = fieldname; /* rtrim fieldname */
while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;
*p = 0;
if (strcmp("(expression)", fieldname) == 0) { /* stored proc */
@@ -2518,78 +2685,78 @@ EXEC SQL END DECLARE SECTION;
}
switch (fieldtype) {
- case SQLSERIAL :
+ case SQLSERIAL:
char_data = "SQLSERIAL";
break;
- case SQLINT :
+ case SQLINT:
char_data = "SQLINT";
break;
- case SQLSMINT :
+ case SQLSMINT:
char_data = "SQLSMINT";
break;
- case SQLDECIMAL :
+ case SQLDECIMAL:
char_data = "SQLDECIMAL";
break;
- case SQLMONEY :
+ case SQLMONEY:
char_data = "SQLMONEY";
break;
- case SQLSMFLOAT :
+ case SQLSMFLOAT:
char_data = "SQLSMFLOAT";
break;
- case SQLFLOAT :
+ case SQLFLOAT:
char_data = "SQLFLOAT";
break;
- case SQLDATE :
+ case SQLDATE:
char_data = "SQLDATE";
break;
- case SQLDTIME :
+ case SQLDTIME:
char_data = "SQLDTIME";
break;
case SQLINTERVAL:
char_data = "SQLINTERVAL";
break;
- case SQLCHAR :
+ case SQLCHAR:
char_data = "SQLCHAR";
break;
- case SQLVCHAR :
+ case SQLVCHAR:
char_data = "SQLVCHAR";
break;
- case SQLTEXT :
+ case SQLTEXT:
char_data = "SQLTEXT";
break;
- case SQLBYTES :
+ case SQLBYTES:
char_data = "SQLBYTES";
break;
- case SQLNCHAR :
+ case SQLNCHAR:
char_data = "SQLNCHAR";
break;
- case SQLNVCHAR :
+ case SQLNVCHAR:
char_data = "SQLNVCHAR";
break;
$ifdef HAVE_IFX_IUS;
- case SQLUDTFIXED :
+ case SQLUDTFIXED:
char_data = "SQLUDTFIXED";
break;
- case SQLBOOL :
+ case SQLBOOL:
char_data = "SQLBOOL";
break;
- case SQLINT8 :
+ case SQLINT8:
char_data = "SQLINT8";
break;
- case SQLSERIAL8 :
+ case SQLSERIAL8:
char_data = "SQLSERIAL8";
break;
- case SQLLVARCHAR :
+ case SQLLVARCHAR:
char_data = "SQLLVARCHAR";
break;
$endif;
- default :
- char_data=emalloc(20);
- sprintf(char_data,"ESQL/C : %i",fieldtype);
+ default:
+ char_data = emalloc(20);
+ sprintf(char_data, "ESQL/C : %i", fieldtype);
break;
} /* switch (fieldtype) */
- sprintf(string_data,"%s;%d;%d;%d;%c", char_data, size, precision, scale, (isnullable?'Y':'N'));
+ sprintf(string_data, "%s;%d;%d;%d;%c", char_data, size, precision, scale, (isnullable ? 'Y' : 'N'));
add_assoc_string(return_value, fieldname, string_data, DUP);
} /* for() */
}
@@ -2610,7 +2777,7 @@ PHP_FUNCTION(ifx_num_rows)
zval **result;
IFX_RES *Ifx_Result;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -2640,7 +2807,7 @@ PHP_FUNCTION(ifx_getsqlca)
char fieldname[16];
int e;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -2654,7 +2821,7 @@ PHP_FUNCTION(ifx_getsqlca)
/* fill array with 6 fields sqlerrd0 .. sqlerrd5 */
/* each ESQLC call saves these sqlca values */
for (e = 0; e < 6; e++) {
- sprintf(fieldname,"sqlerrd%d", e);
+ sprintf(fieldname, "sqlerrd%d", e);
add_assoc_long(return_value, fieldname, Ifx_Result->sqlerrd[e]);
}
}
@@ -2675,7 +2842,7 @@ PHP_FUNCTION(ifx_num_fields)
zval **result;
IFX_RES *Ifx_Result;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -2712,7 +2879,7 @@ EXEC SQL END DECLARE SECTION;
int i;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -2721,9 +2888,9 @@ EXEC SQL END DECLARE SECTION;
ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
for (i = 0; i < MAX_RESID; ++i) {
- if (Ifx_Result->res_id[i]>0) {
- php_intifx2_free_blob(Ifx_Result->res_id[i],&EG(regular_list) TSRMLS_CC);
- Ifx_Result->res_id[i]=-1;
+ if (Ifx_Result->res_id[i] > 0) {
+ zend_list_delete(Ifx_Result->res_id[i]);
+ Ifx_Result->res_id[i] = -1;
}
}
@@ -2765,8 +2932,8 @@ static long php_intifx_getType(long id, HashTable *list TSRMLS_DC)
IFX_IDRES *Ifx_res;
int type;
- Ifx_res = (IFX_IDRES *) zend_list_find(id,&type);
- if (type!=le_idresult) {
+ Ifx_res = (IFX_IDRES *) zend_list_find(id, &type);
+ if (type != le_idresult) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix id-result index", id);
return -1;
}
@@ -2793,7 +2960,7 @@ PHP_FUNCTION(ifx_create_blob)
long id;
long mode,type;
- if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &ptype,&pmode,&pparam) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &ptype, &pmode, &pparam) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -2802,18 +2969,18 @@ PHP_FUNCTION(ifx_create_blob)
convert_to_long_ex(ptype);
type = Z_LVAL_PP(ptype);
- if(type != 0) {
+ if (type != 0) {
type = TYPE_BLTEXT;
}
mode = Z_LVAL_PP(pmode);
- if(mode != 0) {
+ if (mode != 0) {
mode=BLMODE_INFILE;
}
- id=php_intifx_create_blob(type,mode,Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC);
+ id = php_intifx_create_blob(type, mode, Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC);
- if(id < 0) {
+ if (id < 0) {
RETURN_FALSE;
}
RETURN_LONG(id);
@@ -2824,7 +2991,7 @@ PHP_FUNCTION(ifx_create_blob)
* internal function
* long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC)
*
- * creates an blob-object
+ * creates an blob-object for the PHP Resource list
* type: 1=TEXT, 0=BYTE
* mode: blob-object holds 0=the content in momory, 1=content in file
* param: if mode=0: pointer to the content
@@ -2839,58 +3006,165 @@ static long php_intifx_create_blob(long type, long mode, char* param, long len,
IFX_IDRES *Ifx_blob;
Ifx_blob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_blob==NULL) {
+ if (Ifx_blob == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
return -1;
}
memset(Ifx_blob, 0, sizeof(IFX_IDRES));
- if(type==0 ) {
- Ifx_blob->type=TYPE_BLBYTE;
+ if (type == 0 ) {
+ Ifx_blob->type = TYPE_BLBYTE;
} else {
- Ifx_blob->type=TYPE_BLTEXT;
+ Ifx_blob->type = TYPE_BLTEXT;
}
- Ifx_blob->BLOB.mode=(int)mode;
+ Ifx_blob->BLOB.mode = (int) mode;
- if(mode==BLMODE_INMEM) {
- if(len>=0) {
- char *content=emalloc(len);
- if(content==NULL) {
+ if (php_intifx_init_blob(&Ifx_blob->BLOB.blob_data, mode, 1 TSRMLS_CC) < 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
+ return -1;
+ }
+
+ if (mode == BLMODE_INMEM) {
+ if (len >= 0) {
+ char *content = emalloc(len);
+ if (content == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
return -1;
}
memcpy(content,param,len);
- Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY;
- Ifx_blob->BLOB.blob_data.loc_buffer=content;
- Ifx_blob->BLOB.blob_data.loc_bufsize=len;
- Ifx_blob->BLOB.blob_data.loc_size=len;
- Ifx_blob->BLOB.blob_data.loc_mflags=0;
- Ifx_blob->BLOB.blob_data.loc_oflags=0;
- } else {
- Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY;
- Ifx_blob->BLOB.blob_data.loc_buffer=NULL;
- Ifx_blob->BLOB.blob_data.loc_bufsize=-1;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
- Ifx_blob->BLOB.blob_data.loc_mflags=0;
- Ifx_blob->BLOB.blob_data.loc_oflags=0;
+ Ifx_blob->BLOB.blob_data.loc_buffer = content;
+ Ifx_blob->BLOB.blob_data.loc_bufsize = len;
+ Ifx_blob->BLOB.blob_data.loc_size = len;
+ Ifx_blob->BLOB.blob_data.loc_oflags = 0;
}
- } else { /* mode = BLMODE_INFILE */
- char *filename=emalloc(len+1);
- if(filename==NULL) {
+ } else {
+
+ if (*param && param != "") {
+
+ char *filename;
+
+ if (Ifx_blob->BLOB.blob_data.loc_fname != NULL) {
+ unlink(Ifx_blob->BLOB.blob_data.loc_fname);
+ efree(Ifx_blob->BLOB.blob_data.loc_fname);
+ }
+ if ((filename = emalloc(len + 1)) == NULL) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
+ return -1;
+ }
+ memcpy(filename, param, len);
+ filename[len] = 0;
+ Ifx_blob->BLOB.blob_data.loc_fname = filename;
+ Ifx_blob->BLOB.blob_data.loc_size = -1;
+ }
+ }
+
+ return zend_list_insert(Ifx_blob,le_idresult);
+}
+
+static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC)
+{
+ if (new) {
+ memset(blob, 0, sizeof(loc_t));
+ }
+
+ blob->loc_status = 0;
+ blob->loc_type = SQLTEXT;
+ blob->loc_xfercount = 0;
+ blob->loc_indicator = 0;
+
+ if (mode == BLMODE_INMEM) {
+ return php_intifx_init_blob_inmem(blob, new TSRMLS_CC);
+ } else {
+ return php_intifx_init_blob_infile(blob, new TSRMLS_CC);
+ }
+
+ return 1;
+}
+
+static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC)
+{
+ blob->loc_loctype = LOCMEMORY;
+
+ if (new) {
+ blob->loc_buffer = NULL;
+ blob->loc_bufsize = -1;
+ blob->loc_size = 0;
+ }
+
+ blob->loc_mflags = 0;
+ blob->loc_oflags = 0;
+
+ return 1;
+}
+
+static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC)
+{
+ char *filename;
+
+ if (new) {
+
+ filename = php_intifx_create_tmpfile(TSRMLS_C);
+
+ if (filename == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
return -1;
}
- memcpy(filename,param,len);
- filename[len]=0;
- Ifx_blob->BLOB.blob_data.loc_loctype=LOCFNAME;
- Ifx_blob->BLOB.blob_data.loc_fname=filename;
- Ifx_blob->BLOB.blob_data.loc_oflags=LOC_WONLY;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
+
+ blob->loc_fname = filename;
+ blob->loc_size = 0;
+ blob->loc_fd = -1;
+ }
+
+ return 1;
+}
+
+static void php_intifx_release_blob(loc_t *blob TSRMLS_DC)
+{
+
+#if IFX_VERSION < 724 /* this Informix memory leak is fixed from 7.24 on */
+ /* according to the current PERL DBD::Informix */
+ /* and otherwise I get segmenation violations with 7.30 */
+
+ /* Not set to NULL, so function will free resources */
+#else
+ /* Set to NULL so php_intifx_release_blob() doens't try to free stuff it shouldn't */
+
+ if (blob->loc_loctype == LOCMEMORY) {
+ blob->loc_buffer = NULL;
+ }
+#endif
+
+ switch (blob->loc_loctype) {
+
+ case LOCMEMORY:
+ if (blob->loc_buffer != NULL) {
+ efree(blob->loc_buffer);
+ blob->loc_buffer = NULL;
+ }
+ break;
+
+ case LOCFNAME:
+ if (blob->loc_fd >= 0) {
+ close(blob->loc_fd);
+ }
+ blob->loc_fd = -1;
+
+ if (blob->loc_fname != NULL) {
+ unlink(blob->loc_fname);
+ efree(blob->loc_fname);
+ blob->loc_fname = NULL;
+ }
+ break;
+
+ case LOCFILE:
+ case LOCUSER:
+ default:
+ break;
}
- return zend_list_insert(Ifx_blob,le_idresult);
}
+
/* ----------------------------------------------------------------------
** int ifx_copy_blob(int bid)
**
@@ -2908,13 +3182,14 @@ PHP_FUNCTION(ifx_copy_blob)
zval **pbid;
long newid;
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pbid)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
- newid=php_intifx_copy_blob(Z_LVAL_PP(pbid),&EG(regular_list) TSRMLS_CC);
- if(newid<0) {
+ newid = php_intifx_copy_blob(Z_LVAL_PP(pbid), &EG(regular_list) TSRMLS_CC);
+
+ if (newid < 0) {
RETURN_FALSE;
}
RETURN_LONG(newid);
@@ -2925,73 +3200,65 @@ PHP_FUNCTION(ifx_copy_blob)
* internal function
* long php_intifx_copy_blob(long bid, HashTable *list)
*
- * duplicates the given blob-object
+ * duplicates the given blob-object in the PHP resource list
* bid: Id of Blobobject
* list: internal hashlist of php
*
* return -1 on error otherwise the new Blob-Object-id
* ----------------------------------------------------------------------
*/
-static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC)
+static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC)
{
IFX_IDRES *Ifx_blob, *Ifx_blob_orig;
loc_t *locator, *locator_orig;
int type;
- Ifx_blob_orig = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || !(Ifx_blob_orig->type==TYPE_BLBYTE || Ifx_blob_orig->type==TYPE_BLTEXT)) {
+ Ifx_blob_orig = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || !(Ifx_blob_orig->type == TYPE_BLBYTE || Ifx_blob_orig->type == TYPE_BLTEXT)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
return -1;
}
- Ifx_blob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_blob==NULL) {
+ Ifx_blob = emalloc(sizeof(IFX_IDRES));
+ if (Ifx_blob == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
return -1;
}
memset(Ifx_blob, 0, sizeof(IFX_IDRES));
- Ifx_blob->type=Ifx_blob_orig->type;
- Ifx_blob->BLOB.mode=Ifx_blob_orig->BLOB.mode;
+ Ifx_blob->type = Ifx_blob_orig->type;
+ Ifx_blob->BLOB.mode = Ifx_blob_orig->BLOB.mode;
- locator=&(Ifx_blob->BLOB.blob_data);
- locator_orig=&(Ifx_blob_orig->BLOB.blob_data);
+ locator = &(Ifx_blob->BLOB.blob_data);
+ locator_orig = &(Ifx_blob_orig->BLOB.blob_data);
+
+ if (php_intifx_init_blob(locator, Ifx_blob->BLOB.mode, 1 TSRMLS_CC) < 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
+ return -1;
+ }
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
+ if (Ifx_blob->BLOB.mode == BLMODE_INMEM) {
char *content;
- if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) {
- if((content=emalloc(locator_orig->loc_size))==NULL) {
+ if (locator_orig->loc_bufsize >= 0 && locator_orig->loc_buffer != NULL) {
+ if ((content = emalloc(locator_orig->loc_size)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
return -1;
}
- memcpy(content,locator_orig->loc_buffer, locator_orig->loc_size);
- locator->loc_buffer=content;
- locator->loc_bufsize=locator_orig->loc_size;
- locator->loc_size=locator_orig->loc_size;
- } else {
- locator->loc_buffer=NULL;
- locator->loc_bufsize=-1;
- locator->loc_size=-1;
+ memcpy(content,locator_orig->loc_buffer, locator_orig->loc_bufsize);
+ locator->loc_buffer = content;
+ locator->loc_bufsize = locator_orig->loc_bufsize;
+ locator->loc_size = locator_orig->loc_size;
}
- locator->loc_loctype=LOCMEMORY;
- locator->loc_mflags=0;
- locator->loc_oflags=0;
} else { /* BLMODE_INFILE */
- char *filename;
- if((filename=emalloc(strlen(locator_orig->loc_fname)+1))==NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
- return -1;
+ if (locator_orig->loc_size) {
+ php_copy_file(locator_orig->loc_fname, locator->loc_fname TSRMLS_CC);
}
-
- strcpy(filename,locator_orig->loc_fname);
- locator->loc_loctype=LOCFNAME;
- locator->loc_fname=filename;
- locator->loc_size=-1;
- locator->loc_oflags=locator_orig->loc_oflags;
+
}
- return zend_list_insert(Ifx_blob,le_idresult);
+
+ return zend_list_insert(Ifx_blob, le_idresult);
}
/* ----------------------------------------------------------------------
@@ -3010,13 +3277,13 @@ PHP_FUNCTION(ifx_free_blob)
zval **pid;
long ret;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pid);
- ret=php_intifx_free_blob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC);
- if(ret<0) {
+ ret = php_intifx_free_blob(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC);
+ if (ret < 0) {
RETURN_FALSE;
}
RETURN_TRUE;
@@ -3027,7 +3294,7 @@ PHP_FUNCTION(ifx_free_blob)
* internal function
* long php_intifx_free_blob(long bid, HashTable *list)
*
- * deletes the blob-object
+ * deletes the blob-object from the PHP Resource List
* bid: Id of Blobobject
* list: internal hashlist of php
*
@@ -3040,67 +3307,19 @@ static long php_intifx_free_blob(long bid, HashTable *list TSRMLS_DC)
IFX_IDRES *Ifx_blob;
int type;
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+ Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
return -1;
}
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else {
- efree(Ifx_blob->BLOB.blob_data.loc_buffer);
- }
- } else { /* BLMODE_INFILE */
- if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_fname);
- }
- }
- zend_list_delete(bid);
- efree(Ifx_blob);
- return 0;
-}
-
-/* ----------------------------------------------------------------------
- * internal function
- * long php_intifx2_free_blob(long bid, HashTable *list)
- *
- * deletes the blob-object
- * bid: Id of Blobobject
- * list: internal hashlist of php
- *
- * 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)
- * ----------------------------------------------------------------------
-*/
-static long php_intifx2_free_blob(long bid, HashTable *list TSRMLS_DC)
-{
- IFX_IDRES *Ifx_blob;
- int type;
-
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
+ if (!(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix BYTE or TEXT type", bid);
return -1;
}
-#if IFX_VERSION < 724 /* this Informix memory leak is fixed from 7.24 on */
- /* according to the current PERL DBD::Informix */
- /* and otherwise I get segmenation violations with 7.30 */
-
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else {
- free(Ifx_blob->BLOB.blob_data.loc_buffer);
- }
- } else {
- if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
- efree(Ifx_blob->BLOB.blob_data.loc_fname);
- }
- }
-#endif
-
zend_list_delete(bid);
- efree(Ifx_blob);
+
return 0;
}
@@ -3121,16 +3340,16 @@ PHP_FUNCTION(ifx_get_blob)
char *content;
long len;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
- len=php_intifx_get_blob(Z_LVAL_PP(pbid),&EG(regular_list),&content TSRMLS_CC);
- if(content==NULL || len<0) {
- RETURN_STRING(php_intifx_null(TSRMLS_C),1);
+ len = php_intifx_get_blob(Z_LVAL_PP(pbid), &EG(regular_list), &content TSRMLS_CC);
+ if (content == NULL || len < 0) {
+ RETURN_STRING(php_intifx_null(TSRMLS_C), 1);
}
- RETURN_STRINGL(content,len,1);
+ RETURN_STRINGL(content, len, 1);
}
/* }}} */
@@ -3151,23 +3370,23 @@ static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS
IFX_IDRES *Ifx_blob;
int type;
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+ Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
return -1;
}
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
- *content=Ifx_blob->BLOB.blob_data.loc_buffer;
+ if (Ifx_blob->BLOB.mode == BLMODE_INMEM) {
+ *content = Ifx_blob->BLOB.blob_data.loc_buffer;
return Ifx_blob->BLOB.blob_data.loc_size;
}
- *content=Ifx_blob->BLOB.blob_data.loc_fname;
+ *content = Ifx_blob->BLOB.blob_data.loc_fname;
return strlen(Ifx_blob->BLOB.blob_data.loc_fname);
}
/* ----------------------------------------------------------------------
* internal function
- * loc_t *php_intifx_get_blobloc(long bid, HashTable *list)
+ * loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
*
* returns the blob-locator-structur
* bid: Id of Blobobject
@@ -3180,8 +3399,8 @@ static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
IFX_IDRES *Ifx_blob;
int type;
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+ Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
return NULL;
}
@@ -3189,7 +3408,6 @@ static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
}
-
/* ----------------------------------------------------------------------
** int update_blob(int bid, string content)
**
@@ -3206,13 +3424,13 @@ PHP_FUNCTION(ifx_update_blob)
{
zval **pbid, **pparam;
- if (ZEND_NUM_ARGS() !=2 || zend_get_parameters_ex(2, &pbid,&pparam) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pparam) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
convert_to_string_ex(pparam);
- if(php_intifx_update_blob(Z_LVAL_PP(pbid),Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC) < 0) {
+ if (php_intifx_update_blob(Z_LVAL_PP(pbid), Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC) < 0) {
RETURN_FALSE;
}
RETURN_TRUE;
@@ -3236,48 +3454,48 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l
IFX_IDRES *Ifx_blob;
int type;
- Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+ Ifx_blob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult && !(Ifx_blob->type == TYPE_BLTEXT || Ifx_blob->type == TYPE_BLBYTE)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
return -1;
}
- if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
+ if (Ifx_blob->BLOB.mode == BLMODE_INMEM) {
char *content;
- if(Ifx_blob->BLOB.blob_data.loc_buffer!=NULL) {
+ if (Ifx_blob->BLOB.blob_data.loc_buffer != NULL) {
efree(Ifx_blob->BLOB.blob_data.loc_buffer);
}
- if(len >= 0) {
- if((content=emalloc(len))==NULL) {
+ if (len >= 0) {
+ if ((content = emalloc(len)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
return -1;
}
- memcpy(content,param, len);
- Ifx_blob->BLOB.blob_data.loc_buffer=content;
- Ifx_blob->BLOB.blob_data.loc_bufsize=len;
- Ifx_blob->BLOB.blob_data.loc_size=len;
+ memcpy(content, param, len);
+ Ifx_blob->BLOB.blob_data.loc_buffer = content;
+ Ifx_blob->BLOB.blob_data.loc_bufsize = len;
+ Ifx_blob->BLOB.blob_data.loc_size = len;
} else {
- Ifx_blob->BLOB.blob_data.loc_buffer=NULL;
- Ifx_blob->BLOB.blob_data.loc_bufsize=-1;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
+ Ifx_blob->BLOB.blob_data.loc_buffer = NULL;
+ Ifx_blob->BLOB.blob_data.loc_bufsize = -1;
+ Ifx_blob->BLOB.blob_data.loc_size = -1;
}
- Ifx_blob->BLOB.blob_data.loc_mflags=0;
- Ifx_blob->BLOB.blob_data.loc_oflags=0;
+ Ifx_blob->BLOB.blob_data.loc_mflags = 0;
+ Ifx_blob->BLOB.blob_data.loc_oflags = 0;
} else {
char *filename;
- if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
+ if (Ifx_blob->BLOB.blob_data.loc_fname != NULL) {
efree(Ifx_blob->BLOB.blob_data.loc_fname);
}
- if((filename=emalloc(len+1))==NULL) {
+ if ((filename = emalloc(len + 1)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
return -1;
}
- memcpy(filename,param, len);
- filename[len]=0;
- Ifx_blob->BLOB.blob_data.loc_fname=filename;
- Ifx_blob->BLOB.blob_data.loc_size=-1;
+ memcpy(filename, param, len);
+ filename[len] = 0;
+ Ifx_blob->BLOB.blob_data.loc_fname = filename;
+ Ifx_blob->BLOB.blob_data.loc_size = -1;
}
return 0;
}
@@ -3285,11 +3503,11 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l
/*-------------------------------------------------
* internal function
*
- * php_intifx_create_tmpfile(long bid TSRMLS_DC)
+ * php_intifx_create_tmpfile(TSRMLS_D)
* creates a temporary file to store a blob in
*-------------------------------------------------
*/
-static char* php_intifx_create_tmpfile(long bid TSRMLS_DC)
+static char* php_intifx_create_tmpfile(TSRMLS_D)
{
char filename[10];
char *blobdir;
@@ -3298,20 +3516,151 @@ static char* php_intifx_create_tmpfile(long bid TSRMLS_DC)
FILE *fp;
if ((blobdir = getenv("php_blobdir")) == NULL) {
- blobdir=".";
+ blobdir = ".";
}
- sprintf(filename,"blb%d",(int)bid);
+
+ sprintf(filename, "blb");
if ((fp = php_open_temporary_file(blobdir, filename, &opened_path TSRMLS_CC))) {
fclose(fp);
- retval=estrndup(opened_path, strlen(opened_path));
+ retval = estrndup(opened_path, strlen(opened_path));
+ efree(opened_path);
} else {
- retval=NULL;
+ retval = NULL;
}
return retval;
}
/* ----------------------------------------------------------------------
+ * int php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC)
+ *
+ * Allocates descriptors for input parameters
+ * return 0 for error. 1 for ok
+ * ----------------------------------------------------------------------
+*/
+static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC)
+{
+ EXEC SQL BEGIN DECLARE SECTION;
+ char *i_bind = Ifx_Result->i_descrpid;
+ int bind_size = items;
+ EXEC SQL END DECLARE SECTION;
+
+ if (items > Ifx_Result->numicols) {
+
+ if (Ifx_Result->numicols > 0) {
+ EXEC SQL DEALLOCATE DESCRIPTOR :i_bind;
+ if (ifx_check() < 0) {
+ return 0;
+ }
+ }
+
+ EXEC SQL ALLOCATE DESCRIPTOR :i_bind WITH MAX :bind_size;
+ if (ifx_check() < 0) {
+ return 0;
+ }
+
+ Ifx_Result->numicols = items;
+ }
+
+ return 1;
+}
+
+/* ----------------------------------------------------------------------
+ * int php_intifx_preparse(char *statement TSRMLS_DC)
+ *
+ * Count the placeholders (?) parameters in the statement
+ * return -1 for error. 0 or number of question marks
+ *
+ * Thanks to DBD-Informix
+ *
+ * ----------------------------------------------------------------------
+*/
+static long php_intifx_preparse(char *statement TSRMLS_DC)
+{
+ char end_quote = '\0';
+ char *src;
+ char *dst;
+ int idx = 0;
+ int style = 0;
+ int laststyle = 0;
+ char ch;
+
+ src = statement;
+ dst = statement;
+
+ while ((ch = *src++) != '\0') {
+ if (ch == end_quote) {
+ end_quote = '\0';
+ } else if (end_quote != '\0') {
+ *dst++ = ch;
+ continue;
+ } else if (ch == '\'' || ch == '\"') {
+ end_quote = ch;
+ } else if (ch == '{') {
+ end_quote = '}';
+ } else if (ch == '-' && *src == '-') {
+ end_quote = '\n';
+ }
+
+ if (ch == '?') {
+ /* X/Open standard */
+ *dst++ = '?';
+ idx++;
+ style = 3;
+ } else {
+ /* Perhaps ':=' PL/SQL construct or dbase:table in Informix */
+ /* Or it could be :2 or :22 as part of a DATETIME/INTERVAL */
+ *dst++ = ch;
+ continue;
+ }
+
+ if (laststyle && style != laststyle) {
+ return -1;
+ }
+ laststyle = style;
+ }
+
+ *dst = '\0';
+ return(idx);
+}
+
+/* ----------------------------------------------------------------------
+ * int php_intifx_count_descriptors(char *p_statemid TSRMLS_DC)
+ *
+ * count the number of descriptors allocated for a certain statement
+ * return 384 or number of descriptors
+ * ----------------------------------------------------------------------
+*/
+static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC)
+{
+ EXEC SQL BEGIN DECLARE SECTION;
+ char *statemid = p_statemid;
+ EXEC SQL END DECLARE SECTION;
+
+ struct sqlda *s_da;
+ int ret = 384;
+
+ EXEC SQL DESCRIBE :statemid INTO s_da;
+
+ if (ifx_check() >= 0) {
+
+ ret = s_da->sqld;
+
+ /*
+ * Thanks to DBD-Informix
+ */
+
+#if (ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION < 600))
+ SqlFreeMem(s_da, SQLDA_FREE);
+ } else {
+ free(s_da);
+#endif
+ }
+
+ return ret;
+}
+
+/* ----------------------------------------------------------------------
** void ifx_blobinfile_mode(int mode)
**
** sets the default blob-mode for all select-queries
@@ -3327,12 +3676,12 @@ PHP_FUNCTION(ifx_blobinfile_mode)
{
zval **pmode;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pmode);
- IFXG(blobinfile)=Z_LVAL_PP(pmode);
+ IFXG(blobinfile) = Z_LVAL_PP(pmode);
RETURN_TRUE;
}
/* }}} */
@@ -3353,12 +3702,12 @@ PHP_FUNCTION(ifx_textasvarchar)
{
zval **pmode;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pmode);
- IFXG(textasvarchar)=Z_LVAL_PP(pmode);
+ IFXG(textasvarchar) = Z_LVAL_PP(pmode);
RETURN_TRUE;
}
/* }}} */
@@ -3379,12 +3728,12 @@ PHP_FUNCTION(ifx_byteasvarchar)
{
zval **pmode;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pmode);
- IFXG(byteasvarchar)=Z_LVAL_PP(pmode);
+ IFXG(byteasvarchar) = Z_LVAL_PP(pmode);
RETURN_TRUE;
}
@@ -3404,17 +3753,16 @@ PHP_FUNCTION(ifx_nullformat)
{
zval **pmode;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pmode);
- IFXG(nullformat)=Z_LVAL_PP(pmode);
+ IFXG(nullformat) = Z_LVAL_PP(pmode);
RETURN_TRUE;
}
/* }}} */
-
/* ----------------------------------------------------------------------
* void php_intifx_null()
*
@@ -3426,10 +3774,10 @@ static char* php_intifx_null(TSRMLS_D)
{
char* tmp;
- if(IFXG(nullformat)==0) {
- tmp=IFXG(nullvalue);
+ if (IFXG(nullformat) == 0) {
+ tmp = IFXG(nullvalue);
} else {
- tmp=IFXG(nullstring);
+ tmp = IFXG(nullstring);
}
return tmp;
}
@@ -3450,14 +3798,14 @@ PHP_FUNCTION(ifx_create_char)
zval **pparam;
long id;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pparam) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pparam) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(pparam);
- id=php_intifx_create_char(Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC);
+ id = php_intifx_create_char(Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC);
- if(id < 0) {
+ if (id < 0) {
RETURN_FALSE;
}
RETURN_LONG(id);
@@ -3479,29 +3827,29 @@ static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS
{
IFX_IDRES *Ifx_char;
- Ifx_char=emalloc(sizeof(IFX_IDRES));
- if(Ifx_char==NULL) {
+ Ifx_char = emalloc(sizeof(IFX_IDRES));
+ if (Ifx_char == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
return -1;
}
- Ifx_char->type=TYPE_CHAR;
+ Ifx_char->type = TYPE_CHAR;
- if(param==NULL || len<0) {
- Ifx_char->CHAR.char_data=NULL;
- Ifx_char->CHAR.len=0;
+ if (param == NULL || len < 0) {
+ Ifx_char->CHAR.char_data = NULL;
+ Ifx_char->CHAR.len = 0;
} else {
- Ifx_char->CHAR.char_data=emalloc(len+1);
- if(Ifx_char->CHAR.char_data==NULL) {
+ Ifx_char->CHAR.char_data = emalloc(len + 1);
+ if (Ifx_char->CHAR.char_data == NULL) {
efree(Ifx_char);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
return -1;
}
- memcpy(Ifx_char->CHAR.char_data,param,len);
- Ifx_char->CHAR.char_data[len]=0;
- Ifx_char->CHAR.len=len;
+ memcpy(Ifx_char->CHAR.char_data, param,len);
+ Ifx_char->CHAR.char_data[len] = 0;
+ Ifx_char->CHAR.len = len;
}
- return zend_list_insert(Ifx_char,le_idresult);
+ return zend_list_insert(Ifx_char, le_idresult);
}
/* ----------------------------------------------------------------------
@@ -3521,16 +3869,16 @@ PHP_FUNCTION(ifx_get_char)
char *content;
long len;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
- len=php_intifx_get_char(Z_LVAL_PP(pbid),&EG(regular_list),&content TSRMLS_CC);
- if(content==NULL || len < 0) {
- RETURN_STRING("",1);
+ len = php_intifx_get_char(Z_LVAL_PP(pbid), &EG(regular_list), &content TSRMLS_CC);
+ if (content == NULL || len < 0) {
+ RETURN_STRING("", 1);
}
- RETURN_STRINGL(content,len,1);
+ RETURN_STRINGL(content, len, 1);
}
/* }}} */
@@ -3546,18 +3894,19 @@ PHP_FUNCTION(ifx_get_char)
* returns the pointer to the content in char** content and the amount of content in bytes
* ----------------------------------------------------------------------
*/
+
static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS_DC)
{
IFX_IDRES *Ifx_char;
int type;
- Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
+ Ifx_char = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult && !(Ifx_char->type == TYPE_CHAR)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
return -1;
}
- *content=Ifx_char->CHAR.char_data;
+ *content = Ifx_char->CHAR.char_data;
return Ifx_char->CHAR.len;
}
@@ -3576,12 +3925,12 @@ PHP_FUNCTION(ifx_free_char)
{
zval **pid;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pid);
- if(php_intifx_free_char(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) {
+ if (php_intifx_free_char(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC) < 0) {
RETURN_FALSE;
}
RETURN_TRUE;
@@ -3590,7 +3939,7 @@ PHP_FUNCTION(ifx_free_char)
/* ----------------------------------------------------------------------
* internal function
- * long php_intifx_free_char(long bid, HashTable *list)
+ * long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC)
*
* deletes the char-object
* bid: Id of Charobject
@@ -3604,13 +3953,13 @@ static long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC)
IFX_IDRES *Ifx_char;
int type;
- Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
+ Ifx_char = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult && !(Ifx_char->type == TYPE_CHAR)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
return -1;
}
- if(Ifx_char->CHAR.char_data!=NULL) {
+ if (Ifx_char->CHAR.char_data != NULL) {
efree(Ifx_char->CHAR.char_data);
}
zend_list_delete(bid);
@@ -3634,13 +3983,13 @@ PHP_FUNCTION(ifx_update_char)
{
zval **pbid, **pparam;
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid,&pparam) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pparam) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
convert_to_string_ex(pparam);
- if(php_intifx_update_char(Z_LVAL_PP(pbid),Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC) < 0) {
+ if (php_intifx_update_char(Z_LVAL_PP(pbid), Z_STRVAL_PP(pparam), Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC) < 0) {
RETURN_FALSE;
}
RETURN_TRUE;
@@ -3664,30 +4013,30 @@ static long php_intifx_update_char(long bid, char* param, long len, HashTable *l
IFX_IDRES *Ifx_char;
int type;
- Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
+ Ifx_char = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult && !(Ifx_char->type == TYPE_CHAR)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
return -1;
}
- if(Ifx_char->CHAR.char_data!=NULL) {
+ if (Ifx_char->CHAR.char_data != NULL) {
efree(Ifx_char->CHAR.char_data);
}
- Ifx_char->CHAR.char_data=NULL;
- Ifx_char->CHAR.len=0;
+ Ifx_char->CHAR.char_data = NULL;
+ Ifx_char->CHAR.len = 0;
- if(param==NULL || len<0) {
- Ifx_char->CHAR.char_data=NULL;
- Ifx_char->CHAR.len=0;
+ if (param == NULL || len < 0) {
+ Ifx_char->CHAR.char_data = NULL;
+ Ifx_char->CHAR.len = 0;
} else {
- Ifx_char->CHAR.char_data=emalloc(len+1);
- if(Ifx_char->CHAR.char_data==NULL) {
+ Ifx_char->CHAR.char_data = emalloc(len + 1);
+ if (Ifx_char->CHAR.char_data == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
return -1;
}
- memcpy(Ifx_char->CHAR.char_data,param,len);
- Ifx_char->CHAR.char_data[len]=0;
- Ifx_char->CHAR.len=len;
+ memcpy(Ifx_char->CHAR.char_data, param,len);
+ Ifx_char->CHAR.char_data[len] = 0;
+ Ifx_char->CHAR.len = len;
}
return 0;
}
@@ -3709,31 +4058,38 @@ PHP_FUNCTION(ifxus_create_slob)
{
zval **pmode;
long id;
- long mode,create_mode;
+ long mode, create_mode;
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pmode)==FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
WRONG_PARAM_COUNT;
}
+
convert_to_long_ex(pmode);
- mode=Z_LVAL_PP(pmode);
+ mode = Z_LVAL_PP(pmode);
- create_mode=0;
- if((mode&1) !=0)
- create_mode|=LO_RDONLY;
- if((mode&2) !=0)
- create_mode|=LO_WRONLY;
- if((mode&4) !=0)
- create_mode|=LO_APPEND;
- if((mode&8) !=0)
- create_mode|=LO_RDWR;
- if((mode&16) !=0)
- create_mode|=LO_BUFFER;
- if((mode&32) !=0)
- create_mode|=LO_NOBUFFER;
-
+ create_mode = 0;
+ if ((mode & 1) != 0) {
+ create_mode |= LO_RDONLY;
+ }
+ if ((mode & 2) != 0) {
+ create_mode |= LO_WRONLY;
+ }
+ if ((mode & 4) != 0) {
+ create_mode |= LO_APPEND;
+ }
+ if ((mode & 8) != 0) {
+ create_mode |= LO_RDWR;
+ }
+ if ((mode & 16) != 0) {
+ create_mode |= LO_BUFFER;
+ }
+ if ((mode & 32) != 0) {
+ create_mode |= LO_NOBUFFER;
+ }
+
id = php_intifxus_create_slob(create_mode, &EG(regular_list) TSRMLS_CC);
- if(id < 0) {
+ if (id < 0) {
RETURN_FALSE;
}
RETURN_LONG(id);
@@ -3755,25 +4111,25 @@ static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC
IFX_IDRES *Ifx_slob;
int errcode;
- Ifx_slob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_slob==NULL) {
+ Ifx_slob = emalloc(sizeof(IFX_IDRES));
+ if (Ifx_slob == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource");
return -1;
}
- errcode=ifx_lo_def_create_spec(&(Ifx_slob->SLOB.createspec));
- if(errcode<0) {
+ errcode = ifx_lo_def_create_spec(&(Ifx_slob->SLOB.createspec));
+ if (errcode < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode);
return -1;
}
- Ifx_slob->type=TYPE_SLOB;
- Ifx_slob->SLOB.lofd=ifx_lo_create(Ifx_slob->SLOB.createspec,create_mode,&(Ifx_slob->SLOB.slob_data),&errcode);
- if(errcode<0 || Ifx_slob->SLOB.lofd<0) {
+ Ifx_slob->type = TYPE_SLOB;
+ Ifx_slob->SLOB.lofd = ifx_lo_create(Ifx_slob->SLOB.createspec, create_mode, &(Ifx_slob->SLOB.slob_data), &errcode);
+ if (errcode < 0 || Ifx_slob->SLOB.lofd < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode);
return -1;
}
- return zend_list_insert(Ifx_slob,le_idresult);
+ return zend_list_insert(Ifx_slob, le_idresult);
}
/* ----------------------------------------------------------------------
@@ -3791,12 +4147,12 @@ PHP_FUNCTION(ifxus_free_slob)
{
zval **pid;
- if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pid);
- if(php_intifxus_free_slob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) {
+ if (php_intifxus_free_slob(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC) < 0) {
RETURN_FALSE;
}
RETURN_TRUE;
@@ -3819,19 +4175,19 @@ static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC)
IFX_IDRES *Ifx_slob;
int type;
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
return -1;
}
- if(php_intifxus_close_slob(bid, &EG(regular_list) TSRMLS_CC) < 0) {
+ if (php_intifxus_close_slob(bid, &EG(regular_list) TSRMLS_CC) < 0) {
return -1;
}
- if(Ifx_slob->SLOB.createspec!=NULL) {
+ if (Ifx_slob->SLOB.createspec != NULL) {
ifx_lo_spec_free(Ifx_slob->SLOB.createspec);
- Ifx_slob->SLOB.createspec=NULL;
+ Ifx_slob->SLOB.createspec = NULL;
}
efree(Ifx_slob);
zend_list_delete(bid);
@@ -3853,11 +4209,12 @@ PHP_FUNCTION(ifxus_close_slob)
{
zval **pid;
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pid);
- if(php_intifxus_close_slob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) {
+
+ if (php_intifxus_close_slob(Z_LVAL_PP(pid), &EG(regular_list) TSRMLS_CC) < 0) {
RETURN_FALSE;
}
RETURN_TRUE;
@@ -3880,22 +4237,22 @@ static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC)
IFX_IDRES *Ifx_slob;
int type;
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
return -1;
}
- if(Ifx_slob->SLOB.lofd<0) {
+ if (Ifx_slob->SLOB.lofd < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already closed");
return -1;
}
- if(ifx_lo_close(Ifx_slob->SLOB.lofd)<0) {
+ if (ifx_lo_close(Ifx_slob->SLOB.lofd) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't close slob-resource");
return -1;
}
- Ifx_slob->SLOB.lofd=-1;
+ Ifx_slob->SLOB.lofd = -1;
return 0;
}
@@ -3916,28 +4273,34 @@ PHP_FUNCTION(ifxus_open_slob)
zval **pbid, **pmode;
long mode,create_mode;
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(1, &pbid, &pmode) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(1, &pbid, &pmode) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pmode);
convert_to_long_ex(pbid);
- mode=Z_LVAL_PP(pmode);
- create_mode=0;
- if((mode&1) !=0)
+ mode = Z_LVAL_PP(pmode);
+ create_mode = 0;
+ if ((mode & 1) != 0) {
create_mode|=LO_RDONLY;
- if((mode&2) !=0)
+ }
+ if ((mode & 2) != 0) {
create_mode|=LO_WRONLY;
- if((mode&4) !=0)
+ }
+ if ((mode & 4) != 0) {
create_mode|=LO_APPEND;
- if((mode&8) !=0)
+ }
+ if ((mode & 8) != 0) {
create_mode|=LO_RDWR;
- if((mode&16) !=0)
+ }
+ if ((mode & 16) != 0) {
create_mode|=LO_BUFFER;
- if((mode&32) !=0)
+ }
+ if ((mode & 32) != 0) {
create_mode|=LO_NOBUFFER;
+ }
- RETURN_LONG(php_intifxus_open_slob(Z_LVAL_PP(pbid),create_mode,&EG(regular_list) TSRMLS_CC));
+ RETURN_LONG(php_intifxus_open_slob(Z_LVAL_PP(pbid), create_mode, &EG(regular_list) TSRMLS_CC));
}
/* }}} */
@@ -3958,19 +4321,19 @@ static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list T
int errcode;
int type;
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
return -1;
}
- if(Ifx_slob->SLOB.lofd>0) {
+ if (Ifx_slob->SLOB.lofd > 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already open");
return -1;
}
- Ifx_slob->SLOB.lofd=ifx_lo_open(&(Ifx_slob->SLOB.slob_data),create_mode,&errcode);
- if(errcode < 0 || Ifx_slob->SLOB.lofd < 0) {
+ Ifx_slob->SLOB.lofd = ifx_lo_open(&(Ifx_slob->SLOB.slob_data), create_mode, &errcode);
+ if (errcode < 0 || Ifx_slob->SLOB.lofd < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't open slob-resource: %d", errcode);
return -1;
}
@@ -3990,16 +4353,16 @@ static long php_intifxus_new_slob(HashTable *list TSRMLS_DC)
{
IFX_IDRES *Ifx_slob;
- Ifx_slob=emalloc(sizeof(IFX_IDRES));
- if(Ifx_slob==NULL) {
+ Ifx_slob = emalloc(sizeof(IFX_IDRES));
+ if (Ifx_slob == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource");
return -1;
}
- Ifx_slob->type=TYPE_SLOB;
- Ifx_slob->SLOB.lofd=-1;
- Ifx_slob->SLOB.createspec=NULL;
- return zend_list_insert(Ifx_slob,le_idresult);
+ Ifx_slob->type = TYPE_SLOB;
+ Ifx_slob->SLOB.lofd = -1;
+ Ifx_slob->SLOB.createspec = NULL;
+ return zend_list_insert(Ifx_slob, le_idresult);
}
/* ----------------------------------------------------------------------
@@ -4016,8 +4379,8 @@ static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC)
IFX_IDRES *Ifx_slob;
int type;
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
return NULL;
}
@@ -4044,24 +4407,24 @@ PHP_FUNCTION(ifxus_tell_slob)
int type;
long lakt_seek_pos;
- if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
- bid=Z_LVAL_PP(pbid);
+ bid = Z_LVAL_PP(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
RETURN_FALSE;
}
- if(ifx_lo_tell(Ifx_slob->SLOB.lofd,&akt_seek_pos)<0) {
+ if (ifx_lo_tell(Ifx_slob->SLOB.lofd, &akt_seek_pos) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform tell-operation");
RETURN_FALSE;
}
- if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) {
+ if (ifx_int8tolong(&akt_seek_pos, &lakt_seek_pos) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long");
RETURN_FALSE;
}
@@ -4087,38 +4450,38 @@ PHP_FUNCTION(ifxus_seek_slob)
zval **pbid, **pmode, **poffset;
long bid,lakt_seek_pos;
IFX_IDRES *Ifx_slob;
- ifx_int8_t akt_seek_pos,offset;
- int type,mode;
+ ifx_int8_t akt_seek_pos, offset;
+ int type, mode;
- if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &pbid, &pmode, &poffset) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &pbid, &pmode, &poffset) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
convert_to_long_ex(pmode);
convert_to_long_ex(poffset);
- bid=Z_LVAL_PP(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ bid = Z_LVAL_PP(pbid);
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
RETURN_FALSE;
}
- mode=LO_SEEK_SET;
- if(Z_LVAL_PP(pmode)==1) {
- mode=LO_SEEK_CUR;
+ mode = LO_SEEK_SET;
+ if (Z_LVAL_PP(pmode) == 1) {
+ mode = LO_SEEK_CUR;
}
- if(Z_LVAL_PP(pmode)==2) {
- mode=LO_SEEK_END;
+ if (Z_LVAL_PP(pmode) == 2) {
+ mode = LO_SEEK_END;
}
- ifx_int8cvlong(Z_LVAL_PP(poffset),&offset);
- if(ifx_lo_seek(Ifx_slob->SLOB.lofd,&offset,mode,&akt_seek_pos)<0) {
+ ifx_int8cvlong(Z_LVAL_PP(poffset), &offset);
+ if (ifx_lo_seek(Ifx_slob->SLOB.lofd, &offset, mode, &akt_seek_pos) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform seek-operation");
RETURN_FALSE;
}
- if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) {
+ if (ifx_int8tolong(&akt_seek_pos, &lakt_seek_pos) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long");
RETURN_FALSE;
}
@@ -4143,30 +4506,31 @@ PHP_FUNCTION(ifxus_read_slob)
zval **pbid, **pnbytes;
long bid, nbytes;
IFX_IDRES *Ifx_slob;
- int errcode,type;
+ int errcode, type;
char *buffer;
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid, &pnbytes) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pnbytes) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
convert_to_long_ex(pnbytes);
- bid=Z_LVAL_PP(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ bid = Z_LVAL_PP(pbid);
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
RETURN_FALSE;
}
- nbytes=Z_LVAL_PP(pnbytes);
- buffer=emalloc(nbytes);
- if(ifx_lo_read(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode)<0) {
+ nbytes = Z_LVAL_PP(pnbytes);
+ buffer = emalloc(nbytes);
+
+ if (ifx_lo_read(Ifx_slob->SLOB.lofd, buffer, nbytes, &errcode) < 0) {
efree(buffer);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading slob: %d", errcode);
RETURN_FALSE;
}
- RETURN_STRINGL(buffer,nbytes,0);
+ RETURN_STRINGL(buffer, nbytes, 0);
}
/* }}} */
@@ -4187,31 +4551,31 @@ PHP_FUNCTION(ifxus_write_slob)
zval **pbid, **pcontent;
long bid, nbytes;
IFX_IDRES *Ifx_slob;
- int errcode,type;
+ int errcode, type;
char *buffer;
- if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid, &pcontent) == FAILURE) {
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pbid, &pcontent) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pbid);
convert_to_string_ex(pcontent);
- bid=Z_LVAL_PP(pbid);
- Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
- if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+ bid = Z_LVAL_PP(pbid);
+ Ifx_slob = (IFX_IDRES *) zend_list_find(bid, &type);
+ if (type != le_idresult || Ifx_slob->type != TYPE_SLOB) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
RETURN_FALSE;
}
- buffer=Z_STRVAL_PP(pcontent);
- nbytes=Z_STRLEN_PP(pcontent);
+ buffer = Z_STRVAL_PP(pcontent);
+ nbytes = Z_STRLEN_PP(pcontent);
- if(nbytes<=0) {
+ if (nbytes <= 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "String has no content");
RETURN_FALSE;
}
- if((nbytes=ifx_lo_write(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode))<0) {
+ if ((nbytes = ifx_lo_write(Ifx_slob->SLOB.lofd, buffer, nbytes, &errcode)) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error writing slob: %d", errcode);
RETURN_FALSE;
}
diff --git a/ext/informix/php_informix_includes.h b/ext/informix/php_informix_includes.h
index 5e61376ac2..fc0832bcc2 100644
--- a/ext/informix/php_informix_includes.h
+++ b/ext/informix/php_informix_includes.h
@@ -37,15 +37,17 @@
/* query result set data */
typedef struct ifx_res {
- char connecid[16];
- char cursorid[16];
- char descrpid[16];
- char statemid[16];
+ char connecid[32];
+ char cursorid[32];
+ char descrpid[32];
+ char i_descrpid[32];
+ char statemid[32];
int isscroll;
int ishold;
int iscursory;
int paramquery;
int numcols;
+ int numicols;
int rowid;
int affected_rows;
long sqlerrd[6];