/ Hex Artifact Content
Login

Artifact 79d6dbbc479267b255a7de8080eee6e729928a0ef93ed9b0bfa5618875b48392:


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 23 69 66 6e 64 65 66 20  here */.#ifndef 
0c60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
0c70: 36 0a 20 20 4d 65 6d 20 75 74 66 38 3b 20 20 20  6.  Mem utf8;   
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0c90: 55 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20  Used to convert 
0ca0: 55 54 46 31 36 20 69 6e 74 6f 20 55 54 46 38 20  UTF16 into UTF8 
0cb0: 66 6f 72 20 64 69 73 70 6c 61 79 20 2a 2f 0a 23  for display */.#
0cc0: 65 6e 64 69 66 0a 20 20 63 68 61 72 20 7a 42 61  endif.  char zBa
0cd0: 73 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  se[100];        
0ce0: 20 2f 2a 20 49 6e 69 74 69 61 6c 20 77 6f 72 6b   /* Initial work
0cf0: 69 6e 67 20 73 70 61 63 65 20 2a 2f 0a 0a 20 20  ing space */..  
0d00: 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 73 71  db = p->db;.  sq
0d10: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
0d20: 74 28 26 6f 75 74 2c 20 30 2c 20 7a 42 61 73 65  t(&out, 0, zBase
0d30: 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c  , sizeof(zBase),
0d40: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
0d50: 20 20 20 20 20 20 20 20 64 62 2d 3e 61 4c 69 6d          db->aLim
0d60: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
0d70: 4c 45 4e 47 54 48 5d 29 3b 0a 20 20 69 66 28 20  LENGTH]);.  if( 
0d80: 64 62 2d 3e 6e 56 64 62 65 45 78 65 63 3e 31 20  db->nVdbeExec>1 
0d90: 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 2a 7a  ){.    while( *z
0da0: 52 61 77 53 71 6c 20 29 7b 0a 20 20 20 20 20 20  RawSql ){.      
0db0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
0dc0: 72 74 20 3d 20 7a 52 61 77 53 71 6c 3b 0a 20 20  rt = zRawSql;.  
0dd0: 20 20 20 20 77 68 69 6c 65 28 20 2a 28 7a 52 61      while( *(zRa
0de0: 77 53 71 6c 2b 2b 29 21 3d 27 5c 6e 27 20 26 26  wSql++)!='\n' &&
0df0: 20 2a 7a 52 61 77 53 71 6c 20 29 3b 0a 20 20 20   *zRawSql );.   
0e00: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 61     sqlite3_str_a
0e10: 70 70 65 6e 64 28 26 6f 75 74 2c 20 22 2d 2d 20  ppend(&out, "-- 
0e20: 22 2c 20 33 29 3b 0a 20 20 20 20 20 20 61 73 73  ", 3);.      ass
0e30: 65 72 74 28 20 28 7a 52 61 77 53 71 6c 20 2d 20  ert( (zRawSql - 
0e40: 7a 53 74 61 72 74 29 20 3e 20 30 20 29 3b 0a 20  zStart) > 0 );. 
0e50: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72       sqlite3_str
0e60: 5f 61 70 70 65 6e 64 28 26 6f 75 74 2c 20 7a 53  _append(&out, zS
0e70: 74 61 72 74 2c 20 28 69 6e 74 29 28 7a 52 61 77  tart, (int)(zRaw
0e80: 53 71 6c 2d 7a 53 74 61 72 74 29 29 3b 0a 20 20  Sql-zStart));.  
0e90: 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
0ea0: 70 2d 3e 6e 56 61 72 3d 3d 30 20 29 7b 0a 20 20  p->nVar==0 ){.  
0eb0: 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70    sqlite3_str_ap
0ec0: 70 65 6e 64 28 26 6f 75 74 2c 20 7a 52 61 77 53  pend(&out, zRawS
0ed0: 71 6c 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ql, sqlite3Strle
0ee0: 6e 33 30 28 7a 52 61 77 53 71 6c 29 29 3b 0a 20  n30(zRawSql));. 
0ef0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68 69 6c   }else{.    whil
0f00: 65 28 20 7a 52 61 77 53 71 6c 5b 30 5d 20 29 7b  e( zRawSql[0] ){
0f10: 0a 20 20 20 20 20 20 6e 20 3d 20 66 69 6e 64 4e  .      n = findN
0f20: 65 78 74 48 6f 73 74 50 61 72 61 6d 65 74 65 72  extHostParameter
0f30: 28 7a 52 61 77 53 71 6c 2c 20 26 6e 54 6f 6b 65  (zRawSql, &nToke
0f40: 6e 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  n);.      assert
0f50: 28 20 6e 3e 30 20 29 3b 0a 20 20 20 20 20 20 73  ( n>0 );.      s
0f60: 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e  qlite3_str_appen
0f70: 64 28 26 6f 75 74 2c 20 7a 52 61 77 53 71 6c 2c  d(&out, zRawSql,
0f80: 20 6e 29 3b 0a 20 20 20 20 20 20 7a 52 61 77 53   n);.      zRawS
0f90: 71 6c 20 2b 3d 20 6e 3b 0a 20 20 20 20 20 20 61  ql += n;.      a
0fa0: 73 73 65 72 74 28 20 7a 52 61 77 53 71 6c 5b 30  ssert( zRawSql[0
0fb0: 5d 20 7c 7c 20 6e 54 6f 6b 65 6e 3d 3d 30 20 29  ] || nToken==0 )
0fc0: 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 54 6f 6b  ;.      if( nTok
0fd0: 65 6e 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  en==0 ) break;. 
0fe0: 20 20 20 20 20 69 66 28 20 7a 52 61 77 53 71 6c       if( zRawSql
0ff0: 5b 30 5d 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20  [0]=='?' ){.    
1000: 20 20 20 20 69 66 28 20 6e 54 6f 6b 65 6e 3e 31      if( nToken>1
1010: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73   ){.          as
1020: 73 65 72 74 28 20 73 71 6c 69 74 65 33 49 73 64  sert( sqlite3Isd
1030: 69 67 69 74 28 7a 52 61 77 53 71 6c 5b 31 5d 29  igit(zRawSql[1])
1040: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71   );.          sq
1050: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 26 7a  lite3GetInt32(&z
1060: 52 61 77 53 71 6c 5b 31 5d 2c 20 26 69 64 78 29  RawSql[1], &idx)
1070: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1080: 0a 20 20 20 20 20 20 20 20 20 20 69 64 78 20 3d  .          idx =
1090: 20 6e 65 78 74 49 6e 64 65 78 3b 0a 20 20 20 20   nextIndex;.    
10a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
10b0: 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
10c0: 74 28 20 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27  t( zRawSql[0]=='
10d0: 3a 27 20 7c 7c 20 7a 52 61 77 53 71 6c 5b 30 5d  :' || zRawSql[0]
10e0: 3d 3d 27 24 27 20 7c 7c 0a 20 20 20 20 20 20 20  =='$' ||.       
10f0: 20 20 20 20 20 20 20 20 20 7a 52 61 77 53 71 6c           zRawSql
1100: 5b 30 5d 3d 3d 27 40 27 20 7c 7c 20 7a 52 61 77  [0]=='@' || zRaw
1110: 53 71 6c 5b 30 5d 3d 3d 27 23 27 20 29 3b 0a 20  Sql[0]=='#' );. 
1120: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
1130: 20 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 3a 27   zRawSql[0]==':'
1140: 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
1150: 63 61 73 65 28 20 7a 52 61 77 53 71 6c 5b 30 5d  case( zRawSql[0]
1160: 3d 3d 27 24 27 20 29 3b 0a 20 20 20 20 20 20 20  =='$' );.       
1170: 20 74 65 73 74 63 61 73 65 28 20 7a 52 61 77 53   testcase( zRawS
1180: 71 6c 5b 30 5d 3d 3d 27 40 27 20 29 3b 0a 20 20  ql[0]=='@' );.  
1190: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
11a0: 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 23 27 20  zRawSql[0]=='#' 
11b0: 29 3b 0a 20 20 20 20 20 20 20 20 69 64 78 20 3d  );.        idx =
11c0: 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
11d0: 6d 65 74 65 72 49 6e 64 65 78 28 70 2c 20 7a 52  meterIndex(p, zR
11e0: 61 77 53 71 6c 2c 20 6e 54 6f 6b 65 6e 29 3b 0a  awSql, nToken);.
11f0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1200: 69 64 78 3e 30 20 29 3b 0a 20 20 20 20 20 20 7d  idx>0 );.      }
1210: 0a 20 20 20 20 20 20 7a 52 61 77 53 71 6c 20 2b  .      zRawSql +
1220: 3d 20 6e 54 6f 6b 65 6e 3b 0a 20 20 20 20 20 20  = nToken;.      
1230: 6e 65 78 74 49 6e 64 65 78 20 3d 20 69 64 78 20  nextIndex = idx 
1240: 2b 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  + 1;.      asser
1250: 74 28 20 69 64 78 3e 30 20 26 26 20 69 64 78 3c  t( idx>0 && idx<
1260: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 20 20  =p->nVar );.    
1270: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
1280: 72 5b 69 64 78 2d 31 5d 3b 0a 20 20 20 20 20 20  r[idx-1];.      
1290: 69 66 28 20 70 56 61 72 2d 3e 66 6c 61 67 73 20  if( pVar->flags 
12a0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
12b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
12c0: 72 5f 61 70 70 65 6e 64 28 26 6f 75 74 2c 20 22  r_append(&out, "
12d0: 4e 55 4c 4c 22 2c 20 34 29 3b 0a 20 20 20 20 20  NULL", 4);.     
12e0: 20 7d 65 6c 73 65 20 69 66 28 20 70 56 61 72 2d   }else if( pVar-
12f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1300: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1310: 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 66 28  te3_str_appendf(
1320: 26 6f 75 74 2c 20 22 25 6c 6c 64 22 2c 20 70 56  &out, "%lld", pV
1330: 61 72 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 20 20  ar->u.i);.      
1340: 7d 65 6c 73 65 20 69 66 28 20 70 56 61 72 2d 3e  }else if( pVar->
1350: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1360: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1370: 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 66 28  te3_str_appendf(
1380: 26 6f 75 74 2c 20 22 25 21 2e 31 35 67 22 2c 20  &out, "%!.15g", 
1390: 70 56 61 72 2d 3e 75 2e 72 29 3b 0a 20 20 20 20  pVar->u.r);.    
13a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 56 61 72    }else if( pVar
13b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
13c0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  r ){.        int
13d0: 20 6e 4f 75 74 3b 20 20 2f 2a 20 4e 75 6d 62 65   nOut;  /* Numbe
13e0: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 74 68  r of bytes of th
13f0: 65 20 73 74 72 69 6e 67 20 74 65 78 74 20 74 6f  e string text to
1400: 20 69 6e 63 6c 75 64 65 20 69 6e 20 6f 75 74 70   include in outp
1410: 75 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ut */.#ifndef SQ
1420: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
1430: 20 20 20 20 20 20 20 20 75 38 20 65 6e 63 20 3d          u8 enc =
1440: 20 45 4e 43 28 64 62 29 3b 0a 20 20 20 20 20 20   ENC(db);.      
1450: 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c 49 54    if( enc!=SQLIT
1460: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 20 20  E_UTF8 ){.      
1470: 20 20 20 20 6d 65 6d 73 65 74 28 26 75 74 66 38      memset(&utf8
1480: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 75 74 66 38  , 0, sizeof(utf8
1490: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 75 74  ));.          ut
14a0: 66 38 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  f8.db = db;.    
14b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14c0: 65 4d 65 6d 53 65 74 53 74 72 28 26 75 74 66 38  eMemSetStr(&utf8
14d0: 2c 20 70 56 61 72 2d 3e 7a 2c 20 70 56 61 72 2d  , pVar->z, pVar-
14e0: 3e 6e 2c 20 65 6e 63 2c 20 53 51 4c 49 54 45 5f  >n, enc, SQLITE_
14f0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
1500: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f     if( SQLITE_NO
1510: 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 56 64 62 65  MEM==sqlite3Vdbe
1520: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
1530: 75 74 66 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  utf8, SQLITE_UTF
1540: 38 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  8) ){.          
1550: 20 20 6f 75 74 2e 61 63 63 45 72 72 6f 72 20 3d    out.accError =
1560: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
1570: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 2e 6e             out.n
1580: 41 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20  Alloc = 0;.     
1590: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
15a0: 20 70 56 61 72 20 3d 20 26 75 74 66 38 3b 0a 20   pVar = &utf8;. 
15b0: 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a         }.#endif.
15c0: 20 20 20 20 20 20 20 20 6e 4f 75 74 20 3d 20 70          nOut = p
15d0: 56 61 72 2d 3e 6e 3b 0a 23 69 66 64 65 66 20 53  Var->n;.#ifdef S
15e0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45  QLITE_TRACE_SIZE
15f0: 5f 4c 49 4d 49 54 0a 20 20 20 20 20 20 20 20 69  _LIMIT.        i
1600: 66 28 20 6e 4f 75 74 3e 53 51 4c 49 54 45 5f 54  f( nOut>SQLITE_T
1610: 52 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 20  RACE_SIZE_LIMIT 
1620: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 4f 75  ){.          nOu
1630: 74 20 3d 20 53 51 4c 49 54 45 5f 54 52 41 43 45  t = SQLITE_TRACE
1640: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3b 0a 20 20 20  _SIZE_LIMIT;.   
1650: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 6e 4f         while( nO
1660: 75 74 3c 70 56 61 72 2d 3e 6e 20 26 26 20 28 70  ut<pVar->n && (p
1670: 56 61 72 2d 3e 7a 5b 6e 4f 75 74 5d 26 30 78 63  Var->z[nOut]&0xc
1680: 30 29 3d 3d 30 78 38 30 20 29 7b 20 6e 4f 75 74  0)==0x80 ){ nOut
1690: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a  ++; }.        }.
16a0: 23 65 6e 64 69 66 20 20 20 20 0a 20 20 20 20 20  #endif    .     
16b0: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 61     sqlite3_str_a
16c0: 70 70 65 6e 64 66 28 26 6f 75 74 2c 20 22 27 25  ppendf(&out, "'%
16d0: 2e 2a 71 27 22 2c 20 6e 4f 75 74 2c 20 70 56 61  .*q'", nOut, pVa
16e0: 72 2d 3e 7a 29 3b 0a 23 69 66 64 65 66 20 53 51  r->z);.#ifdef SQ
16f0: 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f  LITE_TRACE_SIZE_
1700: 4c 49 4d 49 54 0a 20 20 20 20 20 20 20 20 69 66  LIMIT.        if
1710: 28 20 6e 4f 75 74 3c 70 56 61 72 2d 3e 6e 20 29  ( nOut<pVar->n )
1720: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
1730: 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 66 28  te3_str_appendf(
1740: 26 6f 75 74 2c 20 22 2f 2a 2b 25 64 20 62 79 74  &out, "/*+%d byt
1750: 65 73 2a 2f 22 2c 20 70 56 61 72 2d 3e 6e 2d 6e  es*/", pVar->n-n
1760: 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Out);.        }.
1770: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1780: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
1790: 0a 20 20 20 20 20 20 20 20 69 66 28 20 65 6e 63  .        if( enc
17a0: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 20  !=SQLITE_UTF8 ) 
17b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
17c0: 6c 65 61 73 65 28 26 75 74 66 38 29 3b 0a 23 65  lease(&utf8);.#e
17d0: 6e 64 69 66 0a 20 20 20 20 20 20 7d 65 6c 73 65  ndif.      }else
17e0: 20 69 66 28 20 70 56 61 72 2d 3e 66 6c 61 67 73   if( pVar->flags
17f0: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
1800: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
1810: 74 72 5f 61 70 70 65 6e 64 66 28 26 6f 75 74 2c  tr_appendf(&out,
1820: 20 22 7a 65 72 6f 62 6c 6f 62 28 25 64 29 22 2c   "zeroblob(%d)",
1830: 20 70 56 61 72 2d 3e 75 2e 6e 5a 65 72 6f 29 3b   pVar->u.nZero);
1840: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1850: 20 20 20 20 20 20 69 6e 74 20 6e 4f 75 74 3b 20        int nOut; 
1860: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
1870: 74 65 73 20 6f 66 20 74 68 65 20 62 6c 6f 62 20  tes of the blob 
1880: 74 6f 20 69 6e 63 6c 75 64 65 20 69 6e 20 6f 75  to include in ou
1890: 74 70 75 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  tput */.        
18a0: 61 73 73 65 72 74 28 20 70 56 61 72 2d 3e 66 6c  assert( pVar->fl
18b0: 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
18c0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
18d0: 33 5f 73 74 72 5f 61 70 70 65 6e 64 28 26 6f 75  3_str_append(&ou
18e0: 74 2c 20 22 78 27 22 2c 20 32 29 3b 0a 20 20 20  t, "x'", 2);.   
18f0: 20 20 20 20 20 6e 4f 75 74 20 3d 20 70 56 61 72       nOut = pVar
1900: 2d 3e 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ->n;.#ifdef SQLI
1910: 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49  TE_TRACE_SIZE_LI
1920: 4d 49 54 0a 20 20 20 20 20 20 20 20 69 66 28 20  MIT.        if( 
1930: 6e 4f 75 74 3e 53 51 4c 49 54 45 5f 54 52 41 43  nOut>SQLITE_TRAC
1940: 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 29 20 6e  E_SIZE_LIMIT ) n
1950: 4f 75 74 20 3d 20 53 51 4c 49 54 45 5f 54 52 41  Out = SQLITE_TRA
1960: 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 3b 0a 23  CE_SIZE_LIMIT;.#
1970: 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 66 6f  endif.        fo
1980: 72 28 69 3d 30 3b 20 69 3c 6e 4f 75 74 3b 20 69  r(i=0; i<nOut; i
1990: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ++){.          s
19a0: 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e  qlite3_str_appen
19b0: 64 66 28 26 6f 75 74 2c 20 22 25 30 32 78 22 2c  df(&out, "%02x",
19c0: 20 70 56 61 72 2d 3e 7a 5b 69 5d 26 30 78 66 66   pVar->z[i]&0xff
19d0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
19e0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72       sqlite3_str
19f0: 5f 61 70 70 65 6e 64 28 26 6f 75 74 2c 20 22 27  _append(&out, "'
1a00: 22 2c 20 31 29 3b 0a 23 69 66 64 65 66 20 53 51  ", 1);.#ifdef SQ
1a10: 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f  LITE_TRACE_SIZE_
1a20: 4c 49 4d 49 54 0a 20 20 20 20 20 20 20 20 69 66  LIMIT.        if
1a30: 28 20 6e 4f 75 74 3c 70 56 61 72 2d 3e 6e 20 29  ( nOut<pVar->n )
1a40: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
1a50: 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 66 28  te3_str_appendf(
1a60: 26 6f 75 74 2c 20 22 2f 2a 2b 25 64 20 62 79 74  &out, "/*+%d byt
1a70: 65 73 2a 2f 22 2c 20 70 56 61 72 2d 3e 6e 2d 6e  es*/", pVar->n-n
1a80: 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Out);.        }.
1a90: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7d 0a 20  #endif.      }. 
1aa0: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6f     }.  }.  if( o
1ab0: 75 74 2e 61 63 63 45 72 72 6f 72 20 29 20 73 71  ut.accError ) sq
1ac0: 6c 69 74 65 33 5f 73 74 72 5f 72 65 73 65 74 28  lite3_str_reset(
1ad0: 26 6f 75 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  &out);.  return 
1ae0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
1af0: 69 6e 69 73 68 28 26 6f 75 74 29 3b 0a 7d 0a 0a  inish(&out);.}..
1b00: 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
1b10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
1b20: 41 43 45 20 2a 2f 0a                             ACE */.