Downloads
Product availability Matrix (PAM)
Downloads of this patch are available from the
Rocket Customer Support Portal.
Further explanation can be found
here.
Fixes
UNI-16062 | MSS: Uniface shows no error for blocked read (timeout) and truncates hitlist |
UNI-1300 | MSS : Some database errors are not reported by selectdb. |
UNI-16062 - MSS: Uniface shows no error for blocked read (timeout) and truncates hitlist
Solution available in patch(es): 10.3.03-035, 10.4.02-014
Description:
Stepping through the Uniface hitlist the read for an occurrence is blocked
because another user holds a (exclusive/update) lock on this occurrence.
The Uniface hitlist is truncated without Uniface reporting there is an error and there are actually more hits.
Reproduction scenario
1. Start a first Uniface session retrieving data from entity ENTM1 (key fields PK1 and PK2).
For example
PK1.ENTM1/init="1"
PK2.ENTM1/init=
Environment:
+ Uniface Version : 9 / 10
+ Platforms: All
+ Database: MSS
Workaround:
None.
Notes:
This problem is solved.
UNI-1300 - MSS : Some database errors are not reported by selectdb.
Solution available in patch(es): 10.3.03-035, 10.4.02-014
Description:
MSS : Some database errors are not reported by selectdb.
Oracle and Sybase do not have this problem: they report an error as expected.
Two examples are described below:
First Example:
MSS : selectdb does not report error after lock timeout occurs.
How to reproduce this problem:
One session locks a record which is also part of the records a selectdb needs in another session. A lock timeout occurs after maxlockwait:
$result is empty , $status, $dberror and $procerror are all 0 so it is not noticed that in fact an error occurred. The same test trying to retrieve a locked record in an Uniface form does give an error:
(_read) READ:2 read
I/O function: S, mode: 0, on file/table: TESTTABLE index: 1 >= select [id] [datetime_field] from [testtable] with(rowlock)
42000 [Microsoft][SQL Server Native Client 11.0][SQL Server]Lock request time out period exceeded.
(_read) READ:5 [-3] endif
(_read) READ:6 [-3] putmess "read $status = %%$status, $dberror=%%$dberror
$procerror = %%$procerror
read $status = -3, $dberror=1222 $procerror = -3
Second example:
MSS : selectdb does not report error after illegal datetime arithmetic
How to reproduce this problem:
This problem occurs when the u_where clause contains a calculation of 2 or more datetime values using non database fields or direct datetime values:
u_where (datetime_field < (dum_ref_dt + dum_add_time))
u_where (datetime_field < (dum_ref_dt + 2h))
These selectdb statements should report an error.
However there is no error reported: $status=0 and hits 0 is reported:
I/O function: S, mode: 4, on file/table: TESTTABLE index: 1 >=
Where ((DATETIME_FIELD < (25112015 08:00:00 + 01011900 02:00:00)))
Select(Count(ID)) select count([id]) from [testtable] with(rowlock) where ([datetime_field]<(?+?))
-> Hits selected: 0 .
Retrieve statement using the same u_where reports the correct error:
I/O function: S, mode: 0, on file/table: TESTTABLE index: 1 >=
Where ((DATETIME_FIELD < (25112015 08:00:00 + 01011900 02:00:00)))
select [id],[datetime_field] from [testtable] with(rowlock) where ([datetime_field]<(?+?))
42000 [Microsoft][SQL Server Native Client 11.0][SQL Server]Operand data type datetime2 is invalid for add operator.
I/O function: R, mode: 0, on driver: MSS rollback transaction
read $status = -3, $dberror=8117 $procerror = -3 I/O function: R, mode: 0, on driver: MSS rollback transaction
Environment:
Environment:
+ Uniface version: 10.x
+ Platforms: All
+ Databases: MSS
Workaround:
For the example with illegal datetime arithmetic:
First calculate the datetime in Uniface:
v_comp_dt = dum_ref_dt + dum_add_time
selectdb count(id) from "testtable" %\
u_where (datetime_field < v_comp_dt) %\
to (dum_result)
Using two database fields and a selection like
selectdb count(id) from "testtable2" u_where ((datetime_field - datetime_res) < dum_add_time) to (dum_result) also works fine.
Notes:
This problem is solved.