/ Hex Artifact Content
Login

Artifact e2f78b695b8053c23394e9ff79e3364e7308c5e4:


0000: 2f 2a 0a 2a 2a 20 54 68 65 20 22 70 72 69 6e 74  /*.** The "print
0010: 66 22 20 63 6f 64 65 20 74 68 61 74 20 66 6f 6c  f" code that fol
0020: 6c 6f 77 73 20 64 61 74 65 73 20 66 72 6f 6d 20  lows dates from 
0030: 74 68 65 20 31 39 38 30 27 73 2e 20 20 49 74 20  the 1980's.  It 
0040: 69 73 20 69 6e 0a 2a 2a 20 74 68 65 20 70 75 62  is in.** the pub
0050: 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65  lic domain.  The
0060: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 65 6e   original commen
0070: 74 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ts are included 
0080: 68 65 72 65 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  here for.** comp
0090: 6c 65 74 65 6e 65 73 73 2e 20 20 54 68 65 79 20  leteness.  They 
00a0: 61 72 65 20 76 65 72 79 20 6f 75 74 2d 6f 66 2d  are very out-of-
00b0: 64 61 74 65 20 62 75 74 20 6d 69 67 68 74 20 62  date but might b
00c0: 65 20 75 73 65 66 75 6c 20 61 73 0a 2a 2a 20 61  e useful as.** a
00d0: 6e 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 66  n historical ref
00e0: 65 72 65 6e 63 65 2e 20 20 4d 6f 73 74 20 6f 66  erence.  Most of
00f0: 20 74 68 65 20 22 65 6e 68 61 6e 63 65 6d 65 6e   the "enhancemen
0100: 74 73 22 20 68 61 76 65 20 62 65 65 6e 20 62 61  ts" have been ba
0110: 63 6b 65 64 0a 2a 2a 20 6f 75 74 20 73 6f 20 74  cked.** out so t
0120: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  hat the function
0130: 61 6c 69 74 79 20 69 73 20 6e 6f 77 20 74 68 65  ality is now the
0140: 20 73 61 6d 65 20 61 73 20 73 74 61 6e 64 61 72   same as standar
0150: 64 20 70 72 69 6e 74 66 28 29 2e 0a 2a 2a 0a 2a  d printf()..**.*
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
01a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20  *********.**.** 
01b0: 54 68 69 73 20 66 69 6c 65 20 63 6f 6e 74 61 69  This file contai
01c0: 6e 73 20 63 6f 64 65 20 66 6f 72 20 61 20 73 65  ns code for a se
01d0: 74 20 6f 66 20 22 70 72 69 6e 74 66 22 2d 6c 69  t of "printf"-li
01e0: 6b 65 20 72 6f 75 74 69 6e 65 73 2e 20 20 54 68  ke routines.  Th
01f0: 65 73 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ese.** routines 
0200: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 73 20 6d  format strings m
0210: 75 63 68 20 6c 69 6b 65 20 74 68 65 20 70 72 69  uch like the pri
0220: 6e 74 66 28 29 20 66 72 6f 6d 20 74 68 65 20 73  ntf() from the s
0230: 74 61 6e 64 61 72 64 20 43 0a 2a 2a 20 6c 69 62  tandard C.** lib
0240: 72 61 72 79 2c 20 74 68 6f 75 67 68 20 74 68 65  rary, though the
0250: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0260: 68 65 72 65 20 68 61 73 20 65 6e 68 61 6e 63 65  here has enhance
0270: 6d 65 6e 74 73 20 74 6f 20 73 75 70 70 6f 72 74  ments to support
0280: 0a 2a 2a 20 53 51 4c 6c 69 74 65 2e 0a 2a 2f 0a  .** SQLlite..*/.
0290: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
02a0: 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 43 6f  Int.h"../*.** Co
02b0: 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66  nversion types f
02c0: 61 6c 6c 20 69 6e 74 6f 20 76 61 72 69 6f 75 73  all into various
02d0: 20 63 61 74 65 67 6f 72 69 65 73 20 61 73 20 64   categories as d
02e0: 65 66 69 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a  efined by the.**
02f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 75 6d 65   following enume
0300: 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  ration..*/.#defi
0310: 6e 65 20 65 74 52 41 44 49 58 20 20 20 20 20 20  ne etRADIX      
0320: 20 31 20 2f 2a 20 49 6e 74 65 67 65 72 20 74 79   1 /* Integer ty
0330: 70 65 73 2e 20 20 25 64 2c 20 25 78 2c 20 25 6f  pes.  %d, %x, %o
0340: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 2a  , and so forth *
0350: 2f 0a 23 64 65 66 69 6e 65 20 65 74 46 4c 4f 41  /.#define etFLOA
0360: 54 20 20 20 20 20 20 20 32 20 2f 2a 20 46 6c 6f  T       2 /* Flo
0370: 61 74 69 6e 67 20 70 6f 69 6e 74 2e 20 20 25 66  ating point.  %f
0380: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 58   */.#define etEX
0390: 50 20 20 20 20 20 20 20 20 20 33 20 2f 2a 20 45  P         3 /* E
03a0: 78 70 6f 6e 65 6e 74 69 6f 6e 61 6c 20 6e 6f 74  xponentional not
03b0: 61 74 69 6f 6e 2e 20 25 65 20 61 6e 64 20 25 45  ation. %e and %E
03c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 47 45   */.#define etGE
03d0: 4e 45 52 49 43 20 20 20 20 20 34 20 2f 2a 20 46  NERIC     4 /* F
03e0: 6c 6f 61 74 69 6e 67 20 6f 72 20 65 78 70 6f 6e  loating or expon
03f0: 65 6e 74 69 61 6c 2c 20 64 65 70 65 6e 64 69 6e  ential, dependin
0400: 67 20 6f 6e 20 65 78 70 6f 6e 65 6e 74 2e 20 25  g on exponent. %
0410: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53  g */.#define etS
0420: 49 5a 45 20 20 20 20 20 20 20 20 35 20 2f 2a 20  IZE        5 /* 
0430: 52 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66  Return number of
0440: 20 63 68 61 72 61 63 74 65 72 73 20 70 72 6f 63   characters proc
0450: 65 73 73 65 64 20 73 6f 20 66 61 72 2e 20 25 6e  essed so far. %n
0460: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 54   */.#define etST
0470: 52 49 4e 47 20 20 20 20 20 20 36 20 2f 2a 20 53  RING      6 /* S
0480: 74 72 69 6e 67 73 2e 20 25 73 20 2a 2f 0a 23 64  trings. %s */.#d
0490: 65 66 69 6e 65 20 65 74 44 59 4e 53 54 52 49 4e  efine etDYNSTRIN
04a0: 47 20 20 20 37 20 2f 2a 20 44 79 6e 61 6d 69 63  G   7 /* Dynamic
04b0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
04c0: 74 72 69 6e 67 73 2e 20 25 7a 20 2a 2f 0a 23 64  trings. %z */.#d
04d0: 65 66 69 6e 65 20 65 74 50 45 52 43 45 4e 54 20  efine etPERCENT 
04e0: 20 20 20 20 38 20 2f 2a 20 50 65 72 63 65 6e 74      8 /* Percent
04f0: 20 73 79 6d 62 6f 6c 2e 20 25 25 20 2a 2f 0a 23   symbol. %% */.#
0500: 64 65 66 69 6e 65 20 65 74 43 48 41 52 58 20 20  define etCHARX  
0510: 20 20 20 20 20 39 20 2f 2a 20 43 68 61 72 61 63       9 /* Charac
0520: 74 65 72 73 2e 20 25 63 20 2a 2f 0a 2f 2a 20 54  ters. %c */./* T
0530: 68 65 20 72 65 73 74 20 61 72 65 20 65 78 74 65  he rest are exte
0540: 6e 73 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d  nsions, not norm
0550: 61 6c 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72  ally found in pr
0560: 69 6e 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  intf() */.#defin
0570: 65 20 65 74 53 51 4c 45 53 43 41 50 45 20 20 31  e etSQLESCAPE  1
0580: 30 20 2f 2a 20 53 74 72 69 6e 67 73 20 77 69 74  0 /* Strings wit
0590: 68 20 27 5c 27 27 20 64 6f 75 62 6c 65 64 2e 20  h '\'' doubled. 
05a0: 20 25 71 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65   %q */.#define e
05b0: 74 53 51 4c 45 53 43 41 50 45 32 20 31 31 20 2f  tSQLESCAPE2 11 /
05c0: 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 27  * Strings with '
05d0: 5c 27 27 20 64 6f 75 62 6c 65 64 20 61 6e 64 20  \'' doubled and 
05e0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 27 27 2c 0a  enclosed in '',.
05f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0600: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 70            NULL p
0610: 6f 69 6e 74 65 72 73 20 72 65 70 6c 61 63 65 64  ointers replaced
0620: 20 62 79 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 25   by SQL NULL.  %
0630: 51 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 54  Q */.#define etT
0640: 4f 4b 45 4e 20 20 20 20 20 20 31 32 20 2f 2a 20  OKEN      12 /* 
0650: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 54  a pointer to a T
0660: 6f 6b 65 6e 20 73 74 72 75 63 74 75 72 65 20 2a  oken structure *
0670: 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 52 43 4c  /.#define etSRCL
0680: 49 53 54 20 20 20 20 31 33 20 2f 2a 20 61 20 70  IST    13 /* a p
0690: 6f 69 6e 74 65 72 20 74 6f 20 61 20 53 72 63 4c  ointer to a SrcL
06a0: 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ist */.#define e
06b0: 74 50 4f 49 4e 54 45 52 20 20 20 20 31 34 20 2f  tPOINTER    14 /
06c0: 2a 20 54 68 65 20 25 70 20 63 6f 6e 76 65 72 73  * The %p convers
06d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65  ion */.#define e
06e0: 74 53 51 4c 45 53 43 41 50 45 33 20 31 35 20 2f  tSQLESCAPE3 15 /
06f0: 2a 20 25 77 20 2d 3e 20 53 74 72 69 6e 67 73 20  * %w -> Strings 
0700: 77 69 74 68 20 27 5c 22 27 20 64 6f 75 62 6c 65  with '\"' double
0710: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 4f  d */.#define etO
0720: 52 44 49 4e 41 4c 20 20 20 20 31 36 20 2f 2a 20  RDINAL    16 /* 
0730: 25 72 20 2d 3e 20 31 73 74 2c 20 32 6e 64 2c 20  %r -> 1st, 2nd, 
0740: 33 72 64 2c 20 34 74 68 2c 20 65 74 63 2e 20 20  3rd, 4th, etc.  
0750: 45 6e 67 6c 69 73 68 20 6f 6e 6c 79 20 2a 2f 0a  English only */.
0760: 0a 23 64 65 66 69 6e 65 20 65 74 49 4e 56 41 4c  .#define etINVAL
0770: 49 44 20 20 20 20 20 30 20 2f 2a 20 41 6e 79 20  ID     0 /* Any 
0780: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f 6e  unrecognized con
0790: 76 65 72 73 69 6f 6e 20 74 79 70 65 20 2a 2f 0a  version type */.
07a0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 79  ../*.** An "etBy
07b0: 74 65 22 20 69 73 20 61 6e 20 38 2d 62 69 74 20  te" is an 8-bit 
07c0: 75 6e 73 69 67 6e 65 64 20 76 61 6c 75 65 2e 0a  unsigned value..
07d0: 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67  */.typedef unsig
07e0: 6e 65 64 20 63 68 61 72 20 65 74 42 79 74 65 3b  ned char etByte;
07f0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 62 75 69  ../*.** Each bui
0800: 6c 74 69 6e 20 63 6f 6e 76 65 72 73 69 6f 6e 20  ltin conversion 
0810: 63 68 61 72 61 63 74 65 72 20 28 65 78 3a 20 74  character (ex: t
0820: 68 65 20 27 64 27 20 69 6e 20 22 25 64 22 29 20  he 'd' in "%d") 
0830: 69 73 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  is described.** 
0840: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
0850: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0860: 73 74 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 70  structure.*/.typ
0870: 65 64 65 66 20 73 74 72 75 63 74 20 65 74 5f 69  edef struct et_i
0880: 6e 66 6f 20 7b 20 20 20 2f 2a 20 49 6e 66 6f 72  nfo {   /* Infor
0890: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
08a0: 68 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 2a  h format field *
08b0: 2f 0a 20 20 63 68 61 72 20 66 6d 74 74 79 70 65  /.  char fmttype
08c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
08d0: 54 68 65 20 66 6f 72 6d 61 74 20 66 69 65 6c 64  The format field
08e0: 20 63 6f 64 65 20 6c 65 74 74 65 72 20 2a 2f 0a   code letter */.
08f0: 20 20 65 74 42 79 74 65 20 62 61 73 65 3b 20 20    etByte base;  
0900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
0910: 65 20 62 61 73 65 20 66 6f 72 20 72 61 64 69 78  e base for radix
0920: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 20   conversion */. 
0930: 20 65 74 42 79 74 65 20 66 6c 61 67 73 3b 20 20   etByte flags;  
0940: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
0950: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 46 4c 41 47   or more of FLAG
0960: 5f 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  _ constants belo
0970: 77 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 74 79  w */.  etByte ty
0980: 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pe;             
0990: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61  /* Conversion pa
09a0: 72 61 64 69 67 6d 20 2a 2f 0a 20 20 65 74 42 79  radigm */.  etBy
09b0: 74 65 20 63 68 61 72 73 65 74 3b 20 20 20 20 20  te charset;     
09c0: 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
09d0: 6e 74 6f 20 61 44 69 67 69 74 73 5b 5d 20 6f 66  nto aDigits[] of
09e0: 20 74 68 65 20 64 69 67 69 74 73 20 73 74 72 69   the digits stri
09f0: 6e 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 70  ng */.  etByte p
0a00: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
0a10: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
0a20: 61 50 72 65 66 69 78 5b 5d 20 6f 66 20 74 68 65  aPrefix[] of the
0a30: 20 70 72 65 66 69 78 20 73 74 72 69 6e 67 20 2a   prefix string *
0a40: 2f 0a 7d 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f 2a  /.} et_info;../*
0a50: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
0a60: 65 73 20 66 6f 72 20 65 74 5f 69 6e 66 6f 2e 66  es for et_info.f
0a70: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
0a80: 46 4c 41 47 5f 53 49 47 4e 45 44 20 20 31 20 20  FLAG_SIGNED  1  
0a90: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
0aa0: 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65  e value to conve
0ab0: 72 74 20 69 73 20 73 69 67 6e 65 64 20 2a 2f 0a  rt is signed */.
0ac0: 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 49 4e 54  #define FLAG_INT
0ad0: 45 52 4e 20 20 32 20 20 20 20 20 2f 2a 20 54 72  ERN  2     /* Tr
0ae0: 75 65 20 69 66 20 66 6f 72 20 69 6e 74 65 72 6e  ue if for intern
0af0: 61 6c 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 23  al use only */.#
0b00: 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 54 52 49  define FLAG_STRI
0b10: 4e 47 20 20 34 20 20 20 20 20 2f 2a 20 41 6c 6c  NG  4     /* All
0b20: 6f 77 20 69 6e 66 69 6e 69 74 79 20 70 72 65 63  ow infinity prec
0b30: 69 73 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ision */.../*.**
0b40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
0b50: 61 62 6c 65 20 69 73 20 73 65 61 72 63 68 65 64  able is searched
0b60: 20 6c 69 6e 65 61 72 6c 79 2c 20 73 6f 20 69 74   linearly, so it
0b70: 20 69 73 20 67 6f 6f 64 20 74 6f 20 70 75 74 20   is good to put 
0b80: 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 66 72 65 71  the.** most freq
0b90: 75 65 6e 74 6c 79 20 75 73 65 64 20 63 6f 6e 76  uently used conv
0ba0: 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66 69 72  ersion types fir
0bb0: 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  st..*/.static co
0bc0: 6e 73 74 20 63 68 61 72 20 61 44 69 67 69 74 73  nst char aDigits
0bd0: 5b 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 39  [] = "0123456789
0be0: 41 42 43 44 45 46 30 31 32 33 34 35 36 37 38 39  ABCDEF0123456789
0bf0: 61 62 63 64 65 66 22 3b 0a 73 74 61 74 69 63 20  abcdef";.static 
0c00: 63 6f 6e 73 74 20 63 68 61 72 20 61 50 72 65 66  const char aPref
0c10: 69 78 5b 5d 20 3d 20 22 2d 78 30 5c 30 30 30 58  ix[] = "-x0\000X
0c20: 30 22 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  0";.static const
0c30: 20 65 74 5f 69 6e 66 6f 20 66 6d 74 69 6e 66 6f   et_info fmtinfo
0c40: 5b 5d 20 3d 20 7b 0a 20 20 7b 20 20 27 64 27 2c  [] = {.  {  'd',
0c50: 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c   10, 1, etRADIX,
0c60: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20        0,  0 },. 
0c70: 20 7b 20 20 27 73 27 2c 20 20 30 2c 20 34 2c 20   {  's',  0, 4, 
0c80: 65 74 53 54 52 49 4e 47 2c 20 20 20 20 20 30 2c  etSTRING,     0,
0c90: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 67 27 2c    0 },.  {  'g',
0ca0: 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 49    0, 1, etGENERI
0cb0: 43 2c 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 20  C,    30, 0 },. 
0cc0: 20 7b 20 20 27 7a 27 2c 20 20 30 2c 20 34 2c 20   {  'z',  0, 4, 
0cd0: 65 74 44 59 4e 53 54 52 49 4e 47 2c 20 20 30 2c  etDYNSTRING,  0,
0ce0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 71 27 2c    0 },.  {  'q',
0cf0: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
0d00: 41 50 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20  APE,  0,  0 },. 
0d10: 20 7b 20 20 27 51 27 2c 20 20 30 2c 20 34 2c 20   {  'Q',  0, 4, 
0d20: 65 74 53 51 4c 45 53 43 41 50 45 32 2c 20 30 2c  etSQLESCAPE2, 0,
0d30: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 77 27 2c    0 },.  {  'w',
0d40: 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43    0, 4, etSQLESC
0d50: 41 50 45 33 2c 20 30 2c 20 20 30 20 7d 2c 0a 20  APE3, 0,  0 },. 
0d60: 20 7b 20 20 27 63 27 2c 20 20 30 2c 20 30 2c 20   {  'c',  0, 0, 
0d70: 65 74 43 48 41 52 58 2c 20 20 20 20 20 20 30 2c  etCHARX,      0,
0d80: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6f 27 2c    0 },.  {  'o',
0d90: 20 20 38 2c 20 30 2c 20 65 74 52 41 44 49 58 2c    8, 0, etRADIX,
0da0: 20 20 20 20 20 20 30 2c 20 20 32 20 7d 2c 0a 20        0,  2 },. 
0db0: 20 7b 20 20 27 75 27 2c 20 31 30 2c 20 30 2c 20   {  'u', 10, 0, 
0dc0: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
0dd0: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 78 27 2c    0 },.  {  'x',
0de0: 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c   16, 0, etRADIX,
0df0: 20 20 20 20 20 20 31 36 2c 20 31 20 7d 2c 0a 20        16, 1 },. 
0e00: 20 7b 20 20 27 58 27 2c 20 31 36 2c 20 30 2c 20   {  'X', 16, 0, 
0e10: 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c  etRADIX,      0,
0e20: 20 20 34 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53    4 },.#ifndef S
0e30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
0e40: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7b 20 20 27  ING_POINT.  {  '
0e50: 66 27 2c 20 20 30 2c 20 31 2c 20 65 74 46 4c 4f  f',  0, 1, etFLO
0e60: 41 54 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d  AT,      0,  0 }
0e70: 2c 0a 20 20 7b 20 20 27 65 27 2c 20 20 30 2c 20  ,.  {  'e',  0, 
0e80: 31 2c 20 65 74 45 58 50 2c 20 20 20 20 20 20 20  1, etEXP,       
0e90: 20 33 30 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27   30, 0 },.  {  '
0ea0: 45 27 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 50  E',  0, 1, etEXP
0eb0: 2c 20 20 20 20 20 20 20 20 31 34 2c 20 30 20 7d  ,        14, 0 }
0ec0: 2c 0a 20 20 7b 20 20 27 47 27 2c 20 20 30 2c 20  ,.  {  'G',  0, 
0ed0: 31 2c 20 65 74 47 45 4e 45 52 49 43 2c 20 20 20  1, etGENERIC,   
0ee0: 20 31 34 2c 20 30 20 7d 2c 0a 23 65 6e 64 69 66   14, 0 },.#endif
0ef0: 0a 20 20 7b 20 20 27 69 27 2c 20 31 30 2c 20 31  .  {  'i', 10, 1
0f00: 2c 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20  , etRADIX,      
0f10: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6e  0,  0 },.  {  'n
0f20: 27 2c 20 20 30 2c 20 30 2c 20 65 74 53 49 5a 45  ',  0, 0, etSIZE
0f30: 2c 20 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c  ,       0,  0 },
0f40: 0a 20 20 7b 20 20 27 25 27 2c 20 20 30 2c 20 30  .  {  '%',  0, 0
0f50: 2c 20 65 74 50 45 52 43 45 4e 54 2c 20 20 20 20  , etPERCENT,    
0f60: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 70  0,  0 },.  {  'p
0f70: 27 2c 20 31 36 2c 20 30 2c 20 65 74 50 4f 49 4e  ', 16, 0, etPOIN
0f80: 54 45 52 2c 20 20 20 20 30 2c 20 20 31 20 7d 2c  TER,    0,  1 },
0f90: 0a 0a 2f 2a 20 41 6c 6c 20 74 68 65 20 72 65 73  ../* All the res
0fa0: 74 20 68 61 76 65 20 74 68 65 20 46 4c 41 47 5f  t have the FLAG_
0fb0: 49 4e 54 45 52 4e 20 62 69 74 20 73 65 74 20 61  INTERN bit set a
0fc0: 6e 64 20 61 72 65 20 74 68 75 73 20 66 6f 72 20  nd are thus for 
0fd0: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 75 73 65 20  internal.** use 
0fe0: 6f 6e 6c 79 20 2a 2f 0a 20 20 7b 20 20 27 54 27  only */.  {  'T'
0ff0: 2c 20 20 30 2c 20 32 2c 20 65 74 54 4f 4b 45 4e  ,  0, 2, etTOKEN
1000: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  ,      0,  0 },.
1010: 20 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 32 2c    {  'S',  0, 2,
1020: 20 65 74 53 52 43 4c 49 53 54 2c 20 20 20 20 30   etSRCLIST,    0
1030: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 72 27  ,  0 },.  {  'r'
1040: 2c 20 31 30 2c 20 33 2c 20 65 74 4f 52 44 49 4e  , 10, 3, etORDIN
1050: 41 4c 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a  AL,    0,  0 },.
1060: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  };../*.** If SQL
1070: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
1080: 47 5f 50 4f 49 4e 54 20 69 73 20 64 65 66 69 6e  G_POINT is defin
1090: 65 64 2c 20 74 68 65 6e 20 6e 6f 6e 65 20 6f 66  ed, then none of
10a0: 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f   the floating po
10b0: 69 6e 74 0a 2a 2a 20 63 6f 6e 76 65 72 73 69 6f  int.** conversio
10c0: 6e 73 20 77 69 6c 6c 20 77 6f 72 6b 2e 0a 2a 2f  ns will work..*/
10d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10e0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
10f0: 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 2a 76 61 6c 22  INT./*.** "*val"
1100: 20 69 73 20 61 20 64 6f 75 62 6c 65 20 73 75 63   is a double suc
1110: 68 20 74 68 61 74 20 30 2e 31 20 3c 3d 20 2a 76  h that 0.1 <= *v
1120: 61 6c 20 3c 20 31 30 2e 30 0a 2a 2a 20 52 65 74  al < 10.0.** Ret
1130: 75 72 6e 20 74 68 65 20 61 73 63 69 69 20 63 6f  urn the ascii co
1140: 64 65 20 66 6f 72 20 74 68 65 20 6c 65 61 64 69  de for the leadi
1150: 6e 67 20 64 69 67 69 74 20 6f 66 20 2a 76 61 6c  ng digit of *val
1160: 2c 20 74 68 65 6e 0a 2a 2a 20 6d 75 6c 74 69 70  , then.** multip
1170: 6c 79 20 22 2a 76 61 6c 22 20 62 79 20 31 30 2e  ly "*val" by 10.
1180: 30 20 74 6f 20 72 65 6e 6f 72 6d 61 6c 69 7a 65  0 to renormalize
1190: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 3a  ..**.** Example:
11a0: 0a 2a 2a 20 20 20 20 20 69 6e 70 75 74 3a 20 20  .**     input:  
11b0: 20 20 20 2a 76 61 6c 20 3d 20 33 2e 31 34 31 35     *val = 3.1415
11c0: 39 0a 2a 2a 20 20 20 20 20 6f 75 74 70 75 74 3a  9.**     output:
11d0: 20 20 20 20 2a 76 61 6c 20 3d 20 31 2e 34 31 35      *val = 1.415
11e0: 39 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65  9    function re
11f0: 74 75 72 6e 20 3d 20 27 33 27 0a 2a 2a 0a 2a 2a  turn = '3'.**.**
1200: 20 54 68 65 20 63 6f 75 6e 74 65 72 20 2a 63 6e   The counter *cn
1210: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
1220: 20 65 61 63 68 20 74 69 6d 65 2e 20 20 41 66 74   each time.  Aft
1230: 65 72 20 63 6f 75 6e 74 65 72 20 65 78 63 65 65  er counter excee
1240: 64 73 0a 2a 2a 20 31 36 20 28 74 68 65 20 6e 75  ds.** 16 (the nu
1250: 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63  mber of signific
1260: 61 6e 74 20 64 69 67 69 74 73 20 69 6e 20 61 20  ant digits in a 
1270: 36 34 2d 62 69 74 20 66 6c 6f 61 74 29 20 27 30  64-bit float) '0
1280: 27 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 72  ' is.** always r
1290: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
12a0: 69 63 20 63 68 61 72 20 65 74 5f 67 65 74 64 69  ic char et_getdi
12b0: 67 69 74 28 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  git(LONGDOUBLE_T
12c0: 59 50 45 20 2a 76 61 6c 2c 20 69 6e 74 20 2a 63  YPE *val, int *c
12d0: 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69 74  nt){.  int digit
12e0: 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ;.  LONGDOUBLE_T
12f0: 59 50 45 20 64 3b 0a 20 20 69 66 28 20 28 2a 63  YPE d;.  if( (*c
1300: 6e 74 29 3c 3d 30 20 29 20 72 65 74 75 72 6e 20  nt)<=0 ) return 
1310: 27 30 27 3b 0a 20 20 28 2a 63 6e 74 29 2d 2d 3b  '0';.  (*cnt)--;
1320: 0a 20 20 64 69 67 69 74 20 3d 20 28 69 6e 74 29  .  digit = (int)
1330: 2a 76 61 6c 3b 0a 20 20 64 20 3d 20 64 69 67 69  *val;.  d = digi
1340: 74 3b 0a 20 20 64 69 67 69 74 20 2b 3d 20 27 30  t;.  digit += '0
1350: 27 3b 0a 20 20 2a 76 61 6c 20 3d 20 28 2a 76 61  ';.  *val = (*va
1360: 6c 20 2d 20 64 29 2a 31 30 2e 30 3b 0a 20 20 72  l - d)*10.0;.  r
1370: 65 74 75 72 6e 20 28 63 68 61 72 29 64 69 67 69  eturn (char)digi
1380: 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  t;.}.#endif /* S
1390: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
13a0: 49 4e 47 5f 50 4f 49 4e 54 20 2a 2f 0a 0a 2f 2a  ING_POINT */../*
13b0: 0a 2a 2a 20 41 70 70 65 6e 64 20 4e 20 73 70 61  .** Append N spa
13c0: 63 65 20 63 68 61 72 61 63 74 65 72 73 20 74 6f  ce characters to
13d0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
13e0: 67 20 62 75 66 66 65 72 2e 0a 2a 2f 0a 76 6f 69  g buffer..*/.voi
13f0: 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53  d sqlite3AppendS
1400: 70 61 63 65 28 53 74 72 41 63 63 75 6d 20 2a 70  pace(StrAccum *p
1410: 41 63 63 75 6d 2c 20 69 6e 74 20 4e 29 7b 0a 20  Accum, int N){. 
1420: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
1430: 61 72 20 7a 53 70 61 63 65 73 5b 5d 20 3d 20 22  ar zSpaces[] = "
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3b 0a               ";.
1460: 20 20 77 68 69 6c 65 28 20 4e 3e 3d 28 69 6e 74    while( N>=(int
1470: 29 73 69 7a 65 6f 66 28 7a 53 70 61 63 65 73 29  )sizeof(zSpaces)
1480: 2d 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  -1 ){.    sqlite
1490: 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
14a0: 70 41 63 63 75 6d 2c 20 7a 53 70 61 63 65 73 2c  pAccum, zSpaces,
14b0: 20 73 69 7a 65 6f 66 28 7a 53 70 61 63 65 73 29   sizeof(zSpaces)
14c0: 2d 31 29 3b 0a 20 20 20 20 4e 20 2d 3d 20 73 69  -1);.    N -= si
14d0: 7a 65 6f 66 28 7a 53 70 61 63 65 73 29 2d 31 3b  zeof(zSpaces)-1;
14e0: 0a 20 20 7d 0a 20 20 69 66 28 20 4e 3e 30 20 29  .  }.  if( N>0 )
14f0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 74 72  {.    sqlite3Str
1500: 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63  AccumAppend(pAcc
1510: 75 6d 2c 20 7a 53 70 61 63 65 73 2c 20 4e 29 3b  um, zSpaces, N);
1520: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65  .  }.}../*.** Se
1530: 74 20 74 68 65 20 53 74 72 41 63 63 75 6d 20 6f  t the StrAccum o
1540: 62 6a 65 63 74 20 74 6f 20 61 6e 20 65 72 72 6f  bject to an erro
1550: 72 20 6d 6f 64 65 2e 0a 2a 2f 0a 76 6f 69 64 20  r mode..*/.void 
1560: 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72  setStrAccumError
1570: 28 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 75 38  (StrAccum *p, u8
1580: 20 65 45 72 72 6f 72 29 7b 0a 20 20 70 2d 3e 61   eError){.  p->a
1590: 63 63 45 72 72 6f 72 20 3d 20 65 45 72 72 6f 72  ccError = eError
15a0: 3b 0a 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20  ;.  p->nAlloc = 
15b0: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 6d  0;.}../*.** On m
15c0: 61 63 68 69 6e 65 73 20 77 69 74 68 20 61 20 73  achines with a s
15d0: 6d 61 6c 6c 20 73 74 61 63 6b 20 73 69 7a 65 2c  mall stack size,
15e0: 20 79 6f 75 20 63 61 6e 20 72 65 64 65 66 69 6e   you can redefin
15f0: 65 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  e the.** SQLITE_
1600: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20 74  PRINT_BUF_SIZE t
1610: 6f 20 62 65 20 73 6f 6d 65 74 68 69 6e 67 20 73  o be something s
1620: 6d 61 6c 6c 65 72 2c 20 69 66 20 64 65 73 69 72  maller, if desir
1630: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
1640: 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f  QLITE_PRINT_BUF_
1650: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
1660: 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53  LITE_PRINT_BUF_S
1670: 49 5a 45 20 37 30 0a 23 65 6e 64 69 66 0a 23 64  IZE 70.#endif.#d
1680: 65 66 69 6e 65 20 65 74 42 55 46 53 49 5a 45 20  efine etBUFSIZE 
1690: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46  SQLITE_PRINT_BUF
16a0: 5f 53 49 5a 45 20 20 2f 2a 20 53 69 7a 65 20 6f  _SIZE  /* Size o
16b0: 66 20 74 68 65 20 6f 75 74 70 75 74 20 62 75 66  f the output buf
16c0: 66 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  fer */../*.** Re
16d0: 6e 64 65 72 20 61 20 73 74 72 69 6e 67 20 67 69  nder a string gi
16e0: 76 65 6e 20 62 79 20 22 66 6d 74 22 20 69 6e 74  ven by "fmt" int
16f0: 6f 20 74 68 65 20 53 74 72 41 63 63 75 6d 20 6f  o the StrAccum o
1700: 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  bject..*/.void s
1710: 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 0a  qlite3VXPrintf(.
1720: 20 20 53 74 72 41 63 63 75 6d 20 2a 70 41 63 63    StrAccum *pAcc
1730: 75 6d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  um,             
1740: 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61       /* Accumula
1750: 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
1760: 2a 2f 0a 20 20 69 6e 74 20 75 73 65 45 78 74 65  */.  int useExte
1770: 6e 64 65 64 2c 20 20 20 20 20 20 20 20 20 20 20  nded,           
1780: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 77          /* Allow
1790: 20 65 78 74 65 6e 64 65 64 20 25 2d 63 6f 6e 76   extended %-conv
17a0: 65 72 73 69 6f 6e 73 20 2a 2f 0a 20 20 63 6f 6e  ersions */.  con
17b0: 73 74 20 63 68 61 72 20 2a 66 6d 74 2c 20 20 20  st char *fmt,   
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d0: 2f 2a 20 46 6f 72 6d 61 74 20 73 74 72 69 6e 67  /* Format string
17e0: 20 2a 2f 0a 20 20 76 61 5f 6c 69 73 74 20 61 70   */.  va_list ap
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1800: 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 67 75           /* argu
1810: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ments */.){.  in
1820: 74 20 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  t c;            
1830: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1840: 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
1850: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1860: 2a 2f 0a 20 20 63 68 61 72 20 2a 62 75 66 70 74  */.  char *bufpt
1870: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1880: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68  /* Pointer to th
1890: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 62 75 66  e conversion buf
18a0: 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 70 72 65  fer */.  int pre
18b0: 63 69 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  cision;         
18c0: 20 20 20 20 2f 2a 20 50 72 65 63 69 73 69 6f 6e      /* Precision
18d0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
18e0: 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6c  field */.  int l
18f0: 65 6e 67 74 68 3b 20 20 20 20 20 20 20 20 20 20  ength;          
1900: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1910: 6f 66 20 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a  of the field */.
1920: 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1940: 41 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73  A general purpos
1950: 65 20 6c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  e loop counter *
1960: 2f 0a 20 20 69 6e 74 20 77 69 64 74 68 3b 20 20  /.  int width;  
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1980: 2a 20 57 69 64 74 68 20 6f 66 20 74 68 65 20 63  * Width of the c
1990: 75 72 72 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a  urrent field */.
19a0: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c 65    etByte flag_le
19b0: 66 74 6a 75 73 74 69 66 79 3b 20 20 20 2f 2a 20  ftjustify;   /* 
19c0: 54 72 75 65 20 69 66 20 22 2d 22 20 66 6c 61 67  True if "-" flag
19d0: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
19e0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 70 6c 75   etByte flag_plu
19f0: 73 73 69 67 6e 3b 20 20 20 20 20 20 2f 2a 20 54  ssign;      /* T
1a00: 72 75 65 20 69 66 20 22 2b 22 20 66 6c 61 67 20  rue if "+" flag 
1a10: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1a20: 65 74 42 79 74 65 20 66 6c 61 67 5f 62 6c 61 6e  etByte flag_blan
1a30: 6b 73 69 67 6e 3b 20 20 20 20 20 2f 2a 20 54 72  ksign;     /* Tr
1a40: 75 65 20 69 66 20 22 20 22 20 66 6c 61 67 20 69  ue if " " flag i
1a50: 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65  s present */.  e
1a60: 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 65 72  tByte flag_alter
1a70: 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a 20 54 72 75  nateform; /* Tru
1a80: 65 20 69 66 20 22 23 22 20 66 6c 61 67 20 69 73  e if "#" flag is
1a90: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74   present */.  et
1aa0: 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 66 6f 72  Byte flag_altfor
1ab0: 6d 32 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65  m2;      /* True
1ac0: 20 69 66 20 22 21 22 20 66 6c 61 67 20 69 73 20   if "!" flag is 
1ad0: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42  present */.  etB
1ae0: 79 74 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64  yte flag_zeropad
1af0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
1b00: 69 66 20 66 69 65 6c 64 20 77 69 64 74 68 20 63  if field width c
1b10: 6f 6e 73 74 61 6e 74 20 73 74 61 72 74 73 20 77  onstant starts w
1b20: 69 74 68 20 7a 65 72 6f 20 2a 2f 0a 20 20 65 74  ith zero */.  et
1b30: 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 3b 20  Byte flag_long; 
1b40: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b50: 20 69 66 20 22 6c 22 20 66 6c 61 67 20 69 73 20   if "l" flag is 
1b60: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42  present */.  etB
1b70: 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e  yte flag_longlon
1b80: 67 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  g;      /* True 
1b90: 69 66 20 74 68 65 20 22 6c 6c 22 20 66 6c 61 67  if the "ll" flag
1ba0: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
1bb0: 20 65 74 42 79 74 65 20 64 6f 6e 65 3b 20 20 20   etByte done;   
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1bd0: 6f 6f 70 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20  oop termination 
1be0: 66 6c 61 67 20 2a 2f 0a 20 20 65 74 42 79 74 65  flag */.  etByte
1bf0: 20 78 74 79 70 65 20 3d 20 30 3b 20 20 20 20 20   xtype = 0;     
1c00: 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69       /* Conversi
1c10: 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f 0a 20  on paradigm */. 
1c20: 20 63 68 61 72 20 70 72 65 66 69 78 3b 20 20 20   char prefix;   
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1c40: 72 65 66 69 78 20 63 68 61 72 61 63 74 65 72 2e  refix character.
1c50: 20 20 22 2b 22 20 6f 72 20 22 2d 22 20 6f 72 20    "+" or "-" or 
1c60: 22 20 22 20 6f 72 20 27 5c 30 27 2e 20 2a 2f 0a  " " or '\0'. */.
1c70: 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20    sqlite_uint64 
1c80: 6c 6f 6e 67 76 61 6c 75 65 3b 20 20 20 2f 2a 20  longvalue;   /* 
1c90: 56 61 6c 75 65 20 66 6f 72 20 69 6e 74 65 67 65  Value for intege
1ca0: 72 20 74 79 70 65 73 20 2a 2f 0a 20 20 4c 4f 4e  r types */.  LON
1cb0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 72 65 61  GDOUBLE_TYPE rea
1cc0: 6c 76 61 6c 75 65 3b 20 2f 2a 20 56 61 6c 75 65  lvalue; /* Value
1cd0: 20 66 6f 72 20 72 65 61 6c 20 74 79 70 65 73 20   for real types 
1ce0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 65 74 5f 69 6e  */.  const et_in
1cf0: 66 6f 20 2a 69 6e 66 6f 70 3b 20 20 20 20 20 20  fo *infop;      
1d00: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68  /* Pointer to th
1d10: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e  e appropriate in
1d20: 66 6f 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  fo structure */.
1d30: 20 20 63 68 61 72 20 2a 7a 4f 75 74 3b 20 20 20    char *zOut;   
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d50: 52 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72  Rendering buffer
1d60: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20   */.  int nOut; 
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d80: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1d90: 72 65 6e 64 65 72 69 6e 67 20 62 75 66 66 65 72  rendering buffer
1da0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 78 74   */.  char *zExt
1db0: 72 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ra;             
1dc0: 20 2f 2a 20 4d 61 6c 6c 6f 63 65 64 20 6d 65 6d   /* Malloced mem
1dd0: 6f 72 79 20 75 73 65 64 20 62 79 20 73 6f 6d 65  ory used by some
1de0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 23   conversion */.#
1df0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e00: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
1e10: 54 0a 20 20 69 6e 74 20 20 65 78 70 2c 20 65 32  T.  int  exp, e2
1e20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1e30: 2a 20 65 78 70 6f 6e 65 6e 74 20 6f 66 20 72 65  * exponent of re
1e40: 61 6c 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  al numbers */.  
1e50: 69 6e 74 20 6e 73 64 3b 20 20 20 20 20 20 20 20  int nsd;        
1e60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e70: 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 63  mber of signific
1e80: 61 6e 74 20 64 69 67 69 74 73 20 72 65 74 75 72  ant digits retur
1e90: 6e 65 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  ned */.  double 
1ea0: 72 6f 75 6e 64 65 72 3b 20 20 20 20 20 20 20 20  rounder;        
1eb0: 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72 20      /* Used for 
1ec0: 72 6f 75 6e 64 69 6e 67 20 66 6c 6f 61 74 69 6e  rounding floatin
1ed0: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 2a  g point values *
1ee0: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
1ef0: 64 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  dp;            /
1f00: 2a 20 54 72 75 65 20 69 66 20 64 65 63 69 6d 61  * True if decima
1f10: 6c 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 62  l point should b
1f20: 65 20 73 68 6f 77 6e 20 2a 2f 0a 20 20 65 74 42  e shown */.  etB
1f30: 79 74 65 20 66 6c 61 67 5f 72 74 7a 3b 20 20 20  yte flag_rtz;   
1f40: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f50: 69 66 20 74 72 61 69 6c 69 6e 67 20 7a 65 72 6f  if trailing zero
1f60: 73 20 73 68 6f 75 6c 64 20 62 65 20 72 65 6d 6f  s should be remo
1f70: 76 65 64 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ved */.#endif.  
1f80: 63 68 61 72 20 62 75 66 5b 65 74 42 55 46 53 49  char buf[etBUFSI
1f90: 5a 45 5d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  ZE];       /* Co
1fa0: 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 20  nversion buffer 
1fb0: 2a 2f 0a 0a 20 20 62 75 66 70 74 20 3d 20 30 3b  */..  bufpt = 0;
1fc0: 0a 20 20 66 6f 72 28 3b 20 28 63 3d 28 2a 66 6d  .  for(; (c=(*fm
1fd0: 74 29 29 21 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a  t))!=0; ++fmt){.
1fe0: 20 20 20 20 69 66 28 20 63 21 3d 27 25 27 20 29      if( c!='%' )
1ff0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 61 6d 74 3b  {.      int amt;
2000: 0a 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 28  .      bufpt = (
2010: 63 68 61 72 20 2a 29 66 6d 74 3b 0a 20 20 20 20  char *)fmt;.    
2020: 20 20 61 6d 74 20 3d 20 31 3b 0a 20 20 20 20 20    amt = 1;.     
2030: 20 77 68 69 6c 65 28 20 28 63 3d 28 2a 2b 2b 66   while( (c=(*++f
2040: 6d 74 29 29 21 3d 27 25 27 20 26 26 20 63 21 3d  mt))!='%' && c!=
2050: 30 20 29 20 61 6d 74 2b 2b 3b 0a 20 20 20 20 20  0 ) amt++;.     
2060: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2070: 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 62  Append(pAccum, b
2080: 75 66 70 74 2c 20 61 6d 74 29 3b 0a 20 20 20 20  ufpt, amt);.    
2090: 20 20 69 66 28 20 63 3d 3d 30 20 29 20 62 72 65    if( c==0 ) bre
20a0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ak;.    }.    if
20b0: 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 3d 3d  ( (c=(*++fmt))==
20c0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
20d0: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
20e0: 28 70 41 63 63 75 6d 2c 20 22 25 22 2c 20 31 29  (pAccum, "%", 1)
20f0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2100: 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 69 6e 64     }.    /* Find
2110: 20 6f 75 74 20 77 68 61 74 20 66 6c 61 67 73 20   out what flags 
2120: 61 72 65 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20  are present */. 
2130: 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74     flag_leftjust
2140: 69 66 79 20 3d 20 66 6c 61 67 5f 70 6c 75 73 73  ify = flag_pluss
2150: 69 67 6e 20 3d 20 66 6c 61 67 5f 62 6c 61 6e 6b  ign = flag_blank
2160: 73 69 67 6e 20 3d 20 0a 20 20 20 20 20 66 6c 61  sign = .     fla
2170: 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20  g_alternateform 
2180: 3d 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 20  = flag_altform2 
2190: 3d 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d  = flag_zeropad =
21a0: 20 30 3b 0a 20 20 20 20 64 6f 6e 65 20 3d 20 30   0;.    done = 0
21b0: 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
21c0: 73 77 69 74 63 68 28 20 63 20 29 7b 0a 20 20 20  switch( c ){.   
21d0: 20 20 20 20 20 63 61 73 65 20 27 2d 27 3a 20 20       case '-':  
21e0: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66   flag_leftjustif
21f0: 79 20 3d 20 31 3b 20 20 20 20 20 62 72 65 61 6b  y = 1;     break
2200: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  ;.        case '
2210: 2b 27 3a 20 20 20 66 6c 61 67 5f 70 6c 75 73 73  +':   flag_pluss
2220: 69 67 6e 20 3d 20 31 3b 20 20 20 20 20 20 20 20  ign = 1;        
2230: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
2240: 61 73 65 20 27 20 27 3a 20 20 20 66 6c 61 67 5f  ase ' ':   flag_
2250: 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 31 3b 20 20  blanksign = 1;  
2260: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2270: 20 20 20 20 63 61 73 65 20 27 23 27 3a 20 20 20      case '#':   
2280: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
2290: 72 6d 20 3d 20 31 3b 20 20 20 62 72 65 61 6b 3b  rm = 1;   break;
22a0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27 21  .        case '!
22b0: 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f 72  ':   flag_altfor
22c0: 6d 32 20 3d 20 31 3b 20 20 20 20 20 20 20 20 62  m2 = 1;        b
22d0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
22e0: 73 65 20 27 30 27 3a 20 20 20 66 6c 61 67 5f 7a  se '0':   flag_z
22f0: 65 72 6f 70 61 64 20 3d 20 31 3b 20 20 20 20 20  eropad = 1;     
2300: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2310: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 64     default:    d
2320: 6f 6e 65 20 3d 20 31 3b 20 20 20 20 20 20 20 20  one = 1;        
2330: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2340: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68 69        }.    }whi
2350: 6c 65 28 20 21 64 6f 6e 65 20 26 26 20 28 63 3d  le( !done && (c=
2360: 28 2a 2b 2b 66 6d 74 29 29 21 3d 30 20 29 3b 0a  (*++fmt))!=0 );.
2370: 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65 20 66      /* Get the f
2380: 69 65 6c 64 20 77 69 64 74 68 20 2a 2f 0a 20 20  ield width */.  
2390: 20 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20    width = 0;.   
23a0: 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a 20   if( c=='*' ){. 
23b0: 20 20 20 20 20 77 69 64 74 68 20 3d 20 76 61 5f       width = va_
23c0: 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20  arg(ap,int);.   
23d0: 20 20 20 69 66 28 20 77 69 64 74 68 3c 30 20 29     if( width<0 )
23e0: 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c  {.        flag_l
23f0: 65 66 74 6a 75 73 74 69 66 79 20 3d 20 31 3b 0a  eftjustify = 1;.
2400: 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d 20          width = 
2410: 2d 77 69 64 74 68 3b 0a 20 20 20 20 20 20 7d 0a  -width;.      }.
2420: 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74        c = *++fmt
2430: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2440: 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27     while( c>='0'
2450: 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20   && c<='9' ){.  
2460: 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 77 69        width = wi
2470: 64 74 68 2a 31 30 20 2b 20 63 20 2d 20 27 30 27  dth*10 + c - '0'
2480: 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a 2b  ;.        c = *+
2490: 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  +fmt;.      }.  
24a0: 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65 74 20 74    }.    /* Get t
24b0: 68 65 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a  he precision */.
24c0: 20 20 20 20 69 66 28 20 63 3d 3d 27 2e 27 20 29      if( c=='.' )
24d0: 7b 0a 20 20 20 20 20 20 70 72 65 63 69 73 69 6f  {.      precisio
24e0: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20 3d  n = 0;.      c =
24f0: 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 69   *++fmt;.      i
2500: 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20  f( c=='*' ){.   
2510: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d       precision =
2520: 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b   va_arg(ap,int);
2530: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65  .        if( pre
2540: 63 69 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69  cision<0 ) preci
2550: 73 69 6f 6e 20 3d 20 2d 70 72 65 63 69 73 69 6f  sion = -precisio
2560: 6e 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 2a  n;.        c = *
2570: 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 65 6c  ++fmt;.      }el
2580: 73 65 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  se{.        whil
2590: 65 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d  e( c>='0' && c<=
25a0: 27 39 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '9' ){.         
25b0: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 70 72 65   precision = pre
25c0: 63 69 73 69 6f 6e 2a 31 30 20 2b 20 63 20 2d 20  cision*10 + c - 
25d0: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 63  '0';.          c
25e0: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
25f0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
2600: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 72   }else{.      pr
2610: 65 63 69 73 69 6f 6e 20 3d 20 2d 31 3b 0a 20 20  ecision = -1;.  
2620: 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65 74 20 74    }.    /* Get t
2630: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79  he conversion ty
2640: 70 65 20 6d 6f 64 69 66 69 65 72 20 2a 2f 0a 20  pe modifier */. 
2650: 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b     if( c=='l' ){
2660: 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67  .      flag_long
2670: 20 3d 20 31 3b 0a 20 20 20 20 20 20 63 20 3d 20   = 1;.      c = 
2680: 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 69 66  *++fmt;.      if
2690: 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20 20 20 20  ( c=='l' ){.    
26a0: 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e      flag_longlon
26b0: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 63  g = 1;.        c
26c0: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20   = *++fmt;.     
26d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
26e0: 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20  flag_longlong = 
26f0: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
2700: 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 6c 61 67  else{.      flag
2710: 5f 6c 6f 6e 67 20 3d 20 66 6c 61 67 5f 6c 6f 6e  _long = flag_lon
2720: 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 20 7d  glong = 0;.    }
2730: 0a 20 20 20 20 2f 2a 20 46 65 74 63 68 20 74 68  .    /* Fetch th
2740: 65 20 69 6e 66 6f 20 65 6e 74 72 79 20 66 6f 72  e info entry for
2750: 20 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20   the field */.  
2760: 20 20 69 6e 66 6f 70 20 3d 20 26 66 6d 74 69 6e    infop = &fmtin
2770: 66 6f 5b 30 5d 3b 0a 20 20 20 20 78 74 79 70 65  fo[0];.    xtype
2780: 20 3d 20 65 74 49 4e 56 41 4c 49 44 3b 0a 20 20   = etINVALID;.  
2790: 20 20 66 6f 72 28 69 64 78 3d 30 3b 20 69 64 78    for(idx=0; idx
27a0: 3c 41 72 72 61 79 53 69 7a 65 28 66 6d 74 69 6e  <ArraySize(fmtin
27b0: 66 6f 29 3b 20 69 64 78 2b 2b 29 7b 0a 20 20 20  fo); idx++){.   
27c0: 20 20 20 69 66 28 20 63 3d 3d 66 6d 74 69 6e 66     if( c==fmtinf
27d0: 6f 5b 69 64 78 5d 2e 66 6d 74 74 79 70 65 20 29  o[idx].fmttype )
27e0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 66 6f 70 20  {.        infop 
27f0: 3d 20 26 66 6d 74 69 6e 66 6f 5b 69 64 78 5d 3b  = &fmtinfo[idx];
2800: 0a 20 20 20 20 20 20 20 20 69 66 28 20 75 73 65  .        if( use
2810: 45 78 74 65 6e 64 65 64 20 7c 7c 20 28 69 6e 66  Extended || (inf
2820: 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47  op->flags & FLAG
2830: 5f 49 4e 54 45 52 4e 29 3d 3d 30 20 29 7b 0a 20  _INTERN)==0 ){. 
2840: 20 20 20 20 20 20 20 20 20 78 74 79 70 65 20 3d           xtype =
2850: 20 69 6e 66 6f 70 2d 3e 74 79 70 65 3b 0a 20 20   infop->type;.  
2860: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2870: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
2880: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2890: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
28a0: 20 20 20 20 7d 0a 20 20 20 20 7a 45 78 74 72 61      }.    zExtra
28b0: 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20   = 0;..    /*.  
28c0: 20 20 2a 2a 20 41 74 20 74 68 69 73 20 70 6f 69    ** At this poi
28d0: 6e 74 2c 20 76 61 72 69 61 62 6c 65 73 20 61 72  nt, variables ar
28e0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73  e initialized as
28f0: 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a   follows:.    **
2900: 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61  .    **   flag_a
2910: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 20 20 20  lternateform    
2920: 20 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20        TRUE if a 
2930: 27 23 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a  '#' is present..
2940: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c      **   flag_al
2950: 74 66 6f 72 6d 32 20 20 20 20 20 20 20 20 20 20  tform2          
2960: 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27       TRUE if a '
2970: 21 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20  !' is present.. 
2980: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 70 6c 75     **   flag_plu
2990: 73 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20  ssign           
29a0: 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27 2b      TRUE if a '+
29b0: 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20  ' is present..  
29c0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 65 66 74    **   flag_left
29d0: 6a 75 73 74 69 66 79 20 20 20 20 20 20 20 20 20  justify         
29e0: 20 20 20 54 52 55 45 20 69 66 20 61 20 27 2d 27     TRUE if a '-'
29f0: 20 69 73 20 70 72 65 73 65 6e 74 20 6f 72 20 69   is present or i
2a00: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 20 20 20  f the.    **    
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 20 20 20 20 20 20 20 20 20 20 66 69 65 6c 64             field
2a30: 20 77 69 64 74 68 20 77 61 73 20 6e 65 67 61 74   width was negat
2a40: 69 76 65 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c  ive..    **   fl
2a50: 61 67 5f 7a 65 72 6f 70 61 64 20 20 20 20 20 20  ag_zeropad      
2a60: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69            TRUE i
2a70: 66 20 74 68 65 20 77 69 64 74 68 20 62 65 67 61  f the width bega
2a80: 6e 20 77 69 74 68 20 30 2e 0a 20 20 20 20 2a 2a  n with 0..    **
2a90: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 20 20 20     flag_long    
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2ab0: 52 55 45 20 69 66 20 74 68 65 20 6c 65 74 74 65  RUE if the lette
2ac0: 72 20 27 6c 27 20 28 65 6c 6c 29 20 70 72 65 66  r 'l' (ell) pref
2ad0: 69 78 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20  ixed.    **     
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af0: 20 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6f            the co
2b00: 6e 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74  nversion charact
2b10: 65 72 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  er..    **   fla
2b20: 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 20 20 20 20 20  g_longlong      
2b30: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
2b40: 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c 6c 27   the letter 'll'
2b50: 20 28 65 6c 6c 20 65 6c 6c 29 20 70 72 65 66 69   (ell ell) prefi
2b60: 78 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  xed.    **      
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b80: 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e           the con
2b90: 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65  version characte
2ba0: 72 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67  r..    **   flag
2bb0: 5f 62 6c 61 6e 6b 73 69 67 6e 20 20 20 20 20 20  _blanksign      
2bc0: 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20          TRUE if 
2bd0: 61 20 27 20 27 20 69 73 20 70 72 65 73 65 6e 74  a ' ' is present
2be0: 2e 0a 20 20 20 20 2a 2a 20 20 20 77 69 64 74 68  ..    **   width
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c00: 20 20 20 20 20 20 20 54 68 65 20 73 70 65 63 69         The speci
2c10: 66 69 65 64 20 66 69 65 6c 64 20 77 69 64 74 68  fied field width
2c20: 2e 20 20 54 68 69 73 20 69 73 0a 20 20 20 20 2a  .  This is.    *
2c30: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c50: 61 6c 77 61 79 73 20 6e 6f 6e 2d 6e 65 67 61 74  always non-negat
2c60: 69 76 65 2e 20 20 5a 65 72 6f 20 69 73 20 74 68  ive.  Zero is th
2c70: 65 20 64 65 66 61 75 6c 74 2e 0a 20 20 20 20 2a  e default..    *
2c80: 2a 20 20 20 70 72 65 63 69 73 69 6f 6e 20 20 20  *   precision   
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 72  The specified pr
2cb0: 65 63 69 73 69 6f 6e 2e 20 20 54 68 65 20 64 65  ecision.  The de
2cc0: 66 61 75 6c 74 0a 20 20 20 20 2a 2a 20 20 20 20  fault.    **    
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 20 20 20 20 20 20 20 20 20 69 73 20 2d 31             is -1
2cf0: 2e 0a 20 20 20 20 2a 2a 20 20 20 78 74 79 70 65  ..    **   xtype
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d10: 20 20 20 20 20 20 20 54 68 65 20 63 6c 61 73 73         The class
2d20: 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   of the conversi
2d30: 6f 6e 2e 0a 20 20 20 20 2a 2a 20 20 20 69 6e 66  on..    **   inf
2d40: 6f 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  op              
2d50: 20 20 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72           Pointer
2d60: 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69   to the appropri
2d70: 61 74 65 20 69 6e 66 6f 20 73 74 72 75 63 74 2e  ate info struct.
2d80: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 77 69 74  .    */.    swit
2d90: 63 68 28 20 78 74 79 70 65 20 29 7b 0a 20 20 20  ch( xtype ){.   
2da0: 20 20 20 63 61 73 65 20 65 74 50 4f 49 4e 54 45     case etPOINTE
2db0: 52 3a 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  R:.        flag_
2dc0: 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f  longlong = sizeo
2dd0: 66 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66  f(char*)==sizeof
2de0: 28 69 36 34 29 3b 0a 20 20 20 20 20 20 20 20 66  (i64);.        f
2df0: 6c 61 67 5f 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f  lag_long = sizeo
2e00: 66 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66  f(char*)==sizeof
2e10: 28 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20  (long int);.    
2e20: 20 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f      /* Fall thro
2e30: 75 67 68 20 69 6e 74 6f 20 74 68 65 20 6e 65 78  ugh into the nex
2e40: 74 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  t case */.      
2e50: 63 61 73 65 20 65 74 4f 52 44 49 4e 41 4c 3a 0a  case etORDINAL:.
2e60: 20 20 20 20 20 20 63 61 73 65 20 65 74 52 41 44        case etRAD
2e70: 49 58 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20  IX:.        if( 
2e80: 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46  infop->flags & F
2e90: 4c 41 47 5f 53 49 47 4e 45 44 20 29 7b 0a 20 20  LAG_SIGNED ){.  
2ea0: 20 20 20 20 20 20 20 20 69 36 34 20 76 3b 0a 20          i64 v;. 
2eb0: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61           if( fla
2ec0: 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a 20 20  g_longlong ){.  
2ed0: 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61            v = va
2ee0: 5f 61 72 67 28 61 70 2c 69 36 34 29 3b 0a 20 20  _arg(ap,i64);.  
2ef0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
2f00: 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 7b 0a 20  ( flag_long ){. 
2f10: 20 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76             v = v
2f20: 61 5f 61 72 67 28 61 70 2c 6c 6f 6e 67 20 69 6e  a_arg(ap,long in
2f30: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  t);.          }e
2f40: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
2f50: 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69   v = va_arg(ap,i
2f60: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  nt);.          }
2f70: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76  .          if( v
2f80: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
2f90: 20 20 69 66 28 20 76 3d 3d 53 4d 41 4c 4c 45 53    if( v==SMALLES
2fa0: 54 5f 49 4e 54 36 34 20 29 7b 0a 20 20 20 20 20  T_INT64 ){.     
2fb0: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
2fc0: 75 65 20 3d 20 28 28 75 36 34 29 31 29 3c 3c 36  ue = ((u64)1)<<6
2fd0: 33 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  3;.            }
2fe0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
2ff0: 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20      longvalue = 
3000: 2d 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  -v;.            
3010: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  }.            pr
3020: 65 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20  efix = '-';.    
3030: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3040: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c           longval
3050: 75 65 20 3d 20 76 3b 0a 20 20 20 20 20 20 20 20  ue = v;.        
3060: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 70 6c 75      if( flag_plu
3070: 73 73 69 67 6e 20 29 20 20 20 20 20 20 20 20 70  ssign )        p
3080: 72 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20  refix = '+';.   
3090: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
30a0: 28 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e  ( flag_blanksign
30b0: 20 29 20 20 70 72 65 66 69 78 20 3d 20 27 20 27   )  prefix = ' '
30c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ;.            el
30d0: 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  se              
30e0: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
30f0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 0;.          }
3100: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
3110: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c            if( fl
3120: 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 29 7b 0a 20  ag_longlong ){. 
3130: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76             longv
3140: 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70  alue = va_arg(ap
3150: 2c 75 36 34 29 3b 0a 20 20 20 20 20 20 20 20 20  ,u64);.         
3160: 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f   }else if( flag_
3170: 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20 20 20  long ){.        
3180: 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20      longvalue = 
3190: 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 6e  va_arg(ap,unsign
31a0: 65 64 20 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20  ed long int);.  
31b0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
31c0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76             longv
31d0: 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70  alue = va_arg(ap
31e0: 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a  ,unsigned int);.
31f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
3200: 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 30        prefix = 0
3210: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
3220: 20 20 20 20 69 66 28 20 6c 6f 6e 67 76 61 6c 75      if( longvalu
3230: 65 3d 3d 30 20 29 20 66 6c 61 67 5f 61 6c 74 65  e==0 ) flag_alte
3240: 72 6e 61 74 65 66 6f 72 6d 20 3d 20 30 3b 0a 20  rnateform = 0;. 
3250: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f         if( flag_
3260: 7a 65 72 6f 70 61 64 20 26 26 20 70 72 65 63 69  zeropad && preci
3270: 73 69 6f 6e 3c 77 69 64 74 68 2d 28 70 72 65 66  sion<width-(pref
3280: 69 78 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  ix!=0) ){.      
3290: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
32a0: 77 69 64 74 68 2d 28 70 72 65 66 69 78 21 3d 30  width-(prefix!=0
32b0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
32c0: 20 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69       if( precisi
32d0: 6f 6e 3c 65 74 42 55 46 53 49 5a 45 2d 31 30 20  on<etBUFSIZE-10 
32e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 4f 75  ){.          nOu
32f0: 74 20 3d 20 65 74 42 55 46 53 49 5a 45 3b 0a 20  t = etBUFSIZE;. 
3300: 20 20 20 20 20 20 20 20 20 7a 4f 75 74 20 3d 20           zOut = 
3310: 62 75 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  buf;.        }el
3320: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 4f  se{.          nO
3330: 75 74 20 3d 20 70 72 65 63 69 73 69 6f 6e 20 2b  ut = precision +
3340: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7a   10;.          z
3350: 4f 75 74 20 3d 20 7a 45 78 74 72 61 20 3d 20 73  Out = zExtra = s
3360: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 6e 4f  qlite3Malloc( nO
3370: 75 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ut );.          
3380: 69 66 28 20 7a 4f 75 74 3d 3d 30 20 29 7b 0a 20  if( zOut==0 ){. 
3390: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 53 74             setSt
33a0: 72 41 63 63 75 6d 45 72 72 6f 72 28 70 41 63 63  rAccumError(pAcc
33b0: 75 6d 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  um, STRACCUM_NOM
33c0: 45 4d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  EM);.           
33d0: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
33e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
33f0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 26         bufpt = &
3400: 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 3b 0a 20 20  zOut[nOut-1];.  
3410: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
3420: 3d 65 74 4f 52 44 49 4e 41 4c 20 29 7b 0a 20 20  =etORDINAL ){.  
3430: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
3440: 6f 6e 73 74 20 63 68 61 72 20 7a 4f 72 64 5b 5d  onst char zOrd[]
3450: 20 3d 20 22 74 68 73 74 6e 64 72 64 22 3b 0a 20   = "thstndrd";. 
3460: 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 20 3d           int x =
3470: 20 28 69 6e 74 29 28 6c 6f 6e 67 76 61 6c 75 65   (int)(longvalue
3480: 20 25 20 31 30 29 3b 0a 20 20 20 20 20 20 20 20   % 10);.        
3490: 20 20 69 66 28 20 78 3e 3d 34 20 7c 7c 20 28 6c    if( x>=4 || (l
34a0: 6f 6e 67 76 61 6c 75 65 2f 31 30 29 25 31 30 3d  ongvalue/10)%10=
34b0: 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =1 ){.          
34c0: 20 20 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    x = 0;.       
34d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2a     }.          *
34e0: 28 2d 2d 62 75 66 70 74 29 20 3d 20 7a 4f 72 64  (--bufpt) = zOrd
34f0: 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20 20 20 20 20  [x*2+1];.       
3500: 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20     *(--bufpt) = 
3510: 7a 4f 72 64 5b 78 2a 32 5d 3b 0a 20 20 20 20 20  zOrd[x*2];.     
3520: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7b 0a 20     }.        {. 
3530: 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65           registe
3540: 72 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 73  r const char *cs
3550: 65 74 3b 20 20 20 20 20 20 2f 2a 20 55 73 65 20  et;      /* Use 
3560: 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 70  registers for sp
3570: 65 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  eed */.         
3580: 20 72 65 67 69 73 74 65 72 20 69 6e 74 20 62 61   register int ba
3590: 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 63 73  se;.          cs
35a0: 65 74 20 3d 20 26 61 44 69 67 69 74 73 5b 69 6e  et = &aDigits[in
35b0: 66 6f 70 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20  fop->charset];. 
35c0: 20 20 20 20 20 20 20 20 20 62 61 73 65 20 3d 20           base = 
35d0: 69 6e 66 6f 70 2d 3e 62 61 73 65 3b 0a 20 20 20  infop->base;.   
35e0: 20 20 20 20 20 20 20 64 6f 7b 20 20 20 20 20 20         do{      
35f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3610: 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
3620: 74 6f 20 61 73 63 69 69 20 2a 2f 0a 20 20 20 20  to ascii */.    
3630: 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70          *(--bufp
3640: 74 29 20 3d 20 63 73 65 74 5b 6c 6f 6e 67 76 61  t) = cset[longva
3650: 6c 75 65 25 62 61 73 65 5d 3b 0a 20 20 20 20 20  lue%base];.     
3660: 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65         longvalue
3670: 20 3d 20 6c 6f 6e 67 76 61 6c 75 65 2f 62 61 73   = longvalue/bas
3680: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 77 68  e;.          }wh
3690: 69 6c 65 28 20 6c 6f 6e 67 76 61 6c 75 65 3e 30  ile( longvalue>0
36a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   );.        }.  
36b0: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 28        length = (
36c0: 69 6e 74 29 28 26 7a 4f 75 74 5b 6e 4f 75 74 2d  int)(&zOut[nOut-
36d0: 31 5d 2d 62 75 66 70 74 29 3b 0a 20 20 20 20 20  1]-bufpt);.     
36e0: 20 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 69     for(idx=preci
36f0: 73 69 6f 6e 2d 6c 65 6e 67 74 68 3b 20 69 64 78  sion-length; idx
3700: 3e 30 3b 20 69 64 78 2d 2d 29 7b 0a 20 20 20 20  >0; idx--){.    
3710: 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29        *(--bufpt)
3720: 20 3d 20 27 30 27 3b 20 20 20 20 20 20 20 20 20   = '0';         
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3740: 20 20 20 20 2f 2a 20 5a 65 72 6f 20 70 61 64 20      /* Zero pad 
3750: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
3760: 20 20 20 20 20 69 66 28 20 70 72 65 66 69 78 20       if( prefix 
3770: 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 70  ) *(--bufpt) = p
3780: 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 20  refix;          
3790: 20 20 20 20 20 2f 2a 20 41 64 64 20 73 69 67 6e       /* Add sign
37a0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
37b0: 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f  flag_alternatefo
37c0: 72 6d 20 26 26 20 69 6e 66 6f 70 2d 3e 70 72 65  rm && infop->pre
37d0: 66 69 78 20 29 7b 20 20 20 20 20 20 2f 2a 20 41  fix ){      /* A
37e0: 64 64 20 22 30 22 20 6f 72 20 22 30 78 22 20 2a  dd "0" or "0x" *
37f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73  /.          cons
3800: 74 20 63 68 61 72 20 2a 70 72 65 3b 0a 20 20 20  t char *pre;.   
3810: 20 20 20 20 20 20 20 63 68 61 72 20 78 3b 0a 20         char x;. 
3820: 20 20 20 20 20 20 20 20 20 70 72 65 20 3d 20 26           pre = &
3830: 61 50 72 65 66 69 78 5b 69 6e 66 6f 70 2d 3e 70  aPrefix[infop->p
3840: 72 65 66 69 78 5d 3b 0a 20 20 20 20 20 20 20 20  refix];.        
3850: 20 20 66 6f 72 28 3b 20 28 78 3d 28 2a 70 72 65    for(; (x=(*pre
3860: 29 29 21 3d 30 3b 20 70 72 65 2b 2b 29 20 2a 28  ))!=0; pre++) *(
3870: 2d 2d 62 75 66 70 74 29 20 3d 20 78 3b 0a 20 20  --bufpt) = x;.  
3880: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3890: 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 26  length = (int)(&
38a0: 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 2d 62 75 66  zOut[nOut-1]-buf
38b0: 70 74 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  pt);.        bre
38c0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65  ak;.      case e
38d0: 74 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20 63 61  tFLOAT:.      ca
38e0: 73 65 20 65 74 45 58 50 3a 0a 20 20 20 20 20 20  se etEXP:.      
38f0: 63 61 73 65 20 65 74 47 45 4e 45 52 49 43 3a 0a  case etGENERIC:.
3900: 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75          realvalu
3910: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 64 6f  e = va_arg(ap,do
3920: 75 62 6c 65 29 3b 0a 23 69 66 64 65 66 20 53 51  uble);.#ifdef SQ
3930: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
3940: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 20 20 20  NG_POINT.       
3950: 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a 23 65 6c   length = 0;.#el
3960: 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  se.        if( p
3970: 72 65 63 69 73 69 6f 6e 3c 30 20 29 20 70 72 65  recision<0 ) pre
3980: 63 69 73 69 6f 6e 20 3d 20 36 3b 20 20 20 20 20  cision = 6;     
3990: 20 20 20 20 2f 2a 20 53 65 74 20 64 65 66 61 75      /* Set defau
39a0: 6c 74 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a  lt precision */.
39b0: 20 20 20 20 20 20 20 20 69 66 28 20 72 65 61 6c          if( real
39c0: 76 61 6c 75 65 3c 30 2e 30 20 29 7b 0a 20 20 20  value<0.0 ){.   
39d0: 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65         realvalue
39e0: 20 3d 20 2d 72 65 61 6c 76 61 6c 75 65 3b 0a 20   = -realvalue;. 
39f0: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
3a00: 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20 20 20 7d  = '-';.        }
3a10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
3a20: 69 66 28 20 66 6c 61 67 5f 70 6c 75 73 73 69 67  if( flag_plussig
3a30: 6e 20 29 20 20 20 20 20 20 20 20 20 20 70 72 65  n )          pre
3a40: 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20  fix = '+';.     
3a50: 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 66 6c       else if( fl
3a60: 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29 20 20  ag_blanksign )  
3a70: 20 20 70 72 65 66 69 78 20 3d 20 27 20 27 3b 0a    prefix = ' ';.
3a80: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 20            else  
3a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3aa0: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20         prefix = 
3ab0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
3ac0: 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d       if( xtype==
3ad0: 65 74 47 45 4e 45 52 49 43 20 26 26 20 70 72 65  etGENERIC && pre
3ae0: 63 69 73 69 6f 6e 3e 30 20 29 20 70 72 65 63 69  cision>0 ) preci
3af0: 73 69 6f 6e 2d 2d 3b 0a 20 20 20 20 20 20 20 20  sion--;.        
3b00: 66 6f 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f  for(idx=precisio
3b10: 6e 2c 20 72 6f 75 6e 64 65 72 3d 30 2e 35 3b 20  n, rounder=0.5; 
3b20: 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c 20 72 6f  idx>0; idx--, ro
3b30: 75 6e 64 65 72 2a 3d 30 2e 31 29 7b 7d 0a 20 20  under*=0.1){}.  
3b40: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d        if( xtype=
3b50: 3d 65 74 46 4c 4f 41 54 20 29 20 72 65 61 6c 76  =etFLOAT ) realv
3b60: 61 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65 72 3b  alue += rounder;
3b70: 0a 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 72 6d  .        /* Norm
3b80: 61 6c 69 7a 65 20 72 65 61 6c 76 61 6c 75 65 20  alize realvalue 
3b90: 74 6f 20 77 69 74 68 69 6e 20 31 30 2e 30 20 3e  to within 10.0 >
3ba0: 20 72 65 61 6c 76 61 6c 75 65 20 3e 3d 20 31 2e   realvalue >= 1.
3bb0: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 78 70  0 */.        exp
3bc0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66   = 0;.        if
3bd0: 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 28  ( sqlite3IsNaN((
3be0: 64 6f 75 62 6c 65 29 72 65 61 6c 76 61 6c 75 65  double)realvalue
3bf0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  ) ){.          b
3c00: 75 66 70 74 20 3d 20 22 4e 61 4e 22 3b 0a 20 20  ufpt = "NaN";.  
3c10: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
3c20: 20 33 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   3;.          br
3c30: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
3c40: 20 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76         if( realv
3c50: 61 6c 75 65 3e 30 2e 30 20 29 7b 0a 20 20 20 20  alue>0.0 ){.    
3c60: 20 20 20 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45        LONGDOUBLE
3c70: 5f 54 59 50 45 20 73 63 61 6c 65 20 3d 20 31 2e  _TYPE scale = 1.
3c80: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  0;.          whi
3c90: 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31  le( realvalue>=1
3ca0: 65 31 30 30 2a 73 63 61 6c 65 20 26 26 20 65 78  e100*scale && ex
3cb0: 70 3c 3d 33 35 30 20 29 7b 20 73 63 61 6c 65 20  p<=350 ){ scale 
3cc0: 2a 3d 20 31 65 31 30 30 3b 65 78 70 2b 3d 31 30  *= 1e100;exp+=10
3cd0: 30 3b 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68  0;}.          wh
3ce0: 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d  ile( realvalue>=
3cf0: 31 65 36 34 2a 73 63 61 6c 65 20 26 26 20 65 78  1e64*scale && ex
3d00: 70 3c 3d 33 35 30 20 29 7b 20 73 63 61 6c 65 20  p<=350 ){ scale 
3d10: 2a 3d 20 31 65 36 34 3b 20 65 78 70 2b 3d 36 34  *= 1e64; exp+=64
3d20: 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68  ; }.          wh
3d30: 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d  ile( realvalue>=
3d40: 31 65 38 2a 73 63 61 6c 65 20 26 26 20 65 78 70  1e8*scale && exp
3d50: 3c 3d 33 35 30 20 29 7b 20 73 63 61 6c 65 20 2a  <=350 ){ scale *
3d60: 3d 20 31 65 38 3b 20 65 78 70 2b 3d 38 3b 20 7d  = 1e8; exp+=8; }
3d70: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65  .          while
3d80: 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e  ( realvalue>=10.
3d90: 30 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d  0*scale && exp<=
3da0: 33 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20  350 ){ scale *= 
3db0: 31 30 2e 30 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20  10.0; exp++; }. 
3dc0: 20 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c           realval
3dd0: 75 65 20 2f 3d 20 73 63 61 6c 65 3b 0a 20 20 20  ue /= scale;.   
3de0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65         while( re
3df0: 61 6c 76 61 6c 75 65 3c 31 65 2d 38 20 29 7b 20  alvalue<1e-8 ){ 
3e00: 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31 65 38  realvalue *= 1e8
3e10: 3b 20 65 78 70 2d 3d 38 3b 20 7d 0a 20 20 20 20  ; exp-=8; }.    
3e20: 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65 61        while( rea
3e30: 6c 76 61 6c 75 65 3c 31 2e 30 20 29 7b 20 72 65  lvalue<1.0 ){ re
3e40: 61 6c 76 61 6c 75 65 20 2a 3d 20 31 30 2e 30 3b  alvalue *= 10.0;
3e50: 20 65 78 70 2d 2d 3b 20 7d 0a 20 20 20 20 20 20   exp--; }.      
3e60: 20 20 20 20 69 66 28 20 65 78 70 3e 33 35 30 20      if( exp>350 
3e70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
3e80: 66 28 20 70 72 65 66 69 78 3d 3d 27 2d 27 20 29  f( prefix=='-' )
3e90: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
3ea0: 62 75 66 70 74 20 3d 20 22 2d 49 6e 66 22 3b 0a  bufpt = "-Inf";.
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73              }els
3ec0: 65 20 69 66 28 20 70 72 65 66 69 78 3d 3d 27 2b  e if( prefix=='+
3ed0: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ){.           
3ee0: 20 20 20 62 75 66 70 74 20 3d 20 22 2b 49 6e 66     bufpt = "+Inf
3ef0: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ";.            }
3f00: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
3f10: 20 20 20 20 62 75 66 70 74 20 3d 20 22 49 6e 66      bufpt = "Inf
3f20: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ";.            }
3f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e  .            len
3f40: 67 74 68 20 3d 20 73 71 6c 69 74 65 33 53 74 72  gth = sqlite3Str
3f50: 6c 65 6e 33 30 28 62 75 66 70 74 29 3b 0a 20 20  len30(bufpt);.  
3f60: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
3f70: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
3f80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
3f90: 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20  ufpt = buf;.    
3fa0: 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 2a      /*.        *
3fb0: 2a 20 49 66 20 74 68 65 20 66 69 65 6c 64 20 74  * If the field t
3fc0: 79 70 65 20 69 73 20 65 74 47 45 4e 45 52 49 43  ype is etGENERIC
3fd0: 2c 20 74 68 65 6e 20 63 6f 6e 76 65 72 74 20 74  , then convert t
3fe0: 6f 20 65 69 74 68 65 72 20 65 74 45 58 50 0a 20  o either etEXP. 
3ff0: 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 65 74 46         ** or etF
4000: 4c 4f 41 54 2c 20 61 73 20 61 70 70 72 6f 70 72  LOAT, as appropr
4010: 69 61 74 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f  iate..        */
4020: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79  .        if( xty
4030: 70 65 21 3d 65 74 46 4c 4f 41 54 20 29 7b 0a 20  pe!=etFLOAT ){. 
4040: 20 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c           realval
4050: 75 65 20 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20  ue += rounder;. 
4060: 20 20 20 20 20 20 20 20 20 69 66 28 20 72 65 61           if( rea
4070: 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 20 29 7b 20  lvalue>=10.0 ){ 
4080: 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 30 2e 31  realvalue *= 0.1
4090: 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20  ; exp++; }.     
40a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
40b0: 20 78 74 79 70 65 3d 3d 65 74 47 45 4e 45 52 49   xtype==etGENERI
40c0: 43 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  C ){.          f
40d0: 6c 61 67 5f 72 74 7a 20 3d 20 21 66 6c 61 67 5f  lag_rtz = !flag_
40e0: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 3b 0a 20  alternateform;. 
40f0: 20 20 20 20 20 20 20 20 20 69 66 28 20 65 78 70           if( exp
4100: 3c 2d 34 20 7c 7c 20 65 78 70 3e 70 72 65 63 69  <-4 || exp>preci
4110: 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
4120: 20 20 20 20 78 74 79 70 65 20 3d 20 65 74 45 58      xtype = etEX
4130: 50 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  P;.          }el
4140: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
4150: 70 72 65 63 69 73 69 6f 6e 20 3d 20 70 72 65 63  precision = prec
4160: 69 73 69 6f 6e 20 2d 20 65 78 70 3b 0a 20 20 20  ision - exp;.   
4170: 20 20 20 20 20 20 20 20 20 78 74 79 70 65 20 3d           xtype =
4180: 20 65 74 46 4c 4f 41 54 3b 0a 20 20 20 20 20 20   etFLOAT;.      
4190: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
41a0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
41b0: 6c 61 67 5f 72 74 7a 20 3d 20 66 6c 61 67 5f 61  lag_rtz = flag_a
41c0: 6c 74 66 6f 72 6d 32 3b 0a 20 20 20 20 20 20 20  ltform2;.       
41d0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 78   }.        if( x
41e0: 74 79 70 65 3d 3d 65 74 45 58 50 20 29 7b 0a 20  type==etEXP ){. 
41f0: 20 20 20 20 20 20 20 20 20 65 32 20 3d 20 30 3b           e2 = 0;
4200: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
4210: 20 20 20 20 20 20 20 20 20 20 65 32 20 3d 20 65            e2 = e
4220: 78 70 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  xp;.        }.  
4230: 20 20 20 20 20 20 69 66 28 20 4d 41 58 28 65 32        if( MAX(e2
4240: 2c 30 29 2b 70 72 65 63 69 73 69 6f 6e 2b 77 69  ,0)+precision+wi
4250: 64 74 68 20 3e 20 65 74 42 55 46 53 49 5a 45 20  dth > etBUFSIZE 
4260: 2d 20 31 35 20 29 7b 0a 20 20 20 20 20 20 20 20  - 15 ){.        
4270: 20 20 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61    bufpt = zExtra
4280: 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63   = sqlite3Malloc
4290: 28 20 4d 41 58 28 65 32 2c 30 29 2b 70 72 65 63  ( MAX(e2,0)+prec
42a0: 69 73 69 6f 6e 2b 77 69 64 74 68 2b 31 35 20 29  ision+width+15 )
42b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
42c0: 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20 20 20 20  bufpt==0 ){.    
42d0: 20 20 20 20 20 20 20 20 73 65 74 53 74 72 41 63          setStrAc
42e0: 63 75 6d 45 72 72 6f 72 28 70 41 63 63 75 6d 2c  cumError(pAccum,
42f0: 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29   STRACCUM_NOMEM)
4300: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ;.            re
4310: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  turn;.          
4320: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
4330: 20 20 20 20 7a 4f 75 74 20 3d 20 62 75 66 70 74      zOut = bufpt
4340: 3b 0a 20 20 20 20 20 20 20 20 6e 73 64 20 3d 20  ;.        nsd = 
4350: 31 36 20 2b 20 66 6c 61 67 5f 61 6c 74 66 6f 72  16 + flag_altfor
4360: 6d 32 2a 31 30 3b 0a 20 20 20 20 20 20 20 20 66  m2*10;.        f
4370: 6c 61 67 5f 64 70 20 3d 20 28 70 72 65 63 69 73  lag_dp = (precis
4380: 69 6f 6e 3e 30 20 3f 31 3a 30 29 20 7c 20 66 6c  ion>0 ?1:0) | fl
4390: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
43a0: 20 7c 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32   | flag_altform2
43b0: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;.        /* The
43c0: 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74 20 6f   sign in front o
43d0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  f the number */.
43e0: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 66          if( pref
43f0: 69 78 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ix ){.          
4400: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 70 72 65  *(bufpt++) = pre
4410: 66 69 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  fix;.        }. 
4420: 20 20 20 20 20 20 20 2f 2a 20 44 69 67 69 74 73         /* Digits
4430: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 64 65   prior to the de
4440: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20  cimal point */. 
4450: 20 20 20 20 20 20 20 69 66 28 20 65 32 3c 30 20         if( e2<0 
4460: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62  ){.          *(b
4470: 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20  ufpt++) = '0';. 
4480: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
4490: 20 20 20 20 20 20 20 20 66 6f 72 28 3b 20 65 32          for(; e2
44a0: 3e 3d 30 3b 20 65 32 2d 2d 29 7b 0a 20 20 20 20  >=0; e2--){.    
44b0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
44c0: 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74  +) = et_getdigit
44d0: 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64  (&realvalue,&nsd
44e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
44f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4500: 20 2f 2a 20 54 68 65 20 64 65 63 69 6d 61 6c 20   /* The decimal 
4510: 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  point */.       
4520: 20 69 66 28 20 66 6c 61 67 5f 64 70 20 29 7b 0a   if( flag_dp ){.
4530: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4540: 74 2b 2b 29 20 3d 20 27 2e 27 3b 0a 20 20 20 20  t++) = '.';.    
4550: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
4560: 20 22 30 22 20 64 69 67 69 74 73 20 61 66 74 65   "0" digits afte
4570: 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  r the decimal po
4580: 69 6e 74 20 62 75 74 20 62 65 66 6f 72 65 20 74  int but before t
4590: 68 65 20 66 69 72 73 74 0a 20 20 20 20 20 20 20  he first.       
45a0: 20 2a 2a 20 73 69 67 6e 69 66 69 63 61 6e 74 20   ** significant 
45b0: 64 69 67 69 74 20 6f 66 20 74 68 65 20 6e 75 6d  digit of the num
45c0: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  ber */.        f
45d0: 6f 72 28 65 32 2b 2b 3b 20 65 32 3c 30 3b 20 70  or(e2++; e2<0; p
45e0: 72 65 63 69 73 69 6f 6e 2d 2d 2c 20 65 32 2b 2b  recision--, e2++
45f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  ){.          ass
4600: 65 72 74 28 20 70 72 65 63 69 73 69 6f 6e 3e 30  ert( precision>0
4610: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 28   );.          *(
4620: 62 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a  bufpt++) = '0';.
4630: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4640: 20 20 2f 2a 20 53 69 67 6e 69 66 69 63 61 6e 74    /* Significant
4650: 20 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68   digits after th
4660: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
4670: 2a 2f 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  */.        while
4680: 28 20 28 70 72 65 63 69 73 69 6f 6e 2d 2d 29 3e  ( (precision--)>
4690: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a  0 ){.          *
46a0: 28 62 75 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67  (bufpt++) = et_g
46b0: 65 74 64 69 67 69 74 28 26 72 65 61 6c 76 61 6c  etdigit(&realval
46c0: 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20 20 20 20  ue,&nsd);.      
46d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 52    }.        /* R
46e0: 65 6d 6f 76 65 20 74 72 61 69 6c 69 6e 67 20 7a  emove trailing z
46f0: 65 72 6f 73 20 61 6e 64 20 74 68 65 20 22 2e 22  eros and the "."
4700: 20 69 66 20 6e 6f 20 64 69 67 69 74 73 20 66 6f   if no digits fo
4710: 6c 6c 6f 77 20 74 68 65 20 22 2e 22 20 2a 2f 0a  llow the "." */.
4720: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67          if( flag
4730: 5f 72 74 7a 20 26 26 20 66 6c 61 67 5f 64 70 20  _rtz && flag_dp 
4740: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  ){.          whi
4750: 6c 65 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27  le( bufpt[-1]=='
4760: 30 27 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20  0' ) *(--bufpt) 
4770: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 61  = 0;.          a
4780: 73 73 65 72 74 28 20 62 75 66 70 74 3e 7a 4f 75  ssert( bufpt>zOu
4790: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  t );.          i
47a0: 66 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 2e  f( bufpt[-1]=='.
47b0: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ){.           
47c0: 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 66 6f 72   if( flag_altfor
47d0: 6d 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  m2 ){.          
47e0: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
47f0: 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20   '0';.          
4800: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
4810: 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74         *(--bufpt
4820: 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  ) = 0;.         
4830: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
4840: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4850: 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20 22 65     /* Add the "e
4860: 4e 4e 4e 22 20 73 75 66 66 69 78 20 2a 2f 0a 20  NNN" suffix */. 
4870: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
4880: 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20  ==etEXP ){.     
4890: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
48a0: 3d 20 61 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d  = aDigits[infop-
48b0: 3e 63 68 61 72 73 65 74 5d 3b 0a 20 20 20 20 20  >charset];.     
48c0: 20 20 20 20 20 69 66 28 20 65 78 70 3c 30 20 29       if( exp<0 )
48d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28  {.            *(
48e0: 62 75 66 70 74 2b 2b 29 20 3d 20 27 2d 27 3b 20  bufpt++) = '-'; 
48f0: 65 78 70 20 3d 20 2d 65 78 70 3b 0a 20 20 20 20  exp = -exp;.    
4900: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4910: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
4920: 2b 2b 29 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20  ++) = '+';.     
4930: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
4940: 20 69 66 28 20 65 78 70 3e 3d 31 30 30 20 29 7b   if( exp>=100 ){
4950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62  .            *(b
4960: 75 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29  ufpt++) = (char)
4970: 28 28 65 78 70 2f 31 30 30 29 2b 27 30 27 29 3b  ((exp/100)+'0');
4980: 20 20 20 20 20 20 20 20 2f 2a 20 31 30 30 27 73          /* 100's
4990: 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20   digit */.      
49a0: 20 20 20 20 20 20 65 78 70 20 25 3d 20 31 30 30        exp %= 100
49b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
49c0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b          *(bufpt+
49d0: 2b 29 20 3d 20 28 63 68 61 72 29 28 65 78 70 2f  +) = (char)(exp/
49e0: 31 30 2b 27 30 27 29 3b 20 20 20 20 20 20 20 20  10+'0');        
49f0: 20 20 20 20 20 2f 2a 20 31 30 27 73 20 64 69 67       /* 10's dig
4a00: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
4a10: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 63 68  *(bufpt++) = (ch
4a20: 61 72 29 28 65 78 70 25 31 30 2b 27 30 27 29 3b  ar)(exp%10+'0');
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4a40: 31 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20 20  1's digit */.   
4a50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2a       }.        *
4a60: 62 75 66 70 74 20 3d 20 30 3b 0a 0a 20 20 20 20  bufpt = 0;..    
4a70: 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 76 65      /* The conve
4a80: 72 74 65 64 20 6e 75 6d 62 65 72 20 69 73 20 69  rted number is i
4a90: 6e 20 62 75 66 5b 5d 20 61 6e 64 20 7a 65 72 6f  n buf[] and zero
4aa0: 20 74 65 72 6d 69 6e 61 74 65 64 2e 20 4f 75 74   terminated. Out
4ab0: 70 75 74 20 69 74 2e 0a 20 20 20 20 20 20 20 20  put it..        
4ac0: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  ** Note that the
4ad0: 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68   number is in th
4ae0: 65 20 75 73 75 61 6c 20 6f 72 64 65 72 2c 20 6e  e usual order, n
4af0: 6f 74 20 72 65 76 65 72 73 65 64 20 61 73 20 77  ot reversed as w
4b00: 69 74 68 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  ith.        ** i
4b10: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 73 69 6f  nteger conversio
4b20: 6e 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c  ns. */.        l
4b30: 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 62 75  ength = (int)(bu
4b40: 66 70 74 2d 7a 4f 75 74 29 3b 0a 20 20 20 20 20  fpt-zOut);.     
4b50: 20 20 20 62 75 66 70 74 20 3d 20 7a 4f 75 74 3b     bufpt = zOut;
4b60: 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 70 65  ..        /* Spe
4b70: 63 69 61 6c 20 63 61 73 65 3a 20 20 41 64 64 20  cial case:  Add 
4b80: 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73 20 69 66  leading zeros if
4b90: 20 74 68 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61   the flag_zeropa
4ba0: 64 20 66 6c 61 67 20 69 73 0a 20 20 20 20 20 20  d flag is.      
4bb0: 20 20 2a 2a 20 73 65 74 20 61 6e 64 20 77 65 20    ** set and we 
4bc0: 61 72 65 20 6e 6f 74 20 6c 65 66 74 20 6a 75 73  are not left jus
4bd0: 74 69 66 69 65 64 20 2a 2f 0a 20 20 20 20 20 20  tified */.      
4be0: 20 20 69 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70    if( flag_zerop
4bf0: 61 64 20 26 26 20 21 66 6c 61 67 5f 6c 65 66 74  ad && !flag_left
4c00: 6a 75 73 74 69 66 79 20 26 26 20 6c 65 6e 67 74  justify && lengt
4c10: 68 20 3c 20 77 69 64 74 68 29 7b 0a 20 20 20 20  h < width){.    
4c20: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
4c30: 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 64 20         int nPad 
4c40: 3d 20 77 69 64 74 68 20 2d 20 6c 65 6e 67 74 68  = width - length
4c50: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
4c60: 69 3d 77 69 64 74 68 3b 20 69 3e 3d 6e 50 61 64  i=width; i>=nPad
4c70: 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20  ; i--){.        
4c80: 20 20 20 20 62 75 66 70 74 5b 69 5d 20 3d 20 62      bufpt[i] = b
4c90: 75 66 70 74 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20  ufpt[i-nPad];.  
4ca0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4cb0: 20 20 20 20 69 20 3d 20 70 72 65 66 69 78 21 3d      i = prefix!=
4cc0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69  0;.          whi
4cd0: 6c 65 28 20 6e 50 61 64 2d 2d 20 29 20 62 75 66  le( nPad-- ) buf
4ce0: 70 74 5b 69 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20  pt[i++] = '0';. 
4cf0: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20           length 
4d00: 3d 20 77 69 64 74 68 3b 0a 20 20 20 20 20 20 20  = width;.       
4d10: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65   }.#endif /* !de
4d20: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
4d30: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
4d40: 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 62 72 65  ) */.        bre
4d50: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65  ak;.      case e
4d60: 74 53 49 5a 45 3a 0a 20 20 20 20 20 20 20 20 2a  tSIZE:.        *
4d70: 28 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 2a 29  (va_arg(ap,int*)
4d80: 29 20 3d 20 70 41 63 63 75 6d 2d 3e 6e 43 68 61  ) = pAccum->nCha
4d90: 72 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  r;.        lengt
4da0: 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a 20  h = width = 0;. 
4db0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
4dc0: 20 20 20 20 63 61 73 65 20 65 74 50 45 52 43 45      case etPERCE
4dd0: 4e 54 3a 0a 20 20 20 20 20 20 20 20 62 75 66 5b  NT:.        buf[
4de0: 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20  0] = '%';.      
4df0: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20    bufpt = buf;. 
4e00: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
4e10: 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;.        break
4e20: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 43  ;.      case etC
4e30: 48 41 52 58 3a 0a 20 20 20 20 20 20 20 20 63 20  HARX:.        c 
4e40: 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29  = va_arg(ap,int)
4e50: 3b 0a 20 20 20 20 20 20 20 20 62 75 66 5b 30 5d  ;.        buf[0]
4e60: 20 3d 20 28 63 68 61 72 29 63 3b 0a 20 20 20 20   = (char)c;.    
4e70: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f      if( precisio
4e80: 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n>=0 ){.        
4e90: 20 20 66 6f 72 28 69 64 78 3d 31 3b 20 69 64 78    for(idx=1; idx
4ea0: 3c 70 72 65 63 69 73 69 6f 6e 3b 20 69 64 78 2b  <precision; idx+
4eb0: 2b 29 20 62 75 66 5b 69 64 78 5d 20 3d 20 28 63  +) buf[idx] = (c
4ec0: 68 61 72 29 63 3b 0a 20 20 20 20 20 20 20 20 20  har)c;.         
4ed0: 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73   length = precis
4ee0: 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  ion;.        }el
4ef0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 65  se{.          le
4f00: 6e 67 74 68 20 3d 31 3b 0a 20 20 20 20 20 20 20  ngth =1;.       
4f10: 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70 74   }.        bufpt
4f20: 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20   = buf;.        
4f30: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
4f40: 65 20 65 74 53 54 52 49 4e 47 3a 0a 20 20 20 20  e etSTRING:.    
4f50: 20 20 63 61 73 65 20 65 74 44 59 4e 53 54 52 49    case etDYNSTRI
4f60: 4e 47 3a 0a 20 20 20 20 20 20 20 20 62 75 66 70  NG:.        bufp
4f70: 74 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68  t = va_arg(ap,ch
4f80: 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ar*);.        if
4f90: 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20 20  ( bufpt==0 ){.  
4fa0: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20          bufpt = 
4fb0: 22 22 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  "";.        }els
4fc0: 65 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 44  e if( xtype==etD
4fd0: 59 4e 53 54 52 49 4e 47 20 29 7b 0a 20 20 20 20  YNSTRING ){.    
4fe0: 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20 62        zExtra = b
4ff0: 75 66 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ufpt;.        }.
5000: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63          if( prec
5010: 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20  ision>=0 ){.    
5020: 20 20 20 20 20 20 66 6f 72 28 6c 65 6e 67 74 68        for(length
5030: 3d 30 3b 20 6c 65 6e 67 74 68 3c 70 72 65 63 69  =0; length<preci
5040: 73 69 6f 6e 20 26 26 20 62 75 66 70 74 5b 6c 65  sion && bufpt[le
5050: 6e 67 74 68 5d 3b 20 6c 65 6e 67 74 68 2b 2b 29  ngth]; length++)
5060: 7b 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  {}.        }else
5070: 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67  {.          leng
5080: 74 68 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  th = sqlite3Strl
5090: 65 6e 33 30 28 62 75 66 70 74 29 3b 0a 20 20 20  en30(bufpt);.   
50a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
50b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
50c0: 20 65 74 53 51 4c 45 53 43 41 50 45 3a 0a 20 20   etSQLESCAPE:.  
50d0: 20 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 53      case etSQLES
50e0: 43 41 50 45 32 3a 0a 20 20 20 20 20 20 63 61 73  CAPE2:.      cas
50f0: 65 20 65 74 53 51 4c 45 53 43 41 50 45 33 3a 20  e etSQLESCAPE3: 
5100: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c  {.        int i,
5110: 20 6a 2c 20 6b 2c 20 6e 2c 20 69 73 6e 75 6c 6c   j, k, n, isnull
5120: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 65  ;.        int ne
5130: 65 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 20 20  edQuote;.       
5140: 20 63 68 61 72 20 63 68 3b 0a 20 20 20 20 20 20   char ch;.      
5150: 20 20 63 68 61 72 20 71 20 3d 20 28 28 78 74 79    char q = ((xty
5160: 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 33  pe==etSQLESCAPE3
5170: 29 3f 27 22 27 3a 27 5c 27 27 29 3b 20 20 20 2f  )?'"':'\'');   /
5180: 2a 20 51 75 6f 74 65 20 63 68 61 72 61 63 74 65  * Quote characte
5190: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61  r */.        cha
51a0: 72 20 2a 65 73 63 61 72 67 20 3d 20 76 61 5f 61  r *escarg = va_a
51b0: 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20  rg(ap,char*);.  
51c0: 20 20 20 20 20 20 69 73 6e 75 6c 6c 20 3d 20 65        isnull = e
51d0: 73 63 61 72 67 3d 3d 30 3b 0a 20 20 20 20 20 20  scarg==0;.      
51e0: 20 20 69 66 28 20 69 73 6e 75 6c 6c 20 29 20 65    if( isnull ) e
51f0: 73 63 61 72 67 20 3d 20 28 78 74 79 70 65 3d 3d  scarg = (xtype==
5200: 65 74 53 51 4c 45 53 43 41 50 45 32 20 3f 20 22  etSQLESCAPE2 ? "
5210: 4e 55 4c 4c 22 20 3a 20 22 28 4e 55 4c 4c 29 22  NULL" : "(NULL)"
5220: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 70  );.        k = p
5230: 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20  recision;.      
5240: 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 6b 21 3d    for(i=n=0; k!=
5250: 30 20 26 26 20 28 63 68 3d 65 73 63 61 72 67 5b  0 && (ch=escarg[
5260: 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20 6b 2d 2d  i])!=0; i++, k--
5270: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
5280: 20 63 68 3d 3d 71 20 29 20 20 6e 2b 2b 3b 0a 20   ch==q )  n++;. 
5290: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
52a0: 20 6e 65 65 64 51 75 6f 74 65 20 3d 20 21 69 73   needQuote = !is
52b0: 6e 75 6c 6c 20 26 26 20 78 74 79 70 65 3d 3d 65  null && xtype==e
52c0: 74 53 51 4c 45 53 43 41 50 45 32 3b 0a 20 20 20  tSQLESCAPE2;.   
52d0: 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b 20 31 20       n += i + 1 
52e0: 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32 3b 0a 20  + needQuote*2;. 
52f0: 20 20 20 20 20 20 20 69 66 28 20 6e 3e 65 74 42         if( n>etB
5300: 55 46 53 49 5a 45 20 29 7b 0a 20 20 20 20 20 20  UFSIZE ){.      
5310: 20 20 20 20 62 75 66 70 74 20 3d 20 7a 45 78 74      bufpt = zExt
5320: 72 61 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c  ra = sqlite3Mall
5330: 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20 20 20  oc( n );.       
5340: 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d 30 20     if( bufpt==0 
5350: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
5360: 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28  etStrAccumError(
5370: 70 41 63 63 75 6d 2c 20 53 54 52 41 43 43 55 4d  pAccum, STRACCUM
5380: 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 20 20 20  _NOMEM);.       
5390: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
53a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
53b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
53c0: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20    bufpt = buf;. 
53d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
53e0: 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   j = 0;.        
53f0: 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20 29 20  if( needQuote ) 
5400: 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a  bufpt[j++] = q;.
5410: 20 20 20 20 20 20 20 20 6b 20 3d 20 69 3b 0a 20          k = i;. 
5420: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20         for(i=0; 
5430: 69 3c 6b 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  i<k; i++){.     
5440: 20 20 20 20 20 62 75 66 70 74 5b 6a 2b 2b 5d 20       bufpt[j++] 
5450: 3d 20 63 68 20 3d 20 65 73 63 61 72 67 5b 69 5d  = ch = escarg[i]
5460: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
5470: 63 68 3d 3d 71 20 29 20 62 75 66 70 74 5b 6a 2b  ch==q ) bufpt[j+
5480: 2b 5d 20 3d 20 63 68 3b 0a 20 20 20 20 20 20 20  +] = ch;.       
5490: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e   }.        if( n
54a0: 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 70 74  eedQuote ) bufpt
54b0: 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20 20  [j++] = q;.     
54c0: 20 20 20 62 75 66 70 74 5b 6a 5d 20 3d 20 30 3b     bufpt[j] = 0;
54d0: 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20  .        length 
54e0: 3d 20 6a 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  = j;.        /* 
54f0: 54 68 65 20 70 72 65 63 69 73 69 6f 6e 20 69 6e  The precision in
5500: 20 25 71 20 61 6e 64 20 25 51 20 6d 65 61 6e 73   %q and %Q means
5510: 20 68 6f 77 20 6d 61 6e 79 20 69 6e 70 75 74 20   how many input 
5520: 63 68 61 72 61 63 74 65 72 73 20 74 6f 0a 20 20  characters to.  
5530: 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 75 6d 65        ** consume
5540: 2c 20 6e 6f 74 20 74 68 65 20 6c 65 6e 67 74 68  , not the length
5550: 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 2e 2e   of the output..
5560: 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 66 28  ..        ** if(
5570: 20 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20 26 26   precision>=0 &&
5580: 20 70 72 65 63 69 73 69 6f 6e 3c 6c 65 6e 67 74   precision<lengt
5590: 68 20 29 20 6c 65 6e 67 74 68 20 3d 20 70 72 65  h ) length = pre
55a0: 63 69 73 69 6f 6e 3b 20 2a 2f 0a 20 20 20 20 20  cision; */.     
55b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
55c0: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 54  }.      case etT
55d0: 4f 4b 45 4e 3a 20 7b 0a 20 20 20 20 20 20 20 20  OKEN: {.        
55e0: 54 6f 6b 65 6e 20 2a 70 54 6f 6b 65 6e 20 3d 20  Token *pToken = 
55f0: 76 61 5f 61 72 67 28 61 70 2c 20 54 6f 6b 65 6e  va_arg(ap, Token
5600: 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  *);.        if( 
5610: 70 54 6f 6b 65 6e 20 29 7b 0a 20 20 20 20 20 20  pToken ){.      
5620: 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63      sqlite3StrAc
5630: 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d  cumAppend(pAccum
5640: 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 70  , (const char*)p
5650: 54 6f 6b 65 6e 2d 3e 7a 2c 20 70 54 6f 6b 65 6e  Token->z, pToken
5660: 2d 3e 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ->n);.        }.
5670: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
5680: 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20   width = 0;.    
5690: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
56a0: 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74   }.      case et
56b0: 53 52 43 4c 49 53 54 3a 20 7b 0a 20 20 20 20 20  SRCLIST: {.     
56c0: 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
56d0: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 53 72   = va_arg(ap, Sr
56e0: 63 4c 69 73 74 2a 29 3b 0a 20 20 20 20 20 20 20  cList*);.       
56f0: 20 69 6e 74 20 6b 20 3d 20 76 61 5f 61 72 67 28   int k = va_arg(
5700: 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20  ap, int);.      
5710: 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
5720: 5f 69 74 65 6d 20 2a 70 49 74 65 6d 20 3d 20 26  _item *pItem = &
5730: 70 53 72 63 2d 3e 61 5b 6b 5d 3b 0a 20 20 20 20  pSrc->a[k];.    
5740: 20 20 20 20 61 73 73 65 72 74 28 20 6b 3e 3d 30      assert( k>=0
5750: 20 26 26 20 6b 3c 70 53 72 63 2d 3e 6e 53 72 63   && k<pSrc->nSrc
5760: 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
5770: 70 49 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65  pItem->zDatabase
5780: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
5790: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
57a0: 65 6e 64 41 6c 6c 28 70 41 63 63 75 6d 2c 20 70  endAll(pAccum, p
57b0: 49 74 65 6d 2d 3e 7a 44 61 74 61 62 61 73 65 29  Item->zDatabase)
57c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
57d0: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
57e0: 64 28 70 41 63 63 75 6d 2c 20 22 2e 22 2c 20 31  d(pAccum, ".", 1
57f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
5800: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
5810: 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 70 41  ccumAppendAll(pA
5820: 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e 7a 4e 61  ccum, pItem->zNa
5830: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  me);.        len
5840: 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b  gth = width = 0;
5850: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5860: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
5870: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
5880: 20 61 73 73 65 72 74 28 20 78 74 79 70 65 3d 3d   assert( xtype==
5890: 65 74 49 4e 56 41 4c 49 44 20 29 3b 0a 20 20 20  etINVALID );.   
58a0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
58b0: 20 20 20 7d 0a 20 20 20 20 7d 2f 2a 20 45 6e 64     }.    }/* End
58c0: 20 73 77 69 74 63 68 20 6f 76 65 72 20 74 68 65   switch over the
58d0: 20 66 6f 72 6d 61 74 20 74 79 70 65 20 2a 2f 0a   format type */.
58e0: 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 54 68      /*.    ** Th
58f0: 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 63 6f  e text of the co
5900: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 69 6e  nversion is poin
5910: 74 65 64 20 74 6f 20 62 79 20 22 62 75 66 70 74  ted to by "bufpt
5920: 22 20 61 6e 64 20 69 73 0a 20 20 20 20 2a 2a 20  " and is.    ** 
5930: 22 6c 65 6e 67 74 68 22 20 63 68 61 72 61 63 74  "length" charact
5940: 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 66  ers long.  The f
5950: 69 65 6c 64 20 77 69 64 74 68 20 69 73 20 22 77  ield width is "w
5960: 69 64 74 68 22 2e 20 20 44 6f 0a 20 20 20 20 2a  idth".  Do.    *
5970: 2a 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  * the output..  
5980: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 66 6c    */.    if( !fl
5990: 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 29  ag_leftjustify )
59a0: 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74 65 72  {.      register
59b0: 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20 20 20   int nspace;.   
59c0: 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69 64 74     nspace = widt
59d0: 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20 20 20  h-length;.      
59e0: 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a  if( nspace>0 ){.
59f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 41          sqlite3A
5a00: 70 70 65 6e 64 53 70 61 63 65 28 70 41 63 63 75  ppendSpace(pAccu
5a10: 6d 2c 20 6e 73 70 61 63 65 29 3b 0a 20 20 20 20  m, nspace);.    
5a20: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
5a30: 28 20 6c 65 6e 67 74 68 3e 30 20 29 7b 0a 20 20  ( length>0 ){.  
5a40: 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63      sqlite3StrAc
5a50: 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d  cumAppend(pAccum
5a60: 2c 20 62 75 66 70 74 2c 20 6c 65 6e 67 74 68 29  , bufpt, length)
5a70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5a80: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79  flag_leftjustify
5a90: 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74   ){.      regist
5aa0: 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20  er int nspace;. 
5ab0: 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69       nspace = wi
5ac0: 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20  dth-length;.    
5ad0: 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29    if( nspace>0 )
5ae0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5af0: 33 41 70 70 65 6e 64 53 70 61 63 65 28 70 41 63  3AppendSpace(pAc
5b00: 63 75 6d 2c 20 6e 73 70 61 63 65 29 3b 0a 20 20  cum, nspace);.  
5b10: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5b20: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 78  sqlite3_free(zEx
5b30: 74 72 61 29 3b 0a 20 20 7d 2f 2a 20 45 6e 64 20  tra);.  }/* End 
5b40: 66 6f 72 20 6c 6f 6f 70 20 6f 76 65 72 20 74 68  for loop over th
5b50: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
5b60: 2a 2f 0a 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 66  */.} /* End of f
5b70: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
5b80: 2a 20 41 70 70 65 6e 64 20 4e 20 62 79 74 65 73  * Append N bytes
5b90: 20 6f 66 20 74 65 78 74 20 66 72 6f 6d 20 7a 20   of text from z 
5ba0: 74 6f 20 74 68 65 20 53 74 72 41 63 63 75 6d 20  to the StrAccum 
5bb0: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20  object..*/.void 
5bc0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
5bd0: 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 20 2a  ppend(StrAccum *
5be0: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
5bf0: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 61 73 73 65  , int N){.  asse
5c00: 72 74 28 20 7a 21 3d 30 20 7c 7c 20 4e 3d 3d 30  rt( z!=0 || N==0
5c10: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
5c20: 3e 7a 54 65 78 74 21 3d 30 20 7c 7c 20 70 2d 3e  >zText!=0 || p->
5c30: 6e 43 68 61 72 3d 3d 30 20 7c 7c 20 70 2d 3e 61  nChar==0 || p->a
5c40: 63 63 45 72 72 6f 72 20 29 3b 0a 20 20 61 73 73  ccError );.  ass
5c50: 65 72 74 28 20 4e 3e 3d 30 20 29 3b 0a 20 20 61  ert( N>=0 );.  a
5c60: 73 73 65 72 74 28 20 70 2d 3e 61 63 63 45 72 72  ssert( p->accErr
5c70: 6f 72 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 41 6c 6c  or==0 || p->nAll
5c80: 6f 63 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  oc==0 );.  if( p
5c90: 2d 3e 6e 43 68 61 72 2b 4e 20 3e 3d 20 70 2d 3e  ->nChar+N >= p->
5ca0: 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68  nAlloc ){.    ch
5cb0: 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 69 66  ar *zNew;.    if
5cc0: 28 20 70 2d 3e 61 63 63 45 72 72 6f 72 20 29 7b  ( p->accError ){
5cd0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
5ce0: 70 2d 3e 61 63 63 45 72 72 6f 72 3d 3d 53 54 52  p->accError==STR
5cf0: 41 43 43 55 4d 5f 54 4f 4f 42 49 47 29 3b 0a 20  ACCUM_TOOBIG);. 
5d00: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 70 2d       testcase(p-
5d10: 3e 61 63 63 45 72 72 6f 72 3d 3d 53 54 52 41 43  >accError==STRAC
5d20: 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20  CUM_NOMEM);.    
5d30: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a    return;.    }.
5d40: 20 20 20 20 69 66 28 20 21 70 2d 3e 75 73 65 4d      if( !p->useM
5d50: 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 4e  alloc ){.      N
5d60: 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2d 20 70   = p->nAlloc - p
5d70: 2d 3e 6e 43 68 61 72 20 2d 20 31 3b 0a 20 20 20  ->nChar - 1;.   
5d80: 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45 72     setStrAccumEr
5d90: 72 6f 72 28 70 2c 20 53 54 52 41 43 43 55 4d 5f  ror(p, STRACCUM_
5da0: 54 4f 4f 42 49 47 29 3b 0a 20 20 20 20 20 20 69  TOOBIG);.      i
5db0: 66 28 20 4e 3c 3d 30 20 29 7b 0a 20 20 20 20 20  f( N<=0 ){.     
5dc0: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20     return;.     
5dd0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
5de0: 20 20 20 20 63 68 61 72 20 2a 7a 4f 6c 64 20 3d      char *zOld =
5df0: 20 28 70 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a   (p->zText==p->z
5e00: 42 61 73 65 20 3f 20 30 20 3a 20 70 2d 3e 7a 54  Base ? 0 : p->zT
5e10: 65 78 74 29 3b 0a 20 20 20 20 20 20 69 36 34 20  ext);.      i64 
5e20: 73 7a 4e 65 77 20 3d 20 70 2d 3e 6e 43 68 61 72  szNew = p->nChar
5e30: 3b 0a 20 20 20 20 20 20 73 7a 4e 65 77 20 2b 3d  ;.      szNew +=
5e40: 20 4e 20 2b 20 31 3b 0a 20 20 20 20 20 20 69 66   N + 1;.      if
5e50: 28 20 73 7a 4e 65 77 20 3e 20 70 2d 3e 6d 78 41  ( szNew > p->mxA
5e60: 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 20 20  lloc ){.        
5e70: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
5e80: 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20 20 20  eset(p);.       
5e90: 20 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f   setStrAccumErro
5ea0: 72 28 70 2c 20 53 54 52 41 43 43 55 4d 5f 54 4f  r(p, STRACCUM_TO
5eb0: 4f 42 49 47 29 3b 0a 20 20 20 20 20 20 20 20 72  OBIG);.        r
5ec0: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 65 6c  eturn;.      }el
5ed0: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 6e  se{.        p->n
5ee0: 41 6c 6c 6f 63 20 3d 20 28 69 6e 74 29 73 7a 4e  Alloc = (int)szN
5ef0: 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ew;.      }.    
5f00: 20 20 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c 6c    if( p->useMall
5f10: 6f 63 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20  oc==1 ){.       
5f20: 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   zNew = sqlite3D
5f30: 62 52 65 61 6c 6c 6f 63 28 70 2d 3e 64 62 2c 20  bRealloc(p->db, 
5f40: 7a 4f 6c 64 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29  zOld, p->nAlloc)
5f50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
5f60: 20 20 20 20 20 20 20 7a 4e 65 77 20 3d 20 73 71         zNew = sq
5f70: 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 7a 4f  lite3_realloc(zO
5f80: 6c 64 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a  ld, p->nAlloc);.
5f90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5fa0: 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ( zNew ){.      
5fb0: 20 20 69 66 28 20 7a 4f 6c 64 3d 3d 30 20 26 26    if( zOld==0 &&
5fc0: 20 70 2d 3e 6e 43 68 61 72 3e 30 20 29 20 6d 65   p->nChar>0 ) me
5fd0: 6d 63 70 79 28 7a 4e 65 77 2c 20 70 2d 3e 7a 54  mcpy(zNew, p->zT
5fe0: 65 78 74 2c 20 70 2d 3e 6e 43 68 61 72 29 3b 0a  ext, p->nChar);.
5ff0: 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65 78 74          p->zText
6000: 20 3d 20 7a 4e 65 77 3b 0a 20 20 20 20 20 20 7d   = zNew;.      }
6010: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
6020: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
6030: 65 74 28 70 29 3b 0a 20 20 20 20 20 20 20 20 73  et(p);.        s
6040: 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28  etStrAccumError(
6050: 70 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  p, STRACCUM_NOME
6060: 4d 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  M);.        retu
6070: 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
6080: 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
6090: 70 2d 3e 7a 54 65 78 74 20 29 3b 0a 20 20 6d 65  p->zText );.  me
60a0: 6d 63 70 79 28 26 70 2d 3e 7a 54 65 78 74 5b 70  mcpy(&p->zText[p
60b0: 2d 3e 6e 43 68 61 72 5d 2c 20 7a 2c 20 4e 29 3b  ->nChar], z, N);
60c0: 0a 20 20 70 2d 3e 6e 43 68 61 72 20 2b 3d 20 4e  .  p->nChar += N
60d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e  ;.}../*.** Appen
60e0: 64 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  d the complete t
60f0: 65 78 74 20 6f 66 20 7a 65 72 6f 2d 74 65 72 6d  ext of zero-term
6100: 69 6e 61 74 65 64 20 73 74 72 69 6e 67 20 7a 5b  inated string z[
6110: 5d 20 74 6f 20 74 68 65 20 70 20 73 74 72 69 6e  ] to the p strin
6120: 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  g..*/.void sqlit
6130: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
6140: 41 6c 6c 28 53 74 72 41 63 63 75 6d 20 2a 70 2c  All(StrAccum *p,
6150: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b   const char *z){
6160: 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  .  sqlite3StrAcc
6170: 75 6d 41 70 70 65 6e 64 28 70 2c 20 7a 2c 20 73  umAppend(p, z, s
6180: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
6190: 29 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 46 69  ));.}.../*.** Fi
61a0: 6e 69 73 68 20 6f 66 66 20 61 20 73 74 72 69 6e  nish off a strin
61b0: 67 20 62 79 20 6d 61 6b 69 6e 67 20 73 75 72 65  g by making sure
61c0: 20 69 74 20 69 73 20 7a 65 72 6f 2d 74 65 72 6d   it is zero-term
61d0: 69 6e 61 74 65 64 2e 0a 2a 2a 20 52 65 74 75 72  inated..** Retur
61e0: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  n a pointer to t
61f0: 68 65 20 72 65 73 75 6c 74 69 6e 67 20 73 74 72  he resulting str
6200: 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 61 20 4e  ing.  Return a N
6210: 55 4c 4c 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 69  ULL.** pointer i
6220: 66 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 65 72  f any kind of er
6230: 72 6f 72 20 77 61 73 20 65 6e 63 6f 75 6e 74 65  ror was encounte
6240: 72 65 64 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  red..*/.char *sq
6250: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
6260: 69 73 68 28 53 74 72 41 63 63 75 6d 20 2a 70 29  ish(StrAccum *p)
6270: 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 74  {.  if( p->zText
6280: 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 54 65 78 74   ){.    p->zText
6290: 5b 70 2d 3e 6e 43 68 61 72 5d 20 3d 20 30 3b 0a  [p->nChar] = 0;.
62a0: 20 20 20 20 69 66 28 20 70 2d 3e 75 73 65 4d 61      if( p->useMa
62b0: 6c 6c 6f 63 20 26 26 20 70 2d 3e 7a 54 65 78 74  lloc && p->zText
62c0: 3d 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 20  ==p->zBase ){.  
62d0: 20 20 20 20 69 66 28 20 70 2d 3e 75 73 65 4d 61      if( p->useMa
62e0: 6c 6c 6f 63 3d 3d 31 20 29 7b 0a 20 20 20 20 20  lloc==1 ){.     
62f0: 20 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 73 71     p->zText = sq
6300: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
6310: 28 70 2d 3e 64 62 2c 20 70 2d 3e 6e 43 68 61 72  (p->db, p->nChar
6320: 2b 31 20 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  +1 );.      }els
6330: 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 54  e{.        p->zT
6340: 65 78 74 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  ext = sqlite3_ma
6350: 6c 6c 6f 63 28 70 2d 3e 6e 43 68 61 72 2b 31 29  lloc(p->nChar+1)
6360: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6370: 69 66 28 20 70 2d 3e 7a 54 65 78 74 20 29 7b 0a  if( p->zText ){.
6380: 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
6390: 2d 3e 7a 54 65 78 74 2c 20 70 2d 3e 7a 42 61 73  ->zText, p->zBas
63a0: 65 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 29 3b 0a  e, p->nChar+1);.
63b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
63c0: 20 20 20 20 20 73 65 74 53 74 72 41 63 63 75 6d       setStrAccum
63d0: 45 72 72 6f 72 28 70 2c 20 53 54 52 41 43 43 55  Error(p, STRACCU
63e0: 4d 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 20 20  M_NOMEM);.      
63f0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  }.    }.  }.  re
6400: 74 75 72 6e 20 70 2d 3e 7a 54 65 78 74 3b 0a 7d  turn p->zText;.}
6410: 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 65 74 20 61 6e  ../*.** Reset an
6420: 20 53 74 72 41 63 63 75 6d 20 73 74 72 69 6e 67   StrAccum string
6430: 2e 20 20 52 65 63 6c 61 69 6d 20 61 6c 6c 20 6d  .  Reclaim all m
6440: 61 6c 6c 6f 63 65 64 20 6d 65 6d 6f 72 79 2e 0a  alloced memory..
6450: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
6460: 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
6470: 41 63 63 75 6d 20 2a 70 29 7b 0a 20 20 69 66 28  Accum *p){.  if(
6480: 20 70 2d 3e 7a 54 65 78 74 21 3d 70 2d 3e 7a 42   p->zText!=p->zB
6490: 61 73 65 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ase ){.    if( p
64a0: 2d 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29  ->useMalloc==1 )
64b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
64c0: 62 46 72 65 65 28 70 2d 3e 64 62 2c 20 70 2d 3e  bFree(p->db, p->
64d0: 7a 54 65 78 74 29 3b 0a 20 20 20 20 7d 65 6c 73  zText);.    }els
64e0: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
64f0: 5f 66 72 65 65 28 70 2d 3e 7a 54 65 78 74 29 3b  _free(p->zText);
6500: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 2d 3e  .    }.  }.  p->
6510: 7a 54 65 78 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a  zText = 0;.}../*
6520: 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61  .** Initialize a
6530: 20 73 74 72 69 6e 67 20 61 63 63 75 6d 75 6c 61   string accumula
6540: 74 6f 72 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  tor.*/.void sqli
6550: 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
6560: 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 68 61  StrAccum *p, cha
6570: 72 20 2a 7a 42 61 73 65 2c 20 69 6e 74 20 6e 2c  r *zBase, int n,
6580: 20 69 6e 74 20 6d 78 29 7b 0a 20 20 70 2d 3e 7a   int mx){.  p->z
6590: 54 65 78 74 20 3d 20 70 2d 3e 7a 42 61 73 65 20  Text = p->zBase 
65a0: 3d 20 7a 42 61 73 65 3b 0a 20 20 70 2d 3e 64 62  = zBase;.  p->db
65b0: 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 72   = 0;.  p->nChar
65c0: 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 41 6c 6c 6f   = 0;.  p->nAllo
65d0: 63 20 3d 20 6e 3b 0a 20 20 70 2d 3e 6d 78 41 6c  c = n;.  p->mxAl
65e0: 6c 6f 63 20 3d 20 6d 78 3b 0a 20 20 70 2d 3e 75  loc = mx;.  p->u
65f0: 73 65 4d 61 6c 6c 6f 63 20 3d 20 31 3b 0a 20 20  seMalloc = 1;.  
6600: 70 2d 3e 61 63 63 45 72 72 6f 72 20 3d 20 30 3b  p->accError = 0;
6610: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  .}../*.** Print 
6620: 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  into memory obta
6630: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
6640: 4d 61 6c 6c 6f 63 28 29 2e 20 20 55 73 65 20 74  Malloc().  Use t
6650: 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25  he internal.** %
6660: 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65  -conversion exte
6670: 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20  nsions..*/.char 
6680: 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
6690: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
66a0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
66b0: 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a  t, va_list ap){.
66c0: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68 61    char *z;.  cha
66d0: 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f 50  r zBase[SQLITE_P
66e0: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a  RINT_BUF_SIZE];.
66f0: 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a    StrAccum acc;.
6700: 20 20 61 73 73 65 72 74 28 20 64 62 21 3d 30 20    assert( db!=0 
6710: 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  );.  sqlite3StrA
6720: 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a  ccumInit(&acc, z
6730: 42 61 73 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61  Base, sizeof(zBa
6740: 73 65 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  se),.           
6750: 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61             db->a
6760: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
6770: 49 54 5f 4c 45 4e 47 54 48 5d 29 3b 0a 20 20 61  IT_LENGTH]);.  a
6780: 63 63 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73 71  cc.db = db;.  sq
6790: 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61  lite3VXPrintf(&a
67a0: 63 63 2c 20 31 2c 20 7a 46 6f 72 6d 61 74 2c 20  cc, 1, zFormat, 
67b0: 61 70 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ap);.  z = sqlit
67c0: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
67d0: 28 26 61 63 63 29 3b 0a 20 20 69 66 28 20 61 63  (&acc);.  if( ac
67e0: 63 2e 61 63 63 45 72 72 6f 72 3d 3d 53 54 52 41  c.accError==STRA
67f0: 43 43 55 4d 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  CCUM_NOMEM ){.  
6800: 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
6810: 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65  ed = 1;.  }.  re
6820: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn z;.}../*.**
6830: 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f   Print into memo
6840: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
6850: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e   sqliteMalloc().
6860: 20 20 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e    Use the intern
6870: 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69  al.** %-conversi
6880: 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a  on extensions..*
6890: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  /.char *sqlite3M
68a0: 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a  Printf(sqlite3 *
68b0: 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
68c0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
68d0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63   va_list ap;.  c
68e0: 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61  har *z;.  va_sta
68f0: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
6900: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d  .  z = sqlite3VM
6910: 50 72 69 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d  Printf(db, zForm
6920: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
6930: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
6940: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4c 69 6b 65  z;.}../*.** Like
6950: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
6960: 29 2c 20 62 75 74 20 63 61 6c 6c 20 73 71 6c 69  ), but call sqli
6970: 74 65 33 44 62 46 72 65 65 28 29 20 6f 6e 20 7a  te3DbFree() on z
6980: 53 74 72 20 61 66 74 65 72 20 66 6f 72 6d 61 74  Str after format
6990: 74 69 6e 67 0a 2a 2a 20 74 68 65 20 73 74 72 69  ting.** the stri
69a0: 6e 67 20 61 6e 64 20 62 65 66 6f 72 65 20 72 65  ng and before re
69b0: 74 75 72 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20  turnning.  This 
69c0: 72 6f 75 74 69 6e 65 20 69 73 20 69 6e 74 65 6e  routine is inten
69d0: 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 0a 2a  ded to be used.*
69e0: 2a 20 74 6f 20 6d 6f 64 69 66 79 20 61 6e 20 65  * to modify an e
69f0: 78 69 73 74 69 6e 67 20 73 74 72 69 6e 67 2e 20  xisting string. 
6a00: 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a   For example:.**
6a10: 0a 2a 2a 20 20 20 20 20 20 20 78 20 3d 20 73 71  .**       x = sq
6a20: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
6a30: 20 78 2c 20 22 70 72 65 66 69 78 20 25 73 20 73   x, "prefix %s s
6a40: 75 66 66 69 78 22 2c 20 78 29 3b 0a 2a 2a 0a 2a  uffix", x);.**.*
6a50: 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  /.char *sqlite3M
6a60: 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 20  Appendf(sqlite3 
6a70: 2a 64 62 2c 20 63 68 61 72 20 2a 7a 53 74 72 2c  *db, char *zStr,
6a80: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
6a90: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
6aa0: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72  _list ap;.  char
6ab0: 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   *z;.  va_start(
6ac0: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
6ad0: 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69  z = sqlite3VMPri
6ae0: 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c  ntf(db, zFormat,
6af0: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61   ap);.  va_end(a
6b00: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  p);.  sqlite3DbF
6b10: 72 65 65 28 64 62 2c 20 7a 53 74 72 29 3b 0a 20  ree(db, zStr);. 
6b20: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
6b30: 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d  .** Print into m
6b40: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
6b50: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
6b60: 6f 63 28 29 2e 20 20 4f 6d 69 74 20 74 68 65 20  oc().  Omit the 
6b70: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f  internal.** %-co
6b80: 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69  nversion extensi
6b90: 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71  ons..*/.char *sq
6ba0: 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 63  lite3_vmprintf(c
6bb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
6bc0: 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29 7b  at, va_list ap){
6bd0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63 68  .  char *z;.  ch
6be0: 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45 5f  ar zBase[SQLITE_
6bf0: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d 3b  PRINT_BUF_SIZE];
6c00: 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b  .  StrAccum acc;
6c10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6c20: 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20  OMIT_AUTOINIT.  
6c30: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 69 74  if( sqlite3_init
6c40: 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74 75 72  ialize() ) retur
6c50: 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  n 0;.#endif.  sq
6c60: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
6c70: 74 28 26 61 63 63 2c 20 7a 42 61 73 65 2c 20 73  t(&acc, zBase, s
6c80: 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20 53 51  izeof(zBase), SQ
6c90: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 29  LITE_MAX_LENGTH)
6ca0: 3b 0a 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f  ;.  acc.useMallo
6cb0: 63 20 3d 20 32 3b 0a 20 20 73 71 6c 69 74 65 33  c = 2;.  sqlite3
6cc0: 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30  VXPrintf(&acc, 0
6cd0: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
6ce0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72    z = sqlite3Str
6cf0: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63  AccumFinish(&acc
6d00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d  );.  return z;.}
6d10: 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e  ../*.** Print in
6d20: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  to memory obtain
6d30: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
6d40: 6d 61 6c 6c 6f 63 28 29 28 29 2e 20 20 4f 6d 69  malloc()().  Omi
6d50: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a  t the internal.*
6d60: 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65  * %-conversion e
6d70: 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68  xtensions..*/.ch
6d80: 61 72 20 2a 73 71 6c 69 74 65 33 5f 6d 70 72 69  ar *sqlite3_mpri
6d90: 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ntf(const char *
6da0: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20  zFormat, ...){. 
6db0: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63   va_list ap;.  c
6dc0: 68 61 72 20 2a 7a 3b 0a 23 69 66 6e 64 65 66 20  har *z;.#ifndef 
6dd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
6de0: 49 4e 49 54 0a 20 20 69 66 28 20 73 71 6c 69 74  INIT.  if( sqlit
6df0: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
6e00: 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64  ) return 0;.#end
6e10: 69 66 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  if.  va_start(ap
6e20: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20  , zFormat);.  z 
6e30: 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e  = sqlite3_vmprin
6e40: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  tf(zFormat, ap);
6e50: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20  .  va_end(ap);. 
6e60: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a   return z;.}../*
6e70: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  .** sqlite3_snpr
6e80: 69 6e 74 66 28 29 20 77 6f 72 6b 73 20 6c 69 6b  intf() works lik
6e90: 65 20 73 6e 70 72 69 6e 74 66 28 29 20 65 78 63  e snprintf() exc
6ea0: 65 70 74 20 74 68 61 74 20 69 74 20 69 67 6e 6f  ept that it igno
6eb0: 72 65 73 20 74 68 65 0a 2a 2a 20 63 75 72 72 65  res the.** curre
6ec0: 6e 74 20 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e  nt locale settin
6ed0: 67 73 2e 20 20 54 68 69 73 20 69 73 20 69 6d 70  gs.  This is imp
6ee0: 6f 72 74 61 6e 74 20 66 6f 72 20 53 51 4c 69 74  ortant for SQLit
6ef0: 65 20 62 65 63 61 75 73 65 20 77 65 0a 2a 2a 20  e because we.** 
6f00: 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
6f10: 75 73 65 20 61 20 22 2c 22 20 61 73 20 74 68 65  use a "," as the
6f20: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69   decimal point i
6f30: 6e 20 70 6c 61 63 65 20 6f 66 20 22 2e 22 20 61  n place of "." a
6f40: 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62  s.** specified b
6f50: 79 20 73 6f 6d 65 20 6c 6f 63 61 6c 65 73 2e 0a  y some locales..
6f60: 2a 2a 0a 2a 2a 20 4f 6f 70 73 3a 20 20 54 68 65  **.** Oops:  The
6f70: 20 66 69 72 73 74 20 74 77 6f 20 61 72 67 75 6d   first two argum
6f80: 65 6e 74 73 20 6f 66 20 73 71 6c 69 74 65 33 5f  ents of sqlite3_
6f90: 73 6e 70 72 69 6e 74 66 28 29 20 61 72 65 20 62  snprintf() are b
6fa0: 61 63 6b 77 61 72 64 73 0a 2a 2a 20 66 72 6f 6d  ackwards.** from
6fb0: 20 74 68 65 20 73 6e 70 72 69 6e 74 66 28 29 20   the snprintf() 
6fc0: 73 74 61 6e 64 61 72 64 2e 20 20 55 6e 66 6f 72  standard.  Unfor
6fd0: 74 75 6e 61 74 65 6c 79 2c 20 69 74 20 69 73 20  tunately, it is 
6fe0: 74 6f 6f 20 6c 61 74 65 20 74 6f 20 63 68 61 6e  too late to chan
6ff0: 67 65 0a 2a 2a 20 74 68 69 73 20 77 69 74 68 6f  ge.** this witho
7000: 75 74 20 62 72 65 61 6b 69 6e 67 20 63 6f 6d 70  ut breaking comp
7010: 61 74 69 62 69 6c 69 74 79 2c 20 73 6f 20 77 65  atibility, so we
7020: 20 6a 75 73 74 20 68 61 76 65 20 74 6f 20 6c 69   just have to li
7030: 76 65 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6d  ve with the.** m
7040: 69 73 74 61 6b 65 2e 0a 2a 2a 0a 2a 2a 20 73 71  istake..**.** sq
7050: 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66 28  lite3_vsnprintf(
7060: 29 20 69 73 20 74 68 65 20 76 61 72 61 72 67 73  ) is the varargs
7070: 20 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 63 68 61   version..*/.cha
7080: 72 20 2a 73 71 6c 69 74 65 33 5f 76 73 6e 70 72  r *sqlite3_vsnpr
7090: 69 6e 74 66 28 69 6e 74 20 6e 2c 20 63 68 61 72  intf(int n, char
70a0: 20 2a 7a 42 75 66 2c 20 63 6f 6e 73 74 20 63 68   *zBuf, const ch
70b0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f  ar *zFormat, va_
70c0: 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72 41  list ap){.  StrA
70d0: 63 63 75 6d 20 61 63 63 3b 0a 20 20 69 66 28 20  ccum acc;.  if( 
70e0: 6e 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 42  n<=0 ) return zB
70f0: 75 66 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72  uf;.  sqlite3Str
7100: 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20  AccumInit(&acc, 
7110: 7a 42 75 66 2c 20 6e 2c 20 30 29 3b 0a 20 20 61  zBuf, n, 0);.  a
7120: 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 30  cc.useMalloc = 0
7130: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
7140: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f  ntf(&acc, 0, zFo
7150: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 72 65 74  rmat, ap);.  ret
7160: 75 72 6e 20 73 71 6c 69 74 65 33 53 74 72 41 63  urn sqlite3StrAc
7170: 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b  cumFinish(&acc);
7180: 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  .}.char *sqlite3
7190: 5f 73 6e 70 72 69 6e 74 66 28 69 6e 74 20 6e 2c  _snprintf(int n,
71a0: 20 63 68 61 72 20 2a 7a 42 75 66 2c 20 63 6f 6e   char *zBuf, con
71b0: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
71c0: 2c 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 72 20 2a  , ...){.  char *
71d0: 7a 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  z;.  va_list ap;
71e0: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 7a  .  va_start(ap,z
71f0: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73  Format);.  z = s
7200: 71 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66  qlite3_vsnprintf
7210: 28 6e 2c 20 7a 42 75 66 2c 20 7a 46 6f 72 6d 61  (n, zBuf, zForma
7220: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
7230: 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a  (ap);.  return z
7240: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
7250: 69 73 20 74 68 65 20 72 6f 75 74 69 6e 65 20 74  is the routine t
7260: 68 61 74 20 61 63 74 75 61 6c 6c 79 20 66 6f 72  hat actually for
7270: 6d 61 74 73 20 74 68 65 20 73 71 6c 69 74 65 33  mats the sqlite3
7280: 5f 6c 6f 67 28 29 20 6d 65 73 73 61 67 65 2e 0a  _log() message..
7290: 2a 2a 20 57 65 20 68 6f 75 73 65 20 69 74 20 69  ** We house it i
72a0: 6e 20 61 20 73 65 70 61 72 61 74 65 20 72 6f 75  n a separate rou
72b0: 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  tine from sqlite
72c0: 33 5f 6c 6f 67 28 29 20 74 6f 20 61 76 6f 69 64  3_log() to avoid
72d0: 20 75 73 69 6e 67 0a 2a 2a 20 73 74 61 63 6b 20   using.** stack 
72e0: 73 70 61 63 65 20 6f 6e 20 73 6d 61 6c 6c 2d 73  space on small-s
72f0: 74 61 63 6b 20 73 79 73 74 65 6d 73 20 77 68 65  tack systems whe
7300: 6e 20 6c 6f 67 67 69 6e 67 20 69 73 20 64 69 73  n logging is dis
7310: 61 62 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  abled..**.** sql
7320: 69 74 65 33 5f 6c 6f 67 28 29 20 6d 75 73 74 20  ite3_log() must 
7330: 72 65 6e 64 65 72 20 69 6e 74 6f 20 61 20 73 74  render into a st
7340: 61 74 69 63 20 62 75 66 66 65 72 2e 20 20 49 74  atic buffer.  It
7350: 20 63 61 6e 6e 6f 74 20 64 79 6e 61 6d 69 63 61   cannot dynamica
7360: 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 20  lly.** allocate 
7370: 6d 65 6d 6f 72 79 20 62 65 63 61 75 73 65 20 69  memory because i
7380: 74 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  t might be calle
7390: 64 20 77 68 69 6c 65 20 74 68 65 20 6d 65 6d 6f  d while the memo
73a0: 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
73b0: 6d 75 74 65 78 20 69 73 20 68 65 6c 64 2e 0a 2a  mutex is held..*
73c0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  /.static void re
73d0: 6e 64 65 72 4c 6f 67 4d 73 67 28 69 6e 74 20 69  nderLogMsg(int i
73e0: 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63  ErrCode, const c
73f0: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61  har *zFormat, va
7400: 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72  _list ap){.  Str
7410: 41 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20 20  Accum acc;      
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7430: 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 61 63      /* String ac
7440: 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 63  cumulator */.  c
7450: 68 61 72 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f  har zMsg[SQLITE_
7460: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33  PRINT_BUF_SIZE*3
7470: 5d 3b 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74  ];    /* Complet
7480: 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 2a 2f  e log message */
7490: 0a 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63  ..  sqlite3StrAc
74a0: 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 4d  cumInit(&acc, zM
74b0: 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d 73 67 29  sg, sizeof(zMsg)
74c0: 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d  , 0);.  acc.useM
74d0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 73 71 6c  alloc = 0;.  sql
74e0: 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61 63  ite3VXPrintf(&ac
74f0: 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 61  c, 0, zFormat, a
7500: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 47 6c 6f  p);.  sqlite3Glo
7510: 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 28 73  balConfig.xLog(s
7520: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
7530: 69 67 2e 70 4c 6f 67 41 72 67 2c 20 69 45 72 72  ig.pLogArg, iErr
7540: 43 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Code,.          
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7560: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
7570: 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0a 7d  Finish(&acc));.}
7580: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 6d 61 74 20 61  ../*.** Format a
7590: 6e 64 20 77 72 69 74 65 20 61 20 6d 65 73 73 61  nd write a messa
75a0: 67 65 20 74 6f 20 74 68 65 20 6c 6f 67 20 69 66  ge to the log if
75b0: 20 6c 6f 67 67 69 6e 67 20 69 73 20 65 6e 61 62   logging is enab
75c0: 6c 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  led..*/.void sql
75d0: 69 74 65 33 5f 6c 6f 67 28 69 6e 74 20 69 45 72  ite3_log(int iEr
75e0: 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61  rCode, const cha
75f0: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
7600: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 20  {.  va_list ap; 
7610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7630: 61 72 61 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  ararg list */.  
7640: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
7650: 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 20 29 7b 0a  lConfig.xLog ){.
7660: 20 20 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c      va_start(ap,
7670: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20 72   zFormat);.    r
7680: 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69 45 72 72  enderLogMsg(iErr
7690: 43 6f 64 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 61  Code, zFormat, a
76a0: 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e 64 28 61  p);.    va_end(a
76b0: 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 20 64  p);.  }.}..#if d
76c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
76d0: 42 55 47 29 0a 2f 2a 0a 2a 2a 20 41 20 76 65 72  BUG)./*.** A ver
76e0: 73 69 6f 6e 20 6f 66 20 70 72 69 6e 74 66 28 29  sion of printf()
76f0: 20 74 68 61 74 20 75 6e 64 65 72 73 74 61 6e 64   that understand
7700: 73 20 25 6c 6c 64 2e 20 20 55 73 65 64 20 66 6f  s %lld.  Used fo
7710: 72 20 64 65 62 75 67 67 69 6e 67 2e 0a 2a 2a 20  r debugging..** 
7720: 54 68 65 20 70 72 69 6e 74 66 28 29 20 62 75 69  The printf() bui
7730: 6c 74 20 69 6e 74 6f 20 73 6f 6d 65 20 76 65 72  lt into some ver
7740: 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64 6f 77 73  sions of windows
7750: 20 64 6f 65 73 20 6e 6f 74 20 75 6e 64 65 72 73   does not unders
7760: 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a 20 61 6e 64  tand %lld.** and
7770: 20 73 65 67 66 61 75 6c 74 73 20 69 66 20 79 6f   segfaults if yo
7780: 75 20 67 69 76 65 20 69 74 20 61 20 6c 6f 6e 67  u give it a long
7790: 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a 2f 0a 76 6f   long int..*/.vo
77a0: 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
77b0: 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
77c0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
77d0: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
77e0: 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a 20   StrAccum acc;. 
77f0: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 30 5d 3b   char zBuf[500];
7800: 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  .  sqlite3StrAcc
7810: 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 42 75  umInit(&acc, zBu
7820: 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c  f, sizeof(zBuf),
7830: 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d 61   0);.  acc.useMa
7840: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 76 61 5f 73  lloc = 0;.  va_s
7850: 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74 29  tart(ap,zFormat)
7860: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ;.  sqlite3VXPri
7870: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f  ntf(&acc, 0, zFo
7880: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
7890: 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c 69 74  end(ap);.  sqlit
78a0: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
78b0: 28 26 61 63 63 29 3b 0a 20 20 66 70 72 69 6e 74  (&acc);.  fprint
78c0: 66 28 73 74 64 6f 75 74 2c 22 25 73 22 2c 20 7a  f(stdout,"%s", z
78d0: 42 75 66 29 3b 0a 20 20 66 66 6c 75 73 68 28 73  Buf);.  fflush(s
78e0: 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 6e 64 69 66  tdout);.}.#endif
78f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7900: 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 0a 2a  _OMIT_TRACE./*.*
7910: 2a 20 76 61 72 69 61 62 6c 65 2d 61 72 67 75 6d  * variable-argum
7920: 65 6e 74 20 77 72 61 70 70 65 72 20 61 72 6f 75  ent wrapper arou
7930: 6e 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  nd sqlite3VXPrin
7940: 74 66 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  tf()..*/.void sq
7950: 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
7960: 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20  Accum *p, const 
7970: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
7980: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
7990: 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  p;.  va_start(ap
79a0: 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 73 71 6c  ,zFormat);.  sql
79b0: 69 74 65 33 56 58 50 72 69 6e 74 66 28 70 2c 20  ite3VXPrintf(p, 
79c0: 31 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  1, zFormat, ap);
79d0: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 7d  .  va_end(ap);.}
79e0: 0a 23 65 6e 64 69 66 0a                          .#endif.