/ Hex Artifact Content
Login

Artifact f75c5455d8cf389ef86a8bfdfd3177e0e3692484:


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 64 62 2c 20 7a 42  nit(&out, db, zB
0cc0: 61 73 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73  ase, sizeof(zBas
0cd0: 65 29 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  e), .           
0ce0: 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61             db->a
0cf0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
0d00: 49 54 5f 4c 45 4e 47 54 48 5d 29 3b 0a 20 20 69  IT_LENGTH]);.  i
0d10: 66 28 20 64 62 2d 3e 6e 56 64 62 65 45 78 65 63  f( db->nVdbeExec
0d20: 3e 31 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28  >1 ){.    while(
0d30: 20 2a 7a 52 61 77 53 71 6c 20 29 7b 0a 20 20 20   *zRawSql ){.   
0d40: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
0d50: 53 74 61 72 74 20 3d 20 7a 52 61 77 53 71 6c 3b  Start = zRawSql;
0d60: 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 28  .      while( *(
0d70: 7a 52 61 77 53 71 6c 2b 2b 29 21 3d 27 5c 6e 27  zRawSql++)!='\n'
0d80: 20 26 26 20 2a 7a 52 61 77 53 71 6c 20 29 3b 0a   && *zRawSql );.
0d90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72        sqlite3Str
0da0: 41 63 63 75 6d 41 70 70 65 6e 64 28 26 6f 75 74  AccumAppend(&out
0db0: 2c 20 22 2d 2d 20 22 2c 20 33 29 3b 0a 20 20 20  , "-- ", 3);.   
0dc0: 20 20 20 61 73 73 65 72 74 28 20 28 7a 52 61 77     assert( (zRaw
0dd0: 53 71 6c 20 2d 20 7a 53 74 61 72 74 29 20 3e 20  Sql - zStart) > 
0de0: 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
0df0: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
0e00: 28 26 6f 75 74 2c 20 7a 53 74 61 72 74 2c 20 28  (&out, zStart, (
0e10: 69 6e 74 29 28 7a 52 61 77 53 71 6c 2d 7a 53 74  int)(zRawSql-zSt
0e20: 61 72 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  art));.    }.  }
0e30: 65 6c 73 65 20 69 66 28 20 70 2d 3e 6e 56 61 72  else if( p->nVar
0e40: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
0e50: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
0e60: 28 26 6f 75 74 2c 20 7a 52 61 77 53 71 6c 2c 20  (&out, zRawSql, 
0e70: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
0e80: 7a 52 61 77 53 71 6c 29 29 3b 0a 20 20 7d 65 6c  zRawSql));.  }el
0e90: 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 7a  se{.    while( z
0ea0: 52 61 77 53 71 6c 5b 30 5d 20 29 7b 0a 20 20 20  RawSql[0] ){.   
0eb0: 20 20 20 6e 20 3d 20 66 69 6e 64 4e 65 78 74 48     n = findNextH
0ec0: 6f 73 74 50 61 72 61 6d 65 74 65 72 28 7a 52 61  ostParameter(zRa
0ed0: 77 53 71 6c 2c 20 26 6e 54 6f 6b 65 6e 29 3b 0a  wSql, &nToken);.
0ee0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 3e        assert( n>
0ef0: 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
0f00: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
0f10: 28 26 6f 75 74 2c 20 7a 52 61 77 53 71 6c 2c 20  (&out, zRawSql, 
0f20: 6e 29 3b 0a 20 20 20 20 20 20 7a 52 61 77 53 71  n);.      zRawSq
0f30: 6c 20 2b 3d 20 6e 3b 0a 20 20 20 20 20 20 61 73  l += n;.      as
0f40: 73 65 72 74 28 20 7a 52 61 77 53 71 6c 5b 30 5d  sert( zRawSql[0]
0f50: 20 7c 7c 20 6e 54 6f 6b 65 6e 3d 3d 30 20 29 3b   || nToken==0 );
0f60: 0a 20 20 20 20 20 20 69 66 28 20 6e 54 6f 6b 65  .      if( nToke
0f70: 6e 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  n==0 ) break;.  
0f80: 20 20 20 20 69 66 28 20 7a 52 61 77 53 71 6c 5b      if( zRawSql[
0f90: 30 5d 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20  0]=='?' ){.     
0fa0: 20 20 20 69 66 28 20 6e 54 6f 6b 65 6e 3e 31 20     if( nToken>1 
0fb0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  ){.          ass
0fc0: 65 72 74 28 20 73 71 6c 69 74 65 33 49 73 64 69  ert( sqlite3Isdi
0fd0: 67 69 74 28 7a 52 61 77 53 71 6c 5b 31 5d 29 20  git(zRawSql[1]) 
0fe0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
0ff0: 69 74 65 33 47 65 74 49 6e 74 33 32 28 26 7a 52  ite3GetInt32(&zR
1000: 61 77 53 71 6c 5b 31 5d 2c 20 26 69 64 78 29 3b  awSql[1], &idx);
1010: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1020: 20 20 20 20 20 20 20 20 20 20 69 64 78 20 3d 20            idx = 
1030: 6e 65 78 74 49 6e 64 65 78 3b 0a 20 20 20 20 20  nextIndex;.     
1040: 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
1050: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1060: 28 20 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 3a  ( zRawSql[0]==':
1070: 27 20 7c 7c 20 7a 52 61 77 53 71 6c 5b 30 5d 3d  ' || zRawSql[0]=
1080: 3d 27 24 27 20 7c 7c 0a 20 20 20 20 20 20 20 20  ='$' ||.        
1090: 20 20 20 20 20 20 20 20 7a 52 61 77 53 71 6c 5b          zRawSql[
10a0: 30 5d 3d 3d 27 40 27 20 7c 7c 20 7a 52 61 77 53  0]=='@' || zRawS
10b0: 71 6c 5b 30 5d 3d 3d 27 23 27 20 29 3b 0a 20 20  ql[0]=='#' );.  
10c0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10d0: 7a 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 3a 27 20  zRawSql[0]==':' 
10e0: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10f0: 61 73 65 28 20 7a 52 61 77 53 71 6c 5b 30 5d 3d  ase( zRawSql[0]=
1100: 3d 27 24 27 20 29 3b 0a 20 20 20 20 20 20 20 20  ='$' );.        
1110: 74 65 73 74 63 61 73 65 28 20 7a 52 61 77 53 71  testcase( zRawSq
1120: 6c 5b 30 5d 3d 3d 27 40 27 20 29 3b 0a 20 20 20  l[0]=='@' );.   
1130: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 7a       testcase( z
1140: 52 61 77 53 71 6c 5b 30 5d 3d 3d 27 23 27 20 29  RawSql[0]=='#' )
1150: 3b 0a 20 20 20 20 20 20 20 20 69 64 78 20 3d 20  ;.        idx = 
1160: 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
1170: 65 74 65 72 49 6e 64 65 78 28 70 2c 20 7a 52 61  eterIndex(p, zRa
1180: 77 53 71 6c 2c 20 6e 54 6f 6b 65 6e 29 3b 0a 20  wSql, nToken);. 
1190: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
11a0: 64 78 3e 30 20 29 3b 0a 20 20 20 20 20 20 7d 0a  dx>0 );.      }.
11b0: 20 20 20 20 20 20 7a 52 61 77 53 71 6c 20 2b 3d        zRawSql +=
11c0: 20 6e 54 6f 6b 65 6e 3b 0a 20 20 20 20 20 20 6e   nToken;.      n
11d0: 65 78 74 49 6e 64 65 78 20 3d 20 69 64 78 20 2b  extIndex = idx +
11e0: 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
11f0: 28 20 69 64 78 3e 30 20 26 26 20 69 64 78 3c 3d  ( idx>0 && idx<=
1200: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 20 20 20  p->nVar );.     
1210: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
1220: 5b 69 64 78 2d 31 5d 3b 0a 20 20 20 20 20 20 69  [idx-1];.      i
1230: 66 28 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 26  f( pVar->flags &
1240: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
1250: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
1260: 63 63 75 6d 41 70 70 65 6e 64 28 26 6f 75 74 2c  ccumAppend(&out,
1270: 20 22 4e 55 4c 4c 22 2c 20 34 29 3b 0a 20 20 20   "NULL", 4);.   
1280: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 56 61     }else if( pVa
1290: 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  r->flags & MEM_I
12a0: 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  nt ){.        sq
12b0: 6c 69 74 65 33 58 50 72 69 6e 74 66 28 26 6f 75  lite3XPrintf(&ou
12c0: 74 2c 20 22 25 6c 6c 64 22 2c 20 70 56 61 72 2d  t, "%lld", pVar-
12d0: 3e 75 2e 69 29 3b 0a 20 20 20 20 20 20 7d 65 6c  >u.i);.      }el
12e0: 73 65 20 69 66 28 20 70 56 61 72 2d 3e 66 6c 61  se if( pVar->fla
12f0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
1300: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1310: 58 50 72 69 6e 74 66 28 26 6f 75 74 2c 20 22 25  XPrintf(&out, "%
1320: 21 2e 31 35 67 22 2c 20 70 56 61 72 2d 3e 75 2e  !.15g", pVar->u.
1330: 72 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  r);.      }else 
1340: 69 66 28 20 70 56 61 72 2d 3e 66 6c 61 67 73 20  if( pVar->flags 
1350: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
1360: 20 20 20 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20       int nOut;  
1370: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
1380: 65 73 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  es of the string
1390: 20 74 65 78 74 20 74 6f 20 69 6e 63 6c 75 64 65   text to include
13a0: 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 69   in output */.#i
13b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13c0: 54 5f 55 54 46 31 36 0a 20 20 20 20 20 20 20 20  T_UTF16.        
13d0: 75 38 20 65 6e 63 20 3d 20 45 4e 43 28 64 62 29  u8 enc = ENC(db)
13e0: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20 75 74  ;.        Mem ut
13f0: 66 38 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  f8;.        if( 
1400: 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc!=SQLITE_UTF8
1410: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6d 65   ){.          me
1420: 6d 73 65 74 28 26 75 74 66 38 2c 20 30 2c 20 73  mset(&utf8, 0, s
1430: 69 7a 65 6f 66 28 75 74 66 38 29 29 3b 0a 20 20  izeof(utf8));.  
1440: 20 20 20 20 20 20 20 20 75 74 66 38 2e 64 62 20          utf8.db 
1450: 3d 20 64 62 3b 0a 20 20 20 20 20 20 20 20 20 20  = db;.          
1460: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
1470: 74 53 74 72 28 26 75 74 66 38 2c 20 70 56 61 72  tStr(&utf8, pVar
1480: 2d 3e 7a 2c 20 70 56 61 72 2d 3e 6e 2c 20 65 6e  ->z, pVar->n, en
1490: 63 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  c, SQLITE_STATIC
14a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
14b0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
14c0: 63 6f 64 69 6e 67 28 26 75 74 66 38 2c 20 53 51  coding(&utf8, SQ
14d0: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20  LITE_UTF8);.    
14e0: 20 20 20 20 20 20 70 56 61 72 20 3d 20 26 75 74        pVar = &ut
14f0: 66 38 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65  f8;.        }.#e
1500: 6e 64 69 66 0a 20 20 20 20 20 20 20 20 6e 4f 75  ndif.        nOu
1510: 74 20 3d 20 70 56 61 72 2d 3e 6e 3b 0a 23 69 66  t = pVar->n;.#if
1520: 64 65 66 20 53 51 4c 49 54 45 5f 54 52 41 43 45  def SQLITE_TRACE
1530: 5f 53 49 5a 45 5f 4c 49 4d 49 54 0a 20 20 20 20  _SIZE_LIMIT.    
1540: 20 20 20 20 69 66 28 20 6e 4f 75 74 3e 53 51 4c      if( nOut>SQL
1550: 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f 4c  ITE_TRACE_SIZE_L
1560: 49 4d 49 54 20 29 7b 0a 20 20 20 20 20 20 20 20  IMIT ){.        
1570: 20 20 6e 4f 75 74 20 3d 20 53 51 4c 49 54 45 5f    nOut = SQLITE_
1580: 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54  TRACE_SIZE_LIMIT
1590: 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  ;.          whil
15a0: 65 28 20 6e 4f 75 74 3c 70 56 61 72 2d 3e 6e 20  e( nOut<pVar->n 
15b0: 26 26 20 28 70 56 61 72 2d 3e 7a 5b 6e 4f 75 74  && (pVar->z[nOut
15c0: 5d 26 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  ]&0xc0)==0x80 ){
15d0: 20 6e 4f 75 74 2b 2b 3b 20 7d 0a 20 20 20 20 20   nOut++; }.     
15e0: 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 20 20 0a     }.#endif    .
15f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 58          sqlite3X
1600: 50 72 69 6e 74 66 28 26 6f 75 74 2c 20 22 27 25  Printf(&out, "'%
1610: 2e 2a 71 27 22 2c 20 6e 4f 75 74 2c 20 70 56 61  .*q'", nOut, pVa
1620: 72 2d 3e 7a 29 3b 0a 23 69 66 64 65 66 20 53 51  r->z);.#ifdef SQ
1630: 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f  LITE_TRACE_SIZE_
1640: 4c 49 4d 49 54 0a 20 20 20 20 20 20 20 20 69 66  LIMIT.        if
1650: 28 20 6e 4f 75 74 3c 70 56 61 72 2d 3e 6e 20 29  ( nOut<pVar->n )
1660: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
1670: 74 65 33 58 50 72 69 6e 74 66 28 26 6f 75 74 2c  te3XPrintf(&out,
1680: 20 22 2f 2a 2b 25 64 20 62 79 74 65 73 2a 2f 22   "/*+%d bytes*/"
1690: 2c 20 70 56 61 72 2d 3e 6e 2d 6e 4f 75 74 29 3b  , pVar->n-nOut);
16a0: 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  .        }.#endi
16b0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
16c0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
16d0: 20 20 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c      if( enc!=SQL
16e0: 49 54 45 5f 55 54 46 38 20 29 20 73 71 6c 69 74  ITE_UTF8 ) sqlit
16f0: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
1700: 28 26 75 74 66 38 29 3b 0a 23 65 6e 64 69 66 0a  (&utf8);.#endif.
1710: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
1720: 70 56 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pVar->flags & ME
1730: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
1740: 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66    sqlite3XPrintf
1750: 28 26 6f 75 74 2c 20 22 7a 65 72 6f 62 6c 6f 62  (&out, "zeroblob
1760: 28 25 64 29 22 2c 20 70 56 61 72 2d 3e 75 2e 6e  (%d)", pVar->u.n
1770: 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7d 65 6c  Zero);.      }el
1780: 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
1790: 6e 4f 75 74 3b 20 20 2f 2a 20 4e 75 6d 62 65 72  nOut;  /* Number
17a0: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 74 68 65   of bytes of the
17b0: 20 62 6c 6f 62 20 74 6f 20 69 6e 63 6c 75 64 65   blob to include
17c0: 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20   in output */.  
17d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 56        assert( pV
17e0: 61 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ar->flags & MEM_
17f0: 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20  Blob );.        
1800: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
1810: 70 70 65 6e 64 28 26 6f 75 74 2c 20 22 78 27 22  ppend(&out, "x'"
1820: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 6e 4f  , 2);.        nO
1830: 75 74 20 3d 20 70 56 61 72 2d 3e 6e 3b 0a 23 69  ut = pVar->n;.#i
1840: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 52 41 43  fdef SQLITE_TRAC
1850: 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 0a 20 20 20  E_SIZE_LIMIT.   
1860: 20 20 20 20 20 69 66 28 20 6e 4f 75 74 3e 53 51       if( nOut>SQ
1870: 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45 5f  LITE_TRACE_SIZE_
1880: 4c 49 4d 49 54 20 29 20 6e 4f 75 74 20 3d 20 53  LIMIT ) nOut = S
1890: 51 4c 49 54 45 5f 54 52 41 43 45 5f 53 49 5a 45  QLITE_TRACE_SIZE
18a0: 5f 4c 49 4d 49 54 3b 0a 23 65 6e 64 69 66 0a 20  _LIMIT;.#endif. 
18b0: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20         for(i=0; 
18c0: 69 3c 6e 4f 75 74 3b 20 69 2b 2b 29 7b 0a 20 20  i<nOut; i++){.  
18d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 58          sqlite3X
18e0: 50 72 69 6e 74 66 28 26 6f 75 74 2c 20 22 25 30  Printf(&out, "%0
18f0: 32 78 22 2c 20 70 56 61 72 2d 3e 7a 5b 69 5d 26  2x", pVar->z[i]&
1900: 30 78 66 66 29 3b 0a 20 20 20 20 20 20 20 20 7d  0xff);.        }
1910: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1920: 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 26  StrAccumAppend(&
1930: 6f 75 74 2c 20 22 27 22 2c 20 31 29 3b 0a 23 69  out, "'", 1);.#i
1940: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 52 41 43  fdef SQLITE_TRAC
1950: 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 0a 20 20 20  E_SIZE_LIMIT.   
1960: 20 20 20 20 20 69 66 28 20 6e 4f 75 74 3c 70 56       if( nOut<pV
1970: 61 72 2d 3e 6e 20 29 7b 0a 20 20 20 20 20 20 20  ar->n ){.       
1980: 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74     sqlite3XPrint
1990: 66 28 26 6f 75 74 2c 20 22 2f 2a 2b 25 64 20 62  f(&out, "/*+%d b
19a0: 79 74 65 73 2a 2f 22 2c 20 70 56 61 72 2d 3e 6e  ytes*/", pVar->n
19b0: 2d 6e 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20  -nOut);.        
19c0: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7d  }.#endif.      }
19d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
19e0: 75 72 6e 20 73 71 6c 69 74 65 33 53 74 72 41 63  urn sqlite3StrAc
19f0: 63 75 6d 46 69 6e 69 73 68 28 26 6f 75 74 29 3b  cumFinish(&out);
1a00: 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
1a10: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1a20: 54 5f 54 52 41 43 45 20 2a 2f 0a                 T_TRACE */.