⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btree.test

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 TEST
📖 第 1 页 / 共 2 页
字号:
#do_test btree-7.1 {  btree_begin_transaction $::b1} {}catch {unset key}catch {unset data}# Check to see that data on overflow pages work correctly.#do_test btree-8.1 {  set data "*** This is a very long key "  while {[string length $data]<1234} {append data $data}  set ::data $data  btree_insert $::c1 2020 $data} {}btree_page_dump $::b1 1btree_page_dump $::b1 2do_test btree-8.1.1 {  lindex [btree_pager_stats $::b1] 1} {1}#btree_pager_ref_dump $::b1do_test btree-8.2 {  btree_move_to $::c1 2020  string length [btree_data $::c1]} [string length $::data]do_test btree-8.3 {  btree_data $::c1} $::datado_test btree-8.4 {  btree_delete $::c1} {}do_test btree-8.4.1 {  lindex [btree_get_meta $::b1] 0} [expr {int(([string length $::data]-238+1019)/1020)}]do_test btree-8.4.2 {  btree_integrity_check $::b1 1 2} {}do_test btree-8.5 {  set data "*** This is an even longer key "  while {[string length $data]<2000} {append data $data}  append data END  set ::data $data  btree_insert $::c1 2030 $data} {}do_test btree-8.6 {  btree_move_to $::c1 2030  string length [btree_data $::c1]} [string length $::data]do_test btree-8.7 {  btree_data $::c1} $::datado_test btree-8.8 {  btree_commit $::b1  btree_data $::c1} $::datado_test btree-8.9.1 {  btree_close_cursor $::c1  btree_close $::b1  set ::b1 [btree_open test1.bt 2000 0]  set ::c1 [btree_cursor $::b1 1 1]  btree_move_to $::c1 2030  btree_data $::c1} $::datado_test btree-8.9.2 {  btree_integrity_check $::b1 1 2} {}do_test btree-8.10 {  btree_begin_transaction $::b1  btree_delete $::c1} {}do_test btree-8.11 {  lindex [btree_get_meta $::b1] 0} {4}# Now check out keys on overflow pages.#do_test btree-8.12.1 {  set ::keyprefix "This is a long prefix to a key "  while {[string length $::keyprefix]<256} {append ::keyprefix $::keyprefix}  btree_close_cursor $::c1  btree_clear_table $::b1 2  lindex [btree_get_meta $::b1] 0} {4}do_test btree-8.12.2 {  btree_integrity_check $::b1 1 2} {}do_test btree-8.12.3 {  set ::c1 [btree_cursor $::b1 2 1]  btree_insert $::c1 ${::keyprefix}1 1  btree_first $::c1  btree_data $::c1} {1}do_test btree-8.13 {  btree_key $::c1} ${keyprefix}1do_test btree-8.14 {  btree_insert $::c1 ${::keyprefix}2 2  btree_insert $::c1 ${::keyprefix}3 3  btree_last $::c1  btree_key $::c1} ${keyprefix}3do_test btree-8.15 {  btree_move_to $::c1 ${::keyprefix}2  btree_data $::c1} {2}do_test btree-8.16 {  btree_move_to $::c1 ${::keyprefix}1  btree_data $::c1} {1}do_test btree-8.17 {  btree_move_to $::c1 ${::keyprefix}3  btree_data $::c1} {3}do_test btree-8.18 {  lindex [btree_get_meta $::b1] 0} {1}do_test btree-8.19 {  btree_move_to $::c1 ${::keyprefix}2  btree_key $::c1} ${::keyprefix}2#btree_page_dump $::b1 2do_test btree-8.20 {  btree_delete $::c1  btree_next $::c1  btree_key $::c1} ${::keyprefix}3#btree_page_dump $::b1 2do_test btree-8.21 {  lindex [btree_get_meta $::b1] 0} {2}do_test btree-8.22 {  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-8.23.1 {  btree_close_cursor $::c1  btree_drop_table $::b1 2  btree_integrity_check $::b1 1} {}do_test btree-8.23.2 {  btree_create_table $::b1 0} {2}do_test btree-8.23.3 {  set ::c1 [btree_cursor $::b1 2 1]  lindex [btree_get_meta $::b1] 0} {4}do_test btree-8.24 {  lindex [btree_pager_stats $::b1] 1} {2}#btree_pager_ref_dump $::b1do_test btree-8.25 {  btree_integrity_check $::b1 1 2} {}# Check page splitting logic#do_test btree-9.1 {  for {set i 1} {$i<=19} {incr i} {    set key [format %03d $i]    set data "*** $key *** $key *** $key *** $key ***"    btree_insert $::c1 $key $data  }} {}#btree_tree_dump $::b1 2#btree_pager_ref_dump $::b1#set pager_refinfo_enable 1do_test btree-9.2 {  btree_insert $::c1 020 {*** 020 *** 020 *** 020 *** 020 ***}  select_keys $::c1} {001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020}#btree_page_dump $::b1 2#btree_pager_ref_dump $::b1#set pager_refinfo_enable 0# The previous "select_keys" command left the cursor pointing at the root# page.  So there should only be two pages checked out.  2 (the root) and# page 1.do_test btree-9.2.1 {  lindex [btree_pager_stats $::b1] 1} {2}for {set i 1} {$i<=20} {incr i} {  do_test btree-9.3.$i.1 [subst {    btree_move_to $::c1 [format %03d $i]    btree_key $::c1  }] [format %03d $i]  do_test btree-9.3.$i.2 [subst {    btree_move_to $::c1 [format %03d $i]    string range \[btree_data $::c1\] 0 10  }] "*** [format %03d $i] ***"}do_test btree-9.4.1 {  lindex [btree_pager_stats $::b1] 1} {2}# Check the page joining logic.##btree_page_dump $::b1 2#btree_pager_ref_dump $::b1do_test btree-9.4.2 {  btree_move_to $::c1 005  btree_delete $::c1} {}#btree_page_dump $::b1 2for {set i 1} {$i<=19} {incr i} {  if {$i==5} continue  do_test btree-9.5.$i.1 [subst {    btree_move_to $::c1 [format %03d $i]    btree_key $::c1  }] [format %03d $i]  do_test btree-9.5.$i.2 [subst {    btree_move_to $::c1 [format %03d $i]    string range \[btree_data $::c1\] 0 10  }] "*** [format %03d $i] ***"}#btree_pager_ref_dump $::b1do_test btree-9.6 {  btree_close_cursor $::c1  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-9.7 {  btree_integrity_check $::b1 1 2} {}do_test btree-9.8 {  btree_rollback $::b1  lindex [btree_pager_stats $::b1] 1} {0}do_test btree-9.9 {  btree_integrity_check $::b1 1 2} {}do_test btree-9.10 {  btree_close $::b1  set ::b1 [btree_open test1.bt 2000 0]  btree_integrity_check $::b1 1 2} {}# Create a tree of depth two.  That is, there is a single divider entry# on the root pages and two leaf pages.  Then delete the divider entry# see what happens.#do_test btree-10.1 {  btree_begin_transaction $::b1  btree_clear_table $::b1 2  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-10.2 {  set ::c1 [btree_cursor $::b1 2 1]  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-10.3 {  for {set i 1} {$i<=30} {incr i} {    set key [format %03d $i]    set data "*** $key *** $key *** $key *** $key ***"    btree_insert $::c1 $key $data  }  select_keys $::c1} {001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030}#btree_tree_dump $::b1 2do_test btree-10.4 {  # The divider entry is 012.  This is found by uncommenting the   # btree_tree_dump call above and looking at the tree.  If the page size  # changes, this test will no longer work.  btree_move_to $::c1 012  btree_delete $::c1  select_keys $::c1} {001 002 003 004 005 006 007 008 009 010 011 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030}#btree_pager_ref_dump $::b1#btree_tree_dump $::b1 2for {set i 1} {$i<=30} {incr i} {  # Check the number of unreference pages.  This should be 3 in most cases,  # but 2 when the cursor is pointing to the divider entry which is now 013.  do_test btree-10.5.$i {    btree_move_to $::c1 [format %03d $i]    lindex [btree_pager_stats $::b1] 1  } [expr {$i==13?2:3}]  #btree_pager_ref_dump $::b1  #btree_tree_dump $::b1 2}# Create a tree with lots more pages#catch {unset ::data}catch {unset ::key}for {set i 31} {$i<=2000} {incr i} {  do_test btree-11.1.$i.1 {    set key [format %03d $i]    set ::data "*** $key *** $key *** $key *** $key ***"    btree_insert $::c1 $key $data    btree_move_to $::c1 $key    btree_key $::c1  } [format %03d $i]  do_test btree-11.1.$i.2 {    btree_data $::c1  } $::data  set ::key [format %03d [expr {$i/2}]]  if {$::key=="012"} {set ::key 013}  do_test btree-11.1.$i.3 {    btree_move_to $::c1 $::key    btree_key $::c1  } $::key}catch {unset ::data}catch {unset ::key}# Make sure our reference count is still correct.#do_test btree-11.2 {  btree_close_cursor $::c1  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-11.3 {  set ::c1 [btree_cursor $::b1 2 1]  lindex [btree_pager_stats $::b1] 1} {2}# Delete the dividers on the root page##btree_page_dump $::b1 2do_test btree-11.4 {  btree_move_to $::c1 1667  btree_delete $::c1  btree_move_to $::c1 1667  set k [btree_key $::c1]  if {$k==1666} {    set k [btree_next $::c1]  }  btree_key $::c1} {1668}#btree_page_dump $::b1 2# Change the data on an intermediate node such that the node becomes overfull# and has to split.  We happen to know that intermediate nodes exist on# 337, 401 and 465 by the btree_page_dumps above#catch {unset ::data}set ::data {This is going to be a very long data segment}append ::data $::dataappend ::data $::datado_test btree-12.1 {  btree_insert $::c1 337 $::data  btree_move_to $::c1 337  btree_data $::c1} $::datado_test btree-12.2 {  btree_insert $::c1 401 $::data  btree_move_to $::c1 401  btree_data $::c1} $::datado_test btree-12.3 {  btree_insert $::c1 465 $::data  btree_move_to $::c1 465  btree_data $::c1} $::datado_test btree-12.4 {  btree_move_to $::c1 337  btree_key $::c1} {337}do_test btree-12.5 {  btree_data $::c1} $::datado_test btree-12.6 {  btree_next $::c1  btree_key $::c1} {338}do_test btree-12.7 {  btree_move_to $::c1 464  btree_key $::c1} {464}do_test btree-12.8 {  btree_next $::c1  btree_data $::c1} $::datado_test btree-12.9 {  btree_next $::c1  btree_key $::c1} {466}do_test btree-12.10 {  btree_move_to $::c1 400  btree_key $::c1} {400}do_test btree-12.11 {  btree_next $::c1  btree_data $::c1} $::datado_test btree-12.12 {  btree_next $::c1  btree_key $::c1} {402}# btree_commit $::b1# btree_tree_dump $::b1 1do_test btree-13.1 {  btree_integrity_check $::b1 1 2} {}# To Do:##   1.  Do some deletes from the 3-layer tree#   2.  Commit and reopen the database#   3.  Read every 15th entry and make sure it works#   4.  Implement btree_sanity and put it throughout this script#do_test btree-15.98 {  btree_close_cursor $::c1  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-15.99 {  btree_rollback $::b1  lindex [btree_pager_stats $::b1] 1} {0}btree_pager_ref_dump $::b1# Miscellaneous tests.## btree-16.1 - Check that a statement cannot be started if a transaction #              is not active.# btree-16.2 - Check that it is an error to request more payload from a #              btree entry than the entry contains.do_test btree-16.1 {  catch {btree_begin_statement $::b1} msg  set msg} SQLITE_ERRORdo_test btree-16.2 {  btree_begin_transaction $::b1  set ::c1 [btree_cursor $::b1 2 1]  btree_insert $::c1 1 helloworld  btree_close_cursor $::c1  btree_commit $::b1} {}do_test btree-16.3 {  set ::c1 [btree_cursor $::b1 2 1]  btree_first $::c1} 0do_test btree-16.4 {  catch {btree_data $::c1 [expr [btree_payload_size $::c1] + 10]} msg  set msg} SQLITE_ERRORif {$tcl_platform(platform)=="unix"} {  do_test btree-16.5 {    btree_close $::b1    set ::origperm [file attributes test1.bt -permissions]    file attributes test1.bt -permissions o-w,g-w,a-w    set ::b1 [btree_open test1.bt 2000 0]    catch {btree_cursor $::b1 2 1} msg    file attributes test1.bt -permissions $::origperm    btree_close $::b1    set ::b1 [btree_open test1.bt 2000 0]    set msg  } {SQLITE_READONLY}}do_test btree-16.6 {  set ::c1 [btree_cursor $::b1 2 1]  set ::c2 [btree_cursor $::b1 2 1]  btree_begin_transaction $::b1  for {set i 0} {$i<100} {incr i} {    btree_insert $::c1 $i [string repeat helloworld 10]  }  btree_last $::c2  btree_insert $::c1 100 [string repeat helloworld 10]} {}do_test btree-16.7 {  btree_close_cursor $::c1  btree_close_cursor $::c2  btree_commit $::b1  set ::c1 [btree_cursor $::b1 2 1]  catch {btree_insert $::c1 101 helloworld} msg  set msg} {SQLITE_ERROR}do_test btree-16.8 {  btree_first $::c1  catch {btree_delete $::c1} msg  set msg} {SQLITE_ERROR}do_test btree-16.9 {  btree_close_cursor $::c1  btree_begin_transaction $::b1  set ::c1 [btree_cursor $::b1 2 0]  catch {btree_insert $::c1 101 helloworld} msg  set msg} {SQLITE_PERM}do_test btree-16.10 {  catch {btree_delete $::c1} msg  set msg} {SQLITE_PERM}# As of 2006-08-16 (version 3.3.7+) a read cursor will no# longer block a write cursor from the same database# connectiin.  The following three tests uses to return# the SQLITE_LOCK error, but no more.#do_test btree-16.11 {  btree_close_cursor $::c1  set ::c2 [btree_cursor $::b1 2 1]  set ::c1 [btree_cursor $::b1 2 0]  catch {btree_insert $::c2 101 helloworld} msg  set msg} {}do_test btree-16.12 {  btree_first $::c2  catch {btree_delete $::c2} msg  set msg} {}do_test btree-16.13 {  catch {btree_clear_table $::b1 2} msg  set msg} {}do_test btree-16.14 {  btree_close_cursor $::c1  btree_close_cursor $::c2  btree_commit $::b1  catch {btree_clear_table $::b1 2} msg  set msg} {SQLITE_ERROR}do_test btree-16.15 {  catch {btree_drop_table $::b1 2} msg  set msg} {SQLITE_ERROR}do_test btree-16.16 {  btree_begin_transaction $::b1  set ::c1 [btree_cursor $::b1 2 0]  catch {btree_drop_table $::b1 2} msg  set msg} {SQLITE_LOCKED}do_test btree-99.1 {  btree_close $::b1} {}catch {unset data}catch {unset key}finish_test

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -