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