/ Hex Artifact Content
Login

Artifact 2e984b2507291a7e16d89dc9bb60582904f6247d:


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 20 24 49 64 3a 20 70 72 69 6e 74 66 2e 63 2c  * $Id: printf.c,
0170: 76 20 31 2e 39 33 20 32 30 30 38 2f 30 37 2f 32  v 1.93 2008/07/2
0180: 38 20 31 39 3a 33 34 3a 35 33 20 64 72 68 20 45  8 19:34:53 drh E
0190: 78 70 20 24 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  xp $.**.********
01a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01e0: 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  **.**.** The fol
01f0: 6c 6f 77 69 6e 67 20 6d 6f 64 75 6c 65 73 20 69  lowing modules i
0200: 73 20 61 6e 20 65 6e 68 61 6e 63 65 64 20 72 65  s an enhanced re
0210: 70 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20 74 68  placement for th
0220: 65 20 22 70 72 69 6e 74 66 22 20 73 75 62 72 6f  e "printf" subro
0230: 75 74 69 6e 65 73 0a 2a 2a 20 66 6f 75 6e 64 20  utines.** found 
0240: 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  in the standard 
0250: 43 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65 20  C library.  The 
0260: 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 68 61 6e 63  following enhanc
0270: 65 6d 65 6e 74 73 20 61 72 65 0a 2a 2a 20 73 75  ements are.** su
0280: 70 70 6f 72 74 65 64 3a 0a 2a 2a 0a 2a 2a 20 20  pported:.**.**  
0290: 20 20 20 20 2b 20 20 41 64 64 69 74 69 6f 6e 61      +  Additiona
02a0: 6c 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68  l functions.  Th
02b0: 65 20 73 74 61 6e 64 61 72 64 20 73 65 74 20 6f  e standard set o
02c0: 66 20 22 70 72 69 6e 74 66 22 20 66 75 6e 63 74  f "printf" funct
02d0: 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ions.**         
02e0: 69 6e 63 6c 75 64 65 73 20 70 72 69 6e 74 66 2c  includes printf,
02f0: 20 66 70 72 69 6e 74 66 2c 20 73 70 72 69 6e 74   fprintf, sprint
0300: 66 2c 20 76 70 72 69 6e 74 66 2c 20 76 66 70 72  f, vprintf, vfpr
0310: 69 6e 74 66 2c 20 61 6e 64 0a 2a 2a 20 20 20 20  intf, and.**    
0320: 20 20 20 20 20 76 73 70 72 69 6e 74 66 2e 20 20       vsprintf.  
0330: 54 68 69 73 20 6d 6f 64 75 6c 65 20 61 64 64 73  This module adds
0340: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a   the following:.
0350: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  **.**           
0360: 2a 20 20 73 6e 70 72 69 6e 74 66 20 2d 2d 20 57  *  snprintf -- W
0370: 6f 72 6b 73 20 6c 69 6b 65 20 73 70 72 69 6e 74  orks like sprint
0380: 66 2c 20 62 75 74 20 68 61 73 20 61 6e 20 65 78  f, but has an ex
0390: 74 72 61 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20  tra argument.** 
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03b0: 20 20 20 20 20 20 20 20 20 77 68 69 63 68 20 69           which i
03c0: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
03d0: 65 20 62 75 66 66 65 72 20 77 72 69 74 74 65 6e  e buffer written
03e0: 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20   to..**.**      
03f0: 20 20 20 20 20 2a 20 20 6d 70 72 69 6e 74 66 20       *  mprintf 
0400: 2d 2d 20 20 53 69 6d 69 6c 61 72 20 74 6f 20 73  --  Similar to s
0410: 70 72 69 6e 74 66 2e 20 20 57 72 69 74 65 73 20  printf.  Writes 
0420: 6f 75 74 70 75 74 20 74 6f 20 6d 65 6d 6f 72 79  output to memory
0430: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
0440: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 74               obt
0450: 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
0460: 63 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  c..**.**        
0470: 20 20 20 2a 20 20 78 70 72 69 6e 74 66 20 2d 2d     *  xprintf --
0480: 20 20 43 61 6c 6c 73 20 61 20 66 75 6e 63 74 69    Calls a functi
0490: 6f 6e 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66  on to dispose of
04a0: 20 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 20   output..**.**  
04b0: 20 20 20 20 20 20 20 20 20 2a 20 20 6e 70 72 69           *  npri
04c0: 6e 74 66 20 2d 2d 20 20 4e 6f 20 6f 75 74 70 75  ntf --  No outpu
04d0: 74 2c 20 62 75 74 20 72 65 74 75 72 6e 73 20 74  t, but returns t
04e0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  he number of cha
04f0: 72 61 63 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  racters.**      
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20 68      that would h
0520: 61 76 65 20 62 65 65 6e 20 6f 75 74 70 75 74 20  ave been output 
0530: 62 79 20 70 72 69 6e 74 66 2e 0a 2a 2a 0a 2a 2a  by printf..**.**
0540: 20 20 20 20 20 20 20 20 20 20 20 2a 20 20 41 20             *  A 
0550: 76 2d 20 76 65 72 73 69 6f 6e 20 28 65 78 3a 20  v- version (ex: 
0560: 76 73 6e 70 72 69 6e 74 66 29 20 6f 66 20 65 76  vsnprintf) of ev
0570: 65 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ery function is 
0580: 61 6c 73 6f 0a 2a 2a 20 20 20 20 20 20 20 20 20  also.**         
0590: 20 20 20 20 20 73 75 70 70 6c 69 65 64 2e 0a 2a       supplied..*
05a0: 2a 0a 2a 2a 20 20 20 20 20 20 2b 20 20 41 20 66  *.**      +  A f
05b0: 65 77 20 65 78 74 65 6e 73 69 6f 6e 73 20 74 6f  ew extensions to
05c0: 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   the formatting 
05d0: 6e 6f 74 61 74 69 6f 6e 20 61 72 65 20 73 75 70  notation are sup
05e0: 70 6f 72 74 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20  ported:.**.**   
05f0: 20 20 20 20 20 20 20 20 2a 20 20 54 68 65 20 22          *  The "
0600: 3d 22 20 66 6c 61 67 20 28 73 69 6d 69 6c 61 72  =" flag (similar
0610: 20 74 6f 20 22 2d 22 29 20 63 61 75 73 65 73 20   to "-") causes 
0620: 74 68 65 20 6f 75 74 70 75 74 20 74 6f 20 62 65  the output to be
0630: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
0640: 20 62 65 20 63 65 6e 74 65 72 65 64 20 69 6e 20   be centered in 
0650: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 6c  the appropriatel
0660: 79 20 73 69 7a 65 64 20 66 69 65 6c 64 2e 0a 2a  y sized field..*
0670: 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a  *.**           *
0680: 20 20 54 68 65 20 25 62 20 66 69 65 6c 64 20 6f    The %b field o
0690: 75 74 70 75 74 73 20 61 6e 20 69 6e 74 65 67 65  utputs an intege
06a0: 72 20 69 6e 20 62 69 6e 61 72 79 20 6e 6f 74 61  r in binary nota
06b0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  tion..**.**     
06c0: 20 20 20 20 20 20 2a 20 20 54 68 65 20 25 63 20        *  The %c 
06d0: 66 69 65 6c 64 20 6e 6f 77 20 61 63 63 65 70 74  field now accept
06e0: 73 20 61 20 70 72 65 63 69 73 69 6f 6e 2e 20 20  s a precision.  
06f0: 54 68 65 20 63 68 61 72 61 63 74 65 72 20 6f 75  The character ou
0700: 74 70 75 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  tput.**         
0710: 20 20 20 20 20 69 73 20 72 65 70 65 61 74 65 64       is repeated
0720: 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
0730: 66 20 74 69 6d 65 73 20 74 68 65 20 70 72 65 63  f times the prec
0740: 69 73 69 6f 6e 20 73 70 65 63 69 66 69 65 73 2e  ision specifies.
0750: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
0760: 20 2a 20 20 54 68 65 20 25 27 20 66 69 65 6c 64   *  The %' field
0770: 20 77 6f 72 6b 73 20 6c 69 6b 65 20 25 63 2c 20   works like %c, 
0780: 62 75 74 20 74 61 6b 65 73 20 61 73 20 69 74 73  but takes as its
0790: 20 63 68 61 72 61 63 74 65 72 20 74 68 65 0a 2a   character the.*
07a0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  *              n
07b0: 65 78 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  ext character of
07c0: 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69   the format stri
07d0: 6e 67 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 74  ng, instead of t
07e0: 68 65 20 6e 65 78 74 0a 2a 2a 20 20 20 20 20 20  he next.**      
07f0: 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
0800: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
0810: 20 70 72 69 6e 74 66 28 22 25 2e 37 38 27 2d 22   printf("%.78'-"
0820: 29 20 20 70 72 69 6e 74 73 20 37 38 20 6d 69 6e  )  prints 78 min
0830: 75 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  us.**           
0840: 20 20 20 73 69 67 6e 73 2c 20 74 68 65 20 73 61     signs, the sa
0850: 6d 65 20 61 73 20 20 70 72 69 6e 74 66 28 22 25  me as  printf("%
0860: 2e 37 38 63 22 2c 27 2d 27 29 2e 0a 2a 2a 0a 2a  .78c",'-')..**.*
0870: 2a 20 20 20 20 20 20 2b 20 20 57 68 65 6e 20 63  *      +  When c
0880: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 47 43  ompiled using GC
0890: 43 20 6f 6e 20 61 20 53 50 41 52 43 2c 20 74 68  C on a SPARC, th
08a0: 69 73 20 76 65 72 73 69 6f 6e 20 6f 66 20 70 72  is version of pr
08b0: 69 6e 74 66 20 69 73 0a 2a 2a 20 20 20 20 20 20  intf is.**      
08c0: 20 20 20 66 61 73 74 65 72 20 74 68 61 6e 20 74     faster than t
08d0: 68 65 20 6c 69 62 72 61 72 79 20 70 72 69 6e 74  he library print
08e0: 66 20 66 6f 72 20 53 55 4e 20 4f 53 20 34 2e 31  f for SUN OS 4.1
08f0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20 20  ..**.**      +  
0900: 41 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  All functions ar
0910: 65 20 66 75 6c 6c 79 20 72 65 65 6e 74 72 61 6e  e fully reentran
0920: 74 2e 0a 2a 2a 0a 2a 2f 0a 23 69 6e 63 6c 75 64  t..**.*/.#includ
0930: 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a  e "sqliteInt.h".
0940: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 73 69 6f  ./*.** Conversio
0950: 6e 20 74 79 70 65 73 20 66 61 6c 6c 20 69 6e 74  n types fall int
0960: 6f 20 76 61 72 69 6f 75 73 20 63 61 74 65 67 6f  o various catego
0970: 72 69 65 73 20 61 73 20 64 65 66 69 6e 65 64 20  ries as defined 
0980: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
0990: 69 6e 67 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e  ing enumeration.
09a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 52 41  .*/.#define etRA
09b0: 44 49 58 20 20 20 20 20 20 20 31 20 2f 2a 20 49  DIX       1 /* I
09c0: 6e 74 65 67 65 72 20 74 79 70 65 73 2e 20 20 25  nteger types.  %
09d0: 64 2c 20 25 78 2c 20 25 6f 2c 20 61 6e 64 20 73  d, %x, %o, and s
09e0: 6f 20 66 6f 72 74 68 20 2a 2f 0a 23 64 65 66 69  o forth */.#defi
09f0: 6e 65 20 65 74 46 4c 4f 41 54 20 20 20 20 20 20  ne etFLOAT      
0a00: 20 32 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 70   2 /* Floating p
0a10: 6f 69 6e 74 2e 20 20 25 66 20 2a 2f 0a 23 64 65  oint.  %f */.#de
0a20: 66 69 6e 65 20 65 74 45 58 50 20 20 20 20 20 20  fine etEXP      
0a30: 20 20 20 33 20 2f 2a 20 45 78 70 6f 6e 65 6e 74     3 /* Exponent
0a40: 69 6f 6e 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 20  ional notation. 
0a50: 25 65 20 61 6e 64 20 25 45 20 2a 2f 0a 23 64 65  %e and %E */.#de
0a60: 66 69 6e 65 20 65 74 47 45 4e 45 52 49 43 20 20  fine etGENERIC  
0a70: 20 20 20 34 20 2f 2a 20 46 6c 6f 61 74 69 6e 67     4 /* Floating
0a80: 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 2c   or exponential,
0a90: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 65 78   depending on ex
0aa0: 70 6f 6e 65 6e 74 2e 20 25 67 20 2a 2f 0a 23 64  ponent. %g */.#d
0ab0: 65 66 69 6e 65 20 65 74 53 49 5a 45 20 20 20 20  efine etSIZE    
0ac0: 20 20 20 20 35 20 2f 2a 20 52 65 74 75 72 6e 20      5 /* Return 
0ad0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  number of charac
0ae0: 74 65 72 73 20 70 72 6f 63 65 73 73 65 64 20 73  ters processed s
0af0: 6f 20 66 61 72 2e 20 25 6e 20 2a 2f 0a 23 64 65  o far. %n */.#de
0b00: 66 69 6e 65 20 65 74 53 54 52 49 4e 47 20 20 20  fine etSTRING   
0b10: 20 20 20 36 20 2f 2a 20 53 74 72 69 6e 67 73 2e     6 /* Strings.
0b20: 20 25 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %s */.#define e
0b30: 74 44 59 4e 53 54 52 49 4e 47 20 20 20 37 20 2f  tDYNSTRING   7 /
0b40: 2a 20 44 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * Dynamically al
0b50: 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67 73 2e  located strings.
0b60: 20 25 7a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %z */.#define e
0b70: 74 50 45 52 43 45 4e 54 20 20 20 20 20 38 20 2f  tPERCENT     8 /
0b80: 2a 20 50 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  * Percent symbol
0b90: 2e 20 25 25 20 2a 2f 0a 23 64 65 66 69 6e 65 20  . %% */.#define 
0ba0: 65 74 43 48 41 52 58 20 20 20 20 20 20 20 39 20  etCHARX       9 
0bb0: 2f 2a 20 43 68 61 72 61 63 74 65 72 73 2e 20 25  /* Characters. %
0bc0: 63 20 2a 2f 0a 2f 2a 20 54 68 65 20 72 65 73 74  c */./* The rest
0bd0: 20 61 72 65 20 65 78 74 65 6e 73 69 6f 6e 73 2c   are extensions,
0be0: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 66 6f   not normally fo
0bf0: 75 6e 64 20 69 6e 20 70 72 69 6e 74 66 28 29 20  und in printf() 
0c00: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 51 4c  */.#define etSQL
0c10: 45 53 43 41 50 45 20 20 31 30 20 2f 2a 20 53 74  ESCAPE  10 /* St
0c20: 72 69 6e 67 73 20 77 69 74 68 20 27 5c 27 27 20  rings with '\'' 
0c30: 64 6f 75 62 6c 65 64 2e 20 20 25 71 20 2a 2f 0a  doubled.  %q */.
0c40: 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45 53 43  #define etSQLESC
0c50: 41 50 45 32 20 31 31 20 2f 2a 20 53 74 72 69 6e  APE2 11 /* Strin
0c60: 67 73 20 77 69 74 68 20 27 5c 27 27 20 64 6f 75  gs with '\'' dou
0c70: 62 6c 65 64 20 61 6e 64 20 65 6e 63 6c 6f 73 65  bled and enclose
0c80: 64 20 69 6e 20 27 27 2c 0a 20 20 20 20 20 20 20  d in '',.       
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ca0: 20 20 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 73     NULL pointers
0cb0: 20 72 65 70 6c 61 63 65 64 20 62 79 20 53 51 4c   replaced by SQL
0cc0: 20 4e 55 4c 4c 2e 20 20 25 51 20 2a 2f 0a 23 64   NULL.  %Q */.#d
0cd0: 65 66 69 6e 65 20 65 74 54 4f 4b 45 4e 20 20 20  efine etTOKEN   
0ce0: 20 20 20 31 32 20 2f 2a 20 61 20 70 6f 69 6e 74     12 /* a point
0cf0: 65 72 20 74 6f 20 61 20 54 6f 6b 65 6e 20 73 74  er to a Token st
0d00: 72 75 63 74 75 72 65 20 2a 2f 0a 23 64 65 66 69  ructure */.#defi
0d10: 6e 65 20 65 74 53 52 43 4c 49 53 54 20 20 20 20  ne etSRCLIST    
0d20: 31 33 20 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20  13 /* a pointer 
0d30: 74 6f 20 61 20 53 72 63 4c 69 73 74 20 2a 2f 0a  to a SrcList */.
0d40: 23 64 65 66 69 6e 65 20 65 74 50 4f 49 4e 54 45  #define etPOINTE
0d50: 52 20 20 20 20 31 34 20 2f 2a 20 54 68 65 20 25  R    14 /* The %
0d60: 70 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a  p conversion */.
0d70: 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45 53 43  #define etSQLESC
0d80: 41 50 45 33 20 31 35 20 2f 2a 20 25 77 20 2d 3e  APE3 15 /* %w ->
0d90: 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27 5c   Strings with '\
0da0: 22 27 20 64 6f 75 62 6c 65 64 20 2a 2f 0a 23 64  "' doubled */.#d
0db0: 65 66 69 6e 65 20 65 74 4f 52 44 49 4e 41 4c 20  efine etORDINAL 
0dc0: 20 20 20 31 36 20 2f 2a 20 25 72 20 2d 3e 20 31     16 /* %r -> 1
0dd0: 73 74 2c 20 32 6e 64 2c 20 33 72 64 2c 20 34 74  st, 2nd, 3rd, 4t
0de0: 68 2c 20 65 74 63 2e 20 20 45 6e 67 6c 69 73 68  h, etc.  English
0df0: 20 6f 6e 6c 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   only */.../*.**
0e00: 20 41 6e 20 22 65 74 42 79 74 65 22 20 69 73 20   An "etByte" is 
0e10: 61 6e 20 38 2d 62 69 74 20 75 6e 73 69 67 6e 65  an 8-bit unsigne
0e20: 64 20 76 61 6c 75 65 2e 0a 2a 2f 0a 74 79 70 65  d value..*/.type
0e30: 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
0e40: 72 20 65 74 42 79 74 65 3b 0a 0a 2f 2a 0a 2a 2a  r etByte;../*.**
0e50: 20 45 61 63 68 20 62 75 69 6c 74 69 6e 20 63 6f   Each builtin co
0e60: 6e 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74  nversion charact
0e70: 65 72 20 28 65 78 3a 20 74 68 65 20 27 64 27 20  er (ex: the 'd' 
0e80: 69 6e 20 22 25 64 22 29 20 69 73 20 64 65 73 63  in "%d") is desc
0e90: 72 69 62 65 64 0a 2a 2a 20 62 79 20 61 6e 20 69  ribed.** by an i
0ea0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
0eb0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
0ec0: 72 65 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  re.*/.typedef st
0ed0: 72 75 63 74 20 65 74 5f 69 6e 66 6f 20 7b 20 20  ruct et_info {  
0ee0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
0ef0: 61 62 6f 75 74 20 65 61 63 68 20 66 6f 72 6d 61  about each forma
0f00: 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 63 68 61  t field */.  cha
0f10: 72 20 66 6d 74 74 79 70 65 3b 20 20 20 20 20 20  r fmttype;      
0f20: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 72        /* The for
0f30: 6d 61 74 20 66 69 65 6c 64 20 63 6f 64 65 20 6c  mat field code l
0f40: 65 74 74 65 72 20 2a 2f 0a 20 20 65 74 42 79 74  etter */.  etByt
0f50: 65 20 62 61 73 65 3b 20 20 20 20 20 20 20 20 20  e base;         
0f60: 20 20 20 20 2f 2a 20 54 68 65 20 62 61 73 65 20      /* The base 
0f70: 66 6f 72 20 72 61 64 69 78 20 63 6f 6e 76 65 72  for radix conver
0f80: 73 69 6f 6e 20 2a 2f 0a 20 20 65 74 42 79 74 65  sion */.  etByte
0f90: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
0fa0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
0fb0: 65 20 6f 66 20 46 4c 41 47 5f 20 63 6f 6e 73 74  e of FLAG_ const
0fc0: 61 6e 74 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  ants below */.  
0fd0: 65 74 42 79 74 65 20 74 79 70 65 3b 20 20 20 20  etByte type;    
0fe0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76           /* Conv
0ff0: 65 72 73 69 6f 6e 20 70 61 72 61 64 69 67 6d 20  ersion paradigm 
1000: 2a 2f 0a 20 20 65 74 42 79 74 65 20 63 68 61 72  */.  etByte char
1010: 73 65 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  set;          /*
1020: 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 61 44 69   Offset into aDi
1030: 67 69 74 73 5b 5d 20 6f 66 20 74 68 65 20 64 69  gits[] of the di
1040: 67 69 74 73 20 73 74 72 69 6e 67 20 2a 2f 0a 20  gits string */. 
1050: 20 65 74 42 79 74 65 20 70 72 65 66 69 78 3b 20   etByte prefix; 
1060: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66            /* Off
1070: 73 65 74 20 69 6e 74 6f 20 61 50 72 65 66 69 78  set into aPrefix
1080: 5b 5d 20 6f 66 20 74 68 65 20 70 72 65 66 69 78  [] of the prefix
1090: 20 73 74 72 69 6e 67 20 2a 2f 0a 7d 20 65 74 5f   string */.} et_
10a0: 69 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  info;../*.** All
10b0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
10c0: 65 74 5f 69 6e 66 6f 2e 66 6c 61 67 73 0a 2a 2f  et_info.flags.*/
10d0: 0a 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 49  .#define FLAG_SI
10e0: 47 4e 45 44 20 20 31 20 20 20 20 20 2f 2a 20 54  GNED  1     /* T
10f0: 72 75 65 20 69 66 20 74 68 65 20 76 61 6c 75 65  rue if the value
1100: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 73 20 73   to convert is s
1110: 69 67 6e 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  igned */.#define
1120: 20 46 4c 41 47 5f 49 4e 54 45 52 4e 20 20 32 20   FLAG_INTERN  2 
1130: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66      /* True if f
1140: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20  or internal use 
1150: 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1160: 46 4c 41 47 5f 53 54 52 49 4e 47 20 20 34 20 20  FLAG_STRING  4  
1170: 20 20 20 2f 2a 20 41 6c 6c 6f 77 20 69 6e 66 69     /* Allow infi
1180: 6e 69 74 79 20 70 72 65 63 69 73 69 6f 6e 20 2a  nity precision *
1190: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  /.../*.** The fo
11a0: 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 69 73  llowing table is
11b0: 20 73 65 61 72 63 68 65 64 20 6c 69 6e 65 61 72   searched linear
11c0: 6c 79 2c 20 73 6f 20 69 74 20 69 73 20 67 6f 6f  ly, so it is goo
11d0: 64 20 74 6f 20 70 75 74 20 74 68 65 0a 2a 2a 20  d to put the.** 
11e0: 6d 6f 73 74 20 66 72 65 71 75 65 6e 74 6c 79 20  most frequently 
11f0: 75 73 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20  used conversion 
1200: 74 79 70 65 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  types first..*/.
1210: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
1220: 72 20 61 44 69 67 69 74 73 5b 5d 20 3d 20 22 30  r aDigits[] = "0
1230: 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 30  123456789ABCDEF0
1240: 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 22  123456789abcdef"
1250: 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63  ;.static const c
1260: 68 61 72 20 61 50 72 65 66 69 78 5b 5d 20 3d 20  har aPrefix[] = 
1270: 22 2d 78 30 5c 30 30 30 58 30 22 3b 0a 73 74 61  "-x0\000X0";.sta
1280: 74 69 63 20 63 6f 6e 73 74 20 65 74 5f 69 6e 66  tic const et_inf
1290: 6f 20 66 6d 74 69 6e 66 6f 5b 5d 20 3d 20 7b 0a  o fmtinfo[] = {.
12a0: 20 20 7b 20 20 27 64 27 2c 20 31 30 2c 20 31 2c    {  'd', 10, 1,
12b0: 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30   etRADIX,      0
12c0: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 73 27  ,  0 },.  {  's'
12d0: 2c 20 20 30 2c 20 34 2c 20 65 74 53 54 52 49 4e  ,  0, 4, etSTRIN
12e0: 47 2c 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  G,     0,  0 },.
12f0: 20 20 7b 20 20 27 67 27 2c 20 20 30 2c 20 31 2c    {  'g',  0, 1,
1300: 20 65 74 47 45 4e 45 52 49 43 2c 20 20 20 20 33   etGENERIC,    3
1310: 30 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 7a 27  0, 0 },.  {  'z'
1320: 2c 20 20 30 2c 20 34 2c 20 65 74 44 59 4e 53 54  ,  0, 4, etDYNST
1330: 52 49 4e 47 2c 20 20 30 2c 20 20 30 20 7d 2c 0a  RING,  0,  0 },.
1340: 20 20 7b 20 20 27 71 27 2c 20 20 30 2c 20 34 2c    {  'q',  0, 4,
1350: 20 65 74 53 51 4c 45 53 43 41 50 45 2c 20 20 30   etSQLESCAPE,  0
1360: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 51 27  ,  0 },.  {  'Q'
1370: 2c 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53  ,  0, 4, etSQLES
1380: 43 41 50 45 32 2c 20 30 2c 20 20 30 20 7d 2c 0a  CAPE2, 0,  0 },.
1390: 20 20 7b 20 20 27 77 27 2c 20 20 30 2c 20 34 2c    {  'w',  0, 4,
13a0: 20 65 74 53 51 4c 45 53 43 41 50 45 33 2c 20 30   etSQLESCAPE3, 0
13b0: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 63 27  ,  0 },.  {  'c'
13c0: 2c 20 20 30 2c 20 30 2c 20 65 74 43 48 41 52 58  ,  0, 0, etCHARX
13d0: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
13e0: 20 20 7b 20 20 27 6f 27 2c 20 20 38 2c 20 30 2c    {  'o',  8, 0,
13f0: 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30   etRADIX,      0
1400: 2c 20 20 32 20 7d 2c 0a 20 20 7b 20 20 27 75 27  ,  2 },.  {  'u'
1410: 2c 20 31 30 2c 20 30 2c 20 65 74 52 41 44 49 58  , 10, 0, etRADIX
1420: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
1430: 20 20 7b 20 20 27 78 27 2c 20 31 36 2c 20 30 2c    {  'x', 16, 0,
1440: 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 31   etRADIX,      1
1450: 36 2c 20 31 20 7d 2c 0a 20 20 7b 20 20 27 58 27  6, 1 },.  {  'X'
1460: 2c 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58  , 16, 0, etRADIX
1470: 2c 20 20 20 20 20 20 30 2c 20 20 34 20 7d 2c 0a  ,      0,  4 },.
1480: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1490: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
14a0: 4e 54 0a 20 20 7b 20 20 27 66 27 2c 20 20 30 2c  NT.  {  'f',  0,
14b0: 20 31 2c 20 65 74 46 4c 4f 41 54 2c 20 20 20 20   1, etFLOAT,    
14c0: 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20    0,  0 },.  {  
14d0: 27 65 27 2c 20 20 30 2c 20 31 2c 20 65 74 45 58  'e',  0, 1, etEX
14e0: 50 2c 20 20 20 20 20 20 20 20 33 30 2c 20 30 20  P,        30, 0 
14f0: 7d 2c 0a 20 20 7b 20 20 27 45 27 2c 20 20 30 2c  },.  {  'E',  0,
1500: 20 31 2c 20 65 74 45 58 50 2c 20 20 20 20 20 20   1, etEXP,      
1510: 20 20 31 34 2c 20 30 20 7d 2c 0a 20 20 7b 20 20    14, 0 },.  {  
1520: 27 47 27 2c 20 20 30 2c 20 31 2c 20 65 74 47 45  'G',  0, 1, etGE
1530: 4e 45 52 49 43 2c 20 20 20 20 31 34 2c 20 30 20  NERIC,    14, 0 
1540: 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 20 27  },.#endif.  {  '
1550: 69 27 2c 20 31 30 2c 20 31 2c 20 65 74 52 41 44  i', 10, 1, etRAD
1560: 49 58 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d  IX,      0,  0 }
1570: 2c 0a 20 20 7b 20 20 27 6e 27 2c 20 20 30 2c 20  ,.  {  'n',  0, 
1580: 30 2c 20 65 74 53 49 5a 45 2c 20 20 20 20 20 20  0, etSIZE,      
1590: 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27   0,  0 },.  {  '
15a0: 25 27 2c 20 20 30 2c 20 30 2c 20 65 74 50 45 52  %',  0, 0, etPER
15b0: 43 45 4e 54 2c 20 20 20 20 30 2c 20 20 30 20 7d  CENT,    0,  0 }
15c0: 2c 0a 20 20 7b 20 20 27 70 27 2c 20 31 36 2c 20  ,.  {  'p', 16, 
15d0: 30 2c 20 65 74 50 4f 49 4e 54 45 52 2c 20 20 20  0, etPOINTER,   
15e0: 20 30 2c 20 20 31 20 7d 2c 0a 20 20 7b 20 20 27   0,  1 },.  {  '
15f0: 54 27 2c 20 20 30 2c 20 32 2c 20 65 74 54 4f 4b  T',  0, 2, etTOK
1600: 45 4e 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d  EN,      0,  0 }
1610: 2c 0a 20 20 7b 20 20 27 53 27 2c 20 20 30 2c 20  ,.  {  'S',  0, 
1620: 32 2c 20 65 74 53 52 43 4c 49 53 54 2c 20 20 20  2, etSRCLIST,   
1630: 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27   0,  0 },.  {  '
1640: 72 27 2c 20 31 30 2c 20 33 2c 20 65 74 4f 52 44  r', 10, 3, etORD
1650: 49 4e 41 4c 2c 20 20 20 20 30 2c 20 20 30 20 7d  INAL,    0,  0 }
1660: 2c 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 65 74 4e  ,.};.#define etN
1670: 49 4e 46 4f 20 20 28 73 69 7a 65 6f 66 28 66 6d  INFO  (sizeof(fm
1680: 74 69 6e 66 6f 29 2f 73 69 7a 65 6f 66 28 66 6d  tinfo)/sizeof(fm
1690: 74 69 6e 66 6f 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a  tinfo[0]))../*.*
16a0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  * If SQLITE_OMIT
16b0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20  _FLOATING_POINT 
16c0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
16d0: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 66 6c 6f   none of the flo
16e0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 63  ating point.** c
16f0: 6f 6e 76 65 72 73 69 6f 6e 73 20 77 69 6c 6c 20  onversions will 
1700: 77 6f 72 6b 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  work..*/.#ifndef
1710: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
1720: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 0a 2a  ATING_POINT./*.*
1730: 2a 20 22 2a 76 61 6c 22 20 69 73 20 61 20 64 6f  * "*val" is a do
1740: 75 62 6c 65 20 73 75 63 68 20 74 68 61 74 20 30  uble such that 0
1750: 2e 31 20 3c 3d 20 2a 76 61 6c 20 3c 20 31 30 2e  .1 <= *val < 10.
1760: 30 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  0.** Return the 
1770: 61 73 63 69 69 20 63 6f 64 65 20 66 6f 72 20 74  ascii code for t
1780: 68 65 20 6c 65 61 64 69 6e 67 20 64 69 67 69 74  he leading digit
1790: 20 6f 66 20 2a 76 61 6c 2c 20 74 68 65 6e 0a 2a   of *val, then.*
17a0: 2a 20 6d 75 6c 74 69 70 6c 79 20 22 2a 76 61 6c  * multiply "*val
17b0: 22 20 62 79 20 31 30 2e 30 20 74 6f 20 72 65 6e  " by 10.0 to ren
17c0: 6f 72 6d 61 6c 69 7a 65 2e 0a 2a 2a 0a 2a 2a 20  ormalize..**.** 
17d0: 45 78 61 6d 70 6c 65 3a 0a 2a 2a 20 20 20 20 20  Example:.**     
17e0: 69 6e 70 75 74 3a 20 20 20 20 20 2a 76 61 6c 20  input:     *val 
17f0: 3d 20 33 2e 31 34 31 35 39 0a 2a 2a 20 20 20 20  = 3.14159.**    
1800: 20 6f 75 74 70 75 74 3a 20 20 20 20 2a 76 61 6c   output:    *val
1810: 20 3d 20 31 2e 34 31 35 39 20 20 20 20 66 75 6e   = 1.4159    fun
1820: 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 3d 20 27  ction return = '
1830: 33 27 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 75  3'.**.** The cou
1840: 6e 74 65 72 20 2a 63 6e 74 20 69 73 20 69 6e 63  nter *cnt is inc
1850: 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69  remented each ti
1860: 6d 65 2e 20 20 41 66 74 65 72 20 63 6f 75 6e 74  me.  After count
1870: 65 72 20 65 78 63 65 65 64 73 0a 2a 2a 20 31 36  er exceeds.** 16
1880: 20 28 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20   (the number of 
1890: 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69  significant digi
18a0: 74 73 20 69 6e 20 61 20 36 34 2d 62 69 74 20 66  ts in a 64-bit f
18b0: 6c 6f 61 74 29 20 27 30 27 20 69 73 0a 2a 2a 20  loat) '0' is.** 
18c0: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 65 64 2e  always returned.
18d0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65  .*/.static int e
18e0: 74 5f 67 65 74 64 69 67 69 74 28 4c 4f 4e 47 44  t_getdigit(LONGD
18f0: 4f 55 42 4c 45 5f 54 59 50 45 20 2a 76 61 6c 2c  OUBLE_TYPE *val,
1900: 20 69 6e 74 20 2a 63 6e 74 29 7b 0a 20 20 69 6e   int *cnt){.  in
1910: 74 20 64 69 67 69 74 3b 0a 20 20 4c 4f 4e 47 44  t digit;.  LONGD
1920: 4f 55 42 4c 45 5f 54 59 50 45 20 64 3b 0a 20 20  OUBLE_TYPE d;.  
1930: 69 66 28 20 28 2a 63 6e 74 29 2b 2b 20 3e 3d 20  if( (*cnt)++ >= 
1940: 31 36 20 29 20 72 65 74 75 72 6e 20 27 30 27 3b  16 ) return '0';
1950: 0a 20 20 64 69 67 69 74 20 3d 20 28 69 6e 74 29  .  digit = (int)
1960: 2a 76 61 6c 3b 0a 20 20 64 20 3d 20 64 69 67 69  *val;.  d = digi
1970: 74 3b 0a 20 20 64 69 67 69 74 20 2b 3d 20 27 30  t;.  digit += '0
1980: 27 3b 0a 20 20 2a 76 61 6c 20 3d 20 28 2a 76 61  ';.  *val = (*va
1990: 6c 20 2d 20 64 29 2a 31 30 2e 30 3b 0a 20 20 72  l - d)*10.0;.  r
19a0: 65 74 75 72 6e 20 64 69 67 69 74 3b 0a 7d 0a 23  eturn digit;.}.#
19b0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
19c0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
19d0: 49 4e 54 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 70  INT */../*.** Ap
19e0: 70 65 6e 64 20 4e 20 73 70 61 63 65 20 63 68 61  pend N space cha
19f0: 72 61 63 74 65 72 73 20 74 6f 20 74 68 65 20 67  racters to the g
1a00: 69 76 65 6e 20 73 74 72 69 6e 67 20 62 75 66 66  iven string buff
1a10: 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  er..*/.static vo
1a20: 69 64 20 61 70 70 65 6e 64 53 70 61 63 65 28 53  id appendSpace(S
1a30: 74 72 41 63 63 75 6d 20 2a 70 41 63 63 75 6d 2c  trAccum *pAccum,
1a40: 20 69 6e 74 20 4e 29 7b 0a 20 20 73 74 61 74 69   int N){.  stati
1a50: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 53 70  c const char zSp
1a60: 61 63 65 73 5b 5d 20 3d 20 22 20 20 20 20 20 20  aces[] = "      
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a80: 20 20 20 20 20 20 20 22 3b 0a 20 20 77 68 69 6c         ";.  whil
1a90: 65 28 20 4e 3e 3d 73 69 7a 65 6f 66 28 7a 53 70  e( N>=sizeof(zSp
1aa0: 61 63 65 73 29 2d 31 20 29 7b 0a 20 20 20 20 73  aces)-1 ){.    s
1ab0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
1ac0: 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 7a 53 70  pend(pAccum, zSp
1ad0: 61 63 65 73 2c 20 73 69 7a 65 6f 66 28 7a 53 70  aces, sizeof(zSp
1ae0: 61 63 65 73 29 2d 31 29 3b 0a 20 20 20 20 4e 20  aces)-1);.    N 
1af0: 2d 3d 20 73 69 7a 65 6f 66 28 7a 53 70 61 63 65  -= sizeof(zSpace
1b00: 73 29 2d 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20  s)-1;.  }.  if( 
1b10: 4e 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  N>0 ){.    sqlit
1b20: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
1b30: 28 70 41 63 63 75 6d 2c 20 7a 53 70 61 63 65 73  (pAccum, zSpaces
1b40: 2c 20 4e 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  , N);.  }.}../*.
1b50: 2a 2a 20 4f 6e 20 6d 61 63 68 69 6e 65 73 20 77  ** On machines w
1b60: 69 74 68 20 61 20 73 6d 61 6c 6c 20 73 74 61 63  ith a small stac
1b70: 6b 20 73 69 7a 65 2c 20 79 6f 75 20 63 61 6e 20  k size, you can 
1b80: 72 65 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  redefine the.** 
1b90: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46  SQLITE_PRINT_BUF
1ba0: 5f 53 49 5a 45 20 74 6f 20 62 65 20 6c 65 73 73  _SIZE to be less
1bb0: 20 74 68 61 6e 20 33 35 30 2e 20 20 42 75 74 20   than 350.  But 
1bc0: 62 65 77 61 72 65 20 2d 20 66 6f 72 0a 2a 2a 20  beware - for.** 
1bd0: 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 73  smaller values s
1be0: 6f 6d 65 20 25 66 20 63 6f 6e 76 65 72 73 69 6f  ome %f conversio
1bf0: 6e 73 20 6d 61 79 20 67 6f 20 69 6e 74 6f 20 61  ns may go into a
1c00: 6e 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 2e  n infinite loop.
1c10: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1c20: 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a  TE_PRINT_BUF_SIZ
1c30: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
1c40: 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45  E_PRINT_BUF_SIZE
1c50: 20 33 35 30 0a 23 65 6e 64 69 66 0a 23 64 65 66   350.#endif.#def
1c60: 69 6e 65 20 65 74 42 55 46 53 49 5a 45 20 53 51  ine etBUFSIZE SQ
1c70: 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53  LITE_PRINT_BUF_S
1c80: 49 5a 45 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20  IZE  /* Size of 
1c90: 74 68 65 20 6f 75 74 70 75 74 20 62 75 66 66 65  the output buffe
1ca0: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  r */../*.** The 
1cb0: 72 6f 6f 74 20 70 72 6f 67 72 61 6d 2e 20 20 41  root program.  A
1cc0: 6c 6c 20 76 61 72 69 61 74 69 6f 6e 73 20 63 61  ll variations ca
1cd0: 6c 6c 20 74 68 69 73 20 63 6f 72 65 2e 0a 2a 2a  ll this core..**
1ce0: 0a 2a 2a 20 49 4e 50 55 54 53 3a 0a 2a 2a 20 20  .** INPUTS:.**  
1cf0: 20 66 75 6e 63 20 20 20 54 68 69 73 20 69 73 20   func   This is 
1d00: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66  a pointer to a f
1d10: 75 6e 63 74 69 6f 6e 20 74 61 6b 69 6e 67 20 74  unction taking t
1d20: 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a  hree arguments.*
1d30: 2a 20 20 20 20 20 20 20 20 20 20 20 20 31 2e 20  *            1. 
1d40: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79  A pointer to any
1d50: 74 68 69 6e 67 2e 20 20 53 61 6d 65 20 61 73 20  thing.  Same as 
1d60: 74 68 65 20 22 61 72 67 22 20 70 61 72 61 6d 65  the "arg" parame
1d70: 74 65 72 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  ter..**         
1d80: 20 20 20 32 2e 20 41 20 70 6f 69 6e 74 65 72 20     2. A pointer 
1d90: 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  to the list of c
1da0: 68 61 72 61 63 74 65 72 73 20 74 6f 20 62 65 20  haracters to be 
1db0: 6f 75 74 70 75 74 0a 2a 2a 20 20 20 20 20 20 20  output.**       
1dc0: 20 20 20 20 20 20 20 20 28 4e 6f 74 65 2c 20 74          (Note, t
1dd0: 68 69 73 20 6c 69 73 74 20 69 73 20 4e 4f 54 20  his list is NOT 
1de0: 6e 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 2e  null terminated.
1df0: 29 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ).**            
1e00: 33 2e 20 41 6e 20 69 6e 74 65 67 65 72 20 6e 75  3. An integer nu
1e10: 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
1e20: 72 73 20 74 6f 20 62 65 20 6f 75 74 70 75 74 2e  rs to be output.
1e30: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e40: 20 20 28 4e 6f 74 65 3a 20 54 68 69 73 20 6e 75    (Note: This nu
1e50: 6d 62 65 72 20 6d 69 67 68 74 20 62 65 20 7a 65  mber might be ze
1e60: 72 6f 2e 29 0a 2a 2a 0a 2a 2a 20 20 20 61 72 67  ro.).**.**   arg
1e70: 20 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20      This is the 
1e80: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79 74 68  pointer to anyth
1e90: 69 6e 67 20 77 68 69 63 68 20 77 69 6c 6c 20 62  ing which will b
1ea0: 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65 0a  e passed as the.
1eb0: 2a 2a 20 20 20 20 20 20 20 20 20 20 66 69 72 73  **          firs
1ec0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 22 66  t argument to "f
1ed0: 75 6e 63 22 2e 20 20 55 73 65 20 69 74 20 66 6f  unc".  Use it fo
1ee0: 72 20 77 68 61 74 65 76 65 72 20 79 6f 75 20 6c  r whatever you l
1ef0: 69 6b 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6d 74  ike..**.**   fmt
1f00: 20 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20      This is the 
1f10: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 2c 20 61  format string, a
1f20: 73 20 69 6e 20 74 68 65 20 75 73 75 61 6c 20 70  s in the usual p
1f30: 72 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 61 70  rint..**.**   ap
1f40: 20 20 20 20 20 54 68 69 73 20 69 73 20 61 20 70       This is a p
1f50: 6f 69 6e 74 65 72 20 74 6f 20 61 20 6c 69 73 74  ointer to a list
1f60: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
1f70: 53 61 6d 65 20 61 73 20 69 6e 0a 2a 2a 20 20 20  Same as in.**   
1f80: 20 20 20 20 20 20 20 76 66 70 72 69 6e 74 2e 0a         vfprint..
1f90: 2a 2a 0a 2a 2a 20 4f 55 54 50 55 54 53 3a 0a 2a  **.** OUTPUTS:.*
1fa0: 2a 20 20 20 20 20 20 20 20 20 20 54 68 65 20 72  *          The r
1fb0: 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74  eturn value is t
1fc0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
1fd0: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 73 65  of characters se
1fe0: 6e 74 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 20  nt to.**        
1ff0: 20 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22    the function "
2000: 66 75 6e 63 22 2e 20 20 52 65 74 75 72 6e 73 20  func".  Returns 
2010: 2d 31 20 6f 6e 20 61 20 65 72 72 6f 72 2e 0a 2a  -1 on a error..*
2020: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74  *.** Note that t
2030: 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
2040: 68 20 61 75 74 6f 6d 61 74 69 63 20 76 61 72 69  h automatic vari
2050: 61 62 6c 65 73 20 61 72 65 20 64 65 63 6c 61 72  ables are declar
2060: 65 64 20 62 65 6c 6f 77 0a 2a 2a 20 73 65 65 6d  ed below.** seem
2070: 73 20 74 6f 20 6d 61 6b 65 20 61 20 62 69 67 20  s to make a big 
2080: 64 69 66 66 65 72 65 6e 63 65 20 69 6e 20 64 65  difference in de
2090: 74 65 72 6d 69 6e 69 6e 67 20 68 6f 77 20 66 61  termining how fa
20a0: 73 74 20 74 68 69 73 20 62 65 61 73 74 0a 2a 2a  st this beast.**
20b0: 20 77 69 6c 6c 20 72 75 6e 2e 0a 2a 2f 0a 76 6f   will run..*/.vo
20c0: 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
20d0: 74 66 28 0a 20 20 53 74 72 41 63 63 75 6d 20 2a  tf(.  StrAccum *
20e0: 70 41 63 63 75 6d 2c 20 20 20 20 20 20 20 20 20  pAccum,         
20f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75           /* Accu
2100: 6d 75 6c 61 74 65 20 72 65 73 75 6c 74 73 20 68  mulate results h
2110: 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 75 73 65  ere */.  int use
2120: 45 78 74 65 6e 64 65 64 2c 20 20 20 20 20 20 20  Extended,       
2130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
2140: 6c 6c 6f 77 20 65 78 74 65 6e 64 65 64 20 25 2d  llow extended %-
2150: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 2a 2f 0a 20  conversions */. 
2160: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 6d 74   const char *fmt
2170: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2180: 20 20 20 20 2f 2a 20 46 6f 72 6d 61 74 20 73 74      /* Format st
2190: 72 69 6e 67 20 2a 2f 0a 20 20 76 61 5f 6c 69 73  ring */.  va_lis
21a0: 74 20 61 70 20 20 20 20 20 20 20 20 20 20 20 20  t ap            
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21c0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
21d0: 20 20 69 6e 74 20 63 3b 20 20 20 20 20 20 20 20    int c;        
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21f0: 4e 65 78 74 20 63 68 61 72 61 63 74 65 72 20 69  Next character i
2200: 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72  n the format str
2210: 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 62  ing */.  char *b
2220: 75 66 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  ufpt;           
2230: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
2240: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
2250: 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
2260: 20 70 72 65 63 69 73 69 6f 6e 3b 20 20 20 20 20   precision;     
2270: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65 63 69          /* Preci
2280: 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72  sion of the curr
2290: 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69  ent field */.  i
22a0: 6e 74 20 6c 65 6e 67 74 68 3b 20 20 20 20 20 20  nt length;      
22b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
22c0: 67 74 68 20 6f 66 20 74 68 65 20 66 69 65 6c 64  gth of the field
22d0: 20 2a 2f 0a 20 20 69 6e 74 20 69 64 78 3b 20 20   */.  int idx;  
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 20 2f 2a 20 41 20 67 65 6e 65 72 61 6c 20 70 75   /* A general pu
2300: 72 70 6f 73 65 20 6c 6f 6f 70 20 63 6f 75 6e 74  rpose loop count
2310: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 77 69 64 74  er */.  int widt
2320: 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
2330: 20 20 20 2f 2a 20 57 69 64 74 68 20 6f 66 20 74     /* Width of t
2340: 68 65 20 63 75 72 72 65 6e 74 20 66 69 65 6c 64  he current field
2350: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
2360: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 3b 20 20  g_leftjustify;  
2370: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 2d 22 20   /* True if "-" 
2380: 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20  flag is present 
2390: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
23a0: 5f 70 6c 75 73 73 69 67 6e 3b 20 20 20 20 20 20  _plussign;      
23b0: 2f 2a 20 54 72 75 65 20 69 66 20 22 2b 22 20 66  /* True if "+" f
23c0: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
23d0: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
23e0: 62 6c 61 6e 6b 73 69 67 6e 3b 20 20 20 20 20 2f  blanksign;     /
23f0: 2a 20 54 72 75 65 20 69 66 20 22 20 22 20 66 6c  * True if " " fl
2400: 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  ag is present */
2410: 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61  .  etByte flag_a
2420: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a  lternateform; /*
2430: 20 54 72 75 65 20 69 66 20 22 23 22 20 66 6c 61   True if "#" fla
2440: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  g is present */.
2450: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c    etByte flag_al
2460: 74 66 6f 72 6d 32 3b 20 20 20 20 20 20 2f 2a 20  tform2;      /* 
2470: 54 72 75 65 20 69 66 20 22 21 22 20 66 6c 61 67  True if "!" flag
2480: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
2490: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 7a 65 72   etByte flag_zer
24a0: 6f 70 61 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  opad;       /* T
24b0: 72 75 65 20 69 66 20 66 69 65 6c 64 20 77 69 64  rue if field wid
24c0: 74 68 20 63 6f 6e 73 74 61 6e 74 20 73 74 61 72  th constant star
24d0: 74 73 20 77 69 74 68 20 7a 65 72 6f 20 2a 2f 0a  ts with zero */.
24e0: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f    etByte flag_lo
24f0: 6e 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ng;          /* 
2500: 54 72 75 65 20 69 66 20 22 6c 22 20 66 6c 61 67  True if "l" flag
2510: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
2520: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e   etByte flag_lon
2530: 67 6c 6f 6e 67 3b 20 20 20 20 20 20 2f 2a 20 54  glong;      /* T
2540: 72 75 65 20 69 66 20 74 68 65 20 22 6c 6c 22 20  rue if the "ll" 
2550: 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20  flag is present 
2560: 2a 2f 0a 20 20 65 74 42 79 74 65 20 64 6f 6e 65  */.  etByte done
2570: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2580: 2f 2a 20 4c 6f 6f 70 20 74 65 72 6d 69 6e 61 74  /* Loop terminat
2590: 69 6f 6e 20 66 6c 61 67 20 2a 2f 0a 20 20 73 71  ion flag */.  sq
25a0: 6c 69 74 65 5f 75 69 6e 74 36 34 20 6c 6f 6e 67  lite_uint64 long
25b0: 76 61 6c 75 65 3b 20 20 20 2f 2a 20 56 61 6c 75  value;   /* Valu
25c0: 65 20 66 6f 72 20 69 6e 74 65 67 65 72 20 74 79  e for integer ty
25d0: 70 65 73 20 2a 2f 0a 20 20 4c 4f 4e 47 44 4f 55  pes */.  LONGDOU
25e0: 42 4c 45 5f 54 59 50 45 20 72 65 61 6c 76 61 6c  BLE_TYPE realval
25f0: 75 65 3b 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72  ue; /* Value for
2600: 20 72 65 61 6c 20 74 79 70 65 73 20 2a 2f 0a 20   real types */. 
2610: 20 63 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20 2a   const et_info *
2620: 69 6e 66 6f 70 3b 20 20 20 20 20 20 2f 2a 20 50  infop;      /* P
2630: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 70  ointer to the ap
2640: 70 72 6f 70 72 69 61 74 65 20 69 6e 66 6f 20 73  propriate info s
2650: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
2660: 61 72 20 62 75 66 5b 65 74 42 55 46 53 49 5a 45  ar buf[etBUFSIZE
2670: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76  ];       /* Conv
2680: 65 72 73 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f  ersion buffer */
2690: 0a 20 20 63 68 61 72 20 70 72 65 66 69 78 3b 20  .  char prefix; 
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26b0: 20 50 72 65 66 69 78 20 63 68 61 72 61 63 74 65   Prefix characte
26c0: 72 2e 20 20 22 2b 22 20 6f 72 20 22 2d 22 20 6f  r.  "+" or "-" o
26d0: 72 20 22 20 22 20 6f 72 20 27 5c 30 27 2e 20 2a  r " " or '\0'. *
26e0: 2f 0a 20 20 65 74 42 79 74 65 20 65 72 72 6f 72  /.  etByte error
26f0: 66 6c 61 67 20 3d 20 30 3b 20 20 20 20 20 20 2f  flag = 0;      /
2700: 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 72 72  * True if an err
2710: 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
2720: 64 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 78 74  d */.  etByte xt
2730: 79 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ype;            
2740: 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20    /* Conversion 
2750: 70 61 72 61 64 69 67 6d 20 2a 2f 0a 20 20 63 68  paradigm */.  ch
2760: 61 72 20 2a 7a 45 78 74 72 61 3b 20 20 20 20 20  ar *zExtra;     
2770: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
2780: 61 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 66 6f  a memory used fo
2790: 72 20 65 74 54 43 4c 45 53 43 41 50 45 20 63 6f  r etTCLESCAPE co
27a0: 6e 76 65 72 73 69 6f 6e 73 20 2a 2f 0a 23 69 66  nversions */.#if
27b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27c0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
27d0: 20 20 69 6e 74 20 20 65 78 70 2c 20 65 32 3b 20    int  exp, e2; 
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27f0: 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72 65 61 6c  exponent of real
2800: 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 64 6f   numbers */.  do
2810: 75 62 6c 65 20 72 6f 75 6e 64 65 72 3b 20 20 20  uble rounder;   
2820: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
2830: 20 66 6f 72 20 72 6f 75 6e 64 69 6e 67 20 66 6c   for rounding fl
2840: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
2850: 75 65 73 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ues */.  etByte 
2860: 66 6c 61 67 5f 64 70 3b 20 20 20 20 20 20 20 20  flag_dp;        
2870: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 64      /* True if d
2880: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 73 68 6f  ecimal point sho
2890: 75 6c 64 20 62 65 20 73 68 6f 77 6e 20 2a 2f 0a  uld be shown */.
28a0: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 72 74    etByte flag_rt
28b0: 7a 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  z;           /* 
28c0: 54 72 75 65 20 69 66 20 74 72 61 69 6c 69 6e 67  True if trailing
28d0: 20 7a 65 72 6f 73 20 73 68 6f 75 6c 64 20 62 65   zeros should be
28e0: 20 72 65 6d 6f 76 65 64 20 2a 2f 0a 20 20 65 74   removed */.  et
28f0: 42 79 74 65 20 66 6c 61 67 5f 65 78 70 3b 20 20  Byte flag_exp;  
2900: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
2910: 20 74 6f 20 66 6f 72 63 65 20 64 69 73 70 6c 61   to force displa
2920: 79 20 6f 66 20 74 68 65 20 65 78 70 6f 6e 65 6e  y of the exponen
2930: 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 73 64 3b 20  t */.  int nsd; 
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2950: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
2960: 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74  ignificant digit
2970: 73 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 23 65  s returned */.#e
2980: 6e 64 69 66 0a 0a 20 20 6c 65 6e 67 74 68 20 3d  ndif..  length =
2990: 20 30 3b 0a 20 20 62 75 66 70 74 20 3d 20 30 3b   0;.  bufpt = 0;
29a0: 0a 20 20 66 6f 72 28 3b 20 28 63 3d 28 2a 66 6d  .  for(; (c=(*fm
29b0: 74 29 29 21 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a  t))!=0; ++fmt){.
29c0: 20 20 20 20 69 66 28 20 63 21 3d 27 25 27 20 29      if( c!='%' )
29d0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 61 6d 74 3b  {.      int amt;
29e0: 0a 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 28  .      bufpt = (
29f0: 63 68 61 72 20 2a 29 66 6d 74 3b 0a 20 20 20 20  char *)fmt;.    
2a00: 20 20 61 6d 74 20 3d 20 31 3b 0a 20 20 20 20 20    amt = 1;.     
2a10: 20 77 68 69 6c 65 28 20 28 63 3d 28 2a 2b 2b 66   while( (c=(*++f
2a20: 6d 74 29 29 21 3d 27 25 27 20 26 26 20 63 21 3d  mt))!='%' && c!=
2a30: 30 20 29 20 61 6d 74 2b 2b 3b 0a 20 20 20 20 20  0 ) amt++;.     
2a40: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2a50: 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 62  Append(pAccum, b
2a60: 75 66 70 74 2c 20 61 6d 74 29 3b 0a 20 20 20 20  ufpt, amt);.    
2a70: 20 20 69 66 28 20 63 3d 3d 30 20 29 20 62 72 65    if( c==0 ) bre
2a80: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ak;.    }.    if
2a90: 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 3d 3d  ( (c=(*++fmt))==
2aa0: 30 20 29 7b 0a 20 20 20 20 20 20 65 72 72 6f 72  0 ){.      error
2ab0: 66 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  flag = 1;.      
2ac0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2ad0: 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 22 25  ppend(pAccum, "%
2ae0: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65  ", 1);.      bre
2af0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a  ak;.    }.    /*
2b00: 20 46 69 6e 64 20 6f 75 74 20 77 68 61 74 20 66   Find out what f
2b10: 6c 61 67 73 20 61 72 65 20 70 72 65 73 65 6e 74  lags are present
2b20: 20 2a 2f 0a 20 20 20 20 66 6c 61 67 5f 6c 65 66   */.    flag_lef
2b30: 74 6a 75 73 74 69 66 79 20 3d 20 66 6c 61 67 5f  tjustify = flag_
2b40: 70 6c 75 73 73 69 67 6e 20 3d 20 66 6c 61 67 5f  plussign = flag_
2b50: 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 0a 20 20 20  blanksign = .   
2b60: 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65    flag_alternate
2b70: 66 6f 72 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66  form = flag_altf
2b80: 6f 72 6d 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f  orm2 = flag_zero
2b90: 70 61 64 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e  pad = 0;.    don
2ba0: 65 20 3d 20 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  e = 0;.    do{. 
2bb0: 20 20 20 20 20 73 77 69 74 63 68 28 20 63 20 29       switch( c )
2bc0: 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  {.        case '
2bd0: 2d 27 3a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a  -':   flag_leftj
2be0: 75 73 74 69 66 79 20 3d 20 31 3b 20 20 20 20 20  ustify = 1;     
2bf0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2c00: 61 73 65 20 27 2b 27 3a 20 20 20 66 6c 61 67 5f  ase '+':   flag_
2c10: 70 6c 75 73 73 69 67 6e 20 3d 20 31 3b 20 20 20  plussign = 1;   
2c20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2c30: 20 20 20 20 63 61 73 65 20 27 20 27 3a 20 20 20      case ' ':   
2c40: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d  flag_blanksign =
2c50: 20 31 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   1;       break;
2c60: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27 23  .        case '#
2c70: 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e  ':   flag_altern
2c80: 61 74 65 66 6f 72 6d 20 3d 20 31 3b 20 20 20 62  ateform = 1;   b
2c90: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
2ca0: 73 65 20 27 21 27 3a 20 20 20 66 6c 61 67 5f 61  se '!':   flag_a
2cb0: 6c 74 66 6f 72 6d 32 20 3d 20 31 3b 20 20 20 20  ltform2 = 1;    
2cc0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2cd0: 20 20 20 63 61 73 65 20 27 30 27 3a 20 20 20 66     case '0':   f
2ce0: 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 31 3b  lag_zeropad = 1;
2cf0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2d00: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
2d10: 20 20 20 20 64 6f 6e 65 20 3d 20 31 3b 20 20 20      done = 1;   
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
2d30: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
2d40: 20 7d 77 68 69 6c 65 28 20 21 64 6f 6e 65 20 26   }while( !done &
2d50: 26 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d  & (c=(*++fmt))!=
2d60: 30 20 29 3b 0a 20 20 20 20 2f 2a 20 47 65 74 20  0 );.    /* Get 
2d70: 74 68 65 20 66 69 65 6c 64 20 77 69 64 74 68 20  the field width 
2d80: 2a 2f 0a 20 20 20 20 77 69 64 74 68 20 3d 20 30  */.    width = 0
2d90: 3b 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27  ;.    if( c=='*'
2da0: 20 29 7b 0a 20 20 20 20 20 20 77 69 64 74 68 20   ){.      width 
2db0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29  = va_arg(ap,int)
2dc0: 3b 0a 20 20 20 20 20 20 69 66 28 20 77 69 64 74  ;.      if( widt
2dd0: 68 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66  h<0 ){.        f
2de0: 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20  lag_leftjustify 
2df0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 77 69 64  = 1;.        wid
2e00: 74 68 20 3d 20 2d 77 69 64 74 68 3b 0a 20 20 20  th = -width;.   
2e10: 20 20 20 7d 0a 20 20 20 20 20 20 63 20 3d 20 2a     }.      c = *
2e20: 2b 2b 66 6d 74 3b 0a 20 20 20 20 7d 65 6c 73 65  ++fmt;.    }else
2e30: 7b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 63  {.      while( c
2e40: 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20  >='0' && c<='9' 
2e50: 29 7b 0a 20 20 20 20 20 20 20 20 77 69 64 74 68  ){.        width
2e60: 20 3d 20 77 69 64 74 68 2a 31 30 20 2b 20 63 20   = width*10 + c 
2e70: 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 63  - '0';.        c
2e80: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
2e90: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
2ea0: 20 77 69 64 74 68 20 3e 20 65 74 42 55 46 53 49   width > etBUFSI
2eb0: 5a 45 2d 31 30 20 29 7b 0a 20 20 20 20 20 20 77  ZE-10 ){.      w
2ec0: 69 64 74 68 20 3d 20 65 74 42 55 46 53 49 5a 45  idth = etBUFSIZE
2ed0: 2d 31 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f  -10;.    }.    /
2ee0: 2a 20 47 65 74 20 74 68 65 20 70 72 65 63 69 73  * Get the precis
2ef0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 63  ion */.    if( c
2f00: 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 70  =='.' ){.      p
2f10: 72 65 63 69 73 69 6f 6e 20 3d 20 30 3b 0a 20 20  recision = 0;.  
2f20: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
2f30: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27        if( c=='*'
2f40: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 65 63   ){.        prec
2f50: 69 73 69 6f 6e 20 3d 20 76 61 5f 61 72 67 28 61  ision = va_arg(a
2f60: 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  p,int);.        
2f70: 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30 20  if( precision<0 
2f80: 29 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 70  ) precision = -p
2f90: 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20  recision;.      
2fa0: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
2fb0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2fc0: 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27     while( c>='0'
2fd0: 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20   && c<='9' ){.  
2fe0: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
2ff0: 6e 20 3d 20 70 72 65 63 69 73 69 6f 6e 2a 31 30  n = precision*10
3000: 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20   + c - '0';.    
3010: 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74        c = *++fmt
3020: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
3030: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
3040: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
3050: 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f   -1;.    }.    /
3060: 2a 20 47 65 74 20 74 68 65 20 63 6f 6e 76 65 72  * Get the conver
3070: 73 69 6f 6e 20 74 79 70 65 20 6d 6f 64 69 66 69  sion type modifi
3080: 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d  er */.    if( c=
3090: 3d 27 6c 27 20 29 7b 0a 20 20 20 20 20 20 66 6c  ='l' ){.      fl
30a0: 61 67 5f 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20  ag_long = 1;.   
30b0: 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20     c = *++fmt;. 
30c0: 20 20 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20       if( c=='l' 
30d0: 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  ){.        flag_
30e0: 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20  longlong = 1;.  
30f0: 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74        c = *++fmt
3100: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3110: 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67         flag_long
3120: 6c 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 20 20 20  long = 0;.      
3130: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
3140: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66     flag_long = f
3150: 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30  lag_longlong = 0
3160: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46  ;.    }.    /* F
3170: 65 74 63 68 20 74 68 65 20 69 6e 66 6f 20 65 6e  etch the info en
3180: 74 72 79 20 66 6f 72 20 74 68 65 20 66 69 65 6c  try for the fiel
3190: 64 20 2a 2f 0a 20 20 20 20 69 6e 66 6f 70 20 3d  d */.    infop =
31a0: 20 30 3b 0a 20 20 20 20 66 6f 72 28 69 64 78 3d   0;.    for(idx=
31b0: 30 3b 20 69 64 78 3c 65 74 4e 49 4e 46 4f 3b 20  0; idx<etNINFO; 
31c0: 69 64 78 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  idx++){.      if
31d0: 28 20 63 3d 3d 66 6d 74 69 6e 66 6f 5b 69 64 78  ( c==fmtinfo[idx
31e0: 5d 2e 66 6d 74 74 79 70 65 20 29 7b 0a 20 20 20  ].fmttype ){.   
31f0: 20 20 20 20 20 69 6e 66 6f 70 20 3d 20 26 66 6d       infop = &fm
3200: 74 69 6e 66 6f 5b 69 64 78 5d 3b 0a 20 20 20 20  tinfo[idx];.    
3210: 20 20 20 20 69 66 28 20 75 73 65 45 78 74 65 6e      if( useExten
3220: 64 65 64 20 7c 7c 20 28 69 6e 66 6f 70 2d 3e 66  ded || (infop->f
3230: 6c 61 67 73 20 26 20 46 4c 41 47 5f 49 4e 54 45  lags & FLAG_INTE
3240: 52 4e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  RN)==0 ){.      
3250: 20 20 20 20 78 74 79 70 65 20 3d 20 69 6e 66 6f      xtype = info
3260: 70 2d 3e 74 79 70 65 3b 0a 20 20 20 20 20 20 20  p->type;.       
3270: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
3280: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
3290: 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61    }.        brea
32a0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
32b0: 0a 20 20 20 20 7a 45 78 74 72 61 20 3d 20 30 3b  .    zExtra = 0;
32c0: 0a 20 20 20 20 69 66 28 20 69 6e 66 6f 70 3d 3d  .    if( infop==
32d0: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
32e0: 6e 3b 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 2f  n;.    }...    /
32f0: 2a 20 4c 69 6d 69 74 20 74 68 65 20 70 72 65 63  * Limit the prec
3300: 69 73 69 6f 6e 20 74 6f 20 70 72 65 76 65 6e 74  ision to prevent
3310: 20 6f 76 65 72 66 6c 6f 77 69 6e 67 20 62 75 66   overflowing buf
3320: 5b 5d 20 64 75 72 69 6e 67 20 63 6f 6e 76 65 72  [] during conver
3330: 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  sion */.    if( 
3340: 70 72 65 63 69 73 69 6f 6e 3e 65 74 42 55 46 53  precision>etBUFS
3350: 49 5a 45 2d 34 30 20 26 26 20 28 69 6e 66 6f 70  IZE-40 && (infop
3360: 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53  ->flags & FLAG_S
3370: 54 52 49 4e 47 29 3d 3d 30 20 29 7b 0a 20 20 20  TRING)==0 ){.   
3380: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 65     precision = e
3390: 74 42 55 46 53 49 5a 45 2d 34 30 3b 0a 20 20 20  tBUFSIZE-40;.   
33a0: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a   }..    /*.    *
33b0: 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c  * At this point,
33c0: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 69   variables are i
33d0: 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 66 6f  nitialized as fo
33e0: 6c 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20  llows:.    **.  
33f0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c 74 65    **   flag_alte
3400: 72 6e 61 74 65 66 6f 72 6d 20 20 20 20 20 20 20  rnateform       
3410: 20 20 20 54 52 55 45 20 69 66 20 61 20 27 23 27     TRUE if a '#'
3420: 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20   is present..   
3430: 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f   **   flag_altfo
3440: 72 6d 32 20 20 20 20 20 20 20 20 20 20 20 20 20  rm2             
3450: 20 20 54 52 55 45 20 69 66 20 61 20 27 21 27 20    TRUE if a '!' 
3460: 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20  is present..    
3470: 2a 2a 20 20 20 66 6c 61 67 5f 70 6c 75 73 73 69  **   flag_plussi
3480: 67 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  gn              
3490: 20 54 52 55 45 20 69 66 20 61 20 27 2b 27 20 69   TRUE if a '+' i
34a0: 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a  s present..    *
34b0: 2a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73  *   flag_leftjus
34c0: 74 69 66 79 20 20 20 20 20 20 20 20 20 20 20 20  tify            
34d0: 54 52 55 45 20 69 66 20 61 20 27 2d 27 20 69 73  TRUE if a '-' is
34e0: 20 70 72 65 73 65 6e 74 20 6f 72 20 69 66 20 74   present or if t
34f0: 68 65 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  he.    **       
3500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3510: 20 20 20 20 20 20 20 20 66 69 65 6c 64 20 77 69          field wi
3520: 64 74 68 20 77 61 73 20 6e 65 67 61 74 69 76 65  dth was negative
3530: 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f  ..    **   flag_
3540: 7a 65 72 6f 70 61 64 20 20 20 20 20 20 20 20 20  zeropad         
3550: 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20 74         TRUE if t
3560: 68 65 20 77 69 64 74 68 20 62 65 67 61 6e 20 77  he width began w
3570: 69 74 68 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20  ith 0..    **   
3580: 66 6c 61 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20  flag_long       
3590: 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55 45              TRUE
35a0: 20 69 66 20 74 68 65 20 6c 65 74 74 65 72 20 27   if the letter '
35b0: 6c 27 20 28 65 6c 6c 29 20 70 72 65 66 69 78 65  l' (ell) prefixe
35c0: 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20  d.    **        
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 76 65         the conve
35f0: 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72 2e  rsion character.
3600: 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c  .    **   flag_l
3610: 6f 6e 67 6c 6f 6e 67 20 20 20 20 20 20 20 20 20  onglong         
3620: 20 20 20 20 20 20 54 52 55 45 20 69 66 20 74 68        TRUE if th
3630: 65 20 6c 65 74 74 65 72 20 27 6c 6c 27 20 28 65  e letter 'll' (e
3640: 6c 6c 20 65 6c 6c 29 20 70 72 65 66 69 78 65 64  ll ell) prefixed
3650: 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20  .    **         
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3670: 20 20 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72        the conver
3680: 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a  sion character..
3690: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 62 6c      **   flag_bl
36a0: 61 6e 6b 73 69 67 6e 20 20 20 20 20 20 20 20 20  anksign         
36b0: 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27       TRUE if a '
36c0: 20 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20   ' is present.. 
36d0: 20 20 20 2a 2a 20 20 20 77 69 64 74 68 20 20 20     **   width   
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f0: 20 20 20 20 54 68 65 20 73 70 65 63 69 66 69 65      The specifie
3700: 64 20 66 69 65 6c 64 20 77 69 64 74 68 2e 20 20  d field width.  
3710: 54 68 69 73 20 69 73 0a 20 20 20 20 2a 2a 20 20  This is.    **  
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 77               alw
3740: 61 79 73 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  ays non-negative
3750: 2e 20 20 5a 65 72 6f 20 69 73 20 74 68 65 20 64  .  Zero is the d
3760: 65 66 61 75 6c 74 2e 0a 20 20 20 20 2a 2a 20 20  efault..    **  
3770: 20 70 72 65 63 69 73 69 6f 6e 20 20 20 20 20 20   precision      
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65               The
3790: 20 73 70 65 63 69 66 69 65 64 20 70 72 65 63 69   specified preci
37a0: 73 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75  sion.  The defau
37b0: 6c 74 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  lt.    **       
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d0: 20 20 20 20 20 20 20 20 69 73 20 2d 31 2e 0a 20          is -1.. 
37e0: 20 20 20 2a 2a 20 20 20 78 74 79 70 65 20 20 20     **   xtype   
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 20 20 20 20 54 68 65 20 63 6c 61 73 73 20 6f 66      The class of
3810: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e   the conversion.
3820: 0a 20 20 20 20 2a 2a 20 20 20 69 6e 66 6f 70 20  .    **   infop 
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3840: 20 20 20 20 20 20 50 6f 69 6e 74 65 72 20 74 6f        Pointer to
3850: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
3860: 20 69 6e 66 6f 20 73 74 72 75 63 74 2e 0a 20 20   info struct..  
3870: 20 20 2a 2f 0a 20 20 20 20 73 77 69 74 63 68 28    */.    switch(
3880: 20 78 74 79 70 65 20 29 7b 0a 20 20 20 20 20 20   xtype ){.      
3890: 63 61 73 65 20 65 74 50 4f 49 4e 54 45 52 3a 0a  case etPOINTER:.
38a0: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e          flag_lon
38b0: 67 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63  glong = sizeof(c
38c0: 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36  har*)==sizeof(i6
38d0: 34 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67  4);.        flag
38e0: 5f 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63  _long = sizeof(c
38f0: 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28 6c 6f  har*)==sizeof(lo
3900: 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ng int);.       
3910: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
3920: 20 69 6e 74 6f 20 74 68 65 20 6e 65 78 74 20 63   into the next c
3930: 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 63 61 73  ase */.      cas
3940: 65 20 65 74 4f 52 44 49 4e 41 4c 3a 0a 20 20 20  e etORDINAL:.   
3950: 20 20 20 63 61 73 65 20 65 74 52 41 44 49 58 3a     case etRADIX:
3960: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 6e 66  .        if( inf
3970: 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47  op->flags & FLAG
3980: 5f 53 49 47 4e 45 44 20 29 7b 0a 20 20 20 20 20  _SIGNED ){.     
3990: 20 20 20 20 20 69 36 34 20 76 3b 0a 20 20 20 20       i64 v;.    
39a0: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 6c        if( flag_l
39b0: 6f 6e 67 6c 6f 6e 67 20 29 20 20 20 76 20 3d 20  onglong )   v = 
39c0: 76 61 5f 61 72 67 28 61 70 2c 69 36 34 29 3b 0a  va_arg(ap,i64);.
39d0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
39e0: 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 20 20  f( flag_long )  
39f0: 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 6c 6f  v = va_arg(ap,lo
3a00: 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ng int);.       
3a10: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20     else         
3a20: 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61 5f           v = va_
3a30: 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20  arg(ap,int);.   
3a40: 20 20 20 20 20 20 20 69 66 28 20 76 3c 30 20 29         if( v<0 )
3a50: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  {.            lo
3a60: 6e 67 76 61 6c 75 65 20 3d 20 2d 76 3b 0a 20 20  ngvalue = -v;.  
3a70: 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78            prefix
3a80: 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20 20 20   = '-';.        
3a90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3aa0: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
3ab0: 20 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   v;.            
3ac0: 69 66 28 20 66 6c 61 67 5f 70 6c 75 73 73 69 67  if( flag_plussig
3ad0: 6e 20 29 20 20 20 20 20 20 20 20 70 72 65 66 69  n )        prefi
3ae0: 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20  x = '+';.       
3af0: 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 66 6c       else if( fl
3b00: 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29 20 20  ag_blanksign )  
3b10: 70 72 65 66 69 78 20 3d 20 27 20 27 3b 0a 20 20  prefix = ' ';.  
3b20: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 20            else  
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b40: 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b       prefix = 0;
3b50: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
3b60: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3b70: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 6c        if( flag_l
3b80: 6f 6e 67 6c 6f 6e 67 20 29 20 20 20 6c 6f 6e 67  onglong )   long
3b90: 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61  value = va_arg(a
3ba0: 70 2c 75 36 34 29 3b 0a 20 20 20 20 20 20 20 20  p,u64);.        
3bb0: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f    else if( flag_
3bc0: 6c 6f 6e 67 20 29 20 20 6c 6f 6e 67 76 61 6c 75  long )  longvalu
3bd0: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 75 6e  e = va_arg(ap,un
3be0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 6e 74 29  signed long int)
3bf0: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ;.          else
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c10: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61    longvalue = va
3c20: 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 6e 65 64  _arg(ap,unsigned
3c30: 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20   int);.         
3c40: 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20 20   prefix = 0;.   
3c50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
3c60: 66 28 20 6c 6f 6e 67 76 61 6c 75 65 3d 3d 30 20  f( longvalue==0 
3c70: 29 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65  ) flag_alternate
3c80: 66 6f 72 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20  form = 0;.      
3c90: 20 20 69 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70    if( flag_zerop
3ca0: 61 64 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c  ad && precision<
3cb0: 77 69 64 74 68 2d 28 70 72 65 66 69 78 21 3d 30  width-(prefix!=0
3cc0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ) ){.          p
3cd0: 72 65 63 69 73 69 6f 6e 20 3d 20 77 69 64 74 68  recision = width
3ce0: 2d 28 70 72 65 66 69 78 21 3d 30 29 3b 0a 20 20  -(prefix!=0);.  
3cf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3d00: 62 75 66 70 74 20 3d 20 26 62 75 66 5b 65 74 42  bufpt = &buf[etB
3d10: 55 46 53 49 5a 45 2d 31 5d 3b 0a 20 20 20 20 20  UFSIZE-1];.     
3d20: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74     if( xtype==et
3d30: 4f 52 44 49 4e 41 4c 20 29 7b 0a 20 20 20 20 20  ORDINAL ){.     
3d40: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
3d50: 74 20 63 68 61 72 20 7a 4f 72 64 5b 5d 20 3d 20  t char zOrd[] = 
3d60: 22 74 68 73 74 6e 64 72 64 22 3b 0a 20 20 20 20  "thstndrd";.    
3d70: 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 6c 6f        int x = lo
3d80: 6e 67 76 61 6c 75 65 20 25 20 31 30 3b 0a 20 20  ngvalue % 10;.  
3d90: 20 20 20 20 20 20 20 20 69 66 28 20 78 3e 3d 34          if( x>=4
3da0: 20 7c 7c 20 28 6c 6f 6e 67 76 61 6c 75 65 2f 31   || (longvalue/1
3db0: 30 29 25 31 30 3d 3d 31 20 29 7b 0a 20 20 20 20  0)%10==1 ){.    
3dc0: 20 20 20 20 20 20 20 20 78 20 3d 20 30 3b 0a 20          x = 0;. 
3dd0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
3de0: 20 20 20 20 20 62 75 66 5b 65 74 42 55 46 53 49       buf[etBUFSI
3df0: 5a 45 2d 33 5d 20 3d 20 7a 4f 72 64 5b 78 2a 32  ZE-3] = zOrd[x*2
3e00: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  ];.          buf
3e10: 5b 65 74 42 55 46 53 49 5a 45 2d 32 5d 20 3d 20  [etBUFSIZE-2] = 
3e20: 7a 4f 72 64 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20  zOrd[x*2+1];.   
3e30: 20 20 20 20 20 20 20 62 75 66 70 74 20 2d 3d 20         bufpt -= 
3e40: 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
3e50: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3e60: 20 72 65 67 69 73 74 65 72 20 63 6f 6e 73 74 20   register const 
3e70: 63 68 61 72 20 2a 63 73 65 74 3b 20 20 20 20 20  char *cset;     
3e80: 20 2f 2a 20 55 73 65 20 72 65 67 69 73 74 65 72   /* Use register
3e90: 73 20 66 6f 72 20 73 70 65 65 64 20 2a 2f 0a 20  s for speed */. 
3ea0: 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65           registe
3eb0: 72 20 69 6e 74 20 62 61 73 65 3b 0a 20 20 20 20  r int base;.    
3ec0: 20 20 20 20 20 20 63 73 65 74 20 3d 20 26 61 44        cset = &aD
3ed0: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
3ee0: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
3ef0: 20 62 61 73 65 20 3d 20 69 6e 66 6f 70 2d 3e 62   base = infop->b
3f00: 61 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 64  ase;.          d
3f10: 6f 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o{              
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3f40: 43 6f 6e 76 65 72 74 20 74 6f 20 61 73 63 69 69  Convert to ascii
3f50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
3f60: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 63 73 65  *(--bufpt) = cse
3f70: 74 5b 6c 6f 6e 67 76 61 6c 75 65 25 62 61 73 65  t[longvalue%base
3f80: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  ];.            l
3f90: 6f 6e 67 76 61 6c 75 65 20 3d 20 6c 6f 6e 67 76  ongvalue = longv
3fa0: 61 6c 75 65 2f 62 61 73 65 3b 0a 20 20 20 20 20  alue/base;.     
3fb0: 20 20 20 20 20 7d 77 68 69 6c 65 28 20 6c 6f 6e       }while( lon
3fc0: 67 76 61 6c 75 65 3e 30 20 29 3b 0a 20 20 20 20  gvalue>0 );.    
3fd0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65      }.        le
3fe0: 6e 67 74 68 20 3d 20 26 62 75 66 5b 65 74 42 55  ngth = &buf[etBU
3ff0: 46 53 49 5a 45 2d 31 5d 2d 62 75 66 70 74 3b 0a  FSIZE-1]-bufpt;.
4000: 20 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d          for(idx=
4010: 70 72 65 63 69 73 69 6f 6e 2d 6c 65 6e 67 74 68  precision-length
4020: 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d 29 7b  ; idx>0; idx--){
4030: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62  .          *(--b
4040: 75 66 70 74 29 20 3d 20 27 30 27 3b 20 20 20 20  ufpt) = '0';    
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
4070: 20 70 61 64 20 2a 2f 0a 20 20 20 20 20 20 20 20   pad */.        
4080: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  }.        if( pr
4090: 65 66 69 78 20 29 20 2a 28 2d 2d 62 75 66 70 74  efix ) *(--bufpt
40a0: 29 20 3d 20 70 72 65 66 69 78 3b 20 20 20 20 20  ) = prefix;     
40b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
40c0: 20 73 69 67 6e 20 2a 2f 0a 20 20 20 20 20 20 20   sign */.       
40d0: 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 65 72 6e   if( flag_altern
40e0: 61 74 65 66 6f 72 6d 20 26 26 20 69 6e 66 6f 70  ateform && infop
40f0: 2d 3e 70 72 65 66 69 78 20 29 7b 20 20 20 20 20  ->prefix ){     
4100: 20 2f 2a 20 41 64 64 20 22 30 22 20 6f 72 20 22   /* Add "0" or "
4110: 30 78 22 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  0x" */.         
4120: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 72 65   const char *pre
4130: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  ;.          char
4140: 20 78 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72   x;.          pr
4150: 65 20 3d 20 26 61 50 72 65 66 69 78 5b 69 6e 66  e = &aPrefix[inf
4160: 6f 70 2d 3e 70 72 65 66 69 78 5d 3b 0a 20 20 20  op->prefix];.   
4170: 20 20 20 20 20 20 20 66 6f 72 28 3b 20 28 78 3d         for(; (x=
4180: 28 2a 70 72 65 29 29 21 3d 30 3b 20 70 72 65 2b  (*pre))!=0; pre+
4190: 2b 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20  +) *(--bufpt) = 
41a0: 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  x;.        }.   
41b0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 26 62       length = &b
41c0: 75 66 5b 65 74 42 55 46 53 49 5a 45 2d 31 5d 2d  uf[etBUFSIZE-1]-
41d0: 62 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20 62  bufpt;.        b
41e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
41f0: 20 65 74 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20   etFLOAT:.      
4200: 63 61 73 65 20 65 74 45 58 50 3a 0a 20 20 20 20  case etEXP:.    
4210: 20 20 63 61 73 65 20 65 74 47 45 4e 45 52 49 43    case etGENERIC
4220: 3a 0a 20 20 20 20 20 20 20 20 72 65 61 6c 76 61  :.        realva
4230: 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  lue = va_arg(ap,
4240: 64 6f 75 62 6c 65 29 3b 0a 23 69 66 6e 64 65 66  double);.#ifndef
4250: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
4260: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
4270: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
4280: 6e 3c 30 20 29 20 70 72 65 63 69 73 69 6f 6e 20  n<0 ) precision 
4290: 3d 20 36 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 6;         /* 
42a0: 53 65 74 20 64 65 66 61 75 6c 74 20 70 72 65 63  Set default prec
42b0: 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20  ision */.       
42c0: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 65   if( precision>e
42d0: 74 42 55 46 53 49 5a 45 2f 32 2d 31 30 20 29 20  tBUFSIZE/2-10 ) 
42e0: 70 72 65 63 69 73 69 6f 6e 20 3d 20 65 74 42 55  precision = etBU
42f0: 46 53 49 5a 45 2f 32 2d 31 30 3b 0a 20 20 20 20  FSIZE/2-10;.    
4300: 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75      if( realvalu
4310: 65 3c 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20  e<0.0 ){.       
4320: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 2d     realvalue = -
4330: 72 65 61 6c 76 61 6c 75 65 3b 0a 20 20 20 20 20  realvalue;.     
4340: 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d       prefix = '-
4350: 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ';.        }else
4360: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
4370: 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 20  flag_plussign ) 
4380: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
4390: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
43a0: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 62   else if( flag_b
43b0: 6c 61 6e 6b 73 69 67 6e 20 29 20 20 20 20 70 72  lanksign )    pr
43c0: 65 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20  efix = ' ';.    
43d0: 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20        else      
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20     prefix = 0;. 
4400: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4410: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45   if( xtype==etGE
4420: 4e 45 52 49 43 20 26 26 20 70 72 65 63 69 73 69  NERIC && precisi
4430: 6f 6e 3e 30 20 29 20 70 72 65 63 69 73 69 6f 6e  on>0 ) precision
4440: 2d 2d 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20  --;.#if 0.      
4450: 20 20 2f 2a 20 52 6f 75 6e 64 69 6e 67 20 77 6f    /* Rounding wo
4460: 72 6b 73 20 6c 69 6b 65 20 42 53 44 20 77 68 65  rks like BSD whe
4470: 6e 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 30  n the constant 0
4480: 2e 34 39 39 39 20 69 73 20 75 73 65 64 2e 20 20  .4999 is used.  
4490: 57 69 65 72 64 21 20 2a 2f 0a 20 20 20 20 20 20  Wierd! */.      
44a0: 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73    for(idx=precis
44b0: 69 6f 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 34  ion, rounder=0.4
44c0: 39 39 39 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d  999; idx>0; idx-
44d0: 2d 2c 20 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29  -, rounder*=0.1)
44e0: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 20 20  ;.#else.        
44f0: 2f 2a 20 49 74 20 6d 61 6b 65 73 20 6d 6f 72 65  /* It makes more
4500: 20 73 65 6e 73 65 20 74 6f 20 75 73 65 20 30 2e   sense to use 0.
4510: 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  5 */.        for
4520: 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20  (idx=precision, 
4530: 72 6f 75 6e 64 65 72 3d 30 2e 35 3b 20 69 64 78  rounder=0.5; idx
4540: 3e 30 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64  >0; idx--, round
4550: 65 72 2a 3d 30 2e 31 29 7b 7d 0a 23 65 6e 64 69  er*=0.1){}.#endi
4560: 66 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74  f.        if( xt
4570: 79 70 65 3d 3d 65 74 46 4c 4f 41 54 20 29 20 72  ype==etFLOAT ) r
4580: 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e  ealvalue += roun
4590: 64 65 72 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  der;.        /* 
45a0: 4e 6f 72 6d 61 6c 69 7a 65 20 72 65 61 6c 76 61  Normalize realva
45b0: 6c 75 65 20 74 6f 20 77 69 74 68 69 6e 20 31 30  lue to within 10
45c0: 2e 30 20 3e 20 72 65 61 6c 76 61 6c 75 65 20 3e  .0 > realvalue >
45d0: 3d 20 31 2e 30 20 2a 2f 0a 20 20 20 20 20 20 20  = 1.0 */.       
45e0: 20 65 78 70 20 3d 20 30 3b 0a 20 20 20 20 20 20   exp = 0;.      
45f0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
4600: 61 4e 28 72 65 61 6c 76 61 6c 75 65 29 20 29 7b  aN(realvalue) ){
4610: 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74  .          bufpt
4620: 20 3d 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20 20   = "NaN";.      
4630: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b 0a      length = 3;.
4640: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
4650: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4660: 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65     if( realvalue
4670: 3e 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20 20  >0.0 ){.        
4680: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
4690: 75 65 3e 3d 31 65 33 32 20 26 26 20 65 78 70 3c  ue>=1e32 && exp<
46a0: 3d 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75  =350 ){ realvalu
46b0: 65 20 2a 3d 20 31 65 2d 33 32 3b 20 65 78 70 2b  e *= 1e-32; exp+
46c0: 3d 33 32 3b 20 7d 0a 20 20 20 20 20 20 20 20 20  =32; }.         
46d0: 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75   while( realvalu
46e0: 65 3e 3d 31 65 38 20 26 26 20 65 78 70 3c 3d 33  e>=1e8 && exp<=3
46f0: 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20  50 ){ realvalue 
4700: 2a 3d 20 31 65 2d 38 3b 20 65 78 70 2b 3d 38 3b  *= 1e-8; exp+=8;
4710: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69   }.          whi
4720: 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31  le( realvalue>=1
4730: 30 2e 30 20 26 26 20 65 78 70 3c 3d 33 35 30 20  0.0 && exp<=350 
4740: 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20  ){ realvalue *= 
4750: 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20  0.1; exp++; }.  
4760: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72          while( r
4770: 65 61 6c 76 61 6c 75 65 3c 31 65 2d 38 20 29 7b  ealvalue<1e-8 ){
4780: 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31 65   realvalue *= 1e
4790: 38 3b 20 65 78 70 2d 3d 38 3b 20 7d 0a 20 20 20  8; exp-=8; }.   
47a0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65         while( re
47b0: 61 6c 76 61 6c 75 65 3c 31 2e 30 20 29 7b 20 72  alvalue<1.0 ){ r
47c0: 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31 30 2e 30  ealvalue *= 10.0
47d0: 3b 20 65 78 70 2d 2d 3b 20 7d 0a 20 20 20 20 20  ; exp--; }.     
47e0: 20 20 20 20 20 69 66 28 20 65 78 70 3e 33 35 30       if( exp>350
47f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
4800: 69 66 28 20 70 72 65 66 69 78 3d 3d 27 2d 27 20  if( prefix=='-' 
4810: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
4820: 20 62 75 66 70 74 20 3d 20 22 2d 49 6e 66 22 3b   bufpt = "-Inf";
4830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c  .            }el
4840: 73 65 20 69 66 28 20 70 72 65 66 69 78 3d 3d 27  se if( prefix=='
4850: 2b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  +' ){.          
4860: 20 20 20 20 62 75 66 70 74 20 3d 20 22 2b 49 6e      bufpt = "+In
4870: 66 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  f";.            
4880: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4890: 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 49 6e       bufpt = "In
48a0: 66 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  f";.            
48b0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  }.            le
48c0: 6e 67 74 68 20 3d 20 73 74 72 6c 65 6e 28 62 75  ngth = strlen(bu
48d0: 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  fpt);.          
48e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
48f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
4900: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62         bufpt = b
4910: 75 66 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  uf;.        /*. 
4920: 20 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 65         ** If the
4930: 20 66 69 65 6c 64 20 74 79 70 65 20 69 73 20 65   field type is e
4940: 74 47 45 4e 45 52 49 43 2c 20 74 68 65 6e 20 63  tGENERIC, then c
4950: 6f 6e 76 65 72 74 20 74 6f 20 65 69 74 68 65 72  onvert to either
4960: 20 65 74 45 58 50 0a 20 20 20 20 20 20 20 20 2a   etEXP.        *
4970: 2a 20 6f 72 20 65 74 46 4c 4f 41 54 2c 20 61 73  * or etFLOAT, as
4980: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 20 20   appropriate..  
4990: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
49a0: 20 66 6c 61 67 5f 65 78 70 20 3d 20 78 74 79 70   flag_exp = xtyp
49b0: 65 3d 3d 65 74 45 58 50 3b 0a 20 20 20 20 20 20  e==etEXP;.      
49c0: 20 20 69 66 28 20 78 74 79 70 65 21 3d 65 74 46    if( xtype!=etF
49d0: 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20  LOAT ){.        
49e0: 20 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72    realvalue += r
49f0: 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20 20 20 20  ounder;.        
4a00: 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65 3e    if( realvalue>
4a10: 3d 31 30 2e 30 20 29 7b 20 72 65 61 6c 76 61 6c  =10.0 ){ realval
4a20: 75 65 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b  ue *= 0.1; exp++
4a30: 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ; }.        }.  
4a40: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
4a50: 3d 65 74 47 45 4e 45 52 49 43 20 29 7b 0a 20 20  =etGENERIC ){.  
4a60: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 72 74 7a          flag_rtz
4a70: 20 3d 20 21 66 6c 61 67 5f 61 6c 74 65 72 6e 61   = !flag_alterna
4a80: 74 65 66 6f 72 6d 3b 0a 20 20 20 20 20 20 20 20  teform;.        
4a90: 20 20 69 66 28 20 65 78 70 3c 2d 34 20 7c 7c 20    if( exp<-4 || 
4aa0: 65 78 70 3e 70 72 65 63 69 73 69 6f 6e 20 29 7b  exp>precision ){
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 74 79  .            xty
4ac0: 70 65 20 3d 20 65 74 45 58 50 3b 0a 20 20 20 20  pe = etEXP;.    
4ad0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4ae0: 20 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69           precisi
4af0: 6f 6e 20 3d 20 70 72 65 63 69 73 69 6f 6e 20 2d  on = precision -
4b00: 20 65 78 70 3b 0a 20 20 20 20 20 20 20 20 20 20   exp;.          
4b10: 20 20 78 74 79 70 65 20 3d 20 65 74 46 4c 4f 41    xtype = etFLOA
4b20: 54 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  T;.          }. 
4b30: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
4b40: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 72 74 7a          flag_rtz
4b50: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
4b60: 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70          if( xtyp
4b70: 65 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20  e==etEXP ){.    
4b80: 20 20 20 20 20 20 65 32 20 3d 20 30 3b 0a 20 20        e2 = 0;.  
4b90: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4ba0: 20 20 20 20 20 20 20 65 32 20 3d 20 65 78 70 3b         e2 = exp;
4bb0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4bc0: 20 20 20 6e 73 64 20 3d 20 30 3b 0a 20 20 20 20     nsd = 0;.    
4bd0: 20 20 20 20 66 6c 61 67 5f 64 70 20 3d 20 28 70      flag_dp = (p
4be0: 72 65 63 69 73 69 6f 6e 3e 30 29 20 7c 20 66 6c  recision>0) | fl
4bf0: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
4c00: 20 7c 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32   | flag_altform2
4c10: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;.        /* The
4c20: 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74 20 6f   sign in front o
4c30: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  f the number */.
4c40: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 66          if( pref
4c50: 69 78 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ix ){.          
4c60: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 70 72 65  *(bufpt++) = pre
4c70: 66 69 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  fix;.        }. 
4c80: 20 20 20 20 20 20 20 2f 2a 20 44 69 67 69 74 73         /* Digits
4c90: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 64 65   prior to the de
4ca0: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20  cimal point */. 
4cb0: 20 20 20 20 20 20 20 69 66 28 20 65 32 3c 30 20         if( e2<0 
4cc0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62  ){.          *(b
4cd0: 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20  ufpt++) = '0';. 
4ce0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
4cf0: 20 20 20 20 20 20 20 20 66 6f 72 28 3b 20 65 32          for(; e2
4d00: 3e 3d 30 3b 20 65 32 2d 2d 29 7b 0a 20 20 20 20  >=0; e2--){.    
4d10: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
4d20: 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74  +) = et_getdigit
4d30: 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64  (&realvalue,&nsd
4d40: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
4d50: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4d60: 20 2f 2a 20 54 68 65 20 64 65 63 69 6d 61 6c 20   /* The decimal 
4d70: 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  point */.       
4d80: 20 69 66 28 20 66 6c 61 67 5f 64 70 20 29 7b 0a   if( flag_dp ){.
4d90: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4da0: 74 2b 2b 29 20 3d 20 27 2e 27 3b 0a 20 20 20 20  t++) = '.';.    
4db0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
4dc0: 20 22 30 22 20 64 69 67 69 74 73 20 61 66 74 65   "0" digits afte
4dd0: 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  r the decimal po
4de0: 69 6e 74 20 62 75 74 20 62 65 66 6f 72 65 20 74  int but before t
4df0: 68 65 20 66 69 72 73 74 0a 20 20 20 20 20 20 20  he first.       
4e00: 20 2a 2a 20 73 69 67 6e 69 66 69 63 61 6e 74 20   ** significant 
4e10: 64 69 67 69 74 20 6f 66 20 74 68 65 20 6e 75 6d  digit of the num
4e20: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  ber */.        f
4e30: 6f 72 28 65 32 2b 2b 3b 20 65 32 3c 30 3b 20 70  or(e2++; e2<0; p
4e40: 72 65 63 69 73 69 6f 6e 2d 2d 2c 20 65 32 2b 2b  recision--, e2++
4e50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  ){.          ass
4e60: 65 72 74 28 20 70 72 65 63 69 73 69 6f 6e 3e 30  ert( precision>0
4e70: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 28   );.          *(
4e80: 62 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a  bufpt++) = '0';.
4e90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4ea0: 20 20 2f 2a 20 53 69 67 6e 69 66 69 63 61 6e 74    /* Significant
4eb0: 20 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68   digits after th
4ec0: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
4ed0: 2a 2f 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  */.        while
4ee0: 28 20 28 70 72 65 63 69 73 69 6f 6e 2d 2d 29 3e  ( (precision--)>
4ef0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a  0 ){.          *
4f00: 28 62 75 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67  (bufpt++) = et_g
4f10: 65 74 64 69 67 69 74 28 26 72 65 61 6c 76 61 6c  etdigit(&realval
4f20: 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20 20 20 20  ue,&nsd);.      
4f30: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 52    }.        /* R
4f40: 65 6d 6f 76 65 20 74 72 61 69 6c 69 6e 67 20 7a  emove trailing z
4f50: 65 72 6f 73 20 61 6e 64 20 74 68 65 20 22 2e 22  eros and the "."
4f60: 20 69 66 20 6e 6f 20 64 69 67 69 74 73 20 66 6f   if no digits fo
4f70: 6c 6c 6f 77 20 74 68 65 20 22 2e 22 20 2a 2f 0a  llow the "." */.
4f80: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
4f90: 5f 72 74 7a 20 26 26 20 66 6c 61 67 5f 64 70 20  _rtz && flag_dp 
4fa0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  ){.          whi
4fb0: 6c 65 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27  le( bufpt[-1]=='
4fc0: 30 27 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20  0' ) *(--bufpt) 
4fd0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 61  = 0;.          a
4fe0: 73 73 65 72 74 28 20 62 75 66 70 74 3e 62 75 66  ssert( bufpt>buf
4ff0: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   );.          if
5000: 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 2e 27  ( bufpt[-1]=='.'
5010: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
5020: 69 66 28 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d  if( flag_altform
5030: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  2 ){.           
5040: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
5050: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20  '0';.           
5060: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
5070: 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29        *(--bufpt)
5080: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
5090: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
50a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
50b0: 20 20 2f 2a 20 41 64 64 20 74 68 65 20 22 65 4e    /* Add the "eN
50c0: 4e 4e 22 20 73 75 66 66 69 78 20 2a 2f 0a 20 20  NN" suffix */.  
50d0: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 65        if( flag_e
50e0: 78 70 20 7c 7c 20 78 74 79 70 65 3d 3d 65 74 45  xp || xtype==etE
50f0: 58 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  XP ){.          
5100: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 61 44 69  *(bufpt++) = aDi
5110: 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61 72  gits[infop->char
5120: 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  set];.          
5130: 69 66 28 20 65 78 70 3c 30 20 29 7b 0a 20 20 20  if( exp<0 ){.   
5140: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
5150: 2b 2b 29 20 3d 20 27 2d 27 3b 20 65 78 70 20 3d  ++) = '-'; exp =
5160: 20 2d 65 78 70 3b 0a 20 20 20 20 20 20 20 20 20   -exp;.         
5170: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
5180: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
5190: 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20 20   '+';.          
51a0: 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
51b0: 65 78 70 3e 3d 31 30 30 20 29 7b 0a 20 20 20 20  exp>=100 ){.    
51c0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
51d0: 2b 29 20 3d 20 28 65 78 70 2f 31 30 30 29 2b 27  +) = (exp/100)+'
51e0: 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  0';             
51f0: 20 20 20 2f 2a 20 31 30 30 27 73 20 64 69 67 69     /* 100's digi
5200: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  t */.           
5210: 20 65 78 70 20 25 3d 20 31 30 30 3b 0a 20 20 20   exp %= 100;.   
5220: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5230: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
5240: 65 78 70 2f 31 30 2b 27 30 27 3b 20 20 20 20 20  exp/10+'0';     
5250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5260: 2f 2a 20 31 30 27 73 20 64 69 67 69 74 20 2a 2f  /* 10's digit */
5270: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66  .          *(buf
5280: 70 74 2b 2b 29 20 3d 20 65 78 70 25 31 30 2b 27  pt++) = exp%10+'
5290: 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  0';             
52a0: 20 20 20 20 20 20 20 20 2f 2a 20 31 27 73 20 64          /* 1's d
52b0: 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  igit */.        
52c0: 7d 0a 20 20 20 20 20 20 20 20 2a 62 75 66 70 74  }.        *bufpt
52d0: 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20 20 2f   = 0;..        /
52e0: 2a 20 54 68 65 20 63 6f 6e 76 65 72 74 65 64 20  * The converted 
52f0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 62 75 66  number is in buf
5300: 5b 5d 20 61 6e 64 20 7a 65 72 6f 20 74 65 72 6d  [] and zero term
5310: 69 6e 61 74 65 64 2e 20 4f 75 74 70 75 74 20 69  inated. Output i
5320: 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e 6f  t..        ** No
5330: 74 65 20 74 68 61 74 20 74 68 65 20 6e 75 6d 62  te that the numb
5340: 65 72 20 69 73 20 69 6e 20 74 68 65 20 75 73 75  er is in the usu
5350: 61 6c 20 6f 72 64 65 72 2c 20 6e 6f 74 20 72 65  al order, not re
5360: 76 65 72 73 65 64 20 61 73 20 77 69 74 68 0a 20  versed as with. 
5370: 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65         ** intege
5380: 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 2a  r conversions. *
5390: 2f 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68  /.        length
53a0: 20 3d 20 62 75 66 70 74 2d 62 75 66 3b 0a 20 20   = bufpt-buf;.  
53b0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
53c0: 66 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  f;..        /* S
53d0: 70 65 63 69 61 6c 20 63 61 73 65 3a 20 20 41 64  pecial case:  Ad
53e0: 64 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73 20  d leading zeros 
53f0: 69 66 20 74 68 65 20 66 6c 61 67 5f 7a 65 72 6f  if the flag_zero
5400: 70 61 64 20 66 6c 61 67 20 69 73 0a 20 20 20 20  pad flag is.    
5410: 20 20 20 20 2a 2a 20 73 65 74 20 61 6e 64 20 77      ** set and w
5420: 65 20 61 72 65 20 6e 6f 74 20 6c 65 66 74 20 6a  e are not left j
5430: 75 73 74 69 66 69 65 64 20 2a 2f 0a 20 20 20 20  ustified */.    
5440: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 7a 65 72      if( flag_zer
5450: 6f 70 61 64 20 26 26 20 21 66 6c 61 67 5f 6c 65  opad && !flag_le
5460: 66 74 6a 75 73 74 69 66 79 20 26 26 20 6c 65 6e  ftjustify && len
5470: 67 74 68 20 3c 20 77 69 64 74 68 29 7b 0a 20 20  gth < width){.  
5480: 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20          int i;. 
5490: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61           int nPa
54a0: 64 20 3d 20 77 69 64 74 68 20 2d 20 6c 65 6e 67  d = width - leng
54b0: 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  th;.          fo
54c0: 72 28 69 3d 77 69 64 74 68 3b 20 69 3e 3d 6e 50  r(i=width; i>=nP
54d0: 61 64 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20  ad; i--){.      
54e0: 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d 20 3d        bufpt[i] =
54f0: 20 62 75 66 70 74 5b 69 2d 6e 50 61 64 5d 3b 0a   bufpt[i-nPad];.
5500: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
5510: 20 20 20 20 20 20 69 20 3d 20 70 72 65 66 69 78        i = prefix
5520: 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 77  !=0;.          w
5530: 68 69 6c 65 28 20 6e 50 61 64 2d 2d 20 29 20 62  hile( nPad-- ) b
5540: 75 66 70 74 5b 69 2b 2b 5d 20 3d 20 27 30 27 3b  ufpt[i++] = '0';
5550: 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74  .          lengt
5560: 68 20 3d 20 77 69 64 74 68 3b 0a 20 20 20 20 20  h = width;.     
5570: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
5580: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
5590: 20 63 61 73 65 20 65 74 53 49 5a 45 3a 0a 20 20   case etSIZE:.  
55a0: 20 20 20 20 20 20 2a 28 76 61 5f 61 72 67 28 61        *(va_arg(a
55b0: 70 2c 69 6e 74 2a 29 29 20 3d 20 70 41 63 63 75  p,int*)) = pAccu
55c0: 6d 2d 3e 6e 43 68 61 72 3b 0a 20 20 20 20 20 20  m->nChar;.      
55d0: 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68    length = width
55e0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72   = 0;.        br
55f0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
5600: 65 74 50 45 52 43 45 4e 54 3a 0a 20 20 20 20 20  etPERCENT:.     
5610: 20 20 20 62 75 66 5b 30 5d 20 3d 20 27 25 27 3b     buf[0] = '%';
5620: 0a 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d  .        bufpt =
5630: 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20 6c 65   buf;.        le
5640: 6e 67 74 68 20 3d 20 31 3b 0a 20 20 20 20 20 20  ngth = 1;.      
5650: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
5660: 61 73 65 20 65 74 43 48 41 52 58 3a 0a 20 20 20  ase etCHARX:.   
5670: 20 20 20 20 20 63 20 3d 20 62 75 66 5b 30 5d 20       c = buf[0] 
5680: 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29  = va_arg(ap,int)
5690: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  ;.        if( pr
56a0: 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20  ecision>=0 ){.  
56b0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d          for(idx=
56c0: 31 3b 20 69 64 78 3c 70 72 65 63 69 73 69 6f 6e  1; idx<precision
56d0: 3b 20 69 64 78 2b 2b 29 20 62 75 66 5b 69 64 78  ; idx++) buf[idx
56e0: 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20  ] = c;.         
56f0: 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73   length = precis
5700: 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  ion;.        }el
5710: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 65  se{.          le
5720: 6e 67 74 68 20 3d 31 3b 0a 20 20 20 20 20 20 20  ngth =1;.       
5730: 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70 74   }.        bufpt
5740: 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20   = buf;.        
5750: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
5760: 65 20 65 74 53 54 52 49 4e 47 3a 0a 20 20 20 20  e etSTRING:.    
5770: 20 20 63 61 73 65 20 65 74 44 59 4e 53 54 52 49    case etDYNSTRI
5780: 4e 47 3a 0a 20 20 20 20 20 20 20 20 62 75 66 70  NG:.        bufp
5790: 74 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68  t = va_arg(ap,ch
57a0: 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ar*);.        if
57b0: 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20 20  ( bufpt==0 ){.  
57c0: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
57d0: 22 22 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  "";.        }els
57e0: 65 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 44  e if( xtype==etD
57f0: 59 4e 53 54 52 49 4e 47 20 29 7b 0a 20 20 20 20  YNSTRING ){.    
5800: 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20 62        zExtra = b
5810: 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ufpt;.        }.
5820: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63          if( prec
5830: 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20  ision>=0 ){.    
5840: 20 20 20 20 20 20 66 6f 72 28 6c 65 6e 67 74 68        for(length
5850: 3d 30 3b 20 6c 65 6e 67 74 68 3c 70 72 65 63 69  =0; length<preci
5860: 73 69 6f 6e 20 26 26 20 62 75 66 70 74 5b 6c 65  sion && bufpt[le
5870: 6e 67 74 68 5d 3b 20 6c 65 6e 67 74 68 2b 2b 29  ngth]; length++)
5880: 7b 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  {}.        }else
5890: 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67  {.          leng
58a0: 74 68 20 3d 20 73 74 72 6c 65 6e 28 62 75 66 70  th = strlen(bufp
58b0: 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
58c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
58d0: 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 53 43     case etSQLESC
58e0: 41 50 45 3a 0a 20 20 20 20 20 20 63 61 73 65 20  APE:.      case 
58f0: 65 74 53 51 4c 45 53 43 41 50 45 32 3a 0a 20 20  etSQLESCAPE2:.  
5900: 20 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 53      case etSQLES
5910: 43 41 50 45 33 3a 20 7b 0a 20 20 20 20 20 20 20  CAPE3: {.       
5920: 20 69 6e 74 20 69 2c 20 6a 2c 20 6e 2c 20 63 68   int i, j, n, ch
5930: 2c 20 69 73 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  , isnull;.      
5940: 20 20 69 6e 74 20 6e 65 65 64 51 75 6f 74 65 3b    int needQuote;
5950: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 71 20  .        char q 
5960: 3d 20 28 28 78 74 79 70 65 3d 3d 65 74 53 51 4c  = ((xtype==etSQL
5970: 45 53 43 41 50 45 33 29 3f 27 22 27 3a 27 5c 27  ESCAPE3)?'"':'\'
5980: 27 29 3b 20 20 20 2f 2a 20 51 75 6f 74 65 20 63  ');   /* Quote c
5990: 68 61 72 61 63 74 65 72 20 2a 2f 0a 20 20 20 20  haracter */.    
59a0: 20 20 20 20 63 68 61 72 20 2a 65 73 63 61 72 67      char *escarg
59b0: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68 61   = va_arg(ap,cha
59c0: 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 73 6e  r*);.        isn
59d0: 75 6c 6c 20 3d 20 65 73 63 61 72 67 3d 3d 30 3b  ull = escarg==0;
59e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73 6e  .        if( isn
59f0: 75 6c 6c 20 29 20 65 73 63 61 72 67 20 3d 20 28  ull ) escarg = (
5a00: 78 74 79 70 65 3d 3d 65 74 53 51 4c 45 53 43 41  xtype==etSQLESCA
5a10: 50 45 32 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 22  PE2 ? "NULL" : "
5a20: 28 4e 55 4c 4c 29 22 29 3b 0a 20 20 20 20 20 20  (NULL)");.      
5a30: 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 28 63 68    for(i=n=0; (ch
5a40: 3d 65 73 63 61 72 67 5b 69 5d 29 21 3d 30 3b 20  =escarg[i])!=0; 
5a50: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
5a60: 69 66 28 20 63 68 3d 3d 71 20 29 20 20 6e 2b 2b  if( ch==q )  n++
5a70: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5a80: 20 20 20 20 6e 65 65 64 51 75 6f 74 65 20 3d 20      needQuote = 
5a90: 21 69 73 6e 75 6c 6c 20 26 26 20 78 74 79 70 65  !isnull && xtype
5aa0: 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 32 3b 0a  ==etSQLESCAPE2;.
5ab0: 20 20 20 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b          n += i +
5ac0: 20 31 20 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32   1 + needQuote*2
5ad0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 3e  ;.        if( n>
5ae0: 65 74 42 55 46 53 49 5a 45 20 29 7b 0a 20 20 20  etBUFSIZE ){.   
5af0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 7a         bufpt = z
5b00: 45 78 74 72 61 20 3d 20 73 71 6c 69 74 65 33 4d  Extra = sqlite3M
5b10: 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20  alloc( n );.    
5b20: 20 20 20 20 20 20 69 66 28 20 62 75 66 70 74 3d        if( bufpt=
5b30: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20  =0 ) return;.   
5b40: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5b50: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
5b60: 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  f;.        }.   
5b70: 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20       j = 0;.    
5b80: 20 20 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74      if( needQuot
5b90: 65 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d  e ) bufpt[j++] =
5ba0: 20 71 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   q;.        for(
5bb0: 69 3d 30 3b 20 28 63 68 3d 65 73 63 61 72 67 5b  i=0; (ch=escarg[
5bc0: 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20  i])!=0; i++){.  
5bd0: 20 20 20 20 20 20 20 20 62 75 66 70 74 5b 6a 2b          bufpt[j+
5be0: 2b 5d 20 3d 20 63 68 3b 0a 20 20 20 20 20 20 20  +] = ch;.       
5bf0: 20 20 20 69 66 28 20 63 68 3d 3d 71 20 29 20 62     if( ch==q ) b
5c00: 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68 3b 0a  ufpt[j++] = ch;.
5c10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5c20: 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20    if( needQuote 
5c30: 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71  ) bufpt[j++] = q
5c40: 3b 0a 20 20 20 20 20 20 20 20 62 75 66 70 74 5b  ;.        bufpt[
5c50: 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  j] = 0;.        
5c60: 6c 65 6e 67 74 68 20 3d 20 6a 3b 0a 20 20 20 20  length = j;.    
5c70: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 65 63 69      /* The preci
5c80: 73 69 6f 6e 20 69 73 20 69 67 6e 6f 72 65 64 20  sion is ignored 
5c90: 6f 6e 20 25 71 20 61 6e 64 20 25 51 20 2a 2f 0a  on %q and %Q */.
5ca0: 20 20 20 20 20 20 20 20 2f 2a 20 69 66 28 20 70          /* if( p
5cb0: 72 65 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70  recision>=0 && p
5cc0: 72 65 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20  recision<length 
5cd0: 29 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69  ) length = preci
5ce0: 73 69 6f 6e 3b 20 2a 2f 0a 20 20 20 20 20 20 20  sion; */.       
5cf0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
5d00: 20 20 20 20 20 20 63 61 73 65 20 65 74 54 4f 4b        case etTOK
5d10: 45 4e 3a 20 7b 0a 20 20 20 20 20 20 20 20 54 6f  EN: {.        To
5d20: 6b 65 6e 20 2a 70 54 6f 6b 65 6e 20 3d 20 76 61  ken *pToken = va
5d30: 5f 61 72 67 28 61 70 2c 20 54 6f 6b 65 6e 2a 29  _arg(ap, Token*)
5d40: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54  ;.        if( pT
5d50: 6f 6b 65 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  oken ){.        
5d60: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
5d70: 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20  mAppend(pAccum, 
5d80: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 70 54 6f  (const char*)pTo
5d90: 6b 65 6e 2d 3e 7a 2c 20 70 54 6f 6b 65 6e 2d 3e  ken->z, pToken->
5da0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  n);.        }.  
5db0: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77        length = w
5dc0: 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20  idth = 0;.      
5dd0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
5de0: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53 52  .      case etSR
5df0: 43 4c 49 53 54 3a 20 7b 0a 20 20 20 20 20 20 20  CLIST: {.       
5e00: 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 20 3d   SrcList *pSrc =
5e10: 20 76 61 5f 61 72 67 28 61 70 2c 20 53 72 63 4c   va_arg(ap, SrcL
5e20: 69 73 74 2a 29 3b 0a 20 20 20 20 20 20 20 20 69  ist*);.        i
5e30: 6e 74 20 6b 20 3d 20 76 61 5f 61 72 67 28 61 70  nt k = va_arg(ap
5e40: 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  , int);.        
5e50: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
5e60: 74 65 6d 20 2a 70 49 74 65 6d 20 3d 20 26 70 53  tem *pItem = &pS
5e70: 72 63 2d 3e 61 5b 6b 5d 3b 0a 20 20 20 20 20 20  rc->a[k];.      
5e80: 20 20 61 73 73 65 72 74 28 20 6b 3e 3d 30 20 26    assert( k>=0 &
5e90: 26 20 6b 3c 70 53 72 63 2d 3e 6e 53 72 63 20 29  & k<pSrc->nSrc )
5ea0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  ;.        if( pI
5eb0: 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65 20 29  tem->zDatabase )
5ec0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
5ed0: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
5ee0: 64 28 70 41 63 63 75 6d 2c 20 70 49 74 65 6d 2d  d(pAccum, pItem-
5ef0: 3e 7a 44 61 74 61 62 61 73 65 2c 20 2d 31 29 3b  >zDatabase, -1);
5f00: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
5f10: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
5f20: 28 70 41 63 63 75 6d 2c 20 22 2e 22 2c 20 31 29  (pAccum, ".", 1)
5f30: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5f40: 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63      sqlite3StrAc
5f50: 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d  cumAppend(pAccum
5f60: 2c 20 70 49 74 65 6d 2d 3e 7a 4e 61 6d 65 2c 20  , pItem->zName, 
5f70: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  -1);.        len
5f80: 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b  gth = width = 0;
5f90: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5fa0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 2f 2a 20        }.    }/* 
5fb0: 45 6e 64 20 73 77 69 74 63 68 20 6f 76 65 72 20  End switch over 
5fc0: 74 68 65 20 66 6f 72 6d 61 74 20 74 79 70 65 20  the format type 
5fd0: 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a  */.    /*.    **
5fe0: 20 54 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   The text of the
5ff0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
6000: 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 22 62 75  ointed to by "bu
6010: 66 70 74 22 20 61 6e 64 20 69 73 0a 20 20 20 20  fpt" and is.    
6020: 2a 2a 20 22 6c 65 6e 67 74 68 22 20 63 68 61 72  ** "length" char
6030: 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
6040: 65 20 66 69 65 6c 64 20 77 69 64 74 68 20 69 73  e field width is
6050: 20 22 77 69 64 74 68 22 2e 20 20 44 6f 0a 20 20   "width".  Do.  
6060: 20 20 2a 2a 20 74 68 65 20 6f 75 74 70 75 74 2e    ** the output.
6070: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
6080: 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66  !flag_leftjustif
6090: 79 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73  y ){.      regis
60a0: 74 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a  ter int nspace;.
60b0: 20 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77        nspace = w
60c0: 69 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20  idth-length;.   
60d0: 20 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20     if( nspace>0 
60e0: 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
60f0: 64 53 70 61 63 65 28 70 41 63 63 75 6d 2c 20 6e  dSpace(pAccum, n
6100: 73 70 61 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a  space);.      }.
6110: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 65      }.    if( le
6120: 6e 67 74 68 3e 30 20 29 7b 0a 20 20 20 20 20 20  ngth>0 ){.      
6130: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
6140: 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 62 75  ppend(pAccum, bu
6150: 66 70 74 2c 20 6c 65 6e 67 74 68 29 3b 0a 20 20  fpt, length);.  
6160: 20 20 7d 0a 20 20 20 20 69 66 28 20 66 6c 61 67    }.    if( flag
6170: 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29 7b 0a  _leftjustify ){.
6180: 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20 69        register i
6190: 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20  nt nspace;.     
61a0: 20 6e 73 70 61 63 65 20 3d 20 77 69 64 74 68 2d   nspace = width-
61b0: 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 69 66  length;.      if
61c0: 28 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a 20 20  ( nspace>0 ){.  
61d0: 20 20 20 20 20 20 61 70 70 65 6e 64 53 70 61 63        appendSpac
61e0: 65 28 70 41 63 63 75 6d 2c 20 6e 73 70 61 63 65  e(pAccum, nspace
61f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
6200: 0a 20 20 20 20 69 66 28 20 7a 45 78 74 72 61 20  .    if( zExtra 
6210: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
6220: 5f 66 72 65 65 28 7a 45 78 74 72 61 29 3b 0a 20  _free(zExtra);. 
6230: 20 20 20 7d 0a 20 20 7d 2f 2a 20 45 6e 64 20 66     }.  }/* End f
6240: 6f 72 20 6c 6f 6f 70 20 6f 76 65 72 20 74 68 65  or loop over the
6250: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a   format string *
6260: 2f 0a 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 66 75  /.} /* End of fu
6270: 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nction */../*.**
6280: 20 41 70 70 65 6e 64 20 4e 20 62 79 74 65 73 20   Append N bytes 
6290: 6f 66 20 74 65 78 74 20 66 72 6f 6d 20 7a 20 74  of text from z t
62a0: 6f 20 74 68 65 20 53 74 72 41 63 63 75 6d 20 6f  o the StrAccum o
62b0: 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  bject..*/.void s
62c0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
62d0: 70 65 6e 64 28 53 74 72 41 63 63 75 6d 20 2a 70  pend(StrAccum *p
62e0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
62f0: 20 69 6e 74 20 4e 29 7b 0a 20 20 69 66 28 20 70   int N){.  if( p
6300: 2d 3e 74 6f 6f 42 69 67 20 7c 20 70 2d 3e 6d 61  ->tooBig | p->ma
6310: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
6320: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20    return;.  }.  
6330: 69 66 28 20 4e 3c 30 20 29 7b 0a 20 20 20 20 4e  if( N<0 ){.    N
6340: 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20   = strlen(z);.  
6350: 7d 0a 20 20 69 66 28 20 4e 3d 3d 30 20 29 7b 0a  }.  if( N==0 ){.
6360: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
6370: 20 20 69 66 28 20 70 2d 3e 6e 43 68 61 72 2b 4e    if( p->nChar+N
6380: 20 3e 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b   >= p->nAlloc ){
6390: 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b  .    char *zNew;
63a0: 0a 20 20 20 20 69 66 28 20 21 70 2d 3e 75 73 65  .    if( !p->use
63b0: 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20  Malloc ){.      
63c0: 70 2d 3e 74 6f 6f 42 69 67 20 3d 20 31 3b 0a 20  p->tooBig = 1;. 
63d0: 20 20 20 20 20 4e 20 3d 20 70 2d 3e 6e 41 6c 6c       N = p->nAll
63e0: 6f 63 20 2d 20 70 2d 3e 6e 43 68 61 72 20 2d 20  oc - p->nChar - 
63f0: 31 3b 0a 20 20 20 20 20 20 69 66 28 20 4e 3c 3d  1;.      if( N<=
6400: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74  0 ){.        ret
6410: 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
6420: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 36   }else{.      i6
6430: 34 20 73 7a 4e 65 77 20 3d 20 70 2d 3e 6e 43 68  4 szNew = p->nCh
6440: 61 72 3b 0a 20 20 20 20 20 20 73 7a 4e 65 77 20  ar;.      szNew 
6450: 2b 3d 20 4e 20 2b 20 31 3b 0a 20 20 20 20 20 20  += N + 1;.      
6460: 69 66 28 20 73 7a 4e 65 77 20 3e 20 70 2d 3e 6d  if( szNew > p->m
6470: 78 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20  xAlloc ){.      
6480: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
6490: 6d 52 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20  mReset(p);.     
64a0: 20 20 20 70 2d 3e 74 6f 6f 42 69 67 20 3d 20 31     p->tooBig = 1
64b0: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
64c0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
64d0: 20 20 20 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63         p->nAlloc
64e0: 20 3d 20 73 7a 4e 65 77 3b 0a 20 20 20 20 20 20   = szNew;.      
64f0: 7d 0a 20 20 20 20 20 20 7a 4e 65 77 20 3d 20 73  }.      zNew = s
6500: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
6510: 77 28 70 2d 3e 64 62 2c 20 70 2d 3e 6e 41 6c 6c  w(p->db, p->nAll
6520: 6f 63 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  oc );.      if( 
6530: 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  zNew ){.        
6540: 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 70 2d 3e  memcpy(zNew, p->
6550: 7a 54 65 78 74 2c 20 70 2d 3e 6e 43 68 61 72 29  zText, p->nChar)
6560: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
6570: 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 70  3StrAccumReset(p
6580: 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 54  );.        p->zT
6590: 65 78 74 20 3d 20 7a 4e 65 77 3b 0a 20 20 20 20  ext = zNew;.    
65a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
65b0: 20 70 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   p->mallocFailed
65c0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71   = 1;.        sq
65d0: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
65e0: 65 74 28 70 29 3b 0a 20 20 20 20 20 20 20 20 72  et(p);.        r
65f0: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
6600: 20 20 20 7d 0a 20 20 7d 0a 20 20 6d 65 6d 63 70     }.  }.  memcp
6610: 79 28 26 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e  y(&p->zText[p->n
6620: 43 68 61 72 5d 2c 20 7a 2c 20 4e 29 3b 0a 20 20  Char], z, N);.  
6630: 70 2d 3e 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a 7d  p->nChar += N;.}
6640: 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 69 73 68 20 6f  ../*.** Finish o
6650: 66 66 20 61 20 73 74 72 69 6e 67 20 62 79 20 6d  ff a string by m
6660: 61 6b 69 6e 67 20 73 75 72 65 20 69 74 20 69 73  aking sure it is
6670: 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64   zero-terminated
6680: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 6f  ..** Return a po
6690: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 72 65 73  inter to the res
66a0: 75 6c 74 69 6e 67 20 73 74 72 69 6e 67 2e 20 20  ulting string.  
66b0: 52 65 74 75 72 6e 20 61 20 4e 55 4c 4c 0a 2a 2a  Return a NULL.**
66c0: 20 70 6f 69 6e 74 65 72 20 69 66 20 61 6e 79 20   pointer if any 
66d0: 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 77 61  kind of error wa
66e0: 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a  s encountered..*
66f0: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53  /.char *sqlite3S
6700: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74  trAccumFinish(St
6710: 72 41 63 63 75 6d 20 2a 70 29 7b 0a 20 20 69 66  rAccum *p){.  if
6720: 28 20 70 2d 3e 7a 54 65 78 74 20 29 7b 0a 20 20  ( p->zText ){.  
6730: 20 20 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43    p->zText[p->nC
6740: 68 61 72 5d 20 3d 20 30 3b 0a 20 20 20 20 69 66  har] = 0;.    if
6750: 28 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63 20 26  ( p->useMalloc &
6760: 26 20 70 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a  & p->zText==p->z
6770: 42 61 73 65 20 29 7b 0a 20 20 20 20 20 20 70 2d  Base ){.      p-
6780: 3e 7a 54 65 78 74 20 3d 20 73 71 6c 69 74 65 33  >zText = sqlite3
6790: 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70 2d 3e 64  DbMallocRaw(p->d
67a0: 62 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 20 29 3b  b, p->nChar+1 );
67b0: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 7a 54  .      if( p->zT
67c0: 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ext ){.        m
67d0: 65 6d 63 70 79 28 70 2d 3e 7a 54 65 78 74 2c 20  emcpy(p->zText, 
67e0: 70 2d 3e 7a 42 61 73 65 2c 20 70 2d 3e 6e 43 68  p->zBase, p->nCh
67f0: 61 72 2b 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ar+1);.      }el
6800: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 6d  se{.        p->m
6810: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
6820: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
6830: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a   }.  return p->z
6840: 54 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  Text;.}../*.** R
6850: 65 73 65 74 20 61 6e 20 53 74 72 41 63 63 75 6d  eset an StrAccum
6860: 20 73 74 72 69 6e 67 2e 20 20 52 65 63 6c 61 69   string.  Reclai
6870: 6d 20 61 6c 6c 20 6d 61 6c 6c 6f 63 65 64 20 6d  m all malloced m
6880: 65 6d 6f 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  emory..*/.void s
6890: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
68a0: 73 65 74 28 53 74 72 41 63 63 75 6d 20 2a 70 29  set(StrAccum *p)
68b0: 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 74  {.  if( p->zText
68c0: 21 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20  !=p->zBase ){.  
68d0: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
68e0: 70 2d 3e 64 62 2c 20 70 2d 3e 7a 54 65 78 74 29  p->db, p->zText)
68f0: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 7a 54 65 78 74  ;.  }.  p->zText
6900: 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49   = 0;.}../*.** I
6910: 6e 69 74 69 61 6c 69 7a 65 20 61 20 73 74 72 69  nitialize a stri
6920: 6e 67 20 61 63 63 75 6d 75 6c 61 74 6f 72 0a 2a  ng accumulator.*
6930: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  /.void sqlite3St
6940: 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
6950: 63 75 6d 20 2a 70 2c 20 63 68 61 72 20 2a 7a 42  cum *p, char *zB
6960: 61 73 65 2c 20 69 6e 74 20 6e 2c 20 69 6e 74 20  ase, int n, int 
6970: 6d 78 29 7b 0a 20 20 70 2d 3e 7a 54 65 78 74 20  mx){.  p->zText 
6980: 3d 20 70 2d 3e 7a 42 61 73 65 20 3d 20 7a 42 61  = p->zBase = zBa
6990: 73 65 3b 0a 20 20 70 2d 3e 64 62 20 3d 20 30 3b  se;.  p->db = 0;
69a0: 0a 20 20 70 2d 3e 6e 43 68 61 72 20 3d 20 30 3b  .  p->nChar = 0;
69b0: 0a 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 6e  .  p->nAlloc = n
69c0: 3b 0a 20 20 70 2d 3e 6d 78 41 6c 6c 6f 63 20 3d  ;.  p->mxAlloc =
69d0: 20 6d 78 3b 0a 20 20 70 2d 3e 75 73 65 4d 61 6c   mx;.  p->useMal
69e0: 6c 6f 63 20 3d 20 31 3b 0a 20 20 70 2d 3e 74 6f  loc = 1;.  p->to
69f0: 6f 42 69 67 20 3d 20 30 3b 0a 20 20 70 2d 3e 6d  oBig = 0;.  p->m
6a00: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 30 3b  allocFailed = 0;
6a10: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  .}../*.** Print 
6a20: 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  into memory obta
6a30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
6a40: 4d 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65 20 74  Malloc().  Use t
6a50: 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25  he internal.** %
6a60: 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65  -conversion exte
6a70: 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20  nsions..*/.char 
6a80: 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
6a90: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
6aa0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
6ab0: 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a  t, va_list ap){.
6ac0: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68 61    char *z;.  cha
6ad0: 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f 50  r zBase[SQLITE_P
6ae0: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a  RINT_BUF_SIZE];.
6af0: 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a    StrAccum acc;.
6b00: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
6b10: 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 42 61 73  mInit(&acc, zBas
6b20: 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29  e, sizeof(zBase)
6b30: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
6b40: 20 20 20 20 20 20 20 20 64 62 20 3f 20 64 62 2d          db ? db-
6b50: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
6b60: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 3a 20 53  IMIT_LENGTH] : S
6b70: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
6b80: 29 3b 0a 20 20 61 63 63 2e 64 62 20 3d 20 64 62  );.  acc.db = db
6b90: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
6ba0: 6e 74 66 28 26 61 63 63 2c 20 31 2c 20 7a 46 6f  ntf(&acc, 1, zFo
6bb0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d  rmat, ap);.  z =
6bc0: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6bd0: 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20  Finish(&acc);.  
6be0: 69 66 28 20 61 63 63 2e 6d 61 6c 6c 6f 63 46 61  if( acc.mallocFa
6bf0: 69 6c 65 64 20 26 26 20 64 62 20 29 7b 0a 20 20  iled && db ){.  
6c00: 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
6c10: 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65  ed = 1;.  }.  re
6c20: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn z;.}../*.**
6c30: 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f   Print into memo
6c40: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
6c50: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e   sqliteMalloc().
6c60: 20 20 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e    Use the intern
6c70: 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69  al.** %-conversi
6c80: 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a  on extensions..*
6c90: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  /.char *sqlite3M
6ca0: 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a  Printf(sqlite3 *
6cb0: 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
6cc0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
6cd0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63   va_list ap;.  c
6ce0: 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61  har *z;.  va_sta
6cf0: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
6d00: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d  .  z = sqlite3VM
6d10: 50 72 69 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d  Printf(db, zForm
6d20: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
6d30: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
6d40: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4c 69 6b 65  z;.}../*.** Like
6d50: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
6d60: 29 2c 20 62 75 74 20 63 61 6c 6c 20 73 71 6c 69  ), but call sqli
6d70: 74 65 33 44 62 46 72 65 65 28 29 20 6f 6e 20 7a  te3DbFree() on z
6d80: 53 74 72 20 61 66 74 65 72 20 66 6f 72 6d 61 74  Str after format
6d90: 74 69 6e 67 0a 2a 2a 20 74 68 65 20 73 74 72 69  ting.** the stri
6da0: 6e 67 20 61 6e 64 20 62 65 66 6f 72 65 20 72 65  ng and before re
6db0: 74 75 72 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20  turnning.  This 
6dc0: 72 6f 75 74 69 6e 65 20 69 73 20 69 6e 74 65 6e  routine is inten
6dd0: 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 0a 2a  ded to be used.*
6de0: 2a 20 74 6f 20 6d 6f 64 69 66 79 20 61 6e 20 65  * to modify an e
6df0: 78 69 73 74 69 6e 67 20 73 74 72 69 6e 67 2e 20  xisting string. 
6e00: 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a   For example:.**
6e10: 0a 2a 2a 20 20 20 20 20 20 20 78 20 3d 20 73 71  .**       x = sq
6e20: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
6e30: 20 78 2c 20 22 70 72 65 66 69 78 20 25 73 20 73   x, "prefix %s s
6e40: 75 66 66 69 78 22 2c 20 78 29 3b 0a 2a 2a 0a 2a  uffix", x);.**.*
6e50: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  /.char *sqlite3M
6e60: 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 20  Appendf(sqlite3 
6e70: 2a 64 62 2c 20 63 68 61 72 20 2a 7a 53 74 72 2c  *db, char *zStr,
6e80: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
6e90: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
6ea0: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72  _list ap;.  char
6eb0: 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   *z;.  va_start(
6ec0: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
6ed0: 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69  z = sqlite3VMPri
6ee0: 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c  ntf(db, zFormat,
6ef0: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61   ap);.  va_end(a
6f00: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  p);.  sqlite3DbF
6f10: 72 65 65 28 64 62 2c 20 7a 53 74 72 29 3b 0a 20  ree(db, zStr);. 
6f20: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
6f30: 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d  .** Print into m
6f40: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
6f50: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
6f60: 6f 63 28 29 2e 20 20 4f 6d 69 74 20 74 68 65 20  oc().  Omit the 
6f70: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f  internal.** %-co
6f80: 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69  nversion extensi
6f90: 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  ons..*/.char *sq
6fa0: 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 63  lite3_vmprintf(c
6fb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
6fc0: 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29 7b  at, va_list ap){
6fd0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68  .  char *z;.  ch
6fe0: 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f  ar zBase[SQLITE_
6ff0: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b  PRINT_BUF_SIZE];
7000: 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b  .  StrAccum acc;
7010: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7020: 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20  OMIT_AUTOINIT.  
7030: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 69 74  if( sqlite3_init
7040: 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74 75 72  ialize() ) retur
7050: 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  n 0;.#endif.  sq
7060: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
7070: 74 28 26 61 63 63 2c 20 7a 42 61 73 65 2c 20 73  t(&acc, zBase, s
7080: 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20 53 51  izeof(zBase), SQ
7090: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 29  LITE_MAX_LENGTH)
70a0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
70b0: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f  ntf(&acc, 0, zFo
70c0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d  rmat, ap);.  z =
70d0: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
70e0: 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20  Finish(&acc);.  
70f0: 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a  return z;.}../*.
7100: 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65  ** Print into me
7110: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
7120: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
7130: 63 28 29 28 29 2e 20 20 4f 6d 69 74 20 74 68 65  c()().  Omit the
7140: 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63   internal.** %-c
7150: 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73  onversion extens
7160: 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73  ions..*/.char *s
7170: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 63  qlite3_mprintf(c
7180: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
7190: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  at, ...){.  va_l
71a0: 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a  ist ap;.  char *
71b0: 7a 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  z;.#ifndef SQLIT
71c0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a  E_OMIT_AUTOINIT.
71d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
71e0: 69 74 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74  itialize() ) ret
71f0: 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  urn 0;.#endif.  
7200: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
7210: 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  rmat);.  z = sql
7220: 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46  ite3_vmprintf(zF
7230: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61  ormat, ap);.  va
7240: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 72 65 74 75  _end(ap);.  retu
7250: 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73  rn z;.}../*.** s
7260: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
7270: 29 20 77 6f 72 6b 73 20 6c 69 6b 65 20 73 6e 70  ) works like snp
7280: 72 69 6e 74 66 28 29 20 65 78 63 65 70 74 20 74  rintf() except t
7290: 68 61 74 20 69 74 20 69 67 6e 6f 72 65 73 20 74  hat it ignores t
72a0: 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 20 6c 6f  he.** current lo
72b0: 63 61 6c 65 20 73 65 74 74 69 6e 67 73 2e 20 20  cale settings.  
72c0: 54 68 69 73 20 69 73 20 69 6d 70 6f 72 74 61 6e  This is importan
72d0: 74 20 66 6f 72 20 53 51 4c 69 74 65 20 62 65 63  t for SQLite bec
72e0: 61 75 73 65 20 77 65 0a 2a 2a 20 61 72 65 20 6e  ause we.** are n
72f0: 6f 74 20 61 62 6c 65 20 74 6f 20 75 73 65 20 61  ot able to use a
7300: 20 22 2c 22 20 61 73 20 74 68 65 20 64 65 63 69   "," as the deci
7310: 6d 61 6c 20 70 6f 69 6e 74 20 69 6e 20 70 6c 61  mal point in pla
7320: 63 65 20 6f 66 20 22 2e 22 20 61 73 0a 2a 2a 20  ce of "." as.** 
7330: 73 70 65 63 69 66 69 65 64 20 62 79 20 73 6f 6d  specified by som
7340: 65 20 6c 6f 63 61 6c 65 73 2e 0a 2a 2f 0a 63 68  e locales..*/.ch
7350: 61 72 20 2a 73 71 6c 69 74 65 33 5f 73 6e 70 72  ar *sqlite3_snpr
7360: 69 6e 74 66 28 69 6e 74 20 6e 2c 20 63 68 61 72  intf(int n, char
7370: 20 2a 7a 42 75 66 2c 20 63 6f 6e 73 74 20 63 68   *zBuf, const ch
7380: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e  ar *zFormat, ...
7390: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ){.  char *z;.  
73a0: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 53 74  va_list ap;.  St
73b0: 72 41 63 63 75 6d 20 61 63 63 3b 0a 0a 20 20 69  rAccum acc;..  i
73c0: 66 28 20 6e 3c 3d 30 20 29 7b 0a 20 20 20 20 72  f( n<=0 ){.    r
73d0: 65 74 75 72 6e 20 7a 42 75 66 3b 0a 20 20 7d 0a  eturn zBuf;.  }.
73e0: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
73f0: 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 42 75 66  mInit(&acc, zBuf
7400: 2c 20 6e 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75  , n, 0);.  acc.u
7410: 73 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  seMalloc = 0;.  
7420: 76 61 5f 73 74 61 72 74 28 61 70 2c 7a 46 6f 72  va_start(ap,zFor
7430: 6d 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  mat);.  sqlite3V
7440: 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c  XPrintf(&acc, 0,
7450: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
7460: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 7a   va_end(ap);.  z
7470: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 41 63 63   = sqlite3StrAcc
7480: 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a  umFinish(&acc);.
7490: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 23    return z;.}..#
74a0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
74b0: 45 5f 44 45 42 55 47 29 0a 2f 2a 0a 2a 2a 20 41  E_DEBUG)./*.** A
74c0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 70 72 69 6e   version of prin
74d0: 74 66 28 29 20 74 68 61 74 20 75 6e 64 65 72 73  tf() that unders
74e0: 74 61 6e 64 73 20 25 6c 6c 64 2e 20 20 55 73 65  tands %lld.  Use
74f0: 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e  d for debugging.
7500: 0a 2a 2a 20 54 68 65 20 70 72 69 6e 74 66 28 29  .** The printf()
7510: 20 62 75 69 6c 74 20 69 6e 74 6f 20 73 6f 6d 65   built into some
7520: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 77 69 6e   versions of win
7530: 64 6f 77 73 20 64 6f 65 73 20 6e 6f 74 20 75 6e  dows does not un
7540: 64 65 72 73 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a  derstand %lld.**
7550: 20 61 6e 64 20 73 65 67 66 61 75 6c 74 73 20 69   and segfaults i
7560: 66 20 79 6f 75 20 67 69 76 65 20 69 74 20 61 20  f you give it a 
7570: 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a  long long int..*
7580: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  /.void sqlite3De
7590: 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
75a0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
75b0: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
75c0: 70 3b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63  p;.  StrAccum ac
75d0: 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35  c;.  char zBuf[5
75e0: 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 53 74  00];.  sqlite3St
75f0: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c  rAccumInit(&acc,
7600: 20 7a 42 75 66 2c 20 73 69 7a 65 6f 66 28 7a 42   zBuf, sizeof(zB
7610: 75 66 29 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75  uf), 0);.  acc.u
7620: 73 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  seMalloc = 0;.  
7630: 76 61 5f 73 74 61 72 74 28 61 70 2c 7a 46 6f 72  va_start(ap,zFor
7640: 6d 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  mat);.  sqlite3V
7650: 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c  XPrintf(&acc, 0,
7660: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
7670: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73   va_end(ap);.  s
7680: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
7690: 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20 66 70  nish(&acc);.  fp
76a0: 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 22 25 73  rintf(stdout,"%s
76b0: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 66 66 6c 75  ", zBuf);.  fflu
76c0: 73 68 28 73 74 64 6f 75 74 29 3b 0a 7d 0a 23 65  sh(stdout);.}.#e
76d0: 6e 64 69 66 0a                                   ndif.