Hello, On Thu, 5 Jul 2001, Jeremy Bettis wrote: > This patch will make it so that no special effort is required to use blobs > in interbase. Since the blob functions don't seem to work right anyway, I > see no reason that you should not include this patch. (patch against > current cvs) Can you send this patch to the list as an attachment? It's a little messed up due to line endings. Derick > > > Index: ext/interbase/interbase.c > =================================================================== > RCS file: /repository/php4/ext/interbase/interbase.c,v > retrieving revision 1.58 > diff -u -r1.58 interbase.c > --- ext/interbase/interbase.c 2001/06/09 09:30:42 1.58 > +++ ext/interbase/interbase.c 2001/07/05 19:12:46 > @@ -25,6 +25,15 @@ > > /* > Changes: > + 2001-06-13: Jeremy Bettis <[EMAIL PROTECTED]> > + - Return the text of blobs in _php_ibase_fetch_hash, not the blob > + handles, even if the BLOB is not of TEXT type > + 2001-05-31: Jeremy Bettis <[EMAIL PROTECTED]> > + - If a blob handle was expected and something else was > + received create a blob and add the value to it. > + - If the incoming argument to a bind parameter is NULL > + then store a NULL in the database. > + - More verbose date errors. > 1999-09-21: Ivo Panacek <[EMAIL PROTECTED]> > - added COMPILE_DL section > - more verbose php_info_ibase function > @@ -1130,7 +1139,7 @@ > > /* {{{ _php_ibase_bind() > Bind parameter placeholders in a previously prepared query */ > -static int _php_ibase_bind(XSQLDA *sqlda, pval **b_vars, BIND_BUF *buf) > +static int _php_ibase_bind(XSQLDA *sqlda, pval **b_vars, BIND_BUF *buf, > ibase_query *ib_query) > { > XSQLVAR *var; > pval *b_var; > @@ -1143,6 +1152,15 @@ > var->sqlind = &buf[i].sqlind; > b_var = b_vars[i]; > > + if (b_var->type == IS_NULL) { > + static char nothing[64]; > + static short null_flag = -1; > + var->sqldata = nothing; > + var->sqltype |= 1; > + var->sqlind = &null_flag; > + if (var->sqllen > 64) > + var->sqllen = 64; > + } else > switch(var->sqltype & ~1) { > case SQL_TEXT: /* direct to variable */ > case SQL_VARYING: > @@ -1220,7 +1238,7 @@ > n = sscanf(b_var->value.str.val,"%d%*[/]%d%*[/]%d %d%*[:]%d%*[:]%d", > &t.tm_mon, &t.tm_mday, &t.tm_year, &t.tm_hour, &t.tm_min, > &t.tm_sec); > if(n != 3 && n != 6){ > - _php_ibase_module_error("invalid date/time format"); > + _php_ibase_module_error("invalid date/time format: Expected 3 or 6 > fields, got %d. Use format m/d/Y H:i:s. You gave '%s'", n, > b_var->value.str.val); > return FAILURE; > } > t.tm_year -= 1900; > @@ -1278,12 +1296,36 @@ > if (b_var->type != IS_STRING > || b_var->value.str.len != sizeof(ibase_blob_handle) > || ((ibase_blob_handle *)(b_var->value.str.val))->bl_handle != 0) { > + IBLS_FETCH(); > + ibase_blob_handle *ib_blob; > + ib_blob = (ibase_blob_handle *) emalloc(sizeof(ibase_blob_handle)); > + ib_blob->trans_handle = ib_query->trans; > + ib_blob->link = ib_query->link; > + ib_blob->bl_handle = NULL; > + if (isc_create_blob(IB_STATUS, &ib_blob->link, > &ib_blob->trans_handle, &ib_blob->bl_handle, &ib_blob->bl_qd)) { > + efree(ib_blob); > + _php_ibase_error(); > + return FAILURE; > + } > + convert_to_string(b_var); > + if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, (unsigned short) > b_var->value.str.len, b_var->value.str.val)) { > + _php_ibase_error(); > + return FAILURE; > + } > + if (isc_close_blob(IB_STATUS, &ib_blob->bl_handle)) { > + _php_ibase_error(); > + return FAILURE; > + } > + ib_blob_id = ib_blob; > + var->sqldata = (void ISC_FAR *)&ib_blob_id->bl_qd; > +/* > _php_ibase_module_error("invalid blob id string"); > return FAILURE; > +*/ > + } else { > + ib_blob_id = (ibase_blob_handle *)b_var->value.str.val; > + var->sqldata = (void ISC_FAR *)&ib_blob_id->bl_qd; > } > - ib_blob_id = (ibase_blob_handle *)b_var->value.str.val; > - > - var->sqldata = (void ISC_FAR *)&ib_blob_id->bl_qd; > } > break; > case SQL_ARRAY: > @@ -1395,7 +1437,7 @@ > in_sqlda = emalloc(XSQLDA_LENGTH(ib_query->in_sqlda->sqld)); > memcpy(in_sqlda, ib_query->in_sqlda, > XSQLDA_LENGTH(ib_query->in_sqlda->sqld)); > bind_buf = emalloc(sizeof(BIND_BUF) * ib_query->in_sqlda->sqld); > - if (_php_ibase_bind(in_sqlda, args, bind_buf) == FAILURE) { > + if (_php_ibase_bind(in_sqlda, args, bind_buf, ib_query) == FAILURE) { > IBDEBUG("Could not bind input XSQLDA... (_php_ibase_exec)"); > goto _php_ibase_exec_error; > } > @@ -1961,7 +2003,7 @@ > _php_ibase_var_pval(tmp, var->sqldata, var->sqltype, var->sqllen, > var->sqlscale, flag); > break; > case SQL_BLOB: > - if (flag & PHP_IBASE_TEXT) { /* text ? */ > + if (1 /*flag & PHP_IBASE_TEXT*/) { /* text ? */ > int stat; > isc_blob_handle bl_handle = NULL; > ISC_LONG max_len = 0, cur_len = 0; > > > -- > Jeremy Bettis > [EMAIL PROTECTED] > > > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > To contact the list administrators, e-mail: [EMAIL PROTECTED] > Derick Rethans --------------------------------------------------------------------- PHP: Scripting the Web - www.php.net - [EMAIL PROTECTED] SRM: Site Resource Manager - www.vl-srm.net --------------------------------------------------------------------- -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]