Locked History Attachments

RMSAccessHighAPIExample

RMS access using high level API

Source code:

   1 import struct
   2 from vms.rmsdef import RMS__SUC, RMS__RNF, RMS__OK_DUP
   3 from vms.fabdef import FAB_M_PUT, FAB_M_GET, FAB_M_DEL, FAB_M_UPD, \
   4        FAB_M_SHRPUT, FAB_M_SHRGET, FAB_M_SHRDEL, FAB_M_SHRUPD
   5 from vms.rms.IndexedFile import IndexedFile
   6 from construct import *
   7 
   8 TestRec = Struct("TestRec", String("f1", 5), SLInt32("f2"), String("f3", 11))
   9 
  10 class TestFile(IndexedFile):
  11     Name = 'test.dat'
  12     def __init__(self):
  13         IndexedFile.__init__(self, TestFile.Name, TestRec)
  14 
  15     def primary_keynum(self):
  16         return 0
  17 
  18     def keyval(self, rec, keynum):
  19         if keynum == 0:
  20             return rec.f1
  21         elif keynum == 1:
  22             return rec.f2
  23         else:
  24             raise "Invalid keynum parameter"
  25 
  26     def pack_key(self, keynum, keyval):
  27         if keynum == 0:
  28             return struct.pack("=5s", keyval)
  29         elif keynum == 1:
  30             return struct.pack("=i", keyval)
  31         else:
  32            raise KeyError
  33 
  34 if __name__=='__main__':
  35     f = TestFile()
  36     print
  37     print 'Clear file'
  38     f.deleteall()
  39 
  40     print
  41     print 'Insert a few records'
  42     rec = Container(f1 = 'AA5AA', f2 = 5, f3 = '1234567890A')
  43     f.put(rec)
  44     rec = Container(f1 = 'BB2BB', f2 = 2, f3 = '1234567890B')
  45     f.put(rec)
  46     rec = Container(f1 = 'CC4CC', f2 = 4, f3 = '1234567890C')
  47     f.put(rec)
  48     rec = Container(f1 = 'DD1DD', f2 = 1, f3 = '1234567890D')
  49     f.put(rec)
  50     rec = Container(f1 = 'EE1EE', f2 = 2, f3 = '1234567890E')
  51     f.put(rec)
  52     rec = Container(f1 = 'FF3FF', f2 = 3, f3 = '1234567890F')
  53     f.put(rec)
  54 
  55     print
  56     print 'Initial records using an iterator, primary key order'
  57     for rec in f:
  58         print rec.f1, rec.f2, rec.f3
  59 
  60     print
  61     print 'Initial records using an iterator, secondary key order'
  62     f.iterator_keynum(1)
  63     for rec in f:
  64         print rec.f1, rec.f2, rec.f3
  65 
  66     print
  67     print 'Update all records using an iterator'
  68     # iterator key is automatically reset to primary key
  69     for rec in f:
  70         rec.f2 = rec.f2 + 10
  71         f.update_current(rec)
  72 
  73     print
  74     print 'Updated records using an iterator'
  75     for rec in f:
  76         print rec.f1, rec.f2, rec.f3
  77 
  78     print
  79     print 'build a list of all records'
  80     lst = f.fetchall(0)
  81     print len(lst)
  82 
  83     print
  84     print 'delete a record using secondary key value 14'
  85     f.delete(1, 14)
  86 
  87     print
  88     print 'Records using an iterator, secondary key order'
  89     f.iterator_keynum(1)
  90     for rec in f:
  91         print rec.f1, rec.f2, rec.f3
  92 
  93     print 'delete all records using secondary key value 12'
  94     f.open(acc = FAB_M_GET + FAB_M_DEL)
  95     f.usekey(1)
  96     f.rewind()
  97     f.find(None, f.pack_key(1, 12))
  98     for rec in f:
  99         if rec.f2 == 12:
 100            f.delete_current()
 101         else:
 102            break
 103     f.close()
 104 
 105     print
 106     print 'Records using an iterator, primary key order'
 107     for rec in f:
 108         print rec.f1, rec.f2, rec.f3

Result:

Reset file

Insert a few records

Initial records using an iterator, primary key order
AA5AA 5 1234567890A
BB2BB 2 1234567890B
CC4CC 4 1234567890C
DD1DD 1 1234567890D
EE1EE 2 1234567890E
FF3FF 3 1234567890F

Initial records using an iterator, secondary key order
DD1DD 1 1234567890D
BB2BB 2 1234567890B
EE1EE 2 1234567890E
FF3FF 3 1234567890F
CC4CC 4 1234567890C
AA5AA 5 1234567890A

Update all records using an iterator

Updated records using an iterator
AA5AA 15 1234567890A
BB2BB 12 1234567890B
CC4CC 14 1234567890C
DD1DD 11 1234567890D
EE1EE 12 1234567890E
FF3FF 13 1234567890F

build a list of all records
6

delete a record using secondary key value 14

Records using an iterator, secondary key order
DD1DD 11 1234567890D
BB2BB 12 1234567890B
EE1EE 12 1234567890E
FF3FF 13 1234567890F
AA5AA 15 1234567890A
delete all records using secondary key value 12

Records using an iterator, primary key order
AA5AA 15 1234567890A
DD1DD 11 1234567890D
FF3FF 13 1234567890F