/ Hex Artifact Content
Login

Artifact 828c552a22a1d5b650b8a5ea0009546715c45d93:


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 55 74 69 6c 69 74  ******.** Utilit
0180: 79 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  y functions used
0190: 20 74 68 72 6f 75 67 68 6f 75 74 20 73 71 6c 69   throughout sqli
01a0: 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  te..**.** This f
01b0: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 66 75 6e  ile contains fun
01c0: 63 74 69 6f 6e 73 20 66 6f 72 20 61 6c 6c 6f 63  ctions for alloc
01d0: 61 74 69 6e 67 20 6d 65 6d 6f 72 79 2c 20 63 6f  ating memory, co
01e0: 6d 70 61 72 69 6e 67 0a 2a 2a 20 73 74 72 69 6e  mparing.** strin
01f0: 67 73 2c 20 61 6e 64 20 73 74 75 66 66 20 6c 69  gs, and stuff li
0200: 6b 65 20 74 68 61 74 2e 0a 2a 2a 0a 2a 2a 20 24  ke that..**.** $
0210: 49 64 3a 20 75 74 69 6c 2e 63 2c 76 20 31 2e 32  Id: util.c,v 1.2
0220: 35 31 20 32 30 30 39 2f 30 34 2f 31 37 20 31 35  51 2009/04/17 15
0230: 3a 31 38 3a 34 38 20 64 72 68 20 45 78 70 20 24  :18:48 drh Exp $
0240: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
0250: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c  liteInt.h".#incl
0260: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23  ude <stdarg.h>.#
0270: 69 6e 63 6c 75 64 65 20 3c 6d 61 74 68 2e 68 3e  include <math.h>
0280: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 20  ../*.** Routine 
0290: 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72  needed to suppor
02a0: 74 20 74 68 65 20 74 65 73 74 63 61 73 65 28 29  t the testcase()
02b0: 20 6d 61 63 72 6f 2e 0a 2a 2f 0a 23 69 66 64 65   macro..*/.#ifde
02c0: 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  f SQLITE_COVERAG
02d0: 45 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69  E_TEST.void sqli
02e0: 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 20  te3Coverage(int 
02f0: 78 29 7b 0a 20 20 73 74 61 74 69 63 20 69 6e 74  x){.  static int
0300: 20 64 75 6d 6d 79 20 3d 20 30 3b 0a 20 20 64 75   dummy = 0;.  du
0310: 6d 6d 79 20 2b 3d 20 78 3b 0a 7d 0a 23 65 6e 64  mmy += x;.}.#end
0320: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  if../*.** Routin
0330: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
0340: 6f 72 74 20 74 68 65 20 41 4c 57 41 59 53 28 29  ort the ALWAYS()
0350: 20 61 6e 64 20 4e 45 56 45 52 28 29 20 6d 61 63   and NEVER() mac
0360: 72 6f 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ros..**.** The a
0370: 72 67 75 6d 65 6e 74 20 74 6f 20 41 4c 57 41 59  rgument to ALWAY
0380: 53 28 29 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  S() should alway
0390: 73 20 62 65 20 74 72 75 65 20 61 6e 64 20 74 68  s be true and th
03a0: 65 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 74 6f  e argument.** to
03b0: 20 4e 45 56 45 52 28 29 20 73 68 6f 75 6c 64 20   NEVER() should 
03c0: 61 6c 77 61 79 73 20 62 65 20 66 61 6c 73 65 2e  always be false.
03d0: 20 20 49 66 20 65 69 74 68 65 72 20 69 73 20 6e    If either is n
03e0: 6f 74 20 74 68 65 20 63 61 73 65 0a 2a 2a 20 74  ot the case.** t
03f0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
0400: 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72   is called in or
0410: 64 65 72 20 74 6f 20 74 68 72 6f 77 20 61 6e 20  der to throw an 
0420: 65 72 72 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  error..**.** Thi
0430: 73 20 72 6f 75 74 69 6e 65 20 6f 6e 6c 79 20 65  s routine only e
0440: 78 69 73 74 73 20 69 66 20 61 73 73 65 72 74 28  xists if assert(
0450: 29 20 69 73 20 6f 70 65 72 61 74 69 6f 6e 61 6c  ) is operational
0460: 2e 20 20 49 74 20 61 6c 77 61 79 73 0a 2a 2a 20  .  It always.** 
0470: 74 68 72 6f 77 73 20 61 6e 20 61 73 73 65 72 74  throws an assert
0480: 20 6f 6e 20 69 74 73 20 66 69 72 73 74 20 69 6e   on its first in
0490: 76 6f 63 61 74 69 6f 6e 2e 20 20 54 68 65 20 76  vocation.  The v
04a0: 61 72 69 61 62 6c 65 20 68 61 73 20 61 20 6c 6f  ariable has a lo
04b0: 6e 67 0a 2a 2a 20 6e 61 6d 65 20 74 6f 20 68 65  ng.** name to he
04c0: 6c 70 20 74 68 65 20 61 73 73 65 72 74 28 29 20  lp the assert() 
04d0: 6d 65 73 73 61 67 65 20 62 65 20 6d 6f 72 65 20  message be more 
04e0: 72 65 61 64 61 62 6c 65 2e 20 20 54 68 65 20 76  readable.  The v
04f0: 61 72 69 61 62 6c 65 0a 2a 2a 20 69 73 20 75 73  ariable.** is us
0500: 65 64 20 74 6f 20 70 72 65 76 65 6e 74 20 61 20  ed to prevent a 
0510: 74 6f 6f 2d 63 6c 65 76 65 72 20 6f 70 74 69 6d  too-clever optim
0520: 69 7a 65 72 20 66 72 6f 6d 20 6f 70 74 69 6d 69  izer from optimi
0530: 7a 69 6e 67 20 6f 75 74 20 74 68 65 0a 2a 2a 20  zing out the.** 
0540: 65 6e 74 69 72 65 20 63 61 6c 6c 2e 0a 2a 2f 0a  entire call..*/.
0550: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 69  #ifndef NDEBUG.i
0560: 6e 74 20 73 71 6c 69 74 65 33 41 73 73 65 72 74  nt sqlite3Assert
0570: 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63  (void){.  static
0580: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 41 4c   volatile int AL
0590: 57 41 59 53 5f 77 61 73 5f 66 61 6c 73 65 5f 6f  WAYS_was_false_o
05a0: 72 5f 4e 45 56 45 52 5f 77 61 73 5f 74 72 75 65  r_NEVER_was_true
05b0: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
05c0: 41 4c 57 41 59 53 5f 77 61 73 5f 66 61 6c 73 65  ALWAYS_was_false
05d0: 5f 6f 72 5f 4e 45 56 45 52 5f 77 61 73 5f 74 72  _or_NEVER_was_tr
05e0: 75 65 20 29 3b 20 20 20 20 20 20 2f 2a 20 41 6c  ue );      /* Al
05f0: 77 61 79 73 20 66 61 69 6c 73 20 2a 2f 0a 20 20  ways fails */.  
0600: 72 65 74 75 72 6e 20 41 4c 57 41 59 53 5f 77 61  return ALWAYS_wa
0610: 73 5f 66 61 6c 73 65 5f 6f 72 5f 4e 45 56 45 52  s_false_or_NEVER
0620: 5f 77 61 73 5f 74 72 75 65 2b 2b 3b 20 20 20 20  _was_true++;    
0630: 20 20 20 2f 2a 20 4e 6f 74 20 52 65 61 63 68 65     /* Not Reache
0640: 64 20 2a 2f 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  d */.}.#endif../
0650: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
0660: 20 69 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67   if the floating
0670: 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 69 73 20   point value is 
0680: 4e 6f 74 20 61 20 4e 75 6d 62 65 72 20 28 4e 61  Not a Number (Na
0690: 4e 29 2e 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68  N)..**.** Use th
06a0: 65 20 6d 61 74 68 20 6c 69 62 72 61 72 79 20 69  e math library i
06b0: 73 6e 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  snan() function 
06c0: 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  if compiled with
06d0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e   SQLITE_HAVE_ISN
06e0: 41 4e 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  AN..** Otherwise
06f0: 2c 20 77 65 20 68 61 76 65 20 6f 75 72 20 6f 77  , we have our ow
0700: 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
0710: 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e 20 6d   that works on m
0720: 6f 73 74 20 73 79 73 74 65 6d 73 2e 0a 2a 2f 0a  ost systems..*/.
0730: 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
0740: 28 64 6f 75 62 6c 65 20 78 29 7b 0a 23 69 66 20  (double x){.#if 
0750: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0760: 48 41 56 45 5f 49 53 4e 41 4e 29 0a 20 20 2f 2a  HAVE_ISNAN).  /*
0770: 0a 20 20 2a 2a 20 53 79 73 74 65 6d 73 20 74 68  .  ** Systems th
0780: 61 74 20 73 75 70 70 6f 72 74 20 74 68 65 20 69  at support the i
0790: 73 6e 61 6e 28 29 20 6c 69 62 72 61 72 79 20 66  snan() library f
07a0: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 70  unction should p
07b0: 72 6f 62 61 62 6c 79 0a 20 20 2a 2a 20 6d 61 6b  robably.  ** mak
07c0: 65 20 75 73 65 20 6f 66 20 69 74 20 62 79 20 63  e use of it by c
07d0: 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20 2d 44  ompiling with -D
07e0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41  SQLITE_HAVE_ISNA
07f0: 4e 2e 20 20 42 75 74 20 77 65 20 68 61 76 65 0a  N.  But we have.
0800: 20 20 2a 2a 20 66 6f 75 6e 64 20 74 68 61 74 20    ** found that 
0810: 6d 61 6e 79 20 73 79 73 74 65 6d 73 20 64 6f 20  many systems do 
0820: 6e 6f 74 20 68 61 76 65 20 61 20 77 6f 72 6b 69  not have a worki
0830: 6e 67 20 69 73 6e 61 6e 28 29 20 66 75 6e 63 74  ng isnan() funct
0840: 69 6f 6e 20 73 6f 0a 20 20 2a 2a 20 74 68 69 73  ion so.  ** this
0850: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0860: 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61  is provided as a
0870: 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 2e 0a 20  n alternative.. 
0880: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 4e 61   **.  ** This Na
0890: 4e 20 74 65 73 74 20 73 6f 6d 65 74 69 6d 65 73  N test sometimes
08a0: 20 66 61 69 6c 73 20 69 66 20 63 6f 6d 70 69 6c   fails if compil
08b0: 65 64 20 6f 6e 20 47 43 43 20 77 69 74 68 20 2d  ed on GCC with -
08c0: 66 66 61 73 74 2d 6d 61 74 68 2e 0a 20 20 2a 2a  ffast-math..  **
08d0: 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
08e0: 6e 64 2c 20 74 68 65 20 75 73 65 20 6f 66 20 2d  nd, the use of -
08f0: 66 66 61 73 74 2d 6d 61 74 68 20 63 6f 6d 65 73  ffast-math comes
0900: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
0910: 69 6e 67 0a 20 20 2a 2a 20 77 61 72 6e 69 6e 67  ing.  ** warning
0920: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20  :.  **.  **     
0930: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 5b 2d 66   This option [-f
0940: 66 61 73 74 2d 6d 61 74 68 5d 20 73 68 6f 75 6c  fast-math] shoul
0950: 64 20 6e 65 76 65 72 20 62 65 20 74 75 72 6e 65  d never be turne
0960: 64 20 6f 6e 20 62 79 20 61 6e 79 0a 20 20 2a 2a  d on by any.  **
0970: 20 20 20 20 20 20 2d 4f 20 6f 70 74 69 6f 6e 20        -O option 
0980: 73 69 6e 63 65 20 69 74 20 63 61 6e 20 72 65 73  since it can res
0990: 75 6c 74 20 69 6e 20 69 6e 63 6f 72 72 65 63 74  ult in incorrect
09a0: 20 6f 75 74 70 75 74 20 66 6f 72 20 70 72 6f 67   output for prog
09b0: 72 61 6d 73 0a 20 20 2a 2a 20 20 20 20 20 20 77  rams.  **      w
09c0: 68 69 63 68 20 64 65 70 65 6e 64 20 6f 6e 20 61  hich depend on a
09d0: 6e 20 65 78 61 63 74 20 69 6d 70 6c 65 6d 65 6e  n exact implemen
09e0: 74 61 74 69 6f 6e 20 6f 66 20 49 45 45 45 20 6f  tation of IEEE o
09f0: 72 20 49 53 4f 20 0a 20 20 2a 2a 20 20 20 20 20  r ISO .  **     
0a00: 20 72 75 6c 65 73 2f 73 70 65 63 69 66 69 63 61   rules/specifica
0a10: 74 69 6f 6e 73 20 66 6f 72 20 6d 61 74 68 20 66  tions for math f
0a20: 75 6e 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  unctions..  **. 
0a30: 20 2a 2a 20 55 6e 64 65 72 20 4d 53 56 43 2c 20   ** Under MSVC, 
0a40: 74 68 69 73 20 4e 61 4e 20 74 65 73 74 20 6d 61  this NaN test ma
0a50: 79 20 66 61 69 6c 20 69 66 20 63 6f 6d 70 69 6c  y fail if compil
0a60: 65 64 20 77 69 74 68 20 61 20 66 6c 6f 61 74 69  ed with a floati
0a70: 6e 67 2d 0a 20 20 2a 2a 20 70 6f 69 6e 74 20 70  ng-.  ** point p
0a80: 72 65 63 69 73 69 6f 6e 20 6d 6f 64 65 20 6f 74  recision mode ot
0a90: 68 65 72 20 74 68 61 6e 20 2f 66 70 3a 70 72 65  her than /fp:pre
0aa0: 63 69 73 65 2e 20 20 46 72 6f 6d 20 74 68 65 20  cise.  From the 
0ab0: 4d 53 44 4e 20 0a 20 20 2a 2a 20 64 6f 63 75 6d  MSDN .  ** docum
0ac0: 65 6e 74 61 74 69 6f 6e 3a 0a 20 20 2a 2a 0a 20  entation:.  **. 
0ad0: 20 2a 2a 20 20 20 20 20 20 54 68 65 20 63 6f 6d   **      The com
0ae0: 70 69 6c 65 72 20 5b 77 69 74 68 20 2f 66 70 3a  piler [with /fp:
0af0: 70 72 65 63 69 73 65 5d 20 77 69 6c 6c 20 70 72  precise] will pr
0b00: 6f 70 65 72 6c 79 20 68 61 6e 64 6c 65 20 63 6f  operly handle co
0b10: 6d 70 61 72 69 73 6f 6e 73 20 0a 20 20 2a 2a 20  mparisons .  ** 
0b20: 20 20 20 20 20 69 6e 76 6f 6c 76 69 6e 67 20 4e       involving N
0b30: 61 4e 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  aN. For example,
0b40: 20 78 20 21 3d 20 78 20 65 76 61 6c 75 61 74 65   x != x evaluate
0b50: 73 20 74 6f 20 74 72 75 65 20 69 66 20 78 20 69  s to true if x i
0b60: 73 20 4e 61 4e 20 0a 20 20 2a 2a 20 20 20 20 20  s NaN .  **     
0b70: 20 2e 2e 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66   ....  */.#ifdef
0b80: 20 5f 5f 46 41 53 54 5f 4d 41 54 48 5f 5f 0a 23   __FAST_MATH__.#
0b90: 20 65 72 72 6f 72 20 53 51 4c 69 74 65 20 77 69   error SQLite wi
0ba0: 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 63 6f 72 72  ll not work corr
0bb0: 65 63 74 6c 79 20 77 69 74 68 20 74 68 65 20 2d  ectly with the -
0bc0: 66 66 61 73 74 2d 6d 61 74 68 20 6f 70 74 69 6f  ffast-math optio
0bd0: 6e 20 6f 66 20 47 43 43 2e 0a 23 65 6e 64 69 66  n of GCC..#endif
0be0: 0a 20 20 76 6f 6c 61 74 69 6c 65 20 64 6f 75 62  .  volatile doub
0bf0: 6c 65 20 79 20 3d 20 78 3b 0a 20 20 76 6f 6c 61  le y = x;.  vola
0c00: 74 69 6c 65 20 64 6f 75 62 6c 65 20 7a 20 3d 20  tile double z = 
0c10: 79 3b 0a 20 20 72 65 74 75 72 6e 20 79 21 3d 7a  y;.  return y!=z
0c20: 3b 0a 23 65 6c 73 65 20 20 2f 2a 20 69 66 20 64  ;.#else  /* if d
0c30: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
0c40: 56 45 5f 49 53 4e 41 4e 29 20 2a 2f 0a 20 20 72  VE_ISNAN) */.  r
0c50: 65 74 75 72 6e 20 69 73 6e 61 6e 28 78 29 3b 0a  eturn isnan(x);.
0c60: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
0c70: 5f 48 41 56 45 5f 49 53 4e 41 4e 20 2a 2f 0a 7d  _HAVE_ISNAN */.}
0c80: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ../*.** Compute 
0c90: 61 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  a string length 
0ca0: 74 68 61 74 20 69 73 20 6c 69 6d 69 74 65 64 20  that is limited 
0cb0: 74 6f 20 77 68 61 74 20 63 61 6e 20 62 65 20 73  to what can be s
0cc0: 74 6f 72 65 64 20 69 6e 0a 2a 2a 20 6c 6f 77 65  tored in.** lowe
0cd0: 72 20 33 30 20 62 69 74 73 20 6f 66 20 61 20 33  r 30 bits of a 3
0ce0: 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  2-bit signed int
0cf0: 65 67 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  eger..*/.int sql
0d00: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
0d10: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63  st char *z){.  c
0d20: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 32 20 3d 20  onst char *z2 = 
0d30: 7a 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 32 20  z;.  while( *z2 
0d40: 29 7b 20 7a 32 2b 2b 3b 20 7d 0a 20 20 72 65 74  ){ z2++; }.  ret
0d50: 75 72 6e 20 30 78 33 66 66 66 66 66 66 66 20 26  urn 0x3fffffff &
0d60: 20 28 69 6e 74 29 28 7a 32 20 2d 20 7a 29 3b 0a   (int)(z2 - z);.
0d70: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
0d80: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20  the length of a 
0d90: 73 74 72 69 6e 67 2c 20 65 78 63 65 70 74 20 64  string, except d
0da0: 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 74 68 65 20  o not allow the 
0db0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 0a 2a 2a  string length.**
0dc0: 20 74 6f 20 65 78 63 65 65 64 20 74 68 65 20 53   to exceed the S
0dd0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
0de0: 54 48 20 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 69  TH setting..*/.i
0df0: 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
0e00: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
0e10: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
0e20: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 32 20 3d  const char *z2 =
0e30: 20 7a 3b 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20   z;.  int len;. 
0e40: 20 69 6e 74 20 78 3b 0a 20 20 77 68 69 6c 65 28   int x;.  while(
0e50: 20 2a 7a 32 20 29 7b 20 7a 32 2b 2b 3b 20 7d 0a   *z2 ){ z2++; }.
0e60: 20 20 78 20 3d 20 28 69 6e 74 29 28 7a 32 20 2d    x = (int)(z2 -
0e70: 20 7a 29 3b 0a 20 20 6c 65 6e 20 3d 20 30 78 37   z);.  len = 0x7
0e80: 66 66 66 66 66 66 66 20 26 20 78 3b 0a 20 20 69  fffffff & x;.  i
0e90: 66 28 20 6c 65 6e 21 3d 78 20 7c 7c 20 6c 65 6e  f( len!=x || len
0ea0: 20 3e 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51   > db->aLimit[SQ
0eb0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
0ec0: 48 5d 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  H] ){.    return
0ed0: 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
0ee0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
0ef0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
0f00: 65 74 75 72 6e 20 6c 65 6e 3b 0a 20 20 7d 0a 7d  eturn len;.  }.}
0f10: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
0f20: 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  most recent erro
0f30: 72 20 63 6f 64 65 20 61 6e 64 20 65 72 72 6f 72  r code and error
0f40: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
0f50: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
0f60: 20 22 64 62 22 2e 20 54 68 65 20 65 72 72 6f 72   "db". The error
0f70: 20 63 6f 64 65 20 69 73 20 73 65 74 20 74 6f 20   code is set to 
0f80: 22 65 72 72 5f 63 6f 64 65 22 2e 0a 2a 2a 0a 2a  "err_code"..**.*
0f90: 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  * If it is not N
0fa0: 55 4c 4c 2c 20 73 74 72 69 6e 67 20 7a 46 6f 72  ULL, string zFor
0fb0: 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  mat specifies th
0fc0: 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 0a  e format of the.
0fd0: 2a 2a 20 65 72 72 6f 72 20 73 74 72 69 6e 67 20  ** error string 
0fe0: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
0ff0: 74 68 65 20 70 72 69 6e 74 66 20 66 75 6e 63 74  the printf funct
1000: 69 6f 6e 73 3a 20 54 68 65 20 66 6f 6c 6c 6f 77  ions: The follow
1010: 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61 74 20 63 68  ing.** format ch
1020: 61 72 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c  aracters are all
1030: 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  owed:.**.**     
1040: 20 25 73 20 20 20 20 20 20 49 6e 73 65 72 74 20   %s      Insert 
1050: 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20  a string.**     
1060: 20 25 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e   %z      A strin
1070: 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  g that should be
1080: 20 66 72 65 65 64 20 61 66 74 65 72 20 75 73 65   freed after use
1090: 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20 20  .**      %d     
10a0: 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67   Insert an integ
10b0: 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20  er.**      %T   
10c0: 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65     Insert a toke
10d0: 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20  n.**      %S    
10e0: 20 20 49 6e 73 65 72 74 20 74 68 65 20 66 69 72    Insert the fir
10f0: 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
1100: 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 7a 46  SrcList.**.** zF
1110: 6f 72 6d 61 74 20 61 6e 64 20 61 6e 79 20 73 74  ormat and any st
1120: 72 69 6e 67 20 74 6f 6b 65 6e 73 20 74 68 61 74  ring tokens that
1130: 20 66 6f 6c 6c 6f 77 20 69 74 20 61 72 65 20 61   follow it are a
1140: 73 73 75 6d 65 64 20 74 6f 20 62 65 0a 2a 2a 20  ssumed to be.** 
1150: 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38  encoded in UTF-8
1160: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63 6c 65 61 72  ..**.** To clear
1170: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
1180: 20 65 72 72 6f 72 20 66 6f 72 20 73 71 6c 69 74   error for sqlit
1190: 65 20 68 61 6e 64 6c 65 20 22 64 62 22 2c 20 73  e handle "db", s
11a0: 71 6c 69 74 65 33 45 72 72 6f 72 0a 2a 2a 20 73  qlite3Error.** s
11b0: 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20  hould be called 
11c0: 77 69 74 68 20 65 72 72 5f 63 6f 64 65 20 73 65  with err_code se
11d0: 74 20 74 6f 20 53 51 4c 49 54 45 5f 4f 4b 20 61  t to SQLITE_OK a
11e0: 6e 64 20 7a 46 6f 72 6d 61 74 20 73 65 74 0a 2a  nd zFormat set.*
11f0: 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 76 6f  * to NULL..*/.vo
1200: 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
1210: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
1220: 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f 6e 73 74   err_code, const
1230: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
1240: 2e 2e 2e 29 7b 0a 20 20 69 66 28 20 64 62 20 26  ...){.  if( db &
1250: 26 20 28 64 62 2d 3e 70 45 72 72 20 7c 7c 20 28  & (db->pErr || (
1260: 64 62 2d 3e 70 45 72 72 20 3d 20 73 71 6c 69 74  db->pErr = sqlit
1270: 65 33 56 61 6c 75 65 4e 65 77 28 64 62 29 29 21  e3ValueNew(db))!
1280: 3d 30 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 65  =0) ){.    db->e
1290: 72 72 43 6f 64 65 20 3d 20 65 72 72 5f 63 6f 64  rrCode = err_cod
12a0: 65 3b 0a 20 20 20 20 69 66 28 20 7a 46 6f 72 6d  e;.    if( zForm
12b0: 61 74 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  at ){.      char
12c0: 20 2a 7a 3b 0a 20 20 20 20 20 20 76 61 5f 6c 69   *z;.      va_li
12d0: 73 74 20 61 70 3b 0a 20 20 20 20 20 20 76 61 5f  st ap;.      va_
12e0: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
12f0: 74 29 3b 0a 20 20 20 20 20 20 7a 20 3d 20 73 71  t);.      z = sq
1300: 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64 62  lite3VMPrintf(db
1310: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
1320: 20 20 20 20 20 20 76 61 5f 65 6e 64 28 61 70 29        va_end(ap)
1330: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
1340: 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d 3e 70  alueSetStr(db->p
1350: 45 72 72 2c 20 2d 31 2c 20 7a 2c 20 53 51 4c 49  Err, -1, z, SQLI
1360: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
1370: 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 7d 65  DYNAMIC);.    }e
1380: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
1390: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62  e3ValueSetStr(db
13a0: 2d 3e 70 45 72 72 2c 20 30 2c 20 30 2c 20 53 51  ->pErr, 0, 0, SQ
13b0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
13c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7d  E_STATIC);.    }
13d0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 64  .  }.}../*.** Ad
13e0: 64 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  d an error messa
13f0: 67 65 20 74 6f 20 70 50 61 72 73 65 2d 3e 7a 45  ge to pParse->zE
1400: 72 72 4d 73 67 20 61 6e 64 20 69 6e 63 72 65 6d  rrMsg and increm
1410: 65 6e 74 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  ent pParse->nErr
1420: 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ..** The followi
1430: 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20 63 68  ng formatting ch
1440: 61 72 61 63 74 65 72 73 20 61 72 65 20 61 6c 6c  aracters are all
1450: 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  owed:.**.**     
1460: 20 25 73 20 20 20 20 20 20 49 6e 73 65 72 74 20   %s      Insert 
1470: 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20 20 20  a string.**     
1480: 20 25 7a 20 20 20 20 20 20 41 20 73 74 72 69 6e   %z      A strin
1490: 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  g that should be
14a0: 20 66 72 65 65 64 20 61 66 74 65 72 20 75 73 65   freed after use
14b0: 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20 20 20  .**      %d     
14c0: 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74 65 67   Insert an integ
14d0: 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20 20 20  er.**      %T   
14e0: 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f 6b 65     Insert a toke
14f0: 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20 20 20  n.**      %S    
1500: 20 20 49 6e 73 65 72 74 20 74 68 65 20 66 69 72    Insert the fir
1510: 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
1520: 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20 54 68  SrcList.**.** Th
1530: 69 73 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75  is function shou
1540: 6c 64 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  ld be used to re
1550: 70 6f 72 74 20 61 6e 79 20 65 72 72 6f 72 20 74  port any error t
1560: 68 61 74 20 6f 63 63 75 72 73 20 77 68 69 6c 73  hat occurs whils
1570: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 61  t.** compiling a
1580: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
1590: 28 69 2e 65 2e 20 77 69 74 68 69 6e 20 73 71 6c  (i.e. within sql
15a0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 29 2e  ite3_prepare()).
15b0: 20 54 68 65 0a 2a 2a 20 6c 61 73 74 20 74 68 69   The.** last thi
15c0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 70  ng the sqlite3_p
15d0: 72 65 70 61 72 65 28 29 20 66 75 6e 63 74 69 6f  repare() functio
15e0: 6e 20 64 6f 65 73 20 69 73 20 63 6f 70 79 20 74  n does is copy t
15f0: 68 65 20 65 72 72 6f 72 0a 2a 2a 20 73 74 6f 72  he error.** stor
1600: 65 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74  ed by this funct
1610: 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ion into the dat
1620: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 75 73 69  abase handle usi
1630: 6e 67 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  ng sqlite3Error(
1640: 29 2e 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 20 73  )..** Function s
1650: 71 6c 69 74 65 33 45 72 72 6f 72 28 29 20 73 68  qlite3Error() sh
1660: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 64 75 72  ould be used dur
1670: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 65 78  ing statement ex
1680: 65 63 75 74 69 6f 6e 0a 2a 2a 20 28 73 71 6c 69  ecution.** (sqli
1690: 74 65 33 5f 73 74 65 70 28 29 20 65 74 63 2e 29  te3_step() etc.)
16a0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
16b0: 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 20  3ErrorMsg(Parse 
16c0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
16d0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
16e0: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
16f0: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1700: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1710: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
1720: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1730: 64 62 2c 20 70 50 61 72 73 65 2d 3e 7a 45 72 72  db, pParse->zErr
1740: 4d 73 67 29 3b 0a 20 20 76 61 5f 73 74 61 72 74  Msg);.  va_start
1750: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20  (ap, zFormat);. 
1760: 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67   pParse->zErrMsg
1770: 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e   = sqlite3VMPrin
1780: 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c 20  tf(db, zFormat, 
1790: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
17a0: 29 3b 0a 20 20 69 66 28 20 70 50 61 72 73 65 2d  );.  if( pParse-
17b0: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
17c0: 7b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63  {.    pParse->rc
17d0: 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17e0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c  .  }.}../*.** Cl
17f0: 65 61 72 20 74 68 65 20 65 72 72 6f 72 20 6d 65  ear the error me
1800: 73 73 61 67 65 20 69 6e 20 70 50 61 72 73 65 2c  ssage in pParse,
1810: 20 69 66 20 61 6e 79 0a 2a 2f 0a 76 6f 69 64 20   if any.*/.void 
1820: 73 71 6c 69 74 65 33 45 72 72 6f 72 43 6c 65 61  sqlite3ErrorClea
1830: 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  r(Parse *pParse)
1840: 7b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  {.  sqlite3DbFre
1850: 65 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 70 50  e(pParse->db, pP
1860: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  arse->zErrMsg);.
1870: 20 20 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73    pParse->zErrMs
1880: 67 20 3d 20 30 3b 0a 20 20 70 50 61 72 73 65 2d  g = 0;.  pParse-
1890: 3e 6e 45 72 72 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a  >nErr = 0;.}../*
18a0: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20 53  .** Convert an S
18b0: 51 4c 2d 73 74 79 6c 65 20 71 75 6f 74 65 64 20  QL-style quoted 
18c0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 6e 6f  string into a no
18d0: 72 6d 61 6c 20 73 74 72 69 6e 67 20 62 79 20 72  rmal string by r
18e0: 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74 68 65 20 71  emoving.** the q
18f0: 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73 2e  uote characters.
1900: 20 20 54 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e    The conversion
1910: 20 69 73 20 64 6f 6e 65 20 69 6e 2d 70 6c 61 63   is done in-plac
1920: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 69 6e  e.  If the.** in
1930: 70 75 74 20 64 6f 65 73 20 6e 6f 74 20 62 65 67  put does not beg
1940: 69 6e 20 77 69 74 68 20 61 20 71 75 6f 74 65 20  in with a quote 
1950: 63 68 61 72 61 63 74 65 72 2c 20 74 68 65 6e 20  character, then 
1960: 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20  this routine.** 
1970: 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a  is a no-op..**.*
1980: 2a 20 32 30 30 32 2d 46 65 62 2d 31 34 3a 20 54  * 2002-Feb-14: T
1990: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 65  his routine is e
19a0: 78 74 65 6e 64 65 64 20 74 6f 20 72 65 6d 6f 76  xtended to remov
19b0: 65 20 4d 53 2d 41 63 63 65 73 73 20 73 74 79 6c  e MS-Access styl
19c0: 65 0a 2a 2a 20 62 72 61 63 6b 65 74 73 20 66 72  e.** brackets fr
19d0: 6f 6d 20 61 72 6f 75 6e 64 20 69 64 65 6e 74 69  om around identi
19e0: 66 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  fers.  For examp
19f0: 6c 65 3a 20 20 22 5b 61 2d 62 2d 63 5d 22 20 62  le:  "[a-b-c]" b
1a00: 65 63 6f 6d 65 73 0a 2a 2a 20 22 61 2d 62 2d 63  ecomes.** "a-b-c
1a10: 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  "..*/.void sqlit
1a20: 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 20 2a  e3Dequote(char *
1a30: 7a 29 7b 0a 20 20 63 68 61 72 20 71 75 6f 74 65  z){.  char quote
1a40: 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20  ;.  int i, j;.  
1a50: 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 75 72  if( z==0 ) retur
1a60: 6e 3b 0a 20 20 71 75 6f 74 65 20 3d 20 7a 5b 30  n;.  quote = z[0
1a70: 5d 3b 0a 20 20 73 77 69 74 63 68 28 20 71 75 6f  ];.  switch( quo
1a80: 74 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27  te ){.    case '
1a90: 5c 27 27 3a 20 20 62 72 65 61 6b 3b 0a 20 20 20  \'':  break;.   
1aa0: 20 63 61 73 65 20 27 22 27 3a 20 20 20 62 72 65   case '"':   bre
1ab0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 27 60 27  ak;.    case '`'
1ac0: 3a 20 20 20 62 72 65 61 6b 3b 20 20 20 20 20 20  :   break;      
1ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
1ae0: 20 4d 79 53 51 4c 20 63 6f 6d 70 61 74 69 62 69   MySQL compatibi
1af0: 6c 69 74 79 20 2a 2f 0a 20 20 20 20 63 61 73 65  lity */.    case
1b00: 20 27 5b 27 3a 20 20 20 71 75 6f 74 65 20 3d 20   '[':   quote = 
1b10: 27 5d 27 3b 20 20 62 72 65 61 6b 3b 20 20 2f 2a  ']';  break;  /*
1b20: 20 46 6f 72 20 4d 53 20 53 71 6c 53 65 72 76 65   For MS SqlServe
1b30: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
1b40: 2a 2f 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  */.    default: 
1b50: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
1b60: 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30 3b 20 7a   for(i=1, j=0; z
1b70: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  [i]; i++){.    i
1b80: 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  f( z[i]==quote )
1b90: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b  {.      if( z[i+
1ba0: 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a 20 20 20  1]==quote ){.   
1bb0: 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 71 75       z[j++] = qu
1bc0: 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b  ote;.        i++
1bd0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1be0: 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20         z[j++] = 
1bf0: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
1c00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
1c10: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b 6a 2b 2b  lse{.      z[j++
1c20: 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 7d 0a  ] = z[i];.    }.
1c30: 20 20 7d 0a 7d 0a 0a 2f 2a 20 43 6f 6e 76 65 6e    }.}../* Conven
1c40: 69 65 6e 74 20 73 68 6f 72 74 2d 68 61 6e 64 20  ient short-hand 
1c50: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 70 70 65 72  */.#define Upper
1c60: 54 6f 4c 6f 77 65 72 20 73 71 6c 69 74 65 33 55  ToLower sqlite3U
1c70: 70 70 65 72 54 6f 4c 6f 77 65 72 0a 0a 2f 2a 0a  pperToLower../*.
1c80: 2a 2a 20 53 6f 6d 65 20 73 79 73 74 65 6d 73 20  ** Some systems 
1c90: 68 61 76 65 20 73 74 72 69 63 6d 70 28 29 2e 20  have stricmp(). 
1ca0: 20 4f 74 68 65 72 73 20 68 61 76 65 20 73 74 72   Others have str
1cb0: 63 61 73 65 63 6d 70 28 29 2e 20 20 42 65 63 61  casecmp().  Beca
1cc0: 75 73 65 0a 2a 2a 20 74 68 65 72 65 20 69 73 20  use.** there is 
1cd0: 6e 6f 20 63 6f 6e 73 69 73 74 65 6e 63 79 2c 20  no consistency, 
1ce0: 77 65 20 77 69 6c 6c 20 64 65 66 69 6e 65 20 6f  we will define o
1cf0: 75 72 20 6f 77 6e 2e 0a 2a 2f 0a 69 6e 74 20 73  ur own..*/.int s
1d00: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f  qlite3StrICmp(co
1d10: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c  nst char *zLeft,
1d20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 69   const char *zRi
1d30: 67 68 74 29 7b 0a 20 20 72 65 67 69 73 74 65 72  ght){.  register
1d40: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1d50: 61 2c 20 2a 62 3b 0a 20 20 61 20 3d 20 28 75 6e  a, *b;.  a = (un
1d60: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c  signed char *)zL
1d70: 65 66 74 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69  eft;.  b = (unsi
1d80: 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 52 69 67  gned char *)zRig
1d90: 68 74 3b 0a 20 20 77 68 69 6c 65 28 20 2a 61 21  ht;.  while( *a!
1da0: 3d 30 20 26 26 20 55 70 70 65 72 54 6f 4c 6f 77  =0 && UpperToLow
1db0: 65 72 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c  er[*a]==UpperToL
1dc0: 6f 77 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20  ower[*b]){ a++; 
1dd0: 62 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20  b++; }.  return 
1de0: 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d  UpperToLower[*a]
1df0: 20 2d 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b   - UpperToLower[
1e00: 2a 62 5d 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  *b];.}.int sqlit
1e10: 65 33 53 74 72 4e 49 43 6d 70 28 63 6f 6e 73 74  e3StrNICmp(const
1e20: 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f   char *zLeft, co
1e30: 6e 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74  nst char *zRight
1e40: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 67 69  , int N){.  regi
1e50: 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 63 68  ster unsigned ch
1e60: 61 72 20 2a 61 2c 20 2a 62 3b 0a 20 20 61 20 3d  ar *a, *b;.  a =
1e70: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
1e80: 2a 29 7a 4c 65 66 74 3b 0a 20 20 62 20 3d 20 28  *)zLeft;.  b = (
1e90: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29  unsigned char *)
1ea0: 7a 52 69 67 68 74 3b 0a 20 20 77 68 69 6c 65 28  zRight;.  while(
1eb0: 20 4e 2d 2d 20 3e 20 30 20 26 26 20 2a 61 21 3d   N-- > 0 && *a!=
1ec0: 30 20 26 26 20 55 70 70 65 72 54 6f 4c 6f 77 65  0 && UpperToLowe
1ed0: 72 5b 2a 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f  r[*a]==UpperToLo
1ee0: 77 65 72 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62  wer[*b]){ a++; b
1ef0: 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 4e  ++; }.  return N
1f00: 3c 30 20 3f 20 30 20 3a 20 55 70 70 65 72 54 6f  <0 ? 0 : UpperTo
1f10: 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20 55 70 70 65  Lower[*a] - Uppe
1f20: 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a  rToLower[*b];.}.
1f30: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52  ./*.** Return TR
1f40: 55 45 20 69 66 20 7a 20 69 73 20 61 20 70 75 72  UE if z is a pur
1f50: 65 20 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67  e numeric string
1f60: 2e 20 20 52 65 74 75 72 6e 20 46 41 4c 53 45 20  .  Return FALSE 
1f70: 69 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  if the.** string
1f80: 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 63 68   contains any ch
1f90: 61 72 61 63 74 65 72 20 77 68 69 63 68 20 69 73  aracter which is
1fa0: 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 61 20 6e   not part of a n
1fb0: 75 6d 62 65 72 2e 20 49 66 0a 2a 2a 20 74 68 65  umber. If.** the
1fc0: 20 73 74 72 69 6e 67 20 69 73 20 6e 75 6d 65 72   string is numer
1fd0: 69 63 20 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20  ic and contains 
1fe0: 74 68 65 20 27 2e 27 20 63 68 61 72 61 63 74 65  the '.' characte
1ff0: 72 2c 20 73 65 74 20 2a 72 65 61 6c 6e 75 6d 0a  r, set *realnum.
2000: 2a 2a 20 74 6f 20 54 52 55 45 20 28 6f 74 68 65  ** to TRUE (othe
2010: 72 77 69 73 65 20 46 41 4c 53 45 29 2e 0a 2a 2a  rwise FALSE)..**
2020: 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72  .** An empty str
2030: 69 6e 67 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ing is considere
2040: 64 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 2e 0a 2a  d non-numeric..*
2050: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e  /.int sqlite3IsN
2060: 75 6d 62 65 72 28 63 6f 6e 73 74 20 63 68 61 72  umber(const char
2070: 20 2a 7a 2c 20 69 6e 74 20 2a 72 65 61 6c 6e 75   *z, int *realnu
2080: 6d 2c 20 75 38 20 65 6e 63 29 7b 0a 20 20 69 6e  m, u8 enc){.  in
2090: 74 20 69 6e 63 72 20 3d 20 28 65 6e 63 3d 3d 53  t incr = (enc==S
20a0: 51 4c 49 54 45 5f 55 54 46 38 3f 31 3a 32 29 3b  QLITE_UTF8?1:2);
20b0: 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49  .  if( enc==SQLI
20c0: 54 45 5f 55 54 46 31 36 42 45 20 29 20 7a 2b 2b  TE_UTF16BE ) z++
20d0: 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20  ;.  if( *z=='-' 
20e0: 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29 20 7a 20 2b  || *z=='+' ) z +
20f0: 3d 20 69 6e 63 72 3b 0a 20 20 69 66 28 20 21 73  = incr;.  if( !s
2100: 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a  qlite3Isdigit(*z
2110: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
2120: 30 3b 0a 20 20 7d 0a 20 20 7a 20 2b 3d 20 69 6e  0;.  }.  z += in
2130: 63 72 3b 0a 20 20 69 66 28 20 72 65 61 6c 6e 75  cr;.  if( realnu
2140: 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 30  m ) *realnum = 0
2150: 3b 0a 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74  ;.  while( sqlit
2160: 65 33 49 73 64 69 67 69 74 28 2a 7a 29 20 29 7b  e3Isdigit(*z) ){
2170: 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d 0a 20 20   z += incr; }.  
2180: 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20  if( *z=='.' ){. 
2190: 20 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20     z += incr;.  
21a0: 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 49 73    if( !sqlite3Is
21b0: 64 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75  digit(*z) ) retu
21c0: 72 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28  rn 0;.    while(
21d0: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
21e0: 2a 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72  *z) ){ z += incr
21f0: 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c  ; }.    if( real
2200: 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d  num ) *realnum =
2210: 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a   1;.  }.  if( *z
2220: 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27  =='e' || *z=='E'
2230: 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20 69 6e 63   ){.    z += inc
2240: 72 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27  r;.    if( *z=='
2250: 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20  +' || *z=='-' ) 
2260: 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20 20 20 69  z += incr;.    i
2270: 66 28 20 21 73 71 6c 69 74 65 33 49 73 64 69 67  f( !sqlite3Isdig
2280: 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20  it(*z) ) return 
2290: 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 73 71  0;.    while( sq
22a0: 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29  lite3Isdigit(*z)
22b0: 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d   ){ z += incr; }
22c0: 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d  .    if( realnum
22d0: 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b   ) *realnum = 1;
22e0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a  .  }.  return *z
22f0: 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  ==0;.}../*.** Th
2300: 65 20 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20  e string z[] is 
2310: 61 6e 20 61 73 63 69 69 20 72 65 70 72 65 73 65  an ascii represe
2320: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 72 65 61  ntation of a rea
2330: 6c 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f 6e  l number..** Con
2340: 76 65 72 74 20 74 68 69 73 20 73 74 72 69 6e 67  vert this string
2350: 20 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2a   to a double..**
2360: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
2370: 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 7a 5b   assumes that z[
2380: 5d 20 72 65 61 6c 6c 79 20 69 73 20 61 20 76 61  ] really is a va
2390: 6c 69 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20  lid number.  If 
23a0: 69 74 0a 2a 2a 20 69 73 20 6e 6f 74 2c 20 74 68  it.** is not, th
23b0: 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65  e result is unde
23c0: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  fined..**.** Thi
23d0: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65  s routine is use
23e0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  d instead of the
23f0: 20 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29 20   library atof() 
2400: 66 75 6e 63 74 69 6f 6e 20 62 65 63 61 75 73 65  function because
2410: 0a 2a 2a 20 74 68 65 20 6c 69 62 72 61 72 79 20  .** the library 
2420: 61 74 6f 66 28 29 20 6d 69 67 68 74 20 77 61 6e  atof() might wan
2430: 74 20 74 6f 20 75 73 65 20 22 2c 22 20 61 73 20  t to use "," as 
2440: 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
2450: 74 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20  t instead.** of 
2460: 22 2e 22 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  "." depending on
2470: 20 68 6f 77 20 6c 6f 63 61 6c 65 20 69 73 20 73   how locale is s
2480: 65 74 2e 20 20 42 75 74 20 74 68 61 74 20 77 6f  et.  But that wo
2490: 75 6c 64 20 63 61 75 73 65 20 70 72 6f 62 6c 65  uld cause proble
24a0: 6d 73 0a 2a 2a 20 66 6f 72 20 53 51 4c 2e 20 20  ms.** for SQL.  
24b0: 53 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  So this routine 
24c0: 61 6c 77 61 79 73 20 75 73 65 73 20 22 2e 22 20  always uses "." 
24d0: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
24e0: 63 61 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  cale..*/.int sql
24f0: 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
2500: 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 20 2a  har *z, double *
2510: 70 52 65 73 75 6c 74 29 7b 0a 23 69 66 6e 64 65  pResult){.#ifnde
2520: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2530: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
2540: 6e 74 20 73 69 67 6e 20 3d 20 31 3b 0a 20 20 63  nt sign = 1;.  c
2550: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42 65 67 69  onst char *zBegi
2560: 6e 20 3d 20 7a 3b 0a 20 20 4c 4f 4e 47 44 4f 55  n = z;.  LONGDOU
2570: 42 4c 45 5f 54 59 50 45 20 76 31 20 3d 20 30 2e  BLE_TYPE v1 = 0.
2580: 30 3b 0a 20 20 69 6e 74 20 6e 53 69 67 6e 69 66  0;.  int nSignif
2590: 69 63 61 6e 74 20 3d 20 30 3b 0a 20 20 77 68 69  icant = 0;.  whi
25a0: 6c 65 28 20 73 71 6c 69 74 65 33 49 73 73 70 61  le( sqlite3Isspa
25b0: 63 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20  ce(*z) ) z++;.  
25c0: 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 29 7b 0a 20  if( *z=='-' ){. 
25d0: 20 20 20 73 69 67 6e 20 3d 20 2d 31 3b 0a 20 20     sign = -1;.  
25e0: 20 20 7a 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69    z++;.  }else i
25f0: 66 28 20 2a 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20  f( *z=='+' ){.  
2600: 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 77 68 69    z++;.  }.  whi
2610: 6c 65 28 20 7a 5b 30 5d 3d 3d 27 30 27 20 29 7b  le( z[0]=='0' ){
2620: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20  .    z++;.  }.  
2630: 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33 49 73  while( sqlite3Is
2640: 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20  digit(*z) ){.   
2650: 20 76 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b 20   v1 = v1*10.0 + 
2660: 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20 20  (*z - '0');.    
2670: 7a 2b 2b 3b 0a 20 20 20 20 6e 53 69 67 6e 69 66  z++;.    nSignif
2680: 69 63 61 6e 74 2b 2b 3b 0a 20 20 7d 0a 20 20 69  icant++;.  }.  i
2690: 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20  f( *z=='.' ){.  
26a0: 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50    LONGDOUBLE_TYP
26b0: 45 20 64 69 76 69 73 6f 72 20 3d 20 31 2e 30 3b  E divisor = 1.0;
26c0: 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 69 66  .    z++;.    if
26d0: 28 20 6e 53 69 67 6e 69 66 69 63 61 6e 74 3d 3d  ( nSignificant==
26e0: 30 20 29 7b 0a 20 20 20 20 20 20 77 68 69 6c 65  0 ){.      while
26f0: 28 20 7a 5b 30 5d 3d 3d 27 30 27 20 29 7b 0a 20  ( z[0]=='0' ){. 
2700: 20 20 20 20 20 20 20 64 69 76 69 73 6f 72 20 2a         divisor *
2710: 3d 20 31 30 2e 30 3b 0a 20 20 20 20 20 20 20 20  = 10.0;.        
2720: 7a 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  z++;.      }.   
2730: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 73 71   }.    while( sq
2740: 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29  lite3Isdigit(*z)
2750: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 53   ){.      if( nS
2760: 69 67 6e 69 66 69 63 61 6e 74 3c 31 38 20 29 7b  ignificant<18 ){
2770: 0a 20 20 20 20 20 20 20 20 76 31 20 3d 20 76 31  .        v1 = v1
2780: 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d 20 27 30  *10.0 + (*z - '0
2790: 27 29 3b 0a 20 20 20 20 20 20 20 20 64 69 76 69  ');.        divi
27a0: 73 6f 72 20 2a 3d 20 31 30 2e 30 3b 0a 20 20 20  sor *= 10.0;.   
27b0: 20 20 20 20 20 6e 53 69 67 6e 69 66 69 63 61 6e       nSignifican
27c0: 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  t++;.      }.   
27d0: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20     z++;.    }.  
27e0: 20 20 76 31 20 2f 3d 20 64 69 76 69 73 6f 72 3b    v1 /= divisor;
27f0: 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27  .  }.  if( *z=='
2800: 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b  e' || *z=='E' ){
2810: 0a 20 20 20 20 69 6e 74 20 65 73 69 67 6e 20 3d  .    int esign =
2820: 20 31 3b 0a 20 20 20 20 69 6e 74 20 65 76 61 6c   1;.    int eval
2830: 20 3d 20 30 3b 0a 20 20 20 20 4c 4f 4e 47 44 4f   = 0;.    LONGDO
2840: 55 42 4c 45 5f 54 59 50 45 20 73 63 61 6c 65 20  UBLE_TYPE scale 
2850: 3d 20 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b 0a  = 1.0;.    z++;.
2860: 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20      if( *z=='-' 
2870: 29 7b 0a 20 20 20 20 20 20 65 73 69 67 6e 20 3d  ){.      esign =
2880: 20 2d 31 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a   -1;.      z++;.
2890: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a      }else if( *z
28a0: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 20 20 7a  =='+' ){.      z
28b0: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68  ++;.    }.    wh
28c0: 69 6c 65 28 20 73 71 6c 69 74 65 33 49 73 64 69  ile( sqlite3Isdi
28d0: 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 20  git(*z) ){.     
28e0: 20 65 76 61 6c 20 3d 20 65 76 61 6c 2a 31 30 20   eval = eval*10 
28f0: 2b 20 2a 7a 20 2d 20 27 30 27 3b 0a 20 20 20 20  + *z - '0';.    
2900: 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20    z++;.    }.   
2910: 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 36 34   while( eval>=64
2920: 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30   ){ scale *= 1.0
2930: 65 2b 36 34 3b 20 65 76 61 6c 20 2d 3d 20 36 34  e+64; eval -= 64
2940: 3b 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65  ; }.    while( e
2950: 76 61 6c 3e 3d 31 36 20 29 7b 20 73 63 61 6c 65  val>=16 ){ scale
2960: 20 2a 3d 20 31 2e 30 65 2b 31 36 3b 20 65 76 61   *= 1.0e+16; eva
2970: 6c 20 2d 3d 20 31 36 3b 20 7d 0a 20 20 20 20 77  l -= 16; }.    w
2980: 68 69 6c 65 28 20 65 76 61 6c 3e 3d 34 20 29 7b  hile( eval>=4 ){
2990: 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 34   scale *= 1.0e+4
29a0: 3b 20 65 76 61 6c 20 2d 3d 20 34 3b 20 7d 0a 20  ; eval -= 4; }. 
29b0: 20 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d     while( eval>=
29c0: 31 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e  1 ){ scale *= 1.
29d0: 30 65 2b 31 3b 20 65 76 61 6c 20 2d 3d 20 31 3b  0e+1; eval -= 1;
29e0: 20 7d 0a 20 20 20 20 69 66 28 20 65 73 69 67 6e   }.    if( esign
29f0: 3c 30 20 29 7b 0a 20 20 20 20 20 20 76 31 20 2f  <0 ){.      v1 /
2a00: 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d 65 6c  = scale;.    }el
2a10: 73 65 7b 0a 20 20 20 20 20 20 76 31 20 2a 3d 20  se{.      v1 *= 
2a20: 73 63 61 6c 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  scale;.    }.  }
2a30: 0a 20 20 2a 70 52 65 73 75 6c 74 20 3d 20 28 64  .  *pResult = (d
2a40: 6f 75 62 6c 65 29 28 73 69 67 6e 3c 30 20 3f 20  ouble)(sign<0 ? 
2a50: 2d 76 31 20 3a 20 76 31 29 3b 0a 20 20 72 65 74  -v1 : v1);.  ret
2a60: 75 72 6e 20 28 69 6e 74 29 28 7a 20 2d 20 7a 42  urn (int)(z - zB
2a70: 65 67 69 6e 29 3b 0a 23 65 6c 73 65 0a 20 20 72  egin);.#else.  r
2a80: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 74 6f  eturn sqlite3Ato
2a90: 69 36 34 28 7a 2c 20 70 52 65 73 75 6c 74 29 3b  i64(z, pResult);
2aa0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2ab0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
2ac0: 50 4f 49 4e 54 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a  POINT */.}../*.*
2ad0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 31 39  * Compare the 19
2ae0: 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e  -character strin
2af0: 67 20 7a 4e 75 6d 20 61 67 61 69 6e 73 74 20 74  g zNum against t
2b00: 68 65 20 74 65 78 74 20 72 65 70 72 65 73 65 6e  he text represen
2b10: 74 61 74 69 6f 6e 0a 2a 2a 20 76 61 6c 75 65 20  tation.** value 
2b20: 32 5e 36 33 3a 20 20 39 32 32 33 33 37 32 30 33  2^63:  922337203
2b30: 36 38 35 34 37 37 35 38 30 38 2e 20 20 52 65 74  6854775808.  Ret
2b40: 75 72 6e 20 6e 65 67 61 74 69 76 65 2c 20 7a 65  urn negative, ze
2b50: 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 0a  ro, or positive.
2b60: 2a 2a 20 69 66 20 7a 4e 75 6d 20 69 73 20 6c 65  ** if zNum is le
2b70: 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74  ss than, equal t
2b80: 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
2b90: 61 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 0a 2a  an the string..*
2ba0: 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 6d 65 6d 63  *.** Unlike memc
2bb0: 6d 70 28 29 20 74 68 69 73 20 72 6f 75 74 69 6e  mp() this routin
2bc0: 65 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  e is guaranteed 
2bd0: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 64 69  to return the di
2be0: 66 66 65 72 65 6e 63 65 0a 2a 2a 20 69 6e 20 74  fference.** in t
2bf0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  he values of the
2c00: 20 6c 61 73 74 20 64 69 67 69 74 20 69 66 20 74   last digit if t
2c10: 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
2c20: 63 65 20 69 73 20 69 6e 20 74 68 65 0a 2a 2a 20  ce is in the.** 
2c30: 6c 61 73 74 20 64 69 67 69 74 2e 20 20 53 6f 2c  last digit.  So,
2c40: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 2a 2a   for example,.**
2c50: 0a 2a 2a 20 20 20 20 20 20 63 6f 6d 70 61 72 65  .**      compare
2c60: 32 70 6f 77 36 33 28 22 39 32 32 33 33 37 32 30  2pow63("92233720
2c70: 33 36 38 35 34 37 37 35 38 30 30 22 29 0a 2a 2a  36854775800").**
2c80: 0a 2a 2a 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  .** will return 
2c90: 2d 38 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  -8..*/.static in
2ca0: 74 20 63 6f 6d 70 61 72 65 32 70 6f 77 36 33 28  t compare2pow63(
2cb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d  const char *zNum
2cc0: 29 7b 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20  ){.  int c;.  c 
2cd0: 3d 20 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39  = memcmp(zNum,"9
2ce0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
2cf0: 30 22 2c 31 38 29 3b 0a 20 20 69 66 28 20 63 3d  0",18);.  if( c=
2d00: 3d 30 20 29 7b 0a 20 20 20 20 63 20 3d 20 7a 4e  =0 ){.    c = zN
2d10: 75 6d 5b 31 38 5d 20 2d 20 27 38 27 3b 0a 20 20  um[18] - '8';.  
2d20: 7d 0a 20 20 72 65 74 75 72 6e 20 63 3b 0a 7d 0a  }.  return c;.}.
2d30: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54  ../*.** Return T
2d40: 52 55 45 20 69 66 20 7a 4e 75 6d 20 69 73 20 61  RUE if zNum is a
2d50: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
2d60: 6e 74 65 67 65 72 20 61 6e 64 20 77 72 69 74 65  nteger and write
2d70: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
2d80: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 74   the integer int
2d90: 6f 20 2a 70 4e 75 6d 2e 20 20 49 66 20 7a 4e 75  o *pNum.  If zNu
2da0: 6d 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  m is not an inte
2db0: 67 65 72 0a 2a 2a 20 6f 72 20 69 73 20 61 6e 20  ger.** or is an 
2dc0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
2dd0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20  too large to be 
2de0: 65 78 70 72 65 73 73 65 64 20 77 69 74 68 20 36  expressed with 6
2df0: 34 20 62 69 74 73 2c 0a 2a 2a 20 74 68 65 6e 20  4 bits,.** then 
2e00: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a  return false..**
2e10: 0a 2a 2a 20 57 68 65 6e 20 74 68 69 73 20 72 6f  .** When this ro
2e20: 75 74 69 6e 65 20 77 61 73 20 6f 72 69 67 69 6e  utine was origin
2e30: 61 6c 6c 79 20 77 72 69 74 74 65 6e 20 69 74 20  ally written it 
2e40: 64 65 61 6c 74 20 77 69 74 68 20 6f 6e 6c 79 0a  dealt with only.
2e50: 2a 2a 20 33 32 2d 62 69 74 20 6e 75 6d 62 65 72  ** 32-bit number
2e60: 73 2e 20 20 41 74 20 74 68 61 74 20 74 69 6d 65  s.  At that time
2e70: 2c 20 69 74 20 77 61 73 20 6d 75 63 68 20 66 61  , it was much fa
2e80: 73 74 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a  ster than the.**
2e90: 20 61 74 6f 69 28 29 20 6c 69 62 72 61 72 79 20   atoi() library 
2ea0: 72 6f 75 74 69 6e 65 20 69 6e 20 52 65 64 48 61  routine in RedHa
2eb0: 74 20 37 2e 32 2e 0a 2a 2f 0a 69 6e 74 20 73 71  t 7.2..*/.int sq
2ec0: 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
2ed0: 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36  t char *zNum, i6
2ee0: 34 20 2a 70 4e 75 6d 29 7b 0a 20 20 69 36 34 20  4 *pNum){.  i64 
2ef0: 76 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 65 67  v = 0;.  int neg
2f00: 3b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20  ;.  int i, c;.  
2f10: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
2f20: 72 74 3b 0a 20 20 77 68 69 6c 65 28 20 73 71 6c  rt;.  while( sql
2f30: 69 74 65 33 49 73 73 70 61 63 65 28 2a 7a 4e 75  ite3Isspace(*zNu
2f40: 6d 29 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 69  m) ) zNum++;.  i
2f50: 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29 7b  f( *zNum=='-' ){
2f60: 0a 20 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20  .    neg = 1;.  
2f70: 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73    zNum++;.  }els
2f80: 65 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  e if( *zNum=='+'
2f90: 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20 30 3b   ){.    neg = 0;
2fa0: 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d  .    zNum++;.  }
2fb0: 65 6c 73 65 7b 0a 20 20 20 20 6e 65 67 20 3d 20  else{.    neg = 
2fc0: 30 3b 0a 20 20 7d 0a 20 20 7a 53 74 61 72 74 20  0;.  }.  zStart 
2fd0: 3d 20 7a 4e 75 6d 3b 0a 20 20 77 68 69 6c 65 28  = zNum;.  while(
2fe0: 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 30 27 20 29 7b   zNum[0]=='0' ){
2ff0: 20 7a 4e 75 6d 2b 2b 3b 20 7d 20 2f 2a 20 53 6b   zNum++; } /* Sk
3000: 69 70 20 6f 76 65 72 20 6c 65 61 64 69 6e 67 20  ip over leading 
3010: 7a 65 72 6f 73 2e 20 54 69 63 6b 65 74 20 23 32  zeros. Ticket #2
3020: 34 35 34 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30  454 */.  for(i=0
3030: 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27  ; (c=zNum[i])>='
3040: 30 27 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b  0' && c<='9'; i+
3050: 2b 29 7b 0a 20 20 20 20 76 20 3d 20 76 2a 31 30  +){.    v = v*10
3060: 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 7d 0a   + c - '0';.  }.
3070: 20 20 2a 70 4e 75 6d 20 3d 20 6e 65 67 20 3f 20    *pNum = neg ? 
3080: 2d 76 20 3a 20 76 3b 0a 20 20 69 66 28 20 63 21  -v : v;.  if( c!
3090: 3d 30 20 7c 7c 20 28 69 3d 3d 30 20 26 26 20 7a  =0 || (i==0 && z
30a0: 53 74 61 72 74 3d 3d 7a 4e 75 6d 29 20 7c 7c 20  Start==zNum) || 
30b0: 69 3e 31 39 20 29 7b 0a 20 20 20 20 2f 2a 20 7a  i>19 ){.    /* z
30c0: 4e 75 6d 20 69 73 20 65 6d 70 74 79 20 6f 72 20  Num is empty or 
30d0: 63 6f 6e 74 61 69 6e 73 20 6e 6f 6e 2d 6e 75 6d  contains non-num
30e0: 65 72 69 63 20 74 65 78 74 20 6f 72 20 69 73 20  eric text or is 
30f0: 6c 6f 6e 67 65 72 0a 20 20 20 20 2a 2a 20 74 68  longer.    ** th
3100: 61 6e 20 31 39 20 64 69 67 69 74 73 20 28 74 68  an 19 digits (th
3110: 75 73 20 67 75 61 72 61 6e 74 69 6e 67 20 74 68  us guaranting th
3120: 61 74 20 69 74 20 69 73 20 74 6f 6f 20 6c 61 72  at it is too lar
3130: 67 65 29 20 2a 2f 0a 20 20 20 20 72 65 74 75 72  ge) */.    retur
3140: 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  n 0;.  }else if(
3150: 20 69 3c 31 39 20 29 7b 0a 20 20 20 20 2f 2a 20   i<19 ){.    /* 
3160: 4c 65 73 73 20 74 68 61 6e 20 31 39 20 64 69 67  Less than 19 dig
3170: 69 74 73 2c 20 73 6f 20 77 65 20 6b 6e 6f 77 20  its, so we know 
3180: 74 68 61 74 20 69 74 20 66 69 74 73 20 69 6e 20  that it fits in 
3190: 36 34 20 62 69 74 73 20 2a 2f 0a 20 20 20 20 72  64 bits */.    r
31a0: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73 65  eturn 1;.  }else
31b0: 7b 0a 20 20 20 20 2f 2a 20 31 39 2d 64 69 67 69  {.    /* 19-digi
31c0: 74 20 6e 75 6d 62 65 72 73 20 6d 75 73 74 20 62  t numbers must b
31d0: 65 20 6e 6f 20 6c 61 72 67 65 72 20 74 68 61 6e  e no larger than
31e0: 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37   922337203685477
31f0: 35 38 30 37 20 69 66 20 70 6f 73 69 74 69 76 65  5807 if positive
3200: 0a 20 20 20 20 2a 2a 20 6f 72 20 39 32 32 33 33  .    ** or 92233
3210: 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20 69  72036854775808 i
3220: 66 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74  f negative.  Not
3230: 65 20 74 68 61 74 20 39 32 32 33 33 37 32 30 33  e that 922337203
3240: 36 38 35 34 36 36 35 38 30 38 0a 20 20 20 20 2a  6854665808.    *
3250: 2a 20 69 73 20 32 5e 36 33 2e 20 2a 2f 0a 20 20  * is 2^63. */.  
3260: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 61 72 65    return compare
3270: 32 70 6f 77 36 33 28 7a 4e 75 6d 29 3c 6e 65 67  2pow63(zNum)<neg
3280: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  ;.  }.}../*.** T
3290: 68 65 20 73 74 72 69 6e 67 20 7a 4e 75 6d 20 72  he string zNum r
32a0: 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74  epresents an int
32b0: 65 67 65 72 2e 20 20 54 68 65 72 65 20 6d 69 67  eger.  There mig
32c0: 68 74 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  ht be some other
32d0: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
32e0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 69 6e  following the in
32f0: 74 65 67 65 72 20 74 6f 6f 2c 20 62 75 74 20 74  teger too, but t
3300: 68 61 74 20 70 61 72 74 20 69 73 20 69 67 6e 6f  hat part is igno
3310: 72 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69  red..** If the i
3320: 6e 74 65 67 65 72 20 74 68 61 74 20 74 68 65 20  nteger that the 
3330: 70 72 65 66 69 78 20 6f 66 20 7a 4e 75 6d 20 72  prefix of zNum r
3340: 65 70 72 65 73 65 6e 74 73 20 77 69 6c 6c 20 66  epresents will f
3350: 69 74 20 69 6e 20 61 0a 2a 2a 20 36 34 2d 62 69  it in a.** 64-bi
3360: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3370: 2c 20 72 65 74 75 72 6e 20 54 52 55 45 2e 20 20  , return TRUE.  
3380: 4f 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e  Otherwise return
3390: 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a 2a 20 54 68   FALSE..**.** Th
33a0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
33b0: 6e 73 20 46 41 4c 53 45 20 66 6f 72 20 74 68 65  ns FALSE for the
33c0: 20 73 74 72 69 6e 67 20 2d 39 32 32 33 33 37 32   string -9223372
33d0: 30 33 36 38 35 34 37 37 35 38 30 38 20 65 76 65  036854775808 eve
33e0: 6e 20 74 68 61 74 0a 2a 2a 20 74 68 61 74 20 6e  n that.** that n
33f0: 75 6d 62 65 72 20 77 69 6c 6c 2c 20 69 6e 20 74  umber will, in t
3400: 68 65 6f 72 79 20 66 69 74 20 69 6e 20 61 20 36  heory fit in a 6
3410: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 2e 20 20  4-bit integer.  
3420: 50 6f 73 69 74 69 76 65 0a 2a 2a 20 39 32 32 33  Positive.** 9223
3430: 33 37 33 30 33 36 38 35 34 37 37 35 38 30 38 20  373036854775808 
3440: 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20  will not fit in 
3450: 36 34 20 62 69 74 73 2e 20 20 53 6f 20 69 74 20  64 bits.  So it 
3460: 73 65 65 6d 73 20 73 61 66 65 72 20 74 6f 20 72  seems safer to r
3470: 65 74 75 72 6e 0a 2a 2a 20 66 61 6c 73 65 2e 0a  eturn.** false..
3480: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  */.int sqlite3Fi
3490: 74 73 49 6e 36 34 42 69 74 73 28 63 6f 6e 73 74  tsIn64Bits(const
34a0: 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 6e 74   char *zNum, int
34b0: 20 6e 65 67 46 6c 61 67 29 7b 0a 20 20 69 6e 74   negFlag){.  int
34c0: 20 69 2c 20 63 3b 0a 20 20 69 6e 74 20 6e 65 67   i, c;.  int neg
34d0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 2a 7a 4e 75   = 0;.  if( *zNu
34e0: 6d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65  m=='-' ){.    ne
34f0: 67 20 3d 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b  g = 1;.    zNum+
3500: 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a  +;.  }else if( *
3510: 7a 4e 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20  zNum=='+' ){.   
3520: 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 0a 20 20 69   zNum++;.  }.  i
3530: 66 28 20 6e 65 67 46 6c 61 67 20 29 20 6e 65 67  f( negFlag ) neg
3540: 20 3d 20 31 2d 6e 65 67 3b 0a 20 20 77 68 69 6c   = 1-neg;.  whil
3550: 65 28 20 2a 7a 4e 75 6d 3d 3d 27 30 27 20 29 7b  e( *zNum=='0' ){
3560: 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 20 20 20 2f  .    zNum++;   /
3570: 2a 20 53 6b 69 70 20 6c 65 61 64 69 6e 67 20 7a  * Skip leading z
3580: 65 72 6f 73 2e 20 20 54 69 63 6b 65 74 20 23 32  eros.  Ticket #2
3590: 34 35 34 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72  454 */.  }.  for
35a0: 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b 69 5d  (i=0; (c=zNum[i]
35b0: 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  )>='0' && c<='9'
35c0: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 69  ; i++){}.  if( i
35d0: 3c 31 39 20 29 7b 0a 20 20 20 20 2f 2a 20 47 75  <19 ){.    /* Gu
35e0: 61 72 61 6e 74 65 65 64 20 74 6f 20 66 69 74 20  aranteed to fit 
35f0: 69 66 20 6c 65 73 73 20 74 68 61 6e 20 31 39 20  if less than 19 
3600: 64 69 67 69 74 73 20 2a 2f 0a 20 20 20 20 72 65  digits */.    re
3610: 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73 65 20  turn 1;.  }else 
3620: 69 66 28 20 69 3e 31 39 20 29 7b 0a 20 20 20 20  if( i>19 ){.    
3630: 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 74 6f  /* Guaranteed to
3640: 20 62 65 20 74 6f 6f 20 62 69 67 20 69 66 20 67   be too big if g
3650: 72 65 61 74 65 72 20 74 68 61 6e 20 31 39 20 64  reater than 19 d
3660: 69 67 69 74 73 20 2a 2f 0a 20 20 20 20 72 65 74  igits */.    ret
3670: 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  urn 0;.  }else{.
3680: 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 65 20 61      /* Compare a
3690: 67 61 69 6e 73 74 20 32 5e 36 33 2e 20 2a 2f 0a  gainst 2^63. */.
36a0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 61      return compa
36b0: 72 65 32 70 6f 77 36 33 28 7a 4e 75 6d 29 3c 6e  re2pow63(zNum)<n
36c0: 65 67 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  eg;.  }.}../*.**
36d0: 20 49 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65   If zNum represe
36e0: 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74  nts an integer t
36f0: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
3700: 33 32 2d 62 69 74 73 2c 20 74 68 65 6e 20 73 65  32-bits, then se
3710: 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20  t.** *pValue to 
3720: 74 68 61 74 20 69 6e 74 65 67 65 72 20 61 6e 64  that integer and
3730: 20 72 65 74 75 72 6e 20 74 72 75 65 2e 20 20 4f   return true.  O
3740: 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20  therwise return 
3750: 66 61 6c 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 79  false..**.** Any
3760: 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 63 68 61   non-numeric cha
3770: 72 61 63 74 65 72 73 20 74 68 61 74 20 66 6f 6c  racters that fol
3780: 6c 6f 77 69 6e 67 20 7a 4e 75 6d 20 61 72 65 20  lowing zNum are 
3790: 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 54 68 69 73  ignored..** This
37a0: 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
37b0: 6f 6d 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  om sqlite3Atoi64
37c0: 28 29 20 77 68 69 63 68 20 72 65 71 75 69 72 65  () which require
37d0: 73 20 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20 6e  s the.** input n
37e0: 75 6d 62 65 72 20 74 6f 20 62 65 20 7a 65 72 6f  umber to be zero
37f0: 2d 74 65 72 6d 69 6e 61 74 65 64 2e 0a 2a 2f 0a  -terminated..*/.
3800: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
3810: 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
3820: 7a 4e 75 6d 2c 20 69 6e 74 20 2a 70 56 61 6c 75  zNum, int *pValu
3830: 65 29 7b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74  e){.  sqlite_int
3840: 36 34 20 76 20 3d 20 30 3b 0a 20 20 69 6e 74 20  64 v = 0;.  int 
3850: 69 2c 20 63 3b 0a 20 20 69 6e 74 20 6e 65 67 20  i, c;.  int neg 
3860: 3d 20 30 3b 0a 20 20 69 66 28 20 7a 4e 75 6d 5b  = 0;.  if( zNum[
3870: 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 6e  0]=='-' ){.    n
3880: 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a 4e 75 6d  eg = 1;.    zNum
3890: 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ++;.  }else if( 
38a0: 7a 4e 75 6d 5b 30 5d 3d 3d 27 2b 27 20 29 7b 0a  zNum[0]=='+' ){.
38b0: 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 0a      zNum++;.  }.
38c0: 20 20 77 68 69 6c 65 28 20 7a 4e 75 6d 5b 30 5d    while( zNum[0]
38d0: 3d 3d 27 30 27 20 29 20 7a 4e 75 6d 2b 2b 3b 0a  =='0' ) zNum++;.
38e0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 31 20    for(i=0; i<11 
38f0: 26 26 20 28 63 20 3d 20 7a 4e 75 6d 5b 69 5d 20  && (c = zNum[i] 
3900: 2d 20 27 30 27 29 3e 3d 30 20 26 26 20 63 3c 3d  - '0')>=0 && c<=
3910: 39 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76 20 3d  9; i++){.    v =
3920: 20 76 2a 31 30 20 2b 20 63 3b 0a 20 20 7d 0a 0a   v*10 + c;.  }..
3930: 20 20 2f 2a 20 54 68 65 20 6c 6f 6e 67 65 73 74    /* The longest
3940: 20 64 65 63 69 6d 61 6c 20 72 65 70 72 65 73 65   decimal represe
3950: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 33 32 20  ntation of a 32 
3960: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 31  bit integer is 1
3970: 30 20 64 69 67 69 74 73 3a 0a 20 20 2a 2a 0a 20  0 digits:.  **. 
3980: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
3990: 31 32 33 34 35 36 37 38 39 30 0a 20 20 2a 2a 20  1234567890.  ** 
39a0: 20 20 20 20 32 5e 33 31 20 2d 3e 20 32 31 34 37      2^31 -> 2147
39b0: 34 38 33 36 34 38 0a 20 20 2a 2f 0a 20 20 69 66  483648.  */.  if
39c0: 28 20 69 3e 31 30 20 29 7b 0a 20 20 20 20 72 65  ( i>10 ){.    re
39d0: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66  turn 0;.  }.  if
39e0: 28 20 76 2d 6e 65 67 3e 32 31 34 37 34 38 33 36  ( v-neg>21474836
39f0: 34 37 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  47 ){.    return
3a00: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 65   0;.  }.  if( ne
3a10: 67 20 29 7b 0a 20 20 20 20 76 20 3d 20 2d 76 3b  g ){.    v = -v;
3a20: 0a 20 20 7d 0a 20 20 2a 70 56 61 6c 75 65 20 3d  .  }.  *pValue =
3a30: 20 28 69 6e 74 29 76 3b 0a 20 20 72 65 74 75 72   (int)v;.  retur
3a40: 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  n 1;.}../*.** Th
3a50: 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
3a60: 68 20 69 6e 74 65 67 65 72 20 65 6e 63 6f 64 69  h integer encodi
3a70: 6e 67 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  ng is as follows
3a80: 3a 0a 2a 2a 0a 2a 2a 20 4b 45 59 3a 0a 2a 2a 20  :.**.** KEY:.** 
3a90: 20 20 20 20 20 20 20 20 41 20 3d 20 30 78 78 78          A = 0xxx
3aa0: 78 78 78 78 20 20 20 20 37 20 62 69 74 73 20 6f  xxxx    7 bits o
3ab0: 66 20 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66  f data and one f
3ac0: 6c 61 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20  lag bit.**      
3ad0: 20 20 20 42 20 3d 20 31 78 78 78 78 78 78 78 20     B = 1xxxxxxx 
3ae0: 20 20 20 37 20 62 69 74 73 20 6f 66 20 64 61 74     7 bits of dat
3af0: 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62  a and one flag b
3b00: 69 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 43 20  it.**         C 
3b10: 3d 20 78 78 78 78 78 78 78 78 20 20 20 20 38 20  = xxxxxxxx    8 
3b20: 62 69 74 73 20 6f 66 20 64 61 74 61 0a 2a 2a 0a  bits of data.**.
3b30: 2a 2a 20 20 37 20 62 69 74 73 20 2d 20 41 0a 2a  **  7 bits - A.*
3b40: 2a 20 31 34 20 62 69 74 73 20 2d 20 42 41 0a 2a  * 14 bits - BA.*
3b50: 2a 20 32 31 20 62 69 74 73 20 2d 20 42 42 41 0a  * 21 bits - BBA.
3b60: 2a 2a 20 32 38 20 62 69 74 73 20 2d 20 42 42 42  ** 28 bits - BBB
3b70: 41 0a 2a 2a 20 33 35 20 62 69 74 73 20 2d 20 42  A.** 35 bits - B
3b80: 42 42 42 41 0a 2a 2a 20 34 32 20 62 69 74 73 20  BBBA.** 42 bits 
3b90: 2d 20 42 42 42 42 42 41 0a 2a 2a 20 34 39 20 62  - BBBBBA.** 49 b
3ba0: 69 74 73 20 2d 20 42 42 42 42 42 42 41 0a 2a 2a  its - BBBBBBA.**
3bb0: 20 35 36 20 62 69 74 73 20 2d 20 42 42 42 42 42   56 bits - BBBBB
3bc0: 42 42 41 0a 2a 2a 20 36 34 20 62 69 74 73 20 2d  BBA.** 64 bits -
3bd0: 20 42 42 42 42 42 42 42 42 43 0a 2a 2f 0a 0a 2f   BBBBBBBBC.*/../
3be0: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 36 34 2d  *.** Write a 64-
3bf0: 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  bit variable-len
3c00: 67 74 68 20 69 6e 74 65 67 65 72 20 74 6f 20 6d  gth integer to m
3c10: 65 6d 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61  emory starting a
3c20: 74 20 70 5b 30 5d 2e 0a 2a 2a 20 54 68 65 20 6c  t p[0]..** The l
3c30: 65 6e 67 74 68 20 6f 66 20 64 61 74 61 20 77 72  ength of data wr
3c40: 69 74 65 20 77 69 6c 6c 20 62 65 20 62 65 74 77  ite will be betw
3c50: 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74 65  een 1 and 9 byte
3c60: 73 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 0a 2a  s.  The number.*
3c70: 2a 20 6f 66 20 62 79 74 65 73 20 77 72 69 74 74  * of bytes writt
3c80: 65 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  en is returned..
3c90: 2a 2a 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c 65  **.** A variable
3ca0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20  -length integer 
3cb0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
3cc0: 6c 6f 77 65 72 20 37 20 62 69 74 73 20 6f 66 20  lower 7 bits of 
3cd0: 65 61 63 68 20 62 79 74 65 0a 2a 2a 20 66 6f 72  each byte.** for
3ce0: 20 61 6c 6c 20 62 79 74 65 73 20 74 68 61 74 20   all bytes that 
3cf0: 68 61 76 65 20 74 68 65 20 38 74 68 20 62 69 74  have the 8th bit
3d00: 20 73 65 74 20 61 6e 64 20 6f 6e 65 20 62 79 74   set and one byt
3d10: 65 20 77 69 74 68 20 74 68 65 20 38 74 68 0a 2a  e with the 8th.*
3d20: 2a 20 62 69 74 20 63 6c 65 61 72 2e 20 20 45 78  * bit clear.  Ex
3d30: 63 65 70 74 2c 20 69 66 20 77 65 20 67 65 74 20  cept, if we get 
3d40: 74 6f 20 74 68 65 20 39 74 68 20 62 79 74 65 2c  to the 9th byte,
3d50: 20 69 74 20 73 74 6f 72 65 73 20 74 68 65 20 66   it stores the f
3d60: 75 6c 6c 0a 2a 2a 20 38 20 62 69 74 73 20 61 6e  ull.** 8 bits an
3d70: 64 20 69 73 20 74 68 65 20 6c 61 73 74 20 62 79  d is the last by
3d80: 74 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  te..*/.int sqlit
3d90: 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
3da0: 67 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36  gned char *p, u6
3db0: 34 20 76 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a  4 v){.  int i, j
3dc0: 2c 20 6e 3b 0a 20 20 75 38 20 62 75 66 5b 31 30  , n;.  u8 buf[10
3dd0: 5d 3b 0a 20 20 69 66 28 20 76 20 26 20 28 28 28  ];.  if( v & (((
3de0: 75 36 34 29 30 78 66 66 30 30 30 30 30 30 29 3c  u64)0xff000000)<
3df0: 3c 33 32 29 20 29 7b 0a 20 20 20 20 70 5b 38 5d  <32) ){.    p[8]
3e00: 20 3d 20 28 75 38 29 76 3b 0a 20 20 20 20 76 20   = (u8)v;.    v 
3e10: 3e 3e 3d 20 38 3b 0a 20 20 20 20 66 6f 72 28 69  >>= 8;.    for(i
3e20: 3d 37 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a  =7; i>=0; i--){.
3e30: 20 20 20 20 20 20 70 5b 69 5d 20 3d 20 28 75 38        p[i] = (u8
3e40: 29 28 28 76 20 26 20 30 78 37 66 29 20 7c 20 30  )((v & 0x7f) | 0
3e50: 78 38 30 29 3b 0a 20 20 20 20 20 20 76 20 3e 3e  x80);.      v >>
3e60: 3d 20 37 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  = 7;.    }.    r
3e70: 65 74 75 72 6e 20 39 3b 0a 20 20 7d 20 20 20 20  eturn 9;.  }    
3e80: 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a  .  n = 0;.  do{.
3e90: 20 20 20 20 62 75 66 5b 6e 2b 2b 5d 20 3d 20 28      buf[n++] = (
3ea0: 75 38 29 28 28 76 20 26 20 30 78 37 66 29 20 7c  u8)((v & 0x7f) |
3eb0: 20 30 78 38 30 29 3b 0a 20 20 20 20 76 20 3e 3e   0x80);.    v >>
3ec0: 3d 20 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76  = 7;.  }while( v
3ed0: 21 3d 30 20 29 3b 0a 20 20 62 75 66 5b 30 5d 20  !=0 );.  buf[0] 
3ee0: 26 3d 20 30 78 37 66 3b 0a 20 20 61 73 73 65 72  &= 0x7f;.  asser
3ef0: 74 28 20 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f 72  t( n<=9 );.  for
3f00: 28 69 3d 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d  (i=0, j=n-1; j>=
3f10: 30 3b 20 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20  0; j--, i++){.  
3f20: 20 20 70 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b    p[i] = buf[j];
3f30: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  .  }.  return n;
3f40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
3f50: 6f 75 74 69 6e 65 20 69 73 20 61 20 66 61 73 74  outine is a fast
3f60: 65 72 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 71  er version of sq
3f70: 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 29  lite3PutVarint()
3f80: 20 74 68 61 74 20 6f 6e 6c 79 0a 2a 2a 20 77 6f   that only.** wo
3f90: 72 6b 73 20 66 6f 72 20 33 32 2d 62 69 74 20 70  rks for 32-bit p
3fa0: 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 73  ositive integers
3fb0: 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 6f 70   and which is op
3fc0: 74 69 6d 69 7a 65 64 20 66 6f 72 0a 2a 2a 20 74  timized for.** t
3fd0: 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f  he common case o
3fe0: 66 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  f small integers
3ff0: 2e 20 20 41 20 4d 41 43 52 4f 20 76 65 72 73 69  .  A MACRO versi
4000: 6f 6e 2c 20 70 75 74 56 61 72 69 6e 74 33 32 2c  on, putVarint32,
4010: 0a 2a 2a 20 69 73 20 70 72 6f 76 69 64 65 64 20  .** is provided 
4020: 77 68 69 63 68 20 69 6e 6c 69 6e 65 73 20 74 68  which inlines th
4030: 65 20 73 69 6e 67 6c 65 2d 62 79 74 65 20 63 61  e single-byte ca
4040: 73 65 2e 20 20 41 6c 6c 20 63 6f 64 65 20 73 68  se.  All code sh
4050: 6f 75 6c 64 20 75 73 65 0a 2a 2a 20 74 68 65 20  ould use.** the 
4060: 4d 41 43 52 4f 20 76 65 72 73 69 6f 6e 20 61 73  MACRO version as
4070: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61   this function a
4080: 73 73 75 6d 65 73 20 74 68 65 20 73 69 6e 67 6c  ssumes the singl
4090: 65 2d 62 79 74 65 20 63 61 73 65 20 68 61 73 0a  e-byte case has.
40a0: 2a 2a 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ** already been 
40b0: 68 61 6e 64 6c 65 64 2e 0a 2a 2f 0a 69 6e 74 20  handled..*/.int 
40c0: 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
40d0: 33 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  32(unsigned char
40e0: 20 2a 70 2c 20 75 33 32 20 76 29 7b 0a 23 69 66   *p, u32 v){.#if
40f0: 6e 64 65 66 20 70 75 74 56 61 72 69 6e 74 33 32  ndef putVarint32
4100: 0a 20 20 69 66 28 20 28 76 20 26 20 7e 30 78 37  .  if( (v & ~0x7
4110: 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 5b 30  f)==0 ){.    p[0
4120: 5d 20 3d 20 76 3b 0a 20 20 20 20 72 65 74 75 72  ] = v;.    retur
4130: 6e 20 31 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  n 1;.  }.#endif.
4140: 20 20 69 66 28 20 28 76 20 26 20 7e 30 78 33 66    if( (v & ~0x3f
4150: 66 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 5b  ff)==0 ){.    p[
4160: 30 5d 20 3d 20 28 75 38 29 28 28 76 3e 3e 37 29  0] = (u8)((v>>7)
4170: 20 7c 20 30 78 38 30 29 3b 0a 20 20 20 20 70 5b   | 0x80);.    p[
4180: 31 5d 20 3d 20 28 75 38 29 28 76 20 26 20 30 78  1] = (u8)(v & 0x
4190: 37 66 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  7f);.    return 
41a0: 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  2;.  }.  return 
41b0: 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
41c0: 28 70 2c 20 76 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (p, v);.}../*.**
41d0: 20 52 65 61 64 20 61 20 36 34 2d 62 69 74 20 76   Read a 64-bit v
41e0: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
41f0: 6e 74 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d 6f  nteger from memo
4200: 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20 70  ry starting at p
4210: 5b 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  [0]..** Return t
4220: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
4230: 65 73 20 72 65 61 64 2e 20 20 54 68 65 20 76 61  es read.  The va
4240: 6c 75 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  lue is stored in
4250: 20 2a 76 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74   *v..*/.u8 sqlit
4260: 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
4270: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
4280: 2a 70 2c 20 75 36 34 20 2a 76 29 7b 0a 20 20 75  *p, u64 *v){.  u
4290: 33 32 20 61 2c 62 2c 73 3b 0a 0a 20 20 61 20 3d  32 a,b,s;..  a =
42a0: 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70 30 20   *p;.  /* a: p0 
42b0: 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20  (unmasked) */.  
42c0: 69 66 20 28 21 28 61 26 30 78 38 30 29 29 0a 20  if (!(a&0x80)). 
42d0: 20 7b 0a 20 20 20 20 2a 76 20 3d 20 61 3b 0a 20   {.    *v = a;. 
42e0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
42f0: 0a 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d 20 2a  ..  p++;.  b = *
4300: 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 20 28 75  p;.  /* b: p1 (u
4310: 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66  nmasked) */.  if
4320: 20 28 21 28 62 26 30 78 38 30 29 29 0a 20 20 7b   (!(b&0x80)).  {
4330: 0a 20 20 20 20 61 20 26 3d 20 30 78 37 66 3b 0a  .    a &= 0x7f;.
4340: 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20      a = a<<7;.  
4350: 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 2a 76    a |= b;.    *v
4360: 20 3d 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e   = a;.    return
4370: 20 32 3b 0a 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a   2;.  }..  p++;.
4380: 20 20 61 20 3d 20 61 3c 3c 31 34 3b 0a 20 20 61    a = a<<14;.  a
4390: 20 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20   |= *p;.  /* a: 
43a0: 70 30 3c 3c 31 34 20 7c 20 70 32 20 28 75 6e 6d  p0<<14 | p2 (unm
43b0: 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28  asked) */.  if (
43c0: 21 28 61 26 30 78 38 30 29 29 0a 20 20 7b 0a 20  !(a&0x80)).  {. 
43d0: 20 20 20 61 20 26 3d 20 28 30 78 37 66 3c 3c 31     a &= (0x7f<<1
43e0: 34 29 7c 28 30 78 37 66 29 3b 0a 20 20 20 20 62  4)|(0x7f);.    b
43f0: 20 26 3d 20 30 78 37 66 3b 0a 20 20 20 20 62 20   &= 0x7f;.    b 
4400: 3d 20 62 3c 3c 37 3b 0a 20 20 20 20 61 20 7c 3d  = b<<7;.    a |=
4410: 20 62 3b 0a 20 20 20 20 2a 76 20 3d 20 61 3b 0a   b;.    *v = a;.
4420: 20 20 20 20 72 65 74 75 72 6e 20 33 3b 0a 20 20      return 3;.  
4430: 7d 0a 0a 20 20 2f 2a 20 43 53 45 31 20 66 72 6f  }..  /* CSE1 fro
4440: 6d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 61 20 26  m below */.  a &
4450: 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78  = (0x7f<<14)|(0x
4460: 37 66 29 3b 0a 20 20 70 2b 2b 3b 0a 20 20 62 20  7f);.  p++;.  b 
4470: 3d 20 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20  = b<<14;.  b |= 
4480: 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c  *p;.  /* b: p1<<
4490: 31 34 20 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65  14 | p3 (unmaske
44a0: 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28 62 26  d) */.  if (!(b&
44b0: 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 62  0x80)).  {.    b
44c0: 20 26 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28   &= (0x7f<<14)|(
44d0: 30 78 37 66 29 3b 0a 20 20 20 20 2f 2a 20 6d 6f  0x7f);.    /* mo
44e0: 76 65 64 20 43 53 45 31 20 75 70 20 2a 2f 0a 20  ved CSE1 up */. 
44f0: 20 20 20 2f 2a 20 61 20 26 3d 20 28 30 78 37 66     /* a &= (0x7f
4500: 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f  <<14)|(0x7f); */
4510: 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20  .    a = a<<7;. 
4520: 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 2a     a |= b;.    *
4530: 76 20 3d 20 61 3b 0a 20 20 20 20 72 65 74 75 72  v = a;.    retur
4540: 6e 20 34 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 61  n 4;.  }..  /* a
4550: 3a 20 70 30 3c 3c 31 34 20 7c 20 70 32 20 28 6d  : p0<<14 | p2 (m
4560: 61 73 6b 65 64 29 20 2a 2f 0a 20 20 2f 2a 20 62  asked) */.  /* b
4570: 3a 20 70 31 3c 3c 31 34 20 7c 20 70 33 20 28 75  : p1<<14 | p3 (u
4580: 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 2f 2a  nmasked) */.  /*
4590: 20 31 3a 73 61 76 65 20 6f 66 66 20 70 30 3c 3c   1:save off p0<<
45a0: 32 31 20 7c 20 70 31 3c 3c 31 34 20 7c 20 70 32  21 | p1<<14 | p2
45b0: 3c 3c 37 20 7c 20 70 33 20 28 6d 61 73 6b 65 64  <<7 | p3 (masked
45c0: 29 20 2a 2f 0a 20 20 2f 2a 20 6d 6f 76 65 64 20  ) */.  /* moved 
45d0: 43 53 45 31 20 75 70 20 2a 2f 0a 20 20 2f 2a 20  CSE1 up */.  /* 
45e0: 61 20 26 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c  a &= (0x7f<<14)|
45f0: 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20 62 20 26  (0x7f); */.  b &
4600: 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78  = (0x7f<<14)|(0x
4610: 37 66 29 3b 0a 20 20 73 20 3d 20 61 3b 0a 20 20  7f);.  s = a;.  
4620: 2f 2a 20 73 3a 20 70 30 3c 3c 31 34 20 7c 20 70  /* s: p0<<14 | p
4630: 32 20 28 6d 61 73 6b 65 64 29 20 2a 2f 0a 0a 20  2 (masked) */.. 
4640: 20 70 2b 2b 3b 0a 20 20 61 20 3d 20 61 3c 3c 31   p++;.  a = a<<1
4650: 34 3b 0a 20 20 61 20 7c 3d 20 2a 70 3b 0a 20 20  4;.  a |= *p;.  
4660: 2f 2a 20 61 3a 20 70 30 3c 3c 32 38 20 7c 20 70  /* a: p0<<28 | p
4670: 32 3c 3c 31 34 20 7c 20 70 34 20 28 75 6e 6d 61  2<<14 | p4 (unma
4680: 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20 28 21  sked) */.  if (!
4690: 28 61 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20  (a&0x80)).  {.  
46a0: 20 20 2f 2a 20 77 65 20 63 61 6e 20 73 6b 69 70    /* we can skip
46b0: 20 74 68 65 73 65 20 63 61 75 73 65 20 74 68 65   these cause the
46c0: 79 20 77 65 72 65 20 28 65 66 66 65 63 74 69 76  y were (effectiv
46d0: 65 6c 79 29 20 64 6f 6e 65 20 61 62 6f 76 65 20  ely) done above 
46e0: 69 6e 20 63 61 6c 63 27 69 6e 67 20 73 20 2a 2f  in calc'ing s */
46f0: 0a 20 20 20 20 2f 2a 20 61 20 26 3d 20 28 30 78  .    /* a &= (0x
4700: 37 66 3c 3c 32 38 29 7c 28 30 78 37 66 3c 3c 31  7f<<28)|(0x7f<<1
4710: 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a 20 20  4)|(0x7f); */.  
4720: 20 20 2f 2a 20 62 20 26 3d 20 28 30 78 37 66 3c    /* b &= (0x7f<
4730: 3c 31 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f 0a  <14)|(0x7f); */.
4740: 20 20 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20 20      b = b<<7;.  
4750: 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73 20    a |= b;.    s 
4760: 3d 20 73 3e 3e 31 38 3b 0a 20 20 20 20 2a 76 20  = s>>18;.    *v 
4770: 3d 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20 7c  = ((u64)s)<<32 |
4780: 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 35   a;.    return 5
4790: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 32 3a 73 61  ;.  }..  /* 2:sa
47a0: 76 65 20 6f 66 66 20 70 30 3c 3c 32 31 20 7c 20  ve off p0<<21 | 
47b0: 70 31 3c 3c 31 34 20 7c 20 70 32 3c 3c 37 20 7c  p1<<14 | p2<<7 |
47c0: 20 70 33 20 28 6d 61 73 6b 65 64 29 20 2a 2f 0a   p3 (masked) */.
47d0: 20 20 73 20 3d 20 73 3c 3c 37 3b 0a 20 20 73 20    s = s<<7;.  s 
47e0: 7c 3d 20 62 3b 0a 20 20 2f 2a 20 73 3a 20 70 30  |= b;.  /* s: p0
47f0: 3c 3c 32 31 20 7c 20 70 31 3c 3c 31 34 20 7c 20  <<21 | p1<<14 | 
4800: 70 32 3c 3c 37 20 7c 20 70 33 20 28 6d 61 73 6b  p2<<7 | p3 (mask
4810: 65 64 29 20 2a 2f 0a 0a 20 20 70 2b 2b 3b 0a 20  ed) */..  p++;. 
4820: 20 62 20 3d 20 62 3c 3c 31 34 3b 0a 20 20 62 20   b = b<<14;.  b 
4830: 7c 3d 20 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70  |= *p;.  /* b: p
4840: 31 3c 3c 32 38 20 7c 20 70 33 3c 3c 31 34 20 7c  1<<28 | p3<<14 |
4850: 20 70 35 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a   p5 (unmasked) *
4860: 2f 0a 20 20 69 66 20 28 21 28 62 26 30 78 38 30  /.  if (!(b&0x80
4870: 29 29 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 77 65  )).  {.    /* we
4880: 20 63 61 6e 20 73 6b 69 70 20 74 68 69 73 20 63   can skip this c
4890: 61 75 73 65 20 69 74 20 77 61 73 20 28 65 66 66  ause it was (eff
48a0: 65 63 74 69 76 65 6c 79 29 20 64 6f 6e 65 20 61  ectively) done a
48b0: 62 6f 76 65 20 69 6e 20 63 61 6c 63 27 69 6e 67  bove in calc'ing
48c0: 20 73 20 2a 2f 0a 20 20 20 20 2f 2a 20 62 20 26   s */.    /* b &
48d0: 3d 20 28 30 78 37 66 3c 3c 32 38 29 7c 28 30 78  = (0x7f<<28)|(0x
48e0: 37 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 20  7f<<14)|(0x7f); 
48f0: 2a 2f 0a 20 20 20 20 61 20 26 3d 20 28 30 78 37  */.    a &= (0x7
4900: 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 0a 20  f<<14)|(0x7f);. 
4910: 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20 20 20     a = a<<7;.   
4920: 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73 20 3d   a |= b;.    s =
4930: 20 73 3e 3e 31 38 3b 0a 20 20 20 20 2a 76 20 3d   s>>18;.    *v =
4940: 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20 7c 20   ((u64)s)<<32 | 
4950: 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 36 3b  a;.    return 6;
4960: 0a 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20 61  .  }..  p++;.  a
4970: 20 3d 20 61 3c 3c 31 34 3b 0a 20 20 61 20 7c 3d   = a<<14;.  a |=
4980: 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70 32 3c   *p;.  /* a: p2<
4990: 3c 32 38 20 7c 20 70 34 3c 3c 31 34 20 7c 20 70  <28 | p4<<14 | p
49a0: 36 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a  6 (unmasked) */.
49b0: 20 20 69 66 20 28 21 28 61 26 30 78 38 30 29 29    if (!(a&0x80))
49c0: 0a 20 20 7b 0a 20 20 20 20 61 20 26 3d 20 28 30  .  {.    a &= (0
49d0: 78 31 66 3c 3c 32 38 29 7c 28 30 78 37 66 3c 3c  x1f<<28)|(0x7f<<
49e0: 31 34 29 7c 28 30 78 37 66 29 3b 0a 20 20 20 20  14)|(0x7f);.    
49f0: 62 20 26 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c  b &= (0x7f<<14)|
4a00: 28 30 78 37 66 29 3b 0a 20 20 20 20 62 20 3d 20  (0x7f);.    b = 
4a10: 62 3c 3c 37 3b 0a 20 20 20 20 61 20 7c 3d 20 62  b<<7;.    a |= b
4a20: 3b 0a 20 20 20 20 73 20 3d 20 73 3e 3e 31 31 3b  ;.    s = s>>11;
4a30: 0a 20 20 20 20 2a 76 20 3d 20 28 28 75 36 34 29  .    *v = ((u64)
4a40: 73 29 3c 3c 33 32 20 7c 20 61 3b 0a 20 20 20 20  s)<<32 | a;.    
4a50: 72 65 74 75 72 6e 20 37 3b 0a 20 20 7d 0a 0a 20  return 7;.  }.. 
4a60: 20 2f 2a 20 43 53 45 32 20 66 72 6f 6d 20 62 65   /* CSE2 from be
4a70: 6c 6f 77 20 2a 2f 0a 20 20 61 20 26 3d 20 28 30  low */.  a &= (0
4a80: 78 37 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b  x7f<<14)|(0x7f);
4a90: 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d 20 62 3c  .  p++;.  b = b<
4aa0: 3c 31 34 3b 0a 20 20 62 20 7c 3d 20 2a 70 3b 0a  <14;.  b |= *p;.
4ab0: 20 20 2f 2a 20 62 3a 20 70 33 3c 3c 32 38 20 7c    /* b: p3<<28 |
4ac0: 20 70 35 3c 3c 31 34 20 7c 20 70 37 20 28 75 6e   p5<<14 | p7 (un
4ad0: 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20 69 66 20  masked) */.  if 
4ae0: 28 21 28 62 26 30 78 38 30 29 29 0a 20 20 7b 0a  (!(b&0x80)).  {.
4af0: 20 20 20 20 62 20 26 3d 20 28 30 78 31 66 3c 3c      b &= (0x1f<<
4b00: 32 38 29 7c 28 30 78 37 66 3c 3c 31 34 29 7c 28  28)|(0x7f<<14)|(
4b10: 30 78 37 66 29 3b 0a 20 20 20 20 2f 2a 20 6d 6f  0x7f);.    /* mo
4b20: 76 65 64 20 43 53 45 32 20 75 70 20 2a 2f 0a 20  ved CSE2 up */. 
4b30: 20 20 20 2f 2a 20 61 20 26 3d 20 28 30 78 37 66     /* a &= (0x7f
4b40: 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b 20 2a 2f  <<14)|(0x7f); */
4b50: 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a 20  .    a = a<<7;. 
4b60: 20 20 20 61 20 7c 3d 20 62 3b 0a 20 20 20 20 73     a |= b;.    s
4b70: 20 3d 20 73 3e 3e 34 3b 0a 20 20 20 20 2a 76 20   = s>>4;.    *v 
4b80: 3d 20 28 28 75 36 34 29 73 29 3c 3c 33 32 20 7c  = ((u64)s)<<32 |
4b90: 20 61 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 38   a;.    return 8
4ba0: 3b 0a 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20  ;.  }..  p++;.  
4bb0: 61 20 3d 20 61 3c 3c 31 35 3b 0a 20 20 61 20 7c  a = a<<15;.  a |
4bc0: 3d 20 2a 70 3b 0a 20 20 2f 2a 20 61 3a 20 70 34  = *p;.  /* a: p4
4bd0: 3c 3c 32 39 20 7c 20 70 36 3c 3c 31 35 20 7c 20  <<29 | p6<<15 | 
4be0: 70 38 20 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f  p8 (unmasked) */
4bf0: 0a 0a 20 20 2f 2a 20 6d 6f 76 65 64 20 43 53 45  ..  /* moved CSE
4c00: 32 20 75 70 20 2a 2f 0a 20 20 2f 2a 20 61 20 26  2 up */.  /* a &
4c10: 3d 20 28 30 78 37 66 3c 3c 32 39 29 7c 28 30 78  = (0x7f<<29)|(0x
4c20: 37 66 3c 3c 31 35 29 7c 28 30 78 66 66 29 3b 20  7f<<15)|(0xff); 
4c30: 2a 2f 0a 20 20 62 20 26 3d 20 28 30 78 37 66 3c  */.  b &= (0x7f<
4c40: 3c 31 34 29 7c 28 30 78 37 66 29 3b 0a 20 20 62  <14)|(0x7f);.  b
4c50: 20 3d 20 62 3c 3c 38 3b 0a 20 20 61 20 7c 3d 20   = b<<8;.  a |= 
4c60: 62 3b 0a 0a 20 20 73 20 3d 20 73 3c 3c 34 3b 0a  b;..  s = s<<4;.
4c70: 20 20 62 20 3d 20 70 5b 2d 34 5d 3b 0a 20 20 62    b = p[-4];.  b
4c80: 20 26 3d 20 30 78 37 66 3b 0a 20 20 62 20 3d 20   &= 0x7f;.  b = 
4c90: 62 3e 3e 33 3b 0a 20 20 73 20 7c 3d 20 62 3b 0a  b>>3;.  s |= b;.
4ca0: 0a 20 20 2a 76 20 3d 20 28 28 75 36 34 29 73 29  .  *v = ((u64)s)
4cb0: 3c 3c 33 32 20 7c 20 61 3b 0a 0a 20 20 72 65 74  <<32 | a;..  ret
4cc0: 75 72 6e 20 39 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 9;.}../*.** 
4cd0: 52 65 61 64 20 61 20 33 32 2d 62 69 74 20 76 61  Read a 32-bit va
4ce0: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
4cf0: 74 65 67 65 72 20 66 72 6f 6d 20 6d 65 6d 6f 72  teger from memor
4d00: 79 20 73 74 61 72 74 69 6e 67 20 61 74 20 70 5b  y starting at p[
4d10: 30 5d 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  0]..** Return th
4d20: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
4d30: 73 20 72 65 61 64 2e 20 20 54 68 65 20 76 61 6c  s read.  The val
4d40: 75 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ue is stored in 
4d50: 2a 76 2e 0a 2a 2a 20 41 20 4d 41 43 52 4f 20 76  *v..** A MACRO v
4d60: 65 72 73 69 6f 6e 2c 20 67 65 74 56 61 72 69 6e  ersion, getVarin
4d70: 74 33 32 2c 20 69 73 20 70 72 6f 76 69 64 65 64  t32, is provided
4d80: 20 77 68 69 63 68 20 69 6e 6c 69 6e 65 73 20 74   which inlines t
4d90: 68 65 20 0a 2a 2a 20 73 69 6e 67 6c 65 2d 62 79  he .** single-by
4da0: 74 65 20 63 61 73 65 2e 20 20 41 6c 6c 20 63 6f  te case.  All co
4db0: 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68  de should use th
4dc0: 65 20 4d 41 43 52 4f 20 76 65 72 73 69 6f 6e 20  e MACRO version 
4dd0: 61 73 20 0a 2a 2a 20 74 68 69 73 20 66 75 6e 63  as .** this func
4de0: 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65  tion assumes the
4df0: 20 73 69 6e 67 6c 65 2d 62 79 74 65 20 63 61 73   single-byte cas
4e00: 65 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  e has already be
4e10: 65 6e 20 68 61 6e 64 6c 65 64 2e 0a 2a 2f 0a 75  en handled..*/.u
4e20: 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
4e30: 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
4e40: 6e 65 64 20 63 68 61 72 20 2a 70 2c 20 75 33 32  ned char *p, u32
4e50: 20 2a 76 29 7b 0a 20 20 75 33 32 20 61 2c 62 3b   *v){.  u32 a,b;
4e60: 0a 0a 20 20 61 20 3d 20 2a 70 3b 0a 20 20 2f 2a  ..  a = *p;.  /*
4e70: 20 61 3a 20 70 30 20 28 75 6e 6d 61 73 6b 65 64   a: p0 (unmasked
4e80: 29 20 2a 2f 0a 23 69 66 6e 64 65 66 20 67 65 74  ) */.#ifndef get
4e90: 56 61 72 69 6e 74 33 32 0a 20 20 69 66 20 28 21  Varint32.  if (!
4ea0: 28 61 26 30 78 38 30 29 29 0a 20 20 7b 0a 20 20  (a&0x80)).  {.  
4eb0: 20 20 2a 76 20 3d 20 61 3b 0a 20 20 20 20 72 65    *v = a;.    re
4ec0: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 23 65 6e 64  turn 1;.  }.#end
4ed0: 69 66 0a 0a 20 20 70 2b 2b 3b 0a 20 20 62 20 3d  if..  p++;.  b =
4ee0: 20 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 20   *p;.  /* b: p1 
4ef0: 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20  (unmasked) */.  
4f00: 69 66 20 28 21 28 62 26 30 78 38 30 29 29 0a 20  if (!(b&0x80)). 
4f10: 20 7b 0a 20 20 20 20 61 20 26 3d 20 30 78 37 66   {.    a &= 0x7f
4f20: 3b 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b 0a  ;.    a = a<<7;.
4f30: 20 20 20 20 2a 76 20 3d 20 61 20 7c 20 62 3b 0a      *v = a | b;.
4f40: 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20      return 2;.  
4f50: 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d 20  }..  p++;.  a = 
4f60: 61 3c 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a 70  a<<14;.  a |= *p
4f70: 3b 0a 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 31 34  ;.  /* a: p0<<14
4f80: 20 7c 20 70 32 20 28 75 6e 6d 61 73 6b 65 64 29   | p2 (unmasked)
4f90: 20 2a 2f 0a 20 20 69 66 20 28 21 28 61 26 30 78   */.  if (!(a&0x
4fa0: 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 61 20 26  80)).  {.    a &
4fb0: 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78  = (0x7f<<14)|(0x
4fc0: 37 66 29 3b 0a 20 20 20 20 62 20 26 3d 20 30 78  7f);.    b &= 0x
4fd0: 37 66 3b 0a 20 20 20 20 62 20 3d 20 62 3c 3c 37  7f;.    b = b<<7
4fe0: 3b 0a 20 20 20 20 2a 76 20 3d 20 61 20 7c 20 62  ;.    *v = a | b
4ff0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 33 3b 0a  ;.    return 3;.
5000: 20 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20 62 20    }..  p++;.  b 
5010: 3d 20 62 3c 3c 31 34 3b 0a 20 20 62 20 7c 3d 20  = b<<14;.  b |= 
5020: 2a 70 3b 0a 20 20 2f 2a 20 62 3a 20 70 31 3c 3c  *p;.  /* b: p1<<
5030: 31 34 20 7c 20 70 33 20 28 75 6e 6d 61 73 6b 65  14 | p3 (unmaske
5040: 64 29 20 2a 2f 0a 20 20 69 66 20 28 21 28 62 26  d) */.  if (!(b&
5050: 30 78 38 30 29 29 0a 20 20 7b 0a 20 20 20 20 62  0x80)).  {.    b
5060: 20 26 3d 20 28 30 78 37 66 3c 3c 31 34 29 7c 28   &= (0x7f<<14)|(
5070: 30 78 37 66 29 3b 0a 20 20 20 20 61 20 26 3d 20  0x7f);.    a &= 
5080: 28 30 78 37 66 3c 3c 31 34 29 7c 28 30 78 37 66  (0x7f<<14)|(0x7f
5090: 29 3b 0a 20 20 20 20 61 20 3d 20 61 3c 3c 37 3b  );.    a = a<<7;
50a0: 0a 20 20 20 20 2a 76 20 3d 20 61 20 7c 20 62 3b  .    *v = a | b;
50b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 34 3b 0a 20  .    return 4;. 
50c0: 20 7d 0a 0a 20 20 70 2b 2b 3b 0a 20 20 61 20 3d   }..  p++;.  a =
50d0: 20 61 3c 3c 31 34 3b 0a 20 20 61 20 7c 3d 20 2a   a<<14;.  a |= *
50e0: 70 3b 0a 20 20 2f 2a 20 61 3a 20 70 30 3c 3c 32  p;.  /* a: p0<<2
50f0: 38 20 7c 20 70 32 3c 3c 31 34 20 7c 20 70 34 20  8 | p2<<14 | p4 
5100: 28 75 6e 6d 61 73 6b 65 64 29 20 2a 2f 0a 20 20  (unmasked) */.  
5110: 69 66 20 28 21 28 61 26 30 78 38 30 29 29 0a 20  if (!(a&0x80)). 
5120: 20 7b 0a 20 20 20 20 61 20 26 3d 20 28 30 78 31   {.    a &= (0x1
5130: 66 3c 3c 32 38 29 7c 28 30 78 37 66 3c 3c 31 34  f<<28)|(0x7f<<14
5140: 29 7c 28 30 78 37 66 29 3b 0a 20 20 20 20 62 20  )|(0x7f);.    b 
5150: 26 3d 20 28 30 78 31 66 3c 3c 32 38 29 7c 28 30  &= (0x1f<<28)|(0
5160: 78 37 66 3c 3c 31 34 29 7c 28 30 78 37 66 29 3b  x7f<<14)|(0x7f);
5170: 0a 20 20 20 20 62 20 3d 20 62 3c 3c 37 3b 0a 20  .    b = b<<7;. 
5180: 20 20 20 2a 76 20 3d 20 61 20 7c 20 62 3b 0a 20     *v = a | b;. 
5190: 20 20 20 72 65 74 75 72 6e 20 35 3b 0a 20 20 7d     return 5;.  }
51a0: 0a 0a 20 20 2f 2a 20 57 65 20 63 61 6e 20 6f 6e  ..  /* We can on
51b0: 6c 79 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ly reach this po
51c0: 69 6e 74 20 77 68 65 6e 20 72 65 61 64 69 6e 67  int when reading
51d0: 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
51e0: 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65 2e 20 20  ase.  ** file.  
51f0: 49 6e 20 74 68 61 74 20 63 61 73 65 20 77 65 20  In that case we 
5200: 61 72 65 20 6e 6f 74 20 69 6e 20 61 6e 79 20 68  are not in any h
5210: 75 72 72 79 2e 20 20 55 73 65 20 74 68 65 20 28  urry.  Use the (
5220: 72 65 6c 61 74 69 76 65 6c 79 0a 20 20 2a 2a 20  relatively.  ** 
5230: 73 6c 6f 77 29 20 67 65 6e 65 72 61 6c 2d 70 75  slow) general-pu
5240: 72 70 6f 73 65 20 73 71 6c 69 74 65 33 47 65 74  rpose sqlite3Get
5250: 56 61 72 69 6e 74 28 29 20 72 6f 75 74 69 6e 65  Varint() routine
5260: 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a   to extract the.
5270: 20 20 2a 2a 20 76 61 6c 75 65 2e 20 2a 2f 0a 20    ** value. */. 
5280: 20 7b 0a 20 20 20 20 75 36 34 20 76 36 34 3b 0a   {.    u64 v64;.
5290: 20 20 20 20 75 38 20 6e 3b 0a 0a 20 20 20 20 70      u8 n;..    p
52a0: 20 2d 3d 20 34 3b 0a 20 20 20 20 6e 20 3d 20 73   -= 4;.    n = s
52b0: 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
52c0: 70 2c 20 26 76 36 34 29 3b 0a 20 20 20 20 61 73  p, &v64);.    as
52d0: 73 65 72 74 28 20 6e 3e 35 20 26 26 20 6e 3c 3d  sert( n>5 && n<=
52e0: 39 20 29 3b 0a 20 20 20 20 2a 76 20 3d 20 28 75  9 );.    *v = (u
52f0: 33 32 29 76 36 34 3b 0a 20 20 20 20 72 65 74 75  32)v64;.    retu
5300: 72 6e 20 6e 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  rn n;.  }.}../*.
5310: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
5320: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 68  mber of bytes th
5330: 61 74 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65  at will be neede
5340: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 67  d to store the g
5350: 69 76 65 6e 0a 2a 2a 20 36 34 2d 62 69 74 20 69  iven.** 64-bit i
5360: 6e 74 65 67 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73  nteger..*/.int s
5370: 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
5380: 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20 69 20  u64 v){.  int i 
5390: 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69  = 0;.  do{.    i
53a0: 2b 2b 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37 3b  ++;.    v >>= 7;
53b0: 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d 30 20  .  }while( v!=0 
53c0: 26 26 20 69 3c 39 20 29 3b 0a 20 20 72 65 74 75  && i<9 );.  retu
53d0: 72 6e 20 69 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  rn i;.}.../*.** 
53e0: 52 65 61 64 20 6f 72 20 77 72 69 74 65 20 61 20  Read or write a 
53f0: 66 6f 75 72 2d 62 79 74 65 20 62 69 67 2d 65 6e  four-byte big-en
5400: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  dian integer val
5410: 75 65 2e 0a 2a 2f 0a 75 33 32 20 73 71 6c 69 74  ue..*/.u32 sqlit
5420: 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
5430: 20 75 38 20 2a 70 29 7b 0a 20 20 72 65 74 75 72   u8 *p){.  retur
5440: 6e 20 28 70 5b 30 5d 3c 3c 32 34 29 20 7c 20 28  n (p[0]<<24) | (
5450: 70 5b 31 5d 3c 3c 31 36 29 20 7c 20 28 70 5b 32  p[1]<<16) | (p[2
5460: 5d 3c 3c 38 29 20 7c 20 70 5b 33 5d 3b 0a 7d 0a  ]<<8) | p[3];.}.
5470: 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
5480: 62 79 74 65 28 75 6e 73 69 67 6e 65 64 20 63 68  byte(unsigned ch
5490: 61 72 20 2a 70 2c 20 75 33 32 20 76 29 7b 0a 20  ar *p, u32 v){. 
54a0: 20 70 5b 30 5d 20 3d 20 28 75 38 29 28 76 3e 3e   p[0] = (u8)(v>>
54b0: 32 34 29 3b 0a 20 20 70 5b 31 5d 20 3d 20 28 75  24);.  p[1] = (u
54c0: 38 29 28 76 3e 3e 31 36 29 3b 0a 20 20 70 5b 32  8)(v>>16);.  p[2
54d0: 5d 20 3d 20 28 75 38 29 28 76 3e 3e 38 29 3b 0a  ] = (u8)(v>>8);.
54e0: 20 20 70 5b 33 5d 20 3d 20 28 75 38 29 76 3b 0a    p[3] = (u8)v;.
54f0: 7d 0a 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  }....#if !define
5500: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c  d(SQLITE_OMIT_BL
5510: 4f 42 5f 4c 49 54 45 52 41 4c 29 20 7c 7c 20 64  OB_LITERAL) || d
5520: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
5530: 53 5f 43 4f 44 45 43 29 0a 2f 2a 0a 2a 2a 20 54  S_CODEC)./*.** T
5540: 72 61 6e 73 6c 61 74 65 20 61 20 73 69 6e 67 6c  ranslate a singl
5550: 65 20 62 79 74 65 20 6f 66 20 48 65 78 20 69 6e  e byte of Hex in
5560: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  to an integer..*
5570: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 6e 20  * This routinen 
5580: 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 68 20  only works if h 
5590: 72 65 61 6c 6c 79 20 69 73 20 61 20 76 61 6c 69  really is a vali
55a0: 64 20 68 65 78 61 64 65 63 69 6d 61 6c 0a 2a 2a  d hexadecimal.**
55b0: 20 63 68 61 72 61 63 74 65 72 3a 20 20 30 2e 2e   character:  0..
55c0: 39 61 2e 2e 66 41 2e 2e 46 0a 2a 2f 0a 73 74 61  9a..fA..F.*/.sta
55d0: 74 69 63 20 75 38 20 68 65 78 54 6f 49 6e 74 28  tic u8 hexToInt(
55e0: 69 6e 74 20 68 29 7b 0a 20 20 61 73 73 65 72 74  int h){.  assert
55f0: 28 20 28 68 3e 3d 27 30 27 20 26 26 20 68 3c 3d  ( (h>='0' && h<=
5600: 27 39 27 29 20 7c 7c 20 20 28 68 3e 3d 27 61 27  '9') ||  (h>='a'
5610: 20 26 26 20 68 3c 3d 27 66 27 29 20 7c 7c 20 20   && h<='f') ||  
5620: 28 68 3e 3d 27 41 27 20 26 26 20 68 3c 3d 27 46  (h>='A' && h<='F
5630: 27 29 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ') );.#ifdef SQL
5640: 49 54 45 5f 41 53 43 49 49 0a 20 20 68 20 2b 3d  ITE_ASCII.  h +=
5650: 20 39 2a 28 31 26 28 68 3e 3e 36 29 29 3b 0a 23   9*(1&(h>>6));.#
5660: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
5670: 49 54 45 5f 45 42 43 44 49 43 0a 20 20 68 20 2b  ITE_EBCDIC.  h +
5680: 3d 20 39 2a 28 31 26 7e 28 68 3e 3e 34 29 29 3b  = 9*(1&~(h>>4));
5690: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
56a0: 20 28 75 38 29 28 68 20 26 20 30 78 66 29 3b 0a   (u8)(h & 0xf);.
56b0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c  }.#endif /* !SQL
56c0: 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49  ITE_OMIT_BLOB_LI
56d0: 54 45 52 41 4c 20 7c 7c 20 53 51 4c 49 54 45 5f  TERAL || SQLITE_
56e0: 48 41 53 5f 43 4f 44 45 43 20 2a 2f 0a 0a 23 69  HAS_CODEC */..#i
56f0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
5700: 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45  E_OMIT_BLOB_LITE
5710: 52 41 4c 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  RAL) || defined(
5720: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
5730: 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  )./*.** Convert 
5740: 61 20 42 4c 4f 42 20 6c 69 74 65 72 61 6c 20 6f  a BLOB literal o
5750: 66 20 74 68 65 20 66 6f 72 6d 20 22 78 27 68 68  f the form "x'hh
5760: 68 68 68 68 27 22 20 69 6e 74 6f 20 69 74 73 20  hhhh'" into its 
5770: 62 69 6e 61 72 79 0a 2a 2a 20 76 61 6c 75 65 2e  binary.** value.
5780: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
5790: 65 72 20 74 6f 20 69 74 73 20 62 69 6e 61 72 79  er to its binary
57a0: 20 76 61 6c 75 65 2e 20 20 53 70 61 63 65 20 74   value.  Space t
57b0: 6f 20 68 6f 6c 64 20 74 68 65 0a 2a 2a 20 62 69  o hold the.** bi
57c0: 6e 61 72 79 20 76 61 6c 75 65 20 68 61 73 20 62  nary value has b
57d0: 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  een obtained fro
57e0: 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64 20 6d 75 73  m malloc and mus
57f0: 74 20 62 65 20 66 72 65 65 64 20 62 79 0a 2a 2a  t be freed by.**
5800: 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 72 6f 75   the calling rou
5810: 74 69 6e 65 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  tine..*/.void *s
5820: 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
5830: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
5840: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
5850: 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f  n){.  char *zBlo
5860: 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 7a  b;.  int i;..  z
5870: 42 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a 29 73  Blob = (char *)s
5880: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
5890: 77 28 64 62 2c 20 6e 2f 32 20 2b 20 31 29 3b 0a  w(db, n/2 + 1);.
58a0: 20 20 6e 2d 2d 3b 0a 20 20 69 66 28 20 7a 42 6c    n--;.  if( zBl
58b0: 6f 62 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d  ob ){.    for(i=
58c0: 30 3b 20 69 3c 6e 3b 20 69 2b 3d 32 29 7b 0a 20  0; i<n; i+=2){. 
58d0: 20 20 20 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20       zBlob[i/2] 
58e0: 3d 20 28 68 65 78 54 6f 49 6e 74 28 7a 5b 69 5d  = (hexToInt(z[i]
58f0: 29 3c 3c 34 29 20 7c 20 68 65 78 54 6f 49 6e 74  )<<4) | hexToInt
5900: 28 7a 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 7d 0a  (z[i+1]);.    }.
5910: 20 20 20 20 7a 42 6c 6f 62 5b 69 2f 32 5d 20 3d      zBlob[i/2] =
5920: 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   0;.  }.  return
5930: 20 7a 42 6c 6f 62 3b 0a 7d 0a 23 65 6e 64 69 66   zBlob;.}.#endif
5940: 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   /* !SQLITE_OMIT
5950: 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 7c 7c  _BLOB_LITERAL ||
5960: 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
5970: 43 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 61  C */.../*.** Cha
5980: 6e 67 65 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  nge the sqlite.m
5990: 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54 45  agic from SQLITE
59a0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 74 6f 20 53  _MAGIC_OPEN to S
59b0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
59c0: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20 65  ..** Return an e
59d0: 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  rror (non-zero) 
59e0: 69 66 20 74 68 65 20 6d 61 67 69 63 20 77 61 73  if the magic was
59f0: 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47 49   not SQLITE_MAGI
5a00: 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20 74  C_OPEN.** when t
5a10: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63  his routine is c
5a20: 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  alled..**.** Thi
5a30: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c  s routine is cal
5a40: 6c 65 64 20 77 68 65 6e 20 65 6e 74 65 72 69 6e  led when enterin
5a50: 67 20 61 6e 20 53 51 4c 69 74 65 20 41 50 49 2e  g an SQLite API.
5a60: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 4d 41 47    The SQLITE_MAG
5a70: 49 43 5f 4f 50 45 4e 0a 2a 2a 20 76 61 6c 75 65  IC_OPEN.** value
5a80: 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
5a90: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
5aa0: 6e 65 63 74 69 6f 6e 20 70 61 73 73 65 64 20 69  nection passed i
5ab0: 6e 74 6f 20 74 68 65 20 41 50 49 20 69 73 0a 2a  nto the API is.*
5ac0: 2a 20 6f 70 65 6e 20 61 6e 64 20 69 73 20 6e 6f  * open and is no
5ad0: 74 20 62 65 69 6e 67 20 75 73 65 64 20 62 79 20  t being used by 
5ae0: 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64 2e 20  another thread. 
5af0: 20 42 79 20 63 68 61 6e 67 69 6e 67 20 74 68 65   By changing the
5b00: 20 76 61 6c 75 65 0a 2a 2a 20 74 6f 20 53 51 4c   value.** to SQL
5b10: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 77  ITE_MAGIC_BUSY w
5b20: 65 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20  e indicate that 
5b30: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  the connection i
5b40: 73 20 69 6e 20 75 73 65 2e 0a 2a 2a 20 73 71 6c  s in use..** sql
5b50: 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 29 20  ite3SafetyOff() 
5b60: 62 65 6c 6f 77 20 77 69 6c 6c 20 63 68 61 6e 67  below will chang
5b70: 65 20 74 68 65 20 76 61 6c 75 65 20 62 61 63 6b  e the value back
5b80: 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43   to SQLITE_MAGIC
5b90: 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20 74 68  _OPEN.** when th
5ba0: 65 20 41 50 49 20 65 78 69 74 73 2e 20 0a 2a 2a  e API exits. .**
5bb0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
5bc0: 20 69 73 20 61 20 61 74 74 65 6d 70 74 20 74 6f   is a attempt to
5bd0: 20 64 65 74 65 63 74 20 69 66 20 74 77 6f 20 74   detect if two t
5be0: 68 72 65 61 64 73 20 75 73 65 20 74 68 65 0a 2a  hreads use the.*
5bf0: 2a 20 73 61 6d 65 20 73 71 6c 69 74 65 2a 20 70  * same sqlite* p
5c00: 6f 69 6e 74 65 72 20 61 74 20 74 68 65 20 73 61  ointer at the sa
5c10: 6d 65 20 74 69 6d 65 2e 20 20 54 68 65 72 65 20  me time.  There 
5c20: 69 73 20 61 20 72 61 63 65 20 0a 2a 2a 20 63 6f  is a race .** co
5c30: 6e 64 69 74 69 6f 6e 20 73 6f 20 69 74 20 69 73  ndition so it is
5c40: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74   possible that t
5c50: 68 65 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  he error is not 
5c60: 64 65 74 65 63 74 65 64 2e 0a 2a 2a 20 42 75 74  detected..** But
5c70: 20 75 73 75 61 6c 6c 79 20 74 68 65 20 70 72 6f   usually the pro
5c80: 62 6c 65 6d 20 77 69 6c 6c 20 62 65 20 73 65 65  blem will be see
5c90: 6e 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 77  n.  The result w
5ca0: 69 6c 6c 20 62 65 20 61 6e 0a 2a 2a 20 65 72 72  ill be an.** err
5cb0: 6f 72 20 77 68 69 63 68 20 63 61 6e 20 62 65 20  or which can be 
5cc0: 75 73 65 64 20 74 6f 20 64 65 62 75 67 20 74 68  used to debug th
5cd0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68  e application th
5ce0: 61 74 20 69 73 0a 2a 2a 20 75 73 69 6e 67 20 53  at is.** using S
5cf0: 51 4c 69 74 65 20 69 6e 63 6f 72 72 65 63 74 6c  QLite incorrectl
5d00: 79 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  y..**.** Ticket 
5d10: 23 32 30 32 3a 20 20 49 66 20 64 62 2d 3e 6d 61  #202:  If db->ma
5d20: 67 69 63 20 69 73 20 6e 6f 74 20 61 20 76 61 6c  gic is not a val
5d30: 69 64 20 6f 70 65 6e 20 76 61 6c 75 65 2c 20 74  id open value, t
5d40: 61 6b 65 20 63 61 72 65 20 6e 6f 74 0a 2a 2a 20  ake care not.** 
5d50: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 64 62  to modify the db
5d60: 20 73 74 72 75 63 74 75 72 65 20 61 74 20 61 6c   structure at al
5d70: 6c 2e 20 20 49 74 20 63 6f 75 6c 64 20 62 65 20  l.  It could be 
5d80: 74 68 61 74 20 64 62 20 69 73 20 61 20 73 74 61  that db is a sta
5d90: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 2e 20 20  le.** pointer.  
5da0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
5db0: 69 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61 74  it could be that
5dc0: 20 74 68 65 72 65 20 68 61 73 20 62 65 65 6e 20   there has been 
5dd0: 61 20 70 72 69 6f 72 0a 2a 2a 20 63 61 6c 6c 20  a prior.** call 
5de0: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  to sqlite3_close
5df0: 28 64 62 29 20 61 6e 64 20 64 62 20 68 61 73 20  (db) and db has 
5e00: 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65 64  been deallocated
5e10: 2e 20 20 41 6e 64 20 77 65 20 64 6f 0a 2a 2a 20  .  And we do.** 
5e20: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 77 72 69 74  not want to writ
5e30: 65 20 69 6e 74 6f 20 64 65 61 6c 6c 6f 63 61 74  e into deallocat
5e40: 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 23 69  ed memory..*/.#i
5e50: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5e60: 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  G.int sqlite3Saf
5e70: 65 74 79 4f 6e 28 73 71 6c 69 74 65 33 20 2a 64  etyOn(sqlite3 *d
5e80: 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61  b){.  if( db->ma
5e90: 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic==SQLITE_MAGI
5ea0: 43 5f 4f 50 45 4e 20 29 7b 0a 20 20 20 20 64 62  C_OPEN ){.    db
5eb0: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
5ec0: 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 20  _MAGIC_BUSY;.   
5ed0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5ee0: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e  _mutex_held(db->
5ef0: 6d 75 74 65 78 29 20 29 3b 0a 20 20 20 20 72 65  mutex) );.    re
5f00: 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
5f10: 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53  if( db->magic==S
5f20: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
5f30: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
5f40: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
5f50: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64 62 2d 3e  _ERROR;.    db->
5f60: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
5f70: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 1;.  }.  retu
5f80: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
5f90: 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  /*.** Change the
5fa0: 20 6d 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49   magic from SQLI
5fb0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 74 6f  TE_MAGIC_BUSY to
5fc0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
5fd0: 45 4e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e  EN..** Return an
5fe0: 20 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f   error (non-zero
5ff0: 29 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 77  ) if the magic w
6000: 61 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41  as not SQLITE_MA
6010: 47 49 43 5f 42 55 53 59 0a 2a 2a 20 77 68 65 6e  GIC_BUSY.** when
6020: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
6030: 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 23 69 66 64   called..*/.#ifd
6040: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
6050: 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
6060: 79 4f 66 66 28 73 71 6c 69 74 65 33 20 2a 64 62  yOff(sqlite3 *db
6070: 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67  ){.  if( db->mag
6080: 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic==SQLITE_MAGIC
6090: 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 64 62 2d  _BUSY ){.    db-
60a0: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
60b0: 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 20 20  MAGIC_OPEN;.    
60c0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
60d0: 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e 6d  mutex_held(db->m
60e0: 75 74 65 78 29 20 29 3b 0a 20 20 20 20 72 65 74  utex) );.    ret
60f0: 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  urn 0;.  }else{.
6100: 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
6110: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
6120: 4f 52 3b 0a 20 20 20 20 64 62 2d 3e 75 31 2e 69  OR;.    db->u1.i
6130: 73 49 6e 74 65 72 72 75 70 74 65 64 20 3d 20 31  sInterrupted = 1
6140: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
6150: 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a    }.}.#endif../*
6160: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 6d 61 6b  .** Check to mak
6170: 65 20 73 75 72 65 20 77 65 20 68 61 76 65 20 61  e sure we have a
6180: 20 76 61 6c 69 64 20 64 62 20 70 6f 69 6e 74 65   valid db pointe
6190: 72 2e 20 20 54 68 69 73 20 74 65 73 74 20 69 73  r.  This test is
61a0: 20 6e 6f 74 0a 2a 2a 20 66 6f 6f 6c 70 72 6f 6f   not.** foolproo
61b0: 66 20 62 75 74 20 69 74 20 64 6f 65 73 20 70 72  f but it does pr
61c0: 6f 76 69 64 65 20 73 6f 6d 65 20 6d 65 61 73 75  ovide some measu
61d0: 72 65 20 6f 66 20 70 72 6f 74 65 63 74 69 6f 6e  re of protection
61e0: 20 61 67 61 69 6e 73 74 0a 2a 2a 20 6d 69 73 75   against.** misu
61f0: 73 65 20 6f 66 20 74 68 65 20 69 6e 74 65 72 66  se of the interf
6200: 61 63 65 20 73 75 63 68 20 61 73 20 70 61 73 73  ace such as pass
6210: 69 6e 67 20 69 6e 20 64 62 20 70 6f 69 6e 74 65  ing in db pointe
6220: 72 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 4e  rs that are.** N
6230: 55 4c 4c 20 6f 72 20 77 68 69 63 68 20 68 61 76  ULL or which hav
6240: 65 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c  e been previousl
6250: 79 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  y closed.  If th
6260: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
6270: 6e 73 0a 2a 2a 20 31 20 69 74 20 6d 65 61 6e 73  ns.** 1 it means
6280: 20 74 68 61 74 20 74 68 65 20 64 62 20 70 6f 69   that the db poi
6290: 6e 74 65 72 20 69 73 20 76 61 6c 69 64 20 61 6e  nter is valid an
62a0: 64 20 30 20 69 66 20 69 74 20 73 68 6f 75 6c 64  d 0 if it should
62b0: 20 6e 6f 74 20 62 65 0a 2a 2a 20 64 65 72 65 66   not be.** deref
62c0: 65 72 65 6e 63 65 64 20 66 6f 72 20 61 6e 79 20  erenced for any 
62d0: 72 65 61 73 6f 6e 2e 20 20 54 68 65 20 63 61 6c  reason.  The cal
62e0: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 68  ling function sh
62f0: 6f 75 6c 64 20 69 6e 76 6f 6b 65 0a 2a 2a 20 53  ould invoke.** S
6300: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 69 6d 6d  QLITE_MISUSE imm
6310: 65 64 69 61 74 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20  ediately..**.** 
6320: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
6330: 63 6b 4f 6b 28 29 20 72 65 71 75 69 72 65 73 20  ckOk() requires 
6340: 74 68 61 74 20 74 68 65 20 64 62 20 70 6f 69 6e  that the db poin
6350: 74 65 72 20 62 65 20 76 61 6c 69 64 20 66 6f 72  ter be valid for
6360: 0a 2a 2a 20 75 73 65 2e 20 20 73 71 6c 69 74 65  .** use.  sqlite
6370: 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b  3SafetyCheckSick
6380: 4f 72 4f 6b 28 29 20 61 6c 6c 6f 77 73 20 61 20  OrOk() allows a 
6390: 64 62 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  db pointer that 
63a0: 66 61 69 6c 65 64 20 74 6f 0a 2a 2a 20 6f 70 65  failed to.** ope
63b0: 6e 20 70 72 6f 70 65 72 6c 79 20 61 6e 64 20 69  n properly and i
63c0: 73 20 6e 6f 74 20 66 69 74 20 66 6f 72 20 67 65  s not fit for ge
63d0: 6e 65 72 61 6c 20 75 73 65 20 62 75 74 20 77 68  neral use but wh
63e0: 69 63 68 20 63 61 6e 20 62 65 0a 2a 2a 20 75 73  ich can be.** us
63f0: 65 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e  ed as an argumen
6400: 74 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 72 72  t to sqlite3_err
6410: 6d 73 67 28 29 20 6f 72 20 73 71 6c 69 74 65 33  msg() or sqlite3
6420: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 2f 0a 69 6e 74  _close()..*/.int
6430: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
6440: 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 20 2a 64  eckOk(sqlite3 *d
6450: 62 29 7b 0a 20 20 75 33 32 20 6d 61 67 69 63 3b  b){.  u32 magic;
6460: 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 72  .  if( db==0 ) r
6470: 65 74 75 72 6e 20 30 3b 0a 20 20 6d 61 67 69 63  eturn 0;.  magic
6480: 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a 20 20   = db->magic;.  
6490: 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c 49 54  if( magic!=SQLIT
64a0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 26 26 0a  E_MAGIC_OPEN &&.
64b0: 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53 51 4c        magic!=SQL
64c0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 29  ITE_MAGIC_BUSY )
64d0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
64e0: 75 72 6e 20 31 3b 0a 7d 0a 69 6e 74 20 73 71 6c  urn 1;.}.int sql
64f0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
6500: 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 20  ickOrOk(sqlite3 
6510: 2a 64 62 29 7b 0a 20 20 75 33 32 20 6d 61 67 69  *db){.  u32 magi
6520: 63 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29  c;.  if( db==0 )
6530: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6d 61 67   return 0;.  mag
6540: 69 63 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a  ic = db->magic;.
6550: 20 20 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c    if( magic!=SQL
6560: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 26  ITE_MAGIC_SICK &
6570: 26 0a 20 20 20 20 20 20 6d 61 67 69 63 21 3d 53  &.      magic!=S
6580: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
6590: 20 26 26 0a 20 20 20 20 20 20 6d 61 67 69 63 21   &&.      magic!
65a0: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
65b0: 53 59 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  SY ) return 0;. 
65c0: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a            return 1;.}.