/ Hex Artifact Content
Login

Artifact 9e75a6a0b55bf61cfff7d7e19d89834a1b938236:


0000: 2f 2a 0a 2a 2a 20 54 68 65 20 22 70 72 69 6e 74  /*.** The "print
0010: 66 22 20 63 6f 64 65 20 74 68 61 74 20 66 6f 6c  f" code that fol
0020: 6c 6f 77 73 20 64 61 74 65 73 20 66 72 6f 6d 20  lows dates from 
0030: 74 68 65 20 31 39 38 30 27 73 2e 20 20 49 74 20  the 1980's.  It 
0040: 69 73 20 69 6e 0a 2a 2a 20 74 68 65 20 70 75 62  is in.** the pub
0050: 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65  lic domain.  The
0060: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 65 6e   original commen
0070: 74 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ts are included 
0080: 68 65 72 65 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  here for.** comp
0090: 6c 65 74 65 6e 65 73 73 2e 20 20 54 68 65 79 20  leteness.  They 
00a0: 61 72 65 20 76 65 72 79 20 6f 75 74 2d 6f 66 2d  are very out-of-
00b0: 64 61 74 65 20 62 75 74 20 6d 69 67 68 74 20 62  date but might b
00c0: 65 20 75 73 65 66 75 6c 20 61 73 0a 2a 2a 20 61  e useful as.** a
00d0: 6e 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 66  n historical ref
00e0: 65 72 65 6e 63 65 2e 20 20 4d 6f 73 74 20 6f 66  erence.  Most of
00f0: 20 74 68 65 20 22 65 6e 68 61 6e 63 65 6d 65 6e   the "enhancemen
0100: 74 73 22 20 68 61 76 65 20 62 65 65 6e 20 62 61  ts" have been ba
0110: 63 6b 65 64 0a 2a 2a 20 6f 75 74 20 73 6f 20 74  cked.** out so t
0120: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  hat the function
0130: 61 6c 69 74 79 20 69 73 20 6e 6f 77 20 74 68 65  ality is now the
0140: 20 73 61 6d 65 20 61 73 20 73 74 61 6e 64 61 72   same as standar
0150: 64 20 70 72 69 6e 74 66 28 29 2e 0a 2a 2a 0a 2a  d printf()..**.*
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20  *********.**.** 
01b0: 54 68 69 73 20 66 69 6c 65 20 63 6f 6e 74 61 69  This file contai
01c0: 6e 73 20 63 6f 64 65 20 66 6f 72 20 61 20 73 65  ns code for a se
01d0: 74 20 6f 66 20 22 70 72 69 6e 74 66 22 2d 6c 69  t of "printf"-li
01e0: 6b 65 20 72 6f 75 74 69 6e 65 73 2e 20 20 54 68  ke routines.  Th
01f0: 65 73 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ese.** routines 
0200: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 73 20 6d  format strings m
0210: 75 63 68 20 6c 69 6b 65 20 74 68 65 20 70 72 69  uch like the pri
0220: 6e 74 66 28 29 20 66 72 6f 6d 20 74 68 65 20 73  ntf() from the s
0230: 74 61 6e 64 61 72 64 20 43 0a 2a 2a 20 6c 69 62  tandard C.** lib
0240: 72 61 72 79 2c 20 74 68 6f 75 67 68 20 74 68 65  rary, though the
0250: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0260: 68 65 72 65 20 68 61 73 20 65 6e 68 61 6e 63 65  here has enhance
0270: 6d 65 6e 74 73 20 74 6f 20 73 75 70 70 6f 72 74  ments to support
0280: 0a 2a 2a 20 53 51 4c 6c 69 74 65 2e 0a 2a 2f 0a  .** SQLlite..*/.
0290: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
02a0: 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 66  Int.h"../*.** If
02b0: 20 74 68 65 20 73 74 72 63 68 72 6e 75 6c 28 29   the strchrnul()
02c0: 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
02d0: 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  n is available, 
02e0: 74 68 65 6e 20 73 65 74 0a 2a 2a 20 48 41 56 45  then set.** HAVE
02f0: 5f 53 54 52 43 48 52 4e 55 4c 2e 20 20 49 66 20  _STRCHRNUL.  If 
0300: 74 68 61 74 20 72 6f 75 74 69 6e 65 20 69 73 20  that routine is 
0310: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2c 20 74  not available, t
0320: 68 69 73 20 6d 6f 64 75 6c 65 0a 2a 2a 20 77 69  his module.** wi
0330: 6c 6c 20 73 75 70 70 6c 79 20 69 74 73 20 6f 77  ll supply its ow
0340: 6e 2e 20 20 54 68 65 20 62 75 69 6c 74 2d 69 6e  n.  The built-in
0350: 20 76 65 72 73 69 6f 6e 20 69 73 20 73 6c 6f 77   version is slow
0360: 65 72 20 74 68 61 6e 0a 2a 2a 20 74 68 65 20 67  er than.** the g
0370: 6c 69 62 63 20 76 65 72 73 69 6f 6e 20 73 6f 20  libc version so 
0380: 74 68 65 20 67 6c 69 62 63 20 76 65 72 73 69 6f  the glibc versio
0390: 6e 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  n is definitely 
03a0: 70 72 65 66 65 72 72 65 64 2e 0a 2a 2f 0a 23 69  preferred..*/.#i
03b0: 66 20 21 64 65 66 69 6e 65 64 28 48 41 56 45 5f  f !defined(HAVE_
03c0: 53 54 52 43 48 52 4e 55 4c 29 0a 23 20 64 65 66  STRCHRNUL).# def
03d0: 69 6e 65 20 48 41 56 45 5f 53 54 52 43 48 52 4e  ine HAVE_STRCHRN
03e0: 55 4c 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  UL 0.#endif.../*
03f0: 0a 2a 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 74  .** Conversion t
0400: 79 70 65 73 20 66 61 6c 6c 20 69 6e 74 6f 20 76  ypes fall into v
0410: 61 72 69 6f 75 73 20 63 61 74 65 67 6f 72 69 65  arious categorie
0420: 73 20 61 73 20 64 65 66 69 6e 65 64 20 62 79 20  s as defined by 
0430: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
0440: 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e 0a 2a 2f   enumeration..*/
0450: 0a 23 64 65 66 69 6e 65 20 65 74 52 41 44 49 58  .#define etRADIX
0460: 20 20 20 20 20 20 20 31 20 2f 2a 20 49 6e 74 65         1 /* Inte
0470: 67 65 72 20 74 79 70 65 73 2e 20 20 25 64 2c 20  ger types.  %d, 
0480: 25 78 2c 20 25 6f 2c 20 61 6e 64 20 73 6f 20 66  %x, %o, and so f
0490: 6f 72 74 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20  orth */.#define 
04a0: 65 74 46 4c 4f 41 54 20 20 20 20 20 20 20 32 20  etFLOAT       2 
04b0: 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  /* Floating poin
04c0: 74 2e 20 20 25 66 20 2a 2f 0a 23 64 65 66 69 6e  t.  %f */.#defin
04d0: 65 20 65 74 45 58 50 20 20 20 20 20 20 20 20 20  e etEXP         
04e0: 33 20 2f 2a 20 45 78 70 6f 6e 65 6e 74 69 6f 6e  3 /* Exponention
04f0: 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 20 25 65 20  al notation. %e 
0500: 61 6e 64 20 25 45 20 2a 2f 0a 23 64 65 66 69 6e  and %E */.#defin
0510: 65 20 65 74 47 45 4e 45 52 49 43 20 20 20 20 20  e etGENERIC     
0520: 34 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 6f 72  4 /* Floating or
0530: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 2c 20 64 65   exponential, de
0540: 70 65 6e 64 69 6e 67 20 6f 6e 20 65 78 70 6f 6e  pending on expon
0550: 65 6e 74 2e 20 25 67 20 2a 2f 0a 23 64 65 66 69  ent. %g */.#defi
0560: 6e 65 20 65 74 53 49 5a 45 20 20 20 20 20 20 20  ne etSIZE       
0570: 20 35 20 2f 2a 20 52 65 74 75 72 6e 20 6e 75 6d   5 /* Return num
0580: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
0590: 73 20 70 72 6f 63 65 73 73 65 64 20 73 6f 20 66  s processed so f
05a0: 61 72 2e 20 25 6e 20 2a 2f 0a 23 64 65 66 69 6e  ar. %n */.#defin
05b0: 65 20 65 74 53 54 52 49 4e 47 20 20 20 20 20 20  e etSTRING      
05c0: 36 20 2f 2a 20 53 74 72 69 6e 67 73 2e 20 25 73  6 /* Strings. %s
05d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 44 59   */.#define etDY
05e0: 4e 53 54 52 49 4e 47 20 20 20 37 20 2f 2a 20 44  NSTRING   7 /* D
05f0: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
0600: 61 74 65 64 20 73 74 72 69 6e 67 73 2e 20 25 7a  ated strings. %z
0610: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 50 45   */.#define etPE
0620: 52 43 45 4e 54 20 20 20 20 20 38 20 2f 2a 20 50  RCENT     8 /* P
0630: 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2e 20 25  ercent symbol. %
0640: 25 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 43  % */.#define etC
0650: 48 41 52 58 20 20 20 20 20 20 20 39 20 2f 2a 20  HARX       9 /* 
0660: 43 68 61 72 61 63 74 65 72 73 2e 20 25 63 20 2a  Characters. %c *
0670: 2f 0a 2f 2a 20 54 68 65 20 72 65 73 74 20 61 72  /./* The rest ar
0680: 65 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 6e 6f  e extensions, no
0690: 74 20 6e 6f 72 6d 61 6c 6c 79 20 66 6f 75 6e 64  t normally found
06a0: 20 69 6e 20 70 72 69 6e 74 66 28 29 20 2a 2f 0a   in printf() */.
06b0: 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45 53 43  #define etSQLESC
06c0: 41 50 45 20 20 31 30 20 2f 2a 20 53 74 72 69 6e  APE  10 /* Strin
06d0: 67 73 20 77 69 74 68 20 27 5c 27 27 20 64 6f 75  gs with '\'' dou
06e0: 62 6c 65 64 2e 20 20 25 71 20 2a 2f 0a 23 64 65  bled.  %q */.#de
06f0: 66 69 6e 65 20 65 74 53 51 4c 45 53 43 41 50 45  fine etSQLESCAPE
0700: 32 20 31 31 20 2f 2a 20 53 74 72 69 6e 67 73 20  2 11 /* Strings 
0710: 77 69 74 68 20 27 5c 27 27 20 64 6f 75 62 6c 65  with '\'' double
0720: 64 20 61 6e 64 20 65 6e 63 6c 6f 73 65 64 20 69  d and enclosed i
0730: 6e 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20  n '',.          
0740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0750: 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 73 20 72 65  NULL pointers re
0760: 70 6c 61 63 65 64 20 62 79 20 53 51 4c 20 4e 55  placed by SQL NU
0770: 4c 4c 2e 20 20 25 51 20 2a 2f 0a 23 64 65 66 69  LL.  %Q */.#defi
0780: 6e 65 20 65 74 54 4f 4b 45 4e 20 20 20 20 20 20  ne etTOKEN      
0790: 31 32 20 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20  12 /* a pointer 
07a0: 74 6f 20 61 20 54 6f 6b 65 6e 20 73 74 72 75 63  to a Token struc
07b0: 74 75 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ture */.#define 
07c0: 65 74 53 52 43 4c 49 53 54 20 20 20 20 31 33 20  etSRCLIST    13 
07d0: 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  /* a pointer to 
07e0: 61 20 53 72 63 4c 69 73 74 20 2a 2f 0a 23 64 65  a SrcList */.#de
07f0: 66 69 6e 65 20 65 74 50 4f 49 4e 54 45 52 20 20  fine etPOINTER  
0800: 20 20 31 34 20 2f 2a 20 54 68 65 20 25 70 20 63    14 /* The %p c
0810: 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 23 64 65  onversion */.#de
0820: 66 69 6e 65 20 65 74 53 51 4c 45 53 43 41 50 45  fine etSQLESCAPE
0830: 33 20 31 35 20 2f 2a 20 25 77 20 2d 3e 20 53 74  3 15 /* %w -> St
0840: 72 69 6e 67 73 20 77 69 74 68 20 27 5c 22 27 20  rings with '\"' 
0850: 64 6f 75 62 6c 65 64 20 2a 2f 0a 23 64 65 66 69  doubled */.#defi
0860: 6e 65 20 65 74 4f 52 44 49 4e 41 4c 20 20 20 20  ne etORDINAL    
0870: 31 36 20 2f 2a 20 25 72 20 2d 3e 20 31 73 74 2c  16 /* %r -> 1st,
0880: 20 32 6e 64 2c 20 33 72 64 2c 20 34 74 68 2c 20   2nd, 3rd, 4th, 
0890: 65 74 63 2e 20 20 45 6e 67 6c 69 73 68 20 6f 6e  etc.  English on
08a0: 6c 79 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 65  ly */..#define e
08b0: 74 49 4e 56 41 4c 49 44 20 20 20 20 20 30 20 2f  tINVALID     0 /
08c0: 2a 20 41 6e 79 20 75 6e 72 65 63 6f 67 6e 69 7a  * Any unrecogniz
08d0: 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79  ed conversion ty
08e0: 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  pe */.../*.** An
08f0: 20 22 65 74 42 79 74 65 22 20 69 73 20 61 6e 20   "etByte" is an 
0900: 38 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 76  8-bit unsigned v
0910: 61 6c 75 65 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  alue..*/.typedef
0920: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 65   unsigned char e
0930: 74 42 79 74 65 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61  tByte;../*.** Ea
0940: 63 68 20 62 75 69 6c 74 69 6e 20 63 6f 6e 76 65  ch builtin conve
0950: 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72 20  rsion character 
0960: 28 65 78 3a 20 74 68 65 20 27 64 27 20 69 6e 20  (ex: the 'd' in 
0970: 22 25 64 22 29 20 69 73 20 64 65 73 63 72 69 62  "%d") is describ
0980: 65 64 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ed.** by an inst
0990: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
09a0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
09b0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
09c0: 74 20 65 74 5f 69 6e 66 6f 20 7b 20 20 20 2f 2a  t et_info {   /*
09d0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
09e0: 75 74 20 65 61 63 68 20 66 6f 72 6d 61 74 20 66  ut each format f
09f0: 69 65 6c 64 20 2a 2f 0a 20 20 63 68 61 72 20 66  ield */.  char f
0a00: 6d 74 74 79 70 65 3b 20 20 20 20 20 20 20 20 20  mttype;         
0a10: 20 20 20 2f 2a 20 54 68 65 20 66 6f 72 6d 61 74     /* The format
0a20: 20 66 69 65 6c 64 20 63 6f 64 65 20 6c 65 74 74   field code lett
0a30: 65 72 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 62  er */.  etByte b
0a40: 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ase;            
0a50: 20 2f 2a 20 54 68 65 20 62 61 73 65 20 66 6f 72   /* The base for
0a60: 20 72 61 64 69 78 20 63 6f 6e 76 65 72 73 69 6f   radix conversio
0a70: 6e 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  n */.  etByte fl
0a80: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
0a90: 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  /* One or more o
0aa0: 66 20 46 4c 41 47 5f 20 63 6f 6e 73 74 61 6e 74  f FLAG_ constant
0ab0: 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 65 74 42  s below */.  etB
0ac0: 79 74 65 20 74 79 70 65 3b 20 20 20 20 20 20 20  yte type;       
0ad0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73        /* Convers
0ae0: 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f 0a  ion paradigm */.
0af0: 20 20 65 74 42 79 74 65 20 63 68 61 72 73 65 74    etByte charset
0b00: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66  ;          /* Of
0b10: 66 73 65 74 20 69 6e 74 6f 20 61 44 69 67 69 74  fset into aDigit
0b20: 73 5b 5d 20 6f 66 20 74 68 65 20 64 69 67 69 74  s[] of the digit
0b30: 73 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 65 74  s string */.  et
0b40: 42 79 74 65 20 70 72 65 66 69 78 3b 20 20 20 20  Byte prefix;    
0b50: 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
0b60: 20 69 6e 74 6f 20 61 50 72 65 66 69 78 5b 5d 20   into aPrefix[] 
0b70: 6f 66 20 74 68 65 20 70 72 65 66 69 78 20 73 74  of the prefix st
0b80: 72 69 6e 67 20 2a 2f 0a 7d 20 65 74 5f 69 6e 66  ring */.} et_inf
0b90: 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  o;../*.** Allowe
0ba0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 65 74 5f  d values for et_
0bb0: 69 6e 66 6f 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64  info.flags.*/.#d
0bc0: 65 66 69 6e 65 20 46 4c 41 47 5f 53 49 47 4e 45  efine FLAG_SIGNE
0bd0: 44 20 20 31 20 20 20 20 20 2f 2a 20 54 72 75 65  D  1     /* True
0be0: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 74 6f   if the value to
0bf0: 20 63 6f 6e 76 65 72 74 20 69 73 20 73 69 67 6e   convert is sign
0c00: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46 4c  ed */.#define FL
0c10: 41 47 5f 49 4e 54 45 52 4e 20 20 32 20 20 20 20  AG_INTERN  2    
0c20: 20 2f 2a 20 54 72 75 65 20 69 66 20 66 6f 72 20   /* True if for 
0c30: 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c  internal use onl
0c40: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46 4c 41  y */.#define FLA
0c50: 47 5f 53 54 52 49 4e 47 20 20 34 20 20 20 20 20  G_STRING  4     
0c60: 2f 2a 20 41 6c 6c 6f 77 20 69 6e 66 69 6e 69 74  /* Allow infinit
0c70: 79 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 0a  y precision */..
0c80: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
0c90: 77 69 6e 67 20 74 61 62 6c 65 20 69 73 20 73 65  wing table is se
0ca0: 61 72 63 68 65 64 20 6c 69 6e 65 61 72 6c 79 2c  arched linearly,
0cb0: 20 73 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 74   so it is good t
0cc0: 6f 20 70 75 74 20 74 68 65 0a 2a 2a 20 6d 6f 73  o put the.** mos
0cd0: 74 20 66 72 65 71 75 65 6e 74 6c 79 20 75 73 65  t frequently use
0ce0: 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70  d conversion typ
0cf0: 65 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 73 74 61  es first..*/.sta
0d00: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 61  tic const char a
0d10: 44 69 67 69 74 73 5b 5d 20 3d 20 22 30 31 32 33  Digits[] = "0123
0d20: 34 35 36 37 38 39 41 42 43 44 45 46 30 31 32 33  456789ABCDEF0123
0d30: 34 35 36 37 38 39 61 62 63 64 65 66 22 3b 0a 73  456789abcdef";.s
0d40: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
0d50: 20 61 50 72 65 66 69 78 5b 5d 20 3d 20 22 2d 78   aPrefix[] = "-x
0d60: 30 5c 30 30 30 58 30 22 3b 0a 73 74 61 74 69 63  0\000X0";.static
0d70: 20 63 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20 66   const et_info f
0d80: 6d 74 69 6e 66 6f 5b 5d 20 3d 20 7b 0a 20 20 7b  mtinfo[] = {.  {
0d90: 20 20 27 64 27 2c 20 31 30 2c 20 31 2c 20 65 74    'd', 10, 1, et
0da0: 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20 20  RADIX,      0,  
0db0: 30 20 7d 2c 0a 20 20 7b 20 20 27 73 27 2c 20 20  0 },.  {  's',  
0dc0: 30 2c 20 34 2c 20 65 74 53 54 52 49 4e 47 2c 20  0, 4, etSTRING, 
0dd0: 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b      0,  0 },.  {
0de0: 20 20 27 67 27 2c 20 20 30 2c 20 31 2c 20 65 74    'g',  0, 1, et
0df0: 47 45 4e 45 52 49 43 2c 20 20 20 20 33 30 2c 20  GENERIC,    30, 
0e00: 30 20 7d 2c 0a 20 20 7b 20 20 27 7a 27 2c 20 20  0 },.  {  'z',  
0e10: 30 2c 20 34 2c 20 65 74 44 59 4e 53 54 52 49 4e  0, 4, etDYNSTRIN
0e20: 47 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b  G,  0,  0 },.  {
0e30: 20 20 27 71 27 2c 20 20 30 2c 20 34 2c 20 65 74    'q',  0, 4, et
0e40: 53 51 4c 45 53 43 41 50 45 2c 20 20 30 2c 20 20  SQLESCAPE,  0,  
0e50: 30 20 7d 2c 0a 20 20 7b 20 20 27 51 27 2c 20 20  0 },.  {  'Q',  
0e60: 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43 41 50  0, 4, etSQLESCAP
0e70: 45 32 2c 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b  E2, 0,  0 },.  {
0e80: 20 20 27 77 27 2c 20 20 30 2c 20 34 2c 20 65 74    'w',  0, 4, et
0e90: 53 51 4c 45 53 43 41 50 45 33 2c 20 30 2c 20 20  SQLESCAPE3, 0,  
0ea0: 30 20 7d 2c 0a 20 20 7b 20 20 27 63 27 2c 20 20  0 },.  {  'c',  
0eb0: 30 2c 20 30 2c 20 65 74 43 48 41 52 58 2c 20 20  0, 0, etCHARX,  
0ec0: 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b      0,  0 },.  {
0ed0: 20 20 27 6f 27 2c 20 20 38 2c 20 30 2c 20 65 74    'o',  8, 0, et
0ee0: 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20 20  RADIX,      0,  
0ef0: 32 20 7d 2c 0a 20 20 7b 20 20 27 75 27 2c 20 31  2 },.  {  'u', 1
0f00: 30 2c 20 30 2c 20 65 74 52 41 44 49 58 2c 20 20  0, 0, etRADIX,  
0f10: 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b      0,  0 },.  {
0f20: 20 20 27 78 27 2c 20 31 36 2c 20 30 2c 20 65 74    'x', 16, 0, et
0f30: 52 41 44 49 58 2c 20 20 20 20 20 20 31 36 2c 20  RADIX,      16, 
0f40: 31 20 7d 2c 0a 20 20 7b 20 20 27 58 27 2c 20 31  1 },.  {  'X', 1
0f50: 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c 20 20  6, 0, etRADIX,  
0f60: 20 20 20 20 30 2c 20 20 34 20 7d 2c 0a 23 69 66      0,  4 },.#if
0f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0f80: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
0f90: 20 20 7b 20 20 27 66 27 2c 20 20 30 2c 20 31 2c    {  'f',  0, 1,
0fa0: 20 65 74 46 4c 4f 41 54 2c 20 20 20 20 20 20 30   etFLOAT,      0
0fb0: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 65 27  ,  0 },.  {  'e'
0fc0: 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 50 2c 20  ,  0, 1, etEXP, 
0fd0: 20 20 20 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a         30, 0 },.
0fe0: 20 20 7b 20 20 27 45 27 2c 20 20 30 2c 20 31 2c    {  'E',  0, 1,
0ff0: 20 65 74 45 58 50 2c 20 20 20 20 20 20 20 20 31   etEXP,        1
1000: 34 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 47 27  4, 0 },.  {  'G'
1010: 2c 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52  ,  0, 1, etGENER
1020: 49 43 2c 20 20 20 20 31 34 2c 20 30 20 7d 2c 0a  IC,    14, 0 },.
1030: 23 65 6e 64 69 66 0a 20 20 7b 20 20 27 69 27 2c  #endif.  {  'i',
1040: 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c   10, 1, etRADIX,
1050: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
1060: 20 7b 20 20 27 6e 27 2c 20 20 30 2c 20 30 2c 20   {  'n',  0, 0, 
1070: 65 74 53 49 5a 45 2c 20 20 20 20 20 20 20 30 2c  etSIZE,       0,
1080: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 25 27 2c    0 },.  {  '%',
1090: 20 20 30 2c 20 30 2c 20 65 74 50 45 52 43 45 4e    0, 0, etPERCEN
10a0: 54 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20  T,    0,  0 },. 
10b0: 20 7b 20 20 27 70 27 2c 20 31 36 2c 20 30 2c 20   {  'p', 16, 0, 
10c0: 65 74 50 4f 49 4e 54 45 52 2c 20 20 20 20 30 2c  etPOINTER,    0,
10d0: 20 20 31 20 7d 2c 0a 0a 2f 2a 20 41 6c 6c 20 74    1 },../* All t
10e0: 68 65 20 72 65 73 74 20 68 61 76 65 20 74 68 65  he rest have the
10f0: 20 46 4c 41 47 5f 49 4e 54 45 52 4e 20 62 69 74   FLAG_INTERN bit
1100: 20 73 65 74 20 61 6e 64 20 61 72 65 20 74 68 75   set and are thu
1110: 73 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 0a 2a  s for internal.*
1120: 2a 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 20 20  * use only */.  
1130: 7b 20 20 27 54 27 2c 20 20 30 2c 20 32 2c 20 65  {  'T',  0, 2, e
1140: 74 54 4f 4b 45 4e 2c 20 20 20 20 20 20 30 2c 20  tTOKEN,      0, 
1150: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 53 27 2c 20   0 },.  {  'S', 
1160: 20 30 2c 20 32 2c 20 65 74 53 52 43 4c 49 53 54   0, 2, etSRCLIST
1170: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
1180: 7b 20 20 27 72 27 2c 20 31 30 2c 20 33 2c 20 65  {  'r', 10, 3, e
1190: 74 4f 52 44 49 4e 41 4c 2c 20 20 20 20 30 2c 20  tORDINAL,    0, 
11a0: 20 30 20 7d 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   0 },.};../*.** 
11b0: 49 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  If SQLITE_OMIT_F
11c0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20 69 73  LOATING_POINT is
11d0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 6e   defined, then n
11e0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6c 6f 61 74  one of the float
11f0: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6e  ing point.** con
1200: 76 65 72 73 69 6f 6e 73 20 77 69 6c 6c 20 77 6f  versions will wo
1210: 72 6b 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  rk..*/.#ifndef S
1220: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
1230: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20  ING_POINT./*.** 
1240: 22 2a 76 61 6c 22 20 69 73 20 61 20 64 6f 75 62  "*val" is a doub
1250: 6c 65 20 73 75 63 68 20 74 68 61 74 20 30 2e 31  le such that 0.1
1260: 20 3c 3d 20 2a 76 61 6c 20 3c 20 31 30 2e 30 0a   <= *val < 10.0.
1270: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 73  ** Return the as
1280: 63 69 69 20 63 6f 64 65 20 66 6f 72 20 74 68 65  cii code for the
1290: 20 6c 65 61 64 69 6e 67 20 64 69 67 69 74 20 6f   leading digit o
12a0: 66 20 2a 76 61 6c 2c 20 74 68 65 6e 0a 2a 2a 20  f *val, then.** 
12b0: 6d 75 6c 74 69 70 6c 79 20 22 2a 76 61 6c 22 20  multiply "*val" 
12c0: 62 79 20 31 30 2e 30 20 74 6f 20 72 65 6e 6f 72  by 10.0 to renor
12d0: 6d 61 6c 69 7a 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  malize..**.** Ex
12e0: 61 6d 70 6c 65 3a 0a 2a 2a 20 20 20 20 20 69 6e  ample:.**     in
12f0: 70 75 74 3a 20 20 20 20 20 2a 76 61 6c 20 3d 20  put:     *val = 
1300: 33 2e 31 34 31 35 39 0a 2a 2a 20 20 20 20 20 6f  3.14159.**     o
1310: 75 74 70 75 74 3a 20 20 20 20 2a 76 61 6c 20 3d  utput:    *val =
1320: 20 31 2e 34 31 35 39 20 20 20 20 66 75 6e 63 74   1.4159    funct
1330: 69 6f 6e 20 72 65 74 75 72 6e 20 3d 20 27 33 27  ion return = '3'
1340: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 75 6e 74  .**.** The count
1350: 65 72 20 2a 63 6e 74 20 69 73 20 69 6e 63 72 65  er *cnt is incre
1360: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
1370: 2e 20 20 41 66 74 65 72 20 63 6f 75 6e 74 65 72  .  After counter
1380: 20 65 78 63 65 65 64 73 0a 2a 2a 20 31 36 20 28   exceeds.** 16 (
1390: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 69  the number of si
13a0: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
13b0: 20 69 6e 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   in a 64-bit flo
13c0: 61 74 29 20 27 30 27 20 69 73 0a 2a 2a 20 61 6c  at) '0' is.** al
13d0: 77 61 79 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  ways returned..*
13e0: 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 65 74  /.static char et
13f0: 5f 67 65 74 64 69 67 69 74 28 4c 4f 4e 47 44 4f  _getdigit(LONGDO
1400: 55 42 4c 45 5f 54 59 50 45 20 2a 76 61 6c 2c 20  UBLE_TYPE *val, 
1410: 69 6e 74 20 2a 63 6e 74 29 7b 0a 20 20 69 6e 74  int *cnt){.  int
1420: 20 64 69 67 69 74 3b 0a 20 20 4c 4f 4e 47 44 4f   digit;.  LONGDO
1430: 55 42 4c 45 5f 54 59 50 45 20 64 3b 0a 20 20 69  UBLE_TYPE d;.  i
1440: 66 28 20 28 2a 63 6e 74 29 3c 3d 30 20 29 20 72  f( (*cnt)<=0 ) r
1450: 65 74 75 72 6e 20 27 30 27 3b 0a 20 20 28 2a 63  eturn '0';.  (*c
1460: 6e 74 29 2d 2d 3b 0a 20 20 64 69 67 69 74 20 3d  nt)--;.  digit =
1470: 20 28 69 6e 74 29 2a 76 61 6c 3b 0a 20 20 64 20   (int)*val;.  d 
1480: 3d 20 64 69 67 69 74 3b 0a 20 20 64 69 67 69 74  = digit;.  digit
1490: 20 2b 3d 20 27 30 27 3b 0a 20 20 2a 76 61 6c 20   += '0';.  *val 
14a0: 3d 20 28 2a 76 61 6c 20 2d 20 64 29 2a 31 30 2e  = (*val - d)*10.
14b0: 30 3b 0a 20 20 72 65 74 75 72 6e 20 28 63 68 61  0;.  return (cha
14c0: 72 29 64 69 67 69 74 3b 0a 7d 0a 23 65 6e 64 69  r)digit;.}.#endi
14d0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
14e0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20  _FLOATING_POINT 
14f0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68  */../*.** Set th
1500: 65 20 53 74 72 41 63 63 75 6d 20 6f 62 6a 65 63  e StrAccum objec
1510: 74 20 74 6f 20 61 6e 20 65 72 72 6f 72 20 6d 6f  t to an error mo
1520: 64 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  de..*/.static vo
1530: 69 64 20 73 65 74 53 74 72 41 63 63 75 6d 45 72  id setStrAccumEr
1540: 72 6f 72 28 53 74 72 41 63 63 75 6d 20 2a 70 2c  ror(StrAccum *p,
1550: 20 75 38 20 65 45 72 72 6f 72 29 7b 0a 20 20 70   u8 eError){.  p
1560: 2d 3e 61 63 63 45 72 72 6f 72 20 3d 20 65 45 72  ->accError = eEr
1570: 72 6f 72 3b 0a 20 20 70 2d 3e 6e 41 6c 6c 6f 63  ror;.  p->nAlloc
1580: 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45   = 0;.}../*.** E
1590: 78 74 72 61 20 61 72 67 75 6d 65 6e 74 20 76 61  xtra argument va
15a0: 6c 75 65 73 20 66 72 6f 6d 20 61 20 50 72 69 6e  lues from a Prin
15b0: 74 66 41 72 67 75 6d 65 6e 74 73 20 6f 62 6a 65  tfArguments obje
15c0: 63 74 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c  ct.*/.static sql
15d0: 69 74 65 33 5f 69 6e 74 36 34 20 67 65 74 49 6e  ite3_int64 getIn
15e0: 74 41 72 67 28 50 72 69 6e 74 66 41 72 67 75 6d  tArg(PrintfArgum
15f0: 65 6e 74 73 20 2a 70 29 7b 0a 20 20 69 66 28 20  ents *p){.  if( 
1600: 70 2d 3e 6e 41 72 67 3c 3d 70 2d 3e 6e 55 73 65  p->nArg<=p->nUse
1610: 64 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  d ) return 0;.  
1620: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76  return sqlite3_v
1630: 61 6c 75 65 5f 69 6e 74 36 34 28 70 2d 3e 61 70  alue_int64(p->ap
1640: 41 72 67 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 29  Arg[p->nUsed++])
1650: 3b 0a 7d 0a 73 74 61 74 69 63 20 64 6f 75 62 6c  ;.}.static doubl
1660: 65 20 67 65 74 44 6f 75 62 6c 65 41 72 67 28 50  e getDoubleArg(P
1670: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 2a  rintfArguments *
1680: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 41 72  p){.  if( p->nAr
1690: 67 3c 3d 70 2d 3e 6e 55 73 65 64 20 29 20 72 65  g<=p->nUsed ) re
16a0: 74 75 72 6e 20 30 2e 30 3b 0a 20 20 72 65 74 75  turn 0.0;.  retu
16b0: 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  rn sqlite3_value
16c0: 5f 64 6f 75 62 6c 65 28 70 2d 3e 61 70 41 72 67  _double(p->apArg
16d0: 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 29 3b 0a 7d  [p->nUsed++]);.}
16e0: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 67 65  .static char *ge
16f0: 74 54 65 78 74 41 72 67 28 50 72 69 6e 74 66 41  tTextArg(PrintfA
1700: 72 67 75 6d 65 6e 74 73 20 2a 70 29 7b 0a 20 20  rguments *p){.  
1710: 69 66 28 20 70 2d 3e 6e 41 72 67 3c 3d 70 2d 3e  if( p->nArg<=p->
1720: 6e 55 73 65 64 20 29 20 72 65 74 75 72 6e 20 30  nUsed ) return 0
1730: 3b 0a 20 20 72 65 74 75 72 6e 20 28 63 68 61 72  ;.  return (char
1740: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
1750: 74 65 78 74 28 70 2d 3e 61 70 41 72 67 5b 70 2d  text(p->apArg[p-
1760: 3e 6e 55 73 65 64 2b 2b 5d 29 3b 0a 7d 0a 0a 0a  >nUsed++]);.}...
1770: 2f 2a 0a 2a 2a 20 4f 6e 20 6d 61 63 68 69 6e 65  /*.** On machine
1780: 73 20 77 69 74 68 20 61 20 73 6d 61 6c 6c 20 73  s with a small s
1790: 74 61 63 6b 20 73 69 7a 65 2c 20 79 6f 75 20 63  tack size, you c
17a0: 61 6e 20 72 65 64 65 66 69 6e 65 20 74 68 65 0a  an redefine the.
17b0: 2a 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f  ** SQLITE_PRINT_
17c0: 42 55 46 5f 53 49 5a 45 20 74 6f 20 62 65 20 73  BUF_SIZE to be s
17d0: 6f 6d 65 74 68 69 6e 67 20 73 6d 61 6c 6c 65 72  omething smaller
17e0: 2c 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  , if desired..*/
17f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1800: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 0a 23  PRINT_BUF_SIZE.#
1810: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1820: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20 37 30  RINT_BUF_SIZE 70
1830: 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
1840: 65 74 42 55 46 53 49 5a 45 20 53 51 4c 49 54 45  etBUFSIZE SQLITE
1850: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20  _PRINT_BUF_SIZE 
1860: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1870: 6f 75 74 70 75 74 20 62 75 66 66 65 72 20 2a 2f  output buffer */
1880: 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 61  ../*.** Render a
1890: 20 73 74 72 69 6e 67 20 67 69 76 65 6e 20 62 79   string given by
18a0: 20 22 66 6d 74 22 20 69 6e 74 6f 20 74 68 65 20   "fmt" into the 
18b0: 53 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 74 2e  StrAccum object.
18c0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
18d0: 56 58 50 72 69 6e 74 66 28 0a 20 20 53 74 72 41  VXPrintf(.  StrA
18e0: 63 63 75 6d 20 2a 70 41 63 63 75 6d 2c 20 20 20  ccum *pAccum,   
18f0: 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75         /* Accumu
1900: 6c 61 74 65 20 72 65 73 75 6c 74 73 20 68 65 72  late results her
1910: 65 20 2a 2f 0a 20 20 75 33 32 20 62 46 6c 61 67  e */.  u32 bFlag
1920: 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s,              
1930: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
1940: 54 46 5f 2a 20 66 6c 61 67 73 20 2a 2f 0a 20 20  TF_* flags */.  
1950: 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 6d 74 2c  const char *fmt,
1960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
1970: 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20  rmat string */. 
1980: 20 76 61 5f 6c 69 73 74 20 61 70 20 20 20 20 20   va_list ap     
1990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
19a0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
19b0: 20 69 6e 74 20 63 3b 20 20 20 20 20 20 20 20 20   int c;         
19c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19d0: 65 78 74 20 63 68 61 72 61 63 74 65 72 20 69 6e  ext character in
19e0: 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69   the format stri
19f0: 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 62 75  ng */.  char *bu
1a00: 66 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  fpt;            
1a10: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1a20: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
1a30: 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
1a40: 70 72 65 63 69 73 69 6f 6e 3b 20 20 20 20 20 20  precision;      
1a50: 20 20 20 20 20 20 20 2f 2a 20 50 72 65 63 69 73         /* Precis
1a60: 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65  ion of the curre
1a70: 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e  nt field */.  in
1a80: 74 20 6c 65 6e 67 74 68 3b 20 20 20 20 20 20 20  t length;       
1a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
1aa0: 74 68 20 6f 66 20 74 68 65 20 66 69 65 6c 64 20  th of the field 
1ab0: 2a 2f 0a 20 20 69 6e 74 20 69 64 78 3b 20 20 20  */.  int idx;   
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad0: 2f 2a 20 41 20 67 65 6e 65 72 61 6c 20 70 75 72  /* A general pur
1ae0: 70 6f 73 65 20 6c 6f 6f 70 20 63 6f 75 6e 74 65  pose loop counte
1af0: 72 20 2a 2f 0a 20 20 69 6e 74 20 77 69 64 74 68  r */.  int width
1b00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b10: 20 20 2f 2a 20 57 69 64 74 68 20 6f 66 20 74 68    /* Width of th
1b20: 65 20 63 75 72 72 65 6e 74 20 66 69 65 6c 64 20  e current field 
1b30: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
1b40: 5f 6c 65 66 74 6a 75 73 74 69 66 79 3b 20 20 20  _leftjustify;   
1b50: 2f 2a 20 54 72 75 65 20 69 66 20 22 2d 22 20 66  /* True if "-" f
1b60: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
1b70: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
1b80: 70 6c 75 73 73 69 67 6e 3b 20 20 20 20 20 20 2f  plussign;      /
1b90: 2a 20 54 72 75 65 20 69 66 20 22 2b 22 20 66 6c  * True if "+" fl
1ba0: 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  ag is present */
1bb0: 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 62  .  etByte flag_b
1bc0: 6c 61 6e 6b 73 69 67 6e 3b 20 20 20 20 20 2f 2a  lanksign;     /*
1bd0: 20 54 72 75 65 20 69 66 20 22 20 22 20 66 6c 61   True if " " fla
1be0: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  g is present */.
1bf0: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c    etByte flag_al
1c00: 74 65 72 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a 20  ternateform; /* 
1c10: 54 72 75 65 20 69 66 20 22 23 22 20 66 6c 61 67  True if "#" flag
1c20: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
1c30: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74   etByte flag_alt
1c40: 66 6f 72 6d 32 3b 20 20 20 20 20 20 2f 2a 20 54  form2;      /* T
1c50: 72 75 65 20 69 66 20 22 21 22 20 66 6c 61 67 20  rue if "!" flag 
1c60: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1c70: 65 74 42 79 74 65 20 66 6c 61 67 5f 7a 65 72 6f  etByte flag_zero
1c80: 70 61 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  pad;       /* Tr
1c90: 75 65 20 69 66 20 66 69 65 6c 64 20 77 69 64 74  ue if field widt
1ca0: 68 20 63 6f 6e 73 74 61 6e 74 20 73 74 61 72 74  h constant start
1cb0: 73 20 77 69 74 68 20 7a 65 72 6f 20 2a 2f 0a 20  s with zero */. 
1cc0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e   etByte flag_lon
1cd0: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  g;          /* T
1ce0: 72 75 65 20 69 66 20 22 6c 22 20 66 6c 61 67 20  rue if "l" flag 
1cf0: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1d00: 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67  etByte flag_long
1d10: 6c 6f 6e 67 3b 20 20 20 20 20 20 2f 2a 20 54 72  long;      /* Tr
1d20: 75 65 20 69 66 20 74 68 65 20 22 6c 6c 22 20 66  ue if the "ll" f
1d30: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
1d40: 2f 0a 20 20 65 74 42 79 74 65 20 64 6f 6e 65 3b  /.  etByte done;
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d60: 2a 20 4c 6f 6f 70 20 74 65 72 6d 69 6e 61 74 69  * Loop terminati
1d70: 6f 6e 20 66 6c 61 67 20 2a 2f 0a 20 20 65 74 42  on flag */.  etB
1d80: 79 74 65 20 78 74 79 70 65 20 3d 20 30 3b 20 20  yte xtype = 0;  
1d90: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65          /* Conve
1da0: 72 73 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a  rsion paradigm *
1db0: 2f 0a 20 20 75 38 20 62 41 72 67 4c 69 73 74 3b  /.  u8 bArgList;
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dd0: 2a 20 54 72 75 65 20 66 6f 72 20 53 51 4c 49 54  * True for SQLIT
1de0: 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
1df0: 20 2a 2f 0a 20 20 75 38 20 75 73 65 49 6e 74 65   */.  u8 useInte
1e00: 72 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rn;             
1e10: 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 69 6e   /* Ok to use in
1e20: 74 65 72 6e 61 6c 20 63 6f 6e 76 65 72 73 69 6f  ternal conversio
1e30: 6e 73 20 28 65 78 3a 20 25 54 29 20 2a 2f 0a 20  ns (ex: %T) */. 
1e40: 20 63 68 61 72 20 70 72 65 66 69 78 3b 20 20 20   char prefix;   
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1e60: 72 65 66 69 78 20 63 68 61 72 61 63 74 65 72 2e  refix character.
1e70: 20 20 22 2b 22 20 6f 72 20 22 2d 22 20 6f 72 20    "+" or "-" or 
1e80: 22 20 22 20 6f 72 20 27 5c 30 27 2e 20 2a 2f 0a  " " or '\0'. */.
1e90: 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20    sqlite_uint64 
1ea0: 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20 2f 2a 20  longvalue;   /* 
1eb0: 56 61 6c 75 65 20 66 6f 72 20 69 6e 74 65 67 65  Value for intege
1ec0: 72 20 74 79 70 65 73 20 2a 2f 0a 20 20 4c 4f 4e  r types */.  LON
1ed0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 72 65 61  GDOUBLE_TYPE rea
1ee0: 6c 76 61 6c 75 65 3b 20 2f 2a 20 56 61 6c 75 65  lvalue; /* Value
1ef0: 20 66 6f 72 20 72 65 61 6c 20 74 79 70 65 73 20   for real types 
1f00: 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74 5f 69 6e  */.  const et_in
1f10: 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20 20 20 20  fo *infop;      
1f20: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68  /* Pointer to th
1f30: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e  e appropriate in
1f40: 66 6f 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  fo structure */.
1f50: 20 20 63 68 61 72 20 2a 7a 4f 75 74 3b 20 20 20    char *zOut;   
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f70: 52 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72  Rendering buffer
1f80: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20   */.  int nOut; 
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1fb0: 72 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72  rendering buffer
1fc0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 78 74   */.  char *zExt
1fd0: 72 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ra = 0;         
1fe0: 20 2f 2a 20 4d 61 6c 6c 6f 63 65 64 20 6d 65 6d   /* Malloced mem
1ff0: 6f 72 79 20 75 73 65 64 20 62 79 20 73 6f 6d 65  ory used by some
2000: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 23   conversion */.#
2010: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2020: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
2030: 54 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65 32  T.  int  exp, e2
2040: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2050: 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72 65  * exponent of re
2060: 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  al numbers */.  
2070: 69 6e 74 20 6e 73 64 3b 20 20 20 20 20 20 20 20  int nsd;        
2080: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2090: 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63  mber of signific
20a0: 61 6e 74 20 64 69 67 69 74 73 20 72 65 74 75 72  ant digits retur
20b0: 6e 65 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  ned */.  double 
20c0: 72 6f 75 6e 64 65 72 3b 20 20 20 20 20 20 20 20  rounder;        
20d0: 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72 20      /* Used for 
20e0: 72 6f 75 6e 64 69 6e 67 20 66 6c 6f 61 74 69 6e  rounding floatin
20f0: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 2a  g point values *
2100: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
2110: 64 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  dp;            /
2120: 2a 20 54 72 75 65 20 69 66 20 64 65 63 69 6d 61  * True if decima
2130: 6c 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 62  l point should b
2140: 65 20 73 68 6f 77 6e 20 2a 2f 0a 20 20 65 74 42  e shown */.  etB
2150: 79 74 65 20 66 6c 61 67 5f 72 74 7a 3b 20 20 20  yte flag_rtz;   
2160: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
2170: 69 66 20 74 72 61 69 6c 69 6e 67 20 7a 65 72 6f  if trailing zero
2180: 73 20 73 68 6f 75 6c 64 20 62 65 20 72 65 6d 6f  s should be remo
2190: 76 65 64 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ved */.#endif.  
21a0: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
21b0: 2a 70 41 72 67 4c 69 73 74 20 3d 20 30 3b 20 2f  *pArgList = 0; /
21c0: 2a 20 41 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  * Arguments for 
21d0: 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
21e0: 4c 46 55 4e 43 20 2a 2f 0a 20 20 63 68 61 72 20  LFUNC */.  char 
21f0: 62 75 66 5b 65 74 42 55 46 53 49 5a 45 5d 3b 20  buf[etBUFSIZE]; 
2200: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73        /* Convers
2210: 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 0a 23  ion buffer */..#
2220: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2230: 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
2240: 69 66 28 20 61 70 3d 3d 30 20 29 7b 0a 20 20 20  if( ap==0 ){.   
2250: 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49   (void)SQLITE_MI
2260: 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 73  SUSE_BKPT;.    s
2270: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
2280: 73 65 74 28 70 41 63 63 75 6d 29 3b 0a 20 20 20  set(pAccum);.   
2290: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 23 65 6e   return;.  }.#en
22a0: 64 69 66 0a 20 20 62 75 66 70 74 20 3d 20 30 3b  dif.  bufpt = 0;
22b0: 0a 20 20 69 66 28 20 62 46 6c 61 67 73 20 29 7b  .  if( bFlags ){
22c0: 0a 20 20 20 20 69 66 28 20 28 62 41 72 67 4c 69  .    if( (bArgLi
22d0: 73 74 20 3d 20 28 62 46 6c 61 67 73 20 26 20 53  st = (bFlags & S
22e0: 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
22f0: 46 55 4e 43 29 29 21 3d 30 20 29 7b 0a 20 20 20  FUNC))!=0 ){.   
2300: 20 20 20 70 41 72 67 4c 69 73 74 20 3d 20 76 61     pArgList = va
2310: 5f 61 72 67 28 61 70 2c 20 50 72 69 6e 74 66 41  _arg(ap, PrintfA
2320: 72 67 75 6d 65 6e 74 73 2a 29 3b 0a 20 20 20 20  rguments*);.    
2330: 7d 0a 20 20 20 20 75 73 65 49 6e 74 65 72 6e 20  }.    useIntern 
2340: 3d 20 62 46 6c 61 67 73 20 26 20 53 51 4c 49 54  = bFlags & SQLIT
2350: 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
2360: 4c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  L;.  }else{.    
2370: 62 41 72 67 4c 69 73 74 20 3d 20 75 73 65 49 6e  bArgList = useIn
2380: 74 65 72 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  tern = 0;.  }.  
2390: 66 6f 72 28 3b 20 28 63 3d 28 2a 66 6d 74 29 29  for(; (c=(*fmt))
23a0: 21 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a 20 20 20  !=0; ++fmt){.   
23b0: 20 69 66 28 20 63 21 3d 27 25 27 20 29 7b 0a 20   if( c!='%' ){. 
23c0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 28 63 68       bufpt = (ch
23d0: 61 72 20 2a 29 66 6d 74 3b 0a 23 69 66 20 48 41  ar *)fmt;.#if HA
23e0: 56 45 5f 53 54 52 43 48 52 4e 55 4c 0a 20 20 20  VE_STRCHRNUL.   
23f0: 20 20 20 66 6d 74 20 3d 20 73 74 72 63 68 72 6e     fmt = strchrn
2400: 75 6c 28 66 6d 74 2c 20 27 25 27 29 3b 0a 23 65  ul(fmt, '%');.#e
2410: 6c 73 65 0a 20 20 20 20 20 20 64 6f 7b 20 66 6d  lse.      do{ fm
2420: 74 2b 2b 3b 20 7d 77 68 69 6c 65 28 20 2a 66 6d  t++; }while( *fm
2430: 74 20 26 26 20 2a 66 6d 74 20 21 3d 20 27 25 27  t && *fmt != '%'
2440: 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20   );.#endif.     
2450: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2460: 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 62  Append(pAccum, b
2470: 75 66 70 74 2c 20 28 69 6e 74 29 28 66 6d 74 20  ufpt, (int)(fmt 
2480: 2d 20 62 75 66 70 74 29 29 3b 0a 20 20 20 20 20  - bufpt));.     
2490: 20 69 66 28 20 2a 66 6d 74 3d 3d 30 20 29 20 62   if( *fmt==0 ) b
24a0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
24b0: 69 66 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29  if( (c=(*++fmt))
24c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
24d0: 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
24e0: 6e 64 28 70 41 63 63 75 6d 2c 20 22 25 22 2c 20  nd(pAccum, "%", 
24f0: 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  1);.      break;
2500: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 69  .    }.    /* Fi
2510: 6e 64 20 6f 75 74 20 77 68 61 74 20 66 6c 61 67  nd out what flag
2520: 73 20 61 72 65 20 70 72 65 73 65 6e 74 20 2a 2f  s are present */
2530: 0a 20 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75  .    flag_leftju
2540: 73 74 69 66 79 20 3d 20 66 6c 61 67 5f 70 6c 75  stify = flag_plu
2550: 73 73 69 67 6e 20 3d 20 66 6c 61 67 5f 62 6c 61  ssign = flag_bla
2560: 6e 6b 73 69 67 6e 20 3d 20 0a 20 20 20 20 20 66  nksign = .     f
2570: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
2580: 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d  m = flag_altform
2590: 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64  2 = flag_zeropad
25a0: 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65 20 3d   = 0;.    done =
25b0: 20 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20   0;.    do{.    
25c0: 20 20 73 77 69 74 63 68 28 20 63 20 29 7b 0a 20    switch( c ){. 
25d0: 20 20 20 20 20 20 20 63 61 73 65 20 27 2d 27 3a         case '-':
25e0: 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74     flag_leftjust
25f0: 69 66 79 20 3d 20 31 3b 20 20 20 20 20 62 72 65  ify = 1;     bre
2600: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
2610: 20 27 2b 27 3a 20 20 20 66 6c 61 67 5f 70 6c 75   '+':   flag_plu
2620: 73 73 69 67 6e 20 3d 20 31 3b 20 20 20 20 20 20  ssign = 1;      
2630: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2640: 20 63 61 73 65 20 27 20 27 3a 20 20 20 66 6c 61   case ' ':   fla
2650: 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 31 3b  g_blanksign = 1;
2660: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2670: 20 20 20 20 20 20 63 61 73 65 20 27 23 27 3a 20        case '#': 
2680: 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65    flag_alternate
2690: 66 6f 72 6d 20 3d 20 31 3b 20 20 20 62 72 65 61  form = 1;   brea
26a0: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
26b0: 27 21 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 66  '!':   flag_altf
26c0: 6f 72 6d 32 20 3d 20 31 3b 20 20 20 20 20 20 20  orm2 = 1;       
26d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
26e0: 63 61 73 65 20 27 30 27 3a 20 20 20 66 6c 61 67  case '0':   flag
26f0: 5f 7a 65 72 6f 70 61 64 20 3d 20 31 3b 20 20 20  _zeropad = 1;   
2700: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2710: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20       default:   
2720: 20 64 6f 6e 65 20 3d 20 31 3b 20 20 20 20 20 20   done = 1;      
2730: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
2740: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77  ;.      }.    }w
2750: 68 69 6c 65 28 20 21 64 6f 6e 65 20 26 26 20 28  hile( !done && (
2760: 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 30 20 29  c=(*++fmt))!=0 )
2770: 3b 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65  ;.    /* Get the
2780: 20 66 69 65 6c 64 20 77 69 64 74 68 20 2a 2f 0a   field width */.
2790: 20 20 20 20 77 69 64 74 68 20 3d 20 30 3b 0a 20      width = 0;. 
27a0: 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b     if( c=='*' ){
27b0: 0a 20 20 20 20 20 20 69 66 28 20 62 41 72 67 4c  .      if( bArgL
27c0: 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 20 77  ist ){.        w
27d0: 69 64 74 68 20 3d 20 28 69 6e 74 29 67 65 74 49  idth = (int)getI
27e0: 6e 74 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b  ntArg(pArgList);
27f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2800: 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 76 61        width = va
2810: 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20  _arg(ap,int);.  
2820: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
2830: 77 69 64 74 68 3c 30 20 29 7b 0a 20 20 20 20 20  width<0 ){.     
2840: 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74     flag_leftjust
2850: 69 66 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ify = 1;.       
2860: 20 77 69 64 74 68 20 3d 20 2d 77 69 64 74 68 3b   width = -width;
2870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
2880: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 7d   = *++fmt;.    }
2890: 65 6c 73 65 7b 0a 20 20 20 20 20 20 77 68 69 6c  else{.      whil
28a0: 65 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d  e( c>='0' && c<=
28b0: 27 39 27 20 29 7b 0a 20 20 20 20 20 20 20 20 77  '9' ){.        w
28c0: 69 64 74 68 20 3d 20 77 69 64 74 68 2a 31 30 20  idth = width*10 
28d0: 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20  + c - '0';.     
28e0: 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20     c = *++fmt;. 
28f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2900: 20 2f 2a 20 47 65 74 20 74 68 65 20 70 72 65 63   /* Get the prec
2910: 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ision */.    if(
2920: 20 63 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20   c=='.' ){.     
2930: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 30 3b 0a   precision = 0;.
2940: 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74        c = *++fmt
2950: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27  ;.      if( c=='
2960: 2a 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  *' ){.        if
2970: 28 20 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 20  ( bArgList ){.  
2980: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
2990: 6e 20 3d 20 28 69 6e 74 29 67 65 74 49 6e 74 41  n = (int)getIntA
29a0: 72 67 28 70 41 72 67 4c 69 73 74 29 3b 0a 20 20  rg(pArgList);.  
29b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
29c0: 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e         precision
29d0: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74   = va_arg(ap,int
29e0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
29f0: 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69       if( precisi
2a00: 6f 6e 3c 30 20 29 20 70 72 65 63 69 73 69 6f 6e  on<0 ) precision
2a10: 20 3d 20 2d 70 72 65 63 69 73 69 6f 6e 3b 0a 20   = -precision;. 
2a20: 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d         c = *++fm
2a30: 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  t;.      }else{.
2a40: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 63          while( c
2a50: 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20  >='0' && c<='9' 
2a60: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72 65  ){.          pre
2a70: 63 69 73 69 6f 6e 20 3d 20 70 72 65 63 69 73 69  cision = precisi
2a80: 6f 6e 2a 31 30 20 2b 20 63 20 2d 20 27 30 27 3b  on*10 + c - '0';
2a90: 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 2a  .          c = *
2aa0: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 20 20 7d  ++fmt;.        }
2ab0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
2ac0: 73 65 7b 0a 20 20 20 20 20 20 70 72 65 63 69 73  se{.      precis
2ad0: 69 6f 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a  ion = -1;.    }.
2ae0: 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63      /* Get the c
2af0: 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 20 6d  onversion type m
2b00: 6f 64 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  odifier */.    i
2b10: 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20 20 20  f( c=='l' ){.   
2b20: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 31     flag_long = 1
2b30: 3b 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66  ;.      c = *++f
2b40: 6d 74 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d  mt;.      if( c=
2b50: 3d 27 6c 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='l' ){.        
2b60: 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20  flag_longlong = 
2b70: 31 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a  1;.        c = *
2b80: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 65 6c  ++fmt;.      }el
2b90: 73 65 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67  se{.        flag
2ba0: 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20  _longlong = 0;. 
2bb0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
2bc0: 7b 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e  {.      flag_lon
2bd0: 67 20 3d 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e  g = flag_longlon
2be0: 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  g = 0;.    }.   
2bf0: 20 2f 2a 20 46 65 74 63 68 20 74 68 65 20 69 6e   /* Fetch the in
2c00: 66 6f 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65  fo entry for the
2c10: 20 66 69 65 6c 64 20 2a 2f 0a 20 20 20 20 69 6e   field */.    in
2c20: 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f 5b 30  fop = &fmtinfo[0
2c30: 5d 3b 0a 20 20 20 20 78 74 79 70 65 20 3d 20 65  ];.    xtype = e
2c40: 74 49 4e 56 41 4c 49 44 3b 0a 20 20 20 20 66 6f  tINVALID;.    fo
2c50: 72 28 69 64 78 3d 30 3b 20 69 64 78 3c 41 72 72  r(idx=0; idx<Arr
2c60: 61 79 53 69 7a 65 28 66 6d 74 69 6e 66 6f 29 3b  aySize(fmtinfo);
2c70: 20 69 64 78 2b 2b 29 7b 0a 20 20 20 20 20 20 69   idx++){.      i
2c80: 66 28 20 63 3d 3d 66 6d 74 69 6e 66 6f 5b 69 64  f( c==fmtinfo[id
2c90: 78 5d 2e 66 6d 74 74 79 70 65 20 29 7b 0a 20 20  x].fmttype ){.  
2ca0: 20 20 20 20 20 20 69 6e 66 6f 70 20 3d 20 26 66        infop = &f
2cb0: 6d 74 69 6e 66 6f 5b 69 64 78 5d 3b 0a 20 20 20  mtinfo[idx];.   
2cc0: 20 20 20 20 20 69 66 28 20 75 73 65 49 6e 74 65       if( useInte
2cd0: 72 6e 20 7c 7c 20 28 69 6e 66 6f 70 2d 3e 66 6c  rn || (infop->fl
2ce0: 61 67 73 20 26 20 46 4c 41 47 5f 49 4e 54 45 52  ags & FLAG_INTER
2cf0: 4e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  N)==0 ){.       
2d00: 20 20 20 78 74 79 70 65 20 3d 20 69 6e 66 6f 70     xtype = infop
2d10: 2d 3e 74 79 70 65 3b 0a 20 20 20 20 20 20 20 20  ->type;.        
2d20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
2d30: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
2d40: 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b   }.        break
2d50: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2d60: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 41  .    /*.    ** A
2d70: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 76 61  t this point, va
2d80: 72 69 61 62 6c 65 73 20 61 72 65 20 69 6e 69 74  riables are init
2d90: 69 61 6c 69 7a 65 64 20 61 73 20 66 6f 6c 6c 6f  ialized as follo
2da0: 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ws:.    **.    *
2db0: 2a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61  *   flag_alterna
2dc0: 74 65 66 6f 72 6d 20 20 20 20 20 20 20 20 20 20  teform          
2dd0: 54 52 55 45 20 69 66 20 61 20 27 23 27 20 69 73  TRUE if a '#' is
2de0: 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a   present..    **
2df0: 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32     flag_altform2
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2e10: 52 55 45 20 69 66 20 61 20 27 21 27 20 69 73 20  RUE if a '!' is 
2e20: 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20  present..    ** 
2e30: 20 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20    flag_plussign 
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
2e50: 55 45 20 69 66 20 61 20 27 2b 27 20 69 73 20 70  UE if a '+' is p
2e60: 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20  resent..    **  
2e70: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66   flag_leftjustif
2e80: 79 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55  y            TRU
2e90: 45 20 69 66 20 61 20 27 2d 27 20 69 73 20 70 72  E if a '-' is pr
2ea0: 65 73 65 6e 74 20 6f 72 20 69 66 20 74 68 65 0a  esent or if the.
2eb0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed0: 20 20 20 20 20 66 69 65 6c 64 20 77 69 64 74 68       field width
2ee0: 20 77 61 73 20 6e 65 67 61 74 69 76 65 2e 0a 20   was negative.. 
2ef0: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 7a 65 72     **   flag_zer
2f00: 6f 70 61 64 20 20 20 20 20 20 20 20 20 20 20 20  opad            
2f10: 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20      TRUE if the 
2f20: 77 69 64 74 68 20 62 65 67 61 6e 20 77 69 74 68  width began with
2f30: 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61   0..    **   fla
2f40: 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20  g_long          
2f50: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
2f60: 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c 27 20   the letter 'l' 
2f70: 28 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20  (ell) prefixed. 
2f80: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa0: 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69      the conversi
2fb0: 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20  on character..  
2fc0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f 6e 67    **   flag_long
2fd0: 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 20  long            
2fe0: 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20 6c     TRUE if the l
2ff0: 65 74 74 65 72 20 27 6c 6c 27 20 28 65 6c 6c 20  etter 'll' (ell 
3000: 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20 20  ell) prefixed.  
3010: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20    **            
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f     the conversio
3040: 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 20  n character..   
3050: 20 2a 2a 20 20 20 66 6c 61 67 5f 62 6c 61 6e 6b   **   flag_blank
3060: 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20 20  sign            
3070: 20 20 54 52 55 45 20 69 66 20 61 20 27 20 27 20    TRUE if a ' ' 
3080: 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20  is present..    
3090: 2a 2a 20 20 20 77 69 64 74 68 20 20 20 20 20 20  **   width      
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b0: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 66   The specified f
30c0: 69 65 6c 64 20 77 69 64 74 68 2e 20 20 54 68 69  ield width.  Thi
30d0: 73 20 69 73 0a 20 20 20 20 2a 2a 20 20 20 20 20  s is.    **     
30e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f0: 20 20 20 20 20 20 20 20 20 20 61 6c 77 61 79 73            always
3100: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
3110: 5a 65 72 6f 20 69 73 20 74 68 65 20 64 65 66 61  Zero is the defa
3120: 75 6c 74 2e 0a 20 20 20 20 2a 2a 20 20 20 70 72  ult..    **   pr
3130: 65 63 69 73 69 6f 6e 20 20 20 20 20 20 20 20 20  ecision         
3140: 20 20 20 20 20 20 20 20 20 20 54 68 65 20 73 70            The sp
3150: 65 63 69 66 69 65 64 20 70 72 65 63 69 73 69 6f  ecified precisio
3160: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0a  n.  The default.
3170: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3190: 20 20 20 20 20 69 73 20 2d 31 2e 0a 20 20 20 20       is -1..    
31a0: 2a 2a 20 20 20 78 74 79 70 65 20 20 20 20 20 20  **   xtype      
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c0: 20 54 68 65 20 63 6c 61 73 73 20 6f 66 20 74 68   The class of th
31d0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0a 20 20  e conversion..  
31e0: 20 20 2a 2a 20 20 20 69 6e 66 6f 70 20 20 20 20    **   infop    
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3200: 20 20 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68     Pointer to th
3210: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e  e appropriate in
3220: 66 6f 20 73 74 72 75 63 74 2e 0a 20 20 20 20 2a  fo struct..    *
3230: 2f 0a 20 20 20 20 73 77 69 74 63 68 28 20 78 74  /.    switch( xt
3240: 79 70 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ype ){.      cas
3250: 65 20 65 74 50 4f 49 4e 54 45 52 3a 0a 20 20 20  e etPOINTER:.   
3260: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f       flag_longlo
3270: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72  ng = sizeof(char
3280: 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36 34 29 3b  *)==sizeof(i64);
3290: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f  .        flag_lo
32a0: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72  ng = sizeof(char
32b0: 2a 29 3d 3d 73 69 7a 65 6f 66 28 6c 6f 6e 67 20  *)==sizeof(long 
32c0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  int);.        /*
32d0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
32e0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
32f0: 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 65 20 65   */.      case e
3300: 74 4f 52 44 49 4e 41 4c 3a 0a 20 20 20 20 20 20  tORDINAL:.      
3310: 63 61 73 65 20 65 74 52 41 44 49 58 3a 0a 20 20  case etRADIX:.  
3320: 20 20 20 20 20 20 69 66 28 20 69 6e 66 6f 70 2d        if( infop-
3330: 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53 49  >flags & FLAG_SI
3340: 47 4e 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20  GNED ){.        
3350: 20 20 69 36 34 20 76 3b 0a 20 20 20 20 20 20 20    i64 v;.       
3360: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
3370: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  ){.            v
3380: 20 3d 20 67 65 74 49 6e 74 41 72 67 28 70 41 72   = getIntArg(pAr
3390: 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20  gList);.        
33a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67    }else if( flag
33b0: 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a 20 20 20  _longlong ){.   
33c0: 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61 5f           v = va_
33d0: 61 72 67 28 61 70 2c 69 36 34 29 3b 0a 20 20 20  arg(ap,i64);.   
33e0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
33f0: 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 7b 0a 20 20   flag_long ){.  
3400: 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61            v = va
3410: 5f 61 72 67 28 61 70 2c 6c 6f 6e 67 20 69 6e 74  _arg(ap,long int
3420: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
3430: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
3440: 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  v = va_arg(ap,in
3450: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  t);.          }.
3460: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3c            if( v<
3470: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
3480: 20 69 66 28 20 76 3d 3d 53 4d 41 4c 4c 45 53 54   if( v==SMALLEST
3490: 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20 20 20 20  _INT64 ){.      
34a0: 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75          longvalu
34b0: 65 20 3d 20 28 28 75 36 34 29 31 29 3c 3c 36 33  e = ((u64)1)<<63
34c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
34d0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
34e0: 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 2d     longvalue = -
34f0: 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  v;.            }
3500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65  .            pre
3510: 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20  fix = '-';.     
3520: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3530: 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75          longvalu
3540: 65 20 3d 20 76 3b 0a 20 20 20 20 20 20 20 20 20  e = v;.         
3550: 20 20 20 69 66 28 20 66 6c 61 67 5f 70 6c 75 73     if( flag_plus
3560: 73 69 67 6e 20 29 20 20 20 20 20 20 20 20 70 72  sign )        pr
3570: 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20  efix = '+';.    
3580: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 28          else if(
3590: 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20   flag_blanksign 
35a0: 29 20 20 70 72 65 66 69 78 20 3d 20 27 20 27 3b  )  prefix = ' ';
35b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
35c0: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
35d0: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
35e0: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   0;.          }.
35f0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
3600: 20 20 20 20 20 20 20 20 20 69 66 28 20 62 41 72           if( bAr
3610: 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20  gList ){.       
3620: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
3630: 20 28 75 36 34 29 67 65 74 49 6e 74 41 72 67 28   (u64)getIntArg(
3640: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20  pArgList);.     
3650: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66       }else if( f
3660: 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a  lag_longlong ){.
3670: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
3680: 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61  value = va_arg(a
3690: 70 2c 75 36 34 29 3b 0a 20 20 20 20 20 20 20 20  p,u64);.        
36a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67    }else if( flag
36b0: 5f 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20 20  _long ){.       
36c0: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
36d0: 20 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67   va_arg(ap,unsig
36e0: 6e 65 64 20 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20  ned long int);. 
36f0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
3700: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
3710: 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61  value = va_arg(a
3720: 70 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  p,unsigned int);
3730: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
3740: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20         prefix = 
3750: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
3760: 20 20 20 20 20 69 66 28 20 6c 6f 6e 67 76 61 6c       if( longval
3770: 75 65 3d 3d 30 20 29 20 66 6c 61 67 5f 61 6c 74  ue==0 ) flag_alt
3780: 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20 30 3b 0a  ernateform = 0;.
3790: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
37a0: 5f 7a 65 72 6f 70 61 64 20 26 26 20 70 72 65 63  _zeropad && prec
37b0: 69 73 69 6f 6e 3c 77 69 64 74 68 2d 28 70 72 65  ision<width-(pre
37c0: 66 69 78 21 3d 30 29 20 29 7b 0a 20 20 20 20 20  fix!=0) ){.     
37d0: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
37e0: 20 77 69 64 74 68 2d 28 70 72 65 66 69 78 21 3d   width-(prefix!=
37f0: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
3800: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
3810: 69 6f 6e 3c 65 74 42 55 46 53 49 5a 45 2d 31 30  ion<etBUFSIZE-10
3820: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 4f   ){.          nO
3830: 75 74 20 3d 20 65 74 42 55 46 53 49 5a 45 3b 0a  ut = etBUFSIZE;.
3840: 20 20 20 20 20 20 20 20 20 20 7a 4f 75 74 20 3d            zOut =
3850: 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20 7d 65   buf;.        }e
3860: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  lse{.          n
3870: 4f 75 74 20 3d 20 70 72 65 63 69 73 69 6f 6e 20  Out = precision 
3880: 2b 20 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20  + 10;.          
3890: 7a 4f 75 74 20 3d 20 7a 45 78 74 72 61 20 3d 20  zOut = zExtra = 
38a0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 6e  sqlite3Malloc( n
38b0: 4f 75 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Out );.         
38c0: 20 69 66 28 20 7a 4f 75 74 3d 3d 30 20 29 7b 0a   if( zOut==0 ){.
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 53              setS
38e0: 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70 41 63  trAccumError(pAc
38f0: 63 75 6d 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f  cum, STRACCUM_NO
3900: 4d 45 4d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  MEM);.          
3910: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
3920: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
3930: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
3940: 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 3b 0a 20  &zOut[nOut-1];. 
3950: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
3960: 3d 3d 65 74 4f 52 44 49 4e 41 4c 20 29 7b 0a 20  ==etORDINAL ){. 
3970: 20 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20           static 
3980: 63 6f 6e 73 74 20 63 68 61 72 20 7a 4f 72 64 5b  const char zOrd[
3990: 5d 20 3d 20 22 74 68 73 74 6e 64 72 64 22 3b 0a  ] = "thstndrd";.
39a0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 20            int x 
39b0: 3d 20 28 69 6e 74 29 28 6c 6f 6e 67 76 61 6c 75  = (int)(longvalu
39c0: 65 20 25 20 31 30 29 3b 0a 20 20 20 20 20 20 20  e % 10);.       
39d0: 20 20 20 69 66 28 20 78 3e 3d 34 20 7c 7c 20 28     if( x>=4 || (
39e0: 6c 6f 6e 67 76 61 6c 75 65 2f 31 30 29 25 31 30  longvalue/10)%10
39f0: 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==1 ){.         
3a00: 20 20 20 78 20 3d 20 30 3b 0a 20 20 20 20 20 20     x = 0;.      
3a10: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
3a20: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 7a 4f 72  *(--bufpt) = zOr
3a30: 64 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20 20 20 20  d[x*2+1];.      
3a40: 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d      *(--bufpt) =
3a50: 20 7a 4f 72 64 5b 78 2a 32 5d 3b 0a 20 20 20 20   zOrd[x*2];.    
3a60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7b 0a      }.        {.
3a70: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
3a80: 63 68 61 72 20 2a 63 73 65 74 20 3d 20 26 61 44  char *cset = &aD
3a90: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
3aa0: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
3ab0: 20 75 38 20 62 61 73 65 20 3d 20 69 6e 66 6f 70   u8 base = infop
3ac0: 2d 3e 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20  ->base;.        
3ad0: 20 20 64 6f 7b 20 20 20 20 20 20 20 20 20 20 20    do{           
3ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 2f 2a 20 43 6f 6e 76 65 72 74 20 74 6f 20 61 73  /* Convert to as
3b10: 63 69 69 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  cii */.         
3b20: 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20     *(--bufpt) = 
3b30: 63 73 65 74 5b 6c 6f 6e 67 76 61 6c 75 65 25 62  cset[longvalue%b
3b40: 61 73 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  ase];.          
3b50: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 6c 6f    longvalue = lo
3b60: 6e 67 76 61 6c 75 65 2f 62 61 73 65 3b 0a 20 20  ngvalue/base;.  
3b70: 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
3b80: 6c 6f 6e 67 76 61 6c 75 65 3e 30 20 29 3b 0a 20  longvalue>0 );. 
3b90: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3ba0: 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28   length = (int)(
3bb0: 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 2d 62 75  &zOut[nOut-1]-bu
3bc0: 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  fpt);.        fo
3bd0: 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2d  r(idx=precision-
3be0: 6c 65 6e 67 74 68 3b 20 69 64 78 3e 30 3b 20 69  length; idx>0; i
3bf0: 64 78 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20  dx--){.         
3c00: 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 27 30   *(--bufpt) = '0
3c10: 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ';              
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3c30: 2a 20 5a 65 72 6f 20 70 61 64 20 2a 2f 0a 20 20  * Zero pad */.  
3c40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3c50: 69 66 28 20 70 72 65 66 69 78 20 29 20 2a 28 2d  if( prefix ) *(-
3c60: 2d 62 75 66 70 74 29 20 3d 20 70 72 65 66 69 78  -bufpt) = prefix
3c70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3c80: 2f 2a 20 41 64 64 20 73 69 67 6e 20 2a 2f 0a 20  /* Add sign */. 
3c90: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f         if( flag_
3ca0: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 26 26  alternateform &&
3cb0: 20 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 20 29   infop->prefix )
3cc0: 7b 20 20 20 20 20 20 2f 2a 20 41 64 64 20 22 30  {      /* Add "0
3cd0: 22 20 6f 72 20 22 30 78 22 20 2a 2f 0a 20 20 20  " or "0x" */.   
3ce0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
3cf0: 72 20 2a 70 72 65 3b 0a 20 20 20 20 20 20 20 20  r *pre;.        
3d00: 20 20 63 68 61 72 20 78 3b 0a 20 20 20 20 20 20    char x;.      
3d10: 20 20 20 20 70 72 65 20 3d 20 26 61 50 72 65 66      pre = &aPref
3d20: 69 78 5b 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78  ix[infop->prefix
3d30: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ];.          for
3d40: 28 3b 20 28 78 3d 28 2a 70 72 65 29 29 21 3d 30  (; (x=(*pre))!=0
3d50: 3b 20 70 72 65 2b 2b 29 20 2a 28 2d 2d 62 75 66  ; pre++) *(--buf
3d60: 70 74 29 20 3d 20 78 3b 0a 20 20 20 20 20 20 20  pt) = x;.       
3d70: 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74   }.        lengt
3d80: 68 20 3d 20 28 69 6e 74 29 28 26 7a 4f 75 74 5b  h = (int)(&zOut[
3d90: 6e 4f 75 74 2d 31 5d 2d 62 75 66 70 74 29 3b 0a  nOut-1]-bufpt);.
3da0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3db0: 20 20 20 20 20 63 61 73 65 20 65 74 46 4c 4f 41       case etFLOA
3dc0: 54 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  T:.      case et
3dd0: 45 58 50 3a 0a 20 20 20 20 20 20 63 61 73 65 20  EXP:.      case 
3de0: 65 74 47 45 4e 45 52 49 43 3a 0a 20 20 20 20 20  etGENERIC:.     
3df0: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
3e00: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61  ){.          rea
3e10: 6c 76 61 6c 75 65 20 3d 20 67 65 74 44 6f 75 62  lvalue = getDoub
3e20: 6c 65 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b  leArg(pArgList);
3e30: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
3e40: 20 20 20 20 20 20 20 20 20 20 72 65 61 6c 76 61            realva
3e50: 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  lue = va_arg(ap,
3e60: 64 6f 75 62 6c 65 29 3b 0a 20 20 20 20 20 20 20  double);.       
3e70: 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
3e80: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e90: 4f 49 4e 54 0a 20 20 20 20 20 20 20 20 6c 65 6e  OINT.        len
3ea0: 67 74 68 20 3d 20 30 3b 0a 23 65 6c 73 65 0a 20  gth = 0;.#else. 
3eb0: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
3ec0: 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69 73 69  sion<0 ) precisi
3ed0: 6f 6e 20 3d 20 36 3b 20 20 20 20 20 20 20 20 20  on = 6;         
3ee0: 2f 2a 20 53 65 74 20 64 65 66 61 75 6c 74 20 70  /* Set default p
3ef0: 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  recision */.    
3f00: 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75      if( realvalu
3f10: 65 3c 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20  e<0.0 ){.       
3f20: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 2d     realvalue = -
3f30: 72 65 61 6c 76 61 6c 75 65 3b 0a 20 20 20 20 20  realvalue;.     
3f40: 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d       prefix = '-
3f50: 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ';.        }else
3f60: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
3f70: 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 20  flag_plussign ) 
3f80: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
3f90: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
3fa0: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 62   else if( flag_b
3fb0: 6c 61 6e 6b 73 69 67 6e 20 29 20 20 20 20 70 72  lanksign )    pr
3fc0: 65 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20  efix = ' ';.    
3fd0: 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20        else      
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20     prefix = 0;. 
4000: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4010: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45   if( xtype==etGE
4020: 4e 45 52 49 43 20 26 26 20 70 72 65 63 69 73 69  NERIC && precisi
4030: 6f 6e 3e 30 20 29 20 70 72 65 63 69 73 69 6f 6e  on>0 ) precision
4040: 2d 2d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  --;.        for(
4050: 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20 72  idx=precision, r
4060: 6f 75 6e 64 65 72 3d 30 2e 35 3b 20 69 64 78 3e  ounder=0.5; idx>
4070: 30 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 65  0; idx--, rounde
4080: 72 2a 3d 30 2e 31 29 7b 7d 0a 20 20 20 20 20 20  r*=0.1){}.      
4090: 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 46    if( xtype==etF
40a0: 4c 4f 41 54 20 29 20 72 65 61 6c 76 61 6c 75 65  LOAT ) realvalue
40b0: 20 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20   += rounder;.   
40c0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 69 7a       /* Normaliz
40d0: 65 20 72 65 61 6c 76 61 6c 75 65 20 74 6f 20 77  e realvalue to w
40e0: 69 74 68 69 6e 20 31 30 2e 30 20 3e 20 72 65 61  ithin 10.0 > rea
40f0: 6c 76 61 6c 75 65 20 3e 3d 20 31 2e 30 20 2a 2f  lvalue >= 1.0 */
4100: 0a 20 20 20 20 20 20 20 20 65 78 70 20 3d 20 30  .        exp = 0
4110: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
4120: 6c 69 74 65 33 49 73 4e 61 4e 28 28 64 6f 75 62  lite3IsNaN((doub
4130: 6c 65 29 72 65 61 6c 76 61 6c 75 65 29 20 29 7b  le)realvalue) ){
4140: 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74  .          bufpt
4150: 20 3d 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20 20   = "NaN";.      
4160: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b 0a      length = 3;.
4170: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
4180: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4190: 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65     if( realvalue
41a0: 3e 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20 20  >0.0 ){.        
41b0: 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50    LONGDOUBLE_TYP
41c0: 45 20 73 63 61 6c 65 20 3d 20 31 2e 30 3b 0a 20  E scale = 1.0;. 
41d0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
41e0: 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 31 30 30  realvalue>=1e100
41f0: 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33  *scale && exp<=3
4200: 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  50 ){ scale *= 1
4210: 65 31 30 30 3b 65 78 70 2b 3d 31 30 30 3b 7d 0a  e100;exp+=100;}.
4220: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
4230: 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 36 34   realvalue>=1e64
4240: 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33  *scale && exp<=3
4250: 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  50 ){ scale *= 1
4260: 65 36 34 3b 20 65 78 70 2b 3d 36 34 3b 20 7d 0a  e64; exp+=64; }.
4270: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
4280: 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 38 2a   realvalue>=1e8*
4290: 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33 35  scale && exp<=35
42a0: 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 65  0 ){ scale *= 1e
42b0: 38 3b 20 65 78 70 2b 3d 38 3b 20 7d 0a 20 20 20  8; exp+=8; }.   
42c0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65         while( re
42d0: 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 2a 73 63  alvalue>=10.0*sc
42e0: 61 6c 65 20 26 26 20 65 78 70 3c 3d 33 35 30 20  ale && exp<=350 
42f0: 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 30 2e 30  ){ scale *= 10.0
4300: 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20  ; exp++; }.     
4310: 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 2f       realvalue /
4320: 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 20 20 20  = scale;.       
4330: 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61     while( realva
4340: 6c 75 65 3c 31 65 2d 38 20 29 7b 20 72 65 61 6c  lue<1e-8 ){ real
4350: 76 61 6c 75 65 20 2a 3d 20 31 65 38 3b 20 65 78  value *= 1e8; ex
4360: 70 2d 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20  p-=8; }.        
4370: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
4380: 75 65 3c 31 2e 30 20 29 7b 20 72 65 61 6c 76 61  ue<1.0 ){ realva
4390: 6c 75 65 20 2a 3d 20 31 30 2e 30 3b 20 65 78 70  lue *= 10.0; exp
43a0: 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  --; }.          
43b0: 69 66 28 20 65 78 70 3e 33 35 30 20 29 7b 0a 20  if( exp>350 ){. 
43c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70             if( p
43d0: 72 65 66 69 78 3d 3d 27 2d 27 20 29 7b 0a 20 20  refix=='-' ){.  
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 70              bufp
43f0: 74 20 3d 20 22 2d 49 6e 66 22 3b 0a 20 20 20 20  t = "-Inf";.    
4400: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
4410: 28 20 70 72 65 66 69 78 3d 3d 27 2b 27 20 29 7b  ( prefix=='+' ){
4420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  .              b
4430: 75 66 70 74 20 3d 20 22 2b 49 6e 66 22 3b 0a 20  ufpt = "+Inf";. 
4440: 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65             }else
4450: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4460: 62 75 66 70 74 20 3d 20 22 49 6e 66 22 3b 0a 20  bufpt = "Inf";. 
4470: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
4480: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20           length 
4490: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
44a0: 30 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  0(bufpt);.      
44b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
44c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
44d0: 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70 74   }.        bufpt
44e0: 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20   = buf;.        
44f0: 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66  /*.        ** If
4500: 20 74 68 65 20 66 69 65 6c 64 20 74 79 70 65 20   the field type 
4510: 69 73 20 65 74 47 45 4e 45 52 49 43 2c 20 74 68  is etGENERIC, th
4520: 65 6e 20 63 6f 6e 76 65 72 74 20 74 6f 20 65 69  en convert to ei
4530: 74 68 65 72 20 65 74 45 58 50 0a 20 20 20 20 20  ther etEXP.     
4540: 20 20 20 2a 2a 20 6f 72 20 65 74 46 4c 4f 41 54     ** or etFLOAT
4550: 2c 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  , as appropriate
4560: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
4570: 20 20 20 20 20 69 66 28 20 78 74 79 70 65 21 3d       if( xtype!=
4580: 65 74 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20  etFLOAT ){.     
4590: 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 2b       realvalue +
45a0: 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20  = rounder;.     
45b0: 20 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c       if( realval
45c0: 75 65 3e 3d 31 30 2e 30 20 29 7b 20 72 65 61 6c  ue>=10.0 ){ real
45d0: 76 61 6c 75 65 20 2a 3d 20 30 2e 31 3b 20 65 78  value *= 0.1; ex
45e0: 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d  p++; }.        }
45f0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79  .        if( xty
4600: 70 65 3d 3d 65 74 47 45 4e 45 52 49 43 20 29 7b  pe==etGENERIC ){
4610: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 5f  .          flag_
4620: 72 74 7a 20 3d 20 21 66 6c 61 67 5f 61 6c 74 65  rtz = !flag_alte
4630: 72 6e 61 74 65 66 6f 72 6d 3b 0a 20 20 20 20 20  rnateform;.     
4640: 20 20 20 20 20 69 66 28 20 65 78 70 3c 2d 34 20       if( exp<-4 
4650: 7c 7c 20 65 78 70 3e 70 72 65 63 69 73 69 6f 6e  || exp>precision
4660: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
4670: 78 74 79 70 65 20 3d 20 65 74 45 58 50 3b 0a 20  xtype = etEXP;. 
4680: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
4690: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 63              prec
46a0: 69 73 69 6f 6e 20 3d 20 70 72 65 63 69 73 69 6f  ision = precisio
46b0: 6e 20 2d 20 65 78 70 3b 0a 20 20 20 20 20 20 20  n - exp;.       
46c0: 20 20 20 20 20 78 74 79 70 65 20 3d 20 65 74 46       xtype = etF
46d0: 4c 4f 41 54 3b 0a 20 20 20 20 20 20 20 20 20 20  LOAT;.          
46e0: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
46f0: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 5f  .          flag_
4700: 72 74 7a 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f  rtz = flag_altfo
4710: 72 6d 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rm2;.        }. 
4720: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
4730: 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20  ==etEXP ){.     
4740: 20 20 20 20 20 65 32 20 3d 20 30 3b 0a 20 20 20       e2 = 0;.   
4750: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4760: 20 20 20 20 20 20 65 32 20 3d 20 65 78 70 3b 0a        e2 = exp;.
4770: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4780: 20 20 69 66 28 20 4d 41 58 28 65 32 2c 30 29 2b    if( MAX(e2,0)+
4790: 70 72 65 63 69 73 69 6f 6e 2b 77 69 64 74 68 20  precision+width 
47a0: 3e 20 65 74 42 55 46 53 49 5a 45 20 2d 20 31 35  > etBUFSIZE - 15
47b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75   ){.          bu
47c0: 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d 20 73  fpt = zExtra = s
47d0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 4d 41  qlite3Malloc( MA
47e0: 58 28 65 32 2c 30 29 2b 70 72 65 63 69 73 69 6f  X(e2,0)+precisio
47f0: 6e 2b 77 69 64 74 68 2b 31 35 20 29 3b 0a 20 20  n+width+15 );.  
4800: 20 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70          if( bufp
4810: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
4820: 20 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45      setStrAccumE
4830: 72 72 6f 72 28 70 41 63 63 75 6d 2c 20 53 54 52  rror(pAccum, STR
4840: 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a 20 20  ACCUM_NOMEM);.  
4850: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4860: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
4870: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4880: 7a 4f 75 74 20 3d 20 62 75 66 70 74 3b 0a 20 20  zOut = bufpt;.  
4890: 20 20 20 20 20 20 6e 73 64 20 3d 20 31 36 20 2b        nsd = 16 +
48a0: 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 2a 31   flag_altform2*1
48b0: 30 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  0;.        flag_
48c0: 64 70 20 3d 20 28 70 72 65 63 69 73 69 6f 6e 3e  dp = (precision>
48d0: 30 20 3f 31 3a 30 29 20 7c 20 66 6c 61 67 5f 61  0 ?1:0) | flag_a
48e0: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 7c 20 66  lternateform | f
48f0: 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20  lag_altform2;.  
4900: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 69 67        /* The sig
4910: 6e 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 74 68  n in front of th
4920: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
4930: 20 20 20 20 69 66 28 20 70 72 65 66 69 78 20 29      if( prefix )
4940: 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  {.          *(bu
4950: 66 70 74 2b 2b 29 20 3d 20 70 72 65 66 69 78 3b  fpt++) = prefix;
4960: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4970: 20 20 20 2f 2a 20 44 69 67 69 74 73 20 70 72 69     /* Digits pri
4980: 6f 72 20 74 6f 20 74 68 65 20 64 65 63 69 6d 61  or to the decima
4990: 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20  l point */.     
49a0: 20 20 20 69 66 28 20 65 32 3c 30 20 29 7b 0a 20     if( e2<0 ){. 
49b0: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
49c0: 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20  ++) = '0';.     
49d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
49e0: 20 20 20 20 66 6f 72 28 3b 20 65 32 3e 3d 30 3b      for(; e2>=0;
49f0: 20 65 32 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20   e2--){.        
4a00: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
4a10: 20 65 74 5f 67 65 74 64 69 67 69 74 28 26 72 65   et_getdigit(&re
4a20: 61 6c 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20  alvalue,&nsd);. 
4a30: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
4a40: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
4a50: 54 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  The decimal poin
4a60: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  t */.        if(
4a70: 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20   flag_dp ){.    
4a80: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
4a90: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20   = '.';.        
4aa0: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 22 30 22  }.        /* "0"
4ab0: 20 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68   digits after th
4ac0: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
4ad0: 62 75 74 20 62 65 66 6f 72 65 20 74 68 65 20 66  but before the f
4ae0: 69 72 73 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  irst.        ** 
4af0: 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69  significant digi
4b00: 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
4b10: 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 65  */.        for(e
4b20: 32 2b 2b 3b 20 65 32 3c 30 3b 20 70 72 65 63 69  2++; e2<0; preci
4b30: 73 69 6f 6e 2d 2d 2c 20 65 32 2b 2b 29 7b 0a 20  sion--, e2++){. 
4b40: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
4b50: 20 70 72 65 63 69 73 69 6f 6e 3e 30 20 29 3b 0a   precision>0 );.
4b60: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4b70: 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20 20  t++) = '0';.    
4b80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
4b90: 20 53 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   Significant dig
4ba0: 69 74 73 20 61 66 74 65 72 20 74 68 65 20 64 65  its after the de
4bb0: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20  cimal point */. 
4bc0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 70         while( (p
4bd0: 72 65 63 69 73 69 6f 6e 2d 2d 29 3e 30 20 29 7b  recision--)>0 ){
4be0: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66  .          *(buf
4bf0: 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65 74 64 69  pt++) = et_getdi
4c00: 67 69 74 28 26 72 65 61 6c 76 61 6c 75 65 2c 26  git(&realvalue,&
4c10: 6e 73 64 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nsd);.        }.
4c20: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 6d 6f 76          /* Remov
4c30: 65 20 74 72 61 69 6c 69 6e 67 20 7a 65 72 6f 73  e trailing zeros
4c40: 20 61 6e 64 20 74 68 65 20 22 2e 22 20 69 66 20   and the "." if 
4c50: 6e 6f 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77  no digits follow
4c60: 20 74 68 65 20 22 2e 22 20 2a 2f 0a 20 20 20 20   the "." */.    
4c70: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 72 74 7a      if( flag_rtz
4c80: 20 26 26 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20   && flag_dp ){. 
4c90: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
4ca0: 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 30 27 20 29  bufpt[-1]=='0' )
4cb0: 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b   *(--bufpt) = 0;
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
4cd0: 74 28 20 62 75 66 70 74 3e 7a 4f 75 74 20 29 3b  t( bufpt>zOut );
4ce0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62  .          if( b
4cf0: 75 66 70 74 5b 2d 31 5d 3d 3d 27 2e 27 20 29 7b  ufpt[-1]=='.' ){
4d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
4d10: 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 20 29   flag_altform2 )
4d20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4d30: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 30 27  *(bufpt++) = '0'
4d40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
4d50: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
4d60: 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20     *(--bufpt) = 
4d70: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  0;.            }
4d80: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
4d90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
4da0: 2a 20 41 64 64 20 74 68 65 20 22 65 4e 4e 4e 22  * Add the "eNNN"
4db0: 20 73 75 66 66 69 78 20 2a 2f 0a 20 20 20 20 20   suffix */.     
4dc0: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74     if( xtype==et
4dd0: 45 58 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20  EXP ){.         
4de0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 61 44   *(bufpt++) = aD
4df0: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
4e00: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
4e10: 20 69 66 28 20 65 78 70 3c 30 20 29 7b 0a 20 20   if( exp<0 ){.  
4e20: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4e30: 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65 78 70 20  t++) = '-'; exp 
4e40: 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20 20 20 20  = -exp;.        
4e50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
4e60: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
4e70: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
4e80: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
4e90: 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a 20 20 20   exp>=100 ){.   
4ea0: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
4eb0: 2b 2b 29 20 3d 20 28 63 68 61 72 29 28 28 65 78  ++) = (char)((ex
4ec0: 70 2f 31 30 30 29 2b 27 30 27 29 3b 20 20 20 20  p/100)+'0');    
4ed0: 20 20 20 20 2f 2a 20 31 30 30 27 73 20 64 69 67      /* 100's dig
4ee0: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
4ef0: 20 20 65 78 70 20 25 3d 20 31 30 30 3b 0a 20 20    exp %= 100;.  
4f00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4f10: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
4f20: 20 28 63 68 61 72 29 28 65 78 70 2f 31 30 2b 27   (char)(exp/10+'
4f30: 30 27 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  0');            
4f40: 20 2f 2a 20 31 30 27 73 20 64 69 67 69 74 20 2a   /* 10's digit *
4f50: 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  /.          *(bu
4f60: 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 28  fpt++) = (char)(
4f70: 65 78 70 25 31 30 2b 27 30 27 29 3b 20 20 20 20  exp%10+'0');    
4f80: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 27 73 20           /* 1's 
4f90: 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  digit */.       
4fa0: 20 7d 0a 20 20 20 20 20 20 20 20 2a 62 75 66 70   }.        *bufp
4fb0: 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20 20  t = 0;..        
4fc0: 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72 74 65 64  /* The converted
4fd0: 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 62 75   number is in bu
4fe0: 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20 74 65 72  f[] and zero ter
4ff0: 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70 75 74 20  minated. Output 
5000: 69 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e  it..        ** N
5010: 6f 74 65 20 74 68 61 74 20 74 68 65 20 6e 75 6d  ote that the num
5020: 62 65 72 20 69 73 20 69 6e 20 74 68 65 20 75 73  ber is in the us
5030: 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f 74 20 72  ual order, not r
5040: 65 76 65 72 73 65 64 20 61 73 20 77 69 74 68 0a  eversed as with.
5050: 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67          ** integ
5060: 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20  er conversions. 
5070: 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  */.        lengt
5080: 68 20 3d 20 28 69 6e 74 29 28 62 75 66 70 74 2d  h = (int)(bufpt-
5090: 7a 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 62  zOut);.        b
50a0: 75 66 70 74 20 3d 20 7a 4f 75 74 3b 0a 0a 20 20  ufpt = zOut;..  
50b0: 20 20 20 20 20 20 2f 2a 20 53 70 65 63 69 61 6c        /* Special
50c0: 20 63 61 73 65 3a 20 20 41 64 64 20 6c 65 61 64   case:  Add lead
50d0: 69 6e 67 20 7a 65 72 6f 73 20 69 66 20 74 68 65  ing zeros if the
50e0: 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 66 6c   flag_zeropad fl
50f0: 61 67 20 69 73 0a 20 20 20 20 20 20 20 20 2a 2a  ag is.        **
5100: 20 73 65 74 20 61 6e 64 20 77 65 20 61 72 65 20   set and we are 
5110: 6e 6f 74 20 6c 65 66 74 20 6a 75 73 74 69 66 69  not left justifi
5120: 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ed */.        if
5130: 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26  ( flag_zeropad &
5140: 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74  & !flag_leftjust
5150: 69 66 79 20 26 26 20 6c 65 6e 67 74 68 20 3c 20  ify && length < 
5160: 77 69 64 74 68 29 7b 0a 20 20 20 20 20 20 20 20  width){.        
5170: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 20    int i;.       
5180: 20 20 20 69 6e 74 20 6e 50 61 64 20 3d 20 77 69     int nPad = wi
5190: 64 74 68 20 2d 20 6c 65 6e 67 74 68 3b 0a 20 20  dth - length;.  
51a0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 77 69          for(i=wi
51b0: 64 74 68 3b 20 69 3e 3d 6e 50 61 64 3b 20 69 2d  dth; i>=nPad; i-
51c0: 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  -){.            
51d0: 62 75 66 70 74 5b 69 5d 20 3d 20 62 75 66 70 74  bufpt[i] = bufpt
51e0: 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20 20 20 20 20  [i-nPad];.      
51f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
5200: 69 20 3d 20 70 72 65 66 69 78 21 3d 30 3b 0a 20  i = prefix!=0;. 
5210: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
5220: 6e 50 61 64 2d 2d 20 29 20 62 75 66 70 74 5b 69  nPad-- ) bufpt[i
5230: 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20 20 20 20 20  ++] = '0';.     
5240: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69       length = wi
5250: 64 74 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23  dth;.        }.#
5260: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
5270: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
5280: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f  OATING_POINT) */
5290: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
52a0: 20 20 20 20 20 20 63 61 73 65 20 65 74 53 49 5a        case etSIZ
52b0: 45 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  E:.        if( !
52c0: 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20  bArgList ){.    
52d0: 20 20 20 20 20 20 2a 28 76 61 5f 61 72 67 28 61        *(va_arg(a
52e0: 70 2c 69 6e 74 2a 29 29 20 3d 20 70 41 63 63 75  p,int*)) = pAccu
52f0: 6d 2d 3e 6e 43 68 61 72 3b 0a 20 20 20 20 20 20  m->nChar;.      
5300: 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67    }.        leng
5310: 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a  th = width = 0;.
5320: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
5330: 20 20 20 20 20 63 61 73 65 20 65 74 50 45 52 43       case etPERC
5340: 45 4e 54 3a 0a 20 20 20 20 20 20 20 20 62 75 66  ENT:.        buf
5350: 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20 20  [0] = '%';.     
5360: 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a     bufpt = buf;.
5370: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
5380: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
5390: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  k;.      case et
53a0: 43 48 41 52 58 3a 0a 20 20 20 20 20 20 20 20 69  CHARX:.        i
53b0: 66 28 20 62 41 72 67 4c 69 73 74 20 29 7b 0a 20  f( bArgList ){. 
53c0: 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d           bufpt =
53d0: 20 67 65 74 54 65 78 74 41 72 67 28 70 41 72 67   getTextArg(pArg
53e0: 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20  List);.         
53f0: 20 63 20 3d 20 62 75 66 70 74 20 3f 20 62 75 66   c = bufpt ? buf
5400: 70 74 5b 30 5d 20 3a 20 30 3b 0a 20 20 20 20 20  pt[0] : 0;.     
5410: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5420: 20 20 20 20 63 20 3d 20 76 61 5f 61 72 67 28 61      c = va_arg(a
5430: 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  p,int);.        
5440: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  }.        if( pr
5450: 65 63 69 73 69 6f 6e 3e 31 20 29 7b 0a 20 20 20  ecision>1 ){.   
5460: 20 20 20 20 20 20 20 77 69 64 74 68 20 2d 3d 20         width -= 
5470: 70 72 65 63 69 73 69 6f 6e 2d 31 3b 0a 20 20 20  precision-1;.   
5480: 20 20 20 20 20 20 20 69 66 28 20 77 69 64 74 68         if( width
5490: 3e 31 20 26 26 20 21 66 6c 61 67 5f 6c 65 66 74  >1 && !flag_left
54a0: 6a 75 73 74 69 66 79 20 29 7b 0a 20 20 20 20 20  justify ){.     
54b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 70         sqlite3Ap
54c0: 70 65 6e 64 43 68 61 72 28 70 41 63 63 75 6d 2c  pendChar(pAccum,
54d0: 20 77 69 64 74 68 2d 31 2c 20 27 20 27 29 3b 0a   width-1, ' ');.
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 77 69 64 74              widt
54f0: 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  h = 0;.         
5500: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   }.          sql
5510: 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 70  ite3AppendChar(p
5520: 41 63 63 75 6d 2c 20 70 72 65 63 69 73 69 6f 6e  Accum, precision
5530: 2d 31 2c 20 63 29 3b 0a 20 20 20 20 20 20 20 20  -1, c);.        
5540: 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68  }.        length
5550: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 75   = 1;.        bu
5560: 66 5b 30 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20  f[0] = c;.      
5570: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20    bufpt = buf;. 
5580: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5590: 20 20 20 20 63 61 73 65 20 65 74 53 54 52 49 4e      case etSTRIN
55a0: 47 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  G:.      case et
55b0: 44 59 4e 53 54 52 49 4e 47 3a 0a 20 20 20 20 20  DYNSTRING:.     
55c0: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
55d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  ){.          buf
55e0: 70 74 20 3d 20 67 65 74 54 65 78 74 41 72 67 28  pt = getTextArg(
55f0: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20  pArgList);.     
5600: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5610: 20 20 20 20 62 75 66 70 74 20 3d 20 76 61 5f 61      bufpt = va_a
5620: 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20  rg(ap,char*);.  
5630: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5640: 69 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a  if( bufpt==0 ){.
5650: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
5660: 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 7d 65  = "";.        }e
5670: 6c 73 65 20 69 66 28 20 78 74 79 70 65 3d 3d 65  lse if( xtype==e
5680: 74 44 59 4e 53 54 52 49 4e 47 20 26 26 20 21 62  tDYNSTRING && !b
5690: 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20  ArgList ){.     
56a0: 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20 62 75       zExtra = bu
56b0: 66 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  fpt;.        }. 
56c0: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
56d0: 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20  sion>=0 ){.     
56e0: 20 20 20 20 20 66 6f 72 28 6c 65 6e 67 74 68 3d       for(length=
56f0: 30 3b 20 6c 65 6e 67 74 68 3c 70 72 65 63 69 73  0; length<precis
5700: 69 6f 6e 20 26 26 20 62 75 66 70 74 5b 6c 65 6e  ion && bufpt[len
5710: 67 74 68 5d 3b 20 6c 65 6e 67 74 68 2b 2b 29 7b  gth]; length++){
5720: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
5730: 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74  .          lengt
5740: 68 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  h = sqlite3Strle
5750: 6e 33 30 28 62 75 66 70 74 29 3b 0a 20 20 20 20  n30(bufpt);.    
5760: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72      }.        br
5770: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
5780: 65 74 53 51 4c 45 53 43 41 50 45 3a 0a 20 20 20  etSQLESCAPE:.   
5790: 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 53 43     case etSQLESC
57a0: 41 50 45 32 3a 0a 20 20 20 20 20 20 63 61 73 65  APE2:.      case
57b0: 20 65 74 53 51 4c 45 53 43 41 50 45 33 3a 20 7b   etSQLESCAPE3: {
57c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20  .        int i, 
57d0: 6a 2c 20 6b 2c 20 6e 2c 20 69 73 6e 75 6c 6c 3b  j, k, n, isnull;
57e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 65 65  .        int nee
57f0: 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20  dQuote;.        
5800: 63 68 61 72 20 63 68 3b 0a 20 20 20 20 20 20 20  char ch;.       
5810: 20 63 68 61 72 20 71 20 3d 20 28 28 78 74 79 70   char q = ((xtyp
5820: 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 33 29  e==etSQLESCAPE3)
5830: 3f 27 22 27 3a 27 5c 27 27 29 3b 20 20 20 2f 2a  ?'"':'\'');   /*
5840: 20 51 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   Quote character
5850: 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61 72   */.        char
5860: 20 2a 65 73 63 61 72 67 3b 0a 0a 20 20 20 20 20   *escarg;..     
5870: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
5880: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 73 63  ){.          esc
5890: 61 72 67 20 3d 20 67 65 74 54 65 78 74 41 72 67  arg = getTextArg
58a0: 28 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20  (pArgList);.    
58b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
58c0: 20 20 20 20 20 65 73 63 61 72 67 20 3d 20 76 61       escarg = va
58d0: 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a  _arg(ap,char*);.
58e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
58f0: 20 20 69 73 6e 75 6c 6c 20 3d 20 65 73 63 61 72    isnull = escar
5900: 67 3d 3d 30 3b 0a 20 20 20 20 20 20 20 20 69 66  g==0;.        if
5910: 28 20 69 73 6e 75 6c 6c 20 29 20 65 73 63 61 72  ( isnull ) escar
5920: 67 20 3d 20 28 78 74 79 70 65 3d 3d 65 74 53 51  g = (xtype==etSQ
5930: 4c 45 53 43 41 50 45 32 20 3f 20 22 4e 55 4c 4c  LESCAPE2 ? "NULL
5940: 22 20 3a 20 22 28 4e 55 4c 4c 29 22 29 3b 0a 20  " : "(NULL)");. 
5950: 20 20 20 20 20 20 20 6b 20 3d 20 70 72 65 63 69         k = preci
5960: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 66 6f  sion;.        fo
5970: 72 28 69 3d 6e 3d 30 3b 20 6b 21 3d 30 20 26 26  r(i=n=0; k!=0 &&
5980: 20 28 63 68 3d 65 73 63 61 72 67 5b 69 5d 29 21   (ch=escarg[i])!
5990: 3d 30 3b 20 69 2b 2b 2c 20 6b 2d 2d 29 7b 0a 20  =0; i++, k--){. 
59a0: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d           if( ch=
59b0: 3d 71 20 29 20 20 6e 2b 2b 3b 0a 20 20 20 20 20  =q )  n++;.     
59c0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 65 65     }.        nee
59d0: 64 51 75 6f 74 65 20 3d 20 21 69 73 6e 75 6c 6c  dQuote = !isnull
59e0: 20 26 26 20 78 74 79 70 65 3d 3d 65 74 53 51 4c   && xtype==etSQL
59f0: 45 53 43 41 50 45 32 3b 0a 20 20 20 20 20 20 20  ESCAPE2;.       
5a00: 20 6e 20 2b 3d 20 69 20 2b 20 31 20 2b 20 6e 65   n += i + 1 + ne
5a10: 65 64 51 75 6f 74 65 2a 32 3b 0a 20 20 20 20 20  edQuote*2;.     
5a20: 20 20 20 69 66 28 20 6e 3e 65 74 42 55 46 53 49     if( n>etBUFSI
5a30: 5a 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ZE ){.          
5a40: 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d  bufpt = zExtra =
5a50: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20   sqlite3Malloc( 
5a60: 6e 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  n );.          i
5a70: 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20  f( bufpt==0 ){. 
5a80: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 53 74             setSt
5a90: 72 41 63 63 75 6d 45 72 72 6f 72 28 70 41 63 63  rAccumError(pAcc
5aa0: 75 6d 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  um, STRACCUM_NOM
5ab0: 45 4d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  EM);.           
5ac0: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
5ad0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
5ae0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75  se{.          bu
5af0: 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20  fpt = buf;.     
5b00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6a 20 3d     }.        j =
5b10: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
5b20: 6e 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 70  needQuote ) bufp
5b30: 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20  t[j++] = q;.    
5b40: 20 20 20 20 6b 20 3d 20 69 3b 0a 20 20 20 20 20      k = i;.     
5b50: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6b 3b     for(i=0; i<k;
5b60: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
5b70: 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68   bufpt[j++] = ch
5b80: 20 3d 20 65 73 63 61 72 67 5b 69 5d 3b 0a 20 20   = escarg[i];.  
5b90: 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d 3d          if( ch==
5ba0: 71 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d  q ) bufpt[j++] =
5bb0: 20 63 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   ch;.        }. 
5bc0: 20 20 20 20 20 20 20 69 66 28 20 6e 65 65 64 51         if( needQ
5bd0: 75 6f 74 65 20 29 20 62 75 66 70 74 5b 6a 2b 2b  uote ) bufpt[j++
5be0: 5d 20 3d 20 71 3b 0a 20 20 20 20 20 20 20 20 62  ] = q;.        b
5bf0: 75 66 70 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20  ufpt[j] = 0;.   
5c00: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 6a 3b       length = j;
5c10: 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  .        /* The 
5c20: 70 72 65 63 69 73 69 6f 6e 20 69 6e 20 25 71 20  precision in %q 
5c30: 61 6e 64 20 25 51 20 6d 65 61 6e 73 20 68 6f 77  and %Q means how
5c40: 20 6d 61 6e 79 20 69 6e 70 75 74 20 63 68 61 72   many input char
5c50: 61 63 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  acters to.      
5c60: 20 20 2a 2a 20 63 6f 6e 73 75 6d 65 2c 20 6e 6f    ** consume, no
5c70: 74 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  t the length of 
5c80: 74 68 65 20 6f 75 74 70 75 74 2e 2e 2e 0a 20 20  the output....  
5c90: 20 20 20 20 20 20 2a 2a 20 69 66 28 20 70 72 65        ** if( pre
5ca0: 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65  cision>=0 && pre
5cb0: 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20  cision<length ) 
5cc0: 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73 69  length = precisi
5cd0: 6f 6e 3b 20 2a 2f 0a 20 20 20 20 20 20 20 20 62  on; */.        b
5ce0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
5cf0: 20 20 20 20 63 61 73 65 20 65 74 54 4f 4b 45 4e      case etTOKEN
5d00: 3a 20 7b 0a 20 20 20 20 20 20 20 20 54 6f 6b 65  : {.        Toke
5d10: 6e 20 2a 70 54 6f 6b 65 6e 20 3d 20 76 61 5f 61  n *pToken = va_a
5d20: 72 67 28 61 70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  rg(ap, Token*);.
5d30: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5d40: 62 41 72 67 4c 69 73 74 3d 3d 30 20 29 3b 0a 20  bArgList==0 );. 
5d50: 20 20 20 20 20 20 20 69 66 28 20 70 54 6f 6b 65         if( pToke
5d60: 6e 20 26 26 20 70 54 6f 6b 65 6e 2d 3e 6e 20 29  n && pToken->n )
5d70: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
5d80: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
5d90: 64 28 70 41 63 63 75 6d 2c 20 28 63 6f 6e 73 74  d(pAccum, (const
5da0: 20 63 68 61 72 2a 29 70 54 6f 6b 65 6e 2d 3e 7a   char*)pToken->z
5db0: 2c 20 70 54 6f 6b 65 6e 2d 3e 6e 29 3b 0a 20 20  , pToken->n);.  
5dc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5dd0: 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d  length = width =
5de0: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
5df0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
5e00: 20 63 61 73 65 20 65 74 53 52 43 4c 49 53 54 3a   case etSRCLIST:
5e10: 20 7b 0a 20 20 20 20 20 20 20 20 53 72 63 4c 69   {.        SrcLi
5e20: 73 74 20 2a 70 53 72 63 20 3d 20 76 61 5f 61 72  st *pSrc = va_ar
5e30: 67 28 61 70 2c 20 53 72 63 4c 69 73 74 2a 29 3b  g(ap, SrcList*);
5e40: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d  .        int k =
5e50: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
5e60: 3b 0a 20 20 20 20 20 20 20 20 73 74 72 75 63 74  ;.        struct
5e70: 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 70   SrcList_item *p
5e80: 49 74 65 6d 20 3d 20 26 70 53 72 63 2d 3e 61 5b  Item = &pSrc->a[
5e90: 6b 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  k];.        asse
5ea0: 72 74 28 20 62 41 72 67 4c 69 73 74 3d 3d 30 20  rt( bArgList==0 
5eb0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5ec0: 74 28 20 6b 3e 3d 30 20 26 26 20 6b 3c 70 53 72  t( k>=0 && k<pSr
5ed0: 63 2d 3e 6e 53 72 63 20 29 3b 0a 20 20 20 20 20  c->nSrc );.     
5ee0: 20 20 20 69 66 28 20 70 49 74 65 6d 2d 3e 7a 44     if( pItem->zD
5ef0: 61 74 61 62 61 73 65 20 29 7b 0a 20 20 20 20 20  atabase ){.     
5f00: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
5f10: 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 70 41  ccumAppendAll(pA
5f20: 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e 7a 44 61  ccum, pItem->zDa
5f30: 74 61 62 61 73 65 29 3b 0a 20 20 20 20 20 20 20  tabase);.       
5f40: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
5f50: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
5f60: 20 22 2e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20   ".", 1);.      
5f70: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
5f80: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
5f90: 64 41 6c 6c 28 70 41 63 63 75 6d 2c 20 70 49 74  dAll(pAccum, pIt
5fa0: 65 6d 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  em->zName);.    
5fb0: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64      length = wid
5fc0: 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  th = 0;.        
5fd0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5fe0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
5ff0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
6000: 78 74 79 70 65 3d 3d 65 74 49 4e 56 41 4c 49 44  xtype==etINVALID
6010: 20 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75   );.        retu
6020: 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
6030: 7d 2f 2a 20 45 6e 64 20 73 77 69 74 63 68 20 6f  }/* End switch o
6040: 76 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 74  ver the format t
6050: 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20  ype */.    /*.  
6060: 20 20 2a 2a 20 54 68 65 20 74 65 78 74 20 6f 66    ** The text of
6070: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
6080: 69 73 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  is pointed to by
6090: 20 22 62 75 66 70 74 22 20 61 6e 64 20 69 73 0a   "bufpt" and is.
60a0: 20 20 20 20 2a 2a 20 22 6c 65 6e 67 74 68 22 20      ** "length" 
60b0: 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
60c0: 20 20 54 68 65 20 66 69 65 6c 64 20 77 69 64 74    The field widt
60d0: 68 20 69 73 20 22 77 69 64 74 68 22 2e 20 20 44  h is "width".  D
60e0: 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74  o.    ** the out
60f0: 70 75 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  put..    */.    
6100: 77 69 64 74 68 20 2d 3d 20 6c 65 6e 67 74 68 3b  width -= length;
6110: 0a 20 20 20 20 69 66 28 20 77 69 64 74 68 3e 30  .    if( width>0
6120: 20 26 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75   && !flag_leftju
6130: 73 74 69 66 79 20 29 20 73 71 6c 69 74 65 33 41  stify ) sqlite3A
6140: 70 70 65 6e 64 43 68 61 72 28 70 41 63 63 75 6d  ppendChar(pAccum
6150: 2c 20 77 69 64 74 68 2c 20 27 20 27 29 3b 0a 20  , width, ' ');. 
6160: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
6170: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
6180: 20 62 75 66 70 74 2c 20 6c 65 6e 67 74 68 29 3b   bufpt, length);
6190: 0a 20 20 20 20 69 66 28 20 77 69 64 74 68 3e 30  .    if( width>0
61a0: 20 26 26 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73   && flag_leftjus
61b0: 74 69 66 79 20 29 20 73 71 6c 69 74 65 33 41 70  tify ) sqlite3Ap
61c0: 70 65 6e 64 43 68 61 72 28 70 41 63 63 75 6d 2c  pendChar(pAccum,
61d0: 20 77 69 64 74 68 2c 20 27 20 27 29 3b 0a 0a 20   width, ' ');.. 
61e0: 20 20 20 69 66 28 20 7a 45 78 74 72 61 20 29 7b     if( zExtra ){
61f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
6200: 72 65 65 28 7a 45 78 74 72 61 29 3b 0a 20 20 20  ree(zExtra);.   
6210: 20 20 20 7a 45 78 74 72 61 20 3d 20 30 3b 0a 20     zExtra = 0;. 
6220: 20 20 20 7d 0a 20 20 7d 2f 2a 20 45 6e 64 20 66     }.  }/* End f
6230: 6f 72 20 6c 6f 6f 70 20 6f 76 65 72 20 74 68 65  or loop over the
6240: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a   format string *
6250: 2f 0a 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 66 75  /.} /* End of fu
6260: 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nction */../*.**
6270: 20 45 6e 6c 61 72 67 65 20 74 68 65 20 6d 65 6d   Enlarge the mem
6280: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f  ory allocation o
6290: 6e 20 61 20 53 74 72 41 63 63 75 6d 20 6f 62 6a  n a StrAccum obj
62a0: 65 63 74 20 73 6f 20 74 68 61 74 20 69 74 20 69  ect so that it i
62b0: 73 0a 2a 2a 20 61 62 6c 65 20 74 6f 20 61 63 63  s.** able to acc
62c0: 65 70 74 20 61 74 20 6c 65 61 73 74 20 4e 20 6d  ept at least N m
62d0: 6f 72 65 20 62 79 74 65 73 20 6f 66 20 74 65 78  ore bytes of tex
62e0: 74 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  t..**.** Return 
62f0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
6300: 74 65 73 20 6f 66 20 74 65 78 74 20 74 68 61 74  tes of text that
6310: 20 53 74 72 41 63 63 75 6d 20 69 73 20 61 62 6c   StrAccum is abl
6320: 65 20 74 6f 20 61 63 63 65 70 74 0a 2a 2a 20 61  e to accept.** a
6330: 66 74 65 72 20 74 68 65 20 61 74 74 65 6d 70 74  fter the attempt
6340: 65 64 20 65 6e 6c 61 72 67 65 6d 65 6e 74 2e 20  ed enlargement. 
6350: 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   The value retur
6360: 6e 65 64 20 6d 69 67 68 74 20 62 65 20 7a 65 72  ned might be zer
6370: 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  o..*/.static int
6380: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6390: 45 6e 6c 61 72 67 65 28 53 74 72 41 63 63 75 6d  Enlarge(StrAccum
63a0: 20 2a 70 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 63   *p, int N){.  c
63b0: 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 61 73 73  har *zNew;.  ass
63c0: 65 72 74 28 20 70 2d 3e 6e 43 68 61 72 2b 4e 20  ert( p->nChar+N 
63d0: 3e 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 3b 20  >= p->nAlloc ); 
63e0: 2f 2a 20 4f 6e 6c 79 20 63 61 6c 6c 65 64 20 69  /* Only called i
63f0: 66 20 72 65 61 6c 6c 79 20 6e 65 65 64 65 64 20  f really needed 
6400: 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 63 63 45  */.  if( p->accE
6410: 72 72 6f 72 20 29 7b 0a 20 20 20 20 74 65 73 74  rror ){.    test
6420: 63 61 73 65 28 70 2d 3e 61 63 63 45 72 72 6f 72  case(p->accError
6430: 3d 3d 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  ==STRACCUM_TOOBI
6440: 47 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  G);.    testcase
6450: 28 70 2d 3e 61 63 63 45 72 72 6f 72 3d 3d 53 54  (p->accError==ST
6460: 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a 20  RACCUM_NOMEM);. 
6470: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
6480: 0a 20 20 69 66 28 20 21 70 2d 3e 75 73 65 4d 61  .  if( !p->useMa
6490: 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 4e 20 3d 20  lloc ){.    N = 
64a0: 70 2d 3e 6e 41 6c 6c 6f 63 20 2d 20 70 2d 3e 6e  p->nAlloc - p->n
64b0: 43 68 61 72 20 2d 20 31 3b 0a 20 20 20 20 73 65  Char - 1;.    se
64c0: 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70  tStrAccumError(p
64d0: 2c 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  , STRACCUM_TOOBI
64e0: 47 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4e  G);.    return N
64f0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
6500: 68 61 72 20 2a 7a 4f 6c 64 20 3d 20 28 70 2d 3e  har *zOld = (p->
6510: 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73 65 20  zText==p->zBase 
6520: 3f 20 30 20 3a 20 70 2d 3e 7a 54 65 78 74 29 3b  ? 0 : p->zText);
6530: 0a 20 20 20 20 69 36 34 20 73 7a 4e 65 77 20 3d  .    i64 szNew =
6540: 20 70 2d 3e 6e 43 68 61 72 3b 0a 20 20 20 20 73   p->nChar;.    s
6550: 7a 4e 65 77 20 2b 3d 20 4e 20 2b 20 31 3b 0a 20  zNew += N + 1;. 
6560: 20 20 20 69 66 28 20 73 7a 4e 65 77 2b 70 2d 3e     if( szNew+p->
6570: 6e 43 68 61 72 3c 3d 70 2d 3e 6d 78 41 6c 6c 6f  nChar<=p->mxAllo
6580: 63 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 46 6f  c ){.      /* Fo
6590: 72 63 65 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20  rce exponential 
65a0: 62 75 66 66 65 72 20 73 69 7a 65 20 67 72 6f 77  buffer size grow
65b0: 74 68 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  th as long as it
65c0: 20 64 6f 65 73 20 6e 6f 74 20 6f 76 65 72 66 6c   does not overfl
65d0: 6f 77 2c 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20  ow,.      ** to 
65e0: 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20  avoid having to 
65f0: 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e  call this routin
6600: 65 20 74 6f 6f 20 6f 66 74 65 6e 20 2a 2f 0a 20  e too often */. 
6610: 20 20 20 20 20 73 7a 4e 65 77 20 2b 3d 20 70 2d       szNew += p-
6620: 3e 6e 43 68 61 72 3b 0a 20 20 20 20 7d 0a 20 20  >nChar;.    }.  
6630: 20 20 69 66 28 20 73 7a 4e 65 77 20 3e 20 70 2d    if( szNew > p-
6640: 3e 6d 78 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >mxAlloc ){.    
6650: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
6660: 6d 52 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20  mReset(p);.     
6670: 20 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f   setStrAccumErro
6680: 72 28 70 2c 20 53 54 52 41 43 43 55 4d 5f 54 4f  r(p, STRACCUM_TO
6690: 4f 42 49 47 29 3b 0a 20 20 20 20 20 20 72 65 74  OBIG);.      ret
66a0: 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  urn 0;.    }else
66b0: 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f  {.      p->nAllo
66c0: 63 20 3d 20 28 69 6e 74 29 73 7a 4e 65 77 3b 0a  c = (int)szNew;.
66d0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
66e0: 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29 7b  >useMalloc==1 ){
66f0: 0a 20 20 20 20 20 20 7a 4e 65 77 20 3d 20 73 71  .      zNew = sq
6700: 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 70  lite3DbRealloc(p
6710: 2d 3e 64 62 2c 20 7a 4f 6c 64 2c 20 70 2d 3e 6e  ->db, zOld, p->n
6720: 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 7d 65 6c 73  Alloc);.    }els
6730: 65 7b 0a 20 20 20 20 20 20 7a 4e 65 77 20 3d 20  e{.      zNew = 
6740: 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28  sqlite3_realloc(
6750: 7a 4f 6c 64 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29  zOld, p->nAlloc)
6760: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
6770: 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 61 73  zNew ){.      as
6780: 73 65 72 74 28 20 70 2d 3e 7a 54 65 78 74 21 3d  sert( p->zText!=
6790: 30 20 7c 7c 20 70 2d 3e 6e 43 68 61 72 3d 3d 30  0 || p->nChar==0
67a0: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 4f   );.      if( zO
67b0: 6c 64 3d 3d 30 20 26 26 20 70 2d 3e 6e 43 68 61  ld==0 && p->nCha
67c0: 72 3e 30 20 29 20 6d 65 6d 63 70 79 28 7a 4e 65  r>0 ) memcpy(zNe
67d0: 77 2c 20 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e  w, p->zText, p->
67e0: 6e 43 68 61 72 29 3b 0a 20 20 20 20 20 20 70 2d  nChar);.      p-
67f0: 3e 7a 54 65 78 74 20 3d 20 7a 4e 65 77 3b 0a 20  >zText = zNew;. 
6800: 20 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d       p->nAlloc =
6810: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
6820: 53 69 7a 65 28 70 2d 3e 64 62 2c 20 7a 4e 65 77  Size(p->db, zNew
6830: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
6840: 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63      sqlite3StrAc
6850: 63 75 6d 52 65 73 65 74 28 70 29 3b 0a 20 20 20  cumReset(p);.   
6860: 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45 72     setStrAccumEr
6870: 72 6f 72 28 70 2c 20 53 54 52 41 43 43 55 4d 5f  ror(p, STRACCUM_
6880: 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 20 20 72 65  NOMEM);.      re
6890: 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
68a0: 7d 0a 20 20 72 65 74 75 72 6e 20 4e 3b 0a 7d 0a  }.  return N;.}.
68b0: 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 4e 20  ./*.** Append N 
68c0: 63 6f 70 69 65 73 20 6f 66 20 63 68 61 72 61 63  copies of charac
68d0: 74 65 72 20 63 20 74 6f 20 74 68 65 20 67 69 76  ter c to the giv
68e0: 65 6e 20 73 74 72 69 6e 67 20 62 75 66 66 65 72  en string buffer
68f0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
6900: 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 41  3AppendChar(StrA
6910: 63 63 75 6d 20 2a 70 2c 20 69 6e 74 20 4e 2c 20  ccum *p, int N, 
6920: 63 68 61 72 20 63 29 7b 0a 20 20 69 66 28 20 70  char c){.  if( p
6930: 2d 3e 6e 43 68 61 72 2b 4e 20 3e 3d 20 70 2d 3e  ->nChar+N >= p->
6940: 6e 41 6c 6c 6f 63 20 26 26 20 28 4e 20 3d 20 73  nAlloc && (N = s
6950: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 45 6e  qlite3StrAccumEn
6960: 6c 61 72 67 65 28 70 2c 20 4e 29 29 3c 3d 30 20  large(p, N))<=0 
6970: 29 20 72 65 74 75 72 6e 3b 0a 20 20 77 68 69 6c  ) return;.  whil
6980: 65 28 20 28 4e 2d 2d 29 3e 30 20 29 20 70 2d 3e  e( (N--)>0 ) p->
6990: 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72 2b 2b  zText[p->nChar++
69a0: 5d 20 3d 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ] = c;.}../*.** 
69b0: 54 68 65 20 53 74 72 41 63 63 75 6d 20 22 70 22  The StrAccum "p"
69c0: 20 69 73 20 6e 6f 74 20 6c 61 72 67 65 20 65 6e   is not large en
69d0: 6f 75 67 68 20 74 6f 20 61 63 63 65 70 74 20 4e  ough to accept N
69e0: 20 6e 65 77 20 62 79 74 65 73 20 6f 66 20 7a 5b   new bytes of z[
69f0: 5d 2e 0a 2a 2a 20 53 6f 20 65 6e 6c 61 72 67 65  ]..** So enlarge
6a00: 20 69 66 20 66 69 72 73 74 2c 20 74 68 65 6e 20   if first, then 
6a10: 64 6f 20 74 68 65 20 61 70 70 65 6e 64 2e 0a 2a  do the append..*
6a20: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20 68  *.** This is a h
6a30: 65 6c 70 65 72 20 72 6f 75 74 69 6e 65 20 74 6f  elper routine to
6a40: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6a50: 41 70 70 65 6e 64 28 29 20 74 68 61 74 20 64 6f  Append() that do
6a60: 65 73 20 73 70 65 63 69 61 6c 2d 63 61 73 65 0a  es special-case.
6a70: 2a 2a 20 77 6f 72 6b 20 28 65 6e 6c 61 72 67 69  ** work (enlargi
6a80: 6e 67 20 74 68 65 20 62 75 66 66 65 72 29 20 75  ng the buffer) u
6a90: 73 69 6e 67 20 74 61 69 6c 20 72 65 63 75 72 73  sing tail recurs
6aa0: 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74 68 65  ion, so that the
6ab0: 0a 2a 2a 20 73 71 6c 69 74 65 33 53 74 72 41 63  .** sqlite3StrAc
6ac0: 63 75 6d 41 70 70 65 6e 64 28 29 20 72 6f 75 74  cumAppend() rout
6ad0: 69 6e 65 20 63 61 6e 20 75 73 65 20 66 61 73 74  ine can use fast
6ae0: 20 63 61 6c 6c 69 6e 67 20 73 65 6d 61 6e 74 69   calling semanti
6af0: 63 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  cs..*/.static vo
6b00: 69 64 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  id SQLITE_NOINLI
6b10: 4e 45 20 65 6e 6c 61 72 67 65 41 6e 64 41 70 70  NE enlargeAndApp
6b20: 65 6e 64 28 53 74 72 41 63 63 75 6d 20 2a 70 2c  end(StrAccum *p,
6b30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
6b40: 69 6e 74 20 4e 29 7b 0a 20 20 4e 20 3d 20 73 71  int N){.  N = sq
6b50: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 45 6e 6c  lite3StrAccumEnl
6b60: 61 72 67 65 28 70 2c 20 4e 29 3b 0a 20 20 69 66  arge(p, N);.  if
6b70: 28 20 4e 3e 30 20 29 7b 0a 20 20 20 20 6d 65 6d  ( N>0 ){.    mem
6b80: 63 70 79 28 26 70 2d 3e 7a 54 65 78 74 5b 70 2d  cpy(&p->zText[p-
6b90: 3e 6e 43 68 61 72 5d 2c 20 7a 2c 20 4e 29 3b 0a  >nChar], z, N);.
6ba0: 20 20 20 20 70 2d 3e 6e 43 68 61 72 20 2b 3d 20      p->nChar += 
6bb0: 4e 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  N;.  }.}../*.** 
6bc0: 41 70 70 65 6e 64 20 4e 20 62 79 74 65 73 20 6f  Append N bytes o
6bd0: 66 20 74 65 78 74 20 66 72 6f 6d 20 7a 20 74 6f  f text from z to
6be0: 20 74 68 65 20 53 74 72 41 63 63 75 6d 20 6f 62   the StrAccum ob
6bf0: 6a 65 63 74 2e 20 20 49 6e 63 72 65 61 73 65 20  ject.  Increase 
6c00: 74 68 65 0a 2a 2a 20 73 69 7a 65 20 6f 66 20 74  the.** size of t
6c10: 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  he memory alloca
6c20: 74 69 6f 6e 20 66 6f 72 20 53 74 72 41 63 63 75  tion for StrAccu
6c30: 6d 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0a  m if necessary..
6c40: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
6c50: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
6c60: 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74  rAccum *p, const
6c70: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 4e 29   char *z, int N)
6c80: 7b 0a 20 20 61 73 73 65 72 74 28 20 7a 21 3d 30  {.  assert( z!=0
6c90: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
6ca0: 3e 7a 54 65 78 74 21 3d 30 20 7c 7c 20 70 2d 3e  >zText!=0 || p->
6cb0: 6e 43 68 61 72 3d 3d 30 20 7c 7c 20 70 2d 3e 61  nChar==0 || p->a
6cc0: 63 63 45 72 72 6f 72 20 29 3b 0a 20 20 61 73 73  ccError );.  ass
6cd0: 65 72 74 28 20 4e 3e 3d 30 20 29 3b 0a 20 20 61  ert( N>=0 );.  a
6ce0: 73 73 65 72 74 28 20 70 2d 3e 61 63 63 45 72 72  ssert( p->accErr
6cf0: 6f 72 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 41 6c 6c  or==0 || p->nAll
6d00: 6f 63 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  oc==0 );.  if( p
6d10: 2d 3e 6e 43 68 61 72 2b 4e 20 3e 3d 20 70 2d 3e  ->nChar+N >= p->
6d20: 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 65 6e  nAlloc ){.    en
6d30: 6c 61 72 67 65 41 6e 64 41 70 70 65 6e 64 28 70  largeAndAppend(p
6d40: 2c 7a 2c 4e 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ,z,N);.  }else{.
6d50: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a      assert( p->z
6d60: 54 65 78 74 20 29 3b 0a 20 20 20 20 70 2d 3e 6e  Text );.    p->n
6d70: 43 68 61 72 20 2b 3d 20 4e 3b 0a 20 20 20 20 6d  Char += N;.    m
6d80: 65 6d 63 70 79 28 26 70 2d 3e 7a 54 65 78 74 5b  emcpy(&p->zText[
6d90: 70 2d 3e 6e 43 68 61 72 2d 4e 5d 2c 20 7a 2c 20  p->nChar-N], z, 
6da0: 4e 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  N);.  }.}../*.**
6db0: 20 41 70 70 65 6e 64 20 74 68 65 20 63 6f 6d 70   Append the comp
6dc0: 6c 65 74 65 20 74 65 78 74 20 6f 66 20 7a 65 72  lete text of zer
6dd0: 6f 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72  o-terminated str
6de0: 69 6e 67 20 7a 5b 5d 20 74 6f 20 74 68 65 20 70  ing z[] to the p
6df0: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64   string..*/.void
6e00: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6e10: 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
6e20: 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61  um *p, const cha
6e30: 72 20 2a 7a 29 7b 0a 20 20 73 71 6c 69 74 65 33  r *z){.  sqlite3
6e40: 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70  StrAccumAppend(p
6e50: 2c 20 7a 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  , z, sqlite3Strl
6e60: 65 6e 33 30 28 7a 29 29 3b 0a 7d 0a 0a 0a 2f 2a  en30(z));.}.../*
6e70: 0a 2a 2a 20 46 69 6e 69 73 68 20 6f 66 66 20 61  .** Finish off a
6e80: 20 73 74 72 69 6e 67 20 62 79 20 6d 61 6b 69 6e   string by makin
6e90: 67 20 73 75 72 65 20 69 74 20 69 73 20 7a 65 72  g sure it is zer
6ea0: 6f 2d 74 65 72 6d 69 6e 61 74 65 64 2e 0a 2a 2a  o-terminated..**
6eb0: 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   Return a pointe
6ec0: 72 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69  r to the resulti
6ed0: 6e 67 20 73 74 72 69 6e 67 2e 20 20 52 65 74 75  ng string.  Retu
6ee0: 72 6e 20 61 20 4e 55 4c 4c 0a 2a 2a 20 70 6f 69  rn a NULL.** poi
6ef0: 6e 74 65 72 20 69 66 20 61 6e 79 20 6b 69 6e 64  nter if any kind
6f00: 20 6f 66 20 65 72 72 6f 72 20 77 61 73 20 65 6e   of error was en
6f10: 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2f 0a 63 68  countered..*/.ch
6f20: 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
6f30: 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
6f40: 75 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d  um *p){.  if( p-
6f50: 3e 7a 54 65 78 74 20 29 7b 0a 20 20 20 20 70 2d  >zText ){.    p-
6f60: 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72 5d  >zText[p->nChar]
6f70: 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 2d   = 0;.    if( p-
6f80: 3e 75 73 65 4d 61 6c 6c 6f 63 20 26 26 20 70 2d  >useMalloc && p-
6f90: 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73 65  >zText==p->zBase
6fa0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   ){.      if( p-
6fb0: 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29 7b  >useMalloc==1 ){
6fc0: 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65 78  .        p->zTex
6fd0: 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
6fe0: 6c 6f 63 52 61 77 28 70 2d 3e 64 62 2c 20 70 2d  locRaw(p->db, p-
6ff0: 3e 6e 43 68 61 72 2b 31 20 29 3b 0a 20 20 20 20  >nChar+1 );.    
7000: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
7010: 20 70 2d 3e 7a 54 65 78 74 20 3d 20 73 71 6c 69   p->zText = sqli
7020: 74 65 33 5f 6d 61 6c 6c 6f 63 28 70 2d 3e 6e 43  te3_malloc(p->nC
7030: 68 61 72 2b 31 29 3b 0a 20 20 20 20 20 20 7d 0a  har+1);.      }.
7040: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 7a 54 65        if( p->zTe
7050: 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65  xt ){.        me
7060: 6d 63 70 79 28 70 2d 3e 7a 54 65 78 74 2c 20 70  mcpy(p->zText, p
7070: 2d 3e 7a 42 61 73 65 2c 20 70 2d 3e 6e 43 68 61  ->zBase, p->nCha
7080: 72 2b 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  r+1);.      }els
7090: 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74 53 74  e{.        setSt
70a0: 72 41 63 63 75 6d 45 72 72 6f 72 28 70 2c 20 53  rAccumError(p, S
70b0: 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a  TRACCUM_NOMEM);.
70c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
70d0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 54  }.  return p->zT
70e0: 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ext;.}../*.** Re
70f0: 73 65 74 20 61 6e 20 53 74 72 41 63 63 75 6d 20  set an StrAccum 
7100: 73 74 72 69 6e 67 2e 20 20 52 65 63 6c 61 69 6d  string.  Reclaim
7110: 20 61 6c 6c 20 6d 61 6c 6c 6f 63 65 64 20 6d 65   all malloced me
7120: 6d 6f 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  mory..*/.void sq
7130: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
7140: 65 74 28 53 74 72 41 63 63 75 6d 20 2a 70 29 7b  et(StrAccum *p){
7150: 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 74 21  .  if( p->zText!
7160: 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20 20  =p->zBase ){.   
7170: 20 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f   if( p->useMallo
7180: 63 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 73 71  c==1 ){.      sq
7190: 6c 69 74 65 33 44 62 46 72 65 65 28 70 2d 3e 64  lite3DbFree(p->d
71a0: 62 2c 20 70 2d 3e 7a 54 65 78 74 29 3b 0a 20 20  b, p->zText);.  
71b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
71c0: 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e 7a  qlite3_free(p->z
71d0: 54 65 78 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  Text);.    }.  }
71e0: 0a 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 30 3b  .  p->zText = 0;
71f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61  .}../*.** Initia
7200: 6c 69 7a 65 20 61 20 73 74 72 69 6e 67 20 61 63  lize a string ac
7210: 63 75 6d 75 6c 61 74 6f 72 0a 2a 2f 0a 76 6f 69  cumulator.*/.voi
7220: 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
7230: 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 20 2a  mInit(StrAccum *
7240: 70 2c 20 63 68 61 72 20 2a 7a 42 61 73 65 2c 20  p, char *zBase, 
7250: 69 6e 74 20 6e 2c 20 69 6e 74 20 6d 78 29 7b 0a  int n, int mx){.
7260: 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 70 2d 3e    p->zText = p->
7270: 7a 42 61 73 65 20 3d 20 7a 42 61 73 65 3b 0a 20  zBase = zBase;. 
7280: 20 70 2d 3e 64 62 20 3d 20 30 3b 0a 20 20 70 2d   p->db = 0;.  p-
7290: 3e 6e 43 68 61 72 20 3d 20 30 3b 0a 20 20 70 2d  >nChar = 0;.  p-
72a0: 3e 6e 41 6c 6c 6f 63 20 3d 20 6e 3b 0a 20 20 70  >nAlloc = n;.  p
72b0: 2d 3e 6d 78 41 6c 6c 6f 63 20 3d 20 6d 78 3b 0a  ->mxAlloc = mx;.
72c0: 20 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63 20 3d    p->useMalloc =
72d0: 20 31 3b 0a 20 20 70 2d 3e 61 63 63 45 72 72 6f   1;.  p->accErro
72e0: 72 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  r = 0;.}../*.** 
72f0: 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72  Print into memor
7300: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
7310: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20  sqliteMalloc(). 
7320: 20 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61   Use the interna
7330: 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f  l.** %-conversio
7340: 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f  n extensions..*/
7350: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
7360: 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a  Printf(sqlite3 *
7370: 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
7380: 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74  zFormat, va_list
7390: 20 61 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b   ap){.  char *z;
73a0: 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b 53 51  .  char zBase[SQ
73b0: 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53  LITE_PRINT_BUF_S
73c0: 49 5a 45 5d 3b 0a 20 20 53 74 72 41 63 63 75 6d  IZE];.  StrAccum
73d0: 20 61 63 63 3b 0a 20 20 61 73 73 65 72 74 28 20   acc;.  assert( 
73e0: 64 62 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  db!=0 );.  sqlit
73f0: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
7400: 61 63 63 2c 20 7a 42 61 73 65 2c 20 73 69 7a 65  acc, zBase, size
7410: 6f 66 28 7a 42 61 73 65 29 2c 0a 20 20 20 20 20  of(zBase),.     
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7430: 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
7440: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7450: 29 3b 0a 20 20 61 63 63 2e 64 62 20 3d 20 64 62  );.  acc.db = db
7460: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
7470: 6e 74 66 28 26 61 63 63 2c 20 53 51 4c 49 54 45  ntf(&acc, SQLITE
7480: 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
7490: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
74a0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72    z = sqlite3Str
74b0: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63  AccumFinish(&acc
74c0: 29 3b 0a 20 20 69 66 28 20 61 63 63 2e 61 63 63  );.  if( acc.acc
74d0: 45 72 72 6f 72 3d 3d 53 54 52 41 43 43 55 4d 5f  Error==STRACCUM_
74e0: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 64 62 2d  NOMEM ){.    db-
74f0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
7500: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
7510: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  z;.}../*.** Prin
7520: 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  t into memory ob
7530: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
7540: 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65  teMalloc().  Use
7550: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a   the internal.**
7560: 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78   %-conversion ex
7570: 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61  tensions..*/.cha
7580: 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
7590: 66 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  f(sqlite3 *db, c
75a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
75b0: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  at, ...){.  va_l
75c0: 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a  ist ap;.  char *
75d0: 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  z;.  va_start(ap
75e0: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20  , zFormat);.  z 
75f0: 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74  = sqlite3VMPrint
7600: 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c 20 61  f(db, zFormat, a
7610: 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29  p);.  va_end(ap)
7620: 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a  ;.  return z;.}.
7630: 0a 2f 2a 0a 2a 2a 20 4c 69 6b 65 20 73 71 6c 69  ./*.** Like sqli
7640: 74 65 33 4d 50 72 69 6e 74 66 28 29 2c 20 62 75  te3MPrintf(), bu
7650: 74 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 44 62  t call sqlite3Db
7660: 46 72 65 65 28 29 20 6f 6e 20 7a 53 74 72 20 61  Free() on zStr a
7670: 66 74 65 72 20 66 6f 72 6d 61 74 74 69 6e 67 0a  fter formatting.
7680: 2a 2a 20 74 68 65 20 73 74 72 69 6e 67 20 61 6e  ** the string an
7690: 64 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  d before returni
76a0: 6e 67 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e  ng.  This routin
76b0: 65 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f  e is intended to
76c0: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d   be used.** to m
76d0: 6f 64 69 66 79 20 61 6e 20 65 78 69 73 74 69 6e  odify an existin
76e0: 67 20 73 74 72 69 6e 67 2e 20 20 46 6f 72 20 65  g string.  For e
76f0: 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
7700: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 4d      x = sqlite3M
7710: 50 72 69 6e 74 66 28 64 62 2c 20 78 2c 20 22 70  Printf(db, x, "p
7720: 72 65 66 69 78 20 25 73 20 73 75 66 66 69 78 22  refix %s suffix"
7730: 2c 20 78 29 3b 0a 2a 2a 0a 2a 2f 0a 63 68 61 72  , x);.**.*/.char
7740: 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
7750: 66 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  f(sqlite3 *db, c
7760: 68 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74  har *zStr, const
7770: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
7780: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
7790: 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  ap;.  char *z;. 
77a0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
77b0: 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71  ormat);.  z = sq
77c0: 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64 62  lite3VMPrintf(db
77d0: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
77e0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
77f0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
7800: 2c 20 7a 53 74 72 29 3b 0a 20 20 72 65 74 75 72  , zStr);.  retur
7810: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  n z;.}../*.** Pr
7820: 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  int into memory 
7830: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
7840: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 20  lite3_malloc(). 
7850: 20 4f 6d 69 74 20 74 68 65 20 69 6e 74 65 72 6e   Omit the intern
7860: 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69  al.** %-conversi
7870: 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a  on extensions..*
7880: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  /.char *sqlite3_
7890: 76 6d 70 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  vmprintf(const c
78a0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61  har *zFormat, va
78b0: 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 63 68 61  _list ap){.  cha
78c0: 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 7a 42 61  r *z;.  char zBa
78d0: 73 65 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f  se[SQLITE_PRINT_
78e0: 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20 53 74 72  BUF_SIZE];.  Str
78f0: 41 63 63 75 6d 20 61 63 63 3b 0a 0a 23 69 66 64  Accum acc;..#ifd
7900: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
7910: 5f 41 50 49 5f 41 52 4d 4f 52 20 20 0a 20 20 69  _API_ARMOR  .  i
7920: 66 28 20 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 7b  f( zFormat==0 ){
7930: 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54  .    (void)SQLIT
7940: 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20  E_MISUSE_BKPT;. 
7950: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
7960: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
7970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
7980: 49 4e 49 54 0a 20 20 69 66 28 20 73 71 6c 69 74  INIT.  if( sqlit
7990: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
79a0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64  ) return 0;.#end
79b0: 69 66 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  if.  sqlite3StrA
79c0: 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a  ccumInit(&acc, z
79d0: 42 61 73 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61  Base, sizeof(zBa
79e0: 73 65 29 2c 20 53 51 4c 49 54 45 5f 4d 41 58 5f  se), SQLITE_MAX_
79f0: 4c 45 4e 47 54 48 29 3b 0a 20 20 61 63 63 2e 75  LENGTH);.  acc.u
7a00: 73 65 4d 61 6c 6c 6f 63 20 3d 20 32 3b 0a 20 20  seMalloc = 2;.  
7a10: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
7a20: 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74  &acc, 0, zFormat
7a30: 2c 20 61 70 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  , ap);.  z = sql
7a40: 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
7a50: 73 68 28 26 61 63 63 29 3b 0a 20 20 72 65 74 75  sh(&acc);.  retu
7a60: 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  rn z;.}../*.** P
7a70: 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79  rint into memory
7a80: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
7a90: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 28  qlite3_malloc()(
7aa0: 29 2e 20 20 4f 6d 69 74 20 74 68 65 20 69 6e 74  ).  Omit the int
7ab0: 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65  ernal.** %-conve
7ac0: 72 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73  rsion extensions
7ad0: 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..*/.char *sqlit
7ae0: 65 33 5f 6d 70 72 69 6e 74 66 28 63 6f 6e 73 74  e3_mprintf(const
7af0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
7b00: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
7b10: 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 23  ap;.  char *z;.#
7b20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7b30: 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20 69 66  IT_AUTOINIT.  if
7b40: 28 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  ( sqlite3_initia
7b50: 6c 69 7a 65 28 29 20 29 20 72 65 74 75 72 6e 20  lize() ) return 
7b60: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 76 61 5f 73  0;.#endif.  va_s
7b70: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
7b80: 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
7b90: 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61  _vmprintf(zForma
7ba0: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
7bb0: 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a  (ap);.  return z
7bc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74  ;.}../*.** sqlit
7bd0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 20 77 6f  e3_snprintf() wo
7be0: 72 6b 73 20 6c 69 6b 65 20 73 6e 70 72 69 6e 74  rks like snprint
7bf0: 66 28 29 20 65 78 63 65 70 74 20 74 68 61 74 20  f() except that 
7c00: 69 74 20 69 67 6e 6f 72 65 73 20 74 68 65 0a 2a  it ignores the.*
7c10: 2a 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 65  * current locale
7c20: 20 73 65 74 74 69 6e 67 73 2e 20 20 54 68 69 73   settings.  This
7c30: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 66 6f   is important fo
7c40: 72 20 53 51 4c 69 74 65 20 62 65 63 61 75 73 65  r SQLite because
7c50: 20 77 65 0a 2a 2a 20 61 72 65 20 6e 6f 74 20 61   we.** are not a
7c60: 62 6c 65 20 74 6f 20 75 73 65 20 61 20 22 2c 22  ble to use a ","
7c70: 20 61 73 20 74 68 65 20 64 65 63 69 6d 61 6c 20   as the decimal 
7c80: 70 6f 69 6e 74 20 69 6e 20 70 6c 61 63 65 20 6f  point in place o
7c90: 66 20 22 2e 22 20 61 73 0a 2a 2a 20 73 70 65 63  f "." as.** spec
7ca0: 69 66 69 65 64 20 62 79 20 73 6f 6d 65 20 6c 6f  ified by some lo
7cb0: 63 61 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4f 6f 70  cales..**.** Oop
7cc0: 73 3a 20 20 54 68 65 20 66 69 72 73 74 20 74 77  s:  The first tw
7cd0: 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 66 20 73  o arguments of s
7ce0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
7cf0: 29 20 61 72 65 20 62 61 63 6b 77 61 72 64 73 0a  ) are backwards.
7d00: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 73 6e 70 72  ** from the snpr
7d10: 69 6e 74 66 28 29 20 73 74 61 6e 64 61 72 64 2e  intf() standard.
7d20: 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c    Unfortunately,
7d30: 20 69 74 20 69 73 20 74 6f 6f 20 6c 61 74 65 20   it is too late 
7d40: 74 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 68 69  to change.** thi
7d50: 73 20 77 69 74 68 6f 75 74 20 62 72 65 61 6b 69  s without breaki
7d60: 6e 67 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ng compatibility
7d70: 2c 20 73 6f 20 77 65 20 6a 75 73 74 20 68 61 76  , so we just hav
7d80: 65 20 74 6f 20 6c 69 76 65 20 77 69 74 68 20 74  e to live with t
7d90: 68 65 0a 2a 2a 20 6d 69 73 74 61 6b 65 2e 0a 2a  he.** mistake..*
7da0: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 73 6e  *.** sqlite3_vsn
7db0: 70 72 69 6e 74 66 28 29 20 69 73 20 74 68 65 20  printf() is the 
7dc0: 76 61 72 61 72 67 73 20 76 65 72 73 69 6f 6e 2e  varargs version.
7dd0: 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .*/.char *sqlite
7de0: 33 5f 76 73 6e 70 72 69 6e 74 66 28 69 6e 74 20  3_vsnprintf(int 
7df0: 6e 2c 20 63 68 61 72 20 2a 7a 42 75 66 2c 20 63  n, char *zBuf, c
7e00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
7e10: 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29 7b  at, va_list ap){
7e20: 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b  .  StrAccum acc;
7e30: 0a 20 20 69 66 28 20 6e 3c 3d 30 20 29 20 72 65  .  if( n<=0 ) re
7e40: 74 75 72 6e 20 7a 42 75 66 3b 0a 23 69 66 64 65  turn zBuf;.#ifde
7e50: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7e60: 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20  API_ARMOR.  if( 
7e70: 7a 42 75 66 3d 3d 30 20 7c 7c 20 7a 46 6f 72 6d  zBuf==0 || zForm
7e80: 61 74 3d 3d 30 20 29 20 7b 0a 20 20 20 20 28 76  at==0 ) {.    (v
7e90: 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53  oid)SQLITE_MISUS
7ea0: 45 5f 42 4b 50 54 3b 0a 20 20 20 20 69 66 28 20  E_BKPT;.    if( 
7eb0: 7a 42 75 66 20 26 26 20 6e 3e 30 20 29 20 7a 42  zBuf && n>0 ) zB
7ec0: 75 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 72  uf[0] = 0;.    r
7ed0: 65 74 75 72 6e 20 7a 42 75 66 3b 0a 20 20 7d 0a  eturn zBuf;.  }.
7ee0: 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
7ef0: 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63  StrAccumInit(&ac
7f00: 63 2c 20 7a 42 75 66 2c 20 6e 2c 20 30 29 3b 0a  c, zBuf, n, 0);.
7f10: 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20    acc.useMalloc 
7f20: 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 58  = 0;.  sqlite3VX
7f30: 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20  Printf(&acc, 0, 
7f40: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
7f50: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 53 74  return sqlite3St
7f60: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63  rAccumFinish(&ac
7f70: 63 29 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69  c);.}.char *sqli
7f80: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 69 6e 74  te3_snprintf(int
7f90: 20 6e 2c 20 63 68 61 72 20 2a 7a 42 75 66 2c 20   n, char *zBuf, 
7fa0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
7fb0: 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 63 68 61  mat, ...){.  cha
7fc0: 72 20 2a 7a 3b 0a 20 20 76 61 5f 6c 69 73 74 20  r *z;.  va_list 
7fd0: 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61  ap;.  va_start(a
7fe0: 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20  p,zFormat);.  z 
7ff0: 3d 20 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 69  = sqlite3_vsnpri
8000: 6e 74 66 28 6e 2c 20 7a 42 75 66 2c 20 7a 46 6f  ntf(n, zBuf, zFo
8010: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
8020: 65 6e 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72  end(ap);.  retur
8030: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  n z;.}../*.** Th
8040: 69 73 20 69 73 20 74 68 65 20 72 6f 75 74 69 6e  is is the routin
8050: 65 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20  e that actually 
8060: 66 6f 72 6d 61 74 73 20 74 68 65 20 73 71 6c 69  formats the sqli
8070: 74 65 33 5f 6c 6f 67 28 29 20 6d 65 73 73 61 67  te3_log() messag
8080: 65 2e 0a 2a 2a 20 57 65 20 68 6f 75 73 65 20 69  e..** We house i
8090: 74 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 20  t in a separate 
80a0: 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c  routine from sql
80b0: 69 74 65 33 5f 6c 6f 67 28 29 20 74 6f 20 61 76  ite3_log() to av
80c0: 6f 69 64 20 75 73 69 6e 67 0a 2a 2a 20 73 74 61  oid using.** sta
80d0: 63 6b 20 73 70 61 63 65 20 6f 6e 20 73 6d 61 6c  ck space on smal
80e0: 6c 2d 73 74 61 63 6b 20 73 79 73 74 65 6d 73 20  l-stack systems 
80f0: 77 68 65 6e 20 6c 6f 67 67 69 6e 67 20 69 73 20  when logging is 
8100: 64 69 73 61 62 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20  disabled..**.** 
8110: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 6d 75  sqlite3_log() mu
8120: 73 74 20 72 65 6e 64 65 72 20 69 6e 74 6f 20 61  st render into a
8130: 20 73 74 61 74 69 63 20 62 75 66 66 65 72 2e 20   static buffer. 
8140: 20 49 74 20 63 61 6e 6e 6f 74 20 64 79 6e 61 6d   It cannot dynam
8150: 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
8160: 74 65 20 6d 65 6d 6f 72 79 20 62 65 63 61 75 73  te memory becaus
8170: 65 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 61  e it might be ca
8180: 6c 6c 65 64 20 77 68 69 6c 65 20 74 68 65 20 6d  lled while the m
8190: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
81a0: 2a 2a 20 6d 75 74 65 78 20 69 73 20 68 65 6c 64  ** mutex is held
81b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
81c0: 20 72 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69 6e   renderLogMsg(in
81d0: 74 20 69 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73  t iErrCode, cons
81e0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
81f0: 20 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20   va_list ap){.  
8200: 53 74 72 41 63 63 75 6d 20 61 63 63 3b 20 20 20  StrAccum acc;   
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
8230: 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
8240: 20 20 63 68 61 72 20 7a 4d 73 67 5b 53 51 4c 49    char zMsg[SQLI
8250: 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a  TE_PRINT_BUF_SIZ
8260: 45 2a 33 5d 3b 20 20 20 20 2f 2a 20 43 6f 6d 70  E*3];    /* Comp
8270: 6c 65 74 65 20 6c 6f 67 20 6d 65 73 73 61 67 65  lete log message
8280: 20 2a 2f 0a 0a 20 20 73 71 6c 69 74 65 33 53 74   */..  sqlite3St
8290: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c  rAccumInit(&acc,
82a0: 20 7a 4d 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d   zMsg, sizeof(zM
82b0: 73 67 29 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75  sg), 0);.  acc.u
82c0: 73 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  seMalloc = 0;.  
82d0: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
82e0: 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74  &acc, 0, zFormat
82f0: 2c 20 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 33  , ap);.  sqlite3
8300: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
8310: 67 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  g(sqlite3GlobalC
8320: 6f 6e 66 69 67 2e 70 4c 6f 67 41 72 67 2c 20 69  onfig.pLogArg, i
8330: 45 72 72 43 6f 64 65 2c 0a 20 20 20 20 20 20 20  ErrCode,.       
8340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8350: 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63      sqlite3StrAc
8360: 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 29  cumFinish(&acc))
8370: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 6d 61  ;.}../*.** Forma
8380: 74 20 61 6e 64 20 77 72 69 74 65 20 61 20 6d 65  t and write a me
8390: 73 73 61 67 65 20 74 6f 20 74 68 65 20 6c 6f 67  ssage to the log
83a0: 20 69 66 20 6c 6f 67 67 69 6e 67 20 69 73 20 65   if logging is e
83b0: 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20  nabled..*/.void 
83c0: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 69 6e 74 20  sqlite3_log(int 
83d0: 69 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20  iErrCode, const 
83e0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
83f0: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
8400: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8420: 2a 20 56 61 72 61 72 67 20 6c 69 73 74 20 2a 2f  * Vararg list */
8430: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c  .  if( sqlite3Gl
8440: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 20  obalConfig.xLog 
8450: 29 7b 0a 20 20 20 20 76 61 5f 73 74 61 72 74 28  ){.    va_start(
8460: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
8470: 20 20 72 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69    renderLogMsg(i
8480: 45 72 72 43 6f 64 65 2c 20 7a 46 6f 72 6d 61 74  ErrCode, zFormat
8490: 2c 20 61 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e  , ap);.    va_en
84a0: 64 28 61 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69  d(ap);.  }.}..#i
84b0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
84c0: 5f 44 45 42 55 47 29 0a 2f 2a 0a 2a 2a 20 41 20  _DEBUG)./*.** A 
84d0: 76 65 72 73 69 6f 6e 20 6f 66 20 70 72 69 6e 74  version of print
84e0: 66 28 29 20 74 68 61 74 20 75 6e 64 65 72 73 74  f() that underst
84f0: 61 6e 64 73 20 25 6c 6c 64 2e 20 20 55 73 65 64  ands %lld.  Used
8500: 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0a   for debugging..
8510: 2a 2a 20 54 68 65 20 70 72 69 6e 74 66 28 29 20  ** The printf() 
8520: 62 75 69 6c 74 20 69 6e 74 6f 20 73 6f 6d 65 20  built into some 
8530: 76 65 72 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64  versions of wind
8540: 6f 77 73 20 64 6f 65 73 20 6e 6f 74 20 75 6e 64  ows does not und
8550: 65 72 73 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a 20  erstand %lld.** 
8560: 61 6e 64 20 73 65 67 66 61 75 6c 74 73 20 69 66  and segfaults if
8570: 20 79 6f 75 20 67 69 76 65 20 69 74 20 61 20 6c   you give it a l
8580: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a 2f  ong long int..*/
8590: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62  .void sqlite3Deb
85a0: 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
85b0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
85c0: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
85d0: 3b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63  ;.  StrAccum acc
85e0: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30  ;.  char zBuf[50
85f0: 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72  0];.  sqlite3Str
8600: 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20  AccumInit(&acc, 
8610: 7a 42 75 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75  zBuf, sizeof(zBu
8620: 66 29 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73  f), 0);.  acc.us
8630: 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 76  eMalloc = 0;.  v
8640: 61 5f 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d  a_start(ap,zForm
8650: 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58  at);.  sqlite3VX
8660: 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20  Printf(&acc, 0, 
8670: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
8680: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 71  va_end(ap);.  sq
8690: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
86a0: 69 73 68 28 26 61 63 63 29 3b 0a 20 20 66 70 72  ish(&acc);.  fpr
86b0: 69 6e 74 66 28 73 74 64 6f 75 74 2c 22 25 73 22  intf(stdout,"%s"
86c0: 2c 20 7a 42 75 66 29 3b 0a 20 20 66 66 6c 75 73  , zBuf);.  fflus
86d0: 68 28 73 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 6e  h(stdout);.}.#en
86e0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
86f0: 54 45 5f 44 45 42 55 47 0a 2f 2a 2a 2a 2a 2a 2a  TE_DEBUG./******
8700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8720: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8740: 2a 2a 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ***.** Routines 
8750: 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  for implementing
8760: 20 74 68 65 20 22 54 72 65 65 56 69 65 77 22 20   the "TreeView" 
8770: 64 69 73 70 6c 61 79 20 6f 66 20 68 69 65 72 61  display of hiera
8780: 72 63 68 69 63 61 6c 0a 2a 2a 20 64 61 74 61 20  rchical.** data 
8790: 73 74 72 75 63 74 75 72 65 73 20 66 6f 72 20 64  structures for d
87a0: 65 62 75 67 67 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  ebugging..**.** 
87b0: 54 68 65 20 6d 61 69 6e 20 65 6e 74 72 79 20 70  The main entry p
87c0: 6f 69 6e 74 73 20 28 63 6f 64 65 64 20 65 6c 73  oints (coded els
87d0: 65 77 68 65 72 65 29 20 61 72 65 3a 0a 2a 2a 20  ewhere) are:.** 
87e0: 20 20 20 20 73 71 6c 69 74 65 33 54 72 65 65 56      sqlite3TreeV
87f0: 69 65 77 45 78 70 72 28 30 2c 20 70 45 78 70 72  iewExpr(0, pExpr
8800: 2c 20 30 29 3b 0a 2a 2a 20 20 20 20 20 73 71 6c  , 0);.**     sql
8810: 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
8820: 4c 69 73 74 28 30 2c 20 70 4c 69 73 74 2c 20 30  List(0, pList, 0
8830: 2c 20 30 29 3b 0a 2a 2a 20 20 20 20 20 73 71 6c  , 0);.**     sql
8840: 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
8850: 63 74 28 30 2c 20 70 53 65 6c 65 63 74 2c 20 30  ct(0, pSelect, 0
8860: 29 3b 0a 2a 2a 20 49 6e 73 65 72 74 20 63 61 6c  );.** Insert cal
8870: 6c 73 20 74 6f 20 74 68 6f 73 65 20 72 6f 75 74  ls to those rout
8880: 69 6e 65 73 20 77 68 69 6c 65 20 64 65 62 75 67  ines while debug
8890: 67 69 6e 67 20 69 6e 20 6f 72 64 65 72 20 74 6f  ging in order to
88a0: 20 64 69 73 70 6c 61 79 0a 2a 2a 20 61 20 64 69   display.** a di
88b0: 61 67 72 61 6d 20 6f 66 20 45 78 70 72 2c 20 45  agram of Expr, E
88c0: 78 70 72 4c 69 73 74 2c 20 61 6e 64 20 53 65 6c  xprList, and Sel
88d0: 65 63 74 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  ect objects..**.
88e0: 2a 2f 0a 2f 2a 20 41 64 64 20 61 20 6e 65 77 20  */./* Add a new 
88f0: 73 75 62 69 74 65 6d 20 74 6f 20 74 68 65 20 74  subitem to the t
8900: 72 65 65 2e 20 20 54 68 65 20 6d 6f 72 65 54 6f  ree.  The moreTo
8910: 46 6f 6c 6c 6f 77 20 66 6c 61 67 20 69 6e 64 69  Follow flag indi
8920: 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
8930: 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 6c 61  ** is not the la
8940: 73 74 20 69 74 65 6d 20 69 6e 20 74 68 65 20 74  st item in the t
8950: 72 65 65 2e 20 2a 2f 0a 54 72 65 65 56 69 65 77  ree. */.TreeView
8960: 20 2a 73 71 6c 69 74 65 33 54 72 65 65 56 69 65   *sqlite3TreeVie
8970: 77 50 75 73 68 28 54 72 65 65 56 69 65 77 20 2a  wPush(TreeView *
8980: 70 2c 20 75 38 20 6d 6f 72 65 54 6f 46 6f 6c 6c  p, u8 moreToFoll
8990: 6f 77 29 7b 0a 20 20 69 66 28 20 70 3d 3d 30 20  ow){.  if( p==0 
89a0: 29 7b 0a 20 20 20 20 70 20 3d 20 73 71 6c 69 74  ){.    p = sqlit
89b0: 65 33 5f 6d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f  e3_malloc( sizeo
89c0: 66 28 2a 70 29 20 29 3b 0a 20 20 20 20 69 66 28  f(*p) );.    if(
89d0: 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30   p==0 ) return 0
89e0: 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20  ;.    memset(p, 
89f0: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
8a00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
8a10: 69 4c 65 76 65 6c 2b 2b 3b 0a 20 20 7d 0a 20 20  iLevel++;.  }.  
8a20: 61 73 73 65 72 74 28 20 6d 6f 72 65 54 6f 46 6f  assert( moreToFo
8a30: 6c 6c 6f 77 3d 3d 30 20 7c 7c 20 6d 6f 72 65 54  llow==0 || moreT
8a40: 6f 46 6f 6c 6c 6f 77 3d 3d 31 20 29 3b 0a 20 20  oFollow==1 );.  
8a50: 69 66 28 20 70 2d 3e 69 4c 65 76 65 6c 3c 73 69  if( p->iLevel<si
8a60: 7a 65 6f 66 28 70 2d 3e 62 4c 69 6e 65 29 20 29  zeof(p->bLine) )
8a70: 20 70 2d 3e 62 4c 69 6e 65 5b 70 2d 3e 69 4c 65   p->bLine[p->iLe
8a80: 76 65 6c 5d 20 3d 20 6d 6f 72 65 54 6f 46 6f 6c  vel] = moreToFol
8a90: 6c 6f 77 3b 0a 20 20 72 65 74 75 72 6e 20 70 3b  low;.  return p;
8aa0: 0a 7d 0a 2f 2a 20 46 69 6e 69 73 68 65 64 20 77  .}./* Finished w
8ab0: 69 74 68 20 6f 6e 65 20 6c 61 79 65 72 20 6f 66  ith one layer of
8ac0: 20 74 68 65 20 74 72 65 65 20 2a 2f 0a 76 6f 69   the tree */.voi
8ad0: 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
8ae0: 77 50 6f 70 28 54 72 65 65 56 69 65 77 20 2a 70  wPop(TreeView *p
8af0: 29 7b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 20  ){.  if( p==0 ) 
8b00: 72 65 74 75 72 6e 3b 0a 20 20 70 2d 3e 69 4c 65  return;.  p->iLe
8b10: 76 65 6c 2d 2d 3b 0a 20 20 69 66 28 20 70 2d 3e  vel--;.  if( p->
8b20: 69 4c 65 76 65 6c 3c 30 20 29 20 73 71 6c 69 74  iLevel<0 ) sqlit
8b30: 65 33 5f 66 72 65 65 28 70 29 3b 0a 7d 0a 2f 2a  e3_free(p);.}./*
8b40: 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
8b50: 6c 65 20 6c 69 6e 65 20 6f 66 20 6f 75 74 70 75  le line of outpu
8b60: 74 20 66 6f 72 20 74 68 65 20 74 72 65 65 2c 20  t for the tree, 
8b70: 77 69 74 68 20 61 20 70 72 65 66 69 78 20 74 68  with a prefix th
8b80: 61 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61  at contains.** a
8b90: 6c 6c 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  ll the appropria
8ba0: 74 65 20 74 72 65 65 20 6c 69 6e 65 73 20 2a 2f  te tree lines */
8bb0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65  .void sqlite3Tre
8bc0: 65 56 69 65 77 4c 69 6e 65 28 54 72 65 65 56 69  eViewLine(TreeVi
8bd0: 65 77 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61  ew *p, const cha
8be0: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
8bf0: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
8c00: 20 20 69 6e 74 20 69 3b 0a 20 20 53 74 72 41 63    int i;.  StrAc
8c10: 63 75 6d 20 61 63 63 3b 0a 20 20 63 68 61 72 20  cum acc;.  char 
8c20: 7a 42 75 66 5b 35 30 30 5d 3b 0a 20 20 73 71 6c  zBuf[500];.  sql
8c30: 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
8c40: 28 26 61 63 63 2c 20 7a 42 75 66 2c 20 73 69 7a  (&acc, zBuf, siz
8c50: 65 6f 66 28 7a 42 75 66 29 2c 20 30 29 3b 0a 20  eof(zBuf), 0);. 
8c60: 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d   acc.useMalloc =
8c70: 20 30 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20   0;.  if( p ){. 
8c80: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
8c90: 3e 69 4c 65 76 65 6c 20 26 26 20 69 3c 73 69 7a  >iLevel && i<siz
8ca0: 65 6f 66 28 70 2d 3e 62 4c 69 6e 65 29 2d 31 3b  eof(p->bLine)-1;
8cb0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
8cc0: 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
8cd0: 6e 64 28 26 61 63 63 2c 20 70 2d 3e 62 4c 69 6e  nd(&acc, p->bLin
8ce0: 65 5b 69 5d 20 3f 20 22 7c 20 20 20 22 20 3a 20  e[i] ? "|   " : 
8cf0: 22 20 20 20 20 22 2c 20 34 29 3b 0a 20 20 20 20  "    ", 4);.    
8d00: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 53 74 72  }.    sqlite3Str
8d10: 41 63 63 75 6d 41 70 70 65 6e 64 28 26 61 63 63  AccumAppend(&acc
8d20: 2c 20 70 2d 3e 62 4c 69 6e 65 5b 69 5d 20 3f 20  , p->bLine[i] ? 
8d30: 22 7c 2d 2d 20 22 20 3a 20 22 27 2d 2d 20 22 2c  "|-- " : "'-- ",
8d40: 20 34 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 73 74   4);.  }.  va_st
8d50: 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29  art(ap, zFormat)
8d60: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
8d70: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f  ntf(&acc, 0, zFo
8d80: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
8d90: 65 6e 64 28 61 70 29 3b 0a 20 20 69 66 28 20 7a  end(ap);.  if( z
8da0: 42 75 66 5b 61 63 63 2e 6e 43 68 61 72 2d 31 5d  Buf[acc.nChar-1]
8db0: 21 3d 27 5c 6e 27 20 29 20 73 71 6c 69 74 65 33  !='\n' ) sqlite3
8dc0: 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 26  StrAccumAppend(&
8dd0: 61 63 63 2c 20 22 5c 6e 22 2c 20 31 29 3b 0a 20  acc, "\n", 1);. 
8de0: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
8df0: 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20  Finish(&acc);.  
8e00: 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 22  fprintf(stdout,"
8e10: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 66 66  %s", zBuf);.  ff
8e20: 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 7d 0a  lush(stdout);.}.
8e30: 2f 2a 20 53 68 6f 72 74 68 61 6e 64 20 66 6f 72  /* Shorthand for
8e40: 20 73 74 61 72 74 69 6e 67 20 61 20 6e 65 77 20   starting a new 
8e50: 74 72 65 65 20 69 74 65 6d 20 74 68 61 74 20 63  tree item that c
8e60: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e  onsists of a sin
8e70: 67 6c 65 20 6c 61 62 65 6c 20 2a 2f 0a 76 6f 69  gle label */.voi
8e80: 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
8e90: 77 49 74 65 6d 28 54 72 65 65 56 69 65 77 20 2a  wItem(TreeView *
8ea0: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
8eb0: 4c 61 62 65 6c 2c 20 75 38 20 6d 6f 72 65 54 6f  Label, u8 moreTo
8ec0: 46 6f 6c 6c 6f 77 29 7b 0a 20 20 70 20 3d 20 73  Follow){.  p = s
8ed0: 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 50 75  qlite3TreeViewPu
8ee0: 73 68 28 70 2c 20 6d 6f 72 65 54 6f 46 6f 6c 6c  sh(p, moreToFoll
8ef0: 6f 77 29 3b 0a 20 20 73 71 6c 69 74 65 33 54 72  ow);.  sqlite3Tr
8f00: 65 65 56 69 65 77 4c 69 6e 65 28 70 2c 20 22 25  eeViewLine(p, "%
8f10: 73 22 2c 20 7a 4c 61 62 65 6c 29 3b 0a 7d 0a 23  s", zLabel);.}.#
8f20: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
8f30: 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
8f40: 76 61 72 69 61 62 6c 65 2d 61 72 67 75 6d 65 6e  variable-argumen
8f50: 74 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  t wrapper around
8f60: 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
8f70: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ()..*/.void sqli
8f80: 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
8f90: 63 75 6d 20 2a 70 2c 20 75 33 32 20 62 46 6c 61  cum *p, u32 bFla
8fa0: 67 73 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  gs, const char *
8fb0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
8fc0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76   va_list ap;.  v
8fd0: 61 5f 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d  a_start(ap,zForm
8fe0: 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58  at);.  sqlite3VX
8ff0: 50 72 69 6e 74 66 28 70 2c 20 62 46 6c 61 67 73  Printf(p, bFlags
9000: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
9010: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d 0a    va_end(ap);.}.