@@ -82,7 +82,7 @@ typedef struct {
82
82
*/
83
83
typedef struct {
84
84
union {
85
- bool bval ;
85
+ zend_bool bval ;
86
86
short sval ;
87
87
float fval ;
88
88
ISC_LONG lval ;
@@ -244,7 +244,7 @@ static int _php_ibase_alloc_array(ibase_array **ib_arrayp, XSQLDA *sqlda, /* {{{
244
244
break ;
245
245
case blr_bool :
246
246
a -> el_type = SQL_BOOLEAN ;
247
- a -> el_size = sizeof (bool );
247
+ a -> el_size = sizeof (zend_bool );
248
248
break ;
249
249
case blr_short :
250
250
a -> el_type = SQL_SHORT ;
@@ -582,8 +582,8 @@ static int _php_ibase_bind_array(zval *val, char *buf, zend_ulong buf_size, /* {
582
582
* (float * ) buf = (float ) Z_DVAL_P (val );
583
583
break ;
584
584
case SQL_BOOLEAN :
585
- //convert_to_bool (val);
586
- * (bool * ) buf = Z_DVAL_P (val );
585
+ convert_to_boolean (val );
586
+ * (zend_bool * ) buf = Z_BVAL_P (val );
587
587
break ;
588
588
case SQL_DOUBLE :
589
589
convert_to_double (val );
@@ -671,7 +671,6 @@ static int _php_ibase_bind(XSQLDA *sqlda, zval *b_vars, BIND_BUF *buf, /* {{{ */
671
671
672
672
/* for these types, an empty string can be handled like a NULL value */
673
673
switch (var -> sqltype & ~1 ) {
674
- case SQL_BOOLEAN :
675
674
case SQL_SHORT :
676
675
case SQL_LONG :
677
676
case SQL_INT64 :
@@ -773,6 +772,37 @@ static int _php_ibase_bind(XSQLDA *sqlda, zval *b_vars, BIND_BUF *buf, /* {{{ */
773
772
}
774
773
continue ;
775
774
775
+ case SQL_BOOLEAN :
776
+
777
+ convert_to_string (b_var );
778
+ var -> sqldata = Z_STRVAL_P (b_var );
779
+ var -> sqllen = Z_STRLEN_P (b_var );
780
+ var -> sqltype = SQL_BOOLEAN ;
781
+ continue ;
782
+
783
+ if (Z_STRLEN_P (b_var ) != BLOB_ID_LEN ||
784
+ !_php_ibase_string_to_quad (Z_STRVAL_P (b_var ), & buf [i ].val .qval )) {
785
+
786
+ ibase_blob ib_blob = { 0 , BLOB_INPUT };
787
+
788
+ if (isc_create_blob (IB_STATUS , & ib_query -> link -> handle ,
789
+ & ib_query -> trans -> handle , & ib_blob .bl_handle , & ib_blob .bl_qd )) {
790
+ _php_ibase_error ();
791
+ return FAILURE ;
792
+ }
793
+
794
+ if (_php_ibase_blob_add (b_var , & ib_blob ) != SUCCESS ) {
795
+ return FAILURE ;
796
+ }
797
+
798
+ if (isc_close_blob (IB_STATUS , & ib_blob .bl_handle )) {
799
+ _php_ibase_error ();
800
+ return FAILURE ;
801
+ }
802
+ buf [i ].val .qval = ib_blob .bl_qd ;
803
+ }
804
+ continue ;
805
+
776
806
case SQL_ARRAY :
777
807
778
808
if (Z_TYPE_P (b_var ) != IS_ARRAY ) {
@@ -836,7 +866,7 @@ static void _php_ibase_alloc_xsqlda(XSQLDA *sqlda) /* {{{ */
836
866
var -> sqldata = safe_emalloc (sizeof (char ), var -> sqllen + sizeof (short ), 0 );
837
867
break ;
838
868
case SQL_BOOLEAN :
839
- var -> sqldata = emalloc (sizeof (bool ));
869
+ var -> sqldata = emalloc (sizeof (zend_bool ));
840
870
break ;
841
871
case SQL_SHORT :
842
872
var -> sqldata = emalloc (sizeof (short ));
@@ -1338,11 +1368,9 @@ static int _php_ibase_var_zval(zval *val, void *data, int type, int len, /* {{{
1338
1368
case SQL_TEXT :
1339
1369
ZVAL_STRINGL (val , (char * )data , len );
1340
1370
break ;
1371
+ // The query's field value is boolean
1341
1372
case SQL_BOOLEAN :
1342
- if (val )
1343
- ZVAL_BOOL (val ,1 );
1344
- else
1345
- ZVAL_BOOL (val ,0 );
1373
+ ZVAL_BOOL (val , * (bool * ) data );
1346
1374
break ;
1347
1375
case SQL_SHORT :
1348
1376
n = * (short * ) data ;
@@ -1931,6 +1959,10 @@ static void _php_ibase_field_info(zval *return_value, XSQLVAR *var) /* {{{ */
1931
1959
add_index_stringl (return_value , 3 , buf , len );
1932
1960
add_assoc_stringl (return_value , "length" , buf , len );
1933
1961
1962
+ /*
1963
+ * SQL_ consts are part of Firebird-API.
1964
+ */
1965
+
1934
1966
if (var -> sqlscale < 0 ) {
1935
1967
unsigned short precision = 0 ;
1936
1968
0 commit comments