/ Hex Artifact Content
Login

Artifact 48e11ebe040c6b41d146abed2602e3d00d621d7ebe4eb29b0a0f1617fd3c2f6c:


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 53 74 72 41 63 63     sqlite3StrAcc
0e10: 75 6d 41 70 70 65 6e 64 28 26 6f 75 74 2c 20 22  umAppend(&out, "
0e20: 2d 2d 20 22 2c 20 33 29 3b 0a 20 20 20 20 20 20  -- ", 3);.      
0e30: 61 73 73 65 72 74 28 20 28 7a 52 61 77 53 71 6c  assert( (zRawSql
0e40: 20 2d 20 7a 53 74 61 72 74 29 20 3e 20 30 20 29   - zStart) > 0 )
0e50: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
0e60: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 26 6f  trAccumAppend(&o
0e70: 75 74 2c 20 7a 53 74 61 72 74 2c 20 28 69 6e 74  ut, zStart, (int
0e80: 29 28 7a 52 61 77 53 71 6c 2d 7a 53 74 61 72 74  )(zRawSql-zStart
0e90: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ));.    }.  }els
0ea0: 65 20 69 66 28 20 70 2d 3e 6e 56 61 72 3d 3d 30  e if( p->nVar==0
0eb0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
0ec0: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 26 6f  trAccumAppend(&o
0ed0: 75 74 2c 20 7a 52 61 77 53 71 6c 2c 20 73 71 6c  ut, zRawSql, sql
0ee0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 61  ite3Strlen30(zRa
0ef0: 77 53 71 6c 29 29 3b 0a 20 20 7d 65 6c 73 65 7b  wSql));.  }else{
0f00: 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 52 61 77  .    while( zRaw
0f10: 53 71 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  Sql[0] ){.      
0f20: 6e 20 3d 20 66 69 6e 64 4e 65 78 74 48 6f 73 74  n = findNextHost
0f30: 50 61 72 61 6d 65 74 65 72 28 7a 52 61 77 53 71  Parameter(zRawSq
0f40: 6c 2c 20 26 6e 54 6f 6b 65 6e 29 3b 0a 20 20 20  l, &nToken);.   
0f50: 20 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29     assert( n>0 )
0f60: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
0f70: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 26 6f  trAccumAppend(&o
0f80: 75 74 2c 20 7a 52 61 77 53 71 6c 2c 20 6e 29 3b  ut, zRawSql, n);
0f90: 0a 20 20 20 20 20 20 7a 52 61 77 53 71 6c 20 2b  .      zRawSql +
0fa0: 3d 20 6e 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = n;.      asser
0fb0: 74 28 20 7a 52 61 77 53 71 6c 5b 30 5d 20 7c 7c  t( zRawSql[0] ||
0fc0: 20 6e 54 6f 6b 65 6e 3d 3d 30 20 29 3b 0a 20 20   nToken==0 );.  
0fd0: 20 20 20 20 69 66 28 20 6e 54 6f 6b 65 6e 3d 3d      if( nToken==
0fe0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
0ff0: 20 69 66 28 20 7a 52 61 77 53 71 6c 5b 30 5d 3d   if( zRawSql[0]=
1000: 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='?' ){.        
1010: 69 66 28 20 6e 54 6f 6b 65 6e 3e 31 20 29 7b 0a  if( nToken>1 ){.
1020: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1030: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
1040: 28 7a 52 61 77 53 71 6c 5b 31 5d 29 20 29 3b 0a  (zRawSql[1]) );.
1050: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1060: 33 47 65 74 49 6e 74 33 32 28 26 7a 52 61 77 53  3GetInt32(&zRawS
1070: 71 6c 5b 31 5d 2c 20 26 69 64 78 29 3b 0a 20 20  ql[1], &idx);.  
1080: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1090: 20 20 20 20 20 20 20 69 64 78 20 3d 20 6e 65 78         idx = nex
10a0: 74 49 6e 64 65 78 3b 0a 20 20 20 20 20 20 20 20  tIndex;.        
10b0: 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
10c0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a         assert( z
10d0: 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 3a 27 20 7c  RawSql[0]==':' |
10e0: 7c 20 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 24  | zRawSql[0]=='$
10f0: 27 20 7c 7c 0a 20 20 20 20 20 20 20 20 20 20 20  ' ||.           
1100: 20 20 20 20 20 7a 52 61 77 53 71 6c 5b 30 5d 3d       zRawSql[0]=
1110: 3d 27 40 27 20 7c 7c 20 7a 52 61 77 53 71 6c 5b  ='@' || zRawSql[
1120: 30 5d 3d 3d 27 23 27 20 29 3b 0a 20 20 20 20 20  0]=='#' );.     
1130: 20 20 20 74 65 73 74 63 61 73 65 28 20 7a 52 61     testcase( zRa
1140: 77 53 71 6c 5b 30 5d 3d 3d 27 3a 27 20 29 3b 0a  wSql[0]==':' );.
1150: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
1160: 28 20 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 24  ( zRawSql[0]=='$
1170: 27 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  ' );.        tes
1180: 74 63 61 73 65 28 20 7a 52 61 77 53 71 6c 5b 30  tcase( zRawSql[0
1190: 5d 3d 3d 27 40 27 20 29 3b 0a 20 20 20 20 20 20  ]=='@' );.      
11a0: 20 20 74 65 73 74 63 61 73 65 28 20 7a 52 61 77    testcase( zRaw
11b0: 53 71 6c 5b 30 5d 3d 3d 27 23 27 20 29 3b 0a 20  Sql[0]=='#' );. 
11c0: 20 20 20 20 20 20 20 69 64 78 20 3d 20 73 71 6c         idx = sql
11d0: 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
11e0: 72 49 6e 64 65 78 28 70 2c 20 7a 52 61 77 53 71  rIndex(p, zRawSq
11f0: 6c 2c 20 6e 54 6f 6b 65 6e 29 3b 0a 20 20 20 20  l, nToken);.    
1200: 20 20 20 20 61 73 73 65 72 74 28 20 69 64 78 3e      assert( idx>
1210: 30 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  0 );.      }.   
1220: 20 20 20 7a 52 61 77 53 71 6c 20 2b 3d 20 6e 54     zRawSql += nT
1230: 6f 6b 65 6e 3b 0a 20 20 20 20 20 20 6e 65 78 74  oken;.      next
1240: 49 6e 64 65 78 20 3d 20 69 64 78 20 2b 20 31 3b  Index = idx + 1;
1250: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69  .      assert( i
1260: 64 78 3e 30 20 26 26 20 69 64 78 3c 3d 70 2d 3e  dx>0 && idx<=p->
1270: 6e 56 61 72 20 29 3b 0a 20 20 20 20 20 20 70 56  nVar );.      pV
1280: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 64  ar = &p->aVar[id
1290: 78 2d 31 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  x-1];.      if( 
12a0: 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pVar->flags & ME
12b0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
12c0: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
12d0: 6d 41 70 70 65 6e 64 28 26 6f 75 74 2c 20 22 4e  mAppend(&out, "N
12e0: 55 4c 4c 22 2c 20 34 29 3b 0a 20 20 20 20 20 20  ULL", 4);.      
12f0: 7d 65 6c 73 65 20 69 66 28 20 70 56 61 72 2d 3e  }else if( pVar->
1300: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
1310: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
1320: 65 33 58 50 72 69 6e 74 66 28 26 6f 75 74 2c 20  e3XPrintf(&out, 
1330: 22 25 6c 6c 64 22 2c 20 70 56 61 72 2d 3e 75 2e  "%lld", pVar->u.
1340: 69 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  i);.      }else 
1350: 69 66 28 20 70 56 61 72 2d 3e 66 6c 61 67 73 20  if( pVar->flags 
1360: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
1370: 20 20 20 20 20 20 73 71 6c 69 74 65 33 58 50 72        sqlite3XPr
1380: 69 6e 74 66 28 26 6f 75 74 2c 20 22 25 21 2e 31  intf(&out, "%!.1
1390: 35 67 22 2c 20 70 56 61 72 2d 3e 75 2e 72 29 3b  5g", pVar->u.r);
13a0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
13b0: 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d   pVar->flags & M
13c0: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
13d0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 2f 2a 20    int nOut;  /* 
13e0: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
13f0: 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 74 65  of the string te
1400: 78 74 20 74 6f 20 69 6e 63 6c 75 64 65 20 69 6e  xt to include in
1410: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 69 66 6e 64   output */.#ifnd
1420: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
1430: 54 46 31 36 0a 20 20 20 20 20 20 20 20 75 38 20  TF16.        u8 
1440: 65 6e 63 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20  enc = ENC(db);. 
1450: 20 20 20 20 20 20 20 69 66 28 20 65 6e 63 21 3d         if( enc!=
1460: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
1470: 20 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28           memset(
1480: 26 75 74 66 38 2c 20 30 2c 20 73 69 7a 65 6f 66  &utf8, 0, sizeof
1490: 28 75 74 66 38 29 29 3b 0a 20 20 20 20 20 20 20  (utf8));.       
14a0: 20 20 20 75 74 66 38 2e 64 62 20 3d 20 64 62 3b     utf8.db = db;
14b0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
14c0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
14d0: 26 75 74 66 38 2c 20 70 56 61 72 2d 3e 7a 2c 20  &utf8, pVar->z, 
14e0: 70 56 61 72 2d 3e 6e 2c 20 65 6e 63 2c 20 53 51  pVar->n, enc, SQ
14f0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
1500: 20 20 20 20 20 20 20 20 69 66 28 20 53 51 4c 49          if( SQLI
1510: 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65  TE_NOMEM==sqlite
1520: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
1530: 69 6e 67 28 26 75 74 66 38 2c 20 53 51 4c 49 54  ing(&utf8, SQLIT
1540: 45 5f 55 54 46 38 29 20 29 7b 0a 20 20 20 20 20  E_UTF8) ){.     
1550: 20 20 20 20 20 20 20 6f 75 74 2e 61 63 63 45 72         out.accEr
1560: 72 6f 72 20 3d 20 53 54 52 41 43 43 55 4d 5f 4e  ror = STRACCUM_N
1570: 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20 20  OMEM;.          
1580: 20 20 6f 75 74 2e 6e 41 6c 6c 6f 63 20 3d 20 30    out.nAlloc = 0
1590: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
15a0: 20 20 20 20 20 20 20 20 70 56 61 72 20 3d 20 26          pVar = &
15b0: 75 74 66 38 3b 0a 20 20 20 20 20 20 20 20 7d 0a  utf8;.        }.
15c0: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 6e  #endif.        n
15d0: 4f 75 74 20 3d 20 70 56 61 72 2d 3e 6e 3b 0a 23  Out = pVar->n;.#
15e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 52 41  ifdef SQLITE_TRA
15f0: 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 0a 20 20  CE_SIZE_LIMIT.  
1600: 20 20 20 20 20 20 69 66 28 20 6e 4f 75 74 3e 53        if( nOut>S
1610: 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45  QLITE_TRACE_SIZE
1620: 5f 4c 49 4d 49 54 20 29 7b 0a 20 20 20 20 20 20  _LIMIT ){.      
1630: 20 20 20 20 6e 4f 75 74 20 3d 20 53 51 4c 49 54      nOut = SQLIT
1640: 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49 4d  E_TRACE_SIZE_LIM
1650: 49 54 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68  IT;.          wh
1660: 69 6c 65 28 20 6e 4f 75 74 3c 70 56 61 72 2d 3e  ile( nOut<pVar->
1670: 6e 20 26 26 20 28 70 56 61 72 2d 3e 7a 5b 6e 4f  n && (pVar->z[nO
1680: 75 74 5d 26 30 78 63 30 29 3d 3d 30 78 38 30 20  ut]&0xc0)==0x80 
1690: 29 7b 20 6e 4f 75 74 2b 2b 3b 20 7d 0a 20 20 20  ){ nOut++; }.   
16a0: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 20       }.#endif   
16b0: 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65   .        sqlite
16c0: 33 58 50 72 69 6e 74 66 28 26 6f 75 74 2c 20 22  3XPrintf(&out, "
16d0: 27 25 2e 2a 71 27 22 2c 20 6e 4f 75 74 2c 20 70  '%.*q'", nOut, p
16e0: 56 61 72 2d 3e 7a 29 3b 0a 23 69 66 64 65 66 20  Var->z);.#ifdef 
16f0: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a  SQLITE_TRACE_SIZ
1700: 45 5f 4c 49 4d 49 54 0a 20 20 20 20 20 20 20 20  E_LIMIT.        
1710: 69 66 28 20 6e 4f 75 74 3c 70 56 61 72 2d 3e 6e  if( nOut<pVar->n
1720: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
1730: 6c 69 74 65 33 58 50 72 69 6e 74 66 28 26 6f 75  lite3XPrintf(&ou
1740: 74 2c 20 22 2f 2a 2b 25 64 20 62 79 74 65 73 2a  t, "/*+%d bytes*
1750: 2f 22 2c 20 70 56 61 72 2d 3e 6e 2d 6e 4f 75 74  /", pVar->n-nOut
1760: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e  );.        }.#en
1770: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
1780: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
1790: 20 20 20 20 20 20 69 66 28 20 65 6e 63 21 3d 53        if( enc!=S
17a0: 51 4c 49 54 45 5f 55 54 46 38 20 29 20 73 71 6c  QLITE_UTF8 ) sql
17b0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
17c0: 73 65 28 26 75 74 66 38 29 3b 0a 23 65 6e 64 69  se(&utf8);.#endi
17d0: 66 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  f.      }else if
17e0: 28 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20  ( pVar->flags & 
17f0: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
1800: 20 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e      sqlite3XPrin
1810: 74 66 28 26 6f 75 74 2c 20 22 7a 65 72 6f 62 6c  tf(&out, "zerobl
1820: 6f 62 28 25 64 29 22 2c 20 70 56 61 72 2d 3e 75  ob(%d)", pVar->u
1830: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7d  .nZero);.      }
1840: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
1850: 74 20 6e 4f 75 74 3b 20 20 2f 2a 20 4e 75 6d 62  t nOut;  /* Numb
1860: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 74  er of bytes of t
1870: 68 65 20 62 6c 6f 62 20 74 6f 20 69 6e 63 6c 75  he blob to inclu
1880: 64 65 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  de in output */.
1890: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
18a0: 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pVar->flags & ME
18b0: 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
18c0: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
18d0: 6d 41 70 70 65 6e 64 28 26 6f 75 74 2c 20 22 78  mAppend(&out, "x
18e0: 27 22 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20  '", 2);.        
18f0: 6e 4f 75 74 20 3d 20 70 56 61 72 2d 3e 6e 3b 0a  nOut = pVar->n;.
1900: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 52  #ifdef SQLITE_TR
1910: 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 0a 20  ACE_SIZE_LIMIT. 
1920: 20 20 20 20 20 20 20 69 66 28 20 6e 4f 75 74 3e         if( nOut>
1930: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a  SQLITE_TRACE_SIZ
1940: 45 5f 4c 49 4d 49 54 20 29 20 6e 4f 75 74 20 3d  E_LIMIT ) nOut =
1950: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49   SQLITE_TRACE_SI
1960: 5a 45 5f 4c 49 4d 49 54 3b 0a 23 65 6e 64 69 66  ZE_LIMIT;.#endif
1970: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30  .        for(i=0
1980: 3b 20 69 3c 6e 4f 75 74 3b 20 69 2b 2b 29 7b 0a  ; i<nOut; i++){.
1990: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
19a0: 33 58 50 72 69 6e 74 66 28 26 6f 75 74 2c 20 22  3XPrintf(&out, "
19b0: 25 30 32 78 22 2c 20 70 56 61 72 2d 3e 7a 5b 69  %02x", pVar->z[i
19c0: 5d 26 30 78 66 66 29 3b 0a 20 20 20 20 20 20 20  ]&0xff);.       
19d0: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
19e0: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
19f0: 28 26 6f 75 74 2c 20 22 27 22 2c 20 31 29 3b 0a  (&out, "'", 1);.
1a00: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 52  #ifdef SQLITE_TR
1a10: 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 0a 20  ACE_SIZE_LIMIT. 
1a20: 20 20 20 20 20 20 20 69 66 28 20 6e 4f 75 74 3c         if( nOut<
1a30: 70 56 61 72 2d 3e 6e 20 29 7b 0a 20 20 20 20 20  pVar->n ){.     
1a40: 20 20 20 20 20 73 71 6c 69 74 65 33 58 50 72 69       sqlite3XPri
1a50: 6e 74 66 28 26 6f 75 74 2c 20 22 2f 2a 2b 25 64  ntf(&out, "/*+%d
1a60: 20 62 79 74 65 73 2a 2f 22 2c 20 70 56 61 72 2d   bytes*/", pVar-
1a70: 3e 6e 2d 6e 4f 75 74 29 3b 0a 20 20 20 20 20 20  >n-nOut);.      
1a80: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
1a90: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69   }.    }.  }.  i
1aa0: 66 28 20 6f 75 74 2e 61 63 63 45 72 72 6f 72 20  f( out.accError 
1ab0: 29 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  ) sqlite3StrAccu
1ac0: 6d 52 65 73 65 74 28 26 6f 75 74 29 3b 0a 20 20  mReset(&out);.  
1ad0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 53 74  return sqlite3St
1ae0: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 6f 75  rAccumFinish(&ou
1af0: 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  t);.}..#endif /*
1b00: 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
1b10: 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a        OMIT_TRACE */.