/ Hex Artifact Content
Login

Artifact 0c0cb58e43410d6237afe0f2751f265fc62eac59:


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 73 74 61 74 69  r mode..*/.stati
1560: 63 20 76 6f 69 64 20 73 65 74 53 74 72 41 63 63  c void setStrAcc
1570: 75 6d 45 72 72 6f 72 28 53 74 72 41 63 63 75 6d  umError(StrAccum
1580: 20 2a 70 2c 20 75 38 20 65 45 72 72 6f 72 29 7b   *p, u8 eError){
1590: 0a 20 20 70 2d 3e 61 63 63 45 72 72 6f 72 20 3d  .  p->accError =
15a0: 20 65 45 72 72 6f 72 3b 0a 20 20 70 2d 3e 6e 41   eError;.  p->nA
15b0: 6c 6c 6f 63 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a  lloc = 0;.}../*.
15c0: 2a 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65 6e  ** Extra argumen
15d0: 74 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 61 20  t values from a 
15e0: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
15f0: 6f 62 6a 65 63 74 0a 2a 2f 0a 73 74 61 74 69 63  object.*/.static
1600: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 67   sqlite3_int64 g
1610: 65 74 49 6e 74 41 72 67 28 50 72 69 6e 74 66 41  etIntArg(PrintfA
1620: 72 67 75 6d 65 6e 74 73 20 2a 70 29 7b 0a 20 20  rguments *p){.  
1630: 69 66 28 20 70 2d 3e 6e 41 72 67 3c 3d 70 2d 3e  if( p->nArg<=p->
1640: 6e 55 73 65 64 20 29 20 72 65 74 75 72 6e 20 30  nUsed ) return 0
1650: 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ;.  return sqlit
1660: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70  e3_value_int64(p
1670: 2d 3e 61 70 41 72 67 5b 70 2d 3e 6e 55 73 65 64  ->apArg[p->nUsed
1680: 2b 2b 5d 29 3b 0a 7d 0a 73 74 61 74 69 63 20 64  ++]);.}.static d
1690: 6f 75 62 6c 65 20 67 65 74 44 6f 75 62 6c 65 41  ouble getDoubleA
16a0: 72 67 28 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  rg(PrintfArgumen
16b0: 74 73 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d  ts *p){.  if( p-
16c0: 3e 6e 41 72 67 3c 3d 70 2d 3e 6e 55 73 65 64 20  >nArg<=p->nUsed 
16d0: 29 20 72 65 74 75 72 6e 20 30 2e 30 3b 0a 20 20  ) return 0.0;.  
16e0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76  return sqlite3_v
16f0: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70 2d 3e 61  alue_double(p->a
1700: 70 41 72 67 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d  pArg[p->nUsed++]
1710: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 63 68 61 72  );.}.static char
1720: 20 2a 67 65 74 54 65 78 74 41 72 67 28 50 72 69   *getTextArg(Pri
1730: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 2a 70 29  ntfArguments *p)
1740: 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 41 72 67 3c  {.  if( p->nArg<
1750: 3d 70 2d 3e 6e 55 73 65 64 20 29 20 72 65 74 75  =p->nUsed ) retu
1760: 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 28  rn 0;.  return (
1770: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
1780: 6c 75 65 5f 74 65 78 74 28 70 2d 3e 61 70 41 72  lue_text(p->apAr
1790: 67 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 29 3b 0a  g[p->nUsed++]);.
17a0: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 6d 61 63  }.../*.** On mac
17b0: 68 69 6e 65 73 20 77 69 74 68 20 61 20 73 6d 61  hines with a sma
17c0: 6c 6c 20 73 74 61 63 6b 20 73 69 7a 65 2c 20 79  ll stack size, y
17d0: 6f 75 20 63 61 6e 20 72 65 64 65 66 69 6e 65 20  ou can redefine 
17e0: 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 50 52  the.** SQLITE_PR
17f0: 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20 74 6f 20  INT_BUF_SIZE to 
1800: 62 65 20 73 6f 6d 65 74 68 69 6e 67 20 73 6d 61  be something sma
1810: 6c 6c 65 72 2c 20 69 66 20 64 65 73 69 72 65 64  ller, if desired
1820: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
1830: 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49  ITE_PRINT_BUF_SI
1840: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
1850: 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a  TE_PRINT_BUF_SIZ
1860: 45 20 37 30 0a 23 65 6e 64 69 66 0a 23 64 65 66  E 70.#endif.#def
1870: 69 6e 65 20 65 74 42 55 46 53 49 5a 45 20 53 51  ine etBUFSIZE SQ
1880: 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53  LITE_PRINT_BUF_S
1890: 49 5a 45 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20  IZE  /* Size of 
18a0: 74 68 65 20 6f 75 74 70 75 74 20 62 75 66 66 65  the output buffe
18b0: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64  r */../*.** Rend
18c0: 65 72 20 61 20 73 74 72 69 6e 67 20 67 69 76 65  er a string give
18d0: 6e 20 62 79 20 22 66 6d 74 22 20 69 6e 74 6f 20  n by "fmt" into 
18e0: 74 68 65 20 53 74 72 41 63 63 75 6d 20 6f 62 6a  the StrAccum obj
18f0: 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ect..*/.void sql
1900: 69 74 65 33 56 58 50 72 69 6e 74 66 28 0a 20 20  ite3VXPrintf(.  
1910: 53 74 72 41 63 63 75 6d 20 2a 70 41 63 63 75 6d  StrAccum *pAccum
1920: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ,          /* Ac
1930: 63 75 6d 75 6c 61 74 65 20 72 65 73 75 6c 74 73  cumulate results
1940: 20 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20 62   here */.  u32 b
1950: 46 6c 61 67 73 2c 20 20 20 20 20 20 20 20 20 20  Flags,          
1960: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
1970: 50 52 49 4e 54 46 5f 2a 20 66 6c 61 67 73 20 2a  PRINTF_* flags *
1980: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1990: 66 6d 74 2c 20 20 20 20 20 20 20 20 20 20 20 2f  fmt,           /
19a0: 2a 20 46 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  * Format string 
19b0: 2a 2f 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 20  */.  va_list ap 
19c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d0: 2f 2a 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  /* arguments */.
19e0: 29 7b 0a 20 20 69 6e 74 20 63 3b 20 20 20 20 20  ){.  int c;     
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a00: 2f 2a 20 4e 65 78 74 20 63 68 61 72 61 63 74 65  /* Next characte
1a10: 72 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 74 20  r in the format 
1a20: 73 74 72 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72  string */.  char
1a30: 20 2a 62 75 66 70 74 3b 20 20 20 20 20 20 20 20   *bufpt;        
1a40: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1a50: 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  r to the convers
1a60: 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  ion buffer */.  
1a70: 69 6e 74 20 70 72 65 63 69 73 69 6f 6e 3b 20 20  int precision;  
1a80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
1a90: 65 63 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 63  ecision of the c
1aa0: 75 72 72 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a  urrent field */.
1ab0: 20 20 69 6e 74 20 6c 65 6e 67 74 68 3b 20 20 20    int length;   
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ad0: 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 66 69  Length of the fi
1ae0: 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 69 64 78  eld */.  int idx
1af0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b00: 20 20 20 20 2f 2a 20 41 20 67 65 6e 65 72 61 6c      /* A general
1b10: 20 70 75 72 70 6f 73 65 20 6c 6f 6f 70 20 63 6f   purpose loop co
1b20: 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 77  unter */.  int w
1b30: 69 64 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  idth;           
1b40: 20 20 20 20 20 20 2f 2a 20 57 69 64 74 68 20 6f        /* Width o
1b50: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69  f the current fi
1b60: 65 6c 64 20 2a 2f 0a 20 20 65 74 42 79 74 65 20  eld */.  etByte 
1b70: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79  flag_leftjustify
1b80: 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22  ;   /* True if "
1b90: 2d 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65  -" flag is prese
1ba0: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  nt */.  etByte f
1bb0: 6c 61 67 5f 70 6c 75 73 73 69 67 6e 3b 20 20 20  lag_plussign;   
1bc0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 2b     /* True if "+
1bd0: 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e  " flag is presen
1be0: 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c  t */.  etByte fl
1bf0: 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 3b 20 20 20  ag_blanksign;   
1c00: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 20 22    /* True if " "
1c10: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
1c20: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61   */.  etByte fla
1c30: 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 3b  g_alternateform;
1c40: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 23 22 20   /* True if "#" 
1c50: 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20  flag is present 
1c60: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
1c70: 5f 61 6c 74 66 6f 72 6d 32 3b 20 20 20 20 20 20  _altform2;      
1c80: 2f 2a 20 54 72 75 65 20 69 66 20 22 21 22 20 66  /* True if "!" f
1c90: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
1ca0: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
1cb0: 7a 65 72 6f 70 61 64 3b 20 20 20 20 20 20 20 2f  zeropad;       /
1cc0: 2a 20 54 72 75 65 20 69 66 20 66 69 65 6c 64 20  * True if field 
1cd0: 77 69 64 74 68 20 63 6f 6e 73 74 61 6e 74 20 73  width constant s
1ce0: 74 61 72 74 73 20 77 69 74 68 20 7a 65 72 6f 20  tarts with zero 
1cf0: 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67  */.  etByte flag
1d00: 5f 6c 6f 6e 67 3b 20 20 20 20 20 20 20 20 20 20  _long;          
1d10: 2f 2a 20 54 72 75 65 20 69 66 20 22 6c 22 20 66  /* True if "l" f
1d20: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a  lag is present *
1d30: 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f  /.  etByte flag_
1d40: 6c 6f 6e 67 6c 6f 6e 67 3b 20 20 20 20 20 20 2f  longlong;      /
1d50: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 22 6c  * True if the "l
1d60: 6c 22 20 66 6c 61 67 20 69 73 20 70 72 65 73 65  l" flag is prese
1d70: 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 64  nt */.  etByte d
1d80: 6f 6e 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  one;            
1d90: 20 20 20 2f 2a 20 4c 6f 6f 70 20 74 65 72 6d 69     /* Loop termi
1da0: 6e 61 74 69 6f 6e 20 66 6c 61 67 20 2a 2f 0a 20  nation flag */. 
1db0: 20 65 74 42 79 74 65 20 78 74 79 70 65 20 3d 20   etByte xtype = 
1dc0: 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  0;          /* C
1dd0: 6f 6e 76 65 72 73 69 6f 6e 20 70 61 72 61 64 69  onversion paradi
1de0: 67 6d 20 2a 2f 0a 20 20 75 38 20 62 41 72 67 4c  gm */.  u8 bArgL
1df0: 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
1e00: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 53     /* True for S
1e10: 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
1e20: 46 55 4e 43 20 2a 2f 0a 20 20 75 38 20 75 73 65  FUNC */.  u8 use
1e30: 49 6e 74 65 72 6e 3b 20 20 20 20 20 20 20 20 20  Intern;         
1e40: 20 20 20 20 20 2f 2a 20 4f 6b 20 74 6f 20 75 73       /* Ok to us
1e50: 65 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6e 76 65  e internal conve
1e60: 72 73 69 6f 6e 73 20 28 65 78 3a 20 25 54 29 20  rsions (ex: %T) 
1e70: 2a 2f 0a 20 20 63 68 61 72 20 70 72 65 66 69 78  */.  char prefix
1e80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e90: 2f 2a 20 50 72 65 66 69 78 20 63 68 61 72 61 63  /* Prefix charac
1ea0: 74 65 72 2e 20 20 22 2b 22 20 6f 72 20 22 2d 22  ter.  "+" or "-"
1eb0: 20 6f 72 20 22 20 22 20 6f 72 20 27 5c 30 27 2e   or " " or '\0'.
1ec0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e   */.  sqlite_uin
1ed0: 74 36 34 20 6c 6f 6e 67 76 61 6c 75 65 3b 20 20  t64 longvalue;  
1ee0: 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20 69 6e   /* Value for in
1ef0: 74 65 67 65 72 20 74 79 70 65 73 20 2a 2f 0a 20  teger types */. 
1f00: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
1f10: 20 72 65 61 6c 76 61 6c 75 65 3b 20 2f 2a 20 56   realvalue; /* V
1f20: 61 6c 75 65 20 66 6f 72 20 72 65 61 6c 20 74 79  alue for real ty
1f30: 70 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 65  pes */.  const e
1f40: 74 5f 69 6e 66 6f 20 2a 69 6e 66 6f 70 3b 20 20  t_info *infop;  
1f50: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
1f60: 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  o the appropriat
1f70: 65 20 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65  e info structure
1f80: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4f 75 74   */.  char *zOut
1f90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fa0: 20 2f 2a 20 52 65 6e 64 65 72 69 6e 67 20 62 75   /* Rendering bu
1fb0: 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f  ffer */.  int nO
1fc0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
1fd0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1fe0: 74 68 65 20 72 65 6e 64 65 72 69 6e 67 20 62 75  the rendering bu
1ff0: 66 66 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ffer */.  char *
2000: 7a 45 78 74 72 61 3b 20 20 20 20 20 20 20 20 20  zExtra;         
2010: 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 65 64       /* Malloced
2020: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20   memory used by 
2030: 73 6f 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20  some conversion 
2040: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2050: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
2060: 50 4f 49 4e 54 0a 20 20 69 6e 74 20 20 65 78 70  POINT.  int  exp
2070: 2c 20 65 32 3b 20 20 20 20 20 20 20 20 20 20 20  , e2;           
2080: 20 20 20 2f 2a 20 65 78 70 6f 6e 65 6e 74 20 6f     /* exponent o
2090: 66 20 72 65 61 6c 20 6e 75 6d 62 65 72 73 20 2a  f real numbers *
20a0: 2f 0a 20 20 69 6e 74 20 6e 73 64 3b 20 20 20 20  /.  int nsd;    
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 69 67 6e  * Number of sign
20d0: 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 72  ificant digits r
20e0: 65 74 75 72 6e 65 64 20 2a 2f 0a 20 20 64 6f 75  eturned */.  dou
20f0: 62 6c 65 20 72 6f 75 6e 64 65 72 3b 20 20 20 20  ble rounder;    
2100: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
2110: 66 6f 72 20 72 6f 75 6e 64 69 6e 67 20 66 6c 6f  for rounding flo
2120: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
2130: 65 73 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66  es */.  etByte f
2140: 6c 61 67 5f 64 70 3b 20 20 20 20 20 20 20 20 20  lag_dp;         
2150: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 64 65     /* True if de
2160: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 73 68 6f 75  cimal point shou
2170: 6c 64 20 62 65 20 73 68 6f 77 6e 20 2a 2f 0a 20  ld be shown */. 
2180: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 72 74 7a   etByte flag_rtz
2190: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
21a0: 72 75 65 20 69 66 20 74 72 61 69 6c 69 6e 67 20  rue if trailing 
21b0: 7a 65 72 6f 73 20 73 68 6f 75 6c 64 20 62 65 20  zeros should be 
21c0: 72 65 6d 6f 76 65 64 20 2a 2f 0a 23 65 6e 64 69  removed */.#endi
21d0: 66 0a 20 20 50 72 69 6e 74 66 41 72 67 75 6d 65  f.  PrintfArgume
21e0: 6e 74 73 20 2a 70 41 72 67 4c 69 73 74 20 3d 20  nts *pArgList = 
21f0: 30 3b 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  0; /* Arguments 
2200: 66 6f 72 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  for SQLITE_PRINT
2210: 46 5f 53 51 4c 46 55 4e 43 20 2a 2f 0a 20 20 63  F_SQLFUNC */.  c
2220: 68 61 72 20 62 75 66 5b 65 74 42 55 46 53 49 5a  har buf[etBUFSIZ
2230: 45 5d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  E];       /* Con
2240: 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 20 2a  version buffer *
2250: 2f 0a 0a 20 20 62 75 66 70 74 20 3d 20 30 3b 0a  /..  bufpt = 0;.
2260: 20 20 69 66 28 20 62 46 6c 61 67 73 20 29 7b 0a    if( bFlags ){.
2270: 20 20 20 20 69 66 28 20 28 62 41 72 67 4c 69 73      if( (bArgLis
2280: 74 20 3d 20 28 62 46 6c 61 67 73 20 26 20 53 51  t = (bFlags & SQ
2290: 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
22a0: 55 4e 43 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  UNC))!=0 ){.    
22b0: 20 20 70 41 72 67 4c 69 73 74 20 3d 20 76 61 5f    pArgList = va_
22c0: 61 72 67 28 61 70 2c 20 50 72 69 6e 74 66 41 72  arg(ap, PrintfAr
22d0: 67 75 6d 65 6e 74 73 2a 29 3b 0a 20 20 20 20 7d  guments*);.    }
22e0: 0a 20 20 20 20 75 73 65 49 6e 74 65 72 6e 20 3d  .    useIntern =
22f0: 20 62 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45   bFlags & SQLITE
2300: 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
2310: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62  ;.  }else{.    b
2320: 41 72 67 4c 69 73 74 20 3d 20 75 73 65 49 6e 74  ArgList = useInt
2330: 65 72 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 66  ern = 0;.  }.  f
2340: 6f 72 28 3b 20 28 63 3d 28 2a 66 6d 74 29 29 21  or(; (c=(*fmt))!
2350: 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a 20 20 20 20  =0; ++fmt){.    
2360: 69 66 28 20 63 21 3d 27 25 27 20 29 7b 0a 20 20  if( c!='%' ){.  
2370: 20 20 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 20      int amt;.   
2380: 20 20 20 62 75 66 70 74 20 3d 20 28 63 68 61 72     bufpt = (char
2390: 20 2a 29 66 6d 74 3b 0a 20 20 20 20 20 20 61 6d   *)fmt;.      am
23a0: 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 77 68 69  t = 1;.      whi
23b0: 6c 65 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29  le( (c=(*++fmt))
23c0: 21 3d 27 25 27 20 26 26 20 63 21 3d 30 20 29 20  !='%' && c!=0 ) 
23d0: 61 6d 74 2b 2b 3b 0a 20 20 20 20 20 20 73 71 6c  amt++;.      sql
23e0: 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
23f0: 6e 64 28 70 41 63 63 75 6d 2c 20 62 75 66 70 74  nd(pAccum, bufpt
2400: 2c 20 61 6d 74 29 3b 0a 20 20 20 20 20 20 69 66  , amt);.      if
2410: 28 20 63 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ( c==0 ) break;.
2420: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 63      }.    if( (c
2430: 3d 28 2a 2b 2b 66 6d 74 29 29 3d 3d 30 20 29 7b  =(*++fmt))==0 ){
2440: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74  .      sqlite3St
2450: 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63  rAccumAppend(pAc
2460: 63 75 6d 2c 20 22 25 22 2c 20 31 29 3b 0a 20 20  cum, "%", 1);.  
2470: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2480: 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 6f 75 74  .    /* Find out
2490: 20 77 68 61 74 20 66 6c 61 67 73 20 61 72 65 20   what flags are 
24a0: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 20 20 66  present */.    f
24b0: 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20  lag_leftjustify 
24c0: 3d 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20  = flag_plussign 
24d0: 3d 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e  = flag_blanksign
24e0: 20 3d 20 0a 20 20 20 20 20 66 6c 61 67 5f 61 6c   = .     flag_al
24f0: 74 65 72 6e 61 74 65 66 6f 72 6d 20 3d 20 66 6c  ternateform = fl
2500: 61 67 5f 61 6c 74 66 6f 72 6d 32 20 3d 20 66 6c  ag_altform2 = fl
2510: 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 30 3b 0a  ag_zeropad = 0;.
2520: 20 20 20 20 64 6f 6e 65 20 3d 20 30 3b 0a 20 20      done = 0;.  
2530: 20 20 64 6f 7b 0a 20 20 20 20 20 20 73 77 69 74    do{.      swit
2540: 63 68 28 20 63 20 29 7b 0a 20 20 20 20 20 20 20  ch( c ){.       
2550: 20 63 61 73 65 20 27 2d 27 3a 20 20 20 66 6c 61   case '-':   fla
2560: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 3d 20  g_leftjustify = 
2570: 31 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  1;     break;.  
2580: 20 20 20 20 20 20 63 61 73 65 20 27 2b 27 3a 20        case '+': 
2590: 20 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20    flag_plussign 
25a0: 3d 20 31 3b 20 20 20 20 20 20 20 20 62 72 65 61  = 1;        brea
25b0: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
25c0: 27 20 27 3a 20 20 20 66 6c 61 67 5f 62 6c 61 6e  ' ':   flag_blan
25d0: 6b 73 69 67 6e 20 3d 20 31 3b 20 20 20 20 20 20  ksign = 1;      
25e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
25f0: 63 61 73 65 20 27 23 27 3a 20 20 20 66 6c 61 67  case '#':   flag
2600: 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 3d  _alternateform =
2610: 20 31 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20   1;   break;.   
2620: 20 20 20 20 20 63 61 73 65 20 27 21 27 3a 20 20       case '!':  
2630: 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 20 3d   flag_altform2 =
2640: 20 31 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b   1;        break
2650: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  ;.        case '
2660: 30 27 3a 20 20 20 66 6c 61 67 5f 7a 65 72 6f 70  0':   flag_zerop
2670: 61 64 20 3d 20 31 3b 20 20 20 20 20 20 20 20 20  ad = 1;         
2680: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 64  break;.        d
2690: 65 66 61 75 6c 74 3a 20 20 20 20 64 6f 6e 65 20  efault:    done 
26a0: 3d 20 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 1;            
26b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
26c0: 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c 65 28 20    }.    }while( 
26d0: 21 64 6f 6e 65 20 26 26 20 28 63 3d 28 2a 2b 2b  !done && (c=(*++
26e0: 66 6d 74 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  fmt))!=0 );.    
26f0: 2f 2a 20 47 65 74 20 74 68 65 20 66 69 65 6c 64  /* Get the field
2700: 20 77 69 64 74 68 20 2a 2f 0a 20 20 20 20 77 69   width */.    wi
2710: 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  dth = 0;.    if(
2720: 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20 20   c=='*' ){.     
2730: 20 69 66 28 20 62 41 72 67 4c 69 73 74 20 29 7b   if( bArgList ){
2740: 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d  .        width =
2750: 20 28 69 6e 74 29 67 65 74 49 6e 74 41 72 67 28   (int)getIntArg(
2760: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20  pArgList);.     
2770: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
2780: 77 69 64 74 68 20 3d 20 76 61 5f 61 72 67 28 61  width = va_arg(a
2790: 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  p,int);.      }.
27a0: 20 20 20 20 20 20 69 66 28 20 77 69 64 74 68 3c        if( width<
27b0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61  0 ){.        fla
27c0: 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 3d 20  g_leftjustify = 
27d0: 31 3b 0a 20 20 20 20 20 20 20 20 77 69 64 74 68  1;.        width
27e0: 20 3d 20 2d 77 69 64 74 68 3b 0a 20 20 20 20 20   = -width;.     
27f0: 20 7d 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b   }.      c = *++
2800: 66 6d 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  fmt;.    }else{.
2810: 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d        while( c>=
2820: 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b  '0' && c<='9' ){
2830: 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d  .        width =
2840: 20 77 69 64 74 68 2a 31 30 20 2b 20 63 20 2d 20   width*10 + c - 
2850: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 63 20 3d  '0';.        c =
2860: 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d   *++fmt;.      }
2870: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65  .    }.    /* Ge
2880: 74 20 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20  t the precision 
2890: 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 2e  */.    if( c=='.
28a0: 27 20 29 7b 0a 20 20 20 20 20 20 70 72 65 63 69  ' ){.      preci
28b0: 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  sion = 0;.      
28c0: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20  c = *++fmt;.    
28d0: 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a    if( c=='*' ){.
28e0: 20 20 20 20 20 20 20 20 69 66 28 20 62 41 72 67          if( bArg
28f0: 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 20  List ){.        
2900: 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 28 69    precision = (i
2910: 6e 74 29 67 65 74 49 6e 74 41 72 67 28 70 41 72  nt)getIntArg(pAr
2920: 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20  gList);.        
2930: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
2940: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 76 61 5f   precision = va_
2950: 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20  arg(ap,int);.   
2960: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
2970: 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30 20 29  f( precision<0 )
2980: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 70 72   precision = -pr
2990: 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20  ecision;.       
29a0: 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20   c = *++fmt;.   
29b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
29c0: 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 27 20    while( c>='0' 
29d0: 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20  && c<='9' ){.   
29e0: 20 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e         precision
29f0: 20 3d 20 70 72 65 63 69 73 69 6f 6e 2a 31 30 20   = precision*10 
2a00: 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20  + c - '0';.     
2a10: 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b       c = *++fmt;
2a20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2a30: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
2a40: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20      precision = 
2a50: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a  -1;.    }.    /*
2a60: 20 47 65 74 20 74 68 65 20 63 6f 6e 76 65 72 73   Get the convers
2a70: 69 6f 6e 20 74 79 70 65 20 6d 6f 64 69 66 69 65  ion type modifie
2a80: 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d  r */.    if( c==
2a90: 27 6c 27 20 29 7b 0a 20 20 20 20 20 20 66 6c 61  'l' ){.      fla
2aa0: 67 5f 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20  g_long = 1;.    
2ab0: 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20    c = *++fmt;.  
2ac0: 20 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 29      if( c=='l' )
2ad0: 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c  {.        flag_l
2ae0: 6f 6e 67 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20  onglong = 1;.   
2af0: 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b       c = *++fmt;
2b00: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2b10: 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c        flag_longl
2b20: 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ong = 0;.      }
2b30: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2b40: 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c    flag_long = fl
2b50: 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b  ag_longlong = 0;
2b60: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 65  .    }.    /* Fe
2b70: 74 63 68 20 74 68 65 20 69 6e 66 6f 20 65 6e 74  tch the info ent
2b80: 72 79 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ry for the field
2b90: 20 2a 2f 0a 20 20 20 20 69 6e 66 6f 70 20 3d 20   */.    infop = 
2ba0: 26 66 6d 74 69 6e 66 6f 5b 30 5d 3b 0a 20 20 20  &fmtinfo[0];.   
2bb0: 20 78 74 79 70 65 20 3d 20 65 74 49 4e 56 41 4c   xtype = etINVAL
2bc0: 49 44 3b 0a 20 20 20 20 66 6f 72 28 69 64 78 3d  ID;.    for(idx=
2bd0: 30 3b 20 69 64 78 3c 41 72 72 61 79 53 69 7a 65  0; idx<ArraySize
2be0: 28 66 6d 74 69 6e 66 6f 29 3b 20 69 64 78 2b 2b  (fmtinfo); idx++
2bf0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  ){.      if( c==
2c00: 66 6d 74 69 6e 66 6f 5b 69 64 78 5d 2e 66 6d 74  fmtinfo[idx].fmt
2c10: 74 79 70 65 20 29 7b 0a 20 20 20 20 20 20 20 20  type ){.        
2c20: 69 6e 66 6f 70 20 3d 20 26 66 6d 74 69 6e 66 6f  infop = &fmtinfo
2c30: 5b 69 64 78 5d 3b 0a 20 20 20 20 20 20 20 20 69  [idx];.        i
2c40: 66 28 20 75 73 65 49 6e 74 65 72 6e 20 7c 7c 20  f( useIntern || 
2c50: 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20  (infop->flags & 
2c60: 46 4c 41 47 5f 49 4e 54 45 52 4e 29 3d 3d 30 20  FLAG_INTERN)==0 
2c70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78 74 79  ){.          xty
2c80: 70 65 20 3d 20 69 6e 66 6f 70 2d 3e 74 79 70 65  pe = infop->type
2c90: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
2ca0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
2cb0: 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
2cc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2cd0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45    }.    }.    zE
2ce0: 78 74 72 61 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  xtra = 0;..    /
2cf0: 2a 0a 20 20 20 20 2a 2a 20 41 74 20 74 68 69 73  *.    ** At this
2d00: 20 70 6f 69 6e 74 2c 20 76 61 72 69 61 62 6c 65   point, variable
2d10: 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
2d20: 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20  d as follows:.  
2d30: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20 66 6c    **.    **   fl
2d40: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d  ag_alternateform
2d50: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69            TRUE i
2d60: 66 20 61 20 27 23 27 20 69 73 20 70 72 65 73 65  f a '#' is prese
2d70: 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61  nt..    **   fla
2d80: 67 5f 61 6c 74 66 6f 72 6d 32 20 20 20 20 20 20  g_altform2      
2d90: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66           TRUE if
2da0: 20 61 20 27 21 27 20 69 73 20 70 72 65 73 65 6e   a '!' is presen
2db0: 74 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67  t..    **   flag
2dc0: 5f 70 6c 75 73 73 69 67 6e 20 20 20 20 20 20 20  _plussign       
2dd0: 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20          TRUE if 
2de0: 61 20 27 2b 27 20 69 73 20 70 72 65 73 65 6e 74  a '+' is present
2df0: 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f  ..    **   flag_
2e00: 6c 65 66 74 6a 75 73 74 69 66 79 20 20 20 20 20  leftjustify     
2e10: 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20 61         TRUE if a
2e20: 20 27 2d 27 20 69 73 20 70 72 65 73 65 6e 74 20   '-' is present 
2e30: 6f 72 20 69 66 20 74 68 65 0a 20 20 20 20 2a 2a  or if the.    **
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2e60: 69 65 6c 64 20 77 69 64 74 68 20 77 61 73 20 6e  ield width was n
2e70: 65 67 61 74 69 76 65 2e 0a 20 20 20 20 2a 2a 20  egative..    ** 
2e80: 20 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 20    flag_zeropad  
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
2ea0: 55 45 20 69 66 20 74 68 65 20 77 69 64 74 68 20  UE if the width 
2eb0: 62 65 67 61 6e 20 77 69 74 68 20 30 2e 0a 20 20  began with 0..  
2ec0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f 6e 67    **   flag_long
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee0: 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20 6c     TRUE if the l
2ef0: 65 74 74 65 72 20 27 6c 27 20 28 65 6c 6c 29 20  etter 'l' (ell) 
2f00: 70 72 65 66 69 78 65 64 0a 20 20 20 20 2a 2a 20  prefixed.    ** 
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2f30: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68 61  e conversion cha
2f40: 72 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a 20 20  racter..    **  
2f50: 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 20   flag_longlong  
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55               TRU
2f70: 45 20 69 66 20 74 68 65 20 6c 65 74 74 65 72 20  E if the letter 
2f80: 27 6c 6c 27 20 28 65 6c 6c 20 65 6c 6c 29 20 70  'll' (ell ell) p
2f90: 72 65 66 69 78 65 64 0a 20 20 20 20 2a 2a 20 20  refixed.    **  
2fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
2fc0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 68 61 72   conversion char
2fd0: 61 63 74 65 72 2e 0a 20 20 20 20 2a 2a 20 20 20  acter..    **   
2fe0: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 20  flag_blanksign  
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55 45              TRUE
3000: 20 69 66 20 61 20 27 20 27 20 69 73 20 70 72 65   if a ' ' is pre
3010: 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 20 77  sent..    **   w
3020: 69 64 74 68 20 20 20 20 20 20 20 20 20 20 20 20  idth            
3030: 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20 73             The s
3040: 70 65 63 69 66 69 65 64 20 66 69 65 6c 64 20 77  pecified field w
3050: 69 64 74 68 2e 20 20 54 68 69 73 20 69 73 0a 20  idth.  This is. 
3060: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3080: 20 20 20 20 61 6c 77 61 79 73 20 6e 6f 6e 2d 6e      always non-n
3090: 65 67 61 74 69 76 65 2e 20 20 5a 65 72 6f 20 69  egative.  Zero i
30a0: 73 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 20  s the default.. 
30b0: 20 20 20 2a 2a 20 20 20 70 72 65 63 69 73 69 6f     **   precisio
30c0: 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n               
30d0: 20 20 20 20 54 68 65 20 73 70 65 63 69 66 69 65      The specifie
30e0: 64 20 70 72 65 63 69 73 69 6f 6e 2e 20 20 54 68  d precision.  Th
30f0: 65 20 64 65 66 61 75 6c 74 0a 20 20 20 20 2a 2a  e default.    **
3100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3120: 73 20 2d 31 2e 0a 20 20 20 20 2a 2a 20 20 20 78  s -1..    **   x
3130: 74 79 70 65 20 20 20 20 20 20 20 20 20 20 20 20  type            
3140: 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20 63             The c
3150: 6c 61 73 73 20 6f 66 20 74 68 65 20 63 6f 6e 76  lass of the conv
3160: 65 72 73 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 20  ersion..    **  
3170: 20 69 6e 66 6f 70 20 20 20 20 20 20 20 20 20 20   infop          
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 6f 69               Poi
3190: 6e 74 65 72 20 74 6f 20 74 68 65 20 61 70 70 72  nter to the appr
31a0: 6f 70 72 69 61 74 65 20 69 6e 66 6f 20 73 74 72  opriate info str
31b0: 75 63 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  uct..    */.    
31c0: 73 77 69 74 63 68 28 20 78 74 79 70 65 20 29 7b  switch( xtype ){
31d0: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 50 4f  .      case etPO
31e0: 49 4e 54 45 52 3a 0a 20 20 20 20 20 20 20 20 66  INTER:.        f
31f0: 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 73  lag_longlong = s
3200: 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d 73 69  izeof(char*)==si
3210: 7a 65 6f 66 28 69 36 34 29 3b 0a 20 20 20 20 20  zeof(i64);.     
3220: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 73     flag_long = s
3230: 69 7a 65 6f 66 28 63 68 61 72 2a 29 3d 3d 73 69  izeof(char*)==si
3240: 7a 65 6f 66 28 6c 6f 6e 67 20 69 6e 74 29 3b 0a  zeof(long int);.
3250: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 6c 20          /* Fall 
3260: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 74 68 65  through into the
3270: 20 6e 65 78 74 20 63 61 73 65 20 2a 2f 0a 20 20   next case */.  
3280: 20 20 20 20 63 61 73 65 20 65 74 4f 52 44 49 4e      case etORDIN
3290: 41 4c 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65  AL:.      case e
32a0: 74 52 41 44 49 58 3a 0a 20 20 20 20 20 20 20 20  tRADIX:.        
32b0: 69 66 28 20 69 6e 66 6f 70 2d 3e 66 6c 61 67 73  if( infop->flags
32c0: 20 26 20 46 4c 41 47 5f 53 49 47 4e 45 44 20 29   & FLAG_SIGNED )
32d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 36 34 20  {.          i64 
32e0: 76 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  v;.          if(
32f0: 20 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20   bArgList ){.   
3300: 20 20 20 20 20 20 20 20 20 76 20 3d 20 67 65 74           v = get
3310: 49 6e 74 41 72 67 28 70 41 72 67 4c 69 73 74 29  IntArg(pArgList)
3320: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
3330: 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c  e if( flag_longl
3340: 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ong ){.         
3350: 20 20 20 76 20 3d 20 76 61 5f 61 72 67 28 61 70     v = va_arg(ap
3360: 2c 69 36 34 29 3b 0a 20 20 20 20 20 20 20 20 20  ,i64);.         
3370: 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f   }else if( flag_
3380: 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20 20 20  long ){.        
3390: 20 20 20 20 76 20 3d 20 76 61 5f 61 72 67 28 61      v = va_arg(a
33a0: 70 2c 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20  p,long int);.   
33b0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
33c0: 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 61            v = va
33d0: 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20  _arg(ap,int);.  
33e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
33f0: 20 20 20 20 69 66 28 20 76 3c 30 20 29 7b 0a 20      if( v<0 ){. 
3400: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76             if( v
3410: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
3420: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
3430: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 28 28    longvalue = ((
3440: 75 36 34 29 31 29 3c 3c 36 33 3b 0a 20 20 20 20  u64)1)<<63;.    
3450: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e               lon
3470: 67 76 61 6c 75 65 20 3d 20 2d 76 3b 0a 20 20 20  gvalue = -v;.   
3480: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
3490: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20         prefix = 
34a0: 27 2d 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  '-';.          }
34b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
34c0: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 3b    longvalue = v;
34d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
34e0: 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29   flag_plussign )
34f0: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d          prefix =
3500: 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20 20   '+';.          
3510: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f    else if( flag_
3520: 62 6c 61 6e 6b 73 69 67 6e 20 29 20 20 70 72 65  blanksign )  pre
3530: 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20 20  fix = ' ';.     
3540: 20 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20         else     
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3560: 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20    prefix = 0;.  
3570: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3580: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3590: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
35a0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  ){.            l
35b0: 6f 6e 67 76 61 6c 75 65 20 3d 20 28 75 36 34 29  ongvalue = (u64)
35c0: 67 65 74 49 6e 74 41 72 67 28 70 41 72 67 4c 69  getIntArg(pArgLi
35d0: 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  st);.          }
35e0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f  else if( flag_lo
35f0: 6e 67 6c 6f 6e 67 20 29 7b 0a 20 20 20 20 20 20  nglong ){.      
3600: 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20        longvalue 
3610: 3d 20 76 61 5f 61 72 67 28 61 70 2c 75 36 34 29  = va_arg(ap,u64)
3620: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
3630: 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 20  e if( flag_long 
3640: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  ){.            l
3650: 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61 72  ongvalue = va_ar
3660: 67 28 61 70 2c 75 6e 73 69 67 6e 65 64 20 6c 6f  g(ap,unsigned lo
3670: 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  ng int);.       
3680: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3690: 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 65 20        longvalue 
36a0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69  = va_arg(ap,unsi
36b0: 67 6e 65 64 20 69 6e 74 29 3b 0a 20 20 20 20 20  gned int);.     
36c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
36d0: 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20 20   prefix = 0;.   
36e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
36f0: 66 28 20 6c 6f 6e 67 76 61 6c 75 65 3d 3d 30 20  f( longvalue==0 
3700: 29 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65  ) flag_alternate
3710: 66 6f 72 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20  form = 0;.      
3720: 20 20 69 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70    if( flag_zerop
3730: 61 64 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3c  ad && precision<
3740: 77 69 64 74 68 2d 28 70 72 65 66 69 78 21 3d 30  width-(prefix!=0
3750: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ) ){.          p
3760: 72 65 63 69 73 69 6f 6e 20 3d 20 77 69 64 74 68  recision = width
3770: 2d 28 70 72 65 66 69 78 21 3d 30 29 3b 0a 20 20  -(prefix!=0);.  
3780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3790: 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 65 74  if( precision<et
37a0: 42 55 46 53 49 5a 45 2d 31 30 20 29 7b 0a 20 20  BUFSIZE-10 ){.  
37b0: 20 20 20 20 20 20 20 20 6e 4f 75 74 20 3d 20 65          nOut = e
37c0: 74 42 55 46 53 49 5a 45 3b 0a 20 20 20 20 20 20  tBUFSIZE;.      
37d0: 20 20 20 20 7a 4f 75 74 20 3d 20 62 75 66 3b 0a      zOut = buf;.
37e0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
37f0: 20 20 20 20 20 20 20 20 20 6e 4f 75 74 20 3d 20           nOut = 
3800: 70 72 65 63 69 73 69 6f 6e 20 2b 20 31 30 3b 0a  precision + 10;.
3810: 20 20 20 20 20 20 20 20 20 20 7a 4f 75 74 20 3d            zOut =
3820: 20 7a 45 78 74 72 61 20 3d 20 73 71 6c 69 74 65   zExtra = sqlite
3830: 33 4d 61 6c 6c 6f 63 28 20 6e 4f 75 74 20 29 3b  3Malloc( nOut );
3840: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 7a  .          if( z
3850: 4f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Out==0 ){.      
3860: 20 20 20 20 20 20 73 65 74 53 74 72 41 63 63 75        setStrAccu
3870: 6d 45 72 72 6f 72 28 70 41 63 63 75 6d 2c 20 53  mError(pAccum, S
3880: 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a  TRACCUM_NOMEM);.
3890: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
38a0: 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  rn;.          }.
38b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
38c0: 20 20 62 75 66 70 74 20 3d 20 26 7a 4f 75 74 5b    bufpt = &zOut[
38d0: 6e 4f 75 74 2d 31 5d 3b 0a 20 20 20 20 20 20 20  nOut-1];.       
38e0: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 4f 52   if( xtype==etOR
38f0: 44 49 4e 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  DINAL ){.       
3900: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
3910: 63 68 61 72 20 7a 4f 72 64 5b 5d 20 3d 20 22 74  char zOrd[] = "t
3920: 68 73 74 6e 64 72 64 22 3b 0a 20 20 20 20 20 20  hstndrd";.      
3930: 20 20 20 20 69 6e 74 20 78 20 3d 20 28 69 6e 74      int x = (int
3940: 29 28 6c 6f 6e 67 76 61 6c 75 65 20 25 20 31 30  )(longvalue % 10
3950: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
3960: 20 78 3e 3d 34 20 7c 7c 20 28 6c 6f 6e 67 76 61   x>=4 || (longva
3970: 6c 75 65 2f 31 30 29 25 31 30 3d 3d 31 20 29 7b  lue/10)%10==1 ){
3980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 20 3d  .            x =
3990: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   0;.          }.
39a0: 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75            *(--bu
39b0: 66 70 74 29 20 3d 20 7a 4f 72 64 5b 78 2a 32 2b  fpt) = zOrd[x*2+
39c0: 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 28  1];.          *(
39d0: 2d 2d 62 75 66 70 74 29 20 3d 20 7a 4f 72 64 5b  --bufpt) = zOrd[
39e0: 78 2a 32 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  x*2];.        }.
39f0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
3a00: 20 20 20 20 72 65 67 69 73 74 65 72 20 63 6f 6e      register con
3a10: 73 74 20 63 68 61 72 20 2a 63 73 65 74 3b 20 20  st char *cset;  
3a20: 20 20 20 20 2f 2a 20 55 73 65 20 72 65 67 69 73      /* Use regis
3a30: 74 65 72 73 20 66 6f 72 20 73 70 65 65 64 20 2a  ters for speed *
3a40: 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65 67 69  /.          regi
3a50: 73 74 65 72 20 69 6e 74 20 62 61 73 65 3b 0a 20  ster int base;. 
3a60: 20 20 20 20 20 20 20 20 20 63 73 65 74 20 3d 20           cset = 
3a70: 26 61 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e  &aDigits[infop->
3a80: 63 68 61 72 73 65 74 5d 3b 0a 20 20 20 20 20 20  charset];.      
3a90: 20 20 20 20 62 61 73 65 20 3d 20 69 6e 66 6f 70      base = infop
3aa0: 2d 3e 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20  ->base;.        
3ab0: 20 20 64 6f 7b 20 20 20 20 20 20 20 20 20 20 20    do{           
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ae0: 2f 2a 20 43 6f 6e 76 65 72 74 20 74 6f 20 61 73  /* Convert to as
3af0: 63 69 69 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  cii */.         
3b00: 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20     *(--bufpt) = 
3b10: 63 73 65 74 5b 6c 6f 6e 67 76 61 6c 75 65 25 62  cset[longvalue%b
3b20: 61 73 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  ase];.          
3b30: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 6c 6f    longvalue = lo
3b40: 6e 67 76 61 6c 75 65 2f 62 61 73 65 3b 0a 20 20  ngvalue/base;.  
3b50: 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
3b60: 6c 6f 6e 67 76 61 6c 75 65 3e 30 20 29 3b 0a 20  longvalue>0 );. 
3b70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3b80: 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28   length = (int)(
3b90: 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 2d 62 75  &zOut[nOut-1]-bu
3ba0: 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  fpt);.        fo
3bb0: 72 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2d  r(idx=precision-
3bc0: 6c 65 6e 67 74 68 3b 20 69 64 78 3e 30 3b 20 69  length; idx>0; i
3bd0: 64 78 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20  dx--){.         
3be0: 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 27 30   *(--bufpt) = '0
3bf0: 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ';              
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3c10: 2a 20 5a 65 72 6f 20 70 61 64 20 2a 2f 0a 20 20  * Zero pad */.  
3c20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3c30: 69 66 28 20 70 72 65 66 69 78 20 29 20 2a 28 2d  if( prefix ) *(-
3c40: 2d 62 75 66 70 74 29 20 3d 20 70 72 65 66 69 78  -bufpt) = prefix
3c50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3c60: 2f 2a 20 41 64 64 20 73 69 67 6e 20 2a 2f 0a 20  /* Add sign */. 
3c70: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f         if( flag_
3c80: 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 26 26  alternateform &&
3c90: 20 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78 20 29   infop->prefix )
3ca0: 7b 20 20 20 20 20 20 2f 2a 20 41 64 64 20 22 30  {      /* Add "0
3cb0: 22 20 6f 72 20 22 30 78 22 20 2a 2f 0a 20 20 20  " or "0x" */.   
3cc0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
3cd0: 72 20 2a 70 72 65 3b 0a 20 20 20 20 20 20 20 20  r *pre;.        
3ce0: 20 20 63 68 61 72 20 78 3b 0a 20 20 20 20 20 20    char x;.      
3cf0: 20 20 20 20 70 72 65 20 3d 20 26 61 50 72 65 66      pre = &aPref
3d00: 69 78 5b 69 6e 66 6f 70 2d 3e 70 72 65 66 69 78  ix[infop->prefix
3d10: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ];.          for
3d20: 28 3b 20 28 78 3d 28 2a 70 72 65 29 29 21 3d 30  (; (x=(*pre))!=0
3d30: 3b 20 70 72 65 2b 2b 29 20 2a 28 2d 2d 62 75 66  ; pre++) *(--buf
3d40: 70 74 29 20 3d 20 78 3b 0a 20 20 20 20 20 20 20  pt) = x;.       
3d50: 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74   }.        lengt
3d60: 68 20 3d 20 28 69 6e 74 29 28 26 7a 4f 75 74 5b  h = (int)(&zOut[
3d70: 6e 4f 75 74 2d 31 5d 2d 62 75 66 70 74 29 3b 0a  nOut-1]-bufpt);.
3d80: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3d90: 20 20 20 20 20 63 61 73 65 20 65 74 46 4c 4f 41       case etFLOA
3da0: 54 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  T:.      case et
3db0: 45 58 50 3a 0a 20 20 20 20 20 20 63 61 73 65 20  EXP:.      case 
3dc0: 65 74 47 45 4e 45 52 49 43 3a 0a 20 20 20 20 20  etGENERIC:.     
3dd0: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
3de0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 61  ){.          rea
3df0: 6c 76 61 6c 75 65 20 3d 20 67 65 74 44 6f 75 62  lvalue = getDoub
3e00: 6c 65 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b  leArg(pArgList);
3e10: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
3e20: 20 20 20 20 20 20 20 20 20 20 72 65 61 6c 76 61            realva
3e30: 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  lue = va_arg(ap,
3e40: 64 6f 75 62 6c 65 29 3b 0a 20 20 20 20 20 20 20  double);.       
3e50: 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
3e60: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e70: 4f 49 4e 54 0a 20 20 20 20 20 20 20 20 6c 65 6e  OINT.        len
3e80: 67 74 68 20 3d 20 30 3b 0a 23 65 6c 73 65 0a 20  gth = 0;.#else. 
3e90: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
3ea0: 73 69 6f 6e 3c 30 20 29 20 70 72 65 63 69 73 69  sion<0 ) precisi
3eb0: 6f 6e 20 3d 20 36 3b 20 20 20 20 20 20 20 20 20  on = 6;         
3ec0: 2f 2a 20 53 65 74 20 64 65 66 61 75 6c 74 20 70  /* Set default p
3ed0: 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  recision */.    
3ee0: 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75      if( realvalu
3ef0: 65 3c 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20  e<0.0 ){.       
3f00: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 2d     realvalue = -
3f10: 72 65 61 6c 76 61 6c 75 65 3b 0a 20 20 20 20 20  realvalue;.     
3f20: 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d       prefix = '-
3f30: 27 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ';.        }else
3f40: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
3f50: 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 20  flag_plussign ) 
3f60: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20           prefix 
3f70: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
3f80: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 62   else if( flag_b
3f90: 6c 61 6e 6b 73 69 67 6e 20 29 20 20 20 20 70 72  lanksign )    pr
3fa0: 65 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20  efix = ' ';.    
3fb0: 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 20        else      
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fd0: 20 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20     prefix = 0;. 
3fe0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3ff0: 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 47 45   if( xtype==etGE
4000: 4e 45 52 49 43 20 26 26 20 70 72 65 63 69 73 69  NERIC && precisi
4010: 6f 6e 3e 30 20 29 20 70 72 65 63 69 73 69 6f 6e  on>0 ) precision
4020: 2d 2d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  --;.        for(
4030: 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20 72  idx=precision, r
4040: 6f 75 6e 64 65 72 3d 30 2e 35 3b 20 69 64 78 3e  ounder=0.5; idx>
4050: 30 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 65  0; idx--, rounde
4060: 72 2a 3d 30 2e 31 29 7b 7d 0a 20 20 20 20 20 20  r*=0.1){}.      
4070: 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 46    if( xtype==etF
4080: 4c 4f 41 54 20 29 20 72 65 61 6c 76 61 6c 75 65  LOAT ) realvalue
4090: 20 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20   += rounder;.   
40a0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 69 7a       /* Normaliz
40b0: 65 20 72 65 61 6c 76 61 6c 75 65 20 74 6f 20 77  e realvalue to w
40c0: 69 74 68 69 6e 20 31 30 2e 30 20 3e 20 72 65 61  ithin 10.0 > rea
40d0: 6c 76 61 6c 75 65 20 3e 3d 20 31 2e 30 20 2a 2f  lvalue >= 1.0 */
40e0: 0a 20 20 20 20 20 20 20 20 65 78 70 20 3d 20 30  .        exp = 0
40f0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
4100: 6c 69 74 65 33 49 73 4e 61 4e 28 28 64 6f 75 62  lite3IsNaN((doub
4110: 6c 65 29 72 65 61 6c 76 61 6c 75 65 29 20 29 7b  le)realvalue) ){
4120: 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74  .          bufpt
4130: 20 3d 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20 20   = "NaN";.      
4140: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b 0a      length = 3;.
4150: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
4160: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4170: 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65     if( realvalue
4180: 3e 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20 20  >0.0 ){.        
4190: 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50    LONGDOUBLE_TYP
41a0: 45 20 73 63 61 6c 65 20 3d 20 31 2e 30 3b 0a 20  E scale = 1.0;. 
41b0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
41c0: 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 31 30 30  realvalue>=1e100
41d0: 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33  *scale && exp<=3
41e0: 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  50 ){ scale *= 1
41f0: 65 31 30 30 3b 65 78 70 2b 3d 31 30 30 3b 7d 0a  e100;exp+=100;}.
4200: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
4210: 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 36 34   realvalue>=1e64
4220: 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33  *scale && exp<=3
4230: 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31  50 ){ scale *= 1
4240: 65 36 34 3b 20 65 78 70 2b 3d 36 34 3b 20 7d 0a  e64; exp+=64; }.
4250: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
4260: 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 38 2a   realvalue>=1e8*
4270: 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33 35  scale && exp<=35
4280: 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 65  0 ){ scale *= 1e
4290: 38 3b 20 65 78 70 2b 3d 38 3b 20 7d 0a 20 20 20  8; exp+=8; }.   
42a0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 65         while( re
42b0: 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 2a 73 63  alvalue>=10.0*sc
42c0: 61 6c 65 20 26 26 20 65 78 70 3c 3d 33 35 30 20  ale && exp<=350 
42d0: 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 30 2e 30  ){ scale *= 10.0
42e0: 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20  ; exp++; }.     
42f0: 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 2f       realvalue /
4300: 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 20 20 20  = scale;.       
4310: 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61     while( realva
4320: 6c 75 65 3c 31 65 2d 38 20 29 7b 20 72 65 61 6c  lue<1e-8 ){ real
4330: 76 61 6c 75 65 20 2a 3d 20 31 65 38 3b 20 65 78  value *= 1e8; ex
4340: 70 2d 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 20  p-=8; }.        
4350: 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 6c    while( realval
4360: 75 65 3c 31 2e 30 20 29 7b 20 72 65 61 6c 76 61  ue<1.0 ){ realva
4370: 6c 75 65 20 2a 3d 20 31 30 2e 30 3b 20 65 78 70  lue *= 10.0; exp
4380: 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  --; }.          
4390: 69 66 28 20 65 78 70 3e 33 35 30 20 29 7b 0a 20  if( exp>350 ){. 
43a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70             if( p
43b0: 72 65 66 69 78 3d 3d 27 2d 27 20 29 7b 0a 20 20  refix=='-' ){.  
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 70              bufp
43d0: 74 20 3d 20 22 2d 49 6e 66 22 3b 0a 20 20 20 20  t = "-Inf";.    
43e0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
43f0: 28 20 70 72 65 66 69 78 3d 3d 27 2b 27 20 29 7b  ( prefix=='+' ){
4400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  .              b
4410: 75 66 70 74 20 3d 20 22 2b 49 6e 66 22 3b 0a 20  ufpt = "+Inf";. 
4420: 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65             }else
4430: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4440: 62 75 66 70 74 20 3d 20 22 49 6e 66 22 3b 0a 20  bufpt = "Inf";. 
4450: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
4460: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20           length 
4470: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
4480: 30 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 20  0(bufpt);.      
4490: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
44a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
44b0: 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70 74   }.        bufpt
44c0: 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 20   = buf;.        
44d0: 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66  /*.        ** If
44e0: 20 74 68 65 20 66 69 65 6c 64 20 74 79 70 65 20   the field type 
44f0: 69 73 20 65 74 47 45 4e 45 52 49 43 2c 20 74 68  is etGENERIC, th
4500: 65 6e 20 63 6f 6e 76 65 72 74 20 74 6f 20 65 69  en convert to ei
4510: 74 68 65 72 20 65 74 45 58 50 0a 20 20 20 20 20  ther etEXP.     
4520: 20 20 20 2a 2a 20 6f 72 20 65 74 46 4c 4f 41 54     ** or etFLOAT
4530: 2c 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  , as appropriate
4540: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
4550: 20 20 20 20 20 69 66 28 20 78 74 79 70 65 21 3d       if( xtype!=
4560: 65 74 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20  etFLOAT ){.     
4570: 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 2b       realvalue +
4580: 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20  = rounder;.     
4590: 20 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c       if( realval
45a0: 75 65 3e 3d 31 30 2e 30 20 29 7b 20 72 65 61 6c  ue>=10.0 ){ real
45b0: 76 61 6c 75 65 20 2a 3d 20 30 2e 31 3b 20 65 78  value *= 0.1; ex
45c0: 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d  p++; }.        }
45d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79  .        if( xty
45e0: 70 65 3d 3d 65 74 47 45 4e 45 52 49 43 20 29 7b  pe==etGENERIC ){
45f0: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 5f  .          flag_
4600: 72 74 7a 20 3d 20 21 66 6c 61 67 5f 61 6c 74 65  rtz = !flag_alte
4610: 72 6e 61 74 65 66 6f 72 6d 3b 0a 20 20 20 20 20  rnateform;.     
4620: 20 20 20 20 20 69 66 28 20 65 78 70 3c 2d 34 20       if( exp<-4 
4630: 7c 7c 20 65 78 70 3e 70 72 65 63 69 73 69 6f 6e  || exp>precision
4640: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
4650: 78 74 79 70 65 20 3d 20 65 74 45 58 50 3b 0a 20  xtype = etEXP;. 
4660: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
4670: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 63              prec
4680: 69 73 69 6f 6e 20 3d 20 70 72 65 63 69 73 69 6f  ision = precisio
4690: 6e 20 2d 20 65 78 70 3b 0a 20 20 20 20 20 20 20  n - exp;.       
46a0: 20 20 20 20 20 78 74 79 70 65 20 3d 20 65 74 46       xtype = etF
46b0: 4c 4f 41 54 3b 0a 20 20 20 20 20 20 20 20 20 20  LOAT;.          
46c0: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
46d0: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 5f  .          flag_
46e0: 72 74 7a 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f  rtz = flag_altfo
46f0: 72 6d 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rm2;.        }. 
4700: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65         if( xtype
4710: 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20  ==etEXP ){.     
4720: 20 20 20 20 20 65 32 20 3d 20 30 3b 0a 20 20 20       e2 = 0;.   
4730: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4740: 20 20 20 20 20 20 65 32 20 3d 20 65 78 70 3b 0a        e2 = exp;.
4750: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4760: 20 20 69 66 28 20 4d 41 58 28 65 32 2c 30 29 2b    if( MAX(e2,0)+
4770: 70 72 65 63 69 73 69 6f 6e 2b 77 69 64 74 68 20  precision+width 
4780: 3e 20 65 74 42 55 46 53 49 5a 45 20 2d 20 31 35  > etBUFSIZE - 15
4790: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75   ){.          bu
47a0: 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d 20 73  fpt = zExtra = s
47b0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 4d 41  qlite3Malloc( MA
47c0: 58 28 65 32 2c 30 29 2b 70 72 65 63 69 73 69 6f  X(e2,0)+precisio
47d0: 6e 2b 77 69 64 74 68 2b 31 35 20 29 3b 0a 20 20  n+width+15 );.  
47e0: 20 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70          if( bufp
47f0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
4800: 20 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45      setStrAccumE
4810: 72 72 6f 72 28 70 41 63 63 75 6d 2c 20 53 54 52  rror(pAccum, STR
4820: 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a 20 20  ACCUM_NOMEM);.  
4830: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4840: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
4850: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4860: 7a 4f 75 74 20 3d 20 62 75 66 70 74 3b 0a 20 20  zOut = bufpt;.  
4870: 20 20 20 20 20 20 6e 73 64 20 3d 20 31 36 20 2b        nsd = 16 +
4880: 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 2a 31   flag_altform2*1
4890: 30 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f  0;.        flag_
48a0: 64 70 20 3d 20 28 70 72 65 63 69 73 69 6f 6e 3e  dp = (precision>
48b0: 30 20 3f 31 3a 30 29 20 7c 20 66 6c 61 67 5f 61  0 ?1:0) | flag_a
48c0: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 7c 20 66  lternateform | f
48d0: 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b 0a 20 20  lag_altform2;.  
48e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 69 67        /* The sig
48f0: 6e 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 74 68  n in front of th
4900: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
4910: 20 20 20 20 69 66 28 20 70 72 65 66 69 78 20 29      if( prefix )
4920: 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  {.          *(bu
4930: 66 70 74 2b 2b 29 20 3d 20 70 72 65 66 69 78 3b  fpt++) = prefix;
4940: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4950: 20 20 20 2f 2a 20 44 69 67 69 74 73 20 70 72 69     /* Digits pri
4960: 6f 72 20 74 6f 20 74 68 65 20 64 65 63 69 6d 61  or to the decima
4970: 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20  l point */.     
4980: 20 20 20 69 66 28 20 65 32 3c 30 20 29 7b 0a 20     if( e2<0 ){. 
4990: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
49a0: 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20 20 20  ++) = '0';.     
49b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
49c0: 20 20 20 20 66 6f 72 28 3b 20 65 32 3e 3d 30 3b      for(; e2>=0;
49d0: 20 65 32 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20   e2--){.        
49e0: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
49f0: 20 65 74 5f 67 65 74 64 69 67 69 74 28 26 72 65   et_getdigit(&re
4a00: 61 6c 76 61 6c 75 65 2c 26 6e 73 64 29 3b 0a 20  alvalue,&nsd);. 
4a10: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
4a20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
4a30: 54 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  The decimal poin
4a40: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  t */.        if(
4a50: 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20 20 20 20   flag_dp ){.    
4a60: 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29        *(bufpt++)
4a70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20   = '.';.        
4a80: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 22 30 22  }.        /* "0"
4a90: 20 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68   digits after th
4aa0: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
4ab0: 62 75 74 20 62 65 66 6f 72 65 20 74 68 65 20 66  but before the f
4ac0: 69 72 73 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  irst.        ** 
4ad0: 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69  significant digi
4ae0: 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
4af0: 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 65  */.        for(e
4b00: 32 2b 2b 3b 20 65 32 3c 30 3b 20 70 72 65 63 69  2++; e2<0; preci
4b10: 73 69 6f 6e 2d 2d 2c 20 65 32 2b 2b 29 7b 0a 20  sion--, e2++){. 
4b20: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
4b30: 20 70 72 65 63 69 73 69 6f 6e 3e 30 20 29 3b 0a   precision>0 );.
4b40: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4b50: 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 20 20 20  t++) = '0';.    
4b60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a      }.        /*
4b70: 20 53 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   Significant dig
4b80: 69 74 73 20 61 66 74 65 72 20 74 68 65 20 64 65  its after the de
4b90: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20  cimal point */. 
4ba0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 70         while( (p
4bb0: 72 65 63 69 73 69 6f 6e 2d 2d 29 3e 30 20 29 7b  recision--)>0 ){
4bc0: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66  .          *(buf
4bd0: 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65 74 64 69  pt++) = et_getdi
4be0: 67 69 74 28 26 72 65 61 6c 76 61 6c 75 65 2c 26  git(&realvalue,&
4bf0: 6e 73 64 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nsd);.        }.
4c00: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 6d 6f 76          /* Remov
4c10: 65 20 74 72 61 69 6c 69 6e 67 20 7a 65 72 6f 73  e trailing zeros
4c20: 20 61 6e 64 20 74 68 65 20 22 2e 22 20 69 66 20   and the "." if 
4c30: 6e 6f 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77  no digits follow
4c40: 20 74 68 65 20 22 2e 22 20 2a 2f 0a 20 20 20 20   the "." */.    
4c50: 20 20 20 20 69 66 28 20 66 6c 61 67 5f 72 74 7a      if( flag_rtz
4c60: 20 26 26 20 66 6c 61 67 5f 64 70 20 29 7b 0a 20   && flag_dp ){. 
4c70: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
4c80: 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 30 27 20 29  bufpt[-1]=='0' )
4c90: 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 30 3b   *(--bufpt) = 0;
4ca0: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
4cb0: 74 28 20 62 75 66 70 74 3e 7a 4f 75 74 20 29 3b  t( bufpt>zOut );
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62  .          if( b
4cd0: 75 66 70 74 5b 2d 31 5d 3d 3d 27 2e 27 20 29 7b  ufpt[-1]=='.' ){
4ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
4cf0: 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 20 29   flag_altform2 )
4d00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4d10: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 30 27  *(bufpt++) = '0'
4d20: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
4d30: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
4d40: 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20     *(--bufpt) = 
4d50: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  0;.            }
4d60: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
4d70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
4d80: 2a 20 41 64 64 20 74 68 65 20 22 65 4e 4e 4e 22  * Add the "eNNN"
4d90: 20 73 75 66 66 69 78 20 2a 2f 0a 20 20 20 20 20   suffix */.     
4da0: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74     if( xtype==et
4db0: 45 58 50 20 29 7b 0a 20 20 20 20 20 20 20 20 20  EXP ){.         
4dc0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 61 44   *(bufpt++) = aD
4dd0: 69 67 69 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61  igits[infop->cha
4de0: 72 73 65 74 5d 3b 0a 20 20 20 20 20 20 20 20 20  rset];.         
4df0: 20 69 66 28 20 65 78 70 3c 30 20 29 7b 0a 20 20   if( exp<0 ){.  
4e00: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70            *(bufp
4e10: 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 65 78 70 20  t++) = '-'; exp 
4e20: 3d 20 2d 65 78 70 3b 0a 20 20 20 20 20 20 20 20  = -exp;.        
4e30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
4e40: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20       *(bufpt++) 
4e50: 3d 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20  = '+';.         
4e60: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
4e70: 20 65 78 70 3e 3d 31 30 30 20 29 7b 0a 20 20 20   exp>=100 ){.   
4e80: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74           *(bufpt
4e90: 2b 2b 29 20 3d 20 28 63 68 61 72 29 28 28 65 78  ++) = (char)((ex
4ea0: 70 2f 31 30 30 29 2b 27 30 27 29 3b 20 20 20 20  p/100)+'0');    
4eb0: 20 20 20 20 2f 2a 20 31 30 30 27 73 20 64 69 67      /* 100's dig
4ec0: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
4ed0: 20 20 65 78 70 20 25 3d 20 31 30 30 3b 0a 20 20    exp %= 100;.  
4ee0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4ef0: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d      *(bufpt++) =
4f00: 20 28 63 68 61 72 29 28 65 78 70 2f 31 30 2b 27   (char)(exp/10+'
4f10: 30 27 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  0');            
4f20: 20 2f 2a 20 31 30 27 73 20 64 69 67 69 74 20 2a   /* 10's digit *
4f30: 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75  /.          *(bu
4f40: 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 28  fpt++) = (char)(
4f50: 65 78 70 25 31 30 2b 27 30 27 29 3b 20 20 20 20  exp%10+'0');    
4f60: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 27 73 20           /* 1's 
4f70: 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  digit */.       
4f80: 20 7d 0a 20 20 20 20 20 20 20 20 2a 62 75 66 70   }.        *bufp
4f90: 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20 20  t = 0;..        
4fa0: 2f 2a 20 54 68 65 20 63 6f 6e 76 65 72 74 65 64  /* The converted
4fb0: 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 62 75   number is in bu
4fc0: 66 5b 5d 20 61 6e 64 20 7a 65 72 6f 20 74 65 72  f[] and zero ter
4fd0: 6d 69 6e 61 74 65 64 2e 20 4f 75 74 70 75 74 20  minated. Output 
4fe0: 69 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e  it..        ** N
4ff0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 6e 75 6d  ote that the num
5000: 62 65 72 20 69 73 20 69 6e 20 74 68 65 20 75 73  ber is in the us
5010: 75 61 6c 20 6f 72 64 65 72 2c 20 6e 6f 74 20 72  ual order, not r
5020: 65 76 65 72 73 65 64 20 61 73 20 77 69 74 68 0a  eversed as with.
5030: 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67          ** integ
5040: 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20  er conversions. 
5050: 2a 2f 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74  */.        lengt
5060: 68 20 3d 20 28 69 6e 74 29 28 62 75 66 70 74 2d  h = (int)(bufpt-
5070: 7a 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 62  zOut);.        b
5080: 75 66 70 74 20 3d 20 7a 4f 75 74 3b 0a 0a 20 20  ufpt = zOut;..  
5090: 20 20 20 20 20 20 2f 2a 20 53 70 65 63 69 61 6c        /* Special
50a0: 20 63 61 73 65 3a 20 20 41 64 64 20 6c 65 61 64   case:  Add lead
50b0: 69 6e 67 20 7a 65 72 6f 73 20 69 66 20 74 68 65  ing zeros if the
50c0: 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 66 6c   flag_zeropad fl
50d0: 61 67 20 69 73 0a 20 20 20 20 20 20 20 20 2a 2a  ag is.        **
50e0: 20 73 65 74 20 61 6e 64 20 77 65 20 61 72 65 20   set and we are 
50f0: 6e 6f 74 20 6c 65 66 74 20 6a 75 73 74 69 66 69  not left justifi
5100: 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ed */.        if
5110: 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26  ( flag_zeropad &
5120: 26 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74  & !flag_leftjust
5130: 69 66 79 20 26 26 20 6c 65 6e 67 74 68 20 3c 20  ify && length < 
5140: 77 69 64 74 68 29 7b 0a 20 20 20 20 20 20 20 20  width){.        
5150: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 20    int i;.       
5160: 20 20 20 69 6e 74 20 6e 50 61 64 20 3d 20 77 69     int nPad = wi
5170: 64 74 68 20 2d 20 6c 65 6e 67 74 68 3b 0a 20 20  dth - length;.  
5180: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 77 69          for(i=wi
5190: 64 74 68 3b 20 69 3e 3d 6e 50 61 64 3b 20 69 2d  dth; i>=nPad; i-
51a0: 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  -){.            
51b0: 62 75 66 70 74 5b 69 5d 20 3d 20 62 75 66 70 74  bufpt[i] = bufpt
51c0: 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20 20 20 20 20  [i-nPad];.      
51d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
51e0: 69 20 3d 20 70 72 65 66 69 78 21 3d 30 3b 0a 20  i = prefix!=0;. 
51f0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
5200: 6e 50 61 64 2d 2d 20 29 20 62 75 66 70 74 5b 69  nPad-- ) bufpt[i
5210: 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20 20 20 20 20  ++] = '0';.     
5220: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69       length = wi
5230: 64 74 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23  dth;.        }.#
5240: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
5250: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
5260: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f  OATING_POINT) */
5270: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
5280: 20 20 20 20 20 20 63 61 73 65 20 65 74 53 49 5a        case etSIZ
5290: 45 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  E:.        if( !
52a0: 62 41 72 67 4c 69 73 74 20 29 20 2a 28 76 61 5f  bArgList ) *(va_
52b0: 61 72 67 28 61 70 2c 69 6e 74 2a 29 29 20 3d 20  arg(ap,int*)) = 
52c0: 70 41 63 63 75 6d 2d 3e 6e 43 68 61 72 3b 0a 20  pAccum->nChar;. 
52d0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20         length = 
52e0: 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20  width = 0;.     
52f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
5300: 63 61 73 65 20 65 74 50 45 52 43 45 4e 54 3a 0a  case etPERCENT:.
5310: 20 20 20 20 20 20 20 20 62 75 66 5b 30 5d 20 3d          buf[0] =
5320: 20 27 25 27 3b 0a 20 20 20 20 20 20 20 20 62 75   '%';.        bu
5330: 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20  fpt = buf;.     
5340: 20 20 20 6c 65 6e 67 74 68 20 3d 20 31 3b 0a 20     length = 1;. 
5350: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
5360: 20 20 20 20 63 61 73 65 20 65 74 43 48 41 52 58      case etCHARX
5370: 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 41  :.        if( bA
5380: 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20  rgList ){.      
5390: 20 20 20 20 63 20 3d 20 28 69 6e 74 29 67 65 74      c = (int)get
53a0: 49 6e 74 41 72 67 28 70 41 72 67 4c 69 73 74 29  IntArg(pArgList)
53b0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
53c0: 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 76  .          c = v
53d0: 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20  a_arg(ap,int);. 
53e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
53f0: 20 62 75 66 5b 30 5d 20 3d 20 28 63 68 61 72 29   buf[0] = (char)
5400: 63 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  c;.        if( p
5410: 72 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20  recision>=0 ){. 
5420: 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 64 78           for(idx
5430: 3d 31 3b 20 69 64 78 3c 70 72 65 63 69 73 69 6f  =1; idx<precisio
5440: 6e 3b 20 69 64 78 2b 2b 29 20 62 75 66 5b 69 64  n; idx++) buf[id
5450: 78 5d 20 3d 20 28 63 68 61 72 29 63 3b 0a 20 20  x] = (char)c;.  
5460: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d          length =
5470: 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20   precision;.    
5480: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
5490: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 31 3b 0a       length =1;.
54a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
54b0: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20    bufpt = buf;. 
54c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
54d0: 20 20 20 20 63 61 73 65 20 65 74 53 54 52 49 4e      case etSTRIN
54e0: 47 3a 0a 20 20 20 20 20 20 63 61 73 65 20 65 74  G:.      case et
54f0: 44 59 4e 53 54 52 49 4e 47 3a 0a 20 20 20 20 20  DYNSTRING:.     
5500: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
5510: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66  ){.          buf
5520: 70 74 20 3d 20 67 65 74 54 65 78 74 41 72 67 28  pt = getTextArg(
5530: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20  pArgList);.     
5540: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5550: 20 20 20 20 62 75 66 70 74 20 3d 20 76 61 5f 61      bufpt = va_a
5560: 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20  rg(ap,char*);.  
5570: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5580: 69 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a  if( bufpt==0 ){.
5590: 20 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20            bufpt 
55a0: 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 7d 65  = "";.        }e
55b0: 6c 73 65 20 69 66 28 20 78 74 79 70 65 3d 3d 65  lse if( xtype==e
55c0: 74 44 59 4e 53 54 52 49 4e 47 20 26 26 20 21 62  tDYNSTRING && !b
55d0: 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20  ArgList ){.     
55e0: 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20 62 75       zExtra = bu
55f0: 66 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  fpt;.        }. 
5600: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69         if( preci
5610: 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20  sion>=0 ){.     
5620: 20 20 20 20 20 66 6f 72 28 6c 65 6e 67 74 68 3d       for(length=
5630: 30 3b 20 6c 65 6e 67 74 68 3c 70 72 65 63 69 73  0; length<precis
5640: 69 6f 6e 20 26 26 20 62 75 66 70 74 5b 6c 65 6e  ion && bufpt[len
5650: 67 74 68 5d 3b 20 6c 65 6e 67 74 68 2b 2b 29 7b  gth]; length++){
5660: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
5670: 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74  .          lengt
5680: 68 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  h = sqlite3Strle
5690: 6e 33 30 28 62 75 66 70 74 29 3b 0a 20 20 20 20  n30(bufpt);.    
56a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72      }.        br
56b0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
56c0: 65 74 53 51 4c 45 53 43 41 50 45 3a 0a 20 20 20  etSQLESCAPE:.   
56d0: 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 53 43     case etSQLESC
56e0: 41 50 45 32 3a 0a 20 20 20 20 20 20 63 61 73 65  APE2:.      case
56f0: 20 65 74 53 51 4c 45 53 43 41 50 45 33 3a 20 7b   etSQLESCAPE3: {
5700: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20  .        int i, 
5710: 6a 2c 20 6b 2c 20 6e 2c 20 69 73 6e 75 6c 6c 3b  j, k, n, isnull;
5720: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 65 65  .        int nee
5730: 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 20 20 20  dQuote;.        
5740: 63 68 61 72 20 63 68 3b 0a 20 20 20 20 20 20 20  char ch;.       
5750: 20 63 68 61 72 20 71 20 3d 20 28 28 78 74 79 70   char q = ((xtyp
5760: 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 33 29  e==etSQLESCAPE3)
5770: 3f 27 22 27 3a 27 5c 27 27 29 3b 20 20 20 2f 2a  ?'"':'\'');   /*
5780: 20 51 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   Quote character
5790: 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61 72   */.        char
57a0: 20 2a 65 73 63 61 72 67 3b 0a 0a 20 20 20 20 20   *escarg;..     
57b0: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20     if( bArgList 
57c0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 73 63  ){.          esc
57d0: 61 72 67 20 3d 20 67 65 74 54 65 78 74 41 72 67  arg = getTextArg
57e0: 28 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20  (pArgList);.    
57f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
5800: 20 20 20 20 20 65 73 63 61 72 67 20 3d 20 76 61       escarg = va
5810: 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a  _arg(ap,char*);.
5820: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5830: 20 20 69 73 6e 75 6c 6c 20 3d 20 65 73 63 61 72    isnull = escar
5840: 67 3d 3d 30 3b 0a 20 20 20 20 20 20 20 20 69 66  g==0;.        if
5850: 28 20 69 73 6e 75 6c 6c 20 29 20 65 73 63 61 72  ( isnull ) escar
5860: 67 20 3d 20 28 78 74 79 70 65 3d 3d 65 74 53 51  g = (xtype==etSQ
5870: 4c 45 53 43 41 50 45 32 20 3f 20 22 4e 55 4c 4c  LESCAPE2 ? "NULL
5880: 22 20 3a 20 22 28 4e 55 4c 4c 29 22 29 3b 0a 20  " : "(NULL)");. 
5890: 20 20 20 20 20 20 20 6b 20 3d 20 70 72 65 63 69         k = preci
58a0: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 66 6f  sion;.        fo
58b0: 72 28 69 3d 6e 3d 30 3b 20 6b 21 3d 30 20 26 26  r(i=n=0; k!=0 &&
58c0: 20 28 63 68 3d 65 73 63 61 72 67 5b 69 5d 29 21   (ch=escarg[i])!
58d0: 3d 30 3b 20 69 2b 2b 2c 20 6b 2d 2d 29 7b 0a 20  =0; i++, k--){. 
58e0: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d           if( ch=
58f0: 3d 71 20 29 20 20 6e 2b 2b 3b 0a 20 20 20 20 20  =q )  n++;.     
5900: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 65 65     }.        nee
5910: 64 51 75 6f 74 65 20 3d 20 21 69 73 6e 75 6c 6c  dQuote = !isnull
5920: 20 26 26 20 78 74 79 70 65 3d 3d 65 74 53 51 4c   && xtype==etSQL
5930: 45 53 43 41 50 45 32 3b 0a 20 20 20 20 20 20 20  ESCAPE2;.       
5940: 20 6e 20 2b 3d 20 69 20 2b 20 31 20 2b 20 6e 65   n += i + 1 + ne
5950: 65 64 51 75 6f 74 65 2a 32 3b 0a 20 20 20 20 20  edQuote*2;.     
5960: 20 20 20 69 66 28 20 6e 3e 65 74 42 55 46 53 49     if( n>etBUFSI
5970: 5a 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ZE ){.          
5980: 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20 3d  bufpt = zExtra =
5990: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20   sqlite3Malloc( 
59a0: 6e 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  n );.          i
59b0: 66 28 20 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20  f( bufpt==0 ){. 
59c0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 53 74             setSt
59d0: 72 41 63 63 75 6d 45 72 72 6f 72 28 70 41 63 63  rAccumError(pAcc
59e0: 75 6d 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  um, STRACCUM_NOM
59f0: 45 4d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  EM);.           
5a00: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
5a10: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
5a20: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75  se{.          bu
5a30: 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20  fpt = buf;.     
5a40: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6a 20 3d     }.        j =
5a50: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
5a60: 6e 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 70  needQuote ) bufp
5a70: 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20  t[j++] = q;.    
5a80: 20 20 20 20 6b 20 3d 20 69 3b 0a 20 20 20 20 20      k = i;.     
5a90: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6b 3b     for(i=0; i<k;
5aa0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
5ab0: 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 63 68   bufpt[j++] = ch
5ac0: 20 3d 20 65 73 63 61 72 67 5b 69 5d 3b 0a 20 20   = escarg[i];.  
5ad0: 20 20 20 20 20 20 20 20 69 66 28 20 63 68 3d 3d          if( ch==
5ae0: 71 20 29 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d  q ) bufpt[j++] =
5af0: 20 63 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   ch;.        }. 
5b00: 20 20 20 20 20 20 20 69 66 28 20 6e 65 65 64 51         if( needQ
5b10: 75 6f 74 65 20 29 20 62 75 66 70 74 5b 6a 2b 2b  uote ) bufpt[j++
5b20: 5d 20 3d 20 71 3b 0a 20 20 20 20 20 20 20 20 62  ] = q;.        b
5b30: 75 66 70 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20  ufpt[j] = 0;.   
5b40: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 6a 3b       length = j;
5b50: 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  .        /* The 
5b60: 70 72 65 63 69 73 69 6f 6e 20 69 6e 20 25 71 20  precision in %q 
5b70: 61 6e 64 20 25 51 20 6d 65 61 6e 73 20 68 6f 77  and %Q means how
5b80: 20 6d 61 6e 79 20 69 6e 70 75 74 20 63 68 61 72   many input char
5b90: 61 63 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  acters to.      
5ba0: 20 20 2a 2a 20 63 6f 6e 73 75 6d 65 2c 20 6e 6f    ** consume, no
5bb0: 74 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  t the length of 
5bc0: 74 68 65 20 6f 75 74 70 75 74 2e 2e 2e 0a 20 20  the output....  
5bd0: 20 20 20 20 20 20 2a 2a 20 69 66 28 20 70 72 65        ** if( pre
5be0: 63 69 73 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65  cision>=0 && pre
5bf0: 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20  cision<length ) 
5c00: 6c 65 6e 67 74 68 20 3d 20 70 72 65 63 69 73 69  length = precisi
5c10: 6f 6e 3b 20 2a 2f 0a 20 20 20 20 20 20 20 20 62  on; */.        b
5c20: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
5c30: 20 20 20 20 63 61 73 65 20 65 74 54 4f 4b 45 4e      case etTOKEN
5c40: 3a 20 7b 0a 20 20 20 20 20 20 20 20 54 6f 6b 65  : {.        Toke
5c50: 6e 20 2a 70 54 6f 6b 65 6e 20 3d 20 76 61 5f 61  n *pToken = va_a
5c60: 72 67 28 61 70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  rg(ap, Token*);.
5c70: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5c80: 62 41 72 67 4c 69 73 74 3d 3d 30 20 29 3b 0a 20  bArgList==0 );. 
5c90: 20 20 20 20 20 20 20 69 66 28 20 70 54 6f 6b 65         if( pToke
5ca0: 6e 20 26 26 20 70 54 6f 6b 65 6e 2d 3e 6e 20 29  n && pToken->n )
5cb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
5cc0: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
5cd0: 64 28 70 41 63 63 75 6d 2c 20 28 63 6f 6e 73 74  d(pAccum, (const
5ce0: 20 63 68 61 72 2a 29 70 54 6f 6b 65 6e 2d 3e 7a   char*)pToken->z
5cf0: 2c 20 70 54 6f 6b 65 6e 2d 3e 6e 29 3b 0a 20 20  , pToken->n);.  
5d00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5d10: 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d  length = width =
5d20: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
5d30: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
5d40: 20 63 61 73 65 20 65 74 53 52 43 4c 49 53 54 3a   case etSRCLIST:
5d50: 20 7b 0a 20 20 20 20 20 20 20 20 53 72 63 4c 69   {.        SrcLi
5d60: 73 74 20 2a 70 53 72 63 20 3d 20 76 61 5f 61 72  st *pSrc = va_ar
5d70: 67 28 61 70 2c 20 53 72 63 4c 69 73 74 2a 29 3b  g(ap, SrcList*);
5d80: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d  .        int k =
5d90: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
5da0: 3b 0a 20 20 20 20 20 20 20 20 73 74 72 75 63 74  ;.        struct
5db0: 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 70   SrcList_item *p
5dc0: 49 74 65 6d 20 3d 20 26 70 53 72 63 2d 3e 61 5b  Item = &pSrc->a[
5dd0: 6b 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  k];.        asse
5de0: 72 74 28 20 62 41 72 67 4c 69 73 74 3d 3d 30 20  rt( bArgList==0 
5df0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5e00: 74 28 20 6b 3e 3d 30 20 26 26 20 6b 3c 70 53 72  t( k>=0 && k<pSr
5e10: 63 2d 3e 6e 53 72 63 20 29 3b 0a 20 20 20 20 20  c->nSrc );.     
5e20: 20 20 20 69 66 28 20 70 49 74 65 6d 2d 3e 7a 44     if( pItem->zD
5e30: 61 74 61 62 61 73 65 20 29 7b 0a 20 20 20 20 20  atabase ){.     
5e40: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41       sqlite3StrA
5e50: 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 70 41  ccumAppendAll(pA
5e60: 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e 7a 44 61  ccum, pItem->zDa
5e70: 74 61 62 61 73 65 29 3b 0a 20 20 20 20 20 20 20  tabase);.       
5e80: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63     sqlite3StrAcc
5e90: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c  umAppend(pAccum,
5ea0: 20 22 2e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20   ".", 1);.      
5eb0: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
5ec0: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
5ed0: 64 41 6c 6c 28 70 41 63 63 75 6d 2c 20 70 49 74  dAll(pAccum, pIt
5ee0: 65 6d 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  em->zName);.    
5ef0: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64      length = wid
5f00: 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  th = 0;.        
5f10: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5f20: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
5f30: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5f40: 78 74 79 70 65 3d 3d 65 74 49 4e 56 41 4c 49 44  xtype==etINVALID
5f50: 20 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75   );.        retu
5f60: 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rn;.      }.    
5f70: 7d 2f 2a 20 45 6e 64 20 73 77 69 74 63 68 20 6f  }/* End switch o
5f80: 76 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 74  ver the format t
5f90: 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 0a 20 20  ype */.    /*.  
5fa0: 20 20 2a 2a 20 54 68 65 20 74 65 78 74 20 6f 66    ** The text of
5fb0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
5fc0: 69 73 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  is pointed to by
5fd0: 20 22 62 75 66 70 74 22 20 61 6e 64 20 69 73 0a   "bufpt" and is.
5fe0: 20 20 20 20 2a 2a 20 22 6c 65 6e 67 74 68 22 20      ** "length" 
5ff0: 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
6000: 20 20 54 68 65 20 66 69 65 6c 64 20 77 69 64 74    The field widt
6010: 68 20 69 73 20 22 77 69 64 74 68 22 2e 20 20 44  h is "width".  D
6020: 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74  o.    ** the out
6030: 70 75 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  put..    */.    
6040: 69 66 28 20 21 66 6c 61 67 5f 6c 65 66 74 6a 75  if( !flag_leftju
6050: 73 74 69 66 79 20 29 7b 0a 20 20 20 20 20 20 72  stify ){.      r
6060: 65 67 69 73 74 65 72 20 69 6e 74 20 6e 73 70 61  egister int nspa
6070: 63 65 3b 0a 20 20 20 20 20 20 6e 73 70 61 63 65  ce;.      nspace
6080: 20 3d 20 77 69 64 74 68 2d 6c 65 6e 67 74 68 3b   = width-length;
6090: 0a 20 20 20 20 20 20 69 66 28 20 6e 73 70 61 63  .      if( nspac
60a0: 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  e>0 ){.        s
60b0: 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61 63  qlite3AppendSpac
60c0: 65 28 70 41 63 63 75 6d 2c 20 6e 73 70 61 63 65  e(pAccum, nspace
60d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
60e0: 0a 20 20 20 20 69 66 28 20 6c 65 6e 67 74 68 3e  .    if( length>
60f0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
6100: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
6110: 28 70 41 63 63 75 6d 2c 20 62 75 66 70 74 2c 20  (pAccum, bufpt, 
6120: 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 20  length);.    }. 
6130: 20 20 20 69 66 28 20 66 6c 61 67 5f 6c 65 66 74     if( flag_left
6140: 6a 75 73 74 69 66 79 20 29 7b 0a 20 20 20 20 20  justify ){.     
6150: 20 72 65 67 69 73 74 65 72 20 69 6e 74 20 6e 73   register int ns
6160: 70 61 63 65 3b 0a 20 20 20 20 20 20 6e 73 70 61  pace;.      nspa
6170: 63 65 20 3d 20 77 69 64 74 68 2d 6c 65 6e 67 74  ce = width-lengt
6180: 68 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 73 70  h;.      if( nsp
6190: 61 63 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  ace>0 ){.       
61a0: 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70   sqlite3AppendSp
61b0: 61 63 65 28 70 41 63 63 75 6d 2c 20 6e 73 70 61  ace(pAccum, nspa
61c0: 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ce);.      }.   
61d0: 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 78 74 72   }.    if( zExtr
61e0: 61 20 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65  a ) sqlite3_free
61f0: 28 7a 45 78 74 72 61 29 3b 0a 20 20 7d 2f 2a 20  (zExtra);.  }/* 
6200: 45 6e 64 20 66 6f 72 20 6c 6f 6f 70 20 6f 76 65  End for loop ove
6210: 72 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72  r the format str
6220: 69 6e 67 20 2a 2f 0a 7d 20 2f 2a 20 45 6e 64 20  ing */.} /* End 
6230: 6f 66 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a  of function */..
6240: 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 4e 20 62  /*.** Append N b
6250: 79 74 65 73 20 6f 66 20 74 65 78 74 20 66 72 6f  ytes of text fro
6260: 6d 20 7a 20 74 6f 20 74 68 65 20 53 74 72 41 63  m z to the StrAc
6270: 63 75 6d 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 76  cum object..*/.v
6280: 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
6290: 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
62a0: 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61  um *p, const cha
62b0: 72 20 2a 7a 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  r *z, int N){.  
62c0: 61 73 73 65 72 74 28 20 7a 21 3d 30 20 29 3b 0a  assert( z!=0 );.
62d0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 54 65    assert( p->zTe
62e0: 78 74 21 3d 30 20 7c 7c 20 70 2d 3e 6e 43 68 61  xt!=0 || p->nCha
62f0: 72 3d 3d 30 20 7c 7c 20 70 2d 3e 61 63 63 45 72  r==0 || p->accEr
6300: 72 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ror );.  assert(
6310: 20 4e 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72   N>=0 );.  asser
6320: 74 28 20 70 2d 3e 61 63 63 45 72 72 6f 72 3d 3d  t( p->accError==
6330: 30 20 7c 7c 20 70 2d 3e 6e 41 6c 6c 6f 63 3d 3d  0 || p->nAlloc==
6340: 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 43  0 );.  if( p->nC
6350: 68 61 72 2b 4e 20 3e 3d 20 70 2d 3e 6e 41 6c 6c  har+N >= p->nAll
6360: 6f 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  oc ){.    char *
6370: 7a 4e 65 77 3b 0a 20 20 20 20 69 66 28 20 70 2d  zNew;.    if( p-
6380: 3e 61 63 63 45 72 72 6f 72 20 29 7b 0a 20 20 20  >accError ){.   
6390: 20 20 20 74 65 73 74 63 61 73 65 28 70 2d 3e 61     testcase(p->a
63a0: 63 63 45 72 72 6f 72 3d 3d 53 54 52 41 43 43 55  ccError==STRACCU
63b0: 4d 5f 54 4f 4f 42 49 47 29 3b 0a 20 20 20 20 20  M_TOOBIG);.     
63c0: 20 74 65 73 74 63 61 73 65 28 70 2d 3e 61 63 63   testcase(p->acc
63d0: 45 72 72 6f 72 3d 3d 53 54 52 41 43 43 55 4d 5f  Error==STRACCUM_
63e0: 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 20 20 72 65  NOMEM);.      re
63f0: 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
6400: 69 66 28 20 21 70 2d 3e 75 73 65 4d 61 6c 6c 6f  if( !p->useMallo
6410: 63 20 29 7b 0a 20 20 20 20 20 20 4e 20 3d 20 70  c ){.      N = p
6420: 2d 3e 6e 41 6c 6c 6f 63 20 2d 20 70 2d 3e 6e 43  ->nAlloc - p->nC
6430: 68 61 72 20 2d 20 31 3b 0a 20 20 20 20 20 20 73  har - 1;.      s
6440: 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28  etStrAccumError(
6450: 70 2c 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  p, STRACCUM_TOOB
6460: 49 47 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4e  IG);.      if( N
6470: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  <=0 ){.        r
6480: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
6490: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
64a0: 63 68 61 72 20 2a 7a 4f 6c 64 20 3d 20 28 70 2d  char *zOld = (p-
64b0: 3e 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73 65  >zText==p->zBase
64c0: 20 3f 20 30 20 3a 20 70 2d 3e 7a 54 65 78 74 29   ? 0 : p->zText)
64d0: 3b 0a 20 20 20 20 20 20 69 36 34 20 73 7a 4e 65  ;.      i64 szNe
64e0: 77 20 3d 20 70 2d 3e 6e 43 68 61 72 3b 0a 20 20  w = p->nChar;.  
64f0: 20 20 20 20 73 7a 4e 65 77 20 2b 3d 20 4e 20 2b      szNew += N +
6500: 20 31 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a   1;.      if( sz
6510: 4e 65 77 20 3e 20 70 2d 3e 6d 78 41 6c 6c 6f 63  New > p->mxAlloc
6520: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
6530: 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
6540: 28 70 29 3b 0a 20 20 20 20 20 20 20 20 73 65 74  (p);.        set
6550: 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70 2c  StrAccumError(p,
6560: 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
6570: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
6580: 6e 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  n;.      }else{.
6590: 20 20 20 20 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f          p->nAllo
65a0: 63 20 3d 20 28 69 6e 74 29 73 7a 4e 65 77 3b 0a  c = (int)szNew;.
65b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
65c0: 28 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63 3d 3d  ( p->useMalloc==
65d0: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 4e 65  1 ){.        zNe
65e0: 77 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61  w = sqlite3DbRea
65f0: 6c 6c 6f 63 28 70 2d 3e 64 62 2c 20 7a 4f 6c 64  lloc(p->db, zOld
6600: 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20  , p->nAlloc);.  
6610: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6620: 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65     zNew = sqlite
6630: 33 5f 72 65 61 6c 6c 6f 63 28 7a 4f 6c 64 2c 20  3_realloc(zOld, 
6640: 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20  p->nAlloc);.    
6650: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 4e    }.      if( zN
6660: 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  ew ){.        if
6670: 28 20 7a 4f 6c 64 3d 3d 30 20 26 26 20 70 2d 3e  ( zOld==0 && p->
6680: 6e 43 68 61 72 3e 30 20 29 20 6d 65 6d 63 70 79  nChar>0 ) memcpy
6690: 28 7a 4e 65 77 2c 20 70 2d 3e 7a 54 65 78 74 2c  (zNew, p->zText,
66a0: 20 70 2d 3e 6e 43 68 61 72 29 3b 0a 20 20 20 20   p->nChar);.    
66b0: 20 20 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 7a      p->zText = z
66c0: 4e 65 77 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  New;.      }else
66d0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
66e0: 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 70  3StrAccumReset(p
66f0: 29 3b 0a 20 20 20 20 20 20 20 20 73 65 74 53 74  );.        setSt
6700: 72 41 63 63 75 6d 45 72 72 6f 72 28 70 2c 20 53  rAccumError(p, S
6710: 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a  TRACCUM_NOMEM);.
6720: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a          return;.
6730: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
6740: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a  }.  assert( p->z
6750: 54 65 78 74 20 29 3b 0a 20 20 6d 65 6d 63 70 79  Text );.  memcpy
6760: 28 26 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43  (&p->zText[p->nC
6770: 68 61 72 5d 2c 20 7a 2c 20 4e 29 3b 0a 20 20 70  har], z, N);.  p
6780: 2d 3e 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a 7d 0a  ->nChar += N;.}.
6790: 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 68  ./*.** Append th
67a0: 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  e complete text 
67b0: 6f 66 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74  of zero-terminat
67c0: 65 64 20 73 74 72 69 6e 67 20 7a 5b 5d 20 74 6f  ed string z[] to
67d0: 20 74 68 65 20 70 20 73 74 72 69 6e 67 2e 0a 2a   the p string..*
67e0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  /.void sqlite3St
67f0: 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
6800: 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e  StrAccum *p, con
6810: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73  st char *z){.  s
6820: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
6830: 70 65 6e 64 28 70 2c 20 7a 2c 20 73 71 6c 69 74  pend(p, z, sqlit
6840: 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 29 3b 0a  e3Strlen30(z));.
6850: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 69 73 68  }.../*.** Finish
6860: 20 6f 66 66 20 61 20 73 74 72 69 6e 67 20 62 79   off a string by
6870: 20 6d 61 6b 69 6e 67 20 73 75 72 65 20 69 74 20   making sure it 
6880: 69 73 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74  is zero-terminat
6890: 65 64 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ed..** Return a 
68a0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 72  pointer to the r
68b0: 65 73 75 6c 74 69 6e 67 20 73 74 72 69 6e 67 2e  esulting string.
68c0: 20 20 52 65 74 75 72 6e 20 61 20 4e 55 4c 4c 0a    Return a NULL.
68d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 69 66 20 61 6e  ** pointer if an
68e0: 79 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20  y kind of error 
68f0: 77 61 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e  was encountered.
6900: 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .*/.char *sqlite
6910: 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
6920: 53 74 72 41 63 63 75 6d 20 2a 70 29 7b 0a 20 20  StrAccum *p){.  
6930: 69 66 28 20 70 2d 3e 7a 54 65 78 74 20 29 7b 0a  if( p->zText ){.
6940: 20 20 20 20 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e      p->zText[p->
6950: 6e 43 68 61 72 5d 20 3d 20 30 3b 0a 20 20 20 20  nChar] = 0;.    
6960: 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63  if( p->useMalloc
6970: 20 26 26 20 70 2d 3e 7a 54 65 78 74 3d 3d 70 2d   && p->zText==p-
6980: 3e 7a 42 61 73 65 20 29 7b 0a 20 20 20 20 20 20  >zBase ){.      
6990: 69 66 28 20 70 2d 3e 75 73 65 4d 61 6c 6c 6f 63  if( p->useMalloc
69a0: 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==1 ){.        p
69b0: 2d 3e 7a 54 65 78 74 20 3d 20 73 71 6c 69 74 65  ->zText = sqlite
69c0: 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70 2d 3e  3DbMallocRaw(p->
69d0: 64 62 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 20 29  db, p->nChar+1 )
69e0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
69f0: 20 20 20 20 20 20 20 70 2d 3e 7a 54 65 78 74 20         p->zText 
6a00: 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
6a10: 28 70 2d 3e 6e 43 68 61 72 2b 31 29 3b 0a 20 20  (p->nChar+1);.  
6a20: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
6a30: 70 2d 3e 7a 54 65 78 74 20 29 7b 0a 20 20 20 20  p->zText ){.    
6a40: 20 20 20 20 6d 65 6d 63 70 79 28 70 2d 3e 7a 54      memcpy(p->zT
6a50: 65 78 74 2c 20 70 2d 3e 7a 42 61 73 65 2c 20 70  ext, p->zBase, p
6a60: 2d 3e 6e 43 68 61 72 2b 31 29 3b 0a 20 20 20 20  ->nChar+1);.    
6a70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
6a80: 20 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f   setStrAccumErro
6a90: 72 28 70 2c 20 53 54 52 41 43 43 55 4d 5f 4e 4f  r(p, STRACCUM_NO
6aa0: 4d 45 4d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  MEM);.      }.  
6ab0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
6ac0: 20 70 2d 3e 7a 54 65 78 74 3b 0a 7d 0a 0a 2f 2a   p->zText;.}../*
6ad0: 0a 2a 2a 20 52 65 73 65 74 20 61 6e 20 53 74 72  .** Reset an Str
6ae0: 41 63 63 75 6d 20 73 74 72 69 6e 67 2e 20 20 52  Accum string.  R
6af0: 65 63 6c 61 69 6d 20 61 6c 6c 20 6d 61 6c 6c 6f  eclaim all mallo
6b00: 63 65 64 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 76  ced memory..*/.v
6b10: 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
6b20: 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75  cumReset(StrAccu
6b30: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
6b40: 7a 54 65 78 74 21 3d 70 2d 3e 7a 42 61 73 65 20  zText!=p->zBase 
6b50: 29 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 75 73  ){.    if( p->us
6b60: 65 4d 61 6c 6c 6f 63 3d 3d 31 20 29 7b 0a 20 20  eMalloc==1 ){.  
6b70: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
6b80: 65 28 70 2d 3e 64 62 2c 20 70 2d 3e 7a 54 65 78  e(p->db, p->zTex
6b90: 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
6ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
6bb0: 65 28 70 2d 3e 7a 54 65 78 74 29 3b 0a 20 20 20  e(p->zText);.   
6bc0: 20 7d 0a 20 20 7d 0a 20 20 70 2d 3e 7a 54 65 78   }.  }.  p->zTex
6bd0: 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t = 0;.}../*.** 
6be0: 49 6e 69 74 69 61 6c 69 7a 65 20 61 20 73 74 72  Initialize a str
6bf0: 69 6e 67 20 61 63 63 75 6d 75 6c 61 74 6f 72 0a  ing accumulator.
6c00: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  */.void sqlite3S
6c10: 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
6c20: 63 63 75 6d 20 2a 70 2c 20 63 68 61 72 20 2a 7a  ccum *p, char *z
6c30: 42 61 73 65 2c 20 69 6e 74 20 6e 2c 20 69 6e 74  Base, int n, int
6c40: 20 6d 78 29 7b 0a 20 20 70 2d 3e 7a 54 65 78 74   mx){.  p->zText
6c50: 20 3d 20 70 2d 3e 7a 42 61 73 65 20 3d 20 7a 42   = p->zBase = zB
6c60: 61 73 65 3b 0a 20 20 70 2d 3e 64 62 20 3d 20 30  ase;.  p->db = 0
6c70: 3b 0a 20 20 70 2d 3e 6e 43 68 61 72 20 3d 20 30  ;.  p->nChar = 0
6c80: 3b 0a 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20  ;.  p->nAlloc = 
6c90: 6e 3b 0a 20 20 70 2d 3e 6d 78 41 6c 6c 6f 63 20  n;.  p->mxAlloc 
6ca0: 3d 20 6d 78 3b 0a 20 20 70 2d 3e 75 73 65 4d 61  = mx;.  p->useMa
6cb0: 6c 6c 6f 63 20 3d 20 31 3b 0a 20 20 70 2d 3e 61  lloc = 1;.  p->a
6cc0: 63 63 45 72 72 6f 72 20 3d 20 30 3b 0a 7d 0a 0a  ccError = 0;.}..
6cd0: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f  /*.** Print into
6ce0: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
6cf0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61 6c 6c   from sqliteMall
6d00: 6f 63 28 29 2e 20 20 55 73 65 20 74 68 65 20 69  oc().  Use the i
6d10: 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e  nternal.** %-con
6d20: 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f  version extensio
6d30: 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c  ns..*/.char *sql
6d40: 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
6d50: 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
6d60: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76  char *zFormat, v
6d70: 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 63 68  a_list ap){.  ch
6d80: 61 72 20 2a 7a 3b 0a 20 20 63 68 61 72 20 7a 42  ar *z;.  char zB
6d90: 61 73 65 5b 53 51 4c 49 54 45 5f 50 52 49 4e 54  ase[SQLITE_PRINT
6da0: 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20 53 74  _BUF_SIZE];.  St
6db0: 72 41 63 63 75 6d 20 61 63 63 3b 0a 20 20 61 73  rAccum acc;.  as
6dc0: 73 65 72 74 28 20 64 62 21 3d 30 20 29 3b 0a 20  sert( db!=0 );. 
6dd0: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
6de0: 49 6e 69 74 28 26 61 63 63 2c 20 7a 42 61 73 65  Init(&acc, zBase
6df0: 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c  , sizeof(zBase),
6e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6e10: 20 20 20 20 20 20 20 64 62 2d 3e 61 4c 69 6d 69         db->aLimi
6e20: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
6e30: 45 4e 47 54 48 5d 29 3b 0a 20 20 61 63 63 2e 64  ENGTH]);.  acc.d
6e40: 62 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69 74 65  b = db;.  sqlite
6e50: 33 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20  3VXPrintf(&acc, 
6e60: 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
6e70: 54 45 52 4e 41 4c 2c 20 7a 46 6f 72 6d 61 74 2c  TERNAL, zFormat,
6e80: 20 61 70 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69   ap);.  z = sqli
6e90: 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
6ea0: 68 28 26 61 63 63 29 3b 0a 20 20 69 66 28 20 61  h(&acc);.  if( a
6eb0: 63 63 2e 61 63 63 45 72 72 6f 72 3d 3d 53 54 52  cc.accError==STR
6ec0: 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  ACCUM_NOMEM ){. 
6ed0: 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69     db->mallocFai
6ee0: 6c 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72  led = 1;.  }.  r
6ef0: 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn z;.}../*.*
6f00: 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  * Print into mem
6f10: 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  ory obtained fro
6f20: 6d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  m sqliteMalloc()
6f30: 2e 20 20 55 73 65 20 74 68 65 20 69 6e 74 65 72  .  Use the inter
6f40: 6e 61 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73  nal.** %-convers
6f50: 69 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a  ion extensions..
6f60: 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  */.char *sqlite3
6f70: 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20  MPrintf(sqlite3 
6f80: 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
6f90: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
6fa0: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
6fb0: 63 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74  char *z;.  va_st
6fc0: 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29  art(ap, zFormat)
6fd0: 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56  ;.  z = sqlite3V
6fe0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 7a 46 6f 72  MPrintf(db, zFor
6ff0: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65  mat, ap);.  va_e
7000: 6e 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e  nd(ap);.  return
7010: 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4c 69 6b   z;.}../*.** Lik
7020: 65 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  e sqlite3MPrintf
7030: 28 29 2c 20 62 75 74 20 63 61 6c 6c 20 73 71 6c  (), but call sql
7040: 69 74 65 33 44 62 46 72 65 65 28 29 20 6f 6e 20  ite3DbFree() on 
7050: 7a 53 74 72 20 61 66 74 65 72 20 66 6f 72 6d 61  zStr after forma
7060: 74 74 69 6e 67 0a 2a 2a 20 74 68 65 20 73 74 72  tting.** the str
7070: 69 6e 67 20 61 6e 64 20 62 65 66 6f 72 65 20 72  ing and before r
7080: 65 74 75 72 6e 6e 69 6e 67 2e 20 20 54 68 69 73  eturnning.  This
7090: 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6e 74 65   routine is inte
70a0: 6e 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 0a  nded to be used.
70b0: 2a 2a 20 74 6f 20 6d 6f 64 69 66 79 20 61 6e 20  ** to modify an 
70c0: 65 78 69 73 74 69 6e 67 20 73 74 72 69 6e 67 2e  existing string.
70d0: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 2a    For example:.*
70e0: 2a 0a 2a 2a 20 20 20 20 20 20 20 78 20 3d 20 73  *.**       x = s
70f0: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
7100: 2c 20 78 2c 20 22 70 72 65 66 69 78 20 25 73 20  , x, "prefix %s 
7110: 73 75 66 66 69 78 22 2c 20 78 29 3b 0a 2a 2a 0a  suffix", x);.**.
7120: 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  */.char *sqlite3
7130: 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33  MAppendf(sqlite3
7140: 20 2a 64 62 2c 20 63 68 61 72 20 2a 7a 53 74 72   *db, char *zStr
7150: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  , const char *zF
7160: 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76  ormat, ...){.  v
7170: 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61  a_list ap;.  cha
7180: 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74  r *z;.  va_start
7190: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20  (ap, zFormat);. 
71a0: 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72   z = sqlite3VMPr
71b0: 69 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74  intf(db, zFormat
71c0: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
71d0: 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  ap);.  sqlite3Db
71e0: 46 72 65 65 28 64 62 2c 20 7a 53 74 72 29 3b 0a  Free(db, zStr);.
71f0: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
7200: 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e 74 6f 20  *.** Print into 
7210: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
7220: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
7230: 6c 6f 63 28 29 2e 20 20 4f 6d 69 74 20 74 68 65  loc().  Omit the
7240: 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 25 2d 63   internal.** %-c
7250: 6f 6e 76 65 72 73 69 6f 6e 20 65 78 74 65 6e 73  onversion extens
7260: 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73  ions..*/.char *s
7270: 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28  qlite3_vmprintf(
7280: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72  const char *zFor
7290: 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 29  mat, va_list ap)
72a0: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 63  {.  char *z;.  c
72b0: 68 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 45  har zBase[SQLITE
72c0: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 5d  _PRINT_BUF_SIZE]
72d0: 3b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63  ;.  StrAccum acc
72e0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
72f0: 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20  _OMIT_AUTOINIT. 
7300: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 69   if( sqlite3_ini
7310: 74 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74 75  tialize() ) retu
7320: 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 73  rn 0;.#endif.  s
7330: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
7340: 69 74 28 26 61 63 63 2c 20 7a 42 61 73 65 2c 20  it(&acc, zBase, 
7350: 73 69 7a 65 6f 66 28 7a 42 61 73 65 29 2c 20 53  sizeof(zBase), S
7360: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
7370: 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c  );.  acc.useMall
7380: 6f 63 20 3d 20 32 3b 0a 20 20 73 71 6c 69 74 65  oc = 2;.  sqlite
7390: 33 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20  3VXPrintf(&acc, 
73a0: 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  0, zFormat, ap);
73b0: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74  .  z = sqlite3St
73c0: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63  rAccumFinish(&ac
73d0: 63 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a  c);.  return z;.
73e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69  }../*.** Print i
73f0: 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69  nto memory obtai
7400: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
7410: 5f 6d 61 6c 6c 6f 63 28 29 28 29 2e 20 20 4f 6d  _malloc()().  Om
7420: 69 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a  it the internal.
7430: 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20  ** %-conversion 
7440: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63  extensions..*/.c
7450: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 6d 70 72  har *sqlite3_mpr
7460: 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20  intf(const char 
7470: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
7480: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
7490: 63 68 61 72 20 2a 7a 3b 0a 23 69 66 6e 64 65 66  char *z;.#ifndef
74a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
74b0: 4f 49 4e 49 54 0a 20 20 69 66 28 20 73 71 6c 69  OINIT.  if( sqli
74c0: 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
74d0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e   ) return 0;.#en
74e0: 64 69 66 0a 20 20 76 61 5f 73 74 61 72 74 28 61  dif.  va_start(a
74f0: 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a  p, zFormat);.  z
7500: 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69   = sqlite3_vmpri
7510: 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29  ntf(zFormat, ap)
7520: 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  ;.  va_end(ap);.
7530: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
7540: 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6e 70  *.** sqlite3_snp
7550: 72 69 6e 74 66 28 29 20 77 6f 72 6b 73 20 6c 69  rintf() works li
7560: 6b 65 20 73 6e 70 72 69 6e 74 66 28 29 20 65 78  ke snprintf() ex
7570: 63 65 70 74 20 74 68 61 74 20 69 74 20 69 67 6e  cept that it ign
7580: 6f 72 65 73 20 74 68 65 0a 2a 2a 20 63 75 72 72  ores the.** curr
7590: 65 6e 74 20 6c 6f 63 61 6c 65 20 73 65 74 74 69  ent locale setti
75a0: 6e 67 73 2e 20 20 54 68 69 73 20 69 73 20 69 6d  ngs.  This is im
75b0: 70 6f 72 74 61 6e 74 20 66 6f 72 20 53 51 4c 69  portant for SQLi
75c0: 74 65 20 62 65 63 61 75 73 65 20 77 65 0a 2a 2a  te because we.**
75d0: 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f   are not able to
75e0: 20 75 73 65 20 61 20 22 2c 22 20 61 73 20 74 68   use a "," as th
75f0: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
7600: 69 6e 20 70 6c 61 63 65 20 6f 66 20 22 2e 22 20  in place of "." 
7610: 61 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20  as.** specified 
7620: 62 79 20 73 6f 6d 65 20 6c 6f 63 61 6c 65 73 2e  by some locales.
7630: 0a 2a 2a 0a 2a 2a 20 4f 6f 70 73 3a 20 20 54 68  .**.** Oops:  Th
7640: 65 20 66 69 72 73 74 20 74 77 6f 20 61 72 67 75  e first two argu
7650: 6d 65 6e 74 73 20 6f 66 20 73 71 6c 69 74 65 33  ments of sqlite3
7660: 5f 73 6e 70 72 69 6e 74 66 28 29 20 61 72 65 20  _snprintf() are 
7670: 62 61 63 6b 77 61 72 64 73 0a 2a 2a 20 66 72 6f  backwards.** fro
7680: 6d 20 74 68 65 20 73 6e 70 72 69 6e 74 66 28 29  m the snprintf()
7690: 20 73 74 61 6e 64 61 72 64 2e 20 20 55 6e 66 6f   standard.  Unfo
76a0: 72 74 75 6e 61 74 65 6c 79 2c 20 69 74 20 69 73  rtunately, it is
76b0: 20 74 6f 6f 20 6c 61 74 65 20 74 6f 20 63 68 61   too late to cha
76c0: 6e 67 65 0a 2a 2a 20 74 68 69 73 20 77 69 74 68  nge.** this with
76d0: 6f 75 74 20 62 72 65 61 6b 69 6e 67 20 63 6f 6d  out breaking com
76e0: 70 61 74 69 62 69 6c 69 74 79 2c 20 73 6f 20 77  patibility, so w
76f0: 65 20 6a 75 73 74 20 68 61 76 65 20 74 6f 20 6c  e just have to l
7700: 69 76 65 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ive with the.** 
7710: 6d 69 73 74 61 6b 65 2e 0a 2a 2a 0a 2a 2a 20 73  mistake..**.** s
7720: 71 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66  qlite3_vsnprintf
7730: 28 29 20 69 73 20 74 68 65 20 76 61 72 61 72 67  () is the vararg
7740: 73 20 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 63 68  s version..*/.ch
7750: 61 72 20 2a 73 71 6c 69 74 65 33 5f 76 73 6e 70  ar *sqlite3_vsnp
7760: 72 69 6e 74 66 28 69 6e 74 20 6e 2c 20 63 68 61  rintf(int n, cha
7770: 72 20 2a 7a 42 75 66 2c 20 63 6f 6e 73 74 20 63  r *zBuf, const c
7780: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61  har *zFormat, va
7790: 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72  _list ap){.  Str
77a0: 41 63 63 75 6d 20 61 63 63 3b 0a 20 20 69 66 28  Accum acc;.  if(
77b0: 20 6e 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 7a   n<=0 ) return z
77c0: 42 75 66 3b 0a 20 20 73 71 6c 69 74 65 33 53 74  Buf;.  sqlite3St
77d0: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c  rAccumInit(&acc,
77e0: 20 7a 42 75 66 2c 20 6e 2c 20 30 29 3b 0a 20 20   zBuf, n, 0);.  
77f0: 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d 20  acc.useMalloc = 
7800: 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72  0;.  sqlite3VXPr
7810: 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46  intf(&acc, 0, zF
7820: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 72 65  ormat, ap);.  re
7830: 74 75 72 6e 20 73 71 6c 69 74 65 33 53 74 72 41  turn sqlite3StrA
7840: 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29  ccumFinish(&acc)
7850: 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  ;.}.char *sqlite
7860: 33 5f 73 6e 70 72 69 6e 74 66 28 69 6e 74 20 6e  3_snprintf(int n
7870: 2c 20 63 68 61 72 20 2a 7a 42 75 66 2c 20 63 6f  , char *zBuf, co
7880: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
7890: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 72 20  t, ...){.  char 
78a0: 2a 7a 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  *z;.  va_list ap
78b0: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
78c0: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20  zFormat);.  z = 
78d0: 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74  sqlite3_vsnprint
78e0: 66 28 6e 2c 20 7a 42 75 66 2c 20 7a 46 6f 72 6d  f(n, zBuf, zForm
78f0: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
7900: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
7910: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  z;.}../*.** This
7920: 20 69 73 20 74 68 65 20 72 6f 75 74 69 6e 65 20   is the routine 
7930: 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 66 6f  that actually fo
7940: 72 6d 61 74 73 20 74 68 65 20 73 71 6c 69 74 65  rmats the sqlite
7950: 33 5f 6c 6f 67 28 29 20 6d 65 73 73 61 67 65 2e  3_log() message.
7960: 0a 2a 2a 20 57 65 20 68 6f 75 73 65 20 69 74 20  .** We house it 
7970: 69 6e 20 61 20 73 65 70 61 72 61 74 65 20 72 6f  in a separate ro
7980: 75 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74  utine from sqlit
7990: 65 33 5f 6c 6f 67 28 29 20 74 6f 20 61 76 6f 69  e3_log() to avoi
79a0: 64 20 75 73 69 6e 67 0a 2a 2a 20 73 74 61 63 6b  d using.** stack
79b0: 20 73 70 61 63 65 20 6f 6e 20 73 6d 61 6c 6c 2d   space on small-
79c0: 73 74 61 63 6b 20 73 79 73 74 65 6d 73 20 77 68  stack systems wh
79d0: 65 6e 20 6c 6f 67 67 69 6e 67 20 69 73 20 64 69  en logging is di
79e0: 73 61 62 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 73 71  sabled..**.** sq
79f0: 6c 69 74 65 33 5f 6c 6f 67 28 29 20 6d 75 73 74  lite3_log() must
7a00: 20 72 65 6e 64 65 72 20 69 6e 74 6f 20 61 20 73   render into a s
7a10: 74 61 74 69 63 20 62 75 66 66 65 72 2e 20 20 49  tatic buffer.  I
7a20: 74 20 63 61 6e 6e 6f 74 20 64 79 6e 61 6d 69 63  t cannot dynamic
7a30: 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
7a40: 20 6d 65 6d 6f 72 79 20 62 65 63 61 75 73 65 20   memory because 
7a50: 69 74 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  it might be call
7a60: 65 64 20 77 68 69 6c 65 20 74 68 65 20 6d 65 6d  ed while the mem
7a70: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
7a80: 20 6d 75 74 65 78 20 69 73 20 68 65 6c 64 2e 0a   mutex is held..
7a90: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  */.static void r
7aa0: 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69 6e 74 20  enderLogMsg(int 
7ab0: 69 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20  iErrCode, const 
7ac0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76  char *zFormat, v
7ad0: 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74  a_list ap){.  St
7ae0: 72 41 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20  rAccum acc;     
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 61       /* String a
7b10: 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
7b20: 63 68 61 72 20 7a 4d 73 67 5b 53 51 4c 49 54 45  char zMsg[SQLITE
7b30: 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 2a  _PRINT_BUF_SIZE*
7b40: 33 5d 3b 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65  3];    /* Comple
7b50: 74 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 2a  te log message *
7b60: 2f 0a 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  /..  sqlite3StrA
7b70: 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a  ccumInit(&acc, z
7b80: 4d 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d 73 67  Msg, sizeof(zMsg
7b90: 29 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65  ), 0);.  acc.use
7ba0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 73 71  Malloc = 0;.  sq
7bb0: 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61  lite3VXPrintf(&a
7bc0: 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20  cc, 0, zFormat, 
7bd0: 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 47 6c  ap);.  sqlite3Gl
7be0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 28  obalConfig.xLog(
7bf0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
7c00: 66 69 67 2e 70 4c 6f 67 41 72 67 2c 20 69 45 72  fig.pLogArg, iEr
7c10: 72 43 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 20  rCode,.         
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
7c40: 6d 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0a  mFinish(&acc));.
7c50: 7d 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 6d 61 74 20  }../*.** Format 
7c60: 61 6e 64 20 77 72 69 74 65 20 61 20 6d 65 73 73  and write a mess
7c70: 61 67 65 20 74 6f 20 74 68 65 20 6c 6f 67 20 69  age to the log i
7c80: 66 20 6c 6f 67 67 69 6e 67 20 69 73 20 65 6e 61  f logging is ena
7c90: 62 6c 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  bled..*/.void sq
7ca0: 6c 69 74 65 33 5f 6c 6f 67 28 69 6e 74 20 69 45  lite3_log(int iE
7cb0: 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68  rrCode, const ch
7cc0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e  ar *zFormat, ...
7cd0: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  ){.  va_list ap;
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7d00: 56 61 72 61 72 67 20 6c 69 73 74 20 2a 2f 0a 20  Vararg list */. 
7d10: 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62   if( sqlite3Glob
7d20: 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 20 29 7b  alConfig.xLog ){
7d30: 0a 20 20 20 20 76 61 5f 73 74 61 72 74 28 61 70  .    va_start(ap
7d40: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20  , zFormat);.    
7d50: 72 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69 45 72  renderLogMsg(iEr
7d60: 72 43 6f 64 65 2c 20 7a 46 6f 72 6d 61 74 2c 20  rCode, zFormat, 
7d70: 61 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e 64 28  ap);.    va_end(
7d80: 61 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 20  ap);.  }.}..#if 
7d90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
7da0: 45 42 55 47 29 0a 2f 2a 0a 2a 2a 20 41 20 76 65  EBUG)./*.** A ve
7db0: 72 73 69 6f 6e 20 6f 66 20 70 72 69 6e 74 66 28  rsion of printf(
7dc0: 29 20 74 68 61 74 20 75 6e 64 65 72 73 74 61 6e  ) that understan
7dd0: 64 73 20 25 6c 6c 64 2e 20 20 55 73 65 64 20 66  ds %lld.  Used f
7de0: 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0a 2a 2a  or debugging..**
7df0: 20 54 68 65 20 70 72 69 6e 74 66 28 29 20 62 75   The printf() bu
7e00: 69 6c 74 20 69 6e 74 6f 20 73 6f 6d 65 20 76 65  ilt into some ve
7e10: 72 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64 6f 77  rsions of window
7e20: 73 20 64 6f 65 73 20 6e 6f 74 20 75 6e 64 65 72  s does not under
7e30: 73 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a 20 61 6e  stand %lld.** an
7e40: 64 20 73 65 67 66 61 75 6c 74 73 20 69 66 20 79  d segfaults if y
7e50: 6f 75 20 67 69 76 65 20 69 74 20 61 20 6c 6f 6e  ou give it a lon
7e60: 67 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a 2f 0a 76  g long int..*/.v
7e70: 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
7e80: 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
7e90: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
7ea0: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
7eb0: 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a    StrAccum acc;.
7ec0: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 30 5d    char zBuf[500]
7ed0: 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63  ;.  sqlite3StrAc
7ee0: 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a 42  cumInit(&acc, zB
7ef0: 75 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75 66 29  uf, sizeof(zBuf)
7f00: 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d  , 0);.  acc.useM
7f10: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 76 61 5f  alloc = 0;.  va_
7f20: 73 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74  start(ap,zFormat
7f30: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72  );.  sqlite3VXPr
7f40: 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46  intf(&acc, 0, zF
7f50: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61  ormat, ap);.  va
7f60: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c 69  _end(ap);.  sqli
7f70: 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
7f80: 68 28 26 61 63 63 29 3b 0a 20 20 66 70 72 69 6e  h(&acc);.  fprin
7f90: 74 66 28 73 74 64 6f 75 74 2c 22 25 73 22 2c 20  tf(stdout,"%s", 
7fa0: 7a 42 75 66 29 3b 0a 20 20 66 66 6c 75 73 68 28  zBuf);.  fflush(
7fb0: 73 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 6e 64 69  stdout);.}.#endi
7fc0: 66 0a 0a 2f 2a 0a 2a 2a 20 76 61 72 69 61 62 6c  f../*.** variabl
7fd0: 65 2d 61 72 67 75 6d 65 6e 74 20 77 72 61 70 70  e-argument wrapp
7fe0: 65 72 20 61 72 6f 75 6e 64 20 73 71 6c 69 74 65  er around sqlite
7ff0: 33 56 58 50 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a  3VXPrintf()..*/.
8000: 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
8010: 6e 74 66 28 53 74 72 41 63 63 75 6d 20 2a 70 2c  ntf(StrAccum *p,
8020: 20 75 33 32 20 62 46 6c 61 67 73 2c 20 63 6f 6e   u32 bFlags, con
8030: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
8040: 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73  , ...){.  va_lis
8050: 74 20 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74  t ap;.  va_start
8060: 28 61 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  (ap,zFormat);.  
8070: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
8080: 70 2c 20 62 46 6c 61 67 73 2c 20 7a 46 6f 72 6d  p, bFlags, zForm
8090: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
80a0: 64 28 61 70 29 3b 0a 7d 0a                       d(ap);.}.