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

📄 btree.test

📁 sqlite数据库源码
💻 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.15 2004/02/10 01:54:28 drh Exp $set testdir [file dirname $argv0]source $testdir/tester.tclif {[info commands btree_open]!="" && $SQLITE_PAGE_SIZE==1024      && $SQLITE_USABLE_SIZE==1024} {# 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} ::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} ::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 2 1} ::c1]  if {$rc} {lappend rc $::c1}  set rc} {0}do_test btree-1.6 {  set rc [catch {btree_insert $::c1 one 1.00} msg]  lappend rc $msg} {0 {}}do_test btree-1.7 {  btree_key $::c1} {one}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} {2048}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 2 1} ::c1]  if {$rc} {lappend rc $::c1}  set rc} {0}do_test btree-2.2 {  btree_move_to $::c1 abc} {1}do_test btree-2.3 {  btree_move_to $::c1 xyz} {-1}do_test btree-2.4 {  btree_move_to $::c1 one} {0}do_test btree-2.5 {  btree_key $::c1} {one}do_test btree-2.6 {  btree_data $::c1} {1.00}do_test btree-2.7 {  lindex [btree_pager_stats $::b1] 1} {2}# Do some additional inserts#do_test btree-3.1 {  btree_begin_transaction $::b1  btree_insert $::c1 two 2.00  btree_key $::c1} {two}do_test btree-3.1.1 {  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-3.2 {  btree_insert $::c1 three 3.00  btree_key $::c1} {three}do_test btree-3.4 {  btree_insert $::c1 four 4.00  btree_key $::c1} {four}do_test btree-3.5 {  btree_insert $::c1 five 5.00  btree_key $::c1} {five}do_test btree-3.6 {  btree_insert $::c1 six 6.00  btree_key $::c1} {six}#btree_page_dump $::b1 2do_test btree-3.7 {  set rc [btree_move_to $::c1 {}]  expr {$rc>0}} {1}do_test btree-3.8 {  btree_key $::c1} {five}do_test btree-3.9 {  btree_data $::c1} {5.00}do_test btree-3.10 {  btree_next $::c1  btree_key $::c1} {four}do_test btree-3.11 {  btree_data $::c1} {4.00}do_test btree-3.12 {  btree_next $::c1  btree_key $::c1} {one}do_test btree-3.13 {  btree_data $::c1} {1.00}do_test btree-3.14 {  btree_next $::c1  btree_key $::c1} {six}do_test btree-3.15 {  btree_data $::c1} {6.00}do_test btree-3.16 {  btree_next $::c1  btree_key $::c1} {three}do_test btree-3.17 {  btree_data $::c1} {3.00}do_test btree-3.18 {  btree_next $::c1  btree_key $::c1} {two}do_test btree-3.19 {  btree_data $::c1} {2.00}do_test btree-3.20 {  btree_next $::c1  btree_key $::c1} {}do_test btree-3.21 {  btree_data $::c1} {}# 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} {2048}do_test btree-3.25 {  set rc [catch {btree_cursor $::b1 2 1} ::c1]  if {$rc} {lappend rc $::c1}  set rc} {0}do_test btree-3.25.1 {  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-3.26 {  set rc [btree_move_to $::c1 {}]  expr {$rc>0}} {1}do_test btree-3.27 {  btree_key $::c1} {five}do_test btree-3.28 {  btree_data $::c1} {5.00}do_test btree-3.29 {  btree_next $::c1  btree_key $::c1} {four}do_test btree-3.30 {  btree_data $::c1} {4.00}do_test btree-3.31 {  btree_next $::c1  btree_key $::c1} {one}do_test btree-3.32 {  btree_data $::c1} {1.00}do_test btree-3.33 {  btree_next $::c1  btree_key $::c1} {six}do_test btree-3.34 {  btree_data $::c1} {6.00}do_test btree-3.35 {  btree_next $::c1  btree_key $::c1} {three}do_test btree-3.36 {  btree_data $::c1} {3.00}do_test btree-3.37 {  btree_next $::c1  btree_key $::c1} {two}do_test btree-3.38 {  btree_data $::c1} {2.00}do_test btree-3.39 {  btree_next $::c1  btree_key $::c1} {}do_test btree-3.40 {  btree_data $::c1} {}do_test btree-3.41 {  lindex [btree_pager_stats $::b1] 1} {2}# Now try a delete#do_test btree-4.1 {  btree_begin_transaction $::b1  btree_move_to $::c1 one  btree_key $::c1} {one}do_test btree-4.1.1 {  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-4.2 {  btree_delete $::c1} {}do_test btree-4.3 {  btree_key $::c1} {six}do_test btree-4.4 {  btree_next $::c1  btree_key $::c1} {six}do_test btree-4.5 {  btree_next $::c1  btree_key $::c1} {three}do_test btree-4.4 {  btree_move_to $::c1 {}  set r {}  while 1 {    set key [btree_key $::c1]    if {$key==""} break    lappend r $key    lappend r [btree_data $::c1]    btree_next $::c1  }  set r   } {five 5.00 four 4.00 six 6.00 three 3.00 two 2.00}# Commit and make sure the delete is still there.#do_test btree-4.5 {  btree_commit $::b1  btree_move_to $::c1 {}  set r {}  while 1 {    set key [btree_key $::c1]    if {$key==""} break    lappend r $key    lappend r [btree_data $::c1]    btree_next $::c1  }  set r   } {five 5.00 four 4.00 six 6.00 three 3.00 two 2.00}# Completely close the database and reopen it.  Then check# the data again.#do_test btree-4.6 {  lindex [btree_pager_stats $::b1] 1} {2}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]  set ::c1 [btree_cursor $::b1 2 1]  lindex [btree_pager_stats $::b1] 1} {2}do_test btree-4.9 {  set r {}  btree_first $::c1  while 1 {    set key [btree_key $::c1]    if {$key==""} break    lappend r $key    lappend r [btree_data $::c1]    btree_next $::c1  }  set r   } {five 5.00 four 4.00 six 6.00 three 3.00 two 2.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 1 2 3 4 5 6 7 8 9 10} msg]  lappend rc $msg} {1 SQLITE_ERROR}do_test btree-5.3 {  btree_begin_transaction $::b1  set rc [catch {btree_update_meta $::b1 1 2 3 4 5 6 7 8 9 10} msg]  lappend rc $msg} {0 {}}do_test btree-5.4 {  btree_get_meta $::b1} {0 2 3 4 5 6 7 8 9 10}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 999 10 20 30 40 50 60 70 80 90  btree_commit $::b1  btree_get_meta $::b1} {0 10 20 30 40 50 60 70 80 90}proc select_all {cursor} {  set r {}  btree_move_to $cursor {}  while 1 {    set key [btree_key $cursor]    if {$key==""} break    lappend r $key    lappend r [btree_data $cursor]    btree_next $cursor  }  return $r}proc select_keys {cursor} {  set r {}  btree_move_to $cursor {}  while 1 {    set key [btree_key $cursor]    if {$key==""} break    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} msg]  lappend rc $msg} {1 SQLITE_ERROR}do_test btree-6.2 {  btree_begin_transaction $::b1  set ::t2 [btree_create_table $::b1]} {3}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_key $::c2} {ten}do_test btree-6.3 {  btree_commit $::b1  set ::c1 [btree_cursor $::b1 2 1]  lindex [btree_pager_stats $::b1] 1} {3}do_test btree-6.3.1 {  select_all $::c1} {five 5.00 four 4.00 six 6.00 three 3.00 two 2.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} {2}do_test btree-6.7 {  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]} {3}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} {3}do_test btree-6.9.1 {  btree_move_to $::c2 {}  btree_key $::c2} {}# If we drop table 2 it just clears the table.  Table 2 always exists.#do_test btree-6.10 {  btree_close_cursor $::c1  btree_drop_table $::b1 2  set ::c1 [btree_cursor $::b1 2 1]  btree_move_to $::c1 {}  btree_key $::c1} {}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} {2}# Check to see that pages defragment properly.  To do this test we will# #   1.  Fill the first page table 2 with data.#   2.  Delete every other entry of table 2. #   3.  Insert a single entry that requires more contiguous#       space than is available.#do_test btree-7.1 {  btree_begin_transaction $::b1} {}catch {unset key}catch {unset data}

⌨️ 快捷键说明

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