1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
# See the file LICENSE for redistribution information.
#
# Copyright (c) 1999-2002
# Sleepycat Software. All rights reserved.
#
# $Id: sdb001.tcl,v 1.1.1.1 2003/11/20 22:13:58 toshok Exp $
#
# TEST subdb001 Tests mixing db and subdb operations
# TEST Tests mixing db and subdb operations
# TEST Create a db, add data, try to create a subdb.
# TEST Test naming db and subdb with a leading - for correct parsing
# TEST Existence check -- test use of -excl with subdbs
# TEST
# TEST Test non-subdb and subdb operations
# TEST Test naming (filenames begin with -)
# TEST Test existence (cannot create subdb of same name with -excl)
proc subdb001 { method args } {
source ./include.tcl
global errorInfo
set args [convert_args $method $args]
set omethod [convert_method $method]
if { [is_queue $method] == 1 } {
puts "Subdb001: skipping for method $method"
return
}
puts "Subdb001: $method ($args) subdb and non-subdb tests"
set testfile $testdir/subdb001.db
set eindex [lsearch -exact $args "-env"]
if { $eindex != -1 } {
set env NULL
incr eindex
set env [lindex $args $eindex]
puts "Subdb001 skipping for env $env"
return
}
# Create the database and open the dictionary
set subdb subdb0
cleanup $testdir NULL
puts "\tSubdb001.a: Non-subdb database and subdb operations"
#
# Create a db with no subdbs. Add some data. Close. Try to
# open/add with a subdb. Should fail.
#
puts "\tSubdb001.a.0: Create db, add data, close, try subdb"
set db [eval {berkdb_open -create -mode 0644} \
$args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
set pflags ""
set gflags ""
set txn ""
set count 0
if { [is_record_based $method] == 1 } {
append gflags " -recno"
}
while { [gets $did str] != -1 && $count < 5 } {
if { [is_record_based $method] == 1 } {
global kvals
set key [expr $count + 1]
set kvals($key) $str
} else {
set key $str
}
set ret [eval \
{$db put} $txn $pflags {$key [chop_data $method $str]}]
error_check_good put $ret 0
set ret [eval {$db get} $gflags {$key}]
error_check_good \
get $ret [list [list $key [pad_data $method $str]]]
incr count
}
close $did
error_check_good db_close [$db close] 0
set ret [catch {eval {berkdb_open_noerr -create -mode 0644} $args \
{$omethod $testfile $subdb}} db]
error_check_bad dbopen $ret 0
#
# Create a db with no subdbs. Add no data. Close. Try to
# open/add with a subdb. Should fail.
#
set testfile $testdir/subdb001a.db
puts "\tSubdb001.a.1: Create db, close, try subdb"
#
# !!!
# Using -truncate is illegal when opening for subdbs, but we
# can use it here because we are not using subdbs for this
# create.
#
set db [eval {berkdb_open -create -truncate -mode 0644} $args \
{$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
error_check_good db_close [$db close] 0
set ret [catch {eval {berkdb_open_noerr -create -mode 0644} $args \
{$omethod $testfile $subdb}} db]
error_check_bad dbopen $ret 0
if { [is_queue $method] == 1 } {
puts "Subdb001: skipping remainder of test for method $method"
return
}
#
# Test naming, db and subdb names beginning with -.
#
puts "\tSubdb001.b: Naming"
set cwd [pwd]
cd $testdir
set testfile1 -subdb001.db
set subdb -subdb
puts "\tSubdb001.b.0: Create db and subdb with -name, no --"
set ret [catch {eval {berkdb_open -create -mode 0644} $args \
{$omethod $testfile1 $subdb}} db]
error_check_bad dbopen $ret 0
puts "\tSubdb001.b.1: Create db and subdb with -name, with --"
set db [eval {berkdb_open -create -mode 0644} $args \
{$omethod -- $testfile1 $subdb}]
error_check_good dbopen [is_valid_db $db] TRUE
error_check_good db_close [$db close] 0
cd $cwd
#
# Create 1 db with 1 subdb. Try to create another subdb of
# the same name. Should fail.
#
puts "\tSubdb001.c: Truncate check"
set testfile $testdir/subdb001c.db
set subdb subdb
set stat [catch {eval {berkdb_open_noerr -create -truncate -mode 0644} \
$args {$omethod $testfile $subdb}} ret]
error_check_bad dbopen $stat 0
error_check_good trunc [is_substr $ret \
"illegal with multiple databases"] 1
puts "\tSubdb001.d: Existence check"
set testfile $testdir/subdb001d.db
set subdb subdb
set ret [catch {eval {berkdb_open -create -excl -mode 0644} $args \
{$omethod $testfile $subdb}} db]
error_check_good dbopen [is_valid_db $db] TRUE
set ret [catch {eval {berkdb_open_noerr -create -excl -mode 0644} \
$args {$omethod $testfile $subdb}} db1]
error_check_bad dbopen $ret 0
error_check_good db_close [$db close] 0
return
}
|