/ Hex Artifact Content
Login

Artifact 2e6d42f4ae004ae748a037b8468112b851c447a7:


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 70 61 67 65 20 63 61 63 68 65 0a 2a 2a 20 73   page cache.** s
01c0: 75 62 73 79 73 74 65 6d 2e 20 20 54 68 65 20 70  ubsystem.  The p
01d0: 61 67 65 20 63 61 63 68 65 20 73 75 62 73 79 73  age cache subsys
01e0: 74 65 6d 20 72 65 61 64 73 20 61 6e 64 20 77 72  tem reads and wr
01f0: 69 74 65 73 20 61 20 66 69 6c 65 20 61 20 70 61  ites a file a pa
0200: 67 65 0a 2a 2a 20 61 74 20 61 20 74 69 6d 65 20  ge.** at a time 
0210: 61 6e 64 20 70 72 6f 76 69 64 65 73 20 61 20 6a  and provides a j
0220: 6f 75 72 6e 61 6c 20 66 6f 72 20 72 6f 6c 6c 62  ournal for rollb
0230: 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 40 28 23 29 20  ack..**.** @(#) 
0240: 24 49 64 3a 20 70 61 67 65 72 2e 68 2c 76 20 31  $Id: pager.h,v 1
0250: 2e 35 32 20 32 30 30 36 2f 31 31 2f 30 36 20 32  .52 2006/11/06 2
0260: 31 3a 32 30 3a 32 36 20 64 72 68 20 45 78 70 20  1:20:26 drh Exp 
0270: 24 0a 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 5f 50  $.*/..#ifndef _P
0280: 41 47 45 52 5f 48 5f 0a 23 64 65 66 69 6e 65 20  AGER_H_.#define 
0290: 5f 50 41 47 45 52 5f 48 5f 0a 0a 2f 2a 0a 2a 2a  _PAGER_H_../*.**
02a0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 73 69 7a   The default siz
02b0: 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  e of a database 
02c0: 70 61 67 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  page..*/.#ifndef
02d0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
02e0: 50 41 47 45 5f 53 49 5a 45 0a 23 20 64 65 66 69  PAGE_SIZE.# defi
02f0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
0300: 54 5f 50 41 47 45 5f 53 49 5a 45 20 31 30 32 34  T_PAGE_SIZE 1024
0310: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4d 61 78 69  .#endif../* Maxi
0320: 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 2e 20 20  mum page size.  
0330: 54 68 65 20 75 70 70 65 72 20 62 6f 75 6e 64 20  The upper bound 
0340: 6f 6e 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  on this value is
0350: 20 33 32 37 36 38 2e 20 20 54 68 69 73 20 61 20   32768.  This a 
0360: 6c 69 6d 69 74 0a 2a 2a 20 69 6d 70 6f 73 65 64  limit.** imposed
0370: 20 62 79 20 6e 65 63 65 73 73 69 74 79 20 6f 66   by necessity of
0380: 20 73 74 6f 72 69 6e 67 20 74 68 65 20 76 61 6c   storing the val
0390: 75 65 20 69 6e 20 61 20 32 2d 62 79 74 65 20 75  ue in a 2-byte u
03a0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 0a  nsigned integer.
03b0: 2a 2a 20 61 6e 64 20 74 68 65 20 66 61 63 74 20  ** and the fact 
03c0: 74 68 61 74 20 74 68 65 20 70 61 67 65 20 73 69  that the page si
03d0: 7a 65 20 6d 75 73 74 20 62 65 20 61 20 70 6f 77  ze must be a pow
03e0: 65 72 20 6f 66 20 32 2e 0a 2a 2a 0a 2a 2a 20 54  er of 2..**.** T
03f0: 68 69 73 20 76 61 6c 75 65 20 69 73 20 75 73 65  his value is use
0400: 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  d to initialize 
0410: 63 65 72 74 61 69 6e 20 61 72 72 61 79 73 20 6f  certain arrays o
0420: 6e 20 74 68 65 20 73 74 61 63 6b 20 61 74 0a 2a  n the stack at.*
0430: 2a 20 76 61 72 69 6f 75 73 20 70 6c 61 63 65 73  * various places
0440: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 4f   in the code.  O
0450: 6e 20 65 6d 62 65 64 64 65 64 20 6d 61 63 68 69  n embedded machi
0460: 6e 65 73 20 77 68 65 72 65 20 73 74 61 63 6b 20  nes where stack 
0470: 73 70 61 63 65 0a 2a 2a 20 69 73 20 6c 69 6d 69  space.** is limi
0480: 74 65 64 20 61 6e 64 20 74 68 65 20 66 6c 65 78  ted and the flex
0490: 69 62 69 6c 69 74 79 20 6f 66 20 68 61 76 69 6e  ibility of havin
04a0: 67 20 6c 61 72 67 65 20 70 61 67 65 73 20 69 73  g large pages is
04b0: 20 6e 6f 74 20 6e 65 65 64 65 64 2c 0a 2a 2a 20   not needed,.** 
04c0: 69 74 20 6d 61 6b 65 73 20 67 6f 6f 64 20 73 65  it makes good se
04d0: 6e 73 65 20 74 6f 20 72 65 64 75 63 65 20 74 68  nse to reduce th
04e0: 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  e maximum page s
04f0: 69 7a 65 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  ize to something
0500: 20 6d 6f 72 65 0a 2a 2a 20 72 65 61 73 6f 6e 61   more.** reasona
0510: 62 6c 65 2c 20 6c 69 6b 65 20 31 30 32 34 2e 0a  ble, like 1024..
0520: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
0530: 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 0a  E_MAX_PAGE_SIZE.
0540: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
0550: 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 20 33 32  MAX_PAGE_SIZE 32
0560: 37 36 38 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  768.#endif../*.*
0570: 2a 20 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  * Maximum number
0580: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 6f 6e 65   of pages in one
0590: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
05a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
05b0: 5f 50 41 47 45 20 31 30 37 33 37 34 31 38 32 33  _PAGE 1073741823
05c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 79 70 65  ../*.** The type
05d0: 20 75 73 65 64 20 74 6f 20 72 65 70 72 65 73 65   used to represe
05e0: 6e 74 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72  nt a page number
05f0: 2e 20 20 54 68 65 20 66 69 72 73 74 20 70 61 67  .  The first pag
0600: 65 20 69 6e 20 61 20 66 69 6c 65 0a 2a 2a 20 69  e in a file.** i
0610: 73 20 63 61 6c 6c 65 64 20 70 61 67 65 20 31 2e  s called page 1.
0620: 20 20 30 20 69 73 20 75 73 65 64 20 74 6f 20 72    0 is used to r
0630: 65 70 72 65 73 65 6e 74 20 22 6e 6f 74 20 61 20  epresent "not a 
0640: 70 61 67 65 22 2e 0a 2a 2f 0a 74 79 70 65 64 65  page"..*/.typede
0650: 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 50  f unsigned int P
0660: 67 6e 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  gno;../*.** Each
0670: 20 6f 70 65 6e 20 66 69 6c 65 20 69 73 20 6d 61   open file is ma
0680: 6e 61 67 65 64 20 62 79 20 61 20 73 65 70 61 72  naged by a separ
0690: 61 74 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  ate instance of 
06a0: 74 68 65 20 22 50 61 67 65 72 22 20 73 74 72 75  the "Pager" stru
06b0: 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 64 65  cture..*/.typede
06c0: 66 20 73 74 72 75 63 74 20 50 61 67 65 72 20 50  f struct Pager P
06d0: 61 67 65 72 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ager;../*.** All
06e0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
06f0: 74 68 65 20 66 6c 61 67 73 20 70 61 72 61 6d 65  the flags parame
0700: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 70 61  ter to sqlite3pa
0710: 67 65 72 5f 6f 70 65 6e 28 29 2e 0a 2a 2a 0a 2a  ger_open()..**.*
0720: 2a 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c  * NOTE: This val
0730: 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74  ues must match t
0740: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
0750: 20 42 54 52 45 45 5f 20 76 61 6c 75 65 73 20 69   BTREE_ values i
0760: 6e 20 62 74 72 65 65 2e 68 2e 0a 2a 2f 0a 23 64  n btree.h..*/.#d
0770: 65 66 69 6e 65 20 50 41 47 45 52 5f 4f 4d 49 54  efine PAGER_OMIT
0780: 5f 4a 4f 55 52 4e 41 4c 20 20 30 78 30 30 30 31  _JOURNAL  0x0001
0790: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73      /* Do not us
07a0: 65 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  e a rollback jou
07b0: 72 6e 61 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rnal */.#define 
07c0: 50 41 47 45 52 5f 4e 4f 5f 52 45 41 44 4c 4f 43  PAGER_NO_READLOC
07d0: 4b 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  K   0x0002    /*
07e0: 20 4f 6d 69 74 20 72 65 61 64 6c 6f 63 6b 73 20   Omit readlocks 
07f0: 6f 6e 20 72 65 61 64 6f 6e 6c 79 20 66 69 6c 65  on readonly file
0800: 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 65  s */.../*.** See
0810: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63 6f 6d   source code com
0820: 6d 65 6e 74 73 20 66 6f 72 20 61 20 64 65 74 61  ments for a deta
0830: 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
0840: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
0850: 67 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 3a 0a 2a  g.** routines:.*
0860: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 70 61 67  /.int sqlite3pag
0870: 65 72 5f 6f 70 65 6e 28 50 61 67 65 72 20 2a 2a  er_open(Pager **
0880: 70 70 50 61 67 65 72 2c 20 63 6f 6e 73 74 20 63  ppPager, const c
0890: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 0a  har *zFilename,.
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08b0: 20 20 20 20 20 69 6e 74 20 6e 45 78 74 72 61 2c       int nExtra,
08c0: 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a 76 6f 69   int flags);.voi
08d0: 64 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 73  d sqlite3pager_s
08e0: 65 74 5f 62 75 73 79 68 61 6e 64 6c 65 72 28 50  et_busyhandler(P
08f0: 61 67 65 72 2a 2c 20 42 75 73 79 48 61 6e 64 6c  ager*, BusyHandl
0900: 65 72 20 2a 70 42 75 73 79 48 61 6e 64 6c 65 72  er *pBusyHandler
0910: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 70  );.void sqlite3p
0920: 61 67 65 72 5f 73 65 74 5f 64 65 73 74 72 75 63  ager_set_destruc
0930: 74 6f 72 28 50 61 67 65 72 2a 2c 20 76 6f 69 64  tor(Pager*, void
0940: 28 2a 29 28 76 6f 69 64 2a 2c 69 6e 74 29 29 3b  (*)(void*,int));
0950: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 70 61 67  .void sqlite3pag
0960: 65 72 5f 73 65 74 5f 72 65 69 6e 69 74 65 72 28  er_set_reiniter(
0970: 50 61 67 65 72 2a 2c 20 76 6f 69 64 28 2a 29 28  Pager*, void(*)(
0980: 76 6f 69 64 2a 2c 69 6e 74 29 29 3b 0a 69 6e 74  void*,int));.int
0990: 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 73 65   sqlite3pager_se
09a0: 74 5f 70 61 67 65 73 69 7a 65 28 50 61 67 65 72  t_pagesize(Pager
09b0: 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
09c0: 69 74 65 33 70 61 67 65 72 5f 72 65 61 64 5f 66  ite3pager_read_f
09d0: 69 6c 65 68 65 61 64 65 72 28 50 61 67 65 72 2a  ileheader(Pager*
09e0: 2c 20 69 6e 74 2c 20 75 6e 73 69 67 6e 65 64 20  , int, unsigned 
09f0: 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
0a00: 69 74 65 33 70 61 67 65 72 5f 73 65 74 5f 63 61  ite3pager_set_ca
0a10: 63 68 65 73 69 7a 65 28 50 61 67 65 72 2a 2c 20  chesize(Pager*, 
0a20: 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
0a30: 33 70 61 67 65 72 5f 63 6c 6f 73 65 28 50 61 67  3pager_close(Pag
0a40: 65 72 20 2a 70 50 61 67 65 72 29 3b 0a 69 6e 74  er *pPager);.int
0a50: 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 67 65   sqlite3pager_ge
0a60: 74 28 50 61 67 65 72 20 2a 70 50 61 67 65 72 2c  t(Pager *pPager,
0a70: 20 50 67 6e 6f 20 70 67 6e 6f 2c 20 76 6f 69 64   Pgno pgno, void
0a80: 20 2a 2a 70 70 50 61 67 65 29 3b 0a 76 6f 69 64   **ppPage);.void
0a90: 20 2a 73 71 6c 69 74 65 33 70 61 67 65 72 5f 6c   *sqlite3pager_l
0aa0: 6f 6f 6b 75 70 28 50 61 67 65 72 20 2a 70 50 61  ookup(Pager *pPa
0ab0: 67 65 72 2c 20 50 67 6e 6f 20 70 67 6e 6f 29 3b  ger, Pgno pgno);
0ac0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 70 61 67 65  .int sqlite3page
0ad0: 72 5f 72 65 66 28 76 6f 69 64 2a 29 3b 0a 69 6e  r_ref(void*);.in
0ae0: 74 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 75  t sqlite3pager_u
0af0: 6e 72 65 66 28 76 6f 69 64 2a 29 3b 0a 50 67 6e  nref(void*);.Pgn
0b00: 6f 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 70  o sqlite3pager_p
0b10: 61 67 65 6e 75 6d 62 65 72 28 76 6f 69 64 2a 29  agenumber(void*)
0b20: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 70 61 67  ;.int sqlite3pag
0b30: 65 72 5f 77 72 69 74 65 28 76 6f 69 64 2a 29 3b  er_write(void*);
0b40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 70 61 67 65  .int sqlite3page
0b50: 72 5f 69 73 77 72 69 74 65 61 62 6c 65 28 76 6f  r_iswriteable(vo
0b60: 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
0b70: 33 70 61 67 65 72 5f 6f 76 65 72 77 72 69 74 65  3pager_overwrite
0b80: 28 50 61 67 65 72 20 2a 70 50 61 67 65 72 2c 20  (Pager *pPager, 
0b90: 50 67 6e 6f 20 70 67 6e 6f 2c 20 76 6f 69 64 2a  Pgno pgno, void*
0ba0: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 70 61  );.int sqlite3pa
0bb0: 67 65 72 5f 70 61 67 65 63 6f 75 6e 74 28 50 61  ger_pagecount(Pa
0bc0: 67 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ger*);.int sqlit
0bd0: 65 33 70 61 67 65 72 5f 74 72 75 6e 63 61 74 65  e3pager_truncate
0be0: 28 50 61 67 65 72 2a 2c 50 67 6e 6f 29 3b 0a 69  (Pager*,Pgno);.i
0bf0: 6e 74 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f  nt sqlite3pager_
0c00: 62 65 67 69 6e 28 76 6f 69 64 2a 2c 20 69 6e 74  begin(void*, int
0c10: 20 65 78 46 6c 61 67 29 3b 0a 69 6e 74 20 73 71   exFlag);.int sq
0c20: 6c 69 74 65 33 70 61 67 65 72 5f 63 6f 6d 6d 69  lite3pager_commi
0c30: 74 28 50 61 67 65 72 2a 29 3b 0a 69 6e 74 20 73  t(Pager*);.int s
0c40: 71 6c 69 74 65 33 70 61 67 65 72 5f 73 79 6e 63  qlite3pager_sync
0c50: 28 50 61 67 65 72 2a 2c 63 6f 6e 73 74 20 63 68  (Pager*,const ch
0c60: 61 72 20 2a 7a 4d 61 73 74 65 72 2c 20 50 67 6e  ar *zMaster, Pgn
0c70: 6f 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 70  o);.int sqlite3p
0c80: 61 67 65 72 5f 72 6f 6c 6c 62 61 63 6b 28 50 61  ager_rollback(Pa
0c90: 67 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ger*);.int sqlit
0ca0: 65 33 70 61 67 65 72 5f 69 73 72 65 61 64 6f 6e  e3pager_isreadon
0cb0: 6c 79 28 50 61 67 65 72 2a 29 3b 0a 69 6e 74 20  ly(Pager*);.int 
0cc0: 73 71 6c 69 74 65 33 70 61 67 65 72 5f 73 74 6d  sqlite3pager_stm
0cd0: 74 5f 62 65 67 69 6e 28 50 61 67 65 72 2a 29 3b  t_begin(Pager*);
0ce0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 70 61 67 65  .int sqlite3page
0cf0: 72 5f 73 74 6d 74 5f 63 6f 6d 6d 69 74 28 50 61  r_stmt_commit(Pa
0d00: 67 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ger*);.int sqlit
0d10: 65 33 70 61 67 65 72 5f 73 74 6d 74 5f 72 6f 6c  e3pager_stmt_rol
0d20: 6c 62 61 63 6b 28 50 61 67 65 72 2a 29 3b 0a 76  lback(Pager*);.v
0d30: 6f 69 64 20 73 71 6c 69 74 65 33 70 61 67 65 72  oid sqlite3pager
0d40: 5f 64 6f 6e 74 5f 72 6f 6c 6c 62 61 63 6b 28 76  _dont_rollback(v
0d50: 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
0d60: 74 65 33 70 61 67 65 72 5f 64 6f 6e 74 5f 77 72  te3pager_dont_wr
0d70: 69 74 65 28 50 61 67 65 72 2a 2c 20 50 67 6e 6f  ite(Pager*, Pgno
0d80: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 70 61  );.int sqlite3pa
0d90: 67 65 72 5f 72 65 66 63 6f 75 6e 74 28 50 61 67  ger_refcount(Pag
0da0: 65 72 2a 29 3b 0a 69 6e 74 20 2a 73 71 6c 69 74  er*);.int *sqlit
0db0: 65 33 70 61 67 65 72 5f 73 74 61 74 73 28 50 61  e3pager_stats(Pa
0dc0: 67 65 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ger*);.void sqli
0dd0: 74 65 33 70 61 67 65 72 5f 73 65 74 5f 73 61 66  te3pager_set_saf
0de0: 65 74 79 5f 6c 65 76 65 6c 28 50 61 67 65 72 2a  ety_level(Pager*
0df0: 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74  ,int,int);.const
0e00: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 70 61   char *sqlite3pa
0e10: 67 65 72 5f 66 69 6c 65 6e 61 6d 65 28 50 61 67  ger_filename(Pag
0e20: 65 72 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  er*);.const char
0e30: 20 2a 73 71 6c 69 74 65 33 70 61 67 65 72 5f 64   *sqlite3pager_d
0e40: 69 72 6e 61 6d 65 28 50 61 67 65 72 2a 29 3b 0a  irname(Pager*);.
0e50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
0e60: 74 65 33 70 61 67 65 72 5f 6a 6f 75 72 6e 61 6c  te3pager_journal
0e70: 6e 61 6d 65 28 50 61 67 65 72 2a 29 3b 0a 69 6e  name(Pager*);.in
0e80: 74 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 6e  t sqlite3pager_n
0e90: 6f 73 79 6e 63 28 50 61 67 65 72 2a 29 3b 0a 69  osync(Pager*);.i
0ea0: 6e 74 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f  nt sqlite3pager_
0eb0: 72 65 6e 61 6d 65 28 50 61 67 65 72 2a 2c 20 63  rename(Pager*, c
0ec0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 4e  onst char *zNewN
0ed0: 61 6d 65 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ame);.void sqlit
0ee0: 65 33 70 61 67 65 72 5f 73 65 74 5f 63 6f 64 65  e3pager_set_code
0ef0: 63 28 50 61 67 65 72 2a 2c 76 6f 69 64 2a 28 2a  c(Pager*,void*(*
0f00: 29 28 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 50 67  )(void*,void*,Pg
0f10: 6e 6f 2c 69 6e 74 29 2c 76 6f 69 64 2a 29 3b 0a  no,int),void*);.
0f20: 69 6e 74 20 73 71 6c 69 74 65 33 70 61 67 65 72  int sqlite3pager
0f30: 5f 6d 6f 76 65 70 61 67 65 28 50 61 67 65 72 2a  _movepage(Pager*
0f40: 2c 76 6f 69 64 2a 2c 50 67 6e 6f 29 3b 0a 69 6e  ,void*,Pgno);.in
0f50: 74 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 72  t sqlite3pager_r
0f60: 65 73 65 74 28 50 61 67 65 72 2a 29 3b 0a 69 6e  eset(Pager*);.in
0f70: 74 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 72  t sqlite3pager_r
0f80: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 69 6e  elease_memory(in
0f90: 74 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  t);..#if defined
0fa0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
0fb0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
0fc0: 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
0fd0: 65 33 70 61 67 65 72 5f 6c 6f 63 6b 73 74 61 74  e3pager_lockstat
0fe0: 65 28 50 61 67 65 72 2a 29 3b 0a 23 65 6e 64 69  e(Pager*);.#endi
0ff0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1000: 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74  _TEST.void sqlit
1010: 65 33 70 61 67 65 72 5f 72 65 66 64 75 6d 70 28  e3pager_refdump(
1020: 50 61 67 65 72 2a 29 3b 0a 69 6e 74 20 70 61 67  Pager*);.int pag
1030: 65 72 33 5f 72 65 66 69 6e 66 6f 5f 65 6e 61 62  er3_refinfo_enab
1040: 6c 65 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64  le;.#endif..#end
1050: 69 66 20 2f 2a 20 5f 50 41 47 45 52 5f 48 5f 20  if /* _PAGER_H_ 
1060: 2a 2f 0a                                         */.