/ Hex Artifact Content
Login

Artifact 6eb5c70b531464cca4254e70aaafdf2e7da3a743:


0000: 2f 2a 0a 2a 2a 20 54 68 65 20 22 70 72 69 6e 74  /*.** The "print
0010: 66 22 20 63 6f 64 65 20 74 68 61 74 20 66 6f 6c  f" code that fol
0020: 6c 6f 77 73 20 64 61 74 65 73 20 66 72 6f 6d 20  lows dates from 
0030: 74 68 65 20 31 39 38 30 27 73 2e 20 20 49 74 20  the 1980's.  It 
0040: 69 73 20 69 6e 0a 2a 2a 20 74 68 65 20 70 75 62  is in.** the pub
0050: 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65  lic domain.  The
0060: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 65 6e   original commen
0070: 74 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ts are included 
0080: 68 65 72 65 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  here for.** comp
0090: 6c 65 74 65 6e 65 73 73 2e 20 20 54 68 65 79 20  leteness.  They 
00a0: 61 72 65 20 76 65 72 79 20 6f 75 74 2d 6f 66 2d  are very out-of-
00b0: 64 61 74 65 20 62 75 74 20 6d 69 67 68 74 20 62  date but might b
00c0: 65 20 75 73 65 66 75 6c 20 61 73 0a 2a 2a 20 61  e useful as.** a
00d0: 6e 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 66  n historical ref
00e0: 65 72 65 6e 63 65 2e 20 20 4d 6f 73 74 20 6f 66  erence.  Most of
00f0: 20 74 68 65 20 22 65 6e 68 61 6e 63 65 6d 65 6e   the "enhancemen
0100: 74 73 22 20 68 61 76 65 20 62 65 65 6e 20 62 61  ts" have been ba
0110: 63 6b 65 64 0a 2a 2a 20 6f 75 74 20 73 6f 20 74  cked.** out so t
0120: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  hat the function
0130: 61 6c 69 74 79 20 69 73 20 6e 6f 77 20 74 68 65  ality is now the
0140: 20 73 61 6d 65 20 61 73 20 73 74 61 6e 64 61 72   same as standar
0150: 64 20 70 72 69 6e 74 66 28 29 2e 0a 2a 2a 0a 2a  d printf()..**.*
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20  *********.**.** 
01b0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 6f  The following mo
01c0: 64 75 6c 65 73 20 69 73 20 61 6e 20 65 6e 68 61  dules is an enha
01d0: 6e 63 65 64 20 72 65 70 6c 61 63 65 6d 65 6e 74  nced replacement
01e0: 20 66 6f 72 20 74 68 65 20 22 70 72 69 6e 74 66   for the "printf
01f0: 22 20 73 75 62 72 6f 75 74 69 6e 65 73 0a 2a 2a  " subroutines.**
0200: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 73 74   found in the st
0210: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
0220: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
0230: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 61 72   enhancements ar
0240: 65 0a 2a 2a 20 73 75 70 70 6f 72 74 65 64 3a 0a  e.** supported:.
0250: 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20 20 41 64  **.**      +  Ad
0260: 64 69 74 69 6f 6e 61 6c 20 66 75 6e 63 74 69 6f  ditional functio
0270: 6e 73 2e 20 20 54 68 65 20 73 74 61 6e 64 61 72  ns.  The standar
0280: 64 20 73 65 74 20 6f 66 20 22 70 72 69 6e 74 66  d set of "printf
0290: 22 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  " functions.**  
02a0: 20 20 20 20 20 20 20 69 6e 63 6c 75 64 65 73 20         includes 
02b0: 70 72 69 6e 74 66 2c 20 66 70 72 69 6e 74 66 2c  printf, fprintf,
02c0: 20 73 70 72 69 6e 74 66 2c 20 76 70 72 69 6e 74   sprintf, vprint
02d0: 66 2c 20 76 66 70 72 69 6e 74 66 2c 20 61 6e 64  f, vfprintf, and
02e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 76 73 70 72  .**         vspr
02f0: 69 6e 74 66 2e 20 20 54 68 69 73 20 6d 6f 64 75  intf.  This modu
0300: 6c 65 20 61 64 64 73 20 74 68 65 20 66 6f 6c 6c  le adds the foll
0310: 6f 77 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  owing:.**.**    
0320: 20 20 20 20 20 20 20 2a 20 20 73 6e 70 72 69 6e         *  snprin
0330: 74 66 20 2d 2d 20 57 6f 72 6b 73 20 6c 69 6b 65  tf -- Works like
0340: 20 73 70 72 69 6e 74 66 2c 20 62 75 74 20 68 61   sprintf, but ha
0350: 73 20 61 6e 20 65 78 74 72 61 20 61 72 67 75 6d  s an extra argum
0360: 65 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ent.**          
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
0390: 65 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20  e of the buffer 
03a0: 77 72 69 74 74 65 6e 20 74 6f 2e 0a 2a 2a 0a 2a  written to..**.*
03b0: 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20 6d  *           *  m
03c0: 70 72 69 6e 74 66 20 2d 2d 20 20 53 69 6d 69 6c  printf --  Simil
03d0: 61 72 20 74 6f 20 73 70 72 69 6e 74 66 2e 20 20  ar to sprintf.  
03e0: 57 72 69 74 65 73 20 6f 75 74 70 75 74 20 74 6f  Writes output to
03f0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 6f 62 74 61 69 6e 65 64 20 66 72 6f      obtained fro
0420: 6d 20 6d 61 6c 6c 6f 63 2e 0a 2a 2a 0a 2a 2a 20  m malloc..**.** 
0430: 20 20 20 20 20 20 20 20 20 20 2a 20 20 78 70 72            *  xpr
0440: 69 6e 74 66 20 2d 2d 20 20 43 61 6c 6c 73 20 61  intf --  Calls a
0450: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64 69 73   function to dis
0460: 70 6f 73 65 20 6f 66 20 6f 75 74 70 75 74 2e 0a  pose of output..
0470: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  **.**           
0480: 2a 20 20 6e 70 72 69 6e 74 66 20 2d 2d 20 20 4e  *  nprintf --  N
0490: 6f 20 6f 75 74 70 75 74 2c 20 62 75 74 20 72 65  o output, but re
04a0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
04b0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 0a 2a   of characters.*
04c0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 61 74 20             that 
04e0: 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
04f0: 6f 75 74 70 75 74 20 62 79 20 70 72 69 6e 74 66  output by printf
0500: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
0510: 20 20 2a 20 20 41 20 76 2d 20 76 65 72 73 69 6f    *  A v- versio
0520: 6e 20 28 65 78 3a 20 76 73 6e 70 72 69 6e 74 66  n (ex: vsnprintf
0530: 29 20 6f 66 20 65 76 65 72 79 20 66 75 6e 63 74  ) of every funct
0540: 69 6f 6e 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 20  ion is also.**  
0550: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 70 70              supp
0560: 6c 69 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  lied..**.**     
0570: 20 2b 20 20 41 20 66 65 77 20 65 78 74 65 6e 73   +  A few extens
0580: 69 6f 6e 73 20 74 6f 20 74 68 65 20 66 6f 72 6d  ions to the form
0590: 61 74 74 69 6e 67 20 6e 6f 74 61 74 69 6f 6e 20  atting notation 
05a0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 3a 0a 2a  are supported:.*
05b0: 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a  *.**           *
05c0: 20 20 54 68 65 20 22 3d 22 20 66 6c 61 67 20 28    The "=" flag (
05d0: 73 69 6d 69 6c 61 72 20 74 6f 20 22 2d 22 29 20  similar to "-") 
05e0: 63 61 75 73 65 73 20 74 68 65 20 6f 75 74 70 75  causes the outpu
05f0: 74 20 74 6f 20 62 65 0a 2a 2a 20 20 20 20 20 20  t to be.**      
0600: 20 20 20 20 20 20 20 20 62 65 20 63 65 6e 74 65          be cente
0610: 72 65 64 20 69 6e 20 74 68 65 20 61 70 70 72 6f  red in the appro
0620: 70 72 69 61 74 65 6c 79 20 73 69 7a 65 64 20 66  priately sized f
0630: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ield..**.**     
0640: 20 20 20 20 20 20 2a 20 20 54 68 65 20 25 62 20        *  The %b 
0650: 66 69 65 6c 64 20 6f 75 74 70 75 74 73 20 61 6e  field outputs an
0660: 20 69 6e 74 65 67 65 72 20 69 6e 20 62 69 6e 61   integer in bina
0670: 72 79 20 6e 6f 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  ry notation..**.
0680: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20  **           *  
0690: 54 68 65 20 25 63 20 66 69 65 6c 64 20 6e 6f 77  The %c field now
06a0: 20 61 63 63 65 70 74 73 20 61 20 70 72 65 63 69   accepts a preci
06b0: 73 69 6f 6e 2e 20 20 54 68 65 20 63 68 61 72 61  sion.  The chara
06c0: 63 74 65 72 20 6f 75 74 70 75 74 0a 2a 2a 20 20  cter output.**  
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 72              is r
06e0: 65 70 65 61 74 65 64 20 62 79 20 74 68 65 20 6e  epeated by the n
06f0: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74  umber of times t
0700: 68 65 20 70 72 65 63 69 73 69 6f 6e 20 73 70 65  he precision spe
0710: 63 69 66 69 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  cifies..**.**   
0720: 20 20 20 20 20 20 20 20 2a 20 20 54 68 65 20 25          *  The %
0730: 27 20 66 69 65 6c 64 20 77 6f 72 6b 73 20 6c 69  ' field works li
0740: 6b 65 20 25 63 2c 20 62 75 74 20 74 61 6b 65 73  ke %c, but takes
0750: 20 61 73 20 69 74 73 20 63 68 61 72 61 63 74 65   as its characte
0760: 72 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 20  r the.**        
0770: 20 20 20 20 20 20 6e 65 78 74 20 63 68 61 72 61        next chara
0780: 63 74 65 72 20 6f 66 20 74 68 65 20 66 6f 72 6d  cter of the form
0790: 61 74 20 73 74 72 69 6e 67 2c 20 69 6e 73 74 65  at string, inste
07a0: 61 64 20 6f 66 20 74 68 65 20 6e 65 78 74 0a 2a  ad of the next.*
07b0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
07c0: 72 67 75 6d 65 6e 74 2e 20 20 46 6f 72 20 65 78  rgument.  For ex
07d0: 61 6d 70 6c 65 2c 20 20 70 72 69 6e 74 66 28 22  ample,  printf("
07e0: 25 2e 37 38 27 2d 22 29 20 20 70 72 69 6e 74 73  %.78'-")  prints
07f0: 20 37 38 20 6d 69 6e 75 73 0a 2a 2a 20 20 20 20   78 minus.**    
0800: 20 20 20 20 20 20 20 20 20 20 73 69 67 6e 73 2c            signs,
0810: 20 74 68 65 20 73 61 6d 65 20 61 73 20 20 70 72   the same as  pr
0820: 69 6e 74 66 28 22 25 2e 37 38 63 22 2c 27 2d 27  intf("%.78c",'-'
0830: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20  )..**.**      + 
0840: 20 57 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 75   When compiled u
0850: 73 69 6e 67 20 47 43 43 20 6f 6e 20 61 20 53 50  sing GCC on a SP
0860: 41 52 43 2c 20 74 68 69 73 20 76 65 72 73 69 6f  ARC, this versio
0870: 6e 20 6f 66 20 70 72 69 6e 74 66 20 69 73 0a 2a  n of printf is.*
0880: 2a 20 20 20 20 20 20 20 20 20 66 61 73 74 65 72  *         faster
0890: 20 74 68 61 6e 20 74 68 65 20 6c 69 62 72 61 72   than the librar
08a0: 79 20 70 72 69 6e 74 66 20 66 6f 72 20 53 55 4e  y printf for SUN
08b0: 20 4f 53 20 34 2e 31 2e 0a 2a 2a 0a 2a 2a 20 20   OS 4.1..**.**  
08c0: 20 20 20 20 2b 20 20 41 6c 6c 20 66 75 6e 63 74      +  All funct
08d0: 69 6f 6e 73 20 61 72 65 20 66 75 6c 6c 79 20 72  ions are fully r
08e0: 65 65 6e 74 72 61 6e 74 2e 0a 2a 2a 0a 2a 2f 0a  eentrant..**.*/.
08f0: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0900: 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 43 6f  Int.h"../*.** Co
0910: 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66  nversion types f
0920: 61 6c 6c 20 69 6e 74 6f 20 76 61 72 69 6f 75 73  all into various
0930: 20 63 61 74 65 67 6f 72 69 65 73 20 61 73 20 64   categories as d
0940: 65 66 69 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a  efined by the.**
0950: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 75 6d 65   following enume
0960: 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  ration..*/.#defi
0970: 6e 65 20 65 74 52 41 44 49 58 20 20 20 20 20 20  ne etRADIX      
0980: 20 31 20 2f 2a 20 49 6e 74 65 67 65 72 20 74 79   1 /* Integer ty
0990: 70 65 73 2e 20 20 25 64 2c 20 25 78 2c 20 25 6f  pes.  %d, %x, %o
09a0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 2a  , and so forth *
09b0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 46 4c 4f 41  /.#define etFLOA
09c0: 54 20 20 20 20 20 20 20 32 20 2f 2a 20 46 6c 6f  T       2 /* Flo
09d0: 61 74 69 6e 67 20 70 6f 69 6e 74 2e 20 20 25 66  ating point.  %f
09e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 58   */.#define etEX
09f0: 50 20 20 20 20 20 20 20 20 20 33 20 2f 2a 20 45  P         3 /* E
0a00: 78 70 6f 6e 65 6e 74 69 6f 6e 61 6c 20 6e 6f 74  xponentional not
0a10: 61 74 69 6f 6e 2e 20 25 65 20 61 6e 64 20 25 45  ation. %e and %E
0a20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 47 45   */.#define etGE
0a30: 4e 45 52 49 43 20 20 20 20 20 34 20 2f 2a 20 46  NERIC     4 /* F
0a40: 6c 6f 61 74 69 6e 67 20 6f 72 20 65 78 70 6f 6e  loating or expon
0a50: 65 6e 74 69 61 6c 2c 20 64 65 70 65 6e 64 69 6e  ential, dependin
0a60: 67 20 6f 6e 20 65 78 70 6f 6e 65 6e 74 2e 20 25  g on exponent. %
0a70: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53  g */.#define etS
0a80: 49 5a 45 20 20 20 20 20 20 20 20 35 20 2f 2a 20  IZE        5 /* 
0a90: 52 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  Return number of
0aa0: 20 63 68 61 72 61 63 74 65 72 73 20 70 72 6f 63   characters proc
0ab0: 65 73 73 65 64 20 73 6f 20 66 61 72 2e 20 25 6e  essed so far. %n
0ac0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 54   */.#define etST
0ad0: 52 49 4e 47 20 20 20 20 20 20 36 20 2f 2a 20 53  RING      6 /* S
0ae0: 74 72 69 6e 67 73 2e 20 25 73 20 2a 2f 0a 23 64  trings. %s */.#d
0af0: 65 66 69 6e 65 20 65 74 44 59 4e 53 54 52 49 4e  efine etDYNSTRIN
0b00: 47 20 20 20 37 20 2f 2a 20 44 79 6e 61 6d 69 63  G   7 /* Dynamic
0b10: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
0b20: 74 72 69 6e 67 73 2e 20 25 7a 20 2a 2f 0a 23 64  trings. %z */.#d
0b30: 65 66 69 6e 65 20 65 74 50 45 52 43 45 4e 54 20  efine etPERCENT 
0b40: 20 20 20 20 38 20 2f 2a 20 50 65 72 63 65 6e 74      8 /* Percent
0b50: 20 73 79 6d 62 6f 6c 2e 20 25 25 20 2a 2f 0a 23   symbol. %% */.#
0b60: 64 65 66 69 6e 65 20 65 74 43 48 41 52 58 20 20  define etCHARX  
0b70: 20 20 20 20 20 39 20 2f 2a 20 43 68 61 72 61 63       9 /* Charac
0b80: 74 65 72 73 2e 20 25 63 20 2a 2f 0a 2f 2a 20 54  ters. %c */./* T
0b90: 68 65 20 72 65 73 74 20 61 72 65 20 65 78 74 65  he rest are exte
0ba0: 6e 73 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d  nsions, not norm
0bb0: 61 6c 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72  ally found in pr
0bc0: 69 6e 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  intf() */.#defin
0bd0: 65 20 65 74 53 51 4c 45 53 43 41 50 45 20 20 31  e etSQLESCAPE  1
0be0: 30 20 2f 2a 20 53 74 72 69 6e 67 73 20 77 69 74  0 /* Strings wit
0bf0: 68 20 27 5c 27 27 20 64 6f 75 62 6c 65 64 2e 20  h '\'' doubled. 
0c00: 20 25 71 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %q */.#define e
0c10: 74 53 51 4c 45 53 43 41 50 45 32 20 31 31 20 2f  tSQLESCAPE2 11 /
0c20: 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27  * Strings with '
0c30: 5c 27 27 20 64 6f 75 62 6c 65 64 20 61 6e 64 20  \'' doubled and 
0c40: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 27 27 2c 0a  enclosed in '',.
0c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c60: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 70            NULL p
0c70: 6f 69 6e 74 65 72 73 20 72 65 70 6c 61 63 65 64  ointers replaced
0c80: 20 62 79 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 25   by SQL NULL.  %
0c90: 51 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 54  Q */.#define etT
0ca0: 4f 4b 45 4e 20 20 20 20 20 20 31 32 20 2f 2a 20  OKEN      12 /* 
0cb0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 54  a pointer to a T
0cc0: 6f 6b 65 6e 20 73 74 72 75 63 74 75 72 65 20 2a  oken structure *
0cd0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 52 43 4c  /.#define etSRCL
0ce0: 49 53 54 20 20 20 20 31 33 20 2f 2a 20 61 20 70  IST    13 /* a p
0cf0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 53 72 63 4c  ointer to a SrcL
0d00: 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ist */.#define e
0d10: 74 50 4f 49 4e 54 45 52 20 20 20 20 31 34 20 2f  tPOINTER    14 /
0d20: 2a 20 54 68 65 20 25 70 20 63 6f 6e 76 65 72 73  * The %p convers
0d30: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ion */.#define e
0d40: 74 53 51 4c 45 53 43 41 50 45 33 20 31 35 20 2f  tSQLESCAPE3 15 /
0d50: 2a 20 25 77 20 2d 3e 20 53 74 72 69 6e 67 73 20  * %w -> Strings 
0d60: 77 69 74 68 20 27 5c 22 27 20 64 6f 75 62 6c 65  with '\"' double
0d70: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 4f  d */.#define etO
0d80: 52 44 49 4e 41 4c 20 20 20 20 31 36 20 2f 2a 20  RDINAL    16 /* 
0d90: 25 72 20 2d 3e 20 31 73 74 2c 20 32 6e 64 2c 20  %r -> 1st, 2nd, 
0da0: 33 72 64 2c 20 34 74 68 2c 20 65 74 63 2e 20 20  3rd, 4th, etc.  
0db0: 45 6e 67 6c 69 73 68 20 6f 6e 6c 79 20 2a 2f 0a  English only */.
0dc0: 0a 23 64 65 66 69 6e 65 20 65 74 49 4e 56 41 4c  .#define etINVAL
0dd0: 49 44 20 20 20 20 20 30 20 2f 2a 20 41 6e 79 20  ID     0 /* Any 
0de0: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f 6e  unrecognized con
0df0: 76 65 72 73 69 6f 6e 20 74 79 70 65 20 2a 2f 0a  version type */.
0e00: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 79  ../*.** An "etBy
0e10: 74 65 22 20 69 73 20 61 6e 20 38 2d 62 69 74 20  te" is an 8-bit 
0e20: 75 6e 73 69 67 6e 65 64 20 76 61 6c 75 65 2e 0a  unsigned value..
0e30: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
0e40: 6e 65 64 20 63 68 61 72 20 65 74 42 79 74 65 3b  ned char etByte;
0e50: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 62 75 69  ../*.** Each bui
0e60: 6c 74 69 6e 20 63 6f 6e 76 65 72 73 69 6f 6e 20  ltin conversion 
0e70: 63 68 61 72 61 63 74 65 72 20 28 65 78 3a 20 74  character (ex: t
0e80: 68 65 20 27 64 27 20 69 6e 20 22 25 64 22 29 20  he 'd' in "%d") 
0e90: 69 73 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  is described.** 
0ea0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
0eb0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0ec0: 73 74 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70  structure.*/.typ
0ed0: 65 64 65 66 20 73 74 72 75 63 74 20 65 74 5f 69  edef struct et_i
0ee0: 6e 66 6f 20 7b 20 20 20 2f 2a 20 49 6e 66 6f 72  nfo {   /* Infor
0ef0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
0f00: 68 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 2a  h format field *
0f10: 2f 0a 20 20 63 68 61 72 20 66 6d 74 74 79 70 65  /.  char fmttype
0f20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
0f30: 54 68 65 20 66 6f 72 6d 61 74 20 66 69 65 6c 64  The format field
0f40: 20 63 6f 64 65 20 6c 65 74 74 65 72 20 2a 2f 0a   code letter */.
0f50: 20 20 65 74 42 79 74 65 20 62 61 73 65 3b 20 20    etByte base;  
0f60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0f70: 65 20 62 61 73 65 20 66 6f 72 20 72 61 64 69 78  e base for radix
0f80: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 20   conversion */. 
0f90: 20 65 74 42 79 74 65 20 66 6c 61 67 73 3b 20 20   etByte flags;  
0fa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
0fb0: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 46 4c 41 47   or more of FLAG
0fc0: 5f 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  _ constants belo
0fd0: 77 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 74 79  w */.  etByte ty
0fe0: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
0ff0: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61  /* Conversion pa
1000: 72 61 64 69 67 6d 20 2a 2f 0a 20 20 65 74 42 79  radigm */.  etBy
1010: 74 65 20 63 68 61 72 73 65 74 3b 20 20 20 20 20  te charset;     
1020: 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
1030: 6e 74 6f 20 61 44 69 67 69 74 73 5b 5d 20 6f 66  nto aDigits[] of
1040: 20 74 68 65 20 64 69 67 69 74 73 20 73 74 72 69   the digits stri
1050: 6e 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 70  ng */.  etByte p
1060: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
1070: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
1080: 61 50 72 65 66 69 78 5b 5d 20 6f 66 20 74 68 65  aPrefix[] of the
1090: 20 70 72 65 66 69 78 20 73 74 72 69 6e 67 20 2a   prefix string *
10a0: 2f 0a 7d 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f 2a  /.} et_info;../*
10b0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
10c0: 65 73 20 66 6f 72 20 65 74 5f 69 6e 66 6f 2e 66  es for et_info.f
10d0: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
10e0: 46 4c 41 47 5f 53 49 47 4e 45 44 20 20 31 20 20  FLAG_SIGNED  1  
10f0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1100: 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65  e value to conve
1110: 72 74 20 69 73 20 73 69 67 6e 65 64 20 2a 2f 0a  rt is signed */.
1120: 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 49 4e 54  #define FLAG_INT
1130: 45 52 4e 20 20 32 20 20 20 20 20 2f 2a 20 54 72  ERN  2     /* Tr
1140: 75 65 20 69 66 20 66 6f 72 20 69 6e 74 65 72 6e  ue if for intern
1150: 61 6c 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 23  al use only */.#
1160: 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 54 52 49  define FLAG_STRI
1170: 4e 47 20 20 34 20 20 20 20 20 2f 2a 20 41 6c 6c  NG  4     /* All
1180: 6f 77 20 69 6e 66 69 6e 69 74 79 20 70 72 65 63  ow infinity prec
1190: 69 73 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ision */.../*.**
11a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
11b0: 61 62 6c 65 20 69 73 20 73 65 61 72 63 68 65 64  able is searched
11c0: 20 6c 69 6e 65 61 72 6c 79 2c 20 73 6f 20 69 74   linearly, so it
11d0: 20 69 73 20 67 6f 6f 64 20 74 6f 20 70 75 74 20   is good to put 
11e0: 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 66 72 65 71  the.** most freq
11f0: 75 65 6e 74 6c 79 20 75 73 65 64 20 63 6f 6e 76  uently used conv
1200: 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66 69 72  ersion types fir
1210: 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  st..*/.static co
1220: 6e 73 74 20 63 68 61 72 20 61 44 69 67 69 74 73  nst char aDigits
1230: 5b 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39  [] = "0123456789
1240: 41 42 43 44 45 46 30 31 32 33 34 35 36 37 38 39  ABCDEF0123456789
1250: 61 62 63 64 65 66 22 3b 0a 73 74 61 74 69 63 20  abcdef";.static 
1260: 63 6f 6e 73 74 20 63 68 61 72 20 61 50 72 65 66  const char aPref
1270: 69 78 5b 5d 20 3d 20 22 2d 78 30 5c 30 30 30 58  ix[] = "-x0\000X
1280: 30 22 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  0";.static const
1290: 20 65 74 5f 69 6e 66 6f 20 66 6d 74 69 6e 66 6f   et_info fmtinfo
12a0: 5b 5d 20 3d 20 7b 0a 20 20 7b 20 20 27 64 27 2c  [] = {.  {  'd',
12b0: 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c   10, 1, etRADIX,
12c0: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
12d0: 20 7b 20 20 27 73 27 2c 20 20 30 2c 20 34 2c 20   {  's',  0, 4, 
12e0: 65 74 53 54 52 49 4e 47 2c 20 20 20 20 20 30 2c  etSTRING,     0,
12f0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 67 27 2c    0 },.  {  'g',
1300: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
1310: 43 2c 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20  C,    30, 0 },. 
1320: 20 7b 20 20 27 7a 27 2c 20 20 30 2c 20 34 2c 20   {  'z',  0, 4, 
1330: 65 74 44 59 4e 53 54 52 49 4e 47 2c 20 20 30 2c  etDYNSTRING,  0,
1340: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 71 27 2c    0 },.  {  'q',
1350: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
1360: 41 50 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20  APE,  0,  0 },. 
1370: 20 7b 20 20 27 51 27 2c 20 20 30 2c 20 34 2c 20   {  'Q',  0, 4, 
1380: 65 74 53 51 4c 45 53 43 41 50 45 32 2c 20 30 2c  etSQLESCAPE2, 0,
1390: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 77 27 2c    0 },.  {  'w',
13a0: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
13b0: 41 50 45 33 2c 20 30 2c 20 20 30 20 7d 2c 0a 20  APE3, 0,  0 },. 
13c0: 20 7b 20 20 27 63 27 2c 20 20 30 2c 20 30 2c 20   {  'c',  0, 0, 
13d0: 65 74 43 48 41 52 58 2c 20 20 20 20 20 20 30 2c  etCHARX,      0,
13e0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6f 27 2c    0 },.  {  'o',
13f0: 20 20 38 2c 20 30 2c 20 65 74 52 41 44 49 58 2c    8, 0, etRADIX,
1400: 20 20 20 20 20 20 30 2c 20 20 32 20 7d 2c 0a 20        0,  2 },. 
1410: 20 7b 20 20 27 75 27 2c 20 31 30 2c 20 30 2c 20   {  'u', 10, 0, 
1420: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
1430: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 78 27 2c    0 },.  {  'x',
1440: 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   16, 0, etRADIX,
1450: 20 20 20 20 20 20 31 36 2c 20 31 20 7d 2c 0a 20        16, 1 },. 
1460: 20 7b 20 20 27 58 27 2c 20 31 36 2c 20 30 2c 20   {  'X', 16, 0, 
1470: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
1480: 20 20 34 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53    4 },.#ifndef S
1490: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
14a0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7b 20 20 27  ING_POINT.  {  '
14b0: 66 27 2c 20 20 30 2c 20 31 2c 20 65 74 46 4c 4f  f',  0, 1, etFLO
14c0: 41 54 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d  AT,      0,  0 }
14d0: 2c 0a 20 20 7b 20 20 27 65 27 2c 20 20 30 2c 20  ,.  {  'e',  0, 
14e0: 31 2c 20 65 74 45 58 50 2c 20 20 20 20 20 20 20  1, etEXP,       
14f0: 20 33 30 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27   30, 0 },.  {  '
1500: 45 27 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 50  E',  0, 1, etEXP
1510: 2c 20 20 20 20 20 20 20 20 31 34 2c 20 30 20 7d  ,        14, 0 }
1520: 2c 0a 20 20 7b 20 20 27 47 27 2c 20 20 30 2c 20  ,.  {  'G',  0, 
1530: 31 2c 20 65 74 47 45 4e 45 52 49 43 2c 20 20 20  1, etGENERIC,   
1540: 20 31 34 2c 20 30 20 7d 2c 0a 23 65 6e 64 69 66   14, 0 },.#endif
1550: 0a 20 20 7b 20 20 27 69 27 2c 20 31 30 2c 20 31  .  {  'i', 10, 1
1560: 2c 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20  , etRADIX,      
1570: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6e  0,  0 },.  {  'n
1580: 27 2c 20 20 30 2c 20 30 2c 20 65 74 53 49 5a 45  ',  0, 0, etSIZE
1590: 2c 20 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c  ,       0,  0 },
15a0: 0a 20 20 7b 20 20 27 25 27 2c 20 20 30 2c 20 30  .  {  '%',  0, 0
15b0: 2c 20 65 74 50 45 52 43 45 4e 54 2c 20 20 20 20  , etPERCENT,    
15c0: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 70  0,  0 },.  {  'p
15d0: 27 2c 20 31 36 2c 20 30 2c 20 65 74 50 4f 49 4e  ', 16, 0, etPOIN
15e0: 54 45 52 2c 20 20 20 20 30 2c 20 20 31 20 7d 2c  TER,    0,  1 },
15f0: 0a 0a 2f 2a 20 41 6c 6c 20 74 68 65 20 72 65 73  ../* All the res
1600: 74 20 68 61 76 65 20 74 68 65 20 46 4c 41 47 5f  t have the FLAG_
1610: 49 4e 54 45 52 4e 20 62 69 74 20 73 65 74 20 61  INTERN bit set a
1620: 6e 64 20 61 72 65 20 74 68 75 73 20 66 6f 72 20  nd are thus for 
1630: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 75 73 65 20  internal.** use 
1640: 6f 6e 6c 79 20 2a 2f 0a 20 20 7b 20 20 27 54 27  only */.  {  'T'
1650: 2c 20 20 30 2c 20 32 2c 20 65 74 54 4f 4b 45 4e  ,  0, 2, etTOKEN
1660: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
1670: 20 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 32 2c    {  'S',  0, 2,
1680: 20 65 74 53 52 43 4c 49 53 54 2c 20 20 20 20 30   etSRCLIST,    0
1690: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 72 27  ,  0 },.  {  'r'
16a0: 2c 20 31 30 2c 20 33 2c 20 65 74 4f 52 44 49 4e  , 10, 3, etORDIN
16b0: 41 4c 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  AL,    0,  0 },.
16c0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  };../*.** If SQL
16d0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
16e0: 47 5f 50 4f 49 4e 54 20 69 73 20 64 65 66 69 6e  G_POINT is defin
16f0: 65 64 2c 20 74 68 65 6e 20 6e 6f 6e 65 20 6f 66  ed, then none of
1700: 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f   the floating po
1710: 69 6e 74 0a 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  int.** conversio
1720: 6e 73 20 77 69 6c 6c 20 77 6f 72 6b 2e 0a 2a 2f  ns will work..*/
1730: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1740: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
1750: 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 2a 76 61 6c 22  INT./*.** "*val"
1760: 20 69 73 20 61 20 64 6f 75 62 6c 65 20 73 75 63   is a double suc
1770: 68 20 74 68 61 74 20 30 2e 31 20 3c 3d 20 2a 76  h that 0.1 <= *v
1780: 61 6c 20 3c 20 31 30 2e 30 0a 2a 2a 20 52 65 74  al < 10.0.** Ret
1790: 75 72 6e 20 74 68 65 20 61 73 63 69 69 20 63 6f  urn the ascii co
17a0: 64 65 20 66 6f 72 20 74 68 65 20 6c 65 61 64 69  de for the leadi
17b0: 6e 67 20 64 69 67 69 74 20 6f 66 20 2a 76 61 6c  ng digit of *val
17c0: 2c 20 74 68 65 6e 0a 2a 2a 20 6d 75 6c 74 69 70  , then.** multip
17d0: 6c 79 20 22 2a 76 61 6c 22 20 62 79 20 31 30 2e  ly "*val" by 10.
17e0: 30 20 74 6f 20 72 65 6e 6f 72 6d 61 6c 69 7a 65  0 to renormalize
17f0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 3a  ..**.** Example:
1800: 0a 2a 2a 20 20 20 20 20 69 6e 70 75 74 3a 20 20  .**     input:  
1810: 20 20 20 2a 76 61 6c 20 3d 20 33 2e 31 34 31 35     *val = 3.1415
1820: 39 0a 2a 2a 20 20 20 20 20 6f 75 74 70 75 74 3a  9.**     output:
1830: 20 20 20 20 2a 76 61 6c 20 3d 20 31 2e 34 31 35      *val = 1.415
1840: 39 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65  9    function re
1850: 74 75 72 6e 20 3d 20 27 33 27 0a 2a 2a 0a 2a 2a  turn = '3'.**.**
1860: 20 54 68 65 20 63 6f 75 6e 74 65 72 20 2a 63 6e   The counter *cn
1870: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
1880: 20 65 61 63 68 20 74 69 6d 65 2e 20 20 41 66 74   each time.  Aft
1890: 65 72 20 63 6f 75 6e 74 65 72 20 65 78 63 65 65  er counter excee
18a0: 64 73 0a 2a 2a 20 31 36 20 28 74 68 65 20 6e 75  ds.** 16 (the nu
18b0: 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63  mber of signific
18c0: 61 6e 74 20 64 69 67 69 74 73 20 69 6e 20 61 20  ant digits in a 
18d0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 29 20 27 30  64-bit float) '0
18e0: 27 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 72  ' is.** always r
18f0: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
1900: 69 63 20 63 68 61 72 20 65 74 5f 67 65 74 64 69  ic char et_getdi
1910: 67 69 74 28 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  git(LONGDOUBLE_T
1920: 59 50 45 20 2a 76 61 6c 2c 20 69 6e 74 20 2a 63  YPE *val, int *c
1930: 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69 74  nt){.  int digit
1940: 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ;.  LONGDOUBLE_T
1950: 59 50 45 20 64 3b 0a 20 20 69 66 28 20 28 2a 63  YPE d;.  if( (*c
1960: 6e 74 29 2b 2b 20 3e 3d 20 31 36 20 29 20 72 65  nt)++ >= 16 ) re
1970: 74 75 72 6e 20 27 30 27 3b 0a 20 20 64 69 67 69  turn '0';.  digi
1980: 74 20 3d 20 28 69 6e 74 29 2a 76 61 6c 3b 0a 20  t = (int)*val;. 
1990: 20 64 20 3d 20 64 69 67 69 74 3b 0a 20 20 64 69   d = digit;.  di
19a0: 67 69 74 20 2b 3d 20 27 30 27 3b 0a 20 20 2a 76  git += '0';.  *v
19b0: 61 6c 20 3d 20 28 2a 76 61 6c 20 2d 20 64 29 2a  al = (*val - d)*
19c0: 31 30 2e 30 3b 0a 20 20 72 65 74 75 72 6e 20 28  10.0;.  return (
19d0: 63 68 61 72 29 64 69 67 69 74 3b 0a 7d 0a 23 65  char)digit;.}.#e
19e0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
19f0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1a00: 4e 54 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 70 70  NT */../*.** App
1a10: 65 6e 64 20 4e 20 73 70 61 63 65 20 63 68 61 72  end N space char
1a20: 61 63 74 65 72 73 20 74 6f 20 74 68 65 20 67 69  acters to the gi
1a30: 76 65 6e 20 73 74 72 69 6e 67 20 62 75 66 66 65  ven string buffe
1a40: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  r..*/.static voi
1a50: 64 20 61 70 70 65 6e 64 53 70 61 63 65 28 53 74  d appendSpace(St
1a60: 72 41 63 63 75 6d 20 2a 70 41 63 63 75 6d 2c 20  rAccum *pAccum, 
1a70: 69 6e 74 20 4e 29 7b 0a 20 20 73 74 61 74 69 63  int N){.  static
1a80: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 53 70 61   const char zSpa
1a90: 63 65 73 5b 5d 20 3d 20 22 20 20 20 20 20 20 20  ces[] = "       
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab0: 20 20 20 20 20 20 22 3b 0a 20 20 77 68 69 6c 65        ";.  while
1ac0: 28 20 4e 3e 3d 28 69 6e 74 29 73 69 7a 65 6f 66  ( N>=(int)sizeof
1ad0: 28 7a 53 70 61 63 65 73 29 2d 31 20 29 7b 0a 20  (zSpaces)-1 ){. 
1ae0: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
1af0: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
1b00: 20 7a 53 70 61 63 65 73 2c 20 73 69 7a 65 6f 66   zSpaces, sizeof
1b10: 28 7a 53 70 61 63 65 73 29 2d 31 29 3b 0a 20 20  (zSpaces)-1);.  
1b20: 20 20 4e 20 2d 3d 20 73 69 7a 65 6f 66 28 7a 53    N -= sizeof(zS
1b30: 70 61 63 65 73 29 2d 31 3b 0a 20 20 7d 0a 20 20  paces)-1;.  }.  
1b40: 69 66 28 20 4e 3e 30 20 29 7b 0a 20 20 20 20 73  if( N>0 ){.    s
1b50: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
1b60: 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 7a 53 70  pend(pAccum, zSp
1b70: 61 63 65 73 2c 20 4e 29 3b 0a 20 20 7d 0a 7d 0a  aces, N);.  }.}.
1b80: 0a 2f 2a 0a 2a 2a 20 4f 6e 20 6d 61 63 68 69 6e  ./*.** On machin
1b90: 65 73 20 77 69 74 68 20 61 20 73 6d 61 6c 6c 20  es with a small 
1ba0: 73 74 61 63 6b 20 73 69 7a 65 2c 20 79 6f 75 20  stack size, you 
1bb0: 63 61 6e 20 72 65 64 65 66 69 6e 65 20 74 68 65  can redefine the
1bc0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  .** SQLITE_PRINT
1bd0: 5f 42 55 46 5f 53 49 5a 45 20 74 6f 20 62 65 20  _BUF_SIZE to be 
1be0: 6c 65 73 73 20 74 68 61 6e 20 33 35 30 2e 0a 2a  less than 350..*
1bf0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1c00: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 0a  _PRINT_BUF_SIZE.
1c10: 23 20 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  # if defined(SQL
1c20: 49 54 45 5f 53 4d 41 4c 4c 5f 53 54 41 43 4b 29  ITE_SMALL_STACK)
1c30: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
1c40: 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a  TE_PRINT_BUF_SIZ
1c50: 45 20 35 30 0a 23 20 65 6c 73 65 0a 23 20 20 20  E 50.# else.#   
1c60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
1c70: 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20 33 35 30  INT_BUF_SIZE 350
1c80: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
1c90: 23 64 65 66 69 6e 65 20 65 74 42 55 46 53 49 5a  #define etBUFSIZ
1ca0: 45 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42  E SQLITE_PRINT_B
1cb0: 55 46 5f 53 49 5a 45 20 20 2f 2a 20 53 69 7a 65  UF_SIZE  /* Size
1cc0: 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 62   of the output b
1cd0: 75 66 66 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  uffer */../*.** 
1ce0: 54 68 65 20 72 6f 6f 74 20 70 72 6f 67 72 61 6d  The root program
1cf0: 2e 20 20 41 6c 6c 20 76 61 72 69 61 74 69 6f 6e  .  All variation
1d00: 73 20 63 61 6c 6c 20 74 68 69 73 20 63 6f 72 65  s call this core
1d10: 2e 0a 2a 2a 0a 2a 2a 20 49 4e 50 55 54 53 3a 0a  ..**.** INPUTS:.
1d20: 2a 2a 20 20 20 66 75 6e 63 20 20 20 54 68 69 73  **   func   This
1d30: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1d40: 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 69   a function taki
1d50: 6e 67 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e  ng three argumen
1d60: 74 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ts.**           
1d70: 20 31 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f   1. A pointer to
1d80: 20 61 6e 79 74 68 69 6e 67 2e 20 20 53 61 6d 65   anything.  Same
1d90: 20 61 73 20 74 68 65 20 22 61 72 67 22 20 70 61   as the "arg" pa
1da0: 72 61 6d 65 74 65 72 2e 0a 2a 2a 20 20 20 20 20  rameter..**     
1db0: 20 20 20 20 20 20 20 32 2e 20 41 20 70 6f 69 6e         2. A poin
1dc0: 74 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ter to the list 
1dd0: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 74 6f  of characters to
1de0: 20 62 65 20 6f 75 74 70 75 74 0a 2a 2a 20 20 20   be output.**   
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 28 4e 6f 74              (Not
1e00: 65 2c 20 74 68 69 73 20 6c 69 73 74 20 69 73 20  e, this list is 
1e10: 4e 4f 54 20 6e 75 6c 6c 20 74 65 72 6d 69 6e 61  NOT null termina
1e20: 74 65 64 2e 29 0a 2a 2a 20 20 20 20 20 20 20 20  ted.).**        
1e30: 20 20 20 20 33 2e 20 41 6e 20 69 6e 74 65 67 65      3. An intege
1e40: 72 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  r number of char
1e50: 61 63 74 65 72 73 20 74 6f 20 62 65 20 6f 75 74  acters to be out
1e60: 70 75 74 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  put..**         
1e70: 20 20 20 20 20 20 28 4e 6f 74 65 3a 20 54 68 69        (Note: Thi
1e80: 73 20 6e 75 6d 62 65 72 20 6d 69 67 68 74 20 62  s number might b
1e90: 65 20 7a 65 72 6f 2e 29 0a 2a 2a 0a 2a 2a 20 20  e zero.).**.**  
1ea0: 20 61 72 67 20 20 20 20 54 68 69 73 20 69 73 20   arg    This is 
1eb0: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  the pointer to a
1ec0: 6e 79 74 68 69 6e 67 20 77 68 69 63 68 20 77 69  nything which wi
1ed0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 61 73 20  ll be passed as 
1ee0: 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  the.**          
1ef0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  first argument t
1f00: 6f 20 22 66 75 6e 63 22 2e 20 20 55 73 65 20 69  o "func".  Use i
1f10: 74 20 66 6f 72 20 77 68 61 74 65 76 65 72 20 79  t for whatever y
1f20: 6f 75 20 6c 69 6b 65 2e 0a 2a 2a 0a 2a 2a 20 20  ou like..**.**  
1f30: 20 66 6d 74 20 20 20 20 54 68 69 73 20 69 73 20   fmt    This is 
1f40: 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  the format strin
1f50: 67 2c 20 61 73 20 69 6e 20 74 68 65 20 75 73 75  g, as in the usu
1f60: 61 6c 20 70 72 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  al print..**.** 
1f70: 20 20 61 70 20 20 20 20 20 54 68 69 73 20 69 73    ap     This is
1f80: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1f90: 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
1fa0: 73 2e 20 20 53 61 6d 65 20 61 73 20 69 6e 0a 2a  s.  Same as in.*
1fb0: 2a 20 20 20 20 20 20 20 20 20 20 76 66 70 72 69  *          vfpri
1fc0: 6e 74 2e 0a 2a 2a 0a 2a 2a 20 4f 55 54 50 55 54  nt..**.** OUTPUT
1fd0: 53 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 54  S:.**          T
1fe0: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
1ff0: 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  is the total num
2000: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
2010: 73 20 73 65 6e 74 20 74 6f 0a 2a 2a 20 20 20 20  s sent to.**    
2020: 20 20 20 20 20 20 74 68 65 20 66 75 6e 63 74 69        the functi
2030: 6f 6e 20 22 66 75 6e 63 22 2e 20 20 52 65 74 75  on "func".  Retu
2040: 72 6e 73 20 2d 31 20 6f 6e 20 61 20 65 72 72 6f  rns -1 on a erro
2050: 72 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  r..**.** Note th
2060: 61 74 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  at the order in 
2070: 77 68 69 63 68 20 61 75 74 6f 6d 61 74 69 63 20  which automatic 
2080: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 64 65  variables are de
2090: 63 6c 61 72 65 64 20 62 65 6c 6f 77 0a 2a 2a 20  clared below.** 
20a0: 73 65 65 6d 73 20 74 6f 20 6d 61 6b 65 20 61 20  seems to make a 
20b0: 62 69 67 20 64 69 66 66 65 72 65 6e 63 65 20 69  big difference i
20c0: 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 68 6f  n determining ho
20d0: 77 20 66 61 73 74 20 74 68 69 73 20 62 65 61 73  w fast this beas
20e0: 74 0a 2a 2a 20 77 69 6c 6c 20 72 75 6e 2e 0a 2a  t.** will run..*
20f0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  /.void sqlite3VX
2100: 50 72 69 6e 74 66 28 0a 20 20 53 74 72 41 63 63  Printf(.  StrAcc
2110: 75 6d 20 2a 70 41 63 63 75 6d 2c 20 20 20 20 20  um *pAccum,     
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2130: 41 63 63 75 6d 75 6c 61 74 65 20 72 65 73 75 6c  Accumulate resul
2140: 74 73 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ts here */.  int
2150: 20 75 73 65 45 78 74 65 6e 64 65 64 2c 20 20 20   useExtended,   
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2170: 2f 2a 20 41 6c 6c 6f 77 20 65 78 74 65 6e 64 65  /* Allow extende
2180: 64 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 73 20  d %-conversions 
2190: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
21a0: 2a 66 6d 74 2c 20 20 20 20 20 20 20 20 20 20 20  *fmt,           
21b0: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 6d 61          /* Forma
21c0: 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 76 61  t string */.  va
21d0: 5f 6c 69 73 74 20 61 70 20 20 20 20 20 20 20 20  _list ap        
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 2f 2a 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   /* arguments */
2200: 0a 29 7b 0a 20 20 69 6e 74 20 63 3b 20 20 20 20  .){.  int c;    
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 2f 2a 20 4e 65 78 74 20 63 68 61 72 61 63 74   /* Next charact
2230: 65 72 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 74  er in the format
2240: 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 63 68 61   string */.  cha
2250: 72 20 2a 62 75 66 70 74 3b 20 20 20 20 20 20 20  r *bufpt;       
2260: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
2270: 65 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72  er to the conver
2280: 73 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 20  sion buffer */. 
2290: 20 69 6e 74 20 70 72 65 63 69 73 69 6f 6e 3b 20   int precision; 
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
22b0: 72 65 63 69 73 69 6f 6e 20 6f 66 20 74 68 65 20  recision of the 
22c0: 63 75 72 72 65 6e 74 20 66 69 65 6c 64 20 2a 2f  current field */
22d0: 0a 20 20 69 6e 74 20 6c 65 6e 67 74 68 3b 20 20  .  int length;  
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22f0: 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 66   Length of the f
2300: 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 69 64  ield */.  int id
2310: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
2320: 20 20 20 20 20 2f 2a 20 41 20 67 65 6e 65 72 61       /* A genera
2330: 6c 20 70 75 72 70 6f 73 65 20 6c 6f 6f 70 20 63  l purpose loop c
2340: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
2350: 77 69 64 74 68 3b 20 20 20 20 20 20 20 20 20 20  width;          
2360: 20 20 20 20 20 20 20 2f 2a 20 57 69 64 74 68 20         /* Width 
2370: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  of the current f
2380: 69 65 6c 64 20 2a 2f 0a 20 20 65 74 42 79 74 65  ield */.  etByte
2390: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66   flag_leftjustif
23a0: 79 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  y;   /* True if 
23b0: 22 2d 22 20 66 6c 61 67 20 69 73 20 70 72 65 73  "-" flag is pres
23c0: 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ent */.  etByte 
23d0: 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 3b 20 20  flag_plussign;  
23e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
23f0: 2b 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65  +" flag is prese
2400: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  nt */.  etByte f
2410: 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 3b 20 20  lag_blanksign;  
2420: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 20     /* True if " 
2430: 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e  " flag is presen
2440: 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  t */.  etByte fl
2450: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
2460: 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 22 23 22  ; /* True if "#"
2470: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
2480: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
2490: 67 5f 61 6c 74 66 6f 72 6d 32 3b 20 20 20 20 20  g_altform2;     
24a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 21 22 20   /* True if "!" 
24b0: 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20  flag is present 
24c0: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
24d0: 5f 7a 65 72 6f 70 61 64 3b 20 20 20 20 20 20 20  _zeropad;       
24e0: 2f 2a 20 54 72 75 65 20 69 66 20 66 69 65 6c 64  /* True if field
24f0: 20 77 69 64 74 68 20 63 6f 6e 73 74 61 6e 74 20   width constant 
2500: 73 74 61 72 74 73 20 77 69 74 68 20 7a 65 72 6f  starts with zero
2510: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
2520: 67 5f 6c 6f 6e 67 3b 20 20 20 20 20 20 20 20 20  g_long;         
2530: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 6c 22 20   /* True if "l" 
2540: 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20  flag is present 
2550: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
2560: 5f 6c 6f 6e 67 6c 6f 6e 67 3b 20 20 20 20 20 20  _longlong;      
2570: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 22  /* True if the "
2580: 6c 6c 22 20 66 6c 61 67 20 69 73 20 70 72 65 73  ll" flag is pres
2590: 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  ent */.  etByte 
25a0: 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20 20 20  done;           
25b0: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 74 65 72 6d      /* Loop term
25c0: 69 6e 61 74 69 6f 6e 20 66 6c 61 67 20 2a 2f 0a  ination flag */.
25d0: 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20    sqlite_uint64 
25e0: 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20 2f 2a 20  longvalue;   /* 
25f0: 56 61 6c 75 65 20 66 6f 72 20 69 6e 74 65 67 65  Value for intege
2600: 72 20 74 79 70 65 73 20 2a 2f 0a 20 20 4c 4f 4e  r types */.  LON
2610: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 72 65 61  GDOUBLE_TYPE rea
2620: 6c 76 61 6c 75 65 3b 20 2f 2a 20 56 61 6c 75 65  lvalue; /* Value
2630: 20 66 6f 72 20 72 65 61 6c 20 74 79 70 65 73 20   for real types 
2640: 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74 5f 69 6e  */.  const et_in
2650: 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20 20 20 20  fo *infop;      
2660: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68  /* Pointer to th
2670: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e  e appropriate in
2680: 66 6f 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  fo structure */.
2690: 20 20 63 68 61 72 20 62 75 66 5b 65 74 42 55 46    char buf[etBUF
26a0: 53 49 5a 45 5d 3b 20 20 20 20 20 20 20 2f 2a 20  SIZE];       /* 
26b0: 43 6f 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65  Conversion buffe
26c0: 72 20 2a 2f 0a 20 20 63 68 61 72 20 70 72 65 66  r */.  char pref
26d0: 69 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ix;             
26e0: 20 20 2f 2a 20 50 72 65 66 69 78 20 63 68 61 72    /* Prefix char
26f0: 61 63 74 65 72 2e 20 20 22 2b 22 20 6f 72 20 22  acter.  "+" or "
2700: 2d 22 20 6f 72 20 22 20 22 20 6f 72 20 27 5c 30  -" or " " or '\0
2710: 27 2e 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 78  '. */.  etByte x
2720: 74 79 70 65 20 3d 20 30 3b 20 20 20 20 20 20 20  type = 0;       
2730: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e     /* Conversion
2740: 20 70 61 72 61 64 69 67 6d 20 2a 2f 0a 20 20 63   paradigm */.  c
2750: 68 61 72 20 2a 7a 45 78 74 72 61 3b 20 20 20 20  har *zExtra;    
2760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
2770: 72 61 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 66  ra memory used f
2780: 6f 72 20 65 74 54 43 4c 45 53 43 41 50 45 20 63  or etTCLESCAPE c
2790: 6f 6e 76 65 72 73 69 6f 6e 73 20 2a 2f 0a 23 69  onversions */.#i
27a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27b0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
27c0: 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65 32 3b  .  int  exp, e2;
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27e0: 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72 65 61   exponent of rea
27f0: 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 64  l numbers */.  d
2800: 6f 75 62 6c 65 20 72 6f 75 6e 64 65 72 3b 20 20  ouble rounder;  
2810: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2820: 64 20 66 6f 72 20 72 6f 75 6e 64 69 6e 67 20 66  d for rounding f
2830: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
2840: 6c 75 65 73 20 2a 2f 0a 20 20 65 74 42 79 74 65  lues */.  etByte
2850: 20 66 6c 61 67 5f 64 70 3b 20 20 20 20 20 20 20   flag_dp;       
2860: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
2870: 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 73 68  decimal point sh
2880: 6f 75 6c 64 20 62 65 20 73 68 6f 77 6e 20 2a 2f  ould be shown */
2890: 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 72  .  etByte flag_r
28a0: 74 7a 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tz;           /*
28b0: 20 54 72 75 65 20 69 66 20 74 72 61 69 6c 69 6e   True if trailin
28c0: 67 20 7a 65 72 6f 73 20 73 68 6f 75 6c 64 20 62  g zeros should b
28d0: 65 20 72 65 6d 6f 76 65 64 20 2a 2f 0a 20 20 65  e removed */.  e
28e0: 74 42 79 74 65 20 66 6c 61 67 5f 65 78 70 3b 20  tByte flag_exp; 
28f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
2900: 65 20 74 6f 20 66 6f 72 63 65 20 64 69 73 70 6c  e to force displ
2910: 61 79 20 6f 66 20 74 68 65 20 65 78 70 6f 6e 65  ay of the expone
2920: 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 73 64 3b  nt */.  int nsd;
2930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2940: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2950: 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69  significant digi
2960: 74 73 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 23  ts returned */.#
2970: 65 6e 64 69 66 0a 0a 20 20 6c 65 6e 67 74 68 20  endif..  length 
2980: 3d 20 30 3b 0a 20 20 62 75 66 70 74 20 3d 20 30  = 0;.  bufpt = 0
2990: 3b 0a 20 20 66 6f 72 28 3b 20 28 63 3d 28 2a 66  ;.  for(; (c=(*f
29a0: 6d 74 29 29 21 3d 30 3b 20 2b 2b 66 6d 74 29 7b  mt))!=0; ++fmt){
29b0: 0a 20 20 20 20 69 66 28 20 63 21 3d 27 25 27 20  .    if( c!='%' 
29c0: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 61 6d 74  ){.      int amt
29d0: 3b 0a 20 20 20 20 20 20 62 75 66 70 74 20 3d 20  ;.      bufpt = 
29e0: 28 63 68 61 72 20 2a 29 66 6d 74 3b 0a 20 20 20  (char *)fmt;.   
29f0: 20 20 20 61 6d 74 20 3d 20 31 3b 0a 20 20 20 20     amt = 1;.    
2a00: 20 20 77 68 69 6c 65 28 20 28 63 3d 28 2a 2b 2b    while( (c=(*++
2a10: 66 6d 74 29 29 21 3d 27 25 27 20 26 26 20 63 21  fmt))!='%' && c!
2a20: 3d 30 20 29 20 61 6d 74 2b 2b 3b 0a 20 20 20 20  =0 ) amt++;.    
2a30: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
2a40: 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20  mAppend(pAccum, 
2a50: 62 75 66 70 74 2c 20 61 6d 74 29 3b 0a 20 20 20  bufpt, amt);.   
2a60: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20 62 72     if( c==0 ) br
2a70: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  eak;.    }.    i
2a80: 66 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 3d  f( (c=(*++fmt))=
2a90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2aa0: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
2ab0: 64 28 70 41 63 63 75 6d 2c 20 22 25 22 2c 20 31  d(pAccum, "%", 1
2ac0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
2ad0: 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 69 6e      }.    /* Fin
2ae0: 64 20 6f 75 74 20 77 68 61 74 20 66 6c 61 67 73  d out what flags
2af0: 20 61 72 65 20 70 72 65 73 65 6e 74 20 2a 2f 0a   are present */.
2b00: 20 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73      flag_leftjus
2b10: 74 69 66 79 20 3d 20 66 6c 61 67 5f 70 6c 75 73  tify = flag_plus
2b20: 73 69 67 6e 20 3d 20 66 6c 61 67 5f 62 6c 61 6e  sign = flag_blan
2b30: 6b 73 69 67 6e 20 3d 20 0a 20 20 20 20 20 66 6c  ksign = .     fl
2b40: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
2b50: 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32   = flag_altform2
2b60: 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20   = flag_zeropad 
2b70: 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65 20 3d 20  = 0;.    done = 
2b80: 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  0;.    do{.     
2b90: 20 73 77 69 74 63 68 28 20 63 20 29 7b 0a 20 20   switch( c ){.  
2ba0: 20 20 20 20 20 20 63 61 73 65 20 27 2d 27 3a 20        case '-': 
2bb0: 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69    flag_leftjusti
2bc0: 66 79 20 3d 20 31 3b 20 20 20 20 20 62 72 65 61  fy = 1;     brea
2bd0: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
2be0: 27 2b 27 3a 20 20 20 66 6c 61 67 5f 70 6c 75 73  '+':   flag_plus
2bf0: 73 69 67 6e 20 3d 20 31 3b 20 20 20 20 20 20 20  sign = 1;       
2c00: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2c10: 63 61 73 65 20 27 20 27 3a 20 20 20 66 6c 61 67  case ' ':   flag
2c20: 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 31 3b 20  _blanksign = 1; 
2c30: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2c40: 20 20 20 20 20 63 61 73 65 20 27 23 27 3a 20 20       case '#':  
2c50: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
2c60: 6f 72 6d 20 3d 20 31 3b 20 20 20 62 72 65 61 6b  orm = 1;   break
2c70: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  ;.        case '
2c80: 21 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f  !':   flag_altfo
2c90: 72 6d 32 20 3d 20 31 3b 20 20 20 20 20 20 20 20  rm2 = 1;        
2ca0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2cb0: 61 73 65 20 27 30 27 3a 20 20 20 66 6c 61 67 5f  ase '0':   flag_
2cc0: 7a 65 72 6f 70 61 64 20 3d 20 31 3b 20 20 20 20  zeropad = 1;    
2cd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2ce0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
2cf0: 64 6f 6e 65 20 3d 20 31 3b 20 20 20 20 20 20 20  done = 1;       
2d00: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2d10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68  .      }.    }wh
2d20: 69 6c 65 28 20 21 64 6f 6e 65 20 26 26 20 28 63  ile( !done && (c
2d30: 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 30 20 29 3b  =(*++fmt))!=0 );
2d40: 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65 20  .    /* Get the 
2d50: 66 69 65 6c 64 20 77 69 64 74 68 20 2a 2f 0a 20  field width */. 
2d60: 20 20 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20     width = 0;.  
2d70: 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a    if( c=='*' ){.
2d80: 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 76 61        width = va
2d90: 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20  _arg(ap,int);.  
2da0: 20 20 20 20 69 66 28 20 77 69 64 74 68 3c 30 20      if( width<0 
2db0: 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  ){.        flag_
2dc0: 6c 65 66 74 6a 75 73 74 69 66 79 20 3d 20 31 3b  leftjustify = 1;
2dd0: 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d  .        width =
2de0: 20 2d 77 69 64 74 68 3b 0a 20 20 20 20 20 20 7d   -width;.      }
2df0: 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d  .      c = *++fm
2e00: 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  t;.    }else{.  
2e10: 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30      while( c>='0
2e20: 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20  ' && c<='9' ){. 
2e30: 20 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 77         width = w
2e40: 69 64 74 68 2a 31 30 20 2b 20 63 20 2d 20 27 30  idth*10 + c - '0
2e50: 27 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a  ';.        c = *
2e60: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 0a 20  ++fmt;.      }. 
2e70: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 77 69 64     }.    if( wid
2e80: 74 68 20 3e 20 65 74 42 55 46 53 49 5a 45 2d 31  th > etBUFSIZE-1
2e90: 30 20 29 7b 0a 20 20 20 20 20 20 77 69 64 74 68  0 ){.      width
2ea0: 20 3d 20 65 74 42 55 46 53 49 5a 45 2d 31 30 3b   = etBUFSIZE-10;
2eb0: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65  .    }.    /* Ge
2ec0: 74 20 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20  t the precision 
2ed0: 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2e  */.    if( c=='.
2ee0: 27 20 29 7b 0a 20 20 20 20 20 20 70 72 65 63 69  ' ){.      preci
2ef0: 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  sion = 0;.      
2f00: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20  c = *++fmt;.    
2f10: 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a    if( c=='*' ){.
2f20: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
2f30: 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  n = va_arg(ap,in
2f40: 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
2f50: 70 72 65 63 69 73 69 6f 6e 3c 30 20 29 20 70 72  precision<0 ) pr
2f60: 65 63 69 73 69 6f 6e 20 3d 20 2d 70 72 65 63 69  ecision = -preci
2f70: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 63 20  sion;.        c 
2f80: 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20  = *++fmt;.      
2f90: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 77  }else{.        w
2fa0: 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26 26 20  hile( c>='0' && 
2fb0: 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20 20 20  c<='9' ){.      
2fc0: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
2fd0: 70 72 65 63 69 73 69 6f 6e 2a 31 30 20 2b 20 63  precision*10 + c
2fe0: 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   - '0';.        
2ff0: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
3000: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
3010: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3020: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 31 3b   precision = -1;
3030: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65  .    }.    /* Ge
3040: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
3050: 20 74 79 70 65 20 6d 6f 64 69 66 69 65 72 20 2a   type modifier *
3060: 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 6c 27  /.    if( c=='l'
3070: 20 29 7b 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c   ){.      flag_l
3080: 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 63  ong = 1;.      c
3090: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
30a0: 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20   if( c=='l' ){. 
30b0: 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67         flag_long
30c0: 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  long = 1;.      
30d0: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
30e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
30f0: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67     flag_longlong
3100: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
3110: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66    }else{.      f
3120: 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c 61 67 5f  lag_long = flag_
3130: 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20 20  longlong = 0;.  
3140: 20 20 7d 0a 20 20 20 20 2f 2a 20 46 65 74 63 68    }.    /* Fetch
3150: 20 74 68 65 20 69 6e 66 6f 20 65 6e 74 72 79 20   the info entry 
3160: 66 6f 72 20 74 68 65 20 66 69 65 6c 64 20 2a 2f  for the field */
3170: 0a 20 20 20 20 69 6e 66 6f 70 20 3d 20 26 66 6d  .    infop = &fm
3180: 74 69 6e 66 6f 5b 30 5d 3b 0a 20 20 20 20 78 74  tinfo[0];.    xt
3190: 79 70 65 20 3d 20 65 74 49 4e 56 41 4c 49 44 3b  ype = etINVALID;
31a0: 0a 20 20 20 20 66 6f 72 28 69 64 78 3d 30 3b 20  .    for(idx=0; 
31b0: 69 64 78 3c 41 72 72 61 79 53 69 7a 65 28 66 6d  idx<ArraySize(fm
31c0: 74 69 6e 66 6f 29 3b 20 69 64 78 2b 2b 29 7b 0a  tinfo); idx++){.
31d0: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 66 6d 74        if( c==fmt
31e0: 69 6e 66 6f 5b 69 64 78 5d 2e 66 6d 74 74 79 70  info[idx].fmttyp
31f0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 66  e ){.        inf
3200: 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f 5b 69 64  op = &fmtinfo[id
3210: 78 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  x];.        if( 
3220: 75 73 65 45 78 74 65 6e 64 65 64 20 7c 7c 20 28  useExtended || (
3230: 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46  infop->flags & F
3240: 4c 41 47 5f 49 4e 54 45 52 4e 29 3d 3d 30 20 29  LAG_INTERN)==0 )
3250: 7b 0a 20 20 20 20 20 20 20 20 20 20 78 74 79 70  {.          xtyp
3260: 65 20 3d 20 69 6e 66 6f 70 2d 3e 74 79 70 65 3b  e = infop->type;
3270: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
3280: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3290: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
32a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
32b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 78   }.    }.    zEx
32c0: 74 72 61 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 2f  tra = 0;...    /
32d0: 2a 20 4c 69 6d 69 74 20 74 68 65 20 70 72 65 63  * Limit the prec
32e0: 69 73 69 6f 6e 20 74 6f 20 70 72 65 76 65 6e 74  ision to prevent
32f0: 20 6f 76 65 72 66 6c 6f 77 69 6e 67 20 62 75 66   overflowing buf
3300: 5b 5d 20 64 75 72 69 6e 67 20 63 6f 6e 76 65 72  [] during conver
3310: 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  sion */.    if( 
3320: 70 72 65 63 69 73 69 6f 6e 3e 65 74 42 55 46 53  precision>etBUFS
3330: 49 5a 45 2d 34 30 20 26 26 20 28 69 6e 66 6f 70  IZE-40 && (infop
3340: 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53  ->flags & FLAG_S
3350: 54 52 49 4e 47 29 3d 3d 30 20 29 7b 0a 20 20 20  TRING)==0 ){.   
3360: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 65     precision = e
3370: 74 42 55 46 53 49 5a 45 2d 34 30 3b 0a 20 20 20  tBUFSIZE-40;.   
3380: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a   }..    /*.    *
3390: 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c  * At this point,
33a0: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 69   variables are i
33b0: 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 66 6f  nitialized as fo
33c0: 6c 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20  llows:.    **.  
33d0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c 74 65    **   flag_alte
33e0: 72 6e 61 74 65 66 6f 72 6d 20 20 20 20 20 20 20  rnateform       
33f0: 20 20 20 54 52 55 45 20 69 66 20 61 20 27 23 27     TRUE if a '#'
3400: 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20   is present..   
3410: 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f   **   flag_altfo
3420: 72 6d 32 20 20 20 20 20 20 20 20 20 20 20 20 20  rm2             
3430: 20 20 54 52 55 45 20 69 66 20 61 20 27 21 27 20    TRUE if a '!' 
3440: 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20  is present..    
3450: 2a 2a 20 20 20 66 6c 61 67 5f 70 6c 75 73 73 69  **   flag_plussi
3460: 67 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  gn              
3470: 20 54 52 55 45 20 69 66 20 61 20 27 2b 27 20 69   TRUE if a '+' i
3480: 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a  s present..    *
3490: 2a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73  *   flag_leftjus
34a0: 74 69 66 79 20 20 20 20 20 20 20 20 20 20 20 20  tify            
34b0: 54 52 55 45 20 69 66 20 61 20 27 2d 27 20 69 73  TRUE if a '-' is
34c0: 20 70 72 65 73 65 6e 74 20 6f 72 20 69 66 20 74   present or if t
34d0: 68 65 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  he.    **       
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f0: 20 20 20 20 20 20 20 20 66 69 65 6c 64 20 77 69          field wi
3500: 64 74 68 20 77 61 73 20 6e 65 67 61 74 69 76 65  dth was negative
3510: 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f  ..    **   flag_
3520: 7a 65 72 6f 70 61 64 20 20 20 20 20 20 20 20 20  zeropad         
3530: 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20 74         TRUE if t
3540: 68 65 20 77 69 64 74 68 20 62 65 67 61 6e 20 77  he width began w
3550: 69 74 68 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20  ith 0..    **   
3560: 66 6c 61 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20  flag_long       
3570: 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55 45              TRUE
3580: 20 69 66 20 74 68 65 20 6c 65 74 74 65 72 20 27   if the letter '
3590: 6c 27 20 28 65 6c 6c 29 20 70 72 65 66 69 78 65  l' (ell) prefixe
35a0: 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20  d.    **        
35b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c0: 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 76 65         the conve
35d0: 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72 2e  rsion character.
35e0: 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c  .    **   flag_l
35f0: 6f 6e 67 6c 6f 6e 67 20 20 20 20 20 20 20 20 20  onglong         
3600: 20 20 20 20 20 20 54 52 55 45 20 69 66 20 74 68        TRUE if th
3610: 65 20 6c 65 74 74 65 72 20 27 6c 6c 27 20 28 65  e letter 'll' (e
3620: 6c 6c 20 65 6c 6c 29 20 70 72 65 66 69 78 65 64  ll ell) prefixed
3630: 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20  .    **         
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3650: 20 20 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72        the conver
3660: 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a  sion character..
3670: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 62 6c      **   flag_bl
3680: 61 6e 6b 73 69 67 6e 20 20 20 20 20 20 20 20 20  anksign         
3690: 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27       TRUE if a '
36a0: 20 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20   ' is present.. 
36b0: 20 20 20 2a 2a 20 20 20 77 69 64 74 68 20 20 20     **   width   
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d0: 20 20 20 20 54 68 65 20 73 70 65 63 69 66 69 65      The specifie
36e0: 64 20 66 69 65 6c 64 20 77 69 64 74 68 2e 20 20  d field width.  
36f0: 54 68 69 73 20 69 73 0a 20 20 20 20 2a 2a 20 20  This is.    **  
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 77               alw
3720: 61 79 73 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  ays non-negative
3730: 2e 20 20 5a 65 72 6f 20 69 73 20 74 68 65 20 64  .  Zero is the d
3740: 65 66 61 75 6c 74 2e 0a 20 20 20 20 2a 2a 20 20  efault..    **  
3750: 20 70 72 65 63 69 73 69 6f 6e 20 20 20 20 20 20   precision      
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65               The
3770: 20 73 70 65 63 69 66 69 65 64 20 70 72 65 63 69   specified preci
3780: 73 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75  sion.  The defau
3790: 6c 74 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  lt.    **       
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b0: 20 20 20 20 20 20 20 20 69 73 20 2d 31 2e 0a 20          is -1.. 
37c0: 20 20 20 2a 2a 20 20 20 78 74 79 70 65 20 20 20     **   xtype   
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e0: 20 20 20 20 54 68 65 20 63 6c 61 73 73 20 6f 66      The class of
37f0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e   the conversion.
3800: 0a 20 20 20 20 2a 2a 20 20 20 69 6e 66 6f 70 20  .    **   infop 
3810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3820: 20 20 20 20 20 20 50 6f 69 6e 74 65 72 20 74 6f        Pointer to
3830: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
3840: 20 69 6e 66 6f 20 73 74 72 75 63 74 2e 0a 20 20   info struct..  
3850: 20 20 2a 2f 0a 20 20 20 20 73 77 69 74 63 68 28    */.    switch(
3860: 20 78 74 79 70 65 20 29 7b 0a 20 20 20 20 20 20   xtype ){.      
3870: 63 61 73 65 20 65 74 50 4f 49 4e 54 45 52 3a 0a  case etPOINTER:.
3880: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e          flag_lon
3890: 67 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63  glong = sizeof(c
38a0: 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36  har*)==sizeof(i6
38b0: 34 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67  4);.        flag
38c0: 5f 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63  _long = sizeof(c
38d0: 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28 6c 6f  har*)==sizeof(lo
38e0: 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ng int);.       
38f0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
3900: 20 69 6e 74 6f 20 74 68 65 20 6e 65 78 74 20 63   into the next c
3910: 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 63 61 73  ase */.      cas
3920: 65 20 65 74 4f 52 44 49 4e 41 4c 3a 0a 20 20 20  e etORDINAL:.   
3930: 20 20 20 63 61 73 65 20 65 74 52 41 44 49 58 3a     case etRADIX:
3940: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 6e 66  .        if( inf
3950: 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47  op->flags & FLAG
3960: 5f 53 49 47 4e 45 44 20 29 7b 0a 20 20 20 20 20  _SIGNED ){.     
3970: 20 20 20 20 20 69 36 34 20 76 3b 0a 20 20 20 20       i64 v;.    
3980: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 6c        if( flag_l
3990: 6f 6e 67 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20  onglong ){.     
39a0: 20 20 20 20 20 20 20 76 20 3d 20 76 61 5f 61 72         v = va_ar
39b0: 67 28 61 70 2c 69 36 34 29 3b 0a 20 20 20 20 20  g(ap,i64);.     
39c0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66       }else if( f
39d0: 6c 61 67 5f 6c 6f 6e 67 20 29 7b 0a 20 20 20 20  lag_long ){.    
39e0: 20 20 20 20 20 20 20 20 76 20 3d 20 76 61 5f 61          v = va_a
39f0: 72 67 28 61 70 2c 6c 6f 6e 67 20 69 6e 74 29 3b  rg(ap,long int);
3a00: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
3a10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 20  {.            v 
3a20: 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29  = va_arg(ap,int)
3a30: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
3a40: 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 30 20          if( v<0 
3a50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  ){.            l
3a60: 6f 6e 67 76 61 6c 75 65 20 3d 20 2d 76 3b 20 20  ongvalue = -v;  
3a70: 2f 2a 20 43 4c 41 4e 47 20 2a 2f 0a 20 20 20 20  /* CLANG */.    
3a80: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
3a90: 20 27 2d 27 3b 0a 20 20 20 20 20 20 20 20 20 20   '-';.          
3aa0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
3ab0: 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76     longvalue = v
3ac0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
3ad0: 28 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20  ( flag_plussign 
3ae0: 29 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20  )        prefix 
3af0: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
3b00: 20 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67     else if( flag
3b10: 5f 62 6c 61 6e 6b 73 69 67 6e 20 29 20 20 70 72  _blanksign )  pr
3b20: 65 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20  efix = ' ';.    
3b30: 20 20 20 20 20 20 20 20 65 6c 73 65 20 20 20 20          else    
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b50: 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20     prefix = 0;. 
3b60: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
3b70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b80: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e      if( flag_lon
3b90: 67 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20 20  glong ){.       
3ba0: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
3bb0: 20 76 61 5f 61 72 67 28 61 70 2c 75 36 34 29 3b   va_arg(ap,u64);
3bc0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
3bd0: 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29   if( flag_long )
3be0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  {.            lo
3bf0: 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67  ngvalue = va_arg
3c00: 28 61 70 2c 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  (ap,unsigned lon
3c10: 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  g int);.        
3c20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3c30: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
3c40: 20 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67   va_arg(ap,unsig
3c50: 6e 65 64 20 69 6e 74 29 3b 0a 20 20 20 20 20 20  ned int);.      
3c60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
3c70: 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20  prefix = 0;.    
3c80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
3c90: 28 20 6c 6f 6e 67 76 61 6c 75 65 3d 3d 30 20 29  ( longvalue==0 )
3ca0: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
3cb0: 6f 72 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  orm = 0;.       
3cc0: 20 69 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61   if( flag_zeropa
3cd0: 64 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 77  d && precision<w
3ce0: 69 64 74 68 2d 28 70 72 65 66 69 78 21 3d 30 29  idth-(prefix!=0)
3cf0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72   ){.          pr
3d00: 65 63 69 73 69 6f 6e 20 3d 20 77 69 64 74 68 2d  ecision = width-
3d10: 28 70 72 65 66 69 78 21 3d 30 29 3b 0a 20 20 20  (prefix!=0);.   
3d20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
3d30: 75 66 70 74 20 3d 20 26 62 75 66 5b 65 74 42 55  ufpt = &buf[etBU
3d40: 46 53 49 5a 45 2d 31 5d 3b 0a 20 20 20 20 20 20  FSIZE-1];.      
3d50: 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 4f    if( xtype==etO
3d60: 52 44 49 4e 41 4c 20 29 7b 0a 20 20 20 20 20 20  RDINAL ){.      
3d70: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
3d80: 20 63 68 61 72 20 7a 4f 72 64 5b 5d 20 3d 20 22   char zOrd[] = "
3d90: 74 68 73 74 6e 64 72 64 22 3b 0a 20 20 20 20 20  thstndrd";.     
3da0: 20 20 20 20 20 69 6e 74 20 78 20 3d 20 28 69 6e       int x = (in
3db0: 74 29 28 6c 6f 6e 67 76 61 6c 75 65 20 25 20 31  t)(longvalue % 1
3dc0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  0);.          if
3dd0: 28 20 78 3e 3d 34 20 7c 7c 20 28 6c 6f 6e 67 76  ( x>=4 || (longv
3de0: 61 6c 75 65 2f 31 30 29 25 31 30 3d 3d 31 20 29  alue/10)%10==1 )
3df0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 20  {.            x 
3e00: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 0;.          }
3e10: 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 5b 65  .          buf[e
3e20: 74 42 55 46 53 49 5a 45 2d 33 5d 20 3d 20 7a 4f  tBUFSIZE-3] = zO
3e30: 72 64 5b 78 2a 32 5d 3b 0a 20 20 20 20 20 20 20  rd[x*2];.       
3e40: 20 20 20 62 75 66 5b 65 74 42 55 46 53 49 5a 45     buf[etBUFSIZE
3e50: 2d 32 5d 20 3d 20 7a 4f 72 64 5b 78 2a 32 2b 31  -2] = zOrd[x*2+1
3e60: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  ];.          buf
3e70: 70 74 20 2d 3d 20 32 3b 0a 20 20 20 20 20 20 20  pt -= 2;.       
3e80: 20 7d 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20   }.        {.   
3e90: 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20         register 
3ea0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 73 65 74  const char *cset
3eb0: 3b 20 20 20 20 20 20 2f 2a 20 55 73 65 20 72 65  ;      /* Use re
3ec0: 67 69 73 74 65 72 73 20 66 6f 72 20 73 70 65 65  gisters for spee
3ed0: 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72  d */.          r
3ee0: 65 67 69 73 74 65 72 20 69 6e 74 20 62 61 73 65  egister int base
3ef0: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 73 65 74  ;.          cset
3f00: 20 3d 20 26 61 44 69 67 69 74 73 5b 69 6e 66 6f   = &aDigits[info
3f10: 70 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20 20 20  p->charset];.   
3f20: 20 20 20 20 20 20 20 62 61 73 65 20 3d 20 69 6e         base = in
3f30: 66 6f 70 2d 3e 62 61 73 65 3b 0a 20 20 20 20 20  fop->base;.     
3f40: 20 20 20 20 20 64 6f 7b 20 20 20 20 20 20 20 20       do{        
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f70: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 74 6f     /* Convert to
3f80: 20 61 73 63 69 69 20 2a 2f 0a 20 20 20 20 20 20   ascii */.      
3f90: 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29        *(--bufpt)
3fa0: 20 3d 20 63 73 65 74 5b 6c 6f 6e 67 76 61 6c 75   = cset[longvalu
3fb0: 65 25 62 61 73 65 5d 3b 0a 20 20 20 20 20 20 20  e%base];.       
3fc0: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
3fd0: 20 6c 6f 6e 67 76 61 6c 75 65 2f 62 61 73 65 3b   longvalue/base;
3fe0: 0a 20 20 20 20 20 20 20 20 20 20 7d 77 68 69 6c  .          }whil
3ff0: 65 28 20 6c 6f 6e 67 76 61 6c 75 65 3e 30 20 29  e( longvalue>0 )
4000: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4010: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e      length = (in
4020: 74 29 28 26 62 75 66 5b 65 74 42 55 46 53 49 5a  t)(&buf[etBUFSIZ
4030: 45 2d 31 5d 2d 62 75 66 70 74 29 3b 0a 20 20 20  E-1]-bufpt);.   
4040: 20 20 20 20 20 66 6f 72 28 69 64 78 3d 70 72 65       for(idx=pre
4050: 63 69 73 69 6f 6e 2d 6c 65 6e 67 74 68 3b 20 69  cision-length; i
4060: 64 78 3e 30 3b 20 69 64 78 2d 2d 29 7b 0a 20 20  dx>0; idx--){.  
4070: 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70          *(--bufp
4080: 74 29 20 3d 20 27 30 27 3b 20 20 20 20 20 20 20  t) = '0';       
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40a0: 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 70 61        /* Zero pa
40b0: 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  d */.        }. 
40c0: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 66 69         if( prefi
40d0: 78 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d  x ) *(--bufpt) =
40e0: 20 70 72 65 66 69 78 3b 20 20 20 20 20 20 20 20   prefix;        
40f0: 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 73 69         /* Add si
4100: 67 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  gn */.        if
4110: 28 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65  ( flag_alternate
4120: 66 6f 72 6d 20 26 26 20 69 6e 66 6f 70 2d 3e 70  form && infop->p
4130: 72 65 66 69 78 20 29 7b 20 20 20 20 20 20 2f 2a  refix ){      /*
4140: 20 41 64 64 20 22 30 22 20 6f 72 20 22 30 78 22   Add "0" or "0x"
4150: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 63 6f   */.          co
4160: 6e 73 74 20 63 68 61 72 20 2a 70 72 65 3b 0a 20  nst char *pre;. 
4170: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 78 3b           char x;
4180: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 20 3d  .          pre =
4190: 20 26 61 50 72 65 66 69 78 5b 69 6e 66 6f 70 2d   &aPrefix[infop-
41a0: 3e 70 72 65 66 69 78 5d 3b 0a 20 20 20 20 20 20  >prefix];.      
41b0: 20 20 20 20 66 6f 72 28 3b 20 28 78 3d 28 2a 70      for(; (x=(*p
41c0: 72 65 29 29 21 3d 30 3b 20 70 72 65 2b 2b 29 20  re))!=0; pre++) 
41d0: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 78 3b 0a  *(--bufpt) = x;.
41e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
41f0: 20 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29    length = (int)
4200: 28 26 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d  (&buf[etBUFSIZE-
4210: 31 5d 2d 62 75 66 70 74 29 3b 0a 20 20 20 20 20  1]-bufpt);.     
4220: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
4230: 63 61 73 65 20 65 74 46 4c 4f 41 54 3a 0a 20 20  case etFLOAT:.  
4240: 20 20 20 20 63 61 73 65 20 65 74 45 58 50 3a 0a      case etEXP:.
4250: 20 20 20 20 20 20 63 61 73 65 20 65 74 47 45 4e        case etGEN
4260: 45 52 49 43 3a 0a 20 20 20 20 20 20 20 20 72 65  ERIC:.        re
4270: 61 6c 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67  alvalue = va_arg
4280: 28 61 70 2c 64 6f 75 62 6c 65 29 3b 0a 23 69 66  (ap,double);.#if
4290: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
42a0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
42b0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
42c0: 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 20  0;.#else.       
42d0: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30   if( precision<0
42e0: 20 29 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 36   ) precision = 6
42f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 74  ;         /* Set
4300: 20 64 65 66 61 75 6c 74 20 70 72 65 63 69 73 69   default precisi
4310: 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  on */.        if
4320: 28 20 70 72 65 63 69 73 69 6f 6e 3e 65 74 42 55  ( precision>etBU
4330: 46 53 49 5a 45 2f 32 2d 31 30 20 29 20 70 72 65  FSIZE/2-10 ) pre
4340: 63 69 73 69 6f 6e 20 3d 20 65 74 42 55 46 53 49  cision = etBUFSI
4350: 5a 45 2f 32 2d 31 30 3b 0a 20 20 20 20 20 20 20  ZE/2-10;.       
4360: 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65 3c 30   if( realvalue<0
4370: 2e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  .0 ){.          
4380: 72 65 61 6c 76 61 6c 75 65 20 3d 20 2d 72 65 61  realvalue = -rea
4390: 6c 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20  lvalue;.        
43a0: 20 20 70 72 65 66 69 78 20 3d 20 27 2d 27 3b 0a    prefix = '-';.
43b0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
43c0: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
43d0: 67 5f 70 6c 75 73 73 69 67 6e 20 29 20 20 20 20  g_plussign )    
43e0: 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 27        prefix = '
43f0: 2b 27 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c  +';.          el
4400: 73 65 20 69 66 28 20 66 6c 61 67 5f 62 6c 61 6e  se if( flag_blan
4410: 6b 73 69 67 6e 20 29 20 20 20 20 70 72 65 66 69  ksign )    prefi
4420: 78 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20  x = ' ';.       
4430: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20     else         
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20  prefix = 0;.    
4460: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
4470: 28 20 78 74 79 70 65 3d 3d 65 74 47 45 4e 45 52  ( xtype==etGENER
4480: 49 43 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3e  IC && precision>
4490: 30 20 29 20 70 72 65 63 69 73 69 6f 6e 2d 2d 3b  0 ) precision--;
44a0: 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 2f  .#if 0.        /
44b0: 2a 20 52 6f 75 6e 64 69 6e 67 20 77 6f 72 6b 73  * Rounding works
44c0: 20 6c 69 6b 65 20 42 53 44 20 77 68 65 6e 20 74   like BSD when t
44d0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 30 2e 34 39  he constant 0.49
44e0: 39 39 20 69 73 20 75 73 65 64 2e 20 20 57 69 65  99 is used.  Wie
44f0: 72 64 21 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  rd! */.        f
4500: 6f 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e  or(idx=precision
4510: 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 34 39 39 39  , rounder=0.4999
4520: 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c 20  ; idx>0; idx--, 
4530: 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29 3b 0a 23  rounder*=0.1);.#
4540: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 2f 2a 20  else.        /* 
4550: 49 74 20 6d 61 6b 65 73 20 6d 6f 72 65 20 73 65  It makes more se
4560: 6e 73 65 20 74 6f 20 75 73 65 20 30 2e 35 20 2a  nse to use 0.5 *
4570: 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 64  /.        for(id
4580: 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20 72 6f 75  x=precision, rou
4590: 6e 64 65 72 3d 30 2e 35 3b 20 69 64 78 3e 30 3b  nder=0.5; idx>0;
45a0: 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 65 72 2a   idx--, rounder*
45b0: 3d 30 2e 31 29 7b 7d 0a 23 65 6e 64 69 66 0a 20  =0.1){}.#endif. 
45c0: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
45d0: 3d 3d 65 74 46 4c 4f 41 54 20 29 20 72 65 61 6c  ==etFLOAT ) real
45e0: 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65 72  value += rounder
45f0: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 72  ;.        /* Nor
4600: 6d 61 6c 69 7a 65 20 72 65 61 6c 76 61 6c 75 65  malize realvalue
4610: 20 74 6f 20 77 69 74 68 69 6e 20 31 30 2e 30 20   to within 10.0 
4620: 3e 20 72 65 61 6c 76 61 6c 75 65 20 3e 3d 20 31  > realvalue >= 1
4630: 2e 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 78  .0 */.        ex
4640: 70 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  p = 0;.        i
4650: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
4660: 28 64 6f 75 62 6c 65 29 72 65 61 6c 76 61 6c 75  (double)realvalu
4670: 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  e) ){.          
4680: 62 75 66 70 74 20 3d 20 22 4e 61 4e 22 3b 0a 20  bufpt = "NaN";. 
4690: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20           length 
46a0: 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 20 20 62  = 3;.          b
46b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
46c0: 20 20 20 20 20 20 20 20 69 66 28 20 72 65 61 6c          if( real
46d0: 76 61 6c 75 65 3e 30 2e 30 20 29 7b 0a 20 20 20  value>0.0 ){.   
46e0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65         while( re
46f0: 61 6c 76 61 6c 75 65 3e 3d 31 65 33 32 20 26 26  alvalue>=1e32 &&
4700: 20 65 78 70 3c 3d 33 35 30 20 29 7b 20 72 65 61   exp<=350 ){ rea
4710: 6c 76 61 6c 75 65 20 2a 3d 20 31 65 2d 33 32 3b  lvalue *= 1e-32;
4720: 20 65 78 70 2b 3d 33 32 3b 20 7d 0a 20 20 20 20   exp+=32; }.    
4730: 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61        while( rea
4740: 6c 76 61 6c 75 65 3e 3d 31 65 38 20 26 26 20 65  lvalue>=1e8 && e
4750: 78 70 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c 76  xp<=350 ){ realv
4760: 61 6c 75 65 20 2a 3d 20 31 65 2d 38 3b 20 65 78  alue *= 1e-8; ex
4770: 70 2b 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20  p+=8; }.        
4780: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
4790: 75 65 3e 3d 31 30 2e 30 20 26 26 20 65 78 70 3c  ue>=10.0 && exp<
47a0: 3d 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75  =350 ){ realvalu
47b0: 65 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b 3b  e *= 0.1; exp++;
47c0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69   }.          whi
47d0: 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31 65  le( realvalue<1e
47e0: 2d 38 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20  -8 ){ realvalue 
47f0: 2a 3d 20 31 65 38 3b 20 65 78 70 2d 3d 38 3b 20  *= 1e8; exp-=8; 
4800: 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  }.          whil
4810: 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31 2e 30  e( realvalue<1.0
4820: 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d   ){ realvalue *=
4830: 20 31 30 2e 30 3b 20 65 78 70 2d 2d 3b 20 7d 0a   10.0; exp--; }.
4840: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 65 78            if( ex
4850: 70 3e 33 35 30 20 29 7b 0a 20 20 20 20 20 20 20  p>350 ){.       
4860: 20 20 20 20 20 69 66 28 20 70 72 65 66 69 78 3d       if( prefix=
4870: 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='-' ){.        
4880: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 2d        bufpt = "-
4890: 49 6e 66 22 3b 0a 20 20 20 20 20 20 20 20 20 20  Inf";.          
48a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 72 65 66    }else if( pref
48b0: 69 78 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 20  ix=='+' ){.     
48c0: 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d           bufpt =
48d0: 20 22 2b 49 6e 66 22 3b 0a 20 20 20 20 20 20 20   "+Inf";.       
48e0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
48f0: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
4900: 3d 20 22 49 6e 66 22 3b 0a 20 20 20 20 20 20 20  = "Inf";.       
4910: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
4920: 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 71 6c 69     length = sqli
4930: 74 65 33 53 74 72 6c 65 6e 33 30 28 62 75 66 70  te3Strlen30(bufp
4940: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
4950: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
4960: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
4970: 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66       bufpt = buf
4980: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20  ;.        /*.   
4990: 20 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 66       ** If the f
49a0: 69 65 6c 64 20 74 79 70 65 20 69 73 20 65 74 47  ield type is etG
49b0: 45 4e 45 52 49 43 2c 20 74 68 65 6e 20 63 6f 6e  ENERIC, then con
49c0: 76 65 72 74 20 74 6f 20 65 69 74 68 65 72 20 65  vert to either e
49d0: 74 45 58 50 0a 20 20 20 20 20 20 20 20 2a 2a 20  tEXP.        ** 
49e0: 6f 72 20 65 74 46 4c 4f 41 54 2c 20 61 73 20 61  or etFLOAT, as a
49f0: 70 70 72 6f 70 72 69 61 74 65 2e 0a 20 20 20 20  ppropriate..    
4a00: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 66      */.        f
4a10: 6c 61 67 5f 65 78 70 20 3d 20 78 74 79 70 65 3d  lag_exp = xtype=
4a20: 3d 65 74 45 58 50 3b 0a 20 20 20 20 20 20 20 20  =etEXP;.        
4a30: 69 66 28 20 78 74 79 70 65 21 3d 65 74 46 4c 4f  if( xtype!=etFLO
4a40: 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  AT ){.          
4a50: 72 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75  realvalue += rou
4a60: 6e 64 65 72 3b 0a 20 20 20 20 20 20 20 20 20 20  nder;.          
4a70: 69 66 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31  if( realvalue>=1
4a80: 30 2e 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65  0.0 ){ realvalue
4a90: 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20   *= 0.1; exp++; 
4aa0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
4ab0: 20 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65      if( xtype==e
4ac0: 74 47 45 4e 45 52 49 43 20 29 7b 0a 20 20 20 20  tGENERIC ){.    
4ad0: 20 20 20 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d        flag_rtz =
4ae0: 20 21 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65   !flag_alternate
4af0: 66 6f 72 6d 3b 0a 20 20 20 20 20 20 20 20 20 20  form;.          
4b00: 69 66 28 20 65 78 70 3c 2d 34 20 7c 7c 20 65 78  if( exp<-4 || ex
4b10: 70 3e 70 72 65 63 69 73 69 6f 6e 20 29 7b 0a 20  p>precision ){. 
4b20: 20 20 20 20 20 20 20 20 20 20 20 78 74 79 70 65             xtype
4b30: 20 3d 20 65 74 45 58 50 3b 0a 20 20 20 20 20 20   = etEXP;.      
4b40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4b50: 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e         precision
4b60: 20 3d 20 70 72 65 63 69 73 69 6f 6e 20 2d 20 65   = precision - e
4b70: 78 70 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  xp;.            
4b80: 78 74 79 70 65 20 3d 20 65 74 46 4c 4f 41 54 3b  xtype = etFLOAT;
4b90: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
4ba0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4bb0: 20 20 20 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d        flag_rtz =
4bc0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
4bd0: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
4be0: 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20 20  =etEXP ){.      
4bf0: 20 20 20 20 65 32 20 3d 20 30 3b 0a 20 20 20 20      e2 = 0;.    
4c00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4c10: 20 20 20 20 20 65 32 20 3d 20 65 78 70 3b 0a 20       e2 = exp;. 
4c20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4c30: 20 6e 73 64 20 3d 20 30 3b 0a 20 20 20 20 20 20   nsd = 0;.      
4c40: 20 20 66 6c 61 67 5f 64 70 20 3d 20 28 70 72 65    flag_dp = (pre
4c50: 63 69 73 69 6f 6e 3e 30 20 3f 31 3a 30 29 20 7c  cision>0 ?1:0) |
4c60: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
4c70: 6f 72 6d 20 7c 20 66 6c 61 67 5f 61 6c 74 66 6f  orm | flag_altfo
4c80: 72 6d 32 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  rm2;.        /* 
4c90: 54 68 65 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e  The sign in fron
4ca0: 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
4cb0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  */.        if( p
4cc0: 72 65 66 69 78 20 29 7b 0a 20 20 20 20 20 20 20  refix ){.       
4cd0: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
4ce0: 70 72 65 66 69 78 3b 0a 20 20 20 20 20 20 20 20  prefix;.        
4cf0: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69 67  }.        /* Dig
4d00: 69 74 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  its prior to the
4d10: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a   decimal point *
4d20: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 65 32  /.        if( e2
4d30: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
4d40: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 30 27  *(bufpt++) = '0'
4d50: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
4d60: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 3b  .          for(;
4d70: 20 65 32 3e 3d 30 3b 20 65 32 2d 2d 29 7b 0a 20   e2>=0; e2--){. 
4d80: 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66             *(buf
4d90: 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65 74 64 69  pt++) = et_getdi
4da0: 67 69 74 28 26 72 65 61 6c 76 61 6c 75 65 2c 26  git(&realvalue,&
4db0: 6e 73 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20  nsd);.          
4dc0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
4dd0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 63 69 6d      /* The decim
4de0: 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20  al point */.    
4df0: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 64 70 20      if( flag_dp 
4e00: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62  ){.          *(b
4e10: 75 66 70 74 2b 2b 29 20 3d 20 27 2e 27 3b 0a 20  ufpt++) = '.';. 
4e20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4e30: 20 2f 2a 20 22 30 22 20 64 69 67 69 74 73 20 61   /* "0" digits a
4e40: 66 74 65 72 20 74 68 65 20 64 65 63 69 6d 61 6c  fter the decimal
4e50: 20 70 6f 69 6e 74 20 62 75 74 20 62 65 66 6f 72   point but befor
4e60: 65 20 74 68 65 20 66 69 72 73 74 0a 20 20 20 20  e the first.    
4e70: 20 20 20 20 2a 2a 20 73 69 67 6e 69 66 69 63 61      ** significa
4e80: 6e 74 20 64 69 67 69 74 20 6f 66 20 74 68 65 20  nt digit of the 
4e90: 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20  number */.      
4ea0: 20 20 66 6f 72 28 65 32 2b 2b 3b 20 65 32 3c 30    for(e2++; e2<0
4eb0: 3b 20 70 72 65 63 69 73 69 6f 6e 2d 2d 2c 20 65  ; precision--, e
4ec0: 32 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  2++){.          
4ed0: 61 73 73 65 72 74 28 20 70 72 65 63 69 73 69 6f  assert( precisio
4ee0: 6e 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20  n>0 );.         
4ef0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 30   *(bufpt++) = '0
4f00: 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ';.        }.   
4f10: 20 20 20 20 20 2f 2a 20 53 69 67 6e 69 66 69 63       /* Signific
4f20: 61 6e 74 20 64 69 67 69 74 73 20 61 66 74 65 72  ant digits after
4f30: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
4f40: 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 77 68  nt */.        wh
4f50: 69 6c 65 28 20 28 70 72 65 63 69 73 69 6f 6e 2d  ile( (precision-
4f60: 2d 29 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20  -)>0 ){.        
4f70: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 65    *(bufpt++) = e
4f80: 74 5f 67 65 74 64 69 67 69 74 28 26 72 65 61 6c  t_getdigit(&real
4f90: 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20  value,&nsd);.   
4fa0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
4fb0: 2a 20 52 65 6d 6f 76 65 20 74 72 61 69 6c 69 6e  * Remove trailin
4fc0: 67 20 7a 65 72 6f 73 20 61 6e 64 20 74 68 65 20  g zeros and the 
4fd0: 22 2e 22 20 69 66 20 6e 6f 20 64 69 67 69 74 73  "." if no digits
4fe0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 22 2e 22 20   follow the "." 
4ff0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66  */.        if( f
5000: 6c 61 67 5f 72 74 7a 20 26 26 20 66 6c 61 67 5f  lag_rtz && flag_
5010: 64 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  dp ){.          
5020: 77 68 69 6c 65 28 20 62 75 66 70 74 5b 2d 31 5d  while( bufpt[-1]
5030: 3d 3d 27 30 27 20 29 20 2a 28 2d 2d 62 75 66 70  =='0' ) *(--bufp
5040: 74 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  t) = 0;.        
5050: 20 20 61 73 73 65 72 74 28 20 62 75 66 70 74 3e    assert( bufpt>
5060: 62 75 66 20 29 3b 0a 20 20 20 20 20 20 20 20 20  buf );.         
5070: 20 69 66 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d   if( bufpt[-1]==
5080: 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '.' ){.         
5090: 20 20 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 66     if( flag_altf
50a0: 6f 72 6d 32 20 29 7b 0a 20 20 20 20 20 20 20 20  orm2 ){.        
50b0: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
50c0: 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   = '0';.        
50d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
50e0: 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66           *(--buf
50f0: 70 74 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  pt) = 0;.       
5100: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
5110: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
5120: 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20       /* Add the 
5130: 22 65 4e 4e 4e 22 20 73 75 66 66 69 78 20 2a 2f  "eNNN" suffix */
5140: 0a 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61  .        if( fla
5150: 67 5f 65 78 70 20 7c 7c 20 78 74 79 70 65 3d 3d  g_exp || xtype==
5160: 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20 20 20  etEXP ){.       
5170: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
5180: 61 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63  aDigits[infop->c
5190: 68 61 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20  harset];.       
51a0: 20 20 20 69 66 28 20 65 78 70 3c 30 20 29 7b 0a     if( exp<0 ){.
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
51c0: 66 70 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65 78  fpt++) = '-'; ex
51d0: 70 20 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20 20  p = -exp;.      
51e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
51f0: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
5200: 29 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20  ) = '+';.       
5210: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
5220: 66 28 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a 20  f( exp>=100 ){. 
5230: 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66             *(buf
5240: 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 28 28  pt++) = (char)((
5250: 65 78 70 2f 31 30 30 29 2b 27 30 27 29 3b 20 20  exp/100)+'0');  
5260: 20 20 20 20 20 20 2f 2a 20 31 30 30 27 73 20 64        /* 100's d
5270: 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  igit */.        
5280: 20 20 20 20 65 78 70 20 25 3d 20 31 30 30 3b 0a      exp %= 100;.
5290: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
52a0: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
52b0: 20 3d 20 28 63 68 61 72 29 28 65 78 70 2f 31 30   = (char)(exp/10
52c0: 2b 27 30 27 29 3b 20 20 20 20 20 20 20 20 20 20  +'0');          
52d0: 20 20 20 2f 2a 20 31 30 27 73 20 64 69 67 69 74     /* 10's digit
52e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 28   */.          *(
52f0: 62 75 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72  bufpt++) = (char
5300: 29 28 65 78 70 25 31 30 2b 27 30 27 29 3b 20 20  )(exp%10+'0');  
5310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 27             /* 1'
5320: 73 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20  s digit */.     
5330: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2a 62 75     }.        *bu
5340: 66 70 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  fpt = 0;..      
5350: 20 20 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72 74    /* The convert
5360: 65 64 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20  ed number is in 
5370: 62 75 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20 74  buf[] and zero t
5380: 65 72 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70 75  erminated. Outpu
5390: 74 20 69 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a  t it..        **
53a0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 6e   Note that the n
53b0: 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65 20  umber is in the 
53c0: 75 73 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f 74  usual order, not
53d0: 20 72 65 76 65 72 73 65 64 20 61 73 20 77 69 74   reversed as wit
53e0: 68 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74  h.        ** int
53f0: 65 67 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73  eger conversions
5400: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65 6e  . */.        len
5410: 67 74 68 20 3d 20 28 69 6e 74 29 28 62 75 66 70  gth = (int)(bufp
5420: 74 2d 62 75 66 29 3b 0a 20 20 20 20 20 20 20 20  t-buf);.        
5430: 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 0a 20 20  bufpt = buf;..  
5440: 20 20 20 20 20 20 2f 2a 20 53 70 65 63 69 61 6c        /* Special
5450: 20 63 61 73 65 3a 20 20 41 64 64 20 6c 65 61 64   case:  Add lead
5460: 69 6e 67 20 7a 65 72 6f 73 20 69 66 20 74 68 65  ing zeros if the
5470: 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 66 6c   flag_zeropad fl
5480: 61 67 20 69 73 0a 20 20 20 20 20 20 20 20 2a 2a  ag is.        **
5490: 20 73 65 74 20 61 6e 64 20 77 65 20 61 72 65 20   set and we are 
54a0: 6e 6f 74 20 6c 65 66 74 20 6a 75 73 74 69 66 69  not left justifi
54b0: 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ed */.        if
54c0: 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26  ( flag_zeropad &
54d0: 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74  & !flag_leftjust
54e0: 69 66 79 20 26 26 20 6c 65 6e 67 74 68 20 3c 20  ify && length < 
54f0: 77 69 64 74 68 29 7b 0a 20 20 20 20 20 20 20 20  width){.        
5500: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 20    int i;.       
5510: 20 20 20 69 6e 74 20 6e 50 61 64 20 3d 20 77 69     int nPad = wi
5520: 64 74 68 20 2d 20 6c 65 6e 67 74 68 3b 0a 20 20  dth - length;.  
5530: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 77 69          for(i=wi
5540: 64 74 68 3b 20 69 3e 3d 6e 50 61 64 3b 20 69 2d  dth; i>=nPad; i-
5550: 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  -){.            
5560: 62 75 66 70 74 5b 69 5d 20 3d 20 62 75 66 70 74  bufpt[i] = bufpt
5570: 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20 20 20 20 20  [i-nPad];.      
5580: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
5590: 69 20 3d 20 70 72 65 66 69 78 21 3d 30 3b 0a 20  i = prefix!=0;. 
55a0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
55b0: 6e 50 61 64 2d 2d 20 29 20 62 75 66 70 74 5b 69  nPad-- ) bufpt[i
55c0: 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20 20 20 20 20  ++] = '0';.     
55d0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69       length = wi
55e0: 64 74 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23  dth;.        }.#
55f0: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
5600: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
5610: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f  OATING_POINT) */
5620: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5630: 20 20 20 20 20 20 63 61 73 65 20 65 74 53 49 5a        case etSIZ
5640: 45 3a 0a 20 20 20 20 20 20 20 20 2a 28 76 61 5f  E:.        *(va_
5650: 61 72 67 28 61 70 2c 69 6e 74 2a 29 29 20 3d 20  arg(ap,int*)) = 
5660: 70 41 63 63 75 6d 2d 3e 6e 43 68 61 72 3b 0a 20  pAccum->nChar;. 
5670: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
5680: 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20  width = 0;.     
5690: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
56a0: 63 61 73 65 20 65 74 50 45 52 43 45 4e 54 3a 0a  case etPERCENT:.
56b0: 20 20 20 20 20 20 20 20 62 75 66 5b 30 5d 20 3d          buf[0] =
56c0: 20 27 25 27 3b 0a 20 20 20 20 20 20 20 20 62 75   '%';.        bu
56d0: 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20  fpt = buf;.     
56e0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 31 3b 0a 20     length = 1;. 
56f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5700: 20 20 20 20 63 61 73 65 20 65 74 43 48 41 52 58      case etCHARX
5710: 3a 0a 20 20 20 20 20 20 20 20 63 20 3d 20 76 61  :.        c = va
5720: 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20  _arg(ap,int);.  
5730: 20 20 20 20 20 20 62 75 66 5b 30 5d 20 3d 20 28        buf[0] = (
5740: 63 68 61 72 29 63 3b 0a 20 20 20 20 20 20 20 20  char)c;.        
5750: 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 3d 30  if( precision>=0
5760: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   ){.          fo
5770: 72 28 69 64 78 3d 31 3b 20 69 64 78 3c 70 72 65  r(idx=1; idx<pre
5780: 63 69 73 69 6f 6e 3b 20 69 64 78 2b 2b 29 20 62  cision; idx++) b
5790: 75 66 5b 69 64 78 5d 20 3d 20 28 63 68 61 72 29  uf[idx] = (char)
57a0: 63 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  c;.          len
57b0: 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b  gth = precision;
57c0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
57d0: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68            length
57e0: 20 3d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   =1;.        }. 
57f0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62         bufpt = b
5800: 75 66 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  uf;.        brea
5810: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  k;.      case et
5820: 53 54 52 49 4e 47 3a 0a 20 20 20 20 20 20 63 61  STRING:.      ca
5830: 73 65 20 65 74 44 59 4e 53 54 52 49 4e 47 3a 0a  se etDYNSTRING:.
5840: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
5850: 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29  va_arg(ap,char*)
5860: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 75  ;.        if( bu
5870: 66 70 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  fpt==0 ){.      
5880: 20 20 20 20 62 75 66 70 74 20 3d 20 22 22 3b 0a      bufpt = "";.
5890: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
58a0: 28 20 78 74 79 70 65 3d 3d 65 74 44 59 4e 53 54  ( xtype==etDYNST
58b0: 52 49 4e 47 20 29 7b 0a 20 20 20 20 20 20 20 20  RING ){.        
58c0: 20 20 7a 45 78 74 72 61 20 3d 20 62 75 66 70 74    zExtra = bufpt
58d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
58e0: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
58f0: 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n>=0 ){.        
5900: 20 20 66 6f 72 28 6c 65 6e 67 74 68 3d 30 3b 20    for(length=0; 
5910: 6c 65 6e 67 74 68 3c 70 72 65 63 69 73 69 6f 6e  length<precision
5920: 20 26 26 20 62 75 66 70 74 5b 6c 65 6e 67 74 68   && bufpt[length
5930: 5d 3b 20 6c 65 6e 67 74 68 2b 2b 29 7b 7d 0a 20  ]; length++){}. 
5940: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
5950: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
5960: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
5970: 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20 20  (bufpt);.       
5980: 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b   }.        break
5990: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53  ;.      case etS
59a0: 51 4c 45 53 43 41 50 45 3a 0a 20 20 20 20 20 20  QLESCAPE:.      
59b0: 63 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45  case etSQLESCAPE
59c0: 32 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  2:.      case et
59d0: 53 51 4c 45 53 43 41 50 45 33 3a 20 7b 0a 20 20  SQLESCAPE3: {.  
59e0: 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20        int i, j, 
59f0: 6b 2c 20 6e 2c 20 69 73 6e 75 6c 6c 3b 0a 20 20  k, n, isnull;.  
5a00: 20 20 20 20 20 20 69 6e 74 20 6e 65 65 64 51 75        int needQu
5a10: 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 63 68 61  ote;.        cha
5a20: 72 20 63 68 3b 0a 20 20 20 20 20 20 20 20 63 68  r ch;.        ch
5a30: 61 72 20 71 20 3d 20 28 28 78 74 79 70 65 3d 3d  ar q = ((xtype==
5a40: 65 74 53 51 4c 45 53 43 41 50 45 33 29 3f 27 22  etSQLESCAPE3)?'"
5a50: 27 3a 27 5c 27 27 29 3b 20 20 20 2f 2a 20 51 75  ':'\'');   /* Qu
5a60: 6f 74 65 20 63 68 61 72 61 63 74 65 72 20 2a 2f  ote character */
5a70: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 65  .        char *e
5a80: 73 63 61 72 67 20 3d 20 76 61 5f 61 72 67 28 61  scarg = va_arg(a
5a90: 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20  p,char*);.      
5aa0: 20 20 69 73 6e 75 6c 6c 20 3d 20 65 73 63 61 72    isnull = escar
5ab0: 67 3d 3d 30 3b 0a 20 20 20 20 20 20 20 20 69 66  g==0;.        if
5ac0: 28 20 69 73 6e 75 6c 6c 20 29 20 65 73 63 61 72  ( isnull ) escar
5ad0: 67 20 3d 20 28 78 74 79 70 65 3d 3d 65 74 53 51  g = (xtype==etSQ
5ae0: 4c 45 53 43 41 50 45 32 20 3f 20 22 4e 55 4c 4c  LESCAPE2 ? "NULL
5af0: 22 20 3a 20 22 28 4e 55 4c 4c 29 22 29 3b 0a 20  " : "(NULL)");. 
5b00: 20 20 20 20 20 20 20 6b 20 3d 20 70 72 65 63 69         k = preci
5b10: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 66 6f  sion;.        fo
5b20: 72 28 69 3d 6e 3d 30 3b 20 6b 21 3d 30 20 26 26  r(i=n=0; k!=0 &&
5b30: 20 28 63 68 3d 65 73 63 61 72 67 5b 69 5d 29 21   (ch=escarg[i])!
5b40: 3d 30 3b 20 69 2b 2b 2c 20 6b 2d 2d 29 7b 0a 20  =0; i++, k--){. 
5b50: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d           if( ch=
5b60: 3d 71 20 29 20 20 6e 2b 2b 3b 0a 20 20 20 20 20  =q )  n++;.     
5b70: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 65 65     }.        nee
5b80: 64 51 75 6f 74 65 20 3d 20 21 69 73 6e 75 6c 6c  dQuote = !isnull
5b90: 20 26 26 20 78 74 79 70 65 3d 3d 65 74 53 51 4c   && xtype==etSQL
5ba0: 45 53 43 41 50 45 32 3b 0a 20 20 20 20 20 20 20  ESCAPE2;.       
5bb0: 20 6e 20 2b 3d 20 69 20 2b 20 31 20 2b 20 6e 65   n += i + 1 + ne
5bc0: 65 64 51 75 6f 74 65 2a 32 3b 0a 20 20 20 20 20  edQuote*2;.     
5bd0: 20 20 20 69 66 28 20 6e 3e 65 74 42 55 46 53 49     if( n>etBUFSI
5be0: 5a 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ZE ){.          
5bf0: 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d  bufpt = zExtra =
5c00: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20   sqlite3Malloc( 
5c10: 6e 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  n );.          i
5c20: 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20  f( bufpt==0 ){. 
5c30: 20 20 20 20 20 20 20 20 20 20 20 70 41 63 63 75             pAccu
5c40: 6d 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  m->mallocFailed 
5c50: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 1;.           
5c60: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
5c70: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
5c80: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75  se{.          bu
5c90: 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20  fpt = buf;.     
5ca0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6a 20 3d     }.        j =
5cb0: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
5cc0: 6e 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 70  needQuote ) bufp
5cd0: 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20  t[j++] = q;.    
5ce0: 20 20 20 20 6b 20 3d 20 69 3b 0a 20 20 20 20 20      k = i;.     
5cf0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6b 3b     for(i=0; i<k;
5d00: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
5d10: 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68   bufpt[j++] = ch
5d20: 20 3d 20 65 73 63 61 72 67 5b 69 5d 3b 0a 20 20   = escarg[i];.  
5d30: 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d 3d          if( ch==
5d40: 71 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d  q ) bufpt[j++] =
5d50: 20 63 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   ch;.        }. 
5d60: 20 20 20 20 20 20 20 69 66 28 20 6e 65 65 64 51         if( needQ
5d70: 75 6f 74 65 20 29 20 62 75 66 70 74 5b 6a 2b 2b  uote ) bufpt[j++
5d80: 5d 20 3d 20 71 3b 0a 20 20 20 20 20 20 20 20 62  ] = q;.        b
5d90: 75 66 70 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20  ufpt[j] = 0;.   
5da0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 6a 3b       length = j;
5db0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  .        /* The 
5dc0: 70 72 65 63 69 73 69 6f 6e 20 69 6e 20 25 71 20  precision in %q 
5dd0: 61 6e 64 20 25 51 20 6d 65 61 6e 73 20 68 6f 77  and %Q means how
5de0: 20 6d 61 6e 79 20 69 6e 70 75 74 20 63 68 61 72   many input char
5df0: 61 63 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  acters to.      
5e00: 20 20 2a 2a 20 63 6f 6e 73 75 6d 65 2c 20 6e 6f    ** consume, no
5e10: 74 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  t the length of 
5e20: 74 68 65 20 6f 75 74 70 75 74 2e 2e 2e 0a 20 20  the output....  
5e30: 20 20 20 20 20 20 2a 2a 20 69 66 28 20 70 72 65        ** if( pre
5e40: 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65  cision>=0 && pre
5e50: 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20  cision<length ) 
5e60: 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73 69  length = precisi
5e70: 6f 6e 3b 20 2a 2f 0a 20 20 20 20 20 20 20 20 62  on; */.        b
5e80: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
5e90: 20 20 20 20 63 61 73 65 20 65 74 54 4f 4b 45 4e      case etTOKEN
5ea0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 54 6f 6b 65  : {.        Toke
5eb0: 6e 20 2a 70 54 6f 6b 65 6e 20 3d 20 76 61 5f 61  n *pToken = va_a
5ec0: 72 67 28 61 70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  rg(ap, Token*);.
5ed0: 20 20 20 20 20 20 20 20 69 66 28 20 70 54 6f 6b          if( pTok
5ee0: 65 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  en ){.          
5ef0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
5f00: 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 28 63  ppend(pAccum, (c
5f10: 6f 6e 73 74 20 63 68 61 72 2a 29 70 54 6f 6b 65  onst char*)pToke
5f20: 6e 2d 3e 7a 2c 20 70 54 6f 6b 65 6e 2d 3e 6e 29  n->z, pToken->n)
5f30: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5f40: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64      length = wid
5f50: 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  th = 0;.        
5f60: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5f70: 20 20 20 20 20 63 61 73 65 20 65 74 53 52 43 4c       case etSRCL
5f80: 49 53 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 53  IST: {.        S
5f90: 72 63 4c 69 73 74 20 2a 70 53 72 63 20 3d 20 76  rcList *pSrc = v
5fa0: 61 5f 61 72 67 28 61 70 2c 20 53 72 63 4c 69 73  a_arg(ap, SrcLis
5fb0: 74 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  t*);.        int
5fc0: 20 6b 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20   k = va_arg(ap, 
5fd0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 73 74  int);.        st
5fe0: 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
5ff0: 6d 20 2a 70 49 74 65 6d 20 3d 20 26 70 53 72 63  m *pItem = &pSrc
6000: 2d 3e 61 5b 6b 5d 3b 0a 20 20 20 20 20 20 20 20  ->a[k];.        
6010: 61 73 73 65 72 74 28 20 6b 3e 3d 30 20 26 26 20  assert( k>=0 && 
6020: 6b 3c 70 53 72 63 2d 3e 6e 53 72 63 20 29 3b 0a  k<pSrc->nSrc );.
6030: 20 20 20 20 20 20 20 20 69 66 28 20 70 49 74 65          if( pIte
6040: 6d 2d 3e 7a 44 61 74 61 62 61 73 65 20 29 7b 0a  m->zDatabase ){.
6050: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
6060: 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
6070: 70 41 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e 7a  pAccum, pItem->z
6080: 44 61 74 61 62 61 73 65 2c 20 2d 31 29 3b 0a 20  Database, -1);. 
6090: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
60a0: 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70  StrAccumAppend(p
60b0: 41 63 63 75 6d 2c 20 22 2e 22 2c 20 31 29 3b 0a  Accum, ".", 1);.
60c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
60d0: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
60e0: 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20  mAppend(pAccum, 
60f0: 70 49 74 65 6d 2d 3e 7a 4e 61 6d 65 2c 20 2d 31  pItem->zName, -1
6100: 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  );.        lengt
6110: 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a 20  h = width = 0;. 
6120: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
6130: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
6140: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 61  ult: {.        a
6150: 73 73 65 72 74 28 20 78 74 79 70 65 3d 3d 65 74  ssert( xtype==et
6160: 49 4e 56 41 4c 49 44 20 29 3b 0a 20 20 20 20 20  INVALID );.     
6170: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20     return;.     
6180: 20 7d 0a 20 20 20 20 7d 2f 2a 20 45 6e 64 20 73   }.    }/* End s
6190: 77 69 74 63 68 20 6f 76 65 72 20 74 68 65 20 66  witch over the f
61a0: 6f 72 6d 61 74 20 74 79 70 65 20 2a 2f 0a 20 20  ormat type */.  
61b0: 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    /*.    ** The 
61c0: 74 65 78 74 20 6f 66 20 74 68 65 20 63 6f 6e 76  text of the conv
61d0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 69 6e 74 65  ersion is pointe
61e0: 64 20 74 6f 20 62 79 20 22 62 75 66 70 74 22 20  d to by "bufpt" 
61f0: 61 6e 64 20 69 73 0a 20 20 20 20 2a 2a 20 22 6c  and is.    ** "l
6200: 65 6e 67 74 68 22 20 63 68 61 72 61 63 74 65 72  ength" character
6210: 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 66 69 65  s long.  The fie
6220: 6c 64 20 77 69 64 74 68 20 69 73 20 22 77 69 64  ld width is "wid
6230: 74 68 22 2e 20 20 44 6f 0a 20 20 20 20 2a 2a 20  th".  Do.    ** 
6240: 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
6250: 2a 2f 0a 20 20 20 20 69 66 28 20 21 66 6c 61 67  */.    if( !flag
6260: 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29 7b 0a  _leftjustify ){.
6270: 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20 69        register i
6280: 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20  nt nspace;.     
6290: 20 6e 73 70 61 63 65 20 3d 20 77 69 64 74 68 2d   nspace = width-
62a0: 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 69 66  length;.      if
62b0: 28 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a 20 20  ( nspace>0 ){.  
62c0: 20 20 20 20 20 20 61 70 70 65 6e 64 53 70 61 63        appendSpac
62d0: 65 28 70 41 63 63 75 6d 2c 20 6e 73 70 61 63 65  e(pAccum, nspace
62e0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
62f0: 0a 20 20 20 20 69 66 28 20 6c 65 6e 67 74 68 3e  .    if( length>
6300: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
6310: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
6320: 28 70 41 63 63 75 6d 2c 20 62 75 66 70 74 2c 20  (pAccum, bufpt, 
6330: 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 20  length);.    }. 
6340: 20 20 20 69 66 28 20 66 6c 61 67 5f 6c 65 66 74     if( flag_left
6350: 6a 75 73 74 69 66 79 20 29 7b 0a 20 20 20 20 20  justify ){.     
6360: 20 72 65 67 69 73 74 65 72 20 69 6e 74 20 6e 73   register int ns
6370: 70 61 63 65 3b 0a 20 20 20 20 20 20 6e 73 70 61  pace;.      nspa
6380: 63 65 20 3d 20 77 69 64 74 68 2d 6c 65 6e 67 74  ce = width-lengt
6390: 68 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 73 70  h;.      if( nsp
63a0: 61 63 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  ace>0 ){.       
63b0: 20 61 70 70 65 6e 64 53 70 61 63 65 28 70 41 63   appendSpace(pAc
63c0: 63 75 6d 2c 20 6e 73 70 61 63 65 29 3b 0a 20 20  cum, nspace);.  
63d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
63e0: 69 66 28 20 7a 45 78 74 72 61 20 29 7b 0a 20 20  if( zExtra ){.  
63f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
6400: 28 7a 45 78 74 72 61 29 3b 0a 20 20 20 20 7d 0a  (zExtra);.    }.
6410: 20 20 7d 2f 2a 20 45 6e 64 20 66 6f 72 20 6c 6f    }/* End for lo
6420: 6f 70 20 6f 76 65 72 20 74 68 65 20 66 6f 72 6d  op over the form
6430: 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 7d 20 2f  at string */.} /
6440: 2a 20 45 6e 64 20 6f 66 20 66 75 6e 63 74 69 6f  * End of functio
6450: 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65  n */../*.** Appe
6460: 6e 64 20 4e 20 62 79 74 65 73 20 6f 66 20 74 65  nd N bytes of te
6470: 78 74 20 66 72 6f 6d 20 7a 20 74 6f 20 74 68 65  xt from z to the
6480: 20 53 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 74   StrAccum object
6490: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
64a0: 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
64b0: 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e  StrAccum *p, con
64c0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
64d0: 4e 29 7b 0a 20 20 61 73 73 65 72 74 28 20 7a 21  N){.  assert( z!
64e0: 3d 30 20 7c 7c 20 4e 3d 3d 30 20 29 3b 0a 20 20  =0 || N==0 );.  
64f0: 69 66 28 20 70 2d 3e 74 6f 6f 42 69 67 20 7c 20  if( p->tooBig | 
6500: 70 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  p->mallocFailed 
6510: 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  ){.    testcase(
6520: 70 2d 3e 74 6f 6f 42 69 67 29 3b 0a 20 20 20 20  p->tooBig);.    
6530: 74 65 73 74 63 61 73 65 28 70 2d 3e 6d 61 6c 6c  testcase(p->mall
6540: 6f 63 46 61 69 6c 65 64 29 3b 0a 20 20 20 20 72  ocFailed);.    r
6550: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28  eturn;.  }.  if(
6560: 20 4e 3c 30 20 29 7b 0a 20 20 20 20 4e 20 3d 20   N<0 ){.    N = 
6570: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
6580: 7a 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 4e 3d  z);.  }.  if( N=
6590: 3d 30 20 7c 7c 20 4e 45 56 45 52 28 7a 3d 3d 30  =0 || NEVER(z==0
65a0: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  ) ){.    return;
65b0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 6e 43  .  }.  if( p->nC
65c0: 68 61 72 2b 4e 20 3e 3d 20 70 2d 3e 6e 41 6c 6c  har+N >= p->nAll
65d0: 6f 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  oc ){.    char *
65e0: 7a 4e 65 77 3b 0a 20 20 20 20 69 66 28 20 21 70  zNew;.    if( !p
65f0: 2d 3e 75 73 65 4d 61 6c 6c 6f 63 20 29 7b 0a 20  ->useMalloc ){. 
6600: 20 20 20 20 20 70 2d 3e 74 6f 6f 42 69 67 20 3d       p->tooBig =
6610: 20 31 3b 0a 20 20 20 20 20 20 4e 20 3d 20 70 2d   1;.      N = p-
6620: 3e 6e 41 6c 6c 6f 63 20 2d 20 70 2d 3e 6e 43 68  >nAlloc - p->nCh
6630: 61 72 20 2d 20 31 3b 0a 20 20 20 20 20 20 69 66  ar - 1;.      if
6640: 28 20 4e 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( N<=0 ){.      
6650: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
6660: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
6670: 20 20 20 63 68 61 72 20 2a 7a 4f 6c 64 20 3d 20     char *zOld = 
6680: 28 70 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42  (p->zText==p->zB
6690: 61 73 65 20 3f 20 30 20 3a 20 70 2d 3e 7a 54 65  ase ? 0 : p->zTe
66a0: 78 74 29 3b 0a 20 20 20 20 20 20 69 36 34 20 73  xt);.      i64 s
66b0: 7a 4e 65 77 20 3d 20 70 2d 3e 6e 43 68 61 72 3b  zNew = p->nChar;
66c0: 0a 20 20 20 20 20 20 73 7a 4e 65 77 20 2b 3d 20  .      szNew += 
66d0: 4e 20 2b 20 31 3b 0a 20 20 20 20 20 20 69 66 28  N + 1;.      if(
66e0: 20 73 7a 4e 65 77 20 3e 20 70 2d 3e 6d 78 41 6c   szNew > p->mxAl
66f0: 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 20 20 73  loc ){.        s
6700: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65  qlite3StrAccumRe
6710: 73 65 74 28 70 29 3b 0a 20 20 20 20 20 20 20 20  set(p);.        
6720: 70 2d 3e 74 6f 6f 42 69 67 20 3d 20 31 3b 0a 20  p->tooBig = 1;. 
6730: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
6740: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
6750: 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20      p->nAlloc = 
6760: 28 69 6e 74 29 73 7a 4e 65 77 3b 0a 20 20 20 20  (int)szNew;.    
6770: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 2d    }.      if( p-
6780: 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29 7b  >useMalloc==1 ){
6790: 0a 20 20 20 20 20 20 20 20 7a 4e 65 77 20 3d 20  .        zNew = 
67a0: 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
67b0: 28 70 2d 3e 64 62 2c 20 7a 4f 6c 64 2c 20 70 2d  (p->db, zOld, p-
67c0: 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 20 20  >nAlloc);.      
67d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
67e0: 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 5f 72 65  New = sqlite3_re
67f0: 61 6c 6c 6f 63 28 7a 4f 6c 64 2c 20 70 2d 3e 6e  alloc(zOld, p->n
6800: 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 20 20 7d 0a  Alloc);.      }.
6810: 20 20 20 20 20 20 69 66 28 20 7a 4e 65 77 20 29        if( zNew )
6820: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 4f  {.        if( zO
6830: 6c 64 3d 3d 30 20 29 20 6d 65 6d 63 70 79 28 7a  ld==0 ) memcpy(z
6840: 4e 65 77 2c 20 70 2d 3e 7a 54 65 78 74 2c 20 70  New, p->zText, p
6850: 2d 3e 6e 43 68 61 72 29 3b 0a 20 20 20 20 20 20  ->nChar);.      
6860: 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 7a 4e 65    p->zText = zNe
6870: 77 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  w;.      }else{.
6880: 20 20 20 20 20 20 20 20 70 2d 3e 6d 61 6c 6c 6f          p->mallo
6890: 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
68a0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
68b0: 63 63 75 6d 52 65 73 65 74 28 70 29 3b 0a 20 20  ccumReset(p);.  
68c0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
68d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
68e0: 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e 7a 54 65    memcpy(&p->zTe
68f0: 78 74 5b 70 2d 3e 6e 43 68 61 72 5d 2c 20 7a 2c  xt[p->nChar], z,
6900: 20 4e 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 72 20   N);.  p->nChar 
6910: 2b 3d 20 4e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46  += N;.}../*.** F
6920: 69 6e 69 73 68 20 6f 66 66 20 61 20 73 74 72 69  inish off a stri
6930: 6e 67 20 62 79 20 6d 61 6b 69 6e 67 20 73 75 72  ng by making sur
6940: 65 20 69 74 20 69 73 20 7a 65 72 6f 2d 74 65 72  e it is zero-ter
6950: 6d 69 6e 61 74 65 64 2e 0a 2a 2a 20 52 65 74 75  minated..** Retu
6960: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
6970: 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 73 74  the resulting st
6980: 72 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 61 20  ring.  Return a 
6990: 4e 55 4c 4c 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  NULL.** pointer 
69a0: 69 66 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 65  if any kind of e
69b0: 72 72 6f 72 20 77 61 73 20 65 6e 63 6f 75 6e 74  rror was encount
69c0: 65 72 65 64 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73  ered..*/.char *s
69d0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
69e0: 6e 69 73 68 28 53 74 72 41 63 63 75 6d 20 2a 70  nish(StrAccum *p
69f0: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78  ){.  if( p->zTex
6a00: 74 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 54 65 78  t ){.    p->zTex
6a10: 74 5b 70 2d 3e 6e 43 68 61 72 5d 20 3d 20 30 3b  t[p->nChar] = 0;
6a20: 0a 20 20 20 20 69 66 28 20 70 2d 3e 75 73 65 4d  .    if( p->useM
6a30: 61 6c 6c 6f 63 20 26 26 20 70 2d 3e 7a 54 65 78  alloc && p->zTex
6a40: 74 3d 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20  t==p->zBase ){. 
6a50: 20 20 20 20 20 69 66 28 20 70 2d 3e 75 73 65 4d       if( p->useM
6a60: 61 6c 6c 6f 63 3d 3d 31 20 29 7b 0a 20 20 20 20  alloc==1 ){.    
6a70: 20 20 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 73      p->zText = s
6a80: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
6a90: 77 28 70 2d 3e 64 62 2c 20 70 2d 3e 6e 43 68 61  w(p->db, p->nCha
6aa0: 72 2b 31 20 29 3b 0a 20 20 20 20 20 20 7d 65 6c  r+1 );.      }el
6ab0: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a  se{.        p->z
6ac0: 54 65 78 74 20 3d 20 73 71 6c 69 74 65 33 5f 6d  Text = sqlite3_m
6ad0: 61 6c 6c 6f 63 28 70 2d 3e 6e 43 68 61 72 2b 31  alloc(p->nChar+1
6ae0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
6af0: 20 69 66 28 20 70 2d 3e 7a 54 65 78 74 20 29 7b   if( p->zText ){
6b00: 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
6b10: 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e 7a 42 61  p->zText, p->zBa
6b20: 73 65 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 29 3b  se, p->nChar+1);
6b30: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
6b40: 20 20 20 20 20 20 70 2d 3e 6d 61 6c 6c 6f 63 46        p->mallocF
6b50: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
6b60: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
6b70: 65 74 75 72 6e 20 70 2d 3e 7a 54 65 78 74 3b 0a  eturn p->zText;.
6b80: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 65 74 20 61  }../*.** Reset a
6b90: 6e 20 53 74 72 41 63 63 75 6d 20 73 74 72 69 6e  n StrAccum strin
6ba0: 67 2e 20 20 52 65 63 6c 61 69 6d 20 61 6c 6c 20  g.  Reclaim all 
6bb0: 6d 61 6c 6c 6f 63 65 64 20 6d 65 6d 6f 72 79 2e  malloced memory.
6bc0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
6bd0: 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74  StrAccumReset(St
6be0: 72 41 63 63 75 6d 20 2a 70 29 7b 0a 20 20 69 66  rAccum *p){.  if
6bf0: 28 20 70 2d 3e 7a 54 65 78 74 21 3d 70 2d 3e 7a  ( p->zText!=p->z
6c00: 42 61 73 65 20 29 7b 0a 20 20 20 20 69 66 28 20  Base ){.    if( 
6c10: 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20  p->useMalloc==1 
6c20: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
6c30: 44 62 46 72 65 65 28 70 2d 3e 64 62 2c 20 70 2d  DbFree(p->db, p-
6c40: 3e 7a 54 65 78 74 29 3b 0a 20 20 20 20 7d 65 6c  >zText);.    }el
6c50: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
6c60: 33 5f 66 72 65 65 28 70 2d 3e 7a 54 65 78 74 29  3_free(p->zText)
6c70: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 2d  ;.    }.  }.  p-
6c80: 3e 7a 54 65 78 74 20 3d 20 30 3b 0a 7d 0a 0a 2f  >zText = 0;.}../
6c90: 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20  *.** Initialize 
6ca0: 61 20 73 74 72 69 6e 67 20 61 63 63 75 6d 75 6c  a string accumul
6cb0: 61 74 6f 72 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ator.*/.void sql
6cc0: 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
6cd0: 28 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 68  (StrAccum *p, ch
6ce0: 61 72 20 2a 7a 42 61 73 65 2c 20 69 6e 74 20 6e  ar *zBase, int n
6cf0: 2c 20 69 6e 74 20 6d 78 29 7b 0a 20 20 70 2d 3e  , int mx){.  p->
6d00: 7a 54 65 78 74 20 3d 20 70 2d 3e 7a 42 61 73 65  zText = p->zBase
6d10: 20 3d 20 7a 42 61 73 65 3b 0a 20 20 70 2d 3e 64   = zBase;.  p->d
6d20: 62 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61  b = 0;.  p->nCha
6d30: 72 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 41 6c 6c  r = 0;.  p->nAll
6d40: 6f 63 20 3d 20 6e 3b 0a 20 20 70 2d 3e 6d 78 41  oc = n;.  p->mxA
6d50: 6c 6c 6f 63 20 3d 20 6d 78 3b 0a 20 20 70 2d 3e  lloc = mx;.  p->
6d60: 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 31 3b 0a 20  useMalloc = 1;. 
6d70: 20 70 2d 3e 74 6f 6f 42 69 67 20 3d 20 30 3b 0a   p->tooBig = 0;.
6d80: 20 20 70 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65    p->mallocFaile
6d90: 64 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  d = 0;.}../*.** 
6da0: 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72  Print into memor
6db0: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
6dc0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20  sqliteMalloc(). 
6dd0: 20 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61   Use the interna
6de0: 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f  l.** %-conversio
6df0: 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f  n extensions..*/
6e00: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
6e10: 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a  Printf(sqlite3 *
6e20: 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
6e30: 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74  zFormat, va_list
6e40: 20 61 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b   ap){.  char *z;
6e50: 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b 53 51  .  char zBase[SQ
6e60: 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53  LITE_PRINT_BUF_S
6e70: 49 5a 45 5d 3b 0a 20 20 53 74 72 41 63 63 75 6d  IZE];.  StrAccum
6e80: 20 61 63 63 3b 0a 20 20 61 73 73 65 72 74 28 20   acc;.  assert( 
6e90: 64 62 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  db!=0 );.  sqlit
6ea0: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
6eb0: 61 63 63 2c 20 7a 42 61 73 65 2c 20 73 69 7a 65  acc, zBase, size
6ec0: 6f 66 28 7a 42 61 73 65 29 2c 0a 20 20 20 20 20  of(zBase),.     
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ee0: 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
6ef0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
6f00: 29 3b 0a 20 20 61 63 63 2e 64 62 20 3d 20 64 62  );.  acc.db = db
6f10: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
6f20: 6e 74 66 28 26 61 63 63 2c 20 31 2c 20 7a 46 6f  ntf(&acc, 1, zFo
6f30: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d  rmat, ap);.  z =
6f40: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6f50: 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20  Finish(&acc);.  
6f60: 69 66 28 20 61 63 63 2e 6d 61 6c 6c 6f 63 46 61  if( acc.mallocFa
6f70: 69 6c 65 64 20 29 7b 0a 20 20 20 20 64 62 2d 3e  iled ){.    db->
6f80: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
6f90: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
6fa0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74  ;.}../*.** Print
6fb0: 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74   into memory obt
6fc0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
6fd0: 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65 20  eMalloc().  Use 
6fe0: 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20  the internal.** 
6ff0: 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74  %-conversion ext
7000: 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72  ensions..*/.char
7010: 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66   *sqlite3MPrintf
7020: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
7030: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
7040: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
7050: 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a  st ap;.  char *z
7060: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
7070: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d   zFormat);.  z =
7080: 20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66   sqlite3VMPrintf
7090: 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  (db, zFormat, ap
70a0: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
70b0: 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a  .  return z;.}..
70c0: 2f 2a 0a 2a 2a 20 4c 69 6b 65 20 73 71 6c 69 74  /*.** Like sqlit
70d0: 65 33 4d 50 72 69 6e 74 66 28 29 2c 20 62 75 74  e3MPrintf(), but
70e0: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 44 62 46   call sqlite3DbF
70f0: 72 65 65 28 29 20 6f 6e 20 7a 53 74 72 20 61 66  ree() on zStr af
7100: 74 65 72 20 66 6f 72 6d 61 74 74 69 6e 67 0a 2a  ter formatting.*
7110: 2a 20 74 68 65 20 73 74 72 69 6e 67 20 61 6e 64  * the string and
7120: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 6e 69   before returnni
7130: 6e 67 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e  ng.  This routin
7140: 65 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f  e is intended to
7150: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d   be used.** to m
7160: 6f 64 69 66 79 20 61 6e 20 65 78 69 73 74 69 6e  odify an existin
7170: 67 20 73 74 72 69 6e 67 2e 20 20 46 6f 72 20 65  g string.  For e
7180: 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
7190: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 4d      x = sqlite3M
71a0: 50 72 69 6e 74 66 28 64 62 2c 20 78 2c 20 22 70  Printf(db, x, "p
71b0: 72 65 66 69 78 20 25 73 20 73 75 66 66 69 78 22  refix %s suffix"
71c0: 2c 20 78 29 3b 0a 2a 2a 0a 2a 2f 0a 63 68 61 72  , x);.**.*/.char
71d0: 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
71e0: 66 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  f(sqlite3 *db, c
71f0: 68 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74  har *zStr, const
7200: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
7210: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
7220: 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  ap;.  char *z;. 
7230: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
7240: 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71  ormat);.  z = sq
7250: 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64 62  lite3VMPrintf(db
7260: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
7270: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
7280: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
7290: 2c 20 7a 53 74 72 29 3b 0a 20 20 72 65 74 75 72  , zStr);.  retur
72a0: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  n z;.}../*.** Pr
72b0: 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  int into memory 
72c0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
72d0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 20  lite3_malloc(). 
72e0: 20 4f 6d 69 74 20 74 68 65 20 69 6e 74 65 72 6e   Omit the intern
72f0: 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69  al.** %-conversi
7300: 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a  on extensions..*
7310: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  /.char *sqlite3_
7320: 76 6d 70 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  vmprintf(const c
7330: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61  har *zFormat, va
7340: 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 63 68 61  _list ap){.  cha
7350: 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 7a 42 61  r *z;.  char zBa
7360: 73 65 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f  se[SQLITE_PRINT_
7370: 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20 53 74 72  BUF_SIZE];.  Str
7380: 41 63 63 75 6d 20 61 63 63 3b 0a 23 69 66 6e 64  Accum acc;.#ifnd
7390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
73a0: 55 54 4f 49 4e 49 54 0a 20 20 69 66 28 20 73 71  UTOINIT.  if( sq
73b0: 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
73c0: 28 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 23  () ) return 0;.#
73d0: 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 53  endif.  sqlite3S
73e0: 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63  trAccumInit(&acc
73f0: 2c 20 7a 42 61 73 65 2c 20 73 69 7a 65 6f 66 28  , zBase, sizeof(
7400: 7a 42 61 73 65 29 2c 20 53 51 4c 49 54 45 5f 4d  zBase), SQLITE_M
7410: 41 58 5f 4c 45 4e 47 54 48 29 3b 0a 20 20 61 63  AX_LENGTH);.  ac
7420: 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 32 3b  c.useMalloc = 2;
7430: 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  .  sqlite3VXPrin
7440: 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72  tf(&acc, 0, zFor
7450: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d 20  mat, ap);.  z = 
7460: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
7470: 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20 72  inish(&acc);.  r
7480: 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn z;.}../*.*
7490: 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  * Print into mem
74a0: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
74b0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
74c0: 28 29 28 29 2e 20 20 4f 6d 69 74 20 74 68 65 20  ()().  Omit the 
74d0: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f  internal.** %-co
74e0: 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69  nversion extensi
74f0: 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  ons..*/.char *sq
7500: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 63 6f  lite3_mprintf(co
7510: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
7520: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
7530: 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a  st ap;.  char *z
7540: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
7550: 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20  _OMIT_AUTOINIT. 
7560: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 69   if( sqlite3_ini
7570: 74 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74 75  tialize() ) retu
7580: 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 76  rn 0;.#endif.  v
7590: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
75a0: 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  mat);.  z = sqli
75b0: 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f  te3_vmprintf(zFo
75c0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
75d0: 65 6e 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72  end(ap);.  retur
75e0: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71  n z;.}../*.** sq
75f0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29  lite3_snprintf()
7600: 20 77 6f 72 6b 73 20 6c 69 6b 65 20 73 6e 70 72   works like snpr
7610: 69 6e 74 66 28 29 20 65 78 63 65 70 74 20 74 68  intf() except th
7620: 61 74 20 69 74 20 69 67 6e 6f 72 65 73 20 74 68  at it ignores th
7630: 65 0a 2a 2a 20 63 75 72 72 65 6e 74 20 6c 6f 63  e.** current loc
7640: 61 6c 65 20 73 65 74 74 69 6e 67 73 2e 20 20 54  ale settings.  T
7650: 68 69 73 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  his is important
7660: 20 66 6f 72 20 53 51 4c 69 74 65 20 62 65 63 61   for SQLite beca
7670: 75 73 65 20 77 65 0a 2a 2a 20 61 72 65 20 6e 6f  use we.** are no
7680: 74 20 61 62 6c 65 20 74 6f 20 75 73 65 20 61 20  t able to use a 
7690: 22 2c 22 20 61 73 20 74 68 65 20 64 65 63 69 6d  "," as the decim
76a0: 61 6c 20 70 6f 69 6e 74 20 69 6e 20 70 6c 61 63  al point in plac
76b0: 65 20 6f 66 20 22 2e 22 20 61 73 0a 2a 2a 20 73  e of "." as.** s
76c0: 70 65 63 69 66 69 65 64 20 62 79 20 73 6f 6d 65  pecified by some
76d0: 20 6c 6f 63 61 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20   locales..**.** 
76e0: 4f 6f 70 73 3a 20 20 54 68 65 20 66 69 72 73 74  Oops:  The first
76f0: 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f   two arguments o
7700: 66 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e  f sqlite3_snprin
7710: 74 66 28 29 20 61 72 65 20 62 61 63 6b 77 61 72  tf() are backwar
7720: 64 73 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 73  ds.** from the s
7730: 6e 70 72 69 6e 74 66 28 29 20 73 74 61 6e 64 61  nprintf() standa
7740: 72 64 2e 20 20 55 6e 66 6f 72 74 75 6e 61 74 65  rd.  Unfortunate
7750: 6c 79 2c 20 69 74 20 69 73 20 74 6f 6f 20 6c 61  ly, it is too la
7760: 74 65 20 74 6f 20 63 68 61 6e 67 65 0a 2a 2a 20  te to change.** 
7770: 74 68 69 73 20 77 69 74 68 6f 75 74 20 62 72 65  this without bre
7780: 61 6b 69 6e 67 20 63 6f 6d 70 61 74 69 62 69 6c  aking compatibil
7790: 69 74 79 2c 20 73 6f 20 77 65 20 6a 75 73 74 20  ity, so we just 
77a0: 68 61 76 65 20 74 6f 20 6c 69 76 65 20 77 69 74  have to live wit
77b0: 68 20 74 68 65 0a 2a 2a 20 6d 69 73 74 61 6b 65  h the.** mistake
77c0: 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  ..**.** sqlite3_
77d0: 76 73 6e 70 72 69 6e 74 66 28 29 20 69 73 20 74  vsnprintf() is t
77e0: 68 65 20 76 61 72 61 72 67 73 20 76 65 72 73 69  he varargs versi
77f0: 6f 6e 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c  on..*/.char *sql
7800: 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 69  ite3_vsnprintf(i
7810: 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 42 75 66  nt n, char *zBuf
7820: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  , const char *zF
7830: 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61  ormat, va_list a
7840: 70 29 7b 0a 20 20 53 74 72 41 63 63 75 6d 20 61  p){.  StrAccum a
7850: 63 63 3b 0a 20 20 69 66 28 20 6e 3c 3d 30 20 29  cc;.  if( n<=0 )
7860: 20 72 65 74 75 72 6e 20 7a 42 75 66 3b 0a 20 20   return zBuf;.  
7870: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
7880: 6e 69 74 28 26 61 63 63 2c 20 7a 42 75 66 2c 20  nit(&acc, zBuf, 
7890: 6e 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65  n, 0);.  acc.use
78a0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 73 71  Malloc = 0;.  sq
78b0: 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61  lite3VXPrintf(&a
78c0: 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20  cc, 0, zFormat, 
78d0: 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71  ap);.  return sq
78e0: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
78f0: 69 73 68 28 26 61 63 63 29 3b 0a 7d 0a 63 68 61  ish(&acc);.}.cha
7900: 72 20 2a 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  r *sqlite3_snpri
7910: 6e 74 66 28 69 6e 74 20 6e 2c 20 63 68 61 72 20  ntf(int n, char 
7920: 2a 7a 42 75 66 2c 20 63 6f 6e 73 74 20 63 68 61  *zBuf, const cha
7930: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
7940: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76  {.  char *z;.  v
7950: 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f  a_list ap;.  va_
7960: 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74  start(ap,zFormat
7970: 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
7980: 5f 76 73 6e 70 72 69 6e 74 66 28 6e 2c 20 7a 42  _vsnprintf(n, zB
7990: 75 66 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29  uf, zFormat, ap)
79a0: 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  ;.  va_end(ap);.
79b0: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
79c0: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
79d0: 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 61 63   routine that ac
79e0: 74 75 61 6c 6c 79 20 66 6f 72 6d 61 74 73 20 74  tually formats t
79f0: 68 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  he sqlite3_log()
7a00: 20 6d 65 73 73 61 67 65 2e 0a 2a 2a 20 57 65 20   message..** We 
7a10: 68 6f 75 73 65 20 69 74 20 69 6e 20 61 20 73 65  house it in a se
7a20: 70 61 72 61 74 65 20 72 6f 75 74 69 6e 65 20 66  parate routine f
7a30: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  rom sqlite3_log(
7a40: 29 20 74 6f 20 61 76 6f 69 64 20 75 73 69 6e 67  ) to avoid using
7a50: 0a 2a 2a 20 73 74 61 63 6b 20 73 70 61 63 65 20  .** stack space 
7a60: 6f 6e 20 73 6d 61 6c 6c 2d 73 74 61 63 6b 20 73  on small-stack s
7a70: 79 73 74 65 6d 73 20 77 68 65 6e 20 6c 6f 67 67  ystems when logg
7a80: 69 6e 67 20 69 73 20 64 69 73 61 62 6c 65 64 2e  ing is disabled.
7a90: 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  .**.** sqlite3_l
7aa0: 6f 67 28 29 20 6d 75 73 74 20 72 65 6e 64 65 72  og() must render
7ab0: 20 69 6e 74 6f 20 61 20 73 74 61 74 69 63 20 62   into a static b
7ac0: 75 66 66 65 72 2e 20 20 49 74 20 63 61 6e 6e 6f  uffer.  It canno
7ad0: 74 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  t dynamically.**
7ae0: 20 61 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79   allocate memory
7af0: 20 62 65 63 61 75 73 65 20 69 74 20 6d 69 67 68   because it migh
7b00: 74 20 62 65 20 63 61 6c 6c 65 64 20 77 68 69 6c  t be called whil
7b10: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
7b20: 6f 63 61 74 6f 72 0a 2a 2a 20 6d 75 74 65 78 20  ocator.** mutex 
7b30: 69 73 20 68 65 6c 64 2e 0a 2a 2f 0a 73 74 61 74  is held..*/.stat
7b40: 69 63 20 76 6f 69 64 20 72 65 6e 64 65 72 4c 6f  ic void renderLo
7b50: 67 4d 73 67 28 69 6e 74 20 69 45 72 72 43 6f 64  gMsg(int iErrCod
7b60: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
7b70: 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20  Format, va_list 
7b80: 61 70 29 7b 0a 20 20 53 74 72 41 63 63 75 6d 20  ap){.  StrAccum 
7b90: 61 63 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  acc;            
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7bb0: 20 53 74 72 69 6e 67 20 61 63 63 75 6d 75 6c 61   String accumula
7bc0: 74 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 7a 4d  tor */.  char zM
7bd0: 73 67 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f  sg[SQLITE_PRINT_
7be0: 42 55 46 5f 53 49 5a 45 2a 33 5d 3b 20 20 20 20  BUF_SIZE*3];    
7bf0: 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 6c 6f 67 20  /* Complete log 
7c00: 6d 65 73 73 61 67 65 20 2a 2f 0a 0a 20 20 73 71  message */..  sq
7c10: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
7c20: 74 28 26 61 63 63 2c 20 7a 4d 73 67 2c 20 73 69  t(&acc, zMsg, si
7c30: 7a 65 6f 66 28 7a 4d 73 67 29 2c 20 30 29 3b 0a  zeof(zMsg), 0);.
7c40: 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20    acc.useMalloc 
7c50: 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 58  = 0;.  sqlite3VX
7c60: 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20  Printf(&acc, 0, 
7c70: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
7c80: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
7c90: 66 69 67 2e 78 4c 6f 67 28 73 71 6c 69 74 65 33  fig.xLog(sqlite3
7ca0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 4c 6f  GlobalConfig.pLo
7cb0: 67 41 72 67 2c 20 69 45 72 72 43 6f 64 65 2c 0a  gArg, iErrCode,.
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
7ce0: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
7cf0: 28 26 61 63 63 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  (&acc));.}../*.*
7d00: 2a 20 46 6f 72 6d 61 74 20 61 6e 64 20 77 72 69  * Format and wri
7d10: 74 65 20 61 20 6d 65 73 73 61 67 65 20 74 6f 20  te a message to 
7d20: 74 68 65 20 6c 6f 67 20 69 66 20 6c 6f 67 67 69  the log if loggi
7d30: 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a  ng is enabled..*
7d40: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 6c  /.void sqlite3_l
7d50: 6f 67 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c  og(int iErrCode,
7d60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
7d70: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
7d80: 5f 6c 69 73 74 20 61 70 3b 20 20 20 20 20 20 20  _list ap;       
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7da0: 20 20 20 20 20 20 2f 2a 20 56 61 72 61 72 67 20        /* Vararg 
7db0: 6c 69 73 74 20 2a 2f 0a 20 20 69 66 28 20 73 71  list */.  if( sq
7dc0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
7dd0: 67 2e 78 4c 6f 67 20 29 7b 0a 20 20 20 20 76 61  g.xLog ){.    va
7de0: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
7df0: 61 74 29 3b 0a 20 20 20 20 72 65 6e 64 65 72 4c  at);.    renderL
7e00: 6f 67 4d 73 67 28 69 45 72 72 43 6f 64 65 2c 20  ogMsg(iErrCode, 
7e10: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
7e20: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
7e30: 7d 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  }.}..#if defined
7e40: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 2f  (SQLITE_DEBUG)./
7e50: 2a 0a 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20 6f  *.** A version o
7e60: 66 20 70 72 69 6e 74 66 28 29 20 74 68 61 74 20  f printf() that 
7e70: 75 6e 64 65 72 73 74 61 6e 64 73 20 25 6c 6c 64  understands %lld
7e80: 2e 20 20 55 73 65 64 20 66 6f 72 20 64 65 62 75  .  Used for debu
7e90: 67 67 69 6e 67 2e 0a 2a 2a 20 54 68 65 20 70 72  gging..** The pr
7ea0: 69 6e 74 66 28 29 20 62 75 69 6c 74 20 69 6e 74  intf() built int
7eb0: 6f 20 73 6f 6d 65 20 76 65 72 73 69 6f 6e 73 20  o some versions 
7ec0: 6f 66 20 77 69 6e 64 6f 77 73 20 64 6f 65 73 20  of windows does 
7ed0: 6e 6f 74 20 75 6e 64 65 72 73 74 61 6e 64 20 25  not understand %
7ee0: 6c 6c 64 0a 2a 2a 20 61 6e 64 20 73 65 67 66 61  lld.** and segfa
7ef0: 75 6c 74 73 20 69 66 20 79 6f 75 20 67 69 76 65  ults if you give
7f00: 20 69 74 20 61 20 6c 6f 6e 67 20 6c 6f 6e 67 20   it a long long 
7f10: 69 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  int..*/.void sql
7f20: 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
7f30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
7f40: 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f  mat, ...){.  va_
7f50: 6c 69 73 74 20 61 70 3b 0a 20 20 53 74 72 41 63  list ap;.  StrAc
7f60: 63 75 6d 20 61 63 63 3b 0a 20 20 63 68 61 72 20  cum acc;.  char 
7f70: 7a 42 75 66 5b 35 30 30 5d 3b 0a 20 20 73 71 6c  zBuf[500];.  sql
7f80: 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
7f90: 28 26 61 63 63 2c 20 7a 42 75 66 2c 20 73 69 7a  (&acc, zBuf, siz
7fa0: 65 6f 66 28 7a 42 75 66 29 2c 20 30 29 3b 0a 20  eof(zBuf), 0);. 
7fb0: 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d   acc.useMalloc =
7fc0: 20 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61   0;.  va_start(a
7fd0: 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 73 71  p,zFormat);.  sq
7fe0: 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61  lite3VXPrintf(&a
7ff0: 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20  cc, 0, zFormat, 
8000: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
8010: 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  );.  sqlite3StrA
8020: 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29  ccumFinish(&acc)
8030: 3b 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f  ;.  fprintf(stdo
8040: 75 74 2c 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a  ut,"%s", zBuf);.
8050: 20 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29    fflush(stdout)
8060: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
8070: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8080: 54 52 41 43 45 0a 2f 2a 0a 2a 2a 20 76 61 72 69  TRACE./*.** vari
8090: 61 62 6c 65 2d 61 72 67 75 6d 65 6e 74 20 77 72  able-argument wr
80a0: 61 70 70 65 72 20 61 72 6f 75 6e 64 20 73 71 6c  apper around sql
80b0: 69 74 65 33 56 58 50 72 69 6e 74 66 28 29 2e 0a  ite3VXPrintf()..
80c0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  */.void sqlite3X
80d0: 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 20  Printf(StrAccum 
80e0: 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
80f0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
8100: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76   va_list ap;.  v
8110: 61 5f 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d  a_start(ap,zForm
8120: 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58  at);.  sqlite3VX
8130: 50 72 69 6e 74 66 28 70 2c 20 31 2c 20 7a 46 6f  Printf(p, 1, zFo
8140: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
8150: 65 6e 64 28 61 70 29 3b 0a 7d 0a 23 65 6e 64 69  end(ap);.}.#endi
8160: 66 0a                                            f.