/ Hex Artifact Content
Login

Artifact 7e4222955e07dd707a2f360c0eb73452be1cb010:


0000: 2f 2a 0a 2a 2a 20 32 30 30 39 20 4e 6f 76 65 6d  /*.** 2009 Novem
0010: 62 65 72 20 32 35 0a 2a 2a 0a 2a 2a 20 54 68 65  ber 25.**.** The
0020: 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d   author disclaim
0030: 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74  s copyright to t
0040: 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  his source code.
0050: 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a    In place of.**
0060: 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c   a legal notice,
0070: 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73   here is a bless
0080: 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61  ing:.**.**    Ma
0090: 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e  y you do good an
00a0: 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20  d not evil..**  
00b0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00c0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00d0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00e0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20  ive others..**  
00f0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
0100: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0110: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0120: 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a  ou 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 0a 2a 2a 0a 2a 2a 20 54 68 69 73  *****.**.** This
0180: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63   file contains c
0190: 6f 64 65 20 75 73 65 64 20 74 6f 20 69 6e 73 65  ode used to inse
01a0: 72 74 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  rt the values of
01b0: 20 68 6f 73 74 20 70 61 72 61 6d 65 74 65 72 73   host parameters
01c0: 0a 2a 2a 20 28 61 6b 61 20 22 77 69 6c 64 63 61  .** (aka "wildca
01d0: 72 64 73 22 29 20 69 6e 74 6f 20 74 68 65 20 53  rds") into the S
01e0: 51 4c 20 74 65 78 74 20 6f 75 74 70 75 74 20 62  QL text output b
01f0: 79 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  y sqlite3_trace(
0200: 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 56 64 62  )..**.** The Vdb
0210: 65 20 70 61 72 73 65 2d 74 72 65 65 20 65 78 70  e parse-tree exp
0220: 6c 61 69 6e 65 72 20 69 73 20 61 6c 73 6f 20 66  lainer is also f
0230: 6f 75 6e 64 20 68 65 72 65 2e 0a 2a 2f 0a 23 69  ound here..*/.#i
0240: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e  nclude "sqliteIn
0250: 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  t.h".#include "v
0260: 64 62 65 49 6e 74 2e 68 22 0a 0a 23 69 66 6e 64  dbeInt.h"..#ifnd
0270: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
0280: 52 41 43 45 0a 0a 2f 2a 0a 2a 2a 20 7a 53 71 6c  RACE../*.** zSql
0290: 20 69 73 20 61 20 7a 65 72 6f 2d 74 65 72 6d 69   is a zero-termi
02a0: 6e 61 74 65 64 20 73 74 72 69 6e 67 20 6f 66 20  nated string of 
02b0: 55 54 46 2d 38 20 53 51 4c 20 74 65 78 74 2e 20  UTF-8 SQL text. 
02c0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
02d0: 65 72 20 6f 66 0a 2a 2a 20 62 79 74 65 73 20 69  er of.** bytes i
02e0: 6e 20 74 68 69 73 20 74 65 78 74 20 75 70 20 74  n this text up t
02f0: 6f 20 62 75 74 20 65 78 63 6c 75 64 69 6e 67 20  o but excluding 
0300: 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63  the first charac
0310: 74 65 72 20 69 6e 0a 2a 2a 20 61 20 68 6f 73 74  ter in.** a host
0320: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 49 66 20   parameter.  If 
0330: 74 68 65 20 74 65 78 74 20 63 6f 6e 74 61 69 6e  the text contain
0340: 73 20 6e 6f 20 68 6f 73 74 20 70 61 72 61 6d 65  s no host parame
0350: 74 65 72 73 2c 20 72 65 74 75 72 6e 0a 2a 2a 20  ters, return.** 
0360: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
0370: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
0380: 20 74 65 78 74 2e 0a 2a 2f 0a 73 74 61 74 69 63   text..*/.static
0390: 20 69 6e 74 20 66 69 6e 64 4e 65 78 74 48 6f 73   int findNextHos
03a0: 74 50 61 72 61 6d 65 74 65 72 28 63 6f 6e 73 74  tParameter(const
03b0: 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 69 6e 74   char *zSql, int
03c0: 20 2a 70 6e 54 6f 6b 65 6e 29 7b 0a 20 20 69 6e   *pnToken){.  in
03d0: 74 20 74 6f 6b 65 6e 54 79 70 65 3b 0a 20 20 69  t tokenType;.  i
03e0: 6e 74 20 6e 54 6f 74 61 6c 20 3d 20 30 3b 0a 20  nt nTotal = 0;. 
03f0: 20 69 6e 74 20 6e 3b 0a 0a 20 20 2a 70 6e 54 6f   int n;..  *pnTo
0400: 6b 65 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65  ken = 0;.  while
0410: 28 20 7a 53 71 6c 5b 30 5d 20 29 7b 0a 20 20 20  ( zSql[0] ){.   
0420: 20 6e 20 3d 20 73 71 6c 69 74 65 33 47 65 74 54   n = sqlite3GetT
0430: 6f 6b 65 6e 28 28 75 38 2a 29 7a 53 71 6c 2c 20  oken((u8*)zSql, 
0440: 26 74 6f 6b 65 6e 54 79 70 65 29 3b 0a 20 20 20  &tokenType);.   
0450: 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20   assert( n>0 && 
0460: 74 6f 6b 65 6e 54 79 70 65 21 3d 54 4b 5f 49 4c  tokenType!=TK_IL
0470: 4c 45 47 41 4c 20 29 3b 0a 20 20 20 20 69 66 28  LEGAL );.    if(
0480: 20 74 6f 6b 65 6e 54 79 70 65 3d 3d 54 4b 5f 56   tokenType==TK_V
0490: 41 52 49 41 42 4c 45 20 29 7b 0a 20 20 20 20 20  ARIABLE ){.     
04a0: 20 2a 70 6e 54 6f 6b 65 6e 20 3d 20 6e 3b 0a 20   *pnToken = n;. 
04b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
04c0: 7d 0a 20 20 20 20 6e 54 6f 74 61 6c 20 2b 3d 20  }.    nTotal += 
04d0: 6e 3b 0a 20 20 20 20 7a 53 71 6c 20 2b 3d 20 6e  n;.    zSql += n
04e0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e  ;.  }.  return n
04f0: 54 6f 74 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Total;.}../*.** 
0500: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65  This function re
0510: 74 75 72 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  turns a pointer 
0520: 74 6f 20 61 20 6e 75 6c 2d 74 65 72 6d 69 6e 61  to a nul-termina
0530: 74 65 64 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  ted string in me
0540: 6d 6f 72 79 0a 2a 2a 20 6f 62 74 61 69 6e 65 64  mory.** obtained
0550: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 44 62 4d   from sqlite3DbM
0560: 61 6c 6c 6f 63 28 29 2e 20 49 66 20 73 71 6c 69  alloc(). If sqli
0570: 74 65 33 2e 6e 56 64 62 65 45 78 65 63 20 69 73  te3.nVdbeExec is
0580: 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20   1, then the.** 
0590: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20  string contains 
05a0: 61 20 63 6f 70 79 20 6f 66 20 7a 52 61 77 53 71  a copy of zRawSq
05b0: 6c 20 62 75 74 20 77 69 74 68 20 68 6f 73 74 20  l but with host 
05c0: 70 61 72 61 6d 65 74 65 72 73 20 65 78 70 61 6e  parameters expan
05d0: 64 65 64 20 74 6f 20 0a 2a 2a 20 74 68 65 69 72  ded to .** their
05e0: 20 63 75 72 72 65 6e 74 20 62 69 6e 64 69 6e 67   current binding
05f0: 73 2e 20 4f 72 2c 20 69 66 20 73 71 6c 69 74 65  s. Or, if sqlite
0600: 33 2e 6e 56 64 62 65 45 78 65 63 20 69 73 20 67  3.nVdbeExec is g
0610: 72 65 61 74 65 72 20 74 68 61 6e 20 31 2c 20 0a  reater than 1, .
0620: 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 74 75  ** then the retu
0630: 72 6e 65 64 20 73 74 72 69 6e 67 20 68 6f 6c 64  rned string hold
0640: 73 20 61 20 63 6f 70 79 20 6f 66 20 7a 52 61 77  s a copy of zRaw
0650: 53 71 6c 20 77 69 74 68 20 22 2d 2d 20 22 20 70  Sql with "-- " p
0660: 72 65 70 65 6e 64 65 64 0a 2a 2a 20 74 6f 20 65  repended.** to e
0670: 61 63 68 20 6c 69 6e 65 20 6f 66 20 74 65 78 74  ach line of text
0680: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
0690: 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45  QLITE_TRACE_SIZE
06a0: 5f 4c 49 4d 49 54 20 6d 61 63 72 6f 20 69 73 20  _LIMIT macro is 
06b0: 64 65 66 69 6e 65 64 20 74 6f 20 61 6e 20 69 6e  defined to an in
06c0: 74 65 67 65 72 2c 20 74 68 65 6e 0a 2a 2a 20 74  teger, then.** t
06d0: 68 65 6e 20 6c 6f 6e 67 20 73 74 72 69 6e 67 73  hen long strings
06e0: 20 61 6e 64 20 62 6c 6f 62 73 20 61 72 65 20 74   and blobs are t
06f0: 72 75 6e 63 61 74 65 64 20 74 6f 20 74 68 61 74  runcated to that
0700: 20 6d 61 6e 79 20 62 79 74 65 73 2e 20 20 54 68   many bytes.  Th
0710: 69 73 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  is.** can be use
0720: 64 20 74 6f 20 70 72 65 76 65 6e 74 20 75 6e 72  d to prevent unr
0730: 65 61 73 6f 6e 61 62 6c 79 20 6c 61 72 67 65 20  easonably large 
0740: 74 72 61 63 65 20 73 74 72 69 6e 67 73 20 77 68  trace strings wh
0750: 65 6e 20 64 65 61 6c 69 6e 67 0a 2a 2a 20 77 69  en dealing.** wi
0760: 74 68 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 2d  th large (multi-
0770: 6d 65 67 61 62 79 74 65 29 20 73 74 72 69 6e 67  megabyte) string
0780: 73 20 61 6e 64 20 62 6c 6f 62 73 2e 0a 2a 2a 0a  s and blobs..**.
0790: 2a 2a 20 54 68 65 20 63 61 6c 6c 69 6e 67 20 66  ** The calling f
07a0: 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 73 70 6f  unction is respo
07b0: 6e 73 69 62 6c 65 20 66 6f 72 20 6d 61 6b 69 6e  nsible for makin
07c0: 67 20 73 75 72 65 20 74 68 65 20 6d 65 6d 6f 72  g sure the memor
07d0: 79 20 72 65 74 75 72 6e 65 64 0a 2a 2a 20 69 73  y returned.** is
07e0: 20 65 76 65 6e 74 75 61 6c 6c 79 20 66 72 65 65   eventually free
07f0: 64 2e 0a 2a 2a 0a 2a 2a 20 41 4c 47 4f 52 49 54  d..**.** ALGORIT
0800: 48 4d 3a 20 20 53 63 61 6e 20 74 68 65 20 69 6e  HM:  Scan the in
0810: 70 75 74 20 73 74 72 69 6e 67 20 6c 6f 6f 6b 69  put string looki
0820: 6e 67 20 66 6f 72 20 68 6f 73 74 20 70 61 72 61  ng for host para
0830: 6d 65 74 65 72 73 20 69 6e 20 61 6e 79 20 6f 66  meters in any of
0840: 0a 2a 2a 20 74 68 65 73 65 20 66 6f 72 6d 73 3a  .** these forms:
0850: 20 20 3f 2c 20 3f 4e 2c 20 24 41 2c 20 40 41 2c    ?, ?N, $A, @A,
0860: 20 3a 41 2e 20 20 54 61 6b 65 20 63 61 72 65 20   :A.  Take care 
0870: 74 6f 20 61 76 6f 69 64 20 74 65 78 74 20 77 69  to avoid text wi
0880: 74 68 69 6e 0a 2a 2a 20 73 74 72 69 6e 67 20 6c  thin.** string l
0890: 69 74 65 72 61 6c 73 2c 20 71 75 6f 74 65 64 20  iterals, quoted 
08a0: 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 73  identifier names
08b0: 2c 20 61 6e 64 20 63 6f 6d 6d 65 6e 74 73 2e 20  , and comments. 
08c0: 20 46 6f 72 20 74 65 78 74 20 66 6f 72 6d 73 2c   For text forms,
08d0: 0a 2a 2a 20 74 68 65 20 68 6f 73 74 20 70 61 72  .** the host par
08e0: 61 6d 65 74 65 72 20 69 6e 64 65 78 20 69 73 20  ameter index is 
08f0: 66 6f 75 6e 64 20 62 79 20 73 63 61 6e 6e 69 6e  found by scannin
0900: 67 20 74 68 65 20 70 72 65 70 61 72 65 64 0a 2a  g the prepared.*
0910: 2a 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20  * statement for 
0920: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
0930: 67 20 4f 50 5f 56 61 72 69 61 62 6c 65 20 6f 70  g OP_Variable op
0940: 63 6f 64 65 2e 20 20 4f 6e 63 65 20 74 68 65 20  code.  Once the 
0950: 68 6f 73 74 0a 2a 2a 20 70 61 72 61 6d 65 74 65  host.** paramete
0960: 72 20 69 6e 64 65 78 20 69 73 20 6b 6e 6f 77 6e  r index is known
0970: 2c 20 6c 6f 63 61 74 65 20 74 68 65 20 76 61 6c  , locate the val
0980: 75 65 20 69 6e 20 70 2d 3e 61 56 61 72 5b 5d 2e  ue in p->aVar[].
0990: 20 20 54 68 65 6e 20 72 65 6e 64 65 72 0a 2a 2a    Then render.**
09a0: 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 61 20   the value as a 
09b0: 6c 69 74 65 72 61 6c 20 69 6e 20 70 6c 61 63 65  literal in place
09c0: 20 6f 66 20 74 68 65 20 68 6f 73 74 20 70 61 72   of the host par
09d0: 61 6d 65 74 65 72 20 6e 61 6d 65 2e 0a 2a 2f 0a  ameter name..*/.
09e0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62  char *sqlite3Vdb
09f0: 65 45 78 70 61 6e 64 53 71 6c 28 0a 20 20 56 64  eExpandSql(.  Vd
0a00: 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20  be *p,          
0a10: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
0a20: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
0a30: 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64   being evaluated
0a40: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
0a50: 20 2a 7a 52 61 77 53 71 6c 20 20 20 20 20 20 2f   *zRawSql      /
0a60: 2a 20 52 61 77 20 74 65 78 74 20 6f 66 20 74 68  * Raw text of th
0a70: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
0a80: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
0a90: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
0aa0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
0ab0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
0ac0: 20 69 6e 74 20 69 64 78 20 3d 20 30 3b 20 20 20   int idx = 0;   
0ad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
0ae0: 65 78 20 6f 66 20 61 20 68 6f 73 74 20 70 61 72  ex of a host par
0af0: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ameter */.  int 
0b00: 6e 65 78 74 49 6e 64 65 78 20 3d 20 31 3b 20 20  nextIndex = 1;  
0b10: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
0b20: 20 6e 65 78 74 20 3f 20 68 6f 73 74 20 70 61 72   next ? host par
0b30: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ameter */.  int 
0b40: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
0b50: 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
0b60: 66 20 61 20 74 6f 6b 65 6e 20 70 72 65 66 69 78  f a token prefix
0b70: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 6b 65 6e   */.  int nToken
0b80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
0b90: 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
0ba0: 70 61 72 61 6d 65 74 65 72 20 74 6f 6b 65 6e 20  parameter token 
0bb0: 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0bd0: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
0be0: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
0c00: 61 6c 75 65 20 6f 66 20 61 20 68 6f 73 74 20 70  alue of a host p
0c10: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 53 74  arameter */.  St
0c20: 72 41 63 63 75 6d 20 6f 75 74 3b 20 20 20 20 20  rAccum out;     
0c30: 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75         /* Accumu
0c40: 6c 61 74 65 20 74 68 65 20 6f 75 74 70 75 74 20  late the output 
0c50: 68 65 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 7a  here */.  char z
0c60: 42 61 73 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Base[100];      
0c70: 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 20 77 6f     /* Initial wo
0c80: 72 6b 69 6e 67 20 73 70 61 63 65 20 2a 2f 0a 0a  rking space */..
0c90: 20 20 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20    db = p->db;.  
0ca0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
0cb0: 6e 69 74 28 26 6f 75 74 2c 20 7a 42 61 73 65 2c  nit(&out, zBase,
0cc0: 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20   sizeof(zBase), 
0cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0ce0: 20 20 20 20 20 20 20 64 62 2d 3e 61 4c 69 6d 69         db->aLimi
0cf0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
0d00: 45 4e 47 54 48 5d 29 3b 0a 20 20 6f 75 74 2e 64  ENGTH]);.  out.d
0d10: 62 20 3d 20 64 62 3b 0a 20 20 69 66 28 20 64 62  b = db;.  if( db
0d20: 2d 3e 6e 56 64 62 65 45 78 65 63 3e 31 20 29 7b  ->nVdbeExec>1 ){
0d30: 0a 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 52 61  .    while( *zRa
0d40: 77 53 71 6c 20 29 7b 0a 20 20 20 20 20 20 63 6f  wSql ){.      co
0d50: 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74  nst char *zStart
0d60: 20 3d 20 7a 52 61 77 53 71 6c 3b 0a 20 20 20 20   = zRawSql;.    
0d70: 20 20 77 68 69 6c 65 28 20 2a 28 7a 52 61 77 53    while( *(zRawS
0d80: 71 6c 2b 2b 29 21 3d 27 5c 6e 27 20 26 26 20 2a  ql++)!='\n' && *
0d90: 7a 52 61 77 53 71 6c 20 29 3b 0a 20 20 20 20 20  zRawSql );.     
0da0: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
0db0: 41 70 70 65 6e 64 28 26 6f 75 74 2c 20 22 2d 2d  Append(&out, "--
0dc0: 20 22 2c 20 33 29 3b 0a 20 20 20 20 20 20 61 73   ", 3);.      as
0dd0: 73 65 72 74 28 20 28 7a 52 61 77 53 71 6c 20 2d  sert( (zRawSql -
0de0: 20 7a 53 74 61 72 74 29 20 3e 20 30 20 29 3b 0a   zStart) > 0 );.
0df0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72        sqlite3Str
0e00: 41 63 63 75 6d 41 70 70 65 6e 64 28 26 6f 75 74  AccumAppend(&out
0e10: 2c 20 7a 53 74 61 72 74 2c 20 28 69 6e 74 29 28  , zStart, (int)(
0e20: 7a 52 61 77 53 71 6c 2d 7a 53 74 61 72 74 29 29  zRawSql-zStart))
0e30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
0e40: 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 52 61 77  .    while( zRaw
0e50: 53 71 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  Sql[0] ){.      
0e60: 6e 20 3d 20 66 69 6e 64 4e 65 78 74 48 6f 73 74  n = findNextHost
0e70: 50 61 72 61 6d 65 74 65 72 28 7a 52 61 77 53 71  Parameter(zRawSq
0e80: 6c 2c 20 26 6e 54 6f 6b 65 6e 29 3b 0a 20 20 20  l, &nToken);.   
0e90: 20 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29     assert( n>0 )
0ea0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
0eb0: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 26 6f  trAccumAppend(&o
0ec0: 75 74 2c 20 7a 52 61 77 53 71 6c 2c 20 6e 29 3b  ut, zRawSql, n);
0ed0: 0a 20 20 20 20 20 20 7a 52 61 77 53 71 6c 20 2b  .      zRawSql +
0ee0: 3d 20 6e 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = n;.      asser
0ef0: 74 28 20 7a 52 61 77 53 71 6c 5b 30 5d 20 7c 7c  t( zRawSql[0] ||
0f00: 20 6e 54 6f 6b 65 6e 3d 3d 30 20 29 3b 0a 20 20   nToken==0 );.  
0f10: 20 20 20 20 69 66 28 20 6e 54 6f 6b 65 6e 3d 3d      if( nToken==
0f20: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
0f30: 20 69 66 28 20 7a 52 61 77 53 71 6c 5b 30 5d 3d   if( zRawSql[0]=
0f40: 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='?' ){.        
0f50: 69 66 28 20 6e 54 6f 6b 65 6e 3e 31 20 29 7b 0a  if( nToken>1 ){.
0f60: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
0f70: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
0f80: 28 7a 52 61 77 53 71 6c 5b 31 5d 29 20 29 3b 0a  (zRawSql[1]) );.
0f90: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
0fa0: 33 47 65 74 49 6e 74 33 32 28 26 7a 52 61 77 53  3GetInt32(&zRawS
0fb0: 71 6c 5b 31 5d 2c 20 26 69 64 78 29 3b 0a 20 20  ql[1], &idx);.  
0fc0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
0fd0: 20 20 20 20 20 20 20 69 64 78 20 3d 20 6e 65 78         idx = nex
0fe0: 74 49 6e 64 65 78 3b 0a 20 20 20 20 20 20 20 20  tIndex;.        
0ff0: 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
1000: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a         assert( z
1010: 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 3a 27 20 7c  RawSql[0]==':' |
1020: 7c 20 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 24  | zRawSql[0]=='$
1030: 27 20 7c 7c 20 7a 52 61 77 53 71 6c 5b 30 5d 3d  ' || zRawSql[0]=
1040: 3d 27 40 27 20 29 3b 0a 20 20 20 20 20 20 20 20  ='@' );.        
1050: 74 65 73 74 63 61 73 65 28 20 7a 52 61 77 53 71  testcase( zRawSq
1060: 6c 5b 30 5d 3d 3d 27 3a 27 20 29 3b 0a 20 20 20  l[0]==':' );.   
1070: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 7a       testcase( z
1080: 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 24 27 20 29  RawSql[0]=='$' )
1090: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
10a0: 73 65 28 20 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d  se( zRawSql[0]==
10b0: 27 40 27 20 29 3b 0a 20 20 20 20 20 20 20 20 69  '@' );.        i
10c0: 64 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dx = sqlite3Vdbe
10d0: 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 70  ParameterIndex(p
10e0: 2c 20 7a 52 61 77 53 71 6c 2c 20 6e 54 6f 6b 65  , zRawSql, nToke
10f0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  n);.        asse
1100: 72 74 28 20 69 64 78 3e 30 20 29 3b 0a 20 20 20  rt( idx>0 );.   
1110: 20 20 20 7d 0a 20 20 20 20 20 20 7a 52 61 77 53     }.      zRawS
1120: 71 6c 20 2b 3d 20 6e 54 6f 6b 65 6e 3b 0a 20 20  ql += nToken;.  
1130: 20 20 20 20 6e 65 78 74 49 6e 64 65 78 20 3d 20      nextIndex = 
1140: 69 64 78 20 2b 20 31 3b 0a 20 20 20 20 20 20 61  idx + 1;.      a
1150: 73 73 65 72 74 28 20 69 64 78 3e 30 20 26 26 20  ssert( idx>0 && 
1160: 69 64 78 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  idx<=p->nVar );.
1170: 20 20 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d        pVar = &p-
1180: 3e 61 56 61 72 5b 69 64 78 2d 31 5d 3b 0a 20 20  >aVar[idx-1];.  
1190: 20 20 20 20 69 66 28 20 70 56 61 72 2d 3e 66 6c      if( pVar->fl
11a0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
11b0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
11c0: 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
11d0: 26 6f 75 74 2c 20 22 4e 55 4c 4c 22 2c 20 34 29  &out, "NULL", 4)
11e0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
11f0: 28 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20  ( pVar->flags & 
1200: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 20  MEM_Int ){.     
1210: 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74     sqlite3XPrint
1220: 66 28 26 6f 75 74 2c 20 30 2c 20 22 25 6c 6c 64  f(&out, 0, "%lld
1230: 22 2c 20 70 56 61 72 2d 3e 75 2e 69 29 3b 0a 20  ", pVar->u.i);. 
1240: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
1250: 56 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Var->flags & MEM
1260: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 20  _Real ){.       
1270: 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
1280: 26 6f 75 74 2c 20 30 2c 20 22 25 21 2e 31 35 67  &out, 0, "%!.15g
1290: 22 2c 20 70 56 61 72 2d 3e 75 2e 72 29 3b 0a 20  ", pVar->u.r);. 
12a0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
12b0: 56 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Var->flags & MEM
12c0: 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
12d0: 69 6e 74 20 6e 4f 75 74 3b 20 20 2f 2a 20 4e 75  int nOut;  /* Nu
12e0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
12f0: 20 74 68 65 20 73 74 72 69 6e 67 20 74 65 78 74   the string text
1300: 20 74 6f 20 69 6e 63 6c 75 64 65 20 69 6e 20 6f   to include in o
1310: 75 74 70 75 74 20 2a 2f 0a 23 69 66 6e 64 65 66  utput */.#ifndef
1320: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
1330: 31 36 0a 20 20 20 20 20 20 20 20 75 38 20 65 6e  16.        u8 en
1340: 63 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20 20  c = ENC(db);.   
1350: 20 20 20 20 20 4d 65 6d 20 75 74 66 38 3b 0a 20       Mem utf8;. 
1360: 20 20 20 20 20 20 20 69 66 28 20 65 6e 63 21 3d         if( enc!=
1370: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
1380: 20 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28           memset(
1390: 26 75 74 66 38 2c 20 30 2c 20 73 69 7a 65 6f 66  &utf8, 0, sizeof
13a0: 28 75 74 66 38 29 29 3b 0a 20 20 20 20 20 20 20  (utf8));.       
13b0: 20 20 20 75 74 66 38 2e 64 62 20 3d 20 64 62 3b     utf8.db = db;
13c0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
13d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
13e0: 26 75 74 66 38 2c 20 70 56 61 72 2d 3e 7a 2c 20  &utf8, pVar->z, 
13f0: 70 56 61 72 2d 3e 6e 2c 20 65 6e 63 2c 20 53 51  pVar->n, enc, SQ
1400: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
1410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
1420: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
1430: 67 28 26 75 74 66 38 2c 20 53 51 4c 49 54 45 5f  g(&utf8, SQLITE_
1440: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 20 20 20  UTF8);.         
1450: 20 70 56 61 72 20 3d 20 26 75 74 66 38 3b 0a 20   pVar = &utf8;. 
1460: 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a         }.#endif.
1470: 20 20 20 20 20 20 20 20 6e 4f 75 74 20 3d 20 70          nOut = p
1480: 56 61 72 2d 3e 6e 3b 0a 23 69 66 64 65 66 20 53  Var->n;.#ifdef S
1490: 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45  QLITE_TRACE_SIZE
14a0: 5f 4c 49 4d 49 54 0a 20 20 20 20 20 20 20 20 69  _LIMIT.        i
14b0: 66 28 20 6e 4f 75 74 3e 53 51 4c 49 54 45 5f 54  f( nOut>SQLITE_T
14c0: 52 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 20  RACE_SIZE_LIMIT 
14d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 4f 75  ){.          nOu
14e0: 74 20 3d 20 53 51 4c 49 54 45 5f 54 52 41 43 45  t = SQLITE_TRACE
14f0: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3b 0a 20 20 20  _SIZE_LIMIT;.   
1500: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 6e 4f         while( nO
1510: 75 74 3c 70 56 61 72 2d 3e 6e 20 26 26 20 28 70  ut<pVar->n && (p
1520: 56 61 72 2d 3e 7a 5b 6e 4f 75 74 5d 26 30 78 63  Var->z[nOut]&0xc
1530: 30 29 3d 3d 30 78 38 30 20 29 7b 20 6e 4f 75 74  0)==0x80 ){ nOut
1540: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a  ++; }.        }.
1550: 23 65 6e 64 69 66 20 20 20 20 0a 20 20 20 20 20  #endif    .     
1560: 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74     sqlite3XPrint
1570: 66 28 26 6f 75 74 2c 20 30 2c 20 22 27 25 2e 2a  f(&out, 0, "'%.*
1580: 71 27 22 2c 20 6e 4f 75 74 2c 20 70 56 61 72 2d  q'", nOut, pVar-
1590: 3e 7a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  >z);.#ifdef SQLI
15a0: 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49  TE_TRACE_SIZE_LI
15b0: 4d 49 54 0a 20 20 20 20 20 20 20 20 69 66 28 20  MIT.        if( 
15c0: 6e 4f 75 74 3c 70 56 61 72 2d 3e 6e 20 29 7b 0a  nOut<pVar->n ){.
15d0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
15e0: 33 58 50 72 69 6e 74 66 28 26 6f 75 74 2c 20 30  3XPrintf(&out, 0
15f0: 2c 20 22 2f 2a 2b 25 64 20 62 79 74 65 73 2a 2f  , "/*+%d bytes*/
1600: 22 2c 20 70 56 61 72 2d 3e 6e 2d 6e 4f 75 74 29  ", pVar->n-nOut)
1610: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64  ;.        }.#end
1620: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
1630: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20  E_OMIT_UTF16.   
1640: 20 20 20 20 20 69 66 28 20 65 6e 63 21 3d 53 51       if( enc!=SQ
1650: 4c 49 54 45 5f 55 54 46 38 20 29 20 73 71 6c 69  LITE_UTF8 ) sqli
1660: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
1670: 65 28 26 75 74 66 38 29 3b 0a 23 65 6e 64 69 66  e(&utf8);.#endif
1680: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
1690: 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d   pVar->flags & M
16a0: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
16b0: 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74     sqlite3XPrint
16c0: 66 28 26 6f 75 74 2c 20 30 2c 20 22 7a 65 72 6f  f(&out, 0, "zero
16d0: 62 6c 6f 62 28 25 64 29 22 2c 20 70 56 61 72 2d  blob(%d)", pVar-
16e0: 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20  >u.nZero);.     
16f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1700: 69 6e 74 20 6e 4f 75 74 3b 20 20 2f 2a 20 4e 75  int nOut;  /* Nu
1710: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
1720: 20 74 68 65 20 62 6c 6f 62 20 74 6f 20 69 6e 63   the blob to inc
1730: 6c 75 64 65 20 69 6e 20 6f 75 74 70 75 74 20 2a  lude in output *
1740: 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
1750: 28 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20  ( pVar->flags & 
1760: 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
1770: 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63      sqlite3StrAc
1780: 63 75 6d 41 70 70 65 6e 64 28 26 6f 75 74 2c 20  cumAppend(&out, 
1790: 22 78 27 22 2c 20 32 29 3b 0a 20 20 20 20 20 20  "x'", 2);.      
17a0: 20 20 6e 4f 75 74 20 3d 20 70 56 61 72 2d 3e 6e    nOut = pVar->n
17b0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
17c0: 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54  TRACE_SIZE_LIMIT
17d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 4f 75  .        if( nOu
17e0: 74 3e 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 53  t>SQLITE_TRACE_S
17f0: 49 5a 45 5f 4c 49 4d 49 54 20 29 20 6e 4f 75 74  IZE_LIMIT ) nOut
1800: 20 3d 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f   = SQLITE_TRACE_
1810: 53 49 5a 45 5f 4c 49 4d 49 54 3b 0a 23 65 6e 64  SIZE_LIMIT;.#end
1820: 69 66 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  if.        for(i
1830: 3d 30 3b 20 69 3c 6e 4f 75 74 3b 20 69 2b 2b 29  =0; i<nOut; i++)
1840: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
1850: 74 65 33 58 50 72 69 6e 74 66 28 26 6f 75 74 2c  te3XPrintf(&out,
1860: 20 30 2c 20 22 25 30 32 78 22 2c 20 70 56 61 72   0, "%02x", pVar
1870: 2d 3e 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20 20  ->z[i]&0xff);.  
1880: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1890: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
18a0: 70 70 65 6e 64 28 26 6f 75 74 2c 20 22 27 22 2c  ppend(&out, "'",
18b0: 20 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   1);.#ifdef SQLI
18c0: 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49  TE_TRACE_SIZE_LI
18d0: 4d 49 54 0a 20 20 20 20 20 20 20 20 69 66 28 20  MIT.        if( 
18e0: 6e 4f 75 74 3c 70 56 61 72 2d 3e 6e 20 29 7b 0a  nOut<pVar->n ){.
18f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1900: 33 58 50 72 69 6e 74 66 28 26 6f 75 74 2c 20 30  3XPrintf(&out, 0
1910: 2c 20 22 2f 2a 2b 25 64 20 62 79 74 65 73 2a 2f  , "/*+%d bytes*/
1920: 22 2c 20 70 56 61 72 2d 3e 6e 2d 6e 4f 75 74 29  ", pVar->n-nOut)
1930: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64  ;.        }.#end
1940: 69 66 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  if.      }.    }
1950: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71  .  }.  return sq
1960: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
1970: 69 73 68 28 26 6f 75 74 29 3b 0a 7d 0a 0a 23 65  ish(&out);.}..#e
1980: 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
1990: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
19a0: 45 20 2a 2f 0a                                   E */.