test029.tcl
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1996, 1997, 1998, 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: test029.tcl,v 11.13 2000/08/25 14:21:55 sue Exp $
  7. #
  8. # DB Test 29 {method nentries}
  9. # Test the Btree and Record number renumbering.
  10. proc test029 { method {nentries 10000} args} {
  11. source ./include.tcl
  12. set do_renumber [is_rrecno $method]
  13. set args [convert_args $method $args]
  14. set omethod [convert_method $method]
  15. puts "Test029: $method ($args)"
  16. if { [string compare $omethod "-hash"] == 0 } {
  17. puts "Test029 skipping for method HASH"
  18. return
  19. }
  20. if { [is_record_based $method] == 1 && $do_renumber != 1 } {
  21. puts "Test029 skipping for method RECNO (w/out renumbering)"
  22. return
  23. }
  24. # Create the database and open the dictionary
  25. set eindex [lsearch -exact $args "-env"]
  26. #
  27. # If we are using an env, then testfile should just be the db name.
  28. # Otherwise it is the test directory and the name.
  29. if { $eindex == -1 } {
  30. set testfile $testdir/test029.db
  31. set env NULL
  32. } else {
  33. set testfile test029.db
  34. incr eindex
  35. set env [lindex $args $eindex]
  36. }
  37. cleanup $testdir $env
  38. # Read the first nentries dictionary elements and reverse them.
  39. # Keep a list of these (these will be the keys).
  40. puts "tTest029.a: initialization"
  41. set keys ""
  42. set did [open $dict]
  43. set count 0
  44. while { [gets $did str] != -1 && $count < $nentries } {
  45. lappend keys [reverse $str]
  46. incr count
  47. }
  48. close $did
  49. # Generate sorted order for the keys
  50. set sorted_keys [lsort $keys]
  51. # Save the first and last keys
  52. set last_key [lindex $sorted_keys end]
  53. set last_keynum [llength $sorted_keys]
  54. set first_key [lindex $sorted_keys 0]
  55. set first_keynum 1
  56. # Create the database
  57. if { [string compare $omethod "-btree"] == 0 } {
  58. set db [eval {berkdb_open -create -truncate 
  59. -mode 0644 -recnum} $args {$omethod $testfile}]
  60.    error_check_good dbopen [is_valid_db $db] TRUE
  61. } else {
  62. set db [eval {berkdb_open -create -truncate 
  63. -mode 0644} $args {$omethod $testfile}]
  64.    error_check_good dbopen [is_valid_db $db] TRUE
  65. }
  66. set pflags ""
  67. set gflags ""
  68. set txn ""
  69. if { [is_record_based $method] == 1 } {
  70. append gflags " -recno"
  71. }
  72. puts "tTest029.b: put/get loop"
  73. foreach k $keys {
  74. if { [is_record_based $method] == 1 } {
  75. set key [lsearch $sorted_keys $k]
  76. incr key
  77. } else {
  78. set key $k
  79. }
  80. set ret [eval {$db put} 
  81.     $txn $pflags {$key [chop_data $method $k]}]
  82. error_check_good dbput $ret 0
  83. set ret [eval {$db get} $txn $gflags {$key}]
  84. if { [string compare [lindex [lindex $ret 0] 1] $k] != 0 } {
  85. puts "Test029: put key-data $key $k got $ret"
  86. return
  87. }
  88. }
  89. # Now delete the first key in the database
  90. puts "tTest029.c: delete and verify renumber"
  91. # Delete the first key in the file
  92. if { [is_record_based $method] == 1 } {
  93. set key $first_keynum
  94. } else {
  95. set key $first_key
  96. }
  97. set ret [eval {$db del} $txn {$key}]
  98. error_check_good db_del $ret 0
  99. # Now we are ready to retrieve records based on
  100. # record number
  101. if { [string compare $omethod "-btree"] == 0 } {
  102. append gflags " -recno"
  103. }
  104. # First try to get the old last key (shouldn't exist)
  105. set ret [eval {$db get} $txn $gflags {$last_keynum}]
  106. error_check_good get_after_del $ret [list]
  107. # Now try to get what we think should be the last key
  108. set ret [eval {$db get} $txn $gflags {[expr $last_keynum - 1]}]
  109. error_check_good 
  110.     getn_last_after_del [lindex [lindex $ret 0] 1] $last_key
  111. # Create a cursor; we need it for the next test and we
  112. # need it for recno here.
  113. set dbc [eval {$db cursor} $txn]
  114. error_check_good db_cursor [is_substr $dbc $db] 1
  115. # OK, now re-put the first key and make sure that we
  116. # renumber the last key appropriately.
  117. if { [string compare $omethod "-btree"] == 0 } {
  118. set ret [eval {$db put} $txn {$key [chop_data $method $first_key]}]
  119. error_check_good db_put $ret 0
  120. } else {
  121. # Recno
  122. set ret [eval {$dbc get} $txn {-first}]
  123. set ret [eval {$dbc put} $txn $pflags {-before $first_key}]
  124. error_check_bad dbc_put:DB_BEFORE $ret 0
  125. }
  126. # Now check that the last record matches the last record number
  127. set ret [eval {$db get} $txn $gflags {$last_keynum}]
  128. error_check_good 
  129.     getn_last_after_put [lindex [lindex $ret 0] 1] $last_key
  130. # Now delete the first key in the database using a cursor
  131. puts "tTest029.d: delete with cursor and verify renumber"
  132. set ret [eval {$dbc get} $txn {-first}]
  133. error_check_good dbc_first $ret [list [list $key $first_key]]
  134. # Now delete at the cursor
  135. set ret [$dbc del]
  136. error_check_good dbc_del $ret 0
  137. # Now check the record numbers of the last keys again.
  138. # First try to get the old last key (shouldn't exist)
  139. set ret [eval {$db get} $txn $gflags {$last_keynum}]
  140. error_check_good get_last_after_cursor_del:$ret $ret [list]
  141. # Now try to get what we think should be the last key
  142. set ret [eval {$db get} $txn $gflags {[expr $last_keynum - 1]}]
  143. error_check_good 
  144.     getn_after_cursor_del [lindex [lindex $ret 0] 1] $last_key
  145. # Re-put the first key and make sure that we renumber the last
  146. # key appropriately.
  147. puts "tTest029.e: put with cursor and verify renumber"
  148. if { [string compare $omethod "-btree"] == 0 } {
  149. set ret [eval {$dbc put} 
  150.     $txn $pflags {-current $first_key}]
  151. error_check_good dbc_put:DB_CURRENT $ret 0
  152. } else {
  153. set ret [eval {$dbc put} $txn $pflags {-before $first_key}]
  154. error_check_bad dbc_put:DB_BEFORE $ret 0
  155. }
  156. # Now check that the last record matches the last record number
  157. set ret [eval {$db get} $txn $gflags {$last_keynum}]
  158. error_check_good 
  159.     get_after_cursor_reput [lindex [lindex $ret 0] 1] $last_key
  160. error_check_good dbc_close [$dbc close] 0
  161. error_check_good db_close [$db close] 0
  162. }