Re: Patch to interbase module.

From: Date: Tue, 04 Sep 2001 21:32:38 +0000
Subject: Re: Patch to interbase module.
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-65097@lists.php.net to get a copy of this message
Ok, I'll try it again.  The first post was just what cvs diff gave me.  Here
is one with the line endings converted.

I'll attach it and copy-paste it.

Index: ext/interbase/interbase.c
===================================================================
RCS file: /repository/php4/ext/interbase/interbase.c,v
retrieving revision 1.68
diff -u -r1.68 interbase.c
--- ext/interbase/interbase.c 13 Aug 2001 07:55:33 -0000 1.68
+++ ext/interbase/interbase.c 31 Aug 2001 17:44:51 -0000
@@ -25,6 +25,12 @@

 /*
  Changes:
+  2001-05-31: Jeremy Bettis <jeremy@deadbeef.com>
+   - 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 <ivop@regionet.cz>
    - added COMPILE_DL section
    - more verbose php_info_ibase function
@@ -484,13 +490,13 @@
   STD_PHP_INI_ENTRY("ibase.timeformat", "%H:%M:%S", PHP_INI_ALL,
OnUpdateString, cfg_timeformat, zend_ibase_globals, ibase_globals)
 PHP_INI_END()

-static void php_ibase_init_globals(TSRMLS_D)
+static void php_ibase_init_globals(zend_ibase_globals *ibase_globals)
 {
- IBG(timestampformat) = NULL;
- IBG(dateformat) = NULL;
- IBG(timeformat) = NULL;
- IBG(errmsg) = NULL;
- IBG(num_persistent) = 0;
+ ibase_globals->timestampformat = NULL;
+ ibase_globals->dateformat = NULL;
+ ibase_globals->timeformat = NULL;
+ ibase_globals->errmsg = NULL;
+ ibase_globals->num_persistent = 0;
 }

 PHP_MINIT_FUNCTION(ibase)
@@ -1118,7 +1124,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;
@@ -1131,6 +1137,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:
@@ -1208,7 +1223,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;
@@ -1266,12 +1281,38 @@
      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) {
+      ibase_blob_handle *ib_blob;
+      TSRMLS_FETCH();
+
+      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;
-     }
-     ib_blob_id = (ibase_blob_handle *)b_var->value.str.val;
+*/
+     } else {
+      ib_blob_id = (ibase_blob_handle *)b_var->value.str.val;

-     var->sqldata = (void ISC_FAR *)&ib_blob_id->bl_qd;
+      var->sqldata = (void ISC_FAR *)&ib_blob_id->bl_qd;
+     }
     }
    break;
    case SQL_ARRAY:
@@ -1383,7 +1424,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;
   }
Index: ext/interbase/interbase.dsp
===================================================================
RCS file: /repository/php4/ext/interbase/interbase.dsp,v
retrieving revision 1.5
diff -u -r1.5 interbase.dsp
--- ext/interbase/interbase.dsp 24 Aug 2000 18:58:50 -0000 1.5
+++ ext/interbase/interbase.dsp 31 Aug 2001 17:44:51 -0000
@@ -44,7 +44,7 @@
 # PROP Ignore_Export_Lib 0

 # PROP Target_Dir ""

 # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.."
/I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase
SDK\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D
"_MBCS" /D "_USRDLL" /D
"INTERBASE_EXPORTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /YX
/FD
/GZ /c

-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I
"..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase
SDK\include"
/I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D
"WIN32" /D
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D
"ZEND_WIN32" /D
"PHP_WIN32" /D HAVE_IBASE=1 /FR /YX /FD /GZ /c

+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\main" /I "..\.." /I
"..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\Interbase
SDK\include"
/I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D
"WIN32" /D
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "INTERBASE_EXPORTS" /D
"ZEND_WIN32" /D
"PHP_WIN32" /D HAVE_IBASE=1 /D "COMPILE_DL_INTERBASE" /FR /YX /FD /GZ /c

 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32

 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

 # ADD BASE RSC /l 0x40d /d "_DEBUG"

Index: ext/interbase/php_interbase.h
===================================================================
RCS file: /repository/php4/ext/interbase/php_interbase.h,v
retrieving revision 1.22
diff -u -r1.22 php_interbase.h
--- ext/interbase/php_interbase.h 30 Jul 2001 01:56:28 -0000 1.22
+++ ext/interbase/php_interbase.h 31 Aug 2001 17:44:51 -0000
@@ -159,7 +159,6 @@
 };

 #ifdef ZTS
-#define IBG(v) (ibase_globals->v)
 #define IBG(v) TSRMG(ibase_globals_id, zend_ibase_globals *, v)
 #else
 #define IBG(v) (ibase_globals.v)



Attachment: [application/octet-stream] php.diff

Thread (5 messages)

« previous php.dev (#65097) next »