0000: 2f 2a 0a 2a 2a 20 54 68 65 20 22 70 72 69 6e 74 /*.** The "print
0010: 66 22 20 63 6f 64 65 20 74 68 61 74 20 66 6f 6c f" code that fol
0020: 6c 6f 77 73 20 64 61 74 65 73 20 66 72 6f 6d 20 lows dates from
0030: 74 68 65 20 31 39 38 30 27 73 2e 20 20 49 74 20 the 1980's. It
0040: 69 73 20 69 6e 0a 2a 2a 20 74 68 65 20 70 75 62 is in.** the pub
0050: 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 lic domain. The
0060: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 65 6e original commen
0070: 74 73 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 ts are included
0080: 68 65 72 65 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 here for.** comp
0090: 6c 65 74 65 6e 65 73 73 2e 20 20 54 68 65 79 20 leteness. They
00a0: 61 72 65 20 76 65 72 79 20 6f 75 74 2d 6f 66 2d are very out-of-
00b0: 64 61 74 65 20 62 75 74 20 6d 69 67 68 74 20 62 date but might b
00c0: 65 20 75 73 65 66 75 6c 20 61 73 0a 2a 2a 20 61 e useful as.** a
00d0: 6e 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 66 n historical ref
00e0: 65 72 65 6e 63 65 2e 20 20 4d 6f 73 74 20 6f 66 erence. Most of
00f0: 20 74 68 65 20 22 65 6e 68 61 6e 63 65 6d 65 6e the "enhancemen
0100: 74 73 22 20 68 61 76 65 20 62 65 65 6e 20 62 61 ts" have been ba
0110: 63 6b 65 64 0a 2a 2a 20 6f 75 74 20 73 6f 20 74 cked.** out so t
0120: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e hat the function
0130: 61 6c 69 74 79 20 69 73 20 6e 6f 77 20 74 68 65 ality is now the
0140: 20 73 61 6d 65 20 61 73 20 73 74 61 6e 64 61 72 same as standar
0150: 64 20 70 72 69 6e 74 66 28 29 2e 0a 2a 2a 0a 2a d printf()..**.*
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
01a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 *********.**.**
01b0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 6f The following mo
01c0: 64 75 6c 65 73 20 69 73 20 61 6e 20 65 6e 68 61 dules is an enha
01d0: 6e 63 65 64 20 72 65 70 6c 61 63 65 6d 65 6e 74 nced replacement
01e0: 20 66 6f 72 20 74 68 65 20 22 70 72 69 6e 74 66 for the "printf
01f0: 22 20 73 75 62 72 6f 75 74 69 6e 65 73 0a 2a 2a " subroutines.**
0200: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 73 74 found in the st
0210: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 andard C library
0220: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 . The following
0230: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 61 72 enhancements ar
0240: 65 0a 2a 2a 20 73 75 70 70 6f 72 74 65 64 3a 0a e.** supported:.
0250: 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20 20 41 64 **.** + Ad
0260: 64 69 74 69 6f 6e 61 6c 20 66 75 6e 63 74 69 6f ditional functio
0270: 6e 73 2e 20 20 54 68 65 20 73 74 61 6e 64 61 72 ns. The standar
0280: 64 20 73 65 74 20 6f 66 20 22 70 72 69 6e 74 66 d set of "printf
0290: 22 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 " functions.**
02a0: 20 20 20 20 20 20 20 69 6e 63 6c 75 64 65 73 20 includes
02b0: 70 72 69 6e 74 66 2c 20 66 70 72 69 6e 74 66 2c printf, fprintf,
02c0: 20 73 70 72 69 6e 74 66 2c 20 76 70 72 69 6e 74 sprintf, vprint
02d0: 66 2c 20 76 66 70 72 69 6e 74 66 2c 20 61 6e 64 f, vfprintf, and
02e0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 76 73 70 72 .** vspr
02f0: 69 6e 74 66 2e 20 20 54 68 69 73 20 6d 6f 64 75 intf. This modu
0300: 6c 65 20 61 64 64 73 20 74 68 65 20 66 6f 6c 6c le adds the foll
0310: 6f 77 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 owing:.**.**
0320: 20 20 20 20 20 20 20 2a 20 20 73 6e 70 72 69 6e * snprin
0330: 74 66 20 2d 2d 20 57 6f 72 6b 73 20 6c 69 6b 65 tf -- Works like
0340: 20 73 70 72 69 6e 74 66 2c 20 62 75 74 20 68 61 sprintf, but ha
0350: 73 20 61 6e 20 65 78 74 72 61 20 61 72 67 75 6d s an extra argum
0360: 65 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 ent.**
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0380: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a which is the siz
0390: 65 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20 e of the buffer
03a0: 77 72 69 74 74 65 6e 20 74 6f 2e 0a 2a 2a 0a 2a written to..**.*
03b0: 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20 6d * * m
03c0: 70 72 69 6e 74 66 20 2d 2d 20 20 53 69 6d 69 6c printf -- Simil
03d0: 61 72 20 74 6f 20 73 70 72 69 6e 74 66 2e 20 20 ar to sprintf.
03e0: 57 72 69 74 65 73 20 6f 75 74 70 75 74 20 74 6f Writes output to
03f0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 memory.**
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0410: 20 20 20 20 6f 62 74 61 69 6e 65 64 20 66 72 6f obtained fro
0420: 6d 20 6d 61 6c 6c 6f 63 2e 0a 2a 2a 0a 2a 2a 20 m malloc..**.**
0430: 20 20 20 20 20 20 20 20 20 20 2a 20 20 78 70 72 * xpr
0440: 69 6e 74 66 20 2d 2d 20 20 43 61 6c 6c 73 20 61 intf -- Calls a
0450: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64 69 73 function to dis
0460: 70 6f 73 65 20 6f 66 20 6f 75 74 70 75 74 2e 0a pose of output..
0470: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 **.**
0480: 2a 20 20 6e 70 72 69 6e 74 66 20 2d 2d 20 20 4e * nprintf -- N
0490: 6f 20 6f 75 74 70 75 74 2c 20 62 75 74 20 72 65 o output, but re
04a0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 turns the number
04b0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 0a 2a of characters.*
04c0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 *
04d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 61 74 20 that
04e0: 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 would have been
04f0: 6f 75 74 70 75 74 20 62 79 20 70 72 69 6e 74 66 output by printf
0500: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 ..**.**
0510: 20 20 2a 20 20 41 20 76 2d 20 76 65 72 73 69 6f * A v- versio
0520: 6e 20 28 65 78 3a 20 76 73 6e 70 72 69 6e 74 66 n (ex: vsnprintf
0530: 29 20 6f 66 20 65 76 65 72 79 20 66 75 6e 63 74 ) of every funct
0540: 69 6f 6e 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 20 ion is also.**
0550: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 70 70 supp
0560: 6c 69 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 lied..**.**
0570: 20 2b 20 20 41 20 66 65 77 20 65 78 74 65 6e 73 + A few extens
0580: 69 6f 6e 73 20 74 6f 20 74 68 65 20 66 6f 72 6d ions to the form
0590: 61 74 74 69 6e 67 20 6e 6f 74 61 74 69 6f 6e 20 atting notation
05a0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 3a 0a 2a are supported:.*
05b0: 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a *.** *
05c0: 20 20 54 68 65 20 22 3d 22 20 66 6c 61 67 20 28 The "=" flag (
05d0: 73 69 6d 69 6c 61 72 20 74 6f 20 22 2d 22 29 20 similar to "-")
05e0: 63 61 75 73 65 73 20 74 68 65 20 6f 75 74 70 75 causes the outpu
05f0: 74 20 74 6f 20 62 65 0a 2a 2a 20 20 20 20 20 20 t to be.**
0600: 20 20 20 20 20 20 20 20 62 65 20 63 65 6e 74 65 be cente
0610: 72 65 64 20 69 6e 20 74 68 65 20 61 70 70 72 6f red in the appro
0620: 70 72 69 61 74 65 6c 79 20 73 69 7a 65 64 20 66 priately sized f
0630: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 ield..**.**
0640: 20 20 20 20 20 20 2a 20 20 54 68 65 20 25 62 20 * The %b
0650: 66 69 65 6c 64 20 6f 75 74 70 75 74 73 20 61 6e field outputs an
0660: 20 69 6e 74 65 67 65 72 20 69 6e 20 62 69 6e 61 integer in bina
0670: 72 79 20 6e 6f 74 61 74 69 6f 6e 2e 0a 2a 2a 0a ry notation..**.
0680: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 2a 20 20 ** *
0690: 54 68 65 20 25 63 20 66 69 65 6c 64 20 6e 6f 77 The %c field now
06a0: 20 61 63 63 65 70 74 73 20 61 20 70 72 65 63 69 accepts a preci
06b0: 73 69 6f 6e 2e 20 20 54 68 65 20 63 68 61 72 61 sion. The chara
06c0: 63 74 65 72 20 6f 75 74 70 75 74 0a 2a 2a 20 20 cter output.**
06d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 72 is r
06e0: 65 70 65 61 74 65 64 20 62 79 20 74 68 65 20 6e epeated by the n
06f0: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 umber of times t
0700: 68 65 20 70 72 65 63 69 73 69 6f 6e 20 73 70 65 he precision spe
0710: 63 69 66 69 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 cifies..**.**
0720: 20 20 20 20 20 20 20 20 2a 20 20 54 68 65 20 25 * The %
0730: 27 20 66 69 65 6c 64 20 77 6f 72 6b 73 20 6c 69 ' field works li
0740: 6b 65 20 25 63 2c 20 62 75 74 20 74 61 6b 65 73 ke %c, but takes
0750: 20 61 73 20 69 74 73 20 63 68 61 72 61 63 74 65 as its characte
0760: 72 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 r the.**
0770: 20 20 20 20 20 20 6e 65 78 74 20 63 68 61 72 61 next chara
0780: 63 74 65 72 20 6f 66 20 74 68 65 20 66 6f 72 6d cter of the form
0790: 61 74 20 73 74 72 69 6e 67 2c 20 69 6e 73 74 65 at string, inste
07a0: 61 64 20 6f 66 20 74 68 65 20 6e 65 78 74 0a 2a ad of the next.*
07b0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 * a
07c0: 72 67 75 6d 65 6e 74 2e 20 20 46 6f 72 20 65 78 rgument. For ex
07d0: 61 6d 70 6c 65 2c 20 20 70 72 69 6e 74 66 28 22 ample, printf("
07e0: 25 2e 37 38 27 2d 22 29 20 20 70 72 69 6e 74 73 %.78'-") prints
07f0: 20 37 38 20 6d 69 6e 75 73 0a 2a 2a 20 20 20 20 78 minus.**
0800: 20 20 20 20 20 20 20 20 20 20 73 69 67 6e 73 2c signs,
0810: 20 74 68 65 20 73 61 6d 65 20 61 73 20 20 70 72 the same as pr
0820: 69 6e 74 66 28 22 25 2e 37 38 63 22 2c 27 2d 27 intf("%.78c",'-'
0830: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 2b 20 )..**.** +
0840: 20 57 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 75 When compiled u
0850: 73 69 6e 67 20 47 43 43 20 6f 6e 20 61 20 53 50 sing GCC on a SP
0860: 41 52 43 2c 20 74 68 69 73 20 76 65 72 73 69 6f ARC, this versio
0870: 6e 20 6f 66 20 70 72 69 6e 74 66 20 69 73 0a 2a n of printf is.*
0880: 2a 20 20 20 20 20 20 20 20 20 66 61 73 74 65 72 * faster
0890: 20 74 68 61 6e 20 74 68 65 20 6c 69 62 72 61 72 than the librar
08a0: 79 20 70 72 69 6e 74 66 20 66 6f 72 20 53 55 4e y printf for SUN
08b0: 20 4f 53 20 34 2e 31 2e 0a 2a 2a 0a 2a 2a 20 20 OS 4.1..**.**
08c0: 20 20 20 20 2b 20 20 41 6c 6c 20 66 75 6e 63 74 + All funct
08d0: 69 6f 6e 73 20 61 72 65 20 66 75 6c 6c 79 20 72 ions are fully r
08e0: 65 65 6e 74 72 61 6e 74 2e 0a 2a 2a 0a 2a 2f 0a eentrant..**.*/.
08f0: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 #include "sqlite
0900: 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 43 6f Int.h"../*.** Co
0910: 6e 76 65 72 73 69 6f 6e 20 74 79 70 65 73 20 66 nversion types f
0920: 61 6c 6c 20 69 6e 74 6f 20 76 61 72 69 6f 75 73 all into various
0930: 20 63 61 74 65 67 6f 72 69 65 73 20 61 73 20 64 categories as d
0940: 65 66 69 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a efined by the.**
0950: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 6e 75 6d 65 following enume
0960: 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 ration..*/.#defi
0970: 6e 65 20 65 74 52 41 44 49 58 20 20 20 20 20 20 ne etRADIX
0980: 20 31 20 2f 2a 20 49 6e 74 65 67 65 72 20 74 79 1 /* Integer ty
0990: 70 65 73 2e 20 20 25 64 2c 20 25 78 2c 20 25 6f pes. %d, %x, %o
09a0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 2a , and so forth *
09b0: 2f 0a 23 64 65 66 69 6e 65 20 65 74 46 4c 4f 41 /.#define etFLOA
09c0: 54 20 20 20 20 20 20 20 32 20 2f 2a 20 46 6c 6f T 2 /* Flo
09d0: 61 74 69 6e 67 20 70 6f 69 6e 74 2e 20 20 25 66 ating point. %f
09e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 45 58 */.#define etEX
09f0: 50 20 20 20 20 20 20 20 20 20 33 20 2f 2a 20 45 P 3 /* E
0a00: 78 70 6f 6e 65 6e 74 69 6f 6e 61 6c 20 6e 6f 74 xponentional not
0a10: 61 74 69 6f 6e 2e 20 25 65 20 61 6e 64 20 25 45 ation. %e and %E
0a20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 47 45 */.#define etGE
0a30: 4e 45 52 49 43 20 20 20 20 20 34 20 2f 2a 20 46 NERIC 4 /* F
0a40: 6c 6f 61 74 69 6e 67 20 6f 72 20 65 78 70 6f 6e loating or expon
0a50: 65 6e 74 69 61 6c 2c 20 64 65 70 65 6e 64 69 6e ential, dependin
0a60: 67 20 6f 6e 20 65 78 70 6f 6e 65 6e 74 2e 20 25 g on exponent. %
0a70: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 g */.#define etS
0a80: 49 5a 45 20 20 20 20 20 20 20 20 35 20 2f 2a 20 IZE 5 /*
0a90: 52 65 74 75 72 6e 20 6e 75 6d 62 65 72 20 6f 66 Return number of
0aa0: 20 63 68 61 72 61 63 74 65 72 73 20 70 72 6f 63 characters proc
0ab0: 65 73 73 65 64 20 73 6f 20 66 61 72 2e 20 25 6e essed so far. %n
0ac0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 65 74 53 54 */.#define etST
0ad0: 52 49 4e 47 20 20 20 20 20 20 36 20 2f 2a 20 53 RING 6 /* S
0ae0: 74 72 69 6e 67 73 2e 20 25 73 20 2a 2f 0a 23 64 trings. %s */.#d
0af0: 65 66 69 6e 65 20 65 74 44 59 4e 53 54 52 49 4e efine etDYNSTRIN
0b00: 47 20 20 20 37 20 2f 2a 20 44 79 6e 61 6d 69 63 G 7 /* Dynamic
0b10: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 ally allocated s
0b20: 74 72 69 6e 67 73 2e 20 25 7a 20 2a 2f 0a 23 64 trings. %z */.#d
0b30: 65 66 69 6e 65 20 65 74 50 45 52 43 45 4e 54 20 efine etPERCENT
0b40: 20 20 20 20 38 20 2f 2a 20 50 65 72 63 65 6e 74 8 /* Percent
0b50: 20 73 79 6d 62 6f 6c 2e 20 25 25 20 2a 2f 0a 23 symbol. %% */.#
0b60: 64 65 66 69 6e 65 20 65 74 43 48 41 52 58 20 20 define etCHARX
0b70: 20 20 20 20 20 39 20 2f 2a 20 43 68 61 72 61 63 9 /* Charac
0b80: 74 65 72 73 2e 20 25 63 20 2a 2f 0a 2f 2a 20 54 ters. %c */./* T
0b90: 68 65 20 72 65 73 74 20 61 72 65 20 65 78 74 65 he rest are exte
0ba0: 6e 73 69 6f 6e 73 2c 20 6e 6f 74 20 6e 6f 72 6d nsions, not norm
0bb0: 61 6c 6c 79 20 66 6f 75 6e 64 20 69 6e 20 70 72 ally found in pr
0bc0: 69 6e 74 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e intf() */.#defin
0bd0: 65 20 65 74 43 48 41 52 4c 49 54 20 20 20 20 31 e etCHARLIT 1
0be0: 30 20 2f 2a 20 4c 69 74 65 72 61 6c 20 63 68 61 0 /* Literal cha
0bf0: 72 61 63 74 65 72 73 2e 20 20 25 27 20 2a 2f 0a racters. %' */.
0c00: 23 64 65 66 69 6e 65 20 65 74 53 51 4c 45 53 43 #define etSQLESC
0c10: 41 50 45 20 20 31 31 20 2f 2a 20 53 74 72 69 6e APE 11 /* Strin
0c20: 67 73 20 77 69 74 68 20 27 5c 27 27 20 64 6f 75 gs with '\'' dou
0c30: 62 6c 65 64 2e 20 20 25 71 20 2a 2f 0a 23 64 65 bled. %q */.#de
0c40: 66 69 6e 65 20 65 74 53 51 4c 45 53 43 41 50 45 fine etSQLESCAPE
0c50: 32 20 31 32 20 2f 2a 20 53 74 72 69 6e 67 73 20 2 12 /* Strings
0c60: 77 69 74 68 20 27 5c 27 27 20 64 6f 75 62 6c 65 with '\'' double
0c70: 64 20 61 6e 64 20 65 6e 63 6c 6f 73 65 64 20 69 d and enclosed i
0c80: 6e 20 27 27 2c 0a 20 20 20 20 20 20 20 20 20 20 n '',.
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ca0: 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 73 20 72 65 NULL pointers re
0cb0: 70 6c 61 63 65 64 20 62 79 20 53 51 4c 20 4e 55 placed by SQL NU
0cc0: 4c 4c 2e 20 20 25 51 20 2a 2f 0a 23 64 65 66 69 LL. %Q */.#defi
0cd0: 6e 65 20 65 74 54 4f 4b 45 4e 20 20 20 20 20 20 ne etTOKEN
0ce0: 31 33 20 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20 13 /* a pointer
0cf0: 74 6f 20 61 20 54 6f 6b 65 6e 20 73 74 72 75 63 to a Token struc
0d00: 74 75 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 ture */.#define
0d10: 65 74 53 52 43 4c 49 53 54 20 20 20 20 31 34 20 etSRCLIST 14
0d20: 2f 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 /* a pointer to
0d30: 61 20 53 72 63 4c 69 73 74 20 2a 2f 0a 23 64 65 a SrcList */.#de
0d40: 66 69 6e 65 20 65 74 50 4f 49 4e 54 45 52 20 20 fine etPOINTER
0d50: 20 20 31 35 20 2f 2a 20 54 68 65 20 25 70 20 63 15 /* The %p c
0d60: 6f 6e 76 65 72 73 69 6f 6e 20 2a 2f 0a 23 64 65 onversion */.#de
0d70: 66 69 6e 65 20 65 74 53 51 4c 45 53 43 41 50 45 fine etSQLESCAPE
0d80: 33 20 31 36 20 2f 2a 20 25 77 20 2d 3e 20 53 74 3 16 /* %w -> St
0d90: 72 69 6e 67 73 20 77 69 74 68 20 27 5c 22 27 20 rings with '\"'
0da0: 64 6f 75 62 6c 65 64 20 2a 2f 0a 23 64 65 66 69 doubled */.#defi
0db0: 6e 65 20 65 74 4f 52 44 49 4e 41 4c 20 20 20 20 ne etORDINAL
0dc0: 31 37 20 2f 2a 20 25 72 20 2d 3e 20 31 73 74 2c 17 /* %r -> 1st,
0dd0: 20 32 6e 64 2c 20 33 72 64 2c 20 34 74 68 2c 20 2nd, 3rd, 4th,
0de0: 65 74 63 2e 20 20 45 6e 67 6c 69 73 68 20 6f 6e etc. English on
0df0: 6c 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e ly */.../*.** An
0e00: 20 22 65 74 42 79 74 65 22 20 69 73 20 61 6e 20 "etByte" is an
0e10: 38 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 76 8-bit unsigned v
0e20: 61 6c 75 65 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 alue..*/.typedef
0e30: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 65 unsigned char e
0e40: 74 42 79 74 65 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 tByte;../*.** Ea
0e50: 63 68 20 62 75 69 6c 74 69 6e 20 63 6f 6e 76 65 ch builtin conve
0e60: 72 73 69 6f 6e 20 63 68 61 72 61 63 74 65 72 20 rsion character
0e70: 28 65 78 3a 20 74 68 65 20 27 64 27 20 69 6e 20 (ex: the 'd' in
0e80: 22 25 64 22 29 20 69 73 20 64 65 73 63 72 69 62 "%d") is describ
0e90: 65 64 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 ed.** by an inst
0ea0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c ance of the foll
0eb0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a owing structure.
0ec0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 */.typedef struc
0ed0: 74 20 65 74 5f 69 6e 66 6f 20 7b 20 20 20 2f 2a t et_info { /*
0ee0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f Information abo
0ef0: 75 74 20 65 61 63 68 20 66 6f 72 6d 61 74 20 66 ut each format f
0f00: 69 65 6c 64 20 2a 2f 0a 20 20 63 68 61 72 20 66 ield */. char f
0f10: 6d 74 74 79 70 65 3b 20 20 20 20 20 20 20 20 20 mttype;
0f20: 20 20 20 2f 2a 20 54 68 65 20 66 6f 72 6d 61 74 /* The format
0f30: 20 66 69 65 6c 64 20 63 6f 64 65 20 6c 65 74 74 field code lett
0f40: 65 72 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 62 er */. etByte b
0f50: 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 ase;
0f60: 20 2f 2a 20 54 68 65 20 62 61 73 65 20 66 6f 72 /* The base for
0f70: 20 72 61 64 69 78 20 63 6f 6e 76 65 72 73 69 6f radix conversio
0f80: 6e 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c n */. etByte fl
0f90: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 ags;
0fa0: 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f /* One or more o
0fb0: 66 20 46 4c 41 47 5f 20 63 6f 6e 73 74 61 6e 74 f FLAG_ constant
0fc0: 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 65 74 42 s below */. etB
0fd0: 79 74 65 20 74 79 70 65 3b 20 20 20 20 20 20 20 yte type;
0fe0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73 /* Convers
0ff0: 69 6f 6e 20 70 61 72 61 64 69 67 6d 20 2a 2f 0a ion paradigm */.
1000: 20 20 65 74 42 79 74 65 20 63 68 61 72 73 65 74 etByte charset
1010: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 ; /* Of
1020: 66 73 65 74 20 69 6e 74 6f 20 61 44 69 67 69 74 fset into aDigit
1030: 73 5b 5d 20 6f 66 20 74 68 65 20 64 69 67 69 74 s[] of the digit
1040: 73 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 65 74 s string */. et
1050: 42 79 74 65 20 70 72 65 66 69 78 3b 20 20 20 20 Byte prefix;
1060: 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 /* Offset
1070: 20 69 6e 74 6f 20 61 50 72 65 66 69 78 5b 5d 20 into aPrefix[]
1080: 6f 66 20 74 68 65 20 70 72 65 66 69 78 20 73 74 of the prefix st
1090: 72 69 6e 67 20 2a 2f 0a 7d 20 65 74 5f 69 6e 66 ring */.} et_inf
10a0: 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 o;../*.** Allowe
10b0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 65 74 5f d values for et_
10c0: 69 6e 66 6f 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 info.flags.*/.#d
10d0: 65 66 69 6e 65 20 46 4c 41 47 5f 53 49 47 4e 45 efine FLAG_SIGNE
10e0: 44 20 20 31 20 20 20 20 20 2f 2a 20 54 72 75 65 D 1 /* True
10f0: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 74 6f if the value to
1100: 20 63 6f 6e 76 65 72 74 20 69 73 20 73 69 67 6e convert is sign
1110: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46 4c ed */.#define FL
1120: 41 47 5f 49 4e 54 45 52 4e 20 20 32 20 20 20 20 AG_INTERN 2
1130: 20 2f 2a 20 54 72 75 65 20 69 66 20 66 6f 72 20 /* True if for
1140: 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c internal use onl
1150: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 46 4c 41 y */.#define FLA
1160: 47 5f 53 54 52 49 4e 47 20 20 34 20 20 20 20 20 G_STRING 4
1170: 2f 2a 20 41 6c 6c 6f 77 20 69 6e 66 69 6e 69 74 /* Allow infinit
1180: 79 20 70 72 65 63 69 73 69 6f 6e 20 2a 2f 0a 0a y precision */..
1190: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f ./*.** The follo
11a0: 77 69 6e 67 20 74 61 62 6c 65 20 69 73 20 73 65 wing table is se
11b0: 61 72 63 68 65 64 20 6c 69 6e 65 61 72 6c 79 2c arched linearly,
11c0: 20 73 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 74 so it is good t
11d0: 6f 20 70 75 74 20 74 68 65 0a 2a 2a 20 6d 6f 73 o put the.** mos
11e0: 74 20 66 72 65 71 75 65 6e 74 6c 79 20 75 73 65 t frequently use
11f0: 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70 d conversion typ
1200: 65 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 73 74 61 es first..*/.sta
1210: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 61 tic const char a
1220: 44 69 67 69 74 73 5b 5d 20 3d 20 22 30 31 32 33 Digits[] = "0123
1230: 34 35 36 37 38 39 41 42 43 44 45 46 30 31 32 33 456789ABCDEF0123
1240: 34 35 36 37 38 39 61 62 63 64 65 66 22 3b 0a 73 456789abcdef";.s
1250: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 tatic const char
1260: 20 61 50 72 65 66 69 78 5b 5d 20 3d 20 22 2d 78 aPrefix[] = "-x
1270: 30 5c 30 30 30 58 30 22 3b 0a 73 74 61 74 69 63 0\000X0";.static
1280: 20 63 6f 6e 73 74 20 65 74 5f 69 6e 66 6f 20 66 const et_info f
1290: 6d 74 69 6e 66 6f 5b 5d 20 3d 20 7b 0a 20 20 7b mtinfo[] = {. {
12a0: 20 20 27 64 27 2c 20 31 30 2c 20 31 2c 20 65 74 'd', 10, 1, et
12b0: 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20 20 RADIX, 0,
12c0: 30 20 7d 2c 0a 20 20 7b 20 20 27 73 27 2c 20 20 0 },. { 's',
12d0: 30 2c 20 34 2c 20 65 74 53 54 52 49 4e 47 2c 20 0, 4, etSTRING,
12e0: 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 0, 0 },. {
12f0: 20 20 27 67 27 2c 20 20 30 2c 20 31 2c 20 65 74 'g', 0, 1, et
1300: 47 45 4e 45 52 49 43 2c 20 20 20 20 33 30 2c 20 GENERIC, 30,
1310: 30 20 7d 2c 0a 20 20 7b 20 20 27 7a 27 2c 20 20 0 },. { 'z',
1320: 30 2c 20 34 2c 20 65 74 44 59 4e 53 54 52 49 4e 0, 4, etDYNSTRIN
1330: 47 2c 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b G, 0, 0 },. {
1340: 20 20 27 71 27 2c 20 20 30 2c 20 34 2c 20 65 74 'q', 0, 4, et
1350: 53 51 4c 45 53 43 41 50 45 2c 20 20 30 2c 20 20 SQLESCAPE, 0,
1360: 30 20 7d 2c 0a 20 20 7b 20 20 27 51 27 2c 20 20 0 },. { 'Q',
1370: 30 2c 20 34 2c 20 65 74 53 51 4c 45 53 43 41 50 0, 4, etSQLESCAP
1380: 45 32 2c 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b E2, 0, 0 },. {
1390: 20 20 27 77 27 2c 20 20 30 2c 20 34 2c 20 65 74 'w', 0, 4, et
13a0: 53 51 4c 45 53 43 41 50 45 33 2c 20 30 2c 20 20 SQLESCAPE3, 0,
13b0: 30 20 7d 2c 0a 20 20 7b 20 20 27 63 27 2c 20 20 0 },. { 'c',
13c0: 30 2c 20 30 2c 20 65 74 43 48 41 52 58 2c 20 20 0, 0, etCHARX,
13d0: 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 0, 0 },. {
13e0: 20 20 27 6f 27 2c 20 20 38 2c 20 30 2c 20 65 74 'o', 8, 0, et
13f0: 52 41 44 49 58 2c 20 20 20 20 20 20 30 2c 20 20 RADIX, 0,
1400: 32 20 7d 2c 0a 20 20 7b 20 20 27 75 27 2c 20 31 2 },. { 'u', 1
1410: 30 2c 20 30 2c 20 65 74 52 41 44 49 58 2c 20 20 0, 0, etRADIX,
1420: 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 20 7b 0, 0 },. {
1430: 20 20 27 78 27 2c 20 31 36 2c 20 30 2c 20 65 74 'x', 16, 0, et
1440: 52 41 44 49 58 2c 20 20 20 20 20 20 31 36 2c 20 RADIX, 16,
1450: 31 20 7d 2c 0a 20 20 7b 20 20 27 58 27 2c 20 31 1 },. { 'X', 1
1460: 36 2c 20 30 2c 20 65 74 52 41 44 49 58 2c 20 20 6, 0, etRADIX,
1470: 20 20 20 20 30 2c 20 20 34 20 7d 2c 0a 23 69 66 0, 4 },.#if
1480: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 ndef SQLITE_OMIT
1490: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a _FLOATING_POINT.
14a0: 20 20 7b 20 20 27 66 27 2c 20 20 30 2c 20 31 2c { 'f', 0, 1,
14b0: 20 65 74 46 4c 4f 41 54 2c 20 20 20 20 20 20 30 etFLOAT, 0
14c0: 2c 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 65 27 , 0 },. { 'e'
14d0: 2c 20 20 30 2c 20 31 2c 20 65 74 45 58 50 2c 20 , 0, 1, etEXP,
14e0: 20 20 20 20 20 20 20 33 30 2c 20 30 20 7d 2c 0a 30, 0 },.
14f0: 20 20 7b 20 20 27 45 27 2c 20 20 30 2c 20 31 2c { 'E', 0, 1,
1500: 20 65 74 45 58 50 2c 20 20 20 20 20 20 20 20 31 etEXP, 1
1510: 34 2c 20 30 20 7d 2c 0a 20 20 7b 20 20 27 47 27 4, 0 },. { 'G'
1520: 2c 20 20 30 2c 20 31 2c 20 65 74 47 45 4e 45 52 , 0, 1, etGENER
1530: 49 43 2c 20 20 20 20 31 34 2c 20 30 20 7d 2c 0a IC, 14, 0 },.
1540: 23 65 6e 64 69 66 0a 20 20 7b 20 20 27 69 27 2c #endif. { 'i',
1550: 20 31 30 2c 20 31 2c 20 65 74 52 41 44 49 58 2c 10, 1, etRADIX,
1560: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 0, 0 },.
1570: 20 7b 20 20 27 6e 27 2c 20 20 30 2c 20 30 2c 20 { 'n', 0, 0,
1580: 65 74 53 49 5a 45 2c 20 20 20 20 20 20 20 30 2c etSIZE, 0,
1590: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 25 27 2c 0 },. { '%',
15a0: 20 20 30 2c 20 30 2c 20 65 74 50 45 52 43 45 4e 0, 0, etPERCEN
15b0: 54 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 T, 0, 0 },.
15c0: 20 7b 20 20 27 70 27 2c 20 31 36 2c 20 30 2c 20 { 'p', 16, 0,
15d0: 65 74 50 4f 49 4e 54 45 52 2c 20 20 20 20 30 2c etPOINTER, 0,
15e0: 20 20 31 20 7d 2c 0a 20 20 7b 20 20 27 54 27 2c 1 },. { 'T',
15f0: 20 20 30 2c 20 32 2c 20 65 74 54 4f 4b 45 4e 2c 0, 2, etTOKEN,
1600: 20 20 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 20 0, 0 },.
1610: 20 7b 20 20 27 53 27 2c 20 20 30 2c 20 32 2c 20 { 'S', 0, 2,
1620: 65 74 53 52 43 4c 49 53 54 2c 20 20 20 20 30 2c etSRCLIST, 0,
1630: 20 20 30 20 7d 2c 0a 20 20 7b 20 20 27 72 27 2c 0 },. { 'r',
1640: 20 31 30 2c 20 33 2c 20 65 74 4f 52 44 49 4e 41 10, 3, etORDINA
1650: 4c 2c 20 20 20 20 30 2c 20 20 30 20 7d 2c 0a 7d L, 0, 0 },.}
1660: 3b 0a 23 64 65 66 69 6e 65 20 65 74 4e 49 4e 46 ;.#define etNINF
1670: 4f 20 20 28 73 69 7a 65 6f 66 28 66 6d 74 69 6e O (sizeof(fmtin
1680: 66 6f 29 2f 73 69 7a 65 6f 66 28 66 6d 74 69 6e fo)/sizeof(fmtin
1690: 66 6f 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a 20 49 fo[0]))../*.** I
16a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c f SQLITE_OMIT_FL
16b0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20 69 73 20 OATING_POINT is
16c0: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 6e 6f defined, then no
16d0: 6e 65 20 6f 66 20 74 68 65 20 66 6c 6f 61 74 69 ne of the floati
16e0: 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6e 76 ng point.** conv
16f0: 65 72 73 69 6f 6e 73 20 77 69 6c 6c 20 77 6f 72 ersions will wor
1700: 6b 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 k..*/.#ifndef SQ
1710: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 LITE_OMIT_FLOATI
1720: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 0a 2a 2a 20 22 NG_POINT./*.** "
1730: 2a 76 61 6c 22 20 69 73 20 61 20 64 6f 75 62 6c *val" is a doubl
1740: 65 20 73 75 63 68 20 74 68 61 74 20 30 2e 31 20 e such that 0.1
1750: 3c 3d 20 2a 76 61 6c 20 3c 20 31 30 2e 30 0a 2a <= *val < 10.0.*
1760: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 73 63 * Return the asc
1770: 69 69 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 ii code for the
1780: 6c 65 61 64 69 6e 67 20 64 69 67 69 74 20 6f 66 leading digit of
1790: 20 2a 76 61 6c 2c 20 74 68 65 6e 0a 2a 2a 20 6d *val, then.** m
17a0: 75 6c 74 69 70 6c 79 20 22 2a 76 61 6c 22 20 62 ultiply "*val" b
17b0: 79 20 31 30 2e 30 20 74 6f 20 72 65 6e 6f 72 6d y 10.0 to renorm
17c0: 61 6c 69 7a 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 alize..**.** Exa
17d0: 6d 70 6c 65 3a 0a 2a 2a 20 20 20 20 20 69 6e 70 mple:.** inp
17e0: 75 74 3a 20 20 20 20 20 2a 76 61 6c 20 3d 20 33 ut: *val = 3
17f0: 2e 31 34 31 35 39 0a 2a 2a 20 20 20 20 20 6f 75 .14159.** ou
1800: 74 70 75 74 3a 20 20 20 20 2a 76 61 6c 20 3d 20 tput: *val =
1810: 31 2e 34 31 35 39 20 20 20 20 66 75 6e 63 74 69 1.4159 functi
1820: 6f 6e 20 72 65 74 75 72 6e 20 3d 20 27 33 27 0a on return = '3'.
1830: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 75 6e 74 65 **.** The counte
1840: 72 20 2a 63 6e 74 20 69 73 20 69 6e 63 72 65 6d r *cnt is increm
1850: 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65 2e ented each time.
1860: 20 20 41 66 74 65 72 20 63 6f 75 6e 74 65 72 20 After counter
1870: 65 78 63 65 65 64 73 0a 2a 2a 20 31 36 20 28 74 exceeds.** 16 (t
1880: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 69 67 he number of sig
1890: 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 nificant digits
18a0: 69 6e 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 in a 64-bit floa
18b0: 74 29 20 27 30 27 20 69 73 0a 2a 2a 20 61 6c 77 t) '0' is.** alw
18c0: 61 79 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f ays returned..*/
18d0: 0a 73 74 61 74 69 63 20 69 6e 74 20 65 74 5f 67 .static int et_g
18e0: 65 74 64 69 67 69 74 28 4c 4f 4e 47 44 4f 55 42 etdigit(LONGDOUB
18f0: 4c 45 5f 54 59 50 45 20 2a 76 61 6c 2c 20 69 6e LE_TYPE *val, in
1900: 74 20 2a 63 6e 74 29 7b 0a 20 20 69 6e 74 20 64 t *cnt){. int d
1910: 69 67 69 74 3b 0a 20 20 4c 4f 4e 47 44 4f 55 42 igit;. LONGDOUB
1920: 4c 45 5f 54 59 50 45 20 64 3b 0a 20 20 69 66 28 LE_TYPE d;. if(
1930: 20 28 2a 63 6e 74 29 2b 2b 20 3e 3d 20 31 36 20 (*cnt)++ >= 16
1940: 29 20 72 65 74 75 72 6e 20 27 30 27 3b 0a 20 20 ) return '0';.
1950: 64 69 67 69 74 20 3d 20 28 69 6e 74 29 2a 76 61 digit = (int)*va
1960: 6c 3b 0a 20 20 64 20 3d 20 64 69 67 69 74 3b 0a l;. d = digit;.
1970: 20 20 64 69 67 69 74 20 2b 3d 20 27 30 27 3b 0a digit += '0';.
1980: 20 20 2a 76 61 6c 20 3d 20 28 2a 76 61 6c 20 2d *val = (*val -
1990: 20 64 29 2a 31 30 2e 30 3b 0a 20 20 72 65 74 75 d)*10.0;. retu
19a0: 72 6e 20 64 69 67 69 74 3b 0a 7d 0a 23 65 6e 64 rn digit;.}.#end
19b0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 if /* SQLITE_OMI
19c0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 T_FLOATING_POINT
19d0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e */../*.** Appen
19e0: 64 20 4e 20 73 70 61 63 65 20 63 68 61 72 61 63 d N space charac
19f0: 74 65 72 73 20 74 6f 20 74 68 65 20 67 69 76 65 ters to the give
1a00: 6e 20 73 74 72 69 6e 67 20 62 75 66 66 65 72 2e n string buffer.
1a10: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 .*/.static void
1a20: 61 70 70 65 6e 64 53 70 61 63 65 28 53 74 72 41 appendSpace(StrA
1a30: 63 63 75 6d 20 2a 70 41 63 63 75 6d 2c 20 69 6e ccum *pAccum, in
1a40: 74 20 4e 29 7b 0a 20 20 73 74 61 74 69 63 20 63 t N){. static c
1a50: 6f 6e 73 74 20 63 68 61 72 20 7a 53 70 61 63 65 onst char zSpace
1a60: 73 5b 5d 20 3d 20 22 20 20 20 20 20 20 20 20 20 s[] = "
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a80: 20 20 20 20 22 3b 0a 20 20 77 68 69 6c 65 28 20 ";. while(
1a90: 4e 3e 3d 73 69 7a 65 6f 66 28 7a 53 70 61 63 65 N>=sizeof(zSpace
1aa0: 73 29 2d 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 s)-1 ){. sqli
1ab0: 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e te3StrAccumAppen
1ac0: 64 28 70 41 63 63 75 6d 2c 20 7a 53 70 61 63 65 d(pAccum, zSpace
1ad0: 73 2c 20 73 69 7a 65 6f 66 28 7a 53 70 61 63 65 s, sizeof(zSpace
1ae0: 73 29 2d 31 29 3b 0a 20 20 20 20 4e 20 2d 3d 20 s)-1);. N -=
1af0: 73 69 7a 65 6f 66 28 7a 53 70 61 63 65 73 29 2d sizeof(zSpaces)-
1b00: 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 4e 3e 30 1;. }. if( N>0
1b10: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 ){. sqlite3S
1b20: 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 70 41 trAccumAppend(pA
1b30: 63 63 75 6d 2c 20 7a 53 70 61 63 65 73 2c 20 4e ccum, zSpaces, N
1b40: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 );. }.}../*.**
1b50: 4f 6e 20 6d 61 63 68 69 6e 65 73 20 77 69 74 68 On machines with
1b60: 20 61 20 73 6d 61 6c 6c 20 73 74 61 63 6b 20 73 a small stack s
1b70: 69 7a 65 2c 20 79 6f 75 20 63 61 6e 20 72 65 64 ize, you can red
1b80: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 53 51 4c efine the.** SQL
1b90: 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 ITE_PRINT_BUF_SI
1ba0: 5a 45 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 ZE to be less th
1bb0: 61 6e 20 33 35 30 2e 20 20 42 75 74 20 62 65 77 an 350. But bew
1bc0: 61 72 65 20 2d 20 66 6f 72 0a 2a 2a 20 73 6d 61 are - for.** sma
1bd0: 6c 6c 65 72 20 76 61 6c 75 65 73 20 73 6f 6d 65 ller values some
1be0: 20 25 66 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 %f conversions
1bf0: 6d 61 79 20 67 6f 20 69 6e 74 6f 20 61 6e 20 69 may go into an i
1c00: 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 2e 0a 2a 2f nfinite loop..*/
1c10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f .#ifndef SQLITE_
1c20: 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 0a 23 PRINT_BUF_SIZE.#
1c30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 define SQLITE_P
1c40: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 20 33 35 RINT_BUF_SIZE 35
1c50: 30 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 0.#endif.#define
1c60: 20 65 74 42 55 46 53 49 5a 45 20 53 51 4c 49 54 etBUFSIZE SQLIT
1c70: 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 E_PRINT_BUF_SIZE
1c80: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 /* Size of the
1c90: 20 6f 75 74 70 75 74 20 62 75 66 66 65 72 20 2a output buffer *
1ca0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f /../*.** The roo
1cb0: 74 20 70 72 6f 67 72 61 6d 2e 20 20 41 6c 6c 20 t program. All
1cc0: 76 61 72 69 61 74 69 6f 6e 73 20 63 61 6c 6c 20 variations call
1cd0: 74 68 69 73 20 63 6f 72 65 2e 0a 2a 2a 0a 2a 2a this core..**.**
1ce0: 20 49 4e 50 55 54 53 3a 0a 2a 2a 20 20 20 66 75 INPUTS:.** fu
1cf0: 6e 63 20 20 20 54 68 69 73 20 69 73 20 61 20 70 nc This is a p
1d00: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63 ointer to a func
1d10: 74 69 6f 6e 20 74 61 6b 69 6e 67 20 74 68 72 65 tion taking thre
1d20: 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 20 e arguments.**
1d30: 20 20 20 20 20 20 20 20 20 20 31 2e 20 41 20 70 1. A p
1d40: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79 74 68 69 ointer to anythi
1d50: 6e 67 2e 20 20 53 61 6d 65 20 61 73 20 74 68 65 ng. Same as the
1d60: 20 22 61 72 67 22 20 70 61 72 61 6d 65 74 65 72 "arg" parameter
1d70: 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 ..**
1d80: 32 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 2. A pointer to
1d90: 74 68 65 20 6c 69 73 74 20 6f 66 20 63 68 61 72 the list of char
1da0: 61 63 74 65 72 73 20 74 6f 20 62 65 20 6f 75 74 acters to be out
1db0: 70 75 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 put.**
1dc0: 20 20 20 20 20 28 4e 6f 74 65 2c 20 74 68 69 73 (Note, this
1dd0: 20 6c 69 73 74 20 69 73 20 4e 4f 54 20 6e 75 6c list is NOT nul
1de0: 6c 20 74 65 72 6d 69 6e 61 74 65 64 2e 29 0a 2a l terminated.).*
1df0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 33 2e 20 * 3.
1e00: 41 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 An integer numbe
1e10: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 r of characters
1e20: 74 6f 20 62 65 20 6f 75 74 70 75 74 2e 0a 2a 2a to be output..**
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
1e40: 4e 6f 74 65 3a 20 54 68 69 73 20 6e 75 6d 62 65 Note: This numbe
1e50: 72 20 6d 69 67 68 74 20 62 65 20 7a 65 72 6f 2e r might be zero.
1e60: 29 0a 2a 2a 0a 2a 2a 20 20 20 61 72 67 20 20 20 ).**.** arg
1e70: 20 54 68 69 73 20 69 73 20 74 68 65 20 70 6f 69 This is the poi
1e80: 6e 74 65 72 20 74 6f 20 61 6e 79 74 68 69 6e 67 nter to anything
1e90: 20 77 68 69 63 68 20 77 69 6c 6c 20 62 65 20 70 which will be p
1ea0: 61 73 73 65 64 20 61 73 20 74 68 65 0a 2a 2a 20 assed as the.**
1eb0: 20 20 20 20 20 20 20 20 20 66 69 72 73 74 20 61 first a
1ec0: 72 67 75 6d 65 6e 74 20 74 6f 20 22 66 75 6e 63 rgument to "func
1ed0: 22 2e 20 20 55 73 65 20 69 74 20 66 6f 72 20 77 ". Use it for w
1ee0: 68 61 74 65 76 65 72 20 79 6f 75 20 6c 69 6b 65 hatever you like
1ef0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6d 74 20 20 20 ..**.** fmt
1f00: 20 54 68 69 73 20 69 73 20 74 68 65 20 66 6f 72 This is the for
1f10: 6d 61 74 20 73 74 72 69 6e 67 2c 20 61 73 20 69 mat string, as i
1f20: 6e 20 74 68 65 20 75 73 75 61 6c 20 70 72 69 6e n the usual prin
1f30: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 61 70 20 20 20 t..**.** ap
1f40: 20 20 54 68 69 73 20 69 73 20 61 20 70 6f 69 6e This is a poin
1f50: 74 65 72 20 74 6f 20 61 20 6c 69 73 74 20 6f 66 ter to a list of
1f60: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 53 61 6d arguments. Sam
1f70: 65 20 61 73 20 69 6e 0a 2a 2a 20 20 20 20 20 20 e as in.**
1f80: 20 20 20 20 76 66 70 72 69 6e 74 2e 0a 2a 2a 0a vfprint..**.
1f90: 2a 2a 20 4f 55 54 50 55 54 53 3a 0a 2a 2a 20 20 ** OUTPUTS:.**
1fa0: 20 20 20 20 20 20 20 20 54 68 65 20 72 65 74 75 The retu
1fb0: 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 rn value is the
1fc0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 total number of
1fd0: 63 68 61 72 61 63 74 65 72 73 20 73 65 6e 74 20 characters sent
1fe0: 74 6f 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 74 to.** t
1ff0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 66 75 6e he function "fun
2000: 63 22 2e 20 20 52 65 74 75 72 6e 73 20 2d 31 20 c". Returns -1
2010: 6f 6e 20 61 20 65 72 72 6f 72 2e 0a 2a 2a 0a 2a on a error..**.*
2020: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 * Note that the
2030: 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 61 order in which a
2040: 75 74 6f 6d 61 74 69 63 20 76 61 72 69 61 62 6c utomatic variabl
2050: 65 73 20 61 72 65 20 64 65 63 6c 61 72 65 64 20 es are declared
2060: 62 65 6c 6f 77 0a 2a 2a 20 73 65 65 6d 73 20 74 below.** seems t
2070: 6f 20 6d 61 6b 65 20 61 20 62 69 67 20 64 69 66 o make a big dif
2080: 66 65 72 65 6e 63 65 20 69 6e 20 64 65 74 65 72 ference in deter
2090: 6d 69 6e 69 6e 67 20 68 6f 77 20 66 61 73 74 20 mining how fast
20a0: 74 68 69 73 20 62 65 61 73 74 0a 2a 2a 20 77 69 this beast.** wi
20b0: 6c 6c 20 72 75 6e 2e 0a 2a 2f 0a 73 74 61 74 69 ll run..*/.stati
20c0: 63 20 76 6f 69 64 20 76 78 70 72 69 6e 74 66 28 c void vxprintf(
20d0: 0a 20 20 53 74 72 41 63 63 75 6d 20 2a 70 41 63 . StrAccum *pAc
20e0: 63 75 6d 2c 20 20 20 20 20 20 20 20 20 20 20 20 cum,
20f0: 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c /* Accumul
2100: 61 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 ate results here
2110: 20 2a 2f 0a 20 20 69 6e 74 20 75 73 65 45 78 74 */. int useExt
2120: 65 6e 64 65 64 2c 20 20 20 20 20 20 20 20 20 20 ended,
2130: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f /* Allo
2140: 77 20 65 78 74 65 6e 64 65 64 20 25 2d 63 6f 6e w extended %-con
2150: 76 65 72 73 69 6f 6e 73 20 2a 2f 0a 20 20 63 6f versions */. co
2160: 6e 73 74 20 63 68 61 72 20 2a 66 6d 74 2c 20 20 nst char *fmt,
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2180: 20 2f 2a 20 46 6f 72 6d 61 74 20 73 74 72 69 6e /* Format strin
2190: 67 20 2a 2f 0a 20 20 76 61 5f 6c 69 73 74 20 61 g */. va_list a
21a0: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p
21b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 67 /* arg
21c0: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 uments */.){. i
21d0: 6e 74 20 63 3b 20 20 20 20 20 20 20 20 20 20 20 nt c;
21e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 /* Nex
21f0: 74 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 t character in t
2200: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 he format string
2210: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 62 75 66 70 */. char *bufp
2220: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t;
2230: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 /* Pointer to t
2240: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 62 75 he conversion bu
2250: 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 70 72 ffer */. int pr
2260: 65 63 69 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 ecision;
2270: 20 20 20 20 20 2f 2a 20 50 72 65 63 69 73 69 6f /* Precisio
2280: 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 n of the current
2290: 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 field */. int
22a0: 6c 65 6e 67 74 68 3b 20 20 20 20 20 20 20 20 20 length;
22b0: 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 /* Length
22c0: 20 6f 66 20 74 68 65 20 66 69 65 6c 64 20 2a 2f of the field */
22d0: 0a 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 . int idx;
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
22f0: 20 41 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f A general purpo
2300: 73 65 20 6c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 se loop counter
2310: 2a 2f 0a 20 20 69 6e 74 20 77 69 64 74 68 3b 20 */. int width;
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2330: 2f 2a 20 57 69 64 74 68 20 6f 66 20 74 68 65 20 /* Width of the
2340: 63 75 72 72 65 6e 74 20 66 69 65 6c 64 20 2a 2f current field */
2350: 0a 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 6c . etByte flag_l
2360: 65 66 74 6a 75 73 74 69 66 79 3b 20 20 20 2f 2a eftjustify; /*
2370: 20 54 72 75 65 20 69 66 20 22 2d 22 20 66 6c 61 True if "-" fla
2380: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a g is present */.
2390: 20 20 65 74 42 79 74 65 20 66 6c 61 67 5f 70 6c etByte flag_pl
23a0: 75 73 73 69 67 6e 3b 20 20 20 20 20 20 2f 2a 20 ussign; /*
23b0: 54 72 75 65 20 69 66 20 22 2b 22 20 66 6c 61 67 True if "+" flag
23c0: 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 is present */.
23d0: 20 65 74 42 79 74 65 20 66 6c 61 67 5f 62 6c 61 etByte flag_bla
23e0: 6e 6b 73 69 67 6e 3b 20 20 20 20 20 2f 2a 20 54 nksign; /* T
23f0: 72 75 65 20 69 66 20 22 20 22 20 66 6c 61 67 20 rue if " " flag
2400: 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 is present */.
2410: 65 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 65 etByte flag_alte
2420: 72 6e 61 74 65 66 6f 72 6d 3b 20 2f 2a 20 54 72 rnateform; /* Tr
2430: 75 65 20 69 66 20 22 23 22 20 66 6c 61 67 20 69 ue if "#" flag i
2440: 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 s present */. e
2450: 74 42 79 74 65 20 66 6c 61 67 5f 61 6c 74 66 6f tByte flag_altfo
2460: 72 6d 32 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 rm2; /* Tru
2470: 65 20 69 66 20 22 21 22 20 66 6c 61 67 20 69 73 e if "!" flag is
2480: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 present */. et
2490: 42 79 74 65 20 66 6c 61 67 5f 7a 65 72 6f 70 61 Byte flag_zeropa
24a0: 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 d; /* True
24b0: 20 69 66 20 66 69 65 6c 64 20 77 69 64 74 68 20 if field width
24c0: 63 6f 6e 73 74 61 6e 74 20 73 74 61 72 74 73 20 constant starts
24d0: 77 69 74 68 20 7a 65 72 6f 20 2a 2f 0a 20 20 65 with zero */. e
24e0: 74 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 3b tByte flag_long;
24f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 /* Tru
2500: 65 20 69 66 20 22 6c 22 20 66 6c 61 67 20 69 73 e if "l" flag is
2510: 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 65 74 present */. et
2520: 42 79 74 65 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f Byte flag_longlo
2530: 6e 67 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 ng; /* True
2540: 20 69 66 20 74 68 65 20 22 6c 6c 22 20 66 6c 61 if the "ll" fla
2550: 67 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a g is present */.
2560: 20 20 65 74 42 79 74 65 20 64 6f 6e 65 3b 20 20 etByte done;
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
2580: 4c 6f 6f 70 20 74 65 72 6d 69 6e 61 74 69 6f 6e Loop termination
2590: 20 66 6c 61 67 20 2a 2f 0a 20 20 73 71 6c 69 74 flag */. sqlit
25a0: 65 5f 75 69 6e 74 36 34 20 6c 6f 6e 67 76 61 6c e_uint64 longval
25b0: 75 65 3b 20 20 20 2f 2a 20 56 61 6c 75 65 20 66 ue; /* Value f
25c0: 6f 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 73 or integer types
25d0: 20 2a 2f 0a 20 20 4c 4f 4e 47 44 4f 55 42 4c 45 */. LONGDOUBLE
25e0: 5f 54 59 50 45 20 72 65 61 6c 76 61 6c 75 65 3b _TYPE realvalue;
25f0: 20 2f 2a 20 56 61 6c 75 65 20 66 6f 72 20 72 65 /* Value for re
2600: 61 6c 20 74 79 70 65 73 20 2a 2f 0a 20 20 63 6f al types */. co
2610: 6e 73 74 20 65 74 5f 69 6e 66 6f 20 2a 69 6e 66 nst et_info *inf
2620: 6f 70 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e op; /* Poin
2630: 74 65 72 20 74 6f 20 74 68 65 20 61 70 70 72 6f ter to the appro
2640: 70 72 69 61 74 65 20 69 6e 66 6f 20 73 74 72 75 priate info stru
2650: 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 cture */. char
2660: 62 75 66 5b 65 74 42 55 46 53 49 5a 45 5d 3b 20 buf[etBUFSIZE];
2670: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 73 /* Convers
2680: 69 6f 6e 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 ion buffer */.
2690: 63 68 61 72 20 70 72 65 66 69 78 3b 20 20 20 20 char prefix;
26a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 /* Pr
26b0: 65 66 69 78 20 63 68 61 72 61 63 74 65 72 2e 20 efix character.
26c0: 20 22 2b 22 20 6f 72 20 22 2d 22 20 6f 72 20 22 "+" or "-" or "
26d0: 20 22 20 6f 72 20 27 5c 30 27 2e 20 2a 2f 0a 20 " or '\0'. */.
26e0: 20 65 74 42 79 74 65 20 65 72 72 6f 72 66 6c 61 etByte errorfla
26f0: 67 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 54 g = 0; /* T
2700: 72 75 65 20 69 66 20 61 6e 20 65 72 72 6f 72 20 rue if an error
2710: 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 2a is encountered *
2720: 2f 0a 20 20 65 74 42 79 74 65 20 78 74 79 70 65 /. etByte xtype
2730: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f ; /
2740: 2a 20 43 6f 6e 76 65 72 73 69 6f 6e 20 70 61 72 * Conversion par
2750: 61 64 69 67 6d 20 2a 2f 0a 20 20 63 68 61 72 20 adigm */. char
2760: 2a 7a 45 78 74 72 61 3b 20 20 20 20 20 20 20 20 *zExtra;
2770: 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 6d /* Extra m
2780: 65 6d 6f 72 79 20 75 73 65 64 20 66 6f 72 20 65 emory used for e
2790: 74 54 43 4c 45 53 43 41 50 45 20 63 6f 6e 76 65 tTCLESCAPE conve
27a0: 72 73 69 6f 6e 73 20 2a 2f 0a 23 69 66 6e 64 65 rsions */.#ifnde
27b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c f SQLITE_OMIT_FL
27c0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 OATING_POINT. i
27d0: 6e 74 20 20 65 78 70 2c 20 65 32 3b 20 20 20 20 nt exp, e2;
27e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78 70 /* exp
27f0: 6f 6e 65 6e 74 20 6f 66 20 72 65 61 6c 20 6e 75 onent of real nu
2800: 6d 62 65 72 73 20 2a 2f 0a 20 20 64 6f 75 62 6c mbers */. doubl
2810: 65 20 72 6f 75 6e 64 65 72 3b 20 20 20 20 20 20 e rounder;
2820: 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f /* Used fo
2830: 72 20 72 6f 75 6e 64 69 6e 67 20 66 6c 6f 61 74 r rounding float
2840: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 ing point values
2850: 20 2a 2f 0a 20 20 65 74 42 79 74 65 20 66 6c 61 */. etByte fla
2860: 67 5f 64 70 3b 20 20 20 20 20 20 20 20 20 20 20 g_dp;
2870: 20 2f 2a 20 54 72 75 65 20 69 66 20 64 65 63 69 /* True if deci
2880: 6d 61 6c 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 mal point should
2890: 20 62 65 20 73 68 6f 77 6e 20 2a 2f 0a 20 20 65 be shown */. e
28a0: 74 42 79 74 65 20 66 6c 61 67 5f 72 74 7a 3b 20 tByte flag_rtz;
28b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 /* Tru
28c0: 65 20 69 66 20 74 72 61 69 6c 69 6e 67 20 7a 65 e if trailing ze
28d0: 72 6f 73 20 73 68 6f 75 6c 64 20 62 65 20 72 65 ros should be re
28e0: 6d 6f 76 65 64 20 2a 2f 0a 20 20 65 74 42 79 74 moved */. etByt
28f0: 65 20 66 6c 61 67 5f 65 78 70 3b 20 20 20 20 20 e flag_exp;
2900: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f /* True to
2910: 20 66 6f 72 63 65 20 64 69 73 70 6c 61 79 20 6f force display o
2920: 66 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 2a f the exponent *
2930: 2f 0a 20 20 69 6e 74 20 6e 73 64 3b 20 20 20 20 /. int nsd;
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
2950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 69 67 6e * Number of sign
2960: 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 72 ificant digits r
2970: 65 74 75 72 6e 65 64 20 2a 2f 0a 23 65 6e 64 69 eturned */.#endi
2980: 66 0a 0a 20 20 6c 65 6e 67 74 68 20 3d 20 30 3b f.. length = 0;
2990: 0a 20 20 62 75 66 70 74 20 3d 20 30 3b 0a 20 20 . bufpt = 0;.
29a0: 66 6f 72 28 3b 20 28 63 3d 28 2a 66 6d 74 29 29 for(; (c=(*fmt))
29b0: 21 3d 30 3b 20 2b 2b 66 6d 74 29 7b 0a 20 20 20 !=0; ++fmt){.
29c0: 20 69 66 28 20 63 21 3d 27 25 27 20 29 7b 0a 20 if( c!='%' ){.
29d0: 20 20 20 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 int amt;.
29e0: 20 20 20 20 62 75 66 70 74 20 3d 20 28 63 68 61 bufpt = (cha
29f0: 72 20 2a 29 66 6d 74 3b 0a 20 20 20 20 20 20 61 r *)fmt;. a
2a00: 6d 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 77 68 mt = 1;. wh
2a10: 69 6c 65 28 20 28 63 3d 28 2a 2b 2b 66 6d 74 29 ile( (c=(*++fmt)
2a20: 29 21 3d 27 25 27 20 26 26 20 63 21 3d 30 20 29 )!='%' && c!=0 )
2a30: 20 61 6d 74 2b 2b 3b 0a 20 20 20 20 20 20 73 71 amt++;. sq
2a40: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 lite3StrAccumApp
2a50: 65 6e 64 28 70 41 63 63 75 6d 2c 20 62 75 66 70 end(pAccum, bufp
2a60: 74 2c 20 61 6d 74 29 3b 0a 20 20 20 20 20 20 69 t, amt);. i
2a70: 66 28 20 63 3d 3d 30 20 29 20 62 72 65 61 6b 3b f( c==0 ) break;
2a80: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 . }. if( (
2a90: 63 3d 28 2a 2b 2b 66 6d 74 29 29 3d 3d 30 20 29 c=(*++fmt))==0 )
2aa0: 7b 0a 20 20 20 20 20 20 65 72 72 6f 72 66 6c 61 {. errorfla
2ab0: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 73 71 6c g = 1;. sql
2ac0: 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 ite3StrAccumAppe
2ad0: 6e 64 28 70 41 63 63 75 6d 2c 20 22 25 22 2c 20 nd(pAccum, "%",
2ae0: 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 1);. break;
2af0: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 69 . }. /* Fi
2b00: 6e 64 20 6f 75 74 20 77 68 61 74 20 66 6c 61 67 nd out what flag
2b10: 73 20 61 72 65 20 70 72 65 73 65 6e 74 20 2a 2f s are present */
2b20: 0a 20 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 . flag_leftju
2b30: 73 74 69 66 79 20 3d 20 66 6c 61 67 5f 70 6c 75 stify = flag_plu
2b40: 73 73 69 67 6e 20 3d 20 66 6c 61 67 5f 62 6c 61 ssign = flag_bla
2b50: 6e 6b 73 69 67 6e 20 3d 20 0a 20 20 20 20 20 66 nksign = . f
2b60: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 lag_alternatefor
2b70: 6d 20 3d 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d m = flag_altform
2b80: 32 20 3d 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 2 = flag_zeropad
2b90: 20 3d 20 30 3b 0a 20 20 20 20 64 6f 6e 65 20 3d = 0;. done =
2ba0: 20 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 0;. do{.
2bb0: 20 20 73 77 69 74 63 68 28 20 63 20 29 7b 0a 20 switch( c ){.
2bc0: 20 20 20 20 20 20 20 63 61 73 65 20 27 2d 27 3a case '-':
2bd0: 20 20 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 flag_leftjust
2be0: 69 66 79 20 3d 20 31 3b 20 20 20 20 20 62 72 65 ify = 1; bre
2bf0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 ak;. case
2c00: 20 27 2b 27 3a 20 20 20 66 6c 61 67 5f 70 6c 75 '+': flag_plu
2c10: 73 73 69 67 6e 20 3d 20 31 3b 20 20 20 20 20 20 ssign = 1;
2c20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 break;.
2c30: 20 63 61 73 65 20 27 20 27 3a 20 20 20 66 6c 61 case ' ': fla
2c40: 67 5f 62 6c 61 6e 6b 73 69 67 6e 20 3d 20 31 3b g_blanksign = 1;
2c50: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 break;.
2c60: 20 20 20 20 20 20 63 61 73 65 20 27 23 27 3a 20 case '#':
2c70: 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 flag_alternate
2c80: 66 6f 72 6d 20 3d 20 31 3b 20 20 20 62 72 65 61 form = 1; brea
2c90: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 k;. case
2ca0: 27 21 27 3a 20 20 20 66 6c 61 67 5f 61 6c 74 66 '!': flag_altf
2cb0: 6f 72 6d 32 20 3d 20 31 3b 20 20 20 20 20 20 20 orm2 = 1;
2cc0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 break;.
2cd0: 63 61 73 65 20 27 30 27 3a 20 20 20 66 6c 61 67 case '0': flag
2ce0: 5f 7a 65 72 6f 70 61 64 20 3d 20 31 3b 20 20 20 _zeropad = 1;
2cf0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
2d00: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 default:
2d10: 20 64 6f 6e 65 20 3d 20 31 3b 20 20 20 20 20 20 done = 1;
2d20: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b break
2d30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 ;. }. }w
2d40: 68 69 6c 65 28 20 21 64 6f 6e 65 20 26 26 20 28 hile( !done && (
2d50: 63 3d 28 2a 2b 2b 66 6d 74 29 29 21 3d 30 20 29 c=(*++fmt))!=0 )
2d60: 3b 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65 ;. /* Get the
2d70: 20 66 69 65 6c 64 20 77 69 64 74 68 20 2a 2f 0a field width */.
2d80: 20 20 20 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 width = 0;.
2d90: 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b if( c=='*' ){
2da0: 0a 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 76 . width = v
2db0: 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 a_arg(ap,int);.
2dc0: 20 20 20 20 20 69 66 28 20 77 69 64 74 68 3c 30 if( width<0
2dd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 ){. flag
2de0: 5f 6c 65 66 74 6a 75 73 74 69 66 79 20 3d 20 31 _leftjustify = 1
2df0: 3b 0a 20 20 20 20 20 20 20 20 77 69 64 74 68 20 ;. width
2e00: 3d 20 2d 77 69 64 74 68 3b 0a 20 20 20 20 20 20 = -width;.
2e10: 7d 0a 20 20 20 20 20 20 63 20 3d 20 2a 2b 2b 66 }. c = *++f
2e20: 6d 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 mt;. }else{.
2e30: 20 20 20 20 20 77 68 69 6c 65 28 20 63 3e 3d 27 while( c>='
2e40: 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29 7b 0a 0' && c<='9' ){.
2e50: 20 20 20 20 20 20 20 20 77 69 64 74 68 20 3d 20 width =
2e60: 77 69 64 74 68 2a 31 30 20 2b 20 63 20 2d 20 27 width*10 + c - '
2e70: 30 27 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 0';. c =
2e80: 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 20 7d 0a *++fmt;. }.
2e90: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 77 69 }. if( wi
2ea0: 64 74 68 20 3e 20 65 74 42 55 46 53 49 5a 45 2d dth > etBUFSIZE-
2eb0: 31 30 20 29 7b 0a 20 20 20 20 20 20 77 69 64 74 10 ){. widt
2ec0: 68 20 3d 20 65 74 42 55 46 53 49 5a 45 2d 31 30 h = etBUFSIZE-10
2ed0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 ;. }. /* G
2ee0: 65 74 20 74 68 65 20 70 72 65 63 69 73 69 6f 6e et the precision
2ef0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 */. if( c=='
2f00: 2e 27 20 29 7b 0a 20 20 20 20 20 20 70 72 65 63 .' ){. prec
2f10: 69 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20 20 ision = 0;.
2f20: 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 c = *++fmt;.
2f30: 20 20 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b if( c=='*' ){
2f40: 0a 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69 . precisi
2f50: 6f 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 on = va_arg(ap,i
2f60: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 nt);. if(
2f70: 20 70 72 65 63 69 73 69 6f 6e 3c 30 20 29 20 70 precision<0 ) p
2f80: 72 65 63 69 73 69 6f 6e 20 3d 20 2d 70 72 65 63 recision = -prec
2f90: 69 73 69 6f 6e 3b 0a 20 20 20 20 20 20 20 20 63 ision;. c
2fa0: 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 20 = *++fmt;.
2fb0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 }else{.
2fc0: 77 68 69 6c 65 28 20 63 3e 3d 27 30 27 20 26 26 while( c>='0' &&
2fd0: 20 63 3c 3d 27 39 27 20 29 7b 0a 20 20 20 20 20 c<='9' ){.
2fe0: 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20 3d precision =
2ff0: 20 70 72 65 63 69 73 69 6f 6e 2a 31 30 20 2b 20 precision*10 +
3000: 63 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 c - '0';.
3010: 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 c = *++fmt;.
3020: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d }. }
3030: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 . }else{.
3040: 20 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 2d 31 precision = -1
3050: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 47 ;. }. /* G
3060: 65 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f et the conversio
3070: 6e 20 74 79 70 65 20 6d 6f 64 69 66 69 65 72 20 n type modifier
3080: 2a 2f 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 6c */. if( c=='l
3090: 27 20 29 7b 0a 20 20 20 20 20 20 66 6c 61 67 5f ' ){. flag_
30a0: 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 long = 1;.
30b0: 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 20 20 20 c = *++fmt;.
30c0: 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 29 7b 0a if( c=='l' ){.
30d0: 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e flag_lon
30e0: 67 6c 6f 6e 67 20 3d 20 31 3b 0a 20 20 20 20 20 glong = 1;.
30f0: 20 20 20 63 20 3d 20 2a 2b 2b 66 6d 74 3b 0a 20 c = *++fmt;.
3100: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 }else{.
3110: 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f 6e flag_longlon
3120: 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 g = 0;. }.
3130: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 }else{.
3140: 66 6c 61 67 5f 6c 6f 6e 67 20 3d 20 66 6c 61 67 flag_long = flag
3150: 5f 6c 6f 6e 67 6c 6f 6e 67 20 3d 20 30 3b 0a 20 _longlong = 0;.
3160: 20 20 20 7d 0a 20 20 20 20 2f 2a 20 46 65 74 63 }. /* Fetc
3170: 68 20 74 68 65 20 69 6e 66 6f 20 65 6e 74 72 79 h the info entry
3180: 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 20 2a for the field *
3190: 2f 0a 20 20 20 20 69 6e 66 6f 70 20 3d 20 30 3b /. infop = 0;
31a0: 0a 20 20 20 20 66 6f 72 28 69 64 78 3d 30 3b 20 . for(idx=0;
31b0: 69 64 78 3c 65 74 4e 49 4e 46 4f 3b 20 69 64 78 idx<etNINFO; idx
31c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 63 ++){. if( c
31d0: 3d 3d 66 6d 74 69 6e 66 6f 5b 69 64 78 5d 2e 66 ==fmtinfo[idx].f
31e0: 6d 74 74 79 70 65 20 29 7b 0a 20 20 20 20 20 20 mttype ){.
31f0: 20 20 69 6e 66 6f 70 20 3d 20 26 66 6d 74 69 6e infop = &fmtin
3200: 66 6f 5b 69 64 78 5d 3b 0a 20 20 20 20 20 20 20 fo[idx];.
3210: 20 69 66 28 20 75 73 65 45 78 74 65 6e 64 65 64 if( useExtended
3220: 20 7c 7c 20 28 69 6e 66 6f 70 2d 3e 66 6c 61 67 || (infop->flag
3230: 73 20 26 20 46 4c 41 47 5f 49 4e 54 45 52 4e 29 s & FLAG_INTERN)
3240: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 ==0 ){.
3250: 20 78 74 79 70 65 20 3d 20 69 6e 66 6f 70 2d 3e xtype = infop->
3260: 74 79 70 65 3b 0a 20 20 20 20 20 20 20 20 7d 65 type;. }e
3270: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 72 lse{. r
3280: 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d eturn;. }
3290: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a . break;.
32a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 }. }.
32b0: 20 20 7a 45 78 74 72 61 20 3d 20 30 3b 0a 20 20 zExtra = 0;.
32c0: 20 20 69 66 28 20 69 6e 66 6f 70 3d 3d 30 20 29 if( infop==0 )
32d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a {. return;.
32e0: 20 20 20 20 7d 0a 0a 0a 20 20 20 20 2f 2a 20 4c }... /* L
32f0: 69 6d 69 74 20 74 68 65 20 70 72 65 63 69 73 69 imit the precisi
3300: 6f 6e 20 74 6f 20 70 72 65 76 65 6e 74 20 6f 76 on to prevent ov
3310: 65 72 66 6c 6f 77 69 6e 67 20 62 75 66 5b 5d 20 erflowing buf[]
3320: 64 75 72 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f during conversio
3330: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 72 65 n */. if( pre
3340: 63 69 73 69 6f 6e 3e 65 74 42 55 46 53 49 5a 45 cision>etBUFSIZE
3350: 2d 34 30 20 26 26 20 28 69 6e 66 6f 70 2d 3e 66 -40 && (infop->f
3360: 6c 61 67 73 20 26 20 46 4c 41 47 5f 53 54 52 49 lags & FLAG_STRI
3370: 4e 47 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 NG)==0 ){.
3380: 70 72 65 63 69 73 69 6f 6e 20 3d 20 65 74 42 55 precision = etBU
3390: 46 53 49 5a 45 2d 34 30 3b 0a 20 20 20 20 7d 0a FSIZE-40;. }.
33a0: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 41 . /*. ** A
33b0: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 76 61 t this point, va
33c0: 72 69 61 62 6c 65 73 20 61 72 65 20 69 6e 69 74 riables are init
33d0: 69 61 6c 69 7a 65 64 20 61 73 20 66 6f 6c 6c 6f ialized as follo
33e0: 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a ws:. **. *
33f0: 2a 20 20 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 * flag_alterna
3400: 74 65 66 6f 72 6d 20 20 20 20 20 20 20 20 20 20 teform
3410: 54 52 55 45 20 69 66 20 61 20 27 23 27 20 69 73 TRUE if a '#' is
3420: 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a present.. **
3430: 20 20 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 flag_altform2
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
3450: 52 55 45 20 69 66 20 61 20 27 21 27 20 69 73 20 RUE if a '!' is
3460: 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 present.. **
3470: 20 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 flag_plussign
3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52 TR
3490: 55 45 20 69 66 20 61 20 27 2b 27 20 69 73 20 70 UE if a '+' is p
34a0: 72 65 73 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 20 resent.. **
34b0: 20 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 flag_leftjustif
34c0: 79 20 20 20 20 20 20 20 20 20 20 20 20 54 52 55 y TRU
34d0: 45 20 69 66 20 61 20 27 2d 27 20 69 73 20 70 72 E if a '-' is pr
34e0: 65 73 65 6e 74 20 6f 72 20 69 66 20 74 68 65 0a esent or if the.
34f0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 **
3500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3510: 20 20 20 20 20 66 69 65 6c 64 20 77 69 64 74 68 field width
3520: 20 77 61 73 20 6e 65 67 61 74 69 76 65 2e 0a 20 was negative..
3530: 20 20 20 2a 2a 20 20 20 66 6c 61 67 5f 7a 65 72 ** flag_zer
3540: 6f 70 61 64 20 20 20 20 20 20 20 20 20 20 20 20 opad
3550: 20 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20 TRUE if the
3560: 77 69 64 74 68 20 62 65 67 61 6e 20 77 69 74 68 width began with
3570: 20 30 2e 0a 20 20 20 20 2a 2a 20 20 20 66 6c 61 0.. ** fla
3580: 67 5f 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 g_long
3590: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 69 66 TRUE if
35a0: 20 74 68 65 20 6c 65 74 74 65 72 20 27 6c 27 20 the letter 'l'
35b0: 28 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20 (ell) prefixed.
35c0: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 **
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35e0: 20 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69 the conversi
35f0: 6f 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 on character..
3600: 20 20 2a 2a 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 ** flag_long
3610: 6c 6f 6e 67 20 20 20 20 20 20 20 20 20 20 20 20 long
3620: 20 20 20 54 52 55 45 20 69 66 20 74 68 65 20 6c TRUE if the l
3630: 65 74 74 65 72 20 27 6c 6c 27 20 28 65 6c 6c 20 etter 'll' (ell
3640: 65 6c 6c 29 20 70 72 65 66 69 78 65 64 0a 20 20 ell) prefixed.
3650: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 **
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3670: 20 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f the conversio
3680: 6e 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 20 n character..
3690: 20 2a 2a 20 20 20 66 6c 61 67 5f 62 6c 61 6e 6b ** flag_blank
36a0: 73 69 67 6e 20 20 20 20 20 20 20 20 20 20 20 20 sign
36b0: 20 20 54 52 55 45 20 69 66 20 61 20 27 20 27 20 TRUE if a ' '
36c0: 69 73 20 70 72 65 73 65 6e 74 2e 0a 20 20 20 20 is present..
36d0: 2a 2a 20 20 20 77 69 64 74 68 20 20 20 20 20 20 ** width
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36f0: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 66 The specified f
3700: 69 65 6c 64 20 77 69 64 74 68 2e 20 20 54 68 69 ield width. Thi
3710: 73 20 69 73 0a 20 20 20 20 2a 2a 20 20 20 20 20 s is. **
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3730: 20 20 20 20 20 20 20 20 20 20 61 6c 77 61 79 73 always
3740: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 non-negative.
3750: 5a 65 72 6f 20 69 73 20 74 68 65 20 64 65 66 61 Zero is the defa
3760: 75 6c 74 2e 0a 20 20 20 20 2a 2a 20 20 20 70 72 ult.. ** pr
3770: 65 63 69 73 69 6f 6e 20 20 20 20 20 20 20 20 20 ecision
3780: 20 20 20 20 20 20 20 20 20 20 54 68 65 20 73 70 The sp
3790: 65 63 69 66 69 65 64 20 70 72 65 63 69 73 69 6f ecified precisio
37a0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0a n. The default.
37b0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 **
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37d0: 20 20 20 20 20 69 73 20 2d 31 2e 0a 20 20 20 20 is -1..
37e0: 2a 2a 20 20 20 78 74 79 70 65 20 20 20 20 20 20 ** xtype
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3800: 20 54 68 65 20 63 6c 61 73 73 20 6f 66 20 74 68 The class of th
3810: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0a 20 20 e conversion..
3820: 20 20 2a 2a 20 20 20 69 6e 66 6f 70 20 20 20 20 ** infop
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3840: 20 20 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 Pointer to th
3850: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 69 6e e appropriate in
3860: 66 6f 20 73 74 72 75 63 74 2e 0a 20 20 20 20 2a fo struct.. *
3870: 2f 0a 20 20 20 20 73 77 69 74 63 68 28 20 78 74 /. switch( xt
3880: 79 70 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 ype ){. cas
3890: 65 20 65 74 50 4f 49 4e 54 45 52 3a 0a 20 20 20 e etPOINTER:.
38a0: 20 20 20 20 20 66 6c 61 67 5f 6c 6f 6e 67 6c 6f flag_longlo
38b0: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72 ng = sizeof(char
38c0: 2a 29 3d 3d 73 69 7a 65 6f 66 28 69 36 34 29 3b *)==sizeof(i64);
38d0: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 5f 6c 6f . flag_lo
38e0: 6e 67 20 3d 20 73 69 7a 65 6f 66 28 63 68 61 72 ng = sizeof(char
38f0: 2a 29 3d 3d 73 69 7a 65 6f 66 28 6c 6f 6e 67 20 *)==sizeof(long
3900: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a int);. /*
3910: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e Fall through in
3920: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 to the next case
3930: 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 65 20 65 */. case e
3940: 74 4f 52 44 49 4e 41 4c 3a 0a 20 20 20 20 20 20 tORDINAL:.
3950: 63 61 73 65 20 65 74 52 41 44 49 58 3a 0a 20 20 case etRADIX:.
3960: 20 20 20 20 20 20 69 66 28 20 69 6e 66 6f 70 2d if( infop-
3970: 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f 53 49 >flags & FLAG_SI
3980: 47 4e 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 GNED ){.
3990: 20 20 69 36 34 20 76 3b 0a 20 20 20 20 20 20 20 i64 v;.
39a0: 20 20 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 if( flag_long
39b0: 6c 6f 6e 67 20 29 20 20 20 76 20 3d 20 76 61 5f long ) v = va_
39c0: 61 72 67 28 61 70 2c 69 36 34 29 3b 0a 20 20 20 arg(ap,i64);.
39d0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 else if(
39e0: 66 6c 61 67 5f 6c 6f 6e 67 20 29 20 20 76 20 3d flag_long ) v =
39f0: 20 76 61 5f 61 72 67 28 61 70 2c 6c 6f 6e 67 20 va_arg(ap,long
3a00: 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 int);.
3a10: 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 else
3a20: 20 20 20 20 20 20 76 20 3d 20 76 61 5f 61 72 67 v = va_arg
3a30: 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 (ap,int);.
3a40: 20 20 20 20 69 66 28 20 76 3c 30 20 29 7b 0a 20 if( v<0 ){.
3a50: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 76 longv
3a60: 61 6c 75 65 20 3d 20 2d 76 3b 0a 20 20 20 20 20 alue = -v;.
3a70: 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d 20 prefix =
3a80: 27 2d 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d '-';. }
3a90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 else{.
3aa0: 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d 20 76 3b longvalue = v;
3ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 . if(
3ac0: 20 66 6c 61 67 5f 70 6c 75 73 73 69 67 6e 20 29 flag_plussign )
3ad0: 20 20 20 20 20 20 20 20 70 72 65 66 69 78 20 3d prefix =
3ae0: 20 27 2b 27 3b 0a 20 20 20 20 20 20 20 20 20 20 '+';.
3af0: 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 5f else if( flag_
3b00: 62 6c 61 6e 6b 73 69 67 6e 20 29 20 20 70 72 65 blanksign ) pre
3b10: 66 69 78 20 3d 20 27 20 27 3b 0a 20 20 20 20 20 fix = ' ';.
3b20: 20 20 20 20 20 20 20 65 6c 73 65 20 20 20 20 20 else
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3b40: 20 20 70 72 65 66 69 78 20 3d 20 30 3b 0a 20 20 prefix = 0;.
3b50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
3b60: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
3b70: 20 20 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e 67 if( flag_long
3b80: 6c 6f 6e 67 20 29 20 20 20 6c 6f 6e 67 76 61 6c long ) longval
3b90: 75 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 75 ue = va_arg(ap,u
3ba0: 36 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 65 64);. e
3bb0: 6c 73 65 20 69 66 28 20 66 6c 61 67 5f 6c 6f 6e lse if( flag_lon
3bc0: 67 20 29 20 20 6c 6f 6e 67 76 61 6c 75 65 20 3d g ) longvalue =
3bd0: 20 76 61 5f 61 72 67 28 61 70 2c 75 6e 73 69 67 va_arg(ap,unsig
3be0: 6e 65 64 20 6c 6f 6e 67 20 69 6e 74 29 3b 0a 20 ned long int);.
3bf0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 20 20 else
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
3c10: 6f 6e 67 76 61 6c 75 65 20 3d 20 76 61 5f 61 72 ongvalue = va_ar
3c20: 67 28 61 70 2c 75 6e 73 69 67 6e 65 64 20 69 6e g(ap,unsigned in
3c30: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 t);. pr
3c40: 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 efix = 0;.
3c50: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 }. if(
3c60: 6c 6f 6e 67 76 61 6c 75 65 3d 3d 30 20 29 20 66 longvalue==0 ) f
3c70: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 lag_alternatefor
3c80: 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 m = 0;. i
3c90: 66 28 20 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 f( flag_zeropad
3ca0: 26 26 20 70 72 65 63 69 73 69 6f 6e 3c 77 69 64 && precision<wid
3cb0: 74 68 2d 28 70 72 65 66 69 78 21 3d 30 29 20 29 th-(prefix!=0) )
3cc0: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 63 {. prec
3cd0: 69 73 69 6f 6e 20 3d 20 77 69 64 74 68 2d 28 70 ision = width-(p
3ce0: 72 65 66 69 78 21 3d 30 29 3b 0a 20 20 20 20 20 refix!=0);.
3cf0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 75 66 }. buf
3d00: 70 74 20 3d 20 26 62 75 66 5b 65 74 42 55 46 53 pt = &buf[etBUFS
3d10: 49 5a 45 2d 31 5d 3b 0a 20 20 20 20 20 20 20 20 IZE-1];.
3d20: 69 66 28 20 78 74 79 70 65 3d 3d 65 74 4f 52 44 if( xtype==etORD
3d30: 49 4e 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 INAL ){.
3d40: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 static const c
3d50: 68 61 72 20 7a 4f 72 64 5b 5d 20 3d 20 22 74 68 har zOrd[] = "th
3d60: 73 74 6e 64 72 64 22 3b 0a 20 20 20 20 20 20 20 stndrd";.
3d70: 20 20 20 69 6e 74 20 78 20 3d 20 6c 6f 6e 67 76 int x = longv
3d80: 61 6c 75 65 20 25 20 31 30 3b 0a 20 20 20 20 20 alue % 10;.
3d90: 20 20 20 20 20 69 66 28 20 78 3e 3d 34 20 7c 7c if( x>=4 ||
3da0: 20 28 6c 6f 6e 67 76 61 6c 75 65 2f 31 30 29 25 (longvalue/10)%
3db0: 31 30 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 10==1 ){.
3dc0: 20 20 20 20 20 78 20 3d 20 30 3b 0a 20 20 20 20 x = 0;.
3dd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
3de0: 20 20 62 75 66 5b 65 74 42 55 46 53 49 5a 45 2d buf[etBUFSIZE-
3df0: 33 5d 20 3d 20 7a 4f 72 64 5b 78 2a 32 5d 3b 0a 3] = zOrd[x*2];.
3e00: 20 20 20 20 20 20 20 20 20 20 62 75 66 5b 65 74 buf[et
3e10: 42 55 46 53 49 5a 45 2d 32 5d 20 3d 20 7a 4f 72 BUFSIZE-2] = zOr
3e20: 64 5b 78 2a 32 2b 31 5d 3b 0a 20 20 20 20 20 20 d[x*2+1];.
3e30: 20 20 20 20 62 75 66 70 74 20 2d 3d 20 32 3b 0a bufpt -= 2;.
3e40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
3e50: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 {. re
3e60: 67 69 73 74 65 72 20 63 6f 6e 73 74 20 63 68 61 gister const cha
3e70: 72 20 2a 63 73 65 74 3b 20 20 20 20 20 20 2f 2a r *cset; /*
3e80: 20 55 73 65 20 72 65 67 69 73 74 65 72 73 20 66 Use registers f
3e90: 6f 72 20 73 70 65 65 64 20 2a 2f 0a 20 20 20 20 or speed */.
3ea0: 20 20 20 20 20 20 72 65 67 69 73 74 65 72 20 69 register i
3eb0: 6e 74 20 62 61 73 65 3b 0a 20 20 20 20 20 20 20 nt base;.
3ec0: 20 20 20 63 73 65 74 20 3d 20 26 61 44 69 67 69 cset = &aDigi
3ed0: 74 73 5b 69 6e 66 6f 70 2d 3e 63 68 61 72 73 65 ts[infop->charse
3ee0: 74 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 62 61 t];. ba
3ef0: 73 65 20 3d 20 69 6e 66 6f 70 2d 3e 62 61 73 65 se = infop->base
3f00: 3b 0a 20 20 20 20 20 20 20 20 20 20 64 6f 7b 20 ;. do{
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e /* Con
3f40: 76 65 72 74 20 74 6f 20 61 73 63 69 69 20 2a 2f vert to ascii */
3f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 2d . *(-
3f60: 2d 62 75 66 70 74 29 20 3d 20 63 73 65 74 5b 6c -bufpt) = cset[l
3f70: 6f 6e 67 76 61 6c 75 65 25 62 61 73 65 5d 3b 0a ongvalue%base];.
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 long
3f90: 76 61 6c 75 65 20 3d 20 6c 6f 6e 67 76 61 6c 75 value = longvalu
3fa0: 65 2f 62 61 73 65 3b 0a 20 20 20 20 20 20 20 20 e/base;.
3fb0: 20 20 7d 77 68 69 6c 65 28 20 6c 6f 6e 67 76 61 }while( longva
3fc0: 6c 75 65 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 lue>0 );.
3fd0: 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 }. lengt
3fe0: 68 20 3d 20 26 62 75 66 5b 65 74 42 55 46 53 49 h = &buf[etBUFSI
3ff0: 5a 45 2d 31 5d 2d 62 75 66 70 74 3b 0a 20 20 20 ZE-1]-bufpt;.
4000: 20 20 20 20 20 66 6f 72 28 69 64 78 3d 70 72 65 for(idx=pre
4010: 63 69 73 69 6f 6e 2d 6c 65 6e 67 74 68 3b 20 69 cision-length; i
4020: 64 78 3e 30 3b 20 69 64 78 2d 2d 29 7b 0a 20 20 dx>0; idx--){.
4030: 20 20 20 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 *(--bufp
4040: 74 29 20 3d 20 27 30 27 3b 20 20 20 20 20 20 20 t) = '0';
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4060: 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 70 61 /* Zero pa
4070: 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 d */. }.
4080: 20 20 20 20 20 20 20 69 66 28 20 70 72 65 66 69 if( prefi
4090: 78 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d x ) *(--bufpt) =
40a0: 20 70 72 65 66 69 78 3b 20 20 20 20 20 20 20 20 prefix;
40b0: 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 73 69 /* Add si
40c0: 67 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 gn */. if
40d0: 28 20 66 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 ( flag_alternate
40e0: 66 6f 72 6d 20 26 26 20 69 6e 66 6f 70 2d 3e 70 form && infop->p
40f0: 72 65 66 69 78 20 29 7b 20 20 20 20 20 20 2f 2a refix ){ /*
4100: 20 41 64 64 20 22 30 22 20 6f 72 20 22 30 78 22 Add "0" or "0x"
4110: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 63 6f */. co
4120: 6e 73 74 20 63 68 61 72 20 2a 70 72 65 3b 0a 20 nst char *pre;.
4130: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 78 3b char x;
4140: 0a 20 20 20 20 20 20 20 20 20 20 70 72 65 20 3d . pre =
4150: 20 26 61 50 72 65 66 69 78 5b 69 6e 66 6f 70 2d &aPrefix[infop-
4160: 3e 70 72 65 66 69 78 5d 3b 0a 20 20 20 20 20 20 >prefix];.
4170: 20 20 20 20 69 66 28 20 2a 62 75 66 70 74 21 3d if( *bufpt!=
4180: 70 72 65 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 pre[0] ){.
4190: 20 20 20 20 20 20 66 6f 72 28 3b 20 28 78 3d 28 for(; (x=(
41a0: 2a 70 72 65 29 29 21 3d 30 3b 20 70 72 65 2b 2b *pre))!=0; pre++
41b0: 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d 20 78 ) *(--bufpt) = x
41c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 ;. }.
41d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
41e0: 6c 65 6e 67 74 68 20 3d 20 26 62 75 66 5b 65 74 length = &buf[et
41f0: 42 55 46 53 49 5a 45 2d 31 5d 2d 62 75 66 70 74 BUFSIZE-1]-bufpt
4200: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b ;. break;
4210: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 46 4c . case etFL
4220: 4f 41 54 3a 0a 20 20 20 20 20 20 63 61 73 65 20 OAT:. case
4230: 65 74 45 58 50 3a 0a 20 20 20 20 20 20 63 61 73 etEXP:. cas
4240: 65 20 65 74 47 45 4e 45 52 49 43 3a 0a 20 20 20 e etGENERIC:.
4250: 20 20 20 20 20 72 65 61 6c 76 61 6c 75 65 20 3d realvalue =
4260: 20 76 61 5f 61 72 67 28 61 70 2c 64 6f 75 62 6c va_arg(ap,doubl
4270: 65 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 e);.#ifndef SQLI
4280: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 TE_OMIT_FLOATING
4290: 5f 50 4f 49 4e 54 0a 20 20 20 20 20 20 20 20 69 _POINT. i
42a0: 66 28 20 70 72 65 63 69 73 69 6f 6e 3c 30 20 29 f( precision<0 )
42b0: 20 70 72 65 63 69 73 69 6f 6e 20 3d 20 36 3b 20 precision = 6;
42c0: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 74 20 64 /* Set d
42d0: 65 66 61 75 6c 74 20 70 72 65 63 69 73 69 6f 6e efault precision
42e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 */. if(
42f0: 70 72 65 63 69 73 69 6f 6e 3e 65 74 42 55 46 53 precision>etBUFS
4300: 49 5a 45 2f 32 2d 31 30 20 29 20 70 72 65 63 69 IZE/2-10 ) preci
4310: 73 69 6f 6e 20 3d 20 65 74 42 55 46 53 49 5a 45 sion = etBUFSIZE
4320: 2f 32 2d 31 30 3b 0a 20 20 20 20 20 20 20 20 69 /2-10;. i
4330: 66 28 20 72 65 61 6c 76 61 6c 75 65 3c 30 2e 30 f( realvalue<0.0
4340: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 ){. re
4350: 61 6c 76 61 6c 75 65 20 3d 20 2d 72 65 61 6c 76 alvalue = -realv
4360: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 alue;.
4370: 70 72 65 66 69 78 20 3d 20 27 2d 27 3b 0a 20 20 prefix = '-';.
4380: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
4390: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f if( flag_
43a0: 70 6c 75 73 73 69 67 6e 20 29 20 20 20 20 20 20 plussign )
43b0: 20 20 20 20 70 72 65 66 69 78 20 3d 20 27 2b 27 prefix = '+'
43c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 ;. else
43d0: 20 69 66 28 20 66 6c 61 67 5f 62 6c 61 6e 6b 73 if( flag_blanks
43e0: 69 67 6e 20 29 20 20 20 20 70 72 65 66 69 78 20 ign ) prefix
43f0: 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20 = ' ';.
4400: 20 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 else
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 pr
4420: 65 66 69 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 efix = 0;.
4430: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 }. if(
4440: 78 74 79 70 65 3d 3d 65 74 47 45 4e 45 52 49 43 xtype==etGENERIC
4450: 20 26 26 20 70 72 65 63 69 73 69 6f 6e 3e 30 20 && precision>0
4460: 29 20 70 72 65 63 69 73 69 6f 6e 2d 2d 3b 0a 23 ) precision--;.#
4470: 69 66 20 30 0a 20 20 20 20 20 20 20 20 2f 2a 20 if 0. /*
4480: 52 6f 75 6e 64 69 6e 67 20 77 6f 72 6b 73 20 6c Rounding works l
4490: 69 6b 65 20 42 53 44 20 77 68 65 6e 20 74 68 65 ike BSD when the
44a0: 20 63 6f 6e 73 74 61 6e 74 20 30 2e 34 39 39 39 constant 0.4999
44b0: 20 69 73 20 75 73 65 64 2e 20 20 57 69 65 72 64 is used. Wierd
44c0: 21 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 ! */. for
44d0: 28 69 64 78 3d 70 72 65 63 69 73 69 6f 6e 2c 20 (idx=precision,
44e0: 72 6f 75 6e 64 65 72 3d 30 2e 34 39 39 39 3b 20 rounder=0.4999;
44f0: 69 64 78 3e 30 3b 20 69 64 78 2d 2d 2c 20 72 6f idx>0; idx--, ro
4500: 75 6e 64 65 72 2a 3d 30 2e 31 29 3b 0a 23 65 6c under*=0.1);.#el
4510: 73 65 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 74 se. /* It
4520: 20 6d 61 6b 65 73 20 6d 6f 72 65 20 73 65 6e 73 makes more sens
4530: 65 20 74 6f 20 75 73 65 20 30 2e 35 20 2a 2f 0a e to use 0.5 */.
4540: 20 20 20 20 20 20 20 20 66 6f 72 28 69 64 78 3d for(idx=
4550: 70 72 65 63 69 73 69 6f 6e 2c 20 72 6f 75 6e 64 precision, round
4560: 65 72 3d 30 2e 35 3b 20 69 64 78 3e 30 3b 20 69 er=0.5; idx>0; i
4570: 64 78 2d 2d 2c 20 72 6f 75 6e 64 65 72 2a 3d 30 dx--, rounder*=0
4580: 2e 31 29 7b 7d 0a 23 65 6e 64 69 66 0a 20 20 20 .1){}.#endif.
4590: 20 20 20 20 20 69 66 28 20 78 74 79 70 65 3d 3d if( xtype==
45a0: 65 74 46 4c 4f 41 54 20 29 20 72 65 61 6c 76 61 etFLOAT ) realva
45b0: 6c 75 65 20 2b 3d 20 72 6f 75 6e 64 65 72 3b 0a lue += rounder;.
45c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 /* Norma
45d0: 6c 69 7a 65 20 72 65 61 6c 76 61 6c 75 65 20 74 lize realvalue t
45e0: 6f 20 77 69 74 68 69 6e 20 31 30 2e 30 20 3e 20 o within 10.0 >
45f0: 72 65 61 6c 76 61 6c 75 65 20 3e 3d 20 31 2e 30 realvalue >= 1.0
4600: 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 78 70 20 */. exp
4610: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 = 0;. if(
4620: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 65 sqlite3IsNaN(re
4630: 61 6c 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 alvalue) ){.
4640: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 4e bufpt = "N
4650: 61 4e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 6c aN";. l
4660: 65 6e 67 74 68 20 3d 20 33 3b 0a 20 20 20 20 20 ength = 3;.
4670: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 break;.
4680: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 }. if
4690: 28 20 72 65 61 6c 76 61 6c 75 65 3e 30 2e 30 20 ( realvalue>0.0
46a0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 ){. whi
46b0: 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 le( realvalue>=1
46c0: 65 33 32 20 26 26 20 65 78 70 3c 3d 33 35 30 20 e32 && exp<=350
46d0: 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 ){ realvalue *=
46e0: 31 65 2d 33 32 3b 20 65 78 70 2b 3d 33 32 3b 20 1e-32; exp+=32;
46f0: 7d 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c }. whil
4700: 65 28 20 72 65 61 6c 76 61 6c 75 65 3e 3d 31 65 e( realvalue>=1e
4710: 38 20 26 26 20 65 78 70 3c 3d 33 35 30 20 29 7b 8 && exp<=350 ){
4720: 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d 20 31 65 realvalue *= 1e
4730: 2d 38 3b 20 65 78 70 2b 3d 38 3b 20 7d 0a 20 20 -8; exp+=8; }.
4740: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 72 while( r
4750: 65 61 6c 76 61 6c 75 65 3e 3d 31 30 2e 30 20 26 ealvalue>=10.0 &
4760: 26 20 65 78 70 3c 3d 33 35 30 20 29 7b 20 72 65 & exp<=350 ){ re
4770: 61 6c 76 61 6c 75 65 20 2a 3d 20 30 2e 31 3b 20 alvalue *= 0.1;
4780: 65 78 70 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 exp++; }.
4790: 20 20 20 77 68 69 6c 65 28 20 72 65 61 6c 76 61 while( realva
47a0: 6c 75 65 3c 31 65 2d 38 20 26 26 20 65 78 70 3e lue<1e-8 && exp>
47b0: 3d 2d 33 35 30 20 29 7b 20 72 65 61 6c 76 61 6c =-350 ){ realval
47c0: 75 65 20 2a 3d 20 31 65 38 3b 20 65 78 70 2d 3d ue *= 1e8; exp-=
47d0: 38 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 77 8; }. w
47e0: 68 69 6c 65 28 20 72 65 61 6c 76 61 6c 75 65 3c hile( realvalue<
47f0: 31 2e 30 20 26 26 20 65 78 70 3e 3d 2d 33 35 30 1.0 && exp>=-350
4800: 20 29 7b 20 72 65 61 6c 76 61 6c 75 65 20 2a 3d ){ realvalue *=
4810: 20 31 30 2e 30 3b 20 65 78 70 2d 2d 3b 20 7d 0a 10.0; exp--; }.
4820: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 65 78 if( ex
4830: 70 3e 33 35 30 20 7c 7c 20 65 78 70 3c 2d 33 35 p>350 || exp<-35
4840: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 0 ){.
4850: 20 69 66 28 20 70 72 65 66 69 78 3d 3d 27 2d 27 if( prefix=='-'
4860: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ){.
4870: 20 20 62 75 66 70 74 20 3d 20 22 2d 49 6e 66 22 bufpt = "-Inf"
4880: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 ;. }e
4890: 6c 73 65 20 69 66 28 20 70 72 65 66 69 78 3d 3d lse if( prefix==
48a0: 27 2b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 '+' ){.
48b0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 2b 49 bufpt = "+I
48c0: 6e 66 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 nf";.
48d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 }else{.
48e0: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 22 49 bufpt = "I
48f0: 6e 66 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 nf";.
4900: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c }. l
4910: 65 6e 67 74 68 20 3d 20 73 74 72 6c 65 6e 28 62 ength = strlen(b
4920: 75 66 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20 ufpt);.
4930: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 break;.
4940: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a }. }.
4950: 20 20 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 bufpt =
4960: 62 75 66 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a buf;. /*.
4970: 20 20 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 ** If th
4980: 65 20 66 69 65 6c 64 20 74 79 70 65 20 69 73 20 e field type is
4990: 65 74 47 45 4e 45 52 49 43 2c 20 74 68 65 6e 20 etGENERIC, then
49a0: 63 6f 6e 76 65 72 74 20 74 6f 20 65 69 74 68 65 convert to eithe
49b0: 72 20 65 74 45 58 50 0a 20 20 20 20 20 20 20 20 r etEXP.
49c0: 2a 2a 20 6f 72 20 65 74 46 4c 4f 41 54 2c 20 61 ** or etFLOAT, a
49d0: 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 20 s appropriate..
49e0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 */.
49f0: 20 20 66 6c 61 67 5f 65 78 70 20 3d 20 78 74 79 flag_exp = xty
4a00: 70 65 3d 3d 65 74 45 58 50 3b 0a 20 20 20 20 20 pe==etEXP;.
4a10: 20 20 20 69 66 28 20 78 74 79 70 65 21 3d 65 74 if( xtype!=et
4a20: 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20 20 20 FLOAT ){.
4a30: 20 20 20 72 65 61 6c 76 61 6c 75 65 20 2b 3d 20 realvalue +=
4a40: 72 6f 75 6e 64 65 72 3b 0a 20 20 20 20 20 20 20 rounder;.
4a50: 20 20 20 69 66 28 20 72 65 61 6c 76 61 6c 75 65 if( realvalue
4a60: 3e 3d 31 30 2e 30 20 29 7b 20 72 65 61 6c 76 61 >=10.0 ){ realva
4a70: 6c 75 65 20 2a 3d 20 30 2e 31 3b 20 65 78 70 2b lue *= 0.1; exp+
4a80: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 +; }. }.
4a90: 20 20 20 20 20 20 20 69 66 28 20 78 74 79 70 65 if( xtype
4aa0: 3d 3d 65 74 47 45 4e 45 52 49 43 20 29 7b 0a 20 ==etGENERIC ){.
4ab0: 20 20 20 20 20 20 20 20 20 66 6c 61 67 5f 72 74 flag_rt
4ac0: 7a 20 3d 20 21 66 6c 61 67 5f 61 6c 74 65 72 6e z = !flag_altern
4ad0: 61 74 65 66 6f 72 6d 3b 0a 20 20 20 20 20 20 20 ateform;.
4ae0: 20 20 20 69 66 28 20 65 78 70 3c 2d 34 20 7c 7c if( exp<-4 ||
4af0: 20 65 78 70 3e 70 72 65 63 69 73 69 6f 6e 20 29 exp>precision )
4b00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 74 {. xt
4b10: 79 70 65 20 3d 20 65 74 45 58 50 3b 0a 20 20 20 ype = etEXP;.
4b20: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 }else{.
4b30: 20 20 20 20 20 20 20 20 20 20 70 72 65 63 69 73 precis
4b40: 69 6f 6e 20 3d 20 70 72 65 63 69 73 69 6f 6e 20 ion = precision
4b50: 2d 20 65 78 70 3b 0a 20 20 20 20 20 20 20 20 20 - exp;.
4b60: 20 20 20 78 74 79 70 65 20 3d 20 65 74 46 4c 4f xtype = etFLO
4b70: 41 54 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a AT;. }.
4b80: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 }else{.
4b90: 20 20 20 20 20 20 20 20 20 66 6c 61 67 5f 72 74 flag_rt
4ba0: 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d z = 0;. }
4bb0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 74 79 . if( xty
4bc0: 70 65 3d 3d 65 74 45 58 50 20 29 7b 0a 20 20 20 pe==etEXP ){.
4bd0: 20 20 20 20 20 20 20 65 32 20 3d 20 30 3b 0a 20 e2 = 0;.
4be0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 }else{.
4bf0: 20 20 20 20 20 20 20 20 65 32 20 3d 20 65 78 70 e2 = exp
4c00: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
4c10: 20 20 20 20 6e 73 64 20 3d 20 30 3b 0a 20 20 20 nsd = 0;.
4c20: 20 20 20 20 20 66 6c 61 67 5f 64 70 20 3d 20 28 flag_dp = (
4c30: 70 72 65 63 69 73 69 6f 6e 3e 30 29 20 7c 20 66 precision>0) | f
4c40: 6c 61 67 5f 61 6c 74 65 72 6e 61 74 65 66 6f 72 lag_alternatefor
4c50: 6d 20 7c 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d m | flag_altform
4c60: 32 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 2;. /* Th
4c70: 65 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74 20 e sign in front
4c80: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 2a 2f of the number */
4c90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 65 . if( pre
4ca0: 66 69 78 20 29 7b 0a 20 20 20 20 20 20 20 20 20 fix ){.
4cb0: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 70 72 *(bufpt++) = pr
4cc0: 65 66 69 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a efix;. }.
4cd0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 67 69 74 /* Digit
4ce0: 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 64 s prior to the d
4cf0: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a 2f 0a ecimal point */.
4d00: 20 20 20 20 20 20 20 20 69 66 28 20 65 32 3c 30 if( e2<0
4d10: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 ){. *(
4d20: 62 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a bufpt++) = '0';.
4d30: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 }else{.
4d40: 20 20 20 20 20 20 20 20 20 66 6f 72 28 3b 20 65 for(; e
4d50: 32 3e 3d 30 3b 20 65 32 2d 2d 29 7b 0a 20 20 20 2>=0; e2--){.
4d60: 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 *(bufpt
4d70: 2b 2b 29 20 3d 20 65 74 5f 67 65 74 64 69 67 69 ++) = et_getdigi
4d80: 74 28 26 72 65 61 6c 76 61 6c 75 65 2c 26 6e 73 t(&realvalue,&ns
4d90: 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a d);. }.
4da0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
4db0: 20 20 2f 2a 20 54 68 65 20 64 65 63 69 6d 61 6c /* The decimal
4dc0: 20 70 6f 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 point */.
4dd0: 20 20 69 66 28 20 66 6c 61 67 5f 64 70 20 29 7b if( flag_dp ){
4de0: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 . *(buf
4df0: 70 74 2b 2b 29 20 3d 20 27 2e 27 3b 0a 20 20 20 pt++) = '.';.
4e00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f }. /
4e10: 2a 20 22 30 22 20 64 69 67 69 74 73 20 61 66 74 * "0" digits aft
4e20: 65 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 er the decimal p
4e30: 6f 69 6e 74 20 62 75 74 20 62 65 66 6f 72 65 20 oint but before
4e40: 74 68 65 20 66 69 72 73 74 0a 20 20 20 20 20 20 the first.
4e50: 20 20 2a 2a 20 73 69 67 6e 69 66 69 63 61 6e 74 ** significant
4e60: 20 64 69 67 69 74 20 6f 66 20 74 68 65 20 6e 75 digit of the nu
4e70: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 mber */.
4e80: 66 6f 72 28 65 32 2b 2b 3b 20 65 32 3c 30 20 26 for(e2++; e2<0 &
4e90: 26 20 70 72 65 63 69 73 69 6f 6e 3e 30 3b 20 70 & precision>0; p
4ea0: 72 65 63 69 73 69 6f 6e 2d 2d 2c 20 65 32 2b 2b recision--, e2++
4eb0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 ){. *(b
4ec0: 75 66 70 74 2b 2b 29 20 3d 20 27 30 27 3b 0a 20 ufpt++) = '0';.
4ed0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
4ee0: 20 2f 2a 20 53 69 67 6e 69 66 69 63 61 6e 74 20 /* Significant
4ef0: 64 69 67 69 74 73 20 61 66 74 65 72 20 74 68 65 digits after the
4f00: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 2a decimal point *
4f10: 2f 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 /. while(
4f20: 20 28 70 72 65 63 69 73 69 6f 6e 2d 2d 29 3e 30 (precision--)>0
4f30: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 28 ){. *(
4f40: 62 75 66 70 74 2b 2b 29 20 3d 20 65 74 5f 67 65 bufpt++) = et_ge
4f50: 74 64 69 67 69 74 28 26 72 65 61 6c 76 61 6c 75 tdigit(&realvalu
4f60: 65 2c 26 6e 73 64 29 3b 0a 20 20 20 20 20 20 20 e,&nsd);.
4f70: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 65 }. /* Re
4f80: 6d 6f 76 65 20 74 72 61 69 6c 69 6e 67 20 7a 65 move trailing ze
4f90: 72 6f 73 20 61 6e 64 20 74 68 65 20 22 2e 22 20 ros and the "."
4fa0: 69 66 20 6e 6f 20 64 69 67 69 74 73 20 66 6f 6c if no digits fol
4fb0: 6c 6f 77 20 74 68 65 20 22 2e 22 20 2a 2f 0a 20 low the "." */.
4fc0: 20 20 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f if( flag_
4fd0: 72 74 7a 20 26 26 20 66 6c 61 67 5f 64 70 20 29 rtz && flag_dp )
4fe0: 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c {. whil
4ff0: 65 28 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 30 e( bufpt[-1]=='0
5000: 27 20 29 20 2a 28 2d 2d 62 75 66 70 74 29 20 3d ' ) *(--bufpt) =
5010: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 0;. as
5020: 73 65 72 74 28 20 62 75 66 70 74 3e 62 75 66 20 sert( bufpt>buf
5030: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 );. if(
5040: 20 62 75 66 70 74 5b 2d 31 5d 3d 3d 27 2e 27 20 bufpt[-1]=='.'
5050: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ){. i
5060: 66 28 20 66 6c 61 67 5f 61 6c 74 66 6f 72 6d 32 f( flag_altform2
5070: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ){.
5080: 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 *(bufpt++) = '
5090: 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 0';.
50a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 }else{.
50b0: 20 20 20 20 20 2a 28 2d 2d 62 75 66 70 74 29 20 *(--bufpt)
50c0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 = 0;.
50d0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 }. }.
50e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
50f0: 20 2f 2a 20 41 64 64 20 74 68 65 20 22 65 4e 4e /* Add the "eNN
5100: 4e 22 20 73 75 66 66 69 78 20 2a 2f 0a 20 20 20 N" suffix */.
5110: 20 20 20 20 20 69 66 28 20 66 6c 61 67 5f 65 78 if( flag_ex
5120: 70 20 7c 7c 20 28 78 74 79 70 65 3d 3d 65 74 45 p || (xtype==etE
5130: 58 50 20 26 26 20 65 78 70 29 20 29 7b 0a 20 20 XP && exp) ){.
5140: 20 20 20 20 20 20 20 20 2a 28 62 75 66 70 74 2b *(bufpt+
5150: 2b 29 20 3d 20 61 44 69 67 69 74 73 5b 69 6e 66 +) = aDigits[inf
5160: 6f 70 2d 3e 63 68 61 72 73 65 74 5d 3b 0a 20 20 op->charset];.
5170: 20 20 20 20 20 20 20 20 69 66 28 20 65 78 70 3c if( exp<
5180: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 0 ){.
5190: 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 27 2d *(bufpt++) = '-
51a0: 27 3b 20 65 78 70 20 3d 20 2d 65 78 70 3b 0a 20 '; exp = -exp;.
51b0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a }else{.
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 *(bu
51d0: 66 70 74 2b 2b 29 20 3d 20 27 2b 27 3b 0a 20 20 fpt++) = '+';.
51e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
51f0: 20 20 20 20 69 66 28 20 65 78 70 3e 3d 31 30 30 if( exp>=100
5200: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ){.
5210: 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 28 65 78 *(bufpt++) = (ex
5220: 70 2f 31 30 30 29 2b 27 30 27 3b 20 20 20 20 20 p/100)+'0';
5230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 30 /* 10
5240: 30 27 73 20 64 69 67 69 74 20 2a 2f 0a 20 20 20 0's digit */.
5250: 20 20 20 20 20 20 20 20 20 65 78 70 20 25 3d 20 exp %=
5260: 31 30 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 100;. }
5270: 0a 20 20 20 20 20 20 20 20 20 20 2a 28 62 75 66 . *(buf
5280: 70 74 2b 2b 29 20 3d 20 65 78 70 2f 31 30 2b 27 pt++) = exp/10+'
5290: 30 27 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 0';
52a0: 20 20 20 20 20 20 20 20 2f 2a 20 31 30 27 73 20 /* 10's
52b0: 64 69 67 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 digit */.
52c0: 20 20 20 2a 28 62 75 66 70 74 2b 2b 29 20 3d 20 *(bufpt++) =
52d0: 65 78 70 25 31 30 2b 27 30 27 3b 20 20 20 20 20 exp%10+'0';
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
52f0: 2f 2a 20 31 27 73 20 64 69 67 69 74 20 2a 2f 0a /* 1's digit */.
5300: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
5310: 20 20 2a 62 75 66 70 74 20 3d 20 30 3b 0a 0a 20 *bufpt = 0;..
5320: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f /* The co
5330: 6e 76 65 72 74 65 64 20 6e 75 6d 62 65 72 20 69 nverted number i
5340: 73 20 69 6e 20 62 75 66 5b 5d 20 61 6e 64 20 7a s in buf[] and z
5350: 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 2e 20 ero terminated.
5360: 4f 75 74 70 75 74 20 69 74 2e 0a 20 20 20 20 20 Output it..
5370: 20 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 ** Note that
5380: 74 68 65 20 6e 75 6d 62 65 72 20 69 73 20 69 6e the number is in
5390: 20 74 68 65 20 75 73 75 61 6c 20 6f 72 64 65 72 the usual order
53a0: 2c 20 6e 6f 74 20 72 65 76 65 72 73 65 64 20 61 , not reversed a
53b0: 73 20 77 69 74 68 0a 20 20 20 20 20 20 20 20 2a s with. *
53c0: 2a 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 * integer conver
53d0: 73 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20 20 20 20 sions. */.
53e0: 20 20 6c 65 6e 67 74 68 20 3d 20 62 75 66 70 74 length = bufpt
53f0: 2d 62 75 66 3b 0a 20 20 20 20 20 20 20 20 62 75 -buf;. bu
5400: 66 70 74 20 3d 20 62 75 66 3b 0a 0a 20 20 20 20 fpt = buf;..
5410: 20 20 20 20 2f 2a 20 53 70 65 63 69 61 6c 20 63 /* Special c
5420: 61 73 65 3a 20 20 41 64 64 20 6c 65 61 64 69 6e ase: Add leadin
5430: 67 20 7a 65 72 6f 73 20 69 66 20 74 68 65 20 66 g zeros if the f
5440: 6c 61 67 5f 7a 65 72 6f 70 61 64 20 66 6c 61 67 lag_zeropad flag
5450: 20 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 is. ** s
5460: 65 74 20 61 6e 64 20 77 65 20 61 72 65 20 6e 6f et and we are no
5470: 74 20 6c 65 66 74 20 6a 75 73 74 69 66 69 65 64 t left justified
5480: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 */. if(
5490: 66 6c 61 67 5f 7a 65 72 6f 70 61 64 20 26 26 20 flag_zeropad &&
54a0: 21 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 !flag_leftjustif
54b0: 79 20 26 26 20 6c 65 6e 67 74 68 20 3c 20 77 69 y && length < wi
54c0: 64 74 68 29 7b 0a 20 20 20 20 20 20 20 20 20 20 dth){.
54d0: 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 20 20 20 int i;.
54e0: 20 69 6e 74 20 6e 50 61 64 20 3d 20 77 69 64 74 int nPad = widt
54f0: 68 20 2d 20 6c 65 6e 67 74 68 3b 0a 20 20 20 20 h - length;.
5500: 20 20 20 20 20 20 66 6f 72 28 69 3d 77 69 64 74 for(i=widt
5510: 68 3b 20 69 3e 3d 6e 50 61 64 3b 20 69 2d 2d 29 h; i>=nPad; i--)
5520: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 {. bu
5530: 66 70 74 5b 69 5d 20 3d 20 62 75 66 70 74 5b 69 fpt[i] = bufpt[i
5540: 2d 6e 50 61 64 5d 3b 0a 20 20 20 20 20 20 20 20 -nPad];.
5550: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 20 }. i
5560: 3d 20 70 72 65 66 69 78 21 3d 30 3b 0a 20 20 20 = prefix!=0;.
5570: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 6e 50 while( nP
5580: 61 64 2d 2d 20 29 20 62 75 66 70 74 5b 69 2b 2b ad-- ) bufpt[i++
5590: 5d 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 ] = '0';.
55a0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 77 69 64 74 length = widt
55b0: 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e h;. }.#en
55c0: 64 69 66 0a 20 20 20 20 20 20 20 20 62 72 65 61 dif. brea
55d0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 k;. case et
55e0: 53 49 5a 45 3a 0a 20 20 20 20 20 20 20 20 2a 28 SIZE:. *(
55f0: 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 2a 29 29 va_arg(ap,int*))
5600: 20 3d 20 70 41 63 63 75 6d 2d 3e 6e 43 68 61 72 = pAccum->nChar
5610: 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 ;. length
5620: 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 = width = 0;.
5630: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
5640: 20 20 20 63 61 73 65 20 65 74 50 45 52 43 45 4e case etPERCEN
5650: 54 3a 0a 20 20 20 20 20 20 20 20 62 75 66 5b 30 T:. buf[0
5660: 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20 20 ] = '%';.
5670: 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 bufpt = buf;.
5680: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 31 length = 1
5690: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b ;. break;
56a0: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 43 48 . case etCH
56b0: 41 52 4c 49 54 3a 0a 20 20 20 20 20 20 63 61 73 ARLIT:. cas
56c0: 65 20 65 74 43 48 41 52 58 3a 0a 20 20 20 20 20 e etCHARX:.
56d0: 20 20 20 63 20 3d 20 62 75 66 5b 30 5d 20 3d 20 c = buf[0] =
56e0: 28 78 74 79 70 65 3d 3d 65 74 43 48 41 52 58 20 (xtype==etCHARX
56f0: 3f 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 ? va_arg(ap,int)
5700: 20 3a 20 2a 2b 2b 66 6d 74 29 3b 0a 20 20 20 20 : *++fmt);.
5710: 20 20 20 20 69 66 28 20 70 72 65 63 69 73 69 6f if( precisio
5720: 6e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 n>=0 ){.
5730: 20 20 66 6f 72 28 69 64 78 3d 31 3b 20 69 64 78 for(idx=1; idx
5740: 3c 70 72 65 63 69 73 69 6f 6e 3b 20 69 64 78 2b <precision; idx+
5750: 2b 29 20 62 75 66 5b 69 64 78 5d 20 3d 20 63 3b +) buf[idx] = c;
5760: 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 . lengt
5770: 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b 0a 20 h = precision;.
5780: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 }else{.
5790: 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d length =
57a0: 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 1;. }.
57b0: 20 20 20 20 20 62 75 66 70 74 20 3d 20 62 75 66 bufpt = buf
57c0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b ;. break;
57d0: 0a 20 20 20 20 20 20 63 61 73 65 20 65 74 53 54 . case etST
57e0: 52 49 4e 47 3a 0a 20 20 20 20 20 20 63 61 73 65 RING:. case
57f0: 20 65 74 44 59 4e 53 54 52 49 4e 47 3a 0a 20 20 etDYNSTRING:.
5800: 20 20 20 20 20 20 62 75 66 70 74 20 3d 20 76 61 bufpt = va
5810: 5f 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a _arg(ap,char*);.
5820: 20 20 20 20 20 20 20 20 69 66 28 20 62 75 66 70 if( bufp
5830: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 t==0 ){.
5840: 20 20 62 75 66 70 74 20 3d 20 22 22 3b 0a 20 20 bufpt = "";.
5850: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 }else if(
5860: 78 74 79 70 65 3d 3d 65 74 44 59 4e 53 54 52 49 xtype==etDYNSTRI
5870: 4e 47 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 NG ){.
5880: 7a 45 78 74 72 61 20 3d 20 62 75 66 70 74 3b 0a zExtra = bufpt;.
5890: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
58a0: 20 20 69 66 28 20 70 72 65 63 69 73 69 6f 6e 3e if( precision>
58b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 =0 ){.
58c0: 66 6f 72 28 6c 65 6e 67 74 68 3d 30 3b 20 6c 65 for(length=0; le
58d0: 6e 67 74 68 3c 70 72 65 63 69 73 69 6f 6e 20 26 ngth<precision &
58e0: 26 20 62 75 66 70 74 5b 6c 65 6e 67 74 68 5d 3b & bufpt[length];
58f0: 20 6c 65 6e 67 74 68 2b 2b 29 7b 7d 0a 20 20 20 length++){}.
5900: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 }else{.
5910: 20 20 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 length = s
5920: 74 72 6c 65 6e 28 62 75 66 70 74 29 3b 0a 20 20 trlen(bufpt);.
5930: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
5940: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
5950: 65 20 65 74 53 51 4c 45 53 43 41 50 45 3a 0a 20 e etSQLESCAPE:.
5960: 20 20 20 20 20 63 61 73 65 20 65 74 53 51 4c 45 case etSQLE
5970: 53 43 41 50 45 32 3a 0a 20 20 20 20 20 20 63 61 SCAPE2:. ca
5980: 73 65 20 65 74 53 51 4c 45 53 43 41 50 45 33 3a se etSQLESCAPE3:
5990: 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 {. int i
59a0: 2c 20 6a 2c 20 6e 2c 20 63 68 2c 20 69 73 6e 75 , j, n, ch, isnu
59b0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 ll;. int
59c0: 6e 65 65 64 51 75 6f 74 65 3b 0a 20 20 20 20 20 needQuote;.
59d0: 20 20 20 63 68 61 72 20 71 20 3d 20 28 28 78 74 char q = ((xt
59e0: 79 70 65 3d 3d 65 74 53 51 4c 45 53 43 41 50 45 ype==etSQLESCAPE
59f0: 33 29 3f 27 22 27 3a 27 5c 27 27 29 3b 20 20 20 3)?'"':'\'');
5a00: 2f 2a 20 51 75 6f 74 65 20 63 68 61 72 61 63 74 /* Quote charact
5a10: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 er */. ch
5a20: 61 72 20 2a 65 73 63 61 72 67 20 3d 20 76 61 5f ar *escarg = va_
5a30: 61 72 67 28 61 70 2c 63 68 61 72 2a 29 3b 0a 20 arg(ap,char*);.
5a40: 20 20 20 20 20 20 20 69 73 6e 75 6c 6c 20 3d 20 isnull =
5a50: 65 73 63 61 72 67 3d 3d 30 3b 0a 20 20 20 20 20 escarg==0;.
5a60: 20 20 20 69 66 28 20 69 73 6e 75 6c 6c 20 29 20 if( isnull )
5a70: 65 73 63 61 72 67 20 3d 20 28 78 74 79 70 65 3d escarg = (xtype=
5a80: 3d 65 74 53 51 4c 45 53 43 41 50 45 32 20 3f 20 =etSQLESCAPE2 ?
5a90: 22 4e 55 4c 4c 22 20 3a 20 22 28 4e 55 4c 4c 29 "NULL" : "(NULL)
5aa0: 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 ");. for(
5ab0: 69 3d 6e 3d 30 3b 20 28 63 68 3d 65 73 63 61 72 i=n=0; (ch=escar
5ac0: 67 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a g[i])!=0; i++){.
5ad0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 68 if( ch
5ae0: 3d 3d 71 20 29 20 20 6e 2b 2b 3b 0a 20 20 20 20 ==q ) n++;.
5af0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 65 }. ne
5b00: 65 64 51 75 6f 74 65 20 3d 20 21 69 73 6e 75 6c edQuote = !isnul
5b10: 6c 20 26 26 20 78 74 79 70 65 3d 3d 65 74 53 51 l && xtype==etSQ
5b20: 4c 45 53 43 41 50 45 32 3b 0a 20 20 20 20 20 20 LESCAPE2;.
5b30: 20 20 6e 20 2b 3d 20 69 20 2b 20 31 20 2b 20 6e n += i + 1 + n
5b40: 65 65 64 51 75 6f 74 65 2a 32 3b 0a 20 20 20 20 eedQuote*2;.
5b50: 20 20 20 20 69 66 28 20 6e 3e 65 74 42 55 46 53 if( n>etBUFS
5b60: 49 5a 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 IZE ){.
5b70: 20 62 75 66 70 74 20 3d 20 7a 45 78 74 72 61 20 bufpt = zExtra
5b80: 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 = sqlite3_malloc
5b90: 28 20 6e 20 29 3b 0a 20 20 20 20 20 20 20 20 20 ( n );.
5ba0: 20 69 66 28 20 62 75 66 70 74 3d 3d 30 20 29 20 if( bufpt==0 )
5bb0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 return;.
5bc0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 }else{.
5bd0: 20 62 75 66 70 74 20 3d 20 62 75 66 3b 0a 20 20 bufpt = buf;.
5be0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
5bf0: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 j = 0;. i
5c00: 66 28 20 6e 65 65 64 51 75 6f 74 65 20 29 20 62 f( needQuote ) b
5c10: 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 ufpt[j++] = q;.
5c20: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 for(i=0;
5c30: 28 63 68 3d 65 73 63 61 72 67 5b 69 5d 29 21 3d (ch=escarg[i])!=
5c40: 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 0; i++){.
5c50: 20 20 20 62 75 66 70 74 5b 6a 2b 2b 5d 20 3d 20 bufpt[j++] =
5c60: 63 68 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 ch;. if
5c70: 28 20 63 68 3d 3d 71 20 29 20 62 75 66 70 74 5b ( ch==q ) bufpt[
5c80: 6a 2b 2b 5d 20 3d 20 63 68 3b 0a 20 20 20 20 20 j++] = ch;.
5c90: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 }. if(
5ca0: 20 6e 65 65 64 51 75 6f 74 65 20 29 20 62 75 66 needQuote ) buf
5cb0: 70 74 5b 6a 2b 2b 5d 20 3d 20 71 3b 0a 20 20 20 pt[j++] = q;.
5cc0: 20 20 20 20 20 62 75 66 70 74 5b 6a 5d 20 3d 20 bufpt[j] =
5cd0: 30 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 74 0;. lengt
5ce0: 68 20 3d 20 6a 3b 0a 20 20 20 20 20 20 20 20 2f h = j;. /
5cf0: 2a 20 54 68 65 20 70 72 65 63 69 73 69 6f 6e 20 * The precision
5d00: 69 73 20 69 67 6e 6f 72 65 64 20 6f 6e 20 25 71 is ignored on %q
5d10: 20 61 6e 64 20 25 51 20 2a 2f 0a 20 20 20 20 20 and %Q */.
5d20: 20 20 20 2f 2a 20 69 66 28 20 70 72 65 63 69 73 /* if( precis
5d30: 69 6f 6e 3e 3d 30 20 26 26 20 70 72 65 63 69 73 ion>=0 && precis
5d40: 69 6f 6e 3c 6c 65 6e 67 74 68 20 29 20 6c 65 6e ion<length ) len
5d50: 67 74 68 20 3d 20 70 72 65 63 69 73 69 6f 6e 3b gth = precision;
5d60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 62 72 65 61 */. brea
5d70: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 k;. }.
5d80: 20 63 61 73 65 20 65 74 54 4f 4b 45 4e 3a 20 7b case etTOKEN: {
5d90: 0a 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 20 2a . Token *
5da0: 70 54 6f 6b 65 6e 20 3d 20 76 61 5f 61 72 67 28 pToken = va_arg(
5db0: 61 70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 20 ap, Token*);.
5dc0: 20 20 20 20 20 69 66 28 20 70 54 6f 6b 65 6e 20 if( pToken
5dd0: 26 26 20 70 54 6f 6b 65 6e 2d 3e 7a 20 29 7b 0a && pToken->z ){.
5de0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite
5df0: 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 3StrAccumAppend(
5e00: 70 41 63 63 75 6d 2c 20 28 63 6f 6e 73 74 20 63 pAccum, (const c
5e10: 68 61 72 2a 29 70 54 6f 6b 65 6e 2d 3e 7a 2c 20 har*)pToken->z,
5e20: 70 54 6f 6b 65 6e 2d 3e 6e 29 3b 0a 20 20 20 20 pToken->n);.
5e30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 65 }. le
5e40: 6e 67 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 ngth = width = 0
5e50: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b ;. break;
5e60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 . }. c
5e70: 61 73 65 20 65 74 53 52 43 4c 49 53 54 3a 20 7b ase etSRCLIST: {
5e80: 0a 20 20 20 20 20 20 20 20 53 72 63 4c 69 73 74 . SrcList
5e90: 20 2a 70 53 72 63 20 3d 20 76 61 5f 61 72 67 28 *pSrc = va_arg(
5ea0: 61 70 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20 ap, SrcList*);.
5eb0: 20 20 20 20 20 20 20 69 6e 74 20 6b 20 3d 20 76 int k = v
5ec0: 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a a_arg(ap, int);.
5ed0: 20 20 20 20 20 20 20 20 73 74 72 75 63 74 20 53 struct S
5ee0: 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 70 49 74 rcList_item *pIt
5ef0: 65 6d 20 3d 20 26 70 53 72 63 2d 3e 61 5b 6b 5d em = &pSrc->a[k]
5f00: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 ;. assert
5f10: 28 20 6b 3e 3d 30 20 26 26 20 6b 3c 70 53 72 63 ( k>=0 && k<pSrc
5f20: 2d 3e 6e 53 72 63 20 29 3b 0a 20 20 20 20 20 20 ->nSrc );.
5f30: 20 20 69 66 28 20 70 49 74 65 6d 2d 3e 7a 44 61 if( pItem->zDa
5f40: 74 61 62 61 73 65 20 26 26 20 70 49 74 65 6d 2d tabase && pItem-
5f50: 3e 7a 44 61 74 61 62 61 73 65 5b 30 5d 20 29 7b >zDatabase[0] ){
5f60: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 . sqlit
5f70: 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 e3StrAccumAppend
5f80: 28 70 41 63 63 75 6d 2c 20 70 49 74 65 6d 2d 3e (pAccum, pItem->
5f90: 7a 44 61 74 61 62 61 73 65 2c 20 2d 31 29 3b 0a zDatabase, -1);.
5fa0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite
5fb0: 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 3StrAccumAppend(
5fc0: 70 41 63 63 75 6d 2c 20 22 2e 22 2c 20 31 29 3b pAccum, ".", 1);
5fd0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
5fe0: 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 sqlite3StrAcc
5ff0: 75 6d 41 70 70 65 6e 64 28 70 41 63 63 75 6d 2c umAppend(pAccum,
6000: 20 70 49 74 65 6d 2d 3e 7a 4e 61 6d 65 2c 20 2d pItem->zName, -
6010: 31 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 67 1);. leng
6020: 74 68 20 3d 20 77 69 64 74 68 20 3d 20 30 3b 0a th = width = 0;.
6030: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 break;.
6040: 20 20 20 20 20 7d 0a 20 20 20 20 7d 2f 2a 20 45 }. }/* E
6050: 6e 64 20 73 77 69 74 63 68 20 6f 76 65 72 20 74 nd switch over t
6060: 68 65 20 66 6f 72 6d 61 74 20 74 79 70 65 20 2a he format type *
6070: 2f 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 /. /*. **
6080: 54 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 The text of the
6090: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f conversion is po
60a0: 69 6e 74 65 64 20 74 6f 20 62 79 20 22 62 75 66 inted to by "buf
60b0: 70 74 22 20 61 6e 64 20 69 73 0a 20 20 20 20 2a pt" and is. *
60c0: 2a 20 22 6c 65 6e 67 74 68 22 20 63 68 61 72 61 * "length" chara
60d0: 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 cters long. The
60e0: 20 66 69 65 6c 64 20 77 69 64 74 68 20 69 73 20 field width is
60f0: 22 77 69 64 74 68 22 2e 20 20 44 6f 0a 20 20 20 "width". Do.
6100: 20 2a 2a 20 74 68 65 20 6f 75 74 70 75 74 2e 0a ** the output..
6110: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 */. if( !
6120: 66 6c 61 67 5f 6c 65 66 74 6a 75 73 74 69 66 79 flag_leftjustify
6130: 20 29 7b 0a 20 20 20 20 20 20 72 65 67 69 73 74 ){. regist
6140: 65 72 20 69 6e 74 20 6e 73 70 61 63 65 3b 0a 20 er int nspace;.
6150: 20 20 20 20 20 6e 73 70 61 63 65 20 3d 20 77 69 nspace = wi
6160: 64 74 68 2d 6c 65 6e 67 74 68 3b 0a 20 20 20 20 dth-length;.
6170: 20 20 69 66 28 20 6e 73 70 61 63 65 3e 30 20 29 if( nspace>0 )
6180: 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 {. append
6190: 53 70 61 63 65 28 70 41 63 63 75 6d 2c 20 6e 73 Space(pAccum, ns
61a0: 70 61 63 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 pace);. }.
61b0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 65 6e }. if( len
61c0: 67 74 68 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 gth>0 ){. s
61d0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 qlite3StrAccumAp
61e0: 70 65 6e 64 28 70 41 63 63 75 6d 2c 20 62 75 66 pend(pAccum, buf
61f0: 70 74 2c 20 6c 65 6e 67 74 68 29 3b 0a 20 20 20 pt, length);.
6200: 20 7d 0a 20 20 20 20 69 66 28 20 66 6c 61 67 5f }. if( flag_
6210: 6c 65 66 74 6a 75 73 74 69 66 79 20 29 7b 0a 20 leftjustify ){.
6220: 20 20 20 20 20 72 65 67 69 73 74 65 72 20 69 6e register in
6230: 74 20 6e 73 70 61 63 65 3b 0a 20 20 20 20 20 20 t nspace;.
6240: 6e 73 70 61 63 65 20 3d 20 77 69 64 74 68 2d 6c nspace = width-l
6250: 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 69 66 28 ength;. if(
6260: 20 6e 73 70 61 63 65 3e 30 20 29 7b 0a 20 20 20 nspace>0 ){.
6270: 20 20 20 20 20 61 70 70 65 6e 64 53 70 61 63 65 appendSpace
6280: 28 70 41 63 63 75 6d 2c 20 6e 73 70 61 63 65 29 (pAccum, nspace)
6290: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
62a0: 20 20 20 20 69 66 28 20 7a 45 78 74 72 61 20 29 if( zExtra )
62b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f {. sqlite3_
62c0: 66 72 65 65 28 7a 45 78 74 72 61 29 3b 0a 20 20 free(zExtra);.
62d0: 20 20 7d 0a 20 20 7d 2f 2a 20 45 6e 64 20 66 6f }. }/* End fo
62e0: 72 20 6c 6f 6f 70 20 6f 76 65 72 20 74 68 65 20 r loop over the
62f0: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 2a 2f format string */
6300: 0a 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 66 75 6e .} /* End of fun
6310: 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 ction */../*.**
6320: 41 70 70 65 6e 64 20 4e 20 62 79 74 65 73 20 6f Append N bytes o
6330: 66 20 74 65 78 74 20 66 72 6f 6d 20 7a 20 74 6f f text from z to
6340: 20 74 68 65 20 53 74 72 41 63 63 75 6d 20 6f 62 the StrAccum ob
6350: 6a 65 63 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 ject..*/.void sq
6360: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 lite3StrAccumApp
6370: 65 6e 64 28 53 74 72 41 63 63 75 6d 20 2a 70 2c end(StrAccum *p,
6380: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 const char *z,
6390: 69 6e 74 20 4e 29 7b 0a 20 20 69 66 28 20 70 2d int N){. if( p-
63a0: 3e 74 6f 6f 42 69 67 20 7c 20 70 2d 3e 6d 61 6c >tooBig | p->mal
63b0: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 locFailed ){.
63c0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 return;. }. i
63d0: 66 28 20 4e 3c 30 20 29 7b 0a 20 20 20 20 4e 20 f( N<0 ){. N
63e0: 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 7d = strlen(z);. }
63f0: 0a 20 20 69 66 28 20 4e 3d 3d 30 20 29 7b 0a 20 . if( N==0 ){.
6400: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 return;. }.
6410: 20 69 66 28 20 70 2d 3e 6e 43 68 61 72 2b 4e 20 if( p->nChar+N
6420: 3e 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a >= p->nAlloc ){.
6430: 20 20 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a char *zNew;.
6440: 20 20 20 20 69 66 28 20 21 70 2d 3e 75 73 65 4d if( !p->useM
6450: 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 70 alloc ){. p
6460: 2d 3e 74 6f 6f 42 69 67 20 3d 20 31 3b 0a 20 20 ->tooBig = 1;.
6470: 20 20 20 20 4e 20 3d 20 70 2d 3e 6e 41 6c 6c 6f N = p->nAllo
6480: 63 20 2d 20 70 2d 3e 6e 43 68 61 72 20 2d 20 31 c - p->nChar - 1
6490: 3b 0a 20 20 20 20 20 20 69 66 28 20 4e 3c 3d 30 ;. if( N<=0
64a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 ){. retu
64b0: 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 rn;. }.
64c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 36 34 }else{. i64
64d0: 20 73 7a 4e 65 77 20 3d 20 70 2d 3e 6e 41 6c 6c szNew = p->nAll
64e0: 6f 63 3b 0a 20 20 20 20 20 20 73 7a 4e 65 77 20 oc;. szNew
64f0: 2b 3d 20 4e 20 2b 20 31 3b 0a 20 20 20 20 20 20 += N + 1;.
6500: 69 66 28 20 73 7a 4e 65 77 20 3e 20 70 2d 3e 6d if( szNew > p->m
6510: 78 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 xAlloc ){.
6520: 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70 2d p->nAlloc = p-
6530: 3e 6d 78 41 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 >mxAlloc;.
6540: 20 20 69 66 28 20 28 28 69 36 34 29 70 2d 3e 6e if( ((i64)p->n
6550: 43 68 61 72 29 2b 28 28 69 36 34 29 4e 29 20 3e Char)+((i64)N) >
6560: 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 = p->nAlloc ){.
6570: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 sqlite3
6580: 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 70 29 StrAccumReset(p)
6590: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 74 ;. p->t
65a0: 6f 6f 42 69 67 20 3d 20 31 3b 0a 20 20 20 20 20 ooBig = 1;.
65b0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 return;.
65c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c }. }el
65d0: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 6e se{. p->n
65e0: 41 6c 6c 6f 63 20 3d 20 73 7a 4e 65 77 3b 0a 20 Alloc = szNew;.
65f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 4e 65 }. zNe
6600: 77 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c w = sqlite3_mall
6610: 6f 63 28 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 3b oc( p->nAlloc );
6620: 0a 20 20 20 20 20 20 69 66 28 20 7a 4e 65 77 20 . if( zNew
6630: 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 ){. memcp
6640: 79 28 7a 4e 65 77 2c 20 70 2d 3e 7a 54 65 78 74 y(zNew, p->zText
6650: 2c 20 70 2d 3e 6e 43 68 61 72 29 3b 0a 20 20 20 , p->nChar);.
6660: 20 20 20 20 20 73 71 6c 69 74 65 33 53 74 72 41 sqlite3StrA
6670: 63 63 75 6d 52 65 73 65 74 28 70 29 3b 0a 20 20 ccumReset(p);.
6680: 20 20 20 20 20 20 70 2d 3e 7a 54 65 78 74 20 3d p->zText =
6690: 20 7a 4e 65 77 3b 0a 20 20 20 20 20 20 7d 65 6c zNew;. }el
66a0: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 6d se{. p->m
66b0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b allocFailed = 1;
66c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 . sqlite3
66d0: 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 70 29 StrAccumReset(p)
66e0: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e ;. return
66f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
6700: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 2d }. memcpy(&p-
6710: 3e 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72 5d >zText[p->nChar]
6720: 2c 20 7a 2c 20 4e 29 3b 0a 20 20 70 2d 3e 6e 43 , z, N);. p->nC
6730: 68 61 72 20 2b 3d 20 4e 3b 0a 7d 0a 0a 2f 2a 0a har += N;.}../*.
6740: 2a 2a 20 46 69 6e 69 73 68 20 6f 66 66 20 61 20 ** Finish off a
6750: 73 74 72 69 6e 67 20 62 79 20 6d 61 6b 69 6e 67 string by making
6760: 20 73 75 72 65 20 69 74 20 69 73 20 7a 65 72 6f sure it is zero
6770: 2d 74 65 72 6d 69 6e 61 74 65 64 2e 0a 2a 2a 20 -terminated..**
6780: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 Return a pointer
6790: 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e to the resultin
67a0: 67 20 73 74 72 69 6e 67 2e 20 20 52 65 74 75 72 g string. Retur
67b0: 6e 20 61 20 4e 55 4c 4c 0a 2a 2a 20 70 6f 69 6e n a NULL.** poin
67c0: 74 65 72 20 69 66 20 61 6e 79 20 6b 69 6e 64 20 ter if any kind
67d0: 6f 66 20 65 72 72 6f 72 20 77 61 73 20 65 6e 63 of error was enc
67e0: 6f 75 6e 74 65 72 65 64 2e 0a 2a 2f 0a 63 68 61 ountered..*/.cha
67f0: 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 r *sqlite3StrAcc
6800: 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 umFinish(StrAccu
6810: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e m *p){. if( p->
6820: 7a 54 65 78 74 20 29 7b 0a 20 20 20 20 70 2d 3e zText ){. p->
6830: 7a 54 65 78 74 5b 70 2d 3e 6e 43 68 61 72 5d 20 zText[p->nChar]
6840: 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e = 0;. if( p->
6850: 75 73 65 4d 61 6c 6c 6f 63 20 26 26 20 70 2d 3e useMalloc && p->
6860: 7a 54 65 78 74 3d 3d 70 2d 3e 7a 42 61 73 65 20 zText==p->zBase
6870: 29 7b 0a 20 20 20 20 20 20 70 2d 3e 7a 54 65 78 ){. p->zTex
6880: 74 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c t = sqlite3_mall
6890: 6f 63 28 20 70 2d 3e 6e 43 68 61 72 2b 31 20 29 oc( p->nChar+1 )
68a0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 7a ;. if( p->z
68b0: 54 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 Text ){.
68c0: 6d 65 6d 63 70 79 28 70 2d 3e 7a 54 65 78 74 2c memcpy(p->zText,
68d0: 20 70 2d 3e 7a 42 61 73 65 2c 20 70 2d 3e 6e 43 p->zBase, p->nC
68e0: 68 61 72 2b 31 29 3b 0a 20 20 20 20 20 20 7d 65 har+1);. }e
68f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e lse{. p->
6900: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 mallocFailed = 1
6910: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a ;. }. }.
6920: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e }. return p->
6930: 7a 54 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 zText;.}../*.**
6940: 52 65 73 65 74 20 61 6e 20 53 74 72 41 63 63 75 Reset an StrAccu
6950: 6d 20 73 74 72 69 6e 67 2e 20 20 52 65 63 6c 61 m string. Recla
6960: 69 6d 20 61 6c 6c 20 6d 61 6c 6c 6f 63 65 64 20 im all malloced
6970: 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 76 6f 69 64 20 memory..*/.void
6980: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 sqlite3StrAccumR
6990: 65 73 65 74 28 53 74 72 41 63 63 75 6d 20 2a 70 eset(StrAccum *p
69a0: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 78 ){. if( p->zTex
69b0: 74 21 3d 70 2d 3e 7a 42 61 73 65 20 29 7b 0a 20 t!=p->zBase ){.
69c0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 sqlite3_free(
69d0: 70 2d 3e 7a 54 65 78 74 29 3b 0a 20 20 20 20 70 p->zText);. p
69e0: 2d 3e 7a 54 65 78 74 20 3d 20 30 3b 0a 20 20 7d ->zText = 0;. }
69f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 .}../*.** Initia
6a00: 6c 69 7a 65 20 61 20 73 74 72 69 6e 67 20 61 63 lize a string ac
6a10: 63 75 6d 75 6c 61 74 6f 72 0a 2a 2f 0a 73 74 61 cumulator.*/.sta
6a20: 74 69 63 20 76 6f 69 64 20 73 71 6c 69 74 65 33 tic void sqlite3
6a30: 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 StrAccumInit(Str
6a40: 41 63 63 75 6d 20 2a 70 2c 20 63 68 61 72 20 2a Accum *p, char *
6a50: 7a 42 61 73 65 2c 20 69 6e 74 20 6e 2c 20 69 6e zBase, int n, in
6a60: 74 20 6d 78 29 7b 0a 20 20 70 2d 3e 7a 54 65 78 t mx){. p->zTex
6a70: 74 20 3d 20 70 2d 3e 7a 42 61 73 65 20 3d 20 7a t = p->zBase = z
6a80: 42 61 73 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 72 Base;. p->nChar
6a90: 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 41 6c 6c 6f = 0;. p->nAllo
6aa0: 63 20 3d 20 6e 3b 0a 20 20 70 2d 3e 6d 78 41 6c c = n;. p->mxAl
6ab0: 6c 6f 63 20 3d 20 6d 78 3b 0a 20 20 70 2d 3e 75 loc = mx;. p->u
6ac0: 73 65 4d 61 6c 6c 6f 63 20 3d 20 31 3b 0a 20 20 seMalloc = 1;.
6ad0: 70 2d 3e 74 6f 6f 42 69 67 20 3d 20 30 3b 0a 20 p->tooBig = 0;.
6ae0: 20 70 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 p->mallocFailed
6af0: 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 = 0;.}../*.** P
6b00: 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 rint into memory
6b10: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 obtained from s
6b20: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 20 qliteMalloc().
6b30: 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c Use the internal
6b40: 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e .** %-conversion
6b50: 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a extensions..*/.
6b60: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 char *sqlite3VMP
6b70: 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a 64 rintf(sqlite3 *d
6b80: 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a b, const char *z
6b90: 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 73 74 20 Format, va_list
6ba0: 61 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a ap){. char *z;.
6bb0: 20 20 63 68 61 72 20 7a 42 61 73 65 5b 53 51 4c char zBase[SQL
6bc0: 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 ITE_PRINT_BUF_SI
6bd0: 5a 45 5d 3b 0a 20 20 53 74 72 41 63 63 75 6d 20 ZE];. StrAccum
6be0: 61 63 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 acc;. sqlite3St
6bf0: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c rAccumInit(&acc,
6c00: 20 7a 42 61 73 65 2c 20 73 69 7a 65 6f 66 28 7a zBase, sizeof(z
6c10: 42 61 73 65 29 2c 0a 20 20 20 20 20 20 20 20 20 Base),.
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 20 db
6c30: 3f 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c ? db->aLimit[SQL
6c40: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 ITE_LIMIT_LENGTH
6c50: 5d 20 3a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c ] : SQLITE_MAX_L
6c60: 45 4e 47 54 48 29 3b 0a 20 20 76 78 70 72 69 6e ENGTH);. vxprin
6c70: 74 66 28 26 61 63 63 2c 20 31 2c 20 7a 46 6f 72 tf(&acc, 1, zFor
6c80: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 7a 20 3d 20 mat, ap);. z =
6c90: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 sqlite3StrAccumF
6ca0: 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20 69 inish(&acc);. i
6cb0: 66 28 20 61 63 63 2e 6d 61 6c 6c 6f 63 46 61 69 f( acc.mallocFai
6cc0: 6c 65 64 20 26 26 20 64 62 20 29 7b 0a 20 20 20 led && db ){.
6cd0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 db->mallocFaile
6ce0: 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 d = 1;. }. ret
6cf0: 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 urn z;.}../*.**
6d00: 50 72 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 6f 72 Print into memor
6d10: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 y obtained from
6d20: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 sqliteMalloc().
6d30: 20 55 73 65 20 74 68 65 20 69 6e 74 65 72 6e 61 Use the interna
6d40: 6c 0a 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f l.** %-conversio
6d50: 6e 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f n extensions..*/
6d60: 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 .char *sqlite3MP
6d70: 72 69 6e 74 66 28 73 71 6c 69 74 65 33 20 2a 64 rintf(sqlite3 *d
6d80: 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a b, const char *z
6d90: 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 Format, ...){.
6da0: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 va_list ap;. ch
6db0: 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 ar *z;. va_star
6dc0: 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a t(ap, zFormat);.
6dd0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 4d 50 z = sqlite3VMP
6de0: 72 69 6e 74 66 28 64 62 2c 20 7a 46 6f 72 6d 61 rintf(db, zForma
6df0: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 t, ap);. va_end
6e00: 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a (ap);. return z
6e10: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 ;.}../*.** Print
6e20: 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 into memory obt
6e30: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 ained from sqlit
6e40: 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 20 20 4f 6d e3_malloc(). Om
6e50: 69 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a it the internal.
6e60: 2a 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 ** %-conversion
6e70: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 extensions..*/.c
6e80: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 76 6d 70 har *sqlite3_vmp
6e90: 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 rintf(const char
6ea0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 76 61 5f 6c 69 *zFormat, va_li
6eb0: 73 74 20 61 70 29 7b 0a 20 20 63 68 61 72 20 2a st ap){. char *
6ec0: 7a 3b 0a 20 20 63 68 61 72 20 7a 42 61 73 65 5b z;. char zBase[
6ed0: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 SQLITE_PRINT_BUF
6ee0: 5f 53 49 5a 45 5d 3b 0a 20 20 53 74 72 41 63 63 _SIZE];. StrAcc
6ef0: 75 6d 20 61 63 63 3b 0a 20 20 73 71 6c 69 74 65 um acc;. sqlite
6f00: 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 3StrAccumInit(&a
6f10: 63 63 2c 20 7a 42 61 73 65 2c 20 73 69 7a 65 6f cc, zBase, sizeo
6f20: 66 28 7a 42 61 73 65 29 2c 20 53 51 4c 49 54 45 f(zBase), SQLITE
6f30: 5f 4d 41 58 5f 4c 45 4e 47 54 48 29 3b 0a 20 20 _MAX_LENGTH);.
6f40: 76 78 70 72 69 6e 74 66 28 26 61 63 63 2c 20 30 vxprintf(&acc, 0
6f50: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a , zFormat, ap);.
6f60: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72 z = sqlite3Str
6f70: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 AccumFinish(&acc
6f80: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d );. return z;.}
6f90: 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 69 6e ../*.** Print in
6fa0: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e to memory obtain
6fb0: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f ed from sqlite3_
6fc0: 6d 61 6c 6c 6f 63 28 29 28 29 2e 20 20 4f 6d 69 malloc()(). Omi
6fd0: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 0a 2a t the internal.*
6fe0: 2a 20 25 2d 63 6f 6e 76 65 72 73 69 6f 6e 20 65 * %-conversion e
6ff0: 78 74 65 6e 73 69 6f 6e 73 2e 0a 2a 2f 0a 63 68 xtensions..*/.ch
7000: 61 72 20 2a 73 71 6c 69 74 65 33 5f 6d 70 72 69 ar *sqlite3_mpri
7010: 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ntf(const char *
7020: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 zFormat, ...){.
7030: 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 va_list ap;. c
7040: 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 har *z;. va_sta
7050: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b rt(ap, zFormat);
7060: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 . z = sqlite3_v
7070: 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c mprintf(zFormat,
7080: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 ap);. va_end(a
7090: 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a p);. return z;.
70a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 }../*.** sqlite3
70b0: 5f 73 6e 70 72 69 6e 74 66 28 29 20 77 6f 72 6b _snprintf() work
70c0: 73 20 6c 69 6b 65 20 73 6e 70 72 69 6e 74 66 28 s like snprintf(
70d0: 29 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 ) except that it
70e0: 20 69 67 6e 6f 72 65 73 20 74 68 65 0a 2a 2a 20 ignores the.**
70f0: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 65 20 73 current locale s
7100: 65 74 74 69 6e 67 73 2e 20 20 54 68 69 73 20 69 ettings. This i
7110: 73 20 69 6d 70 6f 72 74 61 6e 74 20 66 6f 72 20 s important for
7120: 53 51 4c 69 74 65 20 62 65 63 61 75 73 65 20 77 SQLite because w
7130: 65 0a 2a 2a 20 61 72 65 20 6e 6f 74 20 61 62 6c e.** are not abl
7140: 65 20 74 6f 20 75 73 65 20 61 20 22 2c 22 20 61 e to use a "," a
7150: 73 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f s the decimal po
7160: 69 6e 74 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 int in place of
7170: 22 2e 22 20 61 73 0a 2a 2a 20 73 70 65 63 69 66 "." as.** specif
7180: 69 65 64 20 62 79 20 73 6f 6d 65 20 6c 6f 63 61 ied by some loca
7190: 6c 65 73 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 les..*/.char *sq
71a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 69 lite3_snprintf(i
71b0: 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 42 75 66 nt n, char *zBuf
71c0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 , const char *zF
71d0: 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 63 ormat, ...){. c
71e0: 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 6c 69 73 har *z;. va_lis
71f0: 74 20 61 70 3b 0a 20 20 53 74 72 41 63 63 75 6d t ap;. StrAccum
7200: 20 61 63 63 3b 0a 0a 20 20 69 66 28 20 6e 3c 3d acc;.. if( n<=
7210: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 0 ){. return
7220: 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 zBuf;. }. sqli
7230: 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 te3StrAccumInit(
7240: 26 61 63 63 2c 20 7a 42 75 66 2c 20 6e 2c 20 30 &acc, zBuf, n, 0
7250: 29 3b 0a 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c );. acc.useMall
7260: 6f 63 20 3d 20 30 3b 0a 20 20 76 61 5f 73 74 61 oc = 0;. va_sta
7270: 72 74 28 61 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a rt(ap,zFormat);.
7280: 20 20 76 78 70 72 69 6e 74 66 28 26 61 63 63 2c vxprintf(&acc,
7290: 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 0, zFormat, ap)
72a0: 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a ;. va_end(ap);.
72b0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 53 74 72 z = sqlite3Str
72c0: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 AccumFinish(&acc
72d0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d );. return z;.}
72e0: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 ..#if defined(SQ
72f0: 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 LITE_TEST) || de
7300: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 fined(SQLITE_DEB
7310: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 UG) || defined(S
7320: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 0a QLITE_MEMDEBUG).
7330: 2f 2a 0a 2a 2a 20 41 20 76 65 72 73 69 6f 6e 20 /*.** A version
7340: 6f 66 20 70 72 69 6e 74 66 28 29 20 74 68 61 74 of printf() that
7350: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 25 6c 6c understands %ll
7360: 64 2e 20 20 55 73 65 64 20 66 6f 72 20 64 65 62 d. Used for deb
7370: 75 67 67 69 6e 67 2e 0a 2a 2a 20 54 68 65 20 70 ugging..** The p
7380: 72 69 6e 74 66 28 29 20 62 75 69 6c 74 20 69 6e rintf() built in
7390: 74 6f 20 73 6f 6d 65 20 76 65 72 73 69 6f 6e 73 to some versions
73a0: 20 6f 66 20 77 69 6e 64 6f 77 73 20 64 6f 65 73 of windows does
73b0: 20 6e 6f 74 20 75 6e 64 65 72 73 74 61 6e 64 20 not understand
73c0: 25 6c 6c 64 0a 2a 2a 20 61 6e 64 20 73 65 67 66 %lld.** and segf
73d0: 61 75 6c 74 73 20 69 66 20 79 6f 75 20 67 69 76 aults if you giv
73e0: 65 20 69 74 20 61 20 6c 6f 6e 67 20 6c 6f 6e 67 e it a long long
73f0: 20 69 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 int..*/.void sq
7400: 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 lite3DebugPrintf
7410: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f (const char *zFo
7420: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 rmat, ...){. va
7430: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 53 74 72 41 _list ap;. StrA
7440: 63 63 75 6d 20 61 63 63 3b 0a 20 20 63 68 61 72 ccum acc;. char
7450: 20 7a 42 75 66 5b 35 30 30 5d 3b 0a 20 20 73 71 zBuf[500];. sq
7460: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 lite3StrAccumIni
7470: 74 28 26 61 63 63 2c 20 7a 42 75 66 2c 20 73 69 t(&acc, zBuf, si
7480: 7a 65 6f 66 28 7a 42 75 66 29 2c 20 30 29 3b 0a zeof(zBuf), 0);.
7490: 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 acc.useMalloc
74a0: 3d 20 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 = 0;. va_start(
74b0: 61 70 2c 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 76 ap,zFormat);. v
74c0: 78 70 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c xprintf(&acc, 0,
74d0: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 zFormat, ap);.
74e0: 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 va_end(ap);. s
74f0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 qlite3StrAccumFi
7500: 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20 66 70 nish(&acc);. fp
7510: 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 22 25 73 rintf(stdout,"%s
7520: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 66 66 6c 75 ", zBuf);. fflu
7530: 73 68 28 73 74 64 6f 75 74 29 3b 0a 7d 0a 23 65 sh(stdout);.}.#e
7540: 6e 64 69 66 0a ndif.