/ Hex Artifact Content
Login

Artifact cbf27c320091a83279d1738f68a27a9fe01698c607ce80516ab6bdb5a9c36a1a:


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 0a 2a 2a 0a  lic domain. .**.
0060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a  **********.**.**
00b0: 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e 74 61   This file conta
00c0: 69 6e 73 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ins code for a s
00d0: 65 74 20 6f 66 20 22 70 72 69 6e 74 66 22 2d 6c  et of "printf"-l
00e0: 69 6b 65 20 72 6f 75 74 69 6e 65 73 2e 20 20 54  ike routines.  T
00f0: 68 65 73 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  hese.** routines
0100: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 73 20   format strings 
0110: 6d 75 63 68 20 6c 69 6b 65 20 74 68 65 20 70 72  much like the pr
0120: 69 6e 74 66 28 29 20 66 72 6f 6d 20 74 68 65 20  intf() from the 
0130: 73 74 61 6e 64 61 72 64 20 43 0a 2a 2a 20 6c 69  standard C.** li
0140: 62 72 61 72 79 2c 20 74 68 6f 75 67 68 20 74 68  brary, though th
0150: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
0160: 20 68 65 72 65 20 68 61 73 20 65 6e 68 61 6e 63   here has enhanc
0170: 65 6d 65 6e 74 73 20 74 6f 20 73 75 70 70 6f 72  ements to suppor
0180: 74 0a 2a 2a 20 53 51 4c 69 74 65 2e 0a 2a 2f 0a  t.** SQLite..*/.
0190: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
01a0: 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 43 6f  Int.h"../*.** Co
01b0: 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66  nversion types f
01c0: 61 6c 6c 20 69 6e 74 6f 20 76 61 72 69 6f 75 73  all into various
01d0: 20 63 61 74 65 67 6f 72 69 65 73 20 61 73 20 64   categories as d
01e0: 65 66 69 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a  efined by the.**
01f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 75 6d 65   following enume
0200: 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  ration..*/.#defi
0210: 6e 65 20 65 74 52 41 44 49 58 20 20 20 20 20 20  ne etRADIX      
0220: 20 30 20 2f 2a 20 6e 6f 6e 2d 64 65 63 69 6d 61   0 /* non-decima
0230: 6c 20 69 6e 74 65 67 65 72 20 74 79 70 65 73 2e  l integer types.
0240: 20 20 25 78 20 25 6f 20 2a 2f 0a 23 64 65 66 69    %x %o */.#defi
0250: 6e 65 20 65 74 46 4c 4f 41 54 20 20 20 20 20 20  ne etFLOAT      
0260: 20 31 20 2f 2a 20 46 6c 6f 61 74 69 6e 67 20 70   1 /* Floating p
0270: 6f 69 6e 74 2e 20 20 25 66 20 2a 2f 0a 23 64 65  oint.  %f */.#de
0280: 66 69 6e 65 20 65 74 45 58 50 20 20 20 20 20 20  fine etEXP      
0290: 20 20 20 32 20 2f 2a 20 45 78 70 6f 6e 65 6e 74     2 /* Exponent
02a0: 69 6f 6e 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 20  ional notation. 
02b0: 25 65 20 61 6e 64 20 25 45 20 2a 2f 0a 23 64 65  %e and %E */.#de
02c0: 66 69 6e 65 20 65 74 47 45 4e 45 52 49 43 20 20  fine etGENERIC  
02d0: 20 20 20 33 20 2f 2a 20 46 6c 6f 61 74 69 6e 67     3 /* Floating
02e0: 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 2c   or exponential,
02f0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 65 78   depending on ex
0300: 70 6f 6e 65 6e 74 2e 20 25 67 20 2a 2f 0a 23 64  ponent. %g */.#d
0310: 65 66 69 6e 65 20 65 74 53 49 5a 45 20 20 20 20  efine etSIZE    
0320: 20 20 20 20 34 20 2f 2a 20 52 65 74 75 72 6e 20      4 /* Return 
0330: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  number of charac
0340: 74 65 72 73 20 70 72 6f 63 65 73 73 65 64 20 73  ters processed s
0350: 6f 20 66 61 72 2e 20 25 6e 20 2a 2f 0a 23 64 65  o far. %n */.#de
0360: 66 69 6e 65 20 65 74 53 54 52 49 4e 47 20 20 20  fine etSTRING   
0370: 20 20 20 35 20 2f 2a 20 53 74 72 69 6e 67 73 2e     5 /* Strings.
0380: 20 25 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %s */.#define e
0390: 74 44 59 4e 53 54 52 49 4e 47 20 20 20 36 20 2f  tDYNSTRING   6 /
03a0: 2a 20 44 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * Dynamically al
03b0: 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67 73 2e  located strings.
03c0: 20 25 7a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %z */.#define e
03d0: 74 50 45 52 43 45 4e 54 20 20 20 20 20 37 20 2f  tPERCENT     7 /
03e0: 2a 20 50 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  * Percent symbol
03f0: 2e 20 25 25 20 2a 2f 0a 23 64 65 66 69 6e 65 20  . %% */.#define 
0400: 65 74 43 48 41 52 58 20 20 20 20 20 20 20 38 20  etCHARX       8 
0410: 2f 2a 20 43 68 61 72 61 63 74 65 72 73 2e 20 25  /* Characters. %
0420: 63 20 2a 2f 0a 2f 2a 20 54 68 65 20 72 65 73 74  c */./* The rest
0430: 20 61 72 65 20 65 78 74 65 6e 73 69 6f 6e 73 2c   are extensions,
0440: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 66 6f   not normally fo
0450: 75 6e 64 20 69 6e 20 70 72 69 6e 74 66 28 29 20  und in printf() 
0460: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 51 4c  */.#define etSQL
0470: 45 53 43 41 50 45 20 20 20 39 20 2f 2a 20 53 74  ESCAPE   9 /* St
0480: 72 69 6e 67 73 20 77 69 74 68 20 27 5c 27 27 20  rings with '\'' 
0490: 64 6f 75 62 6c 65 64 2e 20 20 25 71 20 2a 2f 0a  doubled.  %q */.
04a0: 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45 53 43  #define etSQLESC
04b0: 41 50 45 32 20 31 30 20 2f 2a 20 53 74 72 69 6e  APE2 10 /* Strin
04c0: 67 73 20 77 69 74 68 20 27 5c 27 27 20 64 6f 75  gs with '\'' dou
04d0: 62 6c 65 64 20 61 6e 64 20 65 6e 63 6c 6f 73 65  bled and enclose
04e0: 64 20 69 6e 20 27 27 2c 0a 20 20 20 20 20 20 20  d in '',.       
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 73     NULL pointers
0510: 20 72 65 70 6c 61 63 65 64 20 62 79 20 53 51 4c   replaced by SQL
0520: 20 4e 55 4c 4c 2e 20 20 25 51 20 2a 2f 0a 23 64   NULL.  %Q */.#d
0530: 65 66 69 6e 65 20 65 74 54 4f 4b 45 4e 20 20 20  efine etTOKEN   
0540: 20 20 20 31 31 20 2f 2a 20 61 20 70 6f 69 6e 74     11 /* a point
0550: 65 72 20 74 6f 20 61 20 54 6f 6b 65 6e 20 73 74  er to a Token st
0560: 72 75 63 74 75 72 65 20 2a 2f 0a 23 64 65 66 69  ructure */.#defi
0570: 6e 65 20 65 74 53 52 43 4c 49 53 54 20 20 20 20  ne etSRCLIST    
0580: 31 32 20 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20  12 /* a pointer 
0590: 74 6f 20 61 20 53 72 63 4c 69 73 74 20 2a 2f 0a  to a SrcList */.
05a0: 23 64 65 66 69 6e 65 20 65 74 50 4f 49 4e 54 45  #define etPOINTE
05b0: 52 20 20 20 20 31 33 20 2f 2a 20 54 68 65 20 25  R    13 /* The %
05c0: 70 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a  p conversion */.
05d0: 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45 53 43  #define etSQLESC
05e0: 41 50 45 33 20 31 34 20 2f 2a 20 25 77 20 2d 3e  APE3 14 /* %w ->
05f0: 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27 5c   Strings with '\
0600: 22 27 20 64 6f 75 62 6c 65 64 20 2a 2f 0a 23 64  "' doubled */.#d
0610: 65 66 69 6e 65 20 65 74 4f 52 44 49 4e 41 4c 20  efine etORDINAL 
0620: 20 20 20 31 35 20 2f 2a 20 25 72 20 2d 3e 20 31     15 /* %r -> 1
0630: 73 74 2c 20 32 6e 64 2c 20 33 72 64 2c 20 34 74  st, 2nd, 3rd, 4t
0640: 68 2c 20 65 74 63 2e 20 20 45 6e 67 6c 69 73 68  h, etc.  English
0650: 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
0660: 20 65 74 44 45 43 49 4d 41 4c 20 20 20 20 31 36   etDECIMAL    16
0670: 20 2f 2a 20 25 64 20 6f 72 20 25 75 2c 20 62 75   /* %d or %u, bu
0680: 74 20 6e 6f 74 20 25 78 2c 20 25 6f 20 2a 2f 0a  t not %x, %o */.
0690: 0a 23 64 65 66 69 6e 65 20 65 74 49 4e 56 41 4c  .#define etINVAL
06a0: 49 44 20 20 20 20 31 37 20 2f 2a 20 41 6e 79 20  ID    17 /* Any 
06b0: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f 6e  unrecognized con
06c0: 76 65 72 73 69 6f 6e 20 74 79 70 65 20 2a 2f 0a  version type */.
06d0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 79  ../*.** An "etBy
06e0: 74 65 22 20 69 73 20 61 6e 20 38 2d 62 69 74 20  te" is an 8-bit 
06f0: 75 6e 73 69 67 6e 65 64 20 76 61 6c 75 65 2e 0a  unsigned value..
0700: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
0710: 6e 65 64 20 63 68 61 72 20 65 74 42 79 74 65 3b  ned char etByte;
0720: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 62 75 69  ../*.** Each bui
0730: 6c 74 69 6e 20 63 6f 6e 76 65 72 73 69 6f 6e 20  ltin conversion 
0740: 63 68 61 72 61 63 74 65 72 20 28 65 78 3a 20 74  character (ex: t
0750: 68 65 20 27 64 27 20 69 6e 20 22 25 64 22 29 20  he 'd' in "%d") 
0760: 69 73 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  is described.** 
0770: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
0780: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0790: 73 74 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70  structure.*/.typ
07a0: 65 64 65 66 20 73 74 72 75 63 74 20 65 74 5f 69  edef struct et_i
07b0: 6e 66 6f 20 7b 20 20 20 2f 2a 20 49 6e 66 6f 72  nfo {   /* Infor
07c0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
07d0: 68 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 2a  h format field *
07e0: 2f 0a 20 20 63 68 61 72 20 66 6d 74 74 79 70 65  /.  char fmttype
07f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
0800: 54 68 65 20 66 6f 72 6d 61 74 20 66 69 65 6c 64  The format field
0810: 20 63 6f 64 65 20 6c 65 74 74 65 72 20 2a 2f 0a   code letter */.
0820: 20 20 65 74 42 79 74 65 20 62 61 73 65 3b 20 20    etByte base;  
0830: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0840: 65 20 62 61 73 65 20 66 6f 72 20 72 61 64 69 78  e base for radix
0850: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 20   conversion */. 
0860: 20 65 74 42 79 74 65 20 66 6c 61 67 73 3b 20 20   etByte flags;  
0870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
0880: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 46 4c 41 47   or more of FLAG
0890: 5f 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  _ constants belo
08a0: 77 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 74 79  w */.  etByte ty
08b0: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
08c0: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61  /* Conversion pa
08d0: 72 61 64 69 67 6d 20 2a 2f 0a 20 20 65 74 42 79  radigm */.  etBy
08e0: 74 65 20 63 68 61 72 73 65 74 3b 20 20 20 20 20  te charset;     
08f0: 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
0900: 6e 74 6f 20 61 44 69 67 69 74 73 5b 5d 20 6f 66  nto aDigits[] of
0910: 20 74 68 65 20 64 69 67 69 74 73 20 73 74 72 69   the digits stri
0920: 6e 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 70  ng */.  etByte p
0930: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
0940: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
0950: 61 50 72 65 66 69 78 5b 5d 20 6f 66 20 74 68 65  aPrefix[] of the
0960: 20 70 72 65 66 69 78 20 73 74 72 69 6e 67 20 2a   prefix string *
0970: 2f 0a 7d 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f 2a  /.} et_info;../*
0980: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
0990: 65 73 20 66 6f 72 20 65 74 5f 69 6e 66 6f 2e 66  es for et_info.f
09a0: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
09b0: 46 4c 41 47 5f 53 49 47 4e 45 44 20 20 20 20 31  FLAG_SIGNED    1
09c0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
09d0: 74 68 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e  the value to con
09e0: 76 65 72 74 20 69 73 20 73 69 67 6e 65 64 20 2a  vert is signed *
09f0: 2f 0a 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 53  /.#define FLAG_S
0a00: 54 52 49 4e 47 20 20 20 20 34 20 20 20 20 20 2f  TRING    4     /
0a10: 2a 20 41 6c 6c 6f 77 20 69 6e 66 69 6e 69 74 65  * Allow infinite
0a20: 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 0a 0a   precision */...
0a30: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
0a40: 69 6e 67 20 74 61 62 6c 65 20 69 73 20 73 65 61  ing table is sea
0a50: 72 63 68 65 64 20 6c 69 6e 65 61 72 6c 79 2c 20  rched linearly, 
0a60: 73 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 74 6f  so it is good to
0a70: 20 70 75 74 20 74 68 65 0a 2a 2a 20 6d 6f 73 74   put the.** most
0a80: 20 66 72 65 71 75 65 6e 74 6c 79 20 75 73 65 64   frequently used
0a90: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70 65   conversion type
0aa0: 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 73 74 61 74  s first..*/.stat
0ab0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 61 44  ic const char aD
0ac0: 69 67 69 74 73 5b 5d 20 3d 20 22 30 31 32 33 34  igits[] = "01234
0ad0: 35 36 37 38 39 41 42 43 44 45 46 30 31 32 33 34  56789ABCDEF01234
0ae0: 35 36 37 38 39 61 62 63 64 65 66 22 3b 0a 73 74  56789abcdef";.st
0af0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
0b00: 61 50 72 65 66 69 78 5b 5d 20 3d 20 22 2d 78 30  aPrefix[] = "-x0
0b10: 5c 30 30 30 58 30 22 3b 0a 73 74 61 74 69 63 20  \000X0";.static 
0b20: 63 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20 66 6d  const et_info fm
0b30: 74 69 6e 66 6f 5b 5d 20 3d 20 7b 0a 20 20 7b 20  tinfo[] = {.  { 
0b40: 20 27 64 27 2c 20 31 30 2c 20 31 2c 20 65 74 44   'd', 10, 1, etD
0b50: 45 43 49 4d 41 4c 2c 20 20 20 20 30 2c 20 20 30  ECIMAL,    0,  0
0b60: 20 7d 2c 0a 20 20 7b 20 20 27 73 27 2c 20 20 30   },.  {  's',  0
0b70: 2c 20 34 2c 20 65 74 53 54 52 49 4e 47 2c 20 20  , 4, etSTRING,  
0b80: 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20     0,  0 },.  { 
0b90: 20 27 67 27 2c 20 20 30 2c 20 31 2c 20 65 74 47   'g',  0, 1, etG
0ba0: 45 4e 45 52 49 43 2c 20 20 20 20 33 30 2c 20 30  ENERIC,    30, 0
0bb0: 20 7d 2c 0a 20 20 7b 20 20 27 7a 27 2c 20 20 30   },.  {  'z',  0
0bc0: 2c 20 34 2c 20 65 74 44 59 4e 53 54 52 49 4e 47  , 4, etDYNSTRING
0bd0: 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20  ,  0,  0 },.  { 
0be0: 20 27 71 27 2c 20 20 30 2c 20 34 2c 20 65 74 53   'q',  0, 4, etS
0bf0: 51 4c 45 53 43 41 50 45 2c 20 20 30 2c 20 20 30  QLESCAPE,  0,  0
0c00: 20 7d 2c 0a 20 20 7b 20 20 27 51 27 2c 20 20 30   },.  {  'Q',  0
0c10: 2c 20 34 2c 20 65 74 53 51 4c 45 53 43 41 50 45  , 4, etSQLESCAPE
0c20: 32 2c 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20  2, 0,  0 },.  { 
0c30: 20 27 77 27 2c 20 20 30 2c 20 34 2c 20 65 74 53   'w',  0, 4, etS
0c40: 51 4c 45 53 43 41 50 45 33 2c 20 30 2c 20 20 30  QLESCAPE3, 0,  0
0c50: 20 7d 2c 0a 20 20 7b 20 20 27 63 27 2c 20 20 30   },.  {  'c',  0
0c60: 2c 20 30 2c 20 65 74 43 48 41 52 58 2c 20 20 20  , 0, etCHARX,   
0c70: 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20     0,  0 },.  { 
0c80: 20 27 6f 27 2c 20 20 38 2c 20 30 2c 20 65 74 52   'o',  8, 0, etR
0c90: 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20 20 32  ADIX,      0,  2
0ca0: 20 7d 2c 0a 20 20 7b 20 20 27 75 27 2c 20 31 30   },.  {  'u', 10
0cb0: 2c 20 30 2c 20 65 74 44 45 43 49 4d 41 4c 2c 20  , 0, etDECIMAL, 
0cc0: 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20     0,  0 },.  { 
0cd0: 20 27 78 27 2c 20 31 36 2c 20 30 2c 20 65 74 52   'x', 16, 0, etR
0ce0: 41 44 49 58 2c 20 20 20 20 20 20 31 36 2c 20 31  ADIX,      16, 1
0cf0: 20 7d 2c 0a 20 20 7b 20 20 27 58 27 2c 20 31 36   },.  {  'X', 16
0d00: 2c 20 30 2c 20 65 74 52 41 44 49 58 2c 20 20 20  , 0, etRADIX,   
0d10: 20 20 20 30 2c 20 20 34 20 7d 2c 0a 23 69 66 6e     0,  4 },.#ifn
0d20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
0d30: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
0d40: 20 7b 20 20 27 66 27 2c 20 20 30 2c 20 31 2c 20   {  'f',  0, 1, 
0d50: 65 74 46 4c 4f 41 54 2c 20 20 20 20 20 20 30 2c  etFLOAT,      0,
0d60: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 65 27 2c    0 },.  {  'e',
0d70: 20 20 30 2c 20 31 2c 20 65 74 45 58 50 2c 20 20    0, 1, etEXP,  
0d80: 20 20 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20        30, 0 },. 
0d90: 20 7b 20 20 27 45 27 2c 20 20 30 2c 20 31 2c 20   {  'E',  0, 1, 
0da0: 65 74 45 58 50 2c 20 20 20 20 20 20 20 20 31 34  etEXP,        14
0db0: 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 47 27 2c  , 0 },.  {  'G',
0dc0: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
0dd0: 43 2c 20 20 20 20 31 34 2c 20 30 20 7d 2c 0a 23  C,    14, 0 },.#
0de0: 65 6e 64 69 66 0a 20 20 7b 20 20 27 69 27 2c 20  endif.  {  'i', 
0df0: 31 30 2c 20 31 2c 20 65 74 44 45 43 49 4d 41 4c  10, 1, etDECIMAL
0e00: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
0e10: 7b 20 20 27 6e 27 2c 20 20 30 2c 20 30 2c 20 65  {  'n',  0, 0, e
0e20: 74 53 49 5a 45 2c 20 20 20 20 20 20 20 30 2c 20  tSIZE,       0, 
0e30: 20 30 20 7d 2c 0a 20 20 7b 20 20 27 25 27 2c 20   0 },.  {  '%', 
0e40: 20 30 2c 20 30 2c 20 65 74 50 45 52 43 45 4e 54   0, 0, etPERCENT
0e50: 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20  ,    0,  0 },.  
0e60: 7b 20 20 27 70 27 2c 20 31 36 2c 20 30 2c 20 65  {  'p', 16, 0, e
0e70: 74 50 4f 49 4e 54 45 52 2c 20 20 20 20 30 2c 20  tPOINTER,    0, 
0e80: 20 31 20 7d 2c 0a 0a 20 20 2f 2a 20 41 6c 6c 20   1 },..  /* All 
0e90: 74 68 65 20 72 65 73 74 20 61 72 65 20 75 6e 64  the rest are und
0ea0: 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 61 72  ocumented and ar
0eb0: 65 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75  e for internal u
0ec0: 73 65 20 6f 6e 6c 79 20 2a 2f 0a 20 20 7b 20 20  se only */.  {  
0ed0: 27 54 27 2c 20 20 30 2c 20 30 2c 20 65 74 54 4f  'T',  0, 0, etTO
0ee0: 4b 45 4e 2c 20 20 20 20 20 20 30 2c 20 20 30 20  KEN,      0,  0 
0ef0: 7d 2c 0a 20 20 7b 20 20 27 53 27 2c 20 20 30 2c  },.  {  'S',  0,
0f00: 20 30 2c 20 65 74 53 52 43 4c 49 53 54 2c 20 20   0, etSRCLIST,  
0f10: 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20    0,  0 },.  {  
0f20: 27 72 27 2c 20 31 30 2c 20 31 2c 20 65 74 4f 52  'r', 10, 1, etOR
0f30: 44 49 4e 41 4c 2c 20 20 20 20 30 2c 20 20 30 20  DINAL,    0,  0 
0f40: 7d 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  },.};../*.** If 
0f50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
0f60: 54 49 4e 47 5f 50 4f 49 4e 54 20 69 73 20 64 65  TING_POINT is de
0f70: 66 69 6e 65 64 2c 20 74 68 65 6e 20 6e 6f 6e 65  fined, then none
0f80: 20 6f 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67   of the floating
0f90: 20 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6e 76 65 72   point.** conver
0fa0: 73 69 6f 6e 73 20 77 69 6c 6c 20 77 6f 72 6b 2e  sions will work.
0fb0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
0fc0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
0fd0: 5f 50 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 2a 76  _POINT./*.** "*v
0fe0: 61 6c 22 20 69 73 20 61 20 64 6f 75 62 6c 65 20  al" is a double 
0ff0: 73 75 63 68 20 74 68 61 74 20 30 2e 31 20 3c 3d  such that 0.1 <=
1000: 20 2a 76 61 6c 20 3c 20 31 30 2e 30 0a 2a 2a 20   *val < 10.0.** 
1010: 52 65 74 75 72 6e 20 74 68 65 20 61 73 63 69 69  Return the ascii
1020: 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 6c 65   code for the le
1030: 61 64 69 6e 67 20 64 69 67 69 74 20 6f 66 20 2a  ading digit of *
1040: 76 61 6c 2c 20 74 68 65 6e 0a 2a 2a 20 6d 75 6c  val, then.** mul
1050: 74 69 70 6c 79 20 22 2a 76 61 6c 22 20 62 79 20  tiply "*val" by 
1060: 31 30 2e 30 20 74 6f 20 72 65 6e 6f 72 6d 61 6c  10.0 to renormal
1070: 69 7a 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70  ize..**.** Examp
1080: 6c 65 3a 0a 2a 2a 20 20 20 20 20 69 6e 70 75 74  le:.**     input
1090: 3a 20 20 20 20 20 2a 76 61 6c 20 3d 20 33 2e 31  :     *val = 3.1
10a0: 34 31 35 39 0a 2a 2a 20 20 20 20 20 6f 75 74 70  4159.**     outp
10b0: 75 74 3a 20 20 20 20 2a 76 61 6c 20 3d 20 31 2e  ut:    *val = 1.
10c0: 34 31 35 39 20 20 20 20 66 75 6e 63 74 69 6f 6e  4159    function
10d0: 20 72 65 74 75 72 6e 20 3d 20 27 33 27 0a 2a 2a   return = '3'.**
10e0: 0a 2a 2a 20 54 68 65 20 63 6f 75 6e 74 65 72 20  .** The counter 
10f0: 2a 63 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  *cnt is incremen
1100: 74 65 64 20 65 61 63 68 20 74 69 6d 65 2e 20 20  ted each time.  
1110: 41 66 74 65 72 20 63 6f 75 6e 74 65 72 20 65 78  After counter ex
1120: 63 65 65 64 73 0a 2a 2a 20 31 36 20 28 74 68 65  ceeds.** 16 (the
1130: 20 6e 75 6d 62 65 72 20 6f 66 20 73 69 67 6e 69   number of signi
1140: 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 69 6e  ficant digits in
1150: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 29   a 64-bit float)
1160: 20 27 30 27 20 69 73 0a 2a 2a 20 61 6c 77 61 79   '0' is.** alway
1170: 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73  s returned..*/.s
1180: 74 61 74 69 63 20 63 68 61 72 20 65 74 5f 67 65  tatic char et_ge
1190: 74 64 69 67 69 74 28 4c 4f 4e 47 44 4f 55 42 4c  tdigit(LONGDOUBL
11a0: 45 5f 54 59 50 45 20 2a 76 61 6c 2c 20 69 6e 74  E_TYPE *val, int
11b0: 20 2a 63 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69   *cnt){.  int di
11c0: 67 69 74 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c  git;.  LONGDOUBL
11d0: 45 5f 54 59 50 45 20 64 3b 0a 20 20 69 66 28 20  E_TYPE d;.  if( 
11e0: 28 2a 63 6e 74 29 3c 3d 30 20 29 20 72 65 74 75  (*cnt)<=0 ) retu
11f0: 72 6e 20 27 30 27 3b 0a 20 20 28 2a 63 6e 74 29  rn '0';.  (*cnt)
1200: 2d 2d 3b 0a 20 20 64 69 67 69 74 20 3d 20 28 69  --;.  digit = (i
1210: 6e 74 29 2a 76 61 6c 3b 0a 20 20 64 20 3d 20 64  nt)*val;.  d = d
1220: 69 67 69 74 3b 0a 20 20 64 69 67 69 74 20 2b 3d  igit;.  digit +=
1230: 20 27 30 27 3b 0a 20 20 2a 76 61 6c 20 3d 20 28   '0';.  *val = (
1240: 2a 76 61 6c 20 2d 20 64 29 2a 31 30 2e 30 3b 0a  *val - d)*10.0;.
1250: 20 20 72 65 74 75 72 6e 20 28 63 68 61 72 29 64    return (char)d
1260: 69 67 69 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  igit;.}.#endif /
1270: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  * SQLITE_OMIT_FL
1280: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20 2a 2f 0a  OATING_POINT */.
1290: 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53  ./*.** Set the S
12a0: 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 74 20 74  trAccum object t
12b0: 6f 20 61 6e 20 65 72 72 6f 72 20 6d 6f 64 65 2e  o an error mode.
12c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
12d0: 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72  setStrAccumError
12e0: 28 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 75 38  (StrAccum *p, u8
12f0: 20 65 45 72 72 6f 72 29 7b 0a 20 20 61 73 73 65   eError){.  asse
1300: 72 74 28 20 65 45 72 72 6f 72 3d 3d 53 51 4c 49  rt( eError==SQLI
1310: 54 45 5f 4e 4f 4d 45 4d 20 7c 7c 20 65 45 72 72  TE_NOMEM || eErr
1320: 6f 72 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  or==SQLITE_TOOBI
1330: 47 20 29 3b 0a 20 20 70 2d 3e 61 63 63 45 72 72  G );.  p->accErr
1340: 6f 72 20 3d 20 65 45 72 72 6f 72 3b 0a 20 20 70  or = eError;.  p
1350: 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 30 3b 0a 7d 0a  ->nAlloc = 0;.}.
1360: 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 20 61 72 67  ./*.** Extra arg
1370: 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 66 72 6f  ument values fro
1380: 6d 20 61 20 50 72 69 6e 74 66 41 72 67 75 6d 65  m a PrintfArgume
1390: 6e 74 73 20 6f 62 6a 65 63 74 0a 2a 2f 0a 73 74  nts object.*/.st
13a0: 61 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74  atic sqlite3_int
13b0: 36 34 20 67 65 74 49 6e 74 41 72 67 28 50 72 69  64 getIntArg(Pri
13c0: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 2a 70 29  ntfArguments *p)
13d0: 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 41 72 67 3c  {.  if( p->nArg<
13e0: 3d 70 2d 3e 6e 55 73 65 64 20 29 20 72 65 74 75  =p->nUsed ) retu
13f0: 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 73  rn 0;.  return s
1400: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
1410: 36 34 28 70 2d 3e 61 70 41 72 67 5b 70 2d 3e 6e  64(p->apArg[p->n
1420: 55 73 65 64 2b 2b 5d 29 3b 0a 7d 0a 73 74 61 74  Used++]);.}.stat
1430: 69 63 20 64 6f 75 62 6c 65 20 67 65 74 44 6f 75  ic double getDou
1440: 62 6c 65 41 72 67 28 50 72 69 6e 74 66 41 72 67  bleArg(PrintfArg
1450: 75 6d 65 6e 74 73 20 2a 70 29 7b 0a 20 20 69 66  uments *p){.  if
1460: 28 20 70 2d 3e 6e 41 72 67 3c 3d 70 2d 3e 6e 55  ( p->nArg<=p->nU
1470: 73 65 64 20 29 20 72 65 74 75 72 6e 20 30 2e 30  sed ) return 0.0
1480: 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ;.  return sqlit
1490: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
14a0: 70 2d 3e 61 70 41 72 67 5b 70 2d 3e 6e 55 73 65  p->apArg[p->nUse
14b0: 64 2b 2b 5d 29 3b 0a 7d 0a 73 74 61 74 69 63 20  d++]);.}.static 
14c0: 63 68 61 72 20 2a 67 65 74 54 65 78 74 41 72 67  char *getTextArg
14d0: 28 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73  (PrintfArguments
14e0: 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6e   *p){.  if( p->n
14f0: 41 72 67 3c 3d 70 2d 3e 6e 55 73 65 64 20 29 20  Arg<=p->nUsed ) 
1500: 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75  return 0;.  retu
1510: 72 6e 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65  rn (char*)sqlite
1520: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 2d 3e  3_value_text(p->
1530: 61 70 41 72 67 5b 70 2d 3e 6e 55 73 65 64 2b 2b  apArg[p->nUsed++
1540: 5d 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ]);.}../*.** All
1550: 6f 63 61 74 65 20 6d 65 6d 6f 72 79 20 66 6f 72  ocate memory for
1560: 20 61 20 74 65 6d 70 6f 72 61 72 79 20 62 75 66   a temporary buf
1570: 66 65 72 20 6e 65 65 64 65 64 20 66 6f 72 20 70  fer needed for p
1580: 72 69 6e 74 66 20 72 65 6e 64 65 72 69 6e 67 2e  rintf rendering.
1590: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65  .**.** If the re
15a0: 71 75 65 73 74 65 64 20 73 69 7a 65 20 6f 66 20  quested size of 
15b0: 74 68 65 20 74 65 6d 70 20 62 75 66 66 65 72 20  the temp buffer 
15c0: 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  is larger than t
15d0: 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
15e0: 65 20 6f 75 74 70 75 74 20 62 75 66 66 65 72 20  e output buffer 
15f0: 69 6e 20 70 41 63 63 75 6d 2c 20 74 68 65 6e 20  in pAccum, then 
1600: 63 61 75 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  cause an SQLITE_
1610: 54 4f 4f 42 49 47 20 65 72 72 6f 72 2e 0a 2a 2a  TOOBIG error..**
1620: 20 44 6f 20 74 68 65 20 73 69 7a 65 20 63 68 65   Do the size che
1630: 63 6b 20 62 65 66 6f 72 65 20 74 68 65 20 6d 65  ck before the me
1640: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1650: 74 6f 20 70 72 65 76 65 6e 74 20 72 6f 67 75 65  to prevent rogue
1660: 0a 2a 2a 20 53 51 4c 20 66 72 6f 6d 20 72 65 71  .** SQL from req
1670: 75 65 73 74 69 6e 67 20 6c 61 72 67 65 20 61 6c  uesting large al
1680: 6c 6f 63 61 74 69 6f 6e 73 20 75 73 69 6e 67 20  locations using 
1690: 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20 6f 72  the precision or
16a0: 20 77 69 64 74 68 0a 2a 2a 20 66 69 65 6c 64 20   width.** field 
16b0: 6f 66 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  of the printf() 
16c0: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  function..*/.sta
16d0: 74 69 63 20 63 68 61 72 20 2a 70 72 69 6e 74 66  tic char *printf
16e0: 54 65 6d 70 42 75 66 28 73 71 6c 69 74 65 33 5f  TempBuf(sqlite3_
16f0: 73 74 72 20 2a 70 41 63 63 75 6d 2c 20 73 71 6c  str *pAccum, sql
1700: 69 74 65 33 5f 69 6e 74 36 34 20 6e 29 7b 0a 20  ite3_int64 n){. 
1710: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20   char *z;.  if( 
1720: 6e 3e 70 41 63 63 75 6d 2d 3e 6e 41 6c 6c 6f 63  n>pAccum->nAlloc
1730: 20 26 26 20 6e 3e 70 41 63 63 75 6d 2d 3e 6d 78   && n>pAccum->mx
1740: 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 73 65 74  Alloc ){.    set
1750: 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70 41  StrAccumError(pA
1760: 63 63 75 6d 2c 20 53 51 4c 49 54 45 5f 54 4f 4f  ccum, SQLITE_TOO
1770: 42 49 47 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  BIG);.    return
1780: 20 30 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71   0;.  }.  z = sq
1790: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
17a0: 28 70 41 63 63 75 6d 2d 3e 64 62 2c 20 6e 29 3b  (pAccum->db, n);
17b0: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  .  if( z==0 ){. 
17c0: 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45 72     setStrAccumEr
17d0: 72 6f 72 28 70 41 63 63 75 6d 2c 20 53 51 4c 49  ror(pAccum, SQLI
17e0: 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20  TE_NOMEM);.  }. 
17f0: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
1800: 0a 2a 2a 20 4f 6e 20 6d 61 63 68 69 6e 65 73 20  .** On machines 
1810: 77 69 74 68 20 61 20 73 6d 61 6c 6c 20 73 74 61  with a small sta
1820: 63 6b 20 73 69 7a 65 2c 20 79 6f 75 20 63 61 6e  ck size, you can
1830: 20 72 65 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a   redefine the.**
1840: 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55   SQLITE_PRINT_BU
1850: 46 5f 53 49 5a 45 20 74 6f 20 62 65 20 73 6f 6d  F_SIZE to be som
1860: 65 74 68 69 6e 67 20 73 6d 61 6c 6c 65 72 2c 20  ething smaller, 
1870: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
1880: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 52  ifndef SQLITE_PR
1890: 49 4e 54 5f 42 55 46 5f 53 49 5a 45 0a 23 20 64  INT_BUF_SIZE.# d
18a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
18b0: 4e 54 5f 42 55 46 5f 53 49 5a 45 20 37 30 0a 23  NT_BUF_SIZE 70.#
18c0: 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 65 74  endif.#define et
18d0: 42 55 46 53 49 5a 45 20 53 51 4c 49 54 45 5f 50  BUFSIZE SQLITE_P
18e0: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20 20 2f  RINT_BUF_SIZE  /
18f0: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 6f 75  * Size of the ou
1900: 74 70 75 74 20 62 75 66 66 65 72 20 2a 2f 0a 0a  tput buffer */..
1910: 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 61 20 73  /*.** Render a s
1920: 74 72 69 6e 67 20 67 69 76 65 6e 20 62 79 20 22  tring given by "
1930: 66 6d 74 22 20 69 6e 74 6f 20 74 68 65 20 53 74  fmt" into the St
1940: 72 41 63 63 75 6d 20 6f 62 6a 65 63 74 2e 0a 2a  rAccum object..*
1950: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73  /.void sqlite3_s
1960: 74 72 5f 76 61 70 70 65 6e 64 66 28 0a 20 20 73  tr_vappendf(.  s
1970: 71 6c 69 74 65 33 5f 73 74 72 20 2a 70 41 63 63  qlite3_str *pAcc
1980: 75 6d 2c 20 20 20 20 20 20 20 2f 2a 20 41 63 63  um,       /* Acc
1990: 75 6d 75 6c 61 74 65 20 72 65 73 75 6c 74 73 20  umulate results 
19a0: 68 65 72 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  here */.  const 
19b0: 63 68 61 72 20 2a 66 6d 74 2c 20 20 20 20 20 20  char *fmt,      
19c0: 20 20 20 20 20 2f 2a 20 46 6f 72 6d 61 74 20 73       /* Format s
19d0: 74 72 69 6e 67 20 2a 2f 0a 20 20 76 61 5f 6c 69  tring */.  va_li
19e0: 73 74 20 61 70 20 20 20 20 20 20 20 20 20 20 20  st ap           
19f0: 20 20 20 20 20 20 2f 2a 20 61 72 67 75 6d 65 6e        /* argumen
1a00: 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 63  ts */.){.  int c
1a10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a20: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 63 68        /* Next ch
1a30: 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 20 66  aracter in the f
1a40: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a  ormat string */.
1a50: 20 20 63 68 61 72 20 2a 62 75 66 70 74 3b 20 20    char *bufpt;  
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a70: 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 63  Pointer to the c
1a80: 6f 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72  onversion buffer
1a90: 20 2a 2f 0a 20 20 69 6e 74 20 70 72 65 63 69 73   */.  int precis
1aa0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
1ab0: 20 2f 2a 20 50 72 65 63 69 73 69 6f 6e 20 6f 66   /* Precision of
1ac0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 65   the current fie
1ad0: 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 67  ld */.  int leng
1ae0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
1af0: 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
1b00: 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69  the field */.  i
1b10: 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
1b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 67            /* A g
1b30: 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20 6c  eneral purpose l
1b40: 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
1b50: 20 69 6e 74 20 77 69 64 74 68 3b 20 20 20 20 20   int width;     
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
1b70: 69 64 74 68 20 6f 66 20 74 68 65 20 63 75 72 72  idth of the curr
1b80: 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 65  ent field */.  e
1b90: 74 42 79 74 65 20 66 6c 61 67 5f 6c 65 66 74 6a  tByte flag_leftj
1ba0: 75 73 74 69 66 79 3b 20 20 20 2f 2a 20 54 72 75  ustify;   /* Tru
1bb0: 65 20 69 66 20 22 2d 22 20 66 6c 61 67 20 69 73  e if "-" flag is
1bc0: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74   present */.  et
1bd0: 42 79 74 65 20 66 6c 61 67 5f 70 72 65 66 69 78  Byte flag_prefix
1be0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 27 2b 27 20  ;        /* '+' 
1bf0: 6f 72 20 27 20 27 20 6f 72 20 30 20 66 6f 72 20  or ' ' or 0 for 
1c00: 70 72 65 66 69 78 20 2a 2f 0a 20 20 65 74 42 79  prefix */.  etBy
1c10: 74 65 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74  te flag_alternat
1c20: 65 66 6f 72 6d 3b 20 2f 2a 20 54 72 75 65 20 69  eform; /* True i
1c30: 66 20 22 23 22 20 66 6c 61 67 20 69 73 20 70 72  f "#" flag is pr
1c40: 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74  esent */.  etByt
1c50: 65 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b  e flag_altform2;
1c60: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1c70: 20 22 21 22 20 66 6c 61 67 20 69 73 20 70 72 65   "!" flag is pre
1c80: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65  sent */.  etByte
1c90: 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 3b 20 20   flag_zeropad;  
1ca0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1cb0: 66 69 65 6c 64 20 77 69 64 74 68 20 63 6f 6e 73  field width cons
1cc0: 74 61 6e 74 20 73 74 61 72 74 73 20 77 69 74 68  tant starts with
1cd0: 20 7a 65 72 6f 20 2a 2f 0a 20 20 65 74 42 79 74   zero */.  etByt
1ce0: 65 20 66 6c 61 67 5f 6c 6f 6e 67 3b 20 20 20 20  e flag_long;    
1cf0: 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 74        /* 1 for t
1d00: 68 65 20 22 6c 22 20 66 6c 61 67 2c 20 32 20 66  he "l" flag, 2 f
1d10: 6f 72 20 22 6c 6c 22 2c 20 30 20 62 79 20 64 65  or "ll", 0 by de
1d20: 66 61 75 6c 74 20 2a 2f 0a 20 20 65 74 42 79 74  fault */.  etByt
1d30: 65 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20  e done;         
1d40: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 74 65        /* Loop te
1d50: 72 6d 69 6e 61 74 69 6f 6e 20 66 6c 61 67 20 2a  rmination flag *
1d60: 2f 0a 20 20 65 74 42 79 74 65 20 63 54 68 6f 75  /.  etByte cThou
1d70: 73 61 6e 64 3b 20 20 20 20 20 20 20 20 20 20 2f  sand;          /
1d80: 2a 20 54 68 6f 75 73 61 6e 64 73 20 73 65 70 61  * Thousands sepa
1d90: 72 61 74 6f 72 20 66 6f 72 20 25 64 20 61 6e 64  rator for %d and
1da0: 20 25 75 20 2a 2f 0a 20 20 65 74 42 79 74 65 20   %u */.  etByte 
1db0: 78 74 79 70 65 20 3d 20 65 74 49 4e 56 41 4c 49  xtype = etINVALI
1dc0: 44 3b 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69 6f  D;  /* Conversio
1dd0: 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f 0a 20 20  n paradigm */.  
1de0: 75 38 20 62 41 72 67 4c 69 73 74 3b 20 20 20 20  u8 bArgList;    
1df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e00: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 50 52  ue for SQLITE_PR
1e10: 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 2a 2f 0a  INTF_SQLFUNC */.
1e20: 20 20 63 68 61 72 20 70 72 65 66 69 78 3b 20 20    char prefix;  
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e40: 50 72 65 66 69 78 20 63 68 61 72 61 63 74 65 72  Prefix character
1e50: 2e 20 20 22 2b 22 20 6f 72 20 22 2d 22 20 6f 72  .  "+" or "-" or
1e60: 20 22 20 22 20 6f 72 20 27 5c 30 27 2e 20 2a 2f   " " or '\0'. */
1e70: 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  .  sqlite_uint64
1e80: 20 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20 2f 2a   longvalue;   /*
1e90: 20 56 61 6c 75 65 20 66 6f 72 20 69 6e 74 65 67   Value for integ
1ea0: 65 72 20 74 79 70 65 73 20 2a 2f 0a 20 20 4c 4f  er types */.  LO
1eb0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 72 65  NGDOUBLE_TYPE re
1ec0: 61 6c 76 61 6c 75 65 3b 20 2f 2a 20 56 61 6c 75  alvalue; /* Valu
1ed0: 65 20 66 6f 72 20 72 65 61 6c 20 74 79 70 65 73  e for real types
1ee0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74 5f 69   */.  const et_i
1ef0: 6e 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20 20 20  nfo *infop;     
1f00: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
1f10: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69  he appropriate i
1f20: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 2a 2f  nfo structure */
1f30: 0a 20 20 63 68 61 72 20 2a 7a 4f 75 74 3b 20 20  .  char *zOut;  
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f50: 20 52 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65   Rendering buffe
1f60: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  r */.  int nOut;
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
1f90: 20 72 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65   rendering buffe
1fa0: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 78  r */.  char *zEx
1fb0: 74 72 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  tra = 0;        
1fc0: 20 20 2f 2a 20 4d 61 6c 6c 6f 63 65 64 20 6d 65    /* Malloced me
1fd0: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 73 6f 6d  mory used by som
1fe0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a  e conversion */.
1ff0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2000: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
2010: 4e 54 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65  NT.  int  exp, e
2020: 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
2030: 2f 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72  /* exponent of r
2040: 65 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  eal numbers */. 
2050: 20 69 6e 74 20 6e 73 64 3b 20 20 20 20 20 20 20   int nsd;       
2060: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2070: 75 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69  umber of signifi
2080: 63 61 6e 74 20 64 69 67 69 74 73 20 72 65 74 75  cant digits retu
2090: 72 6e 65 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rned */.  double
20a0: 20 72 6f 75 6e 64 65 72 3b 20 20 20 20 20 20 20   rounder;       
20b0: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72       /* Used for
20c0: 20 72 6f 75 6e 64 69 6e 67 20 66 6c 6f 61 74 69   rounding floati
20d0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20  ng point values 
20e0: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
20f0: 5f 64 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  _dp;            
2100: 2f 2a 20 54 72 75 65 20 69 66 20 64 65 63 69 6d  /* True if decim
2110: 61 6c 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20  al point should 
2120: 62 65 20 73 68 6f 77 6e 20 2a 2f 0a 20 20 65 74  be shown */.  et
2130: 42 79 74 65 20 66 6c 61 67 5f 72 74 7a 3b 20 20  Byte flag_rtz;  
2140: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
2150: 20 69 66 20 74 72 61 69 6c 69 6e 67 20 7a 65 72   if trailing zer
2160: 6f 73 20 73 68 6f 75 6c 64 20 62 65 20 72 65 6d  os should be rem
2170: 6f 76 65 64 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  oved */.#endif. 
2180: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
2190: 20 2a 70 41 72 67 4c 69 73 74 20 3d 20 30 3b 20   *pArgList = 0; 
21a0: 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 66 6f 72  /* Arguments for
21b0: 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53   SQLITE_PRINTF_S
21c0: 51 4c 46 55 4e 43 20 2a 2f 0a 20 20 63 68 61 72  QLFUNC */.  char
21d0: 20 62 75 66 5b 65 74 42 55 46 53 49 5a 45 5d 3b   buf[etBUFSIZE];
21e0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
21f0: 73 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 0a  sion buffer */..
2200: 20 20 2f 2a 20 70 41 63 63 75 6d 20 6e 65 76 65    /* pAccum neve
2210: 72 20 73 74 61 72 74 73 20 6f 75 74 20 77 69 74  r starts out wit
2220: 68 20 61 6e 20 65 6d 70 74 79 20 62 75 66 66 65  h an empty buffe
2230: 72 20 74 68 61 74 20 77 61 73 20 6f 62 74 61 69  r that was obtai
2240: 6e 65 64 20 66 72 6f 6d 20 0a 20 20 2a 2a 20 6d  ned from .  ** m
2250: 61 6c 6c 6f 63 28 29 2e 20 20 54 68 69 73 20 70  alloc().  This p
2260: 72 65 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 72  recondition is r
2270: 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 6d  equired by the m
2280: 70 72 69 6e 74 66 28 22 25 7a 2e 2e 2e 22 29 0a  printf("%z...").
2290: 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f    ** optimizatio
22a0: 6e 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n. */.  assert( 
22b0: 70 41 63 63 75 6d 2d 3e 6e 43 68 61 72 3e 30 20  pAccum->nChar>0 
22c0: 7c 7c 20 28 70 41 63 63 75 6d 2d 3e 70 72 69 6e  || (pAccum->prin
22d0: 74 66 46 6c 61 67 73 26 53 51 4c 49 54 45 5f 50  tfFlags&SQLITE_P
22e0: 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 3d  RINTF_MALLOCED)=
22f0: 3d 30 20 29 3b 0a 0a 20 20 62 75 66 70 74 20 3d  =0 );..  bufpt =
2300: 20 30 3b 0a 20 20 69 66 28 20 28 70 41 63 63 75   0;.  if( (pAccu
2310: 6d 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  m->printfFlags &
2320: 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53   SQLITE_PRINTF_S
2330: 51 4c 46 55 4e 43 29 21 3d 30 20 29 7b 0a 20 20  QLFUNC)!=0 ){.  
2340: 20 20 70 41 72 67 4c 69 73 74 20 3d 20 76 61 5f    pArgList = va_
2350: 61 72 67 28 61 70 2c 20 50 72 69 6e 74 66 41 72  arg(ap, PrintfAr
2360: 67 75 6d 65 6e 74 73 2a 29 3b 0a 20 20 20 20 62  guments*);.    b
2370: 41 72 67 4c 69 73 74 20 3d 20 31 3b 0a 20 20 7d  ArgList = 1;.  }
2380: 65 6c 73 65 7b 0a 20 20 20 20 62 41 72 67 4c 69  else{.    bArgLi
2390: 73 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 66 6f  st = 0;.  }.  fo
23a0: 72 28 3b 20 28 63 3d 28 2a 66 6d 74 29 29 21 3d  r(; (c=(*fmt))!=
23b0: 30 3b 20 2b 2b 66 6d 74 29 7b 0a 20 20 20 20 69  0; ++fmt){.    i
23c0: 66 28 20 63 21 3d 27 25 27 20 29 7b 0a 20 20 20  f( c!='%' ){.   
23d0: 20 20 20 62 75 66 70 74 20 3d 20 28 63 68 61 72     bufpt = (char
23e0: 20 2a 29 66 6d 74 3b 0a 23 69 66 20 48 41 56 45   *)fmt;.#if HAVE
23f0: 5f 53 54 52 43 48 52 4e 55 4c 0a 20 20 20 20 20  _STRCHRNUL.     
2400: 20 66 6d 74 20 3d 20 73 74 72 63 68 72 6e 75 6c   fmt = strchrnul
2410: 28 66 6d 74 2c 20 27 25 27 29 3b 0a 23 65 6c 73  (fmt, '%');.#els
2420: 65 0a 20 20 20 20 20 20 64 6f 7b 20 66 6d 74 2b  e.      do{ fmt+
2430: 2b 3b 20 7d 77 68 69 6c 65 28 20 2a 66 6d 74 20  +; }while( *fmt 
2440: 26 26 20 2a 66 6d 74 20 21 3d 20 27 25 27 20 29  && *fmt != '%' )
2450: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 73  ;.#endif.      s
2460: 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e  qlite3_str_appen
2470: 64 28 70 41 63 63 75 6d 2c 20 62 75 66 70 74 2c  d(pAccum, bufpt,
2480: 20 28 69 6e 74 29 28 66 6d 74 20 2d 20 62 75 66   (int)(fmt - buf
2490: 70 74 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  pt));.      if( 
24a0: 2a 66 6d 74 3d 3d 30 20 29 20 62 72 65 61 6b 3b  *fmt==0 ) break;
24b0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
24c0: 63 3d 28 2a 2b 2b 66 6d 74 29 29 3d 3d 30 20 29  c=(*++fmt))==0 )
24d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
24e0: 73 74 72 5f 61 70 70 65 6e 64 28 70 41 63 63 75  str_append(pAccu
24f0: 6d 2c 20 22 25 22 2c 20 31 29 3b 0a 20 20 20 20  m, "%", 1);.    
2500: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
2510: 20 20 20 2f 2a 20 46 69 6e 64 20 6f 75 74 20 77     /* Find out w
2520: 68 61 74 20 66 6c 61 67 73 20 61 72 65 20 70 72  hat flags are pr
2530: 65 73 65 6e 74 20 2a 2f 0a 20 20 20 20 66 6c 61  esent */.    fla
2540: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 3d 20  g_leftjustify = 
2550: 66 6c 61 67 5f 70 72 65 66 69 78 20 3d 20 63 54  flag_prefix = cT
2560: 68 6f 75 73 61 6e 64 20 3d 0a 20 20 20 20 20 66  housand =.     f
2570: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
2580: 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d  m = flag_altform
2590: 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64  2 = flag_zeropad
25a0: 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65 20 3d   = 0;.    done =
25b0: 20 30 3b 0a 20 20 20 20 77 69 64 74 68 20 3d 20   0;.    width = 
25c0: 30 3b 0a 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67  0;.    flag_long
25d0: 20 3d 20 30 3b 0a 20 20 20 20 70 72 65 63 69 73   = 0;.    precis
25e0: 69 6f 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 64 6f  ion = -1;.    do
25f0: 7b 0a 20 20 20 20 20 20 73 77 69 74 63 68 28 20  {.      switch( 
2600: 63 20 29 7b 0a 20 20 20 20 20 20 20 20 63 61 73  c ){.        cas
2610: 65 20 27 2d 27 3a 20 20 20 66 6c 61 67 5f 6c 65  e '-':   flag_le
2620: 66 74 6a 75 73 74 69 66 79 20 3d 20 31 3b 20 20  ftjustify = 1;  
2630: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2640: 20 20 63 61 73 65 20 27 2b 27 3a 20 20 20 66 6c    case '+':   fl
2650: 61 67 5f 70 72 65 66 69 78 20 3d 20 27 2b 27 3b  ag_prefix = '+';
2660: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2670: 20 20 20 20 20 20 20 63 61 73 65 20 27 20 27 3a         case ' ':
2680: 20 20 20 66 6c 61 67 5f 70 72 65 66 69 78 20 3d     flag_prefix =
2690: 20 27 20 27 3b 20 20 20 20 20 20 20 20 62 72 65   ' ';        bre
26a0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
26b0: 20 27 23 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74   '#':   flag_alt
26c0: 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20 31 3b 20  ernateform = 1; 
26d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
26e0: 20 63 61 73 65 20 27 21 27 3a 20 20 20 66 6c 61   case '!':   fla
26f0: 67 5f 61 6c 74 66 6f 72 6d 32 20 3d 20 31 3b 20  g_altform2 = 1; 
2700: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2710: 20 20 20 20 20 20 63 61 73 65 20 27 30 27 3a 20        case '0': 
2720: 20 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d    flag_zeropad =
2730: 20 31 3b 20 20 20 20 20 20 20 20 20 62 72 65 61   1;         brea
2740: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
2750: 27 2c 27 3a 20 20 20 63 54 68 6f 75 73 61 6e 64  ',':   cThousand
2760: 20 3d 20 27 2c 27 3b 20 20 20 20 20 20 20 20 20   = ',';         
2770: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2780: 64 65 66 61 75 6c 74 3a 20 20 20 20 64 6f 6e 65  default:    done
2790: 20 3d 20 31 3b 20 20 20 20 20 20 20 20 20 20 20   = 1;           
27a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
27b0: 20 20 20 20 20 63 61 73 65 20 27 6c 27 3a 20 7b       case 'l': {
27c0: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 5f  .          flag_
27d0: 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  long = 1;.      
27e0: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
27f0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d            if( c=
2800: 3d 27 6c 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='l' ){.        
2810: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a      c = *++fmt;.
2820: 20 20 20 20 20 20 20 20 20 20 20 20 66 6c 61 67              flag
2830: 5f 6c 6f 6e 67 20 3d 20 32 3b 0a 20 20 20 20 20  _long = 2;.     
2840: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2850: 20 64 6f 6e 65 20 3d 20 31 3b 0a 20 20 20 20 20   done = 1;.     
2860: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2870: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61      }.        ca
2880: 73 65 20 27 31 27 3a 20 63 61 73 65 20 27 32 27  se '1': case '2'
2890: 3a 20 63 61 73 65 20 27 33 27 3a 20 63 61 73 65  : case '3': case
28a0: 20 27 34 27 3a 20 63 61 73 65 20 27 35 27 3a 0a   '4': case '5':.
28b0: 20 20 20 20 20 20 20 20 63 61 73 65 20 27 36 27          case '6'
28c0: 3a 20 63 61 73 65 20 27 37 27 3a 20 63 61 73 65  : case '7': case
28d0: 20 27 38 27 3a 20 63 61 73 65 20 27 39 27 3a 20   '8': case '9': 
28e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 69  {.          unsi
28f0: 67 6e 65 64 20 77 78 20 3d 20 63 20 2d 20 27 30  gned wx = c - '0
2900: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  ';.          whi
2910: 6c 65 28 20 28 63 20 3d 20 2a 2b 2b 66 6d 74 29  le( (c = *++fmt)
2920: 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20  >='0' && c<='9' 
2930: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ){.            w
2940: 78 20 3d 20 77 78 2a 31 30 20 2b 20 63 20 2d 20  x = wx*10 + c - 
2950: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  '0';.          }
2960: 0a 20 20 20 20 20 20 20 20 20 20 74 65 73 74 63  .          testc
2970: 61 73 65 28 20 77 78 3e 30 78 37 66 66 66 66 66  ase( wx>0x7fffff
2980: 66 66 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ff );.          
2990: 77 69 64 74 68 20 3d 20 77 78 20 26 20 30 78 37  width = wx & 0x7
29a0: 66 66 66 66 66 66 66 3b 0a 23 69 66 64 65 66 20  fffffff;.#ifdef 
29b0: 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 50 52  SQLITE_PRINTF_PR
29c0: 45 43 49 53 49 4f 4e 5f 4c 49 4d 49 54 0a 20 20  ECISION_LIMIT.  
29d0: 20 20 20 20 20 20 20 20 69 66 28 20 77 69 64 74          if( widt
29e0: 68 3e 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  h>SQLITE_PRINTF_
29f0: 50 52 45 43 49 53 49 4f 4e 5f 4c 49 4d 49 54 20  PRECISION_LIMIT 
2a00: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ){.            w
2a10: 69 64 74 68 20 3d 20 53 51 4c 49 54 45 5f 50 52  idth = SQLITE_PR
2a20: 49 4e 54 46 5f 50 52 45 43 49 53 49 4f 4e 5f 4c  INTF_PRECISION_L
2a30: 49 4d 49 54 3b 0a 20 20 20 20 20 20 20 20 20 20  IMIT;.          
2a40: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20  }.#endif.       
2a50: 20 20 20 69 66 28 20 63 21 3d 27 2e 27 20 26 26     if( c!='.' &&
2a60: 20 63 21 3d 27 6c 27 20 29 7b 0a 20 20 20 20 20   c!='l' ){.     
2a70: 20 20 20 20 20 20 20 64 6f 6e 65 20 3d 20 31 3b         done = 1;
2a80: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
2a90: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6d  {.            fm
2aa0: 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  t--;.          }
2ab0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
2ac0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2ad0: 20 20 20 20 63 61 73 65 20 27 2a 27 3a 20 7b 0a      case '*': {.
2ae0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62 41            if( bA
2af0: 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20  rgList ){.      
2b00: 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 28 69        width = (i
2b10: 6e 74 29 67 65 74 49 6e 74 41 72 67 28 70 41 72  nt)getIntArg(pAr
2b20: 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20  gList);.        
2b30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2b40: 20 20 20 20 20 77 69 64 74 68 20 3d 20 76 61 5f       width = va_
2b50: 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20  arg(ap,int);.   
2b60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2b70: 20 20 20 69 66 28 20 77 69 64 74 68 3c 30 20 29     if( width<0 )
2b80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6c  {.            fl
2b90: 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 3d  ag_leftjustify =
2ba0: 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
2bb0: 77 69 64 74 68 20 3d 20 77 69 64 74 68 20 3e 3d  width = width >=
2bc0: 20 2d 32 31 34 37 34 38 33 36 34 37 20 3f 20 2d   -2147483647 ? -
2bd0: 77 69 64 74 68 20 3a 20 30 3b 0a 20 20 20 20 20  width : 0;.     
2be0: 20 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51       }.#ifdef SQ
2bf0: 4c 49 54 45 5f 50 52 49 4e 54 46 5f 50 52 45 43  LITE_PRINTF_PREC
2c00: 49 53 49 4f 4e 5f 4c 49 4d 49 54 0a 20 20 20 20  ISION_LIMIT.    
2c10: 20 20 20 20 20 20 69 66 28 20 77 69 64 74 68 3e        if( width>
2c20: 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 50 52  SQLITE_PRINTF_PR
2c30: 45 43 49 53 49 4f 4e 5f 4c 49 4d 49 54 20 29 7b  ECISION_LIMIT ){
2c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 69 64  .            wid
2c50: 74 68 20 3d 20 53 51 4c 49 54 45 5f 50 52 49 4e  th = SQLITE_PRIN
2c60: 54 46 5f 50 52 45 43 49 53 49 4f 4e 5f 4c 49 4d  TF_PRECISION_LIM
2c70: 49 54 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  IT;.          }.
2c80: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 20  #endif.         
2c90: 20 69 66 28 20 28 63 20 3d 20 66 6d 74 5b 31 5d   if( (c = fmt[1]
2ca0: 29 21 3d 27 2e 27 20 26 26 20 63 21 3d 27 6c 27  )!='.' && c!='l'
2cb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2cc0: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20  c = *++fmt;.    
2cd0: 20 20 20 20 20 20 20 20 64 6f 6e 65 20 3d 20 31          done = 1
2ce0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
2cf0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2d00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2d10: 20 63 61 73 65 20 27 2e 27 3a 20 7b 0a 20 20 20   case '.': {.   
2d20: 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d         c = *++fm
2d30: 74 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  t;.          if(
2d40: 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20 20   c=='*' ){.     
2d50: 20 20 20 20 20 20 20 69 66 28 20 62 41 72 67 4c         if( bArgL
2d60: 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ist ){.         
2d70: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
2d80: 20 28 69 6e 74 29 67 65 74 49 6e 74 41 72 67 28   (int)getIntArg(
2d90: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20  pArgList);.     
2da0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 63              prec
2dc0: 69 73 69 6f 6e 20 3d 20 76 61 5f 61 72 67 28 61  ision = va_arg(a
2dd0: 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  p,int);.        
2de0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
2df0: 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c    if( precision<
2e00: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
2e10: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 70     precision = p
2e20: 72 65 63 69 73 69 6f 6e 20 3e 3d 20 2d 32 31 34  recision >= -214
2e30: 37 34 38 33 36 34 37 20 3f 20 2d 70 72 65 63 69  7483647 ? -preci
2e40: 73 69 6f 6e 20 3a 20 2d 31 3b 0a 20 20 20 20 20  sion : -1;.     
2e50: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2e60: 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b       c = *++fmt;
2e70: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
2e80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e  {.            un
2e90: 73 69 67 6e 65 64 20 70 78 20 3d 20 30 3b 0a 20  signed px = 0;. 
2ea0: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
2eb0: 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27  ( c>='0' && c<='
2ec0: 39 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  9' ){.          
2ed0: 20 20 20 20 70 78 20 3d 20 70 78 2a 31 30 20 2b      px = px*10 +
2ee0: 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20   c - '0';.      
2ef0: 20 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66          c = *++f
2f00: 6d 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  mt;.            
2f10: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  }.            te
2f20: 73 74 63 61 73 65 28 20 70 78 3e 30 78 37 66 66  stcase( px>0x7ff
2f30: 66 66 66 66 66 20 29 3b 0a 20 20 20 20 20 20 20  fffff );.       
2f40: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
2f50: 20 70 78 20 26 20 30 78 37 66 66 66 66 66 66 66   px & 0x7fffffff
2f60: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 23 69  ;.          }.#i
2f70: 66 64 65 66 20 53 51 4c 49 54 45 5f 50 52 49 4e  fdef SQLITE_PRIN
2f80: 54 46 5f 50 52 45 43 49 53 49 4f 4e 5f 4c 49 4d  TF_PRECISION_LIM
2f90: 49 54 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  IT.          if(
2fa0: 20 70 72 65 63 69 73 69 6f 6e 3e 53 51 4c 49 54   precision>SQLIT
2fb0: 45 5f 50 52 49 4e 54 46 5f 50 52 45 43 49 53 49  E_PRINTF_PRECISI
2fc0: 4f 4e 5f 4c 49 4d 49 54 20 29 7b 0a 20 20 20 20  ON_LIMIT ){.    
2fd0: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
2fe0: 6e 20 3d 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  n = SQLITE_PRINT
2ff0: 46 5f 50 52 45 43 49 53 49 4f 4e 5f 4c 49 4d 49  F_PRECISION_LIMI
3000: 54 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 23  T;.          }.#
3010: 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 20 20  endif.          
3020: 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20 20  if( c=='l' ){.  
3030: 20 20 20 20 20 20 20 20 20 20 2d 2d 66 6d 74 3b            --fmt;
3040: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
3050: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  {.            do
3060: 6e 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  ne = 1;.        
3070: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72    }.          br
3080: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
3090: 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c       }.    }whil
30a0: 65 28 20 21 64 6f 6e 65 20 26 26 20 28 63 3d 28  e( !done && (c=(
30b0: 2a 2b 2b 66 6d 74 29 29 21 3d 30 20 29 3b 0a 0a  *++fmt))!=0 );..
30c0: 20 20 20 20 2f 2a 20 46 65 74 63 68 20 74 68 65      /* Fetch the
30d0: 20 69 6e 66 6f 20 65 6e 74 72 79 20 66 6f 72 20   info entry for 
30e0: 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 20  the field */.   
30f0: 20 69 6e 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66   infop = &fmtinf
3100: 6f 5b 30 5d 3b 0a 20 20 20 20 78 74 79 70 65 20  o[0];.    xtype 
3110: 3d 20 65 74 49 4e 56 41 4c 49 44 3b 0a 20 20 20  = etINVALID;.   
3120: 20 66 6f 72 28 69 64 78 3d 30 3b 20 69 64 78 3c   for(idx=0; idx<
3130: 41 72 72 61 79 53 69 7a 65 28 66 6d 74 69 6e 66  ArraySize(fmtinf
3140: 6f 29 3b 20 69 64 78 2b 2b 29 7b 0a 20 20 20 20  o); idx++){.    
3150: 20 20 69 66 28 20 63 3d 3d 66 6d 74 69 6e 66 6f    if( c==fmtinfo
3160: 5b 69 64 78 5d 2e 66 6d 74 74 79 70 65 20 29 7b  [idx].fmttype ){
3170: 0a 20 20 20 20 20 20 20 20 69 6e 66 6f 70 20 3d  .        infop =
3180: 20 26 66 6d 74 69 6e 66 6f 5b 69 64 78 5d 3b 0a   &fmtinfo[idx];.
3190: 20 20 20 20 20 20 20 20 78 74 79 70 65 20 3d 20          xtype = 
31a0: 69 6e 66 6f 70 2d 3e 74 79 70 65 3b 0a 20 20 20  infop->type;.   
31b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
31c0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
31d0: 2a 0a 20 20 20 20 2a 2a 20 41 74 20 74 68 69 73  *.    ** At this
31e0: 20 70 6f 69 6e 74 2c 20 76 61 72 69 61 62 6c 65   point, variable
31f0: 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
3200: 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20  d as follows:.  
3210: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20 66 6c    **.    **   fl
3220: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
3230: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69            TRUE i
3240: 66 20 61 20 27 23 27 20 69 73 20 70 72 65 73 65  f a '#' is prese
3250: 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  nt..    **   fla
3260: 67 5f 61 6c 74 66 6f 72 6d 32 20 20 20 20 20 20  g_altform2      
3270: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
3280: 20 61 20 27 21 27 20 69 73 20 70 72 65 73 65 6e   a '!' is presen
3290: 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67  t..    **   flag
32a0: 5f 70 72 65 66 69 78 20 20 20 20 20 20 20 20 20  _prefix         
32b0: 20 20 20 20 20 20 20 20 27 2b 27 20 6f 72 20 27          '+' or '
32c0: 20 27 20 6f 72 20 7a 65 72 6f 0a 20 20 20 20 2a   ' or zero.    *
32d0: 2a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73  *   flag_leftjus
32e0: 74 69 66 79 20 20 20 20 20 20 20 20 20 20 20 20  tify            
32f0: 54 52 55 45 20 69 66 20 61 20 27 2d 27 20 69 73  TRUE if a '-' is
3300: 20 70 72 65 73 65 6e 74 20 6f 72 20 69 66 20 74   present or if t
3310: 68 65 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  he.    **       
3320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3330: 20 20 20 20 20 20 20 20 66 69 65 6c 64 20 77 69          field wi
3340: 64 74 68 20 77 61 73 20 6e 65 67 61 74 69 76 65  dth was negative
3350: 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f  ..    **   flag_
3360: 7a 65 72 6f 70 61 64 20 20 20 20 20 20 20 20 20  zeropad         
3370: 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20 74         TRUE if t
3380: 68 65 20 77 69 64 74 68 20 62 65 67 61 6e 20 77  he width began w
3390: 69 74 68 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20  ith 0..    **   
33a0: 66 6c 61 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20  flag_long       
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 66 6f              1 fo
33c0: 72 20 22 6c 22 2c 20 32 20 66 6f 72 20 22 6c 6c  r "l", 2 for "ll
33d0: 22 0a 20 20 20 20 2a 2a 20 20 20 77 69 64 74 68  ".    **   width
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 20 20 20 20 20 20 20 54 68 65 20 73 70 65 63 69         The speci
3400: 66 69 65 64 20 66 69 65 6c 64 20 77 69 64 74 68  fied field width
3410: 2e 20 20 54 68 69 73 20 69 73 0a 20 20 20 20 2a  .  This is.    *
3420: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
3430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3440: 61 6c 77 61 79 73 20 6e 6f 6e 2d 6e 65 67 61 74  always non-negat
3450: 69 76 65 2e 20 20 5a 65 72 6f 20 69 73 20 74 68  ive.  Zero is th
3460: 65 20 64 65 66 61 75 6c 74 2e 0a 20 20 20 20 2a  e default..    *
3470: 2a 20 20 20 70 72 65 63 69 73 69 6f 6e 20 20 20  *   precision   
3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3490: 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 72  The specified pr
34a0: 65 63 69 73 69 6f 6e 2e 20 20 54 68 65 20 64 65  ecision.  The de
34b0: 66 61 75 6c 74 0a 20 20 20 20 2a 2a 20 20 20 20  fault.    **    
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d0: 20 20 20 20 20 20 20 20 20 20 20 69 73 20 2d 31             is -1
34e0: 2e 0a 20 20 20 20 2a 2a 20 20 20 78 74 79 70 65  ..    **   xtype
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3500: 20 20 20 20 20 20 20 54 68 65 20 63 6c 61 73 73         The class
3510: 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   of the conversi
3520: 6f 6e 2e 0a 20 20 20 20 2a 2a 20 20 20 69 6e 66  on..    **   inf
3530: 6f 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  op              
3540: 20 20 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72           Pointer
3550: 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69   to the appropri
3560: 61 74 65 20 69 6e 66 6f 20 73 74 72 75 63 74 2e  ate info struct.
3570: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 77 69 74  .    */.    swit
3580: 63 68 28 20 78 74 79 70 65 20 29 7b 0a 20 20 20  ch( xtype ){.   
3590: 20 20 20 63 61 73 65 20 65 74 50 4f 49 4e 54 45     case etPOINTE
35a0: 52 3a 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  R:.        flag_
35b0: 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68  long = sizeof(ch
35c0: 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36 34  ar*)==sizeof(i64
35d0: 29 20 3f 20 32 20 3a 0a 20 20 20 20 20 20 20 20  ) ? 2 :.        
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a               siz
35f0: 65 6f 66 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65  eof(char*)==size
3600: 6f 66 28 6c 6f 6e 67 20 69 6e 74 29 20 3f 20 31  of(long int) ? 1
3610: 20 3a 20 30 3b 0a 20 20 20 20 20 20 20 20 2f 2a   : 0;.        /*
3620: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
3630: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
3640: 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 65 20 65   */.      case e
3650: 74 4f 52 44 49 4e 41 4c 3a 0a 20 20 20 20 20 20  tORDINAL:.      
3660: 63 61 73 65 20 65 74 52 41 44 49 58 3a 20 20 20  case etRADIX:   
3670: 20 20 20 0a 20 20 20 20 20 20 20 20 63 54 68 6f     .        cTho
3680: 75 73 61 6e 64 20 3d 20 30 3b 0a 20 20 20 20 20  usand = 0;.     
3690: 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75     /* Fall throu
36a0: 67 68 20 69 6e 74 6f 20 74 68 65 20 6e 65 78 74  gh into the next
36b0: 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 63   case */.      c
36c0: 61 73 65 20 65 74 44 45 43 49 4d 41 4c 3a 0a 20  ase etDECIMAL:. 
36d0: 20 20 20 20 20 20 20 69 66 28 20 69 6e 66 6f 70         if( infop
36e0: 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53  ->flags & FLAG_S
36f0: 49 47 4e 45 44 20 29 7b 0a 20 20 20 20 20 20 20  IGNED ){.       
3700: 20 20 20 69 36 34 20 76 3b 0a 20 20 20 20 20 20     i64 v;.      
3710: 20 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74      if( bArgList
3720: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
3730: 76 20 3d 20 67 65 74 49 6e 74 41 72 67 28 70 41  v = getIntArg(pA
3740: 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20  rgList);.       
3750: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61     }else if( fla
3760: 67 5f 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20  g_long ){.      
3770: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 6c        if( flag_l
3780: 6f 6e 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  ong==2 ){.      
3790: 20 20 20 20 20 20 20 20 76 20 3d 20 76 61 5f 61          v = va_a
37a0: 72 67 28 61 70 2c 69 36 34 29 20 3b 0a 20 20 20  rg(ap,i64) ;.   
37b0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 20                v 
37d0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 6c 6f 6e 67  = va_arg(ap,long
37e0: 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20   int);.         
37f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
3800: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
3810: 20 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c    v = va_arg(ap,
3820: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
3830: 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
3840: 76 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  v<0 ){.         
3850: 20 20 20 69 66 28 20 76 3d 3d 53 4d 41 4c 4c 45     if( v==SMALLE
3860: 53 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20 20  ST_INT64 ){.    
3870: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61            longva
3880: 6c 75 65 20 3d 20 28 28 75 36 34 29 31 29 3c 3c  lue = ((u64)1)<<
3890: 36 33 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  63;.            
38a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
38b0: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
38c0: 20 2d 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20   -v;.           
38d0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70   }.            p
38e0: 72 65 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20  refix = '-';.   
38f0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
3900: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61            longva
3910: 6c 75 65 20 3d 20 76 3b 0a 20 20 20 20 20 20 20  lue = v;.       
3920: 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 66 6c       prefix = fl
3930: 61 67 5f 70 72 65 66 69 78 3b 0a 20 20 20 20 20  ag_prefix;.     
3940: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
3950: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
3960: 69 66 28 20 62 41 72 67 4c 69 73 74 20 29 7b 0a  if( bArgList ){.
3970: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
3980: 76 61 6c 75 65 20 3d 20 28 75 36 34 29 67 65 74  value = (u64)get
3990: 49 6e 74 41 72 67 28 70 41 72 67 4c 69 73 74 29  IntArg(pArgList)
39a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
39b0: 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 20  e if( flag_long 
39c0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
39d0: 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 3d 3d 32 20  f( flag_long==2 
39e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
39f0: 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f   longvalue = va_
3a00: 61 72 67 28 61 70 2c 75 36 34 29 3b 0a 20 20 20  arg(ap,u64);.   
3a10: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
3a30: 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67  ngvalue = va_arg
3a40: 28 61 70 2c 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  (ap,unsigned lon
3a50: 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  g int);.        
3a60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
3a70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
3a80: 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76     longvalue = v
3a90: 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 6e 65  a_arg(ap,unsigne
3aa0: 64 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  d int);.        
3ab0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 72    }.          pr
3ac0: 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  efix = 0;.      
3ad0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
3ae0: 6c 6f 6e 67 76 61 6c 75 65 3d 3d 30 20 29 20 66  longvalue==0 ) f
3af0: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72  lag_alternatefor
3b00: 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  m = 0;.        i
3b10: 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20  f( flag_zeropad 
3b20: 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 77 69 64  && precision<wid
3b30: 74 68 2d 28 70 72 65 66 69 78 21 3d 30 29 20 29  th-(prefix!=0) )
3b40: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 63  {.          prec
3b50: 69 73 69 6f 6e 20 3d 20 77 69 64 74 68 2d 28 70  ision = width-(p
3b60: 72 65 66 69 78 21 3d 30 29 3b 0a 20 20 20 20 20  refix!=0);.     
3b70: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
3b80: 20 70 72 65 63 69 73 69 6f 6e 3c 65 74 42 55 46   precision<etBUF
3b90: 53 49 5a 45 2d 31 30 2d 65 74 42 55 46 53 49 5a  SIZE-10-etBUFSIZ
3ba0: 45 2f 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20  E/3 ){.         
3bb0: 20 6e 4f 75 74 20 3d 20 65 74 42 55 46 53 49 5a   nOut = etBUFSIZ
3bc0: 45 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 4f 75  E;.          zOu
3bd0: 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20  t = buf;.       
3be0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
3bf0: 20 20 75 36 34 20 6e 3b 0a 20 20 20 20 20 20 20    u64 n;.       
3c00: 20 20 20 6e 20 3d 20 28 75 36 34 29 70 72 65 63     n = (u64)prec
3c10: 69 73 69 6f 6e 20 2b 20 31 30 3b 0a 20 20 20 20  ision + 10;.    
3c20: 20 20 20 20 20 20 69 66 28 20 63 54 68 6f 75 73        if( cThous
3c30: 61 6e 64 20 29 20 6e 20 2b 3d 20 70 72 65 63 69  and ) n += preci
3c40: 73 69 6f 6e 2f 33 3b 0a 20 20 20 20 20 20 20 20  sion/3;.        
3c50: 20 20 7a 4f 75 74 20 3d 20 7a 45 78 74 72 61 20    zOut = zExtra 
3c60: 3d 20 70 72 69 6e 74 66 54 65 6d 70 42 75 66 28  = printfTempBuf(
3c70: 70 41 63 63 75 6d 2c 20 6e 29 3b 0a 20 20 20 20  pAccum, n);.    
3c80: 20 20 20 20 20 20 69 66 28 20 7a 4f 75 74 3d 3d        if( zOut==
3c90: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
3ca0: 20 20 20 20 20 20 6e 4f 75 74 20 3d 20 28 69 6e        nOut = (in
3cb0: 74 29 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t)n;.        }. 
3cc0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 26         bufpt = &
3cd0: 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 3b 0a 20 20  zOut[nOut-1];.  
3ce0: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
3cf0: 3d 65 74 4f 52 44 49 4e 41 4c 20 29 7b 0a 20 20  =etORDINAL ){.  
3d00: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
3d10: 6f 6e 73 74 20 63 68 61 72 20 7a 4f 72 64 5b 5d  onst char zOrd[]
3d20: 20 3d 20 22 74 68 73 74 6e 64 72 64 22 3b 0a 20   = "thstndrd";. 
3d30: 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 20 3d           int x =
3d40: 20 28 69 6e 74 29 28 6c 6f 6e 67 76 61 6c 75 65   (int)(longvalue
3d50: 20 25 20 31 30 29 3b 0a 20 20 20 20 20 20 20 20   % 10);.        
3d60: 20 20 69 66 28 20 78 3e 3d 34 20 7c 7c 20 28 6c    if( x>=4 || (l
3d70: 6f 6e 67 76 61 6c 75 65 2f 31 30 29 25 31 30 3d  ongvalue/10)%10=
3d80: 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =1 ){.          
3d90: 20 20 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    x = 0;.       
3da0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2a     }.          *
3db0: 28 2d 2d 62 75 66 70 74 29 20 3d 20 7a 4f 72 64  (--bufpt) = zOrd
3dc0: 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20 20 20 20 20  [x*2+1];.       
3dd0: 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20     *(--bufpt) = 
3de0: 7a 4f 72 64 5b 78 2a 32 5d 3b 0a 20 20 20 20 20  zOrd[x*2];.     
3df0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7b 0a 20     }.        {. 
3e00: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
3e10: 68 61 72 20 2a 63 73 65 74 20 3d 20 26 61 44 69  har *cset = &aDi
3e20: 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61 72  gits[infop->char
3e30: 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  set];.          
3e40: 75 38 20 62 61 73 65 20 3d 20 69 6e 66 6f 70 2d  u8 base = infop-
3e50: 3e 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20 20  >base;.         
3e60: 20 64 6f 7b 20 20 20 20 20 20 20 20 20 20 20 20   do{            
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3e90: 2a 20 43 6f 6e 76 65 72 74 20 74 6f 20 61 73 63  * Convert to asc
3ea0: 69 69 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ii */.          
3eb0: 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 63    *(--bufpt) = c
3ec0: 73 65 74 5b 6c 6f 6e 67 76 61 6c 75 65 25 62 61  set[longvalue%ba
3ed0: 73 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  se];.           
3ee0: 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 6c 6f 6e   longvalue = lon
3ef0: 67 76 61 6c 75 65 2f 62 61 73 65 3b 0a 20 20 20  gvalue/base;.   
3f00: 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 6c         }while( l
3f10: 6f 6e 67 76 61 6c 75 65 3e 30 20 29 3b 0a 20 20  ongvalue>0 );.  
3f20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3f30: 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 26  length = (int)(&
3f40: 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 2d 62 75 66  zOut[nOut-1]-buf
3f50: 70 74 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69  pt);.        whi
3f60: 6c 65 28 20 70 72 65 63 69 73 69 6f 6e 3e 6c 65  le( precision>le
3f70: 6e 67 74 68 20 29 7b 0a 20 20 20 20 20 20 20 20  ngth ){.        
3f80: 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 27    *(--bufpt) = '
3f90: 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  0';             
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fb0: 2f 2a 20 5a 65 72 6f 20 70 61 64 20 2a 2f 0a 20  /* Zero pad */. 
3fc0: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 2b           length+
3fd0: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
3fe0: 20 20 20 20 20 69 66 28 20 63 54 68 6f 75 73 61       if( cThousa
3ff0: 6e 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  nd ){.          
4000: 69 6e 74 20 6e 6e 20 3d 20 28 6c 65 6e 67 74 68  int nn = (length
4010: 20 2d 20 31 29 2f 33 3b 20 20 2f 2a 20 4e 75 6d   - 1)/3;  /* Num
4020: 62 65 72 20 6f 66 20 22 2c 22 20 74 6f 20 69 6e  ber of "," to in
4030: 73 65 72 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  sert */.        
4040: 20 20 69 6e 74 20 69 78 20 3d 20 28 6c 65 6e 67    int ix = (leng
4050: 74 68 20 2d 20 31 29 25 33 20 2b 20 31 3b 0a 20  th - 1)%3 + 1;. 
4060: 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20 2d           bufpt -
4070: 3d 20 6e 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  = nn;.          
4080: 66 6f 72 28 69 64 78 3d 30 3b 20 6e 6e 3e 30 3b  for(idx=0; nn>0;
4090: 20 69 64 78 2b 2b 29 7b 0a 20 20 20 20 20 20 20   idx++){.       
40a0: 20 20 20 20 20 62 75 66 70 74 5b 69 64 78 5d 20       bufpt[idx] 
40b0: 3d 20 62 75 66 70 74 5b 69 64 78 2b 6e 6e 5d 3b  = bufpt[idx+nn];
40c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 78 2d  .            ix-
40d0: 2d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  -;.            i
40e0: 66 28 20 69 78 3d 3d 30 20 29 7b 0a 20 20 20 20  f( ix==0 ){.    
40f0: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 5b            bufpt[
4100: 2b 2b 69 64 78 5d 20 3d 20 63 54 68 6f 75 73 61  ++idx] = cThousa
4110: 6e 64 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  nd;.            
4120: 20 20 6e 6e 2d 2d 3b 0a 20 20 20 20 20 20 20 20    nn--;.        
4130: 20 20 20 20 20 20 69 78 20 3d 20 33 3b 0a 20 20        ix = 3;.  
4140: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
4150: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4160: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  }.        if( pr
4170: 65 66 69 78 20 29 20 2a 28 2d 2d 62 75 66 70 74  efix ) *(--bufpt
4180: 29 20 3d 20 70 72 65 66 69 78 3b 20 20 20 20 20  ) = prefix;     
4190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
41a0: 20 73 69 67 6e 20 2a 2f 0a 20 20 20 20 20 20 20   sign */.       
41b0: 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 65 72 6e   if( flag_altern
41c0: 61 74 65 66 6f 72 6d 20 26 26 20 69 6e 66 6f 70  ateform && infop
41d0: 2d 3e 70 72 65 66 69 78 20 29 7b 20 20 20 20 20  ->prefix ){     
41e0: 20 2f 2a 20 41 64 64 20 22 30 22 20 6f 72 20 22   /* Add "0" or "
41f0: 30 78 22 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  0x" */.         
4200: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 72 65   const char *pre
4210: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  ;.          char
4220: 20 78 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72   x;.          pr
4230: 65 20 3d 20 26 61 50 72 65 66 69 78 5b 69 6e 66  e = &aPrefix[inf
4240: 6f 70 2d 3e 70 72 65 66 69 78 5d 3b 0a 20 20 20  op->prefix];.   
4250: 20 20 20 20 20 20 20 66 6f 72 28 3b 20 28 78 3d         for(; (x=
4260: 28 2a 70 72 65 29 29 21 3d 30 3b 20 70 72 65 2b  (*pre))!=0; pre+
4270: 2b 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20  +) *(--bufpt) = 
4280: 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  x;.        }.   
4290: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 28 69       length = (i
42a0: 6e 74 29 28 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31  nt)(&zOut[nOut-1
42b0: 5d 2d 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  ]-bufpt);.      
42c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
42d0: 61 73 65 20 65 74 46 4c 4f 41 54 3a 0a 20 20 20  ase etFLOAT:.   
42e0: 20 20 20 63 61 73 65 20 65 74 45 58 50 3a 0a 20     case etEXP:. 
42f0: 20 20 20 20 20 63 61 73 65 20 65 74 47 45 4e 45       case etGENE
4300: 52 49 43 3a 0a 20 20 20 20 20 20 20 20 69 66 28  RIC:.        if(
4310: 20 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20   bArgList ){.   
4320: 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65         realvalue
4330: 20 3d 20 67 65 74 44 6f 75 62 6c 65 41 72 67 28   = getDoubleArg(
4340: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20  pArgList);.     
4350: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4360: 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20      realvalue = 
4370: 76 61 5f 61 72 67 28 61 70 2c 64 6f 75 62 6c 65  va_arg(ap,double
4380: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 69 66  );.        }.#if
4390: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
43a0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
43b0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
43c0: 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 20  0;.#else.       
43d0: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30   if( precision<0
43e0: 20 29 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 36   ) precision = 6
43f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 74  ;         /* Set
4400: 20 64 65 66 61 75 6c 74 20 70 72 65 63 69 73 69   default precisi
4410: 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  on */.        if
4420: 28 20 72 65 61 6c 76 61 6c 75 65 3c 30 2e 30 20  ( realvalue<0.0 
4430: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61  ){.          rea
4440: 6c 76 61 6c 75 65 20 3d 20 2d 72 65 61 6c 76 61  lvalue = -realva
4450: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 70  lue;.          p
4460: 72 65 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20  refix = '-';.   
4470: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4480: 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 66        prefix = f
4490: 6c 61 67 5f 70 72 65 66 69 78 3b 0a 20 20 20 20  lag_prefix;.    
44a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
44b0: 28 20 78 74 79 70 65 3d 3d 65 74 47 45 4e 45 52  ( xtype==etGENER
44c0: 49 43 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3e  IC && precision>
44d0: 30 20 29 20 70 72 65 63 69 73 69 6f 6e 2d 2d 3b  0 ) precision--;
44e0: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
44f0: 65 28 20 70 72 65 63 69 73 69 6f 6e 3e 30 78 66  e( precision>0xf
4500: 66 66 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  ff );.        fo
4510: 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 26  r(idx=precision&
4520: 30 78 66 66 66 2c 20 72 6f 75 6e 64 65 72 3d 30  0xfff, rounder=0
4530: 2e 35 3b 20 69 64 78 3e 30 3b 20 69 64 78 2d 2d  .5; idx>0; idx--
4540: 2c 20 72 6f 75 6e 64 65 72 2a 3d 30 2e 31 29 7b  , rounder*=0.1){
4550: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74  }.        if( xt
4560: 79 70 65 3d 3d 65 74 46 4c 4f 41 54 20 29 20 72  ype==etFLOAT ) r
4570: 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e  ealvalue += roun
4580: 64 65 72 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  der;.        /* 
4590: 4e 6f 72 6d 61 6c 69 7a 65 20 72 65 61 6c 76 61  Normalize realva
45a0: 6c 75 65 20 74 6f 20 77 69 74 68 69 6e 20 31 30  lue to within 10
45b0: 2e 30 20 3e 20 72 65 61 6c 76 61 6c 75 65 20 3e  .0 > realvalue >
45c0: 3d 20 31 2e 30 20 2a 2f 0a 20 20 20 20 20 20 20  = 1.0 */.       
45d0: 20 65 78 70 20 3d 20 30 3b 0a 20 20 20 20 20 20   exp = 0;.      
45e0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
45f0: 61 4e 28 28 64 6f 75 62 6c 65 29 72 65 61 6c 76  aN((double)realv
4600: 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20 20  alue) ){.       
4610: 20 20 20 62 75 66 70 74 20 3d 20 22 4e 61 4e 22     bufpt = "NaN"
4620: 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67  ;.          leng
4630: 74 68 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20  th = 3;.        
4640: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
4650: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72   }.        if( r
4660: 65 61 6c 76 61 6c 75 65 3e 30 2e 30 20 29 7b 0a  ealvalue>0.0 ){.
4670: 20 20 20 20 20 20 20 20 20 20 4c 4f 4e 47 44 4f            LONGDO
4680: 55 42 4c 45 5f 54 59 50 45 20 73 63 61 6c 65 20  UBLE_TYPE scale 
4690: 3d 20 31 2e 30 3b 0a 20 20 20 20 20 20 20 20 20  = 1.0;.         
46a0: 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75   while( realvalu
46b0: 65 3e 3d 31 65 31 30 30 2a 73 63 61 6c 65 20 26  e>=1e100*scale &
46c0: 26 20 65 78 70 3c 3d 33 35 30 20 29 7b 20 73 63  & exp<=350 ){ sc
46d0: 61 6c 65 20 2a 3d 20 31 65 31 30 30 3b 65 78 70  ale *= 1e100;exp
46e0: 2b 3d 31 30 30 3b 7d 0a 20 20 20 20 20 20 20 20  +=100;}.        
46f0: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
4700: 75 65 3e 3d 31 65 31 30 2a 73 63 61 6c 65 20 26  ue>=1e10*scale &
4710: 26 20 65 78 70 3c 3d 33 35 30 20 29 7b 20 73 63  & exp<=350 ){ sc
4720: 61 6c 65 20 2a 3d 20 31 65 31 30 3b 20 65 78 70  ale *= 1e10; exp
4730: 2b 3d 31 30 3b 20 7d 0a 20 20 20 20 20 20 20 20  +=10; }.        
4740: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
4750: 75 65 3e 3d 31 30 2e 30 2a 73 63 61 6c 65 20 26  ue>=10.0*scale &
4760: 26 20 65 78 70 3c 3d 33 35 30 20 29 7b 20 73 63  & exp<=350 ){ sc
4770: 61 6c 65 20 2a 3d 20 31 30 2e 30 3b 20 65 78 70  ale *= 10.0; exp
4780: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  ++; }.          
4790: 72 65 61 6c 76 61 6c 75 65 20 2f 3d 20 73 63 61  realvalue /= sca
47a0: 6c 65 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68  le;.          wh
47b0: 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31  ile( realvalue<1
47c0: 65 2d 38 20 29 7b 20 72 65 61 6c 76 61 6c 75 65  e-8 ){ realvalue
47d0: 20 2a 3d 20 31 65 38 3b 20 65 78 70 2d 3d 38 3b   *= 1e8; exp-=8;
47e0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69   }.          whi
47f0: 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3c 31 2e  le( realvalue<1.
4800: 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a  0 ){ realvalue *
4810: 3d 20 31 30 2e 30 3b 20 65 78 70 2d 2d 3b 20 7d  = 10.0; exp--; }
4820: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 65  .          if( e
4830: 78 70 3e 33 35 30 20 29 7b 0a 20 20 20 20 20 20  xp>350 ){.      
4840: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
4850: 66 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  f;.            b
4860: 75 66 5b 30 5d 20 3d 20 70 72 65 66 69 78 3b 0a  uf[0] = prefix;.
4870: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 63              memc
4880: 70 79 28 62 75 66 2b 28 70 72 65 66 69 78 21 3d  py(buf+(prefix!=
4890: 30 29 2c 22 49 6e 66 22 2c 34 29 3b 0a 20 20 20  0),"Inf",4);.   
48a0: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20           length 
48b0: 3d 20 33 2b 28 70 72 65 66 69 78 21 3d 30 29 3b  = 3+(prefix!=0);
48c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
48d0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
48e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
48f0: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20    bufpt = buf;. 
4900: 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20         /*.      
4910: 20 20 2a 2a 20 49 66 20 74 68 65 20 66 69 65 6c    ** If the fiel
4920: 64 20 74 79 70 65 20 69 73 20 65 74 47 45 4e 45  d type is etGENE
4930: 52 49 43 2c 20 74 68 65 6e 20 63 6f 6e 76 65 72  RIC, then conver
4940: 74 20 74 6f 20 65 69 74 68 65 72 20 65 74 45 58  t to either etEX
4950: 50 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20  P.        ** or 
4960: 65 74 46 4c 4f 41 54 2c 20 61 73 20 61 70 70 72  etFLOAT, as appr
4970: 6f 70 72 69 61 74 65 2e 0a 20 20 20 20 20 20 20  opriate..       
4980: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
4990: 78 74 79 70 65 21 3d 65 74 46 4c 4f 41 54 20 29  xtype!=etFLOAT )
49a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61 6c  {.          real
49b0: 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65 72  value += rounder
49c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
49d0: 72 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 20  realvalue>=10.0 
49e0: 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20  ){ realvalue *= 
49f0: 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20  0.1; exp++; }.  
4a00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4a10: 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45 4e  if( xtype==etGEN
4a20: 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 20 20  ERIC ){.        
4a30: 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 21 66 6c    flag_rtz = !fl
4a40: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
4a50: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
4a60: 65 78 70 3c 2d 34 20 7c 7c 20 65 78 70 3e 70 72  exp<-4 || exp>pr
4a70: 65 63 69 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20  ecision ){.     
4a80: 20 20 20 20 20 20 20 78 74 79 70 65 20 3d 20 65         xtype = e
4a90: 74 45 58 50 3b 0a 20 20 20 20 20 20 20 20 20 20  tEXP;.          
4aa0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4ab0: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 70     precision = p
4ac0: 72 65 63 69 73 69 6f 6e 20 2d 20 65 78 70 3b 0a  recision - exp;.
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 78 74 79 70              xtyp
4ae0: 65 20 3d 20 65 74 46 4c 4f 41 54 3b 0a 20 20 20  e = etFLOAT;.   
4af0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4b00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4b10: 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20 66 6c 61    flag_rtz = fla
4b20: 67 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20 20 20  g_altform2;.    
4b30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
4b40: 28 20 78 74 79 70 65 3d 3d 65 74 45 58 50 20 29  ( xtype==etEXP )
4b50: 7b 0a 20 20 20 20 20 20 20 20 20 20 65 32 20 3d  {.          e2 =
4b60: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   0;.        }els
4b70: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 65 32 20  e{.          e2 
4b80: 3d 20 65 78 70 3b 0a 20 20 20 20 20 20 20 20 7d  = exp;.        }
4b90: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
4ba0: 20 20 20 20 20 69 36 34 20 73 7a 42 75 66 4e 65       i64 szBufNe
4bb0: 65 64 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  eded;           
4bc0: 2f 2a 20 53 69 7a 65 20 6f 66 20 61 20 74 65 6d  /* Size of a tem
4bd0: 70 6f 72 61 72 79 20 62 75 66 66 65 72 20 6e 65  porary buffer ne
4be0: 65 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20  eded */.        
4bf0: 20 20 73 7a 42 75 66 4e 65 65 64 65 64 20 3d 20    szBufNeeded = 
4c00: 4d 41 58 28 65 32 2c 30 29 2b 28 69 36 34 29 70  MAX(e2,0)+(i64)p
4c10: 72 65 63 69 73 69 6f 6e 2b 28 69 36 34 29 77 69  recision+(i64)wi
4c20: 64 74 68 2b 31 35 3b 0a 20 20 20 20 20 20 20 20  dth+15;.        
4c30: 20 20 69 66 28 20 73 7a 42 75 66 4e 65 65 64 65    if( szBufNeede
4c40: 64 20 3e 20 65 74 42 55 46 53 49 5a 45 20 29 7b  d > etBUFSIZE ){
4c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66  .            buf
4c60: 70 74 20 3d 20 7a 45 78 74 72 61 20 3d 20 70 72  pt = zExtra = pr
4c70: 69 6e 74 66 54 65 6d 70 42 75 66 28 70 41 63 63  intfTempBuf(pAcc
4c80: 75 6d 2c 20 73 7a 42 75 66 4e 65 65 64 65 64 29  um, szBufNeeded)
4c90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
4ca0: 28 20 62 75 66 70 74 3d 3d 30 20 29 20 72 65 74  ( bufpt==0 ) ret
4cb0: 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  urn;.          }
4cc0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4cd0: 20 20 20 7a 4f 75 74 20 3d 20 62 75 66 70 74 3b     zOut = bufpt;
4ce0: 0a 20 20 20 20 20 20 20 20 6e 73 64 20 3d 20 31  .        nsd = 1
4cf0: 36 20 2b 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d  6 + flag_altform
4d00: 32 2a 31 30 3b 0a 20 20 20 20 20 20 20 20 66 6c  2*10;.        fl
4d10: 61 67 5f 64 70 20 3d 20 28 70 72 65 63 69 73 69  ag_dp = (precisi
4d20: 6f 6e 3e 30 20 3f 31 3a 30 29 20 7c 20 66 6c 61  on>0 ?1:0) | fla
4d30: 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20  g_alternateform 
4d40: 7c 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b  | flag_altform2;
4d50: 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  .        /* The 
4d60: 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74 20 6f 66  sign in front of
4d70: 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20   the number */. 
4d80: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 66 69         if( prefi
4d90: 78 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a  x ){.          *
4da0: 28 62 75 66 70 74 2b 2b 29 20 3d 20 70 72 65 66  (bufpt++) = pref
4db0: 69 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ix;.        }.  
4dc0: 20 20 20 20 20 20 2f 2a 20 44 69 67 69 74 73 20        /* Digits 
4dd0: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 64 65 63  prior to the dec
4de0: 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20  imal point */.  
4df0: 20 20 20 20 20 20 69 66 28 20 65 32 3c 30 20 29        if( e2<0 )
4e00: 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  {.          *(bu
4e10: 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20  fpt++) = '0';.  
4e20: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4e30: 20 20 20 20 20 20 20 66 6f 72 28 3b 20 65 32 3e         for(; e2>
4e40: 3d 30 3b 20 65 32 2d 2d 29 7b 0a 20 20 20 20 20  =0; e2--){.     
4e50: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4e60: 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74 28  ) = et_getdigit(
4e70: 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64 29  &realvalue,&nsd)
4e80: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
4e90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4ea0: 2f 2a 20 54 68 65 20 64 65 63 69 6d 61 6c 20 70  /* The decimal p
4eb0: 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  oint */.        
4ec0: 69 66 28 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20  if( flag_dp ){. 
4ed0: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
4ee0: 2b 2b 29 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++) = '.';.     
4ef0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
4f00: 22 30 22 20 64 69 67 69 74 73 20 61 66 74 65 72  "0" digits after
4f10: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
4f20: 6e 74 20 62 75 74 20 62 65 66 6f 72 65 20 74 68  nt but before th
4f30: 65 20 66 69 72 73 74 0a 20 20 20 20 20 20 20 20  e first.        
4f40: 2a 2a 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64  ** significant d
4f50: 69 67 69 74 20 6f 66 20 74 68 65 20 6e 75 6d 62  igit of the numb
4f60: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  er */.        fo
4f70: 72 28 65 32 2b 2b 3b 20 65 32 3c 30 3b 20 70 72  r(e2++; e2<0; pr
4f80: 65 63 69 73 69 6f 6e 2d 2d 2c 20 65 32 2b 2b 29  ecision--, e2++)
4f90: 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  {.          asse
4fa0: 72 74 28 20 70 72 65 63 69 73 69 6f 6e 3e 30 20  rt( precision>0 
4fb0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62  );.          *(b
4fc0: 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20  ufpt++) = '0';. 
4fd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4fe0: 20 2f 2a 20 53 69 67 6e 69 66 69 63 61 6e 74 20   /* Significant 
4ff0: 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68 65  digits after the
5000: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a   decimal point *
5010: 2f 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  /.        while(
5020: 20 28 70 72 65 63 69 73 69 6f 6e 2d 2d 29 3e 30   (precision--)>0
5030: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28   ){.          *(
5040: 62 75 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65  bufpt++) = et_ge
5050: 74 64 69 67 69 74 28 26 72 65 61 6c 76 61 6c 75  tdigit(&realvalu
5060: 65 2c 26 6e 73 64 29 3b 0a 20 20 20 20 20 20 20  e,&nsd);.       
5070: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 65   }.        /* Re
5080: 6d 6f 76 65 20 74 72 61 69 6c 69 6e 67 20 7a 65  move trailing ze
5090: 72 6f 73 20 61 6e 64 20 74 68 65 20 22 2e 22 20  ros and the "." 
50a0: 69 66 20 6e 6f 20 64 69 67 69 74 73 20 66 6f 6c  if no digits fol
50b0: 6c 6f 77 20 74 68 65 20 22 2e 22 20 2a 2f 0a 20  low the "." */. 
50c0: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f         if( flag_
50d0: 72 74 7a 20 26 26 20 66 6c 61 67 5f 64 70 20 29  rtz && flag_dp )
50e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  {.          whil
50f0: 65 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 30  e( bufpt[-1]=='0
5100: 27 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d  ' ) *(--bufpt) =
5110: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73   0;.          as
5120: 73 65 72 74 28 20 62 75 66 70 74 3e 7a 4f 75 74  sert( bufpt>zOut
5130: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   );.          if
5140: 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 2e 27  ( bufpt[-1]=='.'
5150: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
5160: 69 66 28 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d  if( flag_altform
5170: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  2 ){.           
5180: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
5190: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20  '0';.           
51a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
51b0: 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29        *(--bufpt)
51c0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
51d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
51e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
51f0: 20 20 2f 2a 20 41 64 64 20 74 68 65 20 22 65 4e    /* Add the "eN
5200: 4e 4e 22 20 73 75 66 66 69 78 20 2a 2f 0a 20 20  NN" suffix */.  
5210: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
5220: 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20 20  =etEXP ){.      
5230: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
5240: 20 61 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e   aDigits[infop->
5250: 63 68 61 72 73 65 74 5d 3b 0a 20 20 20 20 20 20  charset];.      
5260: 20 20 20 20 69 66 28 20 65 78 70 3c 30 20 29 7b      if( exp<0 ){
5270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62  .            *(b
5280: 75 66 70 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65  ufpt++) = '-'; e
5290: 78 70 20 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20  xp = -exp;.     
52a0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
52b0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
52c0: 2b 29 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20  +) = '+';.      
52d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
52e0: 69 66 28 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a  if( exp>=100 ){.
52f0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75              *(bu
5300: 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 28  fpt++) = (char)(
5310: 28 65 78 70 2f 31 30 30 29 2b 27 30 27 29 3b 20  (exp/100)+'0'); 
5320: 20 20 20 20 20 20 20 2f 2a 20 31 30 30 27 73 20         /* 100's 
5330: 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  digit */.       
5340: 20 20 20 20 20 65 78 70 20 25 3d 20 31 30 30 3b       exp %= 100;
5350: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
5360: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
5370: 29 20 3d 20 28 63 68 61 72 29 28 65 78 70 2f 31  ) = (char)(exp/1
5380: 30 2b 27 30 27 29 3b 20 20 20 20 20 20 20 20 20  0+'0');         
5390: 20 20 20 20 2f 2a 20 31 30 27 73 20 64 69 67 69      /* 10's digi
53a0: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2a  t */.          *
53b0: 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 63 68 61  (bufpt++) = (cha
53c0: 72 29 28 65 78 70 25 31 30 2b 27 30 27 29 3b 20  r)(exp%10+'0'); 
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
53e0: 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20  's digit */.    
53f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2a 62      }.        *b
5400: 75 66 70 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20  ufpt = 0;..     
5410: 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72     /* The conver
5420: 74 65 64 20 6e 75 6d 62 65 72 20 69 73 20 69 6e  ted number is in
5430: 20 62 75 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20   buf[] and zero 
5440: 74 65 72 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70  terminated. Outp
5450: 75 74 20 69 74 2e 0a 20 20 20 20 20 20 20 20 2a  ut it..        *
5460: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
5470: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
5480: 20 75 73 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f   usual order, no
5490: 74 20 72 65 76 65 72 73 65 64 20 61 73 20 77 69  t reversed as wi
54a0: 74 68 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  th.        ** in
54b0: 74 65 67 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e  teger conversion
54c0: 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65  s. */.        le
54d0: 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 62 75 66  ngth = (int)(buf
54e0: 70 74 2d 7a 4f 75 74 29 3b 0a 20 20 20 20 20 20  pt-zOut);.      
54f0: 20 20 62 75 66 70 74 20 3d 20 7a 4f 75 74 3b 0a    bufpt = zOut;.
5500: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 70 65 63  .        /* Spec
5510: 69 61 6c 20 63 61 73 65 3a 20 20 41 64 64 20 6c  ial case:  Add l
5520: 65 61 64 69 6e 67 20 7a 65 72 6f 73 20 69 66 20  eading zeros if 
5530: 74 68 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64  the flag_zeropad
5540: 20 66 6c 61 67 20 69 73 0a 20 20 20 20 20 20 20   flag is.       
5550: 20 2a 2a 20 73 65 74 20 61 6e 64 20 77 65 20 61   ** set and we a
5560: 72 65 20 6e 6f 74 20 6c 65 66 74 20 6a 75 73 74  re not left just
5570: 69 66 69 65 64 20 2a 2f 0a 20 20 20 20 20 20 20  ified */.       
5580: 20 69 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61   if( flag_zeropa
5590: 64 20 26 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a  d && !flag_leftj
55a0: 75 73 74 69 66 79 20 26 26 20 6c 65 6e 67 74 68  ustify && length
55b0: 20 3c 20 77 69 64 74 68 29 7b 0a 20 20 20 20 20   < width){.     
55c0: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
55d0: 20 20 20 20 20 20 69 6e 74 20 6e 50 61 64 20 3d        int nPad =
55e0: 20 77 69 64 74 68 20 2d 20 6c 65 6e 67 74 68 3b   width - length;
55f0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69  .          for(i
5600: 3d 77 69 64 74 68 3b 20 69 3e 3d 6e 50 61 64 3b  =width; i>=nPad;
5610: 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20   i--){.         
5620: 20 20 20 62 75 66 70 74 5b 69 5d 20 3d 20 62 75     bufpt[i] = bu
5630: 66 70 74 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20 20  fpt[i-nPad];.   
5640: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5650: 20 20 20 69 20 3d 20 70 72 65 66 69 78 21 3d 30     i = prefix!=0
5660: 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  ;.          whil
5670: 65 28 20 6e 50 61 64 2d 2d 20 29 20 62 75 66 70  e( nPad-- ) bufp
5680: 74 5b 69 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20 20  t[i++] = '0';.  
5690: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
56a0: 20 77 69 64 74 68 3b 0a 20 20 20 20 20 20 20 20   width;.        
56b0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
56c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
56d0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
56e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 62 72 65 61   */.        brea
56f0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  k;.      case et
5700: 53 49 5a 45 3a 0a 20 20 20 20 20 20 20 20 69 66  SIZE:.        if
5710: 28 20 21 62 41 72 67 4c 69 73 74 20 29 7b 0a 20  ( !bArgList ){. 
5720: 20 20 20 20 20 20 20 20 20 2a 28 76 61 5f 61 72           *(va_ar
5730: 67 28 61 70 2c 69 6e 74 2a 29 29 20 3d 20 70 41  g(ap,int*)) = pA
5740: 63 63 75 6d 2d 3e 6e 43 68 61 72 3b 0a 20 20 20  ccum->nChar;.   
5750: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c       }.        l
5760: 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20  ength = width = 
5770: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
5780: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 50  ;.      case etP
5790: 45 52 43 45 4e 54 3a 0a 20 20 20 20 20 20 20 20  ERCENT:.        
57a0: 62 75 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20  buf[0] = '%';.  
57b0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75        bufpt = bu
57c0: 66 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  f;.        lengt
57d0: 68 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  h = 1;.        b
57e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
57f0: 20 65 74 43 48 41 52 58 3a 0a 20 20 20 20 20 20   etCHARX:.      
5800: 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20 29    if( bArgList )
5810: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70  {.          bufp
5820: 74 20 3d 20 67 65 74 54 65 78 74 41 72 67 28 70  t = getTextArg(p
5830: 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20  ArgList);.      
5840: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 31 3b 0a      length = 1;.
5850: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62 75            if( bu
5860: 66 70 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  fpt ){.         
5870: 20 20 20 62 75 66 5b 30 5d 20 3d 20 63 20 3d 20     buf[0] = c = 
5880: 2a 28 62 75 66 70 74 2b 2b 29 3b 0a 20 20 20 20  *(bufpt++);.    
5890: 20 20 20 20 20 20 20 20 69 66 28 20 28 63 26 30          if( (c&0
58a0: 78 63 30 29 3d 3d 30 78 63 30 20 29 7b 0a 20 20  xc0)==0xc0 ){.  
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
58c0: 65 28 20 6c 65 6e 67 74 68 3c 34 20 26 26 20 28  e( length<4 && (
58d0: 62 75 66 70 74 5b 30 5d 26 30 78 63 30 29 3d 3d  bufpt[0]&0xc0)==
58e0: 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
58f0: 20 20 20 20 20 20 20 20 62 75 66 5b 6c 65 6e 67          buf[leng
5900: 74 68 2b 2b 5d 20 3d 20 2a 28 62 75 66 70 74 2b  th++] = *(bufpt+
5910: 2b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +);.            
5920: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
5930: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  }.          }els
5940: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  e{.            b
5950: 75 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20  uf[0] = 0;.     
5960: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
5970: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
5980: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 63 68 20  unsigned int ch 
5990: 3d 20 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69  = va_arg(ap,unsi
59a0: 67 6e 65 64 20 69 6e 74 29 3b 0a 20 20 20 20 20  gned int);.     
59b0: 20 20 20 20 20 69 66 28 20 63 68 3c 30 78 30 30       if( ch<0x00
59c0: 30 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  080 ){.         
59d0: 20 20 20 62 75 66 5b 30 5d 20 3d 20 63 68 20 26     buf[0] = ch &
59e0: 20 30 78 66 66 3b 0a 20 20 20 20 20 20 20 20 20   0xff;.         
59f0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 31 3b 0a 20     length = 1;. 
5a00: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
5a10: 66 28 20 63 68 3c 30 78 30 30 38 30 30 20 29 7b  f( ch<0x00800 ){
5a20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66  .            buf
5a30: 5b 30 5d 20 3d 20 30 78 63 30 20 2b 20 28 75 38  [0] = 0xc0 + (u8
5a40: 29 28 28 63 68 3e 3e 36 29 26 30 78 31 66 29 3b  )((ch>>6)&0x1f);
5a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66  .            buf
5a60: 5b 31 5d 20 3d 20 30 78 38 30 20 2b 20 28 75 38  [1] = 0x80 + (u8
5a70: 29 28 63 68 20 26 20 30 78 33 66 29 3b 0a 20 20  )(ch & 0x3f);.  
5a80: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68            length
5a90: 20 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20   = 2;.          
5aa0: 7d 65 6c 73 65 20 69 66 28 20 63 68 3c 30 78 31  }else if( ch<0x1
5ab0: 30 30 30 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0000 ){.        
5ac0: 20 20 20 20 62 75 66 5b 30 5d 20 3d 20 30 78 65      buf[0] = 0xe
5ad0: 30 20 2b 20 28 75 38 29 28 28 63 68 3e 3e 31 32  0 + (u8)((ch>>12
5ae0: 29 26 30 78 30 66 29 3b 0a 20 20 20 20 20 20 20  )&0x0f);.       
5af0: 20 20 20 20 20 62 75 66 5b 31 5d 20 3d 20 30 78       buf[1] = 0x
5b00: 38 30 20 2b 20 28 75 38 29 28 28 63 68 3e 3e 36  80 + (u8)((ch>>6
5b10: 29 20 26 20 30 78 33 66 29 3b 0a 20 20 20 20 20  ) & 0x3f);.     
5b20: 20 20 20 20 20 20 20 62 75 66 5b 32 5d 20 3d 20         buf[2] = 
5b30: 30 78 38 30 20 2b 20 28 75 38 29 28 63 68 20 26  0x80 + (u8)(ch &
5b40: 20 30 78 33 66 29 3b 0a 20 20 20 20 20 20 20 20   0x3f);.        
5b50: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b 0a      length = 3;.
5b60: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66  .            buf
5b80: 5b 30 5d 20 3d 20 30 78 66 30 20 2b 20 28 75 38  [0] = 0xf0 + (u8
5b90: 29 28 28 63 68 3e 3e 31 38 29 20 26 20 30 78 30  )((ch>>18) & 0x0
5ba0: 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  7);.            
5bb0: 62 75 66 5b 31 5d 20 3d 20 30 78 38 30 20 2b 20  buf[1] = 0x80 + 
5bc0: 28 75 38 29 28 28 63 68 3e 3e 31 32 29 20 26 20  (u8)((ch>>12) & 
5bd0: 30 78 33 66 29 3b 0a 20 20 20 20 20 20 20 20 20  0x3f);.         
5be0: 20 20 20 62 75 66 5b 32 5d 20 3d 20 30 78 38 30     buf[2] = 0x80
5bf0: 20 2b 20 28 75 38 29 28 28 63 68 3e 3e 36 29 20   + (u8)((ch>>6) 
5c00: 26 20 30 78 33 66 29 3b 0a 20 20 20 20 20 20 20  & 0x3f);.       
5c10: 20 20 20 20 20 62 75 66 5b 33 5d 20 3d 20 30 78       buf[3] = 0x
5c20: 38 30 20 2b 20 28 75 38 29 28 63 68 20 26 20 30  80 + (u8)(ch & 0
5c30: 78 33 66 29 3b 0a 20 20 20 20 20 20 20 20 20 20  x3f);.          
5c40: 20 20 6c 65 6e 67 74 68 20 3d 20 34 3b 0a 20 20    length = 4;.  
5c50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5c60: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
5c70: 70 72 65 63 69 73 69 6f 6e 3e 31 20 29 7b 0a 20  precision>1 ){. 
5c80: 20 20 20 20 20 20 20 20 20 77 69 64 74 68 20 2d           width -
5c90: 3d 20 70 72 65 63 69 73 69 6f 6e 2d 31 3b 0a 20  = precision-1;. 
5ca0: 20 20 20 20 20 20 20 20 20 69 66 28 20 77 69 64           if( wid
5cb0: 74 68 3e 31 20 26 26 20 21 66 6c 61 67 5f 6c 65  th>1 && !flag_le
5cc0: 66 74 6a 75 73 74 69 66 79 20 29 7b 0a 20 20 20  ftjustify ){.   
5cd0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
5ce0: 5f 73 74 72 5f 61 70 70 65 6e 64 63 68 61 72 28  _str_appendchar(
5cf0: 70 41 63 63 75 6d 2c 20 77 69 64 74 68 2d 31 2c  pAccum, width-1,
5d00: 20 27 20 27 29 3b 0a 20 20 20 20 20 20 20 20 20   ' ');.         
5d10: 20 20 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20     width = 0;.  
5d20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5d30: 20 20 20 20 77 68 69 6c 65 28 20 70 72 65 63 69      while( preci
5d40: 73 69 6f 6e 2d 2d 20 3e 20 31 20 29 7b 0a 20 20  sion-- > 1 ){.  
5d50: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5d60: 33 5f 73 74 72 5f 61 70 70 65 6e 64 28 70 41 63  3_str_append(pAc
5d70: 63 75 6d 2c 20 62 75 66 2c 20 6c 65 6e 67 74 68  cum, buf, length
5d80: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
5d90: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5da0: 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20   bufpt = buf;.  
5db0: 20 20 20 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f        flag_altfo
5dc0: 72 6d 32 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  rm2 = 1;.       
5dd0: 20 67 6f 74 6f 20 61 64 6a 75 73 74 5f 77 69 64   goto adjust_wid
5de0: 74 68 5f 66 6f 72 5f 75 74 66 38 3b 0a 20 20 20  th_for_utf8;.   
5df0: 20 20 20 63 61 73 65 20 65 74 53 54 52 49 4e 47     case etSTRING
5e00: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 44  :.      case etD
5e10: 59 4e 53 54 52 49 4e 47 3a 0a 20 20 20 20 20 20  YNSTRING:.      
5e20: 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20 29    if( bArgList )
5e30: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70  {.          bufp
5e40: 74 20 3d 20 67 65 74 54 65 78 74 41 72 67 28 70  t = getTextArg(p
5e50: 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20  ArgList);.      
5e60: 20 20 20 20 78 74 79 70 65 20 3d 20 65 74 53 54      xtype = etST
5e70: 52 49 4e 47 3b 0a 20 20 20 20 20 20 20 20 7d 65  RING;.        }e
5e80: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62  lse{.          b
5e90: 75 66 70 74 20 3d 20 76 61 5f 61 72 67 28 61 70  ufpt = va_arg(ap
5ea0: 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20  ,char*);.       
5eb0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 62   }.        if( b
5ec0: 75 66 70 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ufpt==0 ){.     
5ed0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 22 3b       bufpt = "";
5ee0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
5ef0: 66 28 20 78 74 79 70 65 3d 3d 65 74 44 59 4e 53  f( xtype==etDYNS
5f00: 54 52 49 4e 47 20 29 7b 0a 20 20 20 20 20 20 20  TRING ){.       
5f10: 20 20 20 69 66 28 20 70 41 63 63 75 6d 2d 3e 6e     if( pAccum->n
5f20: 43 68 61 72 3d 3d 30 0a 20 20 20 20 20 20 20 20  Char==0.        
5f30: 20 20 20 26 26 20 70 41 63 63 75 6d 2d 3e 6d 78     && pAccum->mx
5f40: 41 6c 6c 6f 63 0a 20 20 20 20 20 20 20 20 20 20  Alloc.          
5f50: 20 26 26 20 77 69 64 74 68 3d 3d 30 0a 20 20 20   && width==0.   
5f60: 20 20 20 20 20 20 20 20 26 26 20 70 72 65 63 69          && preci
5f70: 73 69 6f 6e 3c 30 0a 20 20 20 20 20 20 20 20 20  sion<0.         
5f80: 20 20 26 26 20 70 41 63 63 75 6d 2d 3e 61 63 63    && pAccum->acc
5f90: 45 72 72 6f 72 3d 3d 30 0a 20 20 20 20 20 20 20  Error==0.       
5fa0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
5fb0: 20 20 2f 2a 20 53 70 65 63 69 61 6c 20 6f 70 74    /* Special opt
5fc0: 69 6d 69 7a 61 74 69 6f 6e 20 66 6f 72 20 73 71  imization for sq
5fd0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
5fe0: 7a 2e 2e 2e 22 29 3a 0a 20 20 20 20 20 20 20 20  z..."):.        
5ff0: 20 20 20 20 2a 2a 20 45 78 74 65 6e 64 20 61 6e      ** Extend an
6000: 20 65 78 69 73 74 69 6e 67 20 6d 65 6d 6f 72 79   existing memory
6010: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 61 74 68   allocation rath
6020: 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67  er than creating
6030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20  .            ** 
6040: 61 20 6e 65 77 20 6f 6e 65 2e 20 2a 2f 0a 20 20  a new one. */.  
6050: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
6060: 28 20 28 70 41 63 63 75 6d 2d 3e 70 72 69 6e 74  ( (pAccum->print
6070: 66 46 6c 61 67 73 26 53 51 4c 49 54 45 5f 50 52  fFlags&SQLITE_PR
6080: 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 3d 3d  INTF_MALLOCED)==
6090: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  0 );.           
60a0: 20 70 41 63 63 75 6d 2d 3e 7a 54 65 78 74 20 3d   pAccum->zText =
60b0: 20 62 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20   bufpt;.        
60c0: 20 20 20 20 70 41 63 63 75 6d 2d 3e 6e 41 6c 6c      pAccum->nAll
60d0: 6f 63 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  oc = sqlite3DbMa
60e0: 6c 6c 6f 63 53 69 7a 65 28 70 41 63 63 75 6d 2d  llocSize(pAccum-
60f0: 3e 64 62 2c 20 62 75 66 70 74 29 3b 0a 20 20 20  >db, bufpt);.   
6100: 20 20 20 20 20 20 20 20 20 70 41 63 63 75 6d 2d           pAccum-
6110: 3e 6e 43 68 61 72 20 3d 20 30 78 37 66 66 66 66  >nChar = 0x7ffff
6120: 66 66 66 20 26 20 28 69 6e 74 29 73 74 72 6c 65  fff & (int)strle
6130: 6e 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  n(bufpt);.      
6140: 20 20 20 20 20 20 70 41 63 63 75 6d 2d 3e 70 72        pAccum->pr
6150: 69 6e 74 66 46 6c 61 67 73 20 7c 3d 20 53 51 4c  intfFlags |= SQL
6160: 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
6170: 43 45 44 3b 0a 20 20 20 20 20 20 20 20 20 20 20  CED;.           
6180: 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a 20 20 20   length = 0;.   
6190: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
61a0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
61b0: 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20 62        zExtra = b
61c0: 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ufpt;.        }.
61d0: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63          if( prec
61e0: 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20  ision>=0 ){.    
61f0: 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 61        if( flag_a
6200: 6c 74 66 6f 72 6d 32 20 29 7b 0a 20 20 20 20 20  ltform2 ){.     
6210: 20 20 20 20 20 20 20 2f 2a 20 53 65 74 20 6c 65         /* Set le
6220: 6e 67 74 68 20 74 6f 20 74 68 65 20 6e 75 6d 62  ngth to the numb
6230: 65 72 20 6f 66 20 62 79 74 65 73 20 6e 65 65 64  er of bytes need
6240: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 64  ed in order to d
6250: 69 73 70 6c 61 79 0a 20 20 20 20 20 20 20 20 20  isplay.         
6260: 20 20 20 2a 2a 20 70 72 65 63 69 73 69 6f 6e 20     ** precision 
6270: 63 68 61 72 61 63 74 65 72 73 20 2a 2f 0a 20 20  characters */.  
6280: 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e            unsign
6290: 65 64 20 63 68 61 72 20 2a 7a 20 3d 20 28 75 6e  ed char *z = (un
62a0: 73 69 67 6e 65 64 20 63 68 61 72 2a 29 62 75 66  signed char*)buf
62b0: 70 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  pt;.            
62c0: 77 68 69 6c 65 28 20 70 72 65 63 69 73 69 6f 6e  while( precision
62d0: 2d 2d 20 3e 20 30 20 26 26 20 7a 5b 30 5d 20 29  -- > 0 && z[0] )
62e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
62f0: 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
6300: 28 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (z);.           
6310: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c   }.            l
6320: 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 7a 20  ength = (int)(z 
6330: 2d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  - (unsigned char
6340: 2a 29 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  *)bufpt);.      
6350: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6360: 20 20 20 20 20 20 20 66 6f 72 28 6c 65 6e 67 74         for(lengt
6370: 68 3d 30 3b 20 6c 65 6e 67 74 68 3c 70 72 65 63  h=0; length<prec
6380: 69 73 69 6f 6e 20 26 26 20 62 75 66 70 74 5b 6c  ision && bufpt[l
6390: 65 6e 67 74 68 5d 3b 20 6c 65 6e 67 74 68 2b 2b  ength]; length++
63a0: 29 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ){}.          }.
63b0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
63c0: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20           length 
63d0: 3d 20 30 78 37 66 66 66 66 66 66 66 20 26 20 28  = 0x7fffffff & (
63e0: 69 6e 74 29 73 74 72 6c 65 6e 28 62 75 66 70 74  int)strlen(bufpt
63f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
6400: 20 20 20 61 64 6a 75 73 74 5f 77 69 64 74 68 5f     adjust_width_
6410: 66 6f 72 5f 75 74 66 38 3a 0a 20 20 20 20 20 20  for_utf8:.      
6420: 20 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 66 6f    if( flag_altfo
6430: 72 6d 32 20 26 26 20 77 69 64 74 68 3e 30 20 29  rm2 && width>0 )
6440: 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
6450: 64 6a 75 73 74 20 77 69 64 74 68 20 74 6f 20 61  djust width to a
6460: 63 63 6f 75 6e 74 20 66 6f 72 20 65 78 74 72 61  ccount for extra
6470: 20 62 79 74 65 73 20 69 6e 20 55 54 46 2d 38 20   bytes in UTF-8 
6480: 63 68 61 72 61 63 74 65 72 73 20 2a 2f 0a 20 20  characters */.  
6490: 20 20 20 20 20 20 20 20 69 6e 74 20 69 69 20 3d          int ii =
64a0: 20 6c 65 6e 67 74 68 20 2d 20 31 3b 0a 20 20 20   length - 1;.   
64b0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 69 69         while( ii
64c0: 3e 3d 30 20 29 20 69 66 28 20 28 62 75 66 70 74  >=0 ) if( (bufpt
64d0: 5b 69 69 2d 2d 5d 20 26 20 30 78 63 30 29 3d 3d  [ii--] & 0xc0)==
64e0: 30 78 38 30 20 29 20 77 69 64 74 68 2b 2b 3b 0a  0x80 ) width++;.
64f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6500: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
6510: 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 3a  ase etSQLESCAPE:
6520: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 25 71             /* %q
6530: 3a 20 45 73 63 61 70 65 20 27 20 63 68 61 72 61  : Escape ' chara
6540: 63 74 65 72 73 20 2a 2f 0a 20 20 20 20 20 20 63  cters */.      c
6550: 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 32  ase etSQLESCAPE2
6560: 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 25 51  :          /* %Q
6570: 3a 20 45 73 63 61 70 65 20 27 20 61 6e 64 20 65  : Escape ' and e
6580: 6e 63 6c 6f 73 65 20 69 6e 20 27 2e 2e 2e 27 20  nclose in '...' 
6590: 2a 2f 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  */.      case et
65a0: 53 51 4c 45 53 43 41 50 45 33 3a 20 7b 20 20 20  SQLESCAPE3: {   
65b0: 20 20 20 20 20 2f 2a 20 25 77 3a 20 45 73 63 61       /* %w: Esca
65c0: 70 65 20 22 20 63 68 61 72 61 63 74 65 72 73 20  pe " characters 
65d0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  */.        int i
65e0: 2c 20 6a 2c 20 6b 2c 20 6e 2c 20 69 73 6e 75 6c  , j, k, n, isnul
65f0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  l;.        int n
6600: 65 65 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 20  eedQuote;.      
6610: 20 20 63 68 61 72 20 63 68 3b 0a 20 20 20 20 20    char ch;.     
6620: 20 20 20 63 68 61 72 20 71 20 3d 20 28 28 78 74     char q = ((xt
6630: 79 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45  ype==etSQLESCAPE
6640: 33 29 3f 27 22 27 3a 27 5c 27 27 29 3b 20 20 20  3)?'"':'\'');   
6650: 2f 2a 20 51 75 6f 74 65 20 63 68 61 72 61 63 74  /* Quote charact
6660: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68  er */.        ch
6670: 61 72 20 2a 65 73 63 61 72 67 3b 0a 0a 20 20 20  ar *escarg;..   
6680: 20 20 20 20 20 69 66 28 20 62 41 72 67 4c 69 73       if( bArgLis
6690: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65  t ){.          e
66a0: 73 63 61 72 67 20 3d 20 67 65 74 54 65 78 74 41  scarg = getTextA
66b0: 72 67 28 70 41 72 67 4c 69 73 74 29 3b 0a 20 20  rg(pArgList);.  
66c0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
66d0: 20 20 20 20 20 20 20 65 73 63 61 72 67 20 3d 20         escarg = 
66e0: 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29  va_arg(ap,char*)
66f0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
6700: 20 20 20 20 69 73 6e 75 6c 6c 20 3d 20 65 73 63      isnull = esc
6710: 61 72 67 3d 3d 30 3b 0a 20 20 20 20 20 20 20 20  arg==0;.        
6720: 69 66 28 20 69 73 6e 75 6c 6c 20 29 20 65 73 63  if( isnull ) esc
6730: 61 72 67 20 3d 20 28 78 74 79 70 65 3d 3d 65 74  arg = (xtype==et
6740: 53 51 4c 45 53 43 41 50 45 32 20 3f 20 22 4e 55  SQLESCAPE2 ? "NU
6750: 4c 4c 22 20 3a 20 22 28 4e 55 4c 4c 29 22 29 3b  LL" : "(NULL)");
6760: 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  .        /* For 
6770: 25 71 2c 20 25 51 2c 20 61 6e 64 20 25 77 2c 20  %q, %Q, and %w, 
6780: 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20 69 73  the precision is
6790: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
67a0: 79 74 65 20 28 6f 72 0a 20 20 20 20 20 20 20 20  yte (or.        
67b0: 2a 2a 20 63 68 61 72 61 63 74 65 72 73 20 69 66  ** characters if
67c0: 20 74 68 65 20 21 20 66 6c 61 67 73 20 69 73 20   the ! flags is 
67d0: 70 72 65 73 65 6e 74 29 20 74 6f 20 75 73 65 20  present) to use 
67e0: 66 72 6f 6d 20 74 68 65 20 69 6e 70 75 74 2e 0a  from the input..
67f0: 20 20 20 20 20 20 20 20 2a 2a 20 42 65 63 61 75          ** Becau
6800: 73 65 20 6f 66 20 74 68 65 20 65 78 74 72 61 20  se of the extra 
6810: 71 75 6f 74 69 6e 67 20 63 68 61 72 61 63 74 65  quoting characte
6820: 72 73 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  rs inserted, the
6830: 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
6840: 2a 2a 20 6f 66 20 6f 75 74 70 75 74 20 63 68 61  ** of output cha
6850: 72 61 63 74 65 72 73 20 6d 61 79 20 62 65 20 6c  racters may be l
6860: 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 70  arger than the p
6870: 72 65 63 69 73 69 6f 6e 2e 0a 20 20 20 20 20 20  recision..      
6880: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6b 20 3d    */.        k =
6890: 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20   precision;.    
68a0: 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 6b      for(i=n=0; k
68b0: 21 3d 30 20 26 26 20 28 63 68 3d 65 73 63 61 72  !=0 && (ch=escar
68c0: 67 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20 6b  g[i])!=0; i++, k
68d0: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  --){.          i
68e0: 66 28 20 63 68 3d 3d 71 20 29 20 20 6e 2b 2b 3b  f( ch==q )  n++;
68f0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 66  .          if( f
6900: 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 20 26 26 20  lag_altform2 && 
6910: 28 63 68 26 30 78 63 30 29 3d 3d 30 78 63 30 20  (ch&0xc0)==0xc0 
6920: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ){.            w
6930: 68 69 6c 65 28 20 28 65 73 63 61 72 67 5b 69 2b  hile( (escarg[i+
6940: 31 5d 26 30 78 63 30 29 3d 3d 30 78 38 30 20 29  1]&0xc0)==0x80 )
6950: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  { i++; }.       
6960: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
6970: 20 20 20 20 20 20 20 6e 65 65 64 51 75 6f 74 65         needQuote
6980: 20 3d 20 21 69 73 6e 75 6c 6c 20 26 26 20 78 74   = !isnull && xt
6990: 79 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45  ype==etSQLESCAPE
69a0: 32 3b 0a 20 20 20 20 20 20 20 20 6e 20 2b 3d 20  2;.        n += 
69b0: 69 20 2b 20 33 3b 0a 20 20 20 20 20 20 20 20 69  i + 3;.        i
69c0: 66 28 20 6e 3e 65 74 42 55 46 53 49 5a 45 20 29  f( n>etBUFSIZE )
69d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70  {.          bufp
69e0: 74 20 3d 20 7a 45 78 74 72 61 20 3d 20 70 72 69  t = zExtra = pri
69f0: 6e 74 66 54 65 6d 70 42 75 66 28 70 41 63 63 75  ntfTempBuf(pAccu
6a00: 6d 2c 20 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  m, n);.         
6a10: 20 69 66 28 20 62 75 66 70 74 3d 3d 30 20 29 20   if( bufpt==0 ) 
6a20: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
6a30: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
6a40: 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20   bufpt = buf;.  
6a50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
6a60: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  j = 0;.        i
6a70: 66 28 20 6e 65 65 64 51 75 6f 74 65 20 29 20 62  f( needQuote ) b
6a80: 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20  ufpt[j++] = q;. 
6a90: 20 20 20 20 20 20 20 6b 20 3d 20 69 3b 0a 20 20         k = i;.  
6aa0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
6ab0: 3c 6b 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  <k; i++){.      
6ac0: 20 20 20 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d      bufpt[j++] =
6ad0: 20 63 68 20 3d 20 65 73 63 61 72 67 5b 69 5d 3b   ch = escarg[i];
6ae0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
6af0: 68 3d 3d 71 20 29 20 62 75 66 70 74 5b 6a 2b 2b  h==q ) bufpt[j++
6b00: 5d 20 3d 20 63 68 3b 0a 20 20 20 20 20 20 20 20  ] = ch;.        
6b10: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 65  }.        if( ne
6b20: 65 64 51 75 6f 74 65 20 29 20 62 75 66 70 74 5b  edQuote ) bufpt[
6b30: 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20 20 20  j++] = q;.      
6b40: 20 20 62 75 66 70 74 5b 6a 5d 20 3d 20 30 3b 0a    bufpt[j] = 0;.
6b50: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
6b60: 20 6a 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   j;.        goto
6b70: 20 61 64 6a 75 73 74 5f 77 69 64 74 68 5f 66 6f   adjust_width_fo
6b80: 72 5f 75 74 66 38 3b 0a 20 20 20 20 20 20 7d 0a  r_utf8;.      }.
6b90: 20 20 20 20 20 20 63 61 73 65 20 65 74 54 4f 4b        case etTOK
6ba0: 45 4e 3a 20 7b 0a 20 20 20 20 20 20 20 20 54 6f  EN: {.        To
6bb0: 6b 65 6e 20 2a 70 54 6f 6b 65 6e 3b 0a 20 20 20  ken *pToken;.   
6bc0: 20 20 20 20 20 69 66 28 20 28 70 41 63 63 75 6d       if( (pAccum
6bd0: 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20  ->printfFlags & 
6be0: 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
6bf0: 54 45 52 4e 41 4c 29 3d 3d 30 20 29 20 72 65 74  TERNAL)==0 ) ret
6c00: 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 70 54 6f  urn;.        pTo
6c10: 6b 65 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  ken = va_arg(ap,
6c20: 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 20 20 20 20   Token*);.      
6c30: 20 20 61 73 73 65 72 74 28 20 62 41 72 67 4c 69    assert( bArgLi
6c40: 73 74 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  st==0 );.       
6c50: 20 69 66 28 20 70 54 6f 6b 65 6e 20 26 26 20 70   if( pToken && p
6c60: 54 6f 6b 65 6e 2d 3e 6e 20 29 7b 0a 20 20 20 20  Token->n ){.    
6c70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
6c80: 72 5f 61 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  r_append(pAccum,
6c90: 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 70 54   (const char*)pT
6ca0: 6f 6b 65 6e 2d 3e 7a 2c 20 70 54 6f 6b 65 6e 2d  oken->z, pToken-
6cb0: 3e 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  >n);.        }. 
6cc0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
6cd0: 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20  width = 0;.     
6ce0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
6cf0: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53  }.      case etS
6d00: 52 43 4c 49 53 54 3a 20 7b 0a 20 20 20 20 20 20  RCLIST: {.      
6d10: 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
6d20: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6b 3b 0a  .        int k;.
6d30: 20 20 20 20 20 20 20 20 73 74 72 75 63 74 20 53          struct S
6d40: 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 70 49 74  rcList_item *pIt
6d50: 65 6d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  em;.        if( 
6d60: 28 70 41 63 63 75 6d 2d 3e 70 72 69 6e 74 66 46  (pAccum->printfF
6d70: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
6d80: 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 29 3d 3d  INTF_INTERNAL)==
6d90: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
6da0: 20 20 20 20 70 53 72 63 20 3d 20 76 61 5f 61 72      pSrc = va_ar
6db0: 67 28 61 70 2c 20 53 72 63 4c 69 73 74 2a 29 3b  g(ap, SrcList*);
6dc0: 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 76 61 5f  .        k = va_
6dd0: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
6de0: 20 20 20 20 20 20 70 49 74 65 6d 20 3d 20 26 70        pItem = &p
6df0: 53 72 63 2d 3e 61 5b 6b 5d 3b 0a 20 20 20 20 20  Src->a[k];.     
6e00: 20 20 20 61 73 73 65 72 74 28 20 62 41 72 67 4c     assert( bArgL
6e10: 69 73 74 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ist==0 );.      
6e20: 20 20 61 73 73 65 72 74 28 20 6b 3e 3d 30 20 26    assert( k>=0 &
6e30: 26 20 6b 3c 70 53 72 63 2d 3e 6e 53 72 63 20 29  & k<pSrc->nSrc )
6e40: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  ;.        if( pI
6e50: 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65 20 29  tem->zDatabase )
6e60: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
6e70: 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 61 6c  te3_str_appendal
6e80: 6c 28 70 41 63 63 75 6d 2c 20 70 49 74 65 6d 2d  l(pAccum, pItem-
6e90: 3e 7a 44 61 74 61 62 61 73 65 29 3b 0a 20 20 20  >zDatabase);.   
6ea0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
6eb0: 74 72 5f 61 70 70 65 6e 64 28 70 41 63 63 75 6d  tr_append(pAccum
6ec0: 2c 20 22 2e 22 2c 20 31 29 3b 0a 20 20 20 20 20  , ".", 1);.     
6ed0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
6ee0: 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 61  ite3_str_appenda
6ef0: 6c 6c 28 70 41 63 63 75 6d 2c 20 70 49 74 65 6d  ll(pAccum, pItem
6f00: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
6f10: 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68    length = width
6f20: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72   = 0;.        br
6f30: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
6f40: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
6f50: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 78 74        assert( xt
6f60: 79 70 65 3d 3d 65 74 49 4e 56 41 4c 49 44 20 29  ype==etINVALID )
6f70: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
6f80: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 2f  ;.      }.    }/
6f90: 2a 20 45 6e 64 20 73 77 69 74 63 68 20 6f 76 65  * End switch ove
6fa0: 72 20 74 68 65 20 66 6f 72 6d 61 74 20 74 79 70  r the format typ
6fb0: 65 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20 20 20  e */.    /*.    
6fc0: 2a 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20 74  ** The text of t
6fd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  he conversion is
6fe0: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 22   pointed to by "
6ff0: 62 75 66 70 74 22 20 61 6e 64 20 69 73 0a 20 20  bufpt" and is.  
7000: 20 20 2a 2a 20 22 6c 65 6e 67 74 68 22 20 63 68    ** "length" ch
7010: 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
7020: 54 68 65 20 66 69 65 6c 64 20 77 69 64 74 68 20  The field width 
7030: 69 73 20 22 77 69 64 74 68 22 2e 20 20 44 6f 0a  is "width".  Do.
7040: 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74 70 75      ** the outpu
7050: 74 2e 20 20 42 6f 74 68 20 6c 65 6e 67 74 68 20  t.  Both length 
7060: 61 6e 64 20 77 69 64 74 68 20 61 72 65 20 69 6e  and width are in
7070: 20 62 79 74 65 73 2c 20 6e 6f 74 20 63 68 61 72   bytes, not char
7080: 61 63 74 65 72 73 2c 0a 20 20 20 20 2a 2a 20 61  acters,.    ** a
7090: 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 20 49  t this point.  I
70a0: 66 20 74 68 65 20 22 21 22 20 66 6c 61 67 20 77  f the "!" flag w
70b0: 61 73 20 70 72 65 73 65 6e 74 20 6f 6e 20 73 74  as present on st
70c0: 72 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f 6e 73  ring conversions
70d0: 0a 20 20 20 20 2a 2a 20 69 6e 64 69 63 61 74 69  .    ** indicati
70e0: 6e 67 20 74 68 61 74 20 77 69 64 74 68 20 61 6e  ng that width an
70f0: 64 20 70 72 65 63 69 73 69 6f 6e 20 73 68 6f 75  d precision shou
7100: 6c 64 20 62 65 20 65 78 70 72 65 73 73 65 64 20  ld be expressed 
7110: 69 6e 20 63 68 61 72 61 63 74 65 72 73 2c 0a 20  in characters,. 
7120: 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 76     ** then the v
7130: 61 6c 75 65 73 20 68 61 76 65 20 62 65 65 6e 20  alues have been 
7140: 74 72 61 6e 73 6c 61 74 65 64 20 70 72 69 6f 72  translated prior
7150: 20 74 6f 20 72 65 61 63 68 69 6e 67 20 74 68 69   to reaching thi
7160: 73 20 70 6f 69 6e 74 2e 0a 20 20 20 20 2a 2f 0a  s point..    */.
7170: 20 20 20 20 77 69 64 74 68 20 2d 3d 20 6c 65 6e      width -= len
7180: 67 74 68 3b 0a 20 20 20 20 69 66 28 20 77 69 64  gth;.    if( wid
7190: 74 68 3e 30 20 29 7b 0a 20 20 20 20 20 20 69 66  th>0 ){.      if
71a0: 28 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74  ( !flag_leftjust
71b0: 69 66 79 20 29 20 73 71 6c 69 74 65 33 5f 73 74  ify ) sqlite3_st
71c0: 72 5f 61 70 70 65 6e 64 63 68 61 72 28 70 41 63  r_appendchar(pAc
71d0: 63 75 6d 2c 20 77 69 64 74 68 2c 20 27 20 27 29  cum, width, ' ')
71e0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
71f0: 73 74 72 5f 61 70 70 65 6e 64 28 70 41 63 63 75  str_append(pAccu
7200: 6d 2c 20 62 75 66 70 74 2c 20 6c 65 6e 67 74 68  m, bufpt, length
7210: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 66 6c 61  );.      if( fla
7220: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29 20  g_leftjustify ) 
7230: 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65  sqlite3_str_appe
7240: 6e 64 63 68 61 72 28 70 41 63 63 75 6d 2c 20 77  ndchar(pAccum, w
7250: 69 64 74 68 2c 20 27 20 27 29 3b 0a 20 20 20 20  idth, ' ');.    
7260: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
7270: 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 28  ite3_str_append(
7280: 70 41 63 63 75 6d 2c 20 62 75 66 70 74 2c 20 6c  pAccum, bufpt, l
7290: 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20  ength);.    }.. 
72a0: 20 20 20 69 66 28 20 7a 45 78 74 72 61 20 29 7b     if( zExtra ){
72b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
72c0: 46 72 65 65 28 70 41 63 63 75 6d 2d 3e 64 62 2c  Free(pAccum->db,
72d0: 20 7a 45 78 74 72 61 29 3b 0a 20 20 20 20 20 20   zExtra);.      
72e0: 7a 45 78 74 72 61 20 3d 20 30 3b 0a 20 20 20 20  zExtra = 0;.    
72f0: 7d 0a 20 20 7d 2f 2a 20 45 6e 64 20 66 6f 72 20  }.  }/* End for 
7300: 6c 6f 6f 70 20 6f 76 65 72 20 74 68 65 20 66 6f  loop over the fo
7310: 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 7d  rmat string */.}
7320: 20 2f 2a 20 45 6e 64 20 6f 66 20 66 75 6e 63 74   /* End of funct
7330: 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 6e  ion */../*.** En
7340: 6c 61 72 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  large the memory
7350: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 6e 20 61   allocation on a
7360: 20 53 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 74   StrAccum object
7370: 20 73 6f 20 74 68 61 74 20 69 74 20 69 73 0a 2a   so that it is.*
7380: 2a 20 61 62 6c 65 20 74 6f 20 61 63 63 65 70 74  * able to accept
7390: 20 61 74 20 6c 65 61 73 74 20 4e 20 6d 6f 72 65   at least N more
73a0: 20 62 79 74 65 73 20 6f 66 20 74 65 78 74 2e 0a   bytes of text..
73b0: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
73c0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
73d0: 20 6f 66 20 74 65 78 74 20 74 68 61 74 20 53 74   of text that St
73e0: 72 41 63 63 75 6d 20 69 73 20 61 62 6c 65 20 74  rAccum is able t
73f0: 6f 20 61 63 63 65 70 74 0a 2a 2a 20 61 66 74 65  o accept.** afte
7400: 72 20 74 68 65 20 61 74 74 65 6d 70 74 65 64 20  r the attempted 
7410: 65 6e 6c 61 72 67 65 6d 65 6e 74 2e 20 20 54 68  enlargement.  Th
7420: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
7430: 20 6d 69 67 68 74 20 62 65 20 7a 65 72 6f 2e 0a   might be zero..
7440: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
7450: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 45 6e 6c  lite3StrAccumEnl
7460: 61 72 67 65 28 53 74 72 41 63 63 75 6d 20 2a 70  arge(StrAccum *p
7470: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 63 68 61 72  , int N){.  char
7480: 20 2a 7a 4e 65 77 3b 0a 20 20 61 73 73 65 72 74   *zNew;.  assert
7490: 28 20 70 2d 3e 6e 43 68 61 72 2b 28 69 36 34 29  ( p->nChar+(i64)
74a0: 4e 20 3e 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29  N >= p->nAlloc )
74b0: 3b 20 2f 2a 20 4f 6e 6c 79 20 63 61 6c 6c 65 64  ; /* Only called
74c0: 20 69 66 20 72 65 61 6c 6c 79 20 6e 65 65 64 65   if really neede
74d0: 64 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 63  d */.  if( p->ac
74e0: 63 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 74 65  cError ){.    te
74f0: 73 74 63 61 73 65 28 70 2d 3e 61 63 63 45 72 72  stcase(p->accErr
7500: 6f 72 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  or==SQLITE_TOOBI
7510: 47 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  G);.    testcase
7520: 28 70 2d 3e 61 63 63 45 72 72 6f 72 3d 3d 53 51  (p->accError==SQ
7530: 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20  LITE_NOMEM);.   
7540: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
7550: 20 69 66 28 20 70 2d 3e 6d 78 41 6c 6c 6f 63 3d   if( p->mxAlloc=
7560: 3d 30 20 29 7b 0a 20 20 20 20 4e 20 3d 20 70 2d  =0 ){.    N = p-
7570: 3e 6e 41 6c 6c 6f 63 20 2d 20 70 2d 3e 6e 43 68  >nAlloc - p->nCh
7580: 61 72 20 2d 20 31 3b 0a 20 20 20 20 73 65 74 53  ar - 1;.    setS
7590: 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70 2c 20  trAccumError(p, 
75a0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 29 3b 0a  SQLITE_TOOBIG);.
75b0: 20 20 20 20 72 65 74 75 72 6e 20 4e 3b 0a 20 20      return N;.  
75c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
75d0: 2a 7a 4f 6c 64 20 3d 20 69 73 4d 61 6c 6c 6f 63  *zOld = isMalloc
75e0: 65 64 28 70 29 20 3f 20 70 2d 3e 7a 54 65 78 74  ed(p) ? p->zText
75f0: 20 3a 20 30 3b 0a 20 20 20 20 69 36 34 20 73 7a   : 0;.    i64 sz
7600: 4e 65 77 20 3d 20 70 2d 3e 6e 43 68 61 72 3b 0a  New = p->nChar;.
7610: 20 20 20 20 73 7a 4e 65 77 20 2b 3d 20 4e 20 2b      szNew += N +
7620: 20 31 3b 0a 20 20 20 20 69 66 28 20 73 7a 4e 65   1;.    if( szNe
7630: 77 2b 70 2d 3e 6e 43 68 61 72 3c 3d 70 2d 3e 6d  w+p->nChar<=p->m
7640: 78 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20  xAlloc ){.      
7650: 2f 2a 20 46 6f 72 63 65 20 65 78 70 6f 6e 65 6e  /* Force exponen
7660: 74 69 61 6c 20 62 75 66 66 65 72 20 73 69 7a 65  tial buffer size
7670: 20 67 72 6f 77 74 68 20 61 73 20 6c 6f 6e 67 20   growth as long 
7680: 61 73 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 6f  as it does not o
7690: 76 65 72 66 6c 6f 77 2c 0a 20 20 20 20 20 20 2a  verflow,.      *
76a0: 2a 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e  * to avoid havin
76b0: 67 20 74 6f 20 63 61 6c 6c 20 74 68 69 73 20 72  g to call this r
76c0: 6f 75 74 69 6e 65 20 74 6f 6f 20 6f 66 74 65 6e  outine too often
76d0: 20 2a 2f 0a 20 20 20 20 20 20 73 7a 4e 65 77 20   */.      szNew 
76e0: 2b 3d 20 70 2d 3e 6e 43 68 61 72 3b 0a 20 20 20  += p->nChar;.   
76f0: 20 7d 0a 20 20 20 20 69 66 28 20 73 7a 4e 65 77   }.    if( szNew
7700: 20 3e 20 70 2d 3e 6d 78 41 6c 6c 6f 63 20 29 7b   > p->mxAlloc ){
7710: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
7720: 74 72 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20  tr_reset(p);.   
7730: 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45 72     setStrAccumEr
7740: 72 6f 72 28 70 2c 20 53 51 4c 49 54 45 5f 54 4f  ror(p, SQLITE_TO
7750: 4f 42 49 47 29 3b 0a 20 20 20 20 20 20 72 65 74  OBIG);.      ret
7760: 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  urn 0;.    }else
7770: 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f  {.      p->nAllo
7780: 63 20 3d 20 28 69 6e 74 29 73 7a 4e 65 77 3b 0a  c = (int)szNew;.
7790: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
77a0: 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 7a 4e 65  >db ){.      zNe
77b0: 77 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61  w = sqlite3DbRea
77c0: 6c 6c 6f 63 28 70 2d 3e 64 62 2c 20 7a 4f 6c 64  lloc(p->db, zOld
77d0: 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20  , p->nAlloc);.  
77e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
77f0: 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 5f 72 65  New = sqlite3_re
7800: 61 6c 6c 6f 63 36 34 28 7a 4f 6c 64 2c 20 70 2d  alloc64(zOld, p-
7810: 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 7d 0a  >nAlloc);.    }.
7820: 20 20 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a      if( zNew ){.
7830: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 2d        assert( p-
7840: 3e 7a 54 65 78 74 21 3d 30 20 7c 7c 20 70 2d 3e  >zText!=0 || p->
7850: 6e 43 68 61 72 3d 3d 30 20 29 3b 0a 20 20 20 20  nChar==0 );.    
7860: 20 20 69 66 28 20 21 69 73 4d 61 6c 6c 6f 63 65    if( !isMalloce
7870: 64 28 70 29 20 26 26 20 70 2d 3e 6e 43 68 61 72  d(p) && p->nChar
7880: 3e 30 20 29 20 6d 65 6d 63 70 79 28 7a 4e 65 77  >0 ) memcpy(zNew
7890: 2c 20 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e 6e  , p->zText, p->n
78a0: 43 68 61 72 29 3b 0a 20 20 20 20 20 20 70 2d 3e  Char);.      p->
78b0: 7a 54 65 78 74 20 3d 20 7a 4e 65 77 3b 0a 20 20  zText = zNew;.  
78c0: 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20      p->nAlloc = 
78d0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
78e0: 69 7a 65 28 70 2d 3e 64 62 2c 20 7a 4e 65 77 29  ize(p->db, zNew)
78f0: 3b 0a 20 20 20 20 20 20 70 2d 3e 70 72 69 6e 74  ;.      p->print
7900: 66 46 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  fFlags |= SQLITE
7910: 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
7920: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7930: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 72     sqlite3_str_r
7940: 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20 20 73  eset(p);.      s
7950: 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28  etStrAccumError(
7960: 70 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 29  p, SQLITE_NOMEM)
7970: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ;.      return 0
7980: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
7990: 74 75 72 6e 20 4e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn N;.}../*.**
79a0: 20 41 70 70 65 6e 64 20 4e 20 63 6f 70 69 65 73   Append N copies
79b0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 20 63 20   of character c 
79c0: 74 6f 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  to the given str
79d0: 69 6e 67 20 62 75 66 66 65 72 2e 0a 2a 2f 0a 76  ing buffer..*/.v
79e0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 73 74 72 5f  oid sqlite3_str_
79f0: 61 70 70 65 6e 64 63 68 61 72 28 73 71 6c 69 74  appendchar(sqlit
7a00: 65 33 5f 73 74 72 20 2a 70 2c 20 69 6e 74 20 4e  e3_str *p, int N
7a10: 2c 20 63 68 61 72 20 63 29 7b 0a 20 20 74 65 73  , char c){.  tes
7a20: 74 63 61 73 65 28 20 70 2d 3e 6e 43 68 61 72 20  tcase( p->nChar 
7a30: 2b 20 28 69 36 34 29 4e 20 3e 20 30 78 37 66 66  + (i64)N > 0x7ff
7a40: 66 66 66 66 66 20 29 3b 0a 20 20 69 66 28 20 70  fffff );.  if( p
7a50: 2d 3e 6e 43 68 61 72 2b 28 69 36 34 29 4e 20 3e  ->nChar+(i64)N >
7a60: 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 26 26 20 28  = p->nAlloc && (
7a70: 4e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 41 63  N = sqlite3StrAc
7a80: 63 75 6d 45 6e 6c 61 72 67 65 28 70 2c 20 4e 29  cumEnlarge(p, N)
7a90: 29 3c 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )<=0 ){.    retu
7aa0: 72 6e 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28  rn;.  }.  while(
7ab0: 20 28 4e 2d 2d 29 3e 30 20 29 20 70 2d 3e 7a 54   (N--)>0 ) p->zT
7ac0: 65 78 74 5b 70 2d 3e 6e 43 68 61 72 2b 2b 5d 20  ext[p->nChar++] 
7ad0: 3d 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  = c;.}../*.** Th
7ae0: 65 20 53 74 72 41 63 63 75 6d 20 22 70 22 20 69  e StrAccum "p" i
7af0: 73 20 6e 6f 74 20 6c 61 72 67 65 20 65 6e 6f 75  s not large enou
7b00: 67 68 20 74 6f 20 61 63 63 65 70 74 20 4e 20 6e  gh to accept N n
7b10: 65 77 20 62 79 74 65 73 20 6f 66 20 7a 5b 5d 2e  ew bytes of z[].
7b20: 0a 2a 2a 20 53 6f 20 65 6e 6c 61 72 67 65 20 69  .** So enlarge i
7b30: 66 20 66 69 72 73 74 2c 20 74 68 65 6e 20 64 6f  f first, then do
7b40: 20 74 68 65 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a   the append..**.
7b50: 2a 2a 20 54 68 69 73 20 69 73 20 61 20 68 65 6c  ** This is a hel
7b60: 70 65 72 20 72 6f 75 74 69 6e 65 20 74 6f 20 73  per routine to s
7b70: 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e  qlite3_str_appen
7b80: 64 28 29 20 74 68 61 74 20 64 6f 65 73 20 73 70  d() that does sp
7b90: 65 63 69 61 6c 2d 63 61 73 65 0a 2a 2a 20 77 6f  ecial-case.** wo
7ba0: 72 6b 20 28 65 6e 6c 61 72 67 69 6e 67 20 74 68  rk (enlarging th
7bb0: 65 20 62 75 66 66 65 72 29 20 75 73 69 6e 67 20  e buffer) using 
7bc0: 74 61 69 6c 20 72 65 63 75 72 73 69 6f 6e 2c 20  tail recursion, 
7bd0: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 73  so that the.** s
7be0: 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e  qlite3_str_appen
7bf0: 64 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e 20  d() routine can 
7c00: 75 73 65 20 66 61 73 74 20 63 61 6c 6c 69 6e 67  use fast calling
7c10: 20 73 65 6d 61 6e 74 69 63 73 2e 0a 2a 2f 0a 73   semantics..*/.s
7c20: 74 61 74 69 63 20 76 6f 69 64 20 53 51 4c 49 54  tatic void SQLIT
7c30: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 65 6e 6c 61 72  E_NOINLINE enlar
7c40: 67 65 41 6e 64 41 70 70 65 6e 64 28 53 74 72 41  geAndAppend(StrA
7c50: 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20 63  ccum *p, const c
7c60: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 4e 29 7b 0a  har *z, int N){.
7c70: 20 20 4e 20 3d 20 73 71 6c 69 74 65 33 53 74 72    N = sqlite3Str
7c80: 41 63 63 75 6d 45 6e 6c 61 72 67 65 28 70 2c 20  AccumEnlarge(p, 
7c90: 4e 29 3b 0a 20 20 69 66 28 20 4e 3e 30 20 29 7b  N);.  if( N>0 ){
7ca0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e  .    memcpy(&p->
7cb0: 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72 5d 2c  zText[p->nChar],
7cc0: 20 7a 2c 20 4e 29 3b 0a 20 20 20 20 70 2d 3e 6e   z, N);.    p->n
7cd0: 43 68 61 72 20 2b 3d 20 4e 3b 0a 20 20 7d 0a 7d  Char += N;.  }.}
7ce0: 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 4e  ../*.** Append N
7cf0: 20 62 79 74 65 73 20 6f 66 20 74 65 78 74 20 66   bytes of text f
7d00: 72 6f 6d 20 7a 20 74 6f 20 74 68 65 20 53 74 72  rom z to the Str
7d10: 41 63 63 75 6d 20 6f 62 6a 65 63 74 2e 20 20 49  Accum object.  I
7d20: 6e 63 72 65 61 73 65 20 74 68 65 0a 2a 2a 20 73  ncrease the.** s
7d30: 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
7d40: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  y allocation for
7d50: 20 53 74 72 41 63 63 75 6d 20 69 66 20 6e 65 63   StrAccum if nec
7d60: 65 73 73 61 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20  essary..*/.void 
7d70: 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65  sqlite3_str_appe
7d80: 6e 64 28 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  nd(sqlite3_str *
7d90: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
7da0: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 61 73 73 65  , int N){.  asse
7db0: 72 74 28 20 7a 21 3d 30 20 7c 7c 20 4e 3d 3d 30  rt( z!=0 || N==0
7dc0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
7dd0: 3e 7a 54 65 78 74 21 3d 30 20 7c 7c 20 70 2d 3e  >zText!=0 || p->
7de0: 6e 43 68 61 72 3d 3d 30 20 7c 7c 20 70 2d 3e 61  nChar==0 || p->a
7df0: 63 63 45 72 72 6f 72 20 29 3b 0a 20 20 61 73 73  ccError );.  ass
7e00: 65 72 74 28 20 4e 3e 3d 30 20 29 3b 0a 20 20 61  ert( N>=0 );.  a
7e10: 73 73 65 72 74 28 20 70 2d 3e 61 63 63 45 72 72  ssert( p->accErr
7e20: 6f 72 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 41 6c 6c  or==0 || p->nAll
7e30: 6f 63 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  oc==0 );.  if( p
7e40: 2d 3e 6e 43 68 61 72 2b 4e 20 3e 3d 20 70 2d 3e  ->nChar+N >= p->
7e50: 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 65 6e  nAlloc ){.    en
7e60: 6c 61 72 67 65 41 6e 64 41 70 70 65 6e 64 28 70  largeAndAppend(p
7e70: 2c 7a 2c 4e 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ,z,N);.  }else i
7e80: 66 28 20 4e 20 29 7b 0a 20 20 20 20 61 73 73 65  f( N ){.    asse
7e90: 72 74 28 20 70 2d 3e 7a 54 65 78 74 20 29 3b 0a  rt( p->zText );.
7ea0: 20 20 20 20 70 2d 3e 6e 43 68 61 72 20 2b 3d 20      p->nChar += 
7eb0: 4e 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 70  N;.    memcpy(&p
7ec0: 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72  ->zText[p->nChar
7ed0: 2d 4e 5d 2c 20 7a 2c 20 4e 29 3b 0a 20 20 7d 0a  -N], z, N);.  }.
7ee0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20  }../*.** Append 
7ef0: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78  the complete tex
7f00: 74 20 6f 66 20 7a 65 72 6f 2d 74 65 72 6d 69 6e  t of zero-termin
7f10: 61 74 65 64 20 73 74 72 69 6e 67 20 7a 5b 5d 20  ated string z[] 
7f20: 74 6f 20 74 68 65 20 70 20 73 74 72 69 6e 67 2e  to the p string.
7f30: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
7f40: 5f 73 74 72 5f 61 70 70 65 6e 64 61 6c 6c 28 73  _str_appendall(s
7f50: 71 6c 69 74 65 33 5f 73 74 72 20 2a 70 2c 20 63  qlite3_str *p, c
7f60: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
7f70: 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70   sqlite3_str_app
7f80: 65 6e 64 28 70 2c 20 7a 2c 20 73 71 6c 69 74 65  end(p, z, sqlite
7f90: 33 53 74 72 6c 65 6e 33 30 28 7a 29 29 3b 0a 7d  3Strlen30(z));.}
7fa0: 0a 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 69 73 68 20  .../*.** Finish 
7fb0: 6f 66 66 20 61 20 73 74 72 69 6e 67 20 62 79 20  off a string by 
7fc0: 6d 61 6b 69 6e 67 20 73 75 72 65 20 69 74 20 69  making sure it i
7fd0: 73 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65  s zero-terminate
7fe0: 64 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70  d..** Return a p
7ff0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 72 65  ointer to the re
8000: 73 75 6c 74 69 6e 67 20 73 74 72 69 6e 67 2e 20  sulting string. 
8010: 20 52 65 74 75 72 6e 20 61 20 4e 55 4c 4c 0a 2a   Return a NULL.*
8020: 2a 20 70 6f 69 6e 74 65 72 20 69 66 20 61 6e 79  * pointer if any
8030: 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 77   kind of error w
8040: 61 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  as encountered..
8050: 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45  */.static SQLITE
8060: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 68 61 72 20 2a  _NOINLINE char *
8070: 73 74 72 41 63 63 75 6d 46 69 6e 69 73 68 52 65  strAccumFinishRe
8080: 61 6c 6c 6f 63 28 53 74 72 41 63 63 75 6d 20 2a  alloc(StrAccum *
8090: 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 54 65 78  p){.  char *zTex
80a0: 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  t;.  assert( p->
80b0: 6d 78 41 6c 6c 6f 63 3e 30 20 26 26 20 21 69 73  mxAlloc>0 && !is
80c0: 4d 61 6c 6c 6f 63 65 64 28 70 29 20 29 3b 0a 20  Malloced(p) );. 
80d0: 20 7a 54 65 78 74 20 3d 20 73 71 6c 69 74 65 33   zText = sqlite3
80e0: 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70 2d 3e 64  DbMallocRaw(p->d
80f0: 62 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 20 29 3b  b, p->nChar+1 );
8100: 0a 20 20 69 66 28 20 7a 54 65 78 74 20 29 7b 0a  .  if( zText ){.
8110: 20 20 20 20 6d 65 6d 63 70 79 28 7a 54 65 78 74      memcpy(zText
8120: 2c 20 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e 6e  , p->zText, p->n
8130: 43 68 61 72 2b 31 29 3b 0a 20 20 20 20 70 2d 3e  Char+1);.    p->
8140: 70 72 69 6e 74 66 46 6c 61 67 73 20 7c 3d 20 53  printfFlags |= S
8150: 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
8160: 4c 4f 43 45 44 3b 0a 20 20 7d 65 6c 73 65 7b 0a  LOCED;.  }else{.
8170: 20 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45      setStrAccumE
8180: 72 72 6f 72 28 70 2c 20 53 51 4c 49 54 45 5f 4e  rror(p, SQLITE_N
8190: 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e  OMEM);.  }.  p->
81a0: 7a 54 65 78 74 20 3d 20 7a 54 65 78 74 3b 0a 20  zText = zText;. 
81b0: 20 72 65 74 75 72 6e 20 7a 54 65 78 74 3b 0a 7d   return zText;.}
81c0: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
81d0: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
81e0: 41 63 63 75 6d 20 2a 70 29 7b 0a 20 20 69 66 28  Accum *p){.  if(
81f0: 20 70 2d 3e 7a 54 65 78 74 20 29 7b 0a 20 20 20   p->zText ){.   
8200: 20 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68   p->zText[p->nCh
8210: 61 72 5d 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  ar] = 0;.    if(
8220: 20 70 2d 3e 6d 78 41 6c 6c 6f 63 3e 30 20 26 26   p->mxAlloc>0 &&
8230: 20 21 69 73 4d 61 6c 6c 6f 63 65 64 28 70 29 20   !isMalloced(p) 
8240: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ){.      return 
8250: 73 74 72 41 63 63 75 6d 46 69 6e 69 73 68 52 65  strAccumFinishRe
8260: 61 6c 6c 6f 63 28 70 29 3b 0a 20 20 20 20 7d 0a  alloc(p);.    }.
8270: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e    }.  return p->
8280: 7a 54 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  zText;.}../*.** 
8290: 54 68 69 73 20 73 69 6e 67 6c 65 74 6f 6e 20 69  This singleton i
82a0: 73 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 72  s an sqlite3_str
82b0: 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20   object that is 
82c0: 72 65 74 75 72 6e 65 64 20 69 66 0a 2a 2a 20 73  returned if.** s
82d0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
82e0: 66 61 69 6c 73 20 74 6f 20 70 72 6f 76 69 64 65  fails to provide
82f0: 20 73 70 61 63 65 20 66 6f 72 20 61 20 72 65 61   space for a rea
8300: 6c 20 6f 6e 65 2e 20 20 54 68 69 73 0a 2a 2a 20  l one.  This.** 
8310: 73 71 6c 69 74 65 33 5f 73 74 72 20 6f 62 6a 65  sqlite3_str obje
8320: 63 74 20 61 63 63 65 70 74 73 20 6e 6f 20 6e 65  ct accepts no ne
8330: 77 20 74 65 78 74 20 61 6e 64 20 61 6c 77 61 79  w text and alway
8340: 73 20 72 65 74 75 72 6e 73 0a 2a 2a 20 61 6e 20  s returns.** an 
8350: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 65 72 72  SQLITE_NOMEM err
8360: 6f 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71  or..*/.static sq
8370: 6c 69 74 65 33 5f 73 74 72 20 73 71 6c 69 74 65  lite3_str sqlite
8380: 33 4f 6f 6d 53 74 72 20 3d 20 7b 0a 20 20 20 30  3OomStr = {.   0
8390: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 53 51  , 0, 0, 0, 0, SQ
83a0: 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 0a 7d 3b  LITE_NOMEM, 0.};
83b0: 0a 0a 2f 2a 20 46 69 6e 61 6c 69 7a 65 20 61 20  ../* Finalize a 
83c0: 73 74 72 69 6e 67 20 63 72 65 61 74 65 64 20 75  string created u
83d0: 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 72  sing sqlite3_str
83e0: 5f 6e 65 77 28 29 2e 0a 2a 2f 0a 63 68 61 72 20  _new()..*/.char 
83f0: 2a 73 71 6c 69 74 65 33 5f 73 74 72 5f 66 69 6e  *sqlite3_str_fin
8400: 69 73 68 28 73 71 6c 69 74 65 33 5f 73 74 72 20  ish(sqlite3_str 
8410: 2a 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  *p){.  char *z;.
8420: 20 20 69 66 28 20 70 21 3d 30 20 26 26 20 70 21    if( p!=0 && p!
8430: 3d 26 73 71 6c 69 74 65 33 4f 6f 6d 53 74 72 20  =&sqlite3OomStr 
8440: 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
8450: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
8460: 28 70 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  (p);.    sqlite3
8470: 5f 66 72 65 65 28 70 29 3b 0a 20 20 7d 65 6c 73  _free(p);.  }els
8480: 65 7b 0a 20 20 20 20 7a 20 3d 20 30 3b 0a 20 20  e{.    z = 0;.  
8490: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a  }.  return z;.}.
84a0: 0a 2f 2a 20 52 65 74 75 72 6e 20 61 6e 79 20 65  ./* Return any e
84b0: 72 72 6f 72 20 63 6f 64 65 20 61 73 73 6f 63 69  rror code associ
84c0: 61 74 65 64 20 77 69 74 68 20 70 20 2a 2f 0a 69  ated with p */.i
84d0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 65  nt sqlite3_str_e
84e0: 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33 5f 73  rrcode(sqlite3_s
84f0: 74 72 20 2a 70 29 7b 0a 20 20 72 65 74 75 72 6e  tr *p){.  return
8500: 20 70 20 3f 20 70 2d 3e 61 63 63 45 72 72 6f 72   p ? p->accError
8510: 20 3a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   : SQLITE_NOMEM;
8520: 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68  .}../* Return th
8530: 65 20 63 75 72 72 65 6e 74 20 6c 65 6e 67 74 68  e current length
8540: 20 6f 66 20 70 20 69 6e 20 62 79 74 65 73 20 2a   of p in bytes *
8550: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74  /.int sqlite3_st
8560: 72 5f 6c 65 6e 67 74 68 28 73 71 6c 69 74 65 33  r_length(sqlite3
8570: 5f 73 74 72 20 2a 70 29 7b 0a 20 20 72 65 74 75  _str *p){.  retu
8580: 72 6e 20 70 20 3f 20 70 2d 3e 6e 43 68 61 72 20  rn p ? p->nChar 
8590: 3a 20 30 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72  : 0;.}../* Retur
85a0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  n the current va
85b0: 6c 75 65 20 66 6f 72 20 70 20 2a 2f 0a 63 68 61  lue for p */.cha
85c0: 72 20 2a 73 71 6c 69 74 65 33 5f 73 74 72 5f 76  r *sqlite3_str_v
85d0: 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 72  alue(sqlite3_str
85e0: 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 3d 3d 30   *p){.  if( p==0
85f0: 20 7c 7c 20 70 2d 3e 6e 43 68 61 72 3d 3d 30 20   || p->nChar==0 
8600: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 70 2d  ) return 0;.  p-
8610: 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72 5d  >zText[p->nChar]
8620: 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70   = 0;.  return p
8630: 2d 3e 7a 54 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  ->zText;.}../*.*
8640: 2a 20 52 65 73 65 74 20 61 6e 20 53 74 72 41 63  * Reset an StrAc
8650: 63 75 6d 20 73 74 72 69 6e 67 2e 20 20 52 65 63  cum string.  Rec
8660: 6c 61 69 6d 20 61 6c 6c 20 6d 61 6c 6c 6f 63 65  laim all malloce
8670: 64 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 76 6f 69  d memory..*/.voi
8680: 64 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 72 65  d sqlite3_str_re
8690: 73 65 74 28 53 74 72 41 63 63 75 6d 20 2a 70 29  set(StrAccum *p)
86a0: 7b 0a 20 20 69 66 28 20 69 73 4d 61 6c 6c 6f 63  {.  if( isMalloc
86b0: 65 64 28 70 29 20 29 7b 0a 20 20 20 20 73 71 6c  ed(p) ){.    sql
86c0: 69 74 65 33 44 62 46 72 65 65 28 70 2d 3e 64 62  ite3DbFree(p->db
86d0: 2c 20 70 2d 3e 7a 54 65 78 74 29 3b 0a 20 20 20  , p->zText);.   
86e0: 20 70 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20   p->printfFlags 
86f0: 26 3d 20 7e 53 51 4c 49 54 45 5f 50 52 49 4e 54  &= ~SQLITE_PRINT
8700: 46 5f 4d 41 4c 4c 4f 43 45 44 3b 0a 20 20 7d 0a  F_MALLOCED;.  }.
8710: 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 30 3b    p->nAlloc = 0;
8720: 0a 20 20 70 2d 3e 6e 43 68 61 72 20 3d 20 30 3b  .  p->nChar = 0;
8730: 0a 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 30 3b  .  p->zText = 0;
8740: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61  .}../*.** Initia
8750: 6c 69 7a 65 20 61 20 73 74 72 69 6e 67 20 61 63  lize a string ac
8760: 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
8770: 20 70 3a 20 20 20 20 20 54 68 65 20 61 63 63 75   p:     The accu
8780: 6d 75 6c 61 74 6f 72 20 74 6f 20 62 65 20 69 6e  mulator to be in
8790: 69 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 20 64 62  itialized..** db
87a0: 3a 20 20 20 20 50 6f 69 6e 74 65 72 20 74 6f 20  :    Pointer to 
87b0: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  a database conne
87c0: 63 74 69 6f 6e 2e 20 20 4d 61 79 20 62 65 20 4e  ction.  May be N
87d0: 55 4c 4c 2e 20 20 4c 6f 6f 6b 61 73 69 64 65 0a  ULL.  Lookaside.
87e0: 2a 2a 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79  **        memory
87f0: 20 69 73 20 75 73 65 64 20 69 66 20 6e 6f 74 20   is used if not 
8800: 4e 55 4c 4c 2e 20 64 62 2d 3e 6d 61 6c 6c 6f 63  NULL. db->malloc
8810: 46 61 69 6c 65 64 20 69 73 20 73 65 74 20 61 70  Failed is set ap
8820: 70 72 6f 70 72 69 61 74 65 6c 79 0a 2a 2a 20 20  propriately.**  
8830: 20 20 20 20 20 20 77 68 65 6e 20 6e 6f 74 20 4e        when not N
8840: 55 4c 4c 2e 0a 2a 2a 20 7a 42 61 73 65 3a 20 41  ULL..** zBase: A
8850: 6e 20 69 6e 69 74 69 61 6c 20 62 75 66 66 65 72  n initial buffer
8860: 2e 20 20 4d 61 79 20 62 65 20 4e 55 4c 4c 20 69  .  May be NULL i
8870: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
8880: 20 69 6e 69 74 69 61 6c 20 62 75 66 66 65 72 0a   initial buffer.
8890: 2a 2a 20 20 20 20 20 20 20 20 69 73 20 6d 61 6c  **        is mal
88a0: 6c 6f 63 65 64 2e 0a 2a 2a 20 6e 3a 20 20 20 20  loced..** n:    
88b0: 20 53 69 7a 65 20 6f 66 20 7a 42 61 73 65 20 69   Size of zBase i
88c0: 6e 20 62 79 74 65 73 2e 20 20 49 66 20 74 6f 74  n bytes.  If tot
88d0: 61 6c 20 73 70 61 63 65 20 72 65 71 75 69 72 65  al space require
88e0: 6d 65 6e 74 73 20 6e 65 76 65 72 20 65 78 63 65  ments never exce
88f0: 65 64 0a 2a 2a 20 20 20 20 20 20 20 20 6e 20 74  ed.**        n t
8900: 68 65 6e 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c  hen no memory al
8910: 6c 6f 63 61 74 69 6f 6e 73 20 65 76 65 72 20 6f  locations ever o
8920: 63 63 75 72 2e 0a 2a 2a 20 6d 78 3a 20 20 20 20  ccur..** mx:    
8930: 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  Maximum number o
8940: 66 20 62 79 74 65 73 20 74 6f 20 61 63 63 75 6d  f bytes to accum
8950: 75 6c 61 74 65 2e 20 20 49 66 20 6d 78 3d 3d 30  ulate.  If mx==0
8960: 20 74 68 65 6e 20 6e 6f 20 6d 65 6d 6f 72 79 0a   then no memory.
8970: 2a 2a 20 20 20 20 20 20 20 20 61 6c 6c 6f 63 61  **        alloca
8980: 74 69 6f 6e 73 20 77 69 6c 6c 20 65 76 65 72 20  tions will ever 
8990: 6f 63 63 75 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73  occur..*/.void s
89a0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
89b0: 69 74 28 53 74 72 41 63 63 75 6d 20 2a 70 2c 20  it(StrAccum *p, 
89c0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61  sqlite3 *db, cha
89d0: 72 20 2a 7a 42 61 73 65 2c 20 69 6e 74 20 6e 2c  r *zBase, int n,
89e0: 20 69 6e 74 20 6d 78 29 7b 0a 20 20 70 2d 3e 7a   int mx){.  p->z
89f0: 54 65 78 74 20 3d 20 7a 42 61 73 65 3b 0a 20 20  Text = zBase;.  
8a00: 70 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 70 2d  p->db = db;.  p-
8a10: 3e 6e 41 6c 6c 6f 63 20 3d 20 6e 3b 0a 20 20 70  >nAlloc = n;.  p
8a20: 2d 3e 6d 78 41 6c 6c 6f 63 20 3d 20 6d 78 3b 0a  ->mxAlloc = mx;.
8a30: 20 20 70 2d 3e 6e 43 68 61 72 20 3d 20 30 3b 0a    p->nChar = 0;.
8a40: 20 20 70 2d 3e 61 63 63 45 72 72 6f 72 20 3d 20    p->accError = 
8a50: 30 3b 0a 20 20 70 2d 3e 70 72 69 6e 74 66 46 6c  0;.  p->printfFl
8a60: 61 67 73 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 20 41  ags = 0;.}../* A
8a70: 6c 6c 6f 63 61 74 65 20 61 6e 64 20 69 6e 69 74  llocate and init
8a80: 69 61 6c 69 7a 65 20 61 20 6e 65 77 20 64 79 6e  ialize a new dyn
8a90: 61 6d 69 63 20 73 74 72 69 6e 67 20 6f 62 6a 65  amic string obje
8aa0: 63 74 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 73 74  ct */.sqlite3_st
8ab0: 72 20 2a 73 71 6c 69 74 65 33 5f 73 74 72 5f 6e  r *sqlite3_str_n
8ac0: 65 77 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  ew(sqlite3 *db){
8ad0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  .  sqlite3_str *
8ae0: 70 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  p = sqlite3_mall
8af0: 6f 63 36 34 28 73 69 7a 65 6f 66 28 2a 70 29 29  oc64(sizeof(*p))
8b00: 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20  ;.  if( p ){.   
8b10: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
8b20: 49 6e 69 74 28 70 2c 20 30 2c 20 30 2c 20 30 2c  Init(p, 0, 0, 0,
8b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 62 20  .            db 
8b40: 3f 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  ? db->aLimit[SQL
8b50: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
8b60: 5d 20 3a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  ] : SQLITE_MAX_L
8b70: 45 4e 47 54 48 29 3b 0a 20 20 7d 65 6c 73 65 7b  ENGTH);.  }else{
8b80: 0a 20 20 20 20 70 20 3d 20 26 73 71 6c 69 74 65  .    p = &sqlite
8b90: 33 4f 6f 6d 53 74 72 3b 0a 20 20 7d 0a 20 20 72  3OomStr;.  }.  r
8ba0: 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn p;.}../*.*
8bb0: 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  * Print into mem
8bc0: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
8bd0: 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  m sqliteMalloc()
8be0: 2e 20 20 55 73 65 20 74 68 65 20 69 6e 74 65 72  .  Use the inter
8bf0: 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73  nal.** %-convers
8c00: 69 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a  ion extensions..
8c10: 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  */.char *sqlite3
8c20: 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
8c30: 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
8c40: 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69   *zFormat, va_li
8c50: 73 74 20 61 70 29 7b 0a 20 20 63 68 61 72 20 2a  st ap){.  char *
8c60: 7a 3b 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b  z;.  char zBase[
8c70: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46  SQLITE_PRINT_BUF
8c80: 5f 53 49 5a 45 5d 3b 0a 20 20 53 74 72 41 63 63  _SIZE];.  StrAcc
8c90: 75 6d 20 61 63 63 3b 0a 20 20 61 73 73 65 72 74  um acc;.  assert
8ca0: 28 20 64 62 21 3d 30 20 29 3b 0a 20 20 73 71 6c  ( db!=0 );.  sql
8cb0: 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
8cc0: 28 26 61 63 63 2c 20 64 62 2c 20 7a 42 61 73 65  (&acc, db, zBase
8cd0: 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c  , sizeof(zBase),
8ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8cf0: 20 20 20 20 20 20 20 64 62 2d 3e 61 4c 69 6d 69         db->aLimi
8d00: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8d10: 45 4e 47 54 48 5d 29 3b 0a 20 20 61 63 63 2e 70  ENGTH]);.  acc.p
8d20: 72 69 6e 74 66 46 6c 61 67 73 20 3d 20 53 51 4c  rintfFlags = SQL
8d30: 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
8d40: 4e 41 4c 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  NAL;.  sqlite3_s
8d50: 74 72 5f 76 61 70 70 65 6e 64 66 28 26 61 63 63  tr_vappendf(&acc
8d60: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
8d70: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72    z = sqlite3Str
8d80: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63  AccumFinish(&acc
8d90: 29 3b 0a 20 20 69 66 28 20 61 63 63 2e 61 63 63  );.  if( acc.acc
8da0: 45 72 72 6f 72 3d 3d 53 51 4c 49 54 45 5f 4e 4f  Error==SQLITE_NO
8db0: 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  MEM ){.    sqlit
8dc0: 65 33 4f 6f 6d 46 61 75 6c 74 28 64 62 29 3b 0a  e3OomFault(db);.
8dd0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a    }.  return z;.
8de0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69  }../*.** Print i
8df0: 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69  nto memory obtai
8e00: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  ned from sqliteM
8e10: 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65 20 74 68  alloc().  Use th
8e20: 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d  e internal.** %-
8e30: 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e  conversion exten
8e40: 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a  sions..*/.char *
8e50: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
8e60: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
8e70: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
8e80: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
8e90: 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a   ap;.  char *z;.
8ea0: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
8eb0: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73  Format);.  z = s
8ec0: 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 64  qlite3VMPrintf(d
8ed0: 62 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  b, zFormat, ap);
8ee0: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20  .  va_end(ap);. 
8ef0: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
8f00: 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d  .** Print into m
8f10: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
8f20: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
8f30: 6f 63 28 29 2e 20 20 4f 6d 69 74 20 74 68 65 20  oc().  Omit the 
8f40: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f  internal.** %-co
8f50: 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69  nversion extensi
8f60: 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  ons..*/.char *sq
8f70: 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 63  lite3_vmprintf(c
8f80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
8f90: 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29 7b  at, va_list ap){
8fa0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68  .  char *z;.  ch
8fb0: 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f  ar zBase[SQLITE_
8fc0: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b  PRINT_BUF_SIZE];
8fd0: 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b  .  StrAccum acc;
8fe0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
8ff0: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
9000: 20 20 0a 20 20 69 66 28 20 7a 46 6f 72 6d 61 74    .  if( zFormat
9010: 3d 3d 30 20 29 7b 0a 20 20 20 20 28 76 6f 69 64  ==0 ){.    (void
9020: 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42  )SQLITE_MISUSE_B
9030: 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  KPT;.    return 
9040: 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  0;.  }.#endif.#i
9050: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9060: 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20 69 66 28  T_AUTOINIT.  if(
9070: 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
9080: 69 7a 65 28 29 20 29 20 72 65 74 75 72 6e 20 30  ize() ) return 0
9090: 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
90a0: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
90b0: 61 63 63 2c 20 30 2c 20 7a 42 61 73 65 2c 20 73  acc, 0, zBase, s
90c0: 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20 53 51  izeof(zBase), SQ
90d0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 29  LITE_MAX_LENGTH)
90e0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f  ;.  sqlite3_str_
90f0: 76 61 70 70 65 6e 64 66 28 26 61 63 63 2c 20 7a  vappendf(&acc, z
9100: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7a  Format, ap);.  z
9110: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 41 63 63   = sqlite3StrAcc
9120: 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a  umFinish(&acc);.
9130: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
9140: 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20  *.** Print into 
9150: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
9160: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
9170: 6c 6f 63 28 29 28 29 2e 20 20 4f 6d 69 74 20 74  loc()().  Omit t
9180: 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25  he internal.** %
9190: 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65  -conversion exte
91a0: 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20  nsions..*/.char 
91b0: 2a 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  *sqlite3_mprintf
91c0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f  (const char *zFo
91d0: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
91e0: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72  _list ap;.  char
91f0: 20 2a 7a 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   *z;.#ifndef SQL
9200: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49  ITE_OMIT_AUTOINI
9210: 54 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  T.  if( sqlite3_
9220: 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 29 20 72  initialize() ) r
9230: 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a  eturn 0;.#endif.
9240: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
9250: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73  Format);.  z = s
9260: 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28  qlite3_vmprintf(
9270: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
9280: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 72 65  va_end(ap);.  re
9290: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn z;.}../*.**
92a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
92b0: 66 28 29 20 77 6f 72 6b 73 20 6c 69 6b 65 20 73  f() works like s
92c0: 6e 70 72 69 6e 74 66 28 29 20 65 78 63 65 70 74  nprintf() except
92d0: 20 74 68 61 74 20 69 74 20 69 67 6e 6f 72 65 73   that it ignores
92e0: 20 74 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 20   the.** current 
92f0: 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 73 2e  locale settings.
9300: 20 20 54 68 69 73 20 69 73 20 69 6d 70 6f 72 74    This is import
9310: 61 6e 74 20 66 6f 72 20 53 51 4c 69 74 65 20 62  ant for SQLite b
9320: 65 63 61 75 73 65 20 77 65 0a 2a 2a 20 61 72 65  ecause we.** are
9330: 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 75 73 65   not able to use
9340: 20 61 20 22 2c 22 20 61 73 20 74 68 65 20 64 65   a "," as the de
9350: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69 6e 20 70  cimal point in p
9360: 6c 61 63 65 20 6f 66 20 22 2e 22 20 61 73 0a 2a  lace of "." as.*
9370: 2a 20 73 70 65 63 69 66 69 65 64 20 62 79 20 73  * specified by s
9380: 6f 6d 65 20 6c 6f 63 61 6c 65 73 2e 0a 2a 2a 0a  ome locales..**.
9390: 2a 2a 20 4f 6f 70 73 3a 20 20 54 68 65 20 66 69  ** Oops:  The fi
93a0: 72 73 74 20 74 77 6f 20 61 72 67 75 6d 65 6e 74  rst two argument
93b0: 73 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 6e 70  s of sqlite3_snp
93c0: 72 69 6e 74 66 28 29 20 61 72 65 20 62 61 63 6b  rintf() are back
93d0: 77 61 72 64 73 0a 2a 2a 20 66 72 6f 6d 20 74 68  wards.** from th
93e0: 65 20 73 6e 70 72 69 6e 74 66 28 29 20 73 74 61  e snprintf() sta
93f0: 6e 64 61 72 64 2e 20 20 55 6e 66 6f 72 74 75 6e  ndard.  Unfortun
9400: 61 74 65 6c 79 2c 20 69 74 20 69 73 20 74 6f 6f  ately, it is too
9410: 20 6c 61 74 65 20 74 6f 20 63 68 61 6e 67 65 0a   late to change.
9420: 2a 2a 20 74 68 69 73 20 77 69 74 68 6f 75 74 20  ** this without 
9430: 62 72 65 61 6b 69 6e 67 20 63 6f 6d 70 61 74 69  breaking compati
9440: 62 69 6c 69 74 79 2c 20 73 6f 20 77 65 20 6a 75  bility, so we ju
9450: 73 74 20 68 61 76 65 20 74 6f 20 6c 69 76 65 20  st have to live 
9460: 77 69 74 68 20 74 68 65 0a 2a 2a 20 6d 69 73 74  with the.** mist
9470: 61 6b 65 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  ake..**.** sqlit
9480: 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 29 20 69  e3_vsnprintf() i
9490: 73 20 74 68 65 20 76 61 72 61 72 67 73 20 76 65  s the varargs ve
94a0: 72 73 69 6f 6e 2e 0a 2a 2f 0a 63 68 61 72 20 2a  rsion..*/.char *
94b0: 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74  sqlite3_vsnprint
94c0: 66 28 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a  f(int n, char *z
94d0: 42 75 66 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Buf, const char 
94e0: 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73  *zFormat, va_lis
94f0: 74 20 61 70 29 7b 0a 20 20 53 74 72 41 63 63 75  t ap){.  StrAccu
9500: 6d 20 61 63 63 3b 0a 20 20 69 66 28 20 6e 3c 3d  m acc;.  if( n<=
9510: 30 20 29 20 72 65 74 75 72 6e 20 7a 42 75 66 3b  0 ) return zBuf;
9520: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
9530: 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
9540: 20 20 69 66 28 20 7a 42 75 66 3d 3d 30 20 7c 7c    if( zBuf==0 ||
9550: 20 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 20 7b 0a   zFormat==0 ) {.
9560: 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45      (void)SQLITE
9570: 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20  _MISUSE_BKPT;.  
9580: 20 20 69 66 28 20 7a 42 75 66 20 29 20 7a 42 75    if( zBuf ) zBu
9590: 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 72 65  f[0] = 0;.    re
95a0: 74 75 72 6e 20 7a 42 75 66 3b 0a 20 20 7d 0a 23  turn zBuf;.  }.#
95b0: 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 53  endif.  sqlite3S
95c0: 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63  trAccumInit(&acc
95d0: 2c 20 30 2c 20 7a 42 75 66 2c 20 6e 2c 20 30 29  , 0, zBuf, n, 0)
95e0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f  ;.  sqlite3_str_
95f0: 76 61 70 70 65 6e 64 66 28 26 61 63 63 2c 20 7a  vappendf(&acc, z
9600: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7a  Format, ap);.  z
9610: 42 75 66 5b 61 63 63 2e 6e 43 68 61 72 5d 20 3d  Buf[acc.nChar] =
9620: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 7a 42 75   0;.  return zBu
9630: 66 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74  f;.}.char *sqlit
9640: 65 33 5f 73 6e 70 72 69 6e 74 66 28 69 6e 74 20  e3_snprintf(int 
9650: 6e 2c 20 63 68 61 72 20 2a 7a 42 75 66 2c 20 63  n, char *zBuf, c
9660: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
9670: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 72  at, ...){.  char
9680: 20 2a 7a 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61   *z;.  va_list a
9690: 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  p;.  va_start(ap
96a0: 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d  ,zFormat);.  z =
96b0: 20 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e   sqlite3_vsnprin
96c0: 74 66 28 6e 2c 20 7a 42 75 66 2c 20 7a 46 6f 72  tf(n, zBuf, zFor
96d0: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65  mat, ap);.  va_e
96e0: 6e 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e  nd(ap);.  return
96f0: 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69   z;.}../*.** Thi
9700: 73 20 69 73 20 74 68 65 20 72 6f 75 74 69 6e 65  s is the routine
9710: 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 66   that actually f
9720: 6f 72 6d 61 74 73 20 74 68 65 20 73 71 6c 69 74  ormats the sqlit
9730: 65 33 5f 6c 6f 67 28 29 20 6d 65 73 73 61 67 65  e3_log() message
9740: 2e 0a 2a 2a 20 57 65 20 68 6f 75 73 65 20 69 74  ..** We house it
9750: 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 20 72   in a separate r
9760: 6f 75 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c 69  outine from sqli
9770: 74 65 33 5f 6c 6f 67 28 29 20 74 6f 20 61 76 6f  te3_log() to avo
9780: 69 64 20 75 73 69 6e 67 0a 2a 2a 20 73 74 61 63  id using.** stac
9790: 6b 20 73 70 61 63 65 20 6f 6e 20 73 6d 61 6c 6c  k space on small
97a0: 2d 73 74 61 63 6b 20 73 79 73 74 65 6d 73 20 77  -stack systems w
97b0: 68 65 6e 20 6c 6f 67 67 69 6e 67 20 69 73 20 64  hen logging is d
97c0: 69 73 61 62 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 73  isabled..**.** s
97d0: 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 6d 75 73  qlite3_log() mus
97e0: 74 20 72 65 6e 64 65 72 20 69 6e 74 6f 20 61 20  t render into a 
97f0: 73 74 61 74 69 63 20 62 75 66 66 65 72 2e 20 20  static buffer.  
9800: 49 74 20 63 61 6e 6e 6f 74 20 64 79 6e 61 6d 69  It cannot dynami
9810: 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
9820: 65 20 6d 65 6d 6f 72 79 20 62 65 63 61 75 73 65  e memory because
9830: 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 61 6c   it might be cal
9840: 6c 65 64 20 77 68 69 6c 65 20 74 68 65 20 6d 65  led while the me
9850: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
9860: 2a 20 6d 75 74 65 78 20 69 73 20 68 65 6c 64 2e  * mutex is held.
9870: 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  .**.** sqlite3_s
9880: 74 72 5f 76 61 70 70 65 6e 64 66 28 29 20 6d 69  tr_vappendf() mi
9890: 67 68 74 20 61 73 6b 20 66 6f 72 20 2a 74 65 6d  ght ask for *tem
98a0: 70 6f 72 61 72 79 2a 20 6d 65 6d 6f 72 79 20 61  porary* memory a
98b0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 66 6f 72 0a 2a  llocations for.*
98c0: 2a 20 63 65 72 74 61 69 6e 20 66 6f 72 6d 61 74  * certain format
98d0: 20 63 68 61 72 61 63 74 65 72 73 20 28 25 71 29   characters (%q)
98e0: 20 6f 72 20 66 6f 72 20 76 65 72 79 20 6c 61 72   or for very lar
98f0: 67 65 20 70 72 65 63 69 73 69 6f 6e 73 20 6f 72  ge precisions or
9900: 20 77 69 64 74 68 73 2e 0a 2a 2a 20 43 61 72 65   widths..** Care
9910: 20 6d 75 73 74 20 62 65 20 74 61 6b 65 6e 20 74   must be taken t
9920: 68 61 74 20 61 6e 79 20 73 71 6c 69 74 65 33 5f  hat any sqlite3_
9930: 6c 6f 67 28 29 20 63 61 6c 6c 73 20 74 68 61 74  log() calls that
9940: 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
9950: 0a 2a 2a 20 6d 65 6d 6f 72 79 20 6d 75 74 65 78  .** memory mutex
9960: 20 69 73 20 68 65 6c 64 20 64 6f 20 6e 6f 74 20   is held do not 
9970: 75 73 65 20 74 68 65 73 65 20 6d 65 63 68 61 6e  use these mechan
9980: 69 73 6d 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  isms..*/.static 
9990: 76 6f 69 64 20 72 65 6e 64 65 72 4c 6f 67 4d 73  void renderLogMs
99a0: 67 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20  g(int iErrCode, 
99b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
99c0: 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29  mat, va_list ap)
99d0: 7b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63  {.  StrAccum acc
99e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
99f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
9a00: 72 69 6e 67 20 61 63 63 75 6d 75 6c 61 74 6f 72  ring accumulator
9a10: 20 2a 2f 0a 20 20 63 68 61 72 20 7a 4d 73 67 5b   */.  char zMsg[
9a20: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46  SQLITE_PRINT_BUF
9a30: 5f 53 49 5a 45 2a 33 5d 3b 20 20 20 20 2f 2a 20  _SIZE*3];    /* 
9a40: 43 6f 6d 70 6c 65 74 65 20 6c 6f 67 20 6d 65 73  Complete log mes
9a50: 73 61 67 65 20 2a 2f 0a 0a 20 20 73 71 6c 69 74  sage */..  sqlit
9a60: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
9a70: 61 63 63 2c 20 30 2c 20 7a 4d 73 67 2c 20 73 69  acc, 0, zMsg, si
9a80: 7a 65 6f 66 28 7a 4d 73 67 29 2c 20 30 29 3b 0a  zeof(zMsg), 0);.
9a90: 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 76 61    sqlite3_str_va
9aa0: 70 70 65 6e 64 66 28 26 61 63 63 2c 20 7a 46 6f  ppendf(&acc, zFo
9ab0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 73 71 6c  rmat, ap);.  sql
9ac0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
9ad0: 2e 78 4c 6f 67 28 73 71 6c 69 74 65 33 47 6c 6f  .xLog(sqlite3Glo
9ae0: 62 61 6c 43 6f 6e 66 69 67 2e 70 4c 6f 67 41 72  balConfig.pLogAr
9af0: 67 2c 20 69 45 72 72 43 6f 64 65 2c 0a 20 20 20  g, iErrCode,.   
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53          sqlite3S
9b20: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61  trAccumFinish(&a
9b30: 63 63 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46  cc));.}../*.** F
9b40: 6f 72 6d 61 74 20 61 6e 64 20 77 72 69 74 65 20  ormat and write 
9b50: 61 20 6d 65 73 73 61 67 65 20 74 6f 20 74 68 65  a message to the
9b60: 20 6c 6f 67 20 69 66 20 6c 6f 67 67 69 6e 67 20   log if logging 
9b70: 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 76  is enabled..*/.v
9b80: 6f 69 64 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  oid sqlite3_log(
9b90: 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 63 6f  int iErrCode, co
9ba0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
9bb0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
9bc0: 73 74 20 61 70 3b 20 20 20 20 20 20 20 20 20 20  st ap;          
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9be0: 20 20 20 2f 2a 20 56 61 72 61 72 67 20 6c 69 73     /* Vararg lis
9bf0: 74 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74  t */.  if( sqlit
9c00: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
9c10: 4c 6f 67 20 29 7b 0a 20 20 20 20 76 61 5f 73 74  Log ){.    va_st
9c20: 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29  art(ap, zFormat)
9c30: 3b 0a 20 20 20 20 72 65 6e 64 65 72 4c 6f 67 4d  ;.    renderLogM
9c40: 73 67 28 69 45 72 72 43 6f 64 65 2c 20 7a 46 6f  sg(iErrCode, zFo
9c50: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 20 20 76  rmat, ap);.    v
9c60: 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 7d 0a 7d  a_end(ap);.  }.}
9c70: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
9c80: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
9c90: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
9ca0: 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 2f 2a 0a  VE_OS_TRACE)./*.
9cb0: 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20 6f 66 20  ** A version of 
9cc0: 70 72 69 6e 74 66 28 29 20 74 68 61 74 20 75 6e  printf() that un
9cd0: 64 65 72 73 74 61 6e 64 73 20 25 6c 6c 64 2e 20  derstands %lld. 
9ce0: 20 55 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   Used for debugg
9cf0: 69 6e 67 2e 0a 2a 2a 20 54 68 65 20 70 72 69 6e  ing..** The prin
9d00: 74 66 28 29 20 62 75 69 6c 74 20 69 6e 74 6f 20  tf() built into 
9d10: 73 6f 6d 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  some versions of
9d20: 20 77 69 6e 64 6f 77 73 20 64 6f 65 73 20 6e 6f   windows does no
9d30: 74 20 75 6e 64 65 72 73 74 61 6e 64 20 25 6c 6c  t understand %ll
9d40: 64 0a 2a 2a 20 61 6e 64 20 73 65 67 66 61 75 6c  d.** and segfaul
9d50: 74 73 20 69 66 20 79 6f 75 20 67 69 76 65 20 69  ts if you give i
9d60: 74 20 61 20 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  t a long long in
9d70: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  t..*/.void sqlit
9d80: 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
9d90: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
9da0: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
9db0: 73 74 20 61 70 3b 0a 20 20 53 74 72 41 63 63 75  st ap;.  StrAccu
9dc0: 6d 20 61 63 63 3b 0a 20 20 63 68 61 72 20 7a 42  m acc;.  char zB
9dd0: 75 66 5b 35 30 30 5d 3b 0a 20 20 73 71 6c 69 74  uf[500];.  sqlit
9de0: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
9df0: 61 63 63 2c 20 30 2c 20 7a 42 75 66 2c 20 73 69  acc, 0, zBuf, si
9e00: 7a 65 6f 66 28 7a 42 75 66 29 2c 20 30 29 3b 0a  zeof(zBuf), 0);.
9e10: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 7a 46    va_start(ap,zF
9e20: 6f 72 6d 61 74 29 3b 0a 20 20 73 71 6c 69 74 65  ormat);.  sqlite
9e30: 33 5f 73 74 72 5f 76 61 70 70 65 6e 64 66 28 26  3_str_vappendf(&
9e40: 61 63 63 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  acc, zFormat, ap
9e50: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
9e60: 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  .  sqlite3StrAcc
9e70: 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a  umFinish(&acc);.
9e80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 53  #ifdef SQLITE_OS
9e90: 5f 54 52 41 43 45 5f 50 52 4f 43 0a 20 20 7b 0a  _TRACE_PROC.  {.
9ea0: 20 20 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20      extern void 
9eb0: 53 51 4c 49 54 45 5f 4f 53 5f 54 52 41 43 45 5f  SQLITE_OS_TRACE_
9ec0: 50 52 4f 43 28 63 6f 6e 73 74 20 63 68 61 72 20  PROC(const char 
9ed0: 2a 7a 42 75 66 2c 20 69 6e 74 20 6e 42 75 66 29  *zBuf, int nBuf)
9ee0: 3b 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 53 5f  ;.    SQLITE_OS_
9ef0: 54 52 41 43 45 5f 50 52 4f 43 28 7a 42 75 66 2c  TRACE_PROC(zBuf,
9f00: 20 73 69 7a 65 6f 66 28 7a 42 75 66 29 29 3b 0a   sizeof(zBuf));.
9f10: 20 20 7d 0a 23 65 6c 73 65 0a 20 20 66 70 72 69    }.#else.  fpri
9f20: 6e 74 66 28 73 74 64 6f 75 74 2c 22 25 73 22 2c  ntf(stdout,"%s",
9f30: 20 7a 42 75 66 29 3b 0a 20 20 66 66 6c 75 73 68   zBuf);.  fflush
9f40: 28 73 74 64 6f 75 74 29 3b 0a 23 65 6e 64 69 66  (stdout);.#endif
9f50: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
9f60: 2a 20 76 61 72 69 61 62 6c 65 2d 61 72 67 75 6d  * variable-argum
9f70: 65 6e 74 20 77 72 61 70 70 65 72 20 61 72 6f 75  ent wrapper arou
9f80: 6e 64 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 76  nd sqlite3_str_v
9f90: 61 70 70 65 6e 64 66 28 29 2e 20 54 68 65 20 62  appendf(). The b
9fa0: 46 6c 61 67 73 20 61 72 67 75 6d 65 6e 74 0a 2a  Flags argument.*
9fb0: 2a 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20 74 68  * can contain th
9fc0: 65 20 62 69 74 20 53 51 4c 49 54 45 5f 50 52 49  e bit SQLITE_PRI
9fd0: 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 65 6e 61  NTF_INTERNAL ena
9fe0: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 66 6f 72  ble internal for
9ff0: 6d 61 74 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  mats..*/.void sq
a000: 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64  lite3_str_append
a010: 66 28 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 63  f(StrAccum *p, c
a020: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
a030: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  at, ...){.  va_l
a040: 69 73 74 20 61 70 3b 0a 20 20 76 61 5f 73 74 61  ist ap;.  va_sta
a050: 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a  rt(ap,zFormat);.
a060: 20 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 76 61    sqlite3_str_va
a070: 70 70 65 6e 64 66 28 70 2c 20 7a 46 6f 72 6d 61  ppendf(p, zForma
a080: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
a090: 28 61 70 29 3b 0a 7d 0a                          (ap);.}.