test055.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: test055.tcl,v 11.11 2000/08/25 14:21:57 sue Exp $
  7. #
  8. # Test055:
  9. # This test checks basic cursor operations.
  10. # There are N different scenarios to tests:
  11. # 1. (no dups) Set cursor, retrieve current.
  12. # 2. (no dups) Set cursor, retrieve next.
  13. # 3. (no dups) Set cursor, retrieve prev.
  14. proc test055 { method args } {
  15. global errorInfo
  16. source ./include.tcl
  17. set args [convert_args $method $args]
  18. set omethod [convert_method $method]
  19. puts "Test055: $method interspersed cursor and normal operations"
  20. # Create the database and open the dictionary
  21. set eindex [lsearch -exact $args "-env"]
  22. #
  23. # If we are using an env, then testfile should just be the db name.
  24. # Otherwise it is the test directory and the name.
  25. if { $eindex == -1 } {
  26. set testfile $testdir/test055.db
  27. set env NULL
  28. } else {
  29. set testfile test055.db
  30. incr eindex
  31. set env [lindex $args $eindex]
  32. }
  33. cleanup $testdir $env
  34. set flags ""
  35. set txn ""
  36. puts "tTest055.a: No duplicates"
  37. set db [eval {berkdb_open -create -truncate -mode 0644 $omethod } 
  38.     $args {$testfile}]
  39. error_check_good db_open:nodup [is_valid_db $db] TRUE
  40. set curs [eval {$db cursor} $txn]
  41. error_check_good curs_open:nodup [is_substr $curs $db] 1
  42. # Put three keys in the database
  43. for { set key 1 } { $key <= 3 } {incr key} {
  44. set r [eval {$db put} $txn $flags {$key datum$key}]
  45. error_check_good put $r 0
  46. }
  47. # Retrieve keys sequentially so we can figure out their order
  48. set i 1
  49. for {set d [$curs get -first] } { [llength $d] != 0 } {
  50. set d [$curs get -next] } {
  51. set key_set($i) [lindex [lindex $d 0] 0]
  52. incr i
  53. }
  54. # TEST CASE 1
  55. puts "tTest055.a1: Set cursor, retrieve current"
  56. # Now set the cursor on the middle on.
  57. set r [$curs get -set $key_set(2)]
  58. error_check_bad cursor_get:DB_SET [llength $r] 0
  59. set k [lindex [lindex $r 0] 0]
  60. set d [lindex [lindex $r 0] 1]
  61. error_check_good curs_get:DB_SET:key $k $key_set(2)
  62. error_check_good 
  63.     curs_get:DB_SET:data $d [pad_data $method datum$key_set(2)]
  64. # Now retrieve current
  65. set r [$curs get -current]
  66. error_check_bad cursor_get:DB_CURRENT [llength $r] 0
  67. set k [lindex [lindex $r 0] 0]
  68. set d [lindex [lindex $r 0] 1]
  69. error_check_good curs_get:DB_CURRENT:key $k $key_set(2)
  70. error_check_good 
  71.     curs_get:DB_CURRENT:data $d [pad_data $method datum$key_set(2)]
  72. # TEST CASE 2
  73. puts "tTest055.a2: Set cursor, retrieve previous"
  74. set r [$curs get -prev]
  75. error_check_bad cursor_get:DB_PREV [llength $r] 0
  76. set k [lindex [lindex $r 0] 0]
  77. set d [lindex [lindex $r 0] 1]
  78. error_check_good curs_get:DB_PREV:key $k $key_set(1)
  79. error_check_good 
  80.     curs_get:DB_PREV:data $d [pad_data $method datum$key_set(1)]
  81. #TEST CASE 3
  82. puts "tTest055.a2: Set cursor, retrieve next"
  83. # Now set the cursor on the middle on.
  84. set r [$curs get -set $key_set(2)]
  85. error_check_bad cursor_get:DB_SET [llength $r] 0
  86. set k [lindex [lindex $r 0] 0]
  87. set d [lindex [lindex $r 0] 1]
  88. error_check_good curs_get:DB_SET:key $k $key_set(2)
  89. error_check_good 
  90.     curs_get:DB_SET:data $d [pad_data $method datum$key_set(2)]
  91. # Now retrieve next
  92. set r [$curs get -next]
  93. error_check_bad cursor_get:DB_NEXT [llength $r] 0
  94. set k [lindex [lindex $r 0] 0]
  95. set d [lindex [lindex $r 0] 1]
  96. error_check_good curs_get:DB_NEXT:key $k $key_set(3)
  97. error_check_good 
  98.     curs_get:DB_NEXT:data $d [pad_data $method datum$key_set(3)]
  99. # Close cursor and database.
  100. error_check_good curs_close [$curs close] 0
  101. error_check_good db_close [$db close] 0
  102. }