/ Hex Artifact Content
Login

Artifact 934d0ad30b5b419e9291a11da878be349df2277e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 68  ******.** This h
0180: 65 61 64 65 72 20 66 69 6c 65 20 64 65 66 69 6e  eader file defin
0190: 65 73 20 74 68 65 20 69 6e 74 65 72 66 61 63 65  es the interface
01a0: 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65   that the sqlite
01b0: 20 42 2d 54 72 65 65 20 66 69 6c 65 0a 2a 2a 20   B-Tree file.** 
01c0: 73 75 62 73 79 73 74 65 6d 2e 20 20 53 65 65 20  subsystem.  See 
01d0: 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  comments in the 
01e0: 73 6f 75 72 63 65 20 63 6f 64 65 20 66 6f 72 20  source code for 
01f0: 61 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72  a detailed descr
0200: 69 70 74 69 6f 6e 0a 2a 2a 20 6f 66 20 77 68 61  iption.** of wha
0210: 74 20 65 61 63 68 20 69 6e 74 65 72 66 61 63 65  t each interface
0220: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 2e 0a 2a   routine does..*
0230: 2a 0a 2a 2a 20 40 28 23 29 20 24 49 64 3a 20 62  *.** @(#) $Id: b
0240: 74 72 65 65 2e 68 2c 76 20 31 2e 35 35 20 32 30  tree.h,v 1.55 20
0250: 30 34 2f 30 36 2f 32 36 20 30 38 3a 33 38 3a 32  04/06/26 08:38:2
0260: 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78  5 danielk1977 Ex
0270: 70 20 24 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 5f  p $.*/.#ifndef _
0280: 42 54 52 45 45 5f 48 5f 0a 23 64 65 66 69 6e 65  BTREE_H_.#define
0290: 20 5f 42 54 52 45 45 5f 48 5f 0a 0a 2f 2a 20 54   _BTREE_H_../* T
02a0: 4f 44 4f 3a 20 54 68 69 73 20 64 65 66 69 6e 69  ODO: This defini
02b0: 74 69 6f 6e 20 69 73 20 6a 75 73 74 20 69 6e 63  tion is just inc
02c0: 6c 75 64 65 64 20 73 6f 20 6f 74 68 65 72 20 6d  luded so other m
02d0: 6f 64 75 6c 65 73 20 63 6f 6d 70 69 6c 65 2e 20  odules compile. 
02e0: 49 74 0a 2a 2a 20 6e 65 65 64 73 20 74 6f 20 62  It.** needs to b
02f0: 65 20 72 65 76 69 73 69 74 65 64 2e 0a 2a 2f 0a  e revisited..*/.
0300: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
0310: 5f 42 54 52 45 45 5f 4d 45 54 41 20 31 30 0a 0a  _BTREE_META 10..
0320: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 64 65  /*.** Forward de
0330: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 66 20 73 74  clarations of st
0340: 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70 65 64  ructure.*/.typed
0350: 65 66 20 73 74 72 75 63 74 20 42 74 72 65 65 20  ef struct Btree 
0360: 42 74 72 65 65 3b 0a 74 79 70 65 64 65 66 20 73  Btree;.typedef s
0370: 74 72 75 63 74 20 42 74 43 75 72 73 6f 72 20 42  truct BtCursor B
0380: 74 43 75 72 73 6f 72 3b 0a 0a 0a 69 6e 74 20 73  tCursor;...int s
0390: 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
03a0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
03b0: 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 42 74 72  Filename, .  Btr
03c0: 65 65 20 2a 2a 2c 20 0a 20 20 69 6e 74 20 6e 43  ee **, .  int nC
03d0: 61 63 68 65 2c 20 0a 20 20 69 6e 74 20 66 6c 61  ache, .  int fla
03e0: 67 73 2c 0a 20 20 76 6f 69 64 20 2a 70 42 75 73  gs,.  void *pBus
03f0: 79 48 61 6e 64 6c 65 72 0a 29 3b 0a 0a 2f 2a 20  yHandler.);../* 
0400: 54 68 65 20 66 6c 61 67 73 20 70 61 72 61 6d 65  The flags parame
0410: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 42 74  ter to sqlite3Bt
0420: 72 65 65 4f 70 65 6e 20 63 61 6e 20 62 65 20 74  reeOpen can be t
0430: 68 65 20 62 69 74 77 69 73 65 20 6f 72 20 6f 66  he bitwise or of
0440: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
0450: 67 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 23 64 65  g values..*/.#de
0460: 66 69 6e 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f  fine BTREE_OMIT_
0470: 4a 4f 55 52 4e 41 4c 20 20 31 20 20 2f 2a 20 44  JOURNAL  1  /* D
0480: 6f 20 6e 6f 74 20 75 73 65 20 6a 6f 75 72 6e 61  o not use journa
0490: 6c 2e 20 20 4e 6f 20 61 72 67 75 6d 65 6e 74 20  l.  No argument 
04a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 42 54 52 45 45  */.#define BTREE
04b0: 5f 4d 45 4d 4f 52 59 20 20 20 20 20 20 20 20 32  _MEMORY        2
04c0: 20 20 2f 2a 20 49 6e 2d 6d 65 6d 6f 72 79 20 44    /* In-memory D
04d0: 42 2e 20 20 4e 6f 20 61 72 67 75 6d 65 6e 74 20  B.  No argument 
04e0: 2a 2f 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  */..int sqlite3B
04f0: 74 72 65 65 43 6c 6f 73 65 28 42 74 72 65 65 2a  treeClose(Btree*
0500: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  );.int sqlite3Bt
0510: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
0520: 42 74 72 65 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Btree*,int);.int
0530: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
0540: 53 61 66 65 74 79 4c 65 76 65 6c 28 42 74 72 65  SafetyLevel(Btre
0550: 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
0560: 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
0570: 61 6e 73 28 42 74 72 65 65 2a 2c 69 6e 74 29 3b  ans(Btree*,int);
0580: 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65  .int sqlite3Btre
0590: 65 43 6f 6d 6d 69 74 28 42 74 72 65 65 2a 29 3b  eCommit(Btree*);
05a0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65  .int sqlite3Btre
05b0: 65 52 6f 6c 6c 62 61 63 6b 28 42 74 72 65 65 2a  eRollback(Btree*
05c0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  );.int sqlite3Bt
05d0: 72 65 65 42 65 67 69 6e 53 74 6d 74 28 42 74 72  reeBeginStmt(Btr
05e0: 65 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ee*);.int sqlite
05f0: 33 42 74 72 65 65 43 6f 6d 6d 69 74 53 74 6d 74  3BtreeCommitStmt
0600: 28 42 74 72 65 65 2a 29 3b 0a 69 6e 74 20 73 71  (Btree*);.int sq
0610: 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61  lite3BtreeRollba
0620: 63 6b 53 74 6d 74 28 42 74 72 65 65 2a 29 3b 0a  ckStmt(Btree*);.
0630: 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65  int sqlite3Btree
0640: 43 72 65 61 74 65 54 61 62 6c 65 28 42 74 72 65  CreateTable(Btre
0650: 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 20 66 6c  e*, int*, int fl
0660: 61 67 73 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ags);.int sqlite
0670: 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
0680: 42 74 72 65 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Btree*);.int sql
0690: 69 74 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d  ite3BtreeIsInStm
06a0: 74 28 42 74 72 65 65 2a 29 3b 0a 69 6e 74 20 73  t(Btree*);.int s
06b0: 71 6c 69 74 65 33 42 74 72 65 65 53 79 6e 63 28  qlite3BtreeSync(
06c0: 42 74 72 65 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Btree*, const ch
06d0: 61 72 20 2a 7a 4d 61 73 74 65 72 29 3b 0a 0a 63  ar *zMaster);..c
06e0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
06f0: 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61  e3BtreeGetFilena
0700: 6d 65 28 42 74 72 65 65 20 2a 29 3b 0a 63 6f 6e  me(Btree *);.con
0710: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
0720: 42 74 72 65 65 47 65 74 44 69 72 6e 61 6d 65 28  BtreeGetDirname(
0730: 42 74 72 65 65 20 2a 29 3b 0a 63 6f 6e 73 74 20  Btree *);.const 
0740: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 42 74 72  char *sqlite3Btr
0750: 65 65 47 65 74 4a 6f 75 72 6e 61 6c 6e 61 6d 65  eeGetJournalname
0760: 28 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73  (Btree *);.int s
0770: 71 6c 69 74 65 33 42 74 72 65 65 43 6f 70 79 46  qlite3BtreeCopyF
0780: 69 6c 65 28 42 74 72 65 65 20 2a 2c 20 42 74 72  ile(Btree *, Btr
0790: 65 65 20 2a 29 3b 0a 0a 2f 2a 20 54 68 65 20 66  ee *);../* The f
07a0: 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 74  lags parameter t
07b0: 6f 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  o sqlite3BtreeCr
07c0: 65 61 74 65 54 61 62 6c 65 20 63 61 6e 20 62 65  eateTable can be
07d0: 20 74 68 65 20 62 69 74 77 69 73 65 20 4f 52 0a   the bitwise OR.
07e0: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
07f0: 69 6e 67 20 66 6c 61 67 73 3a 0a 2a 2f 0a 23 64  ing flags:.*/.#d
0800: 65 66 69 6e 65 20 42 54 52 45 45 5f 49 4e 54 4b  efine BTREE_INTK
0810: 45 59 20 20 20 20 20 31 20 20 20 20 2f 2a 20 54  EY     1    /* T
0820: 61 62 6c 65 20 68 61 73 20 6f 6e 6c 79 20 36 34  able has only 64
0830: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
0840: 67 65 72 20 6b 65 79 73 20 2a 2f 0a 23 64 65 66  ger keys */.#def
0850: 69 6e 65 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  ine BTREE_ZERODA
0860: 54 41 20 20 20 32 20 20 20 20 2f 2a 20 54 61 62  TA   2    /* Tab
0870: 6c 65 20 68 61 73 20 6b 65 79 73 20 6f 6e 6c 79  le has keys only
0880: 20 2d 20 6e 6f 20 64 61 74 61 20 2a 2f 0a 23 64   - no data */.#d
0890: 65 66 69 6e 65 20 42 54 52 45 45 5f 4c 45 41 46  efine BTREE_LEAF
08a0: 44 41 54 41 20 20 20 34 20 20 20 20 2f 2a 20 44  DATA   4    /* D
08b0: 61 74 61 20 73 74 6f 72 65 64 20 69 6e 20 6c 65  ata stored in le
08c0: 61 76 65 73 20 6f 6e 6c 79 2e 20 20 49 6d 70 6c  aves only.  Impl
08d0: 69 65 73 20 49 4e 54 4b 45 59 20 2a 2f 0a 0a 69  ies INTKEY */..i
08e0: 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  nt sqlite3BtreeD
08f0: 72 6f 70 54 61 62 6c 65 28 42 74 72 65 65 2a 2c  ropTable(Btree*,
0900: 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
0910: 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
0920: 65 28 42 74 72 65 65 2a 2c 20 69 6e 74 29 3b 0a  e(Btree*, int);.
0930: 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65  int sqlite3Btree
0940: 47 65 74 4d 65 74 61 28 42 74 72 65 65 2a 2c 20  GetMeta(Btree*, 
0950: 69 6e 74 20 69 64 78 2c 20 75 33 32 20 2a 70 56  int idx, u32 *pV
0960: 61 6c 75 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74  alue);.int sqlit
0970: 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
0980: 61 28 42 74 72 65 65 2a 2c 20 69 6e 74 20 69 64  a(Btree*, int id
0990: 78 2c 20 75 33 32 20 76 61 6c 75 65 29 3b 0a 0a  x, u32 value);..
09a0: 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65  int sqlite3Btree
09b0: 43 75 72 73 6f 72 28 0a 20 20 42 74 72 65 65 2a  Cursor(.  Btree*
09c0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
09e0: 2a 20 42 54 72 65 65 20 63 6f 6e 74 61 69 6e 69  * BTree containi
09f0: 6e 67 20 74 61 62 6c 65 20 74 6f 20 6f 70 65 6e  ng table to open
0a00: 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62 6c 65   */.  int iTable
0a10: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
0a30: 64 65 78 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  dex of root page
0a40: 20 2a 2f 0a 20 20 69 6e 74 20 77 72 46 6c 61 67   */.  int wrFlag
0a50: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20             /* 1 
0a70: 66 6f 72 20 77 72 69 74 69 6e 67 2e 20 20 30 20  for writing.  0 
0a80: 66 6f 72 20 72 65 61 64 2d 6f 6e 6c 79 20 2a 2f  for read-only */
0a90: 0a 20 20 69 6e 74 28 2a 29 28 76 6f 69 64 2a 2c  .  int(*)(void*,
0aa0: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  int,const void*,
0ab0: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  int,const void*)
0ac0: 2c 20 20 2f 2a 20 4b 65 79 20 63 6f 6d 70 61 72  ,  /* Key compar
0ad0: 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ison function */
0ae0: 0a 20 20 76 6f 69 64 2a 2c 20 20 20 20 20 20 20  .  void*,       
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b00: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
0b10: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 63 6f 6d   argument to com
0b20: 70 61 72 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  pare function */
0b30: 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 2a 70 70  .  BtCursor **pp
0b40: 43 75 72 73 6f 72 20 20 20 20 20 20 20 20 20 20  Cursor          
0b50: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
0b60: 6e 65 64 20 63 75 72 73 6f 72 20 2a 2f 0a 29 3b  ned cursor */.);
0b70: 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 74  ..void sqlite3Bt
0b80: 72 65 65 53 65 74 43 6f 6d 70 61 72 65 28 0a 20  reeSetCompare(. 
0b90: 20 42 74 43 75 72 73 6f 72 20 2a 2c 0a 20 20 69   BtCursor *,.  i
0ba0: 6e 74 28 2a 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  nt(*)(void*,int,
0bb0: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c  const void*,int,
0bc0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 2c 0a 20 20  const void*),.  
0bd0: 76 6f 69 64 2a 0a 29 3b 0a 0a 69 6e 74 20 73 71  void*.);..int sq
0be0: 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 43  lite3BtreeCloseC
0bf0: 75 72 73 6f 72 28 42 74 43 75 72 73 6f 72 2a 29  ursor(BtCursor*)
0c00: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72  ;.int sqlite3Btr
0c10: 65 65 4d 6f 76 65 74 6f 28 42 74 43 75 72 73 6f  eeMoveto(BtCurso
0c20: 72 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  r*, const void *
0c30: 70 4b 65 79 2c 20 69 36 34 20 6e 4b 65 79 2c 20  pKey, i64 nKey, 
0c40: 69 6e 74 20 2a 70 52 65 73 29 3b 0a 69 6e 74 20  int *pRes);.int 
0c50: 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
0c60: 74 65 28 42 74 43 75 72 73 6f 72 2a 29 3b 0a 69  te(BtCursor*);.i
0c70: 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  nt sqlite3BtreeI
0c80: 6e 73 65 72 74 28 42 74 43 75 72 73 6f 72 2a 2c  nsert(BtCursor*,
0c90: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65   const void *pKe
0ca0: 79 2c 20 69 36 34 20 6e 4b 65 79 2c 0a 20 20 20  y, i64 nKey,.   
0cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
0cd0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
0ce0: 2c 20 69 6e 74 20 6e 44 61 74 61 29 3b 0a 69 6e  , int nData);.in
0cf0: 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  t sqlite3BtreeFi
0d00: 72 73 74 28 42 74 43 75 72 73 6f 72 2a 2c 20 69  rst(BtCursor*, i
0d10: 6e 74 20 2a 70 52 65 73 29 3b 0a 69 6e 74 20 73  nt *pRes);.int s
0d20: 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
0d30: 42 74 43 75 72 73 6f 72 2a 2c 20 69 6e 74 20 2a  BtCursor*, int *
0d40: 70 52 65 73 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pRes);.int sqlit
0d50: 65 33 42 74 72 65 65 4e 65 78 74 28 42 74 43 75  e3BtreeNext(BtCu
0d60: 72 73 6f 72 2a 2c 20 69 6e 74 20 2a 70 52 65 73  rsor*, int *pRes
0d70: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  );.int sqlite3Bt
0d80: 72 65 65 45 6f 66 28 42 74 43 75 72 73 6f 72 2a  reeEof(BtCursor*
0d90: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  );.int sqlite3Bt
0da0: 72 65 65 46 6c 61 67 73 28 42 74 43 75 72 73 6f  reeFlags(BtCurso
0db0: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
0dc0: 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 42 74  BtreePrevious(Bt
0dd0: 43 75 72 73 6f 72 2a 2c 20 69 6e 74 20 2a 70 52  Cursor*, int *pR
0de0: 65 73 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  es);.int sqlite3
0df0: 42 74 72 65 65 4b 65 79 53 69 7a 65 28 42 74 43  BtreeKeySize(BtC
0e00: 75 72 73 6f 72 2a 2c 20 69 36 34 20 2a 70 53 69  ursor*, i64 *pSi
0e10: 7a 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ze);.int sqlite3
0e20: 42 74 72 65 65 4b 65 79 28 42 74 43 75 72 73 6f  BtreeKey(BtCurso
0e30: 72 2a 2c 20 75 33 32 20 6f 66 66 73 65 74 2c 20  r*, u32 offset, 
0e40: 75 33 32 20 61 6d 74 2c 20 76 6f 69 64 2a 29 3b  u32 amt, void*);
0e50: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
0e60: 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63  ite3BtreeKeyFetc
0e70: 68 28 42 74 43 75 72 73 6f 72 2a 2c 20 69 6e 74  h(BtCursor*, int
0e80: 20 2a 70 41 6d 74 29 3b 0a 63 6f 6e 73 74 20 76   *pAmt);.const v
0e90: 6f 69 64 20 2a 73 71 6c 69 74 65 33 42 74 72 65  oid *sqlite3Btre
0ea0: 65 44 61 74 61 46 65 74 63 68 28 42 74 43 75 72  eDataFetch(BtCur
0eb0: 73 6f 72 2a 2c 20 69 6e 74 20 2a 70 41 6d 74 29  sor*, int *pAmt)
0ec0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72  ;.int sqlite3Btr
0ed0: 65 65 44 61 74 61 53 69 7a 65 28 42 74 43 75 72  eeDataSize(BtCur
0ee0: 73 6f 72 2a 2c 20 75 33 32 20 2a 70 53 69 7a 65  sor*, u32 *pSize
0ef0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  );.int sqlite3Bt
0f00: 72 65 65 44 61 74 61 28 42 74 43 75 72 73 6f 72  reeData(BtCursor
0f10: 2a 2c 20 75 33 32 20 6f 66 66 73 65 74 2c 20 75  *, u32 offset, u
0f20: 33 32 20 61 6d 74 2c 20 76 6f 69 64 2a 29 3b 0a  32 amt, void*);.
0f30: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 42 74  .char *sqlite3Bt
0f40: 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
0f50: 6b 28 42 74 72 65 65 2a 2c 20 69 6e 74 20 2a 61  k(Btree*, int *a
0f60: 52 6f 6f 74 2c 20 69 6e 74 20 6e 52 6f 6f 74 29  Root, int nRoot)
0f70: 3b 0a 73 74 72 75 63 74 20 50 61 67 65 72 20 2a  ;.struct Pager *
0f80: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
0f90: 72 28 42 74 72 65 65 2a 29 3b 0a 0a 0a 23 69 66  r(Btree*);...#if
0fa0: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0fb0: 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65  int sqlite3Btree
0fc0: 43 75 72 73 6f 72 49 6e 66 6f 28 42 74 43 75 72  CursorInfo(BtCur
0fd0: 73 6f 72 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  sor*, int*);.voi
0fe0: 64 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  d sqlite3BtreeCu
0ff0: 72 73 6f 72 4c 69 73 74 28 42 74 72 65 65 2a 29  rsorList(Btree*)
1000: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72  ;.int sqlite3Btr
1010: 65 65 50 61 67 65 44 75 6d 70 28 42 74 72 65 65  eePageDump(Btree
1020: 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 72 65 63 75  *, int, int recu
1030: 72 73 69 76 65 29 3b 0a 23 65 6e 64 69 66 0a 0a  rsive);.#endif..
1040: 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 42 54 52 45  .#endif /* _BTRE
1050: 45 5f 48 5f 20 2a 2f 0a                          E_H_ */.