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

📄 btree.test

📁 sqlite-3.4.1,嵌入式数据库.是一个功能强大的开源数据库,给学习和研发以及小型公司的发展带来了全所未有的好处.
💻 TEST
📖 第 1 页 / 共 2 页
字号:
# 2001 September 15## The author disclaims copyright to this source code.  In place of# a legal notice, here is a blessing:##    May you do good and not evil.#    May you find forgiveness for yourself and forgive others.#    May you share freely, never taking more than you give.##***********************************************************************# This file implements regression tests for SQLite library.  The# focus of this script is btree database backend## $Id: btree.test,v 1.40 2007/06/25 08:16:58 danielk1977 Exp $set testdir [file dirname $argv0]source $testdir/tester.tclifcapable default_autovacuum {  finish_test  return}# Basic functionality.  Open and close a database.#do_test btree-1.1 {  file delete -force test1.bt  file delete -force test1.bt-journal  set rc [catch {btree_open test1.bt 2000 0} ::b1]} {0}# The second element of the list returned by btree_pager_stats is the# number of pages currently checked out.  We'll be checking this value# frequently during this test script, to make sure the btree library# is properly releasing the pages it checks out, and thus avoiding# page leaks.#do_test btree-1.1.1 {  lindex [btree_pager_stats $::b1] 1} {0}do_test btree-1.2 {  set rc [catch {btree_open test1.bt 2000 0} ::b2]} {0}do_test btree-1.3 {  set rc [catch {btree_close $::b2} msg]  lappend rc $msg} {0 {}}# Do an insert and verify that the database file grows in size.#do_test btree-1.4 {  set rc [catch {btree_begin_transaction $::b1} msg]  lappend rc $msg} {0 {}}do_test btree-1.4.1 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-1.5 {  set rc [catch {btree_cursor $::b1 1 1} ::c1]  if {$rc} {lappend rc $::c1}  set rc} {0}do_test btree-1.6 {  set rc [catch {btree_insert $::c1 100 1.00} msg]  lappend rc $msg} {0 {}}do_test btree-1.7 {  btree_move_to $::c1 100  btree_key $::c1} {100}do_test btree-1.8 {  btree_data $::c1} {1.00}do_test btree-1.9 {  set rc [catch {btree_close_cursor $::c1} msg]  lappend rc $msg} {0 {}}do_test btree-1.10 {  set rc [catch {btree_commit $::b1} msg]  lappend rc $msg} {0 {}}do_test btree-1.11 {  file size test1.bt} {1024}do_test btree-1.12 {  lindex [btree_pager_stats $::b1] 1} {0}# Reopen the database and attempt to read the record that we wrote.#do_test btree-2.1 {  set rc [catch {btree_cursor $::b1 1 1} ::c1]  if {$rc} {lappend rc $::c1}  set rc} {0}do_test btree-2.1.1 {  btree_cursor_list $::b1} {}do_test btree-2.2 {  btree_move_to $::c1 99} {1}do_test btree-2.3 {  btree_move_to $::c1 101} {-1}do_test btree-2.4 {  btree_move_to $::c1 100} {0}do_test btree-2.5 {  btree_key $::c1} {100}do_test btree-2.6 {  btree_data $::c1} {1.00}do_test btree-2.7 {  lindex [btree_pager_stats $::b1] 1} {1}# Do some additional inserts#do_test btree-3.1 {  btree_begin_transaction $::b1  btree_insert $::c1 200 2.00  btree_move_to $::c1 200  btree_key $::c1} {200}do_test btree-3.1.1 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-3.2 {  btree_insert $::c1 300 3.00  btree_move_to $::c1 300  btree_key $::c1} {300}do_test btree-3.4 {  btree_insert $::c1 400 4.00  btree_move_to $::c1 400  btree_key $::c1} {400}do_test btree-3.5 {  btree_insert $::c1 500 5.00  btree_move_to $::c1 500  btree_key $::c1} {500}do_test btree-3.6 {  btree_insert $::c1 600 6.00  btree_move_to $::c1 600  btree_key $::c1} {600}#btree_page_dump $::b1 2do_test btree-3.7 {  set rc [btree_move_to $::c1 0]  expr {$rc>0}} {1}do_test btree-3.8 {  btree_key $::c1} {100}do_test btree-3.9 {  btree_data $::c1} {1.00}do_test btree-3.10 {  btree_next $::c1  btree_key $::c1} {200}do_test btree-3.11 {  btree_data $::c1} {2.00}do_test btree-3.12 {  btree_next $::c1  btree_key $::c1} {300}do_test btree-3.13 {  btree_data $::c1} {3.00}do_test btree-3.14 {  btree_next $::c1  btree_key $::c1} {400}do_test btree-3.15 {  btree_data $::c1} {4.00}do_test btree-3.16 {  btree_next $::c1  btree_key $::c1} {500}do_test btree-3.17 {  btree_data $::c1} {5.00}do_test btree-3.18 {  btree_next $::c1  btree_key $::c1} {600}do_test btree-3.19 {  btree_data $::c1} {6.00}do_test btree-3.20.1 {  btree_next $::c1  btree_key $::c1} {0}do_test btree-3.20.2 {  btree_eof $::c1} {1}# This test case used to test that one couldn't request data from an # invalid cursor. That is now an assert()ed condition.## do_test btree-3.21 {#   set rc [catch {btree_data $::c1} res]#   lappend rc $res# } {1 SQLITE_INTERNAL}# Commit the changes, reopen and reread the data#do_test btree-3.22 {  set rc [catch {btree_close_cursor $::c1} msg]  lappend rc $msg} {0 {}}do_test btree-3.22.1 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-3.23 {  set rc [catch {btree_commit $::b1} msg]  lappend rc $msg} {0 {}}do_test btree-3.23.1 {  lindex [btree_pager_stats $::b1] 1} {0}do_test btree-3.24 {  file size test1.bt} {1024}do_test btree-3.25 {  set rc [catch {btree_cursor $::b1 1 1} ::c1]  if {$rc} {lappend rc $::c1}  set rc} {0}do_test btree-3.25.1 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-3.26 {  set rc [btree_move_to $::c1 0]  expr {$rc>0}} {1}do_test btree-3.27 {  btree_key $::c1} {100}do_test btree-3.28 {  btree_data $::c1} {1.00}do_test btree-3.29 {  btree_next $::c1  btree_key $::c1} {200}do_test btree-3.30 {  btree_data $::c1} {2.00}do_test btree-3.31 {  btree_next $::c1  btree_key $::c1} {300}do_test btree-3.32 {  btree_data $::c1} {3.00}do_test btree-3.33 {  btree_next $::c1  btree_key $::c1} {400}do_test btree-3.34 {  btree_data $::c1} {4.00}do_test btree-3.35 {  btree_next $::c1  btree_key $::c1} {500}do_test btree-3.36 {  btree_data $::c1} {5.00}do_test btree-3.37 {  btree_next $::c1  btree_key $::c1} {600}do_test btree-3.38 {  btree_data $::c1} {6.00}do_test btree-3.39 {  btree_next $::c1  btree_key $::c1} {0}# This test case used to test that requesting data from an invalid cursor# returned SQLITE_INTERNAL. That is now an assert()ed condition.## do_test btree-3.40 {#   set rc [catch {btree_data $::c1} res]#   lappend rc $res# } {1 SQLITE_INTERNAL}do_test btree-3.41 {  lindex [btree_pager_stats $::b1] 1} {1}# Now try a delete#do_test btree-4.1 {  btree_begin_transaction $::b1  btree_move_to $::c1 100  btree_key $::c1} {100}do_test btree-4.1.1 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-4.2 {  btree_delete $::c1} {}do_test btree-4.3 {  btree_move_to $::c1 100  btree_key $::c1} {200}do_test btree-4.4 {  btree_next $::c1  btree_key $::c1} {300}do_test btree-4.5 {  btree_next $::c1  btree_key $::c1} {400}do_test btree-4.4 {  btree_move_to $::c1 0  set r {}  while 1 {    set key [btree_key $::c1]    if {[btree_eof $::c1]} break    lappend r $key    lappend r [btree_data $::c1]    btree_next $::c1  }  set r   } {200 2.00 300 3.00 400 4.00 500 5.00 600 6.00}# Commit and make sure the delete is still there.#do_test btree-4.5 {  btree_commit $::b1  btree_move_to $::c1 0  set r {}  while 1 {    set key [btree_key $::c1]    if {[btree_eof $::c1]} break    lappend r $key    lappend r [btree_data $::c1]    btree_next $::c1  }  set r   } {200 2.00 300 3.00 400 4.00 500 5.00 600 6.00}# Completely close the database and reopen it.  Then check# the data again.#do_test btree-4.6 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-4.7 {  btree_close_cursor $::c1  lindex [btree_pager_stats $::b1] 1} {0}do_test btree-4.8 {  btree_close $::b1  set ::b1 [btree_open test1.bt 2000 0]  set ::c1 [btree_cursor $::b1 1 1]  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-4.9 {  set r {}  btree_first $::c1  while 1 {    set key [btree_key $::c1]    if {[btree_eof $::c1]} break    lappend r $key    lappend r [btree_data $::c1]    btree_next $::c1  }  set r   } {200 2.00 300 3.00 400 4.00 500 5.00 600 6.00}# Try to read and write meta data#do_test btree-5.1 {  btree_get_meta $::b1} {0 0 0 0 0 0 0 0 0 0}do_test btree-5.2 {  set rc [catch {    btree_update_meta $::b1 0 1 2 3 4 5 6 7 8 9  } msg]  lappend rc $msg} {1 SQLITE_ERROR}do_test btree-5.3 {  btree_begin_transaction $::b1  set rc [catch {    btree_update_meta $::b1 0 1 2 3 0 5 6 0 8 9  } msg]  lappend rc $msg} {0 {}}do_test btree-5.4 {  btree_get_meta $::b1} {0 1 2 3 0 5 6 0 8 9}do_test btree-5.5 {  btree_close_cursor $::c1  btree_rollback $::b1  btree_get_meta $::b1} {0 0 0 0 0 0 0 0 0 0}do_test btree-5.6 {  btree_begin_transaction $::b1  btree_update_meta $::b1 0 10 20 30 0 50 60 0 80 90  btree_commit $::b1  btree_get_meta $::b1} {0 10 20 30 0 50 60 0 80 90}proc select_all {cursor} {  set r {}  btree_first $cursor  while {![btree_eof $cursor]} {    set key [btree_key $cursor]    lappend r $key    lappend r [btree_data $cursor]    btree_next $cursor  }  return $r}proc select_keys {cursor} {  set r {}  btree_first $cursor  while {![btree_eof $cursor]} {    set key [btree_key $cursor]    lappend r $key    btree_next $cursor  }  return $r}# Try to create a new table in the database file#do_test btree-6.1 {  set rc [catch {btree_create_table $::b1 0} msg]  lappend rc $msg} {1 SQLITE_ERROR}do_test btree-6.2 {  btree_begin_transaction $::b1  set ::t2 [btree_create_table $::b1 0]} {2}do_test btree-6.2.1 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-6.2.2 {  set ::c2 [btree_cursor $::b1 $::t2 1]  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-6.2.3 {  btree_insert $::c2 ten 10  btree_move_to $::c2 ten  btree_key $::c2} {ten}do_test btree-6.3 {  btree_commit $::b1  set ::c1 [btree_cursor $::b1 1 1]  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-6.3.1 {  select_all $::c1} {200 2.00 300 3.00 400 4.00 500 5.00 600 6.00}#btree_page_dump $::b1 3do_test btree-6.4 {  select_all $::c2} {ten 10}# Drop the new table, then create it again anew.#do_test btree-6.5 {  btree_begin_transaction $::b1} {}do_test btree-6.6 {  btree_close_cursor $::c2} {}do_test btree-6.6.1 {  lindex [btree_pager_stats $::b1] 1} {1}do_test btree-6.7 {  btree_close_cursor $::c1  btree_drop_table $::b1 $::t2} {}do_test btree-6.7.1 {  lindex [btree_get_meta $::b1] 0} {1}do_test btree-6.8 {  set ::t2 [btree_create_table $::b1 0]} {2}do_test btree-6.8.1 {  lindex [btree_get_meta $::b1] 0} {0}do_test btree-6.9 {  set ::c2 [btree_cursor $::b1 $::t2 1]  lindex [btree_pager_stats $::b1] 1} {2}# This test case used to test that requesting the key from an invalid cursor# returned an empty string.  But that is now an assert()ed condition.## do_test btree-6.9.1 {#   btree_move_to $::c2 {}#   btree_key $::c2# } {}# If we drop table 1 it just clears the table.  Table 1 always exists.#do_test btree-6.10 {  btree_close_cursor $::c2  btree_drop_table $::b1 1  set ::c2 [btree_cursor $::b1 $::t2 1]  set ::c1 [btree_cursor $::b1 1 1]  btree_first $::c1  btree_eof $::c1} {1}do_test btree-6.11 {  btree_commit $::b1  select_all $::c1} {}do_test btree-6.12 {  select_all $::c2} {}do_test btree-6.13 {  btree_close_cursor $::c2  lindex [btree_pager_stats $::b1] 1} {1}# Check to see that pages defragment properly.  To do this test we will# #   1.  Fill the first page of table 1 with data.#   2.  Delete every other entry of table 1.#   3.  Insert a single entry that requires more contiguous#       space than is available.

⌨️ 快捷键说明

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