78 lines
2.5 KiB
Plaintext
78 lines
2.5 KiB
Plaintext
compile insert SyncDB_Insert
|
|
|
|
******************************************************************************
|
|
*
|
|
* 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.
|
|
*
|
|
* Name : SyncDB_Insert
|
|
* Description: Ensure that the @tables/@volumes arrays are synchronized.
|
|
* Requires System Compiler with SysCommon already defined.
|
|
*
|
|
* History : (date, initials, notes)
|
|
* 03/09/98 cp Original programmer, based on the original SyncDB utility.
|
|
* 08/04/10 rjc Add cleanup of empty volume references
|
|
******************************************************************************
|
|
|
|
point Vols to sc_Array_Volumes(0)
|
|
point VolFiles to sc_Array_Volumes(3)
|
|
point Files to sc_Array_Tables(0)
|
|
point FileVols to sc_Array_Tables(1)
|
|
|
|
* first verify volume structures
|
|
cVols = count(Vols, @fm) + (Vols # "")
|
|
for iVol = 1 to cVols
|
|
Vol = Vols<iVol>
|
|
cFiles = count(VolFiles<iVol>, @vm) + (VolFiles<iVol> # "")
|
|
for iFile = 1 to cFiles
|
|
File = VolFiles<iVol,iFile>
|
|
locate File in Files using @fm setting Pos then
|
|
* check volume reference
|
|
if FileVols<Pos> # Vol then
|
|
VolFiles = delete(VolFiles, iVol, iFile, 0)
|
|
end
|
|
end else
|
|
* file does not exist but is referenced by volume
|
|
VolFiles = delete(VolFiles, iVol, iFile, 0)
|
|
end
|
|
next iFiles
|
|
next iVol
|
|
|
|
cFiles = count(Files, @fm) + (Files # "")
|
|
for iFile = cFiles to 1 step -1
|
|
File = Files<iFile>
|
|
Vol = FileVols<iFile>
|
|
* check volume reference
|
|
locate Vol in Vols using @fm setting Pos then
|
|
locate File in VolFiles<Pos> using @vm setting Pos else
|
|
* file not referenced by a volume
|
|
for i = 0 to 5
|
|
sc_Array_Tables(i) = delete(sc_Array_Tables(i), iFile, 0, 0)
|
|
next i
|
|
end
|
|
end else
|
|
* file references unattached volume
|
|
for i = 0 to 5
|
|
sc_Array_Tables(i) = delete(sc_Array_Tables(i), iFile, 0, 0)
|
|
next i
|
|
end
|
|
next iFile
|
|
|
|
|
|
* rjc 08-04-10 Clean out empty volumes.
|
|
cVols = count(Vols, @fm) + (Vols # "")
|
|
for iVol = cVols To 1 step -1
|
|
Vol = Vols<iVol>
|
|
cFiles = count(VolFiles<iVol>, @vm) + (VolFiles<iVol> # "")
|
|
Begin Case
|
|
Case vol _eqc 'SYSCOLUMNS*SYSCOLUMNS'
|
|
* SYSCOLUMNS is special case, do nothing
|
|
Case cfiles = 0
|
|
* Empty vol, remove it
|
|
for i = 0 To 6
|
|
sc_Array_Volumes(i) = delete(sc_Array_Volumes(i), iVol, 0, 0)
|
|
next
|
|
End case
|
|
next iVol
|