Issue 31988  —   maxhits ignored when hitlist is completed due to retrieve in second component

Status:   Planned for resolution in 10.4.01

Solution available in patch(es):      10.3.02.015    9.7.05.028

Description:

 Summary:
 Uniface:
 Maxhits ignored when hitlist is completed due to retrieve in second component:
 For the read statement the option maxhits can be used.
 This option is ignored by select mode 3 when the hitlist for an entity is
 completed
 due to a retrieve on the same entity in a second component.
 When using Oracle this leads to a performance problem.

 Environment:
 +Uniface Version  : 9 / 10
 +Operating System : OS independent
 +Database         : DBMS independent
 +Browsers         : Browser independent

 Reproduction scenario
 1.  Multiple occurrences for an entity EDATA are retrieved on a form component
 FORMA.
 2.  The read trigger for entity EDATA uses maxhits for example maxhits=1.
 3.  The detail trigger is used to activate form component FORMB showing more
 details for an occurrence
 4.  As this is the second retrieve on the same entity the hitlist for the form
 with multiple occurrences will be completed.
 5.  maxhits occurrences from EDATA are now displayed in FORMA

 Expected Result
 read  Options "maxhits=1" is used.
 Detail form starts immediately

 Actual Result
 read  Options "maxhits=1 is used"
 In tracing , logging files it is as if maxhits is ignored
 Takes seconds for Detail form to start when using Oracle

 trc tracing:
 [SETTINGS]
 $trc_levels=5
 $trc_info = cat,lvl,dtt
 $trc_start = .\tracing_%p.txt

 shows
 when using maxhits=1
 1a;  0:11.764.44;ORA_I_EDBDRV S3 Exit=10
 1a;  0:14.846.86;ORA_I_DBDRV  S3 Path=1 entity=EDATA
 2a;  0:20.505.19;ORA_I_DBRTN  S3 Drv. returns 0 in udrverr
 1a;  0:20.505.22;ORA_I_EDBDRV S3 Exit=199980
 when not using maxhits
 1a;  0:02.930.14;ORA_I_EDBDRV S3 Exit=10
 1a;  0:04.336.94;ORA_I_DBDRV  S3 Path=1 entity=EDATA
 2a;  0:04.631.93;ORA_I_DBRTN  S3 Drv. returns 0 in udrverr
 1a;  0:04.631.95;ORA_I_EDBDRV S3 Exit=199970

Workaround:

 Open the second component in another transaction:
 newinstance"B31988DETAIL","B31988DETAIL","TRANSACTION=TRUE"
 activate "B31988DETAIL".EXEC(pk1.edata,pk2.edata)

Notes: