@@ -753,6 +753,7 @@ PHP_MINIT_FUNCTION(ibase)
753753 REGISTER_LONG_CONSTANT ("IBASE_REC_NO_VERSION" , PHP_IBASE_REC_NO_VERSION , CONST_PERSISTENT );
754754 REGISTER_LONG_CONSTANT ("IBASE_NOWAIT" , PHP_IBASE_NOWAIT , CONST_PERSISTENT );
755755 REGISTER_LONG_CONSTANT ("IBASE_WAIT" , PHP_IBASE_WAIT , CONST_PERSISTENT );
756+ REGISTER_LONG_CONSTANT ("IBASE_LOCK_TIMEOUT" , PHP_IBASE_LOCK_TIMEOUT , CONST_PERSISTENT );
756757
757758 php_ibase_query_minit (INIT_FUNC_ARGS_PASSTHRU );
758759 php_ibase_blobs_minit (INIT_FUNC_ARGS_PASSTHRU );
@@ -1146,6 +1147,7 @@ PHP_FUNCTION(ibase_trans)
11461147
11471148 if (argn > 0 ) {
11481149 zend_long trans_argl = 0 ;
1150+ zend_long trans_timeout = 0 ;
11491151 char * tpb ;
11501152 ISC_TEB * teb ;
11511153 zval * args = NULL ;
@@ -1217,6 +1219,24 @@ PHP_FUNCTION(ibase_trans)
12171219 last_tpb [tpb_len ++ ] = isc_tpb_nowait ;
12181220 } else if (PHP_IBASE_WAIT == (trans_argl & PHP_IBASE_WAIT )) {
12191221 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+ }
12201240 }
12211241 }
12221242 }
0 commit comments