Documentation Source Text

Hex Artifact Content
Login

Artifact 51e100f1224a8ce2f101ec38832d0795155b72db7f26a4d75ed5af76b755a4a0:


0000: 3c 74 69 74 6c 65 3e 53 51 4c 69 74 65 27 73 20  <title>SQLite's 
0010: 42 75 69 6c 74 2d 69 6e 20 70 72 69 6e 74 66 28  Built-in printf(
0020: 29 3c 2f 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e 68  )</title>.<tcl>h
0030: 64 5f 6b 65 79 77 6f 72 64 73 20 7b 62 75 69 6c  d_keywords {buil
0040: 74 2d 69 6e 20 70 72 69 6e 74 66 28 29 7d 3c 2f  t-in printf()}</
0050: 74 63 6c 3e 0a 3c 74 61 62 6c 65 5f 6f 66 5f 63  tcl>.<table_of_c
0060: 6f 6e 74 65 6e 74 73 3e 0a 0a 3c 68 31 3e 4f 76  ontents>..<h1>Ov
0070: 65 72 76 69 65 77 3c 2f 68 31 3e 0a 0a 3c 70 3e  erview</h1>..<p>
0080: 53 51 4c 69 74 65 20 63 6f 6e 74 61 69 6e 73 20  SQLite contains 
0090: 69 74 73 20 6f 77 6e 20 69 6d 70 6c 65 6d 65 6e  its own implemen
00a0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  tation of the st
00b0: 72 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20  ring formatting 
00c0: 72 6f 75 74 69 6e 65 20 22 70 72 69 6e 74 66 28  routine "printf(
00d0: 29 22 2c 0a 61 63 63 65 73 73 69 62 6c 65 20 76  )",.accessible v
00e0: 69 61 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ia the following
00f0: 20 69 6e 74 65 72 66 61 63 65 73 3a 0a 0a 3c 75   interfaces:..<u
0100: 6c 3e 0a 3c 6c 69 3e 20 5b 70 72 69 6e 74 66 28  l>.<li> [printf(
0110: 29 5d 20 26 72 61 72 72 3b 20 61 6e 20 53 51 4c  )] &rarr; an SQL
0120: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
0130: 69 6e 67 20 74 68 65 20 66 6f 72 6d 61 74 74 65  ing the formatte
0140: 64 20 73 74 72 69 6e 67 0a 3c 6c 69 3e 20 5b 73  d string.<li> [s
0150: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
0160: 5d 20 26 72 61 72 72 3b 20 53 74 6f 72 65 20 74  ] &rarr; Store t
0170: 68 65 20 66 6f 72 6d 61 74 74 65 64 20 73 74 72  he formatted str
0180: 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62  ing in memory ob
0190: 74 61 69 6e 65 64 0a 20 20 20 20 20 5b 73 71 6c  tained.     [sql
01a0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 5d  ite3_malloc64()]
01b0: 2e 0a 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f  ..<li> [sqlite3_
01c0: 73 6e 70 72 69 6e 74 66 28 29 5d 20 26 72 61 72  snprintf()] &rar
01d0: 72 3b 20 53 74 6f 72 65 20 74 68 65 20 66 6f 72  r; Store the for
01e0: 6d 61 74 74 65 64 20 73 74 72 69 6e 67 20 69 6e  matted string in
01f0: 20 61 20 73 74 61 74 69 63 20 62 75 66 66 65 72   a static buffer
0200: 0a 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 73  .<li> [sqlite3_s
0210: 74 72 5f 61 70 70 65 6e 64 66 28 29 5d 20 26 72  tr_appendf()] &r
0220: 61 72 72 3b 20 41 70 70 65 6e 64 20 66 6f 72 6d  arr; Append form
0230: 61 74 74 65 64 20 74 65 78 74 20 74 6f 20 61 20  atted text to a 
0240: 64 79 6e 61 6d 69 63 20 73 74 72 69 6e 67 0a 3c  dynamic string.<
0250: 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 76 6d 70  li> [sqlite3_vmp
0260: 72 69 6e 74 66 28 29 5d 20 26 72 61 72 72 3b 20  rintf()] &rarr; 
0270: 56 61 72 61 72 67 73 20 76 65 72 73 69 6f 6e 20  Varargs version 
0280: 6f 66 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  of sqlite3_mprin
0290: 74 66 28 29 0a 3c 6c 69 3e 20 5b 73 71 6c 69 74  tf().<li> [sqlit
02a0: 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 29 5d 20  e3_vsnprintf()] 
02b0: 26 72 61 72 72 3b 20 56 61 72 61 72 67 73 20 76  &rarr; Varargs v
02c0: 65 72 73 69 6f 6e 20 6f 66 20 73 71 6c 69 74 65  ersion of sqlite
02d0: 33 5f 73 6e 70 72 69 6e 74 66 28 29 0a 3c 6c 69  3_snprintf().<li
02e0: 3e 20 5b 73 71 6c 69 74 65 33 5f 73 74 72 5f 76  > [sqlite3_str_v
02f0: 61 70 70 65 6e 64 66 28 29 5d 20 26 72 61 72 72  appendf()] &rarr
0300: 3b 20 56 61 72 61 72 67 73 20 76 65 72 73 69 6f  ; Varargs versio
0310: 6e 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 72  n of sqlite3_str
0320: 5f 61 70 70 65 6e 64 66 28 29 0a 3c 2f 75 6c 3e  _appendf().</ul>
0330: 0a 0a 3c 70 3e 54 68 65 20 73 61 6d 65 20 63 6f  ..<p>The same co
0340: 72 65 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74  re string format
0350: 74 65 72 20 69 73 20 61 6c 73 6f 20 75 73 65 64  ter is also used
0360: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
0370: 51 4c 69 74 65 2e 0a 0a 3c 68 32 3e 41 64 76 61  QLite...<h2>Adva
0380: 6e 74 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e  ntages</h2>..<p>
0390: 57 68 79 20 64 6f 65 73 20 53 51 4c 69 74 65 20  Why does SQLite 
03a0: 68 61 76 65 20 69 74 73 20 6f 77 6e 20 70 72 69  have its own pri
03b0: 76 61 74 65 20 62 75 69 6c 74 2d 69 6e 20 70 72  vate built-in pr
03c0: 69 6e 74 66 28 29 20 69 6d 70 6c 65 6d 65 6e 74  intf() implement
03d0: 61 74 69 6f 6e 3f 0a 57 68 79 20 6e 6f 74 20 75  ation?.Why not u
03e0: 73 65 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  se the printf() 
03f0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66  implementation f
0400: 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64  rom the standard
0410: 20 43 20 6c 69 62 72 61 72 79 3f 0a 53 65 76 65   C library?.Seve
0420: 72 61 6c 20 72 65 61 73 6f 6e 73 3a 0a 0a 3c 70  ral reasons:..<p
0430: 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 42  >.<ol>.<li><p>.B
0440: 79 20 75 73 69 6e 67 20 69 74 73 20 6f 77 6e 20  y using its own 
0450: 62 75 69 6c 74 2d 69 6e 20 69 6d 70 6c 65 6d 65  built-in impleme
0460: 6e 74 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20  ntation, SQLite 
0470: 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20  guarantees that 
0480: 74 68 65 0a 6f 75 74 70 75 74 20 77 69 6c 6c 20  the.output will 
0490: 62 65 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 61  be the same on a
04a0: 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 20 61 6e 64  ll platforms and
04b0: 20 69 6e 20 61 6c 6c 20 4c 4f 43 41 4c 45 73 2e   in all LOCALEs.
04c0: 0a 54 68 69 73 20 69 73 20 69 6d 70 6f 72 74 61  .This is importa
04d0: 6e 74 20 66 6f 72 20 63 6f 6e 73 69 73 74 65 6e  nt for consisten
04e0: 63 79 20 61 6e 64 20 66 6f 72 20 74 65 73 74 69  cy and for testi
04f0: 6e 67 2e 20 20 49 74 20 77 6f 75 6c 64 20 62 65  ng.  It would be
0500: 20 70 72 6f 62 6c 65 6d 61 74 69 63 0a 69 66 20   problematic.if 
0510: 6f 6e 65 20 6d 61 63 68 69 6e 65 20 67 61 76 65  one machine gave
0520: 20 61 6e 64 20 61 6e 73 77 65 72 20 6f 66 20 22   and answer of "
0530: 35 2e 32 35 65 2b 30 38 22 20 61 6e 64 20 61 6e  5.25e+08" and an
0540: 6f 74 68 65 72 20 67 61 76 65 20 61 6e 20 61 6e  other gave an an
0550: 73 77 65 72 0a 6f 66 20 22 35 2e 32 35 30 65 2b  swer.of "5.250e+
0560: 30 30 38 22 2e 20 20 42 6f 74 68 20 61 6e 73 77  008".  Both answ
0570: 65 72 73 20 61 72 65 20 63 6f 72 72 65 63 74 2c  ers are correct,
0580: 20 62 75 74 20 69 74 20 69 73 20 62 65 74 74 65   but it is bette
0590: 72 20 77 68 65 6e 20 53 51 4c 69 74 65 0a 61 6c  r when SQLite.al
05a0: 77 61 79 73 20 67 69 76 65 73 20 74 68 65 20 73  ways gives the s
05b0: 61 6d 65 20 61 6e 73 77 65 72 2e 0a 0a 3c 6c 69  ame answer...<li
05c0: 3e 3c 70 3e 0a 57 65 20 6b 6e 6f 77 20 6f 66 20  ><p>.We know of 
05d0: 6e 6f 20 77 61 79 20 74 6f 20 75 73 65 20 74 68  no way to use th
05e0: 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
05f0: 72 79 20 70 72 69 6e 74 66 28 29 20 43 20 69 6e  ry printf() C in
0600: 74 65 72 66 61 63 65 20 74 6f 0a 69 6d 70 6c 65  terface to.imple
0610: 6d 65 6e 74 20 74 68 65 20 5b 70 72 69 6e 74 66  ment the [printf
0620: 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d  () SQL function]
0630: 20 66 65 61 74 75 72 65 20 6f 66 20 53 51 4c 69   feature of SQLi
0640: 74 65 2e 20 20 54 68 65 20 62 75 69 6c 74 2d 69  te.  The built-i
0650: 6e 0a 70 72 69 6e 74 66 28 29 20 69 6d 70 6c 65  n.printf() imple
0660: 6d 65 6e 74 61 74 69 6f 6e 20 63 61 6e 20 62 65  mentation can be
0670: 20 65 61 73 69 6c 79 20 61 64 61 70 74 65 64 20   easily adapted 
0680: 74 6f 20 74 68 61 74 20 74 61 73 6b 2c 20 68 6f  to that task, ho
0690: 77 65 76 65 72 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  wever...<li><p>.
06a0: 54 68 65 20 70 72 69 6e 74 66 28 29 20 69 6e 20  The printf() in 
06b0: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
06c0: 6e 65 77 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  new non-standard
06d0: 20 73 75 62 73 74 69 74 75 74 69 6f 6e 0a 74 79   substitution.ty
06e0: 70 65 73 20 28 5b 25 71 5d 2c 20 5b 25 51 5d 2c  pes ([%q], [%Q],
06f0: 20 5b 25 77 5d 2c 20 61 6e 64 20 5b 25 7a 5d 29   [%w], and [%z])
0700: 20 74 68 61 74 20 61 72 65 20 75 73 65 66 75 6c   that are useful
0710: 20 62 6f 74 68 20 69 6e 74 65 72 6e 61 6c 6c 79   both internally
0720: 20 74 6f 20 53 51 4c 69 74 65 0a 61 6e 64 20 74   to SQLite.and t
0730: 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 75  o applications u
0740: 73 69 6e 67 20 53 51 4c 69 74 65 2e 0a 53 74 61  sing SQLite..Sta
0750: 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 70 72  ndard library pr
0760: 69 6e 74 66 28 29 73 20 63 61 6e 6e 6f 74 20 6e  intf()s cannot n
0770: 6f 72 6d 61 6c 6c 79 20 62 65 20 65 78 74 65 6e  ormally be exten
0780: 64 65 64 20 69 6e 20 74 68 69 73 20 77 61 79 2e  ded in this way.
0790: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 56 69 61 20 74 68  ..<li><p>.Via th
07a0: 65 20 5b 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  e [sqlite3_mprin
07b0: 74 66 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74  tf()] and [sqlit
07c0: 65 33 5f 76 6d 70 72 69 6e 74 66 28 29 5d 20 69  e3_vmprintf()] i
07d0: 6e 74 65 72 66 61 63 65 73 2c 0a 74 68 65 20 62  nterfaces,.the b
07e0: 75 69 6c 74 2d 69 6e 20 70 72 69 6e 74 66 28 29  uilt-in printf()
07f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0800: 73 75 70 70 6f 72 74 73 20 74 68 65 20 61 62 69  supports the abi
0810: 6c 69 74 79 20 74 6f 20 72 65 6e 64 65 72 20 61  lity to render a
0820: 6e 0a 61 72 62 69 74 72 61 72 79 2d 6c 65 6e 67  n.arbitrary-leng
0830: 74 68 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  th string into a
0840: 20 6d 65 6d 6f 72 79 20 62 75 66 66 65 72 20 6f   memory buffer o
0850: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 5b 73 71  btained from [sq
0860: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29  lite3_malloc64()
0870: 5d 2e 0a 54 68 69 73 20 69 73 20 73 61 66 65 72  ]..This is safer
0880: 20 61 6e 64 20 6c 65 73 73 20 65 72 72 6f 72 20   and less error 
0890: 70 72 6f 6e 65 20 74 68 61 6e 20 74 72 79 69 6e  prone than tryin
08a0: 67 20 74 6f 20 70 72 65 63 6f 6d 70 75 74 65 20  g to precompute 
08b0: 61 6e 20 75 70 70 65 72 20 73 69 7a 65 0a 6c 69  an upper size.li
08c0: 6d 69 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  mit on the resul
08d0: 74 20 73 74 72 69 6e 67 2c 20 61 6c 6c 6f 63 61  t string, alloca
08e0: 74 65 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  te an appropriat
08f0: 65 6c 79 20 73 69 7a 65 64 20 62 75 66 66 65 72  ely sized buffer
0900: 2c 20 61 6e 64 0a 74 68 65 6e 20 63 61 6c 6c 69  , and.then calli
0910: 6e 67 20 73 6e 70 72 69 6e 74 66 28 29 2e 0a 0a  ng snprintf()...
0920: 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 69  <li><p>.The SQLi
0930: 74 65 2d 73 70 65 63 69 66 69 63 20 70 72 69 6e  te-specific prin
0940: 74 66 28 29 20 73 75 70 70 6f 72 74 73 20 61 20  tf() supports a 
0950: 6e 65 77 20 66 6c 61 67 20 28 21 29 20 63 61 6c  new flag (!) cal
0960: 6c 65 64 20 74 68 65 0a 22 61 6c 74 65 72 6e 61  led the."alterna
0970: 74 65 2d 66 6f 72 6d 2d 32 22 20 66 6c 61 67 2e  te-form-2" flag.
0980: 20 20 54 68 65 20 61 6c 74 65 72 6e 61 74 65 2d    The alternate-
0990: 66 6f 72 6d 2d 32 20 66 6c 61 67 20 63 68 61 6e  form-2 flag chan
09a0: 67 65 73 20 74 68 65 20 70 72 6f 63 65 73 73 69  ges the processi
09b0: 6e 67 0a 6f 66 20 66 6c 6f 61 74 69 6e 67 2d 70  ng.of floating-p
09c0: 6f 69 6e 74 20 63 6f 6e 76 65 72 73 69 6f 6e 73  oint conversions
09d0: 20 69 6e 20 73 75 62 74 6c 65 20 77 61 79 73 20   in subtle ways 
09e0: 73 6f 20 74 68 61 74 20 74 68 65 20 6f 75 74 70  so that the outp
09f0: 75 74 20 69 73 20 61 6c 77 61 79 73 0a 61 6e 20  ut is always.an 
0a00: 53 51 4c 2d 63 6f 6d 70 61 74 69 62 6c 65 20 74  SQL-compatible t
0a10: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
0a20: 6f 6e 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67  on of a floating
0a30: 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 2d 20  -point number - 
0a40: 73 6f 6d 65 74 68 69 6e 67 0a 74 68 61 74 20 69  something.that i
0a50: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
0a60: 6f 20 61 63 68 69 65 76 65 20 77 69 74 68 20 73  o achieve with s
0a70: 74 61 6e 64 61 72 64 2d 6c 69 62 72 61 72 79 20  tandard-library 
0a80: 70 72 69 6e 74 66 28 29 2e 20 20 46 6f 72 0a 73  printf().  For.s
0a90: 74 72 69 6e 67 20 73 75 62 73 74 69 74 75 74 69  tring substituti
0aa0: 6f 6e 73 2c 20 74 68 65 20 61 6c 74 65 72 6e 61  ons, the alterna
0ab0: 74 65 2d 66 6f 72 6d 2d 32 20 66 6c 61 67 20 63  te-form-2 flag c
0ac0: 61 75 73 65 73 20 74 68 65 20 77 69 64 74 68 20  auses the width 
0ad0: 61 6e 64 0a 70 72 65 63 69 73 69 6f 6e 20 74 6f  and.precision to
0ae0: 20 62 65 20 6d 65 61 73 75 72 65 64 20 69 6e 20   be measured in 
0af0: 63 68 61 72 61 63 74 65 72 73 20 69 6e 73 74 65  characters inste
0b00: 61 64 20 6f 66 20 62 79 74 65 73 2c 20 77 68 69  ad of bytes, whi
0b10: 63 68 20 73 69 6d 70 6c 69 66 69 65 73 0a 70 72  ch simplifies.pr
0b20: 6f 63 65 73 73 69 6e 67 20 6f 66 20 73 74 72 69  ocessing of stri
0b30: 6e 67 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ngs containing m
0b40: 75 6c 74 69 2d 62 79 74 65 20 55 54 46 38 20 63  ulti-byte UTF8 c
0b50: 68 61 72 61 63 74 65 72 73 2e 0a 0a 3c 6c 69 3e  haracters...<li>
0b60: 3c 70 3e 0a 54 68 65 20 62 75 69 6c 74 2d 69 6e  <p>.The built-in
0b70: 20 53 51 4c 69 74 65 20 68 61 73 20 63 6f 6d 70   SQLite has comp
0b80: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
0b90: 20 73 75 63 68 20 61 73 0a 53 51 4c 49 54 45 5f   such as.SQLITE_
0ba0: 50 52 49 4e 54 46 5f 50 52 45 43 49 53 49 4f 4e  PRINTF_PRECISION
0bb0: 5f 4c 49 4d 49 54 20 74 68 61 74 20 70 72 6f 76  _LIMIT that prov
0bc0: 69 64 65 20 64 65 66 65 6e 73 65 20 61 67 61 69  ide defense agai
0bd0: 6e 73 74 20 0a 64 65 6e 69 61 6c 2d 6f 66 2d 73  nst .denial-of-s
0be0: 65 72 76 69 63 65 20 61 74 74 61 63 6b 73 20 66  ervice attacks f
0bf0: 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  or application t
0c00: 68 61 74 20 65 78 70 6f 73 65 20 74 68 65 0a 70  hat expose the.p
0c10: 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
0c20: 61 6c 69 74 79 20 74 6f 20 75 6e 74 72 75 73 74  ality to untrust
0c30: 65 64 20 75 73 65 72 73 2e 0a 0a 3c 6c 69 3e 3c  ed users...<li><
0c40: 70 3e 0a 55 73 69 6e 67 20 61 20 62 75 69 6c 74  p>.Using a built
0c50: 2d 69 6e 20 70 72 69 6e 74 66 28 29 20 69 6d 70  -in printf() imp
0c60: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 65 61 6e  lementation mean
0c70: 73 20 74 68 61 74 20 53 51 4c 69 74 65 20 68 61  s that SQLite ha
0c80: 73 20 6f 6e 65 0a 66 65 77 65 72 20 64 65 70 65  s one.fewer depe
0c90: 6e 64 65 6e 63 79 20 6f 6e 20 74 68 65 20 68 6f  ndency on the ho
0ca0: 73 74 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 20  st environment, 
0cb0: 6d 61 6b 69 6e 67 20 69 74 20 6d 6f 72 65 20 70  making it more p
0cc0: 6f 72 74 61 62 6c 65 2e 0a 3c 2f 6f 6c 3e 0a 0a  ortable..</ol>..
0cd0: 3c 68 32 3e 44 69 73 61 64 76 61 6e 74 61 67 65  <h2>Disadvantage
0ce0: 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 0a 49 6e 20 66  s</h2>..<p>.In f
0cf0: 61 69 72 6e 65 73 73 2c 20 68 61 76 69 6e 67 20  airness, having 
0d00: 61 20 62 75 69 6c 74 2d 69 6e 20 69 6d 70 6c 65  a built-in imple
0d10: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 70 72 69  mentation of pri
0d20: 6e 74 66 28 29 20 61 6c 73 6f 20 63 6f 6d 65 73  ntf() also comes
0d30: 20 77 69 74 68 0a 73 6f 6d 65 20 64 69 73 61 64   with.some disad
0d40: 76 61 6e 74 61 67 65 73 2e 20 20 54 6f 20 77 69  vantages.  To wi
0d50: 74 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  t:..<ol>.<li><p>
0d60: 0a 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 70 72  .The built-in pr
0d70: 69 6e 74 66 28 29 20 69 6d 70 6c 65 6d 65 6e 74  intf() implement
0d80: 61 74 69 6f 6e 20 75 73 65 73 20 65 78 74 72 61  ation uses extra
0d90: 20 63 6f 64 65 20 73 70 61 63 65 20 0a 28 61 62   code space .(ab
0da0: 6f 75 74 20 37 38 30 30 20 62 79 74 65 73 20 6f  out 7800 bytes o
0db0: 6e 20 47 43 43 20 35 2e 34 20 77 69 74 68 20 2d  n GCC 5.4 with -
0dc0: 4f 73 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54 68  Os)...<li><p>.Th
0dd0: 65 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  e floating-point
0de0: 20 74 6f 20 74 65 78 74 20 63 6f 6e 76 65 72 73   to text convers
0df0: 69 6f 6e 20 73 75 62 66 75 6e 63 74 69 6f 6e 20  ion subfunction 
0e00: 66 6f 72 20 74 68 65 20 62 75 69 6c 74 2d 69 6e  for the built-in
0e10: 20 70 72 69 6e 74 66 28 29 0a 69 73 20 6c 69 6d   printf().is lim
0e20: 69 74 65 64 20 69 6e 20 70 72 65 63 69 73 69 6f  ited in precisio
0e30: 6e 20 74 6f 20 31 36 20 73 69 67 6e 69 66 69 63  n to 16 signific
0e40: 61 6e 74 20 64 69 67 69 74 73 20 6f 72 20 32 36  ant digits or 26
0e50: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67   significant dig
0e60: 69 74 73 0a 69 66 20 74 68 65 20 22 21 22 20 61  its.if the "!" a
0e70: 6c 74 65 72 6e 61 74 65 2d 66 6f 72 6d 2d 32 20  lternate-form-2 
0e80: 66 6c 61 67 20 69 73 20 75 73 65 64 2e 0a 45 76  flag is used..Ev
0e90: 65 72 79 20 49 45 45 45 2d 37 35 34 20 64 6f 75  ery IEEE-754 dou
0ea0: 62 6c 65 20 63 61 6e 20 62 65 20 72 65 70 72 65  ble can be repre
0eb0: 73 65 6e 74 65 64 20 65 78 61 63 74 6c 79 20 61  sented exactly a
0ec0: 73 20 61 20 64 65 63 69 6d 61 6c 20 66 6c 6f 61  s a decimal floa
0ed0: 74 69 6e 67 2d 70 6f 69 6e 74 0a 76 61 6c 75 65  ting-point.value
0ee0: 2c 20 62 75 74 20 73 6f 6d 65 20 64 6f 75 62 6c  , but some doubl
0ef0: 65 73 20 72 65 71 75 69 72 65 20 6d 6f 72 65 20  es require more 
0f00: 74 68 61 6e 20 31 36 20 6f 72 20 32 36 20 73 69  than 16 or 26 si
0f10: 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
0f20: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 6f  ...<li><p>.The o
0f30: 72 64 65 72 20 6f 66 20 74 68 65 20 62 75 66 66  rder of the buff
0f40: 65 72 20 70 6f 69 6e 74 65 72 20 61 6e 64 20 62  er pointer and b
0f50: 75 66 66 65 72 20 73 69 7a 65 20 70 61 72 61 6d  uffer size param
0f60: 65 74 65 72 73 20 69 6e 20 74 68 65 20 62 75 69  eters in the bui
0f70: 6c 74 2d 69 6e 0a 73 6e 70 72 69 6e 74 66 28 29  lt-in.snprintf()
0f80: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0f90: 69 73 20 72 65 76 65 72 73 65 64 20 66 72 6f 6d  is reversed from
0fa0: 20 74 68 65 20 6f 72 64 65 72 20 75 73 65 64 20   the order used 
0fb0: 69 6e 20 73 74 61 6e 64 61 72 64 2d 6c 69 62 72  in standard-libr
0fc0: 61 72 79 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ary.implementati
0fd0: 6f 6e 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a  ons..</ol>..<p>.
0fe0: 49 6e 20 73 70 69 74 65 20 6f 66 20 74 68 65 20  In spite of the 
0ff0: 64 69 73 61 64 76 61 6e 74 61 67 65 73 2c 20 74  disadvantages, t
1000: 68 65 20 64 65 76 65 6c 6f 70 65 72 73 20 62 65  he developers be
1010: 6c 69 65 76 65 20 74 68 61 74 20 68 61 76 69 6e  lieve that havin
1020: 67 20 61 20 62 75 69 6c 74 2d 69 6e 0a 70 72 69  g a built-in.pri
1030: 6e 74 66 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  ntf() implementa
1040: 74 69 6f 6e 20 69 6e 73 69 64 65 20 6f 66 20 53  tion inside of S
1050: 51 4c 69 74 65 20 69 73 20 61 20 6e 65 74 20 70  QLite is a net p
1060: 6f 73 69 74 69 76 65 2e 0a 0a 3c 68 31 3e 46 6f  ositive...<h1>Fo
1070: 72 6d 61 74 74 69 6e 67 20 44 65 74 61 69 6c 73  rmatting Details
1080: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h1>..<p>The fo
1090: 72 6d 61 74 20 73 74 72 69 6e 67 20 66 6f 72 20  rmat string for 
10a0: 70 72 69 6e 74 66 28 29 20 69 73 20 61 20 74 65  printf() is a te
10b0: 6d 70 6c 61 74 65 20 66 6f 72 20 74 68 65 20 67  mplate for the g
10c0: 65 6e 65 72 61 74 65 64 0a 73 74 72 69 6e 67 2e  enerated.string.
10d0: 20 20 53 75 62 73 74 69 74 75 74 69 6f 6e 73 20    Substitutions 
10e0: 61 72 65 20 6d 61 64 65 20 77 68 65 6e 65 76 65  are made wheneve
10f0: 72 20 61 20 22 25 22 20 63 68 61 72 61 63 74 65  r a "%" characte
1100: 72 20 61 70 70 65 61 72 73 20 69 6e 0a 74 68 65  r appears in.the
1110: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 2e 20   format string. 
1120: 20 54 68 65 20 22 25 22 20 69 73 20 66 6f 6c 6c   The "%" is foll
1130: 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 72 20 6d  owed by one or m
1140: 6f 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 63  ore additional.c
1150: 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 64  haracters that d
1160: 65 73 63 72 69 62 65 20 74 68 65 20 73 75 62 73  escribe the subs
1170: 74 69 74 75 74 69 6f 6e 2e 20 20 45 61 63 68 20  titution.  Each 
1180: 73 75 62 73 74 69 74 75 74 69 6f 6e 20 68 61 73  substitution has
1190: 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66  .the following f
11a0: 6f 72 6d 61 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ormat:..<blockqu
11b0: 6f 74 65 3e 0a 3c 62 3e 25 3c 2f 62 3e 3c 69 3e  ote>.<b>%</b><i>
11c0: 26 23 39 31 3b 66 6c 61 67 73 26 23 39 33 3b 26  &#91;flags&#93;&
11d0: 23 39 31 3b 77 69 64 74 68 26 23 39 33 3b 26 23  #91;width&#93;&#
11e0: 39 31 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69  91</i><b>.</b><i
11f0: 3e 70 72 65 63 69 73 69 6f 6e 26 23 39 33 3b 26  >precision&#93;&
1200: 23 39 31 3b 6c 65 6e 67 74 68 26 23 39 33 3b 74  #91;length&#93;t
1210: 79 70 65 3c 2f 69 3e 0a 3c 2f 62 6c 6f 63 6b 71  ype</i>.</blockq
1220: 75 6f 74 65 3e 0a 0a 3c 70 3e 41 6c 6c 20 73 75  uote>..<p>All su
1230: 62 73 74 69 74 75 74 69 6f 6e 73 20 62 65 67 69  bstitutions begi
1240: 6e 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  n with a single 
1250: 22 25 22 20 61 6e 64 20 65 6e 64 20 77 69 74 68  "%" and end with
1260: 20 61 20 73 69 6e 67 6c 65 20 74 79 70 65 20 63   a single type c
1270: 68 61 72 61 63 74 65 72 2e 0a 54 68 65 20 6f 74  haracter..The ot
1280: 68 65 72 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20  her elements of 
1290: 74 68 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e  the substitution
12a0: 20 61 72 65 20 6f 70 74 69 6f 6e 61 6c 2e 0a 0a   are optional...
12b0: 3c 70 3e 54 6f 20 69 6e 63 6c 75 64 65 20 61 20  <p>To include a 
12c0: 73 69 6e 67 6c 65 20 22 25 22 20 63 68 61 72 61  single "%" chara
12d0: 63 74 65 72 20 69 6e 20 74 68 65 20 6f 75 74 70  cter in the outp
12e0: 75 74 2c 20 70 75 74 20 74 77 6f 20 63 6f 6e 73  ut, put two cons
12f0: 65 63 75 74 69 76 65 0a 22 25 22 20 63 68 61 72  ecutive."%" char
1300: 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 74 65  acters in the te
1310: 6d 70 6c 61 74 65 2e 0a 0a 3c 68 32 3e 53 75 62  mplate...<h2>Sub
1320: 73 74 69 74 75 74 69 6f 6e 20 54 79 70 65 73 3c  stitution Types<
1330: 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h2>..<p>The fol
1340: 6c 6f 77 69 6e 67 20 63 68 61 72 74 20 73 68 6f  lowing chart sho
1350: 77 73 20 74 68 65 20 73 75 62 73 74 69 74 75 74  ws the substitut
1360: 69 6f 6e 20 74 79 70 65 73 20 73 75 70 70 6f 72  ion types suppor
1370: 74 65 64 20 62 79 20 53 51 4c 69 74 65 3a 0a 0a  ted by SQLite:..
1380: 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20  <center>.<table 
1390: 62 6f 72 64 65 72 3d 31 20 63 65 6c 6c 70 61 64  border=1 cellpad
13a0: 64 69 6e 67 3d 22 31 30 22 20 77 69 64 74 68 3d  ding="10" width=
13b0: 22 38 30 25 22 3e 0a 3c 74 72 3e 0a 3c 74 68 3e  "80%">.<tr>.<th>
13c0: 53 75 62 73 74 69 74 75 74 69 6f 6e 20 54 79 70  Substitution Typ
13d0: 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72  e<th>Meaning.<tr
13e0: 3e 0a 3c 74 64 3e 25 0a 3c 74 64 3e 54 77 6f 20  >.<td>%.<td>Two 
13f0: 22 25 22 20 63 68 61 72 61 63 74 65 72 73 20 69  "%" characters i
1400: 6e 20 61 20 72 6f 77 20 61 72 65 20 74 72 61 6e  n a row are tran
1410: 73 6c 61 74 65 64 20 69 6e 74 6f 20 61 20 73 69  slated into a si
1420: 6e 67 6c 65 20 22 25 22 20 69 6e 20 74 68 65 20  ngle "%" in the 
1430: 6f 75 74 70 75 74 2c 0a 20 20 20 20 77 69 74 68  output,.    with
1440: 6f 75 74 20 73 75 62 73 74 69 74 75 74 69 6e 67  out substituting
1450: 20 61 6e 79 20 76 61 6c 75 65 73 2e 0a 3c 74 72   any values..<tr
1460: 3e 0a 3c 74 64 3e 64 2c 20 69 0a 3c 74 64 3e 54  >.<td>d, i.<td>T
1470: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
1480: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
1490: 77 68 69 63 68 20 69 73 20 64 69 73 70 6c 61 79  which is display
14a0: 65 64 20 69 6e 20 64 65 63 69 6d 61 6c 2e 0a 3c  ed in decimal..<
14b0: 74 72 3e 0a 3c 74 64 3e 75 0a 3c 74 64 3e 54 68  tr>.<td>u.<td>Th
14c0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6e  e argument is an
14d0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
14e0: 72 20 77 68 69 63 68 20 69 73 20 64 69 73 70 6c  r which is displ
14f0: 61 79 65 64 20 69 6e 20 64 65 63 69 6d 61 6c 2e  ayed in decimal.
1500: 0a 3c 74 72 3e 0a 3c 74 64 3e 66 0a 3c 74 64 3e  .<tr>.<td>f.<td>
1510: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
1520: 61 20 64 6f 75 62 6c 65 20 77 68 69 63 68 20 69  a double which i
1530: 73 20 64 69 73 70 6c 61 79 65 64 20 69 6e 20 64  s displayed in d
1540: 65 63 69 6d 61 6c 2e 0a 3c 74 72 3e 0a 3c 74 64  ecimal..<tr>.<td
1550: 3e 65 2c 20 45 0a 3c 74 64 3e 54 68 65 20 61 72  >e, E.<td>The ar
1560: 67 75 6d 65 6e 74 20 69 73 20 61 20 64 6f 75 62  gument is a doub
1570: 6c 65 20 77 68 69 63 68 20 69 73 20 64 69 73 70  le which is disp
1580: 6c 61 79 65 64 20 69 6e 20 65 78 70 6f 6e 65 6e  layed in exponen
1590: 74 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 0a 20  tial notation.. 
15a0: 20 20 20 54 68 65 20 65 78 70 6f 6e 65 6e 74 20     The exponent 
15b0: 63 68 61 72 61 63 74 65 72 20 69 73 20 27 65 27  character is 'e'
15c0: 20 6f 72 20 27 45 27 20 64 65 70 65 6e 64 69 6e   or 'E' dependin
15d0: 67 20 6f 6e 20 74 68 65 20 74 79 70 65 2e 0a 3c  g on the type..<
15e0: 74 72 3e 0a 3c 74 64 3e 67 2c 20 47 0a 3c 74 64  tr>.<td>g, G.<td
15f0: 3e 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73  >The argument is
1600: 20 61 20 64 6f 75 62 6c 65 20 77 68 69 63 68 20   a double which 
1610: 69 73 20 64 69 73 70 6c 61 79 65 64 20 69 6e 20  is displayed in 
1620: 65 69 74 68 65 72 20 6e 6f 72 6d 61 6c 20 64 65  either normal de
1630: 63 69 6d 61 6c 0a 20 20 20 20 6e 6f 74 61 74 69  cimal.    notati
1640: 6f 6e 20 6f 72 20 69 66 20 74 68 65 20 65 78 70  on or if the exp
1650: 6f 6e 65 6e 74 20 69 73 20 6e 6f 74 20 63 6c 6f  onent is not clo
1660: 73 65 20 74 6f 20 7a 65 72 6f 2c 20 69 6e 20 65  se to zero, in e
1670: 78 70 6f 6e 65 6e 74 69 61 6c 0a 20 20 20 20 6e  xponential.    n
1680: 6f 74 61 74 69 6f 6e 2e 0a 3c 74 72 3e 0a 3c 74  otation..<tr>.<t
1690: 64 3e 78 2c 20 58 0a 3c 74 64 3e 54 68 65 20 61  d>x, X.<td>The a
16a0: 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 69 6e  rgument is an in
16b0: 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 64  teger which is d
16c0: 69 73 70 6c 61 79 65 64 20 69 6e 20 68 65 78 61  isplayed in hexa
16d0: 64 65 63 69 6d 61 6c 2e 0a 20 20 20 20 4c 6f 77  decimal..    Low
16e0: 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69  er-case hexadeci
16f0: 6d 61 6c 20 69 73 20 75 73 65 64 20 66 6f 72 20  mal is used for 
1700: 25 78 20 61 6e 64 20 75 70 70 65 72 2d 63 61 73  %x and upper-cas
1710: 65 20 69 73 20 75 73 65 64 0a 20 20 20 20 66 6f  e is used.    fo
1720: 72 20 25 58 0a 3c 74 72 3e 0a 3c 74 64 3e 6f 0a  r %X.<tr>.<td>o.
1730: 3c 74 64 3e 54 68 65 20 61 72 67 75 6d 65 6e 74  <td>The argument
1740: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 77   is an integer w
1750: 68 69 63 68 20 69 73 20 64 69 73 70 6c 61 79 65  hich is displaye
1760: 64 20 69 6e 20 6f 63 74 61 6c 2e 0a 3c 74 72 3e  d in octal..<tr>
1770: 0a 3c 74 64 3e 73 2c 20 7a 0a 3c 74 64 3e 0a 3c  .<td>s, z.<td>.<
1780: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
1790: 70 65 72 63 65 6e 74 7a 20 7b 25 7a 7d 3c 2f 74  percentz {%z}</t
17a0: 63 6c 3e 0a 20 20 20 20 54 68 65 20 61 72 67 75  cl>.    The argu
17b0: 6d 65 6e 74 20 69 73 20 61 20 7a 65 72 6f 2d 74  ment is a zero-t
17c0: 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67  erminated string
17d0: 20 74 68 61 74 20 69 73 20 64 69 73 70 6c 61 79   that is display
17e0: 65 64 2e 20 20 46 6f 72 0a 20 20 20 20 74 68 65  ed.  For.    the
17f0: 20 25 7a 20 74 79 70 65 20 69 6e 20 43 2d 6c 61   %z type in C-la
1800: 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65  nguage interface
1810: 73 2c 20 5b 73 71 6c 69 74 65 33 5f 66 72 65 65  s, [sqlite3_free
1820: 28 29 5d 20 69 73 20 69 6e 76 6f 6b 65 64 0a 20  ()] is invoked. 
1830: 20 20 20 6f 6e 20 74 68 65 20 73 74 72 69 6e 67     on the string
1840: 20 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65   after it has be
1850: 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65   copied into the
1860: 20 6f 75 74 70 75 74 2e 20 54 68 65 20 25 73 20   output. The %s 
1870: 61 6e 64 20 25 7a 0a 20 20 20 20 73 75 62 73 74  and %z.    subst
1880: 69 74 75 74 69 6f 6e 73 20 61 72 65 20 69 64 65  itutions are ide
1890: 6e 74 69 63 61 6c 20 66 6f 72 20 74 68 65 20 53  ntical for the S
18a0: 51 4c 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  QL printf() func
18b0: 74 69 6f 6e 2e 3c 62 72 3e 3c 62 72 3e 0a 20 20  tion.<br><br>.  
18c0: 20 20 54 68 65 20 25 73 20 73 75 62 73 74 69 74    The %s substit
18d0: 75 74 69 6f 6e 20 69 73 20 75 6e 69 76 65 72 73  ution is univers
18e0: 61 6c 2c 20 62 75 74 0a 20 20 20 20 74 68 65 20  al, but.    the 
18f0: 25 7a 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20  %z substitution 
1900: 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65 6e 68  is an SQLite enh
1910: 61 6e 63 65 6d 65 6e 74 2c 20 6e 6f 74 20 66 6f  ancement, not fo
1920: 75 6e 64 20 69 6e 20 6f 74 68 65 72 0a 20 20 20  und in other.   
1930: 20 70 72 69 6e 74 66 28 29 20 69 6d 70 6c 65 6d   printf() implem
1940: 65 6e 74 61 74 69 6f 6e 73 2e 0a 3c 74 72 3e 0a  entations..<tr>.
1950: 3c 74 64 3e 63 0a 3c 74 64 3e 46 6f 72 20 74 68  <td>c.<td>For th
1960: 65 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74  e C-language int
1970: 65 72 66 61 63 65 73 2c 20 74 68 65 20 61 72 67  erfaces, the arg
1980: 75 6d 65 6e 74 20 69 73 20 61 6e 20 69 6e 74 65  ument is an inte
1990: 67 65 72 20 77 68 69 63 68 0a 20 20 20 20 69 73  ger which.    is
19a0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
19b0: 61 20 63 68 61 72 61 63 74 65 72 2e 20 20 46 6f  a character.  Fo
19c0: 72 20 74 68 65 20 5b 70 72 69 6e 74 66 28 29 20  r the [printf() 
19d0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 74 68  SQL function] th
19e0: 65 0a 20 20 20 20 61 72 67 75 6d 65 6e 74 20 69  e.    argument i
19f0: 73 20 61 20 73 74 72 69 6e 67 20 66 72 6f 6d 20  s a string from 
1a00: 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20  which the first 
1a10: 63 68 61 72 61 63 74 65 72 20 69 73 20 65 78 74  character is ext
1a20: 72 61 63 74 65 64 20 61 6e 64 0a 20 20 20 20 64  racted and.    d
1a30: 69 73 70 6c 61 79 65 64 2e 0a 3c 74 72 3e 0a 3c  isplayed..<tr>.<
1a40: 74 64 3e 70 0a 3c 74 64 3e 54 68 65 20 61 72 67  td>p.<td>The arg
1a50: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 69 6e 74  ument is a point
1a60: 65 72 20 77 68 69 63 68 20 69 73 20 64 69 73 70  er which is disp
1a70: 6c 61 79 65 64 20 61 73 20 61 20 68 65 78 61 64  layed as a hexad
1a80: 65 63 69 6d 61 6c 20 61 64 64 72 65 73 73 2e 0a  ecimal address..
1a90: 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 53 51      Since the SQ
1aa0: 4c 20 6c 61 6e 67 75 61 67 65 20 68 61 73 20 6e  L language has n
1ab0: 6f 20 63 6f 6e 63 65 70 74 20 6f 66 20 61 20 70  o concept of a p
1ac0: 6f 69 6e 74 65 72 2c 20 74 68 65 20 25 70 20 73  ointer, the %p s
1ad0: 75 62 73 74 69 74 75 74 69 6f 6e 0a 20 20 20 20  ubstitution.    
1ae0: 66 6f 72 20 74 68 65 20 5b 70 72 69 6e 74 66 28  for the [printf(
1af0: 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20  ) SQL function] 
1b00: 77 6f 72 6b 73 20 6c 69 6b 65 20 25 78 2e 0a 3c  works like %x..<
1b10: 74 72 3e 0a 3c 74 64 3e 6e 0a 3c 74 64 3e 54 68  tr>.<td>n.<td>Th
1b20: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
1b30: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 69 6e  pointer to an in
1b40: 74 65 67 65 72 2e 20 20 4e 6f 74 68 69 6e 67 20  teger.  Nothing 
1b50: 69 73 20 64 69 73 70 6c 61 79 65 64 20 66 6f 72  is displayed for
1b60: 0a 20 20 20 20 74 68 69 73 20 73 75 62 73 74 69  .    this substi
1b70: 74 75 74 69 6f 6e 20 74 79 70 65 2e 20 20 49 6e  tution type.  In
1b80: 73 74 65 61 64 2c 20 74 68 65 20 69 6e 74 65 67  stead, the integ
1b90: 65 72 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  er to which the 
1ba0: 61 72 67 75 6d 65 6e 74 0a 20 20 20 20 70 6f 69  argument.    poi
1bb0: 6e 74 73 20 69 73 20 6f 76 65 72 77 72 69 74 74  nts is overwritt
1bc0: 65 6e 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  en with the numb
1bd0: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
1be0: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 65   in the generate
1bf0: 64 0a 20 20 20 20 73 74 72 69 6e 67 20 74 68 61  d.    string tha
1c00: 74 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 6c  t result from al
1c10: 6c 20 66 6f 72 6d 61 74 20 73 79 6d 62 6f 6c 73  l format symbols
1c20: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20   to the left of 
1c30: 74 68 65 20 25 6e 2e 0a 3c 74 72 3e 0a 3c 74 64  the %n..<tr>.<td
1c40: 3e 71 2c 20 51 0a 3c 74 64 3e 3c 74 63 6c 3e 68  >q, Q.<td><tcl>h
1c50: 64 5f 66 72 61 67 6d 65 6e 74 20 70 65 72 63 65  d_fragment perce
1c60: 6e 74 71 20 7b 25 71 7d 20 7b 25 51 7d 3c 2f 74  ntq {%q} {%Q}</t
1c70: 63 6c 3e 0a 20 20 20 20 54 68 65 20 61 72 67 75  cl>.    The argu
1c80: 6d 65 6e 74 20 69 73 20 61 20 7a 65 72 6f 2d 74  ment is a zero-t
1c90: 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67  erminated string
1ca0: 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
1cb0: 20 70 72 69 6e 74 65 64 20 77 69 74 68 0a 20 20   printed with.  
1cc0: 20 20 61 6c 6c 20 73 69 6e 67 6c 65 20 71 75 6f    all single quo
1cd0: 74 65 20 28 27 29 20 63 68 61 72 61 63 74 65 72  te (') character
1ce0: 73 20 64 6f 75 62 6c 65 64 20 73 6f 20 74 68 61  s doubled so tha
1cf0: 74 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e  t the string can
1d00: 20 73 61 66 65 6c 79 0a 20 20 20 20 61 70 70 65   safely.    appe
1d10: 61 72 20 69 6e 73 69 64 65 20 61 6e 20 53 51 4c  ar inside an SQL
1d20: 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e   string literal.
1d30: 20 20 54 68 65 20 25 51 20 73 75 62 73 74 69 74    The %Q substit
1d40: 75 74 69 6f 6e 20 74 79 70 65 20 61 6c 73 6f 0a  ution type also.
1d50: 20 20 20 20 70 75 74 73 20 73 69 6e 67 6c 65 2d      puts single-
1d60: 71 75 6f 74 65 73 20 6f 6e 20 62 6f 74 68 20 65  quotes on both e
1d70: 6e 64 73 20 6f 66 20 74 68 65 20 73 75 62 73 74  nds of the subst
1d80: 69 74 75 74 65 64 20 73 74 72 69 6e 67 2e 0a 20  ituted string.. 
1d90: 20 20 20 3c 62 72 3e 3c 62 72 3e 49 66 20 74 68     <br><br>If th
1da0: 65 20 61 72 67 75 6d 65 6e 74 0a 20 20 20 20 74  e argument.    t
1db0: 6f 20 25 51 20 69 73 20 61 20 6e 75 6c 6c 20 70  o %Q is a null p
1dc0: 6f 69 6e 74 65 72 20 74 68 65 6e 20 74 68 65 20  ointer then the 
1dd0: 6f 75 74 70 75 74 20 69 73 20 61 6e 20 75 6e 71  output is an unq
1de0: 75 6f 74 65 64 20 22 4e 55 4c 4c 22 2e 20 20 49  uoted "NULL".  I
1df0: 6e 20 6f 74 68 65 72 0a 20 20 20 20 77 6f 72 64  n other.    word
1e00: 73 2c 20 61 20 6e 75 6c 6c 20 70 6f 69 6e 74 65  s, a null pointe
1e10: 72 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 53  r generates an S
1e20: 51 4c 20 4e 55 4c 4c 2c 20 61 6e 64 20 61 20 6e  QL NULL, and a n
1e30: 6f 6e 2d 6e 75 6c 6c 20 70 6f 69 6e 74 65 72 20  on-null pointer 
1e40: 67 65 6e 65 72 61 74 65 73 0a 20 20 20 20 61 20  generates.    a 
1e50: 76 61 6c 69 64 20 53 51 4c 20 73 74 72 69 6e 67  valid SQL string
1e60: 20 6c 69 74 65 72 61 6c 2e 20 20 49 66 20 74 68   literal.  If th
1e70: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 25 71  e argument to %q
1e80: 20 69 73 20 61 20 6e 75 6c 6c 20 70 6f 69 6e 74   is a null point
1e90: 65 72 0a 20 20 20 20 74 68 65 6e 20 6e 6f 20 6f  er.    then no o
1ea0: 75 74 70 75 74 20 69 73 20 67 65 6e 65 72 61 74  utput is generat
1eb0: 65 64 2e 20 20 54 68 75 73 20 61 20 6e 75 6c 6c  ed.  Thus a null
1ec0: 2d 70 6f 69 6e 74 65 72 20 74 6f 20 25 71 20 69  -pointer to %q i
1ed0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 0a 20 20  s the same as.  
1ee0: 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e    an empty strin
1ef0: 67 2e 0a 20 20 20 20 3c 62 72 3e 3c 62 72 3e 46  g..    <br><br>F
1f00: 6f 72 20 74 68 65 73 65 20 20 73 75 62 73 74 69  or these  substi
1f10: 74 75 74 69 6f 6e 73 2c 20 74 68 65 20 70 72 65  tutions, the pre
1f20: 63 69 73 69 6f 6e 20 69 73 20 74 68 65 20 6e 75  cision is the nu
1f30: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 72  mber of bytes or
1f40: 0a 20 20 20 20 63 68 61 72 61 63 74 65 72 73 20  .    characters 
1f50: 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 61  taken from the a
1f60: 72 67 75 6d 65 6e 74 2c 20 6e 6f 74 20 74 68 65  rgument, not the
1f70: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
1f80: 20 6f 72 20 63 68 61 72 61 63 74 65 72 73 20 74   or characters t
1f90: 68 61 74 0a 20 20 20 20 61 72 65 20 77 72 69 74  hat.    are writ
1fa0: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 6f 75 74  ten into the out
1fb0: 70 75 74 2e 0a 20 20 20 20 3c 62 72 3e 3c 62 72  put..    <br><br
1fc0: 3e 0a 20 20 20 20 54 68 65 20 25 71 20 61 6e 64  >.    The %q and
1fd0: 20 25 51 20 73 75 62 73 74 69 74 75 74 69 6f 6e   %Q substitution
1fe0: 73 20 61 72 65 20 53 51 4c 69 74 65 20 65 6e 68  s are SQLite enh
1ff0: 61 6e 63 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 66  ancements, not f
2000: 6f 75 6e 64 20 69 6e 0a 20 20 20 20 6d 6f 73 74  ound in.    most
2010: 20 6f 74 68 65 72 20 70 72 69 6e 74 66 28 29 20   other printf() 
2020: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 2e  implementations.
2030: 0a 3c 74 72 3e 0a 3c 74 64 3e 77 0a 3c 74 64 3e  .<tr>.<td>w.<td>
2040: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2050: 20 70 65 72 63 65 6e 74 77 20 7b 25 77 7d 3c 2f   percentw {%w}</
2060: 74 63 6c 3e 0a 20 20 20 20 54 68 69 73 20 73 75  tcl>.    This su
2070: 62 73 74 69 74 75 74 69 6f 6e 20 77 6f 72 6b 73  bstitution works
2080: 20 6c 69 6b 65 20 25 71 20 65 78 63 65 70 74 20   like %q except 
2090: 74 68 61 74 20 69 74 20 64 6f 75 62 6c 65 73 20  that it doubles 
20a0: 61 6c 6c 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65  all double-quote
20b0: 0a 20 20 20 20 63 68 61 72 61 63 74 65 72 73 20  .    characters 
20c0: 28 22 29 20 69 6e 73 74 65 61 64 20 6f 66 20 73  (") instead of s
20d0: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2c 20 6d 61  ingle-quotes, ma
20e0: 6b 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  king the result 
20f0: 73 75 69 74 61 62 6c 65 20 66 6f 72 0a 20 20 20  suitable for.   
2100: 20 75 73 69 6e 67 20 77 69 74 68 20 61 20 64 6f   using with a do
2110: 75 62 6c 65 2d 71 75 6f 74 65 64 20 69 64 65 6e  uble-quoted iden
2120: 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 61  tifier name in a
2130: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
2140: 0a 20 20 20 20 3c 62 72 3e 3c 62 72 3e 0a 20 20  .    <br><br>.  
2150: 20 20 54 68 65 20 25 77 20 73 75 62 73 74 69 74    The %w substit
2160: 75 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 69  ution is an SQLi
2170: 74 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c  te enhancements,
2180: 20 6e 6f 74 20 66 6f 75 6e 64 20 69 6e 0a 20 20   not found in.  
2190: 20 20 6d 6f 73 74 20 6f 74 68 65 72 20 70 72 69    most other pri
21a0: 6e 74 66 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  ntf() implementa
21b0: 74 69 6f 6e 73 2e 0a 3c 2f 74 61 62 6c 65 3e 0a  tions..</table>.
21c0: 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 68 32 3e 54  </center>..<h2>T
21d0: 68 65 20 4f 70 74 69 6f 6e 61 6c 20 4c 65 6e 67  he Optional Leng
21e0: 74 68 20 46 69 65 6c 64 3c 2f 68 32 3e 0a 0a 3c  th Field</h2>..<
21f0: 70 3e 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  p>The length of 
2200: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  the argument val
2210: 75 65 20 63 61 6e 20 62 65 20 73 70 65 63 69 66  ue can be specif
2220: 69 65 64 20 62 79 20 6f 6e 65 20 6f 72 20 6d 6f  ied by one or mo
2230: 72 65 20 6c 65 74 74 65 72 73 0a 74 68 61 74 20  re letters.that 
2240: 6f 63 63 75 72 20 6a 75 73 74 20 70 72 69 6f 72  occur just prior
2250: 20 74 6f 20 74 68 65 20 73 75 62 73 74 69 74 75   to the substitu
2260: 74 69 6f 6e 20 74 79 70 65 20 6c 65 74 74 65 72  tion type letter
2270: 2e 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 74 68  .  In SQLite, th
2280: 65 0a 6c 65 6e 67 74 68 20 6f 6e 6c 79 20 6d 61  e.length only ma
2290: 74 74 65 72 20 66 6f 72 20 69 6e 74 65 67 65 72  tter for integer
22a0: 20 74 79 70 65 73 2e 20 20 54 68 65 20 6c 65 6e   types.  The len
22b0: 67 74 68 20 69 73 20 69 67 6e 6f 72 65 64 20 66  gth is ignored f
22c0: 6f 72 20 74 68 65 0a 5b 70 72 69 6e 74 66 28 29  or the.[printf()
22d0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 77   SQL function] w
22e0: 68 69 63 68 20 61 6c 77 61 79 73 20 75 73 65 73  hich always uses
22f0: 20 36 34 2d 62 69 74 20 76 61 6c 75 65 73 2e 20   64-bit values. 
2300: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 74   The following.t
2310: 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20 6c  able shows the l
2320: 65 6e 67 74 68 20 73 70 65 63 69 66 69 65 72 73  ength specifiers
2330: 20 61 6c 6c 6f 77 65 64 20 62 79 20 53 51 4c 69   allowed by SQLi
2340: 74 65 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74  te:..<center>.<t
2350: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 63 65  able border=1 ce
2360: 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 20 77  llpadding="10" w
2370: 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e  idth="80%">.<tr>
2380: 0a 3c 74 68 3e 4c 65 6e 67 74 68 20 53 70 65 63  .<th>Length Spec
2390: 69 66 69 65 72 0a 3c 74 68 3e 4d 65 61 6e 69 6e  ifier.<th>Meanin
23a0: 67 0a 3c 74 72 3e 0a 3c 74 64 3e 3c 69 3e 28 64  g.<tr>.<td><i>(d
23b0: 65 66 61 75 6c 74 29 3c 2f 69 3e 0a 3c 74 64 3e  efault)</i>.<td>
23c0: 41 6e 20 22 69 6e 74 22 20 6f 72 20 22 75 6e 73  An "int" or "uns
23d0: 69 67 6e 65 64 20 69 6e 74 22 2e 20 20 33 32 2d  igned int".  32-
23e0: 62 69 74 73 20 6f 6e 20 61 6c 6c 20 6d 6f 64 65  bits on all mode
23f0: 72 6e 20 73 79 73 74 65 6d 73 2e 0a 3c 74 72 3e  rn systems..<tr>
2400: 0a 3c 74 64 3e 6c 0a 3c 74 64 3e 41 20 22 6c 6f  .<td>l.<td>A "lo
2410: 6e 67 20 69 6e 74 22 20 6f 72 20 22 6c 6f 6e 67  ng int" or "long
2420: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 22 2e 20   unsigned int". 
2430: 20 41 6c 73 6f 20 33 32 2d 62 69 74 73 20 6f 6e   Also 32-bits on
2440: 20 61 6c 6c 20 6d 6f 64 65 72 6e 20 73 79 73 74   all modern syst
2450: 65 6d 73 2e 0a 3c 74 72 3e 0a 3c 74 64 3e 6c 6c  ems..<tr>.<td>ll
2460: 0a 3c 74 64 3e 41 20 22 6c 6f 6e 67 20 6c 6f 6e  .<td>A "long lon
2470: 67 20 69 6e 74 22 20 6f 72 20 22 6c 6f 6e 67 20  g int" or "long 
2480: 6c 6f 6e 67 20 75 6e 73 69 67 6e 65 64 22 20 6f  long unsigned" o
2490: 72 20 61 6e 20 22 73 71 6c 69 74 65 33 5f 69 6e  r an "sqlite3_in
24a0: 74 36 34 22 20 6f 72 0a 20 20 20 20 22 73 71 6c  t64" or.    "sql
24b0: 69 74 65 33 5f 75 69 6e 74 36 34 22 20 76 61 6c  ite3_uint64" val
24c0: 75 65 2e 20 20 54 68 65 73 65 20 61 72 65 20 36  ue.  These are 6
24d0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 6f  4-bit integers o
24e0: 6e 20 61 6c 6c 20 6d 6f 64 65 72 6e 20 73 79 73  n all modern sys
24f0: 74 65 6d 73 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  tems..</table>.<
2500: 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 4f 6e 6c  /center>..<p>Onl
2510: 79 20 74 68 65 20 22 6c 6c 22 20 6c 65 6e 67 74  y the "ll" lengt
2520: 68 20 6d 6f 64 69 66 69 65 72 20 65 76 65 72 20  h modifier ever 
2530: 6d 61 6b 65 73 20 61 20 64 69 66 66 65 72 65 6e  makes a differen
2540: 63 65 20 66 6f 72 20 53 51 4c 69 74 65 2e 20 20  ce for SQLite.  
2550: 41 6e 64 0a 69 74 20 6f 6e 6c 79 20 6d 61 6b 65  And.it only make
2560: 73 20 61 20 64 69 66 66 65 72 65 6e 63 65 20 77  s a difference w
2570: 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 43 2d  hen using the C-
2580: 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61  language interfa
2590: 63 65 73 2e 0a 0a 3c 68 32 3e 54 68 65 20 4f 70  ces...<h2>The Op
25a0: 74 69 6f 6e 61 6c 20 57 69 64 74 68 20 46 69 65  tional Width Fie
25b0: 6c 64 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  ld</h2>..<p>The 
25c0: 77 69 64 74 68 20 66 69 65 6c 64 20 73 70 65 63  width field spec
25d0: 69 66 69 65 73 20 74 68 65 20 6d 69 6e 69 6d 75  ifies the minimu
25e0: 6d 20 77 69 64 74 68 20 6f 66 20 74 68 65 20 73  m width of the s
25f0: 75 62 73 74 69 74 75 74 65 64 20 76 61 6c 75 65  ubstituted value
2600: 20 69 6e 0a 74 68 65 20 6f 75 74 70 75 74 2e 20   in.the output. 
2610: 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20 6f   If the string o
2620: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 69 73  r number that is
2630: 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68   written into th
2640: 65 20 6f 75 74 70 75 74 20 69 73 20 73 68 6f 72  e output is shor
2650: 74 65 72 0a 74 68 61 6e 20 74 68 65 20 77 69 64  ter.than the wid
2660: 74 68 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  th, then the val
2670: 75 65 20 69 73 20 70 61 64 64 65 64 2e 20 20 50  ue is padded.  P
2680: 61 64 64 69 6e 67 20 69 73 20 6f 6e 20 74 68 65  adding is on the
2690: 20 6c 65 66 74 20 28 74 68 65 0a 76 61 6c 75 65   left (the.value
26a0: 20 69 73 20 72 69 67 68 74 2d 6a 75 73 74 69 66   is right-justif
26b0: 69 65 64 29 20 62 79 20 64 65 66 61 75 6c 74 2e  ied) by default.
26c0: 20 20 49 66 20 74 68 65 20 22 2d 22 20 66 6c 61    If the "-" fla
26d0: 67 20 69 73 20 75 73 65 64 2c 20 74 68 65 6e 20  g is used, then 
26e0: 74 68 65 0a 70 61 64 64 69 6e 67 20 69 73 20 6f  the.padding is o
26f0: 6e 20 74 68 65 20 72 69 67 68 74 20 61 6e 64 20  n the right and 
2700: 74 68 65 20 76 61 6c 75 65 20 69 73 20 6c 65 66  the value is lef
2710: 74 2d 6a 75 73 74 69 66 69 65 64 2e 0a 0a 3c 70  t-justified...<p
2720: 3e 54 68 65 20 77 69 64 74 68 20 69 73 20 6d 65  >The width is me
2730: 61 73 75 72 65 64 20 69 6e 20 62 79 74 65 73 20  asured in bytes 
2740: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 48 6f 77  by default.  How
2750: 65 76 65 72 2c 20 69 66 20 74 68 65 20 22 21 22  ever, if the "!"
2760: 20 66 6c 61 67 20 69 73 0a 70 72 65 73 65 6e 74   flag is.present
2770: 20 74 68 65 6e 20 74 68 65 20 77 69 64 74 68 20   then the width 
2780: 69 73 20 69 6e 20 63 68 61 72 61 63 74 65 72 73  is in characters
2790: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 6d 61 6b  .  This only mak
27a0: 65 73 20 61 20 64 69 66 66 65 72 65 6e 63 65 20  es a difference 
27b0: 66 6f 72 0a 6d 75 6c 74 69 2d 62 79 74 65 20 75  for.multi-byte u
27c0: 74 66 2d 38 20 63 68 61 72 61 63 74 65 72 73 2c  tf-8 characters,
27d0: 20 61 6e 64 20 74 68 6f 73 65 20 6f 6e 6c 79 20   and those only 
27e0: 6f 63 63 75 72 20 6f 6e 20 73 74 72 69 6e 67 20  occur on string 
27f0: 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2e 0a 0a  substitutions...
2800: 3c 70 3e 49 66 20 74 68 65 20 77 69 64 74 68 20  <p>If the width 
2810: 69 73 20 61 20 73 69 6e 67 6c 65 20 22 2a 22 20  is a single "*" 
2820: 63 68 61 72 61 63 74 65 72 20 69 6e 73 74 65 61  character instea
2830: 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 20 74  d of a number, t
2840: 68 65 6e 20 74 68 65 0a 61 63 74 75 61 6c 20 77  hen the.actual w
2850: 69 64 74 68 20 76 61 6c 75 65 20 69 73 20 72 65  idth value is re
2860: 61 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ad as an integer
2870: 20 66 72 6f 6d 20 74 68 65 20 61 72 67 75 6d 65   from the argume
2880: 6e 74 20 6c 69 73 74 2e 20 20 49 66 20 74 68 65  nt list.  If the
2890: 0a 76 61 6c 75 65 20 72 65 61 64 20 69 73 20 6e  .value read is n
28a0: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
28b0: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
28c0: 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 65   is used for the
28d0: 20 77 69 64 74 68 20 61 6e 64 0a 74 68 65 20 76   width and.the v
28e0: 61 6c 75 65 20 69 73 20 6c 65 66 74 2d 6a 75 73  alue is left-jus
28f0: 74 69 66 69 65 64 20 61 73 20 69 66 20 74 68 65  tified as if the
2900: 20 22 2d 22 20 66 6c 61 67 20 77 65 72 65 20 70   "-" flag were p
2910: 72 65 73 65 6e 74 2e 0a 0a 3c 70 3e 49 66 20 74  resent...<p>If t
2920: 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20 73  he value being s
2930: 75 62 73 74 69 74 75 74 65 64 20 69 73 20 6c 61  ubstituted is la
2940: 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 77 69  rger than the wi
2950: 64 74 68 2c 20 74 68 65 6e 20 66 75 6c 6c 20 76  dth, then full v
2960: 61 6c 75 65 0a 69 73 20 61 64 64 65 64 20 74 6f  alue.is added to
2970: 20 74 68 65 20 6f 75 74 70 75 74 2e 20 20 49 6e   the output.  In
2980: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2990: 65 20 77 69 64 74 68 20 69 73 20 74 68 65 20 6d  e width is the m
29a0: 69 6e 69 6d 75 6d 20 77 69 64 74 68 20 6f 66 0a  inimum width of.
29b0: 74 68 65 20 76 61 6c 75 65 20 61 73 20 69 74 20  the value as it 
29c0: 69 73 20 72 65 6e 64 65 72 65 64 20 69 6e 20 74  is rendered in t
29d0: 68 65 20 6f 75 74 70 75 74 2e 0a 0a 3c 68 32 3e  he output...<h2>
29e0: 54 68 65 20 4f 70 74 69 6f 6e 61 6c 20 50 72 65  The Optional Pre
29f0: 63 69 73 69 6f 6e 20 46 69 65 6c 64 3c 2f 68 32  cision Field</h2
2a00: 3e 0a 0a 3c 70 3e 54 68 65 20 70 72 65 63 69 73  >..<p>The precis
2a10: 69 6f 6e 20 66 69 65 6c 64 2c 20 69 66 20 69 74  ion field, if it
2a20: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 6d 75 73   is present, mus
2a30: 74 20 66 6f 6c 6c 6f 77 20 74 68 65 20 77 69 64  t follow the wid
2a40: 74 68 20 73 65 70 61 72 61 74 65 64 0a 62 79 20  th separated.by 
2a50: 61 20 73 69 6e 67 6c 65 20 22 2e 22 20 63 68 61  a single "." cha
2a60: 72 61 63 74 65 72 2e 20 20 49 66 20 74 68 65 72  racter.  If ther
2a70: 65 20 69 73 20 6e 6f 20 77 69 64 74 68 2c 20 74  e is no width, t
2a80: 68 65 6e 20 74 68 65 20 22 2e 22 20 74 68 61 74  hen the "." that
2a90: 20 69 6e 74 72 6f 64 75 63 65 73 0a 74 68 65 20   introduces.the 
2aa0: 70 72 65 63 69 73 69 6f 6e 20 69 6d 6d 65 64 69  precision immedi
2ab0: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 65 69  ately follows ei
2ac0: 74 68 65 72 20 74 68 65 20 66 6c 61 67 73 20 28  ther the flags (
2ad0: 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
2ae0: 29 20 6f 72 0a 74 68 65 20 69 6e 69 74 69 61 6c  ) or.the initial
2af0: 20 22 25 22 2e 0a 0a 3c 70 3e 46 6f 72 20 73 74   "%"...<p>For st
2b00: 72 69 6e 67 20 73 75 62 73 74 69 74 75 74 69 6f  ring substitutio
2b10: 6e 73 20 28 25 73 2c 20 25 7a 2c 20 25 71 2c 20  ns (%s, %z, %q, 
2b20: 25 51 2c 20 6f 72 20 25 77 29 20 74 68 65 20 70  %Q, or %w) the p
2b30: 72 65 63 69 73 69 6f 6e 20 69 73 20 74 68 65 20  recision is the 
2b40: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 20 6f  number.of byte o
2b50: 72 20 63 68 61 72 61 63 74 65 72 20 75 73 65 64  r character used
2b60: 20 66 72 6f 6d 20 74 68 65 20 61 72 67 75 6d 65   from the argume
2b70: 6e 74 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  nt.  The number 
2b80: 69 73 20 62 79 74 65 73 20 62 79 20 64 65 66 61  is bytes by defa
2b90: 75 6c 74 20 62 75 74 0a 69 73 20 63 68 61 72 61  ult but.is chara
2ba0: 63 74 65 72 73 20 69 66 20 74 68 65 20 22 21 22  cters if the "!"
2bb0: 20 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74   flag is present
2bc0: 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
2bd0: 6f 20 70 72 65 63 69 73 69 6f 6e 2c 20 74 68 65  o precision, the
2be0: 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 74 72  n the.entire str
2bf0: 69 6e 67 20 69 73 20 73 75 62 73 74 69 74 75 74  ing is substitut
2c00: 65 64 2e 20 20 45 78 61 6d 70 6c 65 73 3a 20 20  ed.  Examples:  
2c10: 22 25 2e 33 73 22 20 73 75 62 73 74 69 74 75 74  "%.3s" substitut
2c20: 65 73 20 74 68 65 20 66 69 72 73 74 20 33 20 62  es the first 3 b
2c30: 79 74 65 73 0a 6f 66 20 74 68 65 20 61 72 67 75  ytes.of the argu
2c40: 6d 65 6e 74 20 73 74 72 69 6e 67 2e 20 20 22 25  ment string.  "%
2c50: 21 2e 33 73 22 20 73 75 62 73 74 69 74 75 74 65  !.3s" substitute
2c60: 73 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  s the first thre
2c70: 65 20 63 68 61 72 61 63 74 65 72 73 20 6f 66 20  e characters of 
2c80: 74 68 65 0a 61 72 67 75 6d 65 6e 74 20 73 74 72  the.argument str
2c90: 69 6e 67 2e 0a 0a 3c 70 3e 46 6f 72 20 69 6e 74  ing...<p>For int
2ca0: 65 67 65 72 20 73 75 62 73 74 69 74 75 74 69 6f  eger substitutio
2cb0: 6e 73 20 28 25 64 2c 20 25 69 2c 20 25 78 2c 20  ns (%d, %i, %x, 
2cc0: 25 58 2c 20 25 6f 2c 20 61 6e 64 20 25 70 29 20  %X, %o, and %p) 
2cd0: 74 68 65 20 70 72 65 63 69 73 69 6f 6e 20 73 70  the precision sp
2ce0: 65 63 69 66 69 65 73 0a 6d 69 6e 69 6d 75 6d 20  ecifies.minimum 
2cf0: 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69 74 73  number of digits
2d00: 20 74 6f 20 64 69 73 70 6c 61 79 2e 20 20 4c 65   to display.  Le
2d10: 61 64 69 6e 67 20 7a 65 72 6f 73 20 61 72 65 20  ading zeros are 
2d20: 61 64 64 65 64 20 69 66 20 6e 65 63 65 73 73 61  added if necessa
2d30: 72 79 2c 20 74 6f 0a 65 78 70 61 6e 64 20 74 68  ry, to.expand th
2d40: 65 20 6f 75 74 70 75 74 20 74 6f 20 74 68 65 20  e output to the 
2d50: 6d 69 6e 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  minimum number o
2d60: 66 20 64 69 67 69 74 73 2e 0a 0a 3c 70 3e 46 6f  f digits...<p>Fo
2d70: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
2d80: 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20 28   substitutions (
2d90: 25 65 2c 20 25 45 2c 20 25 66 2c 20 25 67 2c 20  %e, %E, %f, %g, 
2da0: 25 47 29 20 74 68 65 20 70 72 65 63 69 73 69 6f  %G) the precisio
2db0: 6e 20 73 70 65 63 69 66 69 65 73 20 0a 74 68 65  n specifies .the
2dc0: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67 69 74   number of digit
2dd0: 73 20 74 6f 20 64 69 73 70 6c 61 79 20 74 6f 20  s to display to 
2de0: 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
2df0: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a   decimal point..
2e00: 0a 3c 70 3e 46 6f 72 20 74 68 65 20 63 68 61 72  .<p>For the char
2e10: 61 63 74 65 72 20 73 75 62 73 74 69 74 75 74 69  acter substituti
2e20: 6f 6e 20 28 25 63 29 20 61 20 70 72 65 63 69 73  on (%c) a precis
2e30: 69 6f 6e 20 4e 20 67 72 65 61 74 65 72 20 74 68  ion N greater th
2e40: 61 6e 20 31 20 63 61 75 73 65 73 20 74 68 65 0a  an 1 causes the.
2e50: 63 68 61 72 61 63 74 65 72 20 74 6f 20 62 65 20  character to be 
2e60: 72 65 70 65 61 74 65 64 20 4e 20 74 69 6d 65 73  repeated N times
2e70: 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e 6f 6e  .  This is a non
2e80: 2d 73 74 61 6e 64 61 72 64 20 65 78 74 65 6e 73  -standard extens
2e90: 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79 0a 69  ion found only.i
2ea0: 6e 20 53 51 4c 69 74 65 2e 0a 0a 3c 68 32 3e 54  n SQLite...<h2>T
2eb0: 68 65 20 4f 70 74 69 6f 6e 73 20 46 6c 61 67 73  he Options Flags
2ec0: 20 46 69 65 6c 64 3c 2f 68 32 3e 0a 0a 3c 70 3e   Field</h2>..<p>
2ed0: 46 6c 61 67 73 20 63 6f 6e 73 69 73 74 20 6f 66  Flags consist of
2ee0: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68   zero or more ch
2ef0: 61 72 61 63 74 65 72 73 20 74 68 61 74 20 69 6d  aracters that im
2f00: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
2f10: 20 74 68 65 0a 22 25 22 20 74 68 61 74 20 69 6e   the."%" that in
2f20: 74 72 6f 64 75 63 65 73 20 74 68 65 20 73 75 62  troduces the sub
2f30: 73 74 69 74 75 74 69 6f 6e 2e 20 20 54 68 65 20  stitution.  The 
2f40: 76 61 72 69 6f 75 73 20 66 6c 61 67 73 20 61 6e  various flags an
2f50: 64 20 74 68 65 69 72 20 6d 65 61 6e 69 6e 67 73  d their meanings
2f60: 0a 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  .are as follows:
2f70: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
2f80: 65 20 62 6f 72 64 65 72 3d 31 20 63 65 6c 6c 70  e border=1 cellp
2f90: 61 64 64 69 6e 67 3d 22 31 30 22 20 77 69 64 74  adding="10" widt
2fa0: 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 0a 3c 74  h="80%">.<tr>.<t
2fb0: 68 3e 46 6c 61 67 0a 3c 74 68 3e 4d 65 61 6e 69  h>Flag.<th>Meani
2fc0: 6e 67 0a 3c 74 72 3e 0a 3c 74 64 3e 3c 62 3e 2d  ng.<tr>.<td><b>-
2fd0: 3c 2f 62 3e 0a 3c 74 64 3e 4c 65 66 74 2d 6a 75  </b>.<td>Left-ju
2fe0: 73 74 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  stify the value 
2ff0: 69 6e 20 74 68 65 20 6f 75 74 70 75 74 2e 20 20  in the output.  
3000: 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 74  The default is t
3010: 6f 20 72 69 67 68 74 2d 6a 75 73 74 69 66 79 2e  o right-justify.
3020: 0a 49 66 20 74 68 65 20 77 69 64 74 68 20 69 73  .If the width is
3030: 20 7a 65 72 6f 20 6f 72 20 69 73 20 6f 74 68 65   zero or is othe
3040: 72 77 69 73 65 20 6c 65 73 73 20 74 68 61 6e 20  rwise less than 
3050: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  the length of th
3060: 65 20 76 61 6c 75 65 20 62 65 69 6e 67 0a 73 75  e value being.su
3070: 62 73 74 69 74 75 74 65 64 2c 20 74 68 65 6e 20  bstituted, then 
3080: 74 68 65 72 65 20 69 73 20 6e 6f 20 70 61 64 64  there is no padd
3090: 69 6e 67 20 61 6e 64 20 74 68 65 20 22 2d 22 20  ing and the "-" 
30a0: 66 6c 61 67 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  flag is a no-op.
30b0: 0a 3c 74 72 3e 0a 3c 74 64 3e 3c 62 3e 2b 3c 2f  .<tr>.<td><b>+</
30c0: 62 3e 0a 3c 74 64 3e 46 6f 72 20 73 69 67 6e 65  b>.<td>For signe
30d0: 64 20 6e 75 6d 65 72 69 63 20 73 75 62 73 74 69  d numeric substi
30e0: 74 75 74 69 6f 6e 73 2c 20 69 6e 63 6c 75 64 65  tutions, include
30f0: 20 61 20 22 2b 22 20 73 69 67 6e 20 62 65 66 6f   a "+" sign befo
3100: 72 65 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62  re positive numb
3110: 65 72 73 2e 0a 41 20 22 2d 22 20 73 69 67 6e 20  ers..A "-" sign 
3120: 61 6c 77 61 79 73 20 61 70 70 65 61 72 73 20 62  always appears b
3130: 65 66 6f 72 65 20 6e 65 67 61 74 69 76 65 20 6e  efore negative n
3140: 75 6d 62 65 72 73 20 72 65 67 61 72 64 6c 65 73  umbers regardles
3150: 73 20 6f 66 20 66 6c 61 67 20 73 65 74 74 69 6e  s of flag settin
3160: 67 73 2e 0a 3c 74 72 3e 0a 3c 74 64 3e 3c 69 3e  gs..<tr>.<td><i>
3170: 28 73 70 61 63 65 29 3c 2f 69 3e 0a 3c 74 64 3e  (space)</i>.<td>
3180: 46 6f 72 20 73 69 67 6e 65 64 20 6e 75 6d 65 72  For signed numer
3190: 69 63 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  ic substitutions
31a0: 2c 20 70 72 65 70 65 6e 64 20 61 20 73 69 6e 67  , prepend a sing
31b0: 6c 65 20 73 70 61 63 65 20 62 65 66 6f 72 65 20  le space before 
31c0: 70 6f 73 69 74 69 76 65 0a 6e 75 6d 62 65 72 73  positive.numbers
31d0: 2e 0a 3c 74 72 3e 0a 3c 74 64 3e 3c 62 3e 30 3c  ..<tr>.<td><b>0<
31e0: 2f 62 3e 0a 3c 74 64 3e 50 72 65 70 65 6e 64 20  /b>.<td>Prepend 
31f0: 61 73 20 6d 61 6e 79 20 22 30 22 20 63 68 61 72  as many "0" char
3200: 61 63 74 65 72 73 20 74 6f 20 6e 75 6d 65 72 69  acters to numeri
3210: 63 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20  c substitutions 
3220: 61 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a  as necessary to.
3230: 65 78 70 61 6e 64 20 74 68 65 20 76 61 6c 75 65  expand the value
3240: 20 6f 75 74 20 74 6f 20 74 68 65 20 73 70 65 63   out to the spec
3250: 69 66 69 65 64 20 77 69 64 74 68 2e 20 20 49 66  ified width.  If
3260: 20 74 68 65 20 77 69 64 74 68 20 66 69 65 6c 64   the width field
3270: 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a 74 68 65   is omitted,.the
3280: 6e 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 61  n this flag is a
3290: 20 6e 6f 2d 6f 70 2e 0a 3c 74 72 3e 0a 3c 74 64   no-op..<tr>.<td
32a0: 3e 3c 62 3e 23 3c 2f 62 3e 0a 3c 74 64 3e 54 68  ><b>#</b>.<td>Th
32b0: 69 73 20 69 73 20 74 68 65 20 22 61 6c 74 65 72  is is the "alter
32c0: 6e 61 74 65 2d 66 6f 72 6d 2d 31 22 20 66 6c 61  nate-form-1" fla
32d0: 67 2e 0a 46 6f 72 20 25 67 20 61 6e 64 20 25 47  g..For %g and %G
32e0: 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20   substitutions, 
32f0: 74 68 69 73 20 63 61 75 73 65 73 20 74 72 61 69  this causes trai
3300: 6c 69 6e 67 20 7a 65 72 6f 73 20 74 6f 20 62 65  ling zeros to be
3310: 20 72 65 6d 6f 76 65 64 2e 0a 54 68 69 73 20 66   removed..This f
3320: 6c 61 67 20 66 6f 72 63 65 73 20 61 20 64 65 63  lag forces a dec
3330: 69 6d 61 6c 20 70 6f 69 6e 74 20 74 6f 20 61 70  imal point to ap
3340: 70 65 61 72 20 66 6f 72 20 61 6c 6c 20 66 6c 6f  pear for all flo
3350: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 73 75 62 73  ating-point subs
3360: 74 69 74 75 74 69 6f 6e 73 2e 0a 46 6f 72 20 25  titutions..For %
3370: 6f 2c 20 25 78 2c 20 61 6e 64 20 25 58 20 73 75  o, %x, and %X su
3380: 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 74 68 65  bstitutions, the
3390: 20 61 6c 74 65 72 6e 61 74 65 2d 66 6f 72 6d 2d   alternate-form-
33a0: 31 20 66 6c 61 67 20 63 61 75 73 65 20 74 68 65  1 flag cause the
33b0: 20 76 61 6c 75 65 0a 74 6f 20 62 65 20 70 72 65   value.to be pre
33c0: 70 65 6e 64 65 64 20 77 69 74 68 20 22 30 22 2c  pended with "0",
33d0: 20 22 30 78 22 2c 20 6f 72 20 22 30 58 22 2c 20   "0x", or "0X", 
33e0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 3c 74  respectively..<t
33f0: 72 3e 0a 3c 74 64 3e 3c 62 3e 2c 3c 2f 62 3e 0a  r>.<td><b>,</b>.
3400: 3c 74 64 3e 54 68 69 73 20 66 6c 61 67 20 63 61  <td>This flag ca
3410: 75 73 65 73 20 63 6f 6d 6d 61 2d 73 65 70 61 72  uses comma-separ
3420: 61 74 6f 72 73 20 74 6f 20 62 65 20 61 64 64 65  ators to be adde
3430: 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20  d to the output 
3440: 6f 66 20 25 64 20 61 6e 64 20 25 69 0a 73 75 62  of %d and %i.sub
3450: 73 74 69 74 75 74 69 6f 6e 73 2c 20 62 65 74 77  stitutions, betw
3460: 65 65 6e 20 65 76 65 72 79 20 33 20 64 69 67 69  een every 3 digi
3470: 74 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  ts from the left
3480: 2e 20 20 54 68 69 73 20 63 61 6e 20 68 65 6c 70  .  This can help
3490: 20 68 75 6d 61 6e 73 0a 74 6f 20 6d 6f 72 65 20   humans.to more 
34a0: 65 61 73 69 6c 79 20 64 69 73 63 65 72 6e 20 74  easily discern t
34b0: 68 65 20 6d 61 67 6e 69 74 75 64 65 20 6f 66 20  he magnitude of 
34c0: 6c 61 72 67 65 20 69 6e 74 65 67 65 72 20 76 61  large integer va
34d0: 6c 75 65 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  lues.  For examp
34e0: 6c 65 2c 0a 74 68 65 20 76 61 6c 75 65 20 32 31  le,.the value 21
34f0: 34 37 34 38 33 36 34 37 20 77 6f 75 6c 64 20 62  47483647 would b
3500: 65 20 72 65 6e 64 65 72 65 64 20 61 73 20 22 32  e rendered as "2
3510: 31 34 37 34 38 33 36 34 37 22 20 75 73 69 6e 67  147483647" using
3520: 20 22 25 64 22 20 62 75 74 20 77 6f 75 6c 64 0a   "%d" but would.
3530: 61 70 70 65 61 72 20 61 73 20 22 32 2c 31 34 37  appear as "2,147
3540: 2c 34 38 33 2c 36 34 37 22 20 77 69 74 68 20 22  ,483,647" with "
3550: 25 2c 64 22 2e 20 20 54 68 69 73 20 66 6c 61 67  %,d".  This flag
3560: 20 69 73 20 61 20 6e 6f 6e 2d 73 74 61 6e 64 61   is a non-standa
3570: 72 64 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 3c 74  rd extension..<t
3580: 72 3e 0a 3c 74 64 3e 3c 62 3e 21 3c 2f 62 3e 0a  r>.<td><b>!</b>.
3590: 3c 74 64 3e 54 68 69 73 20 69 73 20 74 68 65 20  <td>This is the 
35a0: 22 61 6c 74 65 72 6e 61 74 65 2d 66 6f 72 6d 2d  "alternate-form-
35b0: 32 20 66 6c 61 67 2e 0a 46 6f 72 20 73 74 72 69  2 flag..For stri
35c0: 6e 67 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  ng substitutions
35d0: 2c 20 74 68 69 73 20 66 6c 61 67 20 63 61 75 73  , this flag caus
35e0: 65 73 20 74 68 65 20 77 69 64 74 68 20 61 6e 64  es the width and
35f0: 20 70 72 65 63 69 73 69 6f 6e 20 74 6f 20 62 65   precision to be
3600: 20 75 6e 64 65 72 73 74 61 6e 64 0a 69 6e 20 74   understand.in t
3610: 65 72 6d 73 20 6f 66 20 63 68 61 72 61 63 74 65  erms of characte
3620: 72 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 62  rs rather than b
3630: 79 74 65 73 2e 0a 46 6f 72 20 66 6c 6f 61 74 69  ytes..For floati
3640: 6e 67 20 70 6f 69 6e 74 20 73 75 62 73 74 69 74  ng point substit
3650: 75 74 69 6f 6e 73 2c 20 74 68 65 20 61 6c 74 65  utions, the alte
3660: 72 6e 61 74 65 2d 66 6f 72 6d 2d 32 20 66 6c 61  rnate-form-2 fla
3670: 67 20 69 6e 63 72 65 61 73 65 73 20 74 68 65 20  g increases the 
3680: 0a 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20  .maximum number 
3690: 6f 66 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64  of significant d
36a0: 69 67 69 74 73 20 64 69 73 70 6c 61 79 65 64 20  igits displayed 
36b0: 66 72 6f 6d 20 31 36 20 74 6f 20 32 36 2c 0a 66  from 16 to 26,.f
36c0: 6f 72 63 65 73 20 74 68 65 20 64 69 73 70 6c 61  orces the displa
36d0: 79 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c  y of the decimal
36e0: 20 70 6f 69 6e 74 20 61 6e 64 20 63 61 75 73 65   point and cause
36f0: 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 64  s at least one d
3700: 69 67 69 74 0a 74 6f 20 61 70 70 65 61 72 20 61  igit.to appear a
3710: 66 74 65 72 20 74 68 65 20 64 65 63 69 6d 61 6c  fter the decimal
3720: 20 70 6f 69 6e 74 2e 3c 62 72 3e 3c 62 72 3e 0a   point.<br><br>.
3730: 54 68 65 20 61 6c 74 65 72 6e 61 74 65 2d 66 6f  The alternate-fo
3740: 72 6d 2d 32 20 66 6c 61 67 20 69 73 20 61 20 6e  rm-2 flag is a n
3750: 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65 78 74 65  on-standard exte
3760: 6e 73 69 6f 6e 20 74 68 61 74 20 61 70 70 65 61  nsion that appea
3770: 72 73 20 69 6e 20 6e 6f 0a 6f 74 68 65 72 20 70  rs in no.other p
3780: 72 69 6e 74 66 28 29 20 69 6d 70 6c 65 6d 65 6e  rintf() implemen
3790: 74 61 74 69 6f 6e 73 2c 20 61 73 20 66 61 72 20  tations, as far 
37a0: 61 73 20 77 65 20 6b 6e 6f 77 2e 0a 3c 2f 74 61  as we know..</ta
37b0: 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a  ble>.</center>..
37c0: 3c 68 31 3e 49 6d 70 6c 65 6d 65 6e 74 61 74 69  <h1>Implementati
37d0: 6f 6e 20 41 6e 64 20 48 69 73 74 6f 72 79 3c 2f  on And History</
37e0: 68 31 3e 0a 0a 3c 70 3e 0a 54 68 65 20 63 6f 72  h1>..<p>.The cor
37f0: 65 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74  e string formatt
3800: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 74  ing routine is t
3810: 68 65 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  he sqlite3VXPrin
3820: 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 66 6f  tf() function fo
3830: 75 6e 64 20 69 6e 20 74 68 65 0a 5b 68 74 74 70  und in the.[http
3840: 73 3a 2f 2f 73 71 6c 69 74 65 2e 6f 72 67 2f 73  s://sqlite.org/s
3850: 72 63 2f 66 69 6c 65 2f 73 72 63 2f 70 72 69 6e  rc/file/src/prin
3860: 74 66 2e 63 7c 70 72 69 6e 74 66 2e 63 5d 20 73  tf.c|printf.c] s
3870: 6f 75 72 63 65 20 66 69 6c 65 2e 20 20 41 6c 6c  ource file.  All
3880: 20 74 68 65 0a 76 61 72 69 6f 75 73 20 69 6e 74   the.various int
3890: 65 72 66 61 63 65 73 20 69 6e 76 6f 6b 65 20 28  erfaces invoke (
38a0: 73 6f 6d 65 74 69 6d 65 73 20 69 6e 64 69 72 65  sometimes indire
38b0: 63 74 6c 79 29 20 74 68 69 73 20 6f 6e 65 20 63  ctly) this one c
38c0: 6f 72 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 54 68  ore function..Th
38d0: 65 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74  e sqlite3VXPrint
38e0: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 62 65 67  f() function beg
38f0: 61 6e 20 61 73 20 63 6f 64 65 20 77 72 69 74 74  an as code writt
3900: 65 6e 20 62 79 20 74 68 65 20 66 69 72 73 74 20  en by the first 
3910: 61 75 74 68 6f 72 0a 6f 66 20 53 51 4c 69 74 65  author.of SQLite
3920: 20 28 5b 48 69 70 70 5d 29 20 77 68 65 6e 20 68   ([Hipp]) when h
3930: 65 20 77 61 73 20 61 20 67 72 61 64 75 61 74 65  e was a graduate
3940: 20 73 74 75 64 65 6e 74 20 61 20 44 75 6b 65 20   student a Duke 
3950: 55 6e 69 76 65 72 73 69 74 79 20 69 6e 20 74 68  University in th
3960: 65 0a 6c 61 74 65 20 31 39 38 30 73 2e 20 20 48  e.late 1980s.  H
3970: 69 70 70 20 6b 65 70 74 20 74 68 69 73 20 70 72  ipp kept this pr
3980: 69 6e 74 66 28 29 20 69 6d 70 6c 65 6d 65 6e 74  intf() implement
3990: 61 74 69 6f 6e 20 69 6e 20 68 69 73 20 70 65 72  ation in his per
39a0: 73 6f 6e 61 6c 20 74 6f 6f 6c 62 6f 78 20 75 6e  sonal toolbox un
39b0: 74 69 6c 0a 68 65 20 73 74 61 72 74 65 64 20 77  til.he started w
39c0: 6f 72 6b 69 6e 67 20 6f 6e 20 53 51 4c 69 74 65  orking on SQLite
39d0: 20 69 6e 20 32 30 30 30 2e 20 20 54 68 65 20 63   in 2000.  The c
39e0: 6f 64 65 20 77 61 73 20 69 6e 63 6f 72 70 6f 72  ode was incorpor
39f0: 61 74 65 64 20 69 6e 74 6f 20 74 68 65 0a 53 51  ated into the.SQ
3a00: 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65 65  Lite source tree
3a10: 20 6f 6e 20 5b 68 74 74 70 73 3a 2f 2f 73 71 6c   on [https://sql
3a20: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65  ite.org/src/time
3a30: 6c 69 6e 65 3f 63 3d 66 39 33 37 32 30 37 32 61  line?c=f9372072a
3a40: 36 7c 32 30 30 30 2d 31 30 2d 30 38 5d 0a 66 6f  6|2000-10-08].fo
3a50: 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  r SQLite version
3a60: 20 31 2e 30 2e 39 2e 0a 0a 3c 70 3e 0a 54 68 65   1.0.9...<p>.The
3a70: 20 5b 68 74 74 70 73 3a 2f 2f 77 77 77 2e 66 6f   [https://www.fo
3a80: 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 7c 46 6f  ssil-scm.org/|Fo
3a90: 73 73 69 6c 20 56 65 72 73 69 6f 6e 20 43 6f 6e  ssil Version Con
3aa0: 74 72 6f 6c 20 53 79 73 74 65 6d 5d 20 75 73 65  trol System] use
3ab0: 73 20 69 74 73 20 6f 77 6e 0a 70 72 69 6e 74 66  s its own.printf
3ac0: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
3ad0: 6e 20 74 68 61 74 20 69 73 20 64 65 72 69 76 65  n that is derive
3ae0: 64 20 66 72 6f 6d 20 61 6e 20 65 61 72 6c 79 20  d from an early 
3af0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 53  version of the S
3b00: 51 4c 69 74 65 0a 70 72 69 6e 74 66 28 29 20 69  QLite.printf() i
3b10: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 62  mplementation, b
3b20: 75 74 20 74 68 6f 73 65 20 74 77 6f 20 69 6d 70  ut those two imp
3b30: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 68 61 76  lementations hav
3b40: 65 20 73 69 6e 63 65 20 64 69 76 65 72 67 65 64  e since diverged
3b50: 2e 0a 0a 3c 70 3e 0a 54 68 65 20 72 65 61 73 6f  ...<p>.The reaso
3b60: 6e 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69  n that the [sqli
3b70: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20  te3_snprintf()] 
3b80: 68 61 73 20 69 74 73 20 62 75 66 66 65 72 20 70  has its buffer p
3b90: 6f 69 6e 74 65 72 20 61 6e 64 20 62 75 66 66 65  ointer and buffe
3ba0: 72 20 73 69 7a 65 0a 61 72 67 75 6d 65 6e 74 73  r size.arguments
3bb0: 20 72 65 76 65 72 73 65 64 20 66 72 6f 6d 20 77   reversed from w
3bc0: 68 61 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20  hat is found in 
3bd0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
3be0: 72 61 72 79 20 73 6e 70 72 69 6e 74 66 28 29 20  rary snprintf() 
3bf0: 72 6f 75 74 69 6e 65 0a 69 73 20 62 65 63 61 75  routine.is becau
3c00: 73 65 20 74 68 65 72 65 20 77 61 73 20 6e 6f 20  se there was no 
3c10: 73 6e 70 72 69 6e 74 66 28 29 20 72 6f 75 74 69  snprintf() routi
3c20: 6e 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64 61  ne in the standa
3c30: 72 64 20 43 20 6c 69 62 72 61 72 79 0a 77 68 65  rd C library.whe
3c40: 6e 20 48 69 70 70 20 77 61 73 20 66 69 72 73 74  n Hipp was first
3c50: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 68 69   implementing hi
3c60: 73 20 76 65 72 73 69 6f 6e 2c 20 61 6e 64 20 68  s version, and h
3c70: 65 20 63 68 6f 73 65 20 61 20 64 69 66 66 65 72  e chose a differ
3c80: 65 6e 74 20 6f 72 64 65 72 0a 74 68 61 6e 20 74  ent order.than t
3c90: 68 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66 20  he designers of 
3ca0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
3cb0: 69 62 72 61 72 79 2e 0a                          ibrary..