1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Add 3-byte and 6-byte integer serial types. This makes databases smaller

and faster.  Should we go ahead and add 5- and 7-byte integer types too? (CVS 1499)

FossilOrigin-Name: e6685af815c4c0c7f09bb097a59a121862b865cf
This commit is contained in:
drh
2004-05-30 21:14:58 +00:00
parent e51c44f481
commit a19b775db9
5 changed files with 73 additions and 61 deletions

View File

@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this script is btree database backend
#
# $Id: btree.test,v 1.25 2004/05/18 15:57:42 drh Exp $
# $Id: btree.test,v 1.26 2004/05/30 21:14:59 drh Exp $
set testdir [file dirname $argv0]
@ -520,14 +520,15 @@ do_test btree-6.13 {
do_test btree-7.1 {
btree_begin_transaction $::b1
} {}
if 0 {
catch {unset key}
catch {unset data}
do_test btree-7.2 {
# Each record will be 10 bytes in size.
# + 100 bytes of database header
# + 6 bytes of table header
# + 8 bytes of table header
# + 91*10=910 bytes of cells
# Totals 1016 bytes. 8 bytes left over
# Totals 1018 bytes. 6 bytes left over
# Keys are 1000 through 1090.
for {set i 1000} {$i<1091} {incr i} {
set key $i
@ -535,28 +536,35 @@ do_test btree-7.2 {
btree_insert $::c1 $key $data
}
lrange [btree_cursor_info $::c1] 4 5
} {8 1}
} {6 0}
#btree_tree_dump $::b1 1
do_test btree-7.3 {
for {set i 1001} {$i<1091} {incr i 2} {
btree_move_to $::c1 $i
btree_delete $::c1
}
# Freed 45 blocks. Total freespace is 458
# Freed 45 blocks. Total freespace is 456
# Keys remaining are even numbers between 1000 and 1090, inclusive
lrange [btree_cursor_info $::c1] 4 5
} {458 46}
} {456 45}
#btree_tree_dump $::b1 1
do_test btree-7.4 {
# The largest free block is 10 bytes long. So if we insert
# a record bigger than 10 bytes it should force a defrag
# The record is 20 bytes long.
btree_insert $::c1 2000 {123456789_12345}
# The largest free block is 8 bytes long. But there is also a
# huge hole between the cell pointer array and the cellcontent.
# But if we insert a large enough record, it should force a defrag.
set data 123456789_
append data $data
append data $data
append data $data
append data $data
append data $data
btree_insert $::c1 2000 $data
btree_move_to $::c1 2000
btree_key $::c1
} {2000}
do_test btree-7.5 {
lrange [btree_cursor_info $::c1] 4 5
} {438 1}
} {343 0}
#btree_tree_dump $::b1 1
# Delete an entry to make a hole of a known size, then immediately recreate
@ -574,13 +582,13 @@ do_test btree-7.6 {
} {}
do_test btree-7.7 {
lrange [btree_cursor_info $::c1] 4 5
} {458 3} ;# Create two new holes of 10 bytes each
#btree_page_dump $::b1 2
} {363 2} ;# Create two new holes of 10 bytes each
#btree_page_dump $::b1 1
do_test btree-7.8 {
btree_insert $::c1 1006 { 1006}
lrange [btree_cursor_info $::c1] 4 5
} {448 2} ;# Filled in the first hole
#btree_page_dump $::b1 2
} {353 1} ;# Filled in the first hole
btree_page_dump $::b1 1
# Make sure the freeSpace() routine properly coaleses adjacent memory blocks
#
@ -588,7 +596,9 @@ do_test btree-7.9 {
btree_move_to $::c1 1012
btree_delete $::c1
lrange [btree_cursor_info $::c1] 4 5
} {458 2} ;# Coalesce with the whole before
} {363 2} ;# Coalesce with the hole before
btree_page_dump $::b1 1
exit
do_test btree-7.10 {
btree_move_to $::c1 1008
btree_delete $::c1
@ -613,6 +623,7 @@ do_test btree-7.14 {
do_test btree-7.15 {
lindex [btree_pager_stats $::b1] 1
} {1}
} ;# endif
# Check to see that data on overflow pages work correctly.
#
@ -887,7 +898,7 @@ for {set i 1} {$i<=30} {incr i} {
#
catch {unset ::data}
catch {unset ::key}
for {set i 31} {$i<=999} {incr i} {
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 ***"
@ -918,20 +929,21 @@ do_test btree-11.3 {
set ::c1 [btree_cursor $::b1 2 1]
lindex [btree_pager_stats $::b1] 1
} {2}
#btree_page_dump $::b1 2
# Delete the dividers on the root page
#
#btree_page_dump $::b1 2
do_test btree-11.4 {
btree_move_to $::c1 551
btree_move_to $::c1 1667
btree_delete $::c1
btree_move_to $::c1 551
btree_move_to $::c1 1667
set k [btree_key $::c1]
if {$k==550} {
if {$k==1666} {
set k [btree_next $::c1]
}
btree_key $::c1
} {552}
} {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