/ Hex Artifact Content
Login

Artifact 1cd24df913bafc0cb69dc7ae68af85cc480925aa:


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 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1c20: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20 37  PRINT_BUF_SIZE 7
1c30: 30 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  0.#endif.#define
1c40: 20 65 74 42 55 46 53 49 5a 45 20 53 51 4c 49 54   etBUFSIZE SQLIT
1c50: 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45  E_PRINT_BUF_SIZE
1c60: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
1c70: 20 6f 75 74 70 75 74 20 62 75 66 66 65 72 20 2a   output buffer *
1c80: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  /../*.** The roo
1c90: 74 20 70 72 6f 67 72 61 6d 2e 20 20 41 6c 6c 20  t program.  All 
1ca0: 76 61 72 69 61 74 69 6f 6e 73 20 63 61 6c 6c 20  variations call 
1cb0: 74 68 69 73 20 63 6f 72 65 2e 0a 2a 2a 0a 2a 2a  this core..**.**
1cc0: 20 49 4e 50 55 54 53 3a 0a 2a 2a 20 20 20 66 75   INPUTS:.**   fu
1cd0: 6e 63 20 20 20 54 68 69 73 20 69 73 20 61 20 70  nc   This is a p
1ce0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63  ointer to a func
1cf0: 74 69 6f 6e 20 74 61 6b 69 6e 67 20 74 68 72 65  tion taking thre
1d00: 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 20  e arguments.**  
1d10: 20 20 20 20 20 20 20 20 20 20 31 2e 20 41 20 70            1. A p
1d20: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79 74 68 69  ointer to anythi
1d30: 6e 67 2e 20 20 53 61 6d 65 20 61 73 20 74 68 65  ng.  Same as the
1d40: 20 22 61 72 67 22 20 70 61 72 61 6d 65 74 65 72   "arg" parameter
1d50: 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1d60: 32 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  2. A pointer to 
1d70: 74 68 65 20 6c 69 73 74 20 6f 66 20 63 68 61 72  the list of char
1d80: 61 63 74 65 72 73 20 74 6f 20 62 65 20 6f 75 74  acters to be out
1d90: 70 75 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  put.**          
1da0: 20 20 20 20 20 28 4e 6f 74 65 2c 20 74 68 69 73       (Note, this
1db0: 20 6c 69 73 74 20 69 73 20 4e 4f 54 20 6e 75 6c   list is NOT nul
1dc0: 6c 20 74 65 72 6d 69 6e 61 74 65 64 2e 29 0a 2a  l terminated.).*
1dd0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 33 2e 20  *            3. 
1de0: 41 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  An integer numbe
1df0: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
1e00: 74 6f 20 62 65 20 6f 75 74 70 75 74 2e 0a 2a 2a  to be output..**
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1e20: 4e 6f 74 65 3a 20 54 68 69 73 20 6e 75 6d 62 65  Note: This numbe
1e30: 72 20 6d 69 67 68 74 20 62 65 20 7a 65 72 6f 2e  r might be zero.
1e40: 29 0a 2a 2a 0a 2a 2a 20 20 20 61 72 67 20 20 20  ).**.**   arg   
1e50: 20 54 68 69 73 20 69 73 20 74 68 65 20 70 6f 69   This is the poi
1e60: 6e 74 65 72 20 74 6f 20 61 6e 79 74 68 69 6e 67  nter to anything
1e70: 20 77 68 69 63 68 20 77 69 6c 6c 20 62 65 20 70   which will be p
1e80: 61 73 73 65 64 20 61 73 20 74 68 65 0a 2a 2a 20  assed as the.** 
1e90: 20 20 20 20 20 20 20 20 20 66 69 72 73 74 20 61           first a
1ea0: 72 67 75 6d 65 6e 74 20 74 6f 20 22 66 75 6e 63  rgument to "func
1eb0: 22 2e 20 20 55 73 65 20 69 74 20 66 6f 72 20 77  ".  Use it for w
1ec0: 68 61 74 65 76 65 72 20 79 6f 75 20 6c 69 6b 65  hatever you like
1ed0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6d 74 20 20 20  ..**.**   fmt   
1ee0: 20 54 68 69 73 20 69 73 20 74 68 65 20 66 6f 72   This is the for
1ef0: 6d 61 74 20 73 74 72 69 6e 67 2c 20 61 73 20 69  mat string, as i
1f00: 6e 20 74 68 65 20 75 73 75 61 6c 20 70 72 69 6e  n the usual prin
1f10: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 61 70 20 20 20  t..**.**   ap   
1f20: 20 20 54 68 69 73 20 69 73 20 61 20 70 6f 69 6e    This is a poin
1f30: 74 65 72 20 74 6f 20 61 20 6c 69 73 74 20 6f 66  ter to a list of
1f40: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 53 61 6d   arguments.  Sam
1f50: 65 20 61 73 20 69 6e 0a 2a 2a 20 20 20 20 20 20  e as in.**      
1f60: 20 20 20 20 76 66 70 72 69 6e 74 2e 0a 2a 2a 0a      vfprint..**.
1f70: 2a 2a 20 4f 55 54 50 55 54 53 3a 0a 2a 2a 20 20  ** OUTPUTS:.**  
1f80: 20 20 20 20 20 20 20 20 54 68 65 20 72 65 74 75          The retu
1f90: 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  rn value is the 
1fa0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1fb0: 63 68 61 72 61 63 74 65 72 73 20 73 65 6e 74 20  characters sent 
1fc0: 74 6f 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 74  to.**          t
1fd0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 66 75 6e  he function "fun
1fe0: 63 22 2e 20 20 52 65 74 75 72 6e 73 20 2d 31 20  c".  Returns -1 
1ff0: 6f 6e 20 61 20 65 72 72 6f 72 2e 0a 2a 2a 0a 2a  on a error..**.*
2000: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
2010: 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 61  order in which a
2020: 75 74 6f 6d 61 74 69 63 20 76 61 72 69 61 62 6c  utomatic variabl
2030: 65 73 20 61 72 65 20 64 65 63 6c 61 72 65 64 20  es are declared 
2040: 62 65 6c 6f 77 0a 2a 2a 20 73 65 65 6d 73 20 74  below.** seems t
2050: 6f 20 6d 61 6b 65 20 61 20 62 69 67 20 64 69 66  o make a big dif
2060: 66 65 72 65 6e 63 65 20 69 6e 20 64 65 74 65 72  ference in deter
2070: 6d 69 6e 69 6e 67 20 68 6f 77 20 66 61 73 74 20  mining how fast 
2080: 74 68 69 73 20 62 65 61 73 74 0a 2a 2a 20 77 69  this beast.** wi
2090: 6c 6c 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64 20  ll run..*/.void 
20a0: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
20b0: 0a 20 20 53 74 72 41 63 63 75 6d 20 2a 70 41 63  .  StrAccum *pAc
20c0: 63 75 6d 2c 20 20 20 20 20 20 20 20 20 20 20 20  cum,            
20d0: 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c        /* Accumul
20e0: 61 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65  ate results here
20f0: 20 2a 2f 0a 20 20 69 6e 74 20 75 73 65 45 78 74   */.  int useExt
2100: 65 6e 64 65 64 2c 20 20 20 20 20 20 20 20 20 20  ended,          
2110: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
2120: 77 20 65 78 74 65 6e 64 65 64 20 25 2d 63 6f 6e  w extended %-con
2130: 76 65 72 73 69 6f 6e 73 20 2a 2f 0a 20 20 63 6f  versions */.  co
2140: 6e 73 74 20 63 68 61 72 20 2a 66 6d 74 2c 20 20  nst char *fmt,  
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2160: 20 2f 2a 20 46 6f 72 6d 61 74 20 73 74 72 69 6e   /* Format strin
2170: 67 20 2a 2f 0a 20 20 76 61 5f 6c 69 73 74 20 61  g */.  va_list a
2180: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
2190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 67            /* arg
21a0: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69  uments */.){.  i
21b0: 6e 74 20 63 3b 20 20 20 20 20 20 20 20 20 20 20  nt c;           
21c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
21d0: 74 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74  t character in t
21e0: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
21f0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 62 75 66 70   */.  char *bufp
2200: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2210: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
2220: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 62 75  he conversion bu
2230: 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 70 72  ffer */.  int pr
2240: 65 63 69 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  ecision;        
2250: 20 20 20 20 20 2f 2a 20 50 72 65 63 69 73 69 6f       /* Precisio
2260: 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  n of the current
2270: 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
2280: 6c 65 6e 67 74 68 3b 20 20 20 20 20 20 20 20 20  length;         
2290: 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
22a0: 20 6f 66 20 74 68 65 20 66 69 65 6c 64 20 2a 2f   of the field */
22b0: 0a 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20  .  int idx;     
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22d0: 20 41 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f   A general purpo
22e0: 73 65 20 6c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  se loop counter 
22f0: 2a 2f 0a 20 20 69 6e 74 20 77 69 64 74 68 3b 20  */.  int width; 
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2310: 2f 2a 20 57 69 64 74 68 20 6f 66 20 74 68 65 20  /* Width of the 
2320: 63 75 72 72 65 6e 74 20 66 69 65 6c 64 20 2a 2f  current field */
2330: 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c  .  etByte flag_l
2340: 65 66 74 6a 75 73 74 69 66 79 3b 20 20 20 2f 2a  eftjustify;   /*
2350: 20 54 72 75 65 20 69 66 20 22 2d 22 20 66 6c 61   True if "-" fla
2360: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  g is present */.
2370: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 70 6c    etByte flag_pl
2380: 75 73 73 69 67 6e 3b 20 20 20 20 20 20 2f 2a 20  ussign;      /* 
2390: 54 72 75 65 20 69 66 20 22 2b 22 20 66 6c 61 67  True if "+" flag
23a0: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
23b0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 62 6c 61   etByte flag_bla
23c0: 6e 6b 73 69 67 6e 3b 20 20 20 20 20 2f 2a 20 54  nksign;     /* T
23d0: 72 75 65 20 69 66 20 22 20 22 20 66 6c 61 67 20  rue if " " flag 
23e0: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
23f0: 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 65  etByte flag_alte
2400: 72 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a 20 54 72  rnateform; /* Tr
2410: 75 65 20 69 66 20 22 23 22 20 66 6c 61 67 20 69  ue if "#" flag i
2420: 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65  s present */.  e
2430: 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 66 6f  tByte flag_altfo
2440: 72 6d 32 3b 20 20 20 20 20 20 2f 2a 20 54 72 75  rm2;      /* Tru
2450: 65 20 69 66 20 22 21 22 20 66 6c 61 67 20 69 73  e if "!" flag is
2460: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74   present */.  et
2470: 42 79 74 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61  Byte flag_zeropa
2480: 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  d;       /* True
2490: 20 69 66 20 66 69 65 6c 64 20 77 69 64 74 68 20   if field width 
24a0: 63 6f 6e 73 74 61 6e 74 20 73 74 61 72 74 73 20  constant starts 
24b0: 77 69 74 68 20 7a 65 72 6f 20 2a 2f 0a 20 20 65  with zero */.  e
24c0: 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 3b  tByte flag_long;
24d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24e0: 65 20 69 66 20 22 6c 22 20 66 6c 61 67 20 69 73  e if "l" flag is
24f0: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74   present */.  et
2500: 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f  Byte flag_longlo
2510: 6e 67 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65  ng;      /* True
2520: 20 69 66 20 74 68 65 20 22 6c 6c 22 20 66 6c 61   if the "ll" fla
2530: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  g is present */.
2540: 20 20 65 74 42 79 74 65 20 64 6f 6e 65 3b 20 20    etByte done;  
2550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2560: 4c 6f 6f 70 20 74 65 72 6d 69 6e 61 74 69 6f 6e  Loop termination
2570: 20 66 6c 61 67 20 2a 2f 0a 20 20 73 71 6c 69 74   flag */.  sqlit
2580: 65 5f 75 69 6e 74 36 34 20 6c 6f 6e 67 76 61 6c  e_uint64 longval
2590: 75 65 3b 20 20 20 2f 2a 20 56 61 6c 75 65 20 66  ue;   /* Value f
25a0: 6f 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 73  or integer types
25b0: 20 2a 2f 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45   */.  LONGDOUBLE
25c0: 5f 54 59 50 45 20 72 65 61 6c 76 61 6c 75 65 3b  _TYPE realvalue;
25d0: 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20 72 65   /* Value for re
25e0: 61 6c 20 74 79 70 65 73 20 2a 2f 0a 20 20 63 6f  al types */.  co
25f0: 6e 73 74 20 65 74 5f 69 6e 66 6f 20 2a 69 6e 66  nst et_info *inf
2600: 6f 70 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  op;      /* Poin
2610: 74 65 72 20 74 6f 20 74 68 65 20 61 70 70 72 6f  ter to the appro
2620: 70 72 69 61 74 65 20 69 6e 66 6f 20 73 74 72 75  priate info stru
2630: 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
2640: 62 75 66 5b 65 74 42 55 46 53 49 5a 45 5d 3b 20  buf[etBUFSIZE]; 
2650: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73        /* Convers
2660: 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  ion buffer */.  
2670: 63 68 61 72 20 2a 7a 4f 75 74 3b 20 20 20 20 20  char *zOut;     
2680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
2690: 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72 20 2a  ndering buffer *
26a0: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26c0: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 72 65  * Size of the re
26d0: 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72 20 2a  ndering buffer *
26e0: 2f 0a 20 20 63 68 61 72 20 70 72 65 66 69 78 3b  /.  char prefix;
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2700: 2a 20 50 72 65 66 69 78 20 63 68 61 72 61 63 74  * Prefix charact
2710: 65 72 2e 20 20 22 2b 22 20 6f 72 20 22 2d 22 20  er.  "+" or "-" 
2720: 6f 72 20 22 20 22 20 6f 72 20 27 5c 30 27 2e 20  or " " or '\0'. 
2730: 2a 2f 0a 20 20 65 74 42 79 74 65 20 78 74 79 70  */.  etByte xtyp
2740: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
2750: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61  /* Conversion pa
2760: 72 61 64 69 67 6d 20 2a 2f 0a 20 20 63 68 61 72  radigm */.  char
2770: 20 2a 7a 45 78 74 72 61 3b 20 20 20 20 20 20 20   *zExtra;       
2780: 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
2790: 6d 65 6d 6f 72 79 20 75 73 65 64 20 66 6f 72 20  memory used for 
27a0: 65 74 54 43 4c 45 53 43 41 50 45 20 63 6f 6e 76  etTCLESCAPE conv
27b0: 65 72 73 69 6f 6e 73 20 2a 2f 0a 23 69 66 6e 64  ersions */.#ifnd
27c0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
27d0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
27e0: 69 6e 74 20 20 65 78 70 2c 20 65 32 3b 20 20 20  int  exp, e2;   
27f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78             /* ex
2800: 70 6f 6e 65 6e 74 20 6f 66 20 72 65 61 6c 20 6e  ponent of real n
2810: 75 6d 62 65 72 73 20 2a 2f 0a 20 20 64 6f 75 62  umbers */.  doub
2820: 6c 65 20 72 6f 75 6e 64 65 72 3b 20 20 20 20 20  le rounder;     
2830: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66         /* Used f
2840: 6f 72 20 72 6f 75 6e 64 69 6e 67 20 66 6c 6f 61  or rounding floa
2850: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
2860: 73 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  s */.  etByte fl
2870: 61 67 5f 64 70 3b 20 20 20 20 20 20 20 20 20 20  ag_dp;          
2880: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 64 65 63    /* True if dec
2890: 69 6d 61 6c 20 70 6f 69 6e 74 20 73 68 6f 75 6c  imal point shoul
28a0: 64 20 62 65 20 73 68 6f 77 6e 20 2a 2f 0a 20 20  d be shown */.  
28b0: 65 74 42 79 74 65 20 66 6c 61 67 5f 72 74 7a 3b  etByte flag_rtz;
28c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
28d0: 75 65 20 69 66 20 74 72 61 69 6c 69 6e 67 20 7a  ue if trailing z
28e0: 65 72 6f 73 20 73 68 6f 75 6c 64 20 62 65 20 72  eros should be r
28f0: 65 6d 6f 76 65 64 20 2a 2f 0a 20 20 69 6e 74 20  emoved */.  int 
2900: 6e 73 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  nsd;            
2910: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2920: 20 6f 66 20 73 69 67 6e 69 66 69 63 61 6e 74 20   of significant 
2930: 64 69 67 69 74 73 20 72 65 74 75 72 6e 65 64 20  digits returned 
2940: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 6c 65 6e  */.#endif..  len
2950: 67 74 68 20 3d 20 30 3b 0a 20 20 62 75 66 70 74  gth = 0;.  bufpt
2960: 20 3d 20 30 3b 0a 20 20 66 6f 72 28 3b 20 28 63   = 0;.  for(; (c
2970: 3d 28 2a 66 6d 74 29 29 21 3d 30 3b 20 2b 2b 66  =(*fmt))!=0; ++f
2980: 6d 74 29 7b 0a 20 20 20 20 69 66 28 20 63 21 3d  mt){.    if( c!=
2990: 27 25 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  '%' ){.      int
29a0: 20 61 6d 74 3b 0a 20 20 20 20 20 20 62 75 66 70   amt;.      bufp
29b0: 74 20 3d 20 28 63 68 61 72 20 2a 29 66 6d 74 3b  t = (char *)fmt;
29c0: 0a 20 20 20 20 20 20 61 6d 74 20 3d 20 31 3b 0a  .      amt = 1;.
29d0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d        while( (c=
29e0: 28 2a 2b 2b 66 6d 74 29 29 21 3d 27 25 27 20 26  (*++fmt))!='%' &
29f0: 26 20 63 21 3d 30 20 29 20 61 6d 74 2b 2b 3b 0a  & c!=0 ) amt++;.
2a00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72        sqlite3Str
2a10: 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63  AccumAppend(pAcc
2a20: 75 6d 2c 20 62 75 66 70 74 2c 20 61 6d 74 29 3b  um, bufpt, amt);
2a30: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20  .      if( c==0 
2a40: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20  ) break;.    }. 
2a50: 20 20 20 69 66 28 20 28 63 3d 28 2a 2b 2b 66 6d     if( (c=(*++fm
2a60: 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t))==0 ){.      
2a70: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2a80: 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 22 25  ppend(pAccum, "%
2a90: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65  ", 1);.      bre
2aa0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a  ak;.    }.    /*
2ab0: 20 46 69 6e 64 20 6f 75 74 20 77 68 61 74 20 66   Find out what f
2ac0: 6c 61 67 73 20 61 72 65 20 70 72 65 73 65 6e 74  lags are present
2ad0: 20 2a 2f 0a 20 20 20 20 66 6c 61 67 5f 6c 65 66   */.    flag_lef
2ae0: 74 6a 75 73 74 69 66 79 20 3d 20 66 6c 61 67 5f  tjustify = flag_
2af0: 70 6c 75 73 73 69 67 6e 20 3d 20 66 6c 61 67 5f  plussign = flag_
2b00: 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 0a 20 20 20  blanksign = .   
2b10: 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65    flag_alternate
2b20: 66 6f 72 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66  form = flag_altf
2b30: 6f 72 6d 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f  orm2 = flag_zero
2b40: 70 61 64 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e  pad = 0;.    don
2b50: 65 20 3d 20 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  e = 0;.    do{. 
2b60: 20 20 20 20 20 73 77 69 74 63 68 28 20 63 20 29       switch( c )
2b70: 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  {.        case '
2b80: 2d 27 3a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a  -':   flag_leftj
2b90: 75 73 74 69 66 79 20 3d 20 31 3b 20 20 20 20 20  ustify = 1;     
2ba0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2bb0: 61 73 65 20 27 2b 27 3a 20 20 20 66 6c 61 67 5f  ase '+':   flag_
2bc0: 70 6c 75 73 73 69 67 6e 20 3d 20 31 3b 20 20 20  plussign = 1;   
2bd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2be0: 20 20 20 20 63 61 73 65 20 27 20 27 3a 20 20 20      case ' ':   
2bf0: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d  flag_blanksign =
2c00: 20 31 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   1;       break;
2c10: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27 23  .        case '#
2c20: 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e  ':   flag_altern
2c30: 61 74 65 66 6f 72 6d 20 3d 20 31 3b 20 20 20 62  ateform = 1;   b
2c40: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
2c50: 73 65 20 27 21 27 3a 20 20 20 66 6c 61 67 5f 61  se '!':   flag_a
2c60: 6c 74 66 6f 72 6d 32 20 3d 20 31 3b 20 20 20 20  ltform2 = 1;    
2c70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2c80: 20 20 20 63 61 73 65 20 27 30 27 3a 20 20 20 66     case '0':   f
2c90: 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 31 3b  lag_zeropad = 1;
2ca0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2cb0: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
2cc0: 20 20 20 20 64 6f 6e 65 20 3d 20 31 3b 20 20 20      done = 1;   
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
2ce0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
2cf0: 20 7d 77 68 69 6c 65 28 20 21 64 6f 6e 65 20 26   }while( !done &
2d00: 26 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d  & (c=(*++fmt))!=
2d10: 30 20 29 3b 0a 20 20 20 20 2f 2a 20 47 65 74 20  0 );.    /* Get 
2d20: 74 68 65 20 66 69 65 6c 64 20 77 69 64 74 68 20  the field width 
2d30: 2a 2f 0a 20 20 20 20 77 69 64 74 68 20 3d 20 30  */.    width = 0
2d40: 3b 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27  ;.    if( c=='*'
2d50: 20 29 7b 0a 20 20 20 20 20 20 77 69 64 74 68 20   ){.      width 
2d60: 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29  = va_arg(ap,int)
2d70: 3b 0a 20 20 20 20 20 20 69 66 28 20 77 69 64 74  ;.      if( widt
2d80: 68 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66  h<0 ){.        f
2d90: 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20  lag_leftjustify 
2da0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 77 69 64  = 1;.        wid
2db0: 74 68 20 3d 20 2d 77 69 64 74 68 3b 0a 20 20 20  th = -width;.   
2dc0: 20 20 20 7d 0a 20 20 20 20 20 20 63 20 3d 20 2a     }.      c = *
2dd0: 2b 2b 66 6d 74 3b 0a 20 20 20 20 7d 65 6c 73 65  ++fmt;.    }else
2de0: 7b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 63  {.      while( c
2df0: 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20  >='0' && c<='9' 
2e00: 29 7b 0a 20 20 20 20 20 20 20 20 77 69 64 74 68  ){.        width
2e10: 20 3d 20 77 69 64 74 68 2a 31 30 20 2b 20 63 20   = width*10 + c 
2e20: 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 63  - '0';.        c
2e30: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
2e40: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20   }.    }.    /* 
2e50: 47 65 74 20 74 68 65 20 70 72 65 63 69 73 69 6f  Get the precisio
2e60: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d  n */.    if( c==
2e70: 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 70 72 65  '.' ){.      pre
2e80: 63 69 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20  cision = 0;.    
2e90: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
2ea0: 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29      if( c=='*' )
2eb0: 7b 0a 20 20 20 20 20 20 20 20 70 72 65 63 69 73  {.        precis
2ec0: 69 6f 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  ion = va_arg(ap,
2ed0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
2ee0: 28 20 70 72 65 63 69 73 69 6f 6e 3c 30 20 29 20  ( precision<0 ) 
2ef0: 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 70 72 65  precision = -pre
2f00: 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20  cision;.        
2f10: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20  c = *++fmt;.    
2f20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2f30: 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26   while( c>='0' &
2f40: 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20  & c<='9' ){.    
2f50: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
2f60: 3d 20 70 72 65 63 69 73 69 6f 6e 2a 31 30 20 2b  = precision*10 +
2f70: 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20   c - '0';.      
2f80: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
2f90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2fa0: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
2fb0: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d     precision = -
2fc0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20  1;.    }.    /* 
2fd0: 47 65 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  Get the conversi
2fe0: 6f 6e 20 74 79 70 65 20 6d 6f 64 69 66 69 65 72  on type modifier
2ff0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27   */.    if( c=='
3000: 6c 27 20 29 7b 0a 20 20 20 20 20 20 66 6c 61 67  l' ){.      flag
3010: 5f 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20  _long = 1;.     
3020: 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20   c = *++fmt;.   
3030: 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b     if( c=='l' ){
3040: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f  .        flag_lo
3050: 6e 67 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20  nglong = 1;.    
3060: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
3070: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3080: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f       flag_longlo
3090: 6e 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ng = 0;.      }.
30a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
30b0: 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c 61   flag_long = fla
30c0: 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a  g_longlong = 0;.
30d0: 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 65 74      }.    /* Fet
30e0: 63 68 20 74 68 65 20 69 6e 66 6f 20 65 6e 74 72  ch the info entr
30f0: 79 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 20  y for the field 
3100: 2a 2f 0a 20 20 20 20 69 6e 66 6f 70 20 3d 20 26  */.    infop = &
3110: 66 6d 74 69 6e 66 6f 5b 30 5d 3b 0a 20 20 20 20  fmtinfo[0];.    
3120: 78 74 79 70 65 20 3d 20 65 74 49 4e 56 41 4c 49  xtype = etINVALI
3130: 44 3b 0a 20 20 20 20 66 6f 72 28 69 64 78 3d 30  D;.    for(idx=0
3140: 3b 20 69 64 78 3c 41 72 72 61 79 53 69 7a 65 28  ; idx<ArraySize(
3150: 66 6d 74 69 6e 66 6f 29 3b 20 69 64 78 2b 2b 29  fmtinfo); idx++)
3160: 7b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 66  {.      if( c==f
3170: 6d 74 69 6e 66 6f 5b 69 64 78 5d 2e 66 6d 74 74  mtinfo[idx].fmtt
3180: 79 70 65 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ype ){.        i
3190: 6e 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f 5b  nfop = &fmtinfo[
31a0: 69 64 78 5d 3b 0a 20 20 20 20 20 20 20 20 69 66  idx];.        if
31b0: 28 20 75 73 65 45 78 74 65 6e 64 65 64 20 7c 7c  ( useExtended ||
31c0: 20 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26   (infop->flags &
31d0: 20 46 4c 41 47 5f 49 4e 54 45 52 4e 29 3d 3d 30   FLAG_INTERN)==0
31e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78 74   ){.          xt
31f0: 79 70 65 20 3d 20 69 6e 66 6f 70 2d 3e 74 79 70  ype = infop->typ
3200: 65 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  e;.        }else
3210: 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  {.          retu
3220: 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
3230: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3240: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a     }.    }.    z
3250: 45 78 74 72 61 20 3d 20 30 3b 0a 0a 20 20 20 20  Extra = 0;..    
3260: 2f 2a 0a 20 20 20 20 2a 2a 20 41 74 20 74 68 69  /*.    ** At thi
3270: 73 20 70 6f 69 6e 74 2c 20 76 61 72 69 61 62 6c  s point, variabl
3280: 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
3290: 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  ed as follows:. 
32a0: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20 66     **.    **   f
32b0: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
32c0: 6d 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20  m          TRUE 
32d0: 69 66 20 61 20 27 23 27 20 69 73 20 70 72 65 73  if a '#' is pres
32e0: 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c  ent..    **   fl
32f0: 61 67 5f 61 6c 74 66 6f 72 6d 32 20 20 20 20 20  ag_altform2     
3300: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69            TRUE i
3310: 66 20 61 20 27 21 27 20 69 73 20 70 72 65 73 65  f a '!' is prese
3320: 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  nt..    **   fla
3330: 67 5f 70 6c 75 73 73 69 67 6e 20 20 20 20 20 20  g_plussign      
3340: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
3350: 20 61 20 27 2b 27 20 69 73 20 70 72 65 73 65 6e   a '+' is presen
3360: 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67  t..    **   flag
3370: 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 20 20 20  _leftjustify    
3380: 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20          TRUE if 
3390: 61 20 27 2d 27 20 69 73 20 70 72 65 73 65 6e 74  a '-' is present
33a0: 20 6f 72 20 69 66 20 74 68 65 0a 20 20 20 20 2a   or if the.    *
33b0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d0: 66 69 65 6c 64 20 77 69 64 74 68 20 77 61 73 20  field width was 
33e0: 6e 65 67 61 74 69 76 65 2e 0a 20 20 20 20 2a 2a  negative..    **
33f0: 20 20 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20     flag_zeropad 
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3410: 52 55 45 20 69 66 20 74 68 65 20 77 69 64 74 68  RUE if the width
3420: 20 62 65 67 61 6e 20 77 69 74 68 20 30 2e 0a 20   began with 0.. 
3430: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f 6e     **   flag_lon
3440: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
3450: 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20      TRUE if the 
3460: 6c 65 74 74 65 72 20 27 6c 27 20 28 65 6c 6c 29  letter 'l' (ell)
3470: 20 70 72 65 66 69 78 65 64 0a 20 20 20 20 2a 2a   prefixed.    **
3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
34a0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68  he conversion ch
34b0: 61 72 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a 20  aracter..    ** 
34c0: 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20    flag_longlong 
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
34e0: 55 45 20 69 66 20 74 68 65 20 6c 65 74 74 65 72  UE if the letter
34f0: 20 27 6c 6c 27 20 28 65 6c 6c 20 65 6c 6c 29 20   'll' (ell ell) 
3500: 70 72 65 66 69 78 65 64 0a 20 20 20 20 2a 2a 20  prefixed.    ** 
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
3530: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68 61  e conversion cha
3540: 72 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a 20 20  racter..    **  
3550: 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20   flag_blanksign 
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55               TRU
3570: 45 20 69 66 20 61 20 27 20 27 20 69 73 20 70 72  E if a ' ' is pr
3580: 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20  esent..    **   
3590: 77 69 64 74 68 20 20 20 20 20 20 20 20 20 20 20  width           
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20              The 
35b0: 73 70 65 63 69 66 69 65 64 20 66 69 65 6c 64 20  specified field 
35c0: 77 69 64 74 68 2e 20 20 54 68 69 73 20 69 73 0a  width.  This is.
35d0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f0: 20 20 20 20 20 61 6c 77 61 79 73 20 6e 6f 6e 2d       always non-
3600: 6e 65 67 61 74 69 76 65 2e 20 20 5a 65 72 6f 20  negative.  Zero 
3610: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  is the default..
3620: 20 20 20 20 2a 2a 20 20 20 70 72 65 63 69 73 69      **   precisi
3630: 6f 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  on              
3640: 20 20 20 20 20 54 68 65 20 73 70 65 63 69 66 69       The specifi
3650: 65 64 20 70 72 65 63 69 73 69 6f 6e 2e 20 20 54  ed precision.  T
3660: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 20 20 2a  he default.    *
3670: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
3680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3690: 69 73 20 2d 31 2e 0a 20 20 20 20 2a 2a 20 20 20  is -1..    **   
36a0: 78 74 79 70 65 20 20 20 20 20 20 20 20 20 20 20  xtype           
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20              The 
36c0: 63 6c 61 73 73 20 6f 66 20 74 68 65 20 63 6f 6e  class of the con
36d0: 76 65 72 73 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  version..    ** 
36e0: 20 20 69 6e 66 6f 70 20 20 20 20 20 20 20 20 20    infop         
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 6f                Po
3700: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 70 70  inter to the app
3710: 72 6f 70 72 69 61 74 65 20 69 6e 66 6f 20 73 74  ropriate info st
3720: 72 75 63 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ruct..    */.   
3730: 20 73 77 69 74 63 68 28 20 78 74 79 70 65 20 29   switch( xtype )
3740: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 50  {.      case etP
3750: 4f 49 4e 54 45 52 3a 0a 20 20 20 20 20 20 20 20  OINTER:.        
3760: 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20  flag_longlong = 
3770: 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d 73  sizeof(char*)==s
3780: 69 7a 65 6f 66 28 69 36 34 29 3b 0a 20 20 20 20  izeof(i64);.    
3790: 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20      flag_long = 
37a0: 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d 73  sizeof(char*)==s
37b0: 69 7a 65 6f 66 28 6c 6f 6e 67 20 69 6e 74 29 3b  izeof(long int);
37c0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 6c  .        /* Fall
37d0: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 74 68   through into th
37e0: 65 20 6e 65 78 74 20 63 61 73 65 20 2a 2f 0a 20  e next case */. 
37f0: 20 20 20 20 20 63 61 73 65 20 65 74 4f 52 44 49       case etORDI
3800: 4e 41 4c 3a 0a 20 20 20 20 20 20 63 61 73 65 20  NAL:.      case 
3810: 65 74 52 41 44 49 58 3a 0a 20 20 20 20 20 20 20  etRADIX:.       
3820: 20 69 66 28 20 69 6e 66 6f 70 2d 3e 66 6c 61 67   if( infop->flag
3830: 73 20 26 20 46 4c 41 47 5f 53 49 47 4e 45 44 20  s & FLAG_SIGNED 
3840: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 36 34  ){.          i64
3850: 20 76 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   v;.          if
3860: 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20  ( flag_longlong 
3870: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  ){.            v
3880: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 36 34   = va_arg(ap,i64
3890: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
38a0: 73 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67  se if( flag_long
38b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
38c0: 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 6c 6f  v = va_arg(ap,lo
38d0: 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ng int);.       
38e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
38f0: 20 20 20 20 20 20 76 20 3d 20 76 61 5f 61 72 67        v = va_arg
3900: 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20  (ap,int);.      
3910: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
3920: 69 66 28 20 76 3c 30 20 29 7b 0a 20 20 20 20 20  if( v<0 ){.     
3930: 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 53 4d         if( v==SM
3940: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 7b 0a  ALLEST_INT64 ){.
3950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
3960: 6e 67 76 61 6c 75 65 20 3d 20 28 28 75 36 34 29  ngvalue = ((u64)
3970: 31 29 3c 3c 36 33 3b 0a 20 20 20 20 20 20 20 20  1)<<63;.        
3980: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3990: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
39a0: 75 65 20 3d 20 2d 76 3b 0a 20 20 20 20 20 20 20  ue = -v;.       
39b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
39c0: 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d 27 3b     prefix = '-';
39d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
39e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  {.            lo
39f0: 6e 67 76 61 6c 75 65 20 3d 20 76 3b 0a 20 20 20  ngvalue = v;.   
3a00: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
3a10: 67 5f 70 6c 75 73 73 69 67 6e 20 29 20 20 20 20  g_plussign )    
3a20: 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2b 27      prefix = '+'
3a30: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ;.            el
3a40: 73 65 20 69 66 28 20 66 6c 61 67 5f 62 6c 61 6e  se if( flag_blan
3a50: 6b 73 69 67 6e 20 29 20 20 70 72 65 66 69 78 20  ksign )  prefix 
3a60: 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20  = ' ';.         
3a70: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20     else         
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
3a90: 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  efix = 0;.      
3aa0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
3ab0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
3ac0: 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67  f( flag_longlong
3ad0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
3ae0: 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61  longvalue = va_a
3af0: 72 67 28 61 70 2c 75 36 34 29 3b 0a 20 20 20 20  rg(ap,u64);.    
3b00: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
3b10: 66 6c 61 67 5f 6c 6f 6e 67 20 29 7b 0a 20 20 20  flag_long ){.   
3b20: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
3b30: 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 75  ue = va_arg(ap,u
3b40: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 6e 74  nsigned long int
3b50: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
3b60: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
3b70: 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61  longvalue = va_a
3b80: 72 67 28 61 70 2c 75 6e 73 69 67 6e 65 64 20 69  rg(ap,unsigned i
3b90: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  nt);.          }
3ba0: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69  .          prefi
3bb0: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  x = 0;.        }
3bc0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c 6f 6e  .        if( lon
3bd0: 67 76 61 6c 75 65 3d 3d 30 20 29 20 66 6c 61 67  gvalue==0 ) flag
3be0: 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3d  _alternateform =
3bf0: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
3c00: 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26 26 20  flag_zeropad && 
3c10: 70 72 65 63 69 73 69 6f 6e 3c 77 69 64 74 68 2d  precision<width-
3c20: 28 70 72 65 66 69 78 21 3d 30 29 20 29 7b 0a 20  (prefix!=0) ){. 
3c30: 20 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69           precisi
3c40: 6f 6e 20 3d 20 77 69 64 74 68 2d 28 70 72 65 66  on = width-(pref
3c50: 69 78 21 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  ix!=0);.        
3c60: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  }.        if( pr
3c70: 65 63 69 73 69 6f 6e 3c 65 74 42 55 46 53 49 5a  ecision<etBUFSIZ
3c80: 45 2d 31 30 20 29 7b 0a 20 20 20 20 20 20 20 20  E-10 ){.        
3c90: 20 20 6e 4f 75 74 20 3d 20 65 74 42 55 46 53 49    nOut = etBUFSI
3ca0: 5a 45 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 4f  ZE;.          zO
3cb0: 75 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20  ut = buf;.      
3cc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3cd0: 20 20 20 6e 4f 75 74 20 3d 20 70 72 65 63 69 73     nOut = precis
3ce0: 69 6f 6e 20 2b 20 31 30 3b 0a 20 20 20 20 20 20  ion + 10;.      
3cf0: 20 20 20 20 7a 4f 75 74 20 3d 20 7a 45 78 74 72      zOut = zExtr
3d00: 61 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  a = sqlite3Mallo
3d10: 63 28 20 6e 4f 75 74 20 29 3b 0a 20 20 20 20 20  c( nOut );.     
3d20: 20 20 20 20 20 69 66 28 20 7a 4f 75 74 3d 3d 30       if( zOut==0
3d30: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
3d40: 70 41 63 63 75 6d 2d 3e 6d 61 6c 6c 6f 63 46 61  pAccum->mallocFa
3d50: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
3d60: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
3d70: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3d80: 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70    }.        bufp
3d90: 74 20 3d 20 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31  t = &zOut[nOut-1
3da0: 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78  ];.        if( x
3db0: 74 79 70 65 3d 3d 65 74 4f 52 44 49 4e 41 4c 20  type==etORDINAL 
3dc0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74 61  ){.          sta
3dd0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a  tic const char z
3de0: 4f 72 64 5b 5d 20 3d 20 22 74 68 73 74 6e 64 72  Ord[] = "thstndr
3df0: 64 22 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  d";.          in
3e00: 74 20 78 20 3d 20 28 69 6e 74 29 28 6c 6f 6e 67  t x = (int)(long
3e10: 76 61 6c 75 65 20 25 20 31 30 29 3b 0a 20 20 20  value % 10);.   
3e20: 20 20 20 20 20 20 20 69 66 28 20 78 3e 3d 34 20         if( x>=4 
3e30: 7c 7c 20 28 6c 6f 6e 67 76 61 6c 75 65 2f 31 30  || (longvalue/10
3e40: 29 25 31 30 3d 3d 31 20 29 7b 0a 20 20 20 20 20  )%10==1 ){.     
3e50: 20 20 20 20 20 20 20 78 20 3d 20 30 3b 0a 20 20         x = 0;.  
3e60: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3e70: 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d      *(--bufpt) =
3e80: 20 7a 4f 72 64 5b 78 2a 32 2b 31 5d 3b 0a 20 20   zOrd[x*2+1];.  
3e90: 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70          *(--bufp
3ea0: 74 29 20 3d 20 7a 4f 72 64 5b 78 2a 32 5d 3b 0a  t) = zOrd[x*2];.
3eb0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3ec0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65    {.          re
3ed0: 67 69 73 74 65 72 20 63 6f 6e 73 74 20 63 68 61  gister const cha
3ee0: 72 20 2a 63 73 65 74 3b 20 20 20 20 20 20 2f 2a  r *cset;      /*
3ef0: 20 55 73 65 20 72 65 67 69 73 74 65 72 73 20 66   Use registers f
3f00: 6f 72 20 73 70 65 65 64 20 2a 2f 0a 20 20 20 20  or speed */.    
3f10: 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20 69        register i
3f20: 6e 74 20 62 61 73 65 3b 0a 20 20 20 20 20 20 20  nt base;.       
3f30: 20 20 20 63 73 65 74 20 3d 20 26 61 44 69 67 69     cset = &aDigi
3f40: 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61 72 73 65  ts[infop->charse
3f50: 74 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 62 61  t];.          ba
3f60: 73 65 20 3d 20 69 6e 66 6f 70 2d 3e 62 61 73 65  se = infop->base
3f70: 3b 0a 20 20 20 20 20 20 20 20 20 20 64 6f 7b 20  ;.          do{ 
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
3fb0: 76 65 72 74 20 74 6f 20 61 73 63 69 69 20 2a 2f  vert to ascii */
3fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 2d  .            *(-
3fd0: 2d 62 75 66 70 74 29 20 3d 20 63 73 65 74 5b 6c  -bufpt) = cset[l
3fe0: 6f 6e 67 76 61 6c 75 65 25 62 61 73 65 5d 3b 0a  ongvalue%base];.
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
4000: 76 61 6c 75 65 20 3d 20 6c 6f 6e 67 76 61 6c 75  value = longvalu
4010: 65 2f 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20  e/base;.        
4020: 20 20 7d 77 68 69 6c 65 28 20 6c 6f 6e 67 76 61    }while( longva
4030: 6c 75 65 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  lue>0 );.       
4040: 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74   }.        lengt
4050: 68 20 3d 20 28 69 6e 74 29 28 26 7a 4f 75 74 5b  h = (int)(&zOut[
4060: 6e 4f 75 74 2d 31 5d 2d 62 75 66 70 74 29 3b 0a  nOut-1]-bufpt);.
4070: 20 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d          for(idx=
4080: 70 72 65 63 69 73 69 6f 6e 2d 6c 65 6e 67 74 68  precision-length
4090: 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d 29 7b  ; idx>0; idx--){
40a0: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62  .          *(--b
40b0: 75 66 70 74 29 20 3d 20 27 30 27 3b 20 20 20 20  ufpt) = '0';    
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
40e0: 20 70 61 64 20 2a 2f 0a 20 20 20 20 20 20 20 20   pad */.        
40f0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  }.        if( pr
4100: 65 66 69 78 20 29 20 2a 28 2d 2d 62 75 66 70 74  efix ) *(--bufpt
4110: 29 20 3d 20 70 72 65 66 69 78 3b 20 20 20 20 20  ) = prefix;     
4120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
4130: 20 73 69 67 6e 20 2a 2f 0a 20 20 20 20 20 20 20   sign */.       
4140: 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 65 72 6e   if( flag_altern
4150: 61 74 65 66 6f 72 6d 20 26 26 20 69 6e 66 6f 70  ateform && infop
4160: 2d 3e 70 72 65 66 69 78 20 29 7b 20 20 20 20 20  ->prefix ){     
4170: 20 2f 2a 20 41 64 64 20 22 30 22 20 6f 72 20 22   /* Add "0" or "
4180: 30 78 22 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  0x" */.         
4190: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 72 65   const char *pre
41a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  ;.          char
41b0: 20 78 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72   x;.          pr
41c0: 65 20 3d 20 26 61 50 72 65 66 69 78 5b 69 6e 66  e = &aPrefix[inf
41d0: 6f 70 2d 3e 70 72 65 66 69 78 5d 3b 0a 20 20 20  op->prefix];.   
41e0: 20 20 20 20 20 20 20 66 6f 72 28 3b 20 28 78 3d         for(; (x=
41f0: 28 2a 70 72 65 29 29 21 3d 30 3b 20 70 72 65 2b  (*pre))!=0; pre+
4200: 2b 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20  +) *(--bufpt) = 
4210: 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  x;.        }.   
4220: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 28 69       length = (i
4230: 6e 74 29 28 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31  nt)(&zOut[nOut-1
4240: 5d 2d 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  ]-bufpt);.      
4250: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
4260: 61 73 65 20 65 74 46 4c 4f 41 54 3a 0a 20 20 20  ase etFLOAT:.   
4270: 20 20 20 63 61 73 65 20 65 74 45 58 50 3a 0a 20     case etEXP:. 
4280: 20 20 20 20 20 63 61 73 65 20 65 74 47 45 4e 45       case etGENE
4290: 52 49 43 3a 0a 20 20 20 20 20 20 20 20 72 65 61  RIC:.        rea
42a0: 6c 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28  lvalue = va_arg(
42b0: 61 70 2c 64 6f 75 62 6c 65 29 3b 0a 23 69 66 64  ap,double);.#ifd
42c0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
42d0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
42e0: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 30        length = 0
42f0: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 20 20  ;.#else.        
4300: 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30 20  if( precision<0 
4310: 29 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 36 3b  ) precision = 6;
4320: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 74 20           /* Set 
4330: 64 65 66 61 75 6c 74 20 70 72 65 63 69 73 69 6f  default precisio
4340: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  n */.        if(
4350: 20 72 65 61 6c 76 61 6c 75 65 3c 30 2e 30 20 29   realvalue<0.0 )
4360: 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61 6c  {.          real
4370: 76 61 6c 75 65 20 3d 20 2d 72 65 61 6c 76 61 6c  value = -realval
4380: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ue;.          pr
4390: 65 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20  efix = '-';.    
43a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
43b0: 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 70 6c       if( flag_pl
43c0: 75 73 73 69 67 6e 20 29 20 20 20 20 20 20 20 20  ussign )        
43d0: 20 20 70 72 65 66 69 78 20 3d 20 27 2b 27 3b 0a    prefix = '+';.
43e0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
43f0: 66 28 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67  f( flag_blanksig
4400: 6e 20 29 20 20 20 20 70 72 65 66 69 78 20 3d 20  n )    prefix = 
4410: 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20 20 65  ' ';.          e
4420: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
4430: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 66              pref
4440: 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ix = 0;.        
4450: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74  }.        if( xt
4460: 79 70 65 3d 3d 65 74 47 45 4e 45 52 49 43 20 26  ype==etGENERIC &
4470: 26 20 70 72 65 63 69 73 69 6f 6e 3e 30 20 29 20  & precision>0 ) 
4480: 70 72 65 63 69 73 69 6f 6e 2d 2d 3b 0a 23 69 66  precision--;.#if
4490: 20 30 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 6f   0.        /* Ro
44a0: 75 6e 64 69 6e 67 20 77 6f 72 6b 73 20 6c 69 6b  unding works lik
44b0: 65 20 42 53 44 20 77 68 65 6e 20 74 68 65 20 63  e BSD when the c
44c0: 6f 6e 73 74 61 6e 74 20 30 2e 34 39 39 39 20 69  onstant 0.4999 i
44d0: 73 20 75 73 65 64 2e 20 20 57 69 65 72 64 21 20  s used.  Wierd! 
44e0: 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  */.        for(i
44f0: 64 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20 72 6f  dx=precision, ro
4500: 75 6e 64 65 72 3d 30 2e 34 39 39 39 3b 20 69 64  under=0.4999; id
4510: 78 3e 30 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e  x>0; idx--, roun
4520: 64 65 72 2a 3d 30 2e 31 29 3b 0a 23 65 6c 73 65  der*=0.1);.#else
4530: 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 74 20 6d  .        /* It m
4540: 61 6b 65 73 20 6d 6f 72 65 20 73 65 6e 73 65 20  akes more sense 
4550: 74 6f 20 75 73 65 20 30 2e 35 20 2a 2f 0a 20 20  to use 0.5 */.  
4560: 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d 70 72        for(idx=pr
4570: 65 63 69 73 69 6f 6e 2c 20 72 6f 75 6e 64 65 72  ecision, rounder
4580: 3d 30 2e 35 3b 20 69 64 78 3e 30 3b 20 69 64 78  =0.5; idx>0; idx
4590: 2d 2d 2c 20 72 6f 75 6e 64 65 72 2a 3d 30 2e 31  --, rounder*=0.1
45a0: 29 7b 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  ){}.#endif.     
45b0: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74     if( xtype==et
45c0: 46 4c 4f 41 54 20 29 20 72 65 61 6c 76 61 6c 75  FLOAT ) realvalu
45d0: 65 20 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20  e += rounder;.  
45e0: 20 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 69        /* Normali
45f0: 7a 65 20 72 65 61 6c 76 61 6c 75 65 20 74 6f 20  ze realvalue to 
4600: 77 69 74 68 69 6e 20 31 30 2e 30 20 3e 20 72 65  within 10.0 > re
4610: 61 6c 76 61 6c 75 65 20 3e 3d 20 31 2e 30 20 2a  alvalue >= 1.0 *
4620: 2f 0a 20 20 20 20 20 20 20 20 65 78 70 20 3d 20  /.        exp = 
4630: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  0;.        if( s
4640: 71 6c 69 74 65 33 49 73 4e 61 4e 28 28 64 6f 75  qlite3IsNaN((dou
4650: 62 6c 65 29 72 65 61 6c 76 61 6c 75 65 29 20 29  ble)realvalue) )
4660: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70  {.          bufp
4670: 74 20 3d 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20  t = "NaN";.     
4680: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b       length = 3;
4690: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
46a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
46b0: 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75      if( realvalu
46c0: 65 3e 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20  e>0.0 ){.       
46d0: 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61     while( realva
46e0: 6c 75 65 3e 3d 31 65 33 32 20 26 26 20 65 78 70  lue>=1e32 && exp
46f0: 3c 3d 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c  <=350 ){ realval
4700: 75 65 20 2a 3d 20 31 65 2d 33 32 3b 20 65 78 70  ue *= 1e-32; exp
4710: 2b 3d 33 32 3b 20 7d 0a 20 20 20 20 20 20 20 20  +=32; }.        
4720: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
4730: 75 65 3e 3d 31 65 38 20 26 26 20 65 78 70 3c 3d  ue>=1e8 && exp<=
4740: 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65  350 ){ realvalue
4750: 20 2a 3d 20 31 65 2d 38 3b 20 65 78 70 2b 3d 38   *= 1e-8; exp+=8
4760: 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68  ; }.          wh
4770: 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d  ile( realvalue>=
4780: 31 30 2e 30 20 26 26 20 65 78 70 3c 3d 33 35 30  10.0 && exp<=350
4790: 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d   ){ realvalue *=
47a0: 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20   0.1; exp++; }. 
47b0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
47c0: 72 65 61 6c 76 61 6c 75 65 3c 31 65 2d 38 20 29  realvalue<1e-8 )
47d0: 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31  { realvalue *= 1
47e0: 65 38 3b 20 65 78 70 2d 3d 38 3b 20 7d 0a 20 20  e8; exp-=8; }.  
47f0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72          while( r
4800: 65 61 6c 76 61 6c 75 65 3c 31 2e 30 20 29 7b 20  ealvalue<1.0 ){ 
4810: 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31 30 2e  realvalue *= 10.
4820: 30 3b 20 65 78 70 2d 2d 3b 20 7d 0a 20 20 20 20  0; exp--; }.    
4830: 20 20 20 20 20 20 69 66 28 20 65 78 70 3e 33 35        if( exp>35
4840: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
4850: 20 69 66 28 20 70 72 65 66 69 78 3d 3d 27 2d 27   if( prefix=='-'
4860: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
4870: 20 20 62 75 66 70 74 20 3d 20 22 2d 49 6e 66 22    bufpt = "-Inf"
4880: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
4890: 6c 73 65 20 69 66 28 20 70 72 65 66 69 78 3d 3d  lse if( prefix==
48a0: 27 2b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '+' ){.         
48b0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 2b 49       bufpt = "+I
48c0: 6e 66 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20  nf";.           
48d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
48e0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 49        bufpt = "I
48f0: 6e 66 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20  nf";.           
4900: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c   }.            l
4910: 65 6e 67 74 68 20 3d 20 73 71 6c 69 74 65 33 53  ength = sqlite3S
4920: 74 72 6c 65 6e 33 30 28 62 75 66 70 74 29 3b 0a  trlen30(bufpt);.
4930: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4940: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
4950: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4960: 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20   bufpt = buf;.  
4970: 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20        /*.       
4980: 20 2a 2a 20 49 66 20 74 68 65 20 66 69 65 6c 64   ** If the field
4990: 20 74 79 70 65 20 69 73 20 65 74 47 45 4e 45 52   type is etGENER
49a0: 49 43 2c 20 74 68 65 6e 20 63 6f 6e 76 65 72 74  IC, then convert
49b0: 20 74 6f 20 65 69 74 68 65 72 20 65 74 45 58 50   to either etEXP
49c0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 65  .        ** or e
49d0: 74 46 4c 4f 41 54 2c 20 61 73 20 61 70 70 72 6f  tFLOAT, as appro
49e0: 70 72 69 61 74 65 2e 0a 20 20 20 20 20 20 20 20  priate..        
49f0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 78  */.        if( x
4a00: 74 79 70 65 21 3d 65 74 46 4c 4f 41 54 20 29 7b  type!=etFLOAT ){
4a10: 0a 20 20 20 20 20 20 20 20 20 20 72 65 61 6c 76  .          realv
4a20: 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65 72 3b  alue += rounder;
4a30: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
4a40: 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 20 29  ealvalue>=10.0 )
4a50: 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 30  { realvalue *= 0
4a60: 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20 20  .1; exp++; }.   
4a70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
4a80: 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45 4e 45  f( xtype==etGENE
4a90: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 20 20 20  RIC ){.         
4aa0: 20 66 6c 61 67 5f 72 74 7a 20 3d 20 21 66 6c 61   flag_rtz = !fla
4ab0: 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 3b  g_alternateform;
4ac0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 65  .          if( e
4ad0: 78 70 3c 2d 34 20 7c 7c 20 65 78 70 3e 70 72 65  xp<-4 || exp>pre
4ae0: 63 69 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  cision ){.      
4af0: 20 20 20 20 20 20 78 74 79 70 65 20 3d 20 65 74        xtype = et
4b00: 45 58 50 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  EXP;.          }
4b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
4b20: 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 70 72    precision = pr
4b30: 65 63 69 73 69 6f 6e 20 2d 20 65 78 70 3b 0a 20  ecision - exp;. 
4b40: 20 20 20 20 20 20 20 20 20 20 20 78 74 79 70 65             xtype
4b50: 20 3d 20 65 74 46 4c 4f 41 54 3b 0a 20 20 20 20   = etFLOAT;.    
4b60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4b70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4b80: 20 66 6c 61 67 5f 72 74 7a 20 3d 20 30 3b 0a 20   flag_rtz = 0;. 
4b90: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4ba0: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 45 58   if( xtype==etEX
4bb0: 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65  P ){.          e
4bc0: 32 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  2 = 0;.        }
4bd0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
4be0: 65 32 20 3d 20 65 78 70 3b 0a 20 20 20 20 20 20  e2 = exp;.      
4bf0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
4c00: 65 32 2b 70 72 65 63 69 73 69 6f 6e 2b 77 69 64  e2+precision+wid
4c10: 74 68 20 3e 20 65 74 42 55 46 53 49 5a 45 20 2d  th > etBUFSIZE -
4c20: 20 31 35 20 29 7b 0a 20 20 20 20 20 20 20 20 20   15 ){.         
4c30: 20 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20   bufpt = zExtra 
4c40: 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28  = sqlite3Malloc(
4c50: 20 65 32 2b 70 72 65 63 69 73 69 6f 6e 2b 77 69   e2+precision+wi
4c60: 64 74 68 2b 31 35 20 29 3b 0a 20 20 20 20 20 20  dth+15 );.      
4c70: 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d 30      if( bufpt==0
4c80: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
4c90: 70 41 63 63 75 6d 2d 3e 6d 61 6c 6c 6f 63 46 61  pAccum->mallocFa
4ca0: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
4cb0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
4cc0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4cd0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 4f 75 74    }.        zOut
4ce0: 20 3d 20 62 75 66 70 74 3b 0a 20 20 20 20 20 20   = bufpt;.      
4cf0: 20 20 6e 73 64 20 3d 20 30 3b 0a 20 20 20 20 20    nsd = 0;.     
4d00: 20 20 20 66 6c 61 67 5f 64 70 20 3d 20 28 70 72     flag_dp = (pr
4d10: 65 63 69 73 69 6f 6e 3e 30 20 3f 31 3a 30 29 20  ecision>0 ?1:0) 
4d20: 7c 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65  | flag_alternate
4d30: 66 6f 72 6d 20 7c 20 66 6c 61 67 5f 61 6c 74 66  form | flag_altf
4d40: 6f 72 6d 32 3b 0a 20 20 20 20 20 20 20 20 2f 2a  orm2;.        /*
4d50: 20 54 68 65 20 73 69 67 6e 20 69 6e 20 66 72 6f   The sign in fro
4d60: 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  nt of the number
4d70: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
4d80: 70 72 65 66 69 78 20 29 7b 0a 20 20 20 20 20 20  prefix ){.      
4d90: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
4da0: 20 70 72 65 66 69 78 3b 0a 20 20 20 20 20 20 20   prefix;.       
4db0: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69   }.        /* Di
4dc0: 67 69 74 73 20 70 72 69 6f 72 20 74 6f 20 74 68  gits prior to th
4dd0: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
4de0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 65  */.        if( e
4df0: 32 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  2<0 ){.         
4e00: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 30   *(bufpt++) = '0
4e10: 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ';.        }else
4e20: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
4e30: 3b 20 65 32 3e 3d 30 3b 20 65 32 2d 2d 29 7b 0a  ; e2>=0; e2--){.
4e40: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
4e50: 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65 74 64  fpt++) = et_getd
4e60: 69 67 69 74 28 26 72 65 61 6c 76 61 6c 75 65 2c  igit(&realvalue,
4e70: 26 6e 73 64 29 3b 0a 20 20 20 20 20 20 20 20 20  &nsd);.         
4e80: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
4e90: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 63 69       /* The deci
4ea0: 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20  mal point */.   
4eb0: 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 64 70       if( flag_dp
4ec0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28   ){.          *(
4ed0: 62 75 66 70 74 2b 2b 29 20 3d 20 27 2e 27 3b 0a  bufpt++) = '.';.
4ee0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4ef0: 20 20 2f 2a 20 22 30 22 20 64 69 67 69 74 73 20    /* "0" digits 
4f00: 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d 61  after the decima
4f10: 6c 20 70 6f 69 6e 74 20 62 75 74 20 62 65 66 6f  l point but befo
4f20: 72 65 20 74 68 65 20 66 69 72 73 74 0a 20 20 20  re the first.   
4f30: 20 20 20 20 20 2a 2a 20 73 69 67 6e 69 66 69 63       ** signific
4f40: 61 6e 74 20 64 69 67 69 74 20 6f 66 20 74 68 65  ant digit of the
4f50: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
4f60: 20 20 20 66 6f 72 28 65 32 2b 2b 3b 20 65 32 3c     for(e2++; e2<
4f70: 30 3b 20 70 72 65 63 69 73 69 6f 6e 2d 2d 2c 20  0; precision--, 
4f80: 65 32 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  e2++){.         
4f90: 20 61 73 73 65 72 74 28 20 70 72 65 63 69 73 69   assert( precisi
4fa0: 6f 6e 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  on>0 );.        
4fb0: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27    *(bufpt++) = '
4fc0: 30 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0';.        }.  
4fd0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 69 66 69        /* Signifi
4fe0: 63 61 6e 74 20 64 69 67 69 74 73 20 61 66 74 65  cant digits afte
4ff0: 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  r the decimal po
5000: 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 77  int */.        w
5010: 68 69 6c 65 28 20 28 70 72 65 63 69 73 69 6f 6e  hile( (precision
5020: 2d 2d 29 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  --)>0 ){.       
5030: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
5040: 65 74 5f 67 65 74 64 69 67 69 74 28 26 72 65 61  et_getdigit(&rea
5050: 6c 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20  lvalue,&nsd);.  
5060: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5070: 2f 2a 20 52 65 6d 6f 76 65 20 74 72 61 69 6c 69  /* Remove traili
5080: 6e 67 20 7a 65 72 6f 73 20 61 6e 64 20 74 68 65  ng zeros and the
5090: 20 22 2e 22 20 69 66 20 6e 6f 20 64 69 67 69 74   "." if no digit
50a0: 73 20 66 6f 6c 6c 6f 77 20 74 68 65 20 22 2e 22  s follow the "."
50b0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
50c0: 66 6c 61 67 5f 72 74 7a 20 26 26 20 66 6c 61 67  flag_rtz && flag
50d0: 5f 64 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _dp ){.         
50e0: 20 77 68 69 6c 65 28 20 62 75 66 70 74 5b 2d 31   while( bufpt[-1
50f0: 5d 3d 3d 27 30 27 20 29 20 2a 28 2d 2d 62 75 66  ]=='0' ) *(--buf
5100: 70 74 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  pt) = 0;.       
5110: 20 20 20 61 73 73 65 72 74 28 20 62 75 66 70 74     assert( bufpt
5120: 3e 7a 4f 75 74 20 29 3b 0a 20 20 20 20 20 20 20  >zOut );.       
5130: 20 20 20 69 66 28 20 62 75 66 70 74 5b 2d 31 5d     if( bufpt[-1]
5140: 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20  =='.' ){.       
5150: 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 61 6c       if( flag_al
5160: 74 66 6f 72 6d 32 20 29 7b 0a 20 20 20 20 20 20  tform2 ){.      
5170: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
5180: 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20  +) = '0';.      
5190: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
51a0: 20 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62             *(--b
51b0: 75 66 70 74 29 20 3d 20 30 3b 0a 20 20 20 20 20  ufpt) = 0;.     
51c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
51d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
51e0: 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68         /* Add th
51f0: 65 20 22 65 4e 4e 4e 22 20 73 75 66 66 69 78 20  e "eNNN" suffix 
5200: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 78  */.        if( x
5210: 74 79 70 65 3d 3d 65 74 45 58 50 20 29 7b 0a 20  type==etEXP ){. 
5220: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
5230: 2b 2b 29 20 3d 20 61 44 69 67 69 74 73 5b 69 6e  ++) = aDigits[in
5240: 66 6f 70 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20  fop->charset];. 
5250: 20 20 20 20 20 20 20 20 20 69 66 28 20 65 78 70           if( exp
5260: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
5270: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27    *(bufpt++) = '
5280: 2d 27 3b 20 65 78 70 20 3d 20 2d 65 78 70 3b 0a  -'; exp = -exp;.
5290: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
52a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62  .            *(b
52b0: 75 66 70 74 2b 2b 29 20 3d 20 27 2b 27 3b 0a 20  ufpt++) = '+';. 
52c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
52d0: 20 20 20 20 20 69 66 28 20 65 78 70 3e 3d 31 30       if( exp>=10
52e0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
52f0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 63   *(bufpt++) = (c
5300: 68 61 72 29 28 28 65 78 70 2f 31 30 30 29 2b 27  har)((exp/100)+'
5310: 30 27 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 31  0');        /* 1
5320: 30 30 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20  00's digit */.  
5330: 20 20 20 20 20 20 20 20 20 20 65 78 70 20 25 3d            exp %=
5340: 20 31 30 30 3b 0a 20 20 20 20 20 20 20 20 20 20   100;.          
5350: 7d 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  }.          *(bu
5360: 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 28  fpt++) = (char)(
5370: 65 78 70 2f 31 30 2b 27 30 27 29 3b 20 20 20 20  exp/10+'0');    
5380: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 30 27 73           /* 10's
5390: 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20   digit */.      
53a0: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
53b0: 20 28 63 68 61 72 29 28 65 78 70 25 31 30 2b 27   (char)(exp%10+'
53c0: 30 27 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  0');            
53d0: 20 2f 2a 20 31 27 73 20 64 69 67 69 74 20 2a 2f   /* 1's digit */
53e0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
53f0: 20 20 20 2a 62 75 66 70 74 20 3d 20 30 3b 0a 0a     *bufpt = 0;..
5400: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 63          /* The c
5410: 6f 6e 76 65 72 74 65 64 20 6e 75 6d 62 65 72 20  onverted number 
5420: 69 73 20 69 6e 20 62 75 66 5b 5d 20 61 6e 64 20  is in buf[] and 
5430: 7a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 2e  zero terminated.
5440: 20 4f 75 74 70 75 74 20 69 74 2e 0a 20 20 20 20   Output it..    
5450: 20 20 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74      ** Note that
5460: 20 74 68 65 20 6e 75 6d 62 65 72 20 69 73 20 69   the number is i
5470: 6e 20 74 68 65 20 75 73 75 61 6c 20 6f 72 64 65  n the usual orde
5480: 72 2c 20 6e 6f 74 20 72 65 76 65 72 73 65 64 20  r, not reversed 
5490: 61 73 20 77 69 74 68 0a 20 20 20 20 20 20 20 20  as with.        
54a0: 2a 2a 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  ** integer conve
54b0: 72 73 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20 20 20  rsions. */.     
54c0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74     length = (int
54d0: 29 28 62 75 66 70 74 2d 7a 4f 75 74 29 3b 0a 20  )(bufpt-zOut);. 
54e0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 7a         bufpt = z
54f0: 4f 75 74 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  Out;..        /*
5500: 20 53 70 65 63 69 61 6c 20 63 61 73 65 3a 20 20   Special case:  
5510: 41 64 64 20 6c 65 61 64 69 6e 67 20 7a 65 72 6f  Add leading zero
5520: 73 20 69 66 20 74 68 65 20 66 6c 61 67 5f 7a 65  s if the flag_ze
5530: 72 6f 70 61 64 20 66 6c 61 67 20 69 73 0a 20 20  ropad flag is.  
5540: 20 20 20 20 20 20 2a 2a 20 73 65 74 20 61 6e 64        ** set and
5550: 20 77 65 20 61 72 65 20 6e 6f 74 20 6c 65 66 74   we are not left
5560: 20 6a 75 73 74 69 66 69 65 64 20 2a 2f 0a 20 20   justified */.  
5570: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 7a        if( flag_z
5580: 65 72 6f 70 61 64 20 26 26 20 21 66 6c 61 67 5f  eropad && !flag_
5590: 6c 65 66 74 6a 75 73 74 69 66 79 20 26 26 20 6c  leftjustify && l
55a0: 65 6e 67 74 68 20 3c 20 77 69 64 74 68 29 7b 0a  ength < width){.
55b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b            int i;
55c0: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
55d0: 50 61 64 20 3d 20 77 69 64 74 68 20 2d 20 6c 65  Pad = width - le
55e0: 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20  ngth;.          
55f0: 66 6f 72 28 69 3d 77 69 64 74 68 3b 20 69 3e 3d  for(i=width; i>=
5600: 6e 50 61 64 3b 20 69 2d 2d 29 7b 0a 20 20 20 20  nPad; i--){.    
5610: 20 20 20 20 20 20 20 20 62 75 66 70 74 5b 69 5d          bufpt[i]
5620: 20 3d 20 62 75 66 70 74 5b 69 2d 6e 50 61 64 5d   = bufpt[i-nPad]
5630: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
5640: 20 20 20 20 20 20 20 20 69 20 3d 20 70 72 65 66          i = pref
5650: 69 78 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  ix!=0;.         
5660: 20 77 68 69 6c 65 28 20 6e 50 61 64 2d 2d 20 29   while( nPad-- )
5670: 20 62 75 66 70 74 5b 69 2b 2b 5d 20 3d 20 27 30   bufpt[i++] = '0
5680: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  ';.          len
5690: 67 74 68 20 3d 20 77 69 64 74 68 3b 0a 20 20 20  gth = width;.   
56a0: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
56b0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
56c0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
56d0: 4f 49 4e 54 29 20 2a 2f 0a 20 20 20 20 20 20 20  OINT) */.       
56e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
56f0: 73 65 20 65 74 53 49 5a 45 3a 0a 20 20 20 20 20  se etSIZE:.     
5700: 20 20 20 2a 28 76 61 5f 61 72 67 28 61 70 2c 69     *(va_arg(ap,i
5710: 6e 74 2a 29 29 20 3d 20 70 41 63 63 75 6d 2d 3e  nt*)) = pAccum->
5720: 6e 43 68 61 72 3b 0a 20 20 20 20 20 20 20 20 6c  nChar;.        l
5730: 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20  ength = width = 
5740: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
5750: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 50  ;.      case etP
5760: 45 52 43 45 4e 54 3a 0a 20 20 20 20 20 20 20 20  ERCENT:.        
5770: 62 75 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20  buf[0] = '%';.  
5780: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
5790: 66 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  f;.        lengt
57a0: 68 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  h = 1;.        b
57b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
57c0: 20 65 74 43 48 41 52 58 3a 0a 20 20 20 20 20 20   etCHARX:.      
57d0: 20 20 63 20 3d 20 76 61 5f 61 72 67 28 61 70 2c    c = va_arg(ap,
57e0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 62 75  int);.        bu
57f0: 66 5b 30 5d 20 3d 20 28 63 68 61 72 29 63 3b 0a  f[0] = (char)c;.
5800: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63          if( prec
5810: 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20  ision>=0 ){.    
5820: 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d 31 3b        for(idx=1;
5830: 20 69 64 78 3c 70 72 65 63 69 73 69 6f 6e 3b 20   idx<precision; 
5840: 69 64 78 2b 2b 29 20 62 75 66 5b 69 64 78 5d 20  idx++) buf[idx] 
5850: 3d 20 28 63 68 61 72 29 63 3b 0a 20 20 20 20 20  = (char)c;.     
5860: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 70 72       length = pr
5870: 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20  ecision;.       
5880: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
5890: 20 20 6c 65 6e 67 74 68 20 3d 31 3b 0a 20 20 20    length =1;.   
58a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
58b0: 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20  ufpt = buf;.    
58c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
58d0: 20 63 61 73 65 20 65 74 53 54 52 49 4e 47 3a 0a   case etSTRING:.
58e0: 20 20 20 20 20 20 63 61 73 65 20 65 74 44 59 4e        case etDYN
58f0: 53 54 52 49 4e 47 3a 0a 20 20 20 20 20 20 20 20  STRING:.        
5900: 62 75 66 70 74 20 3d 20 76 61 5f 61 72 67 28 61  bufpt = va_arg(a
5910: 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20  p,char*);.      
5920: 20 20 69 66 28 20 62 75 66 70 74 3d 3d 30 20 29    if( bufpt==0 )
5930: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70  {.          bufp
5940: 74 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20  t = "";.        
5950: 7d 65 6c 73 65 20 69 66 28 20 78 74 79 70 65 3d  }else if( xtype=
5960: 3d 65 74 44 59 4e 53 54 52 49 4e 47 20 29 7b 0a  =etDYNSTRING ){.
5970: 20 20 20 20 20 20 20 20 20 20 7a 45 78 74 72 61            zExtra
5980: 20 3d 20 62 75 66 70 74 3b 0a 20 20 20 20 20 20   = bufpt;.      
5990: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
59a0: 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a  precision>=0 ){.
59b0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6c 65            for(le
59c0: 6e 67 74 68 3d 30 3b 20 6c 65 6e 67 74 68 3c 70  ngth=0; length<p
59d0: 72 65 63 69 73 69 6f 6e 20 26 26 20 62 75 66 70  recision && bufp
59e0: 74 5b 6c 65 6e 67 74 68 5d 3b 20 6c 65 6e 67 74  t[length]; lengt
59f0: 68 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d  h++){}.        }
5a00: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
5a10: 6c 65 6e 67 74 68 20 3d 20 73 71 6c 69 74 65 33  length = sqlite3
5a20: 53 74 72 6c 65 6e 33 30 28 62 75 66 70 74 29 3b  Strlen30(bufpt);
5a30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5a40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5a50: 63 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45  case etSQLESCAPE
5a60: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53  :.      case etS
5a70: 51 4c 45 53 43 41 50 45 32 3a 0a 20 20 20 20 20  QLESCAPE2:.     
5a80: 20 63 61 73 65 20 65 74 53 51 4c 45 53 43 41 50   case etSQLESCAP
5a90: 45 33 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e  E3: {.        in
5aa0: 74 20 69 2c 20 6a 2c 20 6b 2c 20 6e 2c 20 69 73  t i, j, k, n, is
5ab0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 6e  null;.        in
5ac0: 74 20 6e 65 65 64 51 75 6f 74 65 3b 0a 20 20 20  t needQuote;.   
5ad0: 20 20 20 20 20 63 68 61 72 20 63 68 3b 0a 20 20       char ch;.  
5ae0: 20 20 20 20 20 20 63 68 61 72 20 71 20 3d 20 28        char q = (
5af0: 28 78 74 79 70 65 3d 3d 65 74 53 51 4c 45 53 43  (xtype==etSQLESC
5b00: 41 50 45 33 29 3f 27 22 27 3a 27 5c 27 27 29 3b  APE3)?'"':'\'');
5b10: 20 20 20 2f 2a 20 51 75 6f 74 65 20 63 68 61 72     /* Quote char
5b20: 61 63 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  acter */.       
5b30: 20 63 68 61 72 20 2a 65 73 63 61 72 67 20 3d 20   char *escarg = 
5b40: 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29  va_arg(ap,char*)
5b50: 3b 0a 20 20 20 20 20 20 20 20 69 73 6e 75 6c 6c  ;.        isnull
5b60: 20 3d 20 65 73 63 61 72 67 3d 3d 30 3b 0a 20 20   = escarg==0;.  
5b70: 20 20 20 20 20 20 69 66 28 20 69 73 6e 75 6c 6c        if( isnull
5b80: 20 29 20 65 73 63 61 72 67 20 3d 20 28 78 74 79   ) escarg = (xty
5b90: 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 32  pe==etSQLESCAPE2
5ba0: 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 22 28 4e 55   ? "NULL" : "(NU
5bb0: 4c 4c 29 22 29 3b 0a 20 20 20 20 20 20 20 20 6b  LL)");.        k
5bc0: 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20   = precision;.  
5bd0: 20 20 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b        for(i=n=0;
5be0: 20 6b 21 3d 30 20 26 26 20 28 63 68 3d 65 73 63   k!=0 && (ch=esc
5bf0: 61 72 67 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c  arg[i])!=0; i++,
5c00: 20 6b 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20   k--){.         
5c10: 20 69 66 28 20 63 68 3d 3d 71 20 29 20 20 6e 2b   if( ch==q )  n+
5c20: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
5c30: 20 20 20 20 20 6e 65 65 64 51 75 6f 74 65 20 3d       needQuote =
5c40: 20 21 69 73 6e 75 6c 6c 20 26 26 20 78 74 79 70   !isnull && xtyp
5c50: 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 32 3b  e==etSQLESCAPE2;
5c60: 0a 20 20 20 20 20 20 20 20 6e 20 2b 3d 20 69 20  .        n += i 
5c70: 2b 20 31 20 2b 20 6e 65 65 64 51 75 6f 74 65 2a  + 1 + needQuote*
5c80: 32 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e  2;.        if( n
5c90: 3e 65 74 42 55 46 53 49 5a 45 20 29 7b 0a 20 20  >etBUFSIZE ){.  
5ca0: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
5cb0: 7a 45 78 74 72 61 20 3d 20 73 71 6c 69 74 65 33  zExtra = sqlite3
5cc0: 4d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20  Malloc( n );.   
5cd0: 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70 74         if( bufpt
5ce0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
5cf0: 20 20 20 70 41 63 63 75 6d 2d 3e 6d 61 6c 6c 6f     pAccum->mallo
5d00: 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
5d10: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
5d20: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
5d30: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5d40: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
5d50: 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  f;.        }.   
5d60: 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20       j = 0;.    
5d70: 20 20 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74      if( needQuot
5d80: 65 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d  e ) bufpt[j++] =
5d90: 20 71 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20   q;.        k = 
5da0: 69 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  i;.        for(i
5db0: 3d 30 3b 20 69 3c 6b 3b 20 69 2b 2b 29 7b 0a 20  =0; i<k; i++){. 
5dc0: 20 20 20 20 20 20 20 20 20 62 75 66 70 74 5b 6a           bufpt[j
5dd0: 2b 2b 5d 20 3d 20 63 68 20 3d 20 65 73 63 61 72  ++] = ch = escar
5de0: 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  g[i];.          
5df0: 69 66 28 20 63 68 3d 3d 71 20 29 20 62 75 66 70  if( ch==q ) bufp
5e00: 74 5b 6a 2b 2b 5d 20 3d 20 63 68 3b 0a 20 20 20  t[j++] = ch;.   
5e10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
5e20: 66 28 20 6e 65 65 64 51 75 6f 74 65 20 29 20 62  f( needQuote ) b
5e30: 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20  ufpt[j++] = q;. 
5e40: 20 20 20 20 20 20 20 62 75 66 70 74 5b 6a 5d 20         bufpt[j] 
5e50: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  = 0;.        len
5e60: 67 74 68 20 3d 20 6a 3b 0a 20 20 20 20 20 20 20  gth = j;.       
5e70: 20 2f 2a 20 54 68 65 20 70 72 65 63 69 73 69 6f   /* The precisio
5e80: 6e 20 69 6e 20 25 71 20 61 6e 64 20 25 51 20 6d  n in %q and %Q m
5e90: 65 61 6e 73 20 68 6f 77 20 6d 61 6e 79 20 69 6e  eans how many in
5ea0: 70 75 74 20 63 68 61 72 61 63 74 65 72 73 20 74  put characters t
5eb0: 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f 6e  o.        ** con
5ec0: 73 75 6d 65 2c 20 6e 6f 74 20 74 68 65 20 6c 65  sume, not the le
5ed0: 6e 67 74 68 20 6f 66 20 74 68 65 20 6f 75 74 70  ngth of the outp
5ee0: 75 74 2e 2e 2e 0a 20 20 20 20 20 20 20 20 2a 2a  ut....        **
5ef0: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 3d   if( precision>=
5f00: 30 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 6c  0 && precision<l
5f10: 65 6e 67 74 68 20 29 20 6c 65 6e 67 74 68 20 3d  ength ) length =
5f20: 20 70 72 65 63 69 73 69 6f 6e 3b 20 2a 2f 0a 20   precision; */. 
5f30: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5f40: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
5f50: 20 65 74 54 4f 4b 45 4e 3a 20 7b 0a 20 20 20 20   etTOKEN: {.    
5f60: 20 20 20 20 54 6f 6b 65 6e 20 2a 70 54 6f 6b 65      Token *pToke
5f70: 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 54  n = va_arg(ap, T
5f80: 6f 6b 65 6e 2a 29 3b 0a 20 20 20 20 20 20 20 20  oken*);.        
5f90: 69 66 28 20 70 54 6f 6b 65 6e 20 29 7b 0a 20 20  if( pToken ){.  
5fa0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53          sqlite3S
5fb0: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41  trAccumAppend(pA
5fc0: 63 63 75 6d 2c 20 28 63 6f 6e 73 74 20 63 68 61  ccum, (const cha
5fd0: 72 2a 29 70 54 6f 6b 65 6e 2d 3e 7a 2c 20 70 54  r*)pToken->z, pT
5fe0: 6f 6b 65 6e 2d 3e 6e 29 3b 0a 20 20 20 20 20 20  oken->n);.      
5ff0: 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67    }.        leng
6000: 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a  th = width = 0;.
6010: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
6020: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73       }.      cas
6030: 65 20 65 74 53 52 43 4c 49 53 54 3a 20 7b 0a 20  e etSRCLIST: {. 
6040: 20 20 20 20 20 20 20 53 72 63 4c 69 73 74 20 2a         SrcList *
6050: 70 53 72 63 20 3d 20 76 61 5f 61 72 67 28 61 70  pSrc = va_arg(ap
6060: 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 20  , SrcList*);.   
6070: 20 20 20 20 20 69 6e 74 20 6b 20 3d 20 76 61 5f       int k = va_
6080: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
6090: 20 20 20 20 20 20 73 74 72 75 63 74 20 53 72 63        struct Src
60a0: 4c 69 73 74 5f 69 74 65 6d 20 2a 70 49 74 65 6d  List_item *pItem
60b0: 20 3d 20 26 70 53 72 63 2d 3e 61 5b 6b 5d 3b 0a   = &pSrc->a[k];.
60c0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
60d0: 6b 3e 3d 30 20 26 26 20 6b 3c 70 53 72 63 2d 3e  k>=0 && k<pSrc->
60e0: 6e 53 72 63 20 29 3b 0a 20 20 20 20 20 20 20 20  nSrc );.        
60f0: 69 66 28 20 70 49 74 65 6d 2d 3e 7a 44 61 74 61  if( pItem->zData
6100: 62 61 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20  base ){.        
6110: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
6120: 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20  mAppend(pAccum, 
6130: 70 49 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65  pItem->zDatabase
6140: 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , -1);.         
6150: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6160: 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 22  Append(pAccum, "
6170: 2e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  .", 1);.        
6180: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
6190: 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
61a0: 70 41 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e 7a  pAccum, pItem->z
61b0: 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 20  Name, -1);.     
61c0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64 74     length = widt
61d0: 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62  h = 0;.        b
61e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
61f0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
6200: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 78         assert( x
6210: 74 79 70 65 3d 3d 65 74 49 4e 56 41 4c 49 44 20  type==etINVALID 
6220: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
6230: 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  n;.      }.    }
6240: 2f 2a 20 45 6e 64 20 73 77 69 74 63 68 20 6f 76  /* End switch ov
6250: 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 74 79  er the format ty
6260: 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20 20  pe */.    /*.   
6270: 20 2a 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20   ** The text of 
6280: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
6290: 73 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  s pointed to by 
62a0: 22 62 75 66 70 74 22 20 61 6e 64 20 69 73 0a 20  "bufpt" and is. 
62b0: 20 20 20 2a 2a 20 22 6c 65 6e 67 74 68 22 20 63     ** "length" c
62c0: 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
62d0: 20 54 68 65 20 66 69 65 6c 64 20 77 69 64 74 68   The field width
62e0: 20 69 73 20 22 77 69 64 74 68 22 2e 20 20 44 6f   is "width".  Do
62f0: 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74 70  .    ** the outp
6300: 75 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ut..    */.    i
6310: 66 28 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73  f( !flag_leftjus
6320: 74 69 66 79 20 29 7b 0a 20 20 20 20 20 20 72 65  tify ){.      re
6330: 67 69 73 74 65 72 20 69 6e 74 20 6e 73 70 61 63  gister int nspac
6340: 65 3b 0a 20 20 20 20 20 20 6e 73 70 61 63 65 20  e;.      nspace 
6350: 3d 20 77 69 64 74 68 2d 6c 65 6e 67 74 68 3b 0a  = width-length;.
6360: 20 20 20 20 20 20 69 66 28 20 6e 73 70 61 63 65        if( nspace
6370: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  >0 ){.        ap
6380: 70 65 6e 64 53 70 61 63 65 28 70 41 63 63 75 6d  pendSpace(pAccum
6390: 2c 20 6e 73 70 61 63 65 29 3b 0a 20 20 20 20 20  , nspace);.     
63a0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
63b0: 20 6c 65 6e 67 74 68 3e 30 20 29 7b 0a 20 20 20   length>0 ){.   
63c0: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
63d0: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
63e0: 20 62 75 66 70 74 2c 20 6c 65 6e 67 74 68 29 3b   bufpt, length);
63f0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 66  .    }.    if( f
6400: 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20  lag_leftjustify 
6410: 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74 65  ){.      registe
6420: 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20  r int nspace;.  
6430: 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69 64      nspace = wid
6440: 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20  th-length;.     
6450: 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29 7b   if( nspace>0 ){
6460: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 53  .        appendS
6470: 70 61 63 65 28 70 41 63 63 75 6d 2c 20 6e 73 70  pace(pAccum, nsp
6480: 61 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ace);.      }.  
6490: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
64a0: 66 72 65 65 28 7a 45 78 74 72 61 29 3b 0a 20 20  free(zExtra);.  
64b0: 7d 2f 2a 20 45 6e 64 20 66 6f 72 20 6c 6f 6f 70  }/* End for loop
64c0: 20 6f 76 65 72 20 74 68 65 20 66 6f 72 6d 61 74   over the format
64d0: 20 73 74 72 69 6e 67 20 2a 2f 0a 7d 20 2f 2a 20   string */.} /* 
64e0: 45 6e 64 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20  End of function 
64f0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64  */../*.** Append
6500: 20 4e 20 62 79 74 65 73 20 6f 66 20 74 65 78 74   N bytes of text
6510: 20 66 72 6f 6d 20 7a 20 74 6f 20 74 68 65 20 53   from z to the S
6520: 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 74 2e 0a  trAccum object..
6530: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
6540: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
6550: 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74  rAccum *p, const
6560: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 4e 29   char *z, int N)
6570: 7b 0a 20 20 61 73 73 65 72 74 28 20 7a 21 3d 30  {.  assert( z!=0
6580: 20 7c 7c 20 4e 3d 3d 30 20 29 3b 0a 20 20 69 66   || N==0 );.  if
6590: 28 20 70 2d 3e 74 6f 6f 42 69 67 20 7c 20 70 2d  ( p->tooBig | p-
65a0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
65b0: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 70 2d  .    testcase(p-
65c0: 3e 74 6f 6f 42 69 67 29 3b 0a 20 20 20 20 74 65  >tooBig);.    te
65d0: 73 74 63 61 73 65 28 70 2d 3e 6d 61 6c 6c 6f 63  stcase(p->malloc
65e0: 46 61 69 6c 65 64 29 3b 0a 20 20 20 20 72 65 74  Failed);.    ret
65f0: 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 4e  urn;.  }.  if( N
6600: 3c 30 20 29 7b 0a 20 20 20 20 4e 20 3d 20 73 71  <0 ){.    N = sq
6610: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29  lite3Strlen30(z)
6620: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 4e 3d 3d 30  ;.  }.  if( N==0
6630: 20 7c 7c 20 4e 45 56 45 52 28 7a 3d 3d 30 29 20   || NEVER(z==0) 
6640: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  ){.    return;. 
6650: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 6e 43 68 61   }.  if( p->nCha
6660: 72 2b 4e 20 3e 3d 20 70 2d 3e 6e 41 6c 6c 6f 63  r+N >= p->nAlloc
6670: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   ){.    char *zN
6680: 65 77 3b 0a 20 20 20 20 69 66 28 20 21 70 2d 3e  ew;.    if( !p->
6690: 75 73 65 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20  useMalloc ){.   
66a0: 20 20 20 70 2d 3e 74 6f 6f 42 69 67 20 3d 20 31     p->tooBig = 1
66b0: 3b 0a 20 20 20 20 20 20 4e 20 3d 20 70 2d 3e 6e  ;.      N = p->n
66c0: 41 6c 6c 6f 63 20 2d 20 70 2d 3e 6e 43 68 61 72  Alloc - p->nChar
66d0: 20 2d 20 31 3b 0a 20 20 20 20 20 20 69 66 28 20   - 1;.      if( 
66e0: 4e 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  N<=0 ){.        
66f0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
6700: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6710: 20 63 68 61 72 20 2a 7a 4f 6c 64 20 3d 20 28 70   char *zOld = (p
6720: 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73  ->zText==p->zBas
6730: 65 20 3f 20 30 20 3a 20 70 2d 3e 7a 54 65 78 74  e ? 0 : p->zText
6740: 29 3b 0a 20 20 20 20 20 20 69 36 34 20 73 7a 4e  );.      i64 szN
6750: 65 77 20 3d 20 70 2d 3e 6e 43 68 61 72 3b 0a 20  ew = p->nChar;. 
6760: 20 20 20 20 20 73 7a 4e 65 77 20 2b 3d 20 4e 20       szNew += N 
6770: 2b 20 31 3b 0a 20 20 20 20 20 20 69 66 28 20 73  + 1;.      if( s
6780: 7a 4e 65 77 20 3e 20 70 2d 3e 6d 78 41 6c 6c 6f  zNew > p->mxAllo
6790: 63 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  c ){.        sql
67a0: 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
67b0: 74 28 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  t(p);.        p-
67c0: 3e 74 6f 6f 42 69 67 20 3d 20 31 3b 0a 20 20 20  >tooBig = 1;.   
67d0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
67e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
67f0: 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 28 69    p->nAlloc = (i
6800: 6e 74 29 73 7a 4e 65 77 3b 0a 20 20 20 20 20 20  nt)szNew;.      
6810: 7d 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 75  }.      if( p->u
6820: 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29 7b 0a 20  seMalloc==1 ){. 
6830: 20 20 20 20 20 20 20 7a 4e 65 77 20 3d 20 73 71         zNew = sq
6840: 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 70  lite3DbRealloc(p
6850: 2d 3e 64 62 2c 20 7a 4f 6c 64 2c 20 70 2d 3e 6e  ->db, zOld, p->n
6860: 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 20 20 7d 65  Alloc);.      }e
6870: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 4e 65  lse{.        zNe
6880: 77 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c  w = sqlite3_real
6890: 6c 6f 63 28 7a 4f 6c 64 2c 20 70 2d 3e 6e 41 6c  loc(zOld, p->nAl
68a0: 6c 6f 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  loc);.      }.  
68b0: 20 20 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a      if( zNew ){.
68c0: 20 20 20 20 20 20 20 20 69 66 28 20 7a 4f 6c 64          if( zOld
68d0: 3d 3d 30 20 29 20 6d 65 6d 63 70 79 28 7a 4e 65  ==0 ) memcpy(zNe
68e0: 77 2c 20 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e  w, p->zText, p->
68f0: 6e 43 68 61 72 29 3b 0a 20 20 20 20 20 20 20 20  nChar);.        
6900: 70 2d 3e 7a 54 65 78 74 20 3d 20 7a 4e 65 77 3b  p->zText = zNew;
6910: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
6920: 20 20 20 20 20 20 70 2d 3e 6d 61 6c 6c 6f 63 46        p->mallocF
6930: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
6940: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
6950: 75 6d 52 65 73 65 74 28 70 29 3b 0a 20 20 20 20  umReset(p);.    
6960: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20      return;.    
6970: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
6980: 6d 65 6d 63 70 79 28 26 70 2d 3e 7a 54 65 78 74  memcpy(&p->zText
6990: 5b 70 2d 3e 6e 43 68 61 72 5d 2c 20 7a 2c 20 4e  [p->nChar], z, N
69a0: 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 72 20 2b 3d  );.  p->nChar +=
69b0: 20 4e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e   N;.}../*.** Fin
69c0: 69 73 68 20 6f 66 66 20 61 20 73 74 72 69 6e 67  ish off a string
69d0: 20 62 79 20 6d 61 6b 69 6e 67 20 73 75 72 65 20   by making sure 
69e0: 69 74 20 69 73 20 7a 65 72 6f 2d 74 65 72 6d 69  it is zero-termi
69f0: 6e 61 74 65 64 2e 0a 2a 2a 20 52 65 74 75 72 6e  nated..** Return
6a00: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
6a10: 65 20 72 65 73 75 6c 74 69 6e 67 20 73 74 72 69  e resulting stri
6a20: 6e 67 2e 20 20 52 65 74 75 72 6e 20 61 20 4e 55  ng.  Return a NU
6a30: 4c 4c 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 69 66  LL.** pointer if
6a40: 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 65 72 72   any kind of err
6a50: 6f 72 20 77 61 73 20 65 6e 63 6f 75 6e 74 65 72  or was encounter
6a60: 65 64 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c  ed..*/.char *sql
6a70: 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
6a80: 73 68 28 53 74 72 41 63 63 75 6d 20 2a 70 29 7b  sh(StrAccum *p){
6a90: 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 74 20  .  if( p->zText 
6aa0: 29 7b 0a 20 20 20 20 70 2d 3e 7a 54 65 78 74 5b  ){.    p->zText[
6ab0: 70 2d 3e 6e 43 68 61 72 5d 20 3d 20 30 3b 0a 20  p->nChar] = 0;. 
6ac0: 20 20 20 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c     if( p->useMal
6ad0: 6c 6f 63 20 26 26 20 70 2d 3e 7a 54 65 78 74 3d  loc && p->zText=
6ae0: 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20 20  =p->zBase ){.   
6af0: 20 20 20 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c     if( p->useMal
6b00: 6c 6f 63 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20  loc==1 ){.      
6b10: 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 73 71 6c    p->zText = sql
6b20: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
6b30: 70 2d 3e 64 62 2c 20 70 2d 3e 6e 43 68 61 72 2b  p->db, p->nChar+
6b40: 31 20 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  1 );.      }else
6b50: 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65  {.        p->zTe
6b60: 78 74 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  xt = sqlite3_mal
6b70: 6c 6f 63 28 70 2d 3e 6e 43 68 61 72 2b 31 29 3b  loc(p->nChar+1);
6b80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
6b90: 66 28 20 70 2d 3e 7a 54 65 78 74 20 29 7b 0a 20  f( p->zText ){. 
6ba0: 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 2d         memcpy(p-
6bb0: 3e 7a 54 65 78 74 2c 20 70 2d 3e 7a 42 61 73 65  >zText, p->zBase
6bc0: 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 29 3b 0a 20  , p->nChar+1);. 
6bd0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
6be0: 20 20 20 20 70 2d 3e 6d 61 6c 6c 6f 63 46 61 69      p->mallocFai
6bf0: 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  led = 1;.      }
6c00: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
6c10: 75 72 6e 20 70 2d 3e 7a 54 65 78 74 3b 0a 7d 0a  urn p->zText;.}.
6c20: 0a 2f 2a 0a 2a 2a 20 52 65 73 65 74 20 61 6e 20  ./*.** Reset an 
6c30: 53 74 72 41 63 63 75 6d 20 73 74 72 69 6e 67 2e  StrAccum string.
6c40: 20 20 52 65 63 6c 61 69 6d 20 61 6c 6c 20 6d 61    Reclaim all ma
6c50: 6c 6c 6f 63 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a  lloced memory..*
6c60: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  /.void sqlite3St
6c70: 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
6c80: 63 63 75 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20  ccum *p){.  if( 
6c90: 70 2d 3e 7a 54 65 78 74 21 3d 70 2d 3e 7a 42 61  p->zText!=p->zBa
6ca0: 73 65 20 29 7b 0a 20 20 20 20 69 66 28 20 70 2d  se ){.    if( p-
6cb0: 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29 7b  >useMalloc==1 ){
6cc0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
6cd0: 46 72 65 65 28 70 2d 3e 64 62 2c 20 70 2d 3e 7a  Free(p->db, p->z
6ce0: 54 65 78 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Text);.    }else
6cf0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
6d00: 66 72 65 65 28 70 2d 3e 7a 54 65 78 74 29 3b 0a  free(p->zText);.
6d10: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 2d 3e 7a      }.  }.  p->z
6d20: 54 65 78 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a  Text = 0;.}../*.
6d30: 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 20  ** Initialize a 
6d40: 73 74 72 69 6e 67 20 61 63 63 75 6d 75 6c 61 74  string accumulat
6d50: 6f 72 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  or.*/.void sqlit
6d60: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
6d70: 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 68 61 72  trAccum *p, char
6d80: 20 2a 7a 42 61 73 65 2c 20 69 6e 74 20 6e 2c 20   *zBase, int n, 
6d90: 69 6e 74 20 6d 78 29 7b 0a 20 20 70 2d 3e 7a 54  int mx){.  p->zT
6da0: 65 78 74 20 3d 20 70 2d 3e 7a 42 61 73 65 20 3d  ext = p->zBase =
6db0: 20 7a 42 61 73 65 3b 0a 20 20 70 2d 3e 64 62 20   zBase;.  p->db 
6dc0: 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 72 20  = 0;.  p->nChar 
6dd0: 3d 20 30 3b 0a 20 20 70 2d 3e 6e 41 6c 6c 6f 63  = 0;.  p->nAlloc
6de0: 20 3d 20 6e 3b 0a 20 20 70 2d 3e 6d 78 41 6c 6c   = n;.  p->mxAll
6df0: 6f 63 20 3d 20 6d 78 3b 0a 20 20 70 2d 3e 75 73  oc = mx;.  p->us
6e00: 65 4d 61 6c 6c 6f 63 20 3d 20 31 3b 0a 20 20 70  eMalloc = 1;.  p
6e10: 2d 3e 74 6f 6f 42 69 67 20 3d 20 30 3b 0a 20 20  ->tooBig = 0;.  
6e20: 70 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  p->mallocFailed 
6e30: 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  = 0;.}../*.** Pr
6e40: 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  int into memory 
6e50: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
6e60: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 55  liteMalloc().  U
6e70: 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a  se the internal.
6e80: 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20  ** %-conversion 
6e90: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63  extensions..*/.c
6ea0: 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
6eb0: 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a 64 62  intf(sqlite3 *db
6ec0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  , const char *zF
6ed0: 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61  ormat, va_list a
6ee0: 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  p){.  char *z;. 
6ef0: 20 63 68 61 72 20 7a 42 61 73 65 5b 53 51 4c 49   char zBase[SQLI
6f00: 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a  TE_PRINT_BUF_SIZ
6f10: 45 5d 3b 0a 20 20 53 74 72 41 63 63 75 6d 20 61  E];.  StrAccum a
6f20: 63 63 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62  cc;.  assert( db
6f30: 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  !=0 );.  sqlite3
6f40: 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63  StrAccumInit(&ac
6f50: 63 2c 20 7a 42 61 73 65 2c 20 73 69 7a 65 6f 66  c, zBase, sizeof
6f60: 28 7a 42 61 73 65 29 2c 0a 20 20 20 20 20 20 20  (zBase),.       
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
6f80: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
6f90: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 29 3b  _LIMIT_LENGTH]);
6fa0: 0a 20 20 61 63 63 2e 64 62 20 3d 20 64 62 3b 0a  .  acc.db = db;.
6fb0: 20 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74    sqlite3VXPrint
6fc0: 66 28 26 61 63 63 2c 20 31 2c 20 7a 46 6f 72 6d  f(&acc, 1, zForm
6fd0: 61 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d 20 73  at, ap);.  z = s
6fe0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
6ff0: 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20 69 66  nish(&acc);.  if
7000: 28 20 61 63 63 2e 6d 61 6c 6c 6f 63 46 61 69 6c  ( acc.mallocFail
7010: 65 64 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61  ed ){.    db->ma
7020: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
7030: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a    }.  return z;.
7040: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69  }../*.** Print i
7050: 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69  nto memory obtai
7060: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  ned from sqliteM
7070: 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65 20 74 68  alloc().  Use th
7080: 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d  e internal.** %-
7090: 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e  conversion exten
70a0: 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a  sions..*/.char *
70b0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
70c0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
70d0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
70e0: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
70f0: 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a   ap;.  char *z;.
7100: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
7110: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73  Format);.  z = s
7120: 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64  qlite3VMPrintf(d
7130: 62 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  b, zFormat, ap);
7140: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20  .  va_end(ap);. 
7150: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
7160: 0a 2a 2a 20 4c 69 6b 65 20 73 71 6c 69 74 65 33  .** Like sqlite3
7170: 4d 50 72 69 6e 74 66 28 29 2c 20 62 75 74 20 63  MPrintf(), but c
7180: 61 6c 6c 20 73 71 6c 69 74 65 33 44 62 46 72 65  all sqlite3DbFre
7190: 65 28 29 20 6f 6e 20 7a 53 74 72 20 61 66 74 65  e() on zStr afte
71a0: 72 20 66 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20  r formatting.** 
71b0: 74 68 65 20 73 74 72 69 6e 67 20 61 6e 64 20 62  the string and b
71c0: 65 66 6f 72 65 20 72 65 74 75 72 6e 6e 69 6e 67  efore returnning
71d0: 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  .  This routine 
71e0: 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  is intended to b
71f0: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 6f 64  e used.** to mod
7200: 69 66 79 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ify an existing 
7210: 73 74 72 69 6e 67 2e 20 20 46 6f 72 20 65 78 61  string.  For exa
7220: 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
7230: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 4d 50 72    x = sqlite3MPr
7240: 69 6e 74 66 28 64 62 2c 20 78 2c 20 22 70 72 65  intf(db, x, "pre
7250: 66 69 78 20 25 73 20 73 75 66 66 69 78 22 2c 20  fix %s suffix", 
7260: 78 29 3b 0a 2a 2a 0a 2a 2f 0a 63 68 61 72 20 2a  x);.**.*/.char *
7270: 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28  sqlite3MAppendf(
7280: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61  sqlite3 *db, cha
7290: 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20 63  r *zStr, const c
72a0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
72b0: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
72c0: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76  ;.  char *z;.  v
72d0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
72e0: 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  mat);.  z = sqli
72f0: 74 65 33 56 4d 50 72 69 6e 74 66 28 64 62 2c 20  te3VMPrintf(db, 
7300: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
7310: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 71  va_end(ap);.  sq
7320: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
7330: 7a 53 74 72 29 3b 0a 20 20 72 65 74 75 72 6e 20  zStr);.  return 
7340: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  z;.}../*.** Prin
7350: 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  t into memory ob
7360: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
7370: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 20 20 4f  te3_malloc().  O
7380: 6d 69 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  mit the internal
7390: 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e  .** %-conversion
73a0: 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a   extensions..*/.
73b0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 76 6d  char *sqlite3_vm
73c0: 70 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  printf(const cha
73d0: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c  r *zFormat, va_l
73e0: 69 73 74 20 61 70 29 7b 0a 20 20 63 68 61 72 20  ist ap){.  char 
73f0: 2a 7a 3b 0a 20 20 63 68 61 72 20 7a 42 61 73 65  *z;.  char zBase
7400: 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55  [SQLITE_PRINT_BU
7410: 46 5f 53 49 5a 45 5d 3b 0a 20 20 53 74 72 41 63  F_SIZE];.  StrAc
7420: 63 75 6d 20 61 63 63 3b 0a 23 69 66 6e 64 65 66  cum acc;.#ifndef
7430: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
7440: 4f 49 4e 49 54 0a 20 20 69 66 28 20 73 71 6c 69  OINIT.  if( sqli
7450: 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
7460: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e   ) return 0;.#en
7470: 64 69 66 0a 20 20 73 71 6c 69 74 65 33 53 74 72  dif.  sqlite3Str
7480: 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20  AccumInit(&acc, 
7490: 7a 42 61 73 65 2c 20 73 69 7a 65 6f 66 28 7a 42  zBase, sizeof(zB
74a0: 61 73 65 29 2c 20 53 51 4c 49 54 45 5f 4d 41 58  ase), SQLITE_MAX
74b0: 5f 4c 45 4e 47 54 48 29 3b 0a 20 20 61 63 63 2e  _LENGTH);.  acc.
74c0: 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 32 3b 0a 20  useMalloc = 2;. 
74d0: 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
74e0: 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61  (&acc, 0, zForma
74f0: 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d 20 73 71  t, ap);.  z = sq
7500: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
7510: 69 73 68 28 26 61 63 63 29 3b 0a 20 20 72 65 74  ish(&acc);.  ret
7520: 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn z;.}../*.** 
7530: 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72  Print into memor
7540: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
7550: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
7560: 28 29 2e 20 20 4f 6d 69 74 20 74 68 65 20 69 6e  ().  Omit the in
7570: 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76  ternal.** %-conv
7580: 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f 6e  ersion extension
7590: 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69  s..*/.char *sqli
75a0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 63 6f 6e 73  te3_mprintf(cons
75b0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
75c0: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
75d0: 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a   ap;.  char *z;.
75e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
75f0: 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20 69  MIT_AUTOINIT.  i
7600: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  f( sqlite3_initi
7610: 61 6c 69 7a 65 28 29 20 29 20 72 65 74 75 72 6e  alize() ) return
7620: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 76 61 5f   0;.#endif.  va_
7630: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
7640: 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65  t);.  z = sqlite
7650: 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d  3_vmprintf(zForm
7660: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
7670: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
7680: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69  z;.}../*.** sqli
7690: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 20 77  te3_snprintf() w
76a0: 6f 72 6b 73 20 6c 69 6b 65 20 73 6e 70 72 69 6e  orks like snprin
76b0: 74 66 28 29 20 65 78 63 65 70 74 20 74 68 61 74  tf() except that
76c0: 20 69 74 20 69 67 6e 6f 72 65 73 20 74 68 65 0a   it ignores the.
76d0: 2a 2a 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c  ** current local
76e0: 65 20 73 65 74 74 69 6e 67 73 2e 20 20 54 68 69  e settings.  Thi
76f0: 73 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 66  s is important f
7700: 6f 72 20 53 51 4c 69 74 65 20 62 65 63 61 75 73  or SQLite becaus
7710: 65 20 77 65 0a 2a 2a 20 61 72 65 20 6e 6f 74 20  e we.** are not 
7720: 61 62 6c 65 20 74 6f 20 75 73 65 20 61 20 22 2c  able to use a ",
7730: 22 20 61 73 20 74 68 65 20 64 65 63 69 6d 61 6c  " as the decimal
7740: 20 70 6f 69 6e 74 20 69 6e 20 70 6c 61 63 65 20   point in place 
7750: 6f 66 20 22 2e 22 20 61 73 0a 2a 2a 20 73 70 65  of "." as.** spe
7760: 63 69 66 69 65 64 20 62 79 20 73 6f 6d 65 20 6c  cified by some l
7770: 6f 63 61 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4f 6f  ocales..**.** Oo
7780: 70 73 3a 20 20 54 68 65 20 66 69 72 73 74 20 74  ps:  The first t
7790: 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 66 20  wo arguments of 
77a0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
77b0: 28 29 20 61 72 65 20 62 61 63 6b 77 61 72 64 73  () are backwards
77c0: 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 73 6e 70  .** from the snp
77d0: 72 69 6e 74 66 28 29 20 73 74 61 6e 64 61 72 64  rintf() standard
77e0: 2e 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  .  Unfortunately
77f0: 2c 20 69 74 20 69 73 20 74 6f 6f 20 6c 61 74 65  , it is too late
7800: 20 74 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 68   to change.** th
7810: 69 73 20 77 69 74 68 6f 75 74 20 62 72 65 61 6b  is without break
7820: 69 6e 67 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ing compatibilit
7830: 79 2c 20 73 6f 20 77 65 20 6a 75 73 74 20 68 61  y, so we just ha
7840: 76 65 20 74 6f 20 6c 69 76 65 20 77 69 74 68 20  ve to live with 
7850: 74 68 65 0a 2a 2a 20 6d 69 73 74 61 6b 65 2e 0a  the.** mistake..
7860: 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 73  **.** sqlite3_vs
7870: 6e 70 72 69 6e 74 66 28 29 20 69 73 20 74 68 65  nprintf() is the
7880: 20 76 61 72 61 72 67 73 20 76 65 72 73 69 6f 6e   varargs version
7890: 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..*/.char *sqlit
78a0: 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 69 6e 74  e3_vsnprintf(int
78b0: 20 6e 2c 20 63 68 61 72 20 2a 7a 42 75 66 2c 20   n, char *zBuf, 
78c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
78d0: 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29  mat, va_list ap)
78e0: 7b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63  {.  StrAccum acc
78f0: 3b 0a 20 20 69 66 28 20 6e 3c 3d 30 20 29 20 72  ;.  if( n<=0 ) r
7900: 65 74 75 72 6e 20 7a 42 75 66 3b 0a 20 20 73 71  eturn zBuf;.  sq
7910: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
7920: 74 28 26 61 63 63 2c 20 7a 42 75 66 2c 20 6e 2c  t(&acc, zBuf, n,
7930: 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d 61   0);.  acc.useMa
7940: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 73 71 6c 69  lloc = 0;.  sqli
7950: 74 65 33 56 58 50 72 69 6e 74 66 28 26 61 63 63  te3VXPrintf(&acc
7960: 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  , 0, zFormat, ap
7970: 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  );.  return sqli
7980: 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
7990: 68 28 26 61 63 63 29 3b 0a 7d 0a 63 68 61 72 20  h(&acc);.}.char 
79a0: 2a 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  *sqlite3_snprint
79b0: 66 28 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a  f(int n, char *z
79c0: 42 75 66 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Buf, const char 
79d0: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
79e0: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f    char *z;.  va_
79f0: 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f 73 74  list ap;.  va_st
7a00: 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74 29 3b  art(ap,zFormat);
7a10: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  z = sqlite3_v
7a20: 73 6e 70 72 69 6e 74 66 28 6e 2c 20 7a 42 75 66  snprintf(n, zBuf
7a30: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
7a40: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
7a50: 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a  return z;.}../*.
7a60: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 72  ** This is the r
7a70: 6f 75 74 69 6e 65 20 74 68 61 74 20 61 63 74 75  outine that actu
7a80: 61 6c 6c 79 20 66 6f 72 6d 61 74 73 20 74 68 65  ally formats the
7a90: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 6d   sqlite3_log() m
7aa0: 65 73 73 61 67 65 2e 0a 2a 2a 20 57 65 20 68 6f  essage..** We ho
7ab0: 75 73 65 20 69 74 20 69 6e 20 61 20 73 65 70 61  use it in a sepa
7ac0: 72 61 74 65 20 72 6f 75 74 69 6e 65 20 66 72 6f  rate routine fro
7ad0: 6d 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20  m sqlite3_log() 
7ae0: 74 6f 20 61 76 6f 69 64 20 75 73 69 6e 67 0a 2a  to avoid using.*
7af0: 2a 20 73 74 61 63 6b 20 73 70 61 63 65 20 6f 6e  * stack space on
7b00: 20 73 6d 61 6c 6c 2d 73 74 61 63 6b 20 73 79 73   small-stack sys
7b10: 74 65 6d 73 20 77 68 65 6e 20 6c 6f 67 67 69 6e  tems when loggin
7b20: 67 20 69 73 20 64 69 73 61 62 6c 65 64 2e 0a 2a  g is disabled..*
7b30: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 6f 67  *.** sqlite3_log
7b40: 28 29 20 6d 75 73 74 20 72 65 6e 64 65 72 20 69  () must render i
7b50: 6e 74 6f 20 61 20 73 74 61 74 69 63 20 62 75 66  nto a static buf
7b60: 66 65 72 2e 20 20 49 74 20 63 61 6e 6e 6f 74 20  fer.  It cannot 
7b70: 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61  dynamically.** a
7b80: 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79 20 62  llocate memory b
7b90: 65 63 61 75 73 65 20 69 74 20 6d 69 67 68 74 20  ecause it might 
7ba0: 62 65 20 63 61 6c 6c 65 64 20 77 68 69 6c 65 20  be called while 
7bb0: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
7bc0: 61 74 6f 72 0a 2a 2a 20 6d 75 74 65 78 20 69 73  ator.** mutex is
7bd0: 20 68 65 6c 64 2e 0a 2a 2f 0a 73 74 61 74 69 63   held..*/.static
7be0: 20 76 6f 69 64 20 72 65 6e 64 65 72 4c 6f 67 4d   void renderLogM
7bf0: 73 67 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c  sg(int iErrCode,
7c00: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
7c10: 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70  rmat, va_list ap
7c20: 29 7b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63  ){.  StrAccum ac
7c30: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
7c50: 74 72 69 6e 67 20 61 63 63 75 6d 75 6c 61 74 6f  tring accumulato
7c60: 72 20 2a 2f 0a 20 20 63 68 61 72 20 7a 4d 73 67  r */.  char zMsg
7c70: 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55  [SQLITE_PRINT_BU
7c80: 46 5f 53 49 5a 45 2a 33 5d 3b 20 20 20 20 2f 2a  F_SIZE*3];    /*
7c90: 20 43 6f 6d 70 6c 65 74 65 20 6c 6f 67 20 6d 65   Complete log me
7ca0: 73 73 61 67 65 20 2a 2f 0a 0a 20 20 73 71 6c 69  ssage */..  sqli
7cb0: 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
7cc0: 26 61 63 63 2c 20 7a 4d 73 67 2c 20 73 69 7a 65  &acc, zMsg, size
7cd0: 6f 66 28 7a 4d 73 67 29 2c 20 30 29 3b 0a 20 20  of(zMsg), 0);.  
7ce0: 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d 20  acc.useMalloc = 
7cf0: 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72  0;.  sqlite3VXPr
7d00: 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46  intf(&acc, 0, zF
7d10: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 73 71  ormat, ap);.  sq
7d20: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
7d30: 67 2e 78 4c 6f 67 28 73 71 6c 69 74 65 33 47 6c  g.xLog(sqlite3Gl
7d40: 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 4c 6f 67 41  obalConfig.pLogA
7d50: 72 67 2c 20 69 45 72 72 43 6f 64 65 2c 0a 20 20  rg, iErrCode,.  
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d70: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
7d80: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
7d90: 61 63 63 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  acc));.}../*.** 
7da0: 46 6f 72 6d 61 74 20 61 6e 64 20 77 72 69 74 65  Format and write
7db0: 20 61 20 6d 65 73 73 61 67 65 20 74 6f 20 74 68   a message to th
7dc0: 65 20 6c 6f 67 20 69 66 20 6c 6f 67 67 69 6e 67  e log if logging
7dd0: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a   is enabled..*/.
7de0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 6c 6f 67  void sqlite3_log
7df0: 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 63  (int iErrCode, c
7e00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
7e10: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  at, ...){.  va_l
7e20: 69 73 74 20 61 70 3b 20 20 20 20 20 20 20 20 20  ist ap;         
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 2f 2a 20 56 61 72 61 72 67 20 6c 69      /* Vararg li
7e50: 73 74 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  st */.  if( sqli
7e60: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
7e70: 78 4c 6f 67 20 29 7b 0a 20 20 20 20 76 61 5f 73  xLog ){.    va_s
7e80: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
7e90: 29 3b 0a 20 20 20 20 72 65 6e 64 65 72 4c 6f 67  );.    renderLog
7ea0: 4d 73 67 28 69 45 72 72 43 6f 64 65 2c 20 7a 46  Msg(iErrCode, zF
7eb0: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 20 20  ormat, ap);.    
7ec0: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 7d 0a  va_end(ap);.  }.
7ed0: 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  }..#if defined(S
7ee0: 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 2f 2a 0a  QLITE_DEBUG)./*.
7ef0: 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20 6f 66 20  ** A version of 
7f00: 70 72 69 6e 74 66 28 29 20 74 68 61 74 20 75 6e  printf() that un
7f10: 64 65 72 73 74 61 6e 64 73 20 25 6c 6c 64 2e 20  derstands %lld. 
7f20: 20 55 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   Used for debugg
7f30: 69 6e 67 2e 0a 2a 2a 20 54 68 65 20 70 72 69 6e  ing..** The prin
7f40: 74 66 28 29 20 62 75 69 6c 74 20 69 6e 74 6f 20  tf() built into 
7f50: 73 6f 6d 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  some versions of
7f60: 20 77 69 6e 64 6f 77 73 20 64 6f 65 73 20 6e 6f   windows does no
7f70: 74 20 75 6e 64 65 72 73 74 61 6e 64 20 25 6c 6c  t understand %ll
7f80: 64 0a 2a 2a 20 61 6e 64 20 73 65 67 66 61 75 6c  d.** and segfaul
7f90: 74 73 20 69 66 20 79 6f 75 20 67 69 76 65 20 69  ts if you give i
7fa0: 74 20 61 20 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  t a long long in
7fb0: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  t..*/.void sqlit
7fc0: 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
7fd0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
7fe0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
7ff0: 73 74 20 61 70 3b 0a 20 20 53 74 72 41 63 63 75  st ap;.  StrAccu
8000: 6d 20 61 63 63 3b 0a 20 20 63 68 61 72 20 7a 42  m acc;.  char zB
8010: 75 66 5b 35 30 30 5d 3b 0a 20 20 73 71 6c 69 74  uf[500];.  sqlit
8020: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
8030: 61 63 63 2c 20 7a 42 75 66 2c 20 73 69 7a 65 6f  acc, zBuf, sizeo
8040: 66 28 7a 42 75 66 29 2c 20 30 29 3b 0a 20 20 61  f(zBuf), 0);.  a
8050: 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 30  cc.useMalloc = 0
8060: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
8070: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 73 71 6c 69  zFormat);.  sqli
8080: 74 65 33 56 58 50 72 69 6e 74 66 28 26 61 63 63  te3VXPrintf(&acc
8090: 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  , 0, zFormat, ap
80a0: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
80b0: 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  .  sqlite3StrAcc
80c0: 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a  umFinish(&acc);.
80d0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74    fprintf(stdout
80e0: 2c 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20  ,"%s", zBuf);.  
80f0: 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a  fflush(stdout);.
8100: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
8110: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
8120: 41 43 45 0a 2f 2a 0a 2a 2a 20 76 61 72 69 61 62  ACE./*.** variab
8130: 6c 65 2d 61 72 67 75 6d 65 6e 74 20 77 72 61 70  le-argument wrap
8140: 70 65 72 20 61 72 6f 75 6e 64 20 73 71 6c 69 74  per around sqlit
8150: 65 33 56 58 50 72 69 6e 74 66 28 29 2e 0a 2a 2f  e3VXPrintf()..*/
8160: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
8170: 69 6e 74 66 28 53 74 72 41 63 63 75 6d 20 2a 70  intf(StrAccum *p
8180: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  , const char *zF
8190: 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76  ormat, ...){.  v
81a0: 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f  a_list ap;.  va_
81b0: 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74  start(ap,zFormat
81c0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72  );.  sqlite3VXPr
81d0: 69 6e 74 66 28 70 2c 20 31 2c 20 7a 46 6f 72 6d  intf(p, 1, zForm
81e0: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
81f0: 64 28 61 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  d(ap);.}.#endif.