Skip to content

Commit ccfaaed

Browse files
authored
Update ibase_query.c
1 parent 45ae357 commit ccfaaed

File tree

1 file changed

+43
-26
lines changed

1 file changed

+43
-26
lines changed

ibase_query.c

Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -787,35 +787,52 @@ static int _php_ibase_bind(XSQLDA *sqlda, zval *b_vars, BIND_BUF *buf, /* {{{ */
787787
}
788788
continue;
789789

790-
case SQL_BOOLEAN:
791-
792-
convert_to_string(b_var);
793-
var->sqldata = Z_STRVAL_P(b_var);
794-
var->sqllen = Z_STRLEN_P(b_var);
795-
var->sqltype = SQL_BOOLEAN;
796-
continue;
797-
798-
if (Z_STRLEN_P(b_var) != BLOB_ID_LEN ||
799-
!_php_ibase_string_to_quad(Z_STRVAL_P(b_var), &buf[i].val.qval)) {
800-
801-
ibase_blob ib_blob = { 0, BLOB_INPUT };
802-
803-
if (isc_create_blob(IB_STATUS, &ib_query->link->handle,
804-
&ib_query->trans->handle, &ib_blob.bl_handle, &ib_blob.bl_qd)) {
805-
_php_ibase_error();
806-
return FAILURE;
807-
}
790+
case SQL_BOOLEAN:
791+
792+
switch (Z_TYPE_P(b_var)) {
793+
case IS_LONG:
794+
case IS_DOUBLE:
795+
case IS_TRUE:
796+
case IS_FALSE:
797+
*(bool *)var->sqldata = zend_is_true(b_var) ? 1 : 0;
798+
break;
799+
case IS_STRING:
800+
zend_long lval;
801+
double dval;
808802

809-
if (_php_ibase_blob_add(b_var, &ib_blob) != SUCCESS) {
810-
return FAILURE;
811-
}
803+
if ((Z_STRLEN_P(b_var) == 0)) {
804+
*(bool *)var->sqldata = 0;
805+
break;
806+
}
812807

813-
if (isc_close_blob(IB_STATUS, &ib_blob.bl_handle)) {
814-
_php_ibase_error();
815-
return FAILURE;
816-
}
817-
buf[i].val.qval = ib_blob.bl_qd;
808+
switch (is_numeric_string(Z_STRVAL_P(b_var), Z_STRLEN_P(b_var), &lval, &dval, 0)) {
809+
case IS_LONG:
810+
*(bool *)var->sqldata = (lval != 0) ? 1 : 0;
811+
break;
812+
case IS_DOUBLE:
813+
*(bool *)var->sqldata = (dval != 0) ? 1 : 0;
814+
break;
815+
default:
816+
if (!zend_binary_strncasecmp(Z_STRVAL_P(b_var), Z_STRLEN_P(b_var), "true", 4, 4)) {
817+
*(bool *)var->sqldata = 1;
818+
} else if (!zend_binary_strncasecmp(Z_STRVAL_P(b_var), Z_STRLEN_P(b_var), "false", 5, 5)) {
819+
*(bool *)var->sqldata = 1;
820+
} else {
821+
_php_ibase_module_error("Parameter %d: cannot convert string to boolean", i+1);
822+
rv = FAILURE;
823+
continue;
824+
}
825+
}
826+
break;
827+
case IS_NULL:
828+
*var->sqlind = -1;
829+
break;
830+
default:
831+
_php_ibase_module_error("Parameter %d: must be boolean", i+1);
832+
rv = FAILURE;
833+
continue;
818834
}
835+
var->sqltype = SQL_BOOLEAN;
819836
continue;
820837

821838
case SQL_ARRAY:

0 commit comments

Comments
 (0)