sdb007.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: sdb007.tcl,v 11.13 2000/12/11 17:24:55 sue Exp $
  7. #
  8. # Sub DB Test 7 {access method}
  9. # Use the first 10,000 entries from the dictionary spread across each subdb.
  10. # Use a different page size for every subdb.
  11. # Insert each with self as key and data; retrieve each.
  12. # After all are entered, retrieve all; compare output to original.
  13. # Close file, reopen, do retrieve and re-verify.
  14. proc subdb007 { method {nentries 10000} args } {
  15. source ./include.tcl
  16. set args [convert_args $method $args]
  17. set omethod [convert_method $method]
  18. if { [is_queue $method] == 1 } {
  19. puts "Subdb007: skipping for method $method"
  20. return
  21. }
  22. set pgindex [lsearch -exact $args "-pagesize"]
  23. if { $pgindex != -1 } {
  24. puts "Subdb007: skipping for specific pagesizes"
  25. return
  26. }
  27. puts "Subdb007: $method ($args) subdb tests with different pagesizes"
  28. # Create the database and open the dictionary
  29. set testfile $testdir/subdb007.db
  30. set t1 $testdir/t1
  31. set t2 $testdir/t2
  32. set t3 $testdir/t3
  33. set t4 $testdir/t4
  34. cleanup $testdir NULL
  35. set txn ""
  36. set count 0
  37. if { [is_record_based $method] == 1 } {
  38. set checkfunc subdb007_recno.check
  39. } else {
  40. set checkfunc subdb007.check
  41. }
  42. puts "tSubdb007.a: create subdbs of different page sizes"
  43. set psize {8192 4096 2048 1024 512}
  44. set nsubdbs [llength $psize]
  45. for { set i 0 } { $i < $nsubdbs } { incr i } {
  46. lappend duplist -1
  47. }
  48. set newent [expr $nentries / $nsubdbs]
  49. build_all_subdb $testfile [list $method] $psize $duplist $newent $args
  50. # Now we will get each key from the DB and compare the results
  51. # to the original.
  52. for { set subdb 0 } { $subdb < $nsubdbs } { incr subdb } {
  53. puts "tSubdb007.b: dump file sub$subdb.db"
  54. set db [berkdb_open -unknown $testfile sub$subdb.db]
  55. dump_file $db $txn $t1 $checkfunc
  56. error_check_good db_close [$db close] 0
  57. # Now compare the keys to see if they match the dictionary
  58. # (or ints)
  59. if { [is_record_based $method] == 1 } {
  60. set oid [open $t2 w]
  61. for {set i 1} {$i <= $newent} {incr i} {
  62. puts $oid [expr $subdb * $newent + $i]
  63. }
  64. close $oid
  65. file rename -force $t1 $t3
  66. } else {
  67. set beg [expr $subdb * $newent]
  68. incr beg
  69. set end [expr $beg + $newent - 1]
  70. filehead $end $dict $t3 $beg
  71. filesort $t3 $t2
  72. filesort $t1 $t3
  73. }
  74. error_check_good Subdb007:diff($t3,$t2) 
  75.     [filecmp $t3 $t2] 0
  76. puts "tSubdb007.c: sub$subdb.db: close, open, and dump file"
  77. # Now, reopen the file and run the last test again.
  78. open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc 
  79.     dump_file_direction "-first" "-next" sub$subdb.db
  80. if { [is_record_based $method] != 1 } {
  81. filesort $t1 $t3
  82. }
  83. error_check_good Subdb007:diff($t2,$t3) 
  84.     [filecmp $t2 $t3] 0
  85. # Now, reopen the file and run the last test again in the
  86. # reverse direction.
  87. puts "tSubdb007.d: sub$subdb.db:
  88.     close, open, and dump file in reverse direction"
  89. open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc 
  90.     dump_file_direction "-last" "-prev" sub$subdb.db
  91. if { [is_record_based $method] != 1 } {
  92. filesort $t1 $t3
  93. }
  94. error_check_good Subdb007:diff($t3,$t2) 
  95.     [filecmp $t3 $t2] 0
  96. }
  97. }
  98. # Check function for Subdb007; keys and data are identical
  99. proc subdb007.check { key data } {
  100. error_check_good "key/data mismatch" $data $key
  101. }
  102. proc subdb007_recno.check { key data } {
  103. global dict
  104. global kvals
  105. error_check_good key"$key"_exists [info exists kvals($key)] 1
  106. error_check_good "key/data mismatch, key $key" $data $kvals($key)
  107. }