/ Hex Artifact Content
Login

Artifact 8718b718b36d37584e9bbdfccec10588fa91271f:


0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 31 39 39 39 2c 20 32 30 30 30 20 44  (c) 1999, 2000 D
0020: 2e 20 52 69 63 68 61 72 64 20 48 69 70 70 0a 2a  . Richard Hipp.*
0030: 2a 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61  *.** This progra
0040: 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61  m is free softwa
0050: 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69  re; you can redi
0060: 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f  stribute it and/
0070: 6f 72 0a 2a 2a 20 6d 6f 64 69 66 79 20 69 74 20  or.** modify it 
0080: 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20  under the terms 
0090: 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72  of the GNU Gener
00a0: 61 6c 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63  al Public.** Lic
00b0: 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65  ense as publishe
00c0: 64 20 62 79 20 74 68 65 20 46 72 65 65 20 53 6f  d by the Free So
00d0: 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f  ftware Foundatio
00e0: 6e 3b 20 65 69 74 68 65 72 0a 2a 2a 20 76 65 72  n; either.** ver
00f0: 73 69 6f 6e 20 32 20 6f 66 20 74 68 65 20 4c 69  sion 2 of the Li
0100: 63 65 6e 73 65 2c 20 6f 72 20 28 61 74 20 79 6f  cense, or (at yo
0110: 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c  ur option) any l
0120: 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 2a 2a  ater version..**
0130: 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d  .** This program
0140: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20   is distributed 
0150: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74  in the hope that
0160: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66   it will be usef
0170: 75 6c 2c 0a 2a 2a 20 62 75 74 20 57 49 54 48 4f  ul,.** but WITHO
0180: 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  UT ANY WARRANTY;
0190: 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68   without even th
01a0: 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  e implied warran
01b0: 74 79 20 6f 66 0a 2a 2a 20 4d 45 52 43 48 41 4e  ty of.** MERCHAN
01c0: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
01d0: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
01e0: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
01f0: 65 65 20 74 68 65 20 47 4e 55 0a 2a 2a 20 47 65  ee the GNU.** Ge
0200: 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63  neral Public Lic
0210: 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65  ense for more de
0220: 74 61 69 6c 73 2e 0a 2a 2a 20 0a 2a 2a 20 59 6f  tails..** .** Yo
0230: 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65  u should have re
0240: 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66  ceived a copy of
0250: 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c   the GNU General
0260: 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e   Public.** Licen
0270: 73 65 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  se along with th
0280: 69 73 20 6c 69 62 72 61 72 79 3b 20 69 66 20 6e  is library; if n
0290: 6f 74 2c 20 77 72 69 74 65 20 74 6f 20 74 68 65  ot, write to the
02a0: 0a 2a 2a 20 46 72 65 65 20 53 6f 66 74 77 61 72  .** Free Softwar
02b0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e  e Foundation, In
02c0: 63 2e 2c 20 35 39 20 54 65 6d 70 6c 65 20 50 6c  c., 59 Temple Pl
02d0: 61 63 65 20 2d 20 53 75 69 74 65 20 33 33 30 2c  ace - Suite 330,
02e0: 0a 2a 2a 20 42 6f 73 74 6f 6e 2c 20 4d 41 20 20  .** Boston, MA  
02f0: 30 32 31 31 31 2d 31 33 30 37 2c 20 55 53 41 2e  02111-1307, USA.
0300: 0a 2a 2a 0a 2a 2a 20 41 75 74 68 6f 72 20 63 6f  .**.** Author co
0310: 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntact informatio
0320: 6e 3a 0a 2a 2a 20 20 20 64 72 68 40 68 77 61 63  n:.**   drh@hwac
0330: 69 2e 63 6f 6d 0a 2a 2a 20 20 20 68 74 74 70 3a  i.com.**   http:
0340: 2f 2f 77 77 77 2e 68 77 61 63 69 2e 63 6f 6d 2f  //www.hwaci.com/
0350: 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  drh/.**.********
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
03a0: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 64  *.** This file d
03b0: 65 66 69 6e 65 73 20 74 68 65 20 69 6e 74 65 72  efines the inter
03c0: 66 61 63 65 20 74 6f 20 74 68 65 20 64 61 74 61  face to the data
03d0: 62 61 73 65 20 62 61 63 6b 65 6e 64 20 28 44 62  base backend (Db
03e0: 62 65 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  be)..**.** The d
03f0: 61 74 61 62 61 73 65 20 62 61 63 6b 65 6e 64 20  atabase backend 
0400: 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62  is designed to b
0410: 65 20 61 73 20 67 65 6e 65 72 61 6c 20 61 73 20  e as general as 
0420: 70 6f 73 73 69 62 6c 65 0a 2a 2a 20 73 6f 20 74  possible.** so t
0430: 68 61 74 20 69 74 20 63 61 6e 20 65 61 73 69 6c  hat it can easil
0440: 79 20 62 65 20 72 65 70 6c 61 63 65 64 20 62 79  y be replaced by
0450: 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 61 63   a different bac
0460: 6b 65 6e 64 2e 0a 2a 2a 20 54 68 69 73 20 6c 69  kend..** This li
0470: 62 72 61 72 79 20 77 61 73 20 6f 72 69 67 69 6e  brary was origin
0480: 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
0490: 20 73 75 70 70 6f 72 74 20 74 68 65 20 66 6f 6c   support the fol
04a0: 6c 6f 77 69 6e 67 0a 2a 2a 20 62 61 63 6b 65 6e  lowing.** backen
04b0: 64 73 3a 20 47 44 42 4d 2c 20 4e 44 42 4d 2c 20  ds: GDBM, NDBM, 
04c0: 53 44 42 4d 2c 20 42 65 72 6b 65 6c 65 79 20 44  SDBM, Berkeley D
04d0: 42 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 64 62  B..**.** $Id: db
04e0: 62 65 2e 68 2c 76 20 31 2e 36 20 32 30 30 30 2f  be.h,v 1.6 2000/
04f0: 30 36 2f 32 31 20 31 33 3a 35 39 3a 31 31 20 64  06/21 13:59:11 d
0500: 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 66 6e  rh Exp $.*/.#ifn
0510: 64 65 66 20 5f 53 51 4c 49 54 45 5f 44 42 42 45  def _SQLITE_DBBE
0520: 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c  _H_.#define _SQL
0530: 49 54 45 5f 44 42 42 45 5f 48 5f 0a 23 69 6e 63  ITE_DBBE_H_.#inc
0540: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 0a  lude <stdio.h>..
0550: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 62 61  /*.** The databa
0560: 73 65 20 62 61 63 6b 65 6e 64 20 73 75 70 70 6f  se backend suppo
0570: 72 74 73 20 74 77 6f 20 6f 70 61 71 75 65 20 73  rts two opaque s
0580: 74 72 75 63 74 75 72 65 73 2e 20 20 41 20 44 62  tructures.  A Db
0590: 62 65 20 69 73 0a 2a 2a 20 61 20 63 6f 6e 74 65  be is.** a conte
05a0: 78 74 20 66 6f 72 20 74 68 65 20 65 6e 74 69 72  xt for the entir
05b0: 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 73 20  e set of tables 
05c0: 66 6f 72 6d 69 6e 67 20 61 20 63 6f 6d 70 6c 65  forming a comple
05d0: 74 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  te.** database. 
05e0: 20 41 20 44 62 62 65 43 75 72 73 6f 72 20 69 73   A DbbeCursor is
05f0: 20 61 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f 20   a pointer into 
0600: 61 20 73 69 6e 67 6c 65 20 73 69 6e 67 6c 65 20  a single single 
0610: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  table..**.** Not
0620: 65 20 74 68 61 74 20 61 74 20 74 68 69 73 20 6c  e that at this l
0630: 65 76 65 6c 2c 20 74 68 65 20 74 65 72 6d 20 22  evel, the term "
0640: 74 61 62 6c 65 22 20 63 61 6e 20 6d 65 61 6e 20  table" can mean 
0650: 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 53 51 4c  either an.** SQL
0660: 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 53 51 4c   table or an SQL
0670: 20 69 6e 64 65 78 2e 20 20 49 6e 20 74 68 69 73   index.  In this
0680: 20 6d 6f 64 75 6c 65 2c 20 61 20 74 61 62 6c 65   module, a table
0690: 20 73 74 6f 72 65 73 20 61 0a 2a 2a 20 73 69 6e   stores a.** sin
06a0: 67 6c 65 20 61 72 62 69 74 72 61 72 79 2d 6c 65  gle arbitrary-le
06b0: 6e 67 74 68 20 6b 65 79 20 61 6e 64 20 63 6f 72  ngth key and cor
06c0: 72 65 73 70 6f 6e 64 69 6e 67 20 61 72 62 69 74  responding arbit
06d0: 72 61 72 79 2d 6c 65 6e 67 74 68 0a 2a 2a 20 64  rary-length.** d
06e0: 61 74 61 2e 20 20 54 68 65 20 64 69 66 66 65 72  ata.  The differ
06f0: 65 6e 63 65 73 20 62 65 74 77 65 65 6e 20 74 61  ences between ta
0700: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
0710: 2c 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 65 67  , and the.** seg
0720: 72 65 67 61 74 69 6f 6e 20 6f 66 20 64 61 74 61  regation of data
0730: 20 69 6e 74 6f 20 76 61 72 69 6f 75 73 20 66 69   into various fi
0740: 65 6c 64 73 20 6f 72 20 63 6f 6c 75 6d 6e 73 20  elds or columns 
0750: 69 73 20 68 61 6e 64 6c 65 64 0a 2a 2a 20 62 79  is handled.** by
0760: 20 73 6f 66 74 77 61 72 65 20 61 74 20 68 69 67   software at hig
0770: 68 65 72 20 6c 61 79 65 72 73 2e 0a 2a 2a 0a 2a  her layers..**.*
0780: 2a 20 54 68 65 20 44 62 62 65 43 75 72 73 6f 72  * The DbbeCursor
0790: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
07a0: 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
07b0: 72 6d 61 74 69 6f 6e 2c 20 73 75 63 68 20 61 73  rmation, such as
07c0: 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
07d0: 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 6c 61  data from the la
07e0: 73 74 20 72 65 74 72 69 65 76 61 6c 2e 20 20 46  st retrieval.  F
07f0: 6f 72 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20  or this reason, 
0800: 0a 2a 2a 20 74 68 65 20 62 61 63 6b 65 6e 64 20  .** the backend 
0810: 6d 75 73 74 20 61 6c 6c 6f 77 20 74 68 65 20 63  must allow the c
0820: 72 65 61 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  reation of multi
0830: 70 6c 65 20 69 6e 64 65 70 65 6e 64 65 6e 74 0a  ple independent.
0840: 2a 2a 20 44 62 62 65 43 75 72 73 6f 72 20 73 74  ** DbbeCursor st
0850: 72 75 63 74 75 72 65 73 20 66 6f 72 20 65 61 63  ructures for eac
0860: 68 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  h table in the d
0870: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 74 79 70 65  atabase..*/.type
0880: 64 65 66 20 73 74 72 75 63 74 20 44 62 62 65 20  def struct Dbbe 
0890: 44 62 62 65 3b 0a 74 79 70 65 64 65 66 20 73 74  Dbbe;.typedef st
08a0: 72 75 63 74 20 44 62 62 65 43 75 72 73 6f 72 20  ruct DbbeCursor 
08b0: 44 62 62 65 43 75 72 73 6f 72 3b 0a 0a 2f 2a 0a  DbbeCursor;../*.
08c0: 2a 2a 20 54 68 65 20 31 38 20 69 6e 74 65 72 66  ** The 18 interf
08d0: 61 63 65 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ace routines..*/
08e0: 0a 0a 2f 2a 20 4f 70 65 6e 20 61 20 63 6f 6d 70  ../* Open a comp
08f0: 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 2a 2f  lete database */
0900: 0a 44 62 62 65 20 2a 73 71 6c 69 74 65 44 62 62  .Dbbe *sqliteDbb
0910: 65 4f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  eOpen(const char
0920: 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 77 72 69   *zName, int wri
0930: 74 65 2c 20 69 6e 74 20 63 72 65 61 74 65 2c 20  te, int create, 
0940: 63 68 61 72 20 2a 2a 70 7a 45 72 72 29 3b 0a 0a  char **pzErr);..
0950: 2f 2a 20 43 6c 6f 73 65 20 74 68 65 20 77 68 6f  /* Close the who
0960: 6c 65 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a  le database. */.
0970: 76 6f 69 64 20 73 71 6c 69 74 65 44 62 62 65 43  void sqliteDbbeC
0980: 6c 6f 73 65 28 44 62 62 65 2a 29 3b 0a 0a 2f 2a  lose(Dbbe*);../*
0990: 20 4f 70 65 6e 20 61 20 63 75 72 73 6f 72 20 69   Open a cursor i
09a0: 6e 74 6f 20 70 61 72 74 69 63 75 6c 61 72 20 66  nto particular f
09b0: 69 6c 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75  ile of a previou
09c0: 73 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62  sly opened datab
09d0: 61 73 65 2e 0a 2a 2a 20 43 72 65 61 74 65 20 74  ase..** Create t
09e0: 68 65 20 66 69 6c 65 20 69 66 20 69 74 20 64 6f  he file if it do
09f0: 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
0a00: 69 73 74 20 61 6e 64 20 77 72 69 74 65 61 62 6c  ist and writeabl
0a10: 65 21 3d 30 2e 20 20 7a 4e 61 6d 65 0a 2a 2a 20  e!=0.  zName.** 
0a20: 69 73 20 74 68 65 20 62 61 73 65 20 6e 61 6d 65  is the base name
0a30: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 74 6f 20   of the file to 
0a40: 62 65 20 6f 70 65 6e 65 64 2e 20 20 54 68 69 73  be opened.  This
0a50: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 61 64   routine will ad
0a60: 64 0a 2a 2a 20 61 6e 20 61 70 70 72 6f 70 72 69  d.** an appropri
0a70: 61 74 65 20 70 61 74 68 20 61 6e 64 20 65 78 74  ate path and ext
0a80: 65 6e 73 69 6f 6e 20 74 6f 20 74 68 65 20 66 69  ension to the fi
0a90: 6c 65 6e 61 6d 65 20 74 6f 20 6c 6f 63 61 74 65  lename to locate
0aa0: 20 74 68 65 20 0a 2a 2a 20 61 63 74 75 61 6c 20   the .** actual 
0ab0: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 7a  file..**.** If z
0ac0: 4e 61 6d 65 20 69 73 20 30 20 6f 72 20 22 22 2c  Name is 0 or "",
0ad0: 20 74 68 65 6e 20 61 20 74 65 6d 70 6f 72 61 72   then a temporar
0ae0: 79 20 66 69 6c 65 20 69 73 20 63 72 65 61 74 65  y file is create
0af0: 64 20 74 68 61 74 0a 2a 2a 20 77 69 6c 6c 20 62  d that.** will b
0b00: 65 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 63  e deleted when c
0b10: 6c 6f 73 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  losed..*/.int sq
0b20: 6c 69 74 65 44 62 62 65 4f 70 65 6e 43 75 72 73  liteDbbeOpenCurs
0b30: 6f 72 28 44 62 62 65 2a 2c 20 63 6f 6e 73 74 20  or(Dbbe*, const 
0b40: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74  char *zName, int
0b50: 20 77 72 69 74 65 61 62 6c 65 2c 20 44 62 62 65   writeable, Dbbe
0b60: 43 75 72 73 6f 72 2a 2a 29 3b 0a 0a 2f 2a 20 44  Cursor**);../* D
0b70: 65 6c 65 74 65 20 61 20 74 61 62 6c 65 20 66 72  elete a table fr
0b80: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
0b90: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 44 62  */.void sqliteDb
0ba0: 62 65 44 72 6f 70 54 61 62 6c 65 28 44 62 62 65  beDropTable(Dbbe
0bb0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
0bc0: 54 61 62 6c 65 4e 61 6d 65 29 3b 0a 0a 2f 2a 20  TableName);../* 
0bd0: 52 65 6f 72 67 61 6e 69 7a 65 20 61 20 74 61 62  Reorganize a tab
0be0: 6c 65 20 74 6f 20 73 70 65 65 64 20 61 63 63 65  le to speed acce
0bf0: 73 73 20 6f 72 20 72 65 64 75 63 65 20 69 74 73  ss or reduce its
0c00: 20 64 69 73 6b 20 75 73 61 67 65 20 2a 2f 0a 76   disk usage */.v
0c10: 6f 69 64 20 73 71 6c 69 74 65 44 62 62 65 52 65  oid sqliteDbbeRe
0c20: 6f 72 67 61 6e 69 7a 65 54 61 62 6c 65 28 44 62  organizeTable(Db
0c30: 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  be*, const char 
0c40: 2a 7a 54 61 62 6c 65 4e 61 6d 65 29 3b 0a 0a 2f  *zTableName);../
0c50: 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
0c60: 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 44   */.void sqliteD
0c70: 62 62 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 44  bbeCloseCursor(D
0c80: 62 62 65 43 75 72 73 6f 72 2a 29 3b 0a 0a 2f 2a  bbeCursor*);../*
0c90: 20 46 65 74 63 68 20 61 6e 20 65 6e 74 72 79 20   Fetch an entry 
0ca0: 66 72 6f 6d 20 61 20 74 61 62 6c 65 20 77 69 74  from a table wit
0cb0: 68 20 74 68 65 20 67 69 76 65 6e 20 6b 65 79 2e  h the given key.
0cc0: 20 20 52 65 74 75 72 6e 20 31 20 69 66 0a 2a 2a    Return 1 if.**
0cd0: 20 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 20   successful and 
0ce0: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 65 6e 74  0 if no such ent
0cf0: 72 79 20 65 78 69 73 74 73 2e 0a 2a 2f 0a 69 6e  ry exists..*/.in
0d00: 74 20 73 71 6c 69 74 65 44 62 62 65 46 65 74 63  t sqliteDbbeFetc
0d10: 68 28 44 62 62 65 43 75 72 73 6f 72 2a 2c 20 69  h(DbbeCursor*, i
0d20: 6e 74 20 6e 4b 65 79 2c 20 63 68 61 72 20 2a 70  nt nKey, char *p
0d30: 4b 65 79 29 3b 0a 0a 2f 2a 20 52 65 74 75 72 6e  Key);../* Return
0d40: 20 31 20 69 66 20 74 68 65 20 67 69 76 65 6e 20   1 if the given 
0d50: 6b 65 79 20 69 73 20 61 6c 72 65 61 64 79 20 69  key is already i
0d60: 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 52 65  n the table.  Re
0d70: 74 75 72 6e 20 30 0a 2a 2a 20 69 66 20 69 74 20  turn 0.** if it 
0d80: 69 73 20 6e 6f 74 2e 0a 2a 2f 0a 69 6e 74 20 73  is not..*/.int s
0d90: 71 6c 69 74 65 44 62 62 65 54 65 73 74 28 44 62  qliteDbbeTest(Db
0da0: 62 65 43 75 72 73 6f 72 2a 2c 20 69 6e 74 20 6e  beCursor*, int n
0db0: 4b 65 79 2c 20 63 68 61 72 20 2a 70 4b 65 79 29  Key, char *pKey)
0dc0: 3b 0a 0a 2f 2a 20 52 65 74 72 69 65 76 65 20 74  ;../* Retrieve t
0dd0: 68 65 20 6b 65 79 20 6f 72 20 64 61 74 61 20 75  he key or data u
0de0: 73 65 64 20 66 6f 72 20 74 68 65 20 6c 61 73 74  sed for the last
0df0: 20 66 65 74 63 68 2e 20 20 4f 6e 6c 79 20 73 69   fetch.  Only si
0e00: 7a 65 0a 2a 2a 20 62 79 74 65 73 20 61 72 65 20  ze.** bytes are 
0e10: 72 65 61 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  read beginning w
0e20: 69 74 68 20 74 68 65 20 6f 66 66 73 65 74 2d 74  ith the offset-t
0e30: 68 20 62 79 74 65 2e 20 20 54 68 65 20 72 65 74  h byte.  The ret
0e40: 75 72 6e 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  urn.** value is 
0e50: 74 68 65 20 61 63 74 75 61 6c 20 6e 75 6d 62 65  the actual numbe
0e60: 72 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e  r of bytes read.
0e70: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 44 62  .*/.int sqliteDb
0e80: 62 65 43 6f 70 79 4b 65 79 28 44 62 62 65 43 75  beCopyKey(DbbeCu
0e90: 72 73 6f 72 2a 2c 20 69 6e 74 20 6f 66 66 73 65  rsor*, int offse
0ea0: 74 2c 20 69 6e 74 20 73 69 7a 65 2c 20 63 68 61  t, int size, cha
0eb0: 72 20 2a 7a 42 75 66 29 3b 0a 69 6e 74 20 73 71  r *zBuf);.int sq
0ec0: 6c 69 74 65 44 62 62 65 43 6f 70 79 44 61 74 61  liteDbbeCopyData
0ed0: 28 44 62 62 65 43 75 72 73 6f 72 2a 2c 20 69 6e  (DbbeCursor*, in
0ee0: 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 73 69  t offset, int si
0ef0: 7a 65 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 3b  ze, char *zBuf);
0f00: 0a 0a 2f 2a 20 52 65 74 72 69 65 76 65 20 74 68  ../* Retrieve th
0f10: 65 20 6b 65 79 20 6f 72 20 64 61 74 61 2e 20 20  e key or data.  
0f20: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 65 70  The result is ep
0f30: 68 65 6d 65 72 61 6c 2e 20 20 49 6e 20 6f 74 68  hemeral.  In oth
0f40: 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 74 68 65  er words,.** the
0f50: 20 72 65 73 75 6c 74 20 69 73 20 73 74 6f 72 65   result is store
0f60: 64 20 69 6e 20 61 20 62 75 66 66 65 72 20 74 68  d in a buffer th
0f70: 61 74 20 6d 69 67 68 74 20 62 65 20 6f 76 65 72  at might be over
0f80: 77 72 69 74 74 65 6e 20 6f 6e 20 74 68 65 20 6e  written on the n
0f90: 65 78 74 0a 2a 2a 20 63 61 6c 6c 20 74 6f 20 61  ext.** call to a
0fa0: 6e 79 20 44 42 42 45 20 72 6f 75 74 69 6e 65 2e  ny DBBE routine.
0fb0: 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 73    If the results
0fc0: 20 61 72 65 20 6e 65 65 64 65 64 20 66 6f 72 20   are needed for 
0fd0: 6c 6f 6e 67 65 72 20 74 68 61 6e 0a 2a 2a 20 74  longer than.** t
0fe0: 68 61 74 2c 20 79 6f 75 20 6d 75 73 74 20 6d 61  hat, you must ma
0ff0: 6b 65 20 61 20 63 6f 70 79 2e 0a 2a 2f 0a 63 68  ke a copy..*/.ch
1000: 61 72 20 2a 73 71 6c 69 74 65 44 62 62 65 52 65  ar *sqliteDbbeRe
1010: 61 64 4b 65 79 28 44 62 62 65 43 75 72 73 6f 72  adKey(DbbeCursor
1020: 2a 2c 20 69 6e 74 20 6f 66 66 73 65 74 29 3b 0a  *, int offset);.
1030: 63 68 61 72 20 2a 73 71 6c 69 74 65 44 62 62 65  char *sqliteDbbe
1040: 52 65 61 64 44 61 74 61 28 44 62 62 65 43 75 72  ReadData(DbbeCur
1050: 73 6f 72 2a 2c 20 69 6e 74 20 6f 66 66 73 65 74  sor*, int offset
1060: 29 3b 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68  );../* Return th
1070: 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
1080: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20 66 65  most recently fe
1090: 74 63 68 65 64 20 6b 65 79 20 6f 72 20 64 61 74  tched key or dat
10a0: 61 2e 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  a. */.int sqlite
10b0: 44 62 62 65 4b 65 79 4c 65 6e 67 74 68 28 44 62  DbbeKeyLength(Db
10c0: 62 65 43 75 72 73 6f 72 2a 29 3b 0a 69 6e 74 20  beCursor*);.int 
10d0: 73 71 6c 69 74 65 44 62 62 65 44 61 74 61 4c 65  sqliteDbbeDataLe
10e0: 6e 67 74 68 28 44 62 62 65 43 75 72 73 6f 72 2a  ngth(DbbeCursor*
10f0: 29 3b 0a 0a 2f 2a 20 52 65 74 72 69 65 76 65 20  );../* Retrieve 
1100: 74 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20 69  the next entry i
1110: 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  n the table.  Th
1120: 65 20 66 69 72 73 74 20 6b 65 79 20 69 73 20 72  e first key is r
1130: 65 74 72 69 65 76 65 64 0a 2a 2a 20 74 68 65 20  etrieved.** the 
1140: 66 69 72 73 74 20 74 69 6d 65 20 74 68 69 73 20  first time this 
1150: 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
1160: 64 2c 20 6f 72 20 61 66 74 65 72 20 61 20 63 61  d, or after a ca
1170: 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 44  ll to.** sqliteD
1180: 62 62 65 52 65 77 69 6e 64 28 29 2e 20 20 54 68  bbeRewind().  Th
1190: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  e return value i
11a0: 73 20 31 20 69 66 20 74 68 65 72 65 20 69 73 20  s 1 if there is 
11b0: 61 6e 6f 74 68 65 72 0a 2a 2a 20 65 6e 74 72 79  another.** entry
11c0: 2c 20 6f 72 20 30 20 69 66 20 74 68 65 72 65 20  , or 0 if there 
11d0: 61 72 65 20 6e 6f 20 6d 6f 72 65 20 65 6e 74 72  are no more entr
11e0: 69 65 73 2e 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ies. */.int sqli
11f0: 74 65 44 62 62 65 4e 65 78 74 4b 65 79 28 44 62  teDbbeNextKey(Db
1200: 62 65 43 75 72 73 6f 72 2a 29 3b 0a 0a 2f 2a 20  beCursor*);../* 
1210: 4d 61 6b 65 20 69 74 20 73 6f 20 74 68 61 74 20  Make it so that 
1220: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
1230: 20 73 71 6c 69 74 65 44 62 62 65 4e 65 78 74 4b   sqliteDbbeNextK
1240: 65 79 28 29 20 72 65 74 75 72 6e 73 0a 2a 2a 20  ey() returns.** 
1250: 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
1260: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 2a 2f  of the table. */
1270: 0a 69 6e 74 20 73 71 6c 69 74 65 44 62 62 65 52  .int sqliteDbbeR
1280: 65 77 69 6e 64 28 44 62 62 65 43 75 72 73 6f 72  ewind(DbbeCursor
1290: 2a 29 3b 0a 0a 2f 2a 20 47 65 74 20 61 20 6e 65  *);../* Get a ne
12a0: 77 20 69 6e 74 65 67 65 72 20 6b 65 79 20 66 6f  w integer key fo
12b0: 72 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  r this table. */
12c0: 0a 69 6e 74 20 73 71 6c 69 74 65 44 62 62 65 4e  .int sqliteDbbeN
12d0: 65 77 28 44 62 62 65 43 75 72 73 6f 72 2a 29 3b  ew(DbbeCursor*);
12e0: 0a 0a 2f 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  ../* Write an en
12f0: 74 72 79 20 69 6e 74 6f 20 61 20 74 61 62 6c 65  try into a table
1300: 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 65 6e  .  If another en
1310: 74 72 79 20 61 6c 72 65 61 64 79 20 65 78 69 73  try already exis
1320: 74 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  ts with.** the s
1330: 61 6d 65 20 6b 65 79 2c 20 74 68 65 20 6f 6c 64  ame key, the old
1340: 20 65 6e 74 72 79 20 69 73 20 64 69 73 63 61 72   entry is discar
1350: 64 65 64 20 66 69 72 73 74 2e 0a 2a 2f 0a 69 6e  ded first..*/.in
1360: 74 20 73 71 6c 69 74 65 44 62 62 65 50 75 74 28  t sqliteDbbePut(
1370: 44 62 62 65 43 75 72 73 6f 72 2a 2c 20 69 6e 74  DbbeCursor*, int
1380: 20 6e 4b 65 79 2c 20 63 68 61 72 20 2a 70 4b 65   nKey, char *pKe
1390: 79 2c 20 69 6e 74 20 6e 44 61 74 61 2c 20 63 68  y, int nData, ch
13a0: 61 72 20 2a 70 44 61 74 61 29 3b 0a 0a 2f 2a 20  ar *pData);../* 
13b0: 52 65 6d 6f 76 65 20 61 6e 20 65 6e 74 72 79 20  Remove an entry 
13c0: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 2a  from the table *
13d0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 44 62 62 65  /.int sqliteDbbe
13e0: 44 65 6c 65 74 65 28 44 62 62 65 43 75 72 73 6f  Delete(DbbeCurso
13f0: 72 2a 2c 20 69 6e 74 20 6e 4b 65 79 2c 20 63 68  r*, int nKey, ch
1400: 61 72 20 2a 70 4b 65 79 29 3b 0a 0a 2f 2a 20 4f  ar *pKey);../* O
1410: 70 65 6e 20 61 20 66 69 6c 65 20 73 75 69 74 61  pen a file suita
1420: 62 6c 65 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  ble for temporar
1430: 79 20 73 74 6f 72 61 67 65 20 2a 2f 0a 69 6e 74  y storage */.int
1440: 20 73 71 6c 69 74 65 44 62 62 65 4f 70 65 6e 54   sqliteDbbeOpenT
1450: 65 6d 70 46 69 6c 65 28 44 62 62 65 2a 2c 20 46  empFile(Dbbe*, F
1460: 49 4c 45 2a 2a 29 3b 0a 0a 2f 2a 20 43 6c 6f 73  ILE**);../* Clos
1470: 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69  e a temporary fi
1480: 6c 65 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  le */.void sqlit
1490: 65 44 62 62 65 43 6c 6f 73 65 54 65 6d 70 46 69  eDbbeCloseTempFi
14a0: 6c 65 28 44 62 62 65 20 2a 2c 20 46 49 4c 45 20  le(Dbbe *, FILE 
14b0: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 64  *);..#endif /* d
14c0: 65 66 69 6e 65 64 28 5f 53 51 4c 49 54 45 5f 44  efined(_SQLITE_D
14d0: 42 42 45 5f 48 5f 29 20 2a 2f 0a                 BBE_H_) */.