1*1da57d55SToomas Soome# 27c478bd9Sstevel@tonic-gate# 2001 September 15 37c478bd9Sstevel@tonic-gate# 47c478bd9Sstevel@tonic-gate# The author disclaims copyright to this source code. In place of 57c478bd9Sstevel@tonic-gate# a legal notice, here is a blessing: 67c478bd9Sstevel@tonic-gate# 77c478bd9Sstevel@tonic-gate# May you do good and not evil. 87c478bd9Sstevel@tonic-gate# May you find forgiveness for yourself and forgive others. 97c478bd9Sstevel@tonic-gate# May you share freely, never taking more than you give. 107c478bd9Sstevel@tonic-gate# 117c478bd9Sstevel@tonic-gate#*********************************************************************** 127c478bd9Sstevel@tonic-gate# This file implements regression tests for SQLite library. The 137c478bd9Sstevel@tonic-gate# focus of this script is btree database backend 147c478bd9Sstevel@tonic-gate# 157c478bd9Sstevel@tonic-gate# $Id: btree.test,v 1.15 2004/02/10 01:54:28 drh Exp $ 167c478bd9Sstevel@tonic-gate 177c478bd9Sstevel@tonic-gate 187c478bd9Sstevel@tonic-gateset testdir [file dirname $argv0] 197c478bd9Sstevel@tonic-gatesource $testdir/tester.tcl 207c478bd9Sstevel@tonic-gate 21*1da57d55SToomas Soomeif {[info commands btree_open]!="" && $SQLITE_PAGE_SIZE==1024 227c478bd9Sstevel@tonic-gate && $SQLITE_USABLE_SIZE==1024} { 237c478bd9Sstevel@tonic-gate 247c478bd9Sstevel@tonic-gate# Basic functionality. Open and close a database. 257c478bd9Sstevel@tonic-gate# 267c478bd9Sstevel@tonic-gatedo_test btree-1.1 { 277c478bd9Sstevel@tonic-gate file delete -force test1.bt 287c478bd9Sstevel@tonic-gate file delete -force test1.bt-journal 297c478bd9Sstevel@tonic-gate set rc [catch {btree_open test1.bt} ::b1] 307c478bd9Sstevel@tonic-gate} {0} 317c478bd9Sstevel@tonic-gate 327c478bd9Sstevel@tonic-gate# The second element of the list returned by btree_pager_stats is the 337c478bd9Sstevel@tonic-gate# number of pages currently checked out. We'll be checking this value 347c478bd9Sstevel@tonic-gate# frequently during this test script, to make sure the btree library 357c478bd9Sstevel@tonic-gate# is properly releasing the pages it checks out, and thus avoiding 367c478bd9Sstevel@tonic-gate# page leaks. 377c478bd9Sstevel@tonic-gate# 387c478bd9Sstevel@tonic-gatedo_test btree-1.1.1 { 397c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 407c478bd9Sstevel@tonic-gate} {0} 417c478bd9Sstevel@tonic-gatedo_test btree-1.2 { 427c478bd9Sstevel@tonic-gate set rc [catch {btree_open test1.bt} ::b2] 437c478bd9Sstevel@tonic-gate} {0} 447c478bd9Sstevel@tonic-gatedo_test btree-1.3 { 457c478bd9Sstevel@tonic-gate set rc [catch {btree_close $::b2} msg] 467c478bd9Sstevel@tonic-gate lappend rc $msg 477c478bd9Sstevel@tonic-gate} {0 {}} 487c478bd9Sstevel@tonic-gate 497c478bd9Sstevel@tonic-gate# Do an insert and verify that the database file grows in size. 507c478bd9Sstevel@tonic-gate# 517c478bd9Sstevel@tonic-gatedo_test btree-1.4 { 527c478bd9Sstevel@tonic-gate set rc [catch {btree_begin_transaction $::b1} msg] 537c478bd9Sstevel@tonic-gate lappend rc $msg 547c478bd9Sstevel@tonic-gate} {0 {}} 557c478bd9Sstevel@tonic-gatedo_test btree-1.4.1 { 567c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 577c478bd9Sstevel@tonic-gate} {1} 587c478bd9Sstevel@tonic-gatedo_test btree-1.5 { 597c478bd9Sstevel@tonic-gate set rc [catch {btree_cursor $::b1 2 1} ::c1] 607c478bd9Sstevel@tonic-gate if {$rc} {lappend rc $::c1} 617c478bd9Sstevel@tonic-gate set rc 627c478bd9Sstevel@tonic-gate} {0} 637c478bd9Sstevel@tonic-gatedo_test btree-1.6 { 647c478bd9Sstevel@tonic-gate set rc [catch {btree_insert $::c1 one 1.00} msg] 657c478bd9Sstevel@tonic-gate lappend rc $msg 667c478bd9Sstevel@tonic-gate} {0 {}} 677c478bd9Sstevel@tonic-gatedo_test btree-1.7 { 687c478bd9Sstevel@tonic-gate btree_key $::c1 697c478bd9Sstevel@tonic-gate} {one} 707c478bd9Sstevel@tonic-gatedo_test btree-1.8 { 717c478bd9Sstevel@tonic-gate btree_data $::c1 727c478bd9Sstevel@tonic-gate} {1.00} 737c478bd9Sstevel@tonic-gatedo_test btree-1.9 { 747c478bd9Sstevel@tonic-gate set rc [catch {btree_close_cursor $::c1} msg] 757c478bd9Sstevel@tonic-gate lappend rc $msg 767c478bd9Sstevel@tonic-gate} {0 {}} 777c478bd9Sstevel@tonic-gatedo_test btree-1.10 { 787c478bd9Sstevel@tonic-gate set rc [catch {btree_commit $::b1} msg] 797c478bd9Sstevel@tonic-gate lappend rc $msg 807c478bd9Sstevel@tonic-gate} {0 {}} 817c478bd9Sstevel@tonic-gatedo_test btree-1.11 { 827c478bd9Sstevel@tonic-gate file size test1.bt 837c478bd9Sstevel@tonic-gate} {2048} 847c478bd9Sstevel@tonic-gatedo_test btree-1.12 { 857c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 867c478bd9Sstevel@tonic-gate} {0} 877c478bd9Sstevel@tonic-gate 887c478bd9Sstevel@tonic-gate# Reopen the database and attempt to read the record that we wrote. 897c478bd9Sstevel@tonic-gate# 907c478bd9Sstevel@tonic-gatedo_test btree-2.1 { 917c478bd9Sstevel@tonic-gate set rc [catch {btree_cursor $::b1 2 1} ::c1] 927c478bd9Sstevel@tonic-gate if {$rc} {lappend rc $::c1} 937c478bd9Sstevel@tonic-gate set rc 947c478bd9Sstevel@tonic-gate} {0} 957c478bd9Sstevel@tonic-gatedo_test btree-2.2 { 967c478bd9Sstevel@tonic-gate btree_move_to $::c1 abc 977c478bd9Sstevel@tonic-gate} {1} 987c478bd9Sstevel@tonic-gatedo_test btree-2.3 { 997c478bd9Sstevel@tonic-gate btree_move_to $::c1 xyz 1007c478bd9Sstevel@tonic-gate} {-1} 1017c478bd9Sstevel@tonic-gatedo_test btree-2.4 { 1027c478bd9Sstevel@tonic-gate btree_move_to $::c1 one 1037c478bd9Sstevel@tonic-gate} {0} 1047c478bd9Sstevel@tonic-gatedo_test btree-2.5 { 1057c478bd9Sstevel@tonic-gate btree_key $::c1 1067c478bd9Sstevel@tonic-gate} {one} 1077c478bd9Sstevel@tonic-gatedo_test btree-2.6 { 1087c478bd9Sstevel@tonic-gate btree_data $::c1 1097c478bd9Sstevel@tonic-gate} {1.00} 1107c478bd9Sstevel@tonic-gatedo_test btree-2.7 { 1117c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 1127c478bd9Sstevel@tonic-gate} {2} 1137c478bd9Sstevel@tonic-gate 1147c478bd9Sstevel@tonic-gate# Do some additional inserts 1157c478bd9Sstevel@tonic-gate# 1167c478bd9Sstevel@tonic-gatedo_test btree-3.1 { 1177c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 1187c478bd9Sstevel@tonic-gate btree_insert $::c1 two 2.00 1197c478bd9Sstevel@tonic-gate btree_key $::c1 1207c478bd9Sstevel@tonic-gate} {two} 1217c478bd9Sstevel@tonic-gatedo_test btree-3.1.1 { 1227c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 1237c478bd9Sstevel@tonic-gate} {2} 1247c478bd9Sstevel@tonic-gatedo_test btree-3.2 { 1257c478bd9Sstevel@tonic-gate btree_insert $::c1 three 3.00 1267c478bd9Sstevel@tonic-gate btree_key $::c1 1277c478bd9Sstevel@tonic-gate} {three} 1287c478bd9Sstevel@tonic-gatedo_test btree-3.4 { 1297c478bd9Sstevel@tonic-gate btree_insert $::c1 four 4.00 1307c478bd9Sstevel@tonic-gate btree_key $::c1 1317c478bd9Sstevel@tonic-gate} {four} 1327c478bd9Sstevel@tonic-gatedo_test btree-3.5 { 1337c478bd9Sstevel@tonic-gate btree_insert $::c1 five 5.00 1347c478bd9Sstevel@tonic-gate btree_key $::c1 1357c478bd9Sstevel@tonic-gate} {five} 1367c478bd9Sstevel@tonic-gatedo_test btree-3.6 { 1377c478bd9Sstevel@tonic-gate btree_insert $::c1 six 6.00 1387c478bd9Sstevel@tonic-gate btree_key $::c1 1397c478bd9Sstevel@tonic-gate} {six} 1407c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 1417c478bd9Sstevel@tonic-gatedo_test btree-3.7 { 1427c478bd9Sstevel@tonic-gate set rc [btree_move_to $::c1 {}] 1437c478bd9Sstevel@tonic-gate expr {$rc>0} 1447c478bd9Sstevel@tonic-gate} {1} 1457c478bd9Sstevel@tonic-gatedo_test btree-3.8 { 1467c478bd9Sstevel@tonic-gate btree_key $::c1 1477c478bd9Sstevel@tonic-gate} {five} 1487c478bd9Sstevel@tonic-gatedo_test btree-3.9 { 1497c478bd9Sstevel@tonic-gate btree_data $::c1 1507c478bd9Sstevel@tonic-gate} {5.00} 1517c478bd9Sstevel@tonic-gatedo_test btree-3.10 { 1527c478bd9Sstevel@tonic-gate btree_next $::c1 1537c478bd9Sstevel@tonic-gate btree_key $::c1 1547c478bd9Sstevel@tonic-gate} {four} 1557c478bd9Sstevel@tonic-gatedo_test btree-3.11 { 1567c478bd9Sstevel@tonic-gate btree_data $::c1 1577c478bd9Sstevel@tonic-gate} {4.00} 1587c478bd9Sstevel@tonic-gatedo_test btree-3.12 { 1597c478bd9Sstevel@tonic-gate btree_next $::c1 1607c478bd9Sstevel@tonic-gate btree_key $::c1 1617c478bd9Sstevel@tonic-gate} {one} 1627c478bd9Sstevel@tonic-gatedo_test btree-3.13 { 1637c478bd9Sstevel@tonic-gate btree_data $::c1 1647c478bd9Sstevel@tonic-gate} {1.00} 1657c478bd9Sstevel@tonic-gatedo_test btree-3.14 { 1667c478bd9Sstevel@tonic-gate btree_next $::c1 1677c478bd9Sstevel@tonic-gate btree_key $::c1 1687c478bd9Sstevel@tonic-gate} {six} 1697c478bd9Sstevel@tonic-gatedo_test btree-3.15 { 1707c478bd9Sstevel@tonic-gate btree_data $::c1 1717c478bd9Sstevel@tonic-gate} {6.00} 1727c478bd9Sstevel@tonic-gatedo_test btree-3.16 { 1737c478bd9Sstevel@tonic-gate btree_next $::c1 1747c478bd9Sstevel@tonic-gate btree_key $::c1 1757c478bd9Sstevel@tonic-gate} {three} 1767c478bd9Sstevel@tonic-gatedo_test btree-3.17 { 1777c478bd9Sstevel@tonic-gate btree_data $::c1 1787c478bd9Sstevel@tonic-gate} {3.00} 1797c478bd9Sstevel@tonic-gatedo_test btree-3.18 { 1807c478bd9Sstevel@tonic-gate btree_next $::c1 1817c478bd9Sstevel@tonic-gate btree_key $::c1 1827c478bd9Sstevel@tonic-gate} {two} 1837c478bd9Sstevel@tonic-gatedo_test btree-3.19 { 1847c478bd9Sstevel@tonic-gate btree_data $::c1 1857c478bd9Sstevel@tonic-gate} {2.00} 1867c478bd9Sstevel@tonic-gatedo_test btree-3.20 { 1877c478bd9Sstevel@tonic-gate btree_next $::c1 1887c478bd9Sstevel@tonic-gate btree_key $::c1 1897c478bd9Sstevel@tonic-gate} {} 1907c478bd9Sstevel@tonic-gatedo_test btree-3.21 { 1917c478bd9Sstevel@tonic-gate btree_data $::c1 1927c478bd9Sstevel@tonic-gate} {} 1937c478bd9Sstevel@tonic-gate 1947c478bd9Sstevel@tonic-gate# Commit the changes, reopen and reread the data 1957c478bd9Sstevel@tonic-gate# 1967c478bd9Sstevel@tonic-gatedo_test btree-3.22 { 1977c478bd9Sstevel@tonic-gate set rc [catch {btree_close_cursor $::c1} msg] 1987c478bd9Sstevel@tonic-gate lappend rc $msg 1997c478bd9Sstevel@tonic-gate} {0 {}} 2007c478bd9Sstevel@tonic-gatedo_test btree-3.22.1 { 2017c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 2027c478bd9Sstevel@tonic-gate} {1} 2037c478bd9Sstevel@tonic-gatedo_test btree-3.23 { 2047c478bd9Sstevel@tonic-gate set rc [catch {btree_commit $::b1} msg] 2057c478bd9Sstevel@tonic-gate lappend rc $msg 2067c478bd9Sstevel@tonic-gate} {0 {}} 2077c478bd9Sstevel@tonic-gatedo_test btree-3.23.1 { 2087c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 2097c478bd9Sstevel@tonic-gate} {0} 2107c478bd9Sstevel@tonic-gatedo_test btree-3.24 { 2117c478bd9Sstevel@tonic-gate file size test1.bt 2127c478bd9Sstevel@tonic-gate} {2048} 2137c478bd9Sstevel@tonic-gatedo_test btree-3.25 { 2147c478bd9Sstevel@tonic-gate set rc [catch {btree_cursor $::b1 2 1} ::c1] 2157c478bd9Sstevel@tonic-gate if {$rc} {lappend rc $::c1} 2167c478bd9Sstevel@tonic-gate set rc 2177c478bd9Sstevel@tonic-gate} {0} 2187c478bd9Sstevel@tonic-gatedo_test btree-3.25.1 { 2197c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 2207c478bd9Sstevel@tonic-gate} {2} 2217c478bd9Sstevel@tonic-gatedo_test btree-3.26 { 2227c478bd9Sstevel@tonic-gate set rc [btree_move_to $::c1 {}] 2237c478bd9Sstevel@tonic-gate expr {$rc>0} 2247c478bd9Sstevel@tonic-gate} {1} 2257c478bd9Sstevel@tonic-gatedo_test btree-3.27 { 2267c478bd9Sstevel@tonic-gate btree_key $::c1 2277c478bd9Sstevel@tonic-gate} {five} 2287c478bd9Sstevel@tonic-gatedo_test btree-3.28 { 2297c478bd9Sstevel@tonic-gate btree_data $::c1 2307c478bd9Sstevel@tonic-gate} {5.00} 2317c478bd9Sstevel@tonic-gatedo_test btree-3.29 { 2327c478bd9Sstevel@tonic-gate btree_next $::c1 2337c478bd9Sstevel@tonic-gate btree_key $::c1 2347c478bd9Sstevel@tonic-gate} {four} 2357c478bd9Sstevel@tonic-gatedo_test btree-3.30 { 2367c478bd9Sstevel@tonic-gate btree_data $::c1 2377c478bd9Sstevel@tonic-gate} {4.00} 2387c478bd9Sstevel@tonic-gatedo_test btree-3.31 { 2397c478bd9Sstevel@tonic-gate btree_next $::c1 2407c478bd9Sstevel@tonic-gate btree_key $::c1 2417c478bd9Sstevel@tonic-gate} {one} 2427c478bd9Sstevel@tonic-gatedo_test btree-3.32 { 2437c478bd9Sstevel@tonic-gate btree_data $::c1 2447c478bd9Sstevel@tonic-gate} {1.00} 2457c478bd9Sstevel@tonic-gatedo_test btree-3.33 { 2467c478bd9Sstevel@tonic-gate btree_next $::c1 2477c478bd9Sstevel@tonic-gate btree_key $::c1 2487c478bd9Sstevel@tonic-gate} {six} 2497c478bd9Sstevel@tonic-gatedo_test btree-3.34 { 2507c478bd9Sstevel@tonic-gate btree_data $::c1 2517c478bd9Sstevel@tonic-gate} {6.00} 2527c478bd9Sstevel@tonic-gatedo_test btree-3.35 { 2537c478bd9Sstevel@tonic-gate btree_next $::c1 2547c478bd9Sstevel@tonic-gate btree_key $::c1 2557c478bd9Sstevel@tonic-gate} {three} 2567c478bd9Sstevel@tonic-gatedo_test btree-3.36 { 2577c478bd9Sstevel@tonic-gate btree_data $::c1 2587c478bd9Sstevel@tonic-gate} {3.00} 2597c478bd9Sstevel@tonic-gatedo_test btree-3.37 { 2607c478bd9Sstevel@tonic-gate btree_next $::c1 2617c478bd9Sstevel@tonic-gate btree_key $::c1 2627c478bd9Sstevel@tonic-gate} {two} 2637c478bd9Sstevel@tonic-gatedo_test btree-3.38 { 2647c478bd9Sstevel@tonic-gate btree_data $::c1 2657c478bd9Sstevel@tonic-gate} {2.00} 2667c478bd9Sstevel@tonic-gatedo_test btree-3.39 { 2677c478bd9Sstevel@tonic-gate btree_next $::c1 2687c478bd9Sstevel@tonic-gate btree_key $::c1 2697c478bd9Sstevel@tonic-gate} {} 2707c478bd9Sstevel@tonic-gatedo_test btree-3.40 { 2717c478bd9Sstevel@tonic-gate btree_data $::c1 2727c478bd9Sstevel@tonic-gate} {} 2737c478bd9Sstevel@tonic-gatedo_test btree-3.41 { 2747c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 2757c478bd9Sstevel@tonic-gate} {2} 2767c478bd9Sstevel@tonic-gate 2777c478bd9Sstevel@tonic-gate 2787c478bd9Sstevel@tonic-gate# Now try a delete 2797c478bd9Sstevel@tonic-gate# 2807c478bd9Sstevel@tonic-gatedo_test btree-4.1 { 2817c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 2827c478bd9Sstevel@tonic-gate btree_move_to $::c1 one 2837c478bd9Sstevel@tonic-gate btree_key $::c1 2847c478bd9Sstevel@tonic-gate} {one} 2857c478bd9Sstevel@tonic-gatedo_test btree-4.1.1 { 2867c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 2877c478bd9Sstevel@tonic-gate} {2} 2887c478bd9Sstevel@tonic-gatedo_test btree-4.2 { 2897c478bd9Sstevel@tonic-gate btree_delete $::c1 2907c478bd9Sstevel@tonic-gate} {} 2917c478bd9Sstevel@tonic-gatedo_test btree-4.3 { 2927c478bd9Sstevel@tonic-gate btree_key $::c1 2937c478bd9Sstevel@tonic-gate} {six} 2947c478bd9Sstevel@tonic-gatedo_test btree-4.4 { 2957c478bd9Sstevel@tonic-gate btree_next $::c1 2967c478bd9Sstevel@tonic-gate btree_key $::c1 2977c478bd9Sstevel@tonic-gate} {six} 2987c478bd9Sstevel@tonic-gatedo_test btree-4.5 { 2997c478bd9Sstevel@tonic-gate btree_next $::c1 3007c478bd9Sstevel@tonic-gate btree_key $::c1 3017c478bd9Sstevel@tonic-gate} {three} 3027c478bd9Sstevel@tonic-gatedo_test btree-4.4 { 3037c478bd9Sstevel@tonic-gate btree_move_to $::c1 {} 3047c478bd9Sstevel@tonic-gate set r {} 3057c478bd9Sstevel@tonic-gate while 1 { 3067c478bd9Sstevel@tonic-gate set key [btree_key $::c1] 3077c478bd9Sstevel@tonic-gate if {$key==""} break 3087c478bd9Sstevel@tonic-gate lappend r $key 3097c478bd9Sstevel@tonic-gate lappend r [btree_data $::c1] 3107c478bd9Sstevel@tonic-gate btree_next $::c1 3117c478bd9Sstevel@tonic-gate } 312*1da57d55SToomas Soome set r 3137c478bd9Sstevel@tonic-gate} {five 5.00 four 4.00 six 6.00 three 3.00 two 2.00} 3147c478bd9Sstevel@tonic-gate 3157c478bd9Sstevel@tonic-gate# Commit and make sure the delete is still there. 3167c478bd9Sstevel@tonic-gate# 3177c478bd9Sstevel@tonic-gatedo_test btree-4.5 { 3187c478bd9Sstevel@tonic-gate btree_commit $::b1 3197c478bd9Sstevel@tonic-gate btree_move_to $::c1 {} 3207c478bd9Sstevel@tonic-gate set r {} 3217c478bd9Sstevel@tonic-gate while 1 { 3227c478bd9Sstevel@tonic-gate set key [btree_key $::c1] 3237c478bd9Sstevel@tonic-gate if {$key==""} break 3247c478bd9Sstevel@tonic-gate lappend r $key 3257c478bd9Sstevel@tonic-gate lappend r [btree_data $::c1] 3267c478bd9Sstevel@tonic-gate btree_next $::c1 3277c478bd9Sstevel@tonic-gate } 328*1da57d55SToomas Soome set r 3297c478bd9Sstevel@tonic-gate} {five 5.00 four 4.00 six 6.00 three 3.00 two 2.00} 3307c478bd9Sstevel@tonic-gate 3317c478bd9Sstevel@tonic-gate# Completely close the database and reopen it. Then check 3327c478bd9Sstevel@tonic-gate# the data again. 3337c478bd9Sstevel@tonic-gate# 3347c478bd9Sstevel@tonic-gatedo_test btree-4.6 { 3357c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 3367c478bd9Sstevel@tonic-gate} {2} 3377c478bd9Sstevel@tonic-gatedo_test btree-4.7 { 3387c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 3397c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 3407c478bd9Sstevel@tonic-gate} {0} 3417c478bd9Sstevel@tonic-gatedo_test btree-4.8 { 3427c478bd9Sstevel@tonic-gate btree_close $::b1 3437c478bd9Sstevel@tonic-gate set ::b1 [btree_open test1.bt] 3447c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 3457c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 3467c478bd9Sstevel@tonic-gate} {2} 3477c478bd9Sstevel@tonic-gatedo_test btree-4.9 { 3487c478bd9Sstevel@tonic-gate set r {} 3497c478bd9Sstevel@tonic-gate btree_first $::c1 3507c478bd9Sstevel@tonic-gate while 1 { 3517c478bd9Sstevel@tonic-gate set key [btree_key $::c1] 3527c478bd9Sstevel@tonic-gate if {$key==""} break 3537c478bd9Sstevel@tonic-gate lappend r $key 3547c478bd9Sstevel@tonic-gate lappend r [btree_data $::c1] 3557c478bd9Sstevel@tonic-gate btree_next $::c1 3567c478bd9Sstevel@tonic-gate } 357*1da57d55SToomas Soome set r 3587c478bd9Sstevel@tonic-gate} {five 5.00 four 4.00 six 6.00 three 3.00 two 2.00} 3597c478bd9Sstevel@tonic-gate 3607c478bd9Sstevel@tonic-gate# Try to read and write meta data 3617c478bd9Sstevel@tonic-gate# 3627c478bd9Sstevel@tonic-gatedo_test btree-5.1 { 3637c478bd9Sstevel@tonic-gate btree_get_meta $::b1 3647c478bd9Sstevel@tonic-gate} {0 0 0 0 0 0 0 0 0 0} 3657c478bd9Sstevel@tonic-gatedo_test btree-5.2 { 3667c478bd9Sstevel@tonic-gate set rc [catch {btree_update_meta $::b1 1 2 3 4 5 6 7 8 9 10} msg] 3677c478bd9Sstevel@tonic-gate lappend rc $msg 3687c478bd9Sstevel@tonic-gate} {1 SQLITE_ERROR} 3697c478bd9Sstevel@tonic-gatedo_test btree-5.3 { 3707c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 3717c478bd9Sstevel@tonic-gate set rc [catch {btree_update_meta $::b1 1 2 3 4 5 6 7 8 9 10} msg] 3727c478bd9Sstevel@tonic-gate lappend rc $msg 3737c478bd9Sstevel@tonic-gate} {0 {}} 3747c478bd9Sstevel@tonic-gatedo_test btree-5.4 { 3757c478bd9Sstevel@tonic-gate btree_get_meta $::b1 3767c478bd9Sstevel@tonic-gate} {0 2 3 4 5 6 7 8 9 10} 3777c478bd9Sstevel@tonic-gatedo_test btree-5.5 { 3787c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 3797c478bd9Sstevel@tonic-gate btree_rollback $::b1 3807c478bd9Sstevel@tonic-gate btree_get_meta $::b1 3817c478bd9Sstevel@tonic-gate} {0 0 0 0 0 0 0 0 0 0} 3827c478bd9Sstevel@tonic-gatedo_test btree-5.6 { 3837c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 3847c478bd9Sstevel@tonic-gate btree_update_meta $::b1 999 10 20 30 40 50 60 70 80 90 3857c478bd9Sstevel@tonic-gate btree_commit $::b1 3867c478bd9Sstevel@tonic-gate btree_get_meta $::b1 3877c478bd9Sstevel@tonic-gate} {0 10 20 30 40 50 60 70 80 90} 3887c478bd9Sstevel@tonic-gate 3897c478bd9Sstevel@tonic-gateproc select_all {cursor} { 3907c478bd9Sstevel@tonic-gate set r {} 3917c478bd9Sstevel@tonic-gate btree_move_to $cursor {} 3927c478bd9Sstevel@tonic-gate while 1 { 3937c478bd9Sstevel@tonic-gate set key [btree_key $cursor] 3947c478bd9Sstevel@tonic-gate if {$key==""} break 3957c478bd9Sstevel@tonic-gate lappend r $key 3967c478bd9Sstevel@tonic-gate lappend r [btree_data $cursor] 3977c478bd9Sstevel@tonic-gate btree_next $cursor 3987c478bd9Sstevel@tonic-gate } 3997c478bd9Sstevel@tonic-gate return $r 4007c478bd9Sstevel@tonic-gate} 4017c478bd9Sstevel@tonic-gateproc select_keys {cursor} { 4027c478bd9Sstevel@tonic-gate set r {} 4037c478bd9Sstevel@tonic-gate btree_move_to $cursor {} 4047c478bd9Sstevel@tonic-gate while 1 { 4057c478bd9Sstevel@tonic-gate set key [btree_key $cursor] 4067c478bd9Sstevel@tonic-gate if {$key==""} break 4077c478bd9Sstevel@tonic-gate lappend r $key 4087c478bd9Sstevel@tonic-gate btree_next $cursor 4097c478bd9Sstevel@tonic-gate } 4107c478bd9Sstevel@tonic-gate return $r 4117c478bd9Sstevel@tonic-gate} 4127c478bd9Sstevel@tonic-gate 4137c478bd9Sstevel@tonic-gate# Try to create a new table in the database file 4147c478bd9Sstevel@tonic-gate# 4157c478bd9Sstevel@tonic-gatedo_test btree-6.1 { 4167c478bd9Sstevel@tonic-gate set rc [catch {btree_create_table $::b1} msg] 4177c478bd9Sstevel@tonic-gate lappend rc $msg 4187c478bd9Sstevel@tonic-gate} {1 SQLITE_ERROR} 4197c478bd9Sstevel@tonic-gatedo_test btree-6.2 { 4207c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 4217c478bd9Sstevel@tonic-gate set ::t2 [btree_create_table $::b1] 4227c478bd9Sstevel@tonic-gate} {3} 4237c478bd9Sstevel@tonic-gatedo_test btree-6.2.1 { 4247c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 4257c478bd9Sstevel@tonic-gate} {1} 4267c478bd9Sstevel@tonic-gatedo_test btree-6.2.2 { 4277c478bd9Sstevel@tonic-gate set ::c2 [btree_cursor $::b1 $::t2 1] 4287c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 4297c478bd9Sstevel@tonic-gate} {2} 4307c478bd9Sstevel@tonic-gatedo_test btree-6.2.3 { 4317c478bd9Sstevel@tonic-gate btree_insert $::c2 ten 10 4327c478bd9Sstevel@tonic-gate btree_key $::c2 4337c478bd9Sstevel@tonic-gate} {ten} 4347c478bd9Sstevel@tonic-gatedo_test btree-6.3 { 4357c478bd9Sstevel@tonic-gate btree_commit $::b1 4367c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 4377c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 4387c478bd9Sstevel@tonic-gate} {3} 4397c478bd9Sstevel@tonic-gatedo_test btree-6.3.1 { 4407c478bd9Sstevel@tonic-gate select_all $::c1 4417c478bd9Sstevel@tonic-gate} {five 5.00 four 4.00 six 6.00 three 3.00 two 2.00} 4427c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 3 4437c478bd9Sstevel@tonic-gatedo_test btree-6.4 { 4447c478bd9Sstevel@tonic-gate select_all $::c2 4457c478bd9Sstevel@tonic-gate} {ten 10} 4467c478bd9Sstevel@tonic-gate 4477c478bd9Sstevel@tonic-gate# Drop the new table, then create it again anew. 4487c478bd9Sstevel@tonic-gate# 4497c478bd9Sstevel@tonic-gatedo_test btree-6.5 { 4507c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 4517c478bd9Sstevel@tonic-gate} {} 4527c478bd9Sstevel@tonic-gatedo_test btree-6.6 { 4537c478bd9Sstevel@tonic-gate btree_close_cursor $::c2 4547c478bd9Sstevel@tonic-gate} {} 4557c478bd9Sstevel@tonic-gatedo_test btree-6.6.1 { 4567c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 4577c478bd9Sstevel@tonic-gate} {2} 4587c478bd9Sstevel@tonic-gatedo_test btree-6.7 { 4597c478bd9Sstevel@tonic-gate btree_drop_table $::b1 $::t2 4607c478bd9Sstevel@tonic-gate} {} 4617c478bd9Sstevel@tonic-gatedo_test btree-6.7.1 { 4627c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 4637c478bd9Sstevel@tonic-gate} {1} 4647c478bd9Sstevel@tonic-gatedo_test btree-6.8 { 4657c478bd9Sstevel@tonic-gate set ::t2 [btree_create_table $::b1] 4667c478bd9Sstevel@tonic-gate} {3} 4677c478bd9Sstevel@tonic-gatedo_test btree-6.8.1 { 4687c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 4697c478bd9Sstevel@tonic-gate} {0} 4707c478bd9Sstevel@tonic-gatedo_test btree-6.9 { 4717c478bd9Sstevel@tonic-gate set ::c2 [btree_cursor $::b1 $::t2 1] 4727c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 4737c478bd9Sstevel@tonic-gate} {3} 4747c478bd9Sstevel@tonic-gate 4757c478bd9Sstevel@tonic-gatedo_test btree-6.9.1 { 4767c478bd9Sstevel@tonic-gate btree_move_to $::c2 {} 4777c478bd9Sstevel@tonic-gate btree_key $::c2 4787c478bd9Sstevel@tonic-gate} {} 4797c478bd9Sstevel@tonic-gate 4807c478bd9Sstevel@tonic-gate# If we drop table 2 it just clears the table. Table 2 always exists. 4817c478bd9Sstevel@tonic-gate# 4827c478bd9Sstevel@tonic-gatedo_test btree-6.10 { 4837c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 4847c478bd9Sstevel@tonic-gate btree_drop_table $::b1 2 4857c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 4867c478bd9Sstevel@tonic-gate btree_move_to $::c1 {} 4877c478bd9Sstevel@tonic-gate btree_key $::c1 4887c478bd9Sstevel@tonic-gate} {} 4897c478bd9Sstevel@tonic-gatedo_test btree-6.11 { 4907c478bd9Sstevel@tonic-gate btree_commit $::b1 4917c478bd9Sstevel@tonic-gate select_all $::c1 4927c478bd9Sstevel@tonic-gate} {} 4937c478bd9Sstevel@tonic-gatedo_test btree-6.12 { 4947c478bd9Sstevel@tonic-gate select_all $::c2 4957c478bd9Sstevel@tonic-gate} {} 4967c478bd9Sstevel@tonic-gatedo_test btree-6.13 { 4977c478bd9Sstevel@tonic-gate btree_close_cursor $::c2 4987c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 4997c478bd9Sstevel@tonic-gate} {2} 5007c478bd9Sstevel@tonic-gate 5017c478bd9Sstevel@tonic-gate# Check to see that pages defragment properly. To do this test we will 502*1da57d55SToomas Soome# 5037c478bd9Sstevel@tonic-gate# 1. Fill the first page table 2 with data. 504*1da57d55SToomas Soome# 2. Delete every other entry of table 2. 5057c478bd9Sstevel@tonic-gate# 3. Insert a single entry that requires more contiguous 5067c478bd9Sstevel@tonic-gate# space than is available. 5077c478bd9Sstevel@tonic-gate# 5087c478bd9Sstevel@tonic-gatedo_test btree-7.1 { 5097c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 5107c478bd9Sstevel@tonic-gate} {} 5117c478bd9Sstevel@tonic-gatecatch {unset key} 5127c478bd9Sstevel@tonic-gatecatch {unset data} 5137c478bd9Sstevel@tonic-gatedo_test btree-7.2 { 5147c478bd9Sstevel@tonic-gate for {set i 0} {$i<36} {incr i} { 5157c478bd9Sstevel@tonic-gate set key [format %03d $i] 5167c478bd9Sstevel@tonic-gate set data "*** $key ***" 5177c478bd9Sstevel@tonic-gate btree_insert $::c1 $key $data 5187c478bd9Sstevel@tonic-gate } 5197c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5207c478bd9Sstevel@tonic-gate} {8 1} 5217c478bd9Sstevel@tonic-gatedo_test btree-7.3 { 5227c478bd9Sstevel@tonic-gate btree_move_to $::c1 000 5237c478bd9Sstevel@tonic-gate while {[btree_key $::c1]!=""} { 5247c478bd9Sstevel@tonic-gate btree_delete $::c1 5257c478bd9Sstevel@tonic-gate btree_next $::c1 5267c478bd9Sstevel@tonic-gate btree_next $::c1 5277c478bd9Sstevel@tonic-gate } 5287c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5297c478bd9Sstevel@tonic-gate} {512 19} 5307c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 5317c478bd9Sstevel@tonic-gatedo_test btree-7.4 { 5327c478bd9Sstevel@tonic-gate btree_insert $::c1 018 {*** 018 ***+++} 5337c478bd9Sstevel@tonic-gate btree_key $::c1 5347c478bd9Sstevel@tonic-gate} {018} 5357c478bd9Sstevel@tonic-gatedo_test btree-7.5 { 5367c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5377c478bd9Sstevel@tonic-gate} {480 1} 5387c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 5397c478bd9Sstevel@tonic-gate 5407c478bd9Sstevel@tonic-gate# Delete an entry to make a hole of a known size, then immediately recreate 5417c478bd9Sstevel@tonic-gate# that entry. This tests the path into allocateSpace where the hole exactly 5427c478bd9Sstevel@tonic-gate# matches the size of the desired space. 5437c478bd9Sstevel@tonic-gate# 5447c478bd9Sstevel@tonic-gatedo_test btree-7.6 { 5457c478bd9Sstevel@tonic-gate btree_move_to $::c1 007 5467c478bd9Sstevel@tonic-gate btree_delete $::c1 5477c478bd9Sstevel@tonic-gate btree_move_to $::c1 011 5487c478bd9Sstevel@tonic-gate btree_delete $::c1 5497c478bd9Sstevel@tonic-gate} {} 5507c478bd9Sstevel@tonic-gatedo_test btree-7.7 { 5517c478bd9Sstevel@tonic-gate lindex [btree_cursor_dump $::c1] 5 5527c478bd9Sstevel@tonic-gate} {3} 5537c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 5547c478bd9Sstevel@tonic-gatedo_test btree-7.8 { 5557c478bd9Sstevel@tonic-gate btree_insert $::c1 007 {*** 007 ***} 5567c478bd9Sstevel@tonic-gate lindex [btree_cursor_dump $::c1] 5 5577c478bd9Sstevel@tonic-gate} {2} 5587c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 5597c478bd9Sstevel@tonic-gate 5607c478bd9Sstevel@tonic-gate# Make sure the freeSpace() routine properly coaleses adjacent memory blocks 5617c478bd9Sstevel@tonic-gate# 5627c478bd9Sstevel@tonic-gatedo_test btree-7.9 { 5637c478bd9Sstevel@tonic-gate btree_move_to $::c1 013 5647c478bd9Sstevel@tonic-gate btree_delete $::c1 5657c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5667c478bd9Sstevel@tonic-gate} {536 2} 5677c478bd9Sstevel@tonic-gatedo_test btree-7.10 { 5687c478bd9Sstevel@tonic-gate btree_move_to $::c1 009 5697c478bd9Sstevel@tonic-gate btree_delete $::c1 5707c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5717c478bd9Sstevel@tonic-gate} {564 2} 5727c478bd9Sstevel@tonic-gatedo_test btree-7.11 { 5737c478bd9Sstevel@tonic-gate btree_move_to $::c1 018 5747c478bd9Sstevel@tonic-gate btree_delete $::c1 5757c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5767c478bd9Sstevel@tonic-gate} {596 2} 5777c478bd9Sstevel@tonic-gatedo_test btree-7.13 { 5787c478bd9Sstevel@tonic-gate btree_move_to $::c1 033 5797c478bd9Sstevel@tonic-gate btree_delete $::c1 5807c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5817c478bd9Sstevel@tonic-gate} {624 3} 5827c478bd9Sstevel@tonic-gatedo_test btree-7.14 { 5837c478bd9Sstevel@tonic-gate btree_move_to $::c1 035 5847c478bd9Sstevel@tonic-gate btree_delete $::c1 5857c478bd9Sstevel@tonic-gate lrange [btree_cursor_dump $::c1] 4 5 5867c478bd9Sstevel@tonic-gate} {652 2} 5877c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 5887c478bd9Sstevel@tonic-gatedo_test btree-7.15 { 5897c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 5907c478bd9Sstevel@tonic-gate} {2} 5917c478bd9Sstevel@tonic-gate 5927c478bd9Sstevel@tonic-gate# Check to see that data on overflow pages work correctly. 5937c478bd9Sstevel@tonic-gate# 5947c478bd9Sstevel@tonic-gatedo_test btree-8.1 { 5957c478bd9Sstevel@tonic-gate set data "*** This is a very long key " 5967c478bd9Sstevel@tonic-gate while {[string length $data]<256} {append data $data} 5977c478bd9Sstevel@tonic-gate set ::data $data 5987c478bd9Sstevel@tonic-gate btree_insert $::c1 020 $data 5997c478bd9Sstevel@tonic-gate} {} 6007c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 6017c478bd9Sstevel@tonic-gatedo_test btree-8.1.1 { 6027c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 6037c478bd9Sstevel@tonic-gate} {2} 6047c478bd9Sstevel@tonic-gate#btree_pager_ref_dump $::b1 6057c478bd9Sstevel@tonic-gatedo_test btree-8.2 { 6067c478bd9Sstevel@tonic-gate string length [btree_data $::c1] 6077c478bd9Sstevel@tonic-gate} [string length $::data] 6087c478bd9Sstevel@tonic-gatedo_test btree-8.3 { 6097c478bd9Sstevel@tonic-gate btree_data $::c1 6107c478bd9Sstevel@tonic-gate} $::data 6117c478bd9Sstevel@tonic-gatedo_test btree-8.4 { 6127c478bd9Sstevel@tonic-gate btree_delete $::c1 6137c478bd9Sstevel@tonic-gate} {} 6147c478bd9Sstevel@tonic-gatedo_test btree-8.4.1 { 6157c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 6167c478bd9Sstevel@tonic-gate} [expr {int(([string length $::data]-238+1019)/1020)}] 6177c478bd9Sstevel@tonic-gatedo_test btree-8.5 { 6187c478bd9Sstevel@tonic-gate set data "*** This is an even longer key" 6197c478bd9Sstevel@tonic-gate while {[string length $data]<2000} {append data $data} 6207c478bd9Sstevel@tonic-gate set ::data $data 6217c478bd9Sstevel@tonic-gate btree_insert $::c1 020 $data 6227c478bd9Sstevel@tonic-gate} {} 6237c478bd9Sstevel@tonic-gatedo_test btree-8.6 { 6247c478bd9Sstevel@tonic-gate string length [btree_data $::c1] 6257c478bd9Sstevel@tonic-gate} [string length $::data] 6267c478bd9Sstevel@tonic-gatedo_test btree-8.7 { 6277c478bd9Sstevel@tonic-gate btree_data $::c1 6287c478bd9Sstevel@tonic-gate} $::data 6297c478bd9Sstevel@tonic-gatedo_test btree-8.8 { 6307c478bd9Sstevel@tonic-gate btree_commit $::b1 6317c478bd9Sstevel@tonic-gate btree_data $::c1 6327c478bd9Sstevel@tonic-gate} $::data 6337c478bd9Sstevel@tonic-gatedo_test btree-8.9 { 6347c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 6357c478bd9Sstevel@tonic-gate btree_close $::b1 6367c478bd9Sstevel@tonic-gate set ::b1 [btree_open test1.bt] 6377c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 6387c478bd9Sstevel@tonic-gate btree_move_to $::c1 020 6397c478bd9Sstevel@tonic-gate btree_data $::c1 6407c478bd9Sstevel@tonic-gate} $::data 6417c478bd9Sstevel@tonic-gatedo_test btree-8.10 { 6427c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 6437c478bd9Sstevel@tonic-gate btree_delete $::c1 6447c478bd9Sstevel@tonic-gate} {} 6457c478bd9Sstevel@tonic-gatedo_test btree-8.11 { 6467c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 6477c478bd9Sstevel@tonic-gate} [expr {int(([string length $::data]-238+1019)/1020)}] 6487c478bd9Sstevel@tonic-gate 6497c478bd9Sstevel@tonic-gate# Now check out keys on overflow pages. 6507c478bd9Sstevel@tonic-gate# 6517c478bd9Sstevel@tonic-gatedo_test btree-8.12 { 6527c478bd9Sstevel@tonic-gate set ::keyprefix "This is a long prefix to a key " 6537c478bd9Sstevel@tonic-gate while {[string length $::keyprefix]<256} {append ::keyprefix $::keyprefix} 6547c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 6557c478bd9Sstevel@tonic-gate btree_drop_table $::b1 2 6567c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 6577c478bd9Sstevel@tonic-gate} {4} 6587c478bd9Sstevel@tonic-gatedo_test btree-8.12.1 { 6597c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 6607c478bd9Sstevel@tonic-gate btree_insert $::c1 ${::keyprefix}1 1 6617c478bd9Sstevel@tonic-gate btree_data $::c1 6627c478bd9Sstevel@tonic-gate} {1} 6637c478bd9Sstevel@tonic-gatedo_test btree-8.13 { 6647c478bd9Sstevel@tonic-gate btree_key $::c1 6657c478bd9Sstevel@tonic-gate} ${keyprefix}1 6667c478bd9Sstevel@tonic-gatedo_test btree-8.14 { 6677c478bd9Sstevel@tonic-gate btree_insert $::c1 ${::keyprefix}2 2 6687c478bd9Sstevel@tonic-gate btree_insert $::c1 ${::keyprefix}3 3 6697c478bd9Sstevel@tonic-gate btree_key $::c1 6707c478bd9Sstevel@tonic-gate} ${keyprefix}3 6717c478bd9Sstevel@tonic-gatedo_test btree-8.15 { 6727c478bd9Sstevel@tonic-gate btree_move_to $::c1 ${::keyprefix}2 6737c478bd9Sstevel@tonic-gate btree_data $::c1 6747c478bd9Sstevel@tonic-gate} {2} 6757c478bd9Sstevel@tonic-gatedo_test btree-8.16 { 6767c478bd9Sstevel@tonic-gate btree_move_to $::c1 ${::keyprefix}1 6777c478bd9Sstevel@tonic-gate btree_data $::c1 6787c478bd9Sstevel@tonic-gate} {1} 6797c478bd9Sstevel@tonic-gatedo_test btree-8.17 { 6807c478bd9Sstevel@tonic-gate btree_move_to $::c1 ${::keyprefix}3 6817c478bd9Sstevel@tonic-gate btree_data $::c1 6827c478bd9Sstevel@tonic-gate} {3} 6837c478bd9Sstevel@tonic-gatedo_test btree-8.18 { 6847c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 6857c478bd9Sstevel@tonic-gate} {1} 6867c478bd9Sstevel@tonic-gatedo_test btree-8.19 { 6877c478bd9Sstevel@tonic-gate btree_move_to $::c1 ${::keyprefix}2 6887c478bd9Sstevel@tonic-gate btree_key $::c1 6897c478bd9Sstevel@tonic-gate} ${::keyprefix}2 6907c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 6917c478bd9Sstevel@tonic-gatedo_test btree-8.20 { 6927c478bd9Sstevel@tonic-gate btree_delete $::c1 6937c478bd9Sstevel@tonic-gate btree_next $::c1 6947c478bd9Sstevel@tonic-gate btree_key $::c1 6957c478bd9Sstevel@tonic-gate} ${::keyprefix}3 6967c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 6977c478bd9Sstevel@tonic-gatedo_test btree-8.21 { 6987c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 6997c478bd9Sstevel@tonic-gate} {2} 7007c478bd9Sstevel@tonic-gatedo_test btree-8.22 { 7017c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7027c478bd9Sstevel@tonic-gate} {2} 7037c478bd9Sstevel@tonic-gatedo_test btree-8.23 { 7047c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 7057c478bd9Sstevel@tonic-gate btree_drop_table $::b1 2 7067c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 7077c478bd9Sstevel@tonic-gate lindex [btree_get_meta $::b1] 0 7087c478bd9Sstevel@tonic-gate} {4} 7097c478bd9Sstevel@tonic-gatedo_test btree-8.24 { 7107c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7117c478bd9Sstevel@tonic-gate} {2} 7127c478bd9Sstevel@tonic-gate#btree_pager_ref_dump $::b1 7137c478bd9Sstevel@tonic-gate 7147c478bd9Sstevel@tonic-gate# Check page splitting logic 7157c478bd9Sstevel@tonic-gate# 7167c478bd9Sstevel@tonic-gatedo_test btree-9.1 { 7177c478bd9Sstevel@tonic-gate for {set i 1} {$i<=19} {incr i} { 7187c478bd9Sstevel@tonic-gate set key [format %03d $i] 7197c478bd9Sstevel@tonic-gate set data "*** $key *** $key *** $key *** $key ***" 7207c478bd9Sstevel@tonic-gate btree_insert $::c1 $key $data 7217c478bd9Sstevel@tonic-gate } 7227c478bd9Sstevel@tonic-gate} {} 7237c478bd9Sstevel@tonic-gate#btree_tree_dump $::b1 2 7247c478bd9Sstevel@tonic-gate#btree_pager_ref_dump $::b1 7257c478bd9Sstevel@tonic-gate#set pager_refinfo_enable 1 7267c478bd9Sstevel@tonic-gatedo_test btree-9.2 { 7277c478bd9Sstevel@tonic-gate btree_insert $::c1 020 {*** 020 *** 020 *** 020 *** 020 ***} 7287c478bd9Sstevel@tonic-gate select_keys $::c1 7297c478bd9Sstevel@tonic-gate} {001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020} 7307c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 5 7317c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 7327c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 7 7337c478bd9Sstevel@tonic-gate#btree_pager_ref_dump $::b1 7347c478bd9Sstevel@tonic-gate#set pager_refinfo_enable 0 7357c478bd9Sstevel@tonic-gate 7367c478bd9Sstevel@tonic-gate# The previous "select_keys" command left the cursor pointing at the root 7377c478bd9Sstevel@tonic-gate# page. So there should only be two pages checked out. 2 (the root) and 7387c478bd9Sstevel@tonic-gate# page 1. 7397c478bd9Sstevel@tonic-gatedo_test btree-9.2.1 { 7407c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7417c478bd9Sstevel@tonic-gate} {2} 7427c478bd9Sstevel@tonic-gatefor {set i 1} {$i<=20} {incr i} { 7437c478bd9Sstevel@tonic-gate do_test btree-9.3.$i.1 [subst { 7447c478bd9Sstevel@tonic-gate btree_move_to $::c1 [format %03d $i] 7457c478bd9Sstevel@tonic-gate btree_key $::c1 7467c478bd9Sstevel@tonic-gate }] [format %03d $i] 7477c478bd9Sstevel@tonic-gate do_test btree-9.3.$i.2 [subst { 7487c478bd9Sstevel@tonic-gate btree_move_to $::c1 [format %03d $i] 7497c478bd9Sstevel@tonic-gate string range \[btree_data $::c1\] 0 10 7507c478bd9Sstevel@tonic-gate }] "*** [format %03d $i] ***" 7517c478bd9Sstevel@tonic-gate} 7527c478bd9Sstevel@tonic-gatedo_test btree-9.4.1 { 7537c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7547c478bd9Sstevel@tonic-gate} {3} 7557c478bd9Sstevel@tonic-gate 7567c478bd9Sstevel@tonic-gate# Check the page joining logic. 7577c478bd9Sstevel@tonic-gate# 7587c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 7597c478bd9Sstevel@tonic-gate#btree_pager_ref_dump $::b1 7607c478bd9Sstevel@tonic-gatedo_test btree-9.4.2 { 7617c478bd9Sstevel@tonic-gate btree_move_to $::c1 005 7627c478bd9Sstevel@tonic-gate btree_delete $::c1 7637c478bd9Sstevel@tonic-gate} {} 7647c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 7657c478bd9Sstevel@tonic-gatefor {set i 1} {$i<=19} {incr i} { 7667c478bd9Sstevel@tonic-gate if {$i==5} continue 7677c478bd9Sstevel@tonic-gate do_test btree-9.5.$i.1 [subst { 7687c478bd9Sstevel@tonic-gate btree_move_to $::c1 [format %03d $i] 7697c478bd9Sstevel@tonic-gate btree_key $::c1 7707c478bd9Sstevel@tonic-gate }] [format %03d $i] 7717c478bd9Sstevel@tonic-gate do_test btree-9.5.$i.2 [subst { 7727c478bd9Sstevel@tonic-gate btree_move_to $::c1 [format %03d $i] 7737c478bd9Sstevel@tonic-gate string range \[btree_data $::c1\] 0 10 7747c478bd9Sstevel@tonic-gate }] "*** [format %03d $i] ***" 7757c478bd9Sstevel@tonic-gate} 7767c478bd9Sstevel@tonic-gate#btree_pager_ref_dump $::b1 7777c478bd9Sstevel@tonic-gatedo_test btree-9.6 { 7787c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 7797c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7807c478bd9Sstevel@tonic-gate} {1} 7817c478bd9Sstevel@tonic-gatedo_test btree-9.7 { 7827c478bd9Sstevel@tonic-gate btree_rollback $::b1 7837c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7847c478bd9Sstevel@tonic-gate} {0} 7857c478bd9Sstevel@tonic-gate 7867c478bd9Sstevel@tonic-gate# Create a tree of depth two. That is, there is a single divider entry 7877c478bd9Sstevel@tonic-gate# on the root pages and two leaf pages. Then delete the divider entry 7887c478bd9Sstevel@tonic-gate# see what happens. 7897c478bd9Sstevel@tonic-gate# 7907c478bd9Sstevel@tonic-gatedo_test btree-10.1 { 7917c478bd9Sstevel@tonic-gate btree_begin_transaction $::b1 7927c478bd9Sstevel@tonic-gate btree_drop_table $::b1 2 7937c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7947c478bd9Sstevel@tonic-gate} {1} 7957c478bd9Sstevel@tonic-gatedo_test btree-10.2 { 7967c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 7977c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 7987c478bd9Sstevel@tonic-gate} {2} 7997c478bd9Sstevel@tonic-gatedo_test btree-10.3 { 8007c478bd9Sstevel@tonic-gate for {set i 1} {$i<=20} {incr i} { 8017c478bd9Sstevel@tonic-gate set key [format %03d $i] 8027c478bd9Sstevel@tonic-gate set data "*** $key *** $key *** $key *** $key ***" 8037c478bd9Sstevel@tonic-gate btree_insert $::c1 $key $data 8047c478bd9Sstevel@tonic-gate } 8057c478bd9Sstevel@tonic-gate select_keys $::c1 8067c478bd9Sstevel@tonic-gate} {001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020} 8077c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 7 8087c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 8097c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 6 8107c478bd9Sstevel@tonic-gatedo_test btree-10.4 { 8117c478bd9Sstevel@tonic-gate btree_move_to $::c1 011 8127c478bd9Sstevel@tonic-gate btree_delete $::c1 8137c478bd9Sstevel@tonic-gate select_keys $::c1 8147c478bd9Sstevel@tonic-gate} {001 002 003 004 005 006 007 008 009 010 012 013 014 015 016 017 018 019 020} 8157c478bd9Sstevel@tonic-gate#btree_tree_dump $::b1 2 8167c478bd9Sstevel@tonic-gate#btree_pager_ref_dump $::b1 8177c478bd9Sstevel@tonic-gatefor {set i 1} {$i<=20} {incr i} { 8187c478bd9Sstevel@tonic-gate do_test btree-10.5.$i { 8197c478bd9Sstevel@tonic-gate btree_move_to $::c1 [format %03d $i] 8207c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 8217c478bd9Sstevel@tonic-gate } {2} 8227c478bd9Sstevel@tonic-gate #btree_pager_ref_dump $::b1 8237c478bd9Sstevel@tonic-gate #btree_tree_dump $::b1 2 8247c478bd9Sstevel@tonic-gate} 8257c478bd9Sstevel@tonic-gate 8267c478bd9Sstevel@tonic-gate# Create a tree with lots more pages 8277c478bd9Sstevel@tonic-gate# 8287c478bd9Sstevel@tonic-gatecatch {unset ::data} 8297c478bd9Sstevel@tonic-gatecatch {unset ::key} 8307c478bd9Sstevel@tonic-gatefor {set i 21} {$i<=1000} {incr i} { 8317c478bd9Sstevel@tonic-gate do_test btree-11.1.$i.1 { 8327c478bd9Sstevel@tonic-gate set key [format %03d $i] 8337c478bd9Sstevel@tonic-gate set ::data "*** $key *** $key *** $key *** $key ***" 8347c478bd9Sstevel@tonic-gate btree_insert $::c1 $key $data 8357c478bd9Sstevel@tonic-gate btree_key $::c1 8367c478bd9Sstevel@tonic-gate } [format %03d $i] 8377c478bd9Sstevel@tonic-gate do_test btree-11.1.$i.2 { 8387c478bd9Sstevel@tonic-gate btree_data $::c1 8397c478bd9Sstevel@tonic-gate } $::data 8407c478bd9Sstevel@tonic-gate set ::key [format %03d [expr {$i/2}]] 8417c478bd9Sstevel@tonic-gate if {$::key=="011"} {set ::key 010} 8427c478bd9Sstevel@tonic-gate do_test btree-11.1.$i.3 { 8437c478bd9Sstevel@tonic-gate btree_move_to $::c1 $::key 8447c478bd9Sstevel@tonic-gate btree_key $::c1 8457c478bd9Sstevel@tonic-gate } $::key 8467c478bd9Sstevel@tonic-gate} 8477c478bd9Sstevel@tonic-gatecatch {unset ::data} 8487c478bd9Sstevel@tonic-gatecatch {unset ::key} 8497c478bd9Sstevel@tonic-gate 8507c478bd9Sstevel@tonic-gate# Make sure our reference count is still correct. 8517c478bd9Sstevel@tonic-gate# 8527c478bd9Sstevel@tonic-gatedo_test btree-11.2 { 8537c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 8547c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 8557c478bd9Sstevel@tonic-gate} {1} 8567c478bd9Sstevel@tonic-gatedo_test btree-11.3 { 8577c478bd9Sstevel@tonic-gate set ::c1 [btree_cursor $::b1 2 1] 8587c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 8597c478bd9Sstevel@tonic-gate} {2} 8607c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 8617c478bd9Sstevel@tonic-gate 8627c478bd9Sstevel@tonic-gate# Delete the dividers on the root page 8637c478bd9Sstevel@tonic-gate# 8647c478bd9Sstevel@tonic-gatedo_test btree-11.4 { 8657c478bd9Sstevel@tonic-gate btree_move_to $::c1 257 8667c478bd9Sstevel@tonic-gate btree_delete $::c1 8677c478bd9Sstevel@tonic-gate btree_next $::c1 8687c478bd9Sstevel@tonic-gate btree_key $::c1 8697c478bd9Sstevel@tonic-gate} {258} 8707c478bd9Sstevel@tonic-gatedo_test btree-11.4.1 { 8717c478bd9Sstevel@tonic-gate btree_move_to $::c1 256 8727c478bd9Sstevel@tonic-gate btree_key $::c1 8737c478bd9Sstevel@tonic-gate} {256} 8747c478bd9Sstevel@tonic-gatedo_test btree-11.4.2 { 8757c478bd9Sstevel@tonic-gate btree_move_to $::c1 258 8767c478bd9Sstevel@tonic-gate btree_key $::c1 8777c478bd9Sstevel@tonic-gate} {258} 8787c478bd9Sstevel@tonic-gatedo_test btree-11.4.3 { 8797c478bd9Sstevel@tonic-gate btree_move_to $::c1 259 8807c478bd9Sstevel@tonic-gate btree_key $::c1 8817c478bd9Sstevel@tonic-gate} {259} 8827c478bd9Sstevel@tonic-gatedo_test btree-11.4.4 { 8837c478bd9Sstevel@tonic-gate btree_move_to $::c1 257 8847c478bd9Sstevel@tonic-gate set n [btree_key $::c1] 8857c478bd9Sstevel@tonic-gate expr {$n==256||$n==258} 8867c478bd9Sstevel@tonic-gate} {1} 8877c478bd9Sstevel@tonic-gatedo_test btree-11.5 { 8887c478bd9Sstevel@tonic-gate btree_move_to $::c1 513 8897c478bd9Sstevel@tonic-gate btree_delete $::c1 8907c478bd9Sstevel@tonic-gate btree_next $::c1 8917c478bd9Sstevel@tonic-gate btree_key $::c1 8927c478bd9Sstevel@tonic-gate} {514} 8937c478bd9Sstevel@tonic-gatedo_test btree-11.5.1 { 8947c478bd9Sstevel@tonic-gate btree_move_to $::c1 512 8957c478bd9Sstevel@tonic-gate btree_key $::c1 8967c478bd9Sstevel@tonic-gate} {512} 8977c478bd9Sstevel@tonic-gatedo_test btree-11.5.2 { 8987c478bd9Sstevel@tonic-gate btree_move_to $::c1 514 8997c478bd9Sstevel@tonic-gate btree_key $::c1 9007c478bd9Sstevel@tonic-gate} {514} 9017c478bd9Sstevel@tonic-gatedo_test btree-11.5.3 { 9027c478bd9Sstevel@tonic-gate btree_move_to $::c1 515 9037c478bd9Sstevel@tonic-gate btree_key $::c1 9047c478bd9Sstevel@tonic-gate} {515} 9057c478bd9Sstevel@tonic-gatedo_test btree-11.5.4 { 9067c478bd9Sstevel@tonic-gate btree_move_to $::c1 513 9077c478bd9Sstevel@tonic-gate set n [btree_key $::c1] 9087c478bd9Sstevel@tonic-gate expr {$n==512||$n==514} 9097c478bd9Sstevel@tonic-gate} {1} 9107c478bd9Sstevel@tonic-gatedo_test btree-11.6 { 9117c478bd9Sstevel@tonic-gate btree_move_to $::c1 769 9127c478bd9Sstevel@tonic-gate btree_delete $::c1 9137c478bd9Sstevel@tonic-gate btree_next $::c1 9147c478bd9Sstevel@tonic-gate btree_key $::c1 9157c478bd9Sstevel@tonic-gate} {770} 9167c478bd9Sstevel@tonic-gatedo_test btree-11.6.1 { 9177c478bd9Sstevel@tonic-gate btree_move_to $::c1 768 9187c478bd9Sstevel@tonic-gate btree_key $::c1 9197c478bd9Sstevel@tonic-gate} {768} 9207c478bd9Sstevel@tonic-gatedo_test btree-11.6.2 { 9217c478bd9Sstevel@tonic-gate btree_move_to $::c1 771 9227c478bd9Sstevel@tonic-gate btree_key $::c1 9237c478bd9Sstevel@tonic-gate} {771} 9247c478bd9Sstevel@tonic-gatedo_test btree-11.6.3 { 9257c478bd9Sstevel@tonic-gate btree_move_to $::c1 770 9267c478bd9Sstevel@tonic-gate btree_key $::c1 9277c478bd9Sstevel@tonic-gate} {770} 9287c478bd9Sstevel@tonic-gatedo_test btree-11.6.4 { 9297c478bd9Sstevel@tonic-gate btree_move_to $::c1 769 9307c478bd9Sstevel@tonic-gate set n [btree_key $::c1] 9317c478bd9Sstevel@tonic-gate expr {$n==768||$n==770} 9327c478bd9Sstevel@tonic-gate} {1} 9337c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 2 9347c478bd9Sstevel@tonic-gate#btree_page_dump $::b1 25 9357c478bd9Sstevel@tonic-gate 9367c478bd9Sstevel@tonic-gate# Change the data on an intermediate node such that the node becomes overfull 9377c478bd9Sstevel@tonic-gate# and has to split. We happen to know that intermediate nodes exist on 9387c478bd9Sstevel@tonic-gate# 337, 401 and 465 by the btree_page_dumps above 9397c478bd9Sstevel@tonic-gate# 9407c478bd9Sstevel@tonic-gatecatch {unset ::data} 9417c478bd9Sstevel@tonic-gateset ::data {This is going to be a very long data segment} 9427c478bd9Sstevel@tonic-gateappend ::data $::data 9437c478bd9Sstevel@tonic-gateappend ::data $::data 9447c478bd9Sstevel@tonic-gatedo_test btree-12.1 { 9457c478bd9Sstevel@tonic-gate btree_insert $::c1 337 $::data 9467c478bd9Sstevel@tonic-gate btree_data $::c1 9477c478bd9Sstevel@tonic-gate} $::data 9487c478bd9Sstevel@tonic-gatedo_test btree-12.2 { 9497c478bd9Sstevel@tonic-gate btree_insert $::c1 401 $::data 9507c478bd9Sstevel@tonic-gate btree_data $::c1 9517c478bd9Sstevel@tonic-gate} $::data 9527c478bd9Sstevel@tonic-gatedo_test btree-12.3 { 9537c478bd9Sstevel@tonic-gate btree_insert $::c1 465 $::data 9547c478bd9Sstevel@tonic-gate btree_data $::c1 9557c478bd9Sstevel@tonic-gate} $::data 9567c478bd9Sstevel@tonic-gatedo_test btree-12.4 { 9577c478bd9Sstevel@tonic-gate btree_move_to $::c1 337 9587c478bd9Sstevel@tonic-gate btree_key $::c1 9597c478bd9Sstevel@tonic-gate} {337} 9607c478bd9Sstevel@tonic-gatedo_test btree-12.5 { 9617c478bd9Sstevel@tonic-gate btree_data $::c1 9627c478bd9Sstevel@tonic-gate} $::data 9637c478bd9Sstevel@tonic-gatedo_test btree-12.6 { 9647c478bd9Sstevel@tonic-gate btree_next $::c1 9657c478bd9Sstevel@tonic-gate btree_key $::c1 9667c478bd9Sstevel@tonic-gate} {338} 9677c478bd9Sstevel@tonic-gatedo_test btree-12.7 { 9687c478bd9Sstevel@tonic-gate btree_move_to $::c1 464 9697c478bd9Sstevel@tonic-gate btree_key $::c1 9707c478bd9Sstevel@tonic-gate} {464} 9717c478bd9Sstevel@tonic-gatedo_test btree-12.8 { 9727c478bd9Sstevel@tonic-gate btree_next $::c1 9737c478bd9Sstevel@tonic-gate btree_data $::c1 9747c478bd9Sstevel@tonic-gate} $::data 9757c478bd9Sstevel@tonic-gatedo_test btree-12.9 { 9767c478bd9Sstevel@tonic-gate btree_next $::c1 9777c478bd9Sstevel@tonic-gate btree_key $::c1 9787c478bd9Sstevel@tonic-gate} {466} 9797c478bd9Sstevel@tonic-gatedo_test btree-12.10 { 9807c478bd9Sstevel@tonic-gate btree_move_to $::c1 400 9817c478bd9Sstevel@tonic-gate btree_key $::c1 9827c478bd9Sstevel@tonic-gate} {400} 9837c478bd9Sstevel@tonic-gatedo_test btree-12.11 { 9847c478bd9Sstevel@tonic-gate btree_next $::c1 9857c478bd9Sstevel@tonic-gate btree_data $::c1 9867c478bd9Sstevel@tonic-gate} $::data 9877c478bd9Sstevel@tonic-gatedo_test btree-12.12 { 9887c478bd9Sstevel@tonic-gate btree_next $::c1 9897c478bd9Sstevel@tonic-gate btree_key $::c1 9907c478bd9Sstevel@tonic-gate} {402} 9917c478bd9Sstevel@tonic-gatedo_test btree-13.1 { 9927c478bd9Sstevel@tonic-gate btree_integrity_check $::b1 2 3 9937c478bd9Sstevel@tonic-gate} {} 9947c478bd9Sstevel@tonic-gate 9957c478bd9Sstevel@tonic-gate# To Do: 9967c478bd9Sstevel@tonic-gate# 9977c478bd9Sstevel@tonic-gate# 1. Do some deletes from the 3-layer tree 9987c478bd9Sstevel@tonic-gate# 2. Commit and reopen the database 9997c478bd9Sstevel@tonic-gate# 3. Read every 15th entry and make sure it works 10007c478bd9Sstevel@tonic-gate# 4. Implement btree_sanity and put it throughout this script 10017c478bd9Sstevel@tonic-gate# 10027c478bd9Sstevel@tonic-gate 10037c478bd9Sstevel@tonic-gatedo_test btree-15.98 { 10047c478bd9Sstevel@tonic-gate btree_close_cursor $::c1 10057c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 10067c478bd9Sstevel@tonic-gate} {1} 10077c478bd9Sstevel@tonic-gatedo_test btree-15.99 { 10087c478bd9Sstevel@tonic-gate btree_rollback $::b1 10097c478bd9Sstevel@tonic-gate lindex [btree_pager_stats $::b1] 1 10107c478bd9Sstevel@tonic-gate} {0} 10117c478bd9Sstevel@tonic-gatebtree_pager_ref_dump $::b1 10127c478bd9Sstevel@tonic-gate 10137c478bd9Sstevel@tonic-gatedo_test btree-99.1 { 10147c478bd9Sstevel@tonic-gate btree_close $::b1 10157c478bd9Sstevel@tonic-gate} {} 10167c478bd9Sstevel@tonic-gatecatch {unset data} 10177c478bd9Sstevel@tonic-gatecatch {unset key} 10187c478bd9Sstevel@tonic-gate 10197c478bd9Sstevel@tonic-gate} ;# end if( not mem: and has pager_open command ); 10207c478bd9Sstevel@tonic-gate 10217c478bd9Sstevel@tonic-gatefinish_test 1022