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

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: test065.tcl,v 11.8 2000/08/25 14:21:58 sue Exp $
  7. #
  8. # DB Test 65: Test of DB->stat(DB_RECORDCOUNT)
  9. proc test065 { method args } {
  10. source ./include.tcl
  11. global errorCode
  12. global alphabet
  13. set args [convert_args $method $args]
  14. set omethod [convert_method $method]
  15. set tnum 65
  16. set eindex [lsearch -exact $args "-env"]
  17. #
  18. # If we are using an env, then testfile should just be the db name.
  19. # Otherwise it is the test directory and the name.
  20. if { $eindex == -1 } {
  21. set testfile $testdir/test0$tnum.db
  22. set env NULL
  23. } else {
  24. set testfile test0$tnum.db
  25. incr eindex
  26. set env [lindex $args $eindex]
  27. }
  28. cleanup $testdir $env
  29. puts "Test0$tnum: $method ($args) DB->stat(DB_RECORDCOUNT) test."
  30. puts "tTest0$tnum.a: Create database and check it while empty."
  31. set db [eval {berkdb_open_noerr -create -truncate -mode 0644} 
  32.     $omethod $args $testfile]
  33. error_check_good db_open [is_valid_db $db] TRUE
  34. set ret [catch {eval $db stat -recordcount} res]
  35. error_check_good db_close [$db close] 0
  36. if { ([is_record_based $method] && ![is_queue $method]) 
  37.     || [is_rbtree $method] } {
  38. error_check_good recordcount_ok [lindex [lindex $res 0] 1] 0
  39. } else {
  40. error_check_good 
  41.     recordcount_notok [is_substr $errorCode "EINVAL"] 1
  42. puts "tTest0$tnum: Test complete for method $method."
  43. return
  44. }
  45. # If we've got this far, we're on an access method for
  46. # which DB_RECORDCOUNT makes sense.  Thus, we no longer
  47. # catch EINVALs, and no longer care about __db_errs.
  48. set db [eval {berkdb_open -create -mode 0644} $omethod $args $testfile]
  49. puts "tTest0$tnum.b: put 10000 keys."
  50. if { [is_record_based $method] } {
  51. set gflags " -recno "
  52. set keypfx ""
  53. } else {
  54. set gflags ""
  55. set keypfx "key"
  56. }
  57. set data [pad_data $method $alphabet]
  58. for { set ndx 1 } { $ndx <= 10000 } { incr ndx } {
  59. set ret [eval {$db put} $keypfx$ndx $data]
  60. error_check_good db_put $ret 0
  61. }
  62. set ret [$db stat -recordcount]
  63. error_check_good 
  64.     recordcount_after_puts [lindex [lindex $ret 0] 1] 10000
  65. puts "tTest0$tnum.c: delete 9000 keys."
  66. for { set ndx 1 } { $ndx <= 9000 } { incr ndx } {
  67. if { [is_rrecno $method] == 1 } {
  68. # if we're renumbering, when we hit key 5001 we'll
  69. # have deleted 5000 and we'll croak!  So delete key
  70. # 1, repeatedly.
  71. set ret [eval {$db del} [concat $keypfx 1]]
  72. } else {
  73. set ret [eval {$db del} $keypfx$ndx]
  74. }
  75. error_check_good db_del $ret 0
  76. }
  77. set ret [$db stat -recordcount]
  78. if { [is_rrecno $method] == 1 || [is_rbtree $method] == 1 } {
  79. # We allow renumbering--thus the stat should return 1000
  80. error_check_good 
  81.     recordcount_after_dels [lindex [lindex $ret 0] 1] 1000
  82. } else {
  83. # No renumbering--no change in RECORDCOUNT!
  84. error_check_good 
  85.     recordcount_after_dels [lindex [lindex $ret 0] 1] 10000
  86. }
  87. puts "tTest0$tnum.d: put 8000 new keys at the beginning."
  88. for { set ndx 1 } { $ndx <= 8000 } {incr ndx } {
  89. set ret [eval {$db put} $keypfx$ndx $data]
  90. error_check_good db_put_beginning $ret 0
  91. }
  92. set ret [$db stat -recordcount]
  93. if { [is_rrecno $method] == 1 } {
  94. # With renumbering we're back up to 8000
  95. error_check_good 
  96.     recordcount_after_dels [lindex [lindex $ret 0] 1] 8000
  97. } elseif { [is_rbtree $method] == 1 } {
  98. # Total records in a btree is now 9000
  99. error_check_good 
  100.     recordcount_after_dels [lindex [lindex $ret 0] 1] 9000
  101. } else {
  102. # No renumbering--still no change in RECORDCOUNT.
  103. error_check_good 
  104.     recordcount_after_dels [lindex [lindex $ret 0] 1] 10000
  105. }
  106. puts "tTest0$tnum.e: put 8000 new keys off the end."
  107. for { set ndx 9001 } { $ndx <= 17000 } {incr ndx } {
  108. set ret [eval {$db put} $keypfx$ndx $data]
  109. error_check_good db_put_end $ret 0
  110. }
  111. set ret [$db stat -recordcount]
  112. if { [is_rbtree $method] != 1 } {
  113. # If this is a recno database, the record count should
  114. # be up to 17000, the largest number we've seen, with
  115. # or without renumbering.
  116. error_check_good 
  117.     recordcount_after_dels [lindex [lindex $ret 0] 1] 17000
  118. } else {
  119. # In an rbtree, 1000 of those keys were overwrites,
  120. # so there are 7000 new keys + 9000 old keys == 16000
  121. error_check_good 
  122.     recordcount_after_dels [lindex [lindex $ret 0] 1] 16000
  123. }
  124. error_check_good db_close [$db close] 0
  125. }