@@ -753,6 +753,7 @@ PHP_MINIT_FUNCTION(ibase)
753
753
REGISTER_LONG_CONSTANT("IBASE_REC_NO_VERSION", PHP_IBASE_REC_NO_VERSION, CONST_PERSISTENT);
754
754
REGISTER_LONG_CONSTANT("IBASE_NOWAIT", PHP_IBASE_NOWAIT, CONST_PERSISTENT);
755
755
REGISTER_LONG_CONSTANT("IBASE_WAIT", PHP_IBASE_WAIT, CONST_PERSISTENT);
756
+ REGISTER_LONG_CONSTANT("IBASE_LOCK_TIMEOUT", PHP_IBASE_LOCK_TIMEOUT, CONST_PERSISTENT);
756
757
757
758
php_ibase_query_minit(INIT_FUNC_ARGS_PASSTHRU);
758
759
php_ibase_blobs_minit(INIT_FUNC_ARGS_PASSTHRU);
@@ -1146,6 +1147,7 @@ PHP_FUNCTION(ibase_trans)
1146
1147
1147
1148
if (argn > 0) {
1148
1149
zend_long trans_argl = 0;
1150
+ zend_long trans_timeout = 0;
1149
1151
char *tpb;
1150
1152
ISC_TEB *teb;
1151
1153
zval *args = NULL;
@@ -1217,6 +1219,24 @@ PHP_FUNCTION(ibase_trans)
1217
1219
last_tpb[tpb_len++] = isc_tpb_nowait;
1218
1220
} else if (PHP_IBASE_WAIT == (trans_argl & PHP_IBASE_WAIT)) {
1219
1221
last_tpb[tpb_len++] = isc_tpb_wait;
1222
+ if (PHP_IBASE_LOCK_TIMEOUT == (trans_argl & PHP_IBASE_LOCK_TIMEOUT)) {
1223
+ if((i + 1 < argn) && (Z_TYPE(args[i + 1]) == IS_LONG)){
1224
+ i++;
1225
+ convert_to_long_ex(&args[i]);
1226
+ trans_timeout = Z_LVAL(args[i]);
1227
+
1228
+ if (trans_timeout <= 0 || trans_timeout > 0x7FFF) {
1229
+ php_error_docref(NULL, E_WARNING, "Invalid timeout parameter");
1230
+ } else {
1231
+ last_tpb[tpb_len++] = isc_tpb_lock_timeout;
1232
+ last_tpb[tpb_len++] = sizeof(ISC_SHORT);
1233
+ last_tpb[tpb_len] = (ISC_SHORT)trans_timeout;
1234
+ tpb_len += sizeof(ISC_SHORT);
1235
+ }
1236
+ } else {
1237
+ php_error_docref(NULL, E_WARNING, "IBASE_LOCK_TIMEOUT expects next argument to be timeout value");
1238
+ }
1239
+ }
1220
1240
}
1221
1241
}
1222
1242
}
0 commit comments