mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-01 06:27:03 +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:
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Various\sspeed\senhancements.\s(CVS\s1498)
|
C Add\s3-byte\sand\s6-byte\sinteger\sserial\stypes.\s\sThis\smakes\sdatabases\ssmaller\nand\sfaster.\s\sShould\swe\sgo\sahead\sand\sadd\s5-\sand\s7-byte\sinteger\stypes\stoo?\s(CVS\s1499)
|
||||||
D 2004-05-30T20:46:09
|
D 2004-05-30T21:14:59
|
||||||
F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
|
F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
|
||||||
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
|
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
|
||||||
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
||||||
@ -69,11 +69,11 @@ F src/update.c 259f06e7b22c684b2d3dda54a18185892d6e9573
|
|||||||
F src/utf.c f8604999a54483533ac20a63879074f01b0df384
|
F src/utf.c f8604999a54483533ac20a63879074f01b0df384
|
||||||
F src/util.c 3b647719c0bece41491300b605cff96a7a26f03a
|
F src/util.c 3b647719c0bece41491300b605cff96a7a26f03a
|
||||||
F src/vacuum.c 82ce1fc8ecc2e1aa284c13fe38446709f9936c63
|
F src/vacuum.c 82ce1fc8ecc2e1aa284c13fe38446709f9936c63
|
||||||
F src/vdbe.c a2131f7846fd2dbe1573bb37fc6d683c455c0ea4
|
F src/vdbe.c 8c99c3c1e4b29b62a3e19e84b207b0fe84c45c46
|
||||||
F src/vdbe.h e73f890e0f2a6c42b183d7d6937947930fe4fdeb
|
F src/vdbe.h e73f890e0f2a6c42b183d7d6937947930fe4fdeb
|
||||||
F src/vdbeInt.h c2bcd6e5a6e6a3753e4c5a368629c3a625719bfc
|
F src/vdbeInt.h c2bcd6e5a6e6a3753e4c5a368629c3a625719bfc
|
||||||
F src/vdbeapi.c 0c5d64c81871cb4fe5407e639604ee95738b6942
|
F src/vdbeapi.c 0c5d64c81871cb4fe5407e639604ee95738b6942
|
||||||
F src/vdbeaux.c ec0cccd9611fa6146a7b70ec23112959e63510ec
|
F src/vdbeaux.c c7e66db2b52b3c816adbdec81581b5e7ad257639
|
||||||
F src/vdbemem.c 627d714c347f6af8092cc48ae1c06fd774a1ad9c
|
F src/vdbemem.c 627d714c347f6af8092cc48ae1c06fd774a1ad9c
|
||||||
F src/where.c 444a7c3a8b1eb7bba072e489af628555d21d92a4
|
F src/where.c 444a7c3a8b1eb7bba072e489af628555d21d92a4
|
||||||
F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
|
F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
|
||||||
@ -85,7 +85,7 @@ F test/bigfile.test ea904b853ce2d703b16c5ce90e2b54951bc1ae81
|
|||||||
F test/bigrow.test 8ab252dba108f12ad64e337b0f2ff31a807ac578
|
F test/bigrow.test 8ab252dba108f12ad64e337b0f2ff31a807ac578
|
||||||
F test/bind.test 4f5a19e84077b61ea797644b4942bb98b17bdd42
|
F test/bind.test 4f5a19e84077b61ea797644b4942bb98b17bdd42
|
||||||
F test/blob.test b6474275536614352d6e1c729f23a18ba1082ae9
|
F test/blob.test b6474275536614352d6e1c729f23a18ba1082ae9
|
||||||
F test/btree.test 08e4093c78d2bc1d54e27266f8d17fed14751125
|
F test/btree.test 018909b1c7ffe1fdcbd07774250a52ea58de3a11
|
||||||
F test/btree2.test aa4a6d05b1ea90b1acaf83ba89039dd302a88635
|
F test/btree2.test aa4a6d05b1ea90b1acaf83ba89039dd302a88635
|
||||||
F test/btree4.test 3797b4305694c7af6828675b0f4b1424b8ca30e4
|
F test/btree4.test 3797b4305694c7af6828675b0f4b1424b8ca30e4
|
||||||
F test/btree5.test 8e5ff32c02e685d36516c6499add9375fe1377f2
|
F test/btree5.test 8e5ff32c02e685d36516c6499add9375fe1377f2
|
||||||
@ -204,7 +204,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
|
|||||||
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
|
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
|
||||||
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
|
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
|
||||||
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
|
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
|
||||||
P c86b7c065a798cd108189b96e87d100115862ff2
|
P a0db15bba64af0c529d5be366659bca1165ff21b
|
||||||
R d1973e68e90aa9267e1c93eed75b57c5
|
R 915a168eb388cda740e119c94b1b9b85
|
||||||
U drh
|
U drh
|
||||||
Z 7599afd42e52bbb72c5888c64d1ac6d1
|
Z 7fdd86c94ca6358f07f558cb154c7ae7
|
||||||
|
@ -1 +1 @@
|
|||||||
a0db15bba64af0c529d5be366659bca1165ff21b
|
e6685af815c4c0c7f09bb097a59a121862b865cf
|
@ -43,7 +43,7 @@
|
|||||||
** in this file for details. If in doubt, do not deviate from existing
|
** in this file for details. If in doubt, do not deviate from existing
|
||||||
** commenting and indentation practices when changing or adding code.
|
** commenting and indentation practices when changing or adding code.
|
||||||
**
|
**
|
||||||
** $Id: vdbe.c,v 1.349 2004/05/30 20:46:09 drh Exp $
|
** $Id: vdbe.c,v 1.350 2004/05/30 21:14:59 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
@ -3714,7 +3714,7 @@ case OP_IdxIsNull: {
|
|||||||
k = sqlite3GetVarint32(z, &serial_type);
|
k = sqlite3GetVarint32(z, &serial_type);
|
||||||
for(; k<n && i>0; i--){
|
for(; k<n && i>0; i--){
|
||||||
k += sqlite3GetVarint32(&z[k], &serial_type);
|
k += sqlite3GetVarint32(&z[k], &serial_type);
|
||||||
if( serial_type==6 ){ /* Serial type 6 is a NULL */
|
if( serial_type==0 ){ /* Serial type 0 is a NULL */
|
||||||
pc = pOp->p2-1;
|
pc = pOp->p2-1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1117,14 +1117,15 @@ int sqlite3VdbeCursorMoveto(Cursor *p){
|
|||||||
**
|
**
|
||||||
** serial type bytes of data type
|
** serial type bytes of data type
|
||||||
** -------------- --------------- ---------------
|
** -------------- --------------- ---------------
|
||||||
** 0 - Not a type.
|
** 0 0 NULL
|
||||||
** 1 1 signed integer
|
** 1 1 signed integer
|
||||||
** 2 2 signed integer
|
** 2 2 signed integer
|
||||||
** 3 4 signed integer
|
** 3 3 signed integer
|
||||||
** 4 8 signed integer
|
** 4 4 signed integer
|
||||||
** 5 8 IEEE float
|
** 5 6 signed integer
|
||||||
** 6 0 NULL
|
** 6 8 signed integer
|
||||||
** 7..11 reserved for expansion
|
** 7 8 IEEE float
|
||||||
|
** 8-11 reserved for expansion
|
||||||
** N>=12 and even (N-12)/2 BLOB
|
** N>=12 and even (N-12)/2 BLOB
|
||||||
** N>=13 and odd (N-13)/2 text
|
** N>=13 and odd (N-13)/2 text
|
||||||
**
|
**
|
||||||
@ -1137,18 +1138,20 @@ u32 sqlite3VdbeSerialType(Mem *pMem){
|
|||||||
int flags = pMem->flags;
|
int flags = pMem->flags;
|
||||||
|
|
||||||
if( flags&MEM_Null ){
|
if( flags&MEM_Null ){
|
||||||
return 6;
|
return 0;
|
||||||
}
|
}
|
||||||
if( flags&MEM_Int ){
|
if( flags&MEM_Int ){
|
||||||
/* Figure out whether to use 1, 2, 4 or 8 bytes. */
|
/* Figure out whether to use 1, 2, 4 or 8 bytes. */
|
||||||
i64 i = pMem->i;
|
i64 i = pMem->i;
|
||||||
if( i>=-127 && i<=127 ) return 1;
|
if( i>=-127 && i<=127 ) return 1;
|
||||||
if( i>=-32767 && i<=32767 ) return 2;
|
if( i>=-32767 && i<=32767 ) return 2;
|
||||||
if( i>=-2147483647 && i<=2147483647 ) return 3;
|
if( i>=-8388607 && i<=8388607 ) return 3;
|
||||||
return 4;
|
if( i>=-2147483647 && i<=2147483647 ) return 4;
|
||||||
|
if( i>=-140737488355328L && i<=140737488355328L ) return 5;
|
||||||
|
return 6;
|
||||||
}
|
}
|
||||||
if( flags&MEM_Real ){
|
if( flags&MEM_Real ){
|
||||||
return 5;
|
return 7;
|
||||||
}
|
}
|
||||||
if( flags&MEM_Str ){
|
if( flags&MEM_Str ){
|
||||||
int n = pMem->n;
|
int n = pMem->n;
|
||||||
@ -1165,11 +1168,10 @@ u32 sqlite3VdbeSerialType(Mem *pMem){
|
|||||||
** Return the length of the data corresponding to the supplied serial-type.
|
** Return the length of the data corresponding to the supplied serial-type.
|
||||||
*/
|
*/
|
||||||
int sqlite3VdbeSerialTypeLen(u32 serial_type){
|
int sqlite3VdbeSerialTypeLen(u32 serial_type){
|
||||||
assert( serial_type!=0 );
|
if( serial_type>=12 ){
|
||||||
if( serial_type>6 ){
|
|
||||||
return (serial_type-12)/2;
|
return (serial_type-12)/2;
|
||||||
}else{
|
}else{
|
||||||
static u8 aSize[] = { 0, 1, 2, 4, 8, 8, 0, };
|
static u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 };
|
||||||
return aSize[serial_type];
|
return aSize[serial_type];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1183,18 +1185,16 @@ int sqlite3VdbeSerialPut(unsigned char *buf, Mem *pMem){
|
|||||||
u32 serial_type = sqlite3VdbeSerialType(pMem);
|
u32 serial_type = sqlite3VdbeSerialType(pMem);
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
assert( serial_type!=0 );
|
|
||||||
|
|
||||||
/* NULL */
|
/* NULL */
|
||||||
if( serial_type==6 ){
|
if( serial_type==0 ){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Integer and Real */
|
/* Integer and Real */
|
||||||
if( serial_type<=5 ){
|
if( serial_type<=7 ){
|
||||||
u64 v;
|
u64 v;
|
||||||
int i;
|
int i;
|
||||||
if( serial_type==5 ){
|
if( serial_type==7 ){
|
||||||
v = *(u64*)&pMem->r;
|
v = *(u64*)&pMem->r;
|
||||||
}else{
|
}else{
|
||||||
v = *(u64*)&pMem->i;
|
v = *(u64*)&pMem->i;
|
||||||
@ -1225,11 +1225,15 @@ int sqlite3VdbeSerialGet(
|
|||||||
){
|
){
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
if( serial_type==0 ){
|
||||||
|
/* NULL */
|
||||||
|
pMem->flags = MEM_Null;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
len = sqlite3VdbeSerialTypeLen(serial_type);
|
len = sqlite3VdbeSerialTypeLen(serial_type);
|
||||||
assert( serial_type!=0 );
|
if( serial_type<=7 ){
|
||||||
if( serial_type<=5 ){
|
|
||||||
/* Integer and Real */
|
/* Integer and Real */
|
||||||
if( serial_type<=3 ){
|
if( serial_type<=4 ){
|
||||||
/* 32-bit integer type. This is handled by a special case for
|
/* 32-bit integer type. This is handled by a special case for
|
||||||
** performance reasons. */
|
** performance reasons. */
|
||||||
int v = buf[0];
|
int v = buf[0];
|
||||||
@ -1253,7 +1257,7 @@ int sqlite3VdbeSerialGet(
|
|||||||
for(n=0; n<len; n++){
|
for(n=0; n<len; n++){
|
||||||
v = (v<<8) | buf[n];
|
v = (v<<8) | buf[n];
|
||||||
}
|
}
|
||||||
if( serial_type==5 ){
|
if( serial_type==7 ){
|
||||||
pMem->flags = MEM_Real;
|
pMem->flags = MEM_Real;
|
||||||
pMem->r = *(double*)&v;
|
pMem->r = *(double*)&v;
|
||||||
}else{
|
}else{
|
||||||
@ -1261,8 +1265,9 @@ int sqlite3VdbeSerialGet(
|
|||||||
pMem->i = *(i64*)&v;
|
pMem->i = *(i64*)&v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if( serial_type>=12 ){
|
}else{
|
||||||
/* String or blob */
|
/* String or blob */
|
||||||
|
assert( serial_type>=12 );
|
||||||
pMem->z = (char *)buf;
|
pMem->z = (char *)buf;
|
||||||
pMem->n = len;
|
pMem->n = len;
|
||||||
if( serial_type&0x01 ){
|
if( serial_type&0x01 ){
|
||||||
@ -1270,11 +1275,6 @@ int sqlite3VdbeSerialGet(
|
|||||||
}else{
|
}else{
|
||||||
pMem->flags = MEM_Blob | MEM_Ephem;
|
pMem->flags = MEM_Blob | MEM_Ephem;
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
/* NULL */
|
|
||||||
assert( serial_type==6 );
|
|
||||||
assert( len==0 );
|
|
||||||
pMem->flags = MEM_Null;
|
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
# This file implements regression tests for SQLite library. The
|
# This file implements regression tests for SQLite library. The
|
||||||
# focus of this script is btree database backend
|
# 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]
|
set testdir [file dirname $argv0]
|
||||||
@ -520,14 +520,15 @@ do_test btree-6.13 {
|
|||||||
do_test btree-7.1 {
|
do_test btree-7.1 {
|
||||||
btree_begin_transaction $::b1
|
btree_begin_transaction $::b1
|
||||||
} {}
|
} {}
|
||||||
|
if 0 {
|
||||||
catch {unset key}
|
catch {unset key}
|
||||||
catch {unset data}
|
catch {unset data}
|
||||||
do_test btree-7.2 {
|
do_test btree-7.2 {
|
||||||
# Each record will be 10 bytes in size.
|
# Each record will be 10 bytes in size.
|
||||||
# + 100 bytes of database header
|
# + 100 bytes of database header
|
||||||
# + 6 bytes of table header
|
# + 8 bytes of table header
|
||||||
# + 91*10=910 bytes of cells
|
# + 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.
|
# Keys are 1000 through 1090.
|
||||||
for {set i 1000} {$i<1091} {incr i} {
|
for {set i 1000} {$i<1091} {incr i} {
|
||||||
set key $i
|
set key $i
|
||||||
@ -535,28 +536,35 @@ do_test btree-7.2 {
|
|||||||
btree_insert $::c1 $key $data
|
btree_insert $::c1 $key $data
|
||||||
}
|
}
|
||||||
lrange [btree_cursor_info $::c1] 4 5
|
lrange [btree_cursor_info $::c1] 4 5
|
||||||
} {8 1}
|
} {6 0}
|
||||||
|
#btree_tree_dump $::b1 1
|
||||||
do_test btree-7.3 {
|
do_test btree-7.3 {
|
||||||
for {set i 1001} {$i<1091} {incr i 2} {
|
for {set i 1001} {$i<1091} {incr i 2} {
|
||||||
btree_move_to $::c1 $i
|
btree_move_to $::c1 $i
|
||||||
btree_delete $::c1
|
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
|
# Keys remaining are even numbers between 1000 and 1090, inclusive
|
||||||
lrange [btree_cursor_info $::c1] 4 5
|
lrange [btree_cursor_info $::c1] 4 5
|
||||||
} {458 46}
|
} {456 45}
|
||||||
#btree_tree_dump $::b1 1
|
#btree_tree_dump $::b1 1
|
||||||
do_test btree-7.4 {
|
do_test btree-7.4 {
|
||||||
# The largest free block is 10 bytes long. So if we insert
|
# The largest free block is 8 bytes long. But there is also a
|
||||||
# a record bigger than 10 bytes it should force a defrag
|
# huge hole between the cell pointer array and the cellcontent.
|
||||||
# The record is 20 bytes long.
|
# But if we insert a large enough record, it should force a defrag.
|
||||||
btree_insert $::c1 2000 {123456789_12345}
|
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_move_to $::c1 2000
|
||||||
btree_key $::c1
|
btree_key $::c1
|
||||||
} {2000}
|
} {2000}
|
||||||
do_test btree-7.5 {
|
do_test btree-7.5 {
|
||||||
lrange [btree_cursor_info $::c1] 4 5
|
lrange [btree_cursor_info $::c1] 4 5
|
||||||
} {438 1}
|
} {343 0}
|
||||||
#btree_tree_dump $::b1 1
|
#btree_tree_dump $::b1 1
|
||||||
|
|
||||||
# Delete an entry to make a hole of a known size, then immediately recreate
|
# 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 {
|
do_test btree-7.7 {
|
||||||
lrange [btree_cursor_info $::c1] 4 5
|
lrange [btree_cursor_info $::c1] 4 5
|
||||||
} {458 3} ;# Create two new holes of 10 bytes each
|
} {363 2} ;# Create two new holes of 10 bytes each
|
||||||
#btree_page_dump $::b1 2
|
#btree_page_dump $::b1 1
|
||||||
do_test btree-7.8 {
|
do_test btree-7.8 {
|
||||||
btree_insert $::c1 1006 { 1006}
|
btree_insert $::c1 1006 { 1006}
|
||||||
lrange [btree_cursor_info $::c1] 4 5
|
lrange [btree_cursor_info $::c1] 4 5
|
||||||
} {448 2} ;# Filled in the first hole
|
} {353 1} ;# Filled in the first hole
|
||||||
#btree_page_dump $::b1 2
|
btree_page_dump $::b1 1
|
||||||
|
|
||||||
# Make sure the freeSpace() routine properly coaleses adjacent memory blocks
|
# 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_move_to $::c1 1012
|
||||||
btree_delete $::c1
|
btree_delete $::c1
|
||||||
lrange [btree_cursor_info $::c1] 4 5
|
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 {
|
do_test btree-7.10 {
|
||||||
btree_move_to $::c1 1008
|
btree_move_to $::c1 1008
|
||||||
btree_delete $::c1
|
btree_delete $::c1
|
||||||
@ -613,6 +623,7 @@ do_test btree-7.14 {
|
|||||||
do_test btree-7.15 {
|
do_test btree-7.15 {
|
||||||
lindex [btree_pager_stats $::b1] 1
|
lindex [btree_pager_stats $::b1] 1
|
||||||
} {1}
|
} {1}
|
||||||
|
} ;# endif
|
||||||
|
|
||||||
# Check to see that data on overflow pages work correctly.
|
# 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 ::data}
|
||||||
catch {unset ::key}
|
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 {
|
do_test btree-11.1.$i.1 {
|
||||||
set key [format %03d $i]
|
set key [format %03d $i]
|
||||||
set ::data "*** $key *** $key *** $key *** $key ***"
|
set ::data "*** $key *** $key *** $key *** $key ***"
|
||||||
@ -918,20 +929,21 @@ do_test btree-11.3 {
|
|||||||
set ::c1 [btree_cursor $::b1 2 1]
|
set ::c1 [btree_cursor $::b1 2 1]
|
||||||
lindex [btree_pager_stats $::b1] 1
|
lindex [btree_pager_stats $::b1] 1
|
||||||
} {2}
|
} {2}
|
||||||
#btree_page_dump $::b1 2
|
|
||||||
|
|
||||||
# Delete the dividers on the root page
|
# Delete the dividers on the root page
|
||||||
#
|
#
|
||||||
|
#btree_page_dump $::b1 2
|
||||||
do_test btree-11.4 {
|
do_test btree-11.4 {
|
||||||
btree_move_to $::c1 551
|
btree_move_to $::c1 1667
|
||||||
btree_delete $::c1
|
btree_delete $::c1
|
||||||
btree_move_to $::c1 551
|
btree_move_to $::c1 1667
|
||||||
set k [btree_key $::c1]
|
set k [btree_key $::c1]
|
||||||
if {$k==550} {
|
if {$k==1666} {
|
||||||
set k [btree_next $::c1]
|
set k [btree_next $::c1]
|
||||||
}
|
}
|
||||||
btree_key $::c1
|
btree_key $::c1
|
||||||
} {552}
|
} {1668}
|
||||||
|
#btree_page_dump $::b1 2
|
||||||
|
|
||||||
# Change the data on an intermediate node such that the node becomes overfull
|
# 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
|
# and has to split. We happen to know that intermediate nodes exist on
|
||||||
|
Reference in New Issue
Block a user