0000: 2f 2a 0a 2a 2a 20 54 68 65 20 22 70 72 69 6e 74 /*.** The "print
0010: 66 22 20 63 6f 64 65 20 74 68 61 74 20 66 6f 6c f" code that fol
0020: 6c 6f 77 73 20 64 61 74 65 73 20 66 72 6f 6d 20 lows dates from
0030: 74 68 65 20 31 39 38 30 27 73 2e 20 20 49 74 20 the 1980's. It
0040: 69 73 20 69 6e 0a 2a 2a 20 74 68 65 20 70 75 62 is in.** the pub
0050: 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 0a 2a 2a 0a lic domain. .**.
0060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
00a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a **********.**.**
00b0: 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e 74 61 This file conta
00c0: 69 6e 73 20 63 6f 64 65 20 66 6f 72 20 61 20 73 ins code for a s
00d0: 65 74 20 6f 66 20 22 70 72 69 6e 74 66 22 2d 6c et of "printf"-l
00e0: 69 6b 65 20 72 6f 75 74 69 6e 65 73 2e 20 20 54 ike routines. T
00f0: 68 65 73 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 hese.** routines
0100: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 73 20 format strings
0110: 6d 75 63 68 20 6c 69 6b 65 20 74 68 65 20 70 72 much like the pr
0120: 69 6e 74 66 28 29 20 66 72 6f 6d 20 74 68 65 20 intf() from the
0130: 73 74 61 6e 64 61 72 64 20 43 0a 2a 2a 20 6c 69 standard C.** li
0140: 62 72 61 72 79 2c 20 74 68 6f 75 67 68 20 74 68 brary, though th
0150: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e e implementation
0160: 20 68 65 72 65 20 68 61 73 20 65 6e 68 61 6e 63 here has enhanc
0170: 65 6d 65 6e 74 73 20 74 6f 20 73 75 70 70 6f 72 ements to suppor
0180: 74 0a 2a 2a 20 53 51 4c 6c 69 74 65 2e 0a 2a 2f t.** SQLlite..*/
0190: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 .#include "sqlit
01a0: 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 43 eInt.h"../*.** C
01b0: 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 onversion types
01c0: 66 61 6c 6c 20 69 6e 74 6f 20 76 61 72 69 6f 75 fall into variou
01d0: 73 20 63 61 74 65 67 6f 72 69 65 73 20 61 73 20 s categories as
01e0: 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 0a 2a defined by the.*
01f0: 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 75 6d * following enum
0200: 65 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 eration..*/.#def
0210: 69 6e 65 20 65 74 52 41 44 49 58 20 20 20 20 20 ine etRADIX
0220: 20 20 31 20 2f 2a 20 49 6e 74 65 67 65 72 20 74 1 /* Integer t
0230: 79 70 65 73 2e 20 20 25 64 2c 20 25 78 2c 20 25 ypes. %d, %x, %
0240: 6f 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 o, and so forth
0250: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 46 4c 4f */.#define etFLO
0260: 41 54 20 20 20 20 20 20 20 32 20 2f 2a 20 46 6c AT 2 /* Fl
0270: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 2e 20 20 25 oating point. %
0280: 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 f */.#define etE
0290: 58 50 20 20 20 20 20 20 20 20 20 33 20 2f 2a 20 XP 3 /*
02a0: 45 78 70 6f 6e 65 6e 74 69 6f 6e 61 6c 20 6e 6f Exponentional no
02b0: 74 61 74 69 6f 6e 2e 20 25 65 20 61 6e 64 20 25 tation. %e and %
02c0: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 47 E */.#define etG
02d0: 45 4e 45 52 49 43 20 20 20 20 20 34 20 2f 2a 20 ENERIC 4 /*
02e0: 46 6c 6f 61 74 69 6e 67 20 6f 72 20 65 78 70 6f Floating or expo
02f0: 6e 65 6e 74 69 61 6c 2c 20 64 65 70 65 6e 64 69 nential, dependi
0300: 6e 67 20 6f 6e 20 65 78 70 6f 6e 65 6e 74 2e 20 ng on exponent.
0310: 25 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 %g */.#define et
0320: 53 49 5a 45 20 20 20 20 20 20 20 20 35 20 2f 2a SIZE 5 /*
0330: 20 52 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f Return number o
0340: 66 20 63 68 61 72 61 63 74 65 72 73 20 70 72 6f f characters pro
0350: 63 65 73 73 65 64 20 73 6f 20 66 61 72 2e 20 25 cessed so far. %
0360: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 n */.#define etS
0370: 54 52 49 4e 47 20 20 20 20 20 20 36 20 2f 2a 20 TRING 6 /*
0380: 53 74 72 69 6e 67 73 2e 20 25 73 20 2a 2f 0a 23 Strings. %s */.#
0390: 64 65 66 69 6e 65 20 65 74 44 59 4e 53 54 52 49 define etDYNSTRI
03a0: 4e 47 20 20 20 37 20 2f 2a 20 44 79 6e 61 6d 69 NG 7 /* Dynami
03b0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 cally allocated
03c0: 73 74 72 69 6e 67 73 2e 20 25 7a 20 2a 2f 0a 23 strings. %z */.#
03d0: 64 65 66 69 6e 65 20 65 74 50 45 52 43 45 4e 54 define etPERCENT
03e0: 20 20 20 20 20 38 20 2f 2a 20 50 65 72 63 65 6e 8 /* Percen
03f0: 74 20 73 79 6d 62 6f 6c 2e 20 25 25 20 2a 2f 0a t symbol. %% */.
0400: 23 64 65 66 69 6e 65 20 65 74 43 48 41 52 58 20 #define etCHARX
0410: 20 20 20 20 20 20 39 20 2f 2a 20 43 68 61 72 61 9 /* Chara
0420: 63 74 65 72 73 2e 20 25 63 20 2a 2f 0a 2f 2a 20 cters. %c */./*
0430: 54 68 65 20 72 65 73 74 20 61 72 65 20 65 78 74 The rest are ext
0440: 65 6e 73 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 ensions, not nor
0450: 6d 61 6c 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 mally found in p
0460: 72 69 6e 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 rintf() */.#defi
0470: 6e 65 20 65 74 53 51 4c 45 53 43 41 50 45 20 20 ne etSQLESCAPE
0480: 31 30 20 2f 2a 20 53 74 72 69 6e 67 73 20 77 69 10 /* Strings wi
0490: 74 68 20 27 5c 27 27 20 64 6f 75 62 6c 65 64 2e th '\'' doubled.
04a0: 20 20 25 71 20 2a 2f 0a 23 64 65 66 69 6e 65 20 %q */.#define
04b0: 65 74 53 51 4c 45 53 43 41 50 45 32 20 31 31 20 etSQLESCAPE2 11
04c0: 2f 2a 20 53 74 72 69 6e 67 73 20 77 69 74 68 20 /* Strings with
04d0: 27 5c 27 27 20 64 6f 75 62 6c 65 64 20 61 6e 64 '\'' doubled and
04e0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 27 27 2c enclosed in '',
04f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0500: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 NULL
0510: 70 6f 69 6e 74 65 72 73 20 72 65 70 6c 61 63 65 pointers replace
0520: 64 20 62 79 20 53 51 4c 20 4e 55 4c 4c 2e 20 20 d by SQL NULL.
0530: 25 51 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 %Q */.#define et
0540: 54 4f 4b 45 4e 20 20 20 20 20 20 31 32 20 2f 2a TOKEN 12 /*
0550: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 a pointer to a
0560: 54 6f 6b 65 6e 20 73 74 72 75 63 74 75 72 65 20 Token structure
0570: 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 52 43 */.#define etSRC
0580: 4c 49 53 54 20 20 20 20 31 33 20 2f 2a 20 61 20 LIST 13 /* a
0590: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 53 72 63 pointer to a Src
05a0: 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 List */.#define
05b0: 65 74 50 4f 49 4e 54 45 52 20 20 20 20 31 34 20 etPOINTER 14
05c0: 2f 2a 20 54 68 65 20 25 70 20 63 6f 6e 76 65 72 /* The %p conver
05d0: 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 sion */.#define
05e0: 65 74 53 51 4c 45 53 43 41 50 45 33 20 31 35 20 etSQLESCAPE3 15
05f0: 2f 2a 20 25 77 20 2d 3e 20 53 74 72 69 6e 67 73 /* %w -> Strings
0600: 20 77 69 74 68 20 27 5c 22 27 20 64 6f 75 62 6c with '\"' doubl
0610: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 ed */.#define et
0620: 4f 52 44 49 4e 41 4c 20 20 20 20 31 36 20 2f 2a ORDINAL 16 /*
0630: 20 25 72 20 2d 3e 20 31 73 74 2c 20 32 6e 64 2c %r -> 1st, 2nd,
0640: 20 33 72 64 2c 20 34 74 68 2c 20 65 74 63 2e 20 3rd, 4th, etc.
0650: 20 45 6e 67 6c 69 73 68 20 6f 6e 6c 79 20 2a 2f English only */
0660: 0a 0a 23 64 65 66 69 6e 65 20 65 74 49 4e 56 41 ..#define etINVA
0670: 4c 49 44 20 20 20 20 20 30 20 2f 2a 20 41 6e 79 LID 0 /* Any
0680: 20 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 63 6f unrecognized co
0690: 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 20 2a 2f nversion type */
06a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 22 65 74 42 .../*.** An "etB
06b0: 79 74 65 22 20 69 73 20 61 6e 20 38 2d 62 69 74 yte" is an 8-bit
06c0: 20 75 6e 73 69 67 6e 65 64 20 76 61 6c 75 65 2e unsigned value.
06d0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 6e 73 69 .*/.typedef unsi
06e0: 67 6e 65 64 20 63 68 61 72 20 65 74 42 79 74 65 gned char etByte
06f0: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 62 75 ;../*.** Each bu
0700: 69 6c 74 69 6e 20 63 6f 6e 76 65 72 73 69 6f 6e iltin conversion
0710: 20 63 68 61 72 61 63 74 65 72 20 28 65 78 3a 20 character (ex:
0720: 74 68 65 20 27 64 27 20 69 6e 20 22 25 64 22 29 the 'd' in "%d")
0730: 20 69 73 20 64 65 73 63 72 69 62 65 64 0a 2a 2a is described.**
0740: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 by an instance
0750: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 of the following
0760: 20 73 74 72 75 63 74 75 72 65 0a 2a 2f 0a 74 79 structure.*/.ty
0770: 70 65 64 65 66 20 73 74 72 75 63 74 20 65 74 5f pedef struct et_
0780: 69 6e 66 6f 20 7b 20 20 20 2f 2a 20 49 6e 66 6f info { /* Info
0790: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 rmation about ea
07a0: 63 68 20 66 6f 72 6d 61 74 20 66 69 65 6c 64 20 ch format field
07b0: 2a 2f 0a 20 20 63 68 61 72 20 66 6d 74 74 79 70 */. char fmttyp
07c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a e; /*
07d0: 20 54 68 65 20 66 6f 72 6d 61 74 20 66 69 65 6c The format fiel
07e0: 64 20 63 6f 64 65 20 6c 65 74 74 65 72 20 2a 2f d code letter */
07f0: 0a 20 20 65 74 42 79 74 65 20 62 61 73 65 3b 20 . etByte base;
0800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 /* T
0810: 68 65 20 62 61 73 65 20 66 6f 72 20 72 61 64 69 he base for radi
0820: 78 20 63 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a x conversion */.
0830: 20 20 65 74 42 79 74 65 20 66 6c 61 67 73 3b 20 etByte flags;
0840: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e /* On
0850: 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 46 4c 41 e or more of FLA
0860: 47 5f 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c G_ constants bel
0870: 6f 77 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 74 ow */. etByte t
0880: 79 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 ype;
0890: 20 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 /* Conversion p
08a0: 61 72 61 64 69 67 6d 20 2a 2f 0a 20 20 65 74 42 aradigm */. etB
08b0: 79 74 65 20 63 68 61 72 73 65 74 3b 20 20 20 20 yte charset;
08c0: 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 /* Offset
08d0: 69 6e 74 6f 20 61 44 69 67 69 74 73 5b 5d 20 6f into aDigits[] o
08e0: 66 20 74 68 65 20 64 69 67 69 74 73 20 73 74 72 f the digits str
08f0: 69 6e 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 ing */. etByte
0900: 70 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 prefix;
0910: 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f /* Offset into
0920: 20 61 50 72 65 66 69 78 5b 5d 20 6f 66 20 74 68 aPrefix[] of th
0930: 65 20 70 72 65 66 69 78 20 73 74 72 69 6e 67 20 e prefix string
0940: 2a 2f 0a 7d 20 65 74 5f 69 6e 66 6f 3b 0a 0a 2f */.} et_info;../
0950: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c *.** Allowed val
0960: 75 65 73 20 66 6f 72 20 65 74 5f 69 6e 66 6f 2e ues for et_info.
0970: 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 flags.*/.#define
0980: 20 46 4c 41 47 5f 53 49 47 4e 45 44 20 20 31 20 FLAG_SIGNED 1
0990: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 /* True if t
09a0: 68 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 he value to conv
09b0: 65 72 74 20 69 73 20 73 69 67 6e 65 64 20 2a 2f ert is signed */
09c0: 0a 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 49 4e .#define FLAG_IN
09d0: 54 45 52 4e 20 20 32 20 20 20 20 20 2f 2a 20 54 TERN 2 /* T
09e0: 72 75 65 20 69 66 20 66 6f 72 20 69 6e 74 65 72 rue if for inter
09f0: 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a nal use only */.
0a00: 23 64 65 66 69 6e 65 20 46 4c 41 47 5f 53 54 52 #define FLAG_STR
0a10: 49 4e 47 20 20 34 20 20 20 20 20 2f 2a 20 41 6c ING 4 /* Al
0a20: 6c 6f 77 20 69 6e 66 69 6e 69 74 79 20 70 72 65 low infinity pre
0a30: 63 69 73 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a cision */.../*.*
0a40: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 * The following
0a50: 74 61 62 6c 65 20 69 73 20 73 65 61 72 63 68 65 table is searche
0a60: 64 20 6c 69 6e 65 61 72 6c 79 2c 20 73 6f 20 69 d linearly, so i
0a70: 74 20 69 73 20 67 6f 6f 64 20 74 6f 20 70 75 74 t is good to put
0a80: 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 66 72 65 the.** most fre
0a90: 71 75 65 6e 74 6c 79 20 75 73 65 64 20 63 6f 6e quently used con
0aa0: 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66 69 version types fi
0ab0: 72 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 rst..*/.static c
0ac0: 6f 6e 73 74 20 63 68 61 72 20 61 44 69 67 69 74 onst char aDigit
0ad0: 73 5b 5d 20 3d 20 22 30 31 32 33 34 35 36 37 38 s[] = "012345678
0ae0: 39 41 42 43 44 45 46 30 31 32 33 34 35 36 37 38 9ABCDEF012345678
0af0: 39 61 62 63 64 65 66 22 3b 0a 73 74 61 74 69 63 9abcdef";.static
0b00: 20 63 6f 6e 73 74 20 63 68 61 72 20 61 50 72 65 const char aPre
0b10: 66 69 78 5b 5d 20 3d 20 22 2d 78 30 5c 30 30 30 fix[] = "-x0\000
0b20: 58 30 22 3b 0a 73 74 61 74 69 63 20 63 6f 6e 73 X0";.static cons
0b30: 74 20 65 74 5f 69 6e 66 6f 20 66 6d 74 69 6e 66 t et_info fmtinf
0b40: 6f 5b 5d 20 3d 20 7b 0a 20 20 7b 20 20 27 64 27 o[] = {. { 'd'
0b50: 2c 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 , 10, 1, etRADIX
0b60: 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a , 0, 0 },.
0b70: 20 20 7b 20 20 27 73 27 2c 20 20 30 2c 20 34 2c { 's', 0, 4,
0b80: 20 65 74 53 54 52 49 4e 47 2c 20 20 20 20 20 30 etSTRING, 0
0b90: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 67 27 , 0 },. { 'g'
0ba0: 2c 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 , 0, 1, etGENER
0bb0: 49 43 2c 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a IC, 30, 0 },.
0bc0: 20 20 7b 20 20 27 7a 27 2c 20 20 30 2c 20 34 2c { 'z', 0, 4,
0bd0: 20 65 74 44 59 4e 53 54 52 49 4e 47 2c 20 20 30 etDYNSTRING, 0
0be0: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 71 27 , 0 },. { 'q'
0bf0: 2c 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 , 0, 4, etSQLES
0c00: 43 41 50 45 2c 20 20 30 2c 20 20 30 20 7d 2c 0a CAPE, 0, 0 },.
0c10: 20 20 7b 20 20 27 51 27 2c 20 20 30 2c 20 34 2c { 'Q', 0, 4,
0c20: 20 65 74 53 51 4c 45 53 43 41 50 45 32 2c 20 30 etSQLESCAPE2, 0
0c30: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 77 27 , 0 },. { 'w'
0c40: 2c 20 20 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 , 0, 4, etSQLES
0c50: 43 41 50 45 33 2c 20 30 2c 20 20 30 20 7d 2c 0a CAPE3, 0, 0 },.
0c60: 20 20 7b 20 20 27 63 27 2c 20 20 30 2c 20 30 2c { 'c', 0, 0,
0c70: 20 65 74 43 48 41 52 58 2c 20 20 20 20 20 20 30 etCHARX, 0
0c80: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 6f 27 , 0 },. { 'o'
0c90: 2c 20 20 38 2c 20 30 2c 20 65 74 52 41 44 49 58 , 8, 0, etRADIX
0ca0: 2c 20 20 20 20 20 20 30 2c 20 20 32 20 7d 2c 0a , 0, 2 },.
0cb0: 20 20 7b 20 20 27 75 27 2c 20 31 30 2c 20 30 2c { 'u', 10, 0,
0cc0: 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 etRADIX, 0
0cd0: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 78 27 , 0 },. { 'x'
0ce0: 2c 20 31 36 2c 20 30 2c 20 65 74 52 41 44 49 58 , 16, 0, etRADIX
0cf0: 2c 20 20 20 20 20 20 31 36 2c 20 31 20 7d 2c 0a , 16, 1 },.
0d00: 20 20 7b 20 20 27 58 27 2c 20 31 36 2c 20 30 2c { 'X', 16, 0,
0d10: 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 20 30 etRADIX, 0
0d20: 2c 20 20 34 20 7d 2c 0a 23 69 66 6e 64 65 66 20 , 4 },.#ifndef
0d30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 SQLITE_OMIT_FLOA
0d40: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7b 20 20 TING_POINT. {
0d50: 27 66 27 2c 20 20 30 2c 20 31 2c 20 65 74 46 4c 'f', 0, 1, etFL
0d60: 4f 41 54 2c 20 20 20 20 20 20 30 2c 20 20 30 20 OAT, 0, 0
0d70: 7d 2c 0a 20 20 7b 20 20 27 65 27 2c 20 20 30 2c },. { 'e', 0,
0d80: 20 31 2c 20 65 74 45 58 50 2c 20 20 20 20 20 20 1, etEXP,
0d90: 20 20 33 30 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 30, 0 },. {
0da0: 27 45 27 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 'E', 0, 1, etEX
0db0: 50 2c 20 20 20 20 20 20 20 20 31 34 2c 20 30 20 P, 14, 0
0dc0: 7d 2c 0a 20 20 7b 20 20 27 47 27 2c 20 20 30 2c },. { 'G', 0,
0dd0: 20 31 2c 20 65 74 47 45 4e 45 52 49 43 2c 20 20 1, etGENERIC,
0de0: 20 20 31 34 2c 20 30 20 7d 2c 0a 23 65 6e 64 69 14, 0 },.#endi
0df0: 66 0a 20 20 7b 20 20 27 69 27 2c 20 31 30 2c 20 f. { 'i', 10,
0e00: 31 2c 20 65 74 52 41 44 49 58 2c 20 20 20 20 20 1, etRADIX,
0e10: 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 0, 0 },. { '
0e20: 6e 27 2c 20 20 30 2c 20 30 2c 20 65 74 53 49 5a n', 0, 0, etSIZ
0e30: 45 2c 20 20 20 20 20 20 20 30 2c 20 20 30 20 7d E, 0, 0 }
0e40: 2c 0a 20 20 7b 20 20 27 25 27 2c 20 20 30 2c 20 ,. { '%', 0,
0e50: 30 2c 20 65 74 50 45 52 43 45 4e 54 2c 20 20 20 0, etPERCENT,
0e60: 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 0, 0 },. { '
0e70: 70 27 2c 20 31 36 2c 20 30 2c 20 65 74 50 4f 49 p', 16, 0, etPOI
0e80: 4e 54 45 52 2c 20 20 20 20 30 2c 20 20 31 20 7d NTER, 0, 1 }
0e90: 2c 0a 0a 2f 2a 20 41 6c 6c 20 74 68 65 20 72 65 ,../* All the re
0ea0: 73 74 20 68 61 76 65 20 74 68 65 20 46 4c 41 47 st have the FLAG
0eb0: 5f 49 4e 54 45 52 4e 20 62 69 74 20 73 65 74 20 _INTERN bit set
0ec0: 61 6e 64 20 61 72 65 20 74 68 75 73 20 66 6f 72 and are thus for
0ed0: 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 75 73 65 internal.** use
0ee0: 20 6f 6e 6c 79 20 2a 2f 0a 20 20 7b 20 20 27 54 only */. { 'T
0ef0: 27 2c 20 20 30 2c 20 32 2c 20 65 74 54 4f 4b 45 ', 0, 2, etTOKE
0f00: 4e 2c 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c N, 0, 0 },
0f10: 0a 20 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 32 . { 'S', 0, 2
0f20: 2c 20 65 74 53 52 43 4c 49 53 54 2c 20 20 20 20 , etSRCLIST,
0f30: 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 72 0, 0 },. { 'r
0f40: 27 2c 20 31 30 2c 20 33 2c 20 65 74 4f 52 44 49 ', 10, 3, etORDI
0f50: 4e 41 4c 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c NAL, 0, 0 },
0f60: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 .};../*.** If SQ
0f70: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 LITE_OMIT_FLOATI
0f80: 4e 47 5f 50 4f 49 4e 54 20 69 73 20 64 65 66 69 NG_POINT is defi
0f90: 6e 65 64 2c 20 74 68 65 6e 20 6e 6f 6e 65 20 6f ned, then none o
0fa0: 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 20 70 f the floating p
0fb0: 6f 69 6e 74 0a 2a 2a 20 63 6f 6e 76 65 72 73 69 oint.** conversi
0fc0: 6f 6e 73 20 77 69 6c 6c 20 77 6f 72 6b 2e 0a 2a ons will work..*
0fd0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 /.#ifndef SQLITE
0fe0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 _OMIT_FLOATING_P
0ff0: 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 2a 76 61 6c OINT./*.** "*val
1000: 22 20 69 73 20 61 20 64 6f 75 62 6c 65 20 73 75 " is a double su
1010: 63 68 20 74 68 61 74 20 30 2e 31 20 3c 3d 20 2a ch that 0.1 <= *
1020: 76 61 6c 20 3c 20 31 30 2e 30 0a 2a 2a 20 52 65 val < 10.0.** Re
1030: 74 75 72 6e 20 74 68 65 20 61 73 63 69 69 20 63 turn the ascii c
1040: 6f 64 65 20 66 6f 72 20 74 68 65 20 6c 65 61 64 ode for the lead
1050: 69 6e 67 20 64 69 67 69 74 20 6f 66 20 2a 76 61 ing digit of *va
1060: 6c 2c 20 74 68 65 6e 0a 2a 2a 20 6d 75 6c 74 69 l, then.** multi
1070: 70 6c 79 20 22 2a 76 61 6c 22 20 62 79 20 31 30 ply "*val" by 10
1080: 2e 30 20 74 6f 20 72 65 6e 6f 72 6d 61 6c 69 7a .0 to renormaliz
1090: 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 e..**.** Example
10a0: 3a 0a 2a 2a 20 20 20 20 20 69 6e 70 75 74 3a 20 :.** input:
10b0: 20 20 20 20 2a 76 61 6c 20 3d 20 33 2e 31 34 31 *val = 3.141
10c0: 35 39 0a 2a 2a 20 20 20 20 20 6f 75 74 70 75 74 59.** output
10d0: 3a 20 20 20 20 2a 76 61 6c 20 3d 20 31 2e 34 31 : *val = 1.41
10e0: 35 39 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 59 function r
10f0: 65 74 75 72 6e 20 3d 20 27 33 27 0a 2a 2a 0a 2a eturn = '3'.**.*
1100: 2a 20 54 68 65 20 63 6f 75 6e 74 65 72 20 2a 63 * The counter *c
1110: 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 nt is incremente
1120: 64 20 65 61 63 68 20 74 69 6d 65 2e 20 20 41 66 d each time. Af
1130: 74 65 72 20 63 6f 75 6e 74 65 72 20 65 78 63 65 ter counter exce
1140: 65 64 73 0a 2a 2a 20 31 36 20 28 74 68 65 20 6e eds.** 16 (the n
1150: 75 6d 62 65 72 20 6f 66 20 73 69 67 6e 69 66 69 umber of signifi
1160: 63 61 6e 74 20 64 69 67 69 74 73 20 69 6e 20 61 cant digits in a
1170: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 29 20 27 64-bit float) '
1180: 30 27 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 0' is.** always
1190: 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 returned..*/.sta
11a0: 74 69 63 20 63 68 61 72 20 65 74 5f 67 65 74 64 tic char et_getd
11b0: 69 67 69 74 28 4c 4f 4e 47 44 4f 55 42 4c 45 5f igit(LONGDOUBLE_
11c0: 54 59 50 45 20 2a 76 61 6c 2c 20 69 6e 74 20 2a TYPE *val, int *
11d0: 63 6e 74 29 7b 0a 20 20 69 6e 74 20 64 69 67 69 cnt){. int digi
11e0: 74 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f t;. LONGDOUBLE_
11f0: 54 59 50 45 20 64 3b 0a 20 20 69 66 28 20 28 2a TYPE d;. if( (*
1200: 63 6e 74 29 3c 3d 30 20 29 20 72 65 74 75 72 6e cnt)<=0 ) return
1210: 20 27 30 27 3b 0a 20 20 28 2a 63 6e 74 29 2d 2d '0';. (*cnt)--
1220: 3b 0a 20 20 64 69 67 69 74 20 3d 20 28 69 6e 74 ;. digit = (int
1230: 29 2a 76 61 6c 3b 0a 20 20 64 20 3d 20 64 69 67 )*val;. d = dig
1240: 69 74 3b 0a 20 20 64 69 67 69 74 20 2b 3d 20 27 it;. digit += '
1250: 30 27 3b 0a 20 20 2a 76 61 6c 20 3d 20 28 2a 76 0';. *val = (*v
1260: 61 6c 20 2d 20 64 29 2a 31 30 2e 30 3b 0a 20 20 al - d)*10.0;.
1270: 72 65 74 75 72 6e 20 28 63 68 61 72 29 64 69 67 return (char)dig
1280: 69 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 it;.}.#endif /*
1290: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 SQLITE_OMIT_FLOA
12a0: 54 49 4e 47 5f 50 4f 49 4e 54 20 2a 2f 0a 0a 2f TING_POINT */../
12b0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 74 72 *.** Set the Str
12c0: 41 63 63 75 6d 20 6f 62 6a 65 63 74 20 74 6f 20 Accum object to
12d0: 61 6e 20 65 72 72 6f 72 20 6d 6f 64 65 2e 0a 2a an error mode..*
12e0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 /.static void se
12f0: 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 53 tStrAccumError(S
1300: 74 72 41 63 63 75 6d 20 2a 70 2c 20 75 38 20 65 trAccum *p, u8 e
1310: 45 72 72 6f 72 29 7b 0a 20 20 61 73 73 65 72 74 Error){. assert
1320: 28 20 65 45 72 72 6f 72 3d 3d 53 54 52 41 43 43 ( eError==STRACC
1330: 55 4d 5f 4e 4f 4d 45 4d 20 7c 7c 20 65 45 72 72 UM_NOMEM || eErr
1340: 6f 72 3d 3d 53 54 52 41 43 43 55 4d 5f 54 4f 4f or==STRACCUM_TOO
1350: 42 49 47 20 29 3b 0a 20 20 70 2d 3e 61 63 63 45 BIG );. p->accE
1360: 72 72 6f 72 20 3d 20 65 45 72 72 6f 72 3b 0a 20 rror = eError;.
1370: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 30 3b 0a p->nAlloc = 0;.
1380: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 20 61 }../*.** Extra a
1390: 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 66 rgument values f
13a0: 72 6f 6d 20 61 20 50 72 69 6e 74 66 41 72 67 75 rom a PrintfArgu
13b0: 6d 65 6e 74 73 20 6f 62 6a 65 63 74 0a 2a 2f 0a ments object.*/.
13c0: 73 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f 69 static sqlite3_i
13d0: 6e 74 36 34 20 67 65 74 49 6e 74 41 72 67 28 50 nt64 getIntArg(P
13e0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 2a rintfArguments *
13f0: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 41 72 p){. if( p->nAr
1400: 67 3c 3d 70 2d 3e 6e 55 73 65 64 20 29 20 72 65 g<=p->nUsed ) re
1410: 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e turn 0;. return
1420: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 sqlite3_value_i
1430: 6e 74 36 34 28 70 2d 3e 61 70 41 72 67 5b 70 2d nt64(p->apArg[p-
1440: 3e 6e 55 73 65 64 2b 2b 5d 29 3b 0a 7d 0a 73 74 >nUsed++]);.}.st
1450: 61 74 69 63 20 64 6f 75 62 6c 65 20 67 65 74 44 atic double getD
1460: 6f 75 62 6c 65 41 72 67 28 50 72 69 6e 74 66 41 oubleArg(PrintfA
1470: 72 67 75 6d 65 6e 74 73 20 2a 70 29 7b 0a 20 20 rguments *p){.
1480: 69 66 28 20 70 2d 3e 6e 41 72 67 3c 3d 70 2d 3e if( p->nArg<=p->
1490: 6e 55 73 65 64 20 29 20 72 65 74 75 72 6e 20 30 nUsed ) return 0
14a0: 2e 30 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c .0;. return sql
14b0: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c ite3_value_doubl
14c0: 65 28 70 2d 3e 61 70 41 72 67 5b 70 2d 3e 6e 55 e(p->apArg[p->nU
14d0: 73 65 64 2b 2b 5d 29 3b 0a 7d 0a 73 74 61 74 69 sed++]);.}.stati
14e0: 63 20 63 68 61 72 20 2a 67 65 74 54 65 78 74 41 c char *getTextA
14f0: 72 67 28 50 72 69 6e 74 66 41 72 67 75 6d 65 6e rg(PrintfArgumen
1500: 74 73 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d ts *p){. if( p-
1510: 3e 6e 41 72 67 3c 3d 70 2d 3e 6e 55 73 65 64 20 >nArg<=p->nUsed
1520: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 ) return 0;. re
1530: 74 75 72 6e 20 28 63 68 61 72 2a 29 73 71 6c 69 turn (char*)sqli
1540: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 te3_value_text(p
1550: 2d 3e 61 70 41 72 67 5b 70 2d 3e 6e 55 73 65 64 ->apArg[p->nUsed
1560: 2b 2b 5d 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 ++]);.}.../*.**
1570: 4f 6e 20 6d 61 63 68 69 6e 65 73 20 77 69 74 68 On machines with
1580: 20 61 20 73 6d 61 6c 6c 20 73 74 61 63 6b 20 73 a small stack s
1590: 69 7a 65 2c 20 79 6f 75 20 63 61 6e 20 72 65 64 ize, you can red
15a0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 53 51 4c efine the.** SQL
15b0: 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 ITE_PRINT_BUF_SI
15c0: 5a 45 20 74 6f 20 62 65 20 73 6f 6d 65 74 68 69 ZE to be somethi
15d0: 6e 67 20 73 6d 61 6c 6c 65 72 2c 20 69 66 20 64 ng smaller, if d
15e0: 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 esired..*/.#ifnd
15f0: 65 66 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f ef SQLITE_PRINT_
1600: 42 55 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e BUF_SIZE.# defin
1610: 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 e SQLITE_PRINT_B
1620: 55 46 5f 53 49 5a 45 20 37 30 0a 23 65 6e 64 69 UF_SIZE 70.#endi
1630: 66 0a 23 64 65 66 69 6e 65 20 65 74 42 55 46 53 f.#define etBUFS
1640: 49 5a 45 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 IZE SQLITE_PRINT
1650: 5f 42 55 46 5f 53 49 5a 45 20 20 2f 2a 20 53 69 _BUF_SIZE /* Si
1660: 7a 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 ze of the output
1670: 20 62 75 66 66 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a buffer */../*.*
1680: 2a 20 52 65 6e 64 65 72 20 61 20 73 74 72 69 6e * Render a strin
1690: 67 20 67 69 76 65 6e 20 62 79 20 22 66 6d 74 22 g given by "fmt"
16a0: 20 69 6e 74 6f 20 74 68 65 20 53 74 72 41 63 63 into the StrAcc
16b0: 75 6d 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 76 6f um object..*/.vo
16c0: 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e id sqlite3VXPrin
16d0: 74 66 28 0a 20 20 53 74 72 41 63 63 75 6d 20 2a tf(. StrAccum *
16e0: 70 41 63 63 75 6d 2c 20 20 20 20 20 20 20 20 20 pAccum,
16f0: 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 20 72 /* Accumulate r
1700: 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 esults here */.
1710: 20 75 33 32 20 62 46 6c 61 67 73 2c 20 20 20 20 u32 bFlags,
1720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 /* S
1730: 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 2a 20 66 QLITE_PRINTF_* f
1740: 6c 61 67 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 lags */. const
1750: 63 68 61 72 20 2a 66 6d 74 2c 20 20 20 20 20 20 char *fmt,
1760: 20 20 20 20 20 2f 2a 20 46 6f 72 6d 61 74 20 73 /* Format s
1770: 74 72 69 6e 67 20 2a 2f 0a 20 20 76 61 5f 6c 69 tring */. va_li
1780: 73 74 20 61 70 20 20 20 20 20 20 20 20 20 20 20 st ap
1790: 20 20 20 20 20 20 2f 2a 20 61 72 67 75 6d 65 6e /* argumen
17a0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 63 ts */.){. int c
17b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ;
17c0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 63 68 /* Next ch
17d0: 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 20 66 aracter in the f
17e0: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f 0a ormat string */.
17f0: 20 20 63 68 61 72 20 2a 62 75 66 70 74 3b 20 20 char *bufpt;
1800: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
1810: 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 63 Pointer to the c
1820: 6f 6e 76 65 72 73 69 6f 6e 20 62 75 66 66 65 72 onversion buffer
1830: 20 2a 2f 0a 20 20 69 6e 74 20 70 72 65 63 69 73 */. int precis
1840: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 ion;
1850: 20 2f 2a 20 50 72 65 63 69 73 69 6f 6e 20 6f 66 /* Precision of
1860: 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 65 the current fie
1870: 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 67 ld */. int leng
1880: 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 th;
1890: 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 /* Length of
18a0: 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 the field */. i
18b0: 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 nt idx;
18c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 67 /* A g
18d0: 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20 6c eneral purpose l
18e0: 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 oop counter */.
18f0: 20 69 6e 74 20 77 69 64 74 68 3b 20 20 20 20 20 int width;
1900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 /* W
1910: 69 64 74 68 20 6f 66 20 74 68 65 20 63 75 72 72 idth of the curr
1920: 65 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 65 ent field */. e
1930: 74 42 79 74 65 20 66 6c 61 67 5f 6c 65 66 74 6a tByte flag_leftj
1940: 75 73 74 69 66 79 3b 20 20 20 2f 2a 20 54 72 75 ustify; /* Tru
1950: 65 20 69 66 20 22 2d 22 20 66 6c 61 67 20 69 73 e if "-" flag is
1960: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 present */. et
1970: 42 79 74 65 20 66 6c 61 67 5f 70 6c 75 73 73 69 Byte flag_plussi
1980: 67 6e 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 gn; /* True
1990: 20 69 66 20 22 2b 22 20 66 6c 61 67 20 69 73 20 if "+" flag is
19a0: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 present */. etB
19b0: 79 74 65 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 yte flag_blanksi
19c0: 67 6e 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 gn; /* True
19d0: 69 66 20 22 20 22 20 66 6c 61 67 20 69 73 20 70 if " " flag is p
19e0: 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 resent */. etBy
19f0: 74 65 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 te flag_alternat
1a00: 65 66 6f 72 6d 3b 20 2f 2a 20 54 72 75 65 20 69 eform; /* True i
1a10: 66 20 22 23 22 20 66 6c 61 67 20 69 73 20 70 72 f "#" flag is pr
1a20: 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 esent */. etByt
1a30: 65 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 3b e flag_altform2;
1a40: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 /* True if
1a50: 20 22 21 22 20 66 6c 61 67 20 69 73 20 70 72 65 "!" flag is pre
1a60: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 sent */. etByte
1a70: 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 3b 20 20 flag_zeropad;
1a80: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 /* True if
1a90: 66 69 65 6c 64 20 77 69 64 74 68 20 63 6f 6e 73 field width cons
1aa0: 74 61 6e 74 20 73 74 61 72 74 73 20 77 69 74 68 tant starts with
1ab0: 20 7a 65 72 6f 20 2a 2f 0a 20 20 65 74 42 79 74 zero */. etByt
1ac0: 65 20 66 6c 61 67 5f 6c 6f 6e 67 3b 20 20 20 20 e flag_long;
1ad0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 /* True if
1ae0: 20 22 6c 22 20 66 6c 61 67 20 69 73 20 70 72 65 "l" flag is pre
1af0: 73 65 6e 74 20 2a 2f 0a 20 20 65 74 42 79 74 65 sent */. etByte
1b00: 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 3b 20 flag_longlong;
1b10: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 /* True if
1b20: 74 68 65 20 22 6c 6c 22 20 66 6c 61 67 20 69 73 the "ll" flag is
1b30: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 present */. et
1b40: 42 79 74 65 20 64 6f 6e 65 3b 20 20 20 20 20 20 Byte done;
1b50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 /* Loop
1b60: 20 74 65 72 6d 69 6e 61 74 69 6f 6e 20 66 6c 61 termination fla
1b70: 67 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 78 74 g */. etByte xt
1b80: 79 70 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 ype = 0;
1b90: 20 20 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 /* Conversion
1ba0: 70 61 72 61 64 69 67 6d 20 2a 2f 0a 20 20 75 38 paradigm */. u8
1bb0: 20 62 41 72 67 4c 69 73 74 3b 20 20 20 20 20 20 bArgList;
1bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 /* True
1bd0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 50 52 49 4e for SQLITE_PRIN
1be0: 54 46 5f 53 51 4c 46 55 4e 43 20 2a 2f 0a 20 20 TF_SQLFUNC */.
1bf0: 75 38 20 75 73 65 49 6e 74 65 72 6e 3b 20 20 20 u8 useIntern;
1c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6b /* Ok
1c10: 20 74 6f 20 75 73 65 20 69 6e 74 65 72 6e 61 6c to use internal
1c20: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 28 65 78 conversions (ex
1c30: 3a 20 25 54 29 20 2a 2f 0a 20 20 63 68 61 72 20 : %T) */. char
1c40: 70 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 prefix;
1c50: 20 20 20 20 20 20 2f 2a 20 50 72 65 66 69 78 20 /* Prefix
1c60: 63 68 61 72 61 63 74 65 72 2e 20 20 22 2b 22 20 character. "+"
1c70: 6f 72 20 22 2d 22 20 6f 72 20 22 20 22 20 6f 72 or "-" or " " or
1c80: 20 27 5c 30 27 2e 20 2a 2f 0a 20 20 73 71 6c 69 '\0'. */. sqli
1c90: 74 65 5f 75 69 6e 74 36 34 20 6c 6f 6e 67 76 61 te_uint64 longva
1ca0: 6c 75 65 3b 20 20 20 2f 2a 20 56 61 6c 75 65 20 lue; /* Value
1cb0: 66 6f 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 for integer type
1cc0: 73 20 2a 2f 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c s */. LONGDOUBL
1cd0: 45 5f 54 59 50 45 20 72 65 61 6c 76 61 6c 75 65 E_TYPE realvalue
1ce0: 3b 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20 72 ; /* Value for r
1cf0: 65 61 6c 20 74 79 70 65 73 20 2a 2f 0a 20 20 63 eal types */. c
1d00: 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20 2a 69 6e onst et_info *in
1d10: 66 6f 70 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 fop; /* Poi
1d20: 6e 74 65 72 20 74 6f 20 74 68 65 20 61 70 70 72 nter to the appr
1d30: 6f 70 72 69 61 74 65 20 69 6e 66 6f 20 73 74 72 opriate info str
1d40: 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 ucture */. char
1d50: 20 2a 7a 4f 75 74 3b 20 20 20 20 20 20 20 20 20 *zOut;
1d60: 20 20 20 20 20 20 20 2f 2a 20 52 65 6e 64 65 72 /* Render
1d70: 69 6e 67 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 ing buffer */.
1d80: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 int nOut;
1d90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 /* Si
1da0: 7a 65 20 6f 66 20 74 68 65 20 72 65 6e 64 65 72 ze of the render
1db0: 69 6e 67 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 ing buffer */.
1dc0: 63 68 61 72 20 2a 7a 45 78 74 72 61 20 3d 20 30 char *zExtra = 0
1dd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 ; /* Ma
1de0: 6c 6c 6f 63 65 64 20 6d 65 6d 6f 72 79 20 75 73 lloced memory us
1df0: 65 64 20 62 79 20 73 6f 6d 65 20 63 6f 6e 76 65 ed by some conve
1e00: 72 73 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 rsion */.#ifndef
1e10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f SQLITE_OMIT_FLO
1e20: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e ATING_POINT. in
1e30: 74 20 20 65 78 70 2c 20 65 32 3b 20 20 20 20 20 t exp, e2;
1e40: 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78 70 6f /* expo
1e50: 6e 65 6e 74 20 6f 66 20 72 65 61 6c 20 6e 75 6d nent of real num
1e60: 62 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 73 bers */. int ns
1e70: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d;
1e80: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f /* Number o
1e90: 66 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 f significant di
1ea0: 67 69 74 73 20 72 65 74 75 72 6e 65 64 20 2a 2f gits returned */
1eb0: 0a 20 20 64 6f 75 62 6c 65 20 72 6f 75 6e 64 65 . double rounde
1ec0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a r; /*
1ed0: 20 55 73 65 64 20 66 6f 72 20 72 6f 75 6e 64 69 Used for roundi
1ee0: 6e 67 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e ng floating poin
1ef0: 74 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 65 74 t values */. et
1f00: 42 79 74 65 20 66 6c 61 67 5f 64 70 3b 20 20 20 Byte flag_dp;
1f10: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 /* True
1f20: 20 69 66 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e if decimal poin
1f30: 74 20 73 68 6f 75 6c 64 20 62 65 20 73 68 6f 77 t should be show
1f40: 6e 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c n */. etByte fl
1f50: 61 67 5f 72 74 7a 3b 20 20 20 20 20 20 20 20 20 ag_rtz;
1f60: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 72 61 /* True if tra
1f70: 69 6c 69 6e 67 20 7a 65 72 6f 73 20 73 68 6f 75 iling zeros shou
1f80: 6c 64 20 62 65 20 72 65 6d 6f 76 65 64 20 2a 2f ld be removed */
1f90: 0a 23 65 6e 64 69 66 0a 20 20 50 72 69 6e 74 66 .#endif. Printf
1fa0: 41 72 67 75 6d 65 6e 74 73 20 2a 70 41 72 67 4c Arguments *pArgL
1fb0: 69 73 74 20 3d 20 30 3b 20 2f 2a 20 41 72 67 75 ist = 0; /* Argu
1fc0: 6d 65 6e 74 73 20 66 6f 72 20 53 51 4c 49 54 45 ments for SQLITE
1fd0: 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 _PRINTF_SQLFUNC
1fe0: 2a 2f 0a 20 20 63 68 61 72 20 62 75 66 5b 65 74 */. char buf[et
1ff0: 42 55 46 53 49 5a 45 5d 3b 20 20 20 20 20 20 20 BUFSIZE];
2000: 2f 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 62 75 /* Conversion bu
2010: 66 66 65 72 20 2a 2f 0a 0a 20 20 62 75 66 70 74 ffer */.. bufpt
2020: 20 3d 20 30 3b 0a 20 20 69 66 28 20 62 46 6c 61 = 0;. if( bFla
2030: 67 73 20 29 7b 0a 20 20 20 20 69 66 28 20 28 62 gs ){. if( (b
2040: 41 72 67 4c 69 73 74 20 3d 20 28 62 46 6c 61 67 ArgList = (bFlag
2050: 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 s & SQLITE_PRINT
2060: 46 5f 53 51 4c 46 55 4e 43 29 29 21 3d 30 20 29 F_SQLFUNC))!=0 )
2070: 7b 0a 20 20 20 20 20 20 70 41 72 67 4c 69 73 74 {. pArgList
2080: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 50 72 = va_arg(ap, Pr
2090: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 2a 29 3b intfArguments*);
20a0: 0a 20 20 20 20 7d 0a 20 20 20 20 75 73 65 49 6e . }. useIn
20b0: 74 65 72 6e 20 3d 20 62 46 6c 61 67 73 20 26 20 tern = bFlags &
20c0: 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e SQLITE_PRINTF_IN
20d0: 54 45 52 4e 41 4c 3b 0a 20 20 7d 65 6c 73 65 7b TERNAL;. }else{
20e0: 0a 20 20 20 20 62 41 72 67 4c 69 73 74 20 3d 20 . bArgList =
20f0: 75 73 65 49 6e 74 65 72 6e 20 3d 20 30 3b 0a 20 useIntern = 0;.
2100: 20 7d 0a 20 20 66 6f 72 28 3b 20 28 63 3d 28 2a }. for(; (c=(*
2110: 66 6d 74 29 29 21 3d 30 3b 20 2b 2b 66 6d 74 29 fmt))!=0; ++fmt)
2120: 7b 0a 20 20 20 20 69 66 28 20 63 21 3d 27 25 27 {. if( c!='%'
2130: 20 29 7b 0a 20 20 20 20 20 20 62 75 66 70 74 20 ){. bufpt
2140: 3d 20 28 63 68 61 72 20 2a 29 66 6d 74 3b 0a 23 = (char *)fmt;.#
2150: 69 66 20 48 41 56 45 5f 53 54 52 43 48 52 4e 55 if HAVE_STRCHRNU
2160: 4c 0a 20 20 20 20 20 20 66 6d 74 20 3d 20 73 74 L. fmt = st
2170: 72 63 68 72 6e 75 6c 28 66 6d 74 2c 20 27 25 27 rchrnul(fmt, '%'
2180: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 64 );.#else. d
2190: 6f 7b 20 66 6d 74 2b 2b 3b 20 7d 77 68 69 6c 65 o{ fmt++; }while
21a0: 28 20 2a 66 6d 74 20 26 26 20 2a 66 6d 74 20 21 ( *fmt && *fmt !
21b0: 3d 20 27 25 27 20 29 3b 0a 23 65 6e 64 69 66 0a = '%' );.#endif.
21c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 sqlite3Str
21d0: 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 63 AccumAppend(pAcc
21e0: 75 6d 2c 20 62 75 66 70 74 2c 20 28 69 6e 74 29 um, bufpt, (int)
21f0: 28 66 6d 74 20 2d 20 62 75 66 70 74 29 29 3b 0a (fmt - bufpt));.
2200: 20 20 20 20 20 20 69 66 28 20 2a 66 6d 74 3d 3d if( *fmt==
2210: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0 ) break;. }
2220: 0a 20 20 20 20 69 66 28 20 28 63 3d 28 2a 2b 2b . if( (c=(*++
2230: 66 6d 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 fmt))==0 ){.
2240: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 sqlite3StrAccu
2250: 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 mAppend(pAccum,
2260: 22 25 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 62 "%", 1);. b
2270: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 reak;. }.
2280: 2f 2a 20 46 69 6e 64 20 6f 75 74 20 77 68 61 74 /* Find out what
2290: 20 66 6c 61 67 73 20 61 72 65 20 70 72 65 73 65 flags are prese
22a0: 6e 74 20 2a 2f 0a 20 20 20 20 66 6c 61 67 5f 6c nt */. flag_l
22b0: 65 66 74 6a 75 73 74 69 66 79 20 3d 20 66 6c 61 eftjustify = fla
22c0: 67 5f 70 6c 75 73 73 69 67 6e 20 3d 20 66 6c 61 g_plussign = fla
22d0: 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 0a 20 g_blanksign = .
22e0: 20 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 flag_alterna
22f0: 74 65 66 6f 72 6d 20 3d 20 66 6c 61 67 5f 61 6c teform = flag_al
2300: 74 66 6f 72 6d 32 20 3d 20 66 6c 61 67 5f 7a 65 tform2 = flag_ze
2310: 72 6f 70 61 64 20 3d 20 30 3b 0a 20 20 20 20 64 ropad = 0;. d
2320: 6f 6e 65 20 3d 20 30 3b 0a 20 20 20 20 64 6f 7b one = 0;. do{
2330: 0a 20 20 20 20 20 20 73 77 69 74 63 68 28 20 63 . switch( c
2340: 20 29 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65 ){. case
2350: 20 27 2d 27 3a 20 20 20 66 6c 61 67 5f 6c 65 66 '-': flag_lef
2360: 74 6a 75 73 74 69 66 79 20 3d 20 31 3b 20 20 20 tjustify = 1;
2370: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 break;.
2380: 20 63 61 73 65 20 27 2b 27 3a 20 20 20 66 6c 61 case '+': fla
2390: 67 5f 70 6c 75 73 73 69 67 6e 20 3d 20 31 3b 20 g_plussign = 1;
23a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
23b0: 20 20 20 20 20 20 63 61 73 65 20 27 20 27 3a 20 case ' ':
23c0: 20 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e flag_blanksign
23d0: 20 3d 20 31 3b 20 20 20 20 20 20 20 62 72 65 61 = 1; brea
23e0: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 k;. case
23f0: 27 23 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 65 '#': flag_alte
2400: 72 6e 61 74 65 66 6f 72 6d 20 3d 20 31 3b 20 20 rnateform = 1;
2410: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 break;.
2420: 63 61 73 65 20 27 21 27 3a 20 20 20 66 6c 61 67 case '!': flag
2430: 5f 61 6c 74 66 6f 72 6d 32 20 3d 20 31 3b 20 20 _altform2 = 1;
2440: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
2450: 20 20 20 20 20 63 61 73 65 20 27 30 27 3a 20 20 case '0':
2460: 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 3d 20 flag_zeropad =
2470: 31 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 1; break
2480: 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c ;. defaul
2490: 74 3a 20 20 20 20 64 6f 6e 65 20 3d 20 31 3b 20 t: done = 1;
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24b0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 break;. }.
24c0: 20 20 20 7d 77 68 69 6c 65 28 20 21 64 6f 6e 65 }while( !done
24d0: 20 26 26 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 29 && (c=(*++fmt))
24e0: 21 3d 30 20 29 3b 0a 20 20 20 20 2f 2a 20 47 65 !=0 );. /* Ge
24f0: 74 20 74 68 65 20 66 69 65 6c 64 20 77 69 64 74 t the field widt
2500: 68 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d h */. if( c==
2510: 27 2a 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 '*' ){. if(
2520: 20 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 bArgList ){.
2530: 20 20 20 20 20 77 69 64 74 68 20 3d 20 28 69 6e width = (in
2540: 74 29 67 65 74 49 6e 74 41 72 67 28 70 41 72 67 t)getIntArg(pArg
2550: 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c List);. }el
2560: 73 65 7b 0a 20 20 20 20 20 20 20 20 77 69 64 74 se{. widt
2570: 68 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e h = va_arg(ap,in
2580: 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 t);. }.
2590: 20 20 69 66 28 20 77 69 64 74 68 3c 30 20 29 7b if( width<0 ){
25a0: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 65 . flag_le
25b0: 66 74 6a 75 73 74 69 66 79 20 3d 20 31 3b 0a 20 ftjustify = 1;.
25c0: 20 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 77 width = w
25d0: 69 64 74 68 20 3e 3d 20 2d 32 31 34 37 34 38 33 idth >= -2147483
25e0: 36 34 37 20 3f 20 2d 77 69 64 74 68 20 3a 20 30 647 ? -width : 0
25f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 ;. }.
2600: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 c = *++fmt;.
2610: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 6e 73 }else{. uns
2620: 69 67 6e 65 64 20 77 78 20 3d 20 30 3b 0a 20 20 igned wx = 0;.
2630: 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 while( c>='0
2640: 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 ' && c<='9' ){.
2650: 20 20 20 20 20 20 20 77 78 20 3d 20 77 78 2a 31 wx = wx*1
2660: 30 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 20 20 0 + c - '0';.
2670: 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b c = *++fmt;
2680: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 74 . }. t
2690: 65 73 74 63 61 73 65 28 20 77 78 3e 30 78 37 66 estcase( wx>0x7f
26a0: 66 66 66 66 66 66 20 29 3b 0a 20 20 20 20 20 20 ffffff );.
26b0: 77 69 64 74 68 20 3d 20 77 78 20 26 20 30 78 37 width = wx & 0x7
26c0: 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a 0a fffffff;. }..
26d0: 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65 20 70 /* Get the p
26e0: 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 recision */.
26f0: 69 66 28 20 63 3d 3d 27 2e 27 20 29 7b 0a 20 20 if( c=='.' ){.
2700: 20 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a c = *++fmt;.
2710: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 if( c=='*'
2720: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 ){. if(
2730: 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 bArgList ){.
2740: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 precision
2750: 3d 20 28 69 6e 74 29 67 65 74 49 6e 74 41 72 67 = (int)getIntArg
2760: 28 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 (pArgList);.
2770: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
2780: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d precision =
2790: 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b va_arg(ap,int);
27a0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
27b0: 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 c = *++fmt;.
27c0: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 63 69 if( preci
27d0: 73 69 6f 6e 3c 30 20 29 7b 0a 20 20 20 20 20 20 sion<0 ){.
27e0: 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 precision =
27f0: 70 72 65 63 69 73 69 6f 6e 20 3e 3d 20 2d 32 31 precision >= -21
2800: 34 37 34 38 33 36 34 37 20 3f 20 2d 70 72 65 63 47483647 ? -prec
2810: 69 73 69 6f 6e 20 3a 20 2d 31 3b 0a 20 20 20 20 ision : -1;.
2820: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 }. }els
2830: 65 7b 0a 20 20 20 20 20 20 20 20 75 6e 73 69 67 e{. unsig
2840: 6e 65 64 20 70 78 20 3d 20 30 3b 0a 20 20 20 20 ned px = 0;.
2850: 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 30 while( c>='0
2860: 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 20 ' && c<='9' ){.
2870: 20 20 20 20 20 20 20 20 20 70 78 20 3d 20 70 78 px = px
2880: 2a 31 30 20 2b 20 63 20 2d 20 27 30 27 3b 0a 20 *10 + c - '0';.
2890: 20 20 20 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b c = *++
28a0: 66 6d 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 fmt;. }.
28b0: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 testcase(
28c0: 20 70 78 3e 30 78 37 66 66 66 66 66 66 66 20 29 px>0x7fffffff )
28d0: 3b 0a 20 20 20 20 20 20 20 20 70 72 65 63 69 73 ;. precis
28e0: 69 6f 6e 20 3d 20 70 78 20 26 20 30 78 37 66 66 ion = px & 0x7ff
28f0: 66 66 66 66 66 3b 0a 20 20 20 20 20 20 7d 0a 20 fffff;. }.
2900: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
2910: 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 31 3b 0a precision = -1;.
2920: 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 65 74 }. /* Get
2930: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 the conversion
2940: 74 79 70 65 20 6d 6f 64 69 66 69 65 72 20 2a 2f type modifier */
2950: 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 . if( c=='l'
2960: 29 7b 0a 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f ){. flag_lo
2970: 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 63 20 ng = 1;. c
2980: 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 = *++fmt;.
2990: 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a 20 20 if( c=='l' ){.
29a0: 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c flag_longl
29b0: 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 ong = 1;.
29c0: 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 c = *++fmt;.
29d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
29e0: 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 flag_longlong
29f0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 = 0;. }.
2a00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 6c }else{. fl
2a10: 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c 61 67 5f 6c ag_long = flag_l
2a20: 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20 20 20 onglong = 0;.
2a30: 20 7d 0a 20 20 20 20 2f 2a 20 46 65 74 63 68 20 }. /* Fetch
2a40: 74 68 65 20 69 6e 66 6f 20 65 6e 74 72 79 20 66 the info entry f
2a50: 6f 72 20 74 68 65 20 66 69 65 6c 64 20 2a 2f 0a or the field */.
2a60: 20 20 20 20 69 6e 66 6f 70 20 3d 20 26 66 6d 74 infop = &fmt
2a70: 69 6e 66 6f 5b 30 5d 3b 0a 20 20 20 20 78 74 79 info[0];. xty
2a80: 70 65 20 3d 20 65 74 49 4e 56 41 4c 49 44 3b 0a pe = etINVALID;.
2a90: 20 20 20 20 66 6f 72 28 69 64 78 3d 30 3b 20 69 for(idx=0; i
2aa0: 64 78 3c 41 72 72 61 79 53 69 7a 65 28 66 6d 74 dx<ArraySize(fmt
2ab0: 69 6e 66 6f 29 3b 20 69 64 78 2b 2b 29 7b 0a 20 info); idx++){.
2ac0: 20 20 20 20 20 69 66 28 20 63 3d 3d 66 6d 74 69 if( c==fmti
2ad0: 6e 66 6f 5b 69 64 78 5d 2e 66 6d 74 74 79 70 65 nfo[idx].fmttype
2ae0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 66 6f ){. info
2af0: 70 20 3d 20 26 66 6d 74 69 6e 66 6f 5b 69 64 78 p = &fmtinfo[idx
2b00: 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 75 ];. if( u
2b10: 73 65 49 6e 74 65 72 6e 20 7c 7c 20 28 69 6e 66 seIntern || (inf
2b20: 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 op->flags & FLAG
2b30: 5f 49 4e 54 45 52 4e 29 3d 3d 30 20 29 7b 0a 20 _INTERN)==0 ){.
2b40: 20 20 20 20 20 20 20 20 20 78 74 79 70 65 20 3d xtype =
2b50: 20 69 6e 66 6f 70 2d 3e 74 79 70 65 3b 0a 20 20 infop->type;.
2b60: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
2b70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 return;.
2b80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
2b90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a break;. }.
2ba0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 }.. /*.
2bb0: 20 20 2a 2a 20 41 74 20 74 68 69 73 20 70 6f 69 ** At this poi
2bc0: 6e 74 2c 20 76 61 72 69 61 62 6c 65 73 20 61 72 nt, variables ar
2bd0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 e initialized as
2be0: 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a follows:. **
2bf0: 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 . ** flag_a
2c00: 6c 74 65 72 6e 61 74 65 66 6f 72 6d 20 20 20 20 lternateform
2c10: 20 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20 TRUE if a
2c20: 27 23 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a '#' is present..
2c30: 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 61 6c ** flag_al
2c40: 74 66 6f 72 6d 32 20 20 20 20 20 20 20 20 20 20 tform2
2c50: 20 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27 TRUE if a '
2c60: 21 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 !' is present..
2c70: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 70 6c 75 ** flag_plu
2c80: 73 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20 ssign
2c90: 20 20 20 20 54 52 55 45 20 69 66 20 61 20 27 2b TRUE if a '+
2ca0: 27 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 ' is present..
2cb0: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 65 66 74 ** flag_left
2cc0: 6a 75 73 74 69 66 79 20 20 20 20 20 20 20 20 20 justify
2cd0: 20 20 20 54 52 55 45 20 69 66 20 61 20 27 2d 27 TRUE if a '-'
2ce0: 20 69 73 20 70 72 65 73 65 6e 74 20 6f 72 20 69 is present or i
2cf0: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 20 20 20 f the. **
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d10: 20 20 20 20 20 20 20 20 20 20 20 66 69 65 6c 64 field
2d20: 20 77 69 64 74 68 20 77 61 73 20 6e 65 67 61 74 width was negat
2d30: 69 76 65 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c ive.. ** fl
2d40: 61 67 5f 7a 65 72 6f 70 61 64 20 20 20 20 20 20 ag_zeropad
2d50: 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 TRUE i
2d60: 66 20 74 68 65 20 77 69 64 74 68 20 62 65 67 61 f the width bega
2d70: 6e 20 77 69 74 68 20 30 2e 0a 20 20 20 20 2a 2a n with 0.. **
2d80: 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 20 20 20 20 flag_long
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
2da0: 52 55 45 20 69 66 20 74 68 65 20 6c 65 74 74 65 RUE if the lette
2db0: 72 20 27 6c 27 20 28 65 6c 6c 29 20 70 72 65 66 r 'l' (ell) pref
2dc0: 69 78 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 ixed. **
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2de0: 20 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6f the co
2df0: 6e 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 nversion charact
2e00: 65 72 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 er.. ** fla
2e10: 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 20 20 20 20 20 g_longlong
2e20: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 TRUE if
2e30: 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c 6c 27 the letter 'll'
2e40: 20 28 65 6c 6c 20 65 6c 6c 29 20 70 72 65 66 69 (ell ell) prefi
2e50: 78 65 64 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 xed. **
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e70: 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e the con
2e80: 76 65 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 version characte
2e90: 72 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 67 r.. ** flag
2ea0: 5f 62 6c 61 6e 6b 73 69 67 6e 20 20 20 20 20 20 _blanksign
2eb0: 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 20 TRUE if
2ec0: 61 20 27 20 27 20 69 73 20 70 72 65 73 65 6e 74 a ' ' is present
2ed0: 2e 0a 20 20 20 20 2a 2a 20 20 20 77 69 64 74 68 .. ** width
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ef0: 20 20 20 20 20 20 20 54 68 65 20 73 70 65 63 69 The speci
2f00: 66 69 65 64 20 66 69 65 6c 64 20 77 69 64 74 68 fied field width
2f10: 2e 20 20 54 68 69 73 20 69 73 0a 20 20 20 20 2a . This is. *
2f20: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 *
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f40: 61 6c 77 61 79 73 20 6e 6f 6e 2d 6e 65 67 61 74 always non-negat
2f50: 69 76 65 2e 20 20 5a 65 72 6f 20 69 73 20 74 68 ive. Zero is th
2f60: 65 20 64 65 66 61 75 6c 74 2e 0a 20 20 20 20 2a e default.. *
2f70: 2a 20 20 20 70 72 65 63 69 73 69 6f 6e 20 20 20 * precision
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f90: 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 72 The specified pr
2fa0: 65 63 69 73 69 6f 6e 2e 20 20 54 68 65 20 64 65 ecision. The de
2fb0: 66 61 75 6c 74 0a 20 20 20 20 2a 2a 20 20 20 20 fault. **
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fd0: 20 20 20 20 20 20 20 20 20 20 20 69 73 20 2d 31 is -1
2fe0: 2e 0a 20 20 20 20 2a 2a 20 20 20 78 74 79 70 65 .. ** xtype
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3000: 20 20 20 20 20 20 20 54 68 65 20 63 6c 61 73 73 The class
3010: 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 of the conversi
3020: 6f 6e 2e 0a 20 20 20 20 2a 2a 20 20 20 69 6e 66 on.. ** inf
3030: 6f 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 op
3040: 20 20 20 20 20 20 20 20 20 50 6f 69 6e 74 65 72 Pointer
3050: 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 to the appropri
3060: 61 74 65 20 69 6e 66 6f 20 73 74 72 75 63 74 2e ate info struct.
3070: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 77 69 74 . */. swit
3080: 63 68 28 20 78 74 79 70 65 20 29 7b 0a 20 20 20 ch( xtype ){.
3090: 20 20 20 63 61 73 65 20 65 74 50 4f 49 4e 54 45 case etPOINTE
30a0: 52 3a 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f R:. flag_
30b0: 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f longlong = sizeo
30c0: 66 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 f(char*)==sizeof
30d0: 28 69 36 34 29 3b 0a 20 20 20 20 20 20 20 20 66 (i64);. f
30e0: 6c 61 67 5f 6c 6f 6e 67 20 3d 20 73 69 7a 65 6f lag_long = sizeo
30f0: 66 28 63 68 61 72 2a 29 3d 3d 73 69 7a 65 6f 66 f(char*)==sizeof
3100: 28 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 (long int);.
3110: 20 20 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f /* Fall thro
3120: 75 67 68 20 69 6e 74 6f 20 74 68 65 20 6e 65 78 ugh into the nex
3130: 74 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 t case */.
3140: 63 61 73 65 20 65 74 4f 52 44 49 4e 41 4c 3a 0a case etORDINAL:.
3150: 20 20 20 20 20 20 63 61 73 65 20 65 74 52 41 44 case etRAD
3160: 49 58 3a 0a 20 20 20 20 20 20 20 20 69 66 28 20 IX:. if(
3170: 69 6e 66 6f 70 2d 3e 66 6c 61 67 73 20 26 20 46 infop->flags & F
3180: 4c 41 47 5f 53 49 47 4e 45 44 20 29 7b 0a 20 20 LAG_SIGNED ){.
3190: 20 20 20 20 20 20 20 20 69 36 34 20 76 3b 0a 20 i64 v;.
31a0: 20 20 20 20 20 20 20 20 20 69 66 28 20 62 41 72 if( bAr
31b0: 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 gList ){.
31c0: 20 20 20 20 20 76 20 3d 20 67 65 74 49 6e 74 41 v = getIntA
31d0: 72 67 28 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 rg(pArgList);.
31e0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 }else if
31f0: 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e 67 20 ( flag_longlong
3200: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 ){. v
3210: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 36 34 = va_arg(ap,i64
3220: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c );. }el
3230: 73 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 se if( flag_long
3240: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ){.
3250: 76 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 6c 6f v = va_arg(ap,lo
3260: 6e 67 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 ng int);.
3270: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
3280: 20 20 20 20 20 20 76 20 3d 20 76 61 5f 61 72 67 v = va_arg
3290: 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 (ap,int);.
32a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
32b0: 69 66 28 20 76 3c 30 20 29 7b 0a 20 20 20 20 20 if( v<0 ){.
32c0: 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 53 4d if( v==SM
32d0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 7b 0a ALLEST_INT64 ){.
32e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f lo
32f0: 6e 67 76 61 6c 75 65 20 3d 20 28 28 75 36 34 29 ngvalue = ((u64)
3300: 31 29 3c 3c 36 33 3b 0a 20 20 20 20 20 20 20 20 1)<<63;.
3310: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
3320: 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c longval
3330: 75 65 20 3d 20 2d 76 3b 0a 20 20 20 20 20 20 20 ue = -v;.
3340: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
3350: 20 20 20 70 72 65 66 69 78 20 3d 20 27 2d 27 3b prefix = '-';
3360: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 . }else
3370: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f {. lo
3380: 6e 67 76 61 6c 75 65 20 3d 20 76 3b 0a 20 20 20 ngvalue = v;.
3390: 20 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 if( fla
33a0: 67 5f 70 6c 75 73 73 69 67 6e 20 29 20 20 20 20 g_plussign )
33b0: 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2b 27 prefix = '+'
33c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c ;. el
33d0: 73 65 20 69 66 28 20 66 6c 61 67 5f 62 6c 61 6e se if( flag_blan
33e0: 6b 73 69 67 6e 20 29 20 20 70 72 65 66 69 78 20 ksign ) prefix
33f0: 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20 = ' ';.
3400: 20 20 20 65 6c 73 65 20 20 20 20 20 20 20 20 20 else
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 pr
3420: 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 efix = 0;.
3430: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 }. }e
3440: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 lse{. i
3450: 66 28 20 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 f( bArgList ){.
3460: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 longv
3470: 61 6c 75 65 20 3d 20 28 75 36 34 29 67 65 74 49 alue = (u64)getI
3480: 6e 74 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b ntArg(pArgList);
3490: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 . }else
34a0: 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f if( flag_longlo
34b0: 6e 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 ng ){.
34c0: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 longvalue = va
34d0: 5f 61 72 67 28 61 70 2c 75 36 34 29 3b 0a 20 20 _arg(ap,u64);.
34e0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 }else if
34f0: 28 20 66 6c 61 67 5f 6c 6f 6e 67 20 29 7b 0a 20 ( flag_long ){.
3500: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 longv
3510: 61 6c 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 alue = va_arg(ap
3520: 2c 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 ,unsigned long i
3530: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d nt);. }
3540: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 else{.
3550: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 longvalue = va
3560: 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 6e 65 64 _arg(ap,unsigned
3570: 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 int);.
3580: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 }. pre
3590: 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 fix = 0;.
35a0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c }. if( l
35b0: 6f 6e 67 76 61 6c 75 65 3d 3d 30 20 29 20 66 6c ongvalue==0 ) fl
35c0: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d ag_alternateform
35d0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 = 0;. if
35e0: 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26 ( flag_zeropad &
35f0: 26 20 70 72 65 63 69 73 69 6f 6e 3c 77 69 64 74 & precision<widt
3600: 68 2d 28 70 72 65 66 69 78 21 3d 30 29 20 29 7b h-(prefix!=0) ){
3610: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 63 69 . preci
3620: 73 69 6f 6e 20 3d 20 77 69 64 74 68 2d 28 70 72 sion = width-(pr
3630: 65 66 69 78 21 3d 30 29 3b 0a 20 20 20 20 20 20 efix!=0);.
3640: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 }. if(
3650: 70 72 65 63 69 73 69 6f 6e 3c 65 74 42 55 46 53 precision<etBUFS
3660: 49 5a 45 2d 31 30 20 29 7b 0a 20 20 20 20 20 20 IZE-10 ){.
3670: 20 20 20 20 6e 4f 75 74 20 3d 20 65 74 42 55 46 nOut = etBUF
3680: 53 49 5a 45 3b 0a 20 20 20 20 20 20 20 20 20 20 SIZE;.
3690: 7a 4f 75 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 zOut = buf;.
36a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
36b0: 20 20 20 20 20 6e 4f 75 74 20 3d 20 70 72 65 63 nOut = prec
36c0: 69 73 69 6f 6e 20 2b 20 31 30 3b 0a 20 20 20 20 ision + 10;.
36d0: 20 20 20 20 20 20 7a 4f 75 74 20 3d 20 7a 45 78 zOut = zEx
36e0: 74 72 61 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c tra = sqlite3Mal
36f0: 6c 6f 63 28 20 6e 4f 75 74 20 29 3b 0a 20 20 20 loc( nOut );.
3700: 20 20 20 20 20 20 20 69 66 28 20 7a 4f 75 74 3d if( zOut=
3710: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 =0 ){.
3720: 20 20 73 65 74 53 74 72 41 63 63 75 6d 45 72 72 setStrAccumErr
3730: 6f 72 28 70 41 63 63 75 6d 2c 20 53 54 52 41 43 or(pAccum, STRAC
3740: 43 55 4d 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 CUM_NOMEM);.
3750: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a return;.
3760: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
3770: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 }. bu
3780: 66 70 74 20 3d 20 26 7a 4f 75 74 5b 6e 4f 75 74 fpt = &zOut[nOut
3790: 2d 31 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 -1];. if(
37a0: 20 78 74 79 70 65 3d 3d 65 74 4f 52 44 49 4e 41 xtype==etORDINA
37b0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 L ){. s
37c0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 tatic const char
37d0: 20 7a 4f 72 64 5b 5d 20 3d 20 22 74 68 73 74 6e zOrd[] = "thstn
37e0: 64 72 64 22 3b 0a 20 20 20 20 20 20 20 20 20 20 drd";.
37f0: 69 6e 74 20 78 20 3d 20 28 69 6e 74 29 28 6c 6f int x = (int)(lo
3800: 6e 67 76 61 6c 75 65 20 25 20 31 30 29 3b 0a 20 ngvalue % 10);.
3810: 20 20 20 20 20 20 20 20 20 69 66 28 20 78 3e 3d if( x>=
3820: 34 20 7c 7c 20 28 6c 6f 6e 67 76 61 6c 75 65 2f 4 || (longvalue/
3830: 31 30 29 25 31 30 3d 3d 31 20 29 7b 0a 20 20 20 10)%10==1 ){.
3840: 20 20 20 20 20 20 20 20 20 78 20 3d 20 30 3b 0a x = 0;.
3850: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
3860: 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 *(--bufpt)
3870: 20 3d 20 7a 4f 72 64 5b 78 2a 32 2b 31 5d 3b 0a = zOrd[x*2+1];.
3880: 20 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 *(--bu
3890: 66 70 74 29 20 3d 20 7a 4f 72 64 5b 78 2a 32 5d fpt) = zOrd[x*2]
38a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
38b0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 {.
38c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 73 65 74 const char *cset
38d0: 20 3d 20 26 61 44 69 67 69 74 73 5b 69 6e 66 6f = &aDigits[info
38e0: 70 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20 20 20 p->charset];.
38f0: 20 20 20 20 20 20 20 75 38 20 62 61 73 65 20 3d u8 base =
3900: 20 69 6e 66 6f 70 2d 3e 62 61 73 65 3b 0a 20 20 infop->base;.
3910: 20 20 20 20 20 20 20 20 64 6f 7b 20 20 20 20 20 do{
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3940: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 /* Convert
3950: 20 74 6f 20 61 73 63 69 69 20 2a 2f 0a 20 20 20 to ascii */.
3960: 20 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 *(--buf
3970: 70 74 29 20 3d 20 63 73 65 74 5b 6c 6f 6e 67 76 pt) = cset[longv
3980: 61 6c 75 65 25 62 61 73 65 5d 3b 0a 20 20 20 20 alue%base];.
3990: 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 61 6c 75 longvalu
39a0: 65 20 3d 20 6c 6f 6e 67 76 61 6c 75 65 2f 62 61 e = longvalue/ba
39b0: 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 77 se;. }w
39c0: 68 69 6c 65 28 20 6c 6f 6e 67 76 61 6c 75 65 3e hile( longvalue>
39d0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 0 );. }.
39e0: 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 length =
39f0: 28 69 6e 74 29 28 26 7a 4f 75 74 5b 6e 4f 75 74 (int)(&zOut[nOut
3a00: 2d 31 5d 2d 62 75 66 70 74 29 3b 0a 20 20 20 20 -1]-bufpt);.
3a10: 20 20 20 20 66 6f 72 28 69 64 78 3d 70 72 65 63 for(idx=prec
3a20: 69 73 69 6f 6e 2d 6c 65 6e 67 74 68 3b 20 69 64 ision-length; id
3a30: 78 3e 30 3b 20 69 64 78 2d 2d 29 7b 0a 20 20 20 x>0; idx--){.
3a40: 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 *(--bufpt
3a50: 29 20 3d 20 27 30 27 3b 20 20 20 20 20 20 20 20 ) = '0';
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3a70: 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 70 61 64 /* Zero pad
3a80: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 */. }.
3a90: 20 20 20 20 20 20 69 66 28 20 70 72 65 66 69 78 if( prefix
3aa0: 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 ) *(--bufpt) =
3ab0: 70 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 20 prefix;
3ac0: 20 20 20 20 20 20 2f 2a 20 41 64 64 20 73 69 67 /* Add sig
3ad0: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 n */. if(
3ae0: 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 flag_alternatef
3af0: 6f 72 6d 20 26 26 20 69 6e 66 6f 70 2d 3e 70 72 orm && infop->pr
3b00: 65 66 69 78 20 29 7b 20 20 20 20 20 20 2f 2a 20 efix ){ /*
3b10: 41 64 64 20 22 30 22 20 6f 72 20 22 30 78 22 20 Add "0" or "0x"
3b20: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e */. con
3b30: 73 74 20 63 68 61 72 20 2a 70 72 65 3b 0a 20 20 st char *pre;.
3b40: 20 20 20 20 20 20 20 20 63 68 61 72 20 78 3b 0a char x;.
3b50: 20 20 20 20 20 20 20 20 20 20 70 72 65 20 3d 20 pre =
3b60: 26 61 50 72 65 66 69 78 5b 69 6e 66 6f 70 2d 3e &aPrefix[infop->
3b70: 70 72 65 66 69 78 5d 3b 0a 20 20 20 20 20 20 20 prefix];.
3b80: 20 20 20 66 6f 72 28 3b 20 28 78 3d 28 2a 70 72 for(; (x=(*pr
3b90: 65 29 29 21 3d 30 3b 20 70 72 65 2b 2b 29 20 2a e))!=0; pre++) *
3ba0: 28 2d 2d 62 75 66 70 74 29 20 3d 20 78 3b 0a 20 (--bufpt) = x;.
3bb0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
3bc0: 20 6c 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 length = (int)(
3bd0: 26 7a 4f 75 74 5b 6e 4f 75 74 2d 31 5d 2d 62 75 &zOut[nOut-1]-bu
3be0: 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 62 72 fpt);. br
3bf0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
3c00: 65 74 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20 63 etFLOAT:. c
3c10: 61 73 65 20 65 74 45 58 50 3a 0a 20 20 20 20 20 ase etEXP:.
3c20: 20 63 61 73 65 20 65 74 47 45 4e 45 52 49 43 3a case etGENERIC:
3c30: 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 41 72 . if( bAr
3c40: 67 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 gList ){.
3c50: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d 20 67 realvalue = g
3c60: 65 74 44 6f 75 62 6c 65 41 72 67 28 70 41 72 67 etDoubleArg(pArg
3c70: 4c 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20 7d List);. }
3c80: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 else{.
3c90: 72 65 61 6c 76 61 6c 75 65 20 3d 20 76 61 5f 61 realvalue = va_a
3ca0: 72 67 28 61 70 2c 64 6f 75 62 6c 65 29 3b 0a 20 rg(ap,double);.
3cb0: 20 20 20 20 20 20 20 7d 0a 23 69 66 64 65 66 20 }.#ifdef
3cc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 SQLITE_OMIT_FLOA
3cd0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 20 TING_POINT.
3ce0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0a 23 length = 0;.#
3cf0: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 else. if(
3d00: 20 70 72 65 63 69 73 69 6f 6e 3c 30 20 29 20 70 precision<0 ) p
3d10: 72 65 63 69 73 69 6f 6e 20 3d 20 36 3b 20 20 20 recision = 6;
3d20: 20 20 20 20 20 20 2f 2a 20 53 65 74 20 64 65 66 /* Set def
3d30: 61 75 6c 74 20 70 72 65 63 69 73 69 6f 6e 20 2a ault precision *
3d40: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65 /. if( re
3d50: 61 6c 76 61 6c 75 65 3c 30 2e 30 20 29 7b 0a 20 alvalue<0.0 ){.
3d60: 20 20 20 20 20 20 20 20 20 72 65 61 6c 76 61 6c realval
3d70: 75 65 20 3d 20 2d 72 65 61 6c 76 61 6c 75 65 3b ue = -realvalue;
3d80: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 66 69 . prefi
3d90: 78 20 3d 20 27 2d 27 3b 0a 20 20 20 20 20 20 20 x = '-';.
3da0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 }else{.
3db0: 20 20 69 66 28 20 66 6c 61 67 5f 70 6c 75 73 73 if( flag_pluss
3dc0: 69 67 6e 20 29 20 20 20 20 20 20 20 20 20 20 70 ign ) p
3dd0: 72 65 66 69 78 20 3d 20 27 2b 27 3b 0a 20 20 20 refix = '+';.
3de0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 else if(
3df0: 66 6c 61 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 29 flag_blanksign )
3e00: 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 20 27 prefix = ' '
3e10: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 ;. else
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e30: 20 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 prefix
3e40: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 = 0;. }.
3e50: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 if( xtype
3e60: 3d 3d 65 74 47 45 4e 45 52 49 43 20 26 26 20 70 ==etGENERIC && p
3e70: 72 65 63 69 73 69 6f 6e 3e 30 20 29 20 70 72 65 recision>0 ) pre
3e80: 63 69 73 69 6f 6e 2d 2d 3b 0a 20 20 20 20 20 20 cision--;.
3e90: 20 20 74 65 73 74 63 61 73 65 28 20 70 72 65 63 testcase( prec
3ea0: 69 73 69 6f 6e 3e 30 78 66 66 66 20 29 3b 0a 20 ision>0xfff );.
3eb0: 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d 70 for(idx=p
3ec0: 72 65 63 69 73 69 6f 6e 26 30 78 66 66 66 2c 20 recision&0xfff,
3ed0: 72 6f 75 6e 64 65 72 3d 30 2e 35 3b 20 69 64 78 rounder=0.5; idx
3ee0: 3e 30 3b 20 69 64 78 2d 2d 2c 20 72 6f 75 6e 64 >0; idx--, round
3ef0: 65 72 2a 3d 30 2e 31 29 7b 7d 0a 20 20 20 20 20 er*=0.1){}.
3f00: 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d 65 74 if( xtype==et
3f10: 46 4c 4f 41 54 20 29 20 72 65 61 6c 76 61 6c 75 FLOAT ) realvalu
3f20: 65 20 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 e += rounder;.
3f30: 20 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 69 /* Normali
3f40: 7a 65 20 72 65 61 6c 76 61 6c 75 65 20 74 6f 20 ze realvalue to
3f50: 77 69 74 68 69 6e 20 31 30 2e 30 20 3e 20 72 65 within 10.0 > re
3f60: 61 6c 76 61 6c 75 65 20 3e 3d 20 31 2e 30 20 2a alvalue >= 1.0 *
3f70: 2f 0a 20 20 20 20 20 20 20 20 65 78 70 20 3d 20 /. exp =
3f80: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 0;. if( s
3f90: 71 6c 69 74 65 33 49 73 4e 61 4e 28 28 64 6f 75 qlite3IsNaN((dou
3fa0: 62 6c 65 29 72 65 61 6c 76 61 6c 75 65 29 20 29 ble)realvalue) )
3fb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 70 {. bufp
3fc0: 74 20 3d 20 22 4e 61 4e 22 3b 0a 20 20 20 20 20 t = "NaN";.
3fd0: 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 33 3b length = 3;
3fe0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b . break
3ff0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
4000: 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75 if( realvalu
4010: 65 3e 30 2e 30 20 29 7b 0a 20 20 20 20 20 20 20 e>0.0 ){.
4020: 20 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 LONGDOUBLE_TY
4030: 50 45 20 73 63 61 6c 65 20 3d 20 31 2e 30 3b 0a PE scale = 1.0;.
4040: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 while(
4050: 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 31 30 realvalue>=1e10
4060: 30 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 0*scale && exp<=
4070: 33 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 350 ){ scale *=
4080: 31 65 31 30 30 3b 65 78 70 2b 3d 31 30 30 3b 7d 1e100;exp+=100;}
4090: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 . while
40a0: 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 36 ( realvalue>=1e6
40b0: 34 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 4*scale && exp<=
40c0: 33 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 350 ){ scale *=
40d0: 31 65 36 34 3b 20 65 78 70 2b 3d 36 34 3b 20 7d 1e64; exp+=64; }
40e0: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 . while
40f0: 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 38 ( realvalue>=1e8
4100: 2a 73 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33 *scale && exp<=3
4110: 35 30 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 50 ){ scale *= 1
4120: 65 38 3b 20 65 78 70 2b 3d 38 3b 20 7d 0a 20 20 e8; exp+=8; }.
4130: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 while( r
4140: 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 2a 73 ealvalue>=10.0*s
4150: 63 61 6c 65 20 26 26 20 65 78 70 3c 3d 33 35 30 cale && exp<=350
4160: 20 29 7b 20 73 63 61 6c 65 20 2a 3d 20 31 30 2e ){ scale *= 10.
4170: 30 3b 20 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 0; exp++; }.
4180: 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 realvalue
4190: 2f 3d 20 73 63 61 6c 65 3b 0a 20 20 20 20 20 20 /= scale;.
41a0: 20 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 while( realv
41b0: 61 6c 75 65 3c 31 65 2d 38 20 29 7b 20 72 65 61 alue<1e-8 ){ rea
41c0: 6c 76 61 6c 75 65 20 2a 3d 20 31 65 38 3b 20 65 lvalue *= 1e8; e
41d0: 78 70 2d 3d 38 3b 20 7d 0a 20 20 20 20 20 20 20 xp-=8; }.
41e0: 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 while( realva
41f0: 6c 75 65 3c 31 2e 30 20 29 7b 20 72 65 61 6c 76 lue<1.0 ){ realv
4200: 61 6c 75 65 20 2a 3d 20 31 30 2e 30 3b 20 65 78 alue *= 10.0; ex
4210: 70 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 p--; }.
4220: 20 69 66 28 20 65 78 70 3e 33 35 30 20 29 7b 0a if( exp>350 ){.
4230: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 if(
4240: 70 72 65 66 69 78 3d 3d 27 2d 27 20 29 7b 0a 20 prefix=='-' ){.
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 buf
4260: 70 74 20 3d 20 22 2d 49 6e 66 22 3b 0a 20 20 20 pt = "-Inf";.
4270: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 }else i
4280: 66 28 20 70 72 65 66 69 78 3d 3d 27 2b 27 20 29 f( prefix=='+' )
4290: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
42a0: 62 75 66 70 74 20 3d 20 22 2b 49 6e 66 22 3b 0a bufpt = "+Inf";.
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 }els
42c0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e{.
42d0: 20 62 75 66 70 74 20 3d 20 22 49 6e 66 22 3b 0a bufpt = "Inf";.
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 }.
42f0: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 length
4300: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e = sqlite3Strlen
4310: 33 30 28 62 75 66 70 74 29 3b 0a 20 20 20 20 20 30(bufpt);.
4320: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
4330: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
4340: 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 70 }. bufp
4350: 74 20 3d 20 62 75 66 3b 0a 20 20 20 20 20 20 20 t = buf;.
4360: 20 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 /*. ** I
4370: 66 20 74 68 65 20 66 69 65 6c 64 20 74 79 70 65 f the field type
4380: 20 69 73 20 65 74 47 45 4e 45 52 49 43 2c 20 74 is etGENERIC, t
4390: 68 65 6e 20 63 6f 6e 76 65 72 74 20 74 6f 20 65 hen convert to e
43a0: 69 74 68 65 72 20 65 74 45 58 50 0a 20 20 20 20 ither etEXP.
43b0: 20 20 20 20 2a 2a 20 6f 72 20 65 74 46 4c 4f 41 ** or etFLOA
43c0: 54 2c 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 T, as appropriat
43d0: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 e.. */.
43e0: 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 21 if( xtype!
43f0: 3d 65 74 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20 =etFLOAT ){.
4400: 20 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 realvalue
4410: 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20 += rounder;.
4420: 20 20 20 20 20 20 69 66 28 20 72 65 61 6c 76 61 if( realva
4430: 6c 75 65 3e 3d 31 30 2e 30 20 29 7b 20 72 65 61 lue>=10.0 ){ rea
4440: 6c 76 61 6c 75 65 20 2a 3d 20 30 2e 31 3b 20 65 lvalue *= 0.1; e
4450: 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 xp++; }.
4460: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74 }. if( xt
4470: 79 70 65 3d 3d 65 74 47 45 4e 45 52 49 43 20 29 ype==etGENERIC )
4480: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 {. flag
4490: 5f 72 74 7a 20 3d 20 21 66 6c 61 67 5f 61 6c 74 _rtz = !flag_alt
44a0: 65 72 6e 61 74 65 66 6f 72 6d 3b 0a 20 20 20 20 ernateform;.
44b0: 20 20 20 20 20 20 69 66 28 20 65 78 70 3c 2d 34 if( exp<-4
44c0: 20 7c 7c 20 65 78 70 3e 70 72 65 63 69 73 69 6f || exp>precisio
44d0: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 n ){.
44e0: 20 78 74 79 70 65 20 3d 20 65 74 45 58 50 3b 0a xtype = etEXP;.
44f0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b }else{
4500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 . pre
4510: 63 69 73 69 6f 6e 20 3d 20 70 72 65 63 69 73 69 cision = precisi
4520: 6f 6e 20 2d 20 65 78 70 3b 0a 20 20 20 20 20 20 on - exp;.
4530: 20 20 20 20 20 20 78 74 79 70 65 20 3d 20 65 74 xtype = et
4540: 46 4c 4f 41 54 3b 0a 20 20 20 20 20 20 20 20 20 FLOAT;.
4550: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 }. }else
4560: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 {. flag
4570: 5f 72 74 7a 20 3d 20 66 6c 61 67 5f 61 6c 74 66 _rtz = flag_altf
4580: 6f 72 6d 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a orm2;. }.
4590: 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 if( xtyp
45a0: 65 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 e==etEXP ){.
45b0: 20 20 20 20 20 20 65 32 20 3d 20 30 3b 0a 20 20 e2 = 0;.
45c0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
45d0: 20 20 20 20 20 20 20 65 32 20 3d 20 65 78 70 3b e2 = exp;
45e0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
45f0: 20 20 20 69 66 28 20 4d 41 58 28 65 32 2c 30 29 if( MAX(e2,0)
4600: 2b 28 69 36 34 29 70 72 65 63 69 73 69 6f 6e 2b +(i64)precision+
4610: 28 69 36 34 29 77 69 64 74 68 20 3e 20 65 74 42 (i64)width > etB
4620: 55 46 53 49 5a 45 20 2d 20 31 35 20 29 7b 0a 20 UFSIZE - 15 ){.
4630: 20 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d bufpt =
4640: 20 7a 45 78 74 72 61 20 0a 20 20 20 20 20 20 20 zExtra .
4650: 20 20 20 20 20 20 20 3d 20 73 71 6c 69 74 65 33 = sqlite3
4660: 4d 61 6c 6c 6f 63 28 20 4d 41 58 28 65 32 2c 30 Malloc( MAX(e2,0
4670: 29 2b 28 69 36 34 29 70 72 65 63 69 73 69 6f 6e )+(i64)precision
4680: 2b 28 69 36 34 29 77 69 64 74 68 2b 31 35 20 29 +(i64)width+15 )
4690: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 ;. if(
46a0: 62 75 66 70 74 3d 3d 30 20 29 7b 0a 20 20 20 20 bufpt==0 ){.
46b0: 20 20 20 20 20 20 20 20 73 65 74 53 74 72 41 63 setStrAc
46c0: 63 75 6d 45 72 72 6f 72 28 70 41 63 63 75 6d 2c cumError(pAccum,
46d0: 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 STRACCUM_NOMEM)
46e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 ;. re
46f0: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 turn;.
4700: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
4710: 20 20 20 20 7a 4f 75 74 20 3d 20 62 75 66 70 74 zOut = bufpt
4720: 3b 0a 20 20 20 20 20 20 20 20 6e 73 64 20 3d 20 ;. nsd =
4730: 31 36 20 2b 20 66 6c 61 67 5f 61 6c 74 66 6f 72 16 + flag_altfor
4740: 6d 32 2a 31 30 3b 0a 20 20 20 20 20 20 20 20 66 m2*10;. f
4750: 6c 61 67 5f 64 70 20 3d 20 28 70 72 65 63 69 73 lag_dp = (precis
4760: 69 6f 6e 3e 30 20 3f 31 3a 30 29 20 7c 20 66 6c ion>0 ?1:0) | fl
4770: 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 6d ag_alternateform
4780: 20 7c 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 | flag_altform2
4790: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 ;. /* The
47a0: 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74 20 6f sign in front o
47b0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f 0a f the number */.
47c0: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 66 if( pref
47d0: 69 78 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 ix ){.
47e0: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 70 72 65 *(bufpt++) = pre
47f0: 66 69 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 fix;. }.
4800: 20 20 20 20 20 20 20 2f 2a 20 44 69 67 69 74 73 /* Digits
4810: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 64 65 prior to the de
4820: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a 20 cimal point */.
4830: 20 20 20 20 20 20 20 69 66 28 20 65 32 3c 30 20 if( e2<0
4840: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 ){. *(b
4850: 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 ufpt++) = '0';.
4860: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 }else{.
4870: 20 20 20 20 20 20 20 20 66 6f 72 28 3b 20 65 32 for(; e2
4880: 3e 3d 30 3b 20 65 32 2d 2d 29 7b 0a 20 20 20 20 >=0; e2--){.
4890: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b *(bufpt+
48a0: 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 74 +) = et_getdigit
48b0: 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 64 (&realvalue,&nsd
48c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 );. }.
48d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
48e0: 20 2f 2a 20 54 68 65 20 64 65 63 69 6d 61 6c 20 /* The decimal
48f0: 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 point */.
4900: 20 69 66 28 20 66 6c 61 67 5f 64 70 20 29 7b 0a if( flag_dp ){.
4910: 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 *(bufp
4920: 74 2b 2b 29 20 3d 20 27 2e 27 3b 0a 20 20 20 20 t++) = '.';.
4930: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a }. /*
4940: 20 22 30 22 20 64 69 67 69 74 73 20 61 66 74 65 "0" digits afte
4950: 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f r the decimal po
4960: 69 6e 74 20 62 75 74 20 62 65 66 6f 72 65 20 74 int but before t
4970: 68 65 20 66 69 72 73 74 0a 20 20 20 20 20 20 20 he first.
4980: 20 2a 2a 20 73 69 67 6e 69 66 69 63 61 6e 74 20 ** significant
4990: 64 69 67 69 74 20 6f 66 20 74 68 65 20 6e 75 6d digit of the num
49a0: 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 ber */. f
49b0: 6f 72 28 65 32 2b 2b 3b 20 65 32 3c 30 3b 20 70 or(e2++; e2<0; p
49c0: 72 65 63 69 73 69 6f 6e 2d 2d 2c 20 65 32 2b 2b recision--, e2++
49d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 ){. ass
49e0: 65 72 74 28 20 70 72 65 63 69 73 69 6f 6e 3e 30 ert( precision>0
49f0: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 );. *(
4a00: 62 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a bufpt++) = '0';.
4a10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
4a20: 20 20 2f 2a 20 53 69 67 6e 69 66 69 63 61 6e 74 /* Significant
4a30: 20 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68 digits after th
4a40: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 e decimal point
4a50: 2a 2f 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 */. while
4a60: 28 20 28 70 72 65 63 69 73 69 6f 6e 2d 2d 29 3e ( (precision--)>
4a70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 0 ){. *
4a80: 28 62 75 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67 (bufpt++) = et_g
4a90: 65 74 64 69 67 69 74 28 26 72 65 61 6c 76 61 6c etdigit(&realval
4aa0: 75 65 2c 26 6e 73 64 29 3b 0a 20 20 20 20 20 20 ue,&nsd);.
4ab0: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 }. /* R
4ac0: 65 6d 6f 76 65 20 74 72 61 69 6c 69 6e 67 20 7a emove trailing z
4ad0: 65 72 6f 73 20 61 6e 64 20 74 68 65 20 22 2e 22 eros and the "."
4ae0: 20 69 66 20 6e 6f 20 64 69 67 69 74 73 20 66 6f if no digits fo
4af0: 6c 6c 6f 77 20 74 68 65 20 22 2e 22 20 2a 2f 0a llow the "." */.
4b00: 20 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 if( flag
4b10: 5f 72 74 7a 20 26 26 20 66 6c 61 67 5f 64 70 20 _rtz && flag_dp
4b20: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 ){. whi
4b30: 6c 65 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 le( bufpt[-1]=='
4b40: 30 27 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 0' ) *(--bufpt)
4b50: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 61 = 0;. a
4b60: 73 73 65 72 74 28 20 62 75 66 70 74 3e 7a 4f 75 ssert( bufpt>zOu
4b70: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 t );. i
4b80: 66 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 2e f( bufpt[-1]=='.
4b90: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ' ){.
4ba0: 20 69 66 28 20 66 6c 61 67 5f 61 6c 74 66 6f 72 if( flag_altfor
4bb0: 6d 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 m2 ){.
4bc0: 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d *(bufpt++) =
4bd0: 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 '0';.
4be0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
4bf0: 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 *(--bufpt
4c00: 29 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 ) = 0;.
4c10: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d }. }
4c20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
4c30: 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20 22 65 /* Add the "e
4c40: 4e 4e 4e 22 20 73 75 66 66 69 78 20 2a 2f 0a 20 NNN" suffix */.
4c50: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 if( xtype
4c60: 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 20 20 ==etEXP ){.
4c70: 20 20 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 *(bufpt++)
4c80: 3d 20 61 44 69 67 69 74 73 5b 69 6e 66 6f 70 2d = aDigits[infop-
4c90: 3e 63 68 61 72 73 65 74 5d 3b 0a 20 20 20 20 20 >charset];.
4ca0: 20 20 20 20 20 69 66 28 20 65 78 70 3c 30 20 29 if( exp<0 )
4cb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 {. *(
4cc0: 62 75 66 70 74 2b 2b 29 20 3d 20 27 2d 27 3b 20 bufpt++) = '-';
4cd0: 65 78 70 20 3d 20 2d 65 78 70 3b 0a 20 20 20 20 exp = -exp;.
4ce0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
4cf0: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 *(bufpt
4d00: 2b 2b 29 20 3d 20 27 2b 27 3b 0a 20 20 20 20 20 ++) = '+';.
4d10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
4d20: 20 69 66 28 20 65 78 70 3e 3d 31 30 30 20 29 7b if( exp>=100 ){
4d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 . *(b
4d40: 75 66 70 74 2b 2b 29 20 3d 20 28 63 68 61 72 29 ufpt++) = (char)
4d50: 28 28 65 78 70 2f 31 30 30 29 2b 27 30 27 29 3b ((exp/100)+'0');
4d60: 20 20 20 20 20 20 20 20 2f 2a 20 31 30 30 27 73 /* 100's
4d70: 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 digit */.
4d80: 20 20 20 20 20 20 65 78 70 20 25 3d 20 31 30 30 exp %= 100
4d90: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 ;. }.
4da0: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b *(bufpt+
4db0: 2b 29 20 3d 20 28 63 68 61 72 29 28 65 78 70 2f +) = (char)(exp/
4dc0: 31 30 2b 27 30 27 29 3b 20 20 20 20 20 20 20 20 10+'0');
4dd0: 20 20 20 20 20 2f 2a 20 31 30 27 73 20 64 69 67 /* 10's dig
4de0: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 it */.
4df0: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 63 68 *(bufpt++) = (ch
4e00: 61 72 29 28 65 78 70 25 31 30 2b 27 30 27 29 3b ar)(exp%10+'0');
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
4e20: 31 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 1's digit */.
4e30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2a }. *
4e40: 62 75 66 70 74 20 3d 20 30 3b 0a 0a 20 20 20 20 bufpt = 0;..
4e50: 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 76 65 /* The conve
4e60: 72 74 65 64 20 6e 75 6d 62 65 72 20 69 73 20 69 rted number is i
4e70: 6e 20 62 75 66 5b 5d 20 61 6e 64 20 7a 65 72 6f n buf[] and zero
4e80: 20 74 65 72 6d 69 6e 61 74 65 64 2e 20 4f 75 74 terminated. Out
4e90: 70 75 74 20 69 74 2e 0a 20 20 20 20 20 20 20 20 put it..
4ea0: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 ** Note that the
4eb0: 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 number is in th
4ec0: 65 20 75 73 75 61 6c 20 6f 72 64 65 72 2c 20 6e e usual order, n
4ed0: 6f 74 20 72 65 76 65 72 73 65 64 20 61 73 20 77 ot reversed as w
4ee0: 69 74 68 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 ith. ** i
4ef0: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 73 69 6f nteger conversio
4f00: 6e 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c ns. */. l
4f10: 65 6e 67 74 68 20 3d 20 28 69 6e 74 29 28 62 75 ength = (int)(bu
4f20: 66 70 74 2d 7a 4f 75 74 29 3b 0a 20 20 20 20 20 fpt-zOut);.
4f30: 20 20 20 62 75 66 70 74 20 3d 20 7a 4f 75 74 3b bufpt = zOut;
4f40: 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 70 65 .. /* Spe
4f50: 63 69 61 6c 20 63 61 73 65 3a 20 20 41 64 64 20 cial case: Add
4f60: 6c 65 61 64 69 6e 67 20 7a 65 72 6f 73 20 69 66 leading zeros if
4f70: 20 74 68 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61 the flag_zeropa
4f80: 64 20 66 6c 61 67 20 69 73 0a 20 20 20 20 20 20 d flag is.
4f90: 20 20 2a 2a 20 73 65 74 20 61 6e 64 20 77 65 20 ** set and we
4fa0: 61 72 65 20 6e 6f 74 20 6c 65 66 74 20 6a 75 73 are not left jus
4fb0: 74 69 66 69 65 64 20 2a 2f 0a 20 20 20 20 20 20 tified */.
4fc0: 20 20 69 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70 if( flag_zerop
4fd0: 61 64 20 26 26 20 21 66 6c 61 67 5f 6c 65 66 74 ad && !flag_left
4fe0: 6a 75 73 74 69 66 79 20 26 26 20 6c 65 6e 67 74 justify && lengt
4ff0: 68 20 3c 20 77 69 64 74 68 29 7b 0a 20 20 20 20 h < width){.
5000: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 int i;.
5010: 20 20 20 20 20 20 20 69 6e 74 20 6e 50 61 64 20 int nPad
5020: 3d 20 77 69 64 74 68 20 2d 20 6c 65 6e 67 74 68 = width - length
5030: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 ;. for(
5040: 69 3d 77 69 64 74 68 3b 20 69 3e 3d 6e 50 61 64 i=width; i>=nPad
5050: 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 ; i--){.
5060: 20 20 20 20 62 75 66 70 74 5b 69 5d 20 3d 20 62 bufpt[i] = b
5070: 75 66 70 74 5b 69 2d 6e 50 61 64 5d 3b 0a 20 20 ufpt[i-nPad];.
5080: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
5090: 20 20 20 20 69 20 3d 20 70 72 65 66 69 78 21 3d i = prefix!=
50a0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 0;. whi
50b0: 6c 65 28 20 6e 50 61 64 2d 2d 20 29 20 62 75 66 le( nPad-- ) buf
50c0: 70 74 5b 69 2b 2b 5d 20 3d 20 27 30 27 3b 0a 20 pt[i++] = '0';.
50d0: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 length
50e0: 3d 20 77 69 64 74 68 3b 0a 20 20 20 20 20 20 20 = width;.
50f0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 }.#endif /* !de
5100: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 fined(SQLITE_OMI
5110: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 T_FLOATING_POINT
5120: 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 62 72 65 ) */. bre
5130: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 ak;. case e
5140: 74 53 49 5a 45 3a 0a 20 20 20 20 20 20 20 20 69 tSIZE:. i
5150: 66 28 20 21 62 41 72 67 4c 69 73 74 20 29 7b 0a f( !bArgList ){.
5160: 20 20 20 20 20 20 20 20 20 20 2a 28 76 61 5f 61 *(va_a
5170: 72 67 28 61 70 2c 69 6e 74 2a 29 29 20 3d 20 70 rg(ap,int*)) = p
5180: 41 63 63 75 6d 2d 3e 6e 43 68 61 72 3b 0a 20 20 Accum->nChar;.
5190: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
51a0: 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d length = width =
51b0: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 0;. brea
51c0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 k;. case et
51d0: 50 45 52 43 45 4e 54 3a 0a 20 20 20 20 20 20 20 PERCENT:.
51e0: 20 62 75 66 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 buf[0] = '%';.
51f0: 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 bufpt = b
5200: 75 66 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 uf;. leng
5210: 74 68 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 th = 1;.
5220: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
5230: 65 20 65 74 43 48 41 52 58 3a 0a 20 20 20 20 20 e etCHARX:.
5240: 20 20 20 69 66 28 20 62 41 72 67 4c 69 73 74 20 if( bArgList
5250: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 ){. buf
5260: 70 74 20 3d 20 67 65 74 54 65 78 74 41 72 67 28 pt = getTextArg(
5270: 70 41 72 67 4c 69 73 74 29 3b 0a 20 20 20 20 20 pArgList);.
5280: 20 20 20 20 20 63 20 3d 20 62 75 66 70 74 20 3f c = bufpt ?
5290: 20 62 75 66 70 74 5b 30 5d 20 3a 20 30 3b 0a 20 bufpt[0] : 0;.
52a0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 }else{.
52b0: 20 20 20 20 20 20 20 20 63 20 3d 20 76 61 5f 61 c = va_a
52c0: 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 rg(ap,int);.
52d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 }. if
52e0: 28 20 70 72 65 63 69 73 69 6f 6e 3e 31 20 29 7b ( precision>1 ){
52f0: 0a 20 20 20 20 20 20 20 20 20 20 77 69 64 74 68 . width
5300: 20 2d 3d 20 70 72 65 63 69 73 69 6f 6e 2d 31 3b -= precision-1;
5310: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 . if( w
5320: 69 64 74 68 3e 31 20 26 26 20 21 66 6c 61 67 5f idth>1 && !flag_
5330: 6c 65 66 74 6a 75 73 74 69 66 79 20 29 7b 0a 20 leftjustify ){.
5340: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 sqlit
5350: 65 33 41 70 70 65 6e 64 43 68 61 72 28 70 41 63 e3AppendChar(pAc
5360: 63 75 6d 2c 20 77 69 64 74 68 2d 31 2c 20 27 20 cum, width-1, '
5370: 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ');.
5380: 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 width = 0;.
5390: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
53a0: 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 sqlite3AppendCh
53b0: 61 72 28 70 41 63 63 75 6d 2c 20 70 72 65 63 69 ar(pAccum, preci
53c0: 73 69 6f 6e 2d 31 2c 20 63 29 3b 0a 20 20 20 20 sion-1, c);.
53d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 }. le
53e0: 6e 67 74 68 20 3d 20 31 3b 0a 20 20 20 20 20 20 ngth = 1;.
53f0: 20 20 62 75 66 5b 30 5d 20 3d 20 63 3b 0a 20 20 buf[0] = c;.
5400: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 bufpt = bu
5410: 66 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b f;. break
5420: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53 ;. case etS
5430: 54 52 49 4e 47 3a 0a 20 20 20 20 20 20 63 61 73 TRING:. cas
5440: 65 20 65 74 44 59 4e 53 54 52 49 4e 47 3a 0a 20 e etDYNSTRING:.
5450: 20 20 20 20 20 20 20 69 66 28 20 62 41 72 67 4c if( bArgL
5460: 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 ist ){.
5470: 20 62 75 66 70 74 20 3d 20 67 65 74 54 65 78 74 bufpt = getText
5480: 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b 0a 20 Arg(pArgList);.
5490: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 }else{.
54a0: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 bufpt =
54b0: 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 va_arg(ap,char*)
54c0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
54d0: 20 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d 30 if( bufpt==0
54e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 ){. bu
54f0: 66 70 74 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 fpt = "";.
5500: 20 20 7d 65 6c 73 65 20 69 66 28 20 78 74 79 70 }else if( xtyp
5510: 65 3d 3d 65 74 44 59 4e 53 54 52 49 4e 47 20 26 e==etDYNSTRING &
5520: 26 20 21 62 41 72 67 4c 69 73 74 20 29 7b 0a 20 & !bArgList ){.
5530: 20 20 20 20 20 20 20 20 20 7a 45 78 74 72 61 20 zExtra
5540: 3d 20 62 75 66 70 74 3b 0a 20 20 20 20 20 20 20 = bufpt;.
5550: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 }. if( p
5560: 72 65 63 69 73 69 6f 6e 3e 3d 30 20 29 7b 0a 20 recision>=0 ){.
5570: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6c 65 6e for(len
5580: 67 74 68 3d 30 3b 20 6c 65 6e 67 74 68 3c 70 72 gth=0; length<pr
5590: 65 63 69 73 69 6f 6e 20 26 26 20 62 75 66 70 74 ecision && bufpt
55a0: 5b 6c 65 6e 67 74 68 5d 3b 20 6c 65 6e 67 74 68 [length]; length
55b0: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 65 ++){}. }e
55c0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6c lse{. l
55d0: 65 6e 67 74 68 20 3d 20 73 71 6c 69 74 65 33 53 ength = sqlite3S
55e0: 74 72 6c 65 6e 33 30 28 62 75 66 70 74 29 3b 0a trlen30(bufpt);.
55f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
5600: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
5610: 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 3a ase etSQLESCAPE:
5620: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53 51 . case etSQ
5630: 4c 45 53 43 41 50 45 32 3a 0a 20 20 20 20 20 20 LESCAPE2:.
5640: 63 61 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 case etSQLESCAPE
5650: 33 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 3: {. int
5660: 20 69 2c 20 6a 2c 20 6b 2c 20 6e 2c 20 69 73 6e i, j, k, n, isn
5670: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 ull;. int
5680: 20 6e 65 65 64 51 75 6f 74 65 3b 0a 20 20 20 20 needQuote;.
5690: 20 20 20 20 63 68 61 72 20 63 68 3b 0a 20 20 20 char ch;.
56a0: 20 20 20 20 20 63 68 61 72 20 71 20 3d 20 28 28 char q = ((
56b0: 78 74 79 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 xtype==etSQLESCA
56c0: 50 45 33 29 3f 27 22 27 3a 27 5c 27 27 29 3b 20 PE3)?'"':'\'');
56d0: 20 20 2f 2a 20 51 75 6f 74 65 20 63 68 61 72 61 /* Quote chara
56e0: 63 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 cter */.
56f0: 63 68 61 72 20 2a 65 73 63 61 72 67 3b 0a 0a 20 char *escarg;..
5700: 20 20 20 20 20 20 20 69 66 28 20 62 41 72 67 4c if( bArgL
5710: 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 ist ){.
5720: 20 65 73 63 61 72 67 20 3d 20 67 65 74 54 65 78 escarg = getTex
5730: 74 41 72 67 28 70 41 72 67 4c 69 73 74 29 3b 0a tArg(pArgList);.
5740: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 }else{.
5750: 20 20 20 20 20 20 20 20 20 65 73 63 61 72 67 20 escarg
5760: 3d 20 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 = va_arg(ap,char
5770: 2a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 *);. }.
5780: 20 20 20 20 20 20 69 73 6e 75 6c 6c 20 3d 20 65 isnull = e
5790: 73 63 61 72 67 3d 3d 30 3b 0a 20 20 20 20 20 20 scarg==0;.
57a0: 20 20 69 66 28 20 69 73 6e 75 6c 6c 20 29 20 65 if( isnull ) e
57b0: 73 63 61 72 67 20 3d 20 28 78 74 79 70 65 3d 3d scarg = (xtype==
57c0: 65 74 53 51 4c 45 53 43 41 50 45 32 20 3f 20 22 etSQLESCAPE2 ? "
57d0: 4e 55 4c 4c 22 20 3a 20 22 28 4e 55 4c 4c 29 22 NULL" : "(NULL)"
57e0: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 70 );. k = p
57f0: 72 65 63 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 recision;.
5800: 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 6b 21 3d for(i=n=0; k!=
5810: 30 20 26 26 20 28 63 68 3d 65 73 63 61 72 67 5b 0 && (ch=escarg[
5820: 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20 6b 2d 2d i])!=0; i++, k--
5830: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 ){. if(
5840: 20 63 68 3d 3d 71 20 29 20 20 6e 2b 2b 3b 0a 20 ch==q ) n++;.
5850: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
5860: 20 6e 65 65 64 51 75 6f 74 65 20 3d 20 21 69 73 needQuote = !is
5870: 6e 75 6c 6c 20 26 26 20 78 74 79 70 65 3d 3d 65 null && xtype==e
5880: 74 53 51 4c 45 53 43 41 50 45 32 3b 0a 20 20 20 tSQLESCAPE2;.
5890: 20 20 20 20 20 6e 20 2b 3d 20 69 20 2b 20 31 20 n += i + 1
58a0: 2b 20 6e 65 65 64 51 75 6f 74 65 2a 32 3b 0a 20 + needQuote*2;.
58b0: 20 20 20 20 20 20 20 69 66 28 20 6e 3e 65 74 42 if( n>etB
58c0: 55 46 53 49 5a 45 20 29 7b 0a 20 20 20 20 20 20 UFSIZE ){.
58d0: 20 20 20 20 62 75 66 70 74 20 3d 20 7a 45 78 74 bufpt = zExt
58e0: 72 61 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c ra = sqlite3Mall
58f0: 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20 20 20 oc( n );.
5900: 20 20 20 69 66 28 20 62 75 66 70 74 3d 3d 30 20 if( bufpt==0
5910: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ){. s
5920: 65 74 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 etStrAccumError(
5930: 70 41 63 63 75 6d 2c 20 53 54 52 41 43 43 55 4d pAccum, STRACCUM
5940: 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 20 20 20 _NOMEM);.
5950: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 return;.
5960: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
5970: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 }else{.
5980: 20 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 bufpt = buf;.
5990: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
59a0: 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 j = 0;.
59b0: 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20 29 20 if( needQuote )
59c0: 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a bufpt[j++] = q;.
59d0: 20 20 20 20 20 20 20 20 6b 20 3d 20 69 3b 0a 20 k = i;.
59e0: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 for(i=0;
59f0: 69 3c 6b 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 i<k; i++){.
5a00: 20 20 20 20 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 bufpt[j++]
5a10: 3d 20 63 68 20 3d 20 65 73 63 61 72 67 5b 69 5d = ch = escarg[i]
5a20: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 ;. if(
5a30: 63 68 3d 3d 71 20 29 20 62 75 66 70 74 5b 6a 2b ch==q ) bufpt[j+
5a40: 2b 5d 20 3d 20 63 68 3b 0a 20 20 20 20 20 20 20 +] = ch;.
5a50: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e }. if( n
5a60: 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 70 74 eedQuote ) bufpt
5a70: 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 20 20 [j++] = q;.
5a80: 20 20 20 62 75 66 70 74 5b 6a 5d 20 3d 20 30 3b bufpt[j] = 0;
5a90: 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 . length
5aa0: 3d 20 6a 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 = j;. /*
5ab0: 54 68 65 20 70 72 65 63 69 73 69 6f 6e 20 69 6e The precision in
5ac0: 20 25 71 20 61 6e 64 20 25 51 20 6d 65 61 6e 73 %q and %Q means
5ad0: 20 68 6f 77 20 6d 61 6e 79 20 69 6e 70 75 74 20 how many input
5ae0: 63 68 61 72 61 63 74 65 72 73 20 74 6f 0a 20 20 characters to.
5af0: 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 75 6d 65 ** consume
5b00: 2c 20 6e 6f 74 20 74 68 65 20 6c 65 6e 67 74 68 , not the length
5b10: 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 2e 2e of the output..
5b20: 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 66 28 .. ** if(
5b30: 20 70 72 65 63 69 73 69 6f 6e 3e 3d 30 20 26 26 precision>=0 &&
5b40: 20 70 72 65 63 69 73 69 6f 6e 3c 6c 65 6e 67 74 precision<lengt
5b50: 68 20 29 20 6c 65 6e 67 74 68 20 3d 20 70 72 65 h ) length = pre
5b60: 63 69 73 69 6f 6e 3b 20 2a 2f 0a 20 20 20 20 20 cision; */.
5b70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 break;.
5b80: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 54 }. case etT
5b90: 4f 4b 45 4e 3a 20 7b 0a 20 20 20 20 20 20 20 20 OKEN: {.
5ba0: 54 6f 6b 65 6e 20 2a 70 54 6f 6b 65 6e 20 3d 20 Token *pToken =
5bb0: 76 61 5f 61 72 67 28 61 70 2c 20 54 6f 6b 65 6e va_arg(ap, Token
5bc0: 2a 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 *);. asse
5bd0: 72 74 28 20 62 41 72 67 4c 69 73 74 3d 3d 30 20 rt( bArgList==0
5be0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 );. if( p
5bf0: 54 6f 6b 65 6e 20 26 26 20 70 54 6f 6b 65 6e 2d Token && pToken-
5c00: 3e 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 >n ){.
5c10: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 sqlite3StrAccumA
5c20: 70 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 28 63 ppend(pAccum, (c
5c30: 6f 6e 73 74 20 63 68 61 72 2a 29 70 54 6f 6b 65 onst char*)pToke
5c40: 6e 2d 3e 7a 2c 20 70 54 6f 6b 65 6e 2d 3e 6e 29 n->z, pToken->n)
5c50: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
5c60: 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64 length = wid
5c70: 74 68 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 th = 0;.
5c80: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 break;. }.
5c90: 20 20 20 20 20 63 61 73 65 20 65 74 53 52 43 4c case etSRCL
5ca0: 49 53 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 53 IST: {. S
5cb0: 72 63 4c 69 73 74 20 2a 70 53 72 63 20 3d 20 76 rcList *pSrc = v
5cc0: 61 5f 61 72 67 28 61 70 2c 20 53 72 63 4c 69 73 a_arg(ap, SrcLis
5cd0: 74 2a 29 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 t*);. int
5ce0: 20 6b 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 k = va_arg(ap,
5cf0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 73 74 int);. st
5d00: 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 ruct SrcList_ite
5d10: 6d 20 2a 70 49 74 65 6d 20 3d 20 26 70 53 72 63 m *pItem = &pSrc
5d20: 2d 3e 61 5b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 ->a[k];.
5d30: 61 73 73 65 72 74 28 20 62 41 72 67 4c 69 73 74 assert( bArgList
5d40: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 ==0 );. a
5d50: 73 73 65 72 74 28 20 6b 3e 3d 30 20 26 26 20 6b ssert( k>=0 && k
5d60: 3c 70 53 72 63 2d 3e 6e 53 72 63 20 29 3b 0a 20 <pSrc->nSrc );.
5d70: 20 20 20 20 20 20 20 69 66 28 20 70 49 74 65 6d if( pItem
5d80: 2d 3e 7a 44 61 74 61 62 61 73 65 20 29 7b 0a 20 ->zDatabase ){.
5d90: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 sqlite3
5da0: 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c StrAccumAppendAl
5db0: 6c 28 70 41 63 63 75 6d 2c 20 70 49 74 65 6d 2d l(pAccum, pItem-
5dc0: 3e 7a 44 61 74 61 62 61 73 65 29 3b 0a 20 20 20 >zDatabase);.
5dd0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 sqlite3St
5de0: 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 rAccumAppend(pAc
5df0: 63 75 6d 2c 20 22 2e 22 2c 20 31 29 3b 0a 20 20 cum, ".", 1);.
5e00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
5e10: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 sqlite3StrAccumA
5e20: 70 70 65 6e 64 41 6c 6c 28 70 41 63 63 75 6d 2c ppendAll(pAccum,
5e30: 20 70 49 74 65 6d 2d 3e 7a 4e 61 6d 65 29 3b 0a pItem->zName);.
5e40: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d length =
5e50: 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 width = 0;.
5e60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 break;.
5e70: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 }. default
5e80: 3a 20 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 : {. asse
5e90: 72 74 28 20 78 74 79 70 65 3d 3d 65 74 49 4e 56 rt( xtype==etINV
5ea0: 41 4c 49 44 20 29 3b 0a 20 20 20 20 20 20 20 20 ALID );.
5eb0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a return;. }.
5ec0: 20 20 20 20 7d 2f 2a 20 45 6e 64 20 73 77 69 74 }/* End swit
5ed0: 63 68 20 6f 76 65 72 20 74 68 65 20 66 6f 72 6d ch over the form
5ee0: 61 74 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f at type */. /
5ef0: 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 74 65 78 *. ** The tex
5f00: 74 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73 t of the convers
5f10: 69 6f 6e 20 69 73 20 70 6f 69 6e 74 65 64 20 74 ion is pointed t
5f20: 6f 20 62 79 20 22 62 75 66 70 74 22 20 61 6e 64 o by "bufpt" and
5f30: 20 69 73 0a 20 20 20 20 2a 2a 20 22 6c 65 6e 67 is. ** "leng
5f40: 74 68 22 20 63 68 61 72 61 63 74 65 72 73 20 6c th" characters l
5f50: 6f 6e 67 2e 20 20 54 68 65 20 66 69 65 6c 64 20 ong. The field
5f60: 77 69 64 74 68 20 69 73 20 22 77 69 64 74 68 22 width is "width"
5f70: 2e 20 20 44 6f 0a 20 20 20 20 2a 2a 20 74 68 65 . Do. ** the
5f80: 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 2a 2f 0a output.. */.
5f90: 20 20 20 20 77 69 64 74 68 20 2d 3d 20 6c 65 6e width -= len
5fa0: 67 74 68 3b 0a 20 20 20 20 69 66 28 20 77 69 64 gth;. if( wid
5fb0: 74 68 3e 30 20 26 26 20 21 66 6c 61 67 5f 6c 65 th>0 && !flag_le
5fc0: 66 74 6a 75 73 74 69 66 79 20 29 20 73 71 6c 69 ftjustify ) sqli
5fd0: 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 70 41 te3AppendChar(pA
5fe0: 63 63 75 6d 2c 20 77 69 64 74 68 2c 20 27 20 27 ccum, width, ' '
5ff0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 74 );. sqlite3St
6000: 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 63 rAccumAppend(pAc
6010: 63 75 6d 2c 20 62 75 66 70 74 2c 20 6c 65 6e 67 cum, bufpt, leng
6020: 74 68 29 3b 0a 20 20 20 20 69 66 28 20 77 69 64 th);. if( wid
6030: 74 68 3e 30 20 26 26 20 66 6c 61 67 5f 6c 65 66 th>0 && flag_lef
6040: 74 6a 75 73 74 69 66 79 20 29 20 73 71 6c 69 74 tjustify ) sqlit
6050: 65 33 41 70 70 65 6e 64 43 68 61 72 28 70 41 63 e3AppendChar(pAc
6060: 63 75 6d 2c 20 77 69 64 74 68 2c 20 27 20 27 29 cum, width, ' ')
6070: 3b 0a 0a 20 20 20 20 69 66 28 20 7a 45 78 74 72 ;.. if( zExtr
6080: 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 a ){. sqlit
6090: 65 33 5f 66 72 65 65 28 7a 45 78 74 72 61 29 3b e3_free(zExtra);
60a0: 0a 20 20 20 20 20 20 7a 45 78 74 72 61 20 3d 20 . zExtra =
60b0: 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 2f 2a 20 45 0;. }. }/* E
60c0: 6e 64 20 66 6f 72 20 6c 6f 6f 70 20 6f 76 65 72 nd for loop over
60d0: 20 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 the format stri
60e0: 6e 67 20 2a 2f 0a 7d 20 2f 2a 20 45 6e 64 20 6f ng */.} /* End o
60f0: 66 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f f function */../
6100: 2a 0a 2a 2a 20 45 6e 6c 61 72 67 65 20 74 68 65 *.** Enlarge the
6110: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 memory allocati
6120: 6f 6e 20 6f 6e 20 61 20 53 74 72 41 63 63 75 6d on on a StrAccum
6130: 20 6f 62 6a 65 63 74 20 73 6f 20 74 68 61 74 20 object so that
6140: 69 74 20 69 73 0a 2a 2a 20 61 62 6c 65 20 74 6f it is.** able to
6150: 20 61 63 63 65 70 74 20 61 74 20 6c 65 61 73 74 accept at least
6160: 20 4e 20 6d 6f 72 65 20 62 79 74 65 73 20 6f 66 N more bytes of
6170: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 text..**.** Ret
6180: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f urn the number o
6190: 66 20 62 79 74 65 73 20 6f 66 20 74 65 78 74 20 f bytes of text
61a0: 74 68 61 74 20 53 74 72 41 63 63 75 6d 20 69 73 that StrAccum is
61b0: 20 61 62 6c 65 20 74 6f 20 61 63 63 65 70 74 0a able to accept.
61c0: 2a 2a 20 61 66 74 65 72 20 74 68 65 20 61 74 74 ** after the att
61d0: 65 6d 70 74 65 64 20 65 6e 6c 61 72 67 65 6d 65 empted enlargeme
61e0: 6e 74 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 nt. The value r
61f0: 65 74 75 72 6e 65 64 20 6d 69 67 68 74 20 62 65 eturned might be
6200: 20 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 zero..*/.static
6210: 20 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 41 int sqlite3StrA
6220: 63 63 75 6d 45 6e 6c 61 72 67 65 28 53 74 72 41 ccumEnlarge(StrA
6230: 63 63 75 6d 20 2a 70 2c 20 69 6e 74 20 4e 29 7b ccum *p, int N){
6240: 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 . char *zNew;.
6250: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 43 68 61 assert( p->nCha
6260: 72 2b 28 69 36 34 29 4e 20 3e 3d 20 70 2d 3e 6e r+(i64)N >= p->n
6270: 41 6c 6c 6f 63 20 29 3b 20 2f 2a 20 4f 6e 6c 79 Alloc ); /* Only
6280: 20 63 61 6c 6c 65 64 20 69 66 20 72 65 61 6c 6c called if reall
6290: 79 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 69 66 y needed */. if
62a0: 28 20 70 2d 3e 61 63 63 45 72 72 6f 72 20 29 7b ( p->accError ){
62b0: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 70 2d . testcase(p-
62c0: 3e 61 63 63 45 72 72 6f 72 3d 3d 53 54 52 41 43 >accError==STRAC
62d0: 43 55 4d 5f 54 4f 4f 42 49 47 29 3b 0a 20 20 20 CUM_TOOBIG);.
62e0: 20 74 65 73 74 63 61 73 65 28 70 2d 3e 61 63 63 testcase(p->acc
62f0: 45 72 72 6f 72 3d 3d 53 54 52 41 43 43 55 4d 5f Error==STRACCUM_
6300: 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 72 65 74 75 NOMEM);. retu
6310: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 rn 0;. }. if(
6320: 70 2d 3e 6d 78 41 6c 6c 6f 63 3d 3d 30 20 29 7b p->mxAlloc==0 ){
6330: 0a 20 20 20 20 4e 20 3d 20 70 2d 3e 6e 41 6c 6c . N = p->nAll
6340: 6f 63 20 2d 20 70 2d 3e 6e 43 68 61 72 20 2d 20 oc - p->nChar -
6350: 31 3b 0a 20 20 20 20 73 65 74 53 74 72 41 63 63 1;. setStrAcc
6360: 75 6d 45 72 72 6f 72 28 70 2c 20 53 54 52 41 43 umError(p, STRAC
6370: 43 55 4d 5f 54 4f 4f 42 49 47 29 3b 0a 20 20 20 CUM_TOOBIG);.
6380: 20 72 65 74 75 72 6e 20 4e 3b 0a 20 20 7d 65 6c return N;. }el
6390: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4f se{. char *zO
63a0: 6c 64 20 3d 20 28 70 2d 3e 7a 54 65 78 74 3d 3d ld = (p->zText==
63b0: 70 2d 3e 7a 42 61 73 65 20 3f 20 30 20 3a 20 70 p->zBase ? 0 : p
63c0: 2d 3e 7a 54 65 78 74 29 3b 0a 20 20 20 20 69 36 ->zText);. i6
63d0: 34 20 73 7a 4e 65 77 20 3d 20 70 2d 3e 6e 43 68 4 szNew = p->nCh
63e0: 61 72 3b 0a 20 20 20 20 73 7a 4e 65 77 20 2b 3d ar;. szNew +=
63f0: 20 4e 20 2b 20 31 3b 0a 20 20 20 20 69 66 28 20 N + 1;. if(
6400: 73 7a 4e 65 77 2b 70 2d 3e 6e 43 68 61 72 3c 3d szNew+p->nChar<=
6410: 70 2d 3e 6d 78 41 6c 6c 6f 63 20 29 7b 0a 20 20 p->mxAlloc ){.
6420: 20 20 20 20 2f 2a 20 46 6f 72 63 65 20 65 78 70 /* Force exp
6430: 6f 6e 65 6e 74 69 61 6c 20 62 75 66 66 65 72 20 onential buffer
6440: 73 69 7a 65 20 67 72 6f 77 74 68 20 61 73 20 6c size growth as l
6450: 6f 6e 67 20 61 73 20 69 74 20 64 6f 65 73 20 6e ong as it does n
6460: 6f 74 20 6f 76 65 72 66 6c 6f 77 2c 0a 20 20 20 ot overflow,.
6470: 20 20 20 2a 2a 20 74 6f 20 61 76 6f 69 64 20 68 ** to avoid h
6480: 61 76 69 6e 67 20 74 6f 20 63 61 6c 6c 20 74 68 aving to call th
6490: 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 6f 20 6f is routine too o
64a0: 66 74 65 6e 20 2a 2f 0a 20 20 20 20 20 20 73 7a ften */. sz
64b0: 4e 65 77 20 2b 3d 20 70 2d 3e 6e 43 68 61 72 3b New += p->nChar;
64c0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 . }. if( s
64d0: 7a 4e 65 77 20 3e 20 70 2d 3e 6d 78 41 6c 6c 6f zNew > p->mxAllo
64e0: 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 c ){. sqlit
64f0: 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 e3StrAccumReset(
6500: 70 29 3b 0a 20 20 20 20 20 20 73 65 74 53 74 72 p);. setStr
6510: 41 63 63 75 6d 45 72 72 6f 72 28 70 2c 20 53 54 AccumError(p, ST
6520: 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 29 3b 0a RACCUM_TOOBIG);.
6530: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a return 0;.
6540: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 }else{.
6550: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 28 69 6e p->nAlloc = (in
6560: 74 29 73 7a 4e 65 77 3b 0a 20 20 20 20 7d 0a 20 t)szNew;. }.
6570: 20 20 20 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a if( p->db ){.
6580: 20 20 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c zNew = sql
6590: 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 70 2d ite3DbRealloc(p-
65a0: 3e 64 62 2c 20 7a 4f 6c 64 2c 20 70 2d 3e 6e 41 >db, zOld, p->nA
65b0: 6c 6c 6f 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 lloc);. }else
65c0: 7b 0a 20 20 20 20 20 20 7a 4e 65 77 20 3d 20 73 {. zNew = s
65d0: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 qlite3_realloc64
65e0: 28 7a 4f 6c 64 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 (zOld, p->nAlloc
65f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 );. }. if(
6600: 20 7a 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 61 zNew ){. a
6610: 73 73 65 72 74 28 20 70 2d 3e 7a 54 65 78 74 21 ssert( p->zText!
6620: 3d 30 20 7c 7c 20 70 2d 3e 6e 43 68 61 72 3d 3d =0 || p->nChar==
6630: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 0 );. if( z
6640: 4f 6c 64 3d 3d 30 20 26 26 20 70 2d 3e 6e 43 68 Old==0 && p->nCh
6650: 61 72 3e 30 20 29 20 6d 65 6d 63 70 79 28 7a 4e ar>0 ) memcpy(zN
6660: 65 77 2c 20 70 2d 3e 7a 54 65 78 74 2c 20 70 2d ew, p->zText, p-
6670: 3e 6e 43 68 61 72 29 3b 0a 20 20 20 20 20 20 70 >nChar);. p
6680: 2d 3e 7a 54 65 78 74 20 3d 20 7a 4e 65 77 3b 0a ->zText = zNew;.
6690: 20 20 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 p->nAlloc
66a0: 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f = sqlite3DbMallo
66b0: 63 53 69 7a 65 28 70 2d 3e 64 62 2c 20 7a 4e 65 cSize(p->db, zNe
66c0: 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 w);. }else{.
66d0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 sqlite3StrA
66e0: 63 63 75 6d 52 65 73 65 74 28 70 29 3b 0a 20 20 ccumReset(p);.
66f0: 20 20 20 20 73 65 74 53 74 72 41 63 63 75 6d 45 setStrAccumE
6700: 72 72 6f 72 28 70 2c 20 53 54 52 41 43 43 55 4d rror(p, STRACCUM
6710: 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 20 20 20 20 72 _NOMEM);. r
6720: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 eturn 0;. }.
6730: 20 7d 0a 20 20 72 65 74 75 72 6e 20 4e 3b 0a 7d }. return N;.}
6740: 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 4e ../*.** Append N
6750: 20 63 6f 70 69 65 73 20 6f 66 20 63 68 61 72 61 copies of chara
6760: 63 74 65 72 20 63 20 74 6f 20 74 68 65 20 67 69 cter c to the gi
6770: 76 65 6e 20 73 74 72 69 6e 67 20 62 75 66 66 65 ven string buffe
6780: 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 r..*/.void sqlit
6790: 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 e3AppendChar(Str
67a0: 41 63 63 75 6d 20 2a 70 2c 20 69 6e 74 20 4e 2c Accum *p, int N,
67b0: 20 63 68 61 72 20 63 29 7b 0a 20 20 74 65 73 74 char c){. test
67c0: 63 61 73 65 28 20 70 2d 3e 6e 43 68 61 72 20 2b case( p->nChar +
67d0: 20 28 69 36 34 29 4e 20 3e 20 30 78 37 66 66 66 (i64)N > 0x7fff
67e0: 66 66 66 66 20 29 3b 0a 20 20 69 66 28 20 70 2d ffff );. if( p-
67f0: 3e 6e 43 68 61 72 2b 28 69 36 34 29 4e 20 3e 3d >nChar+(i64)N >=
6800: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 26 26 20 28 4e p->nAlloc && (N
6810: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 = sqlite3StrAcc
6820: 75 6d 45 6e 6c 61 72 67 65 28 70 2c 20 4e 29 29 umEnlarge(p, N))
6830: 3c 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 <=0 ){. retur
6840: 6e 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 n;. }. while(
6850: 28 4e 2d 2d 29 3e 30 20 29 20 70 2d 3e 7a 54 65 (N--)>0 ) p->zTe
6860: 78 74 5b 70 2d 3e 6e 43 68 61 72 2b 2b 5d 20 3d xt[p->nChar++] =
6870: 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 c;.}../*.** The
6880: 20 53 74 72 41 63 63 75 6d 20 22 70 22 20 69 73 StrAccum "p" is
6890: 20 6e 6f 74 20 6c 61 72 67 65 20 65 6e 6f 75 67 not large enoug
68a0: 68 20 74 6f 20 61 63 63 65 70 74 20 4e 20 6e 65 h to accept N ne
68b0: 77 20 62 79 74 65 73 20 6f 66 20 7a 5b 5d 2e 0a w bytes of z[]..
68c0: 2a 2a 20 53 6f 20 65 6e 6c 61 72 67 65 20 69 66 ** So enlarge if
68d0: 20 66 69 72 73 74 2c 20 74 68 65 6e 20 64 6f 20 first, then do
68e0: 74 68 65 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a the append..**.*
68f0: 2a 20 54 68 69 73 20 69 73 20 61 20 68 65 6c 70 * This is a help
6900: 65 72 20 72 6f 75 74 69 6e 65 20 74 6f 20 73 71 er routine to sq
6910: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 lite3StrAccumApp
6920: 65 6e 64 28 29 20 74 68 61 74 20 64 6f 65 73 20 end() that does
6930: 73 70 65 63 69 61 6c 2d 63 61 73 65 0a 2a 2a 20 special-case.**
6940: 77 6f 72 6b 20 28 65 6e 6c 61 72 67 69 6e 67 20 work (enlarging
6950: 74 68 65 20 62 75 66 66 65 72 29 20 75 73 69 6e the buffer) usin
6960: 67 20 74 61 69 6c 20 72 65 63 75 72 73 69 6f 6e g tail recursion
6970: 2c 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a , so that the.**
6980: 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d sqlite3StrAccum
6990: 41 70 70 65 6e 64 28 29 20 72 6f 75 74 69 6e 65 Append() routine
69a0: 20 63 61 6e 20 75 73 65 20 66 61 73 74 20 63 61 can use fast ca
69b0: 6c 6c 69 6e 67 20 73 65 6d 61 6e 74 69 63 73 2e lling semantics.
69c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 .*/.static void
69d0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 SQLITE_NOINLINE
69e0: 65 6e 6c 61 72 67 65 41 6e 64 41 70 70 65 6e 64 enlargeAndAppend
69f0: 28 53 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f (StrAccum *p, co
6a00: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 nst char *z, int
6a10: 20 4e 29 7b 0a 20 20 4e 20 3d 20 73 71 6c 69 74 N){. N = sqlit
6a20: 65 33 53 74 72 41 63 63 75 6d 45 6e 6c 61 72 67 e3StrAccumEnlarg
6a30: 65 28 70 2c 20 4e 29 3b 0a 20 20 69 66 28 20 4e e(p, N);. if( N
6a40: 3e 30 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 >0 ){. memcpy
6a50: 28 26 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 (&p->zText[p->nC
6a60: 68 61 72 5d 2c 20 7a 2c 20 4e 29 3b 0a 20 20 20 har], z, N);.
6a70: 20 70 2d 3e 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a p->nChar += N;.
6a80: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 }.}../*.** App
6a90: 65 6e 64 20 4e 20 62 79 74 65 73 20 6f 66 20 74 end N bytes of t
6aa0: 65 78 74 20 66 72 6f 6d 20 7a 20 74 6f 20 74 68 ext from z to th
6ab0: 65 20 53 74 72 41 63 63 75 6d 20 6f 62 6a 65 63 e StrAccum objec
6ac0: 74 2e 20 20 49 6e 63 72 65 61 73 65 20 74 68 65 t. Increase the
6ad0: 0a 2a 2a 20 73 69 7a 65 20 6f 66 20 74 68 65 20 .** size of the
6ae0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f memory allocatio
6af0: 6e 20 66 6f 72 20 53 74 72 41 63 63 75 6d 20 69 n for StrAccum i
6b00: 66 20 6e 65 63 65 73 73 61 72 79 2e 0a 2a 2f 0a f necessary..*/.
6b10: 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 void sqlite3StrA
6b20: 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 ccumAppend(StrAc
6b30: 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 cum *p, const ch
6b40: 61 72 20 2a 7a 2c 20 69 6e 74 20 4e 29 7b 0a 20 ar *z, int N){.
6b50: 20 61 73 73 65 72 74 28 20 7a 21 3d 30 20 7c 7c assert( z!=0 ||
6b60: 20 4e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 N==0 );. asser
6b70: 74 28 20 70 2d 3e 7a 54 65 78 74 21 3d 30 20 7c t( p->zText!=0 |
6b80: 7c 20 70 2d 3e 6e 43 68 61 72 3d 3d 30 20 7c 7c | p->nChar==0 ||
6b90: 20 70 2d 3e 61 63 63 45 72 72 6f 72 20 29 3b 0a p->accError );.
6ba0: 20 20 61 73 73 65 72 74 28 20 4e 3e 3d 30 20 29 assert( N>=0 )
6bb0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 ;. assert( p->a
6bc0: 63 63 45 72 72 6f 72 3d 3d 30 20 7c 7c 20 70 2d ccError==0 || p-
6bd0: 3e 6e 41 6c 6c 6f 63 3d 3d 30 20 29 3b 0a 20 20 >nAlloc==0 );.
6be0: 69 66 28 20 70 2d 3e 6e 43 68 61 72 2b 4e 20 3e if( p->nChar+N >
6bf0: 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 = p->nAlloc ){.
6c00: 20 20 20 65 6e 6c 61 72 67 65 41 6e 64 41 70 70 enlargeAndApp
6c10: 65 6e 64 28 70 2c 7a 2c 4e 29 3b 0a 20 20 7d 65 end(p,z,N);. }e
6c20: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 lse{. assert(
6c30: 20 70 2d 3e 7a 54 65 78 74 20 29 3b 0a 20 20 20 p->zText );.
6c40: 20 70 2d 3e 6e 43 68 61 72 20 2b 3d 20 4e 3b 0a p->nChar += N;.
6c50: 20 20 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e 7a memcpy(&p->z
6c60: 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72 2d 4e 5d Text[p->nChar-N]
6c70: 2c 20 7a 2c 20 4e 29 3b 0a 20 20 7d 0a 7d 0a 0a , z, N);. }.}..
6c80: 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 68 65 /*.** Append the
6c90: 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f complete text o
6ca0: 66 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 f zero-terminate
6cb0: 64 20 73 74 72 69 6e 67 20 7a 5b 5d 20 74 6f 20 d string z[] to
6cc0: 74 68 65 20 70 20 73 74 72 69 6e 67 2e 0a 2a 2f the p string..*/
6cd0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 .void sqlite3Str
6ce0: 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 AccumAppendAll(S
6cf0: 74 72 41 63 63 75 6d 20 2a 70 2c 20 63 6f 6e 73 trAccum *p, cons
6d00: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73 71 t char *z){. sq
6d10: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 lite3StrAccumApp
6d20: 65 6e 64 28 70 2c 20 7a 2c 20 73 71 6c 69 74 65 end(p, z, sqlite
6d30: 33 53 74 72 6c 65 6e 33 30 28 7a 29 29 3b 0a 7d 3Strlen30(z));.}
6d40: 0a 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 69 73 68 20 .../*.** Finish
6d50: 6f 66 66 20 61 20 73 74 72 69 6e 67 20 62 79 20 off a string by
6d60: 6d 61 6b 69 6e 67 20 73 75 72 65 20 69 74 20 69 making sure it i
6d70: 73 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 s zero-terminate
6d80: 64 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 d..** Return a p
6d90: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 72 65 ointer to the re
6da0: 73 75 6c 74 69 6e 67 20 73 74 72 69 6e 67 2e 20 sulting string.
6db0: 20 52 65 74 75 72 6e 20 61 20 4e 55 4c 4c 0a 2a Return a NULL.*
6dc0: 2a 20 70 6f 69 6e 74 65 72 20 69 66 20 61 6e 79 * pointer if any
6dd0: 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 77 kind of error w
6de0: 61 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a as encountered..
6df0: 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 */.char *sqlite3
6e00: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 StrAccumFinish(S
6e10: 74 72 41 63 63 75 6d 20 2a 70 29 7b 0a 20 20 69 trAccum *p){. i
6e20: 66 28 20 70 2d 3e 7a 54 65 78 74 20 29 7b 0a 20 f( p->zText ){.
6e30: 20 20 20 70 2d 3e 7a 54 65 78 74 5b 70 2d 3e 6e p->zText[p->n
6e40: 43 68 61 72 5d 20 3d 20 30 3b 0a 20 20 20 20 69 Char] = 0;. i
6e50: 66 28 20 70 2d 3e 6d 78 41 6c 6c 6f 63 3e 30 20 f( p->mxAlloc>0
6e60: 26 26 20 70 2d 3e 7a 54 65 78 74 3d 3d 70 2d 3e && p->zText==p->
6e70: 7a 42 61 73 65 20 29 7b 0a 20 20 20 20 20 20 70 zBase ){. p
6e80: 2d 3e 7a 54 65 78 74 20 3d 20 73 71 6c 69 74 65 ->zText = sqlite
6e90: 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 70 2d 3e 3DbMallocRaw(p->
6ea0: 64 62 2c 20 70 2d 3e 6e 43 68 61 72 2b 31 20 29 db, p->nChar+1 )
6eb0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 7a ;. if( p->z
6ec0: 54 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 Text ){.
6ed0: 6d 65 6d 63 70 79 28 70 2d 3e 7a 54 65 78 74 2c memcpy(p->zText,
6ee0: 20 70 2d 3e 7a 42 61 73 65 2c 20 70 2d 3e 6e 43 p->zBase, p->nC
6ef0: 68 61 72 2b 31 29 3b 0a 20 20 20 20 20 20 7d 65 har+1);. }e
6f00: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74 lse{. set
6f10: 53 74 72 41 63 63 75 6d 45 72 72 6f 72 28 70 2c StrAccumError(p,
6f20: 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 29 STRACCUM_NOMEM)
6f30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
6f40: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e }. return p->
6f50: 7a 54 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 zText;.}../*.**
6f60: 52 65 73 65 74 20 61 6e 20 53 74 72 41 63 63 75 Reset an StrAccu
6f70: 6d 20 73 74 72 69 6e 67 2e 20 20 52 65 63 6c 61 m string. Recla
6f80: 69 6d 20 61 6c 6c 20 6d 61 6c 6c 6f 63 65 64 20 im all malloced
6f90: 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20 memory..*/.void
6fa0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 sqlite3StrAccumR
6fb0: 65 73 65 74 28 53 74 72 41 63 63 75 6d 20 2a 70 eset(StrAccum *p
6fc0: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 ){. if( p->zTex
6fd0: 74 21 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 t!=p->zBase ){.
6fe0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 sqlite3DbFree
6ff0: 28 70 2d 3e 64 62 2c 20 70 2d 3e 7a 54 65 78 74 (p->db, p->zText
7000: 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 7a 54 65 78 );. }. p->zTex
7010: 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 t = 0;.}../*.**
7020: 49 6e 69 74 69 61 6c 69 7a 65 20 61 20 73 74 72 Initialize a str
7030: 69 6e 67 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e ing accumulator.
7040: 0a 2a 2a 0a 2a 2a 20 70 3a 20 20 20 20 20 54 68 .**.** p: Th
7050: 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 74 6f e accumulator to
7060: 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e be initialized.
7070: 0a 2a 2a 20 64 62 3a 20 20 20 20 50 6f 69 6e 74 .** db: Point
7080: 65 72 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 er to a database
7090: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 4d 61 connection. Ma
70a0: 79 20 62 65 20 4e 55 4c 4c 2e 20 20 4c 6f 6f 6b y be NULL. Look
70b0: 61 73 69 64 65 0a 2a 2a 20 20 20 20 20 20 20 20 aside.**
70c0: 6d 65 6d 6f 72 79 20 69 73 20 75 73 65 64 20 69 memory is used i
70d0: 66 20 6e 6f 74 20 4e 55 4c 4c 2e 20 64 62 2d 3e f not NULL. db->
70e0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 69 73 20 mallocFailed is
70f0: 73 65 74 20 61 70 70 72 6f 70 72 69 61 74 65 6c set appropriatel
7100: 79 0a 2a 2a 20 20 20 20 20 20 20 20 77 68 65 6e y.** when
7110: 20 6e 6f 74 20 4e 55 4c 4c 2e 0a 2a 2a 20 7a 42 not NULL..** zB
7120: 61 73 65 3a 20 41 6e 20 69 6e 69 74 69 61 6c 20 ase: An initial
7130: 62 75 66 66 65 72 2e 20 20 4d 61 79 20 62 65 20 buffer. May be
7140: 4e 55 4c 4c 20 69 6e 20 77 68 69 63 68 20 63 61 NULL in which ca
7150: 73 65 20 74 68 65 20 69 6e 69 74 69 61 6c 20 62 se the initial b
7160: 75 66 66 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 uffer.**
7170: 69 73 20 6d 61 6c 6c 6f 63 65 64 2e 0a 2a 2a 20 is malloced..**
7180: 6e 3a 20 20 20 20 20 53 69 7a 65 20 6f 66 20 7a n: Size of z
7190: 42 61 73 65 20 69 6e 20 62 79 74 65 73 2e 20 20 Base in bytes.
71a0: 49 66 20 74 6f 74 61 6c 20 73 70 61 63 65 20 72 If total space r
71b0: 65 71 75 69 72 65 6d 65 6e 74 73 20 6e 65 76 65 equirements neve
71c0: 72 20 65 78 63 65 65 64 0a 2a 2a 20 20 20 20 20 r exceed.**
71d0: 20 20 20 6e 20 74 68 65 6e 20 6e 6f 20 6d 65 6d n then no mem
71e0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 ory allocations
71f0: 65 76 65 72 20 6f 63 63 75 72 2e 0a 2a 2a 20 6d ever occur..** m
7200: 78 3a 20 20 20 20 4d 61 78 69 6d 75 6d 20 6e 75 x: Maximum nu
7210: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f mber of bytes to
7220: 20 61 63 63 75 6d 75 6c 61 74 65 2e 20 20 49 66 accumulate. If
7230: 20 6d 78 3d 3d 30 20 74 68 65 6e 20 6e 6f 20 6d mx==0 then no m
7240: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 emory.**
7250: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 77 69 6c 6c allocations will
7260: 20 65 76 65 72 20 6f 63 63 75 72 2e 0a 2a 2f 0a ever occur..*/.
7270: 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 void sqlite3StrA
7280: 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 ccumInit(StrAccu
7290: 6d 20 2a 70 2c 20 73 71 6c 69 74 65 33 20 2a 64 m *p, sqlite3 *d
72a0: 62 2c 20 63 68 61 72 20 2a 7a 42 61 73 65 2c 20 b, char *zBase,
72b0: 69 6e 74 20 6e 2c 20 69 6e 74 20 6d 78 29 7b 0a int n, int mx){.
72c0: 20 20 70 2d 3e 7a 54 65 78 74 20 3d 20 70 2d 3e p->zText = p->
72d0: 7a 42 61 73 65 20 3d 20 7a 42 61 73 65 3b 0a 20 zBase = zBase;.
72e0: 20 70 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 70 p->db = db;. p
72f0: 2d 3e 6e 43 68 61 72 20 3d 20 30 3b 0a 20 20 70 ->nChar = 0;. p
7300: 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 6e 3b 0a 20 20 ->nAlloc = n;.
7310: 70 2d 3e 6d 78 41 6c 6c 6f 63 20 3d 20 6d 78 3b p->mxAlloc = mx;
7320: 0a 20 20 70 2d 3e 61 63 63 45 72 72 6f 72 20 3d . p->accError =
7330: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 0;.}../*.** Pri
7340: 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f nt into memory o
7350: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c btained from sql
7360: 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 55 73 iteMalloc(). Us
7370: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a e the internal.*
7380: 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 * %-conversion e
7390: 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 xtensions..*/.ch
73a0: 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 ar *sqlite3VMPri
73b0: 6e 74 66 28 73 71 6c 69 74 65 33 20 2a 64 62 2c ntf(sqlite3 *db,
73c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f const char *zFo
73d0: 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 61 70 rmat, va_list ap
73e0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 ){. char *z;.
73f0: 63 68 61 72 20 7a 42 61 73 65 5b 53 51 4c 49 54 char zBase[SQLIT
7400: 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 E_PRINT_BUF_SIZE
7410: 5d 3b 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 ];. StrAccum ac
7420: 63 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 21 c;. assert( db!
7430: 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 =0 );. sqlite3S
7440: 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 trAccumInit(&acc
7450: 2c 20 64 62 2c 20 7a 42 61 73 65 2c 20 73 69 7a , db, zBase, siz
7460: 65 6f 66 28 7a 42 61 73 65 29 2c 0a 20 20 20 20 eof(zBase),.
7470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7480: 20 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c db->aLimit[SQL
7490: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 ITE_LIMIT_LENGTH
74a0: 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 ]);. sqlite3VXP
74b0: 72 69 6e 74 66 28 26 61 63 63 2c 20 53 51 4c 49 rintf(&acc, SQLI
74c0: 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e TE_PRINTF_INTERN
74d0: 41 4c 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 AL, zFormat, ap)
74e0: 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 ;. z = sqlite3S
74f0: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 trAccumFinish(&a
7500: 63 63 29 3b 0a 20 20 69 66 28 20 61 63 63 2e 61 cc);. if( acc.a
7510: 63 63 45 72 72 6f 72 3d 3d 53 54 52 41 43 43 55 ccError==STRACCU
7520: 4d 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 64 M_NOMEM ){. d
7530: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 b->mallocFailed
7540: 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 = 1;. }. retur
7550: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 n z;.}../*.** Pr
7560: 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 int into memory
7570: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 obtained from sq
7580: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 55 liteMalloc(). U
7590: 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a se the internal.
75a0: 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 ** %-conversion
75b0: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 extensions..*/.c
75c0: 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 har *sqlite3MPri
75d0: 6e 74 66 28 73 71 6c 69 74 65 33 20 2a 64 62 2c ntf(sqlite3 *db,
75e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f const char *zFo
75f0: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 rmat, ...){. va
7600: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72 _list ap;. char
7610: 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 *z;. va_start(
7620: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 ap, zFormat);.
7630: 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 72 69 z = sqlite3VMPri
7640: 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 74 2c ntf(db, zFormat,
7650: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 ap);. va_end(a
7660: 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a p);. return z;.
7670: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 }../*.** Print i
7680: 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 nto memory obtai
7690: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 ned from sqlite3
76a0: 5f 6d 61 6c 6c 6f 63 28 29 2e 20 20 4f 6d 69 74 _malloc(). Omit
76b0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a the internal.**
76c0: 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 78 %-conversion ex
76d0: 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 61 tensions..*/.cha
76e0: 72 20 2a 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 r *sqlite3_vmpri
76f0: 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ntf(const char *
7700: 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74 zFormat, va_list
7710: 20 61 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b ap){. char *z;
7720: 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b 53 51 . char zBase[SQ
7730: 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 LITE_PRINT_BUF_S
7740: 49 5a 45 5d 3b 0a 20 20 53 74 72 41 63 63 75 6d IZE];. StrAccum
7750: 20 61 63 63 3b 0a 0a 23 69 66 64 65 66 20 53 51 acc;..#ifdef SQ
7760: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f LITE_ENABLE_API_
7770: 41 52 4d 4f 52 20 20 0a 20 20 69 66 28 20 7a 46 ARMOR . if( zF
7780: 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20 ormat==0 ){.
7790: 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 (void)SQLITE_MIS
77a0: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 USE_BKPT;. re
77b0: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 turn 0;. }.#end
77c0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 if.#ifndef SQLIT
77d0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a E_OMIT_AUTOINIT.
77e0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e if( sqlite3_in
77f0: 69 74 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74 itialize() ) ret
7800: 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 urn 0;.#endif.
7810: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 sqlite3StrAccumI
7820: 6e 69 74 28 26 61 63 63 2c 20 30 2c 20 7a 42 61 nit(&acc, 0, zBa
7830: 73 65 2c 20 73 69 7a 65 6f 66 28 7a 42 61 73 65 se, sizeof(zBase
7840: 29 2c 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 ), SQLITE_MAX_LE
7850: 4e 47 54 48 29 3b 0a 20 20 73 71 6c 69 74 65 33 NGTH);. sqlite3
7860: 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 VXPrintf(&acc, 0
7870: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a , zFormat, ap);.
7880: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72 z = sqlite3Str
7890: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 AccumFinish(&acc
78a0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d );. return z;.}
78b0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e ../*.** Print in
78c0: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e to memory obtain
78d0: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f ed from sqlite3_
78e0: 6d 61 6c 6c 6f 63 28 29 28 29 2e 20 20 4f 6d 69 malloc()(). Omi
78f0: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a t the internal.*
7900: 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 * %-conversion e
7910: 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 xtensions..*/.ch
7920: 61 72 20 2a 73 71 6c 69 74 65 33 5f 6d 70 72 69 ar *sqlite3_mpri
7930: 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ntf(const char *
7940: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 zFormat, ...){.
7950: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 va_list ap;. c
7960: 68 61 72 20 2a 7a 3b 0a 23 69 66 6e 64 65 66 20 har *z;.#ifndef
7970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f SQLITE_OMIT_AUTO
7980: 49 4e 49 54 0a 20 20 69 66 28 20 73 71 6c 69 74 INIT. if( sqlit
7990: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 e3_initialize()
79a0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64 ) return 0;.#end
79b0: 69 66 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 if. va_start(ap
79c0: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 , zFormat);. z
79d0: 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e = sqlite3_vmprin
79e0: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b tf(zFormat, ap);
79f0: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 . va_end(ap);.
7a00: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a return z;.}../*
7a10: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 .** sqlite3_snpr
7a20: 69 6e 74 66 28 29 20 77 6f 72 6b 73 20 6c 69 6b intf() works lik
7a30: 65 20 73 6e 70 72 69 6e 74 66 28 29 20 65 78 63 e snprintf() exc
7a40: 65 70 74 20 74 68 61 74 20 69 74 20 69 67 6e 6f ept that it igno
7a50: 72 65 73 20 74 68 65 0a 2a 2a 20 63 75 72 72 65 res the.** curre
7a60: 6e 74 20 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e nt locale settin
7a70: 67 73 2e 20 20 54 68 69 73 20 69 73 20 69 6d 70 gs. This is imp
7a80: 6f 72 74 61 6e 74 20 66 6f 72 20 53 51 4c 69 74 ortant for SQLit
7a90: 65 20 62 65 63 61 75 73 65 20 77 65 0a 2a 2a 20 e because we.**
7aa0: 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 are not able to
7ab0: 75 73 65 20 61 20 22 2c 22 20 61 73 20 74 68 65 use a "," as the
7ac0: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 69 decimal point i
7ad0: 6e 20 70 6c 61 63 65 20 6f 66 20 22 2e 22 20 61 n place of "." a
7ae0: 73 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62 s.** specified b
7af0: 79 20 73 6f 6d 65 20 6c 6f 63 61 6c 65 73 2e 0a y some locales..
7b00: 2a 2a 0a 2a 2a 20 4f 6f 70 73 3a 20 20 54 68 65 **.** Oops: The
7b10: 20 66 69 72 73 74 20 74 77 6f 20 61 72 67 75 6d first two argum
7b20: 65 6e 74 73 20 6f 66 20 73 71 6c 69 74 65 33 5f ents of sqlite3_
7b30: 73 6e 70 72 69 6e 74 66 28 29 20 61 72 65 20 62 snprintf() are b
7b40: 61 63 6b 77 61 72 64 73 0a 2a 2a 20 66 72 6f 6d ackwards.** from
7b50: 20 74 68 65 20 73 6e 70 72 69 6e 74 66 28 29 20 the snprintf()
7b60: 73 74 61 6e 64 61 72 64 2e 20 20 55 6e 66 6f 72 standard. Unfor
7b70: 74 75 6e 61 74 65 6c 79 2c 20 69 74 20 69 73 20 tunately, it is
7b80: 74 6f 6f 20 6c 61 74 65 20 74 6f 20 63 68 61 6e too late to chan
7b90: 67 65 0a 2a 2a 20 74 68 69 73 20 77 69 74 68 6f ge.** this witho
7ba0: 75 74 20 62 72 65 61 6b 69 6e 67 20 63 6f 6d 70 ut breaking comp
7bb0: 61 74 69 62 69 6c 69 74 79 2c 20 73 6f 20 77 65 atibility, so we
7bc0: 20 6a 75 73 74 20 68 61 76 65 20 74 6f 20 6c 69 just have to li
7bd0: 76 65 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6d ve with the.** m
7be0: 69 73 74 61 6b 65 2e 0a 2a 2a 0a 2a 2a 20 73 71 istake..**.** sq
7bf0: 6c 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 lite3_vsnprintf(
7c00: 29 20 69 73 20 74 68 65 20 76 61 72 61 72 67 73 ) is the varargs
7c10: 20 76 65 72 73 69 6f 6e 2e 0a 2a 2f 0a 63 68 61 version..*/.cha
7c20: 72 20 2a 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 r *sqlite3_vsnpr
7c30: 69 6e 74 66 28 69 6e 74 20 6e 2c 20 63 68 61 72 intf(int n, char
7c40: 20 2a 7a 42 75 66 2c 20 63 6f 6e 73 74 20 63 68 *zBuf, const ch
7c50: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f ar *zFormat, va_
7c60: 6c 69 73 74 20 61 70 29 7b 0a 20 20 53 74 72 41 list ap){. StrA
7c70: 63 63 75 6d 20 61 63 63 3b 0a 20 20 69 66 28 20 ccum acc;. if(
7c80: 6e 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 42 n<=0 ) return zB
7c90: 75 66 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 uf;.#ifdef SQLIT
7ca0: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d E_ENABLE_API_ARM
7cb0: 4f 52 0a 20 20 69 66 28 20 7a 42 75 66 3d 3d 30 OR. if( zBuf==0
7cc0: 20 7c 7c 20 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 || zFormat==0 )
7cd0: 20 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c {. (void)SQL
7ce0: 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b ITE_MISUSE_BKPT;
7cf0: 0a 20 20 20 20 69 66 28 20 7a 42 75 66 20 29 20 . if( zBuf )
7d00: 7a 42 75 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 zBuf[0] = 0;.
7d10: 20 72 65 74 75 72 6e 20 7a 42 75 66 3b 0a 20 20 return zBuf;.
7d20: 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 }.#endif. sqlit
7d30: 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 e3StrAccumInit(&
7d40: 61 63 63 2c 20 30 2c 20 7a 42 75 66 2c 20 6e 2c acc, 0, zBuf, n,
7d50: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 0);. sqlite3VX
7d60: 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 Printf(&acc, 0,
7d70: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 zFormat, ap);.
7d80: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 53 74 return sqlite3St
7d90: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 rAccumFinish(&ac
7da0: 63 29 3b 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 c);.}.char *sqli
7db0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 69 6e 74 te3_snprintf(int
7dc0: 20 6e 2c 20 63 68 61 72 20 2a 7a 42 75 66 2c 20 n, char *zBuf,
7dd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 const char *zFor
7de0: 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 63 68 61 mat, ...){. cha
7df0: 72 20 2a 7a 3b 0a 20 20 76 61 5f 6c 69 73 74 20 r *z;. va_list
7e00: 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 ap;. va_start(a
7e10: 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 20 p,zFormat);. z
7e20: 3d 20 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 69 = sqlite3_vsnpri
7e30: 6e 74 66 28 6e 2c 20 7a 42 75 66 2c 20 7a 46 6f ntf(n, zBuf, zFo
7e40: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f rmat, ap);. va_
7e50: 65 6e 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 end(ap);. retur
7e60: 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 n z;.}../*.** Th
7e70: 69 73 20 69 73 20 74 68 65 20 72 6f 75 74 69 6e is is the routin
7e80: 65 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 e that actually
7e90: 66 6f 72 6d 61 74 73 20 74 68 65 20 73 71 6c 69 formats the sqli
7ea0: 74 65 33 5f 6c 6f 67 28 29 20 6d 65 73 73 61 67 te3_log() messag
7eb0: 65 2e 0a 2a 2a 20 57 65 20 68 6f 75 73 65 20 69 e..** We house i
7ec0: 74 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 20 t in a separate
7ed0: 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c routine from sql
7ee0: 69 74 65 33 5f 6c 6f 67 28 29 20 74 6f 20 61 76 ite3_log() to av
7ef0: 6f 69 64 20 75 73 69 6e 67 0a 2a 2a 20 73 74 61 oid using.** sta
7f00: 63 6b 20 73 70 61 63 65 20 6f 6e 20 73 6d 61 6c ck space on smal
7f10: 6c 2d 73 74 61 63 6b 20 73 79 73 74 65 6d 73 20 l-stack systems
7f20: 77 68 65 6e 20 6c 6f 67 67 69 6e 67 20 69 73 20 when logging is
7f30: 64 69 73 61 62 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 disabled..**.**
7f40: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 6d 75 sqlite3_log() mu
7f50: 73 74 20 72 65 6e 64 65 72 20 69 6e 74 6f 20 61 st render into a
7f60: 20 73 74 61 74 69 63 20 62 75 66 66 65 72 2e 20 static buffer.
7f70: 20 49 74 20 63 61 6e 6e 6f 74 20 64 79 6e 61 6d It cannot dynam
7f80: 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 ically.** alloca
7f90: 74 65 20 6d 65 6d 6f 72 79 20 62 65 63 61 75 73 te memory becaus
7fa0: 65 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 61 e it might be ca
7fb0: 6c 6c 65 64 20 77 68 69 6c 65 20 74 68 65 20 6d lled while the m
7fc0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a emory allocator.
7fd0: 2a 2a 20 6d 75 74 65 78 20 69 73 20 68 65 6c 64 ** mutex is held
7fe0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 ..*/.static void
7ff0: 20 72 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69 6e renderLogMsg(in
8000: 74 20 69 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 t iErrCode, cons
8010: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c t char *zFormat,
8020: 20 76 61 5f 6c 69 73 74 20 61 70 29 7b 0a 20 20 va_list ap){.
8030: 53 74 72 41 63 63 75 6d 20 61 63 63 3b 20 20 20 StrAccum acc;
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8050: 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 /* String
8060: 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a accumulator */.
8070: 20 20 63 68 61 72 20 7a 4d 73 67 5b 53 51 4c 49 char zMsg[SQLI
8080: 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a TE_PRINT_BUF_SIZ
8090: 45 2a 33 5d 3b 20 20 20 20 2f 2a 20 43 6f 6d 70 E*3]; /* Comp
80a0: 6c 65 74 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 lete log message
80b0: 20 2a 2f 0a 0a 20 20 73 71 6c 69 74 65 33 53 74 */.. sqlite3St
80c0: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c rAccumInit(&acc,
80d0: 20 30 2c 20 7a 4d 73 67 2c 20 73 69 7a 65 6f 66 0, zMsg, sizeof
80e0: 28 7a 4d 73 67 29 2c 20 30 29 3b 0a 20 20 73 71 (zMsg), 0);. sq
80f0: 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61 lite3VXPrintf(&a
8100: 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 cc, 0, zFormat,
8110: 61 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 47 6c ap);. sqlite3Gl
8120: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 28 obalConfig.xLog(
8130: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e sqlite3GlobalCon
8140: 66 69 67 2e 70 4c 6f 67 41 72 67 2c 20 69 45 72 fig.pLogArg, iEr
8150: 72 43 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 20 rCode,.
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8170: 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 sqlite3StrAccu
8180: 6d 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0a mFinish(&acc));.
8190: 7d 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 6d 61 74 20 }../*.** Format
81a0: 61 6e 64 20 77 72 69 74 65 20 61 20 6d 65 73 73 and write a mess
81b0: 61 67 65 20 74 6f 20 74 68 65 20 6c 6f 67 20 69 age to the log i
81c0: 66 20 6c 6f 67 67 69 6e 67 20 69 73 20 65 6e 61 f logging is ena
81d0: 62 6c 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 bled..*/.void sq
81e0: 6c 69 74 65 33 5f 6c 6f 67 28 69 6e 74 20 69 45 lite3_log(int iE
81f0: 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 rrCode, const ch
8200: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e ar *zFormat, ...
8210: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b ){. va_list ap;
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
8240: 56 61 72 61 72 67 20 6c 69 73 74 20 2a 2f 0a 20 Vararg list */.
8250: 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 if( sqlite3Glob
8260: 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 20 29 7b alConfig.xLog ){
8270: 0a 20 20 20 20 76 61 5f 73 74 61 72 74 28 61 70 . va_start(ap
8280: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 20 20 , zFormat);.
8290: 72 65 6e 64 65 72 4c 6f 67 4d 73 67 28 69 45 72 renderLogMsg(iEr
82a0: 72 43 6f 64 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 rCode, zFormat,
82b0: 61 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e 64 28 ap);. va_end(
82c0: 61 70 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 20 ap);. }.}..#if
82d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 defined(SQLITE_D
82e0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 EBUG) || defined
82f0: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f (SQLITE_HAVE_OS_
8300: 54 52 41 43 45 29 0a 2f 2a 0a 2a 2a 20 41 20 76 TRACE)./*.** A v
8310: 65 72 73 69 6f 6e 20 6f 66 20 70 72 69 6e 74 66 ersion of printf
8320: 28 29 20 74 68 61 74 20 75 6e 64 65 72 73 74 61 () that understa
8330: 6e 64 73 20 25 6c 6c 64 2e 20 20 55 73 65 64 20 nds %lld. Used
8340: 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0a 2a for debugging..*
8350: 2a 20 54 68 65 20 70 72 69 6e 74 66 28 29 20 62 * The printf() b
8360: 75 69 6c 74 20 69 6e 74 6f 20 73 6f 6d 65 20 76 uilt into some v
8370: 65 72 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64 6f ersions of windo
8380: 77 73 20 64 6f 65 73 20 6e 6f 74 20 75 6e 64 65 ws does not unde
8390: 72 73 74 61 6e 64 20 25 6c 6c 64 0a 2a 2a 20 61 rstand %lld.** a
83a0: 6e 64 20 73 65 67 66 61 75 6c 74 73 20 69 66 20 nd segfaults if
83b0: 79 6f 75 20 67 69 76 65 20 69 74 20 61 20 6c 6f you give it a lo
83c0: 6e 67 20 6c 6f 6e 67 20 69 6e 74 2e 0a 2a 2f 0a ng long int..*/.
83d0: 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 void sqlite3Debu
83e0: 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 gPrintf(const ch
83f0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e ar *zFormat, ...
8400: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b ){. va_list ap;
8410: 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b . StrAccum acc;
8420: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 30 . char zBuf[500
8430: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 ];. sqlite3StrA
8440: 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 30 ccumInit(&acc, 0
8450: 2c 20 7a 42 75 66 2c 20 73 69 7a 65 6f 66 28 7a , zBuf, sizeof(z
8460: 42 75 66 29 2c 20 30 29 3b 0a 20 20 76 61 5f 73 Buf), 0);. va_s
8470: 74 61 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74 29 tart(ap,zFormat)
8480: 3b 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69 ;. sqlite3VXPri
8490: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f ntf(&acc, 0, zFo
84a0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f rmat, ap);. va_
84b0: 65 6e 64 28 61 70 29 3b 0a 20 20 73 71 6c 69 74 end(ap);. sqlit
84c0: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 e3StrAccumFinish
84d0: 28 26 61 63 63 29 3b 0a 20 20 66 70 72 69 6e 74 (&acc);. fprint
84e0: 66 28 73 74 64 6f 75 74 2c 22 25 73 22 2c 20 7a f(stdout,"%s", z
84f0: 42 75 66 29 3b 0a 20 20 66 66 6c 75 73 68 28 73 Buf);. fflush(s
8500: 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 tdout);.}.#endif
8510: 0a 0a 0a 2f 2a 0a 2a 2a 20 76 61 72 69 61 62 6c .../*.** variabl
8520: 65 2d 61 72 67 75 6d 65 6e 74 20 77 72 61 70 70 e-argument wrapp
8530: 65 72 20 61 72 6f 75 6e 64 20 73 71 6c 69 74 65 er around sqlite
8540: 33 56 58 50 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a 3VXPrintf()..*/.
8550: 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 void sqlite3XPri
8560: 6e 74 66 28 53 74 72 41 63 63 75 6d 20 2a 70 2c ntf(StrAccum *p,
8570: 20 75 33 32 20 62 46 6c 61 67 73 2c 20 63 6f 6e u32 bFlags, con
8580: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 st char *zFormat
8590: 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 , ...){. va_lis
85a0: 74 20 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 t ap;. va_start
85b0: 28 61 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 (ap,zFormat);.
85c0: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 sqlite3VXPrintf(
85d0: 70 2c 20 62 46 6c 61 67 73 2c 20 7a 46 6f 72 6d p, bFlags, zForm
85e0: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e at, ap);. va_en
85f0: 64 28 61 70 29 3b 0a 7d 0a d(ap);.}.