/ Hex Artifact Content
Login

Artifact f58a68d062608eeed6d8229bb22a61b87e530d68:


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: 30 36 20 32 30 30 37 2f 30 36 2f 32 35 20 31 37  06 2007/06/25 17
0230: 3a 32 38 3a 30 32 20 64 72 68 20 45 78 70 20 24  :28:02 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 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
0270: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23  ude <stdarg.h>.#
0280: 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
0290: 3e 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68  >.../*.** Set th
02a0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  e most recent er
02b0: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 65 72 72  ror code and err
02c0: 6f 72 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  or string for th
02d0: 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64  e sqlite.** hand
02e0: 6c 65 20 22 64 62 22 2e 20 54 68 65 20 65 72 72  le "db". The err
02f0: 6f 72 20 63 6f 64 65 20 69 73 20 73 65 74 20 74  or code is set t
0300: 6f 20 22 65 72 72 5f 63 6f 64 65 22 2e 0a 2a 2a  o "err_code"..**
0310: 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 74  .** If it is not
0320: 20 4e 55 4c 4c 2c 20 73 74 72 69 6e 67 20 7a 46   NULL, string zF
0330: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 73 20  ormat specifies 
0340: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
0350: 65 0a 2a 2a 20 65 72 72 6f 72 20 73 74 72 69 6e  e.** error strin
0360: 67 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f  g in the style o
0370: 66 20 74 68 65 20 70 72 69 6e 74 66 20 66 75 6e  f the printf fun
0380: 63 74 69 6f 6e 73 3a 20 54 68 65 20 66 6f 6c 6c  ctions: The foll
0390: 6f 77 69 6e 67 0a 2a 2a 20 66 6f 72 6d 61 74 20  owing.** format 
03a0: 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 61  characters are a
03b0: 6c 6c 6f 77 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20  llowed:.**.**   
03c0: 20 20 20 25 73 20 20 20 20 20 20 49 6e 73 65 72     %s      Inser
03d0: 74 20 61 20 73 74 72 69 6e 67 0a 2a 2a 20 20 20  t a string.**   
03e0: 20 20 20 25 7a 20 20 20 20 20 20 41 20 73 74 72     %z      A str
03f0: 69 6e 67 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ing that should 
0400: 62 65 20 66 72 65 65 64 20 61 66 74 65 72 20 75  be freed after u
0410: 73 65 0a 2a 2a 20 20 20 20 20 20 25 64 20 20 20  se.**      %d   
0420: 20 20 20 49 6e 73 65 72 74 20 61 6e 20 69 6e 74     Insert an int
0430: 65 67 65 72 0a 2a 2a 20 20 20 20 20 20 25 54 20  eger.**      %T 
0440: 20 20 20 20 20 49 6e 73 65 72 74 20 61 20 74 6f       Insert a to
0450: 6b 65 6e 0a 2a 2a 20 20 20 20 20 20 25 53 20 20  ken.**      %S  
0460: 20 20 20 20 49 6e 73 65 72 74 20 74 68 65 20 66      Insert the f
0470: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
0480: 61 20 53 72 63 4c 69 73 74 0a 2a 2a 0a 2a 2a 20  a SrcList.**.** 
0490: 7a 46 6f 72 6d 61 74 20 61 6e 64 20 61 6e 79 20  zFormat and any 
04a0: 73 74 72 69 6e 67 20 74 6f 6b 65 6e 73 20 74 68  string tokens th
04b0: 61 74 20 66 6f 6c 6c 6f 77 20 69 74 20 61 72 65  at follow it are
04c0: 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 0a 2a   assumed to be.*
04d0: 2a 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46  * encoded in UTF
04e0: 2d 38 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 63 6c 65  -8..**.** To cle
04f0: 61 72 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  ar the most rece
0500: 6e 74 20 65 72 72 6f 72 20 66 6f 72 20 73 71 6c  nt error for sql
0510: 69 74 65 20 68 61 6e 64 6c 65 20 22 64 62 22 2c  ite handle "db",
0520: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 0a 2a 2a   sqlite3Error.**
0530: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
0540: 64 20 77 69 74 68 20 65 72 72 5f 63 6f 64 65 20  d with err_code 
0550: 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4f 4b  set to SQLITE_OK
0560: 20 61 6e 64 20 7a 46 6f 72 6d 61 74 20 73 65 74   and zFormat set
0570: 0a 2a 2a 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a  .** to NULL..*/.
0580: 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
0590: 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  r(sqlite3 *db, i
05a0: 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 63 6f 6e  nt err_code, con
05b0: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
05c0: 2c 20 2e 2e 2e 29 7b 0a 20 20 69 66 28 20 64 62  , ...){.  if( db
05d0: 20 26 26 20 28 64 62 2d 3e 70 45 72 72 20 7c 7c   && (db->pErr ||
05e0: 20 28 64 62 2d 3e 70 45 72 72 20 3d 20 73 71 6c   (db->pErr = sql
05f0: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 29 21  ite3ValueNew())!
0600: 3d 30 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 65  =0) ){.    db->e
0610: 72 72 43 6f 64 65 20 3d 20 65 72 72 5f 63 6f 64  rrCode = err_cod
0620: 65 3b 0a 20 20 20 20 69 66 28 20 7a 46 6f 72 6d  e;.    if( zForm
0630: 61 74 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  at ){.      char
0640: 20 2a 7a 3b 0a 20 20 20 20 20 20 76 61 5f 6c 69   *z;.      va_li
0650: 73 74 20 61 70 3b 0a 20 20 20 20 20 20 76 61 5f  st ap;.      va_
0660: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
0670: 74 29 3b 0a 20 20 20 20 20 20 7a 20 3d 20 73 71  t);.      z = sq
0680: 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 7a 46  lite3VMPrintf(zF
0690: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 20 20  ormat, ap);.    
06a0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
06b0: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
06c0: 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c  SetStr(db->pErr,
06d0: 20 2d 31 2c 20 7a 2c 20 53 51 4c 49 54 45 5f 55   -1, z, SQLITE_U
06e0: 54 46 38 2c 20 73 71 6c 69 74 65 33 46 72 65 65  TF8, sqlite3Free
06f0: 58 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  X);.    }else{. 
0700: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
0710: 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72  eSetStr(db->pErr
0720: 2c 20 30 2c 20 30 2c 20 53 51 4c 49 54 45 5f 55  , 0, 0, SQLITE_U
0730: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
0740: 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  IC);.    }.  }.}
0750: 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 20 61 6e 20 65  ../*.** Add an e
0760: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f 20  rror message to 
0770: 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 20  pParse->zErrMsg 
0780: 61 6e 64 20 69 6e 63 72 65 6d 65 6e 74 20 70 50  and increment pP
0790: 61 72 73 65 2d 3e 6e 45 72 72 2e 0a 2a 2a 20 54  arse->nErr..** T
07a0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
07b0: 6d 61 74 74 69 6e 67 20 63 68 61 72 61 63 74 65  matting characte
07c0: 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 3a 0a  rs are allowed:.
07d0: 2a 2a 0a 2a 2a 20 20 20 20 20 20 25 73 20 20 20  **.**      %s   
07e0: 20 20 20 49 6e 73 65 72 74 20 61 20 73 74 72 69     Insert a stri
07f0: 6e 67 0a 2a 2a 20 20 20 20 20 20 25 7a 20 20 20  ng.**      %z   
0800: 20 20 20 41 20 73 74 72 69 6e 67 20 74 68 61 74     A string that
0810: 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64   should be freed
0820: 20 61 66 74 65 72 20 75 73 65 0a 2a 2a 20 20 20   after use.**   
0830: 20 20 20 25 64 20 20 20 20 20 20 49 6e 73 65 72     %d      Inser
0840: 74 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  t an integer.** 
0850: 20 20 20 20 20 25 54 20 20 20 20 20 20 49 6e 73       %T      Ins
0860: 65 72 74 20 61 20 74 6f 6b 65 6e 0a 2a 2a 20 20  ert a token.**  
0870: 20 20 20 20 25 53 20 20 20 20 20 20 49 6e 73 65      %S      Inse
0880: 72 74 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  rt the first ele
0890: 6d 65 6e 74 20 6f 66 20 61 20 53 72 63 4c 69 73  ment of a SrcLis
08a0: 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  t.**.** This fun
08b0: 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 62 65 20  ction should be 
08c0: 75 73 65 64 20 74 6f 20 72 65 70 6f 72 74 20 61  used to report a
08d0: 6e 79 20 65 72 72 6f 72 20 74 68 61 74 20 6f 63  ny error that oc
08e0: 63 75 72 73 20 77 68 69 6c 73 74 0a 2a 2a 20 63  curs whilst.** c
08f0: 6f 6d 70 69 6c 69 6e 67 20 61 6e 20 53 51 4c 20  ompiling an SQL 
0900: 73 74 61 74 65 6d 65 6e 74 20 28 69 2e 65 2e 20  statement (i.e. 
0910: 77 69 74 68 69 6e 20 73 71 6c 69 74 65 33 5f 70  within sqlite3_p
0920: 72 65 70 61 72 65 28 29 29 2e 20 54 68 65 0a 2a  repare()). The.*
0930: 2a 20 6c 61 73 74 20 74 68 69 6e 67 20 74 68 65  * last thing the
0940: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
0950: 28 29 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  () function does
0960: 20 69 73 20 63 6f 70 79 20 74 68 65 20 65 72 72   is copy the err
0970: 6f 72 0a 2a 2a 20 73 74 6f 72 65 64 20 62 79 20  or.** stored by 
0980: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6e  this function in
0990: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
09a0: 68 61 6e 64 6c 65 20 75 73 69 6e 67 20 73 71 6c  handle using sql
09b0: 69 74 65 33 45 72 72 6f 72 28 29 2e 0a 2a 2a 20  ite3Error()..** 
09c0: 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
09d0: 45 72 72 6f 72 28 29 20 73 68 6f 75 6c 64 20 62  Error() should b
09e0: 65 20 75 73 65 64 20 64 75 72 69 6e 67 20 73 74  e used during st
09f0: 61 74 65 6d 65 6e 74 20 65 78 65 63 75 74 69 6f  atement executio
0a00: 6e 0a 2a 2a 20 28 73 71 6c 69 74 65 33 5f 73 74  n.** (sqlite3_st
0a10: 65 70 28 29 20 65 74 63 2e 29 2e 0a 2a 2f 0a 76  ep() etc.)..*/.v
0a20: 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
0a30: 4d 73 67 28 50 61 72 73 65 20 2a 70 50 61 72 73  Msg(Parse *pPars
0a40: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
0a50: 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20  Format, ...){.  
0a60: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 70 50  va_list ap;.  pP
0a70: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
0a80: 73 71 6c 69 74 65 46 72 65 65 28 70 50 61 72 73  sqliteFree(pPars
0a90: 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 76  e->zErrMsg);.  v
0aa0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
0ab0: 6d 61 74 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e  mat);.  pParse->
0ac0: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
0ad0: 33 56 4d 50 72 69 6e 74 66 28 7a 46 6f 72 6d 61  3VMPrintf(zForma
0ae0: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
0af0: 28 61 70 29 3b 0a 20 20 69 66 28 20 70 50 61 72  (ap);.  if( pPar
0b00: 73 65 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  se->rc==SQLITE_O
0b10: 4b 20 29 7b 0a 20 20 20 20 70 50 61 72 73 65 2d  K ){.    pParse-
0b20: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52  >rc = SQLITE_ERR
0b30: 4f 52 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  OR;.  }.}../*.**
0b40: 20 43 6c 65 61 72 20 74 68 65 20 65 72 72 6f 72   Clear the error
0b50: 20 6d 65 73 73 61 67 65 20 69 6e 20 70 50 61 72   message in pPar
0b60: 73 65 2c 20 69 66 20 61 6e 79 0a 2a 2f 0a 76 6f  se, if any.*/.vo
0b70: 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 43  id sqlite3ErrorC
0b80: 6c 65 61 72 28 50 61 72 73 65 20 2a 70 50 61 72  lear(Parse *pPar
0b90: 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 46 72 65  se){.  sqliteFre
0ba0: 65 28 70 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73  e(pParse->zErrMs
0bb0: 67 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 7a 45  g);.  pParse->zE
0bc0: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 70 50 61  rrMsg = 0;.  pPa
0bd0: 72 73 65 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 7d  rse->nErr = 0;.}
0be0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ../*.** Convert 
0bf0: 61 6e 20 53 51 4c 2d 73 74 79 6c 65 20 71 75 6f  an SQL-style quo
0c00: 74 65 64 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ted string into 
0c10: 61 20 6e 6f 72 6d 61 6c 20 73 74 72 69 6e 67 20  a normal string 
0c20: 62 79 20 72 65 6d 6f 76 69 6e 67 0a 2a 2a 20 74  by removing.** t
0c30: 68 65 20 71 75 6f 74 65 20 63 68 61 72 61 63 74  he quote charact
0c40: 65 72 73 2e 20 20 54 68 65 20 63 6f 6e 76 65 72  ers.  The conver
0c50: 73 69 6f 6e 20 69 73 20 64 6f 6e 65 20 69 6e 2d  sion is done in-
0c60: 70 6c 61 63 65 2e 20 20 49 66 20 74 68 65 0a 2a  place.  If the.*
0c70: 2a 20 69 6e 70 75 74 20 64 6f 65 73 20 6e 6f 74  * input does not
0c80: 20 62 65 67 69 6e 20 77 69 74 68 20 61 20 71 75   begin with a qu
0c90: 6f 74 65 20 63 68 61 72 61 63 74 65 72 2c 20 74  ote character, t
0ca0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
0cb0: 0a 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  .** is a no-op..
0cc0: 2a 2a 0a 2a 2a 20 32 30 30 32 2d 46 65 62 2d 31  **.** 2002-Feb-1
0cd0: 34 3a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  4: This routine 
0ce0: 69 73 20 65 78 74 65 6e 64 65 64 20 74 6f 20 72  is extended to r
0cf0: 65 6d 6f 76 65 20 4d 53 2d 41 63 63 65 73 73 20  emove MS-Access 
0d00: 73 74 79 6c 65 0a 2a 2a 20 62 72 61 63 6b 65 74  style.** bracket
0d10: 73 20 66 72 6f 6d 20 61 72 6f 75 6e 64 20 69 64  s from around id
0d20: 65 6e 74 69 66 65 72 73 2e 20 20 46 6f 72 20 65  entifers.  For e
0d30: 78 61 6d 70 6c 65 3a 20 20 22 5b 61 2d 62 2d 63  xample:  "[a-b-c
0d40: 5d 22 20 62 65 63 6f 6d 65 73 0a 2a 2a 20 22 61  ]" becomes.** "a
0d50: 2d 62 2d 63 22 2e 0a 2a 2f 0a 76 6f 69 64 20 73  -b-c"..*/.void s
0d60: 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
0d70: 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 71 75  ar *z){.  int qu
0d80: 6f 74 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b  ote;.  int i, j;
0d90: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65  .  if( z==0 ) re
0da0: 74 75 72 6e 3b 0a 20 20 71 75 6f 74 65 20 3d 20  turn;.  quote = 
0db0: 7a 5b 30 5d 3b 0a 20 20 73 77 69 74 63 68 28 20  z[0];.  switch( 
0dc0: 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 61 73  quote ){.    cas
0dd0: 65 20 27 5c 27 27 3a 20 20 62 72 65 61 6b 3b 0a  e '\'':  break;.
0de0: 20 20 20 20 63 61 73 65 20 27 22 27 3a 20 20 20      case '"':   
0df0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0e00: 27 60 27 3a 20 20 20 62 72 65 61 6b 3b 20 20 20  '`':   break;   
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0e20: 46 6f 72 20 4d 79 53 51 4c 20 63 6f 6d 70 61 74  For MySQL compat
0e30: 69 62 69 6c 69 74 79 20 2a 2f 0a 20 20 20 20 63  ibility */.    c
0e40: 61 73 65 20 27 5b 27 3a 20 20 20 71 75 6f 74 65  ase '[':   quote
0e50: 20 3d 20 27 5d 27 3b 20 20 62 72 65 61 6b 3b 20   = ']';  break; 
0e60: 20 2f 2a 20 46 6f 72 20 4d 53 20 53 71 6c 53 65   /* For MS SqlSe
0e70: 72 76 65 72 20 63 6f 6d 70 61 74 69 62 69 6c 69  rver compatibili
0e80: 74 79 20 2a 2f 0a 20 20 20 20 64 65 66 61 75 6c  ty */.    defaul
0e90: 74 3a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  t:    return;.  
0ea0: 7d 0a 20 20 66 6f 72 28 69 3d 31 2c 20 6a 3d 30  }.  for(i=1, j=0
0eb0: 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20  ; z[i]; i++){.  
0ec0: 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 71 75 6f 74    if( z[i]==quot
0ed0: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  e ){.      if( z
0ee0: 5b 69 2b 31 5d 3d 3d 71 75 6f 74 65 20 29 7b 0a  [i+1]==quote ){.
0ef0: 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d          z[j++] =
0f00: 20 71 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20   quote;.        
0f10: 69 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  i++;.      }else
0f20: 7b 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d  {.        z[j++]
0f30: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72   = 0;.        br
0f40: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
0f50: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 5b   }else{.      z[
0f60: 6a 2b 2b 5d 20 3d 20 7a 5b 69 5d 3b 0a 20 20 20  j++] = z[i];.   
0f70: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 41 6e 20   }.  }.}../* An 
0f80: 61 72 72 61 79 20 74 6f 20 6d 61 70 20 61 6c 6c  array to map all
0f90: 20 75 70 70 65 72 2d 63 61 73 65 20 63 68 61 72   upper-case char
0fa0: 61 63 74 65 72 73 20 69 6e 74 6f 20 74 68 65 69  acters into thei
0fb0: 72 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  r corresponding.
0fc0: 2a 2a 20 6c 6f 77 65 72 2d 63 61 73 65 20 63 68  ** lower-case ch
0fd0: 61 72 61 63 74 65 72 2e 20 0a 2a 2f 0a 63 6f 6e  aracter. .*/.con
0fe0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
0ff0: 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
1000: 6f 77 65 72 5b 5d 20 3d 20 7b 0a 23 69 66 64 65  ower[] = {.#ifde
1010: 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 20  f SQLITE_ASCII. 
1020: 20 20 20 20 20 30 2c 20 20 31 2c 20 20 32 2c 20       0,  1,  2, 
1030: 20 33 2c 20 20 34 2c 20 20 35 2c 20 20 36 2c 20   3,  4,  5,  6, 
1040: 20 37 2c 20 20 38 2c 20 20 39 2c 20 31 30 2c 20   7,  8,  9, 10, 
1050: 31 31 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c 20  11, 12, 13, 14, 
1060: 31 35 2c 20 31 36 2c 20 31 37 2c 0a 20 20 20 20  15, 16, 17,.    
1070: 20 31 38 2c 20 31 39 2c 20 32 30 2c 20 32 31 2c   18, 19, 20, 21,
1080: 20 32 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c   22, 23, 24, 25,
1090: 20 32 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c   26, 27, 28, 29,
10a0: 20 33 30 2c 20 33 31 2c 20 33 32 2c 20 33 33 2c   30, 31, 32, 33,
10b0: 20 33 34 2c 20 33 35 2c 0a 20 20 20 20 20 33 36   34, 35,.     36
10c0: 2c 20 33 37 2c 20 33 38 2c 20 33 39 2c 20 34 30  , 37, 38, 39, 40
10d0: 2c 20 34 31 2c 20 34 32 2c 20 34 33 2c 20 34 34  , 41, 42, 43, 44
10e0: 2c 20 34 35 2c 20 34 36 2c 20 34 37 2c 20 34 38  , 45, 46, 47, 48
10f0: 2c 20 34 39 2c 20 35 30 2c 20 35 31 2c 20 35 32  , 49, 50, 51, 52
1100: 2c 20 35 33 2c 0a 20 20 20 20 20 35 34 2c 20 35  , 53,.     54, 5
1110: 35 2c 20 35 36 2c 20 35 37 2c 20 35 38 2c 20 35  5, 56, 57, 58, 5
1120: 39 2c 20 36 30 2c 20 36 31 2c 20 36 32 2c 20 36  9, 60, 61, 62, 6
1130: 33 2c 20 36 34 2c 20 39 37 2c 20 39 38 2c 20 39  3, 64, 97, 98, 9
1140: 39 2c 31 30 30 2c 31 30 31 2c 31 30 32 2c 31 30  9,100,101,102,10
1150: 33 2c 0a 20 20 20 20 31 30 34 2c 31 30 35 2c 31  3,.    104,105,1
1160: 30 36 2c 31 30 37 2c 31 30 38 2c 31 30 39 2c 31  06,107,108,109,1
1170: 31 30 2c 31 31 31 2c 31 31 32 2c 31 31 33 2c 31  10,111,112,113,1
1180: 31 34 2c 31 31 35 2c 31 31 36 2c 31 31 37 2c 31  14,115,116,117,1
1190: 31 38 2c 31 31 39 2c 31 32 30 2c 31 32 31 2c 0a  18,119,120,121,.
11a0: 20 20 20 20 31 32 32 2c 20 39 31 2c 20 39 32 2c      122, 91, 92,
11b0: 20 39 33 2c 20 39 34 2c 20 39 35 2c 20 39 36 2c   93, 94, 95, 96,
11c0: 20 39 37 2c 20 39 38 2c 20 39 39 2c 31 30 30 2c   97, 98, 99,100,
11d0: 31 30 31 2c 31 30 32 2c 31 30 33 2c 31 30 34 2c  101,102,103,104,
11e0: 31 30 35 2c 31 30 36 2c 31 30 37 2c 0a 20 20 20  105,106,107,.   
11f0: 20 31 30 38 2c 31 30 39 2c 31 31 30 2c 31 31 31   108,109,110,111
1200: 2c 31 31 32 2c 31 31 33 2c 31 31 34 2c 31 31 35  ,112,113,114,115
1210: 2c 31 31 36 2c 31 31 37 2c 31 31 38 2c 31 31 39  ,116,117,118,119
1220: 2c 31 32 30 2c 31 32 31 2c 31 32 32 2c 31 32 33  ,120,121,122,123
1230: 2c 31 32 34 2c 31 32 35 2c 0a 20 20 20 20 31 32  ,124,125,.    12
1240: 36 2c 31 32 37 2c 31 32 38 2c 31 32 39 2c 31 33  6,127,128,129,13
1250: 30 2c 31 33 31 2c 31 33 32 2c 31 33 33 2c 31 33  0,131,132,133,13
1260: 34 2c 31 33 35 2c 31 33 36 2c 31 33 37 2c 31 33  4,135,136,137,13
1270: 38 2c 31 33 39 2c 31 34 30 2c 31 34 31 2c 31 34  8,139,140,141,14
1280: 32 2c 31 34 33 2c 0a 20 20 20 20 31 34 34 2c 31  2,143,.    144,1
1290: 34 35 2c 31 34 36 2c 31 34 37 2c 31 34 38 2c 31  45,146,147,148,1
12a0: 34 39 2c 31 35 30 2c 31 35 31 2c 31 35 32 2c 31  49,150,151,152,1
12b0: 35 33 2c 31 35 34 2c 31 35 35 2c 31 35 36 2c 31  53,154,155,156,1
12c0: 35 37 2c 31 35 38 2c 31 35 39 2c 31 36 30 2c 31  57,158,159,160,1
12d0: 36 31 2c 0a 20 20 20 20 31 36 32 2c 31 36 33 2c  61,.    162,163,
12e0: 31 36 34 2c 31 36 35 2c 31 36 36 2c 31 36 37 2c  164,165,166,167,
12f0: 31 36 38 2c 31 36 39 2c 31 37 30 2c 31 37 31 2c  168,169,170,171,
1300: 31 37 32 2c 31 37 33 2c 31 37 34 2c 31 37 35 2c  172,173,174,175,
1310: 31 37 36 2c 31 37 37 2c 31 37 38 2c 31 37 39 2c  176,177,178,179,
1320: 0a 20 20 20 20 31 38 30 2c 31 38 31 2c 31 38 32  .    180,181,182
1330: 2c 31 38 33 2c 31 38 34 2c 31 38 35 2c 31 38 36  ,183,184,185,186
1340: 2c 31 38 37 2c 31 38 38 2c 31 38 39 2c 31 39 30  ,187,188,189,190
1350: 2c 31 39 31 2c 31 39 32 2c 31 39 33 2c 31 39 34  ,191,192,193,194
1360: 2c 31 39 35 2c 31 39 36 2c 31 39 37 2c 0a 20 20  ,195,196,197,.  
1370: 20 20 31 39 38 2c 31 39 39 2c 32 30 30 2c 32 30    198,199,200,20
1380: 31 2c 32 30 32 2c 32 30 33 2c 32 30 34 2c 32 30  1,202,203,204,20
1390: 35 2c 32 30 36 2c 32 30 37 2c 32 30 38 2c 32 30  5,206,207,208,20
13a0: 39 2c 32 31 30 2c 32 31 31 2c 32 31 32 2c 32 31  9,210,211,212,21
13b0: 33 2c 32 31 34 2c 32 31 35 2c 0a 20 20 20 20 32  3,214,215,.    2
13c0: 31 36 2c 32 31 37 2c 32 31 38 2c 32 31 39 2c 32  16,217,218,219,2
13d0: 32 30 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c 32  20,221,222,223,2
13e0: 32 34 2c 32 32 35 2c 32 32 36 2c 32 32 37 2c 32  24,225,226,227,2
13f0: 32 38 2c 32 32 39 2c 32 33 30 2c 32 33 31 2c 32  28,229,230,231,2
1400: 33 32 2c 32 33 33 2c 0a 20 20 20 20 32 33 34 2c  32,233,.    234,
1410: 32 33 35 2c 32 33 36 2c 32 33 37 2c 32 33 38 2c  235,236,237,238,
1420: 32 33 39 2c 32 34 30 2c 32 34 31 2c 32 34 32 2c  239,240,241,242,
1430: 32 34 33 2c 32 34 34 2c 32 34 35 2c 32 34 36 2c  243,244,245,246,
1440: 32 34 37 2c 32 34 38 2c 32 34 39 2c 32 35 30 2c  247,248,249,250,
1450: 32 35 31 2c 0a 20 20 20 20 32 35 32 2c 32 35 33  251,.    252,253
1460: 2c 32 35 34 2c 32 35 35 0a 23 65 6e 64 69 66 0a  ,254,255.#endif.
1470: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 42  #ifdef SQLITE_EB
1480: 43 44 49 43 0a 20 20 20 20 20 20 30 2c 20 20 31  CDIC.      0,  1
1490: 2c 20 20 32 2c 20 20 33 2c 20 20 34 2c 20 20 35  ,  2,  3,  4,  5
14a0: 2c 20 20 36 2c 20 20 37 2c 20 20 38 2c 20 20 39  ,  6,  7,  8,  9
14b0: 2c 20 31 30 2c 20 31 31 2c 20 31 32 2c 20 31 33  , 10, 11, 12, 13
14c0: 2c 20 31 34 2c 20 31 35 2c 20 2f 2a 20 30 78 20  , 14, 15, /* 0x 
14d0: 2a 2f 0a 20 20 20 20 20 31 36 2c 20 31 37 2c 20  */.     16, 17, 
14e0: 31 38 2c 20 31 39 2c 20 32 30 2c 20 32 31 2c 20  18, 19, 20, 21, 
14f0: 32 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c 20  22, 23, 24, 25, 
1500: 32 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c 20  26, 27, 28, 29, 
1510: 33 30 2c 20 33 31 2c 20 2f 2a 20 31 78 20 2a 2f  30, 31, /* 1x */
1520: 0a 20 20 20 20 20 33 32 2c 20 33 33 2c 20 33 34  .     32, 33, 34
1530: 2c 20 33 35 2c 20 33 36 2c 20 33 37 2c 20 33 38  , 35, 36, 37, 38
1540: 2c 20 33 39 2c 20 34 30 2c 20 34 31 2c 20 34 32  , 39, 40, 41, 42
1550: 2c 20 34 33 2c 20 34 34 2c 20 34 35 2c 20 34 36  , 43, 44, 45, 46
1560: 2c 20 34 37 2c 20 2f 2a 20 32 78 20 2a 2f 0a 20  , 47, /* 2x */. 
1570: 20 20 20 20 34 38 2c 20 34 39 2c 20 35 30 2c 20      48, 49, 50, 
1580: 35 31 2c 20 35 32 2c 20 35 33 2c 20 35 34 2c 20  51, 52, 53, 54, 
1590: 35 35 2c 20 35 36 2c 20 35 37 2c 20 35 38 2c 20  55, 56, 57, 58, 
15a0: 35 39 2c 20 36 30 2c 20 36 31 2c 20 36 32 2c 20  59, 60, 61, 62, 
15b0: 36 33 2c 20 2f 2a 20 33 78 20 2a 2f 0a 20 20 20  63, /* 3x */.   
15c0: 20 20 36 34 2c 20 36 35 2c 20 36 36 2c 20 36 37    64, 65, 66, 67
15d0: 2c 20 36 38 2c 20 36 39 2c 20 37 30 2c 20 37 31  , 68, 69, 70, 71
15e0: 2c 20 37 32 2c 20 37 33 2c 20 37 34 2c 20 37 35  , 72, 73, 74, 75
15f0: 2c 20 37 36 2c 20 37 37 2c 20 37 38 2c 20 37 39  , 76, 77, 78, 79
1600: 2c 20 2f 2a 20 34 78 20 2a 2f 0a 20 20 20 20 20  , /* 4x */.     
1610: 38 30 2c 20 38 31 2c 20 38 32 2c 20 38 33 2c 20  80, 81, 82, 83, 
1620: 38 34 2c 20 38 35 2c 20 38 36 2c 20 38 37 2c 20  84, 85, 86, 87, 
1630: 38 38 2c 20 38 39 2c 20 39 30 2c 20 39 31 2c 20  88, 89, 90, 91, 
1640: 39 32 2c 20 39 33 2c 20 39 34 2c 20 39 35 2c 20  92, 93, 94, 95, 
1650: 2f 2a 20 35 78 20 2a 2f 0a 20 20 20 20 20 39 36  /* 5x */.     96
1660: 2c 20 39 37 2c 20 36 36 2c 20 36 37 2c 20 36 38  , 97, 66, 67, 68
1670: 2c 20 36 39 2c 20 37 30 2c 20 37 31 2c 20 37 32  , 69, 70, 71, 72
1680: 2c 20 37 33 2c 31 30 36 2c 31 30 37 2c 31 30 38  , 73,106,107,108
1690: 2c 31 30 39 2c 31 31 30 2c 31 31 31 2c 20 2f 2a  ,109,110,111, /*
16a0: 20 36 78 20 2a 2f 0a 20 20 20 20 31 31 32 2c 20   6x */.    112, 
16b0: 38 31 2c 20 38 32 2c 20 38 33 2c 20 38 34 2c 20  81, 82, 83, 84, 
16c0: 38 35 2c 20 38 36 2c 20 38 37 2c 20 38 38 2c 20  85, 86, 87, 88, 
16d0: 38 39 2c 31 32 32 2c 31 32 33 2c 31 32 34 2c 31  89,122,123,124,1
16e0: 32 35 2c 31 32 36 2c 31 32 37 2c 20 2f 2a 20 37  25,126,127, /* 7
16f0: 78 20 2a 2f 0a 20 20 20 20 31 32 38 2c 31 32 39  x */.    128,129
1700: 2c 31 33 30 2c 31 33 31 2c 31 33 32 2c 31 33 33  ,130,131,132,133
1710: 2c 31 33 34 2c 31 33 35 2c 31 33 36 2c 31 33 37  ,134,135,136,137
1720: 2c 31 33 38 2c 31 33 39 2c 31 34 30 2c 31 34 31  ,138,139,140,141
1730: 2c 31 34 32 2c 31 34 33 2c 20 2f 2a 20 38 78 20  ,142,143, /* 8x 
1740: 2a 2f 0a 20 20 20 20 31 34 34 2c 31 34 35 2c 31  */.    144,145,1
1750: 34 36 2c 31 34 37 2c 31 34 38 2c 31 34 39 2c 31  46,147,148,149,1
1760: 35 30 2c 31 35 31 2c 31 35 32 2c 31 35 33 2c 31  50,151,152,153,1
1770: 35 34 2c 31 35 35 2c 31 35 36 2c 31 35 37 2c 31  54,155,156,157,1
1780: 35 36 2c 31 35 39 2c 20 2f 2a 20 39 78 20 2a 2f  56,159, /* 9x */
1790: 0a 20 20 20 20 31 36 30 2c 31 36 31 2c 31 36 32  .    160,161,162
17a0: 2c 31 36 33 2c 31 36 34 2c 31 36 35 2c 31 36 36  ,163,164,165,166
17b0: 2c 31 36 37 2c 31 36 38 2c 31 36 39 2c 31 37 30  ,167,168,169,170
17c0: 2c 31 37 31 2c 31 34 30 2c 31 34 31 2c 31 34 32  ,171,140,141,142
17d0: 2c 31 37 35 2c 20 2f 2a 20 41 78 20 2a 2f 0a 20  ,175, /* Ax */. 
17e0: 20 20 20 31 37 36 2c 31 37 37 2c 31 37 38 2c 31     176,177,178,1
17f0: 37 39 2c 31 38 30 2c 31 38 31 2c 31 38 32 2c 31  79,180,181,182,1
1800: 38 33 2c 31 38 34 2c 31 38 35 2c 31 38 36 2c 31  83,184,185,186,1
1810: 38 37 2c 31 38 38 2c 31 38 39 2c 31 39 30 2c 31  87,188,189,190,1
1820: 39 31 2c 20 2f 2a 20 42 78 20 2a 2f 0a 20 20 20  91, /* Bx */.   
1830: 20 31 39 32 2c 31 32 39 2c 31 33 30 2c 31 33 31   192,129,130,131
1840: 2c 31 33 32 2c 31 33 33 2c 31 33 34 2c 31 33 35  ,132,133,134,135
1850: 2c 31 33 36 2c 31 33 37 2c 32 30 32 2c 32 30 33  ,136,137,202,203
1860: 2c 32 30 34 2c 32 30 35 2c 32 30 36 2c 32 30 37  ,204,205,206,207
1870: 2c 20 2f 2a 20 43 78 20 2a 2f 0a 20 20 20 20 32  , /* Cx */.    2
1880: 30 38 2c 31 34 35 2c 31 34 36 2c 31 34 37 2c 31  08,145,146,147,1
1890: 34 38 2c 31 34 39 2c 31 35 30 2c 31 35 31 2c 31  48,149,150,151,1
18a0: 35 32 2c 31 35 33 2c 32 31 38 2c 32 31 39 2c 32  52,153,218,219,2
18b0: 32 30 2c 32 32 31 2c 32 32 32 2c 32 32 33 2c 20  20,221,222,223, 
18c0: 2f 2a 20 44 78 20 2a 2f 0a 20 20 20 20 32 32 34  /* Dx */.    224
18d0: 2c 32 32 35 2c 31 36 32 2c 31 36 33 2c 31 36 34  ,225,162,163,164
18e0: 2c 31 36 35 2c 31 36 36 2c 31 36 37 2c 31 36 38  ,165,166,167,168
18f0: 2c 31 36 39 2c 32 33 32 2c 32 30 33 2c 32 30 34  ,169,232,203,204
1900: 2c 32 30 35 2c 32 30 36 2c 32 30 37 2c 20 2f 2a  ,205,206,207, /*
1910: 20 45 78 20 2a 2f 0a 20 20 20 20 32 33 39 2c 32   Ex */.    239,2
1920: 34 30 2c 32 34 31 2c 32 34 32 2c 32 34 33 2c 32  40,241,242,243,2
1930: 34 34 2c 32 34 35 2c 32 34 36 2c 32 34 37 2c 32  44,245,246,247,2
1940: 34 38 2c 32 34 39 2c 32 31 39 2c 32 32 30 2c 32  48,249,219,220,2
1950: 32 31 2c 32 32 32 2c 32 35 35 2c 20 2f 2a 20 46  21,222,255, /* F
1960: 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 23  x */.#endif.};.#
1970: 64 65 66 69 6e 65 20 55 70 70 65 72 54 6f 4c 6f  define UpperToLo
1980: 77 65 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  wer sqlite3Upper
1990: 54 6f 4c 6f 77 65 72 0a 0a 2f 2a 0a 2a 2a 20 53  ToLower../*.** S
19a0: 6f 6d 65 20 73 79 73 74 65 6d 73 20 68 61 76 65  ome systems have
19b0: 20 73 74 72 69 63 6d 70 28 29 2e 20 20 4f 74 68   stricmp().  Oth
19c0: 65 72 73 20 68 61 76 65 20 73 74 72 63 61 73 65  ers have strcase
19d0: 63 6d 70 28 29 2e 20 20 42 65 63 61 75 73 65 0a  cmp().  Because.
19e0: 2a 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 20 63  ** there is no c
19f0: 6f 6e 73 69 73 74 65 6e 63 79 2c 20 77 65 20 77  onsistency, we w
1a00: 69 6c 6c 20 64 65 66 69 6e 65 20 6f 75 72 20 6f  ill define our o
1a10: 77 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  wn..*/.int sqlit
1a20: 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20  e3StrICmp(const 
1a30: 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e  char *zLeft, con
1a40: 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68 74 29  st char *zRight)
1a50: 7b 0a 20 20 72 65 67 69 73 74 65 72 20 75 6e 73  {.  register uns
1a60: 69 67 6e 65 64 20 63 68 61 72 20 2a 61 2c 20 2a  igned char *a, *
1a70: 62 3b 0a 20 20 61 20 3d 20 28 75 6e 73 69 67 6e  b;.  a = (unsign
1a80: 65 64 20 63 68 61 72 20 2a 29 7a 4c 65 66 74 3b  ed char *)zLeft;
1a90: 0a 20 20 62 20 3d 20 28 75 6e 73 69 67 6e 65 64  .  b = (unsigned
1aa0: 20 63 68 61 72 20 2a 29 7a 52 69 67 68 74 3b 0a   char *)zRight;.
1ab0: 20 20 77 68 69 6c 65 28 20 2a 61 21 3d 30 20 26    while( *a!=0 &
1ac0: 26 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a  & UpperToLower[*
1ad0: 61 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72  a]==UpperToLower
1ae0: 5b 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b  [*b]){ a++; b++;
1af0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 55 70 70 65   }.  return Uppe
1b00: 72 54 6f 4c 6f 77 65 72 5b 2a 61 5d 20 2d 20 55  rToLower[*a] - U
1b10: 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 62 5d 3b  pperToLower[*b];
1b20: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  .}.int sqlite3St
1b30: 72 4e 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  rNICmp(const cha
1b40: 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20  r *zLeft, const 
1b50: 63 68 61 72 20 2a 7a 52 69 67 68 74 2c 20 69 6e  char *zRight, in
1b60: 74 20 4e 29 7b 0a 20 20 72 65 67 69 73 74 65 72  t N){.  register
1b70: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1b80: 61 2c 20 2a 62 3b 0a 20 20 61 20 3d 20 28 75 6e  a, *b;.  a = (un
1b90: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 4c  signed char *)zL
1ba0: 65 66 74 3b 0a 20 20 62 20 3d 20 28 75 6e 73 69  eft;.  b = (unsi
1bb0: 67 6e 65 64 20 63 68 61 72 20 2a 29 7a 52 69 67  gned char *)zRig
1bc0: 68 74 3b 0a 20 20 77 68 69 6c 65 28 20 4e 2d 2d  ht;.  while( N--
1bd0: 20 3e 20 30 20 26 26 20 2a 61 21 3d 30 20 26 26   > 0 && *a!=0 &&
1be0: 20 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 2a 61   UpperToLower[*a
1bf0: 5d 3d 3d 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  ]==UpperToLower[
1c00: 2a 62 5d 29 7b 20 61 2b 2b 3b 20 62 2b 2b 3b 20  *b]){ a++; b++; 
1c10: 7d 0a 20 20 72 65 74 75 72 6e 20 4e 3c 30 20 3f  }.  return N<0 ?
1c20: 20 30 20 3a 20 55 70 70 65 72 54 6f 4c 6f 77 65   0 : UpperToLowe
1c30: 72 5b 2a 61 5d 20 2d 20 55 70 70 65 72 54 6f 4c  r[*a] - UpperToL
1c40: 6f 77 65 72 5b 2a 62 5d 3b 0a 7d 0a 0a 2f 2a 0a  ower[*b];.}../*.
1c50: 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 69  ** Return TRUE i
1c60: 66 20 7a 20 69 73 20 61 20 70 75 72 65 20 6e 75  f z is a pure nu
1c70: 6d 65 72 69 63 20 73 74 72 69 6e 67 2e 20 20 52  meric string.  R
1c80: 65 74 75 72 6e 20 46 41 4c 53 45 20 69 66 20 74  eturn FALSE if t
1c90: 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 63 6f 6e  he.** string con
1ca0: 74 61 69 6e 73 20 61 6e 79 20 63 68 61 72 61 63  tains any charac
1cb0: 74 65 72 20 77 68 69 63 68 20 69 73 20 6e 6f 74  ter which is not
1cc0: 20 70 61 72 74 20 6f 66 20 61 20 6e 75 6d 62 65   part of a numbe
1cd0: 72 2e 20 49 66 0a 2a 2a 20 74 68 65 20 73 74 72  r. If.** the str
1ce0: 69 6e 67 20 69 73 20 6e 75 6d 65 72 69 63 20 61  ing is numeric a
1cf0: 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  nd contains the 
1d00: 27 2e 27 20 63 68 61 72 61 63 74 65 72 2c 20 73  '.' character, s
1d10: 65 74 20 2a 72 65 61 6c 6e 75 6d 0a 2a 2a 20 74  et *realnum.** t
1d20: 6f 20 54 52 55 45 20 28 6f 74 68 65 72 77 69 73  o TRUE (otherwis
1d30: 65 20 46 41 4c 53 45 29 2e 0a 2a 2a 0a 2a 2a 20  e FALSE)..**.** 
1d40: 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  An empty string 
1d50: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 6e 6f  is considered no
1d60: 6e 2d 6e 75 6d 65 72 69 63 2e 0a 2a 2f 0a 69 6e  n-numeric..*/.in
1d70: 74 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65  t sqlite3IsNumbe
1d80: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  r(const char *z,
1d90: 20 69 6e 74 20 2a 72 65 61 6c 6e 75 6d 2c 20 75   int *realnum, u
1da0: 38 20 65 6e 63 29 7b 0a 20 20 69 6e 74 20 69 6e  8 enc){.  int in
1db0: 63 72 20 3d 20 28 65 6e 63 3d 3d 53 51 4c 49 54  cr = (enc==SQLIT
1dc0: 45 5f 55 54 46 38 3f 31 3a 32 29 3b 0a 20 20 69  E_UTF8?1:2);.  i
1dd0: 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  f( enc==SQLITE_U
1de0: 54 46 31 36 42 45 20 29 20 7a 2b 2b 3b 0a 20 20  TF16BE ) z++;.  
1df0: 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a  if( *z=='-' || *
1e00: 7a 3d 3d 27 2b 27 20 29 20 7a 20 2b 3d 20 69 6e  z=='+' ) z += in
1e10: 63 72 3b 0a 20 20 69 66 28 20 21 69 73 64 69 67  cr;.  if( !isdig
1e20: 69 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20  it(*(u8*)z) ){. 
1e30: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
1e40: 0a 20 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20 20  .  z += incr;.  
1e50: 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72  if( realnum ) *r
1e60: 65 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68  ealnum = 0;.  wh
1e70: 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28 75  ile( isdigit(*(u
1e80: 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d 20 69 6e  8*)z) ){ z += in
1e90: 63 72 3b 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d  cr; }.  if( *z==
1ea0: 27 2e 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20  '.' ){.    z += 
1eb0: 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 21 69  incr;.    if( !i
1ec0: 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29 20  sdigit(*(u8*)z) 
1ed0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
1ee0: 77 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a  while( isdigit(*
1ef0: 28 75 38 2a 29 7a 29 20 29 7b 20 7a 20 2b 3d 20  (u8*)z) ){ z += 
1f00: 69 6e 63 72 3b 20 7d 0a 20 20 20 20 69 66 28 20  incr; }.    if( 
1f10: 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e  realnum ) *realn
1f20: 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66  um = 1;.  }.  if
1f30: 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d  ( *z=='e' || *z=
1f40: 3d 27 45 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d  ='E' ){.    z +=
1f50: 20 69 6e 63 72 3b 0a 20 20 20 20 69 66 28 20 2a   incr;.    if( *
1f60: 7a 3d 3d 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d  z=='+' || *z=='-
1f70: 27 20 29 20 7a 20 2b 3d 20 69 6e 63 72 3b 0a 20  ' ) z += incr;. 
1f80: 20 20 20 69 66 28 20 21 69 73 64 69 67 69 74 28     if( !isdigit(
1f90: 2a 28 75 38 2a 29 7a 29 20 29 20 72 65 74 75 72  *(u8*)z) ) retur
1fa0: 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n 0;.    while( 
1fb0: 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29 7a 29  isdigit(*(u8*)z)
1fc0: 20 29 7b 20 7a 20 2b 3d 20 69 6e 63 72 3b 20 7d   ){ z += incr; }
1fd0: 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d  .    if( realnum
1fe0: 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b   ) *realnum = 1;
1ff0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a  .  }.  return *z
2000: 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  ==0;.}../*.** Th
2010: 65 20 73 74 72 69 6e 67 20 7a 5b 5d 20 69 73 20  e string z[] is 
2020: 61 6e 20 61 73 63 69 69 20 72 65 70 72 65 73 65  an ascii represe
2030: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 72 65 61  ntation of a rea
2040: 6c 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 43 6f 6e  l number..** Con
2050: 76 65 72 74 20 74 68 69 73 20 73 74 72 69 6e 67  vert this string
2060: 20 74 6f 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2a   to a double..**
2070: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
2080: 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 7a 5b   assumes that z[
2090: 5d 20 72 65 61 6c 6c 79 20 69 73 20 61 20 76 61  ] really is a va
20a0: 6c 69 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20  lid number.  If 
20b0: 69 74 0a 2a 2a 20 69 73 20 6e 6f 74 2c 20 74 68  it.** is not, th
20c0: 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65  e result is unde
20d0: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  fined..**.** Thi
20e0: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73 65  s routine is use
20f0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  d instead of the
2100: 20 6c 69 62 72 61 72 79 20 61 74 6f 66 28 29 20   library atof() 
2110: 66 75 6e 63 74 69 6f 6e 20 62 65 63 61 75 73 65  function because
2120: 0a 2a 2a 20 74 68 65 20 6c 69 62 72 61 72 79 20  .** the library 
2130: 61 74 6f 66 28 29 20 6d 69 67 68 74 20 77 61 6e  atof() might wan
2140: 74 20 74 6f 20 75 73 65 20 22 2c 22 20 61 73 20  t to use "," as 
2150: 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
2160: 74 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20  t instead.** of 
2170: 22 2e 22 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  "." depending on
2180: 20 68 6f 77 20 6c 6f 63 61 6c 65 20 69 73 20 73   how locale is s
2190: 65 74 2e 20 20 42 75 74 20 74 68 61 74 20 77 6f  et.  But that wo
21a0: 75 6c 64 20 63 61 75 73 65 20 70 72 6f 62 6c 65  uld cause proble
21b0: 6d 73 0a 2a 2a 20 66 6f 72 20 53 51 4c 2e 20 20  ms.** for SQL.  
21c0: 53 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  So this routine 
21d0: 61 6c 77 61 79 73 20 75 73 65 73 20 22 2e 22 20  always uses "." 
21e0: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
21f0: 63 61 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  cale..*/.int sql
2200: 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
2210: 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 20 2a  har *z, double *
2220: 70 52 65 73 75 6c 74 29 7b 0a 23 69 66 6e 64 65  pResult){.#ifnde
2230: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2240: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
2250: 6e 74 20 73 69 67 6e 20 3d 20 31 3b 0a 20 20 63  nt sign = 1;.  c
2260: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42 65 67 69  onst char *zBegi
2270: 6e 20 3d 20 7a 3b 0a 20 20 4c 4f 4e 47 44 4f 55  n = z;.  LONGDOU
2280: 42 4c 45 5f 54 59 50 45 20 76 31 20 3d 20 30 2e  BLE_TYPE v1 = 0.
2290: 30 3b 0a 20 20 77 68 69 6c 65 28 20 69 73 73 70  0;.  while( issp
22a0: 61 63 65 28 2a 28 75 38 2a 29 7a 29 20 29 20 7a  ace(*(u8*)z) ) z
22b0: 2b 2b 3b 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d  ++;.  if( *z=='-
22c0: 27 20 29 7b 0a 20 20 20 20 73 69 67 6e 20 3d 20  ' ){.    sign = 
22d0: 2d 31 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d  -1;.    z++;.  }
22e0: 65 6c 73 65 20 69 66 28 20 2a 7a 3d 3d 27 2b 27  else if( *z=='+'
22f0: 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d   ){.    z++;.  }
2300: 0a 20 20 77 68 69 6c 65 28 20 69 73 64 69 67 69  .  while( isdigi
2310: 74 28 2a 28 75 38 2a 29 7a 29 20 29 7b 0a 20 20  t(*(u8*)z) ){.  
2320: 20 20 76 31 20 3d 20 76 31 2a 31 30 2e 30 20 2b    v1 = v1*10.0 +
2330: 20 28 2a 7a 20 2d 20 27 30 27 29 3b 0a 20 20 20   (*z - '0');.   
2340: 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20   z++;.  }.  if( 
2350: 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 4c  *z=='.' ){.    L
2360: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 64  ONGDOUBLE_TYPE d
2370: 69 76 69 73 6f 72 20 3d 20 31 2e 30 3b 0a 20 20  ivisor = 1.0;.  
2380: 20 20 7a 2b 2b 3b 0a 20 20 20 20 77 68 69 6c 65    z++;.    while
2390: 28 20 69 73 64 69 67 69 74 28 2a 28 75 38 2a 29  ( isdigit(*(u8*)
23a0: 7a 29 20 29 7b 0a 20 20 20 20 20 20 76 31 20 3d  z) ){.      v1 =
23b0: 20 76 31 2a 31 30 2e 30 20 2b 20 28 2a 7a 20 2d   v1*10.0 + (*z -
23c0: 20 27 30 27 29 3b 0a 20 20 20 20 20 20 64 69 76   '0');.      div
23d0: 69 73 6f 72 20 2a 3d 20 31 30 2e 30 3b 0a 20 20  isor *= 10.0;.  
23e0: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20      z++;.    }. 
23f0: 20 20 20 76 31 20 2f 3d 20 64 69 76 69 73 6f 72     v1 /= divisor
2400: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d  ;.  }.  if( *z==
2410: 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29  'e' || *z=='E' )
2420: 7b 0a 20 20 20 20 69 6e 74 20 65 73 69 67 6e 20  {.    int esign 
2430: 3d 20 31 3b 0a 20 20 20 20 69 6e 74 20 65 76 61  = 1;.    int eva
2440: 6c 20 3d 20 30 3b 0a 20 20 20 20 4c 4f 4e 47 44  l = 0;.    LONGD
2450: 4f 55 42 4c 45 5f 54 59 50 45 20 73 63 61 6c 65  OUBLE_TYPE scale
2460: 20 3d 20 31 2e 30 3b 0a 20 20 20 20 7a 2b 2b 3b   = 1.0;.    z++;
2470: 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27  .    if( *z=='-'
2480: 20 29 7b 0a 20 20 20 20 20 20 65 73 69 67 6e 20   ){.      esign 
2490: 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b  = -1;.      z++;
24a0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 2a  .    }else if( *
24b0: 7a 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 20 20  z=='+' ){.      
24c0: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  z++;.    }.    w
24d0: 68 69 6c 65 28 20 69 73 64 69 67 69 74 28 2a 28  hile( isdigit(*(
24e0: 75 38 2a 29 7a 29 20 29 7b 0a 20 20 20 20 20 20  u8*)z) ){.      
24f0: 65 76 61 6c 20 3d 20 65 76 61 6c 2a 31 30 20 2b  eval = eval*10 +
2500: 20 2a 7a 20 2d 20 27 30 27 3b 0a 20 20 20 20 20   *z - '0';.     
2510: 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20   z++;.    }.    
2520: 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 36 34 20  while( eval>=64 
2530: 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65  ){ scale *= 1.0e
2540: 2b 36 34 3b 20 65 76 61 6c 20 2d 3d 20 36 34 3b  +64; eval -= 64;
2550: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 65 76   }.    while( ev
2560: 61 6c 3e 3d 31 36 20 29 7b 20 73 63 61 6c 65 20  al>=16 ){ scale 
2570: 2a 3d 20 31 2e 30 65 2b 31 36 3b 20 65 76 61 6c  *= 1.0e+16; eval
2580: 20 2d 3d 20 31 36 3b 20 7d 0a 20 20 20 20 77 68   -= 16; }.    wh
2590: 69 6c 65 28 20 65 76 61 6c 3e 3d 34 20 29 7b 20  ile( eval>=4 ){ 
25a0: 73 63 61 6c 65 20 2a 3d 20 31 2e 30 65 2b 34 3b  scale *= 1.0e+4;
25b0: 20 65 76 61 6c 20 2d 3d 20 34 3b 20 7d 0a 20 20   eval -= 4; }.  
25c0: 20 20 77 68 69 6c 65 28 20 65 76 61 6c 3e 3d 31    while( eval>=1
25d0: 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 2e 30   ){ scale *= 1.0
25e0: 65 2b 31 3b 20 65 76 61 6c 20 2d 3d 20 31 3b 20  e+1; eval -= 1; 
25f0: 7d 0a 20 20 20 20 69 66 28 20 65 73 69 67 6e 3c  }.    if( esign<
2600: 30 20 29 7b 0a 20 20 20 20 20 20 76 31 20 2f 3d  0 ){.      v1 /=
2610: 20 73 63 61 6c 65 3b 0a 20 20 20 20 7d 65 6c 73   scale;.    }els
2620: 65 7b 0a 20 20 20 20 20 20 76 31 20 2a 3d 20 73  e{.      v1 *= s
2630: 63 61 6c 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  cale;.    }.  }.
2640: 20 20 2a 70 52 65 73 75 6c 74 20 3d 20 73 69 67    *pResult = sig
2650: 6e 3c 30 20 3f 20 2d 76 31 20 3a 20 76 31 3b 0a  n<0 ? -v1 : v1;.
2660: 20 20 72 65 74 75 72 6e 20 7a 20 2d 20 7a 42 65    return z - zBe
2670: 67 69 6e 3b 0a 23 65 6c 73 65 0a 20 20 72 65 74  gin;.#else.  ret
2680: 75 72 6e 20 73 71 6c 69 74 65 33 41 74 6f 69 36  urn sqlite3Atoi6
2690: 34 28 7a 2c 20 70 52 65 73 75 6c 74 29 3b 0a 23  4(z, pResult);.#
26a0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
26b0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
26c0: 49 4e 54 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  INT */.}../*.** 
26d0: 43 6f 6d 70 61 72 65 20 74 68 65 20 31 39 2d 63  Compare the 19-c
26e0: 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
26f0: 7a 4e 75 6d 20 61 67 61 69 6e 73 74 20 74 68 65  zNum against the
2700: 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61   text representa
2710: 74 69 6f 6e 0a 2a 2a 20 76 61 6c 75 65 20 32 5e  tion.** value 2^
2720: 36 33 3a 20 20 39 32 32 33 33 37 32 30 33 36 38  63:  92233720368
2730: 35 34 37 37 35 38 30 38 2e 20 20 52 65 74 75 72  54775808.  Retur
2740: 6e 20 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f  n negative, zero
2750: 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 0a 2a 2a  , or positive.**
2760: 20 69 66 20 7a 4e 75 6d 20 69 73 20 6c 65 73 73   if zNum is less
2770: 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f 2c   than, equal to,
2780: 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
2790: 20 74 68 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a   the string..**.
27a0: 2a 2a 20 55 6e 6c 69 6b 65 20 6d 65 6d 63 6d 70  ** Unlike memcmp
27b0: 28 29 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  () this routine 
27c0: 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  is guaranteed to
27d0: 20 72 65 74 75 72 6e 20 74 68 65 20 64 69 66 66   return the diff
27e0: 65 72 65 6e 63 65 0a 2a 2a 20 69 6e 20 74 68 65  erence.** in the
27f0: 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 6c   values of the l
2800: 61 73 74 20 64 69 67 69 74 20 69 66 20 74 68 65  ast digit if the
2810: 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
2820: 20 69 73 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 61   is in the.** la
2830: 73 74 20 64 69 67 69 74 2e 20 20 53 6f 2c 20 66  st digit.  So, f
2840: 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 2a 2a 0a 2a  or example,.**.*
2850: 2a 20 20 20 20 20 20 63 6f 6d 70 61 72 65 32 70  *      compare2p
2860: 6f 77 36 33 28 22 39 32 32 33 33 37 32 30 33 36  ow63("9223372036
2870: 38 35 34 37 37 35 38 30 30 22 29 0a 2a 2a 0a 2a  854775800").**.*
2880: 2a 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 2d 38  * will return -8
2890: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
28a0: 63 6f 6d 70 61 72 65 32 70 6f 77 36 33 28 63 6f  compare2pow63(co
28b0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29 7b  nst char *zNum){
28c0: 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20  .  int c;.  c = 
28d0: 6d 65 6d 63 6d 70 28 7a 4e 75 6d 2c 22 39 32 32  memcmp(zNum,"922
28e0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 22  337203685477580"
28f0: 2c 31 38 29 3b 0a 20 20 69 66 28 20 63 3d 3d 30  ,18);.  if( c==0
2900: 20 29 7b 0a 20 20 20 20 63 20 3d 20 7a 4e 75 6d   ){.    c = zNum
2910: 5b 31 38 5d 20 2d 20 27 38 27 3b 0a 20 20 7d 0a  [18] - '8';.  }.
2920: 20 20 72 65 74 75 72 6e 20 63 3b 0a 7d 0a 0a 0a    return c;.}...
2930: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55  /*.** Return TRU
2940: 45 20 69 66 20 7a 4e 75 6d 20 69 73 20 61 20 36  E if zNum is a 6
2950: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
2960: 65 67 65 72 20 61 6e 64 20 77 72 69 74 65 0a 2a  eger and write.*
2970: 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
2980: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20  he integer into 
2990: 2a 70 4e 75 6d 2e 20 20 49 66 20 7a 4e 75 6d 20  *pNum.  If zNum 
29a0: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
29b0: 72 0a 2a 2a 20 6f 72 20 69 73 20 61 6e 20 69 6e  r.** or is an in
29c0: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
29d0: 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20 65 78  o large to be ex
29e0: 70 72 65 73 73 65 64 20 77 69 74 68 20 36 34 20  pressed with 64 
29f0: 62 69 74 73 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  bits,.** then re
2a00: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2a 0a 2a  turn false..**.*
2a10: 2a 20 57 68 65 6e 20 74 68 69 73 20 72 6f 75 74  * When this rout
2a20: 69 6e 65 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  ine was original
2a30: 6c 79 20 77 72 69 74 74 65 6e 20 69 74 20 64 65  ly written it de
2a40: 61 6c 74 20 77 69 74 68 20 6f 6e 6c 79 0a 2a 2a  alt with only.**
2a50: 20 33 32 2d 62 69 74 20 6e 75 6d 62 65 72 73 2e   32-bit numbers.
2a60: 20 20 41 74 20 74 68 61 74 20 74 69 6d 65 2c 20    At that time, 
2a70: 69 74 20 77 61 73 20 6d 75 63 68 20 66 61 73 74  it was much fast
2a80: 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 61  er than the.** a
2a90: 74 6f 69 28 29 20 6c 69 62 72 61 72 79 20 72 6f  toi() library ro
2aa0: 75 74 69 6e 65 20 69 6e 20 52 65 64 48 61 74 20  utine in RedHat 
2ab0: 37 2e 32 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  7.2..*/.int sqli
2ac0: 74 65 33 5f 61 74 6f 69 36 34 28 63 6f 6e 73 74  te3_atoi64(const
2ad0: 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34   char *zNum, i64
2ae0: 20 2a 70 4e 75 6d 29 7b 0a 20 20 69 36 34 20 76   *pNum){.  i64 v
2af0: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 65 67 3b   = 0;.  int neg;
2b00: 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20 77  .  int i, c;.  w
2b10: 68 69 6c 65 28 20 69 73 73 70 61 63 65 28 2a 28  hile( isspace(*(
2b20: 75 38 2a 29 7a 4e 75 6d 29 20 29 20 7a 4e 75 6d  u8*)zNum) ) zNum
2b30: 2b 2b 3b 0a 20 20 69 66 28 20 2a 7a 4e 75 6d 3d  ++;.  if( *zNum=
2b40: 3d 27 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67 20  ='-' ){.    neg 
2b50: 3d 20 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b  = 1;.    zNum++;
2b60: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 2a 7a 4e  .  }else if( *zN
2b70: 75 6d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 6e  um=='+' ){.    n
2b80: 65 67 20 3d 20 30 3b 0a 20 20 20 20 7a 4e 75 6d  eg = 0;.    zNum
2b90: 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ++;.  }else{.   
2ba0: 20 6e 65 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20   neg = 0;.  }.  
2bb0: 77 68 69 6c 65 28 20 7a 4e 75 6d 5b 30 5d 3d 3d  while( zNum[0]==
2bc0: 27 30 27 20 29 7b 20 7a 4e 75 6d 2b 2b 3b 20 7d  '0' ){ zNum++; }
2bd0: 20 2f 2a 20 53 6b 69 70 20 6f 76 65 72 20 6c 65   /* Skip over le
2be0: 61 64 69 6e 67 20 7a 65 72 6f 73 2e 20 54 69 63  ading zeros. Tic
2bf0: 6b 65 74 20 23 32 34 35 34 20 2a 2f 0a 20 20 66  ket #2454 */.  f
2c00: 6f 72 28 69 3d 30 3b 20 28 63 3d 7a 4e 75 6d 5b  or(i=0; (c=zNum[
2c10: 69 5d 29 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27  i])>='0' && c<='
2c20: 39 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 76 20  9'; i++){.    v 
2c30: 3d 20 76 2a 31 30 20 2b 20 63 20 2d 20 27 30 27  = v*10 + c - '0'
2c40: 3b 0a 20 20 7d 0a 20 20 2a 70 4e 75 6d 20 3d 20  ;.  }.  *pNum = 
2c50: 6e 65 67 20 3f 20 2d 76 20 3a 20 76 3b 0a 20 20  neg ? -v : v;.  
2c60: 69 66 28 20 63 21 3d 30 20 7c 7c 20 69 3d 3d 30  if( c!=0 || i==0
2c70: 20 7c 7c 20 69 3e 31 39 20 29 7b 0a 20 20 20 20   || i>19 ){.    
2c80: 2f 2a 20 7a 4e 75 6d 20 69 73 20 65 6d 70 74 79  /* zNum is empty
2c90: 20 6f 72 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 6e   or contains non
2ca0: 2d 6e 75 6d 65 72 69 63 20 74 65 78 74 20 6f 72  -numeric text or
2cb0: 20 69 73 20 6c 6f 6e 67 65 72 0a 20 20 20 20 2a   is longer.    *
2cc0: 2a 20 74 68 61 6e 20 31 39 20 64 69 67 69 74 73  * than 19 digits
2cd0: 20 28 74 68 75 73 20 67 75 61 72 61 6e 74 69 6e   (thus guarantin
2ce0: 67 20 74 68 61 74 20 69 74 20 69 73 20 74 6f 6f  g that it is too
2cf0: 20 6c 61 72 67 65 29 20 2a 2f 0a 20 20 20 20 72   large) */.    r
2d00: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65  eturn 0;.  }else
2d10: 20 69 66 28 20 69 3c 31 39 20 29 7b 0a 20 20 20   if( i<19 ){.   
2d20: 20 2f 2a 20 4c 65 73 73 20 74 68 61 6e 20 31 39   /* Less than 19
2d30: 20 64 69 67 69 74 73 2c 20 73 6f 20 77 65 20 6b   digits, so we k
2d40: 6e 6f 77 20 74 68 61 74 20 69 74 20 66 69 74 73  now that it fits
2d50: 20 69 6e 20 36 34 20 62 69 74 73 20 2a 2f 0a 20   in 64 bits */. 
2d60: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
2d70: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 31 39 2d  else{.    /* 19-
2d80: 64 69 67 69 74 20 6e 75 6d 62 65 72 73 20 6d 75  digit numbers mu
2d90: 73 74 20 62 65 20 6e 6f 20 6c 61 72 67 65 72 20  st be no larger 
2da0: 74 68 61 6e 20 39 32 32 33 33 37 32 30 33 36 38  than 92233720368
2db0: 35 34 37 37 35 38 30 37 20 69 66 20 70 6f 73 69  54775807 if posi
2dc0: 74 69 76 65 0a 20 20 20 20 2a 2a 20 6f 72 20 39  tive.    ** or 9
2dd0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
2de0: 30 38 20 69 66 20 6e 65 67 61 74 69 76 65 2e 20  08 if negative. 
2df0: 20 4e 6f 74 65 20 74 68 61 74 20 39 32 32 33 33   Note that 92233
2e00: 37 32 30 33 36 38 35 34 36 36 35 38 30 38 0a 20  72036854665808. 
2e10: 20 20 20 2a 2a 20 69 73 20 32 5e 36 33 2e 20 2a     ** is 2^63. *
2e20: 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d  /.    return com
2e30: 70 61 72 65 32 70 6f 77 36 33 28 7a 4e 75 6d 29  pare2pow63(zNum)
2e40: 3c 6e 65 67 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  <neg;.  }.}../*.
2e50: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 7a 4e  ** The string zN
2e60: 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e  um represents an
2e70: 20 69 6e 74 65 67 65 72 2e 20 20 54 68 65 72 65   integer.  There
2e80: 20 6d 69 67 68 74 20 62 65 20 73 6f 6d 65 20 6f   might be some o
2e90: 74 68 65 72 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ther.** informat
2ea0: 69 6f 6e 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ion following th
2eb0: 65 20 69 6e 74 65 67 65 72 20 74 6f 6f 2c 20 62  e integer too, b
2ec0: 75 74 20 74 68 61 74 20 70 61 72 74 20 69 73 20  ut that part is 
2ed0: 69 67 6e 6f 72 65 64 2e 0a 2a 2a 20 49 66 20 74  ignored..** If t
2ee0: 68 65 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  he integer that 
2ef0: 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 7a 4e  the prefix of zN
2f00: 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 77 69  um represents wi
2f10: 6c 6c 20 66 69 74 20 69 6e 20 61 0a 2a 2a 20 36  ll fit in a.** 6
2f20: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
2f30: 65 67 65 72 2c 20 72 65 74 75 72 6e 20 54 52 55  eger, return TRU
2f40: 45 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  E.  Otherwise re
2f50: 74 75 72 6e 20 46 41 4c 53 45 2e 0a 2a 2a 0a 2a  turn FALSE..**.*
2f60: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72  * This routine r
2f70: 65 74 75 72 6e 73 20 46 41 4c 53 45 20 66 6f 72  eturns FALSE for
2f80: 20 74 68 65 20 73 74 72 69 6e 67 20 2d 39 32 32   the string -922
2f90: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
2fa0: 20 65 76 65 6e 20 74 68 61 74 0a 2a 2a 20 74 68   even that.** th
2fb0: 61 74 20 6e 75 6d 62 65 72 20 77 69 6c 6c 2c 20  at number will, 
2fc0: 69 6e 20 74 68 65 6f 72 79 20 66 69 74 20 69 6e  in theory fit in
2fd0: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
2fe0: 72 2e 20 20 50 6f 73 69 74 69 76 65 0a 2a 2a 20  r.  Positive.** 
2ff0: 39 32 32 33 33 37 33 30 33 36 38 35 34 37 37 35  9223373036854775
3000: 38 30 38 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74  808 will not fit
3010: 20 69 6e 20 36 34 20 62 69 74 73 2e 20 20 53 6f   in 64 bits.  So
3020: 20 69 74 20 73 65 65 6d 73 20 73 61 66 65 72 20   it seems safer 
3030: 74 6f 20 72 65 74 75 72 6e 0a 2a 2a 20 66 61 6c  to return.** fal
3040: 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  se..*/.int sqlit
3050: 65 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 63  e3FitsIn64Bits(c
3060: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 29  onst char *zNum)
3070: 7b 0a 20 20 69 6e 74 20 69 2c 20 63 3b 0a 20 20  {.  int i, c;.  
3080: 69 6e 74 20 6e 65 67 20 3d 20 30 3b 0a 20 20 69  int neg = 0;.  i
3090: 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2d 27 20 29 7b  f( *zNum=='-' ){
30a0: 0a 20 20 20 20 6e 65 67 20 3d 20 31 3b 0a 20 20  .    neg = 1;.  
30b0: 20 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 7d 65 6c 73    zNum++;.  }els
30c0: 65 20 69 66 28 20 2a 7a 4e 75 6d 3d 3d 27 2b 27  e if( *zNum=='+'
30d0: 20 29 7b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a   ){.    zNum++;.
30e0: 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 2a 7a 4e    }.  while( *zN
30f0: 75 6d 3d 3d 27 30 27 20 29 7b 0a 20 20 20 20 7a  um=='0' ){.    z
3100: 4e 75 6d 2b 2b 3b 20 20 20 2f 2a 20 53 6b 69 70  Num++;   /* Skip
3110: 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73 2e 20   leading zeros. 
3120: 20 54 69 63 6b 65 74 20 23 32 34 35 34 20 2a 2f   Ticket #2454 */
3130: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20  .  }.  for(i=0; 
3140: 28 63 3d 7a 4e 75 6d 5b 69 5d 29 3e 3d 27 30 27  (c=zNum[i])>='0'
3150: 20 26 26 20 63 3c 3d 27 39 27 3b 20 69 2b 2b 29   && c<='9'; i++)
3160: 7b 7d 0a 20 20 69 66 28 20 69 3c 31 39 20 29 7b  {}.  if( i<19 ){
3170: 0a 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65  .    /* Guarante
3180: 65 64 20 74 6f 20 66 69 74 20 69 66 20 6c 65 73  ed to fit if les
3190: 73 20 74 68 61 6e 20 31 39 20 64 69 67 69 74 73  s than 19 digits
31a0: 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 31   */.    return 1
31b0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 3e  ;.  }else if( i>
31c0: 31 39 20 29 7b 0a 20 20 20 20 2f 2a 20 47 75 61  19 ){.    /* Gua
31d0: 72 61 6e 74 65 65 64 20 74 6f 20 62 65 20 74 6f  ranteed to be to
31e0: 6f 20 62 69 67 20 69 66 20 67 72 65 61 74 65 72  o big if greater
31f0: 20 74 68 61 6e 20 31 39 20 64 69 67 69 74 73 20   than 19 digits 
3200: 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  */.    return 0;
3210: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
3220: 20 43 6f 6d 70 61 72 65 20 61 67 61 69 6e 73 74   Compare against
3230: 20 32 5e 36 33 2e 20 2a 2f 0a 20 20 20 20 72 65   2^63. */.    re
3240: 74 75 72 6e 20 63 6f 6d 70 61 72 65 32 70 6f 77  turn compare2pow
3250: 36 33 28 7a 4e 75 6d 29 3c 6e 65 67 3b 0a 20 20  63(zNum)<neg;.  
3260: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e  }.}../*.** If zN
3270: 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e  um represents an
3280: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 69   integer that wi
3290: 6c 6c 20 66 69 74 20 69 6e 20 33 32 2d 62 69 74  ll fit in 32-bit
32a0: 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a  s, then set.** *
32b0: 70 56 61 6c 75 65 20 74 6f 20 74 68 61 74 20 69  pValue to that i
32c0: 6e 74 65 67 65 72 20 61 6e 64 20 72 65 74 75 72  nteger and retur
32d0: 6e 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69  n true.  Otherwi
32e0: 73 65 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e  se return false.
32f0: 0a 2a 2a 0a 2a 2a 20 41 6e 79 20 6e 6f 6e 2d 6e  .**.** Any non-n
3300: 75 6d 65 72 69 63 20 63 68 61 72 61 63 74 65 72  umeric character
3310: 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 69 6e 67  s that following
3320: 20 7a 4e 75 6d 20 61 72 65 20 69 67 6e 6f 72 65   zNum are ignore
3330: 64 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 64 69  d..** This is di
3340: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 73 71 6c  fferent from sql
3350: 69 74 65 33 5f 61 74 6f 69 36 34 28 29 20 77 68  ite3_atoi64() wh
3360: 69 63 68 20 72 65 71 75 69 72 65 73 20 74 68 65  ich requires the
3370: 0a 2a 2a 20 69 6e 70 75 74 20 6e 75 6d 62 65 72  .** input number
3380: 20 74 6f 20 62 65 20 7a 65 72 6f 2d 74 65 72 6d   to be zero-term
3390: 69 6e 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  inated..*/.int s
33a0: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
33b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c  onst char *zNum,
33c0: 20 69 6e 74 20 2a 70 56 61 6c 75 65 29 7b 0a 20   int *pValue){. 
33d0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 76 20   sqlite_int64 v 
33e0: 3d 20 30 3b 0a 20 20 69 6e 74 20 69 2c 20 63 3b  = 0;.  int i, c;
33f0: 0a 20 20 69 6e 74 20 6e 65 67 20 3d 20 30 3b 0a  .  int neg = 0;.
3400: 20 20 69 66 28 20 7a 4e 75 6d 5b 30 5d 3d 3d 27    if( zNum[0]=='
3410: 2d 27 20 29 7b 0a 20 20 20 20 6e 65 67 20 3d 20  -' ){.    neg = 
3420: 31 3b 0a 20 20 20 20 7a 4e 75 6d 2b 2b 3b 0a 20  1;.    zNum++;. 
3430: 20 7d 65 6c 73 65 20 69 66 28 20 7a 4e 75 6d 5b   }else if( zNum[
3440: 30 5d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a  0]=='+' ){.    z
3450: 4e 75 6d 2b 2b 3b 0a 20 20 7d 0a 20 20 77 68 69  Num++;.  }.  whi
3460: 6c 65 28 20 7a 4e 75 6d 5b 30 5d 3d 3d 27 30 27  le( zNum[0]=='0'
3470: 20 29 20 7a 4e 75 6d 2b 2b 3b 0a 20 20 66 6f 72   ) zNum++;.  for
3480: 28 69 3d 30 3b 20 69 3c 31 30 20 26 26 20 28 63  (i=0; i<10 && (c
3490: 20 3d 20 7a 4e 75 6d 5b 69 5d 20 2d 20 27 30 27   = zNum[i] - '0'
34a0: 29 3e 3d 30 20 26 26 20 63 3c 3d 39 3b 20 69 2b  )>=0 && c<=9; i+
34b0: 2b 29 7b 0a 20 20 20 20 76 20 3d 20 76 2a 31 30  +){.    v = v*10
34c0: 20 2b 20 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20   + c;.  }.  if( 
34d0: 69 3e 39 20 29 7b 0a 20 20 20 20 72 65 74 75 72  i>9 ){.    retur
34e0: 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 76  n 0;.  }.  if( v
34f0: 2d 6e 65 67 3e 32 31 34 37 34 38 33 36 34 37 20  -neg>2147483647 
3500: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
3510: 0a 20 20 7d 0a 20 20 69 66 28 20 6e 65 67 20 29  .  }.  if( neg )
3520: 7b 0a 20 20 20 20 76 20 3d 20 2d 76 3b 0a 20 20  {.    v = -v;.  
3530: 7d 0a 20 20 2a 70 56 61 6c 75 65 20 3d 20 28 69  }.  *pValue = (i
3540: 6e 74 29 76 3b 0a 20 20 72 65 74 75 72 6e 20 31  nt)v;.  return 1
3550: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  ;.}../*.** Check
3560: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 77 65   to make sure we
3570: 20 68 61 76 65 20 61 20 76 61 6c 69 64 20 64 62   have a valid db
3580: 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 69 73 20   pointer.  This 
3590: 74 65 73 74 20 69 73 20 6e 6f 74 0a 2a 2a 20 66  test is not.** f
35a0: 6f 6f 6c 70 72 6f 6f 66 20 62 75 74 20 69 74 20  oolproof but it 
35b0: 64 6f 65 73 20 70 72 6f 76 69 64 65 20 73 6f 6d  does provide som
35c0: 65 20 6d 65 61 73 75 72 65 20 6f 66 20 70 72 6f  e measure of pro
35d0: 74 65 63 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a  tection against.
35e0: 2a 2a 20 6d 69 73 75 73 65 20 6f 66 20 74 68 65  ** misuse of the
35f0: 20 69 6e 74 65 72 66 61 63 65 20 73 75 63 68 20   interface such 
3600: 61 73 20 70 61 73 73 69 6e 67 20 69 6e 20 64 62  as passing in db
3610: 20 70 6f 69 6e 74 65 72 73 20 74 68 61 74 20 61   pointers that a
3620: 72 65 0a 2a 2a 20 4e 55 4c 4c 20 6f 72 20 77 68  re.** NULL or wh
3630: 69 63 68 20 68 61 76 65 20 62 65 65 6e 20 70 72  ich have been pr
3640: 65 76 69 6f 75 73 6c 79 20 63 6c 6f 73 65 64 2e  eviously closed.
3650: 20 20 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e    If this routin
3660: 65 20 72 65 74 75 72 6e 73 0a 2a 2a 20 54 52 55  e returns.** TRU
3670: 45 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  E it means that 
3680: 74 68 65 20 64 62 20 70 6f 69 6e 74 65 72 20 69  the db pointer i
3690: 73 20 69 6e 76 61 6c 69 64 20 61 6e 64 20 73 68  s invalid and sh
36a0: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 64  ould not be.** d
36b0: 65 72 65 66 65 72 65 6e 63 65 64 20 66 6f 72 20  ereferenced for 
36c0: 61 6e 79 20 72 65 61 73 6f 6e 2e 20 20 54 68 65  any reason.  The
36d0: 20 63 61 6c 6c 69 6e 67 20 66 75 6e 63 74 69 6f   calling functio
36e0: 6e 20 73 68 6f 75 6c 64 20 69 6e 76 6f 6b 65 0a  n should invoke.
36f0: 2a 2a 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ** SQLITE_MISUSE
3700: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0a 2a 2f   immediately..*/
3710: 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
3720: 74 79 43 68 65 63 6b 28 73 71 6c 69 74 65 33 20  tyCheck(sqlite3 
3730: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6d 61 67 69  *db){.  int magi
3740: 63 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29  c;.  if( db==0 )
3750: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 6d 61 67   return 1;.  mag
3760: 69 63 20 3d 20 64 62 2d 3e 6d 61 67 69 63 3b 0a  ic = db->magic;.
3770: 20 20 69 66 28 20 6d 61 67 69 63 21 3d 53 51 4c    if( magic!=SQL
3780: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
3790: 20 26 26 0a 20 20 20 20 20 20 20 20 20 6d 61 67   &&.         mag
37a0: 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic!=SQLITE_MAGIC
37b0: 5f 4f 50 45 4e 20 26 26 0a 20 20 20 20 20 20 20  _OPEN &&.       
37c0: 20 20 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f    magic!=SQLITE_
37d0: 4d 41 47 49 43 5f 42 55 53 59 20 29 20 72 65 74  MAGIC_BUSY ) ret
37e0: 75 72 6e 20 31 3b 0a 20 20 72 65 74 75 72 6e 20  urn 1;.  return 
37f0: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  0;.}../*.** The 
3800: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
3810: 69 6e 74 65 67 65 72 20 65 6e 63 6f 64 69 6e 67  integer encoding
3820: 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
3830: 2a 2a 0a 2a 2a 20 4b 45 59 3a 0a 2a 2a 20 20 20  **.** KEY:.**   
3840: 20 20 20 20 20 20 41 20 3d 20 30 78 78 78 78 78        A = 0xxxxx
3850: 78 78 20 20 20 20 37 20 62 69 74 73 20 6f 66 20  xx    7 bits of 
3860: 64 61 74 61 20 61 6e 64 20 6f 6e 65 20 66 6c 61  data and one fla
3870: 67 20 62 69 74 0a 2a 2a 20 20 20 20 20 20 20 20  g bit.**        
3880: 20 42 20 3d 20 31 78 78 78 78 78 78 78 20 20 20   B = 1xxxxxxx   
3890: 20 37 20 62 69 74 73 20 6f 66 20 64 61 74 61 20   7 bits of data 
38a0: 61 6e 64 20 6f 6e 65 20 66 6c 61 67 20 62 69 74  and one flag bit
38b0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 43 20 3d 20  .**         C = 
38c0: 78 78 78 78 78 78 78 78 20 20 20 20 38 20 62 69  xxxxxxxx    8 bi
38d0: 74 73 20 6f 66 20 64 61 74 61 0a 2a 2a 0a 2a 2a  ts of data.**.**
38e0: 20 20 37 20 62 69 74 73 20 2d 20 41 0a 2a 2a 20    7 bits - A.** 
38f0: 31 34 20 62 69 74 73 20 2d 20 42 41 0a 2a 2a 20  14 bits - BA.** 
3900: 32 31 20 62 69 74 73 20 2d 20 42 42 41 0a 2a 2a  21 bits - BBA.**
3910: 20 32 38 20 62 69 74 73 20 2d 20 42 42 42 41 0a   28 bits - BBBA.
3920: 2a 2a 20 33 35 20 62 69 74 73 20 2d 20 42 42 42  ** 35 bits - BBB
3930: 42 41 0a 2a 2a 20 34 32 20 62 69 74 73 20 2d 20  BA.** 42 bits - 
3940: 42 42 42 42 42 41 0a 2a 2a 20 34 39 20 62 69 74  BBBBBA.** 49 bit
3950: 73 20 2d 20 42 42 42 42 42 42 41 0a 2a 2a 20 35  s - BBBBBBA.** 5
3960: 36 20 62 69 74 73 20 2d 20 42 42 42 42 42 42 42  6 bits - BBBBBBB
3970: 41 0a 2a 2a 20 36 34 20 62 69 74 73 20 2d 20 42  A.** 64 bits - B
3980: 42 42 42 42 42 42 42 43 0a 2a 2f 0a 0a 2f 2a 0a  BBBBBBBC.*/../*.
3990: 2a 2a 20 57 72 69 74 65 20 61 20 36 34 2d 62 69  ** Write a 64-bi
39a0: 74 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  t variable-lengt
39b0: 68 20 69 6e 74 65 67 65 72 20 74 6f 20 6d 65 6d  h integer to mem
39c0: 6f 72 79 20 73 74 61 72 74 69 6e 67 20 61 74 20  ory starting at 
39d0: 70 5b 30 5d 2e 0a 2a 2a 20 54 68 65 20 6c 65 6e  p[0]..** The len
39e0: 67 74 68 20 6f 66 20 64 61 74 61 20 77 72 69 74  gth of data writ
39f0: 65 20 77 69 6c 6c 20 62 65 20 62 65 74 77 65 65  e will be betwee
3a00: 6e 20 31 20 61 6e 64 20 39 20 62 79 74 65 73 2e  n 1 and 9 bytes.
3a10: 20 20 54 68 65 20 6e 75 6d 62 65 72 0a 2a 2a 20    The number.** 
3a20: 6f 66 20 62 79 74 65 73 20 77 72 69 74 74 65 6e  of bytes written
3a30: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a   is returned..**
3a40: 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c 65 2d 6c  .** A variable-l
3a50: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 63 6f  ength integer co
3a60: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 6f  nsists of the lo
3a70: 77 65 72 20 37 20 62 69 74 73 20 6f 66 20 65 61  wer 7 bits of ea
3a80: 63 68 20 62 79 74 65 0a 2a 2a 20 66 6f 72 20 61  ch byte.** for a
3a90: 6c 6c 20 62 79 74 65 73 20 74 68 61 74 20 68 61  ll bytes that ha
3aa0: 76 65 20 74 68 65 20 38 74 68 20 62 69 74 20 73  ve the 8th bit s
3ab0: 65 74 20 61 6e 64 20 6f 6e 65 20 62 79 74 65 20  et and one byte 
3ac0: 77 69 74 68 20 74 68 65 20 38 74 68 0a 2a 2a 20  with the 8th.** 
3ad0: 62 69 74 20 63 6c 65 61 72 2e 20 20 45 78 63 65  bit clear.  Exce
3ae0: 70 74 2c 20 69 66 20 77 65 20 67 65 74 20 74 6f  pt, if we get to
3af0: 20 74 68 65 20 39 74 68 20 62 79 74 65 2c 20 69   the 9th byte, i
3b00: 74 20 73 74 6f 72 65 73 20 74 68 65 20 66 75 6c  t stores the ful
3b10: 6c 0a 2a 2a 20 38 20 62 69 74 73 20 61 6e 64 20  l.** 8 bits and 
3b20: 69 73 20 74 68 65 20 6c 61 73 74 20 62 79 74 65  is the last byte
3b30: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
3b40: 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
3b50: 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20  ed char *p, u64 
3b60: 76 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20  v){.  int i, j, 
3b70: 6e 3b 0a 20 20 75 38 20 62 75 66 5b 31 30 5d 3b  n;.  u8 buf[10];
3b80: 0a 20 20 69 66 28 20 76 20 26 20 28 28 28 75 36  .  if( v & (((u6
3b90: 34 29 30 78 66 66 30 30 30 30 30 30 29 3c 3c 33  4)0xff000000)<<3
3ba0: 32 29 20 29 7b 0a 20 20 20 20 70 5b 38 5d 20 3d  2) ){.    p[8] =
3bb0: 20 76 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 38 3b   v;.    v >>= 8;
3bc0: 0a 20 20 20 20 66 6f 72 28 69 3d 37 3b 20 69 3e  .    for(i=7; i>
3bd0: 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20  =0; i--){.      
3be0: 70 5b 69 5d 20 3d 20 28 76 20 26 20 30 78 37 66  p[i] = (v & 0x7f
3bf0: 29 20 7c 20 30 78 38 30 3b 0a 20 20 20 20 20 20  ) | 0x80;.      
3c00: 76 20 3e 3e 3d 20 37 3b 0a 20 20 20 20 7d 0a 20  v >>= 7;.    }. 
3c10: 20 20 20 72 65 74 75 72 6e 20 39 3b 0a 20 20 7d     return 9;.  }
3c20: 20 20 20 20 0a 20 20 6e 20 3d 20 30 3b 0a 20 20      .  n = 0;.  
3c30: 64 6f 7b 0a 20 20 20 20 62 75 66 5b 6e 2b 2b 5d  do{.    buf[n++]
3c40: 20 3d 20 28 76 20 26 20 30 78 37 66 29 20 7c 20   = (v & 0x7f) | 
3c50: 30 78 38 30 3b 0a 20 20 20 20 76 20 3e 3e 3d 20  0x80;.    v >>= 
3c60: 37 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d  7;.  }while( v!=
3c70: 30 20 29 3b 0a 20 20 62 75 66 5b 30 5d 20 26 3d  0 );.  buf[0] &=
3c80: 20 30 78 37 66 3b 0a 20 20 61 73 73 65 72 74 28   0x7f;.  assert(
3c90: 20 6e 3c 3d 39 20 29 3b 0a 20 20 66 6f 72 28 69   n<=9 );.  for(i
3ca0: 3d 30 2c 20 6a 3d 6e 2d 31 3b 20 6a 3e 3d 30 3b  =0, j=n-1; j>=0;
3cb0: 20 6a 2d 2d 2c 20 69 2b 2b 29 7b 0a 20 20 20 20   j--, i++){.    
3cc0: 70 5b 69 5d 20 3d 20 62 75 66 5b 6a 5d 3b 0a 20  p[i] = buf[j];. 
3cd0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d   }.  return n;.}
3ce0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 61 20 36  ../*.** Read a 6
3cf0: 34 2d 62 69 74 20 76 61 72 69 61 62 6c 65 2d 6c  4-bit variable-l
3d00: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 66 72  ength integer fr
3d10: 6f 6d 20 6d 65 6d 6f 72 79 20 73 74 61 72 74 69  om memory starti
3d20: 6e 67 20 61 74 20 70 5b 30 5d 2e 0a 2a 2a 20 52  ng at p[0]..** R
3d30: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
3d40: 20 6f 66 20 62 79 74 65 73 20 72 65 61 64 2e 20   of bytes read. 
3d50: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 73 74   The value is st
3d60: 6f 72 65 64 20 69 6e 20 2a 76 2e 0a 2a 2f 0a 69  ored in *v..*/.i
3d70: 6e 74 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  nt sqlite3GetVar
3d80: 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
3d90: 65 64 20 63 68 61 72 20 2a 70 2c 20 75 36 34 20  ed char *p, u64 
3da0: 2a 76 29 7b 0a 20 20 75 33 32 20 78 3b 0a 20 20  *v){.  u32 x;.  
3db0: 75 36 34 20 78 36 34 3b 0a 20 20 69 6e 74 20 6e  u64 x64;.  int n
3dc0: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
3dd0: 72 20 63 3b 0a 20 20 69 66 28 20 28 28 63 20 3d  r c;.  if( ((c =
3de0: 20 70 5b 30 5d 29 20 26 20 30 78 38 30 29 3d 3d   p[0]) & 0x80)==
3df0: 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 63 3b  0 ){.    *v = c;
3e00: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
3e10: 20 7d 0a 20 20 78 20 3d 20 63 20 26 20 30 78 37   }.  x = c & 0x7
3e20: 66 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  f;.  if( ((c = p
3e30: 5b 31 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [1]) & 0x80)==0 
3e40: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
3e50: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
3e60: 72 6e 20 32 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 2;.  }.  x = 
3e70: 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66  (x<<7) | (c&0x7f
3e80: 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  );.  if( ((c = p
3e90: 5b 32 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [2]) & 0x80)==0 
3ea0: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
3eb0: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
3ec0: 72 6e 20 33 3b 0a 20 20 7d 0a 20 20 78 20 3d 20  rn 3;.  }.  x = 
3ed0: 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78 37 66  (x<<7) | (c&0x7f
3ee0: 29 3b 0a 20 20 69 66 28 20 28 28 63 20 3d 20 70  );.  if( ((c = p
3ef0: 5b 33 5d 29 20 26 20 30 78 38 30 29 3d 3d 30 20  [3]) & 0x80)==0 
3f00: 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28 78 3c 3c  ){.    *v = (x<<
3f10: 37 29 20 7c 20 63 3b 0a 20 20 20 20 72 65 74 75  7) | c;.    retu
3f20: 72 6e 20 34 3b 0a 20 20 7d 0a 20 20 78 36 34 20  rn 4;.  }.  x64 
3f30: 3d 20 28 78 3c 3c 37 29 20 7c 20 28 63 26 30 78  = (x<<7) | (c&0x
3f40: 37 66 29 3b 0a 20 20 6e 20 3d 20 34 3b 0a 20 20  7f);.  n = 4;.  
3f50: 64 6f 7b 0a 20 20 20 20 63 20 3d 20 70 5b 6e 2b  do{.    c = p[n+
3f60: 2b 5d 3b 0a 20 20 20 20 69 66 28 20 6e 3d 3d 39  +];.    if( n==9
3f70: 20 29 7b 0a 20 20 20 20 20 20 78 36 34 20 3d 20   ){.      x64 = 
3f80: 28 78 36 34 3c 3c 38 29 20 7c 20 63 3b 0a 20 20  (x64<<8) | c;.  
3f90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
3fa0: 0a 20 20 20 20 78 36 34 20 3d 20 28 78 36 34 3c  .    x64 = (x64<
3fb0: 3c 37 29 20 7c 20 28 63 26 30 78 37 66 29 3b 0a  <7) | (c&0x7f);.
3fc0: 20 20 7d 77 68 69 6c 65 28 20 28 63 20 26 20 30    }while( (c & 0
3fd0: 78 38 30 29 21 3d 30 20 29 3b 0a 20 20 2a 76 20  x80)!=0 );.  *v 
3fe0: 3d 20 78 36 34 3b 0a 20 20 72 65 74 75 72 6e 20  = x64;.  return 
3ff0: 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  n;.}../*.** Read
4000: 20 61 20 33 32 2d 62 69 74 20 76 61 72 69 61 62   a 32-bit variab
4010: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
4020: 72 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 73 74  r from memory st
4030: 61 72 74 69 6e 67 20 61 74 20 70 5b 30 5d 2e 0a  arting at p[0]..
4040: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
4050: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
4060: 61 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  ad.  The value i
4070: 73 20 73 74 6f 72 65 64 20 69 6e 20 2a 76 2e 0a  s stored in *v..
4080: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  */.int sqlite3Ge
4090: 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
40a0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70  unsigned char *p
40b0: 2c 20 75 33 32 20 2a 76 29 7b 0a 20 20 75 33 32  , u32 *v){.  u32
40c0: 20 78 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 75   x;.  int n;.  u
40d0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 3b 0a  nsigned char c;.
40e0: 20 20 69 66 28 20 28 28 73 69 67 6e 65 64 20 63    if( ((signed c
40f0: 68 61 72 2a 29 70 29 5b 30 5d 3e 3d 30 20 29 7b  har*)p)[0]>=0 ){
4100: 0a 20 20 20 20 2a 76 20 3d 20 70 5b 30 5d 3b 0a  .    *v = p[0];.
4110: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
4120: 7d 0a 20 20 78 20 3d 20 70 5b 30 5d 20 26 20 30  }.  x = p[0] & 0
4130: 78 37 66 3b 0a 20 20 69 66 28 20 28 28 73 69 67  x7f;.  if( ((sig
4140: 6e 65 64 20 63 68 61 72 2a 29 70 29 5b 31 5d 3e  ned char*)p)[1]>
4150: 3d 30 20 29 7b 0a 20 20 20 20 2a 76 20 3d 20 28  =0 ){.    *v = (
4160: 78 3c 3c 37 29 20 7c 20 70 5b 31 5d 3b 0a 20 20  x<<7) | p[1];.  
4170: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 0a    return 2;.  }.
4180: 20 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28    x = (x<<7) | (
4190: 70 5b 31 5d 20 26 20 30 78 37 66 29 3b 0a 20 20  p[1] & 0x7f);.  
41a0: 6e 20 3d 20 32 3b 0a 20 20 64 6f 7b 0a 20 20 20  n = 2;.  do{.   
41b0: 20 78 20 3d 20 28 78 3c 3c 37 29 20 7c 20 28 28   x = (x<<7) | ((
41c0: 63 20 3d 20 70 5b 6e 2b 2b 5d 29 26 30 78 37 66  c = p[n++])&0x7f
41d0: 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 63 20  );.  }while( (c 
41e0: 26 20 30 78 38 30 29 21 3d 30 20 26 26 20 6e 3c  & 0x80)!=0 && n<
41f0: 39 20 29 3b 0a 20 20 2a 76 20 3d 20 78 3b 0a 20  9 );.  *v = x;. 
4200: 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a   return n;.}../*
4210: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
4220: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74  umber of bytes t
4230: 68 61 74 20 77 69 6c 6c 20 62 65 20 6e 65 65 64  hat will be need
4240: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
4250: 67 69 76 65 6e 0a 2a 2a 20 36 34 2d 62 69 74 20  given.** 64-bit 
4260: 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 69 6e 74 20  integer..*/.int 
4270: 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
4280: 28 75 36 34 20 76 29 7b 0a 20 20 69 6e 74 20 69  (u64 v){.  int i
4290: 20 3d 20 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20   = 0;.  do{.    
42a0: 69 2b 2b 3b 0a 20 20 20 20 76 20 3e 3e 3d 20 37  i++;.    v >>= 7
42b0: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 76 21 3d 30  ;.  }while( v!=0
42c0: 20 26 26 20 69 3c 39 20 29 3b 0a 20 20 72 65 74   && i<9 );.  ret
42d0: 75 72 6e 20 69 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  urn i;.}.../*.**
42e0: 20 52 65 61 64 20 6f 72 20 77 72 69 74 65 20 61   Read or write a
42f0: 20 66 6f 75 72 2d 62 79 74 65 20 62 69 67 2d 65   four-byte big-e
4300: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 76 61  ndian integer va
4310: 6c 75 65 2e 0a 2a 2f 0a 75 33 32 20 73 71 6c 69  lue..*/.u32 sqli
4320: 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
4330: 74 20 75 38 20 2a 70 29 7b 0a 20 20 72 65 74 75  t u8 *p){.  retu
4340: 72 6e 20 28 70 5b 30 5d 3c 3c 32 34 29 20 7c 20  rn (p[0]<<24) | 
4350: 28 70 5b 31 5d 3c 3c 31 36 29 20 7c 20 28 70 5b  (p[1]<<16) | (p[
4360: 32 5d 3c 3c 38 29 20 7c 20 70 5b 33 5d 3b 0a 7d  2]<<8) | p[3];.}
4370: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
4380: 34 62 79 74 65 28 75 6e 73 69 67 6e 65 64 20 63  4byte(unsigned c
4390: 68 61 72 20 2a 70 2c 20 75 33 32 20 76 29 7b 0a  har *p, u32 v){.
43a0: 20 20 70 5b 30 5d 20 3d 20 76 3e 3e 32 34 3b 0a    p[0] = v>>24;.
43b0: 20 20 70 5b 31 5d 20 3d 20 76 3e 3e 31 36 3b 0a    p[1] = v>>16;.
43c0: 20 20 70 5b 32 5d 20 3d 20 76 3e 3e 38 3b 0a 20    p[2] = v>>8;. 
43d0: 20 70 5b 33 5d 20 3d 20 76 3b 0a 7d 0a 0a 0a 0a   p[3] = v;.}....
43e0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
43f0: 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49  ITE_OMIT_BLOB_LI
4400: 54 45 52 41 4c 29 20 7c 7c 20 64 65 66 69 6e 65  TERAL) || define
4410: 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  d(SQLITE_HAS_COD
4420: 45 43 29 20 5c 0a 20 20 20 20 7c 7c 20 64 65 66  EC) \.    || def
4430: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
4440: 29 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 6c 61 74  )./*.** Translat
4450: 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20  e a single byte 
4460: 6f 66 20 48 65 78 20 69 6e 74 6f 20 61 6e 20 69  of Hex into an i
4470: 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69  nteger..*/.stati
4480: 63 20 69 6e 74 20 68 65 78 54 6f 49 6e 74 28 69  c int hexToInt(i
4490: 6e 74 20 68 29 7b 0a 20 20 69 66 28 20 68 3e 3d  nt h){.  if( h>=
44a0: 27 30 27 20 26 26 20 68 3c 3d 27 39 27 20 29 7b  '0' && h<='9' ){
44b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20  .    return h - 
44c0: 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  '0';.  }else if(
44d0: 20 68 3e 3d 27 61 27 20 26 26 20 68 3c 3d 27 66   h>='a' && h<='f
44e0: 27 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ' ){.    return 
44f0: 68 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20  h - 'a' + 10;.  
4500: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
4510: 74 28 20 68 3e 3d 27 41 27 20 26 26 20 68 3c 3d  t( h>='A' && h<=
4520: 27 46 27 20 29 3b 0a 20 20 20 20 72 65 74 75 72  'F' );.    retur
4530: 6e 20 68 20 2d 20 27 41 27 20 2b 20 31 30 3b 0a  n h - 'A' + 10;.
4540: 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20    }.}.#endif /* 
4550: 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f  !SQLITE_OMIT_BLO
4560: 42 5f 4c 49 54 45 52 41 4c 20 7c 7c 20 53 51 4c  B_LITERAL || SQL
4570: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 20 7c 7c  ITE_HAS_CODEC ||
4580: 20 53 51 4c 49 54 45 5f 54 45 53 54 20 2a 2f 0a   SQLITE_TEST */.
4590: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
45a0: 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c  LITE_OMIT_BLOB_L
45b0: 49 54 45 52 41 4c 29 20 7c 7c 20 64 65 66 69 6e  ITERAL) || defin
45c0: 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
45d0: 44 45 43 29 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65  DEC)./*.** Conve
45e0: 72 74 20 61 20 42 4c 4f 42 20 6c 69 74 65 72 61  rt a BLOB litera
45f0: 6c 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 78  l of the form "x
4600: 27 68 68 68 68 68 68 27 22 20 69 6e 74 6f 20 69  'hhhhhh'" into i
4610: 74 73 20 62 69 6e 61 72 79 0a 2a 2a 20 76 61 6c  ts binary.** val
4620: 75 65 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f  ue.  Return a po
4630: 69 6e 74 65 72 20 74 6f 20 69 74 73 20 62 69 6e  inter to its bin
4640: 61 72 79 20 76 61 6c 75 65 2e 20 20 53 70 61 63  ary value.  Spac
4650: 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 0a 2a 2a  e to hold the.**
4660: 20 62 69 6e 61 72 79 20 76 61 6c 75 65 20 68 61   binary value ha
4670: 73 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20  s been obtained 
4680: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64 20  from malloc and 
4690: 6d 75 73 74 20 62 65 20 66 72 65 65 64 20 62 79  must be freed by
46a0: 0a 2a 2a 20 74 68 65 20 63 61 6c 6c 69 6e 67 20  .** the calling 
46b0: 72 6f 75 74 69 6e 65 2e 0a 2a 2f 0a 76 6f 69 64  routine..*/.void
46c0: 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
46d0: 6f 62 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ob(const char *z
46e0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62  ){.  char *zBlob
46f0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
4700: 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a   n = strlen(z);.
4710: 20 20 69 66 28 20 6e 25 32 20 29 20 72 65 74 75    if( n%2 ) retu
4720: 72 6e 20 30 3b 0a 0a 20 20 7a 42 6c 6f 62 20 3d  rn 0;..  zBlob =
4730: 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 4d   (char *)sqliteM
4740: 61 6c 6c 6f 63 28 6e 2f 32 29 3b 0a 20 20 69 66  alloc(n/2);.  if
4750: 28 20 7a 42 6c 6f 62 20 29 7b 0a 20 20 20 20 66  ( zBlob ){.    f
4760: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 3d  or(i=0; i<n; i+=
4770: 32 29 7b 0a 20 20 20 20 20 20 7a 42 6c 6f 62 5b  2){.      zBlob[
4780: 69 2f 32 5d 20 3d 20 28 68 65 78 54 6f 49 6e 74  i/2] = (hexToInt
4790: 28 7a 5b 69 5d 29 3c 3c 34 29 20 7c 20 68 65 78  (z[i])<<4) | hex
47a0: 54 6f 49 6e 74 28 7a 5b 69 2b 31 5d 29 3b 0a 20  ToInt(z[i+1]);. 
47b0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
47c0: 6e 20 7a 42 6c 6f 62 3b 0a 7d 0a 23 65 6e 64 69  n zBlob;.}.#endi
47d0: 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49  f /* !SQLITE_OMI
47e0: 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 7c  T_BLOB_LITERAL |
47f0: 7c 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  | SQLITE_HAS_COD
4800: 45 43 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68  EC */.../*.** Ch
4810: 61 6e 67 65 20 74 68 65 20 73 71 6c 69 74 65 2e  ange the sqlite.
4820: 6d 61 67 69 63 20 66 72 6f 6d 20 53 51 4c 49 54  magic from SQLIT
4830: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 74 6f 20  E_MAGIC_OPEN to 
4840: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
4850: 59 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 6e 20  Y..** Return an 
4860: 65 72 72 6f 72 20 28 6e 6f 6e 2d 7a 65 72 6f 29  error (non-zero)
4870: 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 77 61   if the magic wa
4880: 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f 4d 41 47  s not SQLITE_MAG
4890: 49 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20  IC_OPEN.** when 
48a0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
48b0: 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  called..**.** Th
48c0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61  is routine is ca
48d0: 6c 6c 65 64 20 77 68 65 6e 20 65 6e 74 65 72 69  lled when enteri
48e0: 6e 67 20 61 6e 20 53 51 4c 69 74 65 20 41 50 49  ng an SQLite API
48f0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 4d 41  .  The SQLITE_MA
4900: 47 49 43 5f 4f 50 45 4e 0a 2a 2a 20 76 61 6c 75  GIC_OPEN.** valu
4910: 65 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  e indicates that
4920: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
4930: 6e 6e 65 63 74 69 6f 6e 20 70 61 73 73 65 64 20  nnection passed 
4940: 69 6e 74 6f 20 74 68 65 20 41 50 49 20 69 73 0a  into the API is.
4950: 2a 2a 20 6f 70 65 6e 20 61 6e 64 20 69 73 20 6e  ** open and is n
4960: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 20 62 79  ot being used by
4970: 20 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64 2e   another thread.
4980: 20 20 42 79 20 63 68 61 6e 67 69 6e 67 20 74 68    By changing th
4990: 65 20 76 61 6c 75 65 0a 2a 2a 20 74 6f 20 53 51  e value.** to SQ
49a0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
49b0: 77 65 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  we indicate that
49c0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
49d0: 69 73 20 69 6e 20 75 73 65 2e 0a 2a 2a 20 73 71  is in use..** sq
49e0: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 29  lite3SafetyOff()
49f0: 20 62 65 6c 6f 77 20 77 69 6c 6c 20 63 68 61 6e   below will chan
4a00: 67 65 20 74 68 65 20 76 61 6c 75 65 20 62 61 63  ge the value bac
4a10: 6b 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49  k to SQLITE_MAGI
4a20: 43 5f 4f 50 45 4e 0a 2a 2a 20 77 68 65 6e 20 74  C_OPEN.** when t
4a30: 68 65 20 41 50 49 20 65 78 69 74 73 2e 20 0a 2a  he API exits. .*
4a40: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4a50: 65 20 69 73 20 61 20 61 74 74 65 6d 70 74 20 74  e is a attempt t
4a60: 6f 20 64 65 74 65 63 74 20 69 66 20 74 77 6f 20  o detect if two 
4a70: 74 68 72 65 61 64 73 20 75 73 65 20 74 68 65 0a  threads use the.
4a80: 2a 2a 20 73 61 6d 65 20 73 71 6c 69 74 65 2a 20  ** same sqlite* 
4a90: 70 6f 69 6e 74 65 72 20 61 74 20 74 68 65 20 73  pointer at the s
4aa0: 61 6d 65 20 74 69 6d 65 2e 20 20 54 68 65 72 65  ame time.  There
4ab0: 20 69 73 20 61 20 72 61 63 65 20 0a 2a 2a 20 63   is a race .** c
4ac0: 6f 6e 64 69 74 69 6f 6e 20 73 6f 20 69 74 20 69  ondition so it i
4ad0: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
4ae0: 74 68 65 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  the error is not
4af0: 20 64 65 74 65 63 74 65 64 2e 0a 2a 2a 20 42 75   detected..** Bu
4b00: 74 20 75 73 75 61 6c 6c 79 20 74 68 65 20 70 72  t usually the pr
4b10: 6f 62 6c 65 6d 20 77 69 6c 6c 20 62 65 20 73 65  oblem will be se
4b20: 65 6e 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  en.  The result 
4b30: 77 69 6c 6c 20 62 65 20 61 6e 0a 2a 2a 20 65 72  will be an.** er
4b40: 72 6f 72 20 77 68 69 63 68 20 63 61 6e 20 62 65  ror which can be
4b50: 20 75 73 65 64 20 74 6f 20 64 65 62 75 67 20 74   used to debug t
4b60: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  he application t
4b70: 68 61 74 20 69 73 0a 2a 2a 20 75 73 69 6e 67 20  hat is.** using 
4b80: 53 51 4c 69 74 65 20 69 6e 63 6f 72 72 65 63 74  SQLite incorrect
4b90: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  ly..**.** Ticket
4ba0: 20 23 32 30 32 3a 20 20 49 66 20 64 62 2d 3e 6d   #202:  If db->m
4bb0: 61 67 69 63 20 69 73 20 6e 6f 74 20 61 20 76 61  agic is not a va
4bc0: 6c 69 64 20 6f 70 65 6e 20 76 61 6c 75 65 2c 20  lid open value, 
4bd0: 74 61 6b 65 20 63 61 72 65 20 6e 6f 74 0a 2a 2a  take care not.**
4be0: 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 64   to modify the d
4bf0: 62 20 73 74 72 75 63 74 75 72 65 20 61 74 20 61  b structure at a
4c00: 6c 6c 2e 20 20 49 74 20 63 6f 75 6c 64 20 62 65  ll.  It could be
4c10: 20 74 68 61 74 20 64 62 20 69 73 20 61 20 73 74   that db is a st
4c20: 61 6c 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 2e 20  ale.** pointer. 
4c30: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
4c40: 20 69 74 20 63 6f 75 6c 64 20 62 65 20 74 68 61   it could be tha
4c50: 74 20 74 68 65 72 65 20 68 61 73 20 62 65 65 6e  t there has been
4c60: 20 61 20 70 72 69 6f 72 0a 2a 2a 20 63 61 6c 6c   a prior.** call
4c70: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73   to sqlite3_clos
4c80: 65 28 64 62 29 20 61 6e 64 20 64 62 20 68 61 73  e(db) and db has
4c90: 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65   been deallocate
4ca0: 64 2e 20 20 41 6e 64 20 77 65 20 64 6f 0a 2a 2a  d.  And we do.**
4cb0: 20 6e 6f 74 20 77 61 6e 74 20 74 6f 20 77 72 69   not want to wri
4cc0: 74 65 20 69 6e 74 6f 20 64 65 61 6c 6c 6f 63 61  te into dealloca
4cd0: 74 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 69  ted memory..*/.i
4ce0: 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
4cf0: 4f 6e 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  On(sqlite3 *db){
4d00: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63  .  if( db->magic
4d10: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  ==SQLITE_MAGIC_O
4d20: 50 45 4e 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  PEN ){.    db->m
4d30: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
4d40: 47 49 43 5f 42 55 53 59 3b 0a 20 20 20 20 72 65  GIC_BUSY;.    re
4d50: 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
4d60: 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53  if( db->magic==S
4d70: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
4d80: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
4d90: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
4da0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 64 62 2d 3e  _ERROR;.    db->
4db0: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
4dc0: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 1;.  }.  retu
4dd0: 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  rn 1;.}../*.** C
4de0: 68 61 6e 67 65 20 74 68 65 20 6d 61 67 69 63 20  hange the magic 
4df0: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 4d 41 47 49  from SQLITE_MAGI
4e00: 43 5f 42 55 53 59 20 74 6f 20 53 51 4c 49 54 45  C_BUSY to SQLITE
4e10: 5f 4d 41 47 49 43 5f 4f 50 45 4e 2e 0a 2a 2a 20  _MAGIC_OPEN..** 
4e20: 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  Return an error 
4e30: 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68  (non-zero) if th
4e40: 65 20 6d 61 67 69 63 20 77 61 73 20 6e 6f 74 20  e magic was not 
4e50: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
4e60: 59 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73 20 72  Y.** when this r
4e70: 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64  outine is called
4e80: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4e90: 53 61 66 65 74 79 4f 66 66 28 73 71 6c 69 74 65  SafetyOff(sqlite
4ea0: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
4eb0: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
4ec0: 4d 41 47 49 43 5f 42 55 53 59 20 29 7b 0a 20 20  MAGIC_BUSY ){.  
4ed0: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
4ee0: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b  LITE_MAGIC_OPEN;
4ef0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
4f00: 20 7d 65 6c 73 65 20 7b 0a 20 20 20 20 64 62 2d   }else {.    db-
4f10: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
4f20: 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 20  MAGIC_ERROR;.   
4f30: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
4f40: 75 70 74 65 64 20 3d 20 31 3b 0a 20 20 20 20 72  upted = 1;.    r
4f50: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 7d 0a 0a  eturn 1;.  }.}..
4f60: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70  /*.** Return a p
4f70: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 54 68  ointer to the Th
4f80: 72 65 61 64 44 61 74 61 20 61 73 73 6f 63 69 61  readData associa
4f90: 74 65 64 20 77 69 74 68 20 74 68 65 20 63 61 6c  ted with the cal
4fa0: 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a 2a 2f 0a  ling thread..*/.
4fb0: 54 68 72 65 61 64 44 61 74 61 20 2a 73 71 6c 69  ThreadData *sqli
4fc0: 74 65 33 54 68 72 65 61 64 44 61 74 61 28 29 7b  te3ThreadData(){
4fd0: 0a 20 20 54 68 72 65 61 64 44 61 74 61 20 2a 70  .  ThreadData *p
4fe0: 20 3d 20 28 54 68 72 65 61 64 44 61 74 61 2a 29   = (ThreadData*)
4ff0: 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61 64 53  sqlite3OsThreadS
5000: 70 65 63 69 66 69 63 44 61 74 61 28 31 29 3b 0a  pecificData(1);.
5010: 20 20 69 66 28 20 21 70 20 29 7b 0a 20 20 20 20    if( !p ){.    
5020: 73 71 6c 69 74 65 33 46 61 69 6c 65 64 4d 61 6c  sqlite3FailedMal
5030: 6c 6f 63 28 29 3b 0a 20 20 7d 0a 20 20 72 65 74  loc();.  }.  ret
5040: 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn p;.}../*.** 
5050: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
5060: 20 74 6f 20 74 68 65 20 54 68 72 65 61 64 44 61   to the ThreadDa
5070: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
5080: 74 68 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 74  th the calling t
5090: 68 72 65 61 64 2e 0a 2a 2a 20 49 66 20 6e 6f 20  hread..** If no 
50a0: 54 68 72 65 61 64 44 61 74 61 20 68 61 73 20 62  ThreadData has b
50b0: 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 74 6f  een allocated to
50c0: 20 74 68 69 73 20 74 68 72 65 61 64 20 79 65 74   this thread yet
50d0: 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  , return a point
50e0: 65 72 0a 2a 2a 20 74 6f 20 61 20 73 75 62 73 74  er.** to a subst
50f0: 69 74 75 74 65 20 54 68 72 65 61 64 44 61 74 61  itute ThreadData
5100: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
5110: 69 73 20 61 6c 6c 20 7a 65 72 6f 73 2e 20 0a 2a  is all zeros. .*
5120: 2f 0a 63 6f 6e 73 74 20 54 68 72 65 61 64 44 61  /.const ThreadDa
5130: 74 61 20 2a 73 71 6c 69 74 65 33 54 68 72 65 61  ta *sqlite3Threa
5140: 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29 7b  dDataReadOnly(){
5150: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
5160: 54 68 72 65 61 64 44 61 74 61 20 7a 65 72 6f 44  ThreadData zeroD
5170: 61 74 61 20 3d 20 7b 30 7d 3b 20 20 2f 2a 20 49  ata = {0};  /* I
5180: 6e 69 74 69 61 6c 69 7a 65 72 20 74 6f 20 73 69  nitializer to si
5190: 6c 65 6e 63 65 20 77 61 72 6e 69 6e 67 73 0a 20  lence warnings. 
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51c0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
51d0: 6d 20 62 72 6f 6b 65 6e 20 63 6f 6d 70 69 6c 65  m broken compile
51e0: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 68  rs */.  const Th
51f0: 72 65 61 64 44 61 74 61 20 2a 70 54 64 20 3d 20  readData *pTd = 
5200: 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61 64 53  sqlite3OsThreadS
5210: 70 65 63 69 66 69 63 44 61 74 61 28 30 29 3b 0a  pecificData(0);.
5220: 20 20 72 65 74 75 72 6e 20 70 54 64 20 3f 20 70    return pTd ? p
5230: 54 64 20 3a 20 26 7a 65 72 6f 44 61 74 61 3b 0a  Td : &zeroData;.
5240: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
5250: 6f 20 73 65 65 20 69 66 20 74 68 65 20 54 68 72  o see if the Thr
5260: 65 61 64 44 61 74 61 20 66 6f 72 20 74 68 69 73  eadData for this
5270: 20 74 68 72 65 61 64 20 69 73 20 61 6c 6c 20 7a   thread is all z
5280: 65 72 6f 2e 20 20 49 66 20 69 74 0a 2a 2a 20 69  ero.  If it.** i
5290: 73 2c 20 74 68 65 6e 20 64 65 61 6c 6c 6f 63 61  s, then dealloca
52a0: 74 65 20 69 74 2e 20 0a 2a 2f 0a 76 6f 69 64 20  te it. .*/.void 
52b0: 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68  sqlite3ReleaseTh
52c0: 72 65 61 64 44 61 74 61 28 29 7b 0a 20 20 73 71  readData(){.  sq
52d0: 6c 69 74 65 33 4f 73 54 68 72 65 61 64 53 70 65  lite3OsThreadSpe
52e0: 63 69 66 69 63 44 61 74 61 28 2d 31 29 3b 0a 7d  cificData(-1);.}
52f0: 0a                                               .