Rocket Uniface Support Resources

 View Only

Rocket Uniface 10.3.03-035 Released

  Thread closed by the administrator, not accepting new replies.
  • 1.  Rocket Uniface 10.3.03-035 Released

    ROCKETEER
    Posted 01-18-2023 09:51
    No replies, thread closed.

    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-16062MSS: Uniface shows no error for blocked read (timeout) and truncates hitlist
    UNI-1300MSS : 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=<gold>*
       retrieve/e "ENTM1"
    2. Start a second Uniface session retrieving a specific occurrence
       PK1.ENTM1/init="1"
       PK2.ENTM1/init="11"
       retrieve/e "ENTM1"
    3. In this second Uniface session modify the retrieved occurrence
    4. Do a store without doing a commit in the second Uniface session
    5. In the first Uniface session step through the hitlist.
    The read for the occurrence with PK="1" and PK2="11" is blocked
    because the second Uniface session has modified this occurrence without yet commiting (write, no commit yet).

    Expected Result:
    Error -3 reported in the read trigger (since occurrence is locked) after timeout trying to read the blocked record.
    The Uniface developer can decide how to react to this situation.

    Actual Result:
    Behaviour depends on the defined connector options for the Uniface connector for Microsoft SQL Server.
    With maxlockwait smaller than locktime Uniface shows no error at all for the blocked read:
    No error reported and hitlist truncated without Uniface reporting there are actually more hits.
    With locktime smaller than maxlockwait the read returns status -3 after seconds.

    Workaround:
    Define locktime smaller than maxlockwait to at least get error -3 after the read
    or
    The problem described can be avoided using Row Level Versioning.

    See for example:
    https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server</gold>

    Environment:

    + Uniface Version : 9 / 10
    + Platforms: All
    + Database: MSS

    Workaround:

    None.

    Notes:

    This problem is solved.

    Back to top



    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.

    Back to top