added sysprog entities
This commit is contained in:
110
SYSPROG/STPROC/RTI_GET_NEXT_ID.txt
Normal file
110
SYSPROG/STPROC/RTI_GET_NEXT_ID.txt
Normal file
@ -0,0 +1,110 @@
|
||||
function rti_get_next_id(byVal_table)
|
||||
|
||||
/*
|
||||
** Copyright (C) 2022 Revelation Software Inc. All Rights Reserved **
|
||||
|
||||
This program is proprietary and is not to be used by or disclosed
|
||||
to others, nor is it to be copied without written permission from
|
||||
Revelation Technologies, Inc.
|
||||
|
||||
Author : RJC
|
||||
Date : 07 March 2022
|
||||
Purpose : Sequential Key processing
|
||||
|
||||
Comments
|
||||
========
|
||||
Get the next id, make sure it is not used, and update the counter
|
||||
|
||||
*/
|
||||
|
||||
$insert logical
|
||||
Declare Function get_Status
|
||||
Declare Subroutine Set_status
|
||||
|
||||
EQU SK$ to "%SK%"
|
||||
|
||||
If Assigned(byval_table) Then table = byval_table Else table = ""
|
||||
if assigned(force_increment) else force_increment = ''
|
||||
if table = '' then
|
||||
err = 'Table name is missing'
|
||||
GoTo Error
|
||||
end
|
||||
|
||||
convert @lower.case to @upper.case in table
|
||||
next_id = ''
|
||||
err = ''
|
||||
|
||||
dict = 'DICT.':table
|
||||
|
||||
open table to f_table else
|
||||
err = 'Unable to open ': table
|
||||
GoTo Error
|
||||
end
|
||||
|
||||
open dict to f_Dict else
|
||||
err = 'Unable to open dict for ': table
|
||||
GoTo Error
|
||||
end
|
||||
|
||||
set_status(0)
|
||||
locked = false$
|
||||
started = time()
|
||||
timeout = 60
|
||||
loop
|
||||
Lock f_dict,SK$ then
|
||||
locked = true$
|
||||
end else
|
||||
end
|
||||
until locked or ( time()-started > timeout )
|
||||
repeat
|
||||
|
||||
if locked else
|
||||
err = 'Unable to lock Primary Key counter for ' : quote(table)
|
||||
GoTo Error
|
||||
end
|
||||
|
||||
Read next_id from f_Dict, SK$ else
|
||||
* should message here
|
||||
next_id = 1
|
||||
Write next_id on f_dict, SK$ else
|
||||
Unlock f_dict, SK$ Else Null
|
||||
err = 'Unable to write ': dict : ' ': SK$
|
||||
GoTo Error
|
||||
end
|
||||
end
|
||||
|
||||
test_Id = next_id
|
||||
loop
|
||||
exists = 0
|
||||
lock f_table, test_id then
|
||||
read test_rec from f_Table, test_id then
|
||||
exists = 1
|
||||
end
|
||||
unlock f_table, test_id else null
|
||||
end else
|
||||
exists = 1
|
||||
end
|
||||
if exists then
|
||||
test_id +=1
|
||||
end
|
||||
while exists
|
||||
Repeat
|
||||
|
||||
write test_id+1 on f_dict, SK$ else
|
||||
Unlock f_dict, SK$ Else Null
|
||||
err = 'Unable to write ': dict : ' ': SK$
|
||||
GoTo Error
|
||||
end
|
||||
|
||||
Unlock f_dict, SK$ else
|
||||
err = 'Unable to Unlock ': dict : ' ': SK$
|
||||
GoTo Error
|
||||
end
|
||||
|
||||
return test_id
|
||||
|
||||
|
||||
|
||||
Error:
|
||||
Set_Status(1,err)
|
||||
Return ''
|
Reference in New Issue
Block a user