puts "================" puts "OCC1054" puts "================" puts "" ####################################################################################### # Mechanism of transactions' synchronization and mechanizm of nested transactions ####################################################################################### # Case 2 (nested mode OFF) ####################################################################################### proc OCC1054_Check_dump {IsGood index good_index case} { # Check dump if { ${index} != ${good_index} } { set IsGood 0 puts "OCC1054 Error (case ${case} : index = ${index} good_index = ${good_index})" } return ${IsGood} } proc OCC1054_Check_real_attribute {IsGood doc label good_real case} { global ${doc} # Check real attribute set percent_max 0.1 if [catch { set real [GetReal ${doc} ${label}] } message] { set IsGood 0 puts "OCC1054 Error (case ${case})" } else { set real_percent [expr abs(${real} - ${good_real}) / double(${good_real}) * 100.] if {${real_percent} > ${percent_max}} { puts "good_real = ${good_real}" puts "real = ${real}" puts "real_percent = ${real_percent}" puts "OCC1054 Error (case ${case}-2)" } } return ${IsGood} } set IsGood 1 set Case 0 NewDocument doc1 NewDocument doc2 NewDocument doc3 mtmCreate 4 mtmAdd doc1 mtmOpen SetReal doc1 0:1 1 mtmCommit tr1 set list [mtmDump] ################################################################################ # *** Dump of MTM *** # There is one document ( "2809192" ) in the manager # Nested transaction mode is off # # Undo: tr1 - 1 documents ( "2809192" ) < Last action # # *** End *** ################################################################################ set docnum0 [lindex ${list} 7] set index1 [lsearch -exact ${list} "tr1"] set docnum1 [lindex ${list} [expr ${index1} + 2]] set index2 [lsearch -exact ${list} "Last"] # Check dump set IsGood [OCC1054_Check_dump ${IsGood} ${docnum0} "one" [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index1} 21 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum1} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index2} 29 [incr Case]] # Check real attributes set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:1 1 [incr Case]] mtmAdd doc2 set list [mtmDump] ################################################################################ # *** Dump of MTM *** # There are 2 documents ( "2809192" "2705536" ) in the manager # Nested transaction mode is off # # Undo: tr1 - 1 documents ( "2809192" ) < Last action # # *** End *** ################################################################################ set docnum0 [lindex ${list} 7] set index1 [lsearch -exact ${list} "tr1"] set docnum1 [lindex ${list} [expr ${index1} + 2]] set index2 [lsearch -exact ${list} "Last"] # Check dump set IsGood [OCC1054_Check_dump ${IsGood} ${docnum0} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index1} 22 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum1} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index2} 30 [incr Case]] # Check real attributes set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:1 1 [incr Case]] mtmOpen SetReal doc2 0:1 2 mtmCommit tr2 set list [mtmDump] ################################################################################ # *** Dump of MTM *** # There are 2 documents ( "2809192" "2705536" ) in the manager # Nested transaction mode is off # # Undo: tr1 - 1 documents ( "2809192" ) # Undo: tr2 - 1 documents ( "2705536" ) < Last action # # *** End *** ################################################################################ set docnum0 [lindex ${list} 7] set index1 [lsearch -exact ${list} "tr1"] set docnum1 [lindex ${list} [expr ${index1} + 2]] set index2 [lsearch -exact ${list} "tr2"] set docnum2 [lindex ${list} [expr ${index2} + 2]] set index3 [lsearch -exact ${list} "Last"] # Check dump set IsGood [OCC1054_Check_dump ${IsGood} ${docnum0} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index1} 22 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum1} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index2} 30 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum2} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index3} 38 [incr Case]] # Check real attributes set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:1 1 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:1 2 [incr Case]] SetReal doc3 0:1 1 mtmAdd doc3 set list [mtmDump] ################################################################################ # *** Dump of MTM *** # There are 3 documents ( "2809192" "2705536" "3095112" ) in the manager # Nested transaction mode is off # # Undo: tr1 - 1 documents ( "2809192" ) # Undo: tr2 - 1 documents ( "2705536" ) < Last action # # *** End *** ################################################################################ set docnum0 [lindex ${list} 7] set index1 [lsearch -exact ${list} "tr1"] set docnum1 [lindex ${list} [expr ${index1} + 2]] set index2 [lsearch -exact ${list} "tr2"] set docnum2 [lindex ${list} [expr ${index2} + 2]] set index3 [lsearch -exact ${list} "Last"] # Check dump set IsGood [OCC1054_Check_dump ${IsGood} ${docnum0} 3 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index1} 23 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum1} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index2} 31 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum2} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index3} 39 [incr Case]] # Check real attributes set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:1 1 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:1 2 [incr Case]] mtmOpen SetReal doc1 0:2 2 SetReal doc3 0:2 2 mtmCommit tr3 set list [mtmDump] ################################################################################ # *** Dump of MTM *** # There are 3 documents ( "2809192" "2705536" "3095112" ) in the manager # Nested transaction mode is off # # Undo: tr1 - 1 documents ( "2809192" ) # Undo: tr2 - 1 documents ( "2705536" ) # Undo: tr3 - 2 documents ( "3095112" "2809192" ) < Last action # # *** End *** ################################################################################ set docnum0 [lindex ${list} 7] set index1 [lsearch -exact ${list} "tr1"] set docnum1 [lindex ${list} [expr ${index1} + 2]] set index2 [lsearch -exact ${list} "tr2"] set docnum2 [lindex ${list} [expr ${index2} + 2]] set index3 [lsearch -exact ${list} "tr3"] set docnum3 [lindex ${list} [expr ${index3} + 2]] set index4 [lsearch -exact ${list} "Last"] # Check dump set IsGood [OCC1054_Check_dump ${IsGood} ${docnum0} 3 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index1} 23 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum1} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index2} 31 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum2} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index3} 39 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum3} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index4} 48 [incr Case]] # Check real attributes set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:1 1 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:2 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:1 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc3} 0:2 2 [incr Case]] mtmOpen SetReal doc2 0:2 2 SetReal doc3 0:3 3 mtmCommit tr4 set list [mtmDump] ################################################################################ # *** Dump of MTM *** # There are 3 documents ( "2809192" "2705536" "3095112" ) in the manager # Nested transaction mode is off # # Undo: tr1 - 1 documents ( "2809192" ) # Undo: tr2 - 1 documents ( "2705536" ) # Undo: tr3 - 2 documents ( "3095112" "2809192" ) # Undo: tr4 - 2 documents ( "3095112" "2705536" ) < Last action # # *** End *** ################################################################################ set docnum0 [lindex ${list} 7] set index1 [lsearch -exact ${list} "tr1"] set docnum1 [lindex ${list} [expr ${index1} + 2]] set index2 [lsearch -exact ${list} "tr2"] set docnum2 [lindex ${list} [expr ${index2} + 2]] set index3 [lsearch -exact ${list} "tr3"] set docnum3 [lindex ${list} [expr ${index3} + 2]] set index4 [lsearch -exact ${list} "tr4"] set docnum4 [lindex ${list} [expr ${index4} + 2]] set index5 [lsearch -exact ${list} "Last"] # Check dump set IsGood [OCC1054_Check_dump ${IsGood} ${docnum0} 3 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index1} 23 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum1} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index2} 31 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum2} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index3} 39 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum3} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index4} 48 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum4} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index5} 57 [incr Case]] # Check real attributes set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:1 1 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:2 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:1 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:2 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc3} 0:2 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc3} 0:3 3 [incr Case]] mtmOpen SetReal doc1 0:3 3 SetReal doc2 0:3 3 mtmCommit tr5 set list [mtmDump] ################################################################################ # *** Dump of MTM *** # There are 3 documents ( "2809192" "2705536" "3095112" ) in the manager # Nested transaction mode is off # # Undo: tr2 - 1 documents ( "2705536" ) # Undo: tr3 - 2 documents ( "3095112" "2809192" ) # Undo: tr4 - 2 documents ( "3095112" "2705536" ) # Undo: tr5 - 2 documents ( "2705536" "2809192" ) < Last action # # *** End *** ################################################################################ set docnum0 [lindex ${list} 7] set index1 [lsearch -exact ${list} "tr2"] set docnum1 [lindex ${list} [expr ${index1} + 2]] set index2 [lsearch -exact ${list} "tr3"] set docnum2 [lindex ${list} [expr ${index2} + 2]] set index3 [lsearch -exact ${list} "tr4"] set docnum3 [lindex ${list} [expr ${index3} + 2]] set index4 [lsearch -exact ${list} "tr5"] set docnum4 [lindex ${list} [expr ${index4} + 2]] set index5 [lsearch -exact ${list} "Last"] # Check dump set IsGood [OCC1054_Check_dump ${IsGood} ${docnum0} 3 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index1} 23 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum1} 1 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index2} 31 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum2} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index3} 40 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum3} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index4} 49 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${docnum4} 2 [incr Case]] set IsGood [OCC1054_Check_dump ${IsGood} ${index5} 58 [incr Case]] # Check real attributes set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:1 1 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:2 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc1} 0:3 3 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:1 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:2 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc2} 0:3 3 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc3} 0:2 2 [incr Case]] set IsGood [OCC1054_Check_real_attribute ${IsGood} ${doc3} 0:3 3 [incr Case]] if { ${IsGood} == 1 } { puts "OCC1054 OK" } else { puts "OCC1054 Error" }