sdb006.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: sdb006.tcl,v 11.12 2000/09/20 13:22:03 sue Exp $
  7. #
  8. # We'll test 2-way, 3-way, and 4-way joins and figure that if those work,
  9. # everything else does as well.  We'll create test databases called
  10. # sub1.db, sub2.db, sub3.db, and sub4.db.  The number on the database
  11. # describes the duplication -- duplicates are of the form 0, N, 2N, 3N, ...
  12. # where N is the number of the database.  Primary.db is the primary database,
  13. # and sub0.db is the database that has no matching duplicates.  All of
  14. # these are within a single database.
  15. #
  16. # We should test this on all btrees, all hash, and a combination thereof
  17. proc subdb006 {method {nentries 100} args } {
  18. source ./include.tcl
  19. global rand_init
  20. # NB: these flags are internal only, ok
  21. set args [convert_args $method $args]
  22. set omethod [convert_method $method]
  23. if { [is_record_based $method] == 1 || [is_rbtree $method] } {
  24. puts "tSubdb006 skipping for method $method."
  25. return
  26. }
  27. berkdb srand $rand_init
  28. foreach opt {" -dup" " -dupsort"} {
  29. append args $opt
  30. puts "Subdb006: $method ( $args ) Intra-subdb join"
  31. set txn ""
  32. #
  33. # Get a cursor in each subdb and move past the end of each
  34. # subdb.  Make sure we don't end up in another subdb.
  35. #
  36. puts "tSubdb006.a: Intra-subdb join"
  37. cleanup $testdir NULL
  38. set testfile $testdir/subdb006.db
  39. set psize [list 8192]
  40. set duplist {0 50 25 16 12}
  41. set numdb [llength $duplist]
  42. build_all_subdb $testfile [list $method] $psize 
  43.     $duplist $nentries $args
  44. # Build the primary
  45. puts "Subdb006: Building the primary database $method"
  46. set oflags "-create -mode 0644 [conv $omethod 
  47.     [berkdb random_int 1 2]]"
  48. set db [eval {berkdb_open} $oflags $testfile primary.db]
  49. error_check_good dbopen [is_valid_db $db] TRUE
  50. for { set i 0 } { $i < 1000 } { incr i } {
  51. set key [format "%04d" $i]
  52. set ret [$db put $key stub]
  53. error_check_good "primary put" $ret 0
  54. }
  55. error_check_good "primary close" [$db close] 0
  56. set did [open $dict]
  57. gets $did str
  58. do_join_subdb $testfile primary.db "1 0" $str
  59. gets $did str
  60. do_join_subdb $testfile primary.db "2 0" $str
  61. gets $did str
  62. do_join_subdb $testfile primary.db "3 0" $str
  63. gets $did str
  64. do_join_subdb $testfile primary.db "4 0" $str
  65. gets $did str
  66. do_join_subdb $testfile primary.db "1" $str
  67. gets $did str
  68. do_join_subdb $testfile primary.db "2" $str
  69. gets $did str
  70. do_join_subdb $testfile primary.db "3" $str
  71. gets $did str
  72. do_join_subdb $testfile primary.db "4" $str
  73. gets $did str
  74. do_join_subdb $testfile primary.db "1 2" $str
  75. gets $did str
  76. do_join_subdb $testfile primary.db "1 2 3" $str
  77. gets $did str
  78. do_join_subdb $testfile primary.db "1 2 3 4" $str
  79. gets $did str
  80. do_join_subdb $testfile primary.db "2 1" $str
  81. gets $did str
  82. do_join_subdb $testfile primary.db "3 2 1" $str
  83. gets $did str
  84. do_join_subdb $testfile primary.db "4 3 2 1" $str
  85. gets $did str
  86. do_join_subdb $testfile primary.db "1 3" $str
  87. gets $did str
  88. do_join_subdb $testfile primary.db "3 1" $str
  89. gets $did str
  90. do_join_subdb $testfile primary.db "1 4" $str
  91. gets $did str
  92. do_join_subdb $testfile primary.db "4 1" $str
  93. gets $did str
  94. do_join_subdb $testfile primary.db "2 3" $str
  95. gets $did str
  96. do_join_subdb $testfile primary.db "3 2" $str
  97. gets $did str
  98. do_join_subdb $testfile primary.db "2 4" $str
  99. gets $did str
  100. do_join_subdb $testfile primary.db "4 2" $str
  101. gets $did str
  102. do_join_subdb $testfile primary.db "3 4" $str
  103. gets $did str
  104. do_join_subdb $testfile primary.db "4 3" $str
  105. gets $did str
  106. do_join_subdb $testfile primary.db "2 3 4" $str
  107. gets $did str
  108. do_join_subdb $testfile primary.db "3 4 1" $str
  109. gets $did str
  110. do_join_subdb $testfile primary.db "4 2 1" $str
  111. gets $did str
  112. do_join_subdb $testfile primary.db "0 2 1" $str
  113. gets $did str
  114. do_join_subdb $testfile primary.db "3 2 0" $str
  115. gets $did str
  116. do_join_subdb $testfile primary.db "4 3 2 1" $str
  117. gets $did str
  118. do_join_subdb $testfile primary.db "4 3 0 1" $str
  119. close $did
  120. }
  121. }