1# The new MK 2.3 commit-aside feature, in Python 2# 3# Expected output: 4# 1 2 3 ok 5 6import os 7import Mk4py 8mk = Mk4py 9 10def t1(): # add several rows using commit-aside 11 try: os.remove("_f.mk") 12 except: pass 13 try: os.remove("_f.mka") 14 except: pass 15 16 db = mk.storage("_f.mk", 1) 17 vw = db.getas("a[i:I]") 18 vw.append(i=111) 19 vw.append(i=222) 20 vw.append(i=333) 21 db.commit() 22 del db 23 24 db = mk.storage("_f.mk", 0) 25 vw = db.view("a") 26 assert len(vw) == 3 27 28 dba = mk.storage("_f.mka", 1) 29 db.aside(dba) 30 vw = db.view("a") 31 assert len(vw) == 3 32 33 vw.append(i=444) 34 vw.append(i=555) 35 assert len(vw) == 5 36 37 db.commit() 38 dba.commit() 39 del db 40 del dba 41 42 db = mk.storage("_f.mk", 0) 43 vw = db.view("a") 44 assert len(vw) == 3 # now it has three rows 45 assert vw[0].i == 111 46 assert vw[1].i == 222 47 assert vw[2].i == 333 48 49 dba = mk.storage("_f.mka", 0) 50 db.aside(dba) 51 vw = db.view("a") 52 assert len(vw) == 5 # now it has five :) 53 assert vw[0].i == 111 54 assert vw[1].i == 222 55 assert vw[2].i == 333 56 assert vw[3].i == 444 57 assert vw[4].i == 555 58 59def t2(): # add second property using commit-aside 60 try: os.remove("_f.mk") 61 except: pass 62 try: os.remove("_f.mka") 63 except: pass 64 65 db = mk.storage("_f.mk", 1) 66 vw = db.getas("a[i:I]") 67 vw.append(i=111) 68 db.commit() 69 del db 70 71 db = mk.storage("_f.mk", 0) 72 vw = db.view("a") 73 assert len(vw) == 1 74 75 dba = mk.storage("_f.mka", 1) 76 db.aside(dba) 77 vw = db.getas("a[i:I,j:I]") 78 assert len(vw) == 1 79 80 vw.append(i=222,j=333) 81 assert len(vw) == 2 82 83 db.commit() 84 dba.commit() 85 del db 86 del dba 87 88 db = mk.storage("_f.mk", 0) 89 vw = db.view("a") 90 assert len(vw) == 1 # now it has one property and row 91 assert len(vw.structure()) == 1 92 assert vw[0].i == 111 93 94 dba = mk.storage("_f.mka", 0) 95 db.aside(dba) 96 vw = db.view("a") 97 assert len(vw) == 2 # now it has two of both :) 98 assert len(vw.structure()) == 2 99 assert vw[0].i == 111 100 assert vw[0].j == 0 101 assert vw[1].i == 222 102 assert vw[1].j == 333 103 104def t3(): # remove second property using commit-aside 105 try: os.remove("_f.mk") 106 except: pass 107 try: os.remove("_f.mka") 108 except: pass 109 110 db = mk.storage("_f.mk", 1) 111 vw = db.getas("a[i:I,j:I]") 112 vw.append(i=111,j=222) 113 db.commit() 114 del db 115 116 db = mk.storage("_f.mk", 0) 117 vw = db.view("a") 118 assert len(vw) == 1 119 120 dba = mk.storage("_f.mka", 1) 121 db.aside(dba) 122 vw = db.getas("a[i:I]") 123 assert len(vw) == 1 124 125 db.commit() 126 dba.commit() 127 del db 128 del dba 129 130 db = mk.storage("_f.mk", 0) 131 vw = db.view("a") 132 assert len(vw) == 1 133 assert len(vw.structure()) == 2 # now you see j 134 assert vw[0].i == 111 135 assert vw[0].j == 222 136 137 dba = mk.storage("_f.mka", 0) 138 db.aside(dba) 139 vw = db.view("a") 140 assert len(vw) == 1 141 assert len(vw.structure()) == 1 # now you don't :) 142 assert vw[0].i == 111 143 144print 1, 145t1() 146print 2, 147t2() 148print 3, 149t3() 150print "ok" 151 152os.remove("_f.mk") 153os.remove("_f.mka") 154