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

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: ndbm.tcl,v 11.13 2000/08/25 14:21:51 sue Exp $
  7. #
  8. # Historic NDBM interface test.
  9. # Use the first 1000 entries from the dictionary.
  10. # Insert each with self as key and data; retrieve each.
  11. # After all are entered, retrieve all; compare output to original.
  12. # Then reopen the file, re-retrieve everything.
  13. # Finally, delete everything.
  14. proc ndbm { { nentries 1000 } } {
  15. source ./include.tcl
  16. puts "NDBM interfaces test: $nentries"
  17. # Create the database and open the dictionary
  18. set testfile $testdir/ndbmtest
  19. set t1 $testdir/t1
  20. set t2 $testdir/t2
  21. set t3 $testdir/t3
  22. cleanup $testdir NULL
  23. set db [berkdb ndbm_open -create -truncate -mode 0644 $testfile]
  24. error_check_good ndbm_open [is_substr $db ndbm] 1
  25. set did [open $dict]
  26. error_check_good rdonly_false [$db rdonly] 0
  27. set flags 0
  28. set txn 0
  29. set count 0
  30. set skippednullkey 0
  31. puts "tNDBM.a: put/get loop"
  32. # Here is the loop where we put and get each key/data pair
  33. while { [gets $did str] != -1 && $count < $nentries } {
  34. # NDBM can't handle zero-length keys
  35. if { [string length $str] == 0 } {
  36. set skippednullkey 1
  37. continue
  38. }
  39. set ret [$db store $str $str insert]
  40. error_check_good ndbm_store $ret 0
  41. set d [$db fetch $str]
  42. error_check_good ndbm_fetch $d $str
  43. incr count
  44. }
  45. close $did
  46. # Now we will get each key from the DB and compare the results
  47. # to the original.
  48. puts "tNDBM.b: dump file"
  49. set oid [open $t1 w]
  50. for { set key [$db firstkey] } { $key != -1 } {
  51.     set key [$db nextkey] } {
  52. puts $oid $key
  53. set d [$db fetch $key]
  54. error_check_good ndbm_refetch $d $key
  55. }
  56. # If we had to skip a zero-length key, juggle things to cover up
  57. # this fact in the dump.
  58. if { $skippednullkey == 1 } {
  59. puts $oid ""
  60. incr nentries 1
  61. }
  62. close $oid
  63. # Now compare the keys to see if they match the dictionary (or ints)
  64. set q q
  65. filehead $nentries $dict $t3
  66. filesort $t3 $t2
  67. filesort $t1 $t3
  68. error_check_good NDBM:diff($t3,$t2) 
  69.     [filecmp $t3 $t2] 0
  70. puts "tNDBM.c: pagf/dirf test"
  71. set fd [$db pagfno]
  72. error_check_bad pagf $fd -1
  73. set fd [$db dirfno]
  74. error_check_bad dirf $fd -1
  75. puts "tNDBM.d: close, open, and dump file"
  76. # Now, reopen the file and run the last test again.
  77. error_check_good ndbm_close [$db close] 0
  78. set db [berkdb ndbm_open -rdonly $testfile]
  79. error_check_good ndbm_open2 [is_substr $db ndbm] 1
  80. set oid [open $t1 w]
  81. error_check_good rdonly_true [$db rdonly] "rdonly:not owner"
  82. for { set key [$db firstkey] } { $key != -1 } {
  83.     set key [$db nextkey] } {
  84. puts $oid $key
  85. set d [$db fetch $key]
  86. error_check_good ndbm_refetch2 $d $key
  87. }
  88. if { $skippednullkey == 1 } {
  89. puts $oid ""
  90. }
  91. close $oid
  92. # Now compare the keys to see if they match the dictionary (or ints)
  93. filesort $t1 $t3
  94. error_check_good NDBM:diff($t2,$t3) 
  95.     [filecmp $t2 $t3] 0
  96. # Now, reopen the file and delete each entry
  97. puts "tNDBM.e: sequential scan and delete"
  98. error_check_good ndbm_close [$db close] 0
  99. set db [berkdb ndbm_open $testfile]
  100. error_check_good ndbm_open3 [is_substr $db ndbm] 1
  101. set oid [open $t1 w]
  102. for { set key [$db firstkey] } { $key != -1 } {
  103.     set key [$db nextkey] } {
  104. puts $oid $key
  105. set ret [$db delete $key]
  106. error_check_good ndbm_delete $ret 0
  107. }
  108. if { $skippednullkey == 1 } {
  109. puts $oid ""
  110. }
  111. close $oid
  112. # Now compare the keys to see if they match the dictionary (or ints)
  113. filesort $t1 $t3
  114. error_check_good NDBM:diff($t2,$t3) 
  115.     [filecmp $t2 $t3] 0
  116. error_check_good ndbm_close [$db close] 0
  117. }