gpt4 book ai didi

openedge - Progress4gl如何锁定自己?

转载 作者:行者123 更新时间:2023-12-02 02:49:12 24 4
gpt4 key购买 nike

在单元测试中,我需要验证程序在处理表时是否跳过锁定的记录。我无法设置锁定记录,因为测试无法锁定自身,这很有意义。

这是我想要实现的目标的示例。

  DEV VAR v_isCommitted        AS LOGI NO-UNDO.
DEF VAR hl AS HANDLE NO-UNDO.
DEF BUFFER bufl FOR tablename.
hl = BUFFER bufl:HANDLE.

LOCKED_RECORDS:
DO TRANSACTION ON ERROR UNDO, LEAVE LOCKED_RECORDS:
/*Setup : Create record not committed yet*/
CREATE tablename.
ASSIGN tablename.fields = fieldsvalue.



/*ACT : Code I'm trying to test*/
/*...some code...*/
v_isCommitted = hl:FIND-BY-ROWID(ROWID(tablename), EXCLUSIVE-LOCK, NO-WAIT)
AND AVAILABLE(bufl)
AND NOT LOCKED(bufl).
/*...some code touching the record if it is commited...*/

/*ASSERT : program left new record tablename AS IS.*/

END.

问题是该记录可用并且未锁定到测试,因为它是由测试创建的。
有没有办法让测试从自身锁定一条记录,以便行为部分实际上可以跳过该记录,就像它是由其他人创建的一样?

进度:11.7.1

最佳答案

session 无法锁定自身。因此,您需要开始第二个 session 。例如:

/* code to set things up ... */

/* spawn a sub process to try to lock the record */

os-command silent value( substitute( '_progres -b -db &1 -p lockit.p -param "&2" && > logfile 2>&&1', dbname, "key" )).

在lockit.p中使用session:parameter来获取要测试的记录的 key (或者我认为是硬编码)。

或者,正如下面的评论中提到的:

/* locktest.p
*/

define variable lockStatus as character no-undo format "x(20)".

find first customer exclusive-lock.

input through value( "_progres /data/sports120/sports120 -b -p ./lockit.p" ).
repeat:
import unformatted lockStatus.
end.

display lockStatus.

和:

/* lockit.p
*/

find first customer exclusive-lock no-wait no-error.
if locked( customer ) then
put "locked".
else
put "not locked".

quit.

关于openedge - Progress4gl如何锁定自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62331400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com