/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 8a76e8e9b44a282bd78f5a4113e4dec233c3dfff:


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 49 6e 74 65 67 65 72 20 74 79   0 /* Integer ty
0230: 70 65 73 2e 20 20 25 64 2c 20 25 78 2c 20 25 6f  pes.  %d, %x, %o
0240: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 2a  , and so forth *
0250: 2f 0a 23 64 65 66 69 6e 65 20 65 74 46 4c 4f 41  /.#define etFLOA
0260: 54 20 20 20 20 20 20 20 31 20 2f 2a 20 46 6c 6f  T       1 /* Flo
0270: 61 74 69 6e 67 20 70 6f 69 6e 74 2e 20 20 25 66  ating point.  %f
0280: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 58   */.#define etEX
0290: 50 20 20 20 20 20 20 20 20 20 32 20 2f 2a 20 45  P         2 /* E
02a0: 78 70 6f 6e 65 6e 74 69 6f 6e 61 6c 20 6e 6f 74  xponentional not
02b0: 61 74 69 6f 6e 2e 20 25 65 20 61 6e 64 20 25 45  ation. %e and %E
02c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 47 45   */.#define etGE
02d0: 4e 45 52 49 43 20 20 20 20 20 33 20 2f 2a 20 46  NERIC     3 /* F
02e0: 6c 6f 61 74 69 6e 67 20 6f 72 20 65 78 70 6f 6e  loating or expon
02f0: 65 6e 74 69 61 6c 2c 20 64 65 70 65 6e 64 69 6e  ential, dependin
0300: 67 20 6f 6e 20 65 78 70 6f 6e 65 6e 74 2e 20 25  g on exponent. %
0310: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53  g */.#define etS
0320: 49 5a 45 20 20 20 20 20 20 20 20 34 20 2f 2a 20  IZE        4 /* 
0330: 52 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  Return number of
0340: 20 63 68 61 72 61 63 74 65 72 73 20 70 72 6f 63   characters proc
0350: 65 73 73 65 64 20 73 6f 20 66 61 72 2e 20 25 6e  essed so far. %n
0360: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 54   */.#define etST
0370: 52 49 4e 47 20 20 20 20 20 20 35 20 2f 2a 20 53  RING      5 /* S
0380: 74 72 69 6e 67 73 2e 20 25 73 20 2a 2f 0a 23 64  trings. %s */.#d
0390: 65 66 69 6e 65 20 65 74 44 59 4e 53 54 52 49 4e  efine etDYNSTRIN
03a0: 47 20 20 20 36 20 2f 2a 20 44 79 6e 61 6d 69 63  G   6 /* Dynamic
03b0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
03c0: 74 72 69 6e 67 73 2e 20 25 7a 20 2a 2f 0a 23 64  trings. %z */.#d
03d0: 65 66 69 6e 65 20 65 74 50 45 52 43 45 4e 54 20  efine etPERCENT 
03e0: 20 20 20 20 37 20 2f 2a 20 50 65 72 63 65 6e 74      7 /* Percent
03f0: 20 73 79 6d 62 6f 6c 2e 20 25 25 20 2a 2f 0a 23   symbol. %% */.#
0400: 64 65 66 69 6e 65 20 65 74 43 48 41 52 58 20 20  define etCHARX  
0410: 20 20 20 20 20 38 20 2f 2a 20 43 68 61 72 61 63       8 /* Charac
0420: 74 65 72 73 2e 20 25 63 20 2a 2f 0a 2f 2a 20 54  ters. %c */./* T
0430: 68 65 20 72 65 73 74 20 61 72 65 20 65 78 74 65  he rest are exte
0440: 6e 73 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d  nsions, not norm
0450: 61 6c 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72  ally found in pr
0460: 69 6e 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  intf() */.#defin
0470: 65 20 65 74 53 51 4c 45 53 43 41 50 45 20 20 20  e etSQLESCAPE   
0480: 39 20 2f 2a 20 53 74 72 69 6e 67 73 20 77 69 74  9 /* Strings wit
0490: 68 20 27 5c 27 27 20 64 6f 75 62 6c 65 64 2e 20  h '\'' doubled. 
04a0: 20 25 71 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %q */.#define e
04b0: 74 53 51 4c 45 53 43 41 50 45 32 20 31 30 20 2f  tSQLESCAPE2 10 /
04c0: 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27  * Strings with '
04d0: 5c 27 27 20 64 6f 75 62 6c 65 64 20 61 6e 64 20  \'' doubled and 
04e0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 27 27 2c 0a  enclosed in '',.
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 70            NULL p
0510: 6f 69 6e 74 65 72 73 20 72 65 70 6c 61 63 65 64  ointers replaced
0520: 20 62 79 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 25   by SQL NULL.  %
0530: 51 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 54  Q */.#define etT
0540: 4f 4b 45 4e 20 20 20 20 20 20 31 31 20 2f 2a 20  OKEN      11 /* 
0550: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 54  a pointer to a T
0560: 6f 6b 65 6e 20 73 74 72 75 63 74 75 72 65 20 2a  oken structure *
0570: 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 52 43 4c  /.#define etSRCL
0580: 49 53 54 20 20 20 20 31 32 20 2f 2a 20 61 20 70  IST    12 /* a p
0590: 6f 69 6e 74 65 72 20 74 6f 20 61 20 53 72 63 4c  ointer to a SrcL
05a0: 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ist */.#define e
05b0: 74 50 4f 49 4e 54 45 52 20 20 20 20 31 33 20 2f  tPOINTER    13 /
05c0: 2a 20 54 68 65 20 25 70 20 63 6f 6e 76 65 72 73  * The %p convers
05d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ion */.#define e
05e0: 74 53 51 4c 45 53 43 41 50 45 33 20 31 34 20 2f  tSQLESCAPE3 14 /
05f0: 2a 20 25 77 20 2d 3e 20 53 74 72 69 6e 67 73 20  * %w -> Strings 
0600: 77 69 74 68 20 27 5c 22 27 20 64 6f 75 62 6c 65  with '\"' double
0610: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 4f  d */.#define etO
0620: 52 44 49 4e 41 4c 20 20 20 20 31 35 20 2f 2a 20  RDINAL    15 /* 
0630: 25 72 20 2d 3e 20 31 73 74 2c 20 32 6e 64 2c 20  %r -> 1st, 2nd, 
0640: 33 72 64 2c 20 34 74 68 2c 20 65 74 63 2e 20 20  3rd, 4th, etc.  
0650: 45 6e 67 6c 69 73 68 20 6f 6e 6c 79 20 2a 2f 0a  English only */.
0660: 0a 23 64 65 66 69 6e 65 20 65 74 49 4e 56 41 4c  .#define etINVAL
0670: 49 44 20 20 20 20 31 36 20 2f 2a 20 41 6e 79 20  ID    16 /* Any 
0680: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f 6e  unrecognized con
0690: 76 65 72 73 69 6f 6e 20 74 79 70 65 20 2a 2f 0a  version type */.
06a0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 79  ../*.** An "etBy
06b0: 74 65 22 20 69 73 20 61 6e 20 38 2d 62 69 74 20  te" is an 8-bit 
06c0: 75 6e 73 69 67 6e 65 64 20 76 61 6c 75 65 2e 0a  unsigned value..
06d0: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
06e0: 6e 65 64 20 63 68 61 72 20 65 74 42 79 74 65 3b  ned char etByte;
06f0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 62 75 69  ../*.** Each bui
0700: 6c 74 69 6e 20 63 6f 6e 76 65 72 73 69 6f 6e 20  ltin conversion 
0710: 63 68 61 72 61 63 74 65 72 20 28 65 78 3a 20 74  character (ex: t
0720: 68 65 20 27 64 27 20 69 6e 20 22 25 64 22 29 20  he 'd' in "%d") 
0730: 69 73 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  is described.** 
0740: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
0750: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0760: 73 74 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70  structure.*/.typ
0770: 65 64 65 66 20 73 74 72 75 63 74 20 65 74 5f 69  edef struct et_i
0780: 6e 66 6f 20 7b 20 20 20 2f 2a 20 49 6e 66 6f 72  nfo {   /* Infor
0790: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
07a0: 68 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 2a  h format field *
07b0: 2f 0a 20 20 63 68 61 72 20 66 6d 74 74 79 70 65  /.  char fmttype
07c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
07d0: 54 68 65 20 66 6f 72 6d 61 74 20 66 69 65 6c 64  The format field
07e0: 20 63 6f 64 65 20 6c 65 74 74 65 72 20 2a 2f 0a   code letter */.
07f0: 20 20 65 74 42 79 74 65 20 62 61 73 65 3b 20 20    etByte base;  
0800: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0810: 65 20 62 61 73 65 20 66 6f 72 20 72 61 64 69 78  e base for radix
0820: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 20   conversion */. 
0830: 20 65 74 42 79 74 65 20 66 6c 61 67 73 3b 20 20   etByte flags;  
0840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
0850: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 46 4c 41 47   or more of FLAG
0860: 5f 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  _ constants belo
0870: 77 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 74 79  w */.  etByte ty
0880: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
0890: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61  /* Conversion pa
08a0: 72 61 64 69 67 6d 20 2a 2f 0a 20 20 65 74 42 79  radigm */.  etBy
08b0: 74 65 20 63 68 61 72 73 65 74 3b 20 20 20 20 20  te charset;     
08c0: 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
08d0: 6e 74 6f 20 61 44 69 67 69 74 73 5b 5d 20 6f 66  nto aDigits[] of
08e0: 20 74 68 65 20 64 69 67 69 74 73 20 73 74 72 69   the digits stri
08f0: 6e 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 70  ng */.  etByte p
0900: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
0910: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
0920: 61 50 72 65 66 69 78 5b 5d 20 6f 66 20 74 68 65  aPrefix[] of the
0930: 20 70 72 65 66 69 78 20 73 74 72 69 6e 67 20 2a   prefix string *
0940: 2f 0a 7d 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f 2a  /.} et_info;../*
0950: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
0960: 65 73 20 66 6f 72 20 65 74 5f 69 6e 66 6f 2e 66  es for et_info.f
0970: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
0980: 46 4c 41 47 5f 53 49 47 4e 45 44 20 20 31 20 20  FLAG_SIGNED  1  
0990: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
09a0: 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65  e value to conve
09b0: 72 74 20 69 73 20 73 69 67 6e 65 64 20 2a 2f 0a  rt is signed */.
09c0: 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 49 4e 54  #define FLAG_INT
09d0: 45 52 4e 20 20 32 20 20 20 20 20 2f 2a 20 54 72  ERN  2     /* Tr
09e0: 75 65 20 69 66 20 66 6f 72 20 69 6e 74 65 72 6e  ue if for intern
09f0: 61 6c 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 23  al use only */.#
0a00: 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 54 52 49  define FLAG_STRI
0a10: 4e 47 20 20 34 20 20 20 20 20 2f 2a 20 41 6c 6c  NG  4     /* All
0a20: 6f 77 20 69 6e 66 69 6e 69 74 79 20 70 72 65 63  ow infinity prec
0a30: 69 73 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ision */.../*.**
0a40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
0a50: 61 62 6c 65 20 69 73 20 73 65 61 72 63 68 65 64  able is searched
0a60: 20 6c 69 6e 65 61 72 6c 79 2c 20 73 6f 20 69 74   linearly, so it
0a70: 20 69 73 20 67 6f 6f 64 20 74 6f 20 70 75 74 20   is good to put 
0a80: 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 66 72 65 71  the.** most freq
0a90: 75 65 6e 74 6c 79 20 75 73 65 64 20 63 6f 6e 76  uently used conv
0aa0: 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66 69 72  ersion types fir
0ab0: 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  st..*/.static co
0ac0: 6e 73 74 20 63 68 61 72 20 61 44 69 67 69 74 73  nst char aDigits
0ad0: 5b 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39  [] = "0123456789
0ae0: 41 42 43 44 45 46 30 31 32 33 34 35 36 37 38 39  ABCDEF0123456789
0af0: 61 62 63 64 65 66 22 3b 0a 73 74 61 74 69 63 20  abcdef";.static 
0b00: 63 6f 6e 73 74 20 63 68 61 72 20 61 50 72 65 66  const char aPref
0b10: 69 78 5b 5d 20 3d 20 22 2d 78 30 5c 30 30 30 58  ix[] = "-x0\000X
0b20: 30 22 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  0";.static const
0b30: 20 65 74 5f 69 6e 66 6f 20 66 6d 74 69 6e 66 6f   et_info fmtinfo
0b40: 5b 5d 20 3d 20 7b 0a 20 20 7b 20 20 27 64 27 2c  [] = {.  {  'd',
0b50: 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c   10, 1, etRADIX,
0b60: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
0b70: 20 7b 20 20 27 73 27 2c 20 20 30 2c 20 34 2c 20   {  's',  0, 4, 
0b80: 65 74 53 54 52 49 4e 47 2c 20 20 20 20 20 30 2c  etSTRING,     0,
0b90: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 67 27 2c    0 },.  {  'g',
0ba0: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
0bb0: 43 2c 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20  C,    30, 0 },. 
0bc0: 20 7b 20 20 27 7a 27 2c 20 20 30 2c 20 34 2c 20   {  'z',  0, 4, 
0bd0: 65 74 44 59 4e 53 54 52 49 4e 47 2c 20 20 30 2c  etDYNSTRING,  0,
0be0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 71 27 2c    0 },.  {  'q',
0bf0: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
0c00: 41 50 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20  APE,  0,  0 },. 
0c10: 20 7b 20 20 27 51 27 2c 20 20 30 2c 20 34 2c 20   {  'Q',  0, 4, 
0c20: 65 74 53 51 4c 45 53 43 41 50 45 32 2c 20 30 2c  etSQLESCAPE2, 0,
0c30: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 77 27 2c    0 },.  {  'w',
0c40: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
0c50: 41 50 45 33 2c 20 30 2c 20 20 30 20 7d 2c 0a 20  APE3, 0,  0 },. 
0c60: 20 7b 20 20 27 63 27 2c 20 20 30 2c 20 30 2c 20   {  'c',  0, 0, 
0c70: 65 74 43 48 41 52 58 2c 20 20 20 20 20 20 30 2c  etCHARX,      0,
0c80: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6f 27 2c    0 },.  {  'o',
0c90: 20 20 38 2c 20 30 2c 20 65 74 52 41 44 49 58 2c    8, 0, etRADIX,
0ca0: 20 20 20 20 20 20 30 2c 20 20 32 20 7d 2c 0a 20        0,  2 },. 
0cb0: 20 7b 20 20 27 75 27 2c 20 31 30 2c 20 30 2c 20   {  'u', 10, 0, 
0cc0: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
0cd0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 78 27 2c    0 },.  {  'x',
0ce0: 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   16, 0, etRADIX,
0cf0: 20 20 20 20 20 20 31 36 2c 20 31 20 7d 2c 0a 20        16, 1 },. 
0d00: 20 7b 20 20 27 58 27 2c 20 31 36 2c 20 30 2c 20   {  'X', 16, 0, 
0d10: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
0d20: 20 20 34 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53    4 },.#ifndef S
0d30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
0d40: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7b 20 20 27  ING_POINT.  {  '
0d50: 66 27 2c 20 20 30 2c 20 31 2c 20 65 74 46 4c 4f  f',  0, 1, etFLO
0d60: 41 54 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d  AT,      0,  0 }
0d70: 2c 0a 20 20 7b 20 20 27 65 27 2c 20 20 30 2c 20  ,.  {  'e',  0, 
0d80: 31 2c 20 65 74 45 58 50 2c 20 20 20 20 20 20 20  1, etEXP,       
0d90: 20 33 30 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27   30, 0 },.  {  '
0da0: 45 27 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 50  E',  0, 1, etEXP
0db0: 2c 20 20 20 20 20 20 20 20 31 34 2c 20 30 20 7d  ,        14, 0 }
0dc0: 2c 0a 20 20 7b 20 20 27 47 27 2c 20 20 30 2c 20  ,.  {  'G',  0, 
0dd0: 31 2c 20 65 74 47 45 4e 45 52 49 43 2c 20 20 20  1, etGENERIC,   
0de0: 20 31 34 2c 20 30 20 7d 2c 0a 23 65 6e 64 69 66   14, 0 },.#endif
0df0: 0a 20 20 7b 20 20 27 69 27 2c 20 31 30 2c 20 31  .  {  'i', 10, 1
0e00: 2c 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20  , etRADIX,      
0e10: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6e  0,  0 },.  {  'n
0e20: 27 2c 20 20 30 2c 20 30 2c 20 65 74 53 49 5a 45  ',  0, 0, etSIZE
0e30: 2c 20 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c  ,       0,  0 },
0e40: 0a 20 20 7b 20 20 27 25 27 2c 20 20 30 2c 20 30  .  {  '%',  0, 0
0e50: 2c 20 65 74 50 45 52 43 45 4e 54 2c 20 20 20 20  , etPERCENT,    
0e60: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 70  0,  0 },.  {  'p
0e70: 27 2c 20 31 36 2c 20 30 2c 20 65 74 50 4f 49 4e  ', 16, 0, etPOIN
0e80: 54 45 52 2c 20 20 20 20 30 2c 20 20 31 20 7d 2c  TER,    0,  1 },
0e90: 0a 0a 2f 2a 20 41 6c 6c 20 74 68 65 20 72 65 73  ../* All the res
0ea0: 74 20 68 61 76 65 20 74 68 65 20 46 4c 41 47 5f  t have the FLAG_
0eb0: 49 4e 54 45 52 4e 20 62 69 74 20 73 65 74 20 61  INTERN bit set a
0ec0: 6e 64 20 61 72 65 20 74 68 75 73 20 66 6f 72 20  nd are thus for 
0ed0: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 75 73 65 20  internal.** use 
0ee0: 6f 6e 6c 79 20 2a 2f 0a 20 20 7b 20 20 27 54 27  only */.  {  'T'
0ef0: 2c 20 20 30 2c 20 32 2c 20 65 74 54 4f 4b 45 4e  ,  0, 2, etTOKEN
0f00: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
0f10: 20 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 32 2c    {  'S',  0, 2,
0f20: 20 65 74 53 52 43 4c 49 53 54 2c 20 20 20 20 30   etSRCLIST,    0
0f30: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 72 27  ,  0 },.  {  'r'
0f40: 2c 20 31 30 2c 20 33 2c 20 65 74 4f 52 44 49 4e  , 10, 3, etORDIN
0f50: 41 4c 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  AL,    0,  0 },.
0f60: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  };../*.** If SQL
0f70: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
0f80: 47 5f 50 4f 49 4e 54 20 69 73 20 64 65 66 69 6e  G_POINT is defin
0f90: 65 64 2c 20 74 68 65 6e 20 6e 6f 6e 65 20 6f 66  ed, then none of
0fa0: 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f   the floating po
0fb0: 69 6e 74 0a 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  int.** conversio
0fc0: 6e 73 20 77 69 6c 6c 20 77 6f 72 6b 2e 0a 2a 2f  ns will work..*/
0fd0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
0fe0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
0ff0: 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 2a 76 61 6c 22  INT./*.** "*val"
1000: 20 69 73 20 61 20 64 6f 75 62 6c 65 20 73 75 63   is a double suc
1010: 68 20 74 68 61 74 20 30 2e 31 20 3c 3d 20 2a 76  h that 0.1 <= *v
1020: 61 6c 20 3c 20 31 30 2e 30 0a 2a 2a 20 52 65 74  al < 10.0.** Ret
1030: 75 72 6e 20 74 68 65 20 61 73 63 69 69 20 63 6f  urn the ascii co
1040: 64 65 20 66 6f 72 20 74 68 65 20 6c 65 61 64 69  de for the leadi
1050: 6e 67 20 64 69 67 69 74 20 6f 66 20 2a 76 61 6c  ng digit of *val
1060: 2c 20 74 68 65 6e 0a 2a 2a 20 6d 75 6c 74 69 70  , then.** multip
1070: 6c 79 20 22 2a 76 61 6c 22 20 62 79 20 31 30 2e  ly "*val" by 10.
1080: 30 20 74 6f 20 72 65 6e 6f 72 6d 61 6c 69 7a 65  0 to renormalize
1090: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 3a  ..**.** Example:
10a0: 0a 2a 2a 20 20 20 20 20 69 6e 70 75 74 3a 20 20  .**     input:  
10b0: 20 20 20 2a 76 61 6c 20 3d 20 33 2e 31 34 31 35     *val = 3.1415
10c0: 39 0a 2a 2a 20 20 20 20 20 6f 75 74 70 75 74 3a  9.**     output:
10d0: 20 20 20 20 2a 76 61 6c 20 3d 20 31 2e 34 31 35      *val = 1.415
10e0: 39 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65  9    function re
10f0: 74 75 72 6e 20 3d 20 27 33 27 0a 2a 2a 0a 2a 2a  turn = '3'.**.**
1100: 20 54 68 65 20 63 6f 75 6e 74 65 72 20 2a 63 6e   The counter *cn
1110: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
1120: 20 65 61 63 68 20 74 69 6d 65 2e 20 20 41 66 74   each time.  Aft
1130: 65 72 20 63 6f 75 6e 74 65 72 20 65 78 63 65 65  er counter excee
1140: 64 73 0a 2a 2a 20 31 36 20 28 74 68 65 20 6e 75  ds.** 16 (the nu
1150: 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63  mber of signific
1160: 61 6e 74 20 64 69 67 69 74 73 20 69 6e 20 61 20  ant digits in a 
1170: 36 34 2d 62 69 74 20 66 6c 6f 61 74 29 20 27 30  64-bit float) '0
1180: 27 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 72  ' is.** always r
1190: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
11a0: 69 63 20 63 68 61 72 20 65 74 5f 67 65 74 64 69  ic char et_getdi
11b0: 67 69 74 28 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  git(LONGDOUBLE_T
11c0: 59 50 45 20 2a 76 61 6c 2c 20 69 6e 74 20 2a 63  YPE *val, int *c
11d0: 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69 74  nt){.  int digit
11e0: 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ;.  LONGDOUBLE_T
11f0: 59 50 45 20 64 3b 0a 20 20 69 66 28 20 28 2a 63  YPE d;.  if( (*c
1200: 6e 74 29 3c 3d 30 20 29 20 72 65 74 75 72 6e 20  nt)<=0 ) return 
1210: 27 30 27 3b 0a 20 20 28 2a 63 6e 74 29 2d 2d 3b  '0';.  (*cnt)--;
1220: 0a 20 20 64 69 67 69 74 20 3d 20 28 69 6e 74 29  .  digit = (int)
1230: 2a 76 61 6c 3b 0a 20 20 64 20 3d 20 64 69 67 69  *val;.  d = digi
1240: 74 3b 0a 20 20 64 69 67 69 74 20 2b 3d 20 27 30  t;.  digit += '0
1250: 27 3b 0a 20 20 2a 76 61 6c 20 3d 20 28 2a 76 61  ';.  *val = (*va
1260: 6c 20 2d 20 64 29 2a 31 30 2e 30 3b 0a 20 20 72  l - d)*10.0;.  r
1270: 65 74 75 72 6e 20 28 63 68 61 72 29 64 69 67 69  eturn (char)digi
1280: 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  t;.}.#endif /* S
1290: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
12a0: 49 4e 47 5f 50 4f 49 4e 54 20 2a 2f 0a 0a 2f 2a  ING_POINT */../*
12b0: 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 74 72 41  .** Set the StrA
12c0: 63 63 75 6d 20 6f 62 6a 65 63 74 20 74 6f 20 61  ccum object to a
12d0: 6e 20 65 72 72 6f 72 20 6d 6f 64 65 2e 0a 2a 2f  n error mode..*/
12e0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74  .static void set
12f0: 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 53 74  StrAccumError(St
1300: 72 41 63 63 75 6d 20 2a 70 2c 20 75 38 20 65 45  rAccum *p, u8 eE
1310: 72 72 6f 72 29 7b 0a 20 20 61 73 73 65 72 74 28  rror){.  assert(
1320: 20 65 45 72 72 6f 72 3d 3d 53 54 52 41 43 43 55   eError==STRACCU
1330: 4d 5f 4e 4f 4d 45 4d 20 7c 7c 20 65 45 72 72 6f  M_NOMEM || eErro
1340: 72 3d 3d 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  r==STRACCUM_TOOB
1350: 49 47 20 29 3b 0a 20 20 70 2d 3e 61 63 63 45 72  IG );.  p->accEr
1360: 72 6f 72 20 3d 20 65 45 72 72 6f 72 3b 0a 20 20  ror = eError;.  
1370: 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 30 3b 0a 7d  p->nAlloc = 0;.}
1380: 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 20 61 72  ../*.** Extra ar
1390: 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 66 72  gument values fr
13a0: 6f 6d 20 61 20 50 72 69 6e 74 66 41 72 67 75 6d  om a PrintfArgum
13b0: 65 6e 74 73 20 6f 62 6a 65 63 74 0a 2a 2f 0a 73  ents object.*/.s
13c0: 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e  tatic sqlite3_in
13d0: 74 36 34 20 67 65 74 49 6e 74 41 72 67 28 50 72  t64 getIntArg(Pr
13e0: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 2a 70  intfArguments *p
13f0: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 41 72 67  ){.  if( p->nArg
1400: 3c 3d 70 2d 3e 6e 55 73 65 64 20 29 20 72 65 74  <=p->nUsed ) ret
1410: 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20  urn 0;.  return 
1420: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
1430: 74 36 34 28 70 2d 3e 61 70 41 72 67 5b 70 2d 3e  t64(p->apArg[p->
1440: 6e 55 73 65 64 2b 2b 5d 29 3b 0a 7d 0a 73 74 61  nUsed++]);.}.sta
1450: 74 69 63 20 64 6f 75 62 6c 65 20 67 65 74 44 6f  tic double getDo
1460: 75 62 6c 65 41 72 67 28 50 72 69 6e 74 66 41 72  ubleArg(PrintfAr
1470: 67 75 6d 65 6e 74 73 20 2a 70 29 7b 0a 20 20 69  guments *p){.  i
1480: 66 28 20 70 2d 3e 6e 41 72 67 3c 3d 70 2d 3e 6e  f( p->nArg<=p->n
1490: 55 73 65 64 20 29 20 72 65 74 75 72 6e 20 30 2e  Used ) return 0.
14a0: 30 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  0;.  return sqli
14b0: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
14c0: 28 70 2d 3e 61 70 41 72 67 5b 70 2d 3e 6e 55 73  (p->apArg[p->nUs
14d0: 65 64 2b 2b 5d 29 3b 0a 7d 0a 73 74 61 74 69 63  ed++]);.}.static
14e0: 20 63 68 61 72 20 2a 67 65 74 54 65 78 74 41 72   char *getTextAr
14f0: 67 28 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  g(PrintfArgument
1500: 73 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  s *p){.  if( p->
1510: 6e 41 72 67 3c 3d 70 2d 3e 6e 55 73 65 64 20 29  nArg<=p->nUsed )
1520: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
1530: 75 72 6e 20 28 63 68 61 72 2a 29 73 71 6c 69 74  urn (char*)sqlit
1540: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 2d  e3_value_text(p-
1550: 3e 61 70 41 72 67 5b 70 2d 3e 6e 55 73 65 64 2b  >apArg[p->nUsed+
1560: 2b 5d 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 4f  +]);.}.../*.** O
1570: 6e 20 6d 61 63 68 69 6e 65 73 20 77 69 74 68 20  n machines with 
1580: 61 20 73 6d 61 6c 6c 20 73 74 61 63 6b 20 73 69  a small stack si
1590: 7a 65 2c 20 79 6f 75 20 63 61 6e 20 72 65 64 65  ze, you can rede
15a0: 66 69 6e 65 20 74 68 65 0a 2a 2a 20 53 51 4c 49  fine the.** SQLI
15b0: 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a  TE_PRINT_BUF_SIZ
15c0: 45 20 74 6f 20 62 65 20 73 6f 6d 65 74 68 69 6e  E to be somethin
15d0: 67 20 73 6d 61 6c 6c 65 72 2c 20 69 66 20 64 65  g smaller, if de
15e0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  sired..*/.#ifnde
15f0: 66 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42  f SQLITE_PRINT_B
1600: 55 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  UF_SIZE.# define
1610: 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55   SQLITE_PRINT_BU
1620: 46 5f 53 49 5a 45 20 37 30 0a 23 65 6e 64 69 66  F_SIZE 70.#endif
1630: 0a 23 64 65 66 69 6e 65 20 65 74 42 55 46 53 49  .#define etBUFSI
1640: 5a 45 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f  ZE SQLITE_PRINT_
1650: 42 55 46 5f 53 49 5a 45 20 20 2f 2a 20 53 69 7a  BUF_SIZE  /* Siz
1660: 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20  e of the output 
1670: 62 75 66 66 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  buffer */../*.**
1680: 20 52 65 6e 64 65 72 20 61 20 73 74 72 69 6e 67   Render a string
1690: 20 67 69 76 65 6e 20 62 79 20 22 66 6d 74 22 20   given by "fmt" 
16a0: 69 6e 74 6f 20 74 68 65 20 53 74 72 41 63 63 75  into the StrAccu
16b0: 6d 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69  m object..*/.voi
16c0: 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74  d sqlite3VXPrint
16d0: 66 28 0a 20 20 53 74 72 41 63 63 75 6d 20 2a 70  f(.  StrAccum *p
16e0: 41 63 63 75 6d 2c 20 20 20 20 20 20 20 20 20 20  Accum,          
16f0: 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 20 72 65  /* Accumulate re
1700: 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 20  sults here */.  
1710: 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 6d 74 2c  const char *fmt,
1720: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
1730: 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 20  rmat string */. 
1740: 20 76 61 5f 6c 69 73 74 20 61 70 20 20 20 20 20   va_list ap     
1750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
1760: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
1770: 20 69 6e 74 20 63 3b 20 20 20 20 20 20 20 20 20   int c;         
1780: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1790: 65 78 74 20 63 68 61 72 61 63 74 65 72 20 69 6e  ext character in
17a0: 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69   the format stri
17b0: 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 2a 62 75  ng */.  char *bu
17c0: 66 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  fpt;            
17d0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
17e0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
17f0: 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
1800: 70 72 65 63 69 73 69 6f 6e 3b 20 20 20 20 20 20  precision;      
1810: 20 20 20 20 20 20 20 2f 2a 20 50 72 65 63 69 73         /* Precis
1820: 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65  ion of the curre
1830: 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e  nt field */.  in
1840: 74 20 6c 65 6e 67 74 68 3b 20 20 20 20 20 20 20  t length;       
1850: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
1860: 74 68 20 6f 66 20 74 68 65 20 66 69 65 6c 64 20  th of the field 
1870: 2a 2f 0a 20 20 69 6e 74 20 69 64 78 3b 20 20 20  */.  int idx;   
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1890: 2f 2a 20 41 20 67 65 6e 65 72 61 6c 20 70 75 72  /* A general pur
18a0: 70 6f 73 65 20 6c 6f 6f 70 20 63 6f 75 6e 74 65  pose loop counte
18b0: 72 20 2a 2f 0a 20 20 69 6e 74 20 77 69 64 74 68  r */.  int width
18c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18d0: 20 20 2f 2a 20 57 69 64 74 68 20 6f 66 20 74 68    /* Width of th
18e0: 65 20 63 75 72 72 65 6e 74 20 66 69 65 6c 64 20  e current field 
18f0: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
1900: 5f 6c 65 66 74 6a 75 73 74 69 66 79 3b 20 20 20  _leftjustify;   
1910: 2f 2a 20 54 72 75 65 20 69 66 20 22 2d 22 20 66  /* True if "-" f
1920: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
1930: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
1940: 70 6c 75 73 73 69 67 6e 3b 20 20 20 20 20 20 2f  plussign;      /
1950: 2a 20 54 72 75 65 20 69 66 20 22 2b 22 20 66 6c  * True if "+" fl
1960: 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  ag is present */
1970: 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 62  .  etByte flag_b
1980: 6c 61 6e 6b 73 69 67 6e 3b 20 20 20 20 20 2f 2a  lanksign;     /*
1990: 20 54 72 75 65 20 69 66 20 22 20 22 20 66 6c 61   True if " " fla
19a0: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  g is present */.
19b0: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c    etByte flag_al
19c0: 74 65 72 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a 20  ternateform; /* 
19d0: 54 72 75 65 20 69 66 20 22 23 22 20 66 6c 61 67  True if "#" flag
19e0: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
19f0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74   etByte flag_alt
1a00: 66 6f 72 6d 32 3b 20 20 20 20 20 20 2f 2a 20 54  form2;      /* T
1a10: 72 75 65 20 69 66 20 22 21 22 20 66 6c 61 67 20  rue if "!" flag 
1a20: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1a30: 65 74 42 79 74 65 20 66 6c 61 67 5f 7a 65 72 6f  etByte flag_zero
1a40: 70 61 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  pad;       /* Tr
1a50: 75 65 20 69 66 20 66 69 65 6c 64 20 77 69 64 74  ue if field widt
1a60: 68 20 63 6f 6e 73 74 61 6e 74 20 73 74 61 72 74  h constant start
1a70: 73 20 77 69 74 68 20 7a 65 72 6f 20 2a 2f 0a 20  s with zero */. 
1a80: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e   etByte flag_lon
1a90: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  g;          /* T
1aa0: 72 75 65 20 69 66 20 22 6c 22 20 66 6c 61 67 20  rue if "l" flag 
1ab0: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1ac0: 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67  etByte flag_long
1ad0: 6c 6f 6e 67 3b 20 20 20 20 20 20 2f 2a 20 54 72  long;      /* Tr
1ae0: 75 65 20 69 66 20 74 68 65 20 22 6c 6c 22 20 66  ue if the "ll" f
1af0: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
1b00: 2f 0a 20 20 65 74 42 79 74 65 20 64 6f 6e 65 3b  /.  etByte done;
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b20: 2a 20 4c 6f 6f 70 20 74 65 72 6d 69 6e 61 74 69  * Loop terminati
1b30: 6f 6e 20 66 6c 61 67 20 2a 2f 0a 20 20 65 74 42  on flag */.  etB
1b40: 79 74 65 20 78 74 79 70 65 20 3d 20 65 74 49 4e  yte xtype = etIN
1b50: 56 41 4c 49 44 3b 20 20 2f 2a 20 43 6f 6e 76 65  VALID;  /* Conve
1b60: 72 73 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a  rsion paradigm *
1b70: 2f 0a 20 20 75 38 20 62 41 72 67 4c 69 73 74 3b  /.  u8 bArgList;
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b90: 2a 20 54 72 75 65 20 66 6f 72 20 53 51 4c 49 54  * True for SQLIT
1ba0: 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
1bb0: 20 2a 2f 0a 20 20 75 38 20 75 73 65 49 6e 74 65   */.  u8 useInte
1bc0: 72 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rn;             
1bd0: 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 69 6e   /* Ok to use in
1be0: 74 65 72 6e 61 6c 20 63 6f 6e 76 65 72 73 69 6f  ternal conversio
1bf0: 6e 73 20 28 65 78 3a 20 25 54 29 20 2a 2f 0a 20  ns (ex: %T) */. 
1c00: 20 63 68 61 72 20 70 72 65 66 69 78 3b 20 20 20   char prefix;   
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1c20: 72 65 66 69 78 20 63 68 61 72 61 63 74 65 72 2e  refix character.
1c30: 20 20 22 2b 22 20 6f 72 20 22 2d 22 20 6f 72 20    "+" or "-" or 
1c40: 22 20 22 20 6f 72 20 27 5c 30 27 2e 20 2a 2f 0a  " " or '\0'. */.
1c50: 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20    sqlite_uint64 
1c60: 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20 2f 2a 20  longvalue;   /* 
1c70: 56 61 6c 75 65 20 66 6f 72 20 69 6e 74 65 67 65  Value for intege
1c80: 72 20 74 79 70 65 73 20 2a 2f 0a 20 20 4c 4f 4e  r types */.  LON
1c90: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 72 65 61  GDOUBLE_TYPE rea
1ca0: 6c 76 61 6c 75 65 3b 20 2f 2a 20 56 61 6c 75 65  lvalue; /* Value
1cb0: 20 66 6f 72 20 72 65 61 6c 20 74 79 70 65 73 20   for real types 
1cc0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74 5f 69 6e  */.  const et_in
1cd0: 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20 20 20 20  fo *infop;      
1ce0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68  /* Pointer to th
1cf0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e  e appropriate in
1d00: 66 6f 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  fo structure */.
1d10: 20 20 63 68 61 72 20 2a 7a 4f 75 74 3b 20 20 20    char *zOut;   
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d30: 52 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72  Rendering buffer
1d40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20   */.  int nOut; 
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1d70: 72 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72  rendering buffer
1d80: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 78 74   */.  char *zExt
1d90: 72 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ra = 0;         
1da0: 20 2f 2a 20 4d 61 6c 6c 6f 63 65 64 20 6d 65 6d   /* Malloced mem
1db0: 6f 72 79 20 75 73 65 64 20 62 79 20 73 6f 6d 65  ory used by some
1dc0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 23   conversion */.#
1dd0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1de0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
1df0: 54 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65 32  T.  int  exp, e2
1e00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1e10: 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72 65  * exponent of re
1e20: 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  al numbers */.  
1e30: 69 6e 74 20 6e 73 64 3b 20 20 20 20 20 20 20 20  int nsd;        
1e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e50: 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63  mber of signific
1e60: 61 6e 74 20 64 69 67 69 74 73 20 72 65 74 75 72  ant digits retur
1e70: 6e 65 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  ned */.  double 
1e80: 72 6f 75 6e 64 65 72 3b 20 20 20 20 20 20 20 20  rounder;        
1e90: 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72 20      /* Used for 
1ea0: 72 6f 75 6e 64 69 6e 67 20 66 6c 6f 61 74 69 6e  rounding floatin
1eb0: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 2a  g point values *
1ec0: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
1ed0: 64 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  dp;            /
1ee0: 2a 20 54 72 75 65 20 69 66 20 64 65 63 69 6d 61  * True if decima
1ef0: 6c 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 62  l point should b
1f00: 65 20 73 68 6f 77 6e 20 2a 2f 0a 20 20 65 74 42  e shown */.  etB
1f10: 79 74 65 20 66 6c 61 67 5f 72 74 7a 3b 20 20 20  yte flag_rtz;   
1f20: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f30: 69 66 20 74 72 61 69 6c 69 6e 67 20 7a 65 72 6f  if trailing zero
1f40: 73 20 73 68 6f 75 6c 64 20 62 65 20 72 65 6d 6f  s should be remo
1f50: 76 65 64 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ved */.#endif.  
1f60: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
1f70: 2a 70 41 72 67 4c 69 73 74 20 3d 20 30 3b 20 2f  *pArgList = 0; /
1f80: 2a 20 41 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  * Arguments for 
1f90: 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
1fa0: 4c 46 55 4e 43 20 2a 2f 0a 20 20 63 68 61 72 20  LFUNC */.  char 
1fb0: 62 75 66 5b 65 74 42 55 46 53 49 5a 45 5d 3b 20  buf[etBUFSIZE]; 
1fc0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73        /* Convers
1fd0: 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 0a 20  ion buffer */.. 
1fe0: 20 62 75 66 70 74 20 3d 20 30 3b 0a 20 20 69 66   bufpt = 0;.  if
1ff0: 28 20 70 41 63 63 75 6d 2d 3e 70 72 69 6e 74 66  ( pAccum->printf
2000: 46 6c 61 67 73 20 29 7b 0a 20 20 20 20 69 66 28  Flags ){.    if(
2010: 20 28 62 41 72 67 4c 69 73 74 20 3d 20 28 70 41   (bArgList = (pA
2020: 63 63 75 6d 2d 3e 70 72 69 6e 74 66 46 6c 61 67  ccum->printfFlag
2030: 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  s & SQLITE_PRINT
2040: 46 5f 53 51 4c 46 55 4e 43 29 29 21 3d 30 20 29  F_SQLFUNC))!=0 )
2050: 7b 0a 20 20 20 20 20 20 70 41 72 67 4c 69 73 74  {.      pArgList
2060: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 50 72   = va_arg(ap, Pr
2070: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 2a 29 3b  intfArguments*);
2080: 0a 20 20 20 20 7d 0a 20 20 20 20 75 73 65 49 6e  .    }.    useIn
2090: 74 65 72 6e 20 3d 20 70 41 63 63 75 6d 2d 3e 70  tern = pAccum->p
20a0: 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c  rintfFlags & SQL
20b0: 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
20c0: 4e 41 4c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  NAL;.  }else{.  
20d0: 20 20 62 41 72 67 4c 69 73 74 20 3d 20 75 73 65    bArgList = use
20e0: 49 6e 74 65 72 6e 20 3d 20 30 3b 0a 20 20 7d 0a  Intern = 0;.  }.
20f0: 20 20 66 6f 72 28 3b 20 28 63 3d 28 2a 66 6d 74    for(; (c=(*fmt
2100: 29 29 21 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a 20  ))!=0; ++fmt){. 
2110: 20 20 20 69 66 28 20 63 21 3d 27 25 27 20 29 7b     if( c!='%' ){
2120: 0a 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 28  .      bufpt = (
2130: 63 68 61 72 20 2a 29 66 6d 74 3b 0a 23 69 66 20  char *)fmt;.#if 
2140: 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 0a 20  HAVE_STRCHRNUL. 
2150: 20 20 20 20 20 66 6d 74 20 3d 20 73 74 72 63 68       fmt = strch
2160: 72 6e 75 6c 28 66 6d 74 2c 20 27 25 27 29 3b 0a  rnul(fmt, '%');.
2170: 23 65 6c 73 65 0a 20 20 20 20 20 20 64 6f 7b 20  #else.      do{ 
2180: 66 6d 74 2b 2b 3b 20 7d 77 68 69 6c 65 28 20 2a  fmt++; }while( *
2190: 66 6d 74 20 26 26 20 2a 66 6d 74 20 21 3d 20 27  fmt && *fmt != '
21a0: 25 27 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  %' );.#endif.   
21b0: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
21c0: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
21d0: 20 62 75 66 70 74 2c 20 28 69 6e 74 29 28 66 6d   bufpt, (int)(fm
21e0: 74 20 2d 20 62 75 66 70 74 29 29 3b 0a 20 20 20  t - bufpt));.   
21f0: 20 20 20 69 66 28 20 2a 66 6d 74 3d 3d 30 20 29     if( *fmt==0 )
2200: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2210: 20 20 69 66 28 20 28 63 3d 28 2a 2b 2b 66 6d 74    if( (c=(*++fmt
2220: 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ))==0 ){.      s
2230: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
2240: 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 22 25 22  pend(pAccum, "%"
2250: 2c 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 1);.      brea
2260: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20  k;.    }.    /* 
2270: 46 69 6e 64 20 6f 75 74 20 77 68 61 74 20 66 6c  Find out what fl
2280: 61 67 73 20 61 72 65 20 70 72 65 73 65 6e 74 20  ags are present 
2290: 2a 2f 0a 20 20 20 20 66 6c 61 67 5f 6c 65 66 74  */.    flag_left
22a0: 6a 75 73 74 69 66 79 20 3d 20 66 6c 61 67 5f 70  justify = flag_p
22b0: 6c 75 73 73 69 67 6e 20 3d 20 66 6c 61 67 5f 62  lussign = flag_b
22c0: 6c 61 6e 6b 73 69 67 6e 20 3d 20 0a 20 20 20 20  lanksign = .    
22d0: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66   flag_alternatef
22e0: 6f 72 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f  orm = flag_altfo
22f0: 72 6d 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70  rm2 = flag_zerop
2300: 61 64 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65  ad = 0;.    done
2310: 20 3d 20 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20   = 0;.    do{.  
2320: 20 20 20 20 73 77 69 74 63 68 28 20 63 20 29 7b      switch( c ){
2330: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27 2d  .        case '-
2340: 27 3a 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75  ':   flag_leftju
2350: 73 74 69 66 79 20 3d 20 31 3b 20 20 20 20 20 62  stify = 1;     b
2360: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
2370: 73 65 20 27 2b 27 3a 20 20 20 66 6c 61 67 5f 70  se '+':   flag_p
2380: 6c 75 73 73 69 67 6e 20 3d 20 31 3b 20 20 20 20  lussign = 1;    
2390: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
23a0: 20 20 20 63 61 73 65 20 27 20 27 3a 20 20 20 66     case ' ':   f
23b0: 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20  lag_blanksign = 
23c0: 31 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;       break;.
23d0: 20 20 20 20 20 20 20 20 63 61 73 65 20 27 23 27          case '#'
23e0: 3a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61  :   flag_alterna
23f0: 74 65 66 6f 72 6d 20 3d 20 31 3b 20 20 20 62 72  teform = 1;   br
2400: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
2410: 65 20 27 21 27 3a 20 20 20 66 6c 61 67 5f 61 6c  e '!':   flag_al
2420: 74 66 6f 72 6d 32 20 3d 20 31 3b 20 20 20 20 20  tform2 = 1;     
2430: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2440: 20 20 63 61 73 65 20 27 30 27 3a 20 20 20 66 6c    case '0':   fl
2450: 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 31 3b 20  ag_zeropad = 1; 
2460: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2470: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20         default: 
2480: 20 20 20 64 6f 6e 65 20 3d 20 31 3b 20 20 20 20     done = 1;    
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
24a0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
24b0: 7d 77 68 69 6c 65 28 20 21 64 6f 6e 65 20 26 26  }while( !done &&
24c0: 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 30   (c=(*++fmt))!=0
24d0: 20 29 3b 0a 20 20 20 20 2f 2a 20 47 65 74 20 74   );.    /* Get t
24e0: 68 65 20 66 69 65 6c 64 20 77 69 64 74 68 20 2a  he field width *
24f0: 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27  /.    if( c=='*'
2500: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 41   ){.      if( bA
2510: 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20  rgList ){.      
2520: 20 20 77 69 64 74 68 20 3d 20 28 69 6e 74 29 67    width = (int)g
2530: 65 74 49 6e 74 41 72 67 28 70 41 72 67 4c 69 73  etIntArg(pArgLis
2540: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
2550: 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d  .        width =
2560: 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b   va_arg(ap,int);
2570: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2580: 66 28 20 77 69 64 74 68 3c 30 20 29 7b 0a 20 20  f( width<0 ){.  
2590: 20 20 20 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a        flag_leftj
25a0: 75 73 74 69 66 79 20 3d 20 31 3b 0a 20 20 20 20  ustify = 1;.    
25b0: 20 20 20 20 77 69 64 74 68 20 3d 20 77 69 64 74      width = widt
25c0: 68 20 3e 3d 20 2d 32 31 34 37 34 38 33 36 34 37  h >= -2147483647
25d0: 20 3f 20 2d 77 69 64 74 68 20 3a 20 30 3b 0a 20   ? -width : 0;. 
25e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 20 3d       }.      c =
25f0: 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 7d 65 6c   *++fmt;.    }el
2600: 73 65 7b 0a 20 20 20 20 20 20 75 6e 73 69 67 6e  se{.      unsign
2610: 65 64 20 77 78 20 3d 20 30 3b 0a 20 20 20 20 20  ed wx = 0;.     
2620: 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26   while( c>='0' &
2630: 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20  & c<='9' ){.    
2640: 20 20 20 20 77 78 20 3d 20 77 78 2a 31 30 20 2b      wx = wx*10 +
2650: 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20   c - '0';.      
2660: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
2670: 20 20 20 20 7d 0a 20 20 20 20 20 20 74 65 73 74      }.      test
2680: 63 61 73 65 28 20 77 78 3e 30 78 37 66 66 66 66  case( wx>0x7ffff
2690: 66 66 66 20 29 3b 0a 20 20 20 20 20 20 77 69 64  fff );.      wid
26a0: 74 68 20 3d 20 77 78 20 26 20 30 78 37 66 66 66  th = wx & 0x7fff
26b0: 66 66 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ffff;.    }.    
26c0: 61 73 73 65 72 74 28 20 77 69 64 74 68 3e 3d 30  assert( width>=0
26d0: 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
26e0: 45 5f 50 52 49 4e 54 46 5f 50 52 45 43 49 53 49  E_PRINTF_PRECISI
26f0: 4f 4e 5f 4c 49 4d 49 54 0a 20 20 20 20 69 66 28  ON_LIMIT.    if(
2700: 20 77 69 64 74 68 3e 53 51 4c 49 54 45 5f 50 52   width>SQLITE_PR
2710: 49 4e 54 46 5f 50 52 45 43 49 53 49 4f 4e 5f 4c  INTF_PRECISION_L
2720: 49 4d 49 54 20 29 7b 0a 20 20 20 20 20 20 77 69  IMIT ){.      wi
2730: 64 74 68 20 3d 20 53 51 4c 49 54 45 5f 50 52 49  dth = SQLITE_PRI
2740: 4e 54 46 5f 50 52 45 43 49 53 49 4f 4e 5f 4c 49  NTF_PRECISION_LI
2750: 4d 49 54 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  MIT;.    }.#endi
2760: 66 0a 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68  f..    /* Get th
2770: 65 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20  e precision */. 
2780: 20 20 20 69 66 28 20 63 3d 3d 27 2e 27 20 29 7b     if( c=='.' ){
2790: 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d  .      c = *++fm
27a0: 74 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  t;.      if( c==
27b0: 27 2a 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69  '*' ){.        i
27c0: 66 28 20 62 41 72 67 4c 69 73 74 20 29 7b 0a 20  f( bArgList ){. 
27d0: 20 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69           precisi
27e0: 6f 6e 20 3d 20 28 69 6e 74 29 67 65 74 49 6e 74  on = (int)getInt
27f0: 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b 0a 20  Arg(pArgList);. 
2800: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
2810: 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f          precisio
2820: 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  n = va_arg(ap,in
2830: 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
2840: 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74        c = *++fmt
2850: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72  ;.        if( pr
2860: 65 63 69 73 69 6f 6e 3c 30 20 29 7b 0a 20 20 20  ecision<0 ){.   
2870: 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e         precision
2880: 20 3d 20 70 72 65 63 69 73 69 6f 6e 20 3e 3d 20   = precision >= 
2890: 2d 32 31 34 37 34 38 33 36 34 37 20 3f 20 2d 70  -2147483647 ? -p
28a0: 72 65 63 69 73 69 6f 6e 20 3a 20 2d 31 3b 0a 20  recision : -1;. 
28b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
28c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 6e  else{.        un
28d0: 73 69 67 6e 65 64 20 70 78 20 3d 20 30 3b 0a 20  signed px = 0;. 
28e0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 3e         while( c>
28f0: 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29  ='0' && c<='9' )
2900: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 78 20 3d  {.          px =
2910: 20 70 78 2a 31 30 20 2b 20 63 20 2d 20 27 30 27   px*10 + c - '0'
2920: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d 20  ;.          c = 
2930: 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 20 20  *++fmt;.        
2940: 7d 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  }.        testca
2950: 73 65 28 20 70 78 3e 30 78 37 66 66 66 66 66 66  se( px>0x7ffffff
2960: 66 20 29 3b 0a 20 20 20 20 20 20 20 20 70 72 65  f );.        pre
2970: 63 69 73 69 6f 6e 20 3d 20 70 78 20 26 20 30 78  cision = px & 0x
2980: 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20  7fffffff;.      
2990: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
29a0: 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d     precision = -
29b0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  1;.    }.    ass
29c0: 65 72 74 28 20 70 72 65 63 69 73 69 6f 6e 3e 3d  ert( precision>=
29d0: 28 2d 31 29 20 29 3b 0a 23 69 66 64 65 66 20 53  (-1) );.#ifdef S
29e0: 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 50 52 45  QLITE_PRINTF_PRE
29f0: 43 49 53 49 4f 4e 5f 4c 49 4d 49 54 0a 20 20 20  CISION_LIMIT.   
2a00: 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e 53   if( precision>S
2a10: 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 50 52 45  QLITE_PRINTF_PRE
2a20: 43 49 53 49 4f 4e 5f 4c 49 4d 49 54 20 29 7b 0a  CISION_LIMIT ){.
2a30: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
2a40: 3d 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  = SQLITE_PRINTF_
2a50: 50 52 45 43 49 53 49 4f 4e 5f 4c 49 4d 49 54 3b  PRECISION_LIMIT;
2a60: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 0a  .    }.#endif...
2a70: 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63      /* Get the c
2a80: 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 20 6d  onversion type m
2a90: 6f 64 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  odifier */.    i
2aa0: 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20 20 20  f( c=='l' ){.   
2ab0: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 31     flag_long = 1
2ac0: 3b 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66  ;.      c = *++f
2ad0: 6d 74 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d  mt;.      if( c=
2ae0: 3d 27 6c 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='l' ){.        
2af0: 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20  flag_longlong = 
2b00: 31 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a  1;.        c = *
2b10: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 65 6c  ++fmt;.      }el
2b20: 73 65 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67  se{.        flag
2b30: 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20  _longlong = 0;. 
2b40: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
2b50: 7b 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e  {.      flag_lon
2b60: 67 20 3d 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e  g = flag_longlon
2b70: 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  g = 0;.    }.   
2b80: 20 2f 2a 20 46 65 74 63 68 20 74 68 65 20 69 6e   /* Fetch the in
2b90: 66 6f 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65  fo entry for the
2ba0: 20 66 69 65 6c 64 20 2a 2f 0a 20 20 20 20 69 6e   field */.    in
2bb0: 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f 5b 30  fop = &fmtinfo[0
2bc0: 5d 3b 0a 20 20 20 20 78 74 79 70 65 20 3d 20 65  ];.    xtype = e
2bd0: 74 49 4e 56 41 4c 49 44 3b 0a 20 20 20 20 66 6f  tINVALID;.    fo
2be0: 72 28 69 64 78 3d 30 3b 20 69 64 78 3c 41 72 72  r(idx=0; idx<Arr
2bf0: 61 79 53 69 7a 65 28 66 6d 74 69 6e 66 6f 29 3b  aySize(fmtinfo);
2c00: 20 69 64 78 2b 2b 29 7b 0a 20 20 20 20 20 20 69   idx++){.      i
2c10: 66 28 20 63 3d 3d 66 6d 74 69 6e 66 6f 5b 69 64  f( c==fmtinfo[id
2c20: 78 5d 2e 66 6d 74 74 79 70 65 20 29 7b 0a 20 20  x].fmttype ){.  
2c30: 20 20 20 20 20 20 69 6e 66 6f 70 20 3d 20 26 66        infop = &f
2c40: 6d 74 69 6e 66 6f 5b 69 64 78 5d 3b 0a 20 20 20  mtinfo[idx];.   
2c50: 20 20 20 20 20 69 66 28 20 75 73 65 49 6e 74 65       if( useInte
2c60: 72 6e 20 7c 7c 20 28 69 6e 66 6f 70 2d 3e 66 6c  rn || (infop->fl
2c70: 61 67 73 20 26 20 46 4c 41 47 5f 49 4e 54 45 52  ags & FLAG_INTER
2c80: 4e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  N)==0 ){.       
2c90: 20 20 20 78 74 79 70 65 20 3d 20 69 6e 66 6f 70     xtype = infop
2ca0: 2d 3e 74 79 70 65 3b 0a 20 20 20 20 20 20 20 20  ->type;.        
2cb0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
2cc0: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
2cd0: 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b   }.        break
2ce0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2cf0: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 41  .    /*.    ** A
2d00: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 76 61  t this point, va
2d10: 72 69 61 62 6c 65 73 20 61 72 65 20 69 6e 69 74  riables are init
2d20: 69 61 6c 69 7a 65 64 20 61 73 20 66 6f 6c 6c 6f  ialized as follo
2d30: 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ws:.    **.    *
2d40: 2a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61  *   flag_alterna
2d50: 74 65 66 6f 72 6d 20 20 20 20 20 20 20 20 20 20  teform          
2d60: 54 52 55 45 20 69 66 20 61 20 27 23 27 20 69 73  TRUE if a '#' is
2d70: 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a   present..    **
2d80: 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32     flag_altform2
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2da0: 52 55 45 20 69 66 20 61 20 27 21 27 20 69 73 20  RUE if a '!' is 
2db0: 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20  present..    ** 
2dc0: 20 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20    flag_plussign 
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
2de0: 55 45 20 69 66 20 61 20 27 2b 27 20 69 73 20 70  UE if a '+' is p
2df0: 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20  resent..    **  
2e00: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66   flag_leftjustif
2e10: 79 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55  y            TRU
2e20: 45 20 69 66 20 61 20 27 2d 27 20 69 73 20 70 72  E if a '-' is pr
2e30: 65 73 65 6e 74 20 6f 72 20 69 66 20 74 68 65 0a  esent or if the.
2e40: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e60: 20 20 20 20 20 66 69 65 6c 64 20 77 69 64 74 68       field width
2e70: 20 77 61 73 20 6e 65 67 61 74 69 76 65 2e 0a 20   was negative.. 
2e80: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 7a 65 72     **   flag_zer
2e90: 6f 70 61 64 20 20 20 20 20 20 20 20 20 20 20 20  opad            
2ea0: 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20      TRUE if the 
2eb0: 77 69 64 74 68 20 62 65 67 61 6e 20 77 69 74 68  width began with
2ec0: 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61   0..    **   fla
2ed0: 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20  g_long          
2ee0: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
2ef0: 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c 27 20   the letter 'l' 
2f00: 28 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20  (ell) prefixed. 
2f10: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f30: 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69      the conversi
2f40: 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20  on character..  
2f50: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f 6e 67    **   flag_long
2f60: 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 20  long            
2f70: 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20 6c     TRUE if the l
2f80: 65 74 74 65 72 20 27 6c 6c 27 20 28 65 6c 6c 20  etter 'll' (ell 
2f90: 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20 20  ell) prefixed.  
2fa0: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20    **            
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc0: 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f     the conversio
2fd0: 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 20  n character..   
2fe0: 20 2a 2a 20 20 20 66 6c 61 67 5f 62 6c 61 6e 6b   **   flag_blank
2ff0: 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20 20  sign            
3000: 20 20 54 52 55 45 20 69 66 20 61 20 27 20 27 20    TRUE if a ' ' 
3010: 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20  is present..    
3020: 2a 2a 20 20 20 77 69 64 74 68 20 20 20 20 20 20  **   width      
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 66   The specified f
3050: 69 65 6c 64 20 77 69 64 74 68 2e 20 20 54 68 69  ield width.  Thi
3060: 73 20 69 73 0a 20 20 20 20 2a 2a 20 20 20 20 20  s is.    **     
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3080: 20 20 20 20 20 20 20 20 20 20 61 6c 77 61 79 73            always
3090: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
30a0: 5a 65 72 6f 20 69 73 20 74 68 65 20 64 65 66 61  Zero is the defa
30b0: 75 6c 74 2e 0a 20 20 20 20 2a 2a 20 20 20 70 72  ult..    **   pr
30c0: 65 63 69 73 69 6f 6e 20 20 20 20 20 20 20 20 20  ecision         
30d0: 20 20 20 20 20 20 20 20 20 20 54 68 65 20 73 70            The sp
30e0: 65 63 69 66 69 65 64 20 70 72 65 63 69 73 69 6f  ecified precisio
30f0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0a  n.  The default.
3100: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 20 20 20 20 20 69 73 20 2d 31 2e 0a 20 20 20 20       is -1..    
3130: 2a 2a 20 20 20 78 74 79 70 65 20 20 20 20 20 20  **   xtype      
3140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3150: 20 54 68 65 20 63 6c 61 73 73 20 6f 66 20 74 68   The class of th
3160: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0a 20 20  e conversion..  
3170: 20 20 2a 2a 20 20 20 69 6e 66 6f 70 20 20 20 20    **   infop    
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3190: 20 20 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68     Pointer to th
31a0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e  e appropriate in
31b0: 66 6f 20 73 74 72 75 63 74 2e 0a 20 20 20 20 2a  fo struct..    *
31c0: 2f 0a 20 20 20 20 73 77 69 74 63 68 28 20 78 74  /.    switch( xt
31d0: 79 70 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ype ){.      cas
31e0: 65 20 65 74 50 4f 49 4e 54 45 52 3a 0a 20 20 20  e etPOINTER:.   
31f0: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f       flag_longlo
3200: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72  ng = sizeof(char
3210: 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36 34 29 3b  *)==sizeof(i64);
3220: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f  .        flag_lo
3230: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72  ng = sizeof(char
3240: 2a 29 3d 3d 73 69 7a 65 6f 66 28 6c 6f 6e 67 20  *)==sizeof(long 
3250: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  int);.        /*
3260: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
3270: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
3280: 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 65 20 65   */.      case e
3290: 74 4f 52 44 49 4e 41 4c 3a 0a 20 20 20 20 20 20  tORDINAL:.      
32a0: 63 61 73 65 20 65 74 52 41 44 49 58 3a 0a 20 20  case etRADIX:.  
32b0: 20 20 20 20 20 20 69 66 28 20 69 6e 66 6f 70 2d        if( infop-
32c0: 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53 49  >flags & FLAG_SI
32d0: 47 4e 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20  GNED ){.        
32e0: 20 20 69 36 34 20 76 3b 0a 20 20 20 20 20 20 20    i64 v;.       
32f0: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
3300: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  ){.            v
3310: 20 3d 20 67 65 74 49 6e 74 41 72 67 28 70 41 72   = getIntArg(pAr
3320: 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20  gList);.        
3330: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67    }else if( flag
3340: 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a 20 20 20  _longlong ){.   
3350: 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61 5f           v = va_
3360: 61 72 67 28 61 70 2c 69 36 34 29 3b 0a 20 20 20  arg(ap,i64);.   
3370: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
3380: 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 7b 0a 20 20   flag_long ){.  
3390: 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61            v = va
33a0: 5f 61 72 67 28 61 70 2c 6c 6f 6e 67 20 69 6e 74  _arg(ap,long int
33b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
33c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
33d0: 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e  v = va_arg(ap,in
33e0: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  t);.          }.
33f0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3c            if( v<
3400: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
3410: 20 69 66 28 20 76 3d 3d 53 4d 41 4c 4c 45 53 54   if( v==SMALLEST
3420: 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20 20 20 20  _INT64 ){.      
3430: 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75          longvalu
3440: 65 20 3d 20 28 28 75 36 34 29 31 29 3c 3c 36 33  e = ((u64)1)<<63
3450: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
3460: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
3470: 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 2d     longvalue = -
3480: 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  v;.            }
3490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65  .            pre
34a0: 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20  fix = '-';.     
34b0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
34c0: 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75          longvalu
34d0: 65 20 3d 20 76 3b 0a 20 20 20 20 20 20 20 20 20  e = v;.         
34e0: 20 20 20 69 66 28 20 66 6c 61 67 5f 70 6c 75 73     if( flag_plus
34f0: 73 69 67 6e 20 29 20 20 20 20 20 20 20 20 70 72  sign )        pr
3500: 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20  efix = '+';.    
3510: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 28          else if(
3520: 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20   flag_blanksign 
3530: 29 20 20 70 72 65 66 69 78 20 3d 20 27 20 27 3b  )  prefix = ' ';
3540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
3550: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
3560: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
3570: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   0;.          }.
3580: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
3590: 20 20 20 20 20 20 20 20 20 69 66 28 20 62 41 72           if( bAr
35a0: 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20  gList ){.       
35b0: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
35c0: 20 28 75 36 34 29 67 65 74 49 6e 74 41 72 67 28   (u64)getIntArg(
35d0: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20  pArgList);.     
35e0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66       }else if( f
35f0: 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a  lag_longlong ){.
3600: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
3610: 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61  value = va_arg(a
3620: 70 2c 75 36 34 29 3b 0a 20 20 20 20 20 20 20 20  p,u64);.        
3630: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67    }else if( flag
3640: 5f 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20 20  _long ){.       
3650: 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d       longvalue =
3660: 20 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67   va_arg(ap,unsig
3670: 6e 65 64 20 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20  ned long int);. 
3680: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
3690: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
36a0: 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61  value = va_arg(a
36b0: 70 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  p,unsigned int);
36c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
36d0: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20         prefix = 
36e0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
36f0: 20 20 20 20 20 69 66 28 20 6c 6f 6e 67 76 61 6c       if( longval
3700: 75 65 3d 3d 30 20 29 20 66 6c 61 67 5f 61 6c 74  ue==0 ) flag_alt
3710: 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20 30 3b 0a  ernateform = 0;.
3720: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
3730: 5f 7a 65 72 6f 70 61 64 20 26 26 20 70 72 65 63  _zeropad && prec
3740: 69 73 69 6f 6e 3c 77 69 64 74 68 2d 28 70 72 65  ision<width-(pre
3750: 66 69 78 21 3d 30 29 20 29 7b 0a 20 20 20 20 20  fix!=0) ){.     
3760: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
3770: 20 77 69 64 74 68 2d 28 70 72 65 66 69 78 21 3d   width-(prefix!=
3780: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
3790: 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73        if( precis
37a0: 69 6f 6e 3c 65 74 42 55 46 53 49 5a 45 2d 31 30  ion<etBUFSIZE-10
37b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 4f   ){.          nO
37c0: 75 74 20 3d 20 65 74 42 55 46 53 49 5a 45 3b 0a  ut = etBUFSIZE;.
37d0: 20 20 20 20 20 20 20 20 20 20 7a 4f 75 74 20 3d            zOut =
37e0: 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20 7d 65   buf;.        }e
37f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  lse{.          n
3800: 4f 75 74 20 3d 20 70 72 65 63 69 73 69 6f 6e 20  Out = precision 
3810: 2b 20 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20  + 10;.          
3820: 7a 4f 75 74 20 3d 20 7a 45 78 74 72 61 20 3d 20  zOut = zExtra = 
3830: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 6e  sqlite3Malloc( n
3840: 4f 75 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Out );.         
3850: 20 69 66 28 20 7a 4f 75 74 3d 3d 30 20 29 7b 0a   if( zOut==0 ){.
3860: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 53              setS
3870: 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70 41 63  trAccumError(pAc
3880: 63 75 6d 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f  cum, STRACCUM_NO
3890: 4d 45 4d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  MEM);.          
38a0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
38b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
38c0: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
38d0: 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 3b 0a 20  &zOut[nOut-1];. 
38e0: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
38f0: 3d 3d 65 74 4f 52 44 49 4e 41 4c 20 29 7b 0a 20  ==etORDINAL ){. 
3900: 20 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20           static 
3910: 63 6f 6e 73 74 20 63 68 61 72 20 7a 4f 72 64 5b  const char zOrd[
3920: 5d 20 3d 20 22 74 68 73 74 6e 64 72 64 22 3b 0a  ] = "thstndrd";.
3930: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 20            int x 
3940: 3d 20 28 69 6e 74 29 28 6c 6f 6e 67 76 61 6c 75  = (int)(longvalu
3950: 65 20 25 20 31 30 29 3b 0a 20 20 20 20 20 20 20  e % 10);.       
3960: 20 20 20 69 66 28 20 78 3e 3d 34 20 7c 7c 20 28     if( x>=4 || (
3970: 6c 6f 6e 67 76 61 6c 75 65 2f 31 30 29 25 31 30  longvalue/10)%10
3980: 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==1 ){.         
3990: 20 20 20 78 20 3d 20 30 3b 0a 20 20 20 20 20 20     x = 0;.      
39a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
39b0: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 7a 4f 72  *(--bufpt) = zOr
39c0: 64 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20 20 20 20  d[x*2+1];.      
39d0: 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d      *(--bufpt) =
39e0: 20 7a 4f 72 64 5b 78 2a 32 5d 3b 0a 20 20 20 20   zOrd[x*2];.    
39f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7b 0a      }.        {.
3a00: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
3a10: 63 68 61 72 20 2a 63 73 65 74 20 3d 20 26 61 44  char *cset = &aD
3a20: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
3a30: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
3a40: 20 75 38 20 62 61 73 65 20 3d 20 69 6e 66 6f 70   u8 base = infop
3a50: 2d 3e 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20  ->base;.        
3a60: 20 20 64 6f 7b 20 20 20 20 20 20 20 20 20 20 20    do{           
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a90: 2f 2a 20 43 6f 6e 76 65 72 74 20 74 6f 20 61 73  /* Convert to as
3aa0: 63 69 69 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  cii */.         
3ab0: 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20     *(--bufpt) = 
3ac0: 63 73 65 74 5b 6c 6f 6e 67 76 61 6c 75 65 25 62  cset[longvalue%b
3ad0: 61 73 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  ase];.          
3ae0: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 6c 6f    longvalue = lo
3af0: 6e 67 76 61 6c 75 65 2f 62 61 73 65 3b 0a 20 20  ngvalue/base;.  
3b00: 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
3b10: 6c 6f 6e 67 76 61 6c 75 65 3e 30 20 29 3b 0a 20  longvalue>0 );. 
3b20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3b30: 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28   length = (int)(
3b40: 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 2d 62 75  &zOut[nOut-1]-bu
3b50: 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  fpt);.        fo
3b60: 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2d  r(idx=precision-
3b70: 6c 65 6e 67 74 68 3b 20 69 64 78 3e 30 3b 20 69  length; idx>0; i
3b80: 64 78 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20  dx--){.         
3b90: 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 27 30   *(--bufpt) = '0
3ba0: 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ';              
3bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3bc0: 2a 20 5a 65 72 6f 20 70 61 64 20 2a 2f 0a 20 20  * Zero pad */.  
3bd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3be0: 69 66 28 20 70 72 65 66 69 78 20 29 20 2a 28 2d  if( prefix ) *(-
3bf0: 2d 62 75 66 70 74 29 20 3d 20 70 72 65 66 69 78  -bufpt) = prefix
3c00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3c10: 2f 2a 20 41 64 64 20 73 69 67 6e 20 2a 2f 0a 20  /* Add sign */. 
3c20: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f         if( flag_
3c30: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 26 26  alternateform &&
3c40: 20 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 20 29   infop->prefix )
3c50: 7b 20 20 20 20 20 20 2f 2a 20 41 64 64 20 22 30  {      /* Add "0
3c60: 22 20 6f 72 20 22 30 78 22 20 2a 2f 0a 20 20 20  " or "0x" */.   
3c70: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
3c80: 72 20 2a 70 72 65 3b 0a 20 20 20 20 20 20 20 20  r *pre;.        
3c90: 20 20 63 68 61 72 20 78 3b 0a 20 20 20 20 20 20    char x;.      
3ca0: 20 20 20 20 70 72 65 20 3d 20 26 61 50 72 65 66      pre = &aPref
3cb0: 69 78 5b 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78  ix[infop->prefix
3cc0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ];.          for
3cd0: 28 3b 20 28 78 3d 28 2a 70 72 65 29 29 21 3d 30  (; (x=(*pre))!=0
3ce0: 3b 20 70 72 65 2b 2b 29 20 2a 28 2d 2d 62 75 66  ; pre++) *(--buf
3cf0: 70 74 29 20 3d 20 78 3b 0a 20 20 20 20 20 20 20  pt) = x;.       
3d00: 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74   }.        lengt
3d10: 68 20 3d 20 28 69 6e 74 29 28 26 7a 4f 75 74 5b  h = (int)(&zOut[
3d20: 6e 4f 75 74 2d 31 5d 2d 62 75 66 70 74 29 3b 0a  nOut-1]-bufpt);.
3d30: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3d40: 20 20 20 20 20 63 61 73 65 20 65 74 46 4c 4f 41       case etFLOA
3d50: 54 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  T:.      case et
3d60: 45 58 50 3a 0a 20 20 20 20 20 20 63 61 73 65 20  EXP:.      case 
3d70: 65 74 47 45 4e 45 52 49 43 3a 0a 20 20 20 20 20  etGENERIC:.     
3d80: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
3d90: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61  ){.          rea
3da0: 6c 76 61 6c 75 65 20 3d 20 67 65 74 44 6f 75 62  lvalue = getDoub
3db0: 6c 65 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b  leArg(pArgList);
3dc0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
3dd0: 20 20 20 20 20 20 20 20 20 20 72 65 61 6c 76 61            realva
3de0: 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  lue = va_arg(ap,
3df0: 64 6f 75 62 6c 65 29 3b 0a 20 20 20 20 20 20 20  double);.       
3e00: 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
3e10: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e20: 4f 49 4e 54 0a 20 20 20 20 20 20 20 20 6c 65 6e  OINT.        len
3e30: 67 74 68 20 3d 20 30 3b 0a 23 65 6c 73 65 0a 20  gth = 0;.#else. 
3e40: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
3e50: 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69 73 69  sion<0 ) precisi
3e60: 6f 6e 20 3d 20 36 3b 20 20 20 20 20 20 20 20 20  on = 6;         
3e70: 2f 2a 20 53 65 74 20 64 65 66 61 75 6c 74 20 70  /* Set default p
3e80: 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  recision */.    
3e90: 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75      if( realvalu
3ea0: 65 3c 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20  e<0.0 ){.       
3eb0: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 2d     realvalue = -
3ec0: 72 65 61 6c 76 61 6c 75 65 3b 0a 20 20 20 20 20  realvalue;.     
3ed0: 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d       prefix = '-
3ee0: 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ';.        }else
3ef0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
3f00: 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 20  flag_plussign ) 
3f10: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
3f20: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
3f30: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 62   else if( flag_b
3f40: 6c 61 6e 6b 73 69 67 6e 20 29 20 20 20 20 70 72  lanksign )    pr
3f50: 65 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20  efix = ' ';.    
3f60: 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20        else      
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f80: 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20     prefix = 0;. 
3f90: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3fa0: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45   if( xtype==etGE
3fb0: 4e 45 52 49 43 20 26 26 20 70 72 65 63 69 73 69  NERIC && precisi
3fc0: 6f 6e 3e 30 20 29 20 70 72 65 63 69 73 69 6f 6e  on>0 ) precision
3fd0: 2d 2d 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  --;.        test
3fe0: 63 61 73 65 28 20 70 72 65 63 69 73 69 6f 6e 3e  case( precision>
3ff0: 30 78 66 66 66 20 29 3b 0a 20 20 20 20 20 20 20  0xfff );.       
4000: 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73 69   for(idx=precisi
4010: 6f 6e 26 30 78 66 66 66 2c 20 72 6f 75 6e 64 65  on&0xfff, rounde
4020: 72 3d 30 2e 35 3b 20 69 64 78 3e 30 3b 20 69 64  r=0.5; idx>0; id
4030: 78 2d 2d 2c 20 72 6f 75 6e 64 65 72 2a 3d 30 2e  x--, rounder*=0.
4040: 31 29 7b 7d 0a 20 20 20 20 20 20 20 20 69 66 28  1){}.        if(
4050: 20 78 74 79 70 65 3d 3d 65 74 46 4c 4f 41 54 20   xtype==etFLOAT 
4060: 29 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72  ) realvalue += r
4070: 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20 20 20 20  ounder;.        
4080: 2f 2a 20 4e 6f 72 6d 61 6c 69 7a 65 20 72 65 61  /* Normalize rea
4090: 6c 76 61 6c 75 65 20 74 6f 20 77 69 74 68 69 6e  lvalue to within
40a0: 20 31 30 2e 30 20 3e 20 72 65 61 6c 76 61 6c 75   10.0 > realvalu
40b0: 65 20 3e 3d 20 31 2e 30 20 2a 2f 0a 20 20 20 20  e >= 1.0 */.    
40c0: 20 20 20 20 65 78 70 20 3d 20 30 3b 0a 20 20 20      exp = 0;.   
40d0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
40e0: 49 73 4e 61 4e 28 28 64 6f 75 62 6c 65 29 72 65  IsNaN((double)re
40f0: 61 6c 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20  alvalue) ){.    
4100: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 4e        bufpt = "N
4110: 61 4e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 6c  aN";.          l
4120: 65 6e 67 74 68 20 3d 20 33 3b 0a 20 20 20 20 20  ength = 3;.     
4130: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4140: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
4150: 28 20 72 65 61 6c 76 61 6c 75 65 3e 30 2e 30 20  ( realvalue>0.0 
4160: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 4c 4f 4e  ){.          LON
4170: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 63 61  GDOUBLE_TYPE sca
4180: 6c 65 20 3d 20 31 2e 30 3b 0a 20 20 20 20 20 20  le = 1.0;.      
4190: 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76      while( realv
41a0: 61 6c 75 65 3e 3d 31 65 31 30 30 2a 73 63 61 6c  alue>=1e100*scal
41b0: 65 20 26 26 20 65 78 70 3c 3d 33 35 30 20 29 7b  e && exp<=350 ){
41c0: 20 73 63 61 6c 65 20 2a 3d 20 31 65 31 30 30 3b   scale *= 1e100;
41d0: 65 78 70 2b 3d 31 30 30 3b 7d 0a 20 20 20 20 20  exp+=100;}.     
41e0: 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c       while( real
41f0: 76 61 6c 75 65 3e 3d 31 65 31 30 2a 73 63 61 6c  value>=1e10*scal
4200: 65 20 26 26 20 65 78 70 3c 3d 33 35 30 20 29 7b  e && exp<=350 ){
4210: 20 73 63 61 6c 65 20 2a 3d 20 31 65 31 30 3b 20   scale *= 1e10; 
4220: 65 78 70 2b 3d 31 30 3b 20 7d 0a 20 20 20 20 20  exp+=10; }.     
4230: 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c       while( real
4240: 76 61 6c 75 65 3e 3d 31 30 2e 30 2a 73 63 61 6c  value>=10.0*scal
4250: 65 20 26 26 20 65 78 70 3c 3d 33 35 30 20 29 7b  e && exp<=350 ){
4260: 20 73 63 61 6c 65 20 2a 3d 20 31 30 2e 30 3b 20   scale *= 10.0; 
4270: 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  exp++; }.       
4280: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 2f 3d 20     realvalue /= 
4290: 73 63 61 6c 65 3b 0a 20 20 20 20 20 20 20 20 20  scale;.         
42a0: 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75   while( realvalu
42b0: 65 3c 31 65 2d 38 20 29 7b 20 72 65 61 6c 76 61  e<1e-8 ){ realva
42c0: 6c 75 65 20 2a 3d 20 31 65 38 3b 20 65 78 70 2d  lue *= 1e8; exp-
42d0: 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  =8; }.          
42e0: 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65  while( realvalue
42f0: 3c 31 2e 30 20 29 7b 20 72 65 61 6c 76 61 6c 75  <1.0 ){ realvalu
4300: 65 20 2a 3d 20 31 30 2e 30 3b 20 65 78 70 2d 2d  e *= 10.0; exp--
4310: 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ; }.          if
4320: 28 20 65 78 70 3e 33 35 30 20 29 7b 0a 20 20 20  ( exp>350 ){.   
4330: 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d           bufpt =
4340: 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20 20 20   buf;.          
4350: 20 20 62 75 66 5b 30 5d 20 3d 20 70 72 65 66 69    buf[0] = prefi
4360: 78 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  x;.            m
4370: 65 6d 63 70 79 28 62 75 66 2b 28 70 72 65 66 69  emcpy(buf+(prefi
4380: 78 21 3d 30 29 2c 22 49 6e 66 22 2c 34 29 3b 0a  x!=0),"Inf",4);.
4390: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67              leng
43a0: 74 68 20 3d 20 33 2b 28 70 72 65 66 69 78 21 3d  th = 3+(prefix!=
43b0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
43c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
43d0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
43e0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66       bufpt = buf
43f0: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20  ;.        /*.   
4400: 20 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20 66       ** If the f
4410: 69 65 6c 64 20 74 79 70 65 20 69 73 20 65 74 47  ield type is etG
4420: 45 4e 45 52 49 43 2c 20 74 68 65 6e 20 63 6f 6e  ENERIC, then con
4430: 76 65 72 74 20 74 6f 20 65 69 74 68 65 72 20 65  vert to either e
4440: 74 45 58 50 0a 20 20 20 20 20 20 20 20 2a 2a 20  tEXP.        ** 
4450: 6f 72 20 65 74 46 4c 4f 41 54 2c 20 61 73 20 61  or etFLOAT, as a
4460: 70 70 72 6f 70 72 69 61 74 65 2e 0a 20 20 20 20  ppropriate..    
4470: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
4480: 66 28 20 78 74 79 70 65 21 3d 65 74 46 4c 4f 41  f( xtype!=etFLOA
4490: 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  T ){.          r
44a0: 65 61 6c 76 61 6c 75 65 20 2b 3d 20 72 6f 75 6e  ealvalue += roun
44b0: 64 65 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69  der;.          i
44c0: 66 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 30  f( realvalue>=10
44d0: 2e 30 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20  .0 ){ realvalue 
44e0: 2a 3d 20 30 2e 31 3b 20 65 78 70 2b 2b 3b 20 7d  *= 0.1; exp++; }
44f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4500: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74     if( xtype==et
4510: 47 45 4e 45 52 49 43 20 29 7b 0a 20 20 20 20 20  GENERIC ){.     
4520: 20 20 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20       flag_rtz = 
4530: 21 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66  !flag_alternatef
4540: 6f 72 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 69  orm;.          i
4550: 66 28 20 65 78 70 3c 2d 34 20 7c 7c 20 65 78 70  f( exp<-4 || exp
4560: 3e 70 72 65 63 69 73 69 6f 6e 20 29 7b 0a 20 20  >precision ){.  
4570: 20 20 20 20 20 20 20 20 20 20 78 74 79 70 65 20            xtype 
4580: 3d 20 65 74 45 58 50 3b 0a 20 20 20 20 20 20 20  = etEXP;.       
4590: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
45a0: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
45b0: 3d 20 70 72 65 63 69 73 69 6f 6e 20 2d 20 65 78  = precision - ex
45c0: 70 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78  p;.            x
45d0: 74 79 70 65 20 3d 20 65 74 46 4c 4f 41 54 3b 0a  type = etFLOAT;.
45e0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
45f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4600: 20 20 20 20 20 66 6c 61 67 5f 72 74 7a 20 3d 20       flag_rtz = 
4610: 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20  flag_altform2;. 
4620: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4630: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 45 58   if( xtype==etEX
4640: 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65  P ){.          e
4650: 32 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  2 = 0;.        }
4660: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
4670: 65 32 20 3d 20 65 78 70 3b 0a 20 20 20 20 20 20  e2 = exp;.      
4680: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
4690: 4d 41 58 28 65 32 2c 30 29 2b 28 69 36 34 29 70  MAX(e2,0)+(i64)p
46a0: 72 65 63 69 73 69 6f 6e 2b 28 69 36 34 29 77 69  recision+(i64)wi
46b0: 64 74 68 20 3e 20 65 74 42 55 46 53 49 5a 45 20  dth > etBUFSIZE 
46c0: 2d 20 31 35 20 29 7b 0a 20 20 20 20 20 20 20 20  - 15 ){.        
46d0: 20 20 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61    bufpt = zExtra
46e0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
46f0: 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28  = sqlite3Malloc(
4700: 20 4d 41 58 28 65 32 2c 30 29 2b 28 69 36 34 29   MAX(e2,0)+(i64)
4710: 70 72 65 63 69 73 69 6f 6e 2b 28 69 36 34 29 77  precision+(i64)w
4720: 69 64 74 68 2b 31 35 20 29 3b 0a 20 20 20 20 20  idth+15 );.     
4730: 20 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d       if( bufpt==
4740: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
4750: 20 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f   setStrAccumErro
4760: 72 28 70 41 63 63 75 6d 2c 20 53 54 52 41 43 43  r(pAccum, STRACC
4770: 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 20  UM_NOMEM);.     
4780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
4790: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
47a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 4f 75     }.        zOu
47b0: 74 20 3d 20 62 75 66 70 74 3b 0a 20 20 20 20 20  t = bufpt;.     
47c0: 20 20 20 6e 73 64 20 3d 20 31 36 20 2b 20 66 6c     nsd = 16 + fl
47d0: 61 67 5f 61 6c 74 66 6f 72 6d 32 2a 31 30 3b 0a  ag_altform2*10;.
47e0: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 64 70 20          flag_dp 
47f0: 3d 20 28 70 72 65 63 69 73 69 6f 6e 3e 30 20 3f  = (precision>0 ?
4800: 31 3a 30 29 20 7c 20 66 6c 61 67 5f 61 6c 74 65  1:0) | flag_alte
4810: 72 6e 61 74 65 66 6f 72 6d 20 7c 20 66 6c 61 67  rnateform | flag
4820: 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20 20 20 20  _altform2;.     
4830: 20 20 20 2f 2a 20 54 68 65 20 73 69 67 6e 20 69     /* The sign i
4840: 6e 20 66 72 6f 6e 74 20 6f 66 20 74 68 65 20 6e  n front of the n
4850: 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  umber */.       
4860: 20 69 66 28 20 70 72 65 66 69 78 20 29 7b 0a 20   if( prefix ){. 
4870: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
4880: 2b 2b 29 20 3d 20 70 72 65 66 69 78 3b 0a 20 20  ++) = prefix;.  
4890: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
48a0: 2f 2a 20 44 69 67 69 74 73 20 70 72 69 6f 72 20  /* Digits prior 
48b0: 74 6f 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  to the decimal p
48c0: 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  oint */.        
48d0: 69 66 28 20 65 32 3c 30 20 29 7b 0a 20 20 20 20  if( e2<0 ){.    
48e0: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
48f0: 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   = '0';.        
4900: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4910: 20 66 6f 72 28 3b 20 65 32 3e 3d 30 3b 20 65 32   for(; e2>=0; e2
4920: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  --){.           
4930: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 65 74   *(bufpt++) = et
4940: 5f 67 65 74 64 69 67 69 74 28 26 72 65 61 6c 76  _getdigit(&realv
4950: 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20 20  alue,&nsd);.    
4960: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4970: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  }.        /* The
4980: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a   decimal point *
4990: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66 6c  /.        if( fl
49a0: 61 67 5f 64 70 20 29 7b 0a 20 20 20 20 20 20 20  ag_dp ){.       
49b0: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20     *(bufpt++) = 
49c0: 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  '.';.        }. 
49d0: 20 20 20 20 20 20 20 2f 2a 20 22 30 22 20 64 69         /* "0" di
49e0: 67 69 74 73 20 61 66 74 65 72 20 74 68 65 20 64  gits after the d
49f0: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 62 75 74  ecimal point but
4a00: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
4a10: 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 69 67  t.        ** sig
4a20: 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 20 6f  nificant digit o
4a30: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  f the number */.
4a40: 20 20 20 20 20 20 20 20 66 6f 72 28 65 32 2b 2b          for(e2++
4a50: 3b 20 65 32 3c 30 3b 20 70 72 65 63 69 73 69 6f  ; e2<0; precisio
4a60: 6e 2d 2d 2c 20 65 32 2b 2b 29 7b 0a 20 20 20 20  n--, e2++){.    
4a70: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 72        assert( pr
4a80: 65 63 69 73 69 6f 6e 3e 30 20 29 3b 0a 20 20 20  ecision>0 );.   
4a90: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4aa0: 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20  ) = '0';.       
4ab0: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69   }.        /* Si
4ac0: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
4ad0: 20 61 66 74 65 72 20 74 68 65 20 64 65 63 69 6d   after the decim
4ae0: 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20  al point */.    
4af0: 20 20 20 20 77 68 69 6c 65 28 20 28 70 72 65 63      while( (prec
4b00: 69 73 69 6f 6e 2d 2d 29 3e 30 20 29 7b 0a 20 20  ision--)>0 ){.  
4b10: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
4b20: 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74  +) = et_getdigit
4b30: 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64  (&realvalue,&nsd
4b40: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
4b50: 20 20 20 20 20 2f 2a 20 52 65 6d 6f 76 65 20 74       /* Remove t
4b60: 72 61 69 6c 69 6e 67 20 7a 65 72 6f 73 20 61 6e  railing zeros an
4b70: 64 20 74 68 65 20 22 2e 22 20 69 66 20 6e 6f 20  d the "." if no 
4b80: 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 20 74 68  digits follow th
4b90: 65 20 22 2e 22 20 2a 2f 0a 20 20 20 20 20 20 20  e "." */.       
4ba0: 20 69 66 28 20 66 6c 61 67 5f 72 74 7a 20 26 26   if( flag_rtz &&
4bb0: 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20   flag_dp ){.    
4bc0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 62 75 66        while( buf
4bd0: 70 74 5b 2d 31 5d 3d 3d 27 30 27 20 29 20 2a 28  pt[-1]=='0' ) *(
4be0: 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a 20 20  --bufpt) = 0;.  
4bf0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
4c00: 62 75 66 70 74 3e 7a 4f 75 74 20 29 3b 0a 20 20  bufpt>zOut );.  
4c10: 20 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70          if( bufp
4c20: 74 5b 2d 31 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20  t[-1]=='.' ){.  
4c30: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c            if( fl
4c40: 61 67 5f 61 6c 74 66 6f 72 6d 32 20 29 7b 0a 20  ag_altform2 ){. 
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62               *(b
4c60: 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20  ufpt++) = '0';. 
4c70: 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65             }else
4c80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4c90: 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b 0a  *(--bufpt) = 0;.
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
4cb0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4cc0: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 41    }.        /* A
4cd0: 64 64 20 74 68 65 20 22 65 4e 4e 4e 22 20 73 75  dd the "eNNN" su
4ce0: 66 66 69 78 20 2a 2f 0a 20 20 20 20 20 20 20 20  ffix */.        
4cf0: 69 66 28 20 78 74 79 70 65 3d 3d 65 74 45 58 50  if( xtype==etEXP
4d00: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28   ){.          *(
4d10: 62 75 66 70 74 2b 2b 29 20 3d 20 61 44 69 67 69  bufpt++) = aDigi
4d20: 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61 72 73 65  ts[infop->charse
4d30: 74 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t];.          if
4d40: 28 20 65 78 70 3c 30 20 29 7b 0a 20 20 20 20 20  ( exp<0 ){.     
4d50: 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b         *(bufpt++
4d60: 29 20 3d 20 27 2d 27 3b 20 65 78 70 20 3d 20 2d  ) = '-'; exp = -
4d70: 65 78 70 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  exp;.          }
4d80: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
4d90: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27    *(bufpt++) = '
4da0: 2b 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  +';.          }.
4db0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 65 78            if( ex
4dc0: 70 3e 3d 31 30 30 20 29 7b 0a 20 20 20 20 20 20  p>=100 ){.      
4dd0: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
4de0: 20 3d 20 28 63 68 61 72 29 28 28 65 78 70 2f 31   = (char)((exp/1
4df0: 30 30 29 2b 27 30 27 29 3b 20 20 20 20 20 20 20  00)+'0');       
4e00: 20 2f 2a 20 31 30 30 27 73 20 64 69 67 69 74 20   /* 100's digit 
4e10: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  */.            e
4e20: 78 70 20 25 3d 20 31 30 30 3b 0a 20 20 20 20 20  xp %= 100;.     
4e30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
4e40: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 63   *(bufpt++) = (c
4e50: 68 61 72 29 28 65 78 70 2f 31 30 2b 27 30 27 29  har)(exp/10+'0')
4e60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4e70: 20 31 30 27 73 20 64 69 67 69 74 20 2a 2f 0a 20   10's digit */. 
4e80: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
4e90: 2b 2b 29 20 3d 20 28 63 68 61 72 29 28 65 78 70  ++) = (char)(exp
4ea0: 25 31 30 2b 27 30 27 29 3b 20 20 20 20 20 20 20  %10+'0');       
4eb0: 20 20 20 20 20 20 2f 2a 20 31 27 73 20 64 69 67        /* 1's dig
4ec0: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  it */.        }.
4ed0: 20 20 20 20 20 20 20 20 2a 62 75 66 70 74 20 3d          *bufpt =
4ee0: 20 30 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20   0;..        /* 
4ef0: 54 68 65 20 63 6f 6e 76 65 72 74 65 64 20 6e 75  The converted nu
4f00: 6d 62 65 72 20 69 73 20 69 6e 20 62 75 66 5b 5d  mber is in buf[]
4f10: 20 61 6e 64 20 7a 65 72 6f 20 74 65 72 6d 69 6e   and zero termin
4f20: 61 74 65 64 2e 20 4f 75 74 70 75 74 20 69 74 2e  ated. Output it.
4f30: 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e 6f 74 65  .        ** Note
4f40: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 62 65 72   that the number
4f50: 20 69 73 20 69 6e 20 74 68 65 20 75 73 75 61 6c   is in the usual
4f60: 20 6f 72 64 65 72 2c 20 6e 6f 74 20 72 65 76 65   order, not reve
4f70: 72 73 65 64 20 61 73 20 77 69 74 68 0a 20 20 20  rsed as with.   
4f80: 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 20       ** integer 
4f90: 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 2a 2f 0a  conversions. */.
4fa0: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
4fb0: 20 28 69 6e 74 29 28 62 75 66 70 74 2d 7a 4f 75   (int)(bufpt-zOu
4fc0: 74 29 3b 0a 20 20 20 20 20 20 20 20 62 75 66 70  t);.        bufp
4fd0: 74 20 3d 20 7a 4f 75 74 3b 0a 0a 20 20 20 20 20  t = zOut;..     
4fe0: 20 20 20 2f 2a 20 53 70 65 63 69 61 6c 20 63 61     /* Special ca
4ff0: 73 65 3a 20 20 41 64 64 20 6c 65 61 64 69 6e 67  se:  Add leading
5000: 20 7a 65 72 6f 73 20 69 66 20 74 68 65 20 66 6c   zeros if the fl
5010: 61 67 5f 7a 65 72 6f 70 61 64 20 66 6c 61 67 20  ag_zeropad flag 
5020: 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  is.        ** se
5030: 74 20 61 6e 64 20 77 65 20 61 72 65 20 6e 6f 74  t and we are not
5040: 20 6c 65 66 74 20 6a 75 73 74 69 66 69 65 64 20   left justified 
5050: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 66  */.        if( f
5060: 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26 26 20 21  lag_zeropad && !
5070: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79  flag_leftjustify
5080: 20 26 26 20 6c 65 6e 67 74 68 20 3c 20 77 69 64   && length < wid
5090: 74 68 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  th){.          i
50a0: 6e 74 20 69 3b 0a 20 20 20 20 20 20 20 20 20 20  nt i;.          
50b0: 69 6e 74 20 6e 50 61 64 20 3d 20 77 69 64 74 68  int nPad = width
50c0: 20 2d 20 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20   - length;.     
50d0: 20 20 20 20 20 66 6f 72 28 69 3d 77 69 64 74 68       for(i=width
50e0: 3b 20 69 3e 3d 6e 50 61 64 3b 20 69 2d 2d 29 7b  ; i>=nPad; i--){
50f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66  .            buf
5100: 70 74 5b 69 5d 20 3d 20 62 75 66 70 74 5b 69 2d  pt[i] = bufpt[i-
5110: 6e 50 61 64 5d 3b 0a 20 20 20 20 20 20 20 20 20  nPad];.         
5120: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d   }.          i =
5130: 20 70 72 65 66 69 78 21 3d 30 3b 0a 20 20 20 20   prefix!=0;.    
5140: 20 20 20 20 20 20 77 68 69 6c 65 28 20 6e 50 61        while( nPa
5150: 64 2d 2d 20 29 20 62 75 66 70 74 5b 69 2b 2b 5d  d-- ) bufpt[i++]
5160: 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   = '0';.        
5170: 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68    length = width
5180: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64  ;.        }.#end
5190: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
51a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
51b0: 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 20 20  ING_POINT) */.  
51c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
51d0: 20 20 20 63 61 73 65 20 65 74 53 49 5a 45 3a 0a     case etSIZE:.
51e0: 20 20 20 20 20 20 20 20 69 66 28 20 21 62 41 72          if( !bAr
51f0: 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20  gList ){.       
5200: 20 20 20 2a 28 76 61 5f 61 72 67 28 61 70 2c 69     *(va_arg(ap,i
5210: 6e 74 2a 29 29 20 3d 20 70 41 63 63 75 6d 2d 3e  nt*)) = pAccum->
5220: 6e 43 68 61 72 3b 0a 20 20 20 20 20 20 20 20 7d  nChar;.        }
5230: 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20  .        length 
5240: 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20  = width = 0;.   
5250: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5260: 20 20 63 61 73 65 20 65 74 50 45 52 43 45 4e 54    case etPERCENT
5270: 3a 0a 20 20 20 20 20 20 20 20 62 75 66 5b 30 5d  :.        buf[0]
5280: 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20 20 20   = '%';.        
5290: 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20  bufpt = buf;.   
52a0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 31 3b       length = 1;
52b0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
52c0: 20 20 20 20 20 20 63 61 73 65 20 65 74 43 48 41        case etCHA
52d0: 52 58 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20  RX:.        if( 
52e0: 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20  bArgList ){.    
52f0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 67 65        bufpt = ge
5300: 74 54 65 78 74 41 72 67 28 70 41 72 67 4c 69 73  tTextArg(pArgLis
5310: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 20  t);.          c 
5320: 3d 20 62 75 66 70 74 20 3f 20 62 75 66 70 74 5b  = bufpt ? bufpt[
5330: 30 5d 20 3a 20 30 3b 0a 20 20 20 20 20 20 20 20  0] : 0;.        
5340: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
5350: 20 63 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69   c = va_arg(ap,i
5360: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nt);.        }. 
5370: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
5380: 73 69 6f 6e 3e 31 20 29 7b 0a 20 20 20 20 20 20  sion>1 ){.      
5390: 20 20 20 20 77 69 64 74 68 20 2d 3d 20 70 72 65      width -= pre
53a0: 63 69 73 69 6f 6e 2d 31 3b 0a 20 20 20 20 20 20  cision-1;.      
53b0: 20 20 20 20 69 66 28 20 77 69 64 74 68 3e 31 20      if( width>1 
53c0: 26 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73  && !flag_leftjus
53d0: 74 69 66 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tify ){.        
53e0: 20 20 20 20 73 71 6c 69 74 65 33 41 70 70 65 6e      sqlite3Appen
53f0: 64 43 68 61 72 28 70 41 63 63 75 6d 2c 20 77 69  dChar(pAccum, wi
5400: 64 74 68 2d 31 2c 20 27 20 27 29 3b 0a 20 20 20  dth-1, ' ');.   
5410: 20 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d           width =
5420: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   0;.          }.
5430: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5440: 33 41 70 70 65 6e 64 43 68 61 72 28 70 41 63 63  3AppendChar(pAcc
5450: 75 6d 2c 20 70 72 65 63 69 73 69 6f 6e 2d 31 2c  um, precision-1,
5460: 20 63 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   c);.        }. 
5470: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
5480: 31 3b 0a 20 20 20 20 20 20 20 20 62 75 66 5b 30  1;.        buf[0
5490: 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 62  ] = c;.        b
54a0: 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20  ufpt = buf;.    
54b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
54c0: 20 63 61 73 65 20 65 74 53 54 52 49 4e 47 3a 0a   case etSTRING:.
54d0: 20 20 20 20 20 20 63 61 73 65 20 65 74 44 59 4e        case etDYN
54e0: 53 54 52 49 4e 47 3a 0a 20 20 20 20 20 20 20 20  STRING:.        
54f0: 69 66 28 20 62 41 72 67 4c 69 73 74 20 29 7b 0a  if( bArgList ){.
5500: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
5510: 3d 20 67 65 74 54 65 78 74 41 72 67 28 70 41 72  = getTextArg(pAr
5520: 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20  gList);.        
5530: 20 20 78 74 79 70 65 20 3d 20 65 74 53 54 52 49    xtype = etSTRI
5540: 4e 47 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  NG;.        }els
5550: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  e{.          buf
5560: 70 74 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 63  pt = va_arg(ap,c
5570: 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 7d  har*);.        }
5580: 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 75 66  .        if( buf
5590: 70 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  pt==0 ){.       
55a0: 20 20 20 62 75 66 70 74 20 3d 20 22 22 3b 0a 20     bufpt = "";. 
55b0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
55c0: 20 78 74 79 70 65 3d 3d 65 74 44 59 4e 53 54 52   xtype==etDYNSTR
55d0: 49 4e 47 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ING ){.         
55e0: 20 7a 45 78 74 72 61 20 3d 20 62 75 66 70 74 3b   zExtra = bufpt;
55f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5600: 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e     if( precision
5610: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  >=0 ){.         
5620: 20 66 6f 72 28 6c 65 6e 67 74 68 3d 30 3b 20 6c   for(length=0; l
5630: 65 6e 67 74 68 3c 70 72 65 63 69 73 69 6f 6e 20  ength<precision 
5640: 26 26 20 62 75 66 70 74 5b 6c 65 6e 67 74 68 5d  && bufpt[length]
5650: 3b 20 6c 65 6e 67 74 68 2b 2b 29 7b 7d 0a 20 20  ; length++){}.  
5660: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
5670: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
5680: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
5690: 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20  bufpt);.        
56a0: 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  }.        break;
56b0: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53 51  .      case etSQ
56c0: 4c 45 53 43 41 50 45 3a 20 20 20 20 20 20 20 20  LESCAPE:        
56d0: 20 20 20 2f 2a 20 45 73 63 61 70 65 20 27 20 63     /* Escape ' c
56e0: 68 61 72 61 63 74 65 72 73 20 2a 2f 0a 20 20 20  haracters */.   
56f0: 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 53 43     case etSQLESC
5700: 41 50 45 32 3a 20 20 20 20 20 20 20 20 20 20 2f  APE2:          /
5710: 2a 20 45 73 63 61 70 65 20 27 20 61 6e 64 20 65  * Escape ' and e
5720: 6e 63 6c 6f 73 65 20 69 6e 20 27 2e 2e 2e 27 20  nclose in '...' 
5730: 2a 2f 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  */.      case et
5740: 53 51 4c 45 53 43 41 50 45 33 3a 20 7b 20 20 20  SQLESCAPE3: {   
5750: 20 20 20 20 20 2f 2a 20 45 73 63 61 70 65 20 22       /* Escape "
5760: 20 63 68 61 72 61 63 74 65 72 73 20 2a 2f 0a 20   characters */. 
5770: 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c         int i, j,
5780: 20 6b 2c 20 6e 2c 20 69 73 6e 75 6c 6c 3b 0a 20   k, n, isnull;. 
5790: 20 20 20 20 20 20 20 69 6e 74 20 6e 65 65 64 51         int needQ
57a0: 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20 63 68  uote;.        ch
57b0: 61 72 20 63 68 3b 0a 20 20 20 20 20 20 20 20 63  ar ch;.        c
57c0: 68 61 72 20 71 20 3d 20 28 28 78 74 79 70 65 3d  har q = ((xtype=
57d0: 3d 65 74 53 51 4c 45 53 43 41 50 45 33 29 3f 27  =etSQLESCAPE3)?'
57e0: 22 27 3a 27 5c 27 27 29 3b 20 20 20 2f 2a 20 51  "':'\'');   /* Q
57f0: 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 20 2a  uote character *
5800: 2f 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  /.        char *
5810: 65 73 63 61 72 67 3b 0a 0a 20 20 20 20 20 20 20  escarg;..       
5820: 20 69 66 28 20 62 41 72 67 4c 69 73 74 20 29 7b   if( bArgList ){
5830: 0a 20 20 20 20 20 20 20 20 20 20 65 73 63 61 72  .          escar
5840: 67 20 3d 20 67 65 74 54 65 78 74 41 72 67 28 70  g = getTextArg(p
5850: 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20  ArgList);.      
5860: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
5870: 20 20 20 65 73 63 61 72 67 20 3d 20 76 61 5f 61     escarg = va_a
5880: 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20  rg(ap,char*);.  
5890: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
58a0: 69 73 6e 75 6c 6c 20 3d 20 65 73 63 61 72 67 3d  isnull = escarg=
58b0: 3d 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  =0;.        if( 
58c0: 69 73 6e 75 6c 6c 20 29 20 65 73 63 61 72 67 20  isnull ) escarg 
58d0: 3d 20 28 78 74 79 70 65 3d 3d 65 74 53 51 4c 45  = (xtype==etSQLE
58e0: 53 43 41 50 45 32 20 3f 20 22 4e 55 4c 4c 22 20  SCAPE2 ? "NULL" 
58f0: 3a 20 22 28 4e 55 4c 4c 29 22 29 3b 0a 20 20 20  : "(NULL)");.   
5900: 20 20 20 20 20 6b 20 3d 20 70 72 65 63 69 73 69       k = precisi
5910: 6f 6e 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  on;.        for(
5920: 69 3d 6e 3d 30 3b 20 6b 21 3d 30 20 26 26 20 28  i=n=0; k!=0 && (
5930: 63 68 3d 65 73 63 61 72 67 5b 69 5d 29 21 3d 30  ch=escarg[i])!=0
5940: 3b 20 69 2b 2b 2c 20 6b 2d 2d 29 7b 0a 20 20 20  ; i++, k--){.   
5950: 20 20 20 20 20 20 20 69 66 28 20 63 68 3d 3d 71         if( ch==q
5960: 20 29 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 20   )  n++;.       
5970: 20 7d 0a 20 20 20 20 20 20 20 20 6e 65 65 64 51   }.        needQ
5980: 75 6f 74 65 20 3d 20 21 69 73 6e 75 6c 6c 20 26  uote = !isnull &
5990: 26 20 78 74 79 70 65 3d 3d 65 74 53 51 4c 45 53  & xtype==etSQLES
59a0: 43 41 50 45 32 3b 0a 20 20 20 20 20 20 20 20 6e  CAPE2;.        n
59b0: 20 2b 3d 20 69 20 2b 20 33 3b 0a 20 20 20 20 20   += i + 3;.     
59c0: 20 20 20 69 66 28 20 6e 3e 65 74 42 55 46 53 49     if( n>etBUFSI
59d0: 5a 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ZE ){.          
59e0: 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d  bufpt = zExtra =
59f0: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20   sqlite3Malloc( 
5a00: 6e 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  n );.          i
5a10: 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20  f( bufpt==0 ){. 
5a20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 53 74             setSt
5a30: 72 41 63 63 75 6d 45 72 72 6f 72 28 70 41 63 63  rAccumError(pAcc
5a40: 75 6d 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  um, STRACCUM_NOM
5a50: 45 4d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  EM);.           
5a60: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
5a70: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
5a80: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75  se{.          bu
5a90: 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20  fpt = buf;.     
5aa0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6a 20 3d     }.        j =
5ab0: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
5ac0: 6e 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 70  needQuote ) bufp
5ad0: 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20  t[j++] = q;.    
5ae0: 20 20 20 20 6b 20 3d 20 69 3b 0a 20 20 20 20 20      k = i;.     
5af0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6b 3b     for(i=0; i<k;
5b00: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
5b10: 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68   bufpt[j++] = ch
5b20: 20 3d 20 65 73 63 61 72 67 5b 69 5d 3b 0a 20 20   = escarg[i];.  
5b30: 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d 3d          if( ch==
5b40: 71 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d  q ) bufpt[j++] =
5b50: 20 63 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   ch;.        }. 
5b60: 20 20 20 20 20 20 20 69 66 28 20 6e 65 65 64 51         if( needQ
5b70: 75 6f 74 65 20 29 20 62 75 66 70 74 5b 6a 2b 2b  uote ) bufpt[j++
5b80: 5d 20 3d 20 71 3b 0a 20 20 20 20 20 20 20 20 62  ] = q;.        b
5b90: 75 66 70 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20  ufpt[j] = 0;.   
5ba0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 6a 3b       length = j;
5bb0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  .        /* The 
5bc0: 70 72 65 63 69 73 69 6f 6e 20 69 6e 20 25 71 20  precision in %q 
5bd0: 61 6e 64 20 25 51 20 6d 65 61 6e 73 20 68 6f 77  and %Q means how
5be0: 20 6d 61 6e 79 20 69 6e 70 75 74 20 63 68 61 72   many input char
5bf0: 61 63 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  acters to.      
5c00: 20 20 2a 2a 20 63 6f 6e 73 75 6d 65 2c 20 6e 6f    ** consume, no
5c10: 74 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  t the length of 
5c20: 74 68 65 20 6f 75 74 70 75 74 2e 2e 2e 0a 20 20  the output....  
5c30: 20 20 20 20 20 20 2a 2a 20 69 66 28 20 70 72 65        ** if( pre
5c40: 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65  cision>=0 && pre
5c50: 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20  cision<length ) 
5c60: 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73 69  length = precisi
5c70: 6f 6e 3b 20 2a 2f 0a 20 20 20 20 20 20 20 20 62  on; */.        b
5c80: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
5c90: 20 20 20 20 63 61 73 65 20 65 74 54 4f 4b 45 4e      case etTOKEN
5ca0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 54 6f 6b 65  : {.        Toke
5cb0: 6e 20 2a 70 54 6f 6b 65 6e 20 3d 20 76 61 5f 61  n *pToken = va_a
5cc0: 72 67 28 61 70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  rg(ap, Token*);.
5cd0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5ce0: 62 41 72 67 4c 69 73 74 3d 3d 30 20 29 3b 0a 20  bArgList==0 );. 
5cf0: 20 20 20 20 20 20 20 69 66 28 20 70 54 6f 6b 65         if( pToke
5d00: 6e 20 26 26 20 70 54 6f 6b 65 6e 2d 3e 6e 20 29  n && pToken->n )
5d10: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
5d20: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
5d30: 64 28 70 41 63 63 75 6d 2c 20 28 63 6f 6e 73 74  d(pAccum, (const
5d40: 20 63 68 61 72 2a 29 70 54 6f 6b 65 6e 2d 3e 7a   char*)pToken->z
5d50: 2c 20 70 54 6f 6b 65 6e 2d 3e 6e 29 3b 0a 20 20  , pToken->n);.  
5d60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5d70: 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d  length = width =
5d80: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
5d90: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
5da0: 20 63 61 73 65 20 65 74 53 52 43 4c 49 53 54 3a   case etSRCLIST:
5db0: 20 7b 0a 20 20 20 20 20 20 20 20 53 72 63 4c 69   {.        SrcLi
5dc0: 73 74 20 2a 70 53 72 63 20 3d 20 76 61 5f 61 72  st *pSrc = va_ar
5dd0: 67 28 61 70 2c 20 53 72 63 4c 69 73 74 2a 29 3b  g(ap, SrcList*);
5de0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d  .        int k =
5df0: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
5e00: 3b 0a 20 20 20 20 20 20 20 20 73 74 72 75 63 74  ;.        struct
5e10: 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 70   SrcList_item *p
5e20: 49 74 65 6d 20 3d 20 26 70 53 72 63 2d 3e 61 5b  Item = &pSrc->a[
5e30: 6b 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  k];.        asse
5e40: 72 74 28 20 62 41 72 67 4c 69 73 74 3d 3d 30 20  rt( bArgList==0 
5e50: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5e60: 74 28 20 6b 3e 3d 30 20 26 26 20 6b 3c 70 53 72  t( k>=0 && k<pSr
5e70: 63 2d 3e 6e 53 72 63 20 29 3b 0a 20 20 20 20 20  c->nSrc );.     
5e80: 20 20 20 69 66 28 20 70 49 74 65 6d 2d 3e 7a 44     if( pItem->zD
5e90: 61 74 61 62 61 73 65 20 29 7b 0a 20 20 20 20 20  atabase ){.     
5ea0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
5eb0: 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 70 41  ccumAppendAll(pA
5ec0: 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e 7a 44 61  ccum, pItem->zDa
5ed0: 74 61 62 61 73 65 29 3b 0a 20 20 20 20 20 20 20  tabase);.       
5ee0: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
5ef0: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
5f00: 20 22 2e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20   ".", 1);.      
5f10: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
5f20: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
5f30: 64 41 6c 6c 28 70 41 63 63 75 6d 2c 20 70 49 74  dAll(pAccum, pIt
5f40: 65 6d 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  em->zName);.    
5f50: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64      length = wid
5f60: 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  th = 0;.        
5f70: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5f80: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
5f90: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5fa0: 78 74 79 70 65 3d 3d 65 74 49 4e 56 41 4c 49 44  xtype==etINVALID
5fb0: 20 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75   );.        retu
5fc0: 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
5fd0: 7d 2f 2a 20 45 6e 64 20 73 77 69 74 63 68 20 6f  }/* End switch o
5fe0: 76 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 74  ver the format t
5ff0: 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20  ype */.    /*.  
6000: 20 20 2a 2a 20 54 68 65 20 74 65 78 74 20 6f 66    ** The text of
6010: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
6020: 69 73 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  is pointed to by
6030: 20 22 62 75 66 70 74 22 20 61 6e 64 20 69 73 0a   "bufpt" and is.
6040: 20 20 20 20 2a 2a 20 22 6c 65 6e 67 74 68 22 20      ** "length" 
6050: 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
6060: 20 20 54 68 65 20 66 69 65 6c 64 20 77 69 64 74    The field widt
6070: 68 20 69 73 20 22 77 69 64 74 68 22 2e 20 20 44  h is "width".  D
6080: 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74  o.    ** the out
6090: 70 75 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  put..    */.    
60a0: 77 69 64 74 68 20 2d 3d 20 6c 65 6e 67 74 68 3b  width -= length;
60b0: 0a 20 20 20 20 69 66 28 20 77 69 64 74 68 3e 30  .    if( width>0
60c0: 20 26 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75   && !flag_leftju
60d0: 73 74 69 66 79 20 29 20 73 71 6c 69 74 65 33 41  stify ) sqlite3A
60e0: 70 70 65 6e 64 43 68 61 72 28 70 41 63 63 75 6d  ppendChar(pAccum
60f0: 2c 20 77 69 64 74 68 2c 20 27 20 27 29 3b 0a 20  , width, ' ');. 
6100: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
6110: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
6120: 20 62 75 66 70 74 2c 20 6c 65 6e 67 74 68 29 3b   bufpt, length);
6130: 0a 20 20 20 20 69 66 28 20 77 69 64 74 68 3e 30  .    if( width>0
6140: 20 26 26 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73   && flag_leftjus
6150: 74 69 66 79 20 29 20 73 71 6c 69 74 65 33 41 70  tify ) sqlite3Ap
6160: 70 65 6e 64 43 68 61 72 28 70 41 63 63 75 6d 2c  pendChar(pAccum,
6170: 20 77 69 64 74 68 2c 20 27 20 27 29 3b 0a 0a 20   width, ' ');.. 
6180: 20 20 20 69 66 28 20 7a 45 78 74 72 61 20 29 7b     if( zExtra ){
6190: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
61a0: 46 72 65 65 28 70 41 63 63 75 6d 2d 3e 64 62 2c  Free(pAccum->db,
61b0: 20 7a 45 78 74 72 61 29 3b 0a 20 20 20 20 20 20   zExtra);.      
61c0: 7a 45 78 74 72 61 20 3d 20 30 3b 0a 20 20 20 20  zExtra = 0;.    
61d0: 7d 0a 20 20 7d 2f 2a 20 45 6e 64 20 66 6f 72 20  }.  }/* End for 
61e0: 6c 6f 6f 70 20 6f 76 65 72 20 74 68 65 20 66 6f  loop over the fo
61f0: 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a 7d  rmat string */.}
6200: 20 2f 2a 20 45 6e 64 20 6f 66 20 66 75 6e 63 74   /* End of funct
6210: 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 6e  ion */../*.** En
6220: 6c 61 72 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  large the memory
6230: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 6e 20 61   allocation on a
6240: 20 53 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 74   StrAccum object
6250: 20 73 6f 20 74 68 61 74 20 69 74 20 69 73 0a 2a   so that it is.*
6260: 2a 20 61 62 6c 65 20 74 6f 20 61 63 63 65 70 74  * able to accept
6270: 20 61 74 20 6c 65 61 73 74 20 4e 20 6d 6f 72 65   at least N more
6280: 20 62 79 74 65 73 20 6f 66 20 74 65 78 74 2e 0a   bytes of text..
6290: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
62a0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
62b0: 20 6f 66 20 74 65 78 74 20 74 68 61 74 20 53 74   of text that St
62c0: 72 41 63 63 75 6d 20 69 73 20 61 62 6c 65 20 74  rAccum is able t
62d0: 6f 20 61 63 63 65 70 74 0a 2a 2a 20 61 66 74 65  o accept.** afte
62e0: 72 20 74 68 65 20 61 74 74 65 6d 70 74 65 64 20  r the attempted 
62f0: 65 6e 6c 61 72 67 65 6d 65 6e 74 2e 20 20 54 68  enlargement.  Th
6300: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
6310: 20 6d 69 67 68 74 20 62 65 20 7a 65 72 6f 2e 0a   might be zero..
6320: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
6330: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 45 6e 6c  lite3StrAccumEnl
6340: 61 72 67 65 28 53 74 72 41 63 63 75 6d 20 2a 70  arge(StrAccum *p
6350: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 63 68 61 72  , int N){.  char
6360: 20 2a 7a 4e 65 77 3b 0a 20 20 61 73 73 65 72 74   *zNew;.  assert
6370: 28 20 70 2d 3e 6e 43 68 61 72 2b 28 69 36 34 29  ( p->nChar+(i64)
6380: 4e 20 3e 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29  N >= p->nAlloc )
6390: 3b 20 2f 2a 20 4f 6e 6c 79 20 63 61 6c 6c 65 64  ; /* Only called
63a0: 20 69 66 20 72 65 61 6c 6c 79 20 6e 65 65 64 65   if really neede
63b0: 64 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 63  d */.  if( p->ac
63c0: 63 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 74 65  cError ){.    te
63d0: 73 74 63 61 73 65 28 70 2d 3e 61 63 63 45 72 72  stcase(p->accErr
63e0: 6f 72 3d 3d 53 54 52 41 43 43 55 4d 5f 54 4f 4f  or==STRACCUM_TOO
63f0: 42 49 47 29 3b 0a 20 20 20 20 74 65 73 74 63 61  BIG);.    testca
6400: 73 65 28 70 2d 3e 61 63 63 45 72 72 6f 72 3d 3d  se(p->accError==
6410: 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 3b  STRACCUM_NOMEM);
6420: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
6430: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 6d 78 41 6c   }.  if( p->mxAl
6440: 6c 6f 63 3d 3d 30 20 29 7b 0a 20 20 20 20 4e 20  loc==0 ){.    N 
6450: 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2d 20 70 2d  = p->nAlloc - p-
6460: 3e 6e 43 68 61 72 20 2d 20 31 3b 0a 20 20 20 20  >nChar - 1;.    
6470: 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72  setStrAccumError
6480: 28 70 2c 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f  (p, STRACCUM_TOO
6490: 42 49 47 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  BIG);.    return
64a0: 20 4e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   N;.  }else{.   
64b0: 20 63 68 61 72 20 2a 7a 4f 6c 64 20 3d 20 69 73   char *zOld = is
64c0: 4d 61 6c 6c 6f 63 65 64 28 70 29 20 3f 20 70 2d  Malloced(p) ? p-
64d0: 3e 7a 54 65 78 74 20 3a 20 30 3b 0a 20 20 20 20  >zText : 0;.    
64e0: 69 36 34 20 73 7a 4e 65 77 20 3d 20 70 2d 3e 6e  i64 szNew = p->n
64f0: 43 68 61 72 3b 0a 20 20 20 20 61 73 73 65 72 74  Char;.    assert
6500: 28 20 28 70 2d 3e 7a 54 65 78 74 3d 3d 30 20 7c  ( (p->zText==0 |
6510: 7c 20 70 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a  | p->zText==p->z
6520: 42 61 73 65 29 3d 3d 21 69 73 4d 61 6c 6c 6f 63  Base)==!isMalloc
6530: 65 64 28 70 29 20 29 3b 0a 20 20 20 20 73 7a 4e  ed(p) );.    szN
6540: 65 77 20 2b 3d 20 4e 20 2b 20 31 3b 0a 20 20 20  ew += N + 1;.   
6550: 20 69 66 28 20 73 7a 4e 65 77 2b 70 2d 3e 6e 43   if( szNew+p->nC
6560: 68 61 72 3c 3d 70 2d 3e 6d 78 41 6c 6c 6f 63 20  har<=p->mxAlloc 
6570: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 46 6f 72 63  ){.      /* Forc
6580: 65 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 62 75  e exponential bu
6590: 66 66 65 72 20 73 69 7a 65 20 67 72 6f 77 74 68  ffer size growth
65a0: 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 64   as long as it d
65b0: 6f 65 73 20 6e 6f 74 20 6f 76 65 72 66 6c 6f 77  oes not overflow
65c0: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 61 76  ,.      ** to av
65d0: 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 63 61  oid having to ca
65e0: 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ll this routine 
65f0: 74 6f 6f 20 6f 66 74 65 6e 20 2a 2f 0a 20 20 20  too often */.   
6600: 20 20 20 73 7a 4e 65 77 20 2b 3d 20 70 2d 3e 6e     szNew += p->n
6610: 43 68 61 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Char;.    }.    
6620: 69 66 28 20 73 7a 4e 65 77 20 3e 20 70 2d 3e 6d  if( szNew > p->m
6630: 78 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20  xAlloc ){.      
6640: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
6650: 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20 20 73  eset(p);.      s
6660: 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28  etStrAccumError(
6670: 70 2c 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  p, STRACCUM_TOOB
6680: 49 47 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  IG);.      retur
6690: 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n 0;.    }else{.
66a0: 20 20 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20        p->nAlloc 
66b0: 3d 20 28 69 6e 74 29 73 7a 4e 65 77 3b 0a 20 20  = (int)szNew;.  
66c0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
66d0: 62 20 29 7b 0a 20 20 20 20 20 20 7a 4e 65 77 20  b ){.      zNew 
66e0: 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c  = sqlite3DbReall
66f0: 6f 63 28 70 2d 3e 64 62 2c 20 7a 4f 6c 64 2c 20  oc(p->db, zOld, 
6700: 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20  p->nAlloc);.    
6710: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 4e 65  }else{.      zNe
6720: 77 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c  w = sqlite3_real
6730: 6c 6f 63 36 34 28 7a 4f 6c 64 2c 20 70 2d 3e 6e  loc64(zOld, p->n
6740: 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 7d 0a 20 20  Alloc);.    }.  
6750: 20 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20    if( zNew ){.  
6760: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a      assert( p->z
6770: 54 65 78 74 21 3d 30 20 7c 7c 20 70 2d 3e 6e 43  Text!=0 || p->nC
6780: 68 61 72 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  har==0 );.      
6790: 69 66 28 20 21 69 73 4d 61 6c 6c 6f 63 65 64 28  if( !isMalloced(
67a0: 70 29 20 26 26 20 70 2d 3e 6e 43 68 61 72 3e 30  p) && p->nChar>0
67b0: 20 29 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20   ) memcpy(zNew, 
67c0: 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e 6e 43 68  p->zText, p->nCh
67d0: 61 72 29 3b 0a 20 20 20 20 20 20 70 2d 3e 7a 54  ar);.      p->zT
67e0: 65 78 74 20 3d 20 7a 4e 65 77 3b 0a 20 20 20 20  ext = zNew;.    
67f0: 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 73 71    p->nAlloc = sq
6800: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
6810: 65 28 70 2d 3e 64 62 2c 20 7a 4e 65 77 29 3b 0a  e(p->db, zNew);.
6820: 20 20 20 20 20 20 70 2d 3e 70 72 69 6e 74 66 46        p->printfF
6830: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 50  lags |= SQLITE_P
6840: 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 3b 0a  RINTF_MALLOCED;.
6850: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6860: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6870: 52 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20 20  Reset(p);.      
6880: 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72  setStrAccumError
6890: 28 70 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  (p, STRACCUM_NOM
68a0: 45 4d 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  EM);.      retur
68b0: 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  n 0;.    }.  }. 
68c0: 20 72 65 74 75 72 6e 20 4e 3b 0a 7d 0a 0a 2f 2a   return N;.}../*
68d0: 0a 2a 2a 20 41 70 70 65 6e 64 20 4e 20 63 6f 70  .** Append N cop
68e0: 69 65 73 20 6f 66 20 63 68 61 72 61 63 74 65 72  ies of character
68f0: 20 63 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20   c to the given 
6900: 73 74 72 69 6e 67 20 62 75 66 66 65 72 2e 0a 2a  string buffer..*
6910: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  /.void sqlite3Ap
6920: 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75  pendChar(StrAccu
6930: 6d 20 2a 70 2c 20 69 6e 74 20 4e 2c 20 63 68 61  m *p, int N, cha
6940: 72 20 63 29 7b 0a 20 20 74 65 73 74 63 61 73 65  r c){.  testcase
6950: 28 20 70 2d 3e 6e 43 68 61 72 20 2b 20 28 69 36  ( p->nChar + (i6
6960: 34 29 4e 20 3e 20 30 78 37 66 66 66 66 66 66 66  4)N > 0x7fffffff
6970: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 43 68   );.  if( p->nCh
6980: 61 72 2b 28 69 36 34 29 4e 20 3e 3d 20 70 2d 3e  ar+(i64)N >= p->
6990: 6e 41 6c 6c 6f 63 20 26 26 20 28 4e 20 3d 20 73  nAlloc && (N = s
69a0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 45 6e  qlite3StrAccumEn
69b0: 6c 61 72 67 65 28 70 2c 20 4e 29 29 3c 3d 30 20  large(p, N))<=0 
69c0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  ){.    return;. 
69d0: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d   }.  assert( (p-
69e0: 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73 65  >zText==p->zBase
69f0: 29 3d 3d 21 69 73 4d 61 6c 6c 6f 63 65 64 28 70  )==!isMalloced(p
6a00: 29 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 4e  ) );.  while( (N
6a10: 2d 2d 29 3e 30 20 29 20 70 2d 3e 7a 54 65 78 74  --)>0 ) p->zText
6a20: 5b 70 2d 3e 6e 43 68 61 72 2b 2b 5d 20 3d 20 63  [p->nChar++] = c
6a30: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  ;.}../*.** The S
6a40: 74 72 41 63 63 75 6d 20 22 70 22 20 69 73 20 6e  trAccum "p" is n
6a50: 6f 74 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20  ot large enough 
6a60: 74 6f 20 61 63 63 65 70 74 20 4e 20 6e 65 77 20  to accept N new 
6a70: 62 79 74 65 73 20 6f 66 20 7a 5b 5d 2e 0a 2a 2a  bytes of z[]..**
6a80: 20 53 6f 20 65 6e 6c 61 72 67 65 20 69 66 20 66   So enlarge if f
6a90: 69 72 73 74 2c 20 74 68 65 6e 20 64 6f 20 74 68  irst, then do th
6aa0: 65 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  e append..**.** 
6ab0: 54 68 69 73 20 69 73 20 61 20 68 65 6c 70 65 72  This is a helper
6ac0: 20 72 6f 75 74 69 6e 65 20 74 6f 20 73 71 6c 69   routine to sqli
6ad0: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
6ae0: 64 28 29 20 74 68 61 74 20 64 6f 65 73 20 73 70  d() that does sp
6af0: 65 63 69 61 6c 2d 63 61 73 65 0a 2a 2a 20 77 6f  ecial-case.** wo
6b00: 72 6b 20 28 65 6e 6c 61 72 67 69 6e 67 20 74 68  rk (enlarging th
6b10: 65 20 62 75 66 66 65 72 29 20 75 73 69 6e 67 20  e buffer) using 
6b20: 74 61 69 6c 20 72 65 63 75 72 73 69 6f 6e 2c 20  tail recursion, 
6b30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 73  so that the.** s
6b40: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
6b50: 70 65 6e 64 28 29 20 72 6f 75 74 69 6e 65 20 63  pend() routine c
6b60: 61 6e 20 75 73 65 20 66 61 73 74 20 63 61 6c 6c  an use fast call
6b70: 69 6e 67 20 73 65 6d 61 6e 74 69 63 73 2e 0a 2a  ing semantics..*
6b80: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 53 51  /.static void SQ
6b90: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 65 6e  LITE_NOINLINE en
6ba0: 6c 61 72 67 65 41 6e 64 41 70 70 65 6e 64 28 53  largeAndAppend(S
6bb0: 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73  trAccum *p, cons
6bc0: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 4e  t char *z, int N
6bd0: 29 7b 0a 20 20 4e 20 3d 20 73 71 6c 69 74 65 33  ){.  N = sqlite3
6be0: 53 74 72 41 63 63 75 6d 45 6e 6c 61 72 67 65 28  StrAccumEnlarge(
6bf0: 70 2c 20 4e 29 3b 0a 20 20 69 66 28 20 4e 3e 30  p, N);.  if( N>0
6c00: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26   ){.    memcpy(&
6c10: 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61  p->zText[p->nCha
6c20: 72 5d 2c 20 7a 2c 20 4e 29 3b 0a 20 20 20 20 70  r], z, N);.    p
6c30: 2d 3e 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a 20 20  ->nChar += N;.  
6c40: 7d 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  }.  assert( (p->
6c50: 7a 54 65 78 74 3d 3d 30 20 7c 7c 20 70 2d 3e 7a  zText==0 || p->z
6c60: 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73 65 29 3d  Text==p->zBase)=
6c70: 3d 21 69 73 4d 61 6c 6c 6f 63 65 64 28 70 29 20  =!isMalloced(p) 
6c80: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65  );.}../*.** Appe
6c90: 6e 64 20 4e 20 62 79 74 65 73 20 6f 66 20 74 65  nd N bytes of te
6ca0: 78 74 20 66 72 6f 6d 20 7a 20 74 6f 20 74 68 65  xt from z to the
6cb0: 20 53 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 74   StrAccum object
6cc0: 2e 20 20 49 6e 63 72 65 61 73 65 20 74 68 65 0a  .  Increase the.
6cd0: 2a 2a 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d  ** size of the m
6ce0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
6cf0: 20 66 6f 72 20 53 74 72 41 63 63 75 6d 20 69 66   for StrAccum if
6d00: 20 6e 65 63 65 73 73 61 72 79 2e 0a 2a 2f 0a 76   necessary..*/.v
6d10: 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
6d20: 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
6d30: 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61  um *p, const cha
6d40: 72 20 2a 7a 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  r *z, int N){.  
6d50: 61 73 73 65 72 74 28 20 7a 21 3d 30 20 7c 7c 20  assert( z!=0 || 
6d60: 4e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  N==0 );.  assert
6d70: 28 20 70 2d 3e 7a 54 65 78 74 21 3d 30 20 7c 7c  ( p->zText!=0 ||
6d80: 20 70 2d 3e 6e 43 68 61 72 3d 3d 30 20 7c 7c 20   p->nChar==0 || 
6d90: 70 2d 3e 61 63 63 45 72 72 6f 72 20 29 3b 0a 20  p->accError );. 
6da0: 20 61 73 73 65 72 74 28 20 4e 3e 3d 30 20 29 3b   assert( N>=0 );
6db0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 63  .  assert( p->ac
6dc0: 63 45 72 72 6f 72 3d 3d 30 20 7c 7c 20 70 2d 3e  cError==0 || p->
6dd0: 6e 41 6c 6c 6f 63 3d 3d 30 20 29 3b 0a 20 20 69  nAlloc==0 );.  i
6de0: 66 28 20 70 2d 3e 6e 43 68 61 72 2b 4e 20 3e 3d  f( p->nChar+N >=
6df0: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20   p->nAlloc ){.  
6e00: 20 20 65 6e 6c 61 72 67 65 41 6e 64 41 70 70 65    enlargeAndAppe
6e10: 6e 64 28 70 2c 7a 2c 4e 29 3b 0a 20 20 7d 65 6c  nd(p,z,N);.  }el
6e20: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
6e30: 70 2d 3e 7a 54 65 78 74 20 29 3b 0a 20 20 20 20  p->zText );.    
6e40: 70 2d 3e 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a 20  p->nChar += N;. 
6e50: 20 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e 7a 54     memcpy(&p->zT
6e60: 65 78 74 5b 70 2d 3e 6e 43 68 61 72 2d 4e 5d 2c  ext[p->nChar-N],
6e70: 20 7a 2c 20 4e 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f   z, N);.  }.}../
6e80: 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 68 65 20  *.** Append the 
6e90: 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
6ea0: 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64   zero-terminated
6eb0: 20 73 74 72 69 6e 67 20 7a 5b 5d 20 74 6f 20 74   string z[] to t
6ec0: 68 65 20 70 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  he p string..*/.
6ed0: 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
6ee0: 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74  ccumAppendAll(St
6ef0: 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74  rAccum *p, const
6f00: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73 71 6c   char *z){.  sql
6f10: 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
6f20: 6e 64 28 70 2c 20 7a 2c 20 73 71 6c 69 74 65 33  nd(p, z, sqlite3
6f30: 53 74 72 6c 65 6e 33 30 28 7a 29 29 3b 0a 7d 0a  Strlen30(z));.}.
6f40: 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 69 73 68 20 6f  ../*.** Finish o
6f50: 66 66 20 61 20 73 74 72 69 6e 67 20 62 79 20 6d  ff a string by m
6f60: 61 6b 69 6e 67 20 73 75 72 65 20 69 74 20 69 73  aking sure it is
6f70: 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64   zero-terminated
6f80: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 6f  ..** Return a po
6f90: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 72 65 73  inter to the res
6fa0: 75 6c 74 69 6e 67 20 73 74 72 69 6e 67 2e 20 20  ulting string.  
6fb0: 52 65 74 75 72 6e 20 61 20 4e 55 4c 4c 0a 2a 2a  Return a NULL.**
6fc0: 20 70 6f 69 6e 74 65 72 20 69 66 20 61 6e 79 20   pointer if any 
6fd0: 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 77 61  kind of error wa
6fe0: 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a  s encountered..*
6ff0: 2f 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f  /.static SQLITE_
7000: 4e 4f 49 4e 4c 49 4e 45 20 63 68 61 72 20 2a 73  NOINLINE char *s
7010: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 52 65 61  trAccumFinishRea
7020: 6c 6c 6f 63 28 53 74 72 41 63 63 75 6d 20 2a 70  lloc(StrAccum *p
7030: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ){.  assert( p->
7040: 6d 78 41 6c 6c 6f 63 3e 30 20 26 26 20 21 69 73  mxAlloc>0 && !is
7050: 4d 61 6c 6c 6f 63 65 64 28 70 29 20 29 3b 0a 20  Malloced(p) );. 
7060: 20 70 2d 3e 7a 54 65 78 74 20 3d 20 73 71 6c 69   p->zText = sqli
7070: 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70  te3DbMallocRaw(p
7080: 2d 3e 64 62 2c 20 70 2d 3e 6e 43 68 61 72 2b 31  ->db, p->nChar+1
7090: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65   );.  if( p->zTe
70a0: 78 74 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  xt ){.    memcpy
70b0: 28 70 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e 7a 42  (p->zText, p->zB
70c0: 61 73 65 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 29  ase, p->nChar+1)
70d0: 3b 0a 20 20 20 20 70 2d 3e 70 72 69 6e 74 66 46  ;.    p->printfF
70e0: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 50  lags |= SQLITE_P
70f0: 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 3b 0a  RINTF_MALLOCED;.
7100: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 65 74    }else{.    set
7110: 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70 2c  StrAccumError(p,
7120: 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29   STRACCUM_NOMEM)
7130: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
7140: 2d 3e 7a 54 65 78 74 3b 0a 7d 0a 63 68 61 72 20  ->zText;.}.char 
7150: 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
7160: 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 20  Finish(StrAccum 
7170: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54  *p){.  if( p->zT
7180: 65 78 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ext ){.    asser
7190: 74 28 20 28 70 2d 3e 7a 54 65 78 74 3d 3d 70 2d  t( (p->zText==p-
71a0: 3e 7a 42 61 73 65 29 3d 3d 21 69 73 4d 61 6c 6c  >zBase)==!isMall
71b0: 6f 63 65 64 28 70 29 20 29 3b 0a 20 20 20 20 70  oced(p) );.    p
71c0: 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72  ->zText[p->nChar
71d0: 5d 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  ] = 0;.    if( p
71e0: 2d 3e 6d 78 41 6c 6c 6f 63 3e 30 20 26 26 20 21  ->mxAlloc>0 && !
71f0: 69 73 4d 61 6c 6c 6f 63 65 64 28 70 29 20 29 7b  isMalloced(p) ){
7200: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 74  .      return st
7210: 72 41 63 63 75 6d 46 69 6e 69 73 68 52 65 61 6c  rAccumFinishReal
7220: 6c 6f 63 28 70 29 3b 0a 20 20 20 20 7d 0a 20 20  loc(p);.    }.  
7230: 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 54  }.  return p->zT
7240: 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ext;.}../*.** Re
7250: 73 65 74 20 61 6e 20 53 74 72 41 63 63 75 6d 20  set an StrAccum 
7260: 73 74 72 69 6e 67 2e 20 20 52 65 63 6c 61 69 6d  string.  Reclaim
7270: 20 61 6c 6c 20 6d 61 6c 6c 6f 63 65 64 20 6d 65   all malloced me
7280: 6d 6f 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  mory..*/.void sq
7290: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
72a0: 65 74 28 53 74 72 41 63 63 75 6d 20 2a 70 29 7b  et(StrAccum *p){
72b0: 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 7a  .  assert( (p->z
72c0: 54 65 78 74 3d 3d 30 20 7c 7c 20 70 2d 3e 7a 54  Text==0 || p->zT
72d0: 65 78 74 3d 3d 70 2d 3e 7a 42 61 73 65 29 3d 3d  ext==p->zBase)==
72e0: 21 69 73 4d 61 6c 6c 6f 63 65 64 28 70 29 20 29  !isMalloced(p) )
72f0: 3b 0a 20 20 69 66 28 20 69 73 4d 61 6c 6c 6f 63  ;.  if( isMalloc
7300: 65 64 28 70 29 20 29 7b 0a 20 20 20 20 73 71 6c  ed(p) ){.    sql
7310: 69 74 65 33 44 62 46 72 65 65 28 70 2d 3e 64 62  ite3DbFree(p->db
7320: 2c 20 70 2d 3e 7a 54 65 78 74 29 3b 0a 20 20 20  , p->zText);.   
7330: 20 70 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20   p->printfFlags 
7340: 26 3d 20 7e 53 51 4c 49 54 45 5f 50 52 49 4e 54  &= ~SQLITE_PRINT
7350: 46 5f 4d 41 4c 4c 4f 43 45 44 3b 0a 20 20 7d 0a  F_MALLOCED;.  }.
7360: 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 30 3b 0a    p->zText = 0;.
7370: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c  }../*.** Initial
7380: 69 7a 65 20 61 20 73 74 72 69 6e 67 20 61 63 63  ize a string acc
7390: 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
73a0: 70 3a 20 20 20 20 20 54 68 65 20 61 63 63 75 6d  p:     The accum
73b0: 75 6c 61 74 6f 72 20 74 6f 20 62 65 20 69 6e 69  ulator to be ini
73c0: 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 20 64 62 3a  tialized..** db:
73d0: 20 20 20 20 50 6f 69 6e 74 65 72 20 74 6f 20 61      Pointer to a
73e0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
73f0: 74 69 6f 6e 2e 20 20 4d 61 79 20 62 65 20 4e 55  tion.  May be NU
7400: 4c 4c 2e 20 20 4c 6f 6f 6b 61 73 69 64 65 0a 2a  LL.  Lookaside.*
7410: 2a 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 20  *        memory 
7420: 69 73 20 75 73 65 64 20 69 66 20 6e 6f 74 20 4e  is used if not N
7430: 55 4c 4c 2e 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  ULL. db->mallocF
7440: 61 69 6c 65 64 20 69 73 20 73 65 74 20 61 70 70  ailed is set app
7450: 72 6f 70 72 69 61 74 65 6c 79 0a 2a 2a 20 20 20  ropriately.**   
7460: 20 20 20 20 20 77 68 65 6e 20 6e 6f 74 20 4e 55       when not NU
7470: 4c 4c 2e 0a 2a 2a 20 7a 42 61 73 65 3a 20 41 6e  LL..** zBase: An
7480: 20 69 6e 69 74 69 61 6c 20 62 75 66 66 65 72 2e   initial buffer.
7490: 20 20 4d 61 79 20 62 65 20 4e 55 4c 4c 20 69 6e    May be NULL in
74a0: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
74b0: 69 6e 69 74 69 61 6c 20 62 75 66 66 65 72 0a 2a  initial buffer.*
74c0: 2a 20 20 20 20 20 20 20 20 69 73 20 6d 61 6c 6c  *        is mall
74d0: 6f 63 65 64 2e 0a 2a 2a 20 6e 3a 20 20 20 20 20  oced..** n:     
74e0: 53 69 7a 65 20 6f 66 20 7a 42 61 73 65 20 69 6e  Size of zBase in
74f0: 20 62 79 74 65 73 2e 20 20 49 66 20 74 6f 74 61   bytes.  If tota
7500: 6c 20 73 70 61 63 65 20 72 65 71 75 69 72 65 6d  l space requirem
7510: 65 6e 74 73 20 6e 65 76 65 72 20 65 78 63 65 65  ents never excee
7520: 64 0a 2a 2a 20 20 20 20 20 20 20 20 6e 20 74 68  d.**        n th
7530: 65 6e 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c  en no memory all
7540: 6f 63 61 74 69 6f 6e 73 20 65 76 65 72 20 6f 63  ocations ever oc
7550: 63 75 72 2e 0a 2a 2a 20 6d 78 3a 20 20 20 20 4d  cur..** mx:    M
7560: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
7570: 20 62 79 74 65 73 20 74 6f 20 61 63 63 75 6d 75   bytes to accumu
7580: 6c 61 74 65 2e 20 20 49 66 20 6d 78 3d 3d 30 20  late.  If mx==0 
7590: 74 68 65 6e 20 6e 6f 20 6d 65 6d 6f 72 79 0a 2a  then no memory.*
75a0: 2a 20 20 20 20 20 20 20 20 61 6c 6c 6f 63 61 74  *        allocat
75b0: 69 6f 6e 73 20 77 69 6c 6c 20 65 76 65 72 20 6f  ions will ever o
75c0: 63 63 75 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ccur..*/.void sq
75d0: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
75e0: 74 28 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 73  t(StrAccum *p, s
75f0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72  qlite3 *db, char
7600: 20 2a 7a 42 61 73 65 2c 20 69 6e 74 20 6e 2c 20   *zBase, int n, 
7610: 69 6e 74 20 6d 78 29 7b 0a 20 20 70 2d 3e 7a 54  int mx){.  p->zT
7620: 65 78 74 20 3d 20 70 2d 3e 7a 42 61 73 65 20 3d  ext = p->zBase =
7630: 20 7a 42 61 73 65 3b 0a 20 20 70 2d 3e 64 62 20   zBase;.  p->db 
7640: 3d 20 64 62 3b 0a 20 20 70 2d 3e 6e 43 68 61 72  = db;.  p->nChar
7650: 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 41 6c 6c 6f   = 0;.  p->nAllo
7660: 63 20 3d 20 6e 3b 0a 20 20 70 2d 3e 6d 78 41 6c  c = n;.  p->mxAl
7670: 6c 6f 63 20 3d 20 6d 78 3b 0a 20 20 70 2d 3e 61  loc = mx;.  p->a
7680: 63 63 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70  ccError = 0;.  p
7690: 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 3d 20  ->printfFlags = 
76a0: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  0;.}../*.** Prin
76b0: 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62  t into memory ob
76c0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
76d0: 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65  teMalloc().  Use
76e0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a   the internal.**
76f0: 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78   %-conversion ex
7700: 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61  tensions..*/.cha
7710: 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e  r *sqlite3VMPrin
7720: 74 66 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  tf(sqlite3 *db, 
7730: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
7740: 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29  mat, va_list ap)
7750: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63  {.  char *z;.  c
7760: 68 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45  har zBase[SQLITE
7770: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d  _PRINT_BUF_SIZE]
7780: 3b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63  ;.  StrAccum acc
7790: 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 21 3d  ;.  assert( db!=
77a0: 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 74  0 );.  sqlite3St
77b0: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c  rAccumInit(&acc,
77c0: 20 64 62 2c 20 7a 42 61 73 65 2c 20 73 69 7a 65   db, zBase, size
77d0: 6f 66 28 7a 42 61 73 65 29 2c 0a 20 20 20 20 20  of(zBase),.     
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77f0: 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
7800: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7810: 29 3b 0a 20 20 61 63 63 2e 70 72 69 6e 74 66 46  );.  acc.printfF
7820: 6c 61 67 73 20 3d 20 53 51 4c 49 54 45 5f 50 52  lags = SQLITE_PR
7830: 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 3b 0a 20  INTF_INTERNAL;. 
7840: 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
7850: 28 26 61 63 63 2c 20 7a 46 6f 72 6d 61 74 2c 20  (&acc, zFormat, 
7860: 61 70 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ap);.  z = sqlit
7870: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
7880: 28 26 61 63 63 29 3b 0a 20 20 69 66 28 20 61 63  (&acc);.  if( ac
7890: 63 2e 61 63 63 45 72 72 6f 72 3d 3d 53 54 52 41  c.accError==STRA
78a0: 43 43 55 4d 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  CCUM_NOMEM ){.  
78b0: 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c    sqlite3OomFaul
78c0: 74 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74  t(db);.  }.  ret
78d0: 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn z;.}../*.** 
78e0: 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72  Print into memor
78f0: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
7900: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20  sqliteMalloc(). 
7910: 20 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61   Use the interna
7920: 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f  l.** %-conversio
7930: 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f  n extensions..*/
7940: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
7950: 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a 64  rintf(sqlite3 *d
7960: 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  b, const char *z
7970: 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20  Format, ...){.  
7980: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68  va_list ap;.  ch
7990: 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72  ar *z;.  va_star
79a0: 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a  t(ap, zFormat);.
79b0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50    z = sqlite3VMP
79c0: 72 69 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61  rintf(db, zForma
79d0: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
79e0: 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a  (ap);.  return z
79f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74  ;.}../*.** Print
7a00: 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74   into memory obt
7a10: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
7a20: 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 20 20 4f 6d  e3_malloc().  Om
7a30: 69 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a  it the internal.
7a40: 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20  ** %-conversion 
7a50: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63  extensions..*/.c
7a60: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 76 6d 70  har *sqlite3_vmp
7a70: 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
7a80: 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69   *zFormat, va_li
7a90: 73 74 20 61 70 29 7b 0a 20 20 63 68 61 72 20 2a  st ap){.  char *
7aa0: 7a 3b 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b  z;.  char zBase[
7ab0: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46  SQLITE_PRINT_BUF
7ac0: 5f 53 49 5a 45 5d 3b 0a 20 20 53 74 72 41 63 63  _SIZE];.  StrAcc
7ad0: 75 6d 20 61 63 63 3b 0a 0a 23 69 66 64 65 66 20  um acc;..#ifdef 
7ae0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
7af0: 49 5f 41 52 4d 4f 52 20 20 0a 20 20 69 66 28 20  I_ARMOR  .  if( 
7b00: 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20 20  zFormat==0 ){.  
7b10: 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d    (void)SQLITE_M
7b20: 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20  ISUSE_BKPT;.    
7b30: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65  return 0;.  }.#e
7b40: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
7b50: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49  ITE_OMIT_AUTOINI
7b60: 54 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  T.  if( sqlite3_
7b70: 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 29 20 72  initialize() ) r
7b80: 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a  eturn 0;.#endif.
7b90: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
7ba0: 6d 49 6e 69 74 28 26 61 63 63 2c 20 30 2c 20 7a  mInit(&acc, 0, z
7bb0: 42 61 73 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61  Base, sizeof(zBa
7bc0: 73 65 29 2c 20 53 51 4c 49 54 45 5f 4d 41 58 5f  se), SQLITE_MAX_
7bd0: 4c 45 4e 47 54 48 29 3b 0a 20 20 73 71 6c 69 74  LENGTH);.  sqlit
7be0: 65 33 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c  e3VXPrintf(&acc,
7bf0: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
7c00: 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72 41   z = sqlite3StrA
7c10: 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29  ccumFinish(&acc)
7c20: 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a  ;.  return z;.}.
7c30: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74  ./*.** Print int
7c40: 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  o memory obtaine
7c50: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
7c60: 61 6c 6c 6f 63 28 29 28 29 2e 20 20 4f 6d 69 74  alloc()().  Omit
7c70: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a   the internal.**
7c80: 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78   %-conversion ex
7c90: 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61  tensions..*/.cha
7ca0: 72 20 2a 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  r *sqlite3_mprin
7cb0: 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  tf(const char *z
7cc0: 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20  Format, ...){.  
7cd0: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68  va_list ap;.  ch
7ce0: 61 72 20 2a 7a 3b 0a 23 69 66 6e 64 65 66 20 53  ar *z;.#ifndef S
7cf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
7d00: 4e 49 54 0a 20 20 69 66 28 20 73 71 6c 69 74 65  NIT.  if( sqlite
7d10: 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 29  3_initialize() )
7d20: 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69   return 0;.#endi
7d30: 66 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  f.  va_start(ap,
7d40: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d   zFormat);.  z =
7d50: 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74   sqlite3_vmprint
7d60: 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  f(zFormat, ap);.
7d70: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
7d80: 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a  return z;.}../*.
7d90: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  ** sqlite3_snpri
7da0: 6e 74 66 28 29 20 77 6f 72 6b 73 20 6c 69 6b 65  ntf() works like
7db0: 20 73 6e 70 72 69 6e 74 66 28 29 20 65 78 63 65   snprintf() exce
7dc0: 70 74 20 74 68 61 74 20 69 74 20 69 67 6e 6f 72  pt that it ignor
7dd0: 65 73 20 74 68 65 0a 2a 2a 20 63 75 72 72 65 6e  es the.** curren
7de0: 74 20 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e 67  t locale setting
7df0: 73 2e 20 20 54 68 69 73 20 69 73 20 69 6d 70 6f  s.  This is impo
7e00: 72 74 61 6e 74 20 66 6f 72 20 53 51 4c 69 74 65  rtant for SQLite
7e10: 20 62 65 63 61 75 73 65 20 77 65 0a 2a 2a 20 61   because we.** a
7e20: 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 75  re not able to u
7e30: 73 65 20 61 20 22 2c 22 20 61 73 20 74 68 65 20  se a "," as the 
7e40: 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69 6e  decimal point in
7e50: 20 70 6c 61 63 65 20 6f 66 20 22 2e 22 20 61 73   place of "." as
7e60: 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62 79  .** specified by
7e70: 20 73 6f 6d 65 20 6c 6f 63 61 6c 65 73 2e 0a 2a   some locales..*
7e80: 2a 0a 2a 2a 20 4f 6f 70 73 3a 20 20 54 68 65 20  *.** Oops:  The 
7e90: 66 69 72 73 74 20 74 77 6f 20 61 72 67 75 6d 65  first two argume
7ea0: 6e 74 73 20 6f 66 20 73 71 6c 69 74 65 33 5f 73  nts of sqlite3_s
7eb0: 6e 70 72 69 6e 74 66 28 29 20 61 72 65 20 62 61  nprintf() are ba
7ec0: 63 6b 77 61 72 64 73 0a 2a 2a 20 66 72 6f 6d 20  ckwards.** from 
7ed0: 74 68 65 20 73 6e 70 72 69 6e 74 66 28 29 20 73  the snprintf() s
7ee0: 74 61 6e 64 61 72 64 2e 20 20 55 6e 66 6f 72 74  tandard.  Unfort
7ef0: 75 6e 61 74 65 6c 79 2c 20 69 74 20 69 73 20 74  unately, it is t
7f00: 6f 6f 20 6c 61 74 65 20 74 6f 20 63 68 61 6e 67  oo late to chang
7f10: 65 0a 2a 2a 20 74 68 69 73 20 77 69 74 68 6f 75  e.** this withou
7f20: 74 20 62 72 65 61 6b 69 6e 67 20 63 6f 6d 70 61  t breaking compa
7f30: 74 69 62 69 6c 69 74 79 2c 20 73 6f 20 77 65 20  tibility, so we 
7f40: 6a 75 73 74 20 68 61 76 65 20 74 6f 20 6c 69 76  just have to liv
7f50: 65 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6d 69  e with the.** mi
7f60: 73 74 61 6b 65 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  stake..**.** sql
7f70: 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 29  ite3_vsnprintf()
7f80: 20 69 73 20 74 68 65 20 76 61 72 61 72 67 73 20   is the varargs 
7f90: 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 63 68 61 72  version..*/.char
7fa0: 20 2a 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 69   *sqlite3_vsnpri
7fb0: 6e 74 66 28 69 6e 74 20 6e 2c 20 63 68 61 72 20  ntf(int n, char 
7fc0: 2a 7a 42 75 66 2c 20 63 6f 6e 73 74 20 63 68 61  *zBuf, const cha
7fd0: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c  r *zFormat, va_l
7fe0: 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72 41 63  ist ap){.  StrAc
7ff0: 63 75 6d 20 61 63 63 3b 0a 20 20 69 66 28 20 6e  cum acc;.  if( n
8000: 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 42 75  <=0 ) return zBu
8010: 66 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f;.#ifdef SQLITE
8020: 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
8030: 52 0a 20 20 69 66 28 20 7a 42 75 66 3d 3d 30 20  R.  if( zBuf==0 
8040: 7c 7c 20 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 20  || zFormat==0 ) 
8050: 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49  {.    (void)SQLI
8060: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
8070: 20 20 20 20 69 66 28 20 7a 42 75 66 20 29 20 7a      if( zBuf ) z
8080: 42 75 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20  Buf[0] = 0;.    
8090: 72 65 74 75 72 6e 20 7a 42 75 66 3b 0a 20 20 7d  return zBuf;.  }
80a0: 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65  .#endif.  sqlite
80b0: 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61  3StrAccumInit(&a
80c0: 63 63 2c 20 30 2c 20 7a 42 75 66 2c 20 6e 2c 20  cc, 0, zBuf, n, 
80d0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50  0);.  sqlite3VXP
80e0: 72 69 6e 74 66 28 26 61 63 63 2c 20 7a 46 6f 72  rintf(&acc, zFor
80f0: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 72 65 74 75  mat, ap);.  retu
8100: 72 6e 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  rn sqlite3StrAcc
8110: 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a  umFinish(&acc);.
8120: 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  }.char *sqlite3_
8130: 73 6e 70 72 69 6e 74 66 28 69 6e 74 20 6e 2c 20  snprintf(int n, 
8140: 63 68 61 72 20 2a 7a 42 75 66 2c 20 63 6f 6e 73  char *zBuf, cons
8150: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
8160: 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 72 20 2a 7a   ...){.  char *z
8170: 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  ;.  va_list ap;.
8180: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 7a 46    va_start(ap,zF
8190: 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71  ormat);.  z = sq
81a0: 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66 28  lite3_vsnprintf(
81b0: 6e 2c 20 7a 42 75 66 2c 20 7a 46 6f 72 6d 61 74  n, zBuf, zFormat
81c0: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
81d0: 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b  ap);.  return z;
81e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  .}../*.** This i
81f0: 73 20 74 68 65 20 72 6f 75 74 69 6e 65 20 74 68  s the routine th
8200: 61 74 20 61 63 74 75 61 6c 6c 79 20 66 6f 72 6d  at actually form
8210: 61 74 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ats the sqlite3_
8220: 6c 6f 67 28 29 20 6d 65 73 73 61 67 65 2e 0a 2a  log() message..*
8230: 2a 20 57 65 20 68 6f 75 73 65 20 69 74 20 69 6e  * We house it in
8240: 20 61 20 73 65 70 61 72 61 74 65 20 72 6f 75 74   a separate rout
8250: 69 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ine from sqlite3
8260: 5f 6c 6f 67 28 29 20 74 6f 20 61 76 6f 69 64 20  _log() to avoid 
8270: 75 73 69 6e 67 0a 2a 2a 20 73 74 61 63 6b 20 73  using.** stack s
8280: 70 61 63 65 20 6f 6e 20 73 6d 61 6c 6c 2d 73 74  pace on small-st
8290: 61 63 6b 20 73 79 73 74 65 6d 73 20 77 68 65 6e  ack systems when
82a0: 20 6c 6f 67 67 69 6e 67 20 69 73 20 64 69 73 61   logging is disa
82b0: 62 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  bled..**.** sqli
82c0: 74 65 33 5f 6c 6f 67 28 29 20 6d 75 73 74 20 72  te3_log() must r
82d0: 65 6e 64 65 72 20 69 6e 74 6f 20 61 20 73 74 61  ender into a sta
82e0: 74 69 63 20 62 75 66 66 65 72 2e 20 20 49 74 20  tic buffer.  It 
82f0: 63 61 6e 6e 6f 74 20 64 79 6e 61 6d 69 63 61 6c  cannot dynamical
8300: 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 20 6d  ly.** allocate m
8310: 65 6d 6f 72 79 20 62 65 63 61 75 73 65 20 69 74  emory because it
8320: 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64   might be called
8330: 20 77 68 69 6c 65 20 74 68 65 20 6d 65 6d 6f 72   while the memor
8340: 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6d  y allocator.** m
8350: 75 74 65 78 20 69 73 20 68 65 6c 64 2e 0a 2a 2a  utex is held..**
8360: 0a 2a 2a 20 73 71 6c 69 74 65 33 56 58 50 72 69  .** sqlite3VXPri
8370: 6e 74 66 28 29 20 6d 69 67 68 74 20 61 73 6b 20  ntf() might ask 
8380: 66 6f 72 20 2a 74 65 6d 70 6f 72 61 72 79 2a 20  for *temporary* 
8390: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
83a0: 6e 73 20 66 6f 72 0a 2a 2a 20 63 65 72 74 61 69  ns for.** certai
83b0: 6e 20 66 6f 72 6d 61 74 20 63 68 61 72 61 63 74  n format charact
83c0: 65 72 73 20 28 25 71 29 20 6f 72 20 66 6f 72 20  ers (%q) or for 
83d0: 76 65 72 79 20 6c 61 72 67 65 20 70 72 65 63 69  very large preci
83e0: 73 69 6f 6e 73 20 6f 72 20 77 69 64 74 68 73 2e  sions or widths.
83f0: 0a 2a 2a 20 43 61 72 65 20 6d 75 73 74 20 62 65  .** Care must be
8400: 20 74 61 6b 65 6e 20 74 68 61 74 20 61 6e 79 20   taken that any 
8410: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 63 61  sqlite3_log() ca
8420: 6c 6c 73 20 74 68 61 74 20 6f 63 63 75 72 20 77  lls that occur w
8430: 68 69 6c 65 20 74 68 65 0a 2a 2a 20 6d 65 6d 6f  hile the.** memo
8440: 72 79 20 6d 75 74 65 78 20 69 73 20 68 65 6c 64  ry mutex is held
8450: 20 64 6f 20 6e 6f 74 20 75 73 65 20 74 68 65 73   do not use thes
8460: 65 20 6d 65 63 68 61 6e 69 73 6d 73 2e 0a 2a 2f  e mechanisms..*/
8470: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 6e  .static void ren
8480: 64 65 72 4c 6f 67 4d 73 67 28 69 6e 74 20 69 45  derLogMsg(int iE
8490: 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68  rrCode, const ch
84a0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f  ar *zFormat, va_
84b0: 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72 41  list ap){.  StrA
84c0: 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20 20 20  ccum acc;       
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84e0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 61 63 63     /* String acc
84f0: 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 63 68  umulator */.  ch
8500: 61 72 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f 50  ar zMsg[SQLITE_P
8510: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33 5d  RINT_BUF_SIZE*3]
8520: 3b 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65  ;    /* Complete
8530: 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 2a 2f 0a   log message */.
8540: 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  .  sqlite3StrAcc
8550: 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 30 2c 20  umInit(&acc, 0, 
8560: 7a 4d 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d 73  zMsg, sizeof(zMs
8570: 67 29 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  g), 0);.  sqlite
8580: 33 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20  3VXPrintf(&acc, 
8590: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
85a0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
85b0: 66 69 67 2e 78 4c 6f 67 28 73 71 6c 69 74 65 33  fig.xLog(sqlite3
85c0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 4c 6f  GlobalConfig.pLo
85d0: 67 41 72 67 2c 20 69 45 72 72 43 6f 64 65 2c 0a  gArg, iErrCode,.
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
8600: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
8610: 28 26 61 63 63 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  (&acc));.}../*.*
8620: 2a 20 46 6f 72 6d 61 74 20 61 6e 64 20 77 72 69  * Format and wri
8630: 74 65 20 61 20 6d 65 73 73 61 67 65 20 74 6f 20  te a message to 
8640: 74 68 65 20 6c 6f 67 20 69 66 20 6c 6f 67 67 69  the log if loggi
8650: 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a  ng is enabled..*
8660: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 6c  /.void sqlite3_l
8670: 6f 67 28 69 6e 74 20 69 45 72 72 43 6f 64 65 2c  og(int iErrCode,
8680: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
8690: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
86a0: 5f 6c 69 73 74 20 61 70 3b 20 20 20 20 20 20 20  _list ap;       
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86c0: 20 20 20 20 20 20 2f 2a 20 56 61 72 61 72 67 20        /* Vararg 
86d0: 6c 69 73 74 20 2a 2f 0a 20 20 69 66 28 20 73 71  list */.  if( sq
86e0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
86f0: 67 2e 78 4c 6f 67 20 29 7b 0a 20 20 20 20 76 61  g.xLog ){.    va
8700: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
8710: 61 74 29 3b 0a 20 20 20 20 72 65 6e 64 65 72 4c  at);.    renderL
8720: 6f 67 4d 73 67 28 69 45 72 72 43 6f 64 65 2c 20  ogMsg(iErrCode, 
8730: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
8740: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
8750: 7d 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  }.}..#if defined
8760: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
8770: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
8780: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
8790: 2f 2a 0a 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20  /*.** A version 
87a0: 6f 66 20 70 72 69 6e 74 66 28 29 20 74 68 61 74  of printf() that
87b0: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 25 6c 6c   understands %ll
87c0: 64 2e 20 20 55 73 65 64 20 66 6f 72 20 64 65 62  d.  Used for deb
87d0: 75 67 67 69 6e 67 2e 0a 2a 2a 20 54 68 65 20 70  ugging..** The p
87e0: 72 69 6e 74 66 28 29 20 62 75 69 6c 74 20 69 6e  rintf() built in
87f0: 74 6f 20 73 6f 6d 65 20 76 65 72 73 69 6f 6e 73  to some versions
8800: 20 6f 66 20 77 69 6e 64 6f 77 73 20 64 6f 65 73   of windows does
8810: 20 6e 6f 74 20 75 6e 64 65 72 73 74 61 6e 64 20   not understand 
8820: 25 6c 6c 64 0a 2a 2a 20 61 6e 64 20 73 65 67 66  %lld.** and segf
8830: 61 75 6c 74 73 20 69 66 20 79 6f 75 20 67 69 76  aults if you giv
8840: 65 20 69 74 20 61 20 6c 6f 6e 67 20 6c 6f 6e 67  e it a long long
8850: 20 69 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71   int..*/.void sq
8860: 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
8870: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f  (const char *zFo
8880: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
8890: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 53 74 72 41  _list ap;.  StrA
88a0: 63 63 75 6d 20 61 63 63 3b 0a 20 20 63 68 61 72  ccum acc;.  char
88b0: 20 7a 42 75 66 5b 35 30 30 5d 3b 0a 20 20 73 71   zBuf[500];.  sq
88c0: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
88d0: 74 28 26 61 63 63 2c 20 30 2c 20 7a 42 75 66 2c  t(&acc, 0, zBuf,
88e0: 20 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 20 30   sizeof(zBuf), 0
88f0: 29 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  );.  va_start(ap
8900: 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 73 71 6c  ,zFormat);.  sql
8910: 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61 63  ite3VXPrintf(&ac
8920: 63 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  c, zFormat, ap);
8930: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20  .  va_end(ap);. 
8940: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
8950: 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20  Finish(&acc);.  
8960: 66 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 22  fprintf(stdout,"
8970: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 66 66  %s", zBuf);.  ff
8980: 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 7d 0a  lush(stdout);.}.
8990: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 76  #endif.../*.** v
89a0: 61 72 69 61 62 6c 65 2d 61 72 67 75 6d 65 6e 74  ariable-argument
89b0: 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
89c0: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
89d0: 29 2e 20 20 54 68 65 20 62 46 6c 61 67 73 20 61  ).  The bFlags a
89e0: 72 67 75 6d 65 6e 74 0a 2a 2a 20 63 61 6e 20 63  rgument.** can c
89f0: 6f 6e 74 61 69 6e 20 74 68 65 20 62 69 74 20 53  ontain the bit S
8a00: 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54  QLITE_PRINTF_INT
8a10: 45 52 4e 41 4c 20 65 6e 61 62 6c 65 20 69 6e 74  ERNAL enable int
8a20: 65 72 6e 61 6c 20 66 6f 72 6d 61 74 73 2e 0a 2a  ernal formats..*
8a30: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  /.void sqlite3XP
8a40: 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 20 2a  rintf(StrAccum *
8a50: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
8a60: 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20  Format, ...){.  
8a70: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61  va_list ap;.  va
8a80: 5f 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61  _start(ap,zForma
8a90: 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50  t);.  sqlite3VXP
8aa0: 72 69 6e 74 66 28 70 2c 20 7a 46 6f 72 6d 61 74  rintf(p, zFormat
8ab0: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
8ac0: 61 70 29 3b 0a 7d 0a                             ap);.}.