/ Hex Artifact Content
Login

Artifact 6991c9c2dc5e4c7f2df4d4ba47d1c6458f763a32:


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 31 37 20 32 30 30 32 2f 30 38 2f 31 32 20 31  .17 2002/08/12 1
0260: 32 3a 32 39 3a 35 37 20 64 72 68 20 45 78 70 20  2:29:57 drh Exp 
0270: 24 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  $.*/../*.** The 
0280: 73 69 7a 65 20 6f 66 20 6f 6e 65 20 70 61 67 65  size of one page
0290: 0a 2a 2a 0a 2a 2a 20 59 6f 75 20 63 61 6e 20 63  .**.** You can c
02a0: 68 61 6e 67 65 20 74 68 69 73 20 76 61 6c 75 65  hange this value
02b0: 20 74 6f 20 61 6e 6f 74 68 65 72 20 28 72 65 61   to another (rea
02c0: 73 6f 6e 61 62 6c 65 29 20 70 6f 77 65 72 20 6f  sonable) power o
02d0: 66 20 74 77 6f 0a 2a 2a 20 73 75 63 68 20 61 73  f two.** such as
02e0: 20 35 31 32 2c 20 32 30 34 38 2c 20 34 30 39 36   512, 2048, 4096
02f0: 2c 20 6f 72 20 38 31 39 32 20 61 6e 64 20 74 68  , or 8192 and th
0300: 69 6e 67 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20  ings will still 
0310: 77 6f 72 6b 2e 20 20 42 75 74 0a 2a 2a 20 65 78  work.  But.** ex
0320: 70 65 72 69 6d 65 6e 74 73 20 73 68 6f 77 20 74  periments show t
0330: 68 61 74 20 61 20 70 61 67 65 20 73 69 7a 65 20  hat a page size 
0340: 6f 66 20 31 30 32 34 20 67 69 76 65 73 20 74 68  of 1024 gives th
0350: 65 20 62 65 73 74 20 73 70 65 65 64 2e 0a 2a 2a  e best speed..**
0360: 20 28 54 68 65 20 73 70 65 65 64 20 64 69 66 66   (The speed diff
0370: 65 72 65 6e 63 65 73 20 61 72 65 20 6d 69 6e 69  erences are mini
0380: 6d 61 6c 2e 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  mal.).*/.#define
0390: 20 53 51 4c 49 54 45 5f 50 41 47 45 5f 53 49 5a   SQLITE_PAGE_SIZ
03a0: 45 20 31 30 32 34 0a 0a 2f 2a 0a 2a 2a 20 4d 61  E 1024../*.** Ma
03b0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
03c0: 70 61 67 65 73 20 69 6e 20 6f 6e 65 20 64 61 74  pages in one dat
03d0: 61 62 61 73 65 2e 20 20 28 54 68 69 73 20 69 73  abase.  (This is
03e0: 20 61 20 6c 69 6d 69 74 61 74 69 6f 6e 20 6f 66   a limitation of
03f0: 0a 2a 2a 20 69 6d 70 6f 73 65 64 20 62 79 20 34  .** imposed by 4
0400: 47 42 20 66 69 6c 65 73 20 73 69 7a 65 20 6c 69  GB files size li
0410: 6d 69 74 73 2e 29 0a 2a 2f 0a 23 64 65 66 69 6e  mits.).*/.#defin
0420: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 50 41 47  e SQLITE_MAX_PAG
0430: 45 20 31 30 37 33 37 34 31 38 32 33 0a 0a 2f 2a  E 1073741823../*
0440: 0a 2a 2a 20 54 68 65 20 74 79 70 65 20 75 73 65  .** The type use
0450: 64 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 61  d to represent a
0460: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54   page number.  T
0470: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 69 6e  he first page in
0480: 20 61 20 66 69 6c 65 0a 2a 2a 20 69 73 20 63 61   a file.** is ca
0490: 6c 6c 65 64 20 70 61 67 65 20 31 2e 20 20 30 20  lled page 1.  0 
04a0: 69 73 20 75 73 65 64 20 74 6f 20 72 65 70 72 65  is used to repre
04b0: 73 65 6e 74 20 22 6e 6f 74 20 61 20 70 61 67 65  sent "not a page
04c0: 22 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e  "..*/.typedef un
04d0: 73 69 67 6e 65 64 20 69 6e 74 20 50 67 6e 6f 3b  signed int Pgno;
04e0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6f 70 65  ../*.** Each ope
04f0: 6e 20 66 69 6c 65 20 69 73 20 6d 61 6e 61 67 65  n file is manage
0500: 64 20 62 79 20 61 20 73 65 70 61 72 61 74 65 20  d by a separate 
0510: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
0520: 22 50 61 67 65 72 22 20 73 74 72 75 63 74 75 72  "Pager" structur
0530: 65 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  e..*/.typedef st
0540: 72 75 63 74 20 50 61 67 65 72 20 50 61 67 65 72  ruct Pager Pager
0550: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 65 20 73 6f 75  ;../*.** See sou
0560: 72 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65 6e 74  rce code comment
0570: 73 20 66 6f 72 20 61 20 64 65 74 61 69 6c 65 64  s for a detailed
0580: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
0590: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
05a0: 20 72 6f 75 74 69 6e 65 73 3a 0a 2a 2f 0a 69 6e   routines:.*/.in
05b0: 74 20 73 71 6c 69 74 65 70 61 67 65 72 5f 6f 70  t sqlitepager_op
05c0: 65 6e 28 50 61 67 65 72 20 2a 2a 70 70 50 61 67  en(Pager **ppPag
05d0: 65 72 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  er,const char *z
05e0: 46 69 6c 65 6e 61 6d 65 2c 69 6e 74 20 6e 50 61  Filename,int nPa
05f0: 67 65 2c 69 6e 74 20 6e 45 78 29 3b 0a 76 6f 69  ge,int nEx);.voi
0600: 64 20 73 71 6c 69 74 65 70 61 67 65 72 5f 73 65  d sqlitepager_se
0610: 74 5f 64 65 73 74 72 75 63 74 6f 72 28 50 61 67  t_destructor(Pag
0620: 65 72 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  er*, void(*)(voi
0630: 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
0640: 65 70 61 67 65 72 5f 73 65 74 5f 63 61 63 68 65  epager_set_cache
0650: 73 69 7a 65 28 50 61 67 65 72 2a 2c 20 69 6e 74  size(Pager*, int
0660: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 70 61 67  );.int sqlitepag
0670: 65 72 5f 63 6c 6f 73 65 28 50 61 67 65 72 20 2a  er_close(Pager *
0680: 70 50 61 67 65 72 29 3b 0a 69 6e 74 20 73 71 6c  pPager);.int sql
0690: 69 74 65 70 61 67 65 72 5f 67 65 74 28 50 61 67  itepager_get(Pag
06a0: 65 72 20 2a 70 50 61 67 65 72 2c 20 50 67 6e 6f  er *pPager, Pgno
06b0: 20 70 67 6e 6f 2c 20 76 6f 69 64 20 2a 2a 70 70   pgno, void **pp
06c0: 50 61 67 65 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  Page);.void *sql
06d0: 69 74 65 70 61 67 65 72 5f 6c 6f 6f 6b 75 70 28  itepager_lookup(
06e0: 50 61 67 65 72 20 2a 70 50 61 67 65 72 2c 20 50  Pager *pPager, P
06f0: 67 6e 6f 20 70 67 6e 6f 29 3b 0a 69 6e 74 20 73  gno pgno);.int s
0700: 71 6c 69 74 65 70 61 67 65 72 5f 72 65 66 28 76  qlitepager_ref(v
0710: 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
0720: 65 70 61 67 65 72 5f 75 6e 72 65 66 28 76 6f 69  epager_unref(voi
0730: 64 2a 29 3b 0a 50 67 6e 6f 20 73 71 6c 69 74 65  d*);.Pgno sqlite
0740: 70 61 67 65 72 5f 70 61 67 65 6e 75 6d 62 65 72  pager_pagenumber
0750: 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
0760: 69 74 65 70 61 67 65 72 5f 77 72 69 74 65 28 76  itepager_write(v
0770: 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
0780: 65 70 61 67 65 72 5f 69 73 77 72 69 74 65 61 62  epager_iswriteab
0790: 6c 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  le(void*);.int s
07a0: 71 6c 69 74 65 70 61 67 65 72 5f 70 61 67 65 63  qlitepager_pagec
07b0: 6f 75 6e 74 28 50 61 67 65 72 2a 29 3b 0a 69 6e  ount(Pager*);.in
07c0: 74 20 73 71 6c 69 74 65 70 61 67 65 72 5f 62 65  t sqlitepager_be
07d0: 67 69 6e 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  gin(void*);.int 
07e0: 73 71 6c 69 74 65 70 61 67 65 72 5f 63 6f 6d 6d  sqlitepager_comm
07f0: 69 74 28 50 61 67 65 72 2a 29 3b 0a 69 6e 74 20  it(Pager*);.int 
0800: 73 71 6c 69 74 65 70 61 67 65 72 5f 72 6f 6c 6c  sqlitepager_roll
0810: 62 61 63 6b 28 50 61 67 65 72 2a 29 3b 0a 69 6e  back(Pager*);.in
0820: 74 20 73 71 6c 69 74 65 70 61 67 65 72 5f 69 73  t sqlitepager_is
0830: 72 65 61 64 6f 6e 6c 79 28 50 61 67 65 72 2a 29  readonly(Pager*)
0840: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 70 61 67 65  ;.int sqlitepage
0850: 72 5f 63 6b 70 74 5f 62 65 67 69 6e 28 50 61 67  r_ckpt_begin(Pag
0860: 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
0870: 70 61 67 65 72 5f 63 6b 70 74 5f 63 6f 6d 6d 69  pager_ckpt_commi
0880: 74 28 50 61 67 65 72 2a 29 3b 0a 69 6e 74 20 73  t(Pager*);.int s
0890: 71 6c 69 74 65 70 61 67 65 72 5f 63 6b 70 74 5f  qlitepager_ckpt_
08a0: 72 6f 6c 6c 62 61 63 6b 28 50 61 67 65 72 2a 29  rollback(Pager*)
08b0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 70 61 67  ;.void sqlitepag
08c0: 65 72 5f 64 6f 6e 74 5f 72 6f 6c 6c 62 61 63 6b  er_dont_rollback
08d0: 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
08e0: 6c 69 74 65 70 61 67 65 72 5f 64 6f 6e 74 5f 77  litepager_dont_w
08f0: 72 69 74 65 28 50 61 67 65 72 2a 2c 20 50 67 6e  rite(Pager*, Pgn
0900: 6f 29 3b 0a 69 6e 74 20 2a 73 71 6c 69 74 65 70  o);.int *sqlitep
0910: 61 67 65 72 5f 73 74 61 74 73 28 50 61 67 65 72  ager_stats(Pager
0920: 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
0930: 54 45 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c  TE_TEST.void sql
0940: 69 74 65 70 61 67 65 72 5f 72 65 66 64 75 6d 70  itepager_refdump
0950: 28 50 61 67 65 72 2a 29 3b 0a 69 6e 74 20 70 61  (Pager*);.int pa
0960: 67 65 72 5f 72 65 66 69 6e 66 6f 5f 65 6e 61 62  ger_refinfo_enab
0970: 6c 65 3b 0a 69 6e 74 20 70 61 67 65 72 5f 6f 6c  le;.int pager_ol
0980: 64 5f 66 6f 72 6d 61 74 3b 0a 23 65 6e 64 69 66  d_format;.#endif
0990: 0a                                               .