/ Hex Artifact Content
Login

Artifact 9866a9a9c4a90f6d4147407f373df3fd5d5f9b6f:


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 39 20 32 30 30 38 2f 31 32 2f 31  v 1.99 2008/12/1
0180: 30 20 31 39 3a 32 36 3a 32 34 20 64 72 68 20 45  0 19:26:24 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 0a 2f 2a 0a 2a 2a 20 49 66 20 53  ,.};../*.** If S
1670: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
1680: 49 4e 47 5f 50 4f 49 4e 54 20 69 73 20 64 65 66  ING_POINT is def
1690: 69 6e 65 64 2c 20 74 68 65 6e 20 6e 6f 6e 65 20  ined, then none 
16a0: 6f 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 20  of the floating 
16b0: 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6e 76 65 72 73  point.** convers
16c0: 69 6f 6e 73 20 77 69 6c 6c 20 77 6f 72 6b 2e 0a  ions will work..
16d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
16e0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
16f0: 50 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 2a 76 61  POINT./*.** "*va
1700: 6c 22 20 69 73 20 61 20 64 6f 75 62 6c 65 20 73  l" is a double s
1710: 75 63 68 20 74 68 61 74 20 30 2e 31 20 3c 3d 20  uch that 0.1 <= 
1720: 2a 76 61 6c 20 3c 20 31 30 2e 30 0a 2a 2a 20 52  *val < 10.0.** R
1730: 65 74 75 72 6e 20 74 68 65 20 61 73 63 69 69 20  eturn the ascii 
1740: 63 6f 64 65 20 66 6f 72 20 74 68 65 20 6c 65 61  code for the lea
1750: 64 69 6e 67 20 64 69 67 69 74 20 6f 66 20 2a 76  ding digit of *v
1760: 61 6c 2c 20 74 68 65 6e 0a 2a 2a 20 6d 75 6c 74  al, then.** mult
1770: 69 70 6c 79 20 22 2a 76 61 6c 22 20 62 79 20 31  iply "*val" by 1
1780: 30 2e 30 20 74 6f 20 72 65 6e 6f 72 6d 61 6c 69  0.0 to renormali
1790: 7a 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c  ze..**.** Exampl
17a0: 65 3a 0a 2a 2a 20 20 20 20 20 69 6e 70 75 74 3a  e:.**     input:
17b0: 20 20 20 20 20 2a 76 61 6c 20 3d 20 33 2e 31 34       *val = 3.14
17c0: 31 35 39 0a 2a 2a 20 20 20 20 20 6f 75 74 70 75  159.**     outpu
17d0: 74 3a 20 20 20 20 2a 76 61 6c 20 3d 20 31 2e 34  t:    *val = 1.4
17e0: 31 35 39 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  159    function 
17f0: 72 65 74 75 72 6e 20 3d 20 27 33 27 0a 2a 2a 0a  return = '3'.**.
1800: 2a 2a 20 54 68 65 20 63 6f 75 6e 74 65 72 20 2a  ** The counter *
1810: 63 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  cnt is increment
1820: 65 64 20 65 61 63 68 20 74 69 6d 65 2e 20 20 41  ed each time.  A
1830: 66 74 65 72 20 63 6f 75 6e 74 65 72 20 65 78 63  fter counter exc
1840: 65 65 64 73 0a 2a 2a 20 31 36 20 28 74 68 65 20  eeds.** 16 (the 
1850: 6e 75 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66  number of signif
1860: 69 63 61 6e 74 20 64 69 67 69 74 73 20 69 6e 20  icant digits in 
1870: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 29 20  a 64-bit float) 
1880: 27 30 27 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  '0' is.** always
1890: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74   returned..*/.st
18a0: 61 74 69 63 20 63 68 61 72 20 65 74 5f 67 65 74  atic char et_get
18b0: 64 69 67 69 74 28 4c 4f 4e 47 44 4f 55 42 4c 45  digit(LONGDOUBLE
18c0: 5f 54 59 50 45 20 2a 76 61 6c 2c 20 69 6e 74 20  _TYPE *val, int 
18d0: 2a 63 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67  *cnt){.  int dig
18e0: 69 74 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45  it;.  LONGDOUBLE
18f0: 5f 54 59 50 45 20 64 3b 0a 20 20 69 66 28 20 28  _TYPE d;.  if( (
1900: 2a 63 6e 74 29 2b 2b 20 3e 3d 20 31 36 20 29 20  *cnt)++ >= 16 ) 
1910: 72 65 74 75 72 6e 20 27 30 27 3b 0a 20 20 64 69  return '0';.  di
1920: 67 69 74 20 3d 20 28 69 6e 74 29 2a 76 61 6c 3b  git = (int)*val;
1930: 0a 20 20 64 20 3d 20 64 69 67 69 74 3b 0a 20 20  .  d = digit;.  
1940: 64 69 67 69 74 20 2b 3d 20 27 30 27 3b 0a 20 20  digit += '0';.  
1950: 2a 76 61 6c 20 3d 20 28 2a 76 61 6c 20 2d 20 64  *val = (*val - d
1960: 29 2a 31 30 2e 30 3b 0a 20 20 72 65 74 75 72 6e  )*10.0;.  return
1970: 20 28 63 68 61 72 29 64 69 67 69 74 3b 0a 7d 0a   (char)digit;.}.
1980: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
1990: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
19a0: 4f 49 4e 54 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  OINT */../*.** A
19b0: 70 70 65 6e 64 20 4e 20 73 70 61 63 65 20 63 68  ppend N space ch
19c0: 61 72 61 63 74 65 72 73 20 74 6f 20 74 68 65 20  aracters to the 
19d0: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 62 75 66  given string buf
19e0: 66 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  fer..*/.static v
19f0: 6f 69 64 20 61 70 70 65 6e 64 53 70 61 63 65 28  oid appendSpace(
1a00: 53 74 72 41 63 63 75 6d 20 2a 70 41 63 63 75 6d  StrAccum *pAccum
1a10: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 73 74 61 74  , int N){.  stat
1a20: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 53  ic const char zS
1a30: 70 61 63 65 73 5b 5d 20 3d 20 22 20 20 20 20 20  paces[] = "     
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a50: 20 20 20 20 20 20 20 20 22 3b 0a 20 20 77 68 69          ";.  whi
1a60: 6c 65 28 20 4e 3e 3d 28 69 6e 74 29 73 69 7a 65  le( N>=(int)size
1a70: 6f 66 28 7a 53 70 61 63 65 73 29 2d 31 20 29 7b  of(zSpaces)-1 ){
1a80: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41  .    sqlite3StrA
1a90: 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75  ccumAppend(pAccu
1aa0: 6d 2c 20 7a 53 70 61 63 65 73 2c 20 73 69 7a 65  m, zSpaces, size
1ab0: 6f 66 28 7a 53 70 61 63 65 73 29 2d 31 29 3b 0a  of(zSpaces)-1);.
1ac0: 20 20 20 20 4e 20 2d 3d 20 73 69 7a 65 6f 66 28      N -= sizeof(
1ad0: 7a 53 70 61 63 65 73 29 2d 31 3b 0a 20 20 7d 0a  zSpaces)-1;.  }.
1ae0: 20 20 69 66 28 20 4e 3e 30 20 29 7b 0a 20 20 20    if( N>0 ){.   
1af0: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
1b00: 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 7a  Append(pAccum, z
1b10: 53 70 61 63 65 73 2c 20 4e 29 3b 0a 20 20 7d 0a  Spaces, N);.  }.
1b20: 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 6d 61 63 68  }../*.** On mach
1b30: 69 6e 65 73 20 77 69 74 68 20 61 20 73 6d 61 6c  ines with a smal
1b40: 6c 20 73 74 61 63 6b 20 73 69 7a 65 2c 20 79 6f  l stack size, yo
1b50: 75 20 63 61 6e 20 72 65 64 65 66 69 6e 65 20 74  u can redefine t
1b60: 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 50 52 49  he.** SQLITE_PRI
1b70: 4e 54 5f 42 55 46 5f 53 49 5a 45 20 74 6f 20 62  NT_BUF_SIZE to b
1b80: 65 20 6c 65 73 73 20 74 68 61 6e 20 33 35 30 2e  e less than 350.
1b90: 20 20 42 75 74 20 62 65 77 61 72 65 20 2d 20 66    But beware - f
1ba0: 6f 72 0a 2a 2a 20 73 6d 61 6c 6c 65 72 20 76 61  or.** smaller va
1bb0: 6c 75 65 73 20 73 6f 6d 65 20 25 66 20 63 6f 6e  lues some %f con
1bc0: 76 65 72 73 69 6f 6e 73 20 6d 61 79 20 67 6f 20  versions may go 
1bd0: 69 6e 74 6f 20 61 6e 20 69 6e 66 69 6e 69 74 65  into an infinite
1be0: 20 6c 6f 6f 70 2e 0a 2a 2f 0a 23 69 66 6e 64 65   loop..*/.#ifnde
1bf0: 66 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42  f SQLITE_PRINT_B
1c00: 55 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  UF_SIZE.# define
1c10: 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55   SQLITE_PRINT_BU
1c20: 46 5f 53 49 5a 45 20 33 35 30 0a 23 65 6e 64 69  F_SIZE 350.#endi
1c30: 66 0a 23 64 65 66 69 6e 65 20 65 74 42 55 46 53  f.#define etBUFS
1c40: 49 5a 45 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  IZE SQLITE_PRINT
1c50: 5f 42 55 46 5f 53 49 5a 45 20 20 2f 2a 20 53 69  _BUF_SIZE  /* Si
1c60: 7a 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  ze of the output
1c70: 20 62 75 66 66 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a   buffer */../*.*
1c80: 2a 20 54 68 65 20 72 6f 6f 74 20 70 72 6f 67 72  * The root progr
1c90: 61 6d 2e 20 20 41 6c 6c 20 76 61 72 69 61 74 69  am.  All variati
1ca0: 6f 6e 73 20 63 61 6c 6c 20 74 68 69 73 20 63 6f  ons call this co
1cb0: 72 65 2e 0a 2a 2a 0a 2a 2a 20 49 4e 50 55 54 53  re..**.** INPUTS
1cc0: 3a 0a 2a 2a 20 20 20 66 75 6e 63 20 20 20 54 68  :.**   func   Th
1cd0: 69 73 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  is is a pointer 
1ce0: 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 61  to a function ta
1cf0: 6b 69 6e 67 20 74 68 72 65 65 20 61 72 67 75 6d  king three argum
1d00: 65 6e 74 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ents.**         
1d10: 20 20 20 31 2e 20 41 20 70 6f 69 6e 74 65 72 20     1. A pointer 
1d20: 74 6f 20 61 6e 79 74 68 69 6e 67 2e 20 20 53 61  to anything.  Sa
1d30: 6d 65 20 61 73 20 74 68 65 20 22 61 72 67 22 20  me as the "arg" 
1d40: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2a 20 20 20  parameter..**   
1d50: 20 20 20 20 20 20 20 20 20 32 2e 20 41 20 70 6f           2. A po
1d60: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 69 73  inter to the lis
1d70: 74 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  t of characters 
1d80: 74 6f 20 62 65 20 6f 75 74 70 75 74 0a 2a 2a 20  to be output.** 
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4e                (N
1da0: 6f 74 65 2c 20 74 68 69 73 20 6c 69 73 74 20 69  ote, this list i
1db0: 73 20 4e 4f 54 20 6e 75 6c 6c 20 74 65 72 6d 69  s NOT null termi
1dc0: 6e 61 74 65 64 2e 29 0a 2a 2a 20 20 20 20 20 20  nated.).**      
1dd0: 20 20 20 20 20 20 33 2e 20 41 6e 20 69 6e 74 65        3. An inte
1de0: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  ger number of ch
1df0: 61 72 61 63 74 65 72 73 20 74 6f 20 62 65 20 6f  aracters to be o
1e00: 75 74 70 75 74 2e 0a 2a 2a 20 20 20 20 20 20 20  utput..**       
1e10: 20 20 20 20 20 20 20 20 28 4e 6f 74 65 3a 20 54          (Note: T
1e20: 68 69 73 20 6e 75 6d 62 65 72 20 6d 69 67 68 74  his number might
1e30: 20 62 65 20 7a 65 72 6f 2e 29 0a 2a 2a 0a 2a 2a   be zero.).**.**
1e40: 20 20 20 61 72 67 20 20 20 20 54 68 69 73 20 69     arg    This i
1e50: 73 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  s the pointer to
1e60: 20 61 6e 79 74 68 69 6e 67 20 77 68 69 63 68 20   anything which 
1e70: 77 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20 61  will be passed a
1e80: 73 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 20  s the.**        
1e90: 20 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74    first argument
1ea0: 20 74 6f 20 22 66 75 6e 63 22 2e 20 20 55 73 65   to "func".  Use
1eb0: 20 69 74 20 66 6f 72 20 77 68 61 74 65 76 65 72   it for whatever
1ec0: 20 79 6f 75 20 6c 69 6b 65 2e 0a 2a 2a 0a 2a 2a   you like..**.**
1ed0: 20 20 20 66 6d 74 20 20 20 20 54 68 69 73 20 69     fmt    This i
1ee0: 73 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72  s the format str
1ef0: 69 6e 67 2c 20 61 73 20 69 6e 20 74 68 65 20 75  ing, as in the u
1f00: 73 75 61 6c 20 70 72 69 6e 74 2e 0a 2a 2a 0a 2a  sual print..**.*
1f10: 2a 20 20 20 61 70 20 20 20 20 20 54 68 69 73 20  *   ap     This 
1f20: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1f30: 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
1f40: 6e 74 73 2e 20 20 53 61 6d 65 20 61 73 20 69 6e  nts.  Same as in
1f50: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 76 66 70  .**          vfp
1f60: 72 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 4f 55 54 50  rint..**.** OUTP
1f70: 55 54 53 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20  UTS:.**         
1f80: 20 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   The return valu
1f90: 65 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  e is the total n
1fa0: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
1fb0: 65 72 73 20 73 65 6e 74 20 74 6f 0a 2a 2a 20 20  ers sent to.**  
1fc0: 20 20 20 20 20 20 20 20 74 68 65 20 66 75 6e 63          the func
1fd0: 74 69 6f 6e 20 22 66 75 6e 63 22 2e 20 20 52 65  tion "func".  Re
1fe0: 74 75 72 6e 73 20 2d 31 20 6f 6e 20 61 20 65 72  turns -1 on a er
1ff0: 72 6f 72 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ror..**.** Note 
2000: 74 68 61 74 20 74 68 65 20 6f 72 64 65 72 20 69  that the order i
2010: 6e 20 77 68 69 63 68 20 61 75 74 6f 6d 61 74 69  n which automati
2020: 63 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  c variables are 
2030: 64 65 63 6c 61 72 65 64 20 62 65 6c 6f 77 0a 2a  declared below.*
2040: 2a 20 73 65 65 6d 73 20 74 6f 20 6d 61 6b 65 20  * seems to make 
2050: 61 20 62 69 67 20 64 69 66 66 65 72 65 6e 63 65  a big difference
2060: 20 69 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   in determining 
2070: 68 6f 77 20 66 61 73 74 20 74 68 69 73 20 62 65  how fast this be
2080: 61 73 74 0a 2a 2a 20 77 69 6c 6c 20 72 75 6e 2e  ast.** will run.
2090: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
20a0: 56 58 50 72 69 6e 74 66 28 0a 20 20 53 74 72 41  VXPrintf(.  StrA
20b0: 63 63 75 6d 20 2a 70 41 63 63 75 6d 2c 20 20 20  ccum *pAccum,   
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20d0: 2a 20 41 63 63 75 6d 75 6c 61 74 65 20 72 65 73  * Accumulate res
20e0: 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 20 69  ults here */.  i
20f0: 6e 74 20 75 73 65 45 78 74 65 6e 64 65 64 2c 20  nt useExtended, 
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2110: 20 20 2f 2a 20 41 6c 6c 6f 77 20 65 78 74 65 6e    /* Allow exten
2120: 64 65 64 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e  ded %-conversion
2130: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
2140: 72 20 2a 66 6d 74 2c 20 20 20 20 20 20 20 20 20  r *fmt,         
2150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
2160: 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20  mat string */.  
2170: 76 61 5f 6c 69 73 74 20 61 70 20 20 20 20 20 20  va_list ap      
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 2f 2a 20 61 72 67 75 6d 65 6e 74 73 20     /* arguments 
21a0: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 63 3b 20 20  */.){.  int c;  
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c0: 20 20 20 2f 2a 20 4e 65 78 74 20 63 68 61 72 61     /* Next chara
21d0: 63 74 65 72 20 69 6e 20 74 68 65 20 66 6f 72 6d  cter in the form
21e0: 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 63  at string */.  c
21f0: 68 61 72 20 2a 62 75 66 70 74 3b 20 20 20 20 20  har *bufpt;     
2200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
2210: 6e 74 65 72 20 74 6f 20 74 68 65 20 63 6f 6e 76  nter to the conv
2220: 65 72 73 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f  ersion buffer */
2230: 0a 20 20 69 6e 74 20 70 72 65 63 69 73 69 6f 6e  .  int precision
2240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
2250: 20 50 72 65 63 69 73 69 6f 6e 20 6f 66 20 74 68   Precision of th
2260: 65 20 63 75 72 72 65 6e 74 20 66 69 65 6c 64 20  e current field 
2270: 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 67 74 68 3b  */.  int length;
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65  /* Length of the
22a0: 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
22b0: 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  idx;            
22c0: 20 20 20 20 20 20 20 2f 2a 20 41 20 67 65 6e 65         /* A gene
22d0: 72 61 6c 20 70 75 72 70 6f 73 65 20 6c 6f 6f 70  ral purpose loop
22e0: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
22f0: 74 20 77 69 64 74 68 3b 20 20 20 20 20 20 20 20  t width;        
2300: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 69 64 74           /* Widt
2310: 68 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  h of the current
2320: 20 66 69 65 6c 64 20 2a 2f 0a 20 20 65 74 42 79   field */.  etBy
2330: 74 65 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74  te flag_leftjust
2340: 69 66 79 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  ify;   /* True i
2350: 66 20 22 2d 22 20 66 6c 61 67 20 69 73 20 70 72  f "-" flag is pr
2360: 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74  esent */.  etByt
2370: 65 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 3b  e flag_plussign;
2380: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
2390: 20 22 2b 22 20 66 6c 61 67 20 69 73 20 70 72 65   "+" flag is pre
23a0: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65  sent */.  etByte
23b0: 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 3b   flag_blanksign;
23c0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
23d0: 22 20 22 20 66 6c 61 67 20 69 73 20 70 72 65 73  " " flag is pres
23e0: 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ent */.  etByte 
23f0: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
2400: 72 6d 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 22  rm; /* True if "
2410: 23 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65  #" flag is prese
2420: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  nt */.  etByte f
2430: 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 20 20 20  lag_altform2;   
2440: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 21     /* True if "!
2450: 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e  " flag is presen
2460: 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  t */.  etByte fl
2470: 61 67 5f 7a 65 72 6f 70 61 64 3b 20 20 20 20 20  ag_zeropad;     
2480: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 66 69 65    /* True if fie
2490: 6c 64 20 77 69 64 74 68 20 63 6f 6e 73 74 61 6e  ld width constan
24a0: 74 20 73 74 61 72 74 73 20 77 69 74 68 20 7a 65  t starts with ze
24b0: 72 6f 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  ro */.  etByte f
24c0: 6c 61 67 5f 6c 6f 6e 67 3b 20 20 20 20 20 20 20  lag_long;       
24d0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 6c     /* True if "l
24e0: 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e  " flag is presen
24f0: 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  t */.  etByte fl
2500: 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 3b 20 20 20 20  ag_longlong;    
2510: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
2520: 20 22 6c 6c 22 20 66 6c 61 67 20 69 73 20 70 72   "ll" flag is pr
2530: 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74  esent */.  etByt
2540: 65 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20  e done;         
2550: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 74 65        /* Loop te
2560: 72 6d 69 6e 61 74 69 6f 6e 20 66 6c 61 67 20 2a  rmination flag *
2570: 2f 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  /.  sqlite_uint6
2580: 34 20 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20 2f  4 longvalue;   /
2590: 2a 20 56 61 6c 75 65 20 66 6f 72 20 69 6e 74 65  * Value for inte
25a0: 67 65 72 20 74 79 70 65 73 20 2a 2f 0a 20 20 4c  ger types */.  L
25b0: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 72  ONGDOUBLE_TYPE r
25c0: 65 61 6c 76 61 6c 75 65 3b 20 2f 2a 20 56 61 6c  ealvalue; /* Val
25d0: 75 65 20 66 6f 72 20 72 65 61 6c 20 74 79 70 65  ue for real type
25e0: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74 5f  s */.  const et_
25f0: 69 6e 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20 20  info *infop;    
2600: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
2610: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
2620: 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 2a  info structure *
2630: 2f 0a 20 20 63 68 61 72 20 62 75 66 5b 65 74 42  /.  char buf[etB
2640: 55 46 53 49 5a 45 5d 3b 20 20 20 20 20 20 20 2f  UFSIZE];       /
2650: 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 62 75 66  * Conversion buf
2660: 66 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 70 72  fer */.  char pr
2670: 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20 20  efix;           
2680: 20 20 20 20 2f 2a 20 50 72 65 66 69 78 20 63 68      /* Prefix ch
2690: 61 72 61 63 74 65 72 2e 20 20 22 2b 22 20 6f 72  aracter.  "+" or
26a0: 20 22 2d 22 20 6f 72 20 22 20 22 20 6f 72 20 27   "-" or " " or '
26b0: 5c 30 27 2e 20 2a 2f 0a 20 20 65 74 42 79 74 65  \0'. */.  etByte
26c0: 20 78 74 79 70 65 20 3d 20 30 3b 20 20 20 20 20   xtype = 0;     
26d0: 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69       /* Conversi
26e0: 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f 0a 20  on paradigm */. 
26f0: 20 63 68 61 72 20 2a 7a 45 78 74 72 61 3b 20 20   char *zExtra;  
2700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
2710: 78 74 72 61 20 6d 65 6d 6f 72 79 20 75 73 65 64  xtra memory used
2720: 20 66 6f 72 20 65 74 54 43 4c 45 53 43 41 50 45   for etTCLESCAPE
2730: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 2a 2f 0a   conversions */.
2740: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2750: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
2760: 4e 54 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65  NT.  int  exp, e
2770: 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
2780: 2f 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72  /* exponent of r
2790: 65 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  eal numbers */. 
27a0: 20 64 6f 75 62 6c 65 20 72 6f 75 6e 64 65 72 3b   double rounder;
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
27c0: 73 65 64 20 66 6f 72 20 72 6f 75 6e 64 69 6e 67  sed for rounding
27d0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
27e0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 65 74 42 79  values */.  etBy
27f0: 74 65 20 66 6c 61 67 5f 64 70 3b 20 20 20 20 20  te flag_dp;     
2800: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
2810: 66 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  f decimal point 
2820: 73 68 6f 75 6c 64 20 62 65 20 73 68 6f 77 6e 20  should be shown 
2830: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
2840: 5f 72 74 7a 3b 20 20 20 20 20 20 20 20 20 20 20  _rtz;           
2850: 2f 2a 20 54 72 75 65 20 69 66 20 74 72 61 69 6c  /* True if trail
2860: 69 6e 67 20 7a 65 72 6f 73 20 73 68 6f 75 6c 64  ing zeros should
2870: 20 62 65 20 72 65 6d 6f 76 65 64 20 2a 2f 0a 20   be removed */. 
2880: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 65 78 70   etByte flag_exp
2890: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
28a0: 72 75 65 20 74 6f 20 66 6f 72 63 65 20 64 69 73  rue to force dis
28b0: 70 6c 61 79 20 6f 66 20 74 68 65 20 65 78 70 6f  play of the expo
28c0: 6e 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 73  nent */.  int ns
28d0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
28e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
28f0: 66 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69  f significant di
2900: 67 69 74 73 20 72 65 74 75 72 6e 65 64 20 2a 2f  gits returned */
2910: 0a 23 65 6e 64 69 66 0a 0a 20 20 6c 65 6e 67 74  .#endif..  lengt
2920: 68 20 3d 20 30 3b 0a 20 20 62 75 66 70 74 20 3d  h = 0;.  bufpt =
2930: 20 30 3b 0a 20 20 66 6f 72 28 3b 20 28 63 3d 28   0;.  for(; (c=(
2940: 2a 66 6d 74 29 29 21 3d 30 3b 20 2b 2b 66 6d 74  *fmt))!=0; ++fmt
2950: 29 7b 0a 20 20 20 20 69 66 28 20 63 21 3d 27 25  ){.    if( c!='%
2960: 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 61  ' ){.      int a
2970: 6d 74 3b 0a 20 20 20 20 20 20 62 75 66 70 74 20  mt;.      bufpt 
2980: 3d 20 28 63 68 61 72 20 2a 29 66 6d 74 3b 0a 20  = (char *)fmt;. 
2990: 20 20 20 20 20 61 6d 74 20 3d 20 31 3b 0a 20 20       amt = 1;.  
29a0: 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d 28 2a      while( (c=(*
29b0: 2b 2b 66 6d 74 29 29 21 3d 27 25 27 20 26 26 20  ++fmt))!='%' && 
29c0: 63 21 3d 30 20 29 20 61 6d 74 2b 2b 3b 0a 20 20  c!=0 ) amt++;.  
29d0: 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63      sqlite3StrAc
29e0: 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d  cumAppend(pAccum
29f0: 2c 20 62 75 66 70 74 2c 20 61 6d 74 29 3b 0a 20  , bufpt, amt);. 
2a00: 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20       if( c==0 ) 
2a10: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
2a20: 20 69 66 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29   if( (c=(*++fmt)
2a30: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )==0 ){.      sq
2a40: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
2a50: 65 6e 64 28 70 41 63 63 75 6d 2c 20 22 25 22 2c  end(pAccum, "%",
2a60: 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b   1);.      break
2a70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46  ;.    }.    /* F
2a80: 69 6e 64 20 6f 75 74 20 77 68 61 74 20 66 6c 61  ind out what fla
2a90: 67 73 20 61 72 65 20 70 72 65 73 65 6e 74 20 2a  gs are present *
2aa0: 2f 0a 20 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a  /.    flag_leftj
2ab0: 75 73 74 69 66 79 20 3d 20 66 6c 61 67 5f 70 6c  ustify = flag_pl
2ac0: 75 73 73 69 67 6e 20 3d 20 66 6c 61 67 5f 62 6c  ussign = flag_bl
2ad0: 61 6e 6b 73 69 67 6e 20 3d 20 0a 20 20 20 20 20  anksign = .     
2ae0: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
2af0: 72 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f 72  rm = flag_altfor
2b00: 6d 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70 61  m2 = flag_zeropa
2b10: 64 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65 20  d = 0;.    done 
2b20: 3d 20 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20  = 0;.    do{.   
2b30: 20 20 20 73 77 69 74 63 68 28 20 63 20 29 7b 0a     switch( c ){.
2b40: 20 20 20 20 20 20 20 20 63 61 73 65 20 27 2d 27          case '-'
2b50: 3a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73  :   flag_leftjus
2b60: 74 69 66 79 20 3d 20 31 3b 20 20 20 20 20 62 72  tify = 1;     br
2b70: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
2b80: 65 20 27 2b 27 3a 20 20 20 66 6c 61 67 5f 70 6c  e '+':   flag_pl
2b90: 75 73 73 69 67 6e 20 3d 20 31 3b 20 20 20 20 20  ussign = 1;     
2ba0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2bb0: 20 20 63 61 73 65 20 27 20 27 3a 20 20 20 66 6c    case ' ':   fl
2bc0: 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 31  ag_blanksign = 1
2bd0: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
2be0: 20 20 20 20 20 20 20 63 61 73 65 20 27 23 27 3a         case '#':
2bf0: 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74     flag_alternat
2c00: 65 66 6f 72 6d 20 3d 20 31 3b 20 20 20 62 72 65  eform = 1;   bre
2c10: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
2c20: 20 27 21 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74   '!':   flag_alt
2c30: 66 6f 72 6d 32 20 3d 20 31 3b 20 20 20 20 20 20  form2 = 1;      
2c40: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2c50: 20 63 61 73 65 20 27 30 27 3a 20 20 20 66 6c 61   case '0':   fla
2c60: 67 5f 7a 65 72 6f 70 61 64 20 3d 20 31 3b 20 20  g_zeropad = 1;  
2c70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2c80: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20        default:  
2c90: 20 20 64 6f 6e 65 20 3d 20 31 3b 20 20 20 20 20    done = 1;     
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
2cb0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
2cc0: 77 68 69 6c 65 28 20 21 64 6f 6e 65 20 26 26 20  while( !done && 
2cd0: 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 30 20  (c=(*++fmt))!=0 
2ce0: 29 3b 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68  );.    /* Get th
2cf0: 65 20 66 69 65 6c 64 20 77 69 64 74 68 20 2a 2f  e field width */
2d00: 0a 20 20 20 20 77 69 64 74 68 20 3d 20 30 3b 0a  .    width = 0;.
2d10: 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29      if( c=='*' )
2d20: 7b 0a 20 20 20 20 20 20 77 69 64 74 68 20 3d 20  {.      width = 
2d30: 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a  va_arg(ap,int);.
2d40: 20 20 20 20 20 20 69 66 28 20 77 69 64 74 68 3c        if( width<
2d50: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61  0 ){.        fla
2d60: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 3d 20  g_leftjustify = 
2d70: 31 3b 0a 20 20 20 20 20 20 20 20 77 69 64 74 68  1;.        width
2d80: 20 3d 20 2d 77 69 64 74 68 3b 0a 20 20 20 20 20   = -width;.     
2d90: 20 7d 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b   }.      c = *++
2da0: 66 6d 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  fmt;.    }else{.
2db0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d        while( c>=
2dc0: 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b  '0' && c<='9' ){
2dd0: 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d  .        width =
2de0: 20 77 69 64 74 68 2a 31 30 20 2b 20 63 20 2d 20   width*10 + c - 
2df0: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 63 20 3d  '0';.        c =
2e00: 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d   *++fmt;.      }
2e10: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 77  .    }.    if( w
2e20: 69 64 74 68 20 3e 20 65 74 42 55 46 53 49 5a 45  idth > etBUFSIZE
2e30: 2d 31 30 20 29 7b 0a 20 20 20 20 20 20 77 69 64  -10 ){.      wid
2e40: 74 68 20 3d 20 65 74 42 55 46 53 49 5a 45 2d 31  th = etBUFSIZE-1
2e50: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20  0;.    }.    /* 
2e60: 47 65 74 20 74 68 65 20 70 72 65 63 69 73 69 6f  Get the precisio
2e70: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d  n */.    if( c==
2e80: 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 70 72 65  '.' ){.      pre
2e90: 63 69 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20  cision = 0;.    
2ea0: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
2eb0: 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29      if( c=='*' )
2ec0: 7b 0a 20 20 20 20 20 20 20 20 70 72 65 63 69 73  {.        precis
2ed0: 69 6f 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  ion = va_arg(ap,
2ee0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
2ef0: 28 20 70 72 65 63 69 73 69 6f 6e 3c 30 20 29 20  ( precision<0 ) 
2f00: 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 70 72 65  precision = -pre
2f10: 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20  cision;.        
2f20: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20  c = *++fmt;.    
2f30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2f40: 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26   while( c>='0' &
2f50: 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20  & c<='9' ){.    
2f60: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
2f70: 3d 20 70 72 65 63 69 73 69 6f 6e 2a 31 30 20 2b  = precision*10 +
2f80: 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20   c - '0';.      
2f90: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
2fa0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2fb0: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
2fc0: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d     precision = -
2fd0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20  1;.    }.    /* 
2fe0: 47 65 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  Get the conversi
2ff0: 6f 6e 20 74 79 70 65 20 6d 6f 64 69 66 69 65 72  on type modifier
3000: 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27   */.    if( c=='
3010: 6c 27 20 29 7b 0a 20 20 20 20 20 20 66 6c 61 67  l' ){.      flag
3020: 5f 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20  _long = 1;.     
3030: 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20   c = *++fmt;.   
3040: 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b     if( c=='l' ){
3050: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f  .        flag_lo
3060: 6e 67 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20  nglong = 1;.    
3070: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
3080: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3090: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f       flag_longlo
30a0: 6e 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ng = 0;.      }.
30b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
30c0: 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c 61   flag_long = fla
30d0: 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a  g_longlong = 0;.
30e0: 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 65 74      }.    /* Fet
30f0: 63 68 20 74 68 65 20 69 6e 66 6f 20 65 6e 74 72  ch the info entr
3100: 79 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 20  y for the field 
3110: 2a 2f 0a 20 20 20 20 69 6e 66 6f 70 20 3d 20 30  */.    infop = 0
3120: 3b 0a 20 20 20 20 66 6f 72 28 69 64 78 3d 30 3b  ;.    for(idx=0;
3130: 20 69 64 78 3c 41 72 72 61 79 53 69 7a 65 28 66   idx<ArraySize(f
3140: 6d 74 69 6e 66 6f 29 3b 20 69 64 78 2b 2b 29 7b  mtinfo); idx++){
3150: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 66 6d  .      if( c==fm
3160: 74 69 6e 66 6f 5b 69 64 78 5d 2e 66 6d 74 74 79  tinfo[idx].fmtty
3170: 70 65 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  pe ){.        in
3180: 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f 5b 69  fop = &fmtinfo[i
3190: 64 78 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28  dx];.        if(
31a0: 20 75 73 65 45 78 74 65 6e 64 65 64 20 7c 7c 20   useExtended || 
31b0: 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20  (infop->flags & 
31c0: 46 4c 41 47 5f 49 4e 54 45 52 4e 29 3d 3d 30 20  FLAG_INTERN)==0 
31d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78 74 79  ){.          xty
31e0: 70 65 20 3d 20 69 6e 66 6f 70 2d 3e 74 79 70 65  pe = infop->type
31f0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
3200: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
3210: 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
3220: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3230: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45    }.    }.    zE
3240: 78 74 72 61 20 3d 20 30 3b 0a 20 20 20 20 69 66  xtra = 0;.    if
3250: 28 20 69 6e 66 6f 70 3d 3d 30 20 29 7b 0a 20 20  ( infop==0 ){.  
3260: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20      return;.    
3270: 7d 0a 0a 0a 20 20 20 20 2f 2a 20 4c 69 6d 69 74  }...    /* Limit
3280: 20 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20 74   the precision t
3290: 6f 20 70 72 65 76 65 6e 74 20 6f 76 65 72 66 6c  o prevent overfl
32a0: 6f 77 69 6e 67 20 62 75 66 5b 5d 20 64 75 72 69  owing buf[] duri
32b0: 6e 67 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f  ng conversion */
32c0: 0a 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69  .    if( precisi
32d0: 6f 6e 3e 65 74 42 55 46 53 49 5a 45 2d 34 30 20  on>etBUFSIZE-40 
32e0: 26 26 20 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 73  && (infop->flags
32f0: 20 26 20 46 4c 41 47 5f 53 54 52 49 4e 47 29 3d   & FLAG_STRING)=
3300: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 72 65 63  =0 ){.      prec
3310: 69 73 69 6f 6e 20 3d 20 65 74 42 55 46 53 49 5a  ision = etBUFSIZ
3320: 45 2d 34 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  E-40;.    }..   
3330: 20 2f 2a 0a 20 20 20 20 2a 2a 20 41 74 20 74 68   /*.    ** At th
3340: 69 73 20 70 6f 69 6e 74 2c 20 76 61 72 69 61 62  is point, variab
3350: 6c 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  les are initiali
3360: 7a 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  zed as follows:.
3370: 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20      **.    **   
3380: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
3390: 72 6d 20 20 20 20 20 20 20 20 20 20 54 52 55 45  rm          TRUE
33a0: 20 69 66 20 61 20 27 23 27 20 69 73 20 70 72 65   if a '#' is pre
33b0: 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66  sent..    **   f
33c0: 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 20 20 20 20  lag_altform2    
33d0: 20 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20             TRUE 
33e0: 69 66 20 61 20 27 21 27 20 69 73 20 70 72 65 73  if a '!' is pres
33f0: 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c  ent..    **   fl
3400: 61 67 5f 70 6c 75 73 73 69 67 6e 20 20 20 20 20  ag_plussign     
3410: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69            TRUE i
3420: 66 20 61 20 27 2b 27 20 69 73 20 70 72 65 73 65  f a '+' is prese
3430: 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  nt..    **   fla
3440: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 20 20  g_leftjustify   
3450: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
3460: 20 61 20 27 2d 27 20 69 73 20 70 72 65 73 65 6e   a '-' is presen
3470: 74 20 6f 72 20 69 66 20 74 68 65 0a 20 20 20 20  t or if the.    
3480: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
3490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a0: 20 66 69 65 6c 64 20 77 69 64 74 68 20 77 61 73   field width was
34b0: 20 6e 65 67 61 74 69 76 65 2e 0a 20 20 20 20 2a   negative..    *
34c0: 2a 20 20 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64  *   flag_zeropad
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e0: 54 52 55 45 20 69 66 20 74 68 65 20 77 69 64 74  TRUE if the widt
34f0: 68 20 62 65 67 61 6e 20 77 69 74 68 20 30 2e 0a  h began with 0..
3500: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f      **   flag_lo
3510: 6e 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ng              
3520: 20 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65       TRUE if the
3530: 20 6c 65 74 74 65 72 20 27 6c 27 20 28 65 6c 6c   letter 'l' (ell
3540: 29 20 70 72 65 66 69 78 65 64 0a 20 20 20 20 2a  ) prefixed.    *
3550: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3570: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63  the conversion c
3580: 68 61 72 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a  haracter..    **
3590: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67     flag_longlong
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
35b0: 52 55 45 20 69 66 20 74 68 65 20 6c 65 74 74 65  RUE if the lette
35c0: 72 20 27 6c 6c 27 20 28 65 6c 6c 20 65 6c 6c 29  r 'll' (ell ell)
35d0: 20 70 72 65 66 69 78 65 64 0a 20 20 20 20 2a 2a   prefixed.    **
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3600: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68  he conversion ch
3610: 61 72 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a 20  aracter..    ** 
3620: 20 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e    flag_blanksign
3630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
3640: 55 45 20 69 66 20 61 20 27 20 27 20 69 73 20 70  UE if a ' ' is p
3650: 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20  resent..    **  
3660: 20 77 69 64 74 68 20 20 20 20 20 20 20 20 20 20   width          
3670: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65               The
3680: 20 73 70 65 63 69 66 69 65 64 20 66 69 65 6c 64   specified field
3690: 20 77 69 64 74 68 2e 20 20 54 68 69 73 20 69 73   width.  This is
36a0: 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20  .    **         
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c0: 20 20 20 20 20 20 61 6c 77 61 79 73 20 6e 6f 6e        always non
36d0: 2d 6e 65 67 61 74 69 76 65 2e 20 20 5a 65 72 6f  -negative.  Zero
36e0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 2e   is the default.
36f0: 0a 20 20 20 20 2a 2a 20 20 20 70 72 65 63 69 73  .    **   precis
3700: 69 6f 6e 20 20 20 20 20 20 20 20 20 20 20 20 20  ion             
3710: 20 20 20 20 20 20 54 68 65 20 73 70 65 63 69 66        The specif
3720: 69 65 64 20 70 72 65 63 69 73 69 6f 6e 2e 20 20  ied precision.  
3730: 54 68 65 20 64 65 66 61 75 6c 74 0a 20 20 20 20  The default.    
3740: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3760: 20 69 73 20 2d 31 2e 0a 20 20 20 20 2a 2a 20 20   is -1..    **  
3770: 20 78 74 79 70 65 20 20 20 20 20 20 20 20 20 20   xtype          
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65               The
3790: 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 63 6f   class of the co
37a0: 6e 76 65 72 73 69 6f 6e 2e 0a 20 20 20 20 2a 2a  nversion..    **
37b0: 20 20 20 69 6e 66 6f 70 20 20 20 20 20 20 20 20     infop        
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
37d0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 70  ointer to the ap
37e0: 70 72 6f 70 72 69 61 74 65 20 69 6e 66 6f 20 73  propriate info s
37f0: 74 72 75 63 74 2e 0a 20 20 20 20 2a 2f 0a 20 20  truct..    */.  
3800: 20 20 73 77 69 74 63 68 28 20 78 74 79 70 65 20    switch( xtype 
3810: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  ){.      case et
3820: 50 4f 49 4e 54 45 52 3a 0a 20 20 20 20 20 20 20  POINTER:.       
3830: 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d   flag_longlong =
3840: 20 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d   sizeof(char*)==
3850: 73 69 7a 65 6f 66 28 69 36 34 29 3b 0a 20 20 20  sizeof(i64);.   
3860: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d       flag_long =
3870: 20 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d   sizeof(char*)==
3880: 73 69 7a 65 6f 66 28 6c 6f 6e 67 20 69 6e 74 29  sizeof(long int)
3890: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c  ;.        /* Fal
38a0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 74  l through into t
38b0: 68 65 20 6e 65 78 74 20 63 61 73 65 20 2a 2f 0a  he next case */.
38c0: 20 20 20 20 20 20 63 61 73 65 20 65 74 4f 52 44        case etORD
38d0: 49 4e 41 4c 3a 0a 20 20 20 20 20 20 63 61 73 65  INAL:.      case
38e0: 20 65 74 52 41 44 49 58 3a 0a 20 20 20 20 20 20   etRADIX:.      
38f0: 20 20 69 66 28 20 69 6e 66 6f 70 2d 3e 66 6c 61    if( infop->fla
3900: 67 73 20 26 20 46 4c 41 47 5f 53 49 47 4e 45 44  gs & FLAG_SIGNED
3910: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 36   ){.          i6
3920: 34 20 76 3b 0a 20 20 20 20 20 20 20 20 20 20 69  4 v;.          i
3930: 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67  f( flag_longlong
3940: 20 29 20 20 20 76 20 3d 20 76 61 5f 61 72 67 28   )   v = va_arg(
3950: 61 70 2c 69 36 34 29 3b 0a 20 20 20 20 20 20 20  ap,i64);.       
3960: 20 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67     else if( flag
3970: 5f 6c 6f 6e 67 20 29 20 20 76 20 3d 20 76 61 5f  _long )  v = va_
3980: 61 72 67 28 61 70 2c 6c 6f 6e 67 20 69 6e 74 29  arg(ap,long int)
3990: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ;.          else
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39b0: 20 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c    v = va_arg(ap,
39c0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
39d0: 69 66 28 20 76 3c 30 20 29 7b 0a 20 20 20 20 20  if( v<0 ){.     
39e0: 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65         longvalue
39f0: 20 3d 20 2d 76 3b 0a 20 20 20 20 20 20 20 20 20   = -v;.         
3a00: 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d 27 3b     prefix = '-';
3a10: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
3a20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  {.            lo
3a30: 6e 67 76 61 6c 75 65 20 3d 20 76 3b 0a 20 20 20  ngvalue = v;.   
3a40: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
3a50: 67 5f 70 6c 75 73 73 69 67 6e 20 29 20 20 20 20  g_plussign )    
3a60: 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2b 27      prefix = '+'
3a70: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ;.            el
3a80: 73 65 20 69 66 28 20 66 6c 61 67 5f 62 6c 61 6e  se if( flag_blan
3a90: 6b 73 69 67 6e 20 29 20 20 70 72 65 66 69 78 20  ksign )  prefix 
3aa0: 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20  = ' ';.         
3ab0: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20     else         
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
3ad0: 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  efix = 0;.      
3ae0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
3af0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
3b00: 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67  f( flag_longlong
3b10: 20 29 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d   )   longvalue =
3b20: 20 76 61 5f 61 72 67 28 61 70 2c 75 36 34 29 3b   va_arg(ap,u64);
3b30: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20  .          else 
3b40: 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 20  if( flag_long ) 
3b50: 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f   longvalue = va_
3b60: 61 72 67 28 61 70 2c 75 6e 73 69 67 6e 65 64 20  arg(ap,unsigned 
3b70: 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20  long int);.     
3b80: 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20 20       else       
3b90: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76             longv
3ba0: 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70  alue = va_arg(ap
3bb0: 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a  ,unsigned int);.
3bc0: 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78            prefix
3bd0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
3be0: 20 20 20 20 20 20 20 20 69 66 28 20 6c 6f 6e 67          if( long
3bf0: 76 61 6c 75 65 3d 3d 30 20 29 20 66 6c 61 67 5f  value==0 ) flag_
3c00: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20  alternateform = 
3c10: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 66  0;.        if( f
3c20: 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26 26 20 70  lag_zeropad && p
3c30: 72 65 63 69 73 69 6f 6e 3c 77 69 64 74 68 2d 28  recision<width-(
3c40: 70 72 65 66 69 78 21 3d 30 29 20 29 7b 0a 20 20  prefix!=0) ){.  
3c50: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
3c60: 6e 20 3d 20 77 69 64 74 68 2d 28 70 72 65 66 69  n = width-(prefi
3c70: 78 21 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  x!=0);.        }
3c80: 0a 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d  .        bufpt =
3c90: 20 26 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d   &buf[etBUFSIZE-
3ca0: 31 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  1];.        if( 
3cb0: 78 74 79 70 65 3d 3d 65 74 4f 52 44 49 4e 41 4c  xtype==etORDINAL
3cc0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74   ){.          st
3cd0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
3ce0: 7a 4f 72 64 5b 5d 20 3d 20 22 74 68 73 74 6e 64  zOrd[] = "thstnd
3cf0: 72 64 22 3b 0a 20 20 20 20 20 20 20 20 20 20 69  rd";.          i
3d00: 6e 74 20 78 20 3d 20 28 69 6e 74 29 28 6c 6f 6e  nt x = (int)(lon
3d10: 67 76 61 6c 75 65 20 25 20 31 30 29 3b 0a 20 20  gvalue % 10);.  
3d20: 20 20 20 20 20 20 20 20 69 66 28 20 78 3e 3d 34          if( x>=4
3d30: 20 7c 7c 20 28 6c 6f 6e 67 76 61 6c 75 65 2f 31   || (longvalue/1
3d40: 30 29 25 31 30 3d 3d 31 20 29 7b 0a 20 20 20 20  0)%10==1 ){.    
3d50: 20 20 20 20 20 20 20 20 78 20 3d 20 30 3b 0a 20          x = 0;. 
3d60: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
3d70: 20 20 20 20 20 62 75 66 5b 65 74 42 55 46 53 49       buf[etBUFSI
3d80: 5a 45 2d 33 5d 20 3d 20 7a 4f 72 64 5b 78 2a 32  ZE-3] = zOrd[x*2
3d90: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  ];.          buf
3da0: 5b 65 74 42 55 46 53 49 5a 45 2d 32 5d 20 3d 20  [etBUFSIZE-2] = 
3db0: 7a 4f 72 64 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20  zOrd[x*2+1];.   
3dc0: 20 20 20 20 20 20 20 62 75 66 70 74 20 2d 3d 20         bufpt -= 
3dd0: 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
3de0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3df0: 20 72 65 67 69 73 74 65 72 20 63 6f 6e 73 74 20   register const 
3e00: 63 68 61 72 20 2a 63 73 65 74 3b 20 20 20 20 20  char *cset;     
3e10: 20 2f 2a 20 55 73 65 20 72 65 67 69 73 74 65 72   /* Use register
3e20: 73 20 66 6f 72 20 73 70 65 65 64 20 2a 2f 0a 20  s for speed */. 
3e30: 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65           registe
3e40: 72 20 69 6e 74 20 62 61 73 65 3b 0a 20 20 20 20  r int base;.    
3e50: 20 20 20 20 20 20 63 73 65 74 20 3d 20 26 61 44        cset = &aD
3e60: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
3e70: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
3e80: 20 62 61 73 65 20 3d 20 69 6e 66 6f 70 2d 3e 62   base = infop->b
3e90: 61 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 64  ase;.          d
3ea0: 6f 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o{              
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3ed0: 43 6f 6e 76 65 72 74 20 74 6f 20 61 73 63 69 69  Convert to ascii
3ee0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
3ef0: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 63 73 65  *(--bufpt) = cse
3f00: 74 5b 6c 6f 6e 67 76 61 6c 75 65 25 62 61 73 65  t[longvalue%base
3f10: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  ];.            l
3f20: 6f 6e 67 76 61 6c 75 65 20 3d 20 6c 6f 6e 67 76  ongvalue = longv
3f30: 61 6c 75 65 2f 62 61 73 65 3b 0a 20 20 20 20 20  alue/base;.     
3f40: 20 20 20 20 20 7d 77 68 69 6c 65 28 20 6c 6f 6e       }while( lon
3f50: 67 76 61 6c 75 65 3e 30 20 29 3b 0a 20 20 20 20  gvalue>0 );.    
3f60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65      }.        le
3f70: 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 26 62 75  ngth = (int)(&bu
3f80: 66 5b 65 74 42 55 46 53 49 5a 45 2d 31 5d 2d 62  f[etBUFSIZE-1]-b
3f90: 75 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 66  ufpt);.        f
3fa0: 6f 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e  or(idx=precision
3fb0: 2d 6c 65 6e 67 74 68 3b 20 69 64 78 3e 30 3b 20  -length; idx>0; 
3fc0: 69 64 78 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20  idx--){.        
3fd0: 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 27    *(--bufpt) = '
3fe0: 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  0';             
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4000: 2f 2a 20 5a 65 72 6f 20 70 61 64 20 2a 2f 0a 20  /* Zero pad */. 
4010: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4020: 20 69 66 28 20 70 72 65 66 69 78 20 29 20 2a 28   if( prefix ) *(
4030: 2d 2d 62 75 66 70 74 29 20 3d 20 70 72 65 66 69  --bufpt) = prefi
4040: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
4050: 20 2f 2a 20 41 64 64 20 73 69 67 6e 20 2a 2f 0a   /* Add sign */.
4060: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
4070: 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 26  _alternateform &
4080: 26 20 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 20  & infop->prefix 
4090: 29 7b 20 20 20 20 20 20 2f 2a 20 41 64 64 20 22  ){      /* Add "
40a0: 30 22 20 6f 72 20 22 30 78 22 20 2a 2f 0a 20 20  0" or "0x" */.  
40b0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
40c0: 61 72 20 2a 70 72 65 3b 0a 20 20 20 20 20 20 20  ar *pre;.       
40d0: 20 20 20 63 68 61 72 20 78 3b 0a 20 20 20 20 20     char x;.     
40e0: 20 20 20 20 20 70 72 65 20 3d 20 26 61 50 72 65       pre = &aPre
40f0: 66 69 78 5b 69 6e 66 6f 70 2d 3e 70 72 65 66 69  fix[infop->prefi
4100: 78 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  x];.          fo
4110: 72 28 3b 20 28 78 3d 28 2a 70 72 65 29 29 21 3d  r(; (x=(*pre))!=
4120: 30 3b 20 70 72 65 2b 2b 29 20 2a 28 2d 2d 62 75  0; pre++) *(--bu
4130: 66 70 74 29 20 3d 20 78 3b 0a 20 20 20 20 20 20  fpt) = x;.      
4140: 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67    }.        leng
4150: 74 68 20 3d 20 28 69 6e 74 29 28 26 62 75 66 5b  th = (int)(&buf[
4160: 65 74 42 55 46 53 49 5a 45 2d 31 5d 2d 62 75 66  etBUFSIZE-1]-buf
4170: 70 74 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  pt);.        bre
4180: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65  ak;.      case e
4190: 74 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20 63 61  tFLOAT:.      ca
41a0: 73 65 20 65 74 45 58 50 3a 0a 20 20 20 20 20 20  se etEXP:.      
41b0: 63 61 73 65 20 65 74 47 45 4e 45 52 49 43 3a 0a  case etGENERIC:.
41c0: 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75          realvalu
41d0: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 64 6f  e = va_arg(ap,do
41e0: 75 62 6c 65 29 3b 0a 23 69 66 6e 64 65 66 20 53  uble);.#ifndef S
41f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
4200: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 20 20  ING_POINT.      
4210: 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c    if( precision<
4220: 30 20 29 20 70 72 65 63 69 73 69 6f 6e 20 3d 20  0 ) precision = 
4230: 36 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65  6;         /* Se
4240: 74 20 64 65 66 61 75 6c 74 20 70 72 65 63 69 73  t default precis
4250: 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ion */.        i
4260: 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 65 74 42  f( precision>etB
4270: 55 46 53 49 5a 45 2f 32 2d 31 30 20 29 20 70 72  UFSIZE/2-10 ) pr
4280: 65 63 69 73 69 6f 6e 20 3d 20 65 74 42 55 46 53  ecision = etBUFS
4290: 49 5a 45 2f 32 2d 31 30 3b 0a 20 20 20 20 20 20  IZE/2-10;.      
42a0: 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65 3c    if( realvalue<
42b0: 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  0.0 ){.         
42c0: 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 2d 72 65   realvalue = -re
42d0: 61 6c 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  alvalue;.       
42e0: 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d 27 3b     prefix = '-';
42f0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
4300: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c            if( fl
4310: 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 20 20 20  ag_plussign )   
4320: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20         prefix = 
4330: 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20 20 65  '+';.          e
4340: 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 62 6c 61  lse if( flag_bla
4350: 6e 6b 73 69 67 6e 20 29 20 20 20 20 70 72 65 66  nksign )    pref
4360: 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20  ix = ' ';.      
4370: 20 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20      else        
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4390: 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20 20   prefix = 0;.   
43a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
43b0: 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45 4e 45  f( xtype==etGENE
43c0: 52 49 43 20 26 26 20 70 72 65 63 69 73 69 6f 6e  RIC && precision
43d0: 3e 30 20 29 20 70 72 65 63 69 73 69 6f 6e 2d 2d  >0 ) precision--
43e0: 3b 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20  ;.#if 0.        
43f0: 2f 2a 20 52 6f 75 6e 64 69 6e 67 20 77 6f 72 6b  /* Rounding work
4400: 73 20 6c 69 6b 65 20 42 53 44 20 77 68 65 6e 20  s like BSD when 
4410: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 30 2e 34  the constant 0.4
4420: 39 39 39 20 69 73 20 75 73 65 64 2e 20 20 57 69  999 is used.  Wi
4430: 65 72 64 21 20 2a 2f 0a 20 20 20 20 20 20 20 20  erd! */.        
4440: 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f  for(idx=precisio
4450: 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 34 39 39  n, rounder=0.499
4460: 39 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c  9; idx>0; idx--,
4470: 20 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29 3b 0a   rounder*=0.1);.
4480: 23 65 6c 73 65 0a 20 20 20 20 20 20 20 20 2f 2a  #else.        /*
4490: 20 49 74 20 6d 61 6b 65 73 20 6d 6f 72 65 20 73   It makes more s
44a0: 65 6e 73 65 20 74 6f 20 75 73 65 20 30 2e 35 20  ense to use 0.5 
44b0: 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  */.        for(i
44c0: 64 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20 72 6f  dx=precision, ro
44d0: 75 6e 64 65 72 3d 30 2e 35 3b 20 69 64 78 3e 30  under=0.5; idx>0
44e0: 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 65 72  ; idx--, rounder
44f0: 2a 3d 30 2e 31 29 7b 7d 0a 23 65 6e 64 69 66 0a  *=0.1){}.#endif.
4500: 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70          if( xtyp
4510: 65 3d 3d 65 74 46 4c 4f 41 54 20 29 20 72 65 61  e==etFLOAT ) rea
4520: 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65  lvalue += rounde
4530: 72 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  r;.        /* No
4540: 72 6d 61 6c 69 7a 65 20 72 65 61 6c 76 61 6c 75  rmalize realvalu
4550: 65 20 74 6f 20 77 69 74 68 69 6e 20 31 30 2e 30  e to within 10.0
4560: 20 3e 20 72 65 61 6c 76 61 6c 75 65 20 3e 3d 20   > realvalue >= 
4570: 31 2e 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 65  1.0 */.        e
4580: 78 70 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  xp = 0;.        
4590: 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  if( sqlite3IsNaN
45a0: 28 28 64 6f 75 62 6c 65 29 72 65 61 6c 76 61 6c  ((double)realval
45b0: 75 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ue) ){.         
45c0: 20 62 75 66 70 74 20 3d 20 22 4e 61 4e 22 3b 0a   bufpt = "NaN";.
45d0: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68            length
45e0: 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 20 20   = 3;.          
45f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
4600: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65 61  .        if( rea
4610: 6c 76 61 6c 75 65 3e 30 2e 30 20 29 7b 0a 20 20  lvalue>0.0 ){.  
4620: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72          while( r
4630: 65 61 6c 76 61 6c 75 65 3e 3d 31 65 33 32 20 26  ealvalue>=1e32 &
4640: 26 20 65 78 70 3c 3d 33 35 30 20 29 7b 20 72 65  & exp<=350 ){ re
4650: 61 6c 76 61 6c 75 65 20 2a 3d 20 31 65 2d 33 32  alvalue *= 1e-32
4660: 3b 20 65 78 70 2b 3d 33 32 3b 20 7d 0a 20 20 20  ; exp+=32; }.   
4670: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65         while( re
4680: 61 6c 76 61 6c 75 65 3e 3d 31 65 38 20 26 26 20  alvalue>=1e8 && 
4690: 65 78 70 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c  exp<=350 ){ real
46a0: 76 61 6c 75 65 20 2a 3d 20 31 65 2d 38 3b 20 65  value *= 1e-8; e
46b0: 78 70 2b 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20  xp+=8; }.       
46c0: 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61     while( realva
46d0: 6c 75 65 3e 3d 31 30 2e 30 20 26 26 20 65 78 70  lue>=10.0 && exp
46e0: 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c  <=350 ){ realval
46f0: 75 65 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b  ue *= 0.1; exp++
4700: 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68  ; }.          wh
4710: 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31  ile( realvalue<1
4720: 65 2d 38 20 29 7b 20 72 65 61 6c 76 61 6c 75 65  e-8 ){ realvalue
4730: 20 2a 3d 20 31 65 38 3b 20 65 78 70 2d 3d 38 3b   *= 1e8; exp-=8;
4740: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69   }.          whi
4750: 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31 2e  le( realvalue<1.
4760: 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a  0 ){ realvalue *
4770: 3d 20 31 30 2e 30 3b 20 65 78 70 2d 2d 3b 20 7d  = 10.0; exp--; }
4780: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 65  .          if( e
4790: 78 70 3e 33 35 30 20 29 7b 0a 20 20 20 20 20 20  xp>350 ){.      
47a0: 20 20 20 20 20 20 69 66 28 20 70 72 65 66 69 78        if( prefix
47b0: 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  =='-' ){.       
47c0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 22         bufpt = "
47d0: 2d 49 6e 66 22 3b 0a 20 20 20 20 20 20 20 20 20  -Inf";.         
47e0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 72 65     }else if( pre
47f0: 66 69 78 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20  fix=='+' ){.    
4800: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
4810: 3d 20 22 2b 49 6e 66 22 3b 0a 20 20 20 20 20 20  = "+Inf";.      
4820: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4830: 20 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74             bufpt
4840: 20 3d 20 22 49 6e 66 22 3b 0a 20 20 20 20 20 20   = "Inf";.      
4850: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4860: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 71 6c      length = sql
4870: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 62 75 66  ite3Strlen30(buf
4880: 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  pt);.           
4890: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
48a0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
48b0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
48c0: 66 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20  f;.        /*.  
48d0: 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20        ** If the 
48e0: 66 69 65 6c 64 20 74 79 70 65 20 69 73 20 65 74  field type is et
48f0: 47 45 4e 45 52 49 43 2c 20 74 68 65 6e 20 63 6f  GENERIC, then co
4900: 6e 76 65 72 74 20 74 6f 20 65 69 74 68 65 72 20  nvert to either 
4910: 65 74 45 58 50 0a 20 20 20 20 20 20 20 20 2a 2a  etEXP.        **
4920: 20 6f 72 20 65 74 46 4c 4f 41 54 2c 20 61 73 20   or etFLOAT, as 
4930: 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 20 20 20  appropriate..   
4940: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
4950: 66 6c 61 67 5f 65 78 70 20 3d 20 78 74 79 70 65  flag_exp = xtype
4960: 3d 3d 65 74 45 58 50 3b 0a 20 20 20 20 20 20 20  ==etEXP;.       
4970: 20 69 66 28 20 78 74 79 70 65 21 3d 65 74 46 4c   if( xtype!=etFL
4980: 4f 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20  OAT ){.         
4990: 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72 6f   realvalue += ro
49a0: 75 6e 64 65 72 3b 0a 20 20 20 20 20 20 20 20 20  under;.         
49b0: 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d   if( realvalue>=
49c0: 31 30 2e 30 20 29 7b 20 72 65 61 6c 76 61 6c 75  10.0 ){ realvalu
49d0: 65 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b 3b  e *= 0.1; exp++;
49e0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
49f0: 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d       if( xtype==
4a00: 65 74 47 45 4e 45 52 49 43 20 29 7b 0a 20 20 20  etGENERIC ){.   
4a10: 20 20 20 20 20 20 20 66 6c 61 67 5f 72 74 7a 20         flag_rtz 
4a20: 3d 20 21 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74  = !flag_alternat
4a30: 65 66 6f 72 6d 3b 0a 20 20 20 20 20 20 20 20 20  eform;.         
4a40: 20 69 66 28 20 65 78 70 3c 2d 34 20 7c 7c 20 65   if( exp<-4 || e
4a50: 78 70 3e 70 72 65 63 69 73 69 6f 6e 20 29 7b 0a  xp>precision ){.
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 78 74 79 70              xtyp
4a70: 65 20 3d 20 65 74 45 58 50 3b 0a 20 20 20 20 20  e = etEXP;.     
4a80: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4a90: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
4aa0: 6e 20 3d 20 70 72 65 63 69 73 69 6f 6e 20 2d 20  n = precision - 
4ab0: 65 78 70 3b 0a 20 20 20 20 20 20 20 20 20 20 20  exp;.           
4ac0: 20 78 74 79 70 65 20 3d 20 65 74 46 4c 4f 41 54   xtype = etFLOAT
4ad0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
4ae0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4af0: 20 20 20 20 20 20 20 66 6c 61 67 5f 72 74 7a 20         flag_rtz 
4b00: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
4b10: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
4b20: 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20  ==etEXP ){.     
4b30: 20 20 20 20 20 65 32 20 3d 20 30 3b 0a 20 20 20       e2 = 0;.   
4b40: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4b50: 20 20 20 20 20 20 65 32 20 3d 20 65 78 70 3b 0a        e2 = exp;.
4b60: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4b70: 20 20 6e 73 64 20 3d 20 30 3b 0a 20 20 20 20 20    nsd = 0;.     
4b80: 20 20 20 66 6c 61 67 5f 64 70 20 3d 20 28 70 72     flag_dp = (pr
4b90: 65 63 69 73 69 6f 6e 3e 30 20 3f 31 3a 30 29 20  ecision>0 ?1:0) 
4ba0: 7c 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65  | flag_alternate
4bb0: 66 6f 72 6d 20 7c 20 66 6c 61 67 5f 61 6c 74 66  form | flag_altf
4bc0: 6f 72 6d 32 3b 0a 20 20 20 20 20 20 20 20 2f 2a  orm2;.        /*
4bd0: 20 54 68 65 20 73 69 67 6e 20 69 6e 20 66 72 6f   The sign in fro
4be0: 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  nt of the number
4bf0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
4c00: 70 72 65 66 69 78 20 29 7b 0a 20 20 20 20 20 20  prefix ){.      
4c10: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
4c20: 20 70 72 65 66 69 78 3b 0a 20 20 20 20 20 20 20   prefix;.       
4c30: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69   }.        /* Di
4c40: 67 69 74 73 20 70 72 69 6f 72 20 74 6f 20 74 68  gits prior to th
4c50: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
4c60: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 65  */.        if( e
4c70: 32 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  2<0 ){.         
4c80: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 30   *(bufpt++) = '0
4c90: 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ';.        }else
4ca0: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
4cb0: 3b 20 65 32 3e 3d 30 3b 20 65 32 2d 2d 29 7b 0a  ; e2>=0; e2--){.
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
4cd0: 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65 74 64  fpt++) = et_getd
4ce0: 69 67 69 74 28 26 72 65 61 6c 76 61 6c 75 65 2c  igit(&realvalue,
4cf0: 26 6e 73 64 29 3b 0a 20 20 20 20 20 20 20 20 20  &nsd);.         
4d00: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
4d10: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 63 69       /* The deci
4d20: 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20  mal point */.   
4d30: 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 64 70       if( flag_dp
4d40: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28   ){.          *(
4d50: 62 75 66 70 74 2b 2b 29 20 3d 20 27 2e 27 3b 0a  bufpt++) = '.';.
4d60: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4d70: 20 20 2f 2a 20 22 30 22 20 64 69 67 69 74 73 20    /* "0" digits 
4d80: 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d 61  after the decima
4d90: 6c 20 70 6f 69 6e 74 20 62 75 74 20 62 65 66 6f  l point but befo
4da0: 72 65 20 74 68 65 20 66 69 72 73 74 0a 20 20 20  re the first.   
4db0: 20 20 20 20 20 2a 2a 20 73 69 67 6e 69 66 69 63       ** signific
4dc0: 61 6e 74 20 64 69 67 69 74 20 6f 66 20 74 68 65  ant digit of the
4dd0: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
4de0: 20 20 20 66 6f 72 28 65 32 2b 2b 3b 20 65 32 3c     for(e2++; e2<
4df0: 30 3b 20 70 72 65 63 69 73 69 6f 6e 2d 2d 2c 20  0; precision--, 
4e00: 65 32 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  e2++){.         
4e10: 20 61 73 73 65 72 74 28 20 70 72 65 63 69 73 69   assert( precisi
4e20: 6f 6e 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  on>0 );.        
4e30: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27    *(bufpt++) = '
4e40: 30 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0';.        }.  
4e50: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 69 66 69        /* Signifi
4e60: 63 61 6e 74 20 64 69 67 69 74 73 20 61 66 74 65  cant digits afte
4e70: 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  r the decimal po
4e80: 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 77  int */.        w
4e90: 68 69 6c 65 28 20 28 70 72 65 63 69 73 69 6f 6e  hile( (precision
4ea0: 2d 2d 29 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  --)>0 ){.       
4eb0: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
4ec0: 65 74 5f 67 65 74 64 69 67 69 74 28 26 72 65 61  et_getdigit(&rea
4ed0: 6c 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20  lvalue,&nsd);.  
4ee0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4ef0: 2f 2a 20 52 65 6d 6f 76 65 20 74 72 61 69 6c 69  /* Remove traili
4f00: 6e 67 20 7a 65 72 6f 73 20 61 6e 64 20 74 68 65  ng zeros and the
4f10: 20 22 2e 22 20 69 66 20 6e 6f 20 64 69 67 69 74   "." if no digit
4f20: 73 20 66 6f 6c 6c 6f 77 20 74 68 65 20 22 2e 22  s follow the "."
4f30: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
4f40: 66 6c 61 67 5f 72 74 7a 20 26 26 20 66 6c 61 67  flag_rtz && flag
4f50: 5f 64 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _dp ){.         
4f60: 20 77 68 69 6c 65 28 20 62 75 66 70 74 5b 2d 31   while( bufpt[-1
4f70: 5d 3d 3d 27 30 27 20 29 20 2a 28 2d 2d 62 75 66  ]=='0' ) *(--buf
4f80: 70 74 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  pt) = 0;.       
4f90: 20 20 20 61 73 73 65 72 74 28 20 62 75 66 70 74     assert( bufpt
4fa0: 3e 62 75 66 20 29 3b 0a 20 20 20 20 20 20 20 20  >buf );.        
4fb0: 20 20 69 66 28 20 62 75 66 70 74 5b 2d 31 5d 3d    if( bufpt[-1]=
4fc0: 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='.' ){.        
4fd0: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 61 6c 74      if( flag_alt
4fe0: 66 6f 72 6d 32 20 29 7b 0a 20 20 20 20 20 20 20  form2 ){.       
4ff0: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
5000: 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20  ) = '0';.       
5010: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5020: 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75            *(--bu
5030: 66 70 74 29 20 3d 20 30 3b 0a 20 20 20 20 20 20  fpt) = 0;.      
5040: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5050: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
5060: 20 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65        /* Add the
5070: 20 22 65 4e 4e 4e 22 20 73 75 66 66 69 78 20 2a   "eNNN" suffix *
5080: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66 6c  /.        if( fl
5090: 61 67 5f 65 78 70 20 7c 7c 20 78 74 79 70 65 3d  ag_exp || xtype=
50a0: 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20 20  =etEXP ){.      
50b0: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
50c0: 20 61 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e   aDigits[infop->
50d0: 63 68 61 72 73 65 74 5d 3b 0a 20 20 20 20 20 20  charset];.      
50e0: 20 20 20 20 69 66 28 20 65 78 70 3c 30 20 29 7b      if( exp<0 ){
50f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62  .            *(b
5100: 75 66 70 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65  ufpt++) = '-'; e
5110: 78 70 20 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20  xp = -exp;.     
5120: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5130: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
5140: 2b 29 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20  +) = '+';.      
5150: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
5160: 69 66 28 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a  if( exp>=100 ){.
5170: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
5180: 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 28  fpt++) = (char)(
5190: 28 65 78 70 2f 31 30 30 29 2b 27 30 27 29 3b 20  (exp/100)+'0'); 
51a0: 20 20 20 20 20 20 20 2f 2a 20 31 30 30 27 73 20         /* 100's 
51b0: 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  digit */.       
51c0: 20 20 20 20 20 65 78 70 20 25 3d 20 31 30 30 3b       exp %= 100;
51d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
51e0: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
51f0: 29 20 3d 20 28 63 68 61 72 29 28 65 78 70 2f 31  ) = (char)(exp/1
5200: 30 2b 27 30 27 29 3b 20 20 20 20 20 20 20 20 20  0+'0');         
5210: 20 20 20 20 2f 2a 20 31 30 27 73 20 64 69 67 69      /* 10's digi
5220: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2a  t */.          *
5230: 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 63 68 61  (bufpt++) = (cha
5240: 72 29 28 65 78 70 25 31 30 2b 27 30 27 29 3b 20  r)(exp%10+'0'); 
5250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5260: 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20  's digit */.    
5270: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2a 62      }.        *b
5280: 75 66 70 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20  ufpt = 0;..     
5290: 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72     /* The conver
52a0: 74 65 64 20 6e 75 6d 62 65 72 20 69 73 20 69 6e  ted number is in
52b0: 20 62 75 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20   buf[] and zero 
52c0: 74 65 72 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70  terminated. Outp
52d0: 75 74 20 69 74 2e 0a 20 20 20 20 20 20 20 20 2a  ut it..        *
52e0: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
52f0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
5300: 20 75 73 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f   usual order, no
5310: 74 20 72 65 76 65 72 73 65 64 20 61 73 20 77 69  t reversed as wi
5320: 74 68 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  th.        ** in
5330: 74 65 67 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e  teger conversion
5340: 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65  s. */.        le
5350: 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 62 75 66  ngth = (int)(buf
5360: 70 74 2d 62 75 66 29 3b 0a 20 20 20 20 20 20 20  pt-buf);.       
5370: 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 0a 20   bufpt = buf;.. 
5380: 20 20 20 20 20 20 20 2f 2a 20 53 70 65 63 69 61         /* Specia
5390: 6c 20 63 61 73 65 3a 20 20 41 64 64 20 6c 65 61  l case:  Add lea
53a0: 64 69 6e 67 20 7a 65 72 6f 73 20 69 66 20 74 68  ding zeros if th
53b0: 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 66  e flag_zeropad f
53c0: 6c 61 67 20 69 73 0a 20 20 20 20 20 20 20 20 2a  lag is.        *
53d0: 2a 20 73 65 74 20 61 6e 64 20 77 65 20 61 72 65  * set and we are
53e0: 20 6e 6f 74 20 6c 65 66 74 20 6a 75 73 74 69 66   not left justif
53f0: 69 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ied */.        i
5400: 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20  f( flag_zeropad 
5410: 26 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73  && !flag_leftjus
5420: 74 69 66 79 20 26 26 20 6c 65 6e 67 74 68 20 3c  tify && length <
5430: 20 77 69 64 74 68 29 7b 0a 20 20 20 20 20 20 20   width){.       
5440: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
5450: 20 20 20 20 69 6e 74 20 6e 50 61 64 20 3d 20 77      int nPad = w
5460: 69 64 74 68 20 2d 20 6c 65 6e 67 74 68 3b 0a 20  idth - length;. 
5470: 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 77           for(i=w
5480: 69 64 74 68 3b 20 69 3e 3d 6e 50 61 64 3b 20 69  idth; i>=nPad; i
5490: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  --){.           
54a0: 20 62 75 66 70 74 5b 69 5d 20 3d 20 62 75 66 70   bufpt[i] = bufp
54b0: 74 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20 20 20 20  t[i-nPad];.     
54c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
54d0: 20 69 20 3d 20 70 72 65 66 69 78 21 3d 30 3b 0a   i = prefix!=0;.
54e0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
54f0: 20 6e 50 61 64 2d 2d 20 29 20 62 75 66 70 74 5b   nPad-- ) bufpt[
5500: 69 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20 20 20 20  i++] = '0';.    
5510: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77        length = w
5520: 69 64 74 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a  idth;.        }.
5530: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 62  #endif.        b
5540: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
5550: 20 65 74 53 49 5a 45 3a 0a 20 20 20 20 20 20 20   etSIZE:.       
5560: 20 2a 28 76 61 5f 61 72 67 28 61 70 2c 69 6e 74   *(va_arg(ap,int
5570: 2a 29 29 20 3d 20 70 41 63 63 75 6d 2d 3e 6e 43  *)) = pAccum->nC
5580: 68 61 72 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  har;.        len
5590: 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b  gth = width = 0;
55a0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
55b0: 20 20 20 20 20 20 63 61 73 65 20 65 74 50 45 52        case etPER
55c0: 43 45 4e 54 3a 0a 20 20 20 20 20 20 20 20 62 75  CENT:.        bu
55d0: 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20  f[0] = '%';.    
55e0: 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b      bufpt = buf;
55f0: 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20  .        length 
5600: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 1;.        bre
5610: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65  ak;.      case e
5620: 74 43 48 41 52 58 3a 0a 20 20 20 20 20 20 20 20  tCHARX:.        
5630: 63 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  c = va_arg(ap,in
5640: 74 29 3b 0a 20 20 20 20 20 20 20 20 62 75 66 5b  t);.        buf[
5650: 30 5d 20 3d 20 28 63 68 61 72 29 63 3b 0a 20 20  0] = (char)c;.  
5660: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
5670: 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  ion>=0 ){.      
5680: 20 20 20 20 66 6f 72 28 69 64 78 3d 31 3b 20 69      for(idx=1; i
5690: 64 78 3c 70 72 65 63 69 73 69 6f 6e 3b 20 69 64  dx<precision; id
56a0: 78 2b 2b 29 20 62 75 66 5b 69 64 78 5d 20 3d 20  x++) buf[idx] = 
56b0: 28 63 68 61 72 29 63 3b 0a 20 20 20 20 20 20 20  (char)c;.       
56c0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63     length = prec
56d0: 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 7d  ision;.        }
56e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
56f0: 6c 65 6e 67 74 68 20 3d 31 3b 0a 20 20 20 20 20  length =1;.     
5700: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66     }.        buf
5710: 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20  pt = buf;.      
5720: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
5730: 61 73 65 20 65 74 53 54 52 49 4e 47 3a 0a 20 20  ase etSTRING:.  
5740: 20 20 20 20 63 61 73 65 20 65 74 44 59 4e 53 54      case etDYNST
5750: 52 49 4e 47 3a 0a 20 20 20 20 20 20 20 20 62 75  RING:.        bu
5760: 66 70 74 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  fpt = va_arg(ap,
5770: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
5780: 69 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a  if( bufpt==0 ){.
5790: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
57a0: 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 7d 65  = "";.        }e
57b0: 6c 73 65 20 69 66 28 20 78 74 79 70 65 3d 3d 65  lse if( xtype==e
57c0: 74 44 59 4e 53 54 52 49 4e 47 20 29 7b 0a 20 20  tDYNSTRING ){.  
57d0: 20 20 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d          zExtra =
57e0: 20 62 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20   bufpt;.        
57f0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  }.        if( pr
5800: 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20  ecision>=0 ){.  
5810: 20 20 20 20 20 20 20 20 66 6f 72 28 6c 65 6e 67          for(leng
5820: 74 68 3d 30 3b 20 6c 65 6e 67 74 68 3c 70 72 65  th=0; length<pre
5830: 63 69 73 69 6f 6e 20 26 26 20 62 75 66 70 74 5b  cision && bufpt[
5840: 6c 65 6e 67 74 68 5d 3b 20 6c 65 6e 67 74 68 2b  length]; length+
5850: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c  +){}.        }el
5860: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 65  se{.          le
5870: 6e 67 74 68 20 3d 20 73 71 6c 69 74 65 33 53 74  ngth = sqlite3St
5880: 72 6c 65 6e 33 30 28 62 75 66 70 74 29 3b 0a 20  rlen30(bufpt);. 
5890: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
58a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
58b0: 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 3a 0a  se etSQLESCAPE:.
58c0: 20 20 20 20 20 20 63 61 73 65 20 65 74 53 51 4c        case etSQL
58d0: 45 53 43 41 50 45 32 3a 0a 20 20 20 20 20 20 63  ESCAPE2:.      c
58e0: 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 33  ase etSQLESCAPE3
58f0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  : {.        int 
5900: 69 2c 20 6a 2c 20 6e 2c 20 69 73 6e 75 6c 6c 3b  i, j, n, isnull;
5910: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 65 65  .        int nee
5920: 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20  dQuote;.        
5930: 63 68 61 72 20 63 68 3b 0a 20 20 20 20 20 20 20  char ch;.       
5940: 20 63 68 61 72 20 71 20 3d 20 28 28 78 74 79 70   char q = ((xtyp
5950: 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 33 29  e==etSQLESCAPE3)
5960: 3f 27 22 27 3a 27 5c 27 27 29 3b 20 20 20 2f 2a  ?'"':'\'');   /*
5970: 20 51 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   Quote character
5980: 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61 72   */.        char
5990: 20 2a 65 73 63 61 72 67 20 3d 20 76 61 5f 61 72   *escarg = va_ar
59a0: 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20  g(ap,char*);.   
59b0: 20 20 20 20 20 69 73 6e 75 6c 6c 20 3d 20 65 73       isnull = es
59c0: 63 61 72 67 3d 3d 30 3b 0a 20 20 20 20 20 20 20  carg==0;.       
59d0: 20 69 66 28 20 69 73 6e 75 6c 6c 20 29 20 65 73   if( isnull ) es
59e0: 63 61 72 67 20 3d 20 28 78 74 79 70 65 3d 3d 65  carg = (xtype==e
59f0: 74 53 51 4c 45 53 43 41 50 45 32 20 3f 20 22 4e  tSQLESCAPE2 ? "N
5a00: 55 4c 4c 22 20 3a 20 22 28 4e 55 4c 4c 29 22 29  ULL" : "(NULL)")
5a10: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  ;.        for(i=
5a20: 6e 3d 30 3b 20 28 63 68 3d 65 73 63 61 72 67 5b  n=0; (ch=escarg[
5a30: 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20  i])!=0; i++){.  
5a40: 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d 3d          if( ch==
5a50: 71 20 29 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20  q )  n++;.      
5a60: 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 65 65 64    }.        need
5a70: 51 75 6f 74 65 20 3d 20 21 69 73 6e 75 6c 6c 20  Quote = !isnull 
5a80: 26 26 20 78 74 79 70 65 3d 3d 65 74 53 51 4c 45  && xtype==etSQLE
5a90: 53 43 41 50 45 32 3b 0a 20 20 20 20 20 20 20 20  SCAPE2;.        
5aa0: 6e 20 2b 3d 20 69 20 2b 20 31 20 2b 20 6e 65 65  n += i + 1 + nee
5ab0: 64 51 75 6f 74 65 2a 32 3b 0a 20 20 20 20 20 20  dQuote*2;.      
5ac0: 20 20 69 66 28 20 6e 3e 65 74 42 55 46 53 49 5a    if( n>etBUFSIZ
5ad0: 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  E ){.          b
5ae0: 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d 20  ufpt = zExtra = 
5af0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 6e  sqlite3Malloc( n
5b00: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   );.          if
5b10: 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20 20  ( bufpt==0 ){.  
5b20: 20 20 20 20 20 20 20 20 20 20 70 41 63 63 75 6d            pAccum
5b30: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
5b40: 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
5b50: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
5b60: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
5b70: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  e{.          buf
5b80: 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20  pt = buf;.      
5b90: 20 20 7d 0a 20 20 20 20 20 20 20 20 6a 20 3d 20    }.        j = 
5ba0: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e  0;.        if( n
5bb0: 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 70 74  eedQuote ) bufpt
5bc0: 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20 20  [j++] = q;.     
5bd0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 68 3d     for(i=0; (ch=
5be0: 65 73 63 61 72 67 5b 69 5d 29 21 3d 30 3b 20 69  escarg[i])!=0; i
5bf0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  ++){.          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 20 20 69 66 28 20 63 68            if( ch
5c20: 3d 3d 71 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d  ==q ) bufpt[j++]
5c30: 20 3d 20 63 68 3b 0a 20 20 20 20 20 20 20 20 7d   = ch;.        }
5c40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 65 65  .        if( nee
5c50: 64 51 75 6f 74 65 20 29 20 62 75 66 70 74 5b 6a  dQuote ) bufpt[j
5c60: 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20 20 20 20  ++] = q;.       
5c70: 20 62 75 66 70 74 5b 6a 5d 20 3d 20 30 3b 0a 20   bufpt[j] = 0;. 
5c80: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
5c90: 6a 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68  j;.        /* Th
5ca0: 65 20 70 72 65 63 69 73 69 6f 6e 20 69 73 20 69  e precision is i
5cb0: 67 6e 6f 72 65 64 20 6f 6e 20 25 71 20 61 6e 64  gnored on %q and
5cc0: 20 25 51 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f   %Q */.        /
5cd0: 2a 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e  * if( precision>
5ce0: 3d 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c  =0 && precision<
5cf0: 6c 65 6e 67 74 68 20 29 20 6c 65 6e 67 74 68 20  length ) length 
5d00: 3d 20 70 72 65 63 69 73 69 6f 6e 3b 20 2a 2f 0a  = precision; */.
5d10: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
5d20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
5d30: 65 20 65 74 54 4f 4b 45 4e 3a 20 7b 0a 20 20 20  e etTOKEN: {.   
5d40: 20 20 20 20 20 54 6f 6b 65 6e 20 2a 70 54 6f 6b       Token *pTok
5d50: 65 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  en = va_arg(ap, 
5d60: 54 6f 6b 65 6e 2a 29 3b 0a 20 20 20 20 20 20 20  Token*);.       
5d70: 20 69 66 28 20 70 54 6f 6b 65 6e 20 29 7b 0a 20   if( pToken ){. 
5d80: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
5d90: 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70  StrAccumAppend(p
5da0: 41 63 63 75 6d 2c 20 28 63 6f 6e 73 74 20 63 68  Accum, (const ch
5db0: 61 72 2a 29 70 54 6f 6b 65 6e 2d 3e 7a 2c 20 70  ar*)pToken->z, p
5dc0: 54 6f 6b 65 6e 2d 3e 6e 29 3b 0a 20 20 20 20 20  Token->n);.     
5dd0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e     }.        len
5de0: 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b  gth = width = 0;
5df0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5e00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61        }.      ca
5e10: 73 65 20 65 74 53 52 43 4c 49 53 54 3a 20 7b 0a  se etSRCLIST: {.
5e20: 20 20 20 20 20 20 20 20 53 72 63 4c 69 73 74 20          SrcList 
5e30: 2a 70 53 72 63 20 3d 20 76 61 5f 61 72 67 28 61  *pSrc = va_arg(a
5e40: 70 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  p, SrcList*);.  
5e50: 20 20 20 20 20 20 69 6e 74 20 6b 20 3d 20 76 61        int k = va
5e60: 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20  _arg(ap, int);. 
5e70: 20 20 20 20 20 20 20 73 74 72 75 63 74 20 53 72         struct Sr
5e80: 63 4c 69 73 74 5f 69 74 65 6d 20 2a 70 49 74 65  cList_item *pIte
5e90: 6d 20 3d 20 26 70 53 72 63 2d 3e 61 5b 6b 5d 3b  m = &pSrc->a[k];
5ea0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5eb0: 20 6b 3e 3d 30 20 26 26 20 6b 3c 70 53 72 63 2d   k>=0 && k<pSrc-
5ec0: 3e 6e 53 72 63 20 29 3b 0a 20 20 20 20 20 20 20  >nSrc );.       
5ed0: 20 69 66 28 20 70 49 74 65 6d 2d 3e 7a 44 61 74   if( pItem->zDat
5ee0: 61 62 61 73 65 20 29 7b 0a 20 20 20 20 20 20 20  abase ){.       
5ef0: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
5f00: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
5f10: 20 70 49 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73   pItem->zDatabas
5f20: 65 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  e, -1);.        
5f30: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
5f40: 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20  mAppend(pAccum, 
5f50: 22 2e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  ".", 1);.       
5f60: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
5f70: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
5f80: 28 70 41 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e  (pAccum, pItem->
5f90: 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20  zName, -1);.    
5fa0: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64      length = wid
5fb0: 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  th = 0;.        
5fc0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5fd0: 20 20 20 7d 2f 2a 20 45 6e 64 20 73 77 69 74 63     }/* End switc
5fe0: 68 20 6f 76 65 72 20 74 68 65 20 66 6f 72 6d 61  h over the forma
5ff0: 74 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a  t type */.    /*
6000: 0a 20 20 20 20 2a 2a 20 54 68 65 20 74 65 78 74  .    ** The text
6010: 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   of the conversi
6020: 6f 6e 20 69 73 20 70 6f 69 6e 74 65 64 20 74 6f  on is pointed to
6030: 20 62 79 20 22 62 75 66 70 74 22 20 61 6e 64 20   by "bufpt" and 
6040: 69 73 0a 20 20 20 20 2a 2a 20 22 6c 65 6e 67 74  is.    ** "lengt
6050: 68 22 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  h" characters lo
6060: 6e 67 2e 20 20 54 68 65 20 66 69 65 6c 64 20 77  ng.  The field w
6070: 69 64 74 68 20 69 73 20 22 77 69 64 74 68 22 2e  idth is "width".
6080: 20 20 44 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20    Do.    ** the 
6090: 6f 75 74 70 75 74 2e 0a 20 20 20 20 2a 2f 0a 20  output..    */. 
60a0: 20 20 20 69 66 28 20 21 66 6c 61 67 5f 6c 65 66     if( !flag_lef
60b0: 74 6a 75 73 74 69 66 79 20 29 7b 0a 20 20 20 20  tjustify ){.    
60c0: 20 20 72 65 67 69 73 74 65 72 20 69 6e 74 20 6e    register int n
60d0: 73 70 61 63 65 3b 0a 20 20 20 20 20 20 6e 73 70  space;.      nsp
60e0: 61 63 65 20 3d 20 77 69 64 74 68 2d 6c 65 6e 67  ace = width-leng
60f0: 74 68 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 73  th;.      if( ns
6100: 70 61 63 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  pace>0 ){.      
6110: 20 20 61 70 70 65 6e 64 53 70 61 63 65 28 70 41    appendSpace(pA
6120: 63 63 75 6d 2c 20 6e 73 70 61 63 65 29 3b 0a 20  ccum, nspace);. 
6130: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
6140: 20 69 66 28 20 6c 65 6e 67 74 68 3e 30 20 29 7b   if( length>0 ){
6150: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74  .      sqlite3St
6160: 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63  rAccumAppend(pAc
6170: 63 75 6d 2c 20 62 75 66 70 74 2c 20 6c 65 6e 67  cum, bufpt, leng
6180: 74 68 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  th);.    }.    i
6190: 66 28 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74  f( flag_leftjust
61a0: 69 66 79 20 29 7b 0a 20 20 20 20 20 20 72 65 67  ify ){.      reg
61b0: 69 73 74 65 72 20 69 6e 74 20 6e 73 70 61 63 65  ister int nspace
61c0: 3b 0a 20 20 20 20 20 20 6e 73 70 61 63 65 20 3d  ;.      nspace =
61d0: 20 77 69 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20   width-length;. 
61e0: 20 20 20 20 20 69 66 28 20 6e 73 70 61 63 65 3e       if( nspace>
61f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
6200: 65 6e 64 53 70 61 63 65 28 70 41 63 63 75 6d 2c  endSpace(pAccum,
6210: 20 6e 73 70 61 63 65 29 3b 0a 20 20 20 20 20 20   nspace);.      
6220: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
6230: 7a 45 78 74 72 61 20 29 7b 0a 20 20 20 20 20 20  zExtra ){.      
6240: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 78  sqlite3_free(zEx
6250: 74 72 61 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 2f  tra);.    }.  }/
6260: 2a 20 45 6e 64 20 66 6f 72 20 6c 6f 6f 70 20 6f  * End for loop o
6270: 76 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 73  ver the format s
6280: 74 72 69 6e 67 20 2a 2f 0a 7d 20 2f 2a 20 45 6e  tring */.} /* En
6290: 64 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  d of function */
62a0: 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 4e  ../*.** Append N
62b0: 20 62 79 74 65 73 20 6f 66 20 74 65 78 74 20 66   bytes of text f
62c0: 72 6f 6d 20 7a 20 74 6f 20 74 68 65 20 53 74 72  rom z to the Str
62d0: 41 63 63 75 6d 20 6f 62 6a 65 63 74 2e 0a 2a 2f  Accum object..*/
62e0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
62f0: 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
6300: 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20 63  ccum *p, const c
6310: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 4e 29 7b 0a  har *z, int N){.
6320: 20 20 69 66 28 20 70 2d 3e 74 6f 6f 42 69 67 20    if( p->tooBig 
6330: 7c 20 70 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  | p->mallocFaile
6340: 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  d ){.    return;
6350: 0a 20 20 7d 0a 20 20 69 66 28 20 4e 3c 30 20 29  .  }.  if( N<0 )
6360: 7b 0a 20 20 20 20 4e 20 3d 20 73 71 6c 69 74 65  {.    N = sqlite
6370: 33 53 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20  3Strlen30(z);.  
6380: 7d 0a 20 20 69 66 28 20 4e 3d 3d 30 20 7c 7c 20  }.  if( N==0 || 
6390: 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  z==0 ){.    retu
63a0: 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d  rn;.  }.  if( p-
63b0: 3e 6e 43 68 61 72 2b 4e 20 3e 3d 20 70 2d 3e 6e  >nChar+N >= p->n
63c0: 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68 61  Alloc ){.    cha
63d0: 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 69 66 28  r *zNew;.    if(
63e0: 20 21 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63 20 29   !p->useMalloc )
63f0: 7b 0a 20 20 20 20 20 20 70 2d 3e 74 6f 6f 42 69  {.      p->tooBi
6400: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 4e 20 3d  g = 1;.      N =
6410: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2d 20 70 2d 3e   p->nAlloc - p->
6420: 6e 43 68 61 72 20 2d 20 31 3b 0a 20 20 20 20 20  nChar - 1;.     
6430: 20 69 66 28 20 4e 3c 3d 30 20 29 7b 0a 20 20 20   if( N<=0 ){.   
6440: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
6450: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
6460: 20 20 20 20 20 20 69 36 34 20 73 7a 4e 65 77 20        i64 szNew 
6470: 3d 20 70 2d 3e 6e 43 68 61 72 3b 0a 20 20 20 20  = p->nChar;.    
6480: 20 20 73 7a 4e 65 77 20 2b 3d 20 4e 20 2b 20 31    szNew += N + 1
6490: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 4e 65  ;.      if( szNe
64a0: 77 20 3e 20 70 2d 3e 6d 78 41 6c 6c 6f 63 20 29  w > p->mxAlloc )
64b0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
64c0: 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 70  3StrAccumReset(p
64d0: 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 74 6f  );.        p->to
64e0: 6f 42 69 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  oBig = 1;.      
64f0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
6500: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
6510: 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 28 69 6e 74 29  ->nAlloc = (int)
6520: 73 7a 4e 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20  szNew;.      }. 
6530: 20 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69       zNew = sqli
6540: 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70  te3DbMallocRaw(p
6550: 2d 3e 64 62 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 20  ->db, p->nAlloc 
6560: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 4e 65  );.      if( zNe
6570: 77 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d  w ){.        mem
6580: 63 70 79 28 7a 4e 65 77 2c 20 70 2d 3e 7a 54 65  cpy(zNew, p->zTe
6590: 78 74 2c 20 70 2d 3e 6e 43 68 61 72 29 3b 0a 20  xt, p->nChar);. 
65a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74         sqlite3St
65b0: 72 41 63 63 75 6d 52 65 73 65 74 28 70 29 3b 0a  rAccumReset(p);.
65c0: 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65 78 74          p->zText
65d0: 20 3d 20 7a 4e 65 77 3b 0a 20 20 20 20 20 20 7d   = zNew;.      }
65e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
65f0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
6600: 31 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  1;.        sqlit
6610: 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
6620: 70 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  p);.        retu
6630: 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
6640: 7d 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  }.  }.  memcpy(&
6650: 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61  p->zText[p->nCha
6660: 72 5d 2c 20 7a 2c 20 4e 29 3b 0a 20 20 70 2d 3e  r], z, N);.  p->
6670: 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a 7d 0a 0a 2f  nChar += N;.}../
6680: 2a 0a 2a 2a 20 46 69 6e 69 73 68 20 6f 66 66 20  *.** Finish off 
6690: 61 20 73 74 72 69 6e 67 20 62 79 20 6d 61 6b 69  a string by maki
66a0: 6e 67 20 73 75 72 65 20 69 74 20 69 73 20 7a 65  ng sure it is ze
66b0: 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 2e 0a 2a  ro-terminated..*
66c0: 2a 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  * Return a point
66d0: 65 72 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  er to the result
66e0: 69 6e 67 20 73 74 72 69 6e 67 2e 20 20 52 65 74  ing string.  Ret
66f0: 75 72 6e 20 61 20 4e 55 4c 4c 0a 2a 2a 20 70 6f  urn a NULL.** po
6700: 69 6e 74 65 72 20 69 66 20 61 6e 79 20 6b 69 6e  inter if any kin
6710: 64 20 6f 66 20 65 72 72 6f 72 20 77 61 73 20 65  d of error was e
6720: 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2f 0a 63  ncountered..*/.c
6730: 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
6740: 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
6750: 63 75 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  cum *p){.  if( p
6760: 2d 3e 7a 54 65 78 74 20 29 7b 0a 20 20 20 20 70  ->zText ){.    p
6770: 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72  ->zText[p->nChar
6780: 5d 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  ] = 0;.    if( p
6790: 2d 3e 75 73 65 4d 61 6c 6c 6f 63 20 26 26 20 70  ->useMalloc && p
67a0: 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73  ->zText==p->zBas
67b0: 65 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 7a 54  e ){.      p->zT
67c0: 65 78 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  ext = sqlite3DbM
67d0: 61 6c 6c 6f 63 52 61 77 28 70 2d 3e 64 62 2c 20  allocRaw(p->db, 
67e0: 70 2d 3e 6e 43 68 61 72 2b 31 20 29 3b 0a 20 20  p->nChar+1 );.  
67f0: 20 20 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 74      if( p->zText
6800: 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63   ){.        memc
6810: 70 79 28 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e  py(p->zText, p->
6820: 7a 42 61 73 65 2c 20 70 2d 3e 6e 43 68 61 72 2b  zBase, p->nChar+
6830: 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  1);.      }else{
6840: 0a 20 20 20 20 20 20 20 20 70 2d 3e 6d 61 6c 6c  .        p->mall
6850: 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
6860: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
6870: 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 54 65 78    return p->zTex
6880: 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 65  t;.}../*.** Rese
6890: 74 20 61 6e 20 53 74 72 41 63 63 75 6d 20 73 74  t an StrAccum st
68a0: 72 69 6e 67 2e 20 20 52 65 63 6c 61 69 6d 20 61  ring.  Reclaim a
68b0: 6c 6c 20 6d 61 6c 6c 6f 63 65 64 20 6d 65 6d 6f  ll malloced memo
68c0: 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ry..*/.void sqli
68d0: 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
68e0: 28 53 74 72 41 63 63 75 6d 20 2a 70 29 7b 0a 20  (StrAccum *p){. 
68f0: 20 69 66 28 20 70 2d 3e 7a 54 65 78 74 21 3d 70   if( p->zText!=p
6900: 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20 20 20 73  ->zBase ){.    s
6910: 71 6c 69 74 65 33 44 62 46 72 65 65 28 70 2d 3e  qlite3DbFree(p->
6920: 64 62 2c 20 70 2d 3e 7a 54 65 78 74 29 3b 0a 20  db, p->zText);. 
6930: 20 7d 0a 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20   }.  p->zText = 
6940: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74  0;.}../*.** Init
6950: 69 61 6c 69 7a 65 20 61 20 73 74 72 69 6e 67 20  ialize a string 
6960: 61 63 63 75 6d 75 6c 61 74 6f 72 0a 2a 2f 0a 76  accumulator.*/.v
6970: 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
6980: 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
6990: 20 2a 70 2c 20 63 68 61 72 20 2a 7a 42 61 73 65   *p, char *zBase
69a0: 2c 20 69 6e 74 20 6e 2c 20 69 6e 74 20 6d 78 29  , int n, int mx)
69b0: 7b 0a 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 70  {.  p->zText = p
69c0: 2d 3e 7a 42 61 73 65 20 3d 20 7a 42 61 73 65 3b  ->zBase = zBase;
69d0: 0a 20 20 70 2d 3e 64 62 20 3d 20 30 3b 0a 20 20  .  p->db = 0;.  
69e0: 70 2d 3e 6e 43 68 61 72 20 3d 20 30 3b 0a 20 20  p->nChar = 0;.  
69f0: 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 6e 3b 0a 20  p->nAlloc = n;. 
6a00: 20 70 2d 3e 6d 78 41 6c 6c 6f 63 20 3d 20 6d 78   p->mxAlloc = mx
6a10: 3b 0a 20 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63  ;.  p->useMalloc
6a20: 20 3d 20 31 3b 0a 20 20 70 2d 3e 74 6f 6f 42 69   = 1;.  p->tooBi
6a30: 67 20 3d 20 30 3b 0a 20 20 70 2d 3e 6d 61 6c 6c  g = 0;.  p->mall
6a40: 6f 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 7d 0a  ocFailed = 0;.}.
6a50: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74  ./*.** Print int
6a60: 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  o memory obtaine
6a70: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c  d from sqliteMal
6a80: 6c 6f 63 28 29 2e 20 20 55 73 65 20 74 68 65 20  loc().  Use the 
6a90: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f  internal.** %-co
6aa0: 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69  nversion extensi
6ab0: 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  ons..*/.char *sq
6ac0: 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
6ad0: 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
6ae0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
6af0: 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 63  va_list ap){.  c
6b00: 68 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 7a  har *z;.  char z
6b10: 42 61 73 65 5b 53 51 4c 49 54 45 5f 50 52 49 4e  Base[SQLITE_PRIN
6b20: 54 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20 53  T_BUF_SIZE];.  S
6b30: 74 72 41 63 63 75 6d 20 61 63 63 3b 0a 20 20 73  trAccum acc;.  s
6b40: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
6b50: 69 74 28 26 61 63 63 2c 20 7a 42 61 73 65 2c 20  it(&acc, zBase, 
6b60: 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 0a 20  sizeof(zBase),. 
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b80: 20 20 20 20 20 64 62 20 3f 20 64 62 2d 3e 61 4c       db ? db->aL
6b90: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
6ba0: 54 5f 4c 45 4e 47 54 48 5d 20 3a 20 53 51 4c 49  T_LENGTH] : SQLI
6bb0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 29 3b 0a  TE_MAX_LENGTH);.
6bc0: 20 20 61 63 63 2e 64 62 20 3d 20 64 62 3b 0a 20    acc.db = db;. 
6bd0: 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
6be0: 28 26 61 63 63 2c 20 31 2c 20 7a 46 6f 72 6d 61  (&acc, 1, zForma
6bf0: 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d 20 73 71  t, ap);.  z = sq
6c00: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
6c10: 69 73 68 28 26 61 63 63 29 3b 0a 20 20 69 66 28  ish(&acc);.  if(
6c20: 20 61 63 63 2e 6d 61 6c 6c 6f 63 46 61 69 6c 65   acc.mallocFaile
6c30: 64 20 26 26 20 64 62 20 29 7b 0a 20 20 20 20 64  d && db ){.    d
6c40: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
6c50: 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  = 1;.  }.  retur
6c60: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  n z;.}../*.** Pr
6c70: 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  int into memory 
6c80: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
6c90: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 55  liteMalloc().  U
6ca0: 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a  se the internal.
6cb0: 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20  ** %-conversion 
6cc0: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63  extensions..*/.c
6cd0: 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
6ce0: 6e 74 66 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ntf(sqlite3 *db,
6cf0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
6d00: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
6d10: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72  _list ap;.  char
6d20: 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   *z;.  va_start(
6d30: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
6d40: 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69  z = sqlite3VMPri
6d50: 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c  ntf(db, zFormat,
6d60: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61   ap);.  va_end(a
6d70: 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a  p);.  return z;.
6d80: 7d 0a 0a 2f 2a 0a 2a 2a 20 4c 69 6b 65 20 73 71  }../*.** Like sq
6d90: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 29 2c 20  lite3MPrintf(), 
6da0: 62 75 74 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  but call sqlite3
6db0: 44 62 46 72 65 65 28 29 20 6f 6e 20 7a 53 74 72  DbFree() on zStr
6dc0: 20 61 66 74 65 72 20 66 6f 72 6d 61 74 74 69 6e   after formattin
6dd0: 67 0a 2a 2a 20 74 68 65 20 73 74 72 69 6e 67 20  g.** the string 
6de0: 61 6e 64 20 62 65 66 6f 72 65 20 72 65 74 75 72  and before retur
6df0: 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20 72 6f 75  nning.  This rou
6e00: 74 69 6e 65 20 69 73 20 69 6e 74 65 6e 64 65 64  tine is intended
6e10: 20 74 6f 20 62 65 20 75 73 65 64 0a 2a 2a 20 74   to be used.** t
6e20: 6f 20 6d 6f 64 69 66 79 20 61 6e 20 65 78 69 73  o modify an exis
6e30: 74 69 6e 67 20 73 74 72 69 6e 67 2e 20 20 46 6f  ting string.  Fo
6e40: 72 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  r example:.**.**
6e50: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
6e60: 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 78 2c  e3MPrintf(db, x,
6e70: 20 22 70 72 65 66 69 78 20 25 73 20 73 75 66 66   "prefix %s suff
6e80: 69 78 22 2c 20 78 29 3b 0a 2a 2a 0a 2a 2f 0a 63  ix", x);.**.*/.c
6e90: 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70  har *sqlite3MApp
6ea0: 65 6e 64 66 28 73 71 6c 69 74 65 33 20 2a 64 62  endf(sqlite3 *db
6eb0: 2c 20 63 68 61 72 20 2a 7a 53 74 72 2c 20 63 6f  , char *zStr, co
6ec0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
6ed0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
6ee0: 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a  st ap;.  char *z
6ef0: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
6f00: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d   zFormat);.  z =
6f10: 20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66   sqlite3VMPrintf
6f20: 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  (db, zFormat, ap
6f30: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
6f40: 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
6f50: 28 64 62 2c 20 7a 53 74 72 29 3b 0a 20 20 72 65  (db, zStr);.  re
6f60: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn z;.}../*.**
6f70: 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f   Print into memo
6f80: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
6f90: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
6fa0: 29 2e 20 20 4f 6d 69 74 20 74 68 65 20 69 6e 74  ).  Omit the int
6fb0: 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65  ernal.** %-conve
6fc0: 72 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73  rsion extensions
6fd0: 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..*/.char *sqlit
6fe0: 65 33 5f 76 6d 70 72 69 6e 74 66 28 63 6f 6e 73  e3_vmprintf(cons
6ff0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
7000: 20 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20   va_list ap){.  
7010: 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20  char *z;.  char 
7020: 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f 50 52 49  zBase[SQLITE_PRI
7030: 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20  NT_BUF_SIZE];.  
7040: 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a 23 69  StrAccum acc;.#i
7050: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7060: 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20 69 66 28  T_AUTOINIT.  if(
7070: 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
7080: 69 7a 65 28 29 20 29 20 72 65 74 75 72 6e 20 30  ize() ) return 0
7090: 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
70a0: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
70b0: 61 63 63 2c 20 7a 42 61 73 65 2c 20 73 69 7a 65  acc, zBase, size
70c0: 6f 66 28 7a 42 61 73 65 29 2c 20 53 51 4c 49 54  of(zBase), SQLIT
70d0: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 29 3b 0a 20  E_MAX_LENGTH);. 
70e0: 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
70f0: 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61  (&acc, 0, zForma
7100: 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d 20 73 71  t, ap);.  z = sq
7110: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
7120: 69 73 68 28 26 61 63 63 29 3b 0a 20 20 72 65 74  ish(&acc);.  ret
7130: 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn z;.}../*.** 
7140: 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72  Print into memor
7150: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
7160: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
7170: 28 29 2e 20 20 4f 6d 69 74 20 74 68 65 20 69 6e  ().  Omit the in
7180: 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76  ternal.** %-conv
7190: 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f 6e  ersion extension
71a0: 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69  s..*/.char *sqli
71b0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 63 6f 6e 73  te3_mprintf(cons
71c0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
71d0: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
71e0: 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a   ap;.  char *z;.
71f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7200: 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20 69  MIT_AUTOINIT.  i
7210: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  f( sqlite3_initi
7220: 61 6c 69 7a 65 28 29 20 29 20 72 65 74 75 72 6e  alize() ) return
7230: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 76 61 5f   0;.#endif.  va_
7240: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
7250: 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65  t);.  z = sqlite
7260: 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d  3_vmprintf(zForm
7270: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
7280: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
7290: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69  z;.}../*.** sqli
72a0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 20 77  te3_snprintf() w
72b0: 6f 72 6b 73 20 6c 69 6b 65 20 73 6e 70 72 69 6e  orks like snprin
72c0: 74 66 28 29 20 65 78 63 65 70 74 20 74 68 61 74  tf() except that
72d0: 20 69 74 20 69 67 6e 6f 72 65 73 20 74 68 65 0a   it ignores the.
72e0: 2a 2a 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c  ** current local
72f0: 65 20 73 65 74 74 69 6e 67 73 2e 20 20 54 68 69  e settings.  Thi
7300: 73 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 66  s is important f
7310: 6f 72 20 53 51 4c 69 74 65 20 62 65 63 61 75 73  or SQLite becaus
7320: 65 20 77 65 0a 2a 2a 20 61 72 65 20 6e 6f 74 20  e we.** are not 
7330: 61 62 6c 65 20 74 6f 20 75 73 65 20 61 20 22 2c  able to use a ",
7340: 22 20 61 73 20 74 68 65 20 64 65 63 69 6d 61 6c  " as the decimal
7350: 20 70 6f 69 6e 74 20 69 6e 20 70 6c 61 63 65 20   point in place 
7360: 6f 66 20 22 2e 22 20 61 73 0a 2a 2a 20 73 70 65  of "." as.** spe
7370: 63 69 66 69 65 64 20 62 79 20 73 6f 6d 65 20 6c  cified by some l
7380: 6f 63 61 6c 65 73 2e 0a 2a 2f 0a 63 68 61 72 20  ocales..*/.char 
7390: 2a 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  *sqlite3_snprint
73a0: 66 28 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a  f(int n, char *z
73b0: 42 75 66 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Buf, const char 
73c0: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
73d0: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f    char *z;.  va_
73e0: 6c 69 73 74 20 61 70 3b 0a 20 20 53 74 72 41 63  list ap;.  StrAc
73f0: 63 75 6d 20 61 63 63 3b 0a 0a 20 20 69 66 28 20  cum acc;..  if( 
7400: 6e 3c 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  n<=0 ){.    retu
7410: 72 6e 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 73  rn zBuf;.  }.  s
7420: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
7430: 69 74 28 26 61 63 63 2c 20 7a 42 75 66 2c 20 6e  it(&acc, zBuf, n
7440: 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d  , 0);.  acc.useM
7450: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 76 61 5f  alloc = 0;.  va_
7460: 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74  start(ap,zFormat
7470: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72  );.  sqlite3VXPr
7480: 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46  intf(&acc, 0, zF
7490: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61  ormat, ap);.  va
74a0: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 7a 20 3d 20  _end(ap);.  z = 
74b0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
74c0: 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20 72  inish(&acc);.  r
74d0: 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 23 69 66 20  eturn z;.}..#if 
74e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
74f0: 45 42 55 47 29 0a 2f 2a 0a 2a 2a 20 41 20 76 65  EBUG)./*.** A ve
7500: 72 73 69 6f 6e 20 6f 66 20 70 72 69 6e 74 66 28  rsion of printf(
7510: 29 20 74 68 61 74 20 75 6e 64 65 72 73 74 61 6e  ) that understan
7520: 64 73 20 25 6c 6c 64 2e 20 20 55 73 65 64 20 66  ds %lld.  Used f
7530: 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0a 2a 2a  or debugging..**
7540: 20 54 68 65 20 70 72 69 6e 74 66 28 29 20 62 75   The printf() bu
7550: 69 6c 74 20 69 6e 74 6f 20 73 6f 6d 65 20 76 65  ilt into some ve
7560: 72 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64 6f 77  rsions of window
7570: 73 20 64 6f 65 73 20 6e 6f 74 20 75 6e 64 65 72  s does not under
7580: 73 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a 20 61 6e  stand %lld.** an
7590: 64 20 73 65 67 66 61 75 6c 74 73 20 69 66 20 79  d segfaults if y
75a0: 6f 75 20 67 69 76 65 20 69 74 20 61 20 6c 6f 6e  ou give it a lon
75b0: 67 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a 2f 0a 76  g long int..*/.v
75c0: 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
75d0: 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
75e0: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
75f0: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
7600: 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a    StrAccum acc;.
7610: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 30 5d    char zBuf[500]
7620: 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63  ;.  sqlite3StrAc
7630: 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 42  cumInit(&acc, zB
7640: 75 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75 66 29  uf, sizeof(zBuf)
7650: 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d  , 0);.  acc.useM
7660: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 76 61 5f  alloc = 0;.  va_
7670: 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74  start(ap,zFormat
7680: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72  );.  sqlite3VXPr
7690: 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46  intf(&acc, 0, zF
76a0: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61  ormat, ap);.  va
76b0: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c 69  _end(ap);.  sqli
76c0: 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
76d0: 68 28 26 61 63 63 29 3b 0a 20 20 66 70 72 69 6e  h(&acc);.  fprin
76e0: 74 66 28 73 74 64 6f 75 74 2c 22 25 73 22 2c 20  tf(stdout,"%s", 
76f0: 7a 42 75 66 29 3b 0a 20 20 66 66 6c 75 73 68 28  zBuf);.  fflush(
7700: 73 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 6e 64 69  stdout);.}.#endi
7710: 66 0a                                            f.