/ Hex Artifact Content
Login

Artifact 7b1ab42b097b484c18d99e1d1c71a6a0c9c87a7a:


0000: 2f 2a 0a 2a 2a 20 41 20 70 72 6f 67 72 61 6d 20  /*.** A program 
0010: 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  for performance 
0020: 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  testing..**.** T
0030: 68 65 20 61 76 61 69 6c 61 62 6c 65 20 63 6f 6d  he available com
0040: 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand-line option
0050: 73 20 61 72 65 20 64 65 73 63 72 69 62 65 64 20  s are described 
0060: 62 65 6c 6f 77 3a 0a 2a 2f 0a 73 74 61 74 69 63  below:.*/.static
0070: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 48 65 6c   const char zHel
0080: 70 5b 5d 20 3d 0a 20 20 22 55 73 61 67 65 3a 20  p[] =.  "Usage: 
0090: 25 73 20 5b 2d 2d 6f 70 74 69 6f 6e 73 5d 20 44  %s [--options] D
00a0: 41 54 41 42 41 53 45 5c 6e 22 0a 20 20 22 4f 70  ATABASE\n".  "Op
00b0: 74 69 6f 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 2d  tions:\n".  "  -
00c0: 2d 61 75 74 6f 76 61 63 75 75 6d 20 20 20 20 20  -autovacuum     
00d0: 20 20 20 45 6e 61 62 6c 65 20 41 55 54 4f 56 41     Enable AUTOVA
00e0: 43 55 55 4d 20 6d 6f 64 65 5c 6e 22 0a 20 20 22  CUUM mode\n".  "
00f0: 20 20 2d 2d 63 61 63 68 65 73 69 7a 65 20 4e 20    --cachesize N 
0100: 20 20 20 20 20 20 53 65 74 20 74 68 65 20 63 61        Set the ca
0110: 63 68 65 20 73 69 7a 65 20 74 6f 20 4e 5c 6e 22  che size to N\n"
0120: 20 0a 20 20 22 20 20 2d 2d 65 78 63 6c 75 73 69   .  "  --exclusi
0130: 76 65 20 20 20 20 20 20 20 20 20 45 6e 61 62 6c  ve         Enabl
0140: 65 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3d 45  e locking_mode=E
0150: 58 43 4c 55 53 49 56 45 5c 6e 22 0a 20 20 22 20  XCLUSIVE\n".  " 
0160: 20 2d 2d 65 78 70 6c 61 69 6e 20 20 20 20 20 20   --explain      
0170: 20 20 20 20 20 4c 69 6b 65 20 2d 2d 73 71 6c 6f       Like --sqlo
0180: 6e 6c 79 20 62 75 74 20 77 69 74 68 20 61 64 64  nly but with add
0190: 65 64 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  ed EXPLAIN keywo
01a0: 72 64 73 5c 6e 22 0a 20 20 22 20 20 2d 2d 68 65  rds\n".  "  --he
01b0: 61 70 20 53 5a 20 4d 49 4e 20 20 20 20 20 20 20  ap SZ MIN       
01c0: 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  Memory allocator
01d0: 20 75 73 65 73 20 53 5a 20 62 79 74 65 73 20 26   uses SZ bytes &
01e0: 20 6d 69 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   min allocation 
01f0: 4d 49 4e 5c 6e 22 0a 20 20 22 20 20 2d 2d 69 6e  MIN\n".  "  --in
0200: 63 72 76 61 63 75 75 6d 20 20 20 20 20 20 20 20  crvacuum        
0210: 45 6e 61 62 6c 65 20 69 6e 63 72 65 6d 65 6e 61  Enable incremena
0220: 74 61 6c 20 76 61 63 75 75 6d 20 6d 6f 64 65 5c  tal vacuum mode\
0230: 6e 22 0a 20 20 22 20 20 2d 2d 6a 6f 75 72 6e 61  n".  "  --journa
0240: 6c 20 4d 20 20 20 20 20 20 20 20 20 53 65 74 20  l M         Set 
0250: 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  the journal_mode
0260: 20 74 6f 20 4d 5c 6e 22 0a 20 20 22 20 20 2d 2d   to M\n".  "  --
0270: 6b 65 79 20 4b 45 59 20 20 20 20 20 20 20 20 20  key KEY         
0280: 20 20 53 65 74 20 74 68 65 20 65 6e 63 72 79 70    Set the encryp
0290: 74 69 6f 6e 20 6b 65 79 20 74 6f 20 4b 45 59 5c  tion key to KEY\
02a0: 6e 22 0a 20 20 22 20 20 2d 2d 6c 6f 6f 6b 61 73  n".  "  --lookas
02b0: 69 64 65 20 4e 20 53 5a 20 20 20 20 43 6f 6e 66  ide N SZ    Conf
02c0: 69 67 75 72 65 20 6c 6f 6f 6b 61 73 69 64 65 20  igure lookaside 
02d0: 66 6f 72 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53  for N slots of S
02e0: 5a 20 62 79 74 65 73 20 65 61 63 68 5c 6e 22 0a  Z bytes each\n".
02f0: 20 20 22 20 20 2d 2d 6d 6d 61 70 20 53 5a 20 20    "  --mmap SZ  
0300: 20 20 20 20 20 20 20 20 20 4d 4d 41 50 20 74 68           MMAP th
0310: 65 20 66 69 72 73 74 20 53 5a 20 62 79 74 65 73  e first SZ bytes
0320: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0330: 20 66 69 6c 65 5c 6e 22 0a 20 20 22 20 20 2d 2d   file\n".  "  --
0340: 6d 75 6c 74 69 74 68 72 65 61 64 20 20 20 20 20  multithread     
0350: 20 20 53 65 74 20 6d 75 6c 74 69 74 68 72 65 61    Set multithrea
0360: 64 65 64 20 6d 6f 64 65 5c 6e 22 0a 20 20 22 20  ded mode\n".  " 
0370: 20 2d 2d 6e 6f 6d 65 6d 73 74 61 74 20 20 20 20   --nomemstat    
0380: 20 20 20 20 20 44 69 73 61 62 6c 65 20 6d 65 6d       Disable mem
0390: 6f 72 79 20 73 74 61 74 69 73 74 69 63 73 5c 6e  ory statistics\n
03a0: 22 0a 20 20 22 20 20 2d 2d 6e 6f 73 79 6e 63 20  ".  "  --nosync 
03b0: 20 20 20 20 20 20 20 20 20 20 20 53 65 74 20 50             Set P
03c0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
03d0: 73 3d 4f 46 46 5c 6e 22 0a 20 20 22 20 20 2d 2d  s=OFF\n".  "  --
03e0: 6e 6f 74 6e 75 6c 6c 20 20 20 20 20 20 20 20 20  notnull         
03f0: 20 20 41 64 64 20 4e 4f 54 20 4e 55 4c 4c 20 63    Add NOT NULL c
0400: 6f 6e 73 74 72 61 69 6e 74 73 20 74 6f 20 74 61  onstraints to ta
0410: 62 6c 65 20 63 6f 6c 75 6d 6e 73 5c 6e 22 0a 20  ble columns\n". 
0420: 20 22 20 20 2d 2d 70 61 67 65 73 69 7a 65 20 4e   "  --pagesize N
0430: 20 20 20 20 20 20 20 20 53 65 74 20 74 68 65 20          Set the 
0440: 70 61 67 65 20 73 69 7a 65 20 74 6f 20 4e 5c 6e  page size to N\n
0450: 22 0a 20 20 22 20 20 2d 2d 70 63 61 63 68 65 20  ".  "  --pcache 
0460: 4e 20 53 5a 20 20 20 20 20 20 20 43 6f 6e 66 69  N SZ       Confi
0470: 67 75 72 65 20 4e 20 70 61 67 65 73 20 6f 66 20  gure N pages of 
0480: 70 61 67 65 63 61 63 68 65 20 65 61 63 68 20 6f  pagecache each o
0490: 66 20 73 69 7a 65 20 53 5a 20 62 79 74 65 73 5c  f size SZ bytes\
04a0: 6e 22 0a 20 20 22 20 20 2d 2d 70 72 69 6d 61 72  n".  "  --primar
04b0: 79 6b 65 79 20 20 20 20 20 20 20 20 55 73 65 20  ykey        Use 
04c0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 73 74  PRIMARY KEY inst
04d0: 65 61 64 20 6f 66 20 55 4e 49 51 55 45 20 77 68  ead of UNIQUE wh
04e0: 65 72 65 20 61 70 70 72 6f 70 72 69 61 74 65 5c  ere appropriate\
04f0: 6e 22 0a 20 20 22 20 20 2d 2d 72 65 70 65 61 74  n".  "  --repeat
0500: 20 4e 20 20 20 20 20 20 20 20 20 20 52 65 70 65   N          Repe
0510: 61 74 20 65 61 63 68 20 53 45 4c 45 43 54 20 4e  at each SELECT N
0520: 20 74 69 6d 65 73 20 28 64 65 66 61 75 6c 74 3a   times (default:
0530: 20 31 29 5c 6e 22 0a 20 20 22 20 20 2d 2d 72 65   1)\n".  "  --re
0540: 70 72 65 70 61 72 65 20 20 20 20 20 20 20 20 20  prepare         
0550: 52 65 70 72 65 70 61 72 65 20 65 61 63 68 20 73  Reprepare each s
0560: 74 61 74 65 6d 65 6e 74 20 75 70 6f 6e 20 65 76  tatement upon ev
0570: 65 72 79 20 69 6e 76 6f 63 61 74 69 6f 6e 5c 6e  ery invocation\n
0580: 22 0a 20 20 22 20 20 2d 2d 73 63 72 61 74 63 68  ".  "  --scratch
0590: 20 4e 20 53 5a 20 20 20 20 20 20 43 6f 6e 66 69   N SZ      Confi
05a0: 67 75 72 65 20 73 63 72 61 74 63 68 20 6d 65 6d  gure scratch mem
05b0: 6f 72 79 20 66 6f 72 20 4e 20 73 6c 6f 74 73 20  ory for N slots 
05c0: 6f 66 20 53 5a 20 62 79 74 65 73 20 65 61 63 68  of SZ bytes each
05d0: 5c 6e 22 0a 20 20 22 20 20 2d 2d 73 65 72 69 61  \n".  "  --seria
05e0: 6c 69 7a 65 64 20 20 20 20 20 20 20 20 53 65 74  lized        Set
05f0: 20 73 65 72 69 61 6c 69 7a 65 64 20 74 68 72 65   serialized thre
0600: 61 64 69 6e 67 20 6d 6f 64 65 5c 6e 22 0a 20 20  ading mode\n".  
0610: 22 20 20 2d 2d 73 69 6e 67 6c 65 74 68 72 65 61  "  --singlethrea
0620: 64 20 20 20 20 20 20 53 65 74 20 73 69 6e 67 6c  d      Set singl
0630: 65 2d 74 68 72 65 61 64 65 64 20 6d 6f 64 65 20  e-threaded mode 
0640: 2d 20 64 69 73 61 62 6c 65 73 20 61 6c 6c 20 6d  - disables all m
0650: 75 74 65 78 69 6e 67 5c 6e 22 0a 20 20 22 20 20  utexing\n".  "  
0660: 2d 2d 73 71 6c 6f 6e 6c 79 20 20 20 20 20 20 20  --sqlonly       
0670: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 4f 6e 6c 79      No-op.  Only
0680: 20 73 68 6f 77 20 74 68 65 20 53 51 4c 20 74 68   show the SQL th
0690: 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
06a0: 65 6e 20 72 75 6e 2e 5c 6e 22 0a 20 20 22 20 20  en run.\n".  "  
06b0: 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20  --shrink-memory 
06c0: 20 20 20 20 49 6e 76 6f 6b 65 20 73 71 6c 69 74      Invoke sqlit
06d0: 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
06e0: 6d 6f 72 79 28 29 20 66 72 65 71 75 65 6e 74 6c  mory() frequentl
06f0: 79 2e 5c 6e 22 0a 20 20 22 20 20 2d 2d 73 69 7a  y.\n".  "  --siz
0700: 65 20 4e 20 20 20 20 20 20 20 20 20 20 20 20 52  e N            R
0710: 65 6c 61 74 69 76 65 20 74 65 73 74 20 73 69 7a  elative test siz
0720: 65 2e 20 20 44 65 66 61 75 6c 74 3d 31 30 30 5c  e.  Default=100\
0730: 6e 22 0a 20 20 22 20 20 2d 2d 73 74 61 74 73 20  n".  "  --stats 
0740: 20 20 20 20 20 20 20 20 20 20 20 20 53 68 6f 77              Show
0750: 20 73 74 61 74 69 73 74 69 63 73 20 61 74 20 74   statistics at t
0760: 68 65 20 65 6e 64 5c 6e 22 0a 20 20 22 20 20 2d  he end\n".  "  -
0770: 2d 74 65 6d 70 20 4e 20 20 20 20 20 20 20 20 20  -temp N         
0780: 20 20 20 4e 20 66 72 6f 6d 20 30 20 74 6f 20 39     N from 0 to 9
0790: 2e 20 20 30 3a 20 6e 6f 20 74 65 6d 70 20 74 61  .  0: no temp ta
07a0: 62 6c 65 2e 20 39 3a 20 61 6c 6c 20 74 65 6d 70  ble. 9: all temp
07b0: 20 74 61 62 6c 65 73 5c 6e 22 0a 20 20 22 20 20   tables\n".  "  
07c0: 2d 2d 74 65 73 74 73 65 74 20 54 20 20 20 20 20  --testset T     
07d0: 20 20 20 20 52 75 6e 20 74 65 73 74 2d 73 65 74      Run test-set
07e0: 20 54 20 28 6d 61 69 6e 2c 20 63 74 65 2c 20 72   T (main, cte, r
07f0: 74 72 65 65 2c 20 6f 72 6d 2c 20 64 65 62 75 67  tree, orm, debug
0800: 29 5c 6e 22 0a 20 20 22 20 20 2d 2d 74 72 61 63  )\n".  "  --trac
0810: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 54 75  e             Tu
0820: 72 6e 20 6f 6e 20 53 51 4c 20 74 72 61 63 69 6e  rn on SQL tracin
0830: 67 5c 6e 22 0a 20 20 22 20 20 2d 2d 74 68 72 65  g\n".  "  --thre
0840: 61 64 73 20 4e 20 20 20 20 20 20 20 20 20 55 73  ads N         Us
0850: 65 20 75 70 20 74 6f 20 4e 20 74 68 72 65 61 64  e up to N thread
0860: 73 20 66 6f 72 20 73 6f 72 74 69 6e 67 5c 6e 22  s for sorting\n"
0870: 0a 20 20 22 20 20 2d 2d 75 74 66 31 36 62 65 20  .  "  --utf16be 
0880: 20 20 20 20 20 20 20 20 20 20 53 65 74 20 74 65            Set te
0890: 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 55  xt encoding to U
08a0: 54 46 2d 31 36 42 45 5c 6e 22 0a 20 20 22 20 20  TF-16BE\n".  "  
08b0: 2d 2d 75 74 66 31 36 6c 65 20 20 20 20 20 20 20  --utf16le       
08c0: 20 20 20 20 53 65 74 20 74 65 78 74 20 65 6e 63      Set text enc
08d0: 6f 64 69 6e 67 20 74 6f 20 55 54 46 2d 31 36 4c  oding to UTF-16L
08e0: 45 5c 6e 22 0a 20 20 22 20 20 2d 2d 76 65 72 69  E\n".  "  --veri
08f0: 66 79 20 20 20 20 20 20 20 20 20 20 20 20 52 75  fy            Ru
0900: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 65 72  n additional ver
0910: 69 66 69 63 61 74 69 6f 6e 20 73 74 65 70 73 2e  ification steps.
0920: 5c 6e 22 0a 20 20 22 20 20 2d 2d 77 69 74 68 6f  \n".  "  --witho
0930: 75 74 2d 72 6f 77 69 64 20 20 20 20 20 55 73 65  ut-rowid     Use
0940: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 77   WITHOUT ROWID w
0950: 68 65 72 65 20 61 70 70 72 6f 70 72 69 61 74 65  here appropriate
0960: 5c 6e 22 0a 3b 0a 0a 0a 23 69 6e 63 6c 75 64 65  \n".;...#include
0970: 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e   "sqlite3.h".#in
0980: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
0990: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
09a0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
09b0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
09c0: 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23 69 6e 63   <stdarg.h>.#inc
09d0: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
09e0: 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e  #include <ctype.
09f0: 68 3e 0a 23 69 66 6e 64 65 66 20 5f 57 49 4e 33  h>.#ifndef _WIN3
0a00: 32 0a 23 20 69 6e 63 6c 75 64 65 20 3c 75 6e 69  2.# include <uni
0a10: 73 74 64 2e 68 3e 0a 23 65 6c 73 65 0a 23 20 69  std.h>.#else.# i
0a20: 6e 63 6c 75 64 65 20 3c 69 6f 2e 68 3e 0a 23 65  nclude <io.h>.#e
0a30: 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 49 53 53  ndif.#define ISS
0a40: 50 41 43 45 28 58 29 20 69 73 73 70 61 63 65 28  PACE(X) isspace(
0a50: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
0a60: 58 29 29 0a 23 64 65 66 69 6e 65 20 49 53 44 49  X)).#define ISDI
0a70: 47 49 54 28 58 29 20 69 73 64 69 67 69 74 28 28  GIT(X) isdigit((
0a80: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 58  unsigned char)(X
0a90: 29 29 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 56  ))..#if SQLITE_V
0aa0: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3c 33 30  ERSION_NUMBER<30
0ab0: 30 35 30 30 30 0a 23 20 64 65 66 69 6e 65 20 73  05000.# define s
0ac0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
0ad0: 69 74 65 5f 69 6e 74 36 34 0a 23 65 6e 64 69 66  ite_int64.#endif
0ae0: 0a 0a 2f 2a 20 41 6c 6c 20 67 6c 6f 62 61 6c 20  ../* All global 
0af0: 73 74 61 74 65 20 69 73 20 68 65 6c 64 20 69 6e  state is held in
0b00: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
0b10: 2a 2f 0a 73 74 61 74 69 63 20 73 74 72 75 63 74  */.static struct
0b20: 20 47 6c 6f 62 61 6c 20 7b 0a 20 20 73 71 6c 69   Global {.  sqli
0b30: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
0b40: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 70         /* The op
0b50: 65 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  en database conn
0b60: 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  ection */.  sqli
0b70: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
0b80: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
0b90: 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  t SQL statement 
0ba0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
0bb0: 36 34 20 69 53 74 61 72 74 3b 20 20 20 20 20 20  64 iStart;      
0bc0: 2f 2a 20 53 74 61 72 74 2d 74 69 6d 65 20 66 6f  /* Start-time fo
0bd0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65  r the current te
0be0: 73 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  st */.  sqlite3_
0bf0: 69 6e 74 36 34 20 69 54 6f 74 61 6c 3b 20 20 20  int64 iTotal;   
0c00: 20 20 20 2f 2a 20 54 6f 74 61 6c 20 74 69 6d 65     /* Total time
0c10: 20 2a 2f 0a 20 20 69 6e 74 20 62 57 69 74 68 6f   */.  int bWitho
0c20: 75 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  utRowid;        
0c30: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 77   /* True for --w
0c40: 69 74 68 6f 75 74 2d 72 6f 77 69 64 20 2a 2f 0a  ithout-rowid */.
0c50: 20 20 69 6e 74 20 62 52 65 70 72 65 70 61 72 65    int bReprepare
0c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
0c70: 54 72 75 65 20 74 6f 20 72 65 70 72 65 70 61 72  True to reprepar
0c80: 65 20 74 68 65 20 53 51 4c 20 6f 6e 20 65 61 63  e the SQL on eac
0c90: 68 20 72 65 72 75 6e 20 2a 2f 0a 20 20 69 6e 74  h rerun */.  int
0ca0: 20 62 53 71 6c 4f 6e 6c 79 3b 20 20 20 20 20 20   bSqlOnly;      
0cb0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
0cc0: 74 6f 20 70 72 69 6e 74 20 74 68 65 20 53 51 4c  to print the SQL
0cd0: 20 6f 6e 63 65 20 6f 6e 6c 79 20 2a 2f 0a 20 20   once only */.  
0ce0: 69 6e 74 20 62 45 78 70 6c 61 69 6e 3b 20 20 20  int bExplain;   
0cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
0d00: 69 6e 74 20 53 51 4c 20 77 69 74 68 20 45 58 50  int SQL with EXP
0d10: 4c 41 49 4e 20 70 72 65 66 69 78 20 2a 2f 0a 20  LAIN prefix */. 
0d20: 20 69 6e 74 20 62 56 65 72 69 66 79 3b 20 20 20   int bVerify;   
0d30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
0d40: 72 79 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ry to verify tha
0d50: 74 20 72 65 73 75 6c 74 73 20 61 72 65 20 63 6f  t results are co
0d60: 72 72 65 63 74 20 2a 2f 0a 20 20 69 6e 74 20 62  rrect */.  int b
0d70: 4d 65 6d 53 68 72 69 6e 6b 3b 20 20 20 20 20 20  MemShrink;      
0d80: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20 73 71        /* Call sq
0d90: 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65  lite3_db_release
0da0: 5f 6d 65 6d 6f 72 79 28 29 20 6f 66 74 65 6e 20  _memory() often 
0db0: 2a 2f 0a 20 20 69 6e 74 20 65 54 65 6d 70 3b 20  */.  int eTemp; 
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dd0: 2f 2a 20 30 3a 20 6e 6f 20 54 45 4d 50 2e 20 20  /* 0: no TEMP.  
0de0: 39 3a 20 61 6c 77 61 79 73 20 54 45 4d 50 2e 20  9: always TEMP. 
0df0: 2a 2f 0a 20 20 69 6e 74 20 73 7a 54 65 73 74 3b  */.  int szTest;
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e10: 2f 2a 20 53 63 61 6c 65 20 66 61 63 74 6f 72 20  /* Scale factor 
0e20: 66 6f 72 20 74 65 73 74 20 69 74 65 72 61 74 69  for test iterati
0e30: 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ons */.  int nRe
0e40: 70 65 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  peat;           
0e50: 20 20 20 20 2f 2a 20 52 65 70 65 61 74 20 73 65      /* Repeat se
0e60: 6c 65 63 74 73 20 74 68 69 73 20 6d 61 6e 79 20  lects this many 
0e70: 74 69 6d 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  times */.  const
0e80: 20 63 68 61 72 20 2a 7a 57 52 3b 20 20 20 20 20   char *zWR;     
0e90: 20 20 20 20 20 20 2f 2a 20 4d 69 67 68 74 20 62        /* Might b
0ea0: 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  e WITHOUT ROWID 
0eb0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
0ec0: 2a 7a 4e 4e 3b 20 20 20 20 20 20 20 20 20 20 20  *zNN;           
0ed0: 2f 2a 20 4d 69 67 68 74 20 62 65 20 4e 4f 54 20  /* Might be NOT 
0ee0: 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  NULL */.  const 
0ef0: 63 68 61 72 20 2a 7a 50 4b 3b 20 20 20 20 20 20  char *zPK;      
0f00: 20 20 20 20 20 2f 2a 20 4d 69 67 68 74 20 62 65       /* Might be
0f10: 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41   UNIQUE or PRIMA
0f20: 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 6e 73 69  RY KEY */.  unsi
0f30: 67 6e 65 64 20 69 6e 74 20 78 2c 20 79 3b 20 20  gned int x, y;  
0f40: 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f         /* Pseudo
0f50: 2d 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67  -random number g
0f60: 65 6e 65 72 61 74 6f 72 20 73 74 61 74 65 20 2a  enerator state *
0f70: 2f 0a 20 20 69 6e 74 20 6e 52 65 73 75 6c 74 3b  /.  int nResult;
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0f90: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 75  * Size of the cu
0fa0: 72 72 65 6e 74 20 72 65 73 75 6c 74 20 2a 2f 0a  rrent result */.
0fb0: 20 20 63 68 61 72 20 7a 52 65 73 75 6c 74 5b 33    char zResult[3
0fc0: 30 30 30 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  000];        /* 
0fd0: 54 65 78 74 20 6f 66 20 74 68 65 20 63 75 72 72  Text of the curr
0fe0: 65 6e 74 20 72 65 73 75 6c 74 20 2a 2f 0a 7d 20  ent result */.} 
0ff0: 67 3b 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 22 20  g;../* Return " 
1000: 54 45 4d 50 22 20 6f 72 20 22 22 2c 20 61 73 20  TEMP" or "", as 
1010: 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1020: 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65  creating a table
1030: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73  ..*/.static cons
1040: 74 20 63 68 61 72 20 2a 69 73 54 65 6d 70 28 69  t char *isTemp(i
1050: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
1060: 67 2e 65 54 65 6d 70 3e 3d 4e 20 3f 20 22 20 54  g.eTemp>=N ? " T
1070: 45 4d 50 22 20 3a 20 22 22 3b 0a 7d 0a 0a 0a 2f  EMP" : "";.}.../
1080: 2a 20 50 72 69 6e 74 20 61 6e 20 65 72 72 6f 72  * Print an error
1090: 20 6d 65 73 73 61 67 65 20 61 6e 64 20 65 78 69   message and exi
10a0: 74 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  t */.static void
10b0: 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 63 6f 6e   fatal_error(con
10c0: 73 74 20 63 68 61 72 20 2a 7a 4d 73 67 2c 20 2e  st char *zMsg, .
10d0: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
10e0: 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  p;.  va_start(ap
10f0: 2c 20 7a 4d 73 67 29 3b 0a 20 20 76 66 70 72 69  , zMsg);.  vfpri
1100: 6e 74 66 28 73 74 64 65 72 72 2c 20 7a 4d 73 67  ntf(stderr, zMsg
1110: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
1120: 61 70 29 3b 0a 20 20 65 78 69 74 28 31 29 3b 0a  ap);.  exit(1);.
1130: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
1140: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 68  the value of a h
1150: 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67 69 74  exadecimal digit
1160: 2e 20 20 52 65 74 75 72 6e 20 2d 31 20 69 66 20  .  Return -1 if 
1170: 74 68 65 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20  the input.** is 
1180: 6e 6f 74 20 61 20 68 65 78 20 64 69 67 69 74 2e  not a hex digit.
1190: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 68  .*/.static int h
11a0: 65 78 44 69 67 69 74 56 61 6c 75 65 28 63 68 61  exDigitValue(cha
11b0: 72 20 63 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27  r c){.  if( c>='
11c0: 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29 20 72  0' && c<='9' ) r
11d0: 65 74 75 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20  eturn c - '0';. 
11e0: 20 69 66 28 20 63 3e 3d 27 61 27 20 26 26 20 63   if( c>='a' && c
11f0: 3c 3d 27 66 27 20 29 20 72 65 74 75 72 6e 20 63  <='f' ) return c
1200: 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 69   - 'a' + 10;.  i
1210: 66 28 20 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d  f( c>='A' && c<=
1220: 27 46 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d  'F' ) return c -
1230: 20 27 41 27 20 2b 20 31 30 3b 0a 20 20 72 65 74   'A' + 10;.  ret
1240: 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 20 50 72  urn -1;.}../* Pr
1250: 6f 76 69 64 65 20 61 6e 20 61 6c 74 65 72 6e 61  ovide an alterna
1260: 74 69 76 65 20 74 6f 20 73 71 6c 69 74 65 33 5f  tive to sqlite3_
1270: 73 74 72 69 63 6d 70 28 29 20 69 6e 20 6f 6c 64  stricmp() in old
1280: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 2a  er versions of.*
1290: 2a 20 53 51 4c 69 74 65 20 2a 2f 0a 23 69 66 20  * SQLite */.#if 
12a0: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
12b0: 55 4d 42 45 52 3c 33 30 30 37 30 31 31 0a 23 20  UMBER<3007011.# 
12c0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 5f 73  define sqlite3_s
12d0: 74 72 69 63 6d 70 20 73 74 72 63 6d 70 0a 23 65  tricmp strcmp.#e
12e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
12f0: 72 70 72 65 74 20 7a 41 72 67 20 61 73 20 61 6e  rpret zArg as an
1300: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20   integer value, 
1310: 70 6f 73 73 69 62 6c 79 20 77 69 74 68 20 73 75  possibly with su
1320: 66 66 69 78 65 73 2e 0a 2a 2f 0a 73 74 61 74 69  ffixes..*/.stati
1330: 63 20 69 6e 74 20 69 6e 74 65 67 65 72 56 61 6c  c int integerVal
1340: 75 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ue(const char *z
1350: 41 72 67 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  Arg){.  sqlite3_
1360: 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20 20 73  int64 v = 0;.  s
1370: 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
1380: 63 74 20 7b 20 63 68 61 72 20 2a 7a 53 75 66 66  ct { char *zSuff
1390: 69 78 3b 20 69 6e 74 20 69 4d 75 6c 74 3b 20 7d  ix; int iMult; }
13a0: 20 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20   aMult[] = {.   
13b0: 20 7b 20 22 4b 69 42 22 2c 20 31 30 32 34 20 7d   { "KiB", 1024 }
13c0: 2c 0a 20 20 20 20 7b 20 22 4d 69 42 22 2c 20 31  ,.    { "MiB", 1
13d0: 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20  024*1024 },.    
13e0: 7b 20 22 47 69 42 22 2c 20 31 30 32 34 2a 31 30  { "GiB", 1024*10
13f0: 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b  24*1024 },.    {
1400: 20 22 4b 42 22 2c 20 20 31 30 30 30 20 7d 2c 0a   "KB",  1000 },.
1410: 20 20 20 20 7b 20 22 4d 42 22 2c 20 20 31 30 30      { "MB",  100
1420: 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 47  0000 },.    { "G
1430: 42 22 2c 20 20 31 30 30 30 30 30 30 30 30 30 20  B",  1000000000 
1440: 7d 2c 0a 20 20 20 20 7b 20 22 4b 22 2c 20 20 20  },.    { "K",   
1450: 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4d  1000 },.    { "M
1460: 22 2c 20 20 20 31 30 30 30 30 30 30 20 7d 2c 0a  ",   1000000 },.
1470: 20 20 20 20 7b 20 22 47 22 2c 20 20 20 31 30 30      { "G",   100
1480: 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a  0000000 },.  };.
1490: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69    int i;.  int i
14a0: 73 4e 65 67 20 3d 20 30 3b 0a 20 20 69 66 28 20  sNeg = 0;.  if( 
14b0: 7a 41 72 67 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a  zArg[0]=='-' ){.
14c0: 20 20 20 20 69 73 4e 65 67 20 3d 20 31 3b 0a 20      isNeg = 1;. 
14d0: 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c     zArg++;.  }el
14e0: 73 65 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d  se if( zArg[0]==
14f0: 27 2b 27 20 29 7b 0a 20 20 20 20 7a 41 72 67 2b  '+' ){.    zArg+
1500: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 41 72  +;.  }.  if( zAr
1510: 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72  g[0]=='0' && zAr
1520: 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20  g[1]=='x' ){.   
1530: 20 69 6e 74 20 78 3b 0a 20 20 20 20 7a 41 72 67   int x;.    zArg
1540: 20 2b 3d 20 32 3b 0a 20 20 20 20 77 68 69 6c 65   += 2;.    while
1550: 28 20 28 78 20 3d 20 68 65 78 44 69 67 69 74 56  ( (x = hexDigitV
1560: 61 6c 75 65 28 7a 41 72 67 5b 30 5d 29 29 3e 3d  alue(zArg[0]))>=
1570: 30 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 28  0 ){.      v = (
1580: 76 3c 3c 34 29 20 2b 20 78 3b 0a 20 20 20 20 20  v<<4) + x;.     
1590: 20 7a 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20   zArg++;.    }. 
15a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68 69 6c   }else{.    whil
15b0: 65 28 20 69 73 64 69 67 69 74 28 7a 41 72 67 5b  e( isdigit(zArg[
15c0: 30 5d 29 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  0]) ){.      v =
15d0: 20 76 2a 31 30 20 2b 20 7a 41 72 67 5b 30 5d 20   v*10 + zArg[0] 
15e0: 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a 41 72  - '0';.      zAr
15f0: 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  g++;.    }.  }. 
1600: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65   for(i=0; i<size
1610: 6f 66 28 61 4d 75 6c 74 29 2f 73 69 7a 65 6f 66  of(aMult)/sizeof
1620: 28 61 4d 75 6c 74 5b 30 5d 29 3b 20 69 2b 2b 29  (aMult[0]); i++)
1630: 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
1640: 33 5f 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b  3_stricmp(aMult[
1650: 69 5d 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67  i].zSuffix, zArg
1660: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20  )==0 ){.      v 
1670: 2a 3d 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c  *= aMult[i].iMul
1680: 74 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  t;.      break;.
1690: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
16a0: 76 3e 30 78 37 66 66 66 66 66 66 66 20 29 20 66  v>0x7fffffff ) f
16b0: 61 74 61 6c 5f 65 72 72 6f 72 28 22 70 61 72 61  atal_error("para
16c0: 6d 65 74 65 72 20 74 6f 6f 20 6c 61 72 67 65 20  meter too large 
16d0: 2d 20 6d 61 78 20 32 31 34 37 34 38 33 36 34 38  - max 2147483648
16e0: 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 69 6e  ");.  return (in
16f0: 74 29 28 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76  t)(isNeg? -v : v
1700: 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  );.}../* Return 
1710: 74 68 65 20 63 75 72 72 65 6e 74 20 77 61 6c 6c  the current wall
1720: 2d 63 6c 6f 63 6b 20 74 69 6d 65 2c 20 69 6e 20  -clock time, in 
1730: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2a 2f 0a  milliseconds */.
1740: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 70  sqlite3_int64 sp
1750: 65 65 64 74 65 73 74 31 5f 74 69 6d 65 73 74 61  eedtest1_timesta
1760: 6d 70 28 76 6f 69 64 29 7b 0a 23 69 66 20 53 51  mp(void){.#if SQ
1770: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
1780: 42 45 52 3c 33 30 30 35 30 30 30 0a 20 20 72 65  BER<3005000.  re
1790: 74 75 72 6e 20 30 3b 0a 23 65 6c 73 65 0a 20 20  turn 0;.#else.  
17a0: 73 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f 76  static sqlite3_v
17b0: 66 73 20 2a 63 6c 6f 63 6b 56 66 73 20 3d 20 30  fs *clockVfs = 0
17c0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  ;.  sqlite3_int6
17d0: 34 20 74 3b 0a 20 20 69 66 28 20 63 6c 6f 63 6b  4 t;.  if( clock
17e0: 56 66 73 3d 3d 30 20 29 20 63 6c 6f 63 6b 56 66  Vfs==0 ) clockVf
17f0: 73 20 3d 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  s = sqlite3_vfs_
1800: 66 69 6e 64 28 30 29 3b 0a 23 69 66 20 53 51 4c  find(0);.#if SQL
1810: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
1820: 45 52 3e 3d 33 30 30 37 30 30 30 0a 20 20 69 66  ER>=3007000.  if
1830: 28 20 63 6c 6f 63 6b 56 66 73 2d 3e 69 56 65 72  ( clockVfs->iVer
1840: 73 69 6f 6e 3e 3d 32 20 26 26 20 63 6c 6f 63 6b  sion>=2 && clock
1850: 56 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d  Vfs->xCurrentTim
1860: 65 49 6e 74 36 34 21 3d 30 20 29 7b 0a 20 20 20  eInt64!=0 ){.   
1870: 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72   clockVfs->xCurr
1880: 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 63 6c 6f  entTimeInt64(clo
1890: 63 6b 56 66 73 2c 20 26 74 29 3b 0a 20 20 7d 65  ckVfs, &t);.  }e
18a0: 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20  lse.#endif.  {. 
18b0: 20 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20     double r;.   
18c0: 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72   clockVfs->xCurr
18d0: 65 6e 74 54 69 6d 65 28 63 6c 6f 63 6b 56 66 73  entTime(clockVfs
18e0: 2c 20 26 72 29 3b 0a 20 20 20 20 74 20 3d 20 28  , &r);.    t = (
18f0: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72  sqlite3_int64)(r
1900: 2a 38 36 34 30 30 30 30 30 2e 30 29 3b 0a 20 20  *86400000.0);.  
1910: 7d 0a 20 20 72 65 74 75 72 6e 20 74 3b 0a 23 65  }.  return t;.#e
1920: 6e 64 69 66 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72  ndif.}../* Retur
1930: 6e 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  n a pseudo-rando
1940: 6d 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  m unsigned integ
1950: 65 72 20 2a 2f 0a 75 6e 73 69 67 6e 65 64 20 69  er */.unsigned i
1960: 6e 74 20 73 70 65 65 64 74 65 73 74 31 5f 72 61  nt speedtest1_ra
1970: 6e 64 6f 6d 28 76 6f 69 64 29 7b 0a 20 20 67 2e  ndom(void){.  g.
1980: 78 20 3d 20 28 67 2e 78 3e 3e 31 29 20 5e 20 28  x = (g.x>>1) ^ (
1990: 28 31 2b 7e 28 67 2e 78 26 31 29 29 20 26 20 30  (1+~(g.x&1)) & 0
19a0: 78 64 30 30 30 30 30 30 31 29 3b 0a 20 20 67 2e  xd0000001);.  g.
19b0: 79 20 3d 20 67 2e 79 2a 31 31 30 33 35 31 35 32  y = g.y*11035152
19c0: 34 35 20 2b 20 31 32 33 34 35 3b 0a 20 20 72 65  45 + 12345;.  re
19d0: 74 75 72 6e 20 67 2e 78 20 5e 20 67 2e 79 3b 0a  turn g.x ^ g.y;.
19e0: 7d 0a 0a 2f 2a 20 4d 61 70 20 74 68 65 20 76 61  }../* Map the va
19f0: 6c 75 65 20 69 6e 20 77 69 74 68 69 6e 20 74 68  lue in within th
1a00: 65 20 72 61 6e 67 65 20 6f 66 20 31 2e 2e 2e 6c  e range of 1...l
1a10: 69 6d 69 74 20 69 6e 74 6f 20 61 6e 6f 74 68 65  imit into anothe
1a20: 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 69 6e 20 61  r.** number in a
1a30: 20 77 61 79 20 74 68 61 74 20 69 73 20 63 68 61   way that is cha
1a40: 74 69 63 20 61 6e 64 20 69 6e 76 65 72 74 61 62  tic and invertab
1a50: 6c 65 2e 0a 2a 2f 0a 75 6e 73 69 67 6e 65 64 20  le..*/.unsigned 
1a60: 73 77 69 7a 7a 6c 65 28 75 6e 73 69 67 6e 65 64  swizzle(unsigned
1a70: 20 69 6e 2c 20 75 6e 73 69 67 6e 65 64 20 6c 69   in, unsigned li
1a80: 6d 69 74 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64  mit){.  unsigned
1a90: 20 6f 75 74 20 3d 20 30 3b 0a 20 20 77 68 69 6c   out = 0;.  whil
1aa0: 65 28 20 6c 69 6d 69 74 20 29 7b 0a 20 20 20 20  e( limit ){.    
1ab0: 6f 75 74 20 3d 20 28 6f 75 74 3c 3c 31 29 20 7c  out = (out<<1) |
1ac0: 20 28 69 6e 26 31 29 3b 0a 20 20 20 20 69 6e 20   (in&1);.    in 
1ad0: 3e 3e 3d 20 31 3b 0a 20 20 20 20 6c 69 6d 69 74  >>= 1;.    limit
1ae0: 20 3e 3e 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65   >>= 1;.  }.  re
1af0: 74 75 72 6e 20 6f 75 74 3b 0a 7d 0a 0a 2f 2a 20  turn out;.}../* 
1b00: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
1b10: 72 20 73 6f 20 74 68 61 74 20 69 74 20 69 73 20  r so that it is 
1b20: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 6d  a power of two m
1b30: 69 6e 75 73 20 6f 6e 65 0a 2a 2f 0a 75 6e 73 69  inus one.*/.unsi
1b40: 67 6e 65 64 20 72 6f 75 6e 64 75 70 5f 61 6c 6c  gned roundup_all
1b50: 6f 6e 65 73 28 75 6e 73 69 67 6e 65 64 20 6c 69  ones(unsigned li
1b60: 6d 69 74 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64  mit){.  unsigned
1b70: 20 6d 20 3d 20 31 3b 0a 20 20 77 68 69 6c 65 28   m = 1;.  while(
1b80: 20 6d 3c 6c 69 6d 69 74 20 29 20 6d 20 3d 20 28   m<limit ) m = (
1b90: 6d 3c 3c 31 29 2b 31 3b 0a 20 20 72 65 74 75 72  m<<1)+1;.  retur
1ba0: 6e 20 6d 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73  n m;.}../* The s
1bb0: 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72  peedtest1_number
1bc0: 6e 61 6d 65 20 70 72 6f 63 65 64 75 72 65 20 62  name procedure b
1bd0: 65 6c 6f 77 20 63 6f 6e 76 65 72 74 73 20 69 74  elow converts it
1be0: 73 20 61 72 67 6d 65 6e 74 20 28 61 6e 20 69 6e  s argment (an in
1bf0: 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 61  teger).** into a
1c00: 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
1c10: 20 74 68 65 20 45 6e 67 6c 69 73 68 2d 6c 61 6e   the English-lan
1c20: 67 75 61 67 65 20 6e 61 6d 65 20 66 6f 72 20 74  guage name for t
1c30: 68 61 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 54  hat number..** T
1c40: 68 65 20 72 65 74 75 72 6e 65 64 20 73 74 72 69  he returned stri
1c50: 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65  ng should be fre
1c60: 65 64 20 77 69 74 68 20 73 71 6c 69 74 65 33 5f  ed with sqlite3_
1c70: 66 72 65 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 45 78  free()..**.** Ex
1c80: 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
1c90: 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62   speedtest1_numb
1ca0: 65 72 6e 61 6d 65 28 31 32 33 29 20 20 20 2d 3e  ername(123)   ->
1cb0: 20 20 22 6f 6e 65 20 68 75 6e 64 72 65 64 20 74    "one hundred t
1cc0: 77 65 6e 74 79 20 74 68 72 65 65 22 0a 2a 2f 0a  wenty three".*/.
1cd0: 69 6e 74 20 73 70 65 65 64 74 65 73 74 31 5f 6e  int speedtest1_n
1ce0: 75 6d 62 65 72 6e 61 6d 65 28 75 6e 73 69 67 6e  umbername(unsign
1cf0: 65 64 20 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a  ed int n, char *
1d00: 7a 4f 75 74 2c 20 69 6e 74 20 6e 4f 75 74 29 7b  zOut, int nOut){
1d10: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1d20: 63 68 61 72 20 2a 6f 6e 65 73 5b 5d 20 3d 20 7b  char *ones[] = {
1d30: 20 20 22 7a 65 72 6f 22 2c 20 22 6f 6e 65 22 2c    "zero", "one",
1d40: 20 22 74 77 6f 22 2c 20 22 74 68 72 65 65 22 2c   "two", "three",
1d50: 20 22 66 6f 75 72 22 2c 20 22 66 69 76 65 22 2c   "four", "five",
1d60: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1d70: 20 20 20 20 22 73 69 78 22 2c 20 22 73 65 76 65      "six", "seve
1d80: 6e 22 2c 20 22 65 69 67 68 74 22 2c 20 22 6e 69  n", "eight", "ni
1d90: 6e 65 22 2c 20 22 74 65 6e 22 2c 20 22 65 6c 65  ne", "ten", "ele
1da0: 76 65 6e 22 2c 20 22 74 77 65 6c 76 65 22 2c 20  ven", "twelve", 
1db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc0: 20 20 20 22 74 68 69 72 74 65 65 6e 22 2c 20 22     "thirteen", "
1dd0: 66 6f 75 72 74 65 65 6e 22 2c 20 22 66 69 66 74  fourteen", "fift
1de0: 65 65 6e 22 2c 20 22 73 69 78 74 65 65 6e 22 2c  een", "sixteen",
1df0: 20 22 73 65 76 65 6e 74 65 65 6e 22 2c 0a 20 20   "seventeen",.  
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e10: 22 65 69 67 68 74 65 65 6e 22 2c 20 22 6e 69 6e  "eighteen", "nin
1e20: 65 74 65 65 6e 22 20 7d 3b 0a 20 20 73 74 61 74  eteen" };.  stat
1e30: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 74  ic const char *t
1e40: 65 6e 73 5b 5d 20 3d 20 7b 20 22 22 2c 20 22 74  ens[] = { "", "t
1e50: 65 6e 22 2c 20 22 74 77 65 6e 74 79 22 2c 20 22  en", "twenty", "
1e60: 74 68 69 72 74 79 22 2c 20 22 66 6f 72 74 79 22  thirty", "forty"
1e70: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e80: 20 20 20 22 66 69 66 74 79 22 2c 20 22 73 69 78     "fifty", "six
1e90: 74 79 22 2c 20 22 73 65 76 65 6e 74 79 22 2c 20  ty", "seventy", 
1ea0: 22 65 69 67 68 74 79 22 2c 20 22 6e 69 6e 65 74  "eighty", "ninet
1eb0: 79 22 20 7d 3b 0a 20 20 69 6e 74 20 69 20 3d 20  y" };.  int i = 
1ec0: 30 3b 0a 0a 20 20 69 66 28 20 6e 3e 3d 31 30 30  0;..  if( n>=100
1ed0: 30 30 30 30 30 30 30 20 29 7b 0a 20 20 20 20 69  0000000 ){.    i
1ee0: 20 2b 3d 20 73 70 65 65 64 74 65 73 74 31 5f 6e   += speedtest1_n
1ef0: 75 6d 62 65 72 6e 61 6d 65 28 6e 2f 31 30 30 30  umbername(n/1000
1f00: 30 30 30 30 30 30 2c 20 7a 4f 75 74 2b 69 2c 20  000000, zOut+i, 
1f10: 6e 4f 75 74 2d 69 29 3b 0a 20 20 20 20 73 71 6c  nOut-i);.    sql
1f20: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f  ite3_snprintf(nO
1f30: 75 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 20  ut-i, zOut+i, " 
1f40: 62 69 6c 6c 69 6f 6e 22 29 3b 0a 20 20 20 20 69  billion");.    i
1f50: 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28   += (int)strlen(
1f60: 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20 3d  zOut+i);.    n =
1f70: 20 6e 20 25 20 31 30 30 30 30 30 30 30 30 30 3b   n % 1000000000;
1f80: 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3e 3d 31 30  .  }.  if( n>=10
1f90: 30 30 30 30 30 20 29 7b 0a 20 20 20 20 69 66 28  00000 ){.    if(
1fa0: 20 69 20 26 26 20 69 3c 6e 4f 75 74 2d 31 20 29   i && i<nOut-1 )
1fb0: 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27 20 27   zOut[i++] = ' '
1fc0: 3b 0a 20 20 20 20 69 20 2b 3d 20 73 70 65 65 64  ;.    i += speed
1fd0: 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65  test1_numbername
1fe0: 28 6e 2f 31 30 30 30 30 30 30 2c 20 7a 4f 75 74  (n/1000000, zOut
1ff0: 2b 69 2c 20 6e 4f 75 74 2d 69 29 3b 0a 20 20 20  +i, nOut-i);.   
2000: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2010: 66 28 6e 4f 75 74 2d 69 2c 20 7a 4f 75 74 2b 69  f(nOut-i, zOut+i
2020: 2c 20 22 20 6d 69 6c 6c 69 6f 6e 22 29 3b 0a 20  , " million");. 
2030: 20 20 20 69 20 2b 3d 20 28 69 6e 74 29 73 74 72     i += (int)str
2040: 6c 65 6e 28 7a 4f 75 74 2b 69 29 3b 0a 20 20 20  len(zOut+i);.   
2050: 20 6e 20 3d 20 6e 20 25 20 31 30 30 30 30 30 30   n = n % 1000000
2060: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3e 3d 31  ;.  }.  if( n>=1
2070: 30 30 30 20 29 7b 0a 20 20 20 20 69 66 28 20 69  000 ){.    if( i
2080: 20 26 26 20 69 3c 6e 4f 75 74 2d 31 20 29 20 7a   && i<nOut-1 ) z
2090: 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27 20 27 3b 0a  Out[i++] = ' ';.
20a0: 20 20 20 20 69 20 2b 3d 20 73 70 65 65 64 74 65      i += speedte
20b0: 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6e  st1_numbername(n
20c0: 2f 31 30 30 30 2c 20 7a 4f 75 74 2b 69 2c 20 6e  /1000, zOut+i, n
20d0: 4f 75 74 2d 69 29 3b 0a 20 20 20 20 73 71 6c 69  Out-i);.    sqli
20e0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75  te3_snprintf(nOu
20f0: 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 20 74  t-i, zOut+i, " t
2100: 68 6f 75 73 61 6e 64 22 29 3b 0a 20 20 20 20 69  housand");.    i
2110: 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28   += (int)strlen(
2120: 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20 3d  zOut+i);.    n =
2130: 20 6e 20 25 20 31 30 30 30 3b 0a 20 20 7d 0a 20   n % 1000;.  }. 
2140: 20 69 66 28 20 6e 3e 3d 31 30 30 20 29 7b 0a 20   if( n>=100 ){. 
2150: 20 20 20 69 66 28 20 69 20 26 26 20 69 3c 6e 4f     if( i && i<nO
2160: 75 74 2d 31 20 29 20 7a 4f 75 74 5b 69 2b 2b 5d  ut-1 ) zOut[i++]
2170: 20 3d 20 27 20 27 3b 0a 20 20 20 20 73 71 6c 69   = ' ';.    sqli
2180: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75  te3_snprintf(nOu
2190: 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 25 73  t-i, zOut+i, "%s
21a0: 20 68 75 6e 64 72 65 64 22 2c 20 6f 6e 65 73 5b   hundred", ones[
21b0: 6e 2f 31 30 30 5d 29 3b 0a 20 20 20 20 69 20 2b  n/100]);.    i +
21c0: 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f  = (int)strlen(zO
21d0: 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20 3d 20 6e  ut+i);.    n = n
21e0: 20 25 20 31 30 30 3b 0a 20 20 7d 0a 20 20 69 66   % 100;.  }.  if
21f0: 28 20 6e 3e 3d 32 30 20 29 7b 0a 20 20 20 20 69  ( n>=20 ){.    i
2200: 66 28 20 69 20 26 26 20 69 3c 6e 4f 75 74 2d 31  f( i && i<nOut-1
2210: 20 29 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27   ) zOut[i++] = '
2220: 20 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ';.    sqlite3_
2230: 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74 2d 69 2c  snprintf(nOut-i,
2240: 20 7a 4f 75 74 2b 69 2c 20 22 25 73 22 2c 20 74   zOut+i, "%s", t
2250: 65 6e 73 5b 6e 2f 31 30 5d 29 3b 0a 20 20 20 20  ens[n/10]);.    
2260: 69 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e  i += (int)strlen
2270: 28 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20  (zOut+i);.    n 
2280: 3d 20 6e 20 25 20 31 30 3b 0a 20 20 7d 0a 20 20  = n % 10;.  }.  
2290: 69 66 28 20 6e 3e 30 20 29 7b 0a 20 20 20 20 69  if( n>0 ){.    i
22a0: 66 28 20 69 20 26 26 20 69 3c 6e 4f 75 74 2d 31  f( i && i<nOut-1
22b0: 20 29 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27   ) zOut[i++] = '
22c0: 20 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ';.    sqlite3_
22d0: 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74 2d 69 2c  snprintf(nOut-i,
22e0: 20 7a 4f 75 74 2b 69 2c 20 22 25 73 22 2c 20 6f   zOut+i, "%s", o
22f0: 6e 65 73 5b 6e 5d 29 3b 0a 20 20 20 20 69 20 2b  nes[n]);.    i +
2300: 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f  = (int)strlen(zO
2310: 75 74 2b 69 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ut+i);.  }.  if(
2320: 20 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c   i==0 ){.    sql
2330: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f  ite3_snprintf(nO
2340: 75 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 7a  ut-i, zOut+i, "z
2350: 65 72 6f 22 29 3b 0a 20 20 20 20 69 20 2b 3d 20  ero");.    i += 
2360: 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f 75 74  (int)strlen(zOut
2370: 2b 69 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  +i);.  }.  retur
2380: 6e 20 69 3b 0a 7d 0a 0a 0a 2f 2a 20 53 74 61 72  n i;.}.../* Star
2390: 74 20 61 20 6e 65 77 20 74 65 73 74 20 63 61 73  t a new test cas
23a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 41 4d  e */.#define NAM
23b0: 45 57 49 44 54 48 20 36 30 0a 73 74 61 74 69 63  EWIDTH 60.static
23c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 44 6f 74   const char zDot
23d0: 73 5b 5d 20 3d 0a 20 20 22 2e 2e 2e 2e 2e 2e 2e  s[] =.  ".......
23e0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
23f0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2400: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2410: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
2420: 22 3b 0a 76 6f 69 64 20 73 70 65 65 64 74 65 73  ";.void speedtes
2430: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 69 6e  t1_begin_test(in
2440: 74 20 69 54 65 73 74 4e 75 6d 2c 20 63 6f 6e 73  t iTestNum, cons
2450: 74 20 63 68 61 72 20 2a 7a 54 65 73 74 4e 61 6d  t char *zTestNam
2460: 65 2c 20 2e 2e 2e 29 7b 0a 20 20 69 6e 74 20 6e  e, ...){.  int n
2470: 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
2480: 54 65 73 74 4e 61 6d 65 29 3b 0a 20 20 63 68 61  TestName);.  cha
2490: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 76 61 5f 6c  r *zName;.  va_l
24a0: 69 73 74 20 61 70 3b 0a 20 20 76 61 5f 73 74 61  ist ap;.  va_sta
24b0: 72 74 28 61 70 2c 20 7a 54 65 73 74 4e 61 6d 65  rt(ap, zTestName
24c0: 29 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 73 71 6c  );.  zName = sql
24d0: 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 54  ite3_vmprintf(zT
24e0: 65 73 74 4e 61 6d 65 2c 20 61 70 29 3b 0a 20 20  estName, ap);.  
24f0: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 6e 20  va_end(ap);.  n 
2500: 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4e  = (int)strlen(zN
2510: 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 3e 4e 41  ame);.  if( n>NA
2520: 4d 45 57 49 44 54 48 20 29 7b 0a 20 20 20 20 7a  MEWIDTH ){.    z
2530: 4e 61 6d 65 5b 4e 41 4d 45 57 49 44 54 48 5d 20  Name[NAMEWIDTH] 
2540: 3d 20 30 3b 0a 20 20 20 20 6e 20 3d 20 4e 41 4d  = 0;.    n = NAM
2550: 45 57 49 44 54 48 3b 0a 20 20 7d 0a 20 20 69 66  EWIDTH;.  }.  if
2560: 28 20 67 2e 62 53 71 6c 4f 6e 6c 79 20 29 7b 0a  ( g.bSqlOnly ){.
2570: 20 20 20 20 70 72 69 6e 74 66 28 22 2f 2a 20 25      printf("/* %
2580: 34 64 20 2d 20 25 73 25 2e 2a 73 20 2a 2f 5c 6e  4d - %s%.*s */\n
2590: 22 2c 20 69 54 65 73 74 4e 75 6d 2c 20 7a 4e 61  ", iTestNum, zNa
25a0: 6d 65 2c 20 4e 41 4d 45 57 49 44 54 48 2d 6e 2c  me, NAMEWIDTH-n,
25b0: 20 7a 44 6f 74 73 29 3b 0a 20 20 7d 65 6c 73 65   zDots);.  }else
25c0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 34  {.    printf("%4
25d0: 64 20 2d 20 25 73 25 2e 2a 73 20 22 2c 20 69 54  d - %s%.*s ", iT
25e0: 65 73 74 4e 75 6d 2c 20 7a 4e 61 6d 65 2c 20 4e  estNum, zName, N
25f0: 41 4d 45 57 49 44 54 48 2d 6e 2c 20 7a 44 6f 74  AMEWIDTH-n, zDot
2600: 73 29 3b 0a 20 20 20 20 66 66 6c 75 73 68 28 73  s);.    fflush(s
2610: 74 64 6f 75 74 29 3b 0a 20 20 7d 0a 20 20 73 71  tdout);.  }.  sq
2620: 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e 61 6d 65  lite3_free(zName
2630: 29 3b 0a 20 20 67 2e 6e 52 65 73 75 6c 74 20 3d  );.  g.nResult =
2640: 20 30 3b 0a 20 20 67 2e 69 53 74 61 72 74 20 3d   0;.  g.iStart =
2650: 20 73 70 65 65 64 74 65 73 74 31 5f 74 69 6d 65   speedtest1_time
2660: 73 74 61 6d 70 28 29 3b 0a 20 20 67 2e 78 20 3d  stamp();.  g.x =
2670: 20 30 78 61 64 31 33 31 64 30 62 3b 0a 20 20 67   0xad131d0b;.  g
2680: 2e 79 20 3d 20 30 78 34 34 66 39 65 61 63 38 3b  .y = 0x44f9eac8;
2690: 0a 7d 0a 0a 2f 2a 20 43 6f 6d 70 6c 65 74 65 20  .}../* Complete 
26a0: 61 20 74 65 73 74 20 63 61 73 65 20 2a 2f 0a 76  a test case */.v
26b0: 6f 69 64 20 73 70 65 65 64 74 65 73 74 31 5f 65  oid speedtest1_e
26c0: 6e 64 5f 74 65 73 74 28 76 6f 69 64 29 7b 0a 20  nd_test(void){. 
26d0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69   sqlite3_int64 i
26e0: 45 6c 61 70 73 65 54 69 6d 65 20 3d 20 73 70 65  ElapseTime = spe
26f0: 65 64 74 65 73 74 31 5f 74 69 6d 65 73 74 61 6d  edtest1_timestam
2700: 70 28 29 20 2d 20 67 2e 69 53 74 61 72 74 3b 0a  p() - g.iStart;.
2710: 20 20 69 66 28 20 21 67 2e 62 53 71 6c 4f 6e 6c    if( !g.bSqlOnl
2720: 79 20 29 7b 0a 20 20 20 20 67 2e 69 54 6f 74 61  y ){.    g.iTota
2730: 6c 20 2b 3d 20 69 45 6c 61 70 73 65 54 69 6d 65  l += iElapseTime
2740: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 34  ;.    printf("%4
2750: 64 2e 25 30 33 64 73 5c 6e 22 2c 20 28 69 6e 74  d.%03ds\n", (int
2760: 29 28 69 45 6c 61 70 73 65 54 69 6d 65 2f 31 30  )(iElapseTime/10
2770: 30 30 29 2c 20 28 69 6e 74 29 28 69 45 6c 61 70  00), (int)(iElap
2780: 73 65 54 69 6d 65 25 31 30 30 30 29 29 3b 0a 20  seTime%1000));. 
2790: 20 7d 0a 20 20 69 66 28 20 67 2e 70 53 74 6d 74   }.  if( g.pStmt
27a0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
27b0: 66 69 6e 61 6c 69 7a 65 28 67 2e 70 53 74 6d 74  finalize(g.pStmt
27c0: 29 3b 0a 20 20 20 20 67 2e 70 53 74 6d 74 20 3d  );.    g.pStmt =
27d0: 20 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65   0;.  }.}../* Re
27e0: 70 6f 72 74 20 65 6e 64 20 6f 66 20 74 65 73 74  port end of test
27f0: 69 6e 67 20 2a 2f 0a 76 6f 69 64 20 73 70 65 65  ing */.void spee
2800: 64 74 65 73 74 31 5f 66 69 6e 61 6c 28 76 6f 69  dtest1_final(voi
2810: 64 29 7b 0a 20 20 69 66 28 20 21 67 2e 62 53 71  d){.  if( !g.bSq
2820: 6c 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 70 72 69  lOnly ){.    pri
2830: 6e 74 66 28 22 20 20 20 20 20 20 20 54 4f 54 41  ntf("       TOTA
2840: 4c 25 2e 2a 73 20 25 34 64 2e 25 30 33 64 73 5c  L%.*s %4d.%03ds\
2850: 6e 22 2c 20 4e 41 4d 45 57 49 44 54 48 2d 35 2c  n", NAMEWIDTH-5,
2860: 20 7a 44 6f 74 73 2c 0a 20 20 20 20 20 20 20 20   zDots,.        
2870: 20 20 20 28 69 6e 74 29 28 67 2e 69 54 6f 74 61     (int)(g.iTota
2880: 6c 2f 31 30 30 30 29 2c 20 28 69 6e 74 29 28 67  l/1000), (int)(g
2890: 2e 69 54 6f 74 61 6c 25 31 30 30 30 29 29 3b 0a  .iTotal%1000));.
28a0: 20 20 7d 0a 7d 0a 0a 2f 2a 20 50 72 69 6e 74 20    }.}../* Print 
28b0: 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
28c0: 20 74 6f 20 73 74 61 6e 64 61 72 64 20 6f 75 74   to standard out
28d0: 70 75 74 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f  put */.static vo
28e0: 69 64 20 70 72 69 6e 74 53 71 6c 28 63 6f 6e 73  id printSql(cons
28f0: 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a 20  t char *zSql){. 
2900: 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74   int n = (int)st
2910: 72 6c 65 6e 28 7a 53 71 6c 29 3b 0a 20 20 77 68  rlen(zSql);.  wh
2920: 69 6c 65 28 20 6e 3e 30 20 26 26 20 28 7a 53 71  ile( n>0 && (zSq
2930: 6c 5b 6e 2d 31 5d 3d 3d 27 3b 27 20 7c 7c 20 49  l[n-1]==';' || I
2940: 53 53 50 41 43 45 28 7a 53 71 6c 5b 6e 2d 31 5d  SSPACE(zSql[n-1]
2950: 29 29 20 29 7b 20 6e 2d 2d 3b 20 7d 0a 20 20 69  )) ){ n--; }.  i
2960: 66 28 20 67 2e 62 45 78 70 6c 61 69 6e 20 29 20  f( g.bExplain ) 
2970: 70 72 69 6e 74 66 28 22 45 58 50 4c 41 49 4e 20  printf("EXPLAIN 
2980: 22 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 25 2e  ");.  printf("%.
2990: 2a 73 3b 5c 6e 22 2c 20 6e 2c 20 7a 53 71 6c 29  *s;\n", n, zSql)
29a0: 3b 0a 20 20 69 66 28 20 67 2e 62 45 78 70 6c 61  ;.  if( g.bExpla
29b0: 69 6e 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  in.#if SQLITE_VE
29c0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30  RSION_NUMBER>=30
29d0: 30 37 30 31 37 20 0a 20 20 20 26 26 20 28 20 73  07017 .   && ( s
29e0: 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 22  qlite3_strglob("
29f0: 43 52 45 41 54 45 20 2a 22 2c 20 7a 53 71 6c 29  CREATE *", zSql)
2a00: 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 71 6c 69  ==0.     || sqli
2a10: 74 65 33 5f 73 74 72 67 6c 6f 62 28 22 44 52 4f  te3_strglob("DRO
2a20: 50 20 2a 22 2c 20 7a 53 71 6c 29 3d 3d 30 0a 20  P *", zSql)==0. 
2a30: 20 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73      || sqlite3_s
2a40: 74 72 67 6c 6f 62 28 22 41 4c 54 45 52 20 2a 22  trglob("ALTER *"
2a50: 2c 20 7a 53 71 6c 29 3d 3d 30 0a 20 20 20 20 20  , zSql)==0.     
2a60: 20 29 0a 23 65 6e 64 69 66 0a 20 20 29 7b 0a 20   ).#endif.  ){. 
2a70: 20 20 20 70 72 69 6e 74 66 28 22 25 2e 2a 73 3b     printf("%.*s;
2a80: 5c 6e 22 2c 20 6e 2c 20 7a 53 71 6c 29 3b 0a 20  \n", n, zSql);. 
2a90: 20 7d 0a 7d 0a 0a 2f 2a 20 53 68 72 69 6e 6b 20   }.}../* Shrink 
2aa0: 6d 65 6d 6f 72 79 20 75 73 65 64 2c 20 69 66 20  memory used, if 
2ab0: 61 70 70 72 6f 70 72 69 61 74 65 20 61 6e 64 20  appropriate and 
2ac0: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65  if the SQLite ve
2ad0: 72 73 69 6f 6e 20 69 73 20 63 61 70 61 62 6c 65  rsion is capable
2ae0: 0a 2a 2a 20 6f 66 20 64 6f 69 6e 67 20 73 6f 2e  .** of doing so.
2af0: 0a 2a 2f 0a 76 6f 69 64 20 73 70 65 65 64 74 65  .*/.void speedte
2b00: 73 74 31 5f 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  st1_shrink_memor
2b10: 79 28 76 6f 69 64 29 7b 0a 23 69 66 20 53 51 4c  y(void){.#if SQL
2b20: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
2b30: 45 52 3e 3d 33 30 30 37 30 31 30 0a 20 20 69 66  ER>=3007010.  if
2b40: 28 20 67 2e 62 4d 65 6d 53 68 72 69 6e 6b 20 29  ( g.bMemShrink )
2b50: 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65   sqlite3_db_rele
2b60: 61 73 65 5f 6d 65 6d 6f 72 79 28 67 2e 64 62 29  ase_memory(g.db)
2b70: 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 20 52  ;.#endif.}../* R
2b80: 75 6e 20 53 51 4c 20 2a 2f 0a 76 6f 69 64 20 73  un SQL */.void s
2b90: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 63  peedtest1_exec(c
2ba0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
2bb0: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  at, ...){.  va_l
2bc0: 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a  ist ap;.  char *
2bd0: 7a 53 71 6c 3b 0a 20 20 76 61 5f 73 74 61 72 74  zSql;.  va_start
2be0: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20  (ap, zFormat);. 
2bf0: 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
2c00: 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74  vmprintf(zFormat
2c10: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
2c20: 61 70 29 3b 0a 20 20 69 66 28 20 67 2e 62 53 71  ap);.  if( g.bSq
2c30: 6c 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 70 72 69  lOnly ){.    pri
2c40: 6e 74 53 71 6c 28 7a 53 71 6c 29 3b 0a 20 20 7d  ntSql(zSql);.  }
2c50: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 2a  else{.    char *
2c60: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2c70: 20 69 6e 74 20 72 63 20 3d 20 73 71 6c 69 74 65   int rc = sqlite
2c80: 33 5f 65 78 65 63 28 67 2e 64 62 2c 20 7a 53 71  3_exec(g.db, zSq
2c90: 6c 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73  l, 0, 0, &zErrMs
2ca0: 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72  g);.    if( zErr
2cb0: 4d 73 67 20 29 20 66 61 74 61 6c 5f 65 72 72 6f  Msg ) fatal_erro
2cc0: 72 28 22 53 51 4c 20 65 72 72 6f 72 3a 20 25 73  r("SQL error: %s
2cd0: 5c 6e 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  \n%s\n", zErrMsg
2ce0: 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28  , zSql);.    if(
2cf0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
2d00: 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 65 78   fatal_error("ex
2d10: 65 63 20 65 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  ec error: %s\n",
2d20: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
2d30: 67 2e 64 62 29 29 3b 0a 20 20 7d 0a 20 20 73 71  g.db));.  }.  sq
2d40: 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29  lite3_free(zSql)
2d50: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 73  ;.  speedtest1_s
2d60: 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 28 29 3b 0a  hrink_memory();.
2d70: 7d 0a 0a 2f 2a 20 50 72 65 70 61 72 65 20 61 6e  }../* Prepare an
2d80: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 2a   SQL statement *
2d90: 2f 0a 76 6f 69 64 20 73 70 65 65 64 74 65 73 74  /.void speedtest
2da0: 31 5f 70 72 65 70 61 72 65 28 63 6f 6e 73 74 20  1_prepare(const 
2db0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
2dc0: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
2dd0: 70 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  p;.  char *zSql;
2de0: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
2df0: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 53 71 6c  zFormat);.  zSql
2e00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69   = sqlite3_vmpri
2e10: 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29  ntf(zFormat, ap)
2e20: 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  ;.  va_end(ap);.
2e30: 20 20 69 66 28 20 67 2e 62 53 71 6c 4f 6e 6c 79    if( g.bSqlOnly
2e40: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 53 71 6c   ){.    printSql
2e50: 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  (zSql);.  }else{
2e60: 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20  .    int rc;.   
2e70: 20 69 66 28 20 67 2e 70 53 74 6d 74 20 29 20 73   if( g.pStmt ) s
2e80: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
2e90: 67 2e 70 53 74 6d 74 29 3b 0a 20 20 20 20 72 63  g.pStmt);.    rc
2ea0: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
2eb0: 72 65 5f 76 32 28 67 2e 64 62 2c 20 7a 53 71 6c  re_v2(g.db, zSql
2ec0: 2c 20 2d 31 2c 20 26 67 2e 70 53 74 6d 74 2c 20  , -1, &g.pStmt, 
2ed0: 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  0);.    if( rc )
2ee0: 7b 0a 20 20 20 20 20 20 66 61 74 61 6c 5f 65 72  {.      fatal_er
2ef0: 72 6f 72 28 22 53 51 4c 20 65 72 72 6f 72 3a 20  ror("SQL error: 
2f00: 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
2f10: 72 72 6d 73 67 28 67 2e 64 62 29 29 3b 0a 20 20  rrmsg(g.db));.  
2f20: 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
2f30: 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 7d 0a  3_free(zSql);.}.
2f40: 0a 2f 2a 20 52 75 6e 20 61 6e 20 53 51 4c 20 73  ./* Run an SQL s
2f50: 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  tatement previou
2f60: 73 6c 79 20 70 72 65 70 61 72 65 64 20 2a 2f 0a  sly prepared */.
2f70: 76 6f 69 64 20 73 70 65 65 64 74 65 73 74 31 5f  void speedtest1_
2f80: 72 75 6e 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74  run(void){.  int
2f90: 20 69 2c 20 6e 2c 20 6c 65 6e 3b 0a 20 20 69 66   i, n, len;.  if
2fa0: 28 20 67 2e 62 53 71 6c 4f 6e 6c 79 20 29 20 72  ( g.bSqlOnly ) r
2fb0: 65 74 75 72 6e 3b 0a 20 20 61 73 73 65 72 74 28  eturn;.  assert(
2fc0: 20 67 2e 70 53 74 6d 74 20 29 3b 0a 20 20 67 2e   g.pStmt );.  g.
2fd0: 6e 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 77  nResult = 0;.  w
2fe0: 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
2ff0: 65 70 28 67 2e 70 53 74 6d 74 29 3d 3d 53 51 4c  ep(g.pStmt)==SQL
3000: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 6e  ITE_ROW ){.    n
3010: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
3020: 6e 5f 63 6f 75 6e 74 28 67 2e 70 53 74 6d 74 29  n_count(g.pStmt)
3030: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
3040: 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  <n; i++){.      
3050: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
3060: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
3070: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3080: 28 67 2e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  (g.pStmt, i);.  
3090: 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 7a      if( z==0 ) z
30a0: 20 3d 20 22 6e 69 6c 22 3b 0a 20 20 20 20 20 20   = "nil";.      
30b0: 6c 65 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  len = (int)strle
30c0: 6e 28 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20  n(z);.      if( 
30d0: 67 2e 6e 52 65 73 75 6c 74 2b 6c 65 6e 3c 73 69  g.nResult+len<si
30e0: 7a 65 6f 66 28 67 2e 7a 52 65 73 75 6c 74 29 2d  zeof(g.zResult)-
30f0: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  2 ){.        if(
3100: 20 67 2e 6e 52 65 73 75 6c 74 3e 30 20 29 20 67   g.nResult>0 ) g
3110: 2e 7a 52 65 73 75 6c 74 5b 67 2e 6e 52 65 73 75  .zResult[g.nResu
3120: 6c 74 2b 2b 5d 20 3d 20 27 20 27 3b 0a 20 20 20  lt++] = ' ';.   
3130: 20 20 20 20 20 6d 65 6d 63 70 79 28 67 2e 7a 52       memcpy(g.zR
3140: 65 73 75 6c 74 20 2b 20 67 2e 6e 52 65 73 75 6c  esult + g.nResul
3150: 74 2c 20 7a 2c 20 6c 65 6e 2b 31 29 3b 0a 20 20  t, z, len+1);.  
3160: 20 20 20 20 20 20 67 2e 6e 52 65 73 75 6c 74 20        g.nResult 
3170: 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20 7d 0a  += len;.      }.
3180: 20 20 20 20 7d 0a 20 20 7d 0a 23 69 66 20 53 51      }.  }.#if SQ
3190: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
31a0: 42 45 52 3e 3d 33 30 30 36 30 30 31 0a 20 20 69  BER>=3006001.  i
31b0: 66 28 20 67 2e 62 52 65 70 72 65 70 61 72 65 20  f( g.bReprepare 
31c0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
31d0: 74 6d 74 20 2a 70 4e 65 77 3b 0a 20 20 20 20 73  tmt *pNew;.    s
31e0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
31f0: 32 28 67 2e 64 62 2c 20 73 71 6c 69 74 65 33 5f  2(g.db, sqlite3_
3200: 73 71 6c 28 67 2e 70 53 74 6d 74 29 2c 20 2d 31  sql(g.pStmt), -1
3210: 2c 20 26 70 4e 65 77 2c 20 30 29 3b 0a 20 20 20  , &pNew, 0);.   
3220: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
3230: 65 28 67 2e 70 53 74 6d 74 29 3b 0a 20 20 20 20  e(g.pStmt);.    
3240: 67 2e 70 53 74 6d 74 20 3d 20 70 4e 65 77 3b 0a  g.pStmt = pNew;.
3250: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20    }else.#endif. 
3260: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72   {.    sqlite3_r
3270: 65 73 65 74 28 67 2e 70 53 74 6d 74 29 3b 0a 20  eset(g.pStmt);. 
3280: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
3290: 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 28 29 3b  shrink_memory();
32a0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
32b0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
32c0: 45 44 0a 2f 2a 20 54 68 65 20 73 71 6c 69 74 65  ED./* The sqlite
32d0: 33 5f 74 72 61 63 65 28 29 20 63 61 6c 6c 62 61  3_trace() callba
32e0: 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 73  ck function */.s
32f0: 74 61 74 69 63 20 76 6f 69 64 20 74 72 61 63 65  tatic void trace
3300: 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 4e  Callback(void *N
3310: 6f 74 55 73 65 64 2c 20 63 6f 6e 73 74 20 63 68  otUsed, const ch
3320: 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 69 6e 74  ar *zSql){.  int
3330: 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e   n = (int)strlen
3340: 28 7a 53 71 6c 29 3b 0a 20 20 77 68 69 6c 65 28  (zSql);.  while(
3350: 20 6e 3e 30 20 26 26 20 28 7a 53 71 6c 5b 6e 2d   n>0 && (zSql[n-
3360: 31 5d 3d 3d 27 3b 27 20 7c 7c 20 49 53 53 50 41  1]==';' || ISSPA
3370: 43 45 28 7a 53 71 6c 5b 6e 2d 31 5d 29 29 20 29  CE(zSql[n-1])) )
3380: 20 6e 2d 2d 3b 0a 20 20 66 70 72 69 6e 74 66 28   n--;.  fprintf(
3390: 73 74 64 65 72 72 2c 22 25 2e 2a 73 3b 5c 6e 22  stderr,"%.*s;\n"
33a0: 2c 20 6e 2c 20 7a 53 71 6c 29 3b 0a 7d 0a 23 65  , n, zSql);.}.#e
33b0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
33c0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
33d0: 2f 0a 0a 2f 2a 20 53 75 62 73 74 69 74 75 74 65  /../* Substitute
33e0: 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69   random() functi
33f0: 6f 6e 20 74 68 61 74 20 67 69 76 65 73 20 74 68  on that gives th
3400: 65 20 73 61 6d 65 20 72 61 6e 64 6f 6d 0a 2a 2a  e same random.**
3410: 20 73 65 71 75 65 6e 63 65 20 6f 6e 20 65 61 63   sequence on eac
3420: 68 20 72 75 6e 2c 20 66 6f 72 20 72 65 70 65 61  h run, for repea
3430: 74 61 62 69 6c 69 74 79 2e 20 2a 2f 0a 73 74 61  tability. */.sta
3440: 74 69 63 20 76 6f 69 64 20 72 61 6e 64 6f 6d 46  tic void randomF
3450: 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  unc(.  sqlite3_c
3460: 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
3470: 0a 20 20 69 6e 74 20 4e 6f 74 55 73 65 64 2c 0a  .  int NotUsed,.
3480: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3490: 2a 2a 4e 6f 74 55 73 65 64 32 0a 29 7b 0a 20 20  **NotUsed2.){.  
34a0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
34b0: 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 28 73  nt64(context, (s
34c0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 73 70 65  qlite3_int64)spe
34d0: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
34e0: 29 3b 0a 7d 0a 0a 2f 2a 20 45 73 74 69 6d 61 74  );.}../* Estimat
34f0: 65 20 74 68 65 20 73 71 75 61 72 65 20 72 6f 6f  e the square roo
3500: 74 20 6f 66 20 61 6e 20 69 6e 74 65 67 65 72 20  t of an integer 
3510: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 73  */.static int es
3520: 74 5f 73 71 75 61 72 65 5f 72 6f 6f 74 28 69 6e  t_square_root(in
3530: 74 20 78 29 7b 0a 20 20 69 6e 74 20 79 30 20 3d  t x){.  int y0 =
3540: 20 78 2f 32 3b 0a 20 20 69 6e 74 20 79 31 3b 0a   x/2;.  int y1;.
3550: 20 20 69 6e 74 20 6e 3b 0a 20 20 66 6f 72 28 6e    int n;.  for(n
3560: 3d 30 3b 20 79 30 3e 30 20 26 26 20 6e 3c 31 30  =0; y0>0 && n<10
3570: 3b 20 6e 2b 2b 29 7b 0a 20 20 20 20 79 31 20 3d  ; n++){.    y1 =
3580: 20 28 79 30 20 2b 20 78 2f 79 30 29 2f 32 3b 0a   (y0 + x/y0)/2;.
3590: 20 20 20 20 69 66 28 20 79 31 3d 3d 79 30 20 29      if( y1==y0 )
35a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 79 30 20 3d   break;.    y0 =
35b0: 20 79 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   y1;.  }.  retur
35c0: 6e 20 79 30 3b 0a 7d 0a 0a 0a 23 69 66 20 53 51  n y0;.}...#if SQ
35d0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
35e0: 42 45 52 3c 33 30 30 35 30 30 34 0a 2f 2a 0a 2a  BER<3005004./*.*
35f0: 2a 20 41 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  * An implementat
3600: 69 6f 6e 20 6f 66 20 67 72 6f 75 70 5f 63 6f 6e  ion of group_con
3610: 63 61 74 28 29 2e 20 20 55 73 65 64 20 6f 6e 6c  cat().  Used onl
3620: 79 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 6f  y when testing o
3630: 6c 64 65 72 0a 2a 2a 20 76 65 72 73 69 6f 6e 73  lder.** versions
3640: 20 6f 66 20 53 51 4c 69 74 65 20 74 68 61 74 20   of SQLite that 
3650: 6c 61 63 6b 20 74 68 65 20 62 75 69 6c 74 2d 69  lack the built-i
3660: 6e 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29  n group_concat()
3670: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 67 72 6f 75  ..*/.struct grou
3680: 70 43 6f 6e 63 61 74 20 7b 0a 20 20 63 68 61 72  pConcat {.  char
3690: 20 2a 7a 3b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f   *z;.  int nAllo
36a0: 63 3b 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 0a  c;.  int nUsed;.
36b0: 7d 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20 67  };.static void g
36c0: 72 6f 75 70 41 70 70 65 6e 64 28 73 74 72 75 63  roupAppend(struc
36d0: 74 20 67 72 6f 75 70 43 6f 6e 63 61 74 20 2a 70  t groupConcat *p
36e0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
36f0: 20 69 6e 74 20 6e 29 7b 0a 20 20 69 66 28 20 70   int n){.  if( p
3700: 2d 3e 6e 55 73 65 64 2b 6e 20 3e 3d 20 70 2d 3e  ->nUsed+n >= p->
3710: 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 69 6e  nAlloc ){.    in
3720: 74 20 6e 32 20 3d 20 28 70 2d 3e 6e 41 6c 6c 6f  t n2 = (p->nAllo
3730: 63 2b 6e 2b 31 29 2a 32 3b 0a 20 20 20 20 63 68  c+n+1)*2;.    ch
3740: 61 72 20 2a 7a 32 20 3d 20 73 71 6c 69 74 65 33  ar *z2 = sqlite3
3750: 5f 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20 6e  _realloc(p->z, n
3760: 32 29 3b 0a 20 20 20 20 69 66 28 20 7a 32 3d 3d  2);.    if( z2==
3770: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
3780: 70 2d 3e 7a 20 3d 20 7a 32 3b 0a 20 20 20 20 70  p->z = z2;.    p
3790: 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 6e 32 3b 0a 20  ->nAlloc = n2;. 
37a0: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 70 2d 3e 7a   }.  memcpy(p->z
37b0: 2b 70 2d 3e 6e 55 73 65 64 2c 20 7a 2c 20 6e 29  +p->nUsed, z, n)
37c0: 3b 0a 20 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20  ;.  p->nUsed += 
37d0: 6e 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  n;.}.static void
37e0: 20 67 72 6f 75 70 53 74 65 70 28 0a 20 20 73 71   groupStep(.  sq
37f0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
3800: 6f 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72  ontext,.  int ar
3810: 67 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  gc,.  sqlite3_va
3820: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
3830: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c  const char *zVal
3840: 3b 0a 20 20 73 74 72 75 63 74 20 67 72 6f 75 70  ;.  struct group
3850: 43 6f 6e 63 61 74 20 2a 70 3b 0a 20 20 63 6f 6e  Concat *p;.  con
3860: 73 74 20 63 68 61 72 20 2a 7a 53 65 70 3b 0a 20  st char *zSep;. 
3870: 20 69 6e 74 20 6e 56 61 6c 2c 20 6e 53 65 70 3b   int nVal, nSep;
3880: 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63 3d  .  assert( argc=
3890: 3d 31 20 7c 7c 20 61 72 67 63 3d 3d 32 20 29 3b  =1 || argc==2 );
38a0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 76  .  if( sqlite3_v
38b0: 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30  alue_type(argv[0
38c0: 5d 29 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 20  ])==SQLITE_NULL 
38d0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 70 3d 20 28  ) return;.  p= (
38e0: 73 74 72 75 63 74 20 67 72 6f 75 70 43 6f 6e 63  struct groupConc
38f0: 61 74 2a 29 73 71 6c 69 74 65 33 5f 61 67 67 72  at*)sqlite3_aggr
3900: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
3910: 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70  ntext, sizeof(*p
3920: 29 29 3b 0a 0a 20 20 69 66 28 20 70 20 29 7b 0a  ));..  if( p ){.
3930: 20 20 20 20 69 6e 74 20 66 69 72 73 74 54 65 72      int firstTer
3940: 6d 20 3d 20 70 2d 3e 6e 55 73 65 64 3d 3d 30 3b  m = p->nUsed==0;
3950: 0a 20 20 20 20 69 66 28 20 21 66 69 72 73 74 54  .    if( !firstT
3960: 65 72 6d 20 29 7b 0a 20 20 20 20 20 20 69 66 28  erm ){.      if(
3970: 20 61 72 67 63 3d 3d 32 20 29 7b 0a 20 20 20 20   argc==2 ){.    
3980: 20 20 20 20 7a 53 65 70 20 3d 20 28 63 68 61 72      zSep = (char
3990: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
39a0: 74 65 78 74 28 61 72 67 76 5b 31 5d 29 3b 0a 20  text(argv[1]);. 
39b0: 20 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73 71         nSep = sq
39c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
39d0: 73 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20  s(argv[1]);.    
39e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
39f0: 20 7a 53 65 70 20 3d 20 22 2c 22 3b 0a 20 20 20   zSep = ",";.   
3a00: 20 20 20 20 20 6e 53 65 70 20 3d 20 31 3b 0a 20       nSep = 1;. 
3a10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
3a20: 20 6e 53 65 70 20 29 20 67 72 6f 75 70 41 70 70   nSep ) groupApp
3a30: 65 6e 64 28 70 2c 20 7a 53 65 70 2c 20 6e 53 65  end(p, zSep, nSe
3a40: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 56  p);.    }.    zV
3a50: 61 6c 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  al = (char*)sqli
3a60: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
3a70: 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 6e 56 61  rgv[0]);.    nVa
3a80: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
3a90: 65 5f 62 79 74 65 73 28 61 72 67 76 5b 30 5d 29  e_bytes(argv[0])
3aa0: 3b 0a 20 20 20 20 69 66 28 20 7a 56 61 6c 20 29  ;.    if( zVal )
3ab0: 20 67 72 6f 75 70 41 70 70 65 6e 64 28 70 2c 20   groupAppend(p, 
3ac0: 7a 56 61 6c 2c 20 6e 56 61 6c 29 3b 0a 20 20 7d  zVal, nVal);.  }
3ad0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 67  .}.static void g
3ae0: 72 6f 75 70 46 69 6e 61 6c 28 73 71 6c 69 74 65  roupFinal(sqlite
3af0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
3b00: 78 74 29 7b 0a 20 20 73 74 72 75 63 74 20 67 72  xt){.  struct gr
3b10: 6f 75 70 43 6f 6e 63 61 74 20 2a 70 3b 0a 20 20  oupConcat *p;.  
3b20: 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72  p = sqlite3_aggr
3b30: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
3b40: 6e 74 65 78 74 2c 20 30 29 3b 0a 20 20 69 66 28  ntext, 0);.  if(
3b50: 20 70 20 26 26 20 70 2d 3e 7a 20 29 7b 0a 20 20   p && p->z ){.  
3b60: 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 5d    p->z[p->nUsed]
3b70: 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
3b80: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f  3_result_text(co
3b90: 6e 74 65 78 74 2c 20 70 2d 3e 7a 2c 20 70 2d 3e  ntext, p->z, p->
3ba0: 6e 55 73 65 64 2c 20 73 71 6c 69 74 65 33 5f 66  nUsed, sqlite3_f
3bb0: 72 65 65 29 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64  ree);.  }.}.#end
3bc0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  if../*.** The ma
3bd0: 69 6e 20 61 6e 64 20 64 65 66 61 75 6c 74 20 74  in and default t
3be0: 65 73 74 73 65 74 0a 2a 2f 0a 76 6f 69 64 20 74  estset.*/.void t
3bf0: 65 73 74 73 65 74 5f 6d 61 69 6e 28 76 6f 69 64  estset_main(void
3c00: 29 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  ){.  int i;     
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
3c30: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  er */.  int n;  
3c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c50: 20 20 20 20 20 20 2f 2a 20 69 74 65 72 61 74 69        /* iterati
3c60: 6f 6e 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e  on count */.  in
3c70: 74 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  t sz;           
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
3c90: 69 7a 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ize of the table
3ca0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 61 78 62 3b  s */.  int maxb;
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cc0: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
3cd0: 73 77 69 7a 7a 6c 65 64 20 76 61 6c 75 65 20 2a  swizzled value *
3ce0: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 78 31 20  /.  unsigned x1 
3cf0: 3d 20 30 2c 20 78 32 20 3d 20 30 3b 20 20 20 20  = 0, x2 = 0;    
3d00: 20 20 2f 2a 20 50 61 72 61 6d 65 74 65 72 73 20    /* Parameters 
3d10: 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30  */.  int len = 0
3d20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3d30: 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
3d40: 74 68 65 20 7a 4e 75 6d 5b 5d 20 73 74 72 69 6e  the zNum[] strin
3d50: 67 20 2a 2f 0a 20 20 63 68 61 72 20 7a 4e 75 6d  g */.  char zNum
3d60: 5b 32 30 30 30 5d 3b 20 20 20 20 20 20 20 20 20  [2000];         
3d70: 20 20 20 20 20 2f 2a 20 41 20 6e 75 6d 62 65 72       /* A number
3d80: 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 73 7a 20 3d   name */..  sz =
3d90: 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 35 30   n = g.szTest*50
3da0: 30 3b 0a 20 20 7a 4e 75 6d 5b 30 5d 20 3d 20 30  0;.  zNum[0] = 0
3db0: 3b 0a 20 20 6d 61 78 62 20 3d 20 72 6f 75 6e 64  ;.  maxb = round
3dc0: 75 70 5f 61 6c 6c 6f 6e 65 73 28 73 7a 29 3b 0a  up_allones(sz);.
3dd0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
3de0: 69 6e 5f 74 65 73 74 28 31 30 30 2c 20 22 25 64  in_test(100, "%d
3df0: 20 49 4e 53 45 52 54 73 20 69 6e 74 6f 20 74 61   INSERTs into ta
3e00: 62 6c 65 20 77 69 74 68 20 6e 6f 20 69 6e 64 65  ble with no inde
3e10: 78 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74  x", n);.  speedt
3e20: 65 73 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e  est1_exec("BEGIN
3e30: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
3e40: 5f 65 78 65 63 28 22 43 52 45 41 54 45 25 73 20  _exec("CREATE%s 
3e50: 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47  TABLE t1(a INTEG
3e60: 45 52 20 25 73 2c 20 62 20 49 4e 54 45 47 45 52  ER %s, b INTEGER
3e70: 20 25 73 2c 20 63 20 54 45 58 54 20 25 73 29 3b   %s, c TEXT %s);
3e80: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
3e90: 20 20 20 20 20 69 73 54 65 6d 70 28 39 29 2c 20       isTemp(9), 
3ea0: 67 2e 7a 4e 4e 2c 20 67 2e 7a 4e 4e 2c 20 67 2e  g.zNN, g.zNN, g.
3eb0: 7a 4e 4e 29 3b 0a 20 20 73 70 65 65 64 74 65 73  zNN);.  speedtes
3ec0: 74 31 5f 70 72 65 70 61 72 65 28 22 49 4e 53 45  t1_prepare("INSE
3ed0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
3ee0: 53 28 3f 31 2c 3f 32 2c 3f 33 29 3b 20 2d 2d 20  S(?1,?2,?3); -- 
3ef0: 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 29 3b 0a   %d times", n);.
3f00: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b    for(i=1; i<=n;
3f10: 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20   i++){.    x1 = 
3f20: 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b  swizzle(i,maxb);
3f30: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
3f40: 6e 75 6d 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a  numbername(x1, z
3f50: 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d  Num, sizeof(zNum
3f60: 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ));.    sqlite3_
3f70: 62 69 6e 64 5f 69 6e 74 36 34 28 67 2e 70 53 74  bind_int64(g.pSt
3f80: 6d 74 2c 20 31 2c 20 28 73 71 6c 69 74 65 33 5f  mt, 1, (sqlite3_
3f90: 69 6e 74 36 34 29 78 31 29 3b 0a 20 20 20 20 73  int64)x1);.    s
3fa0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
3fb0: 67 2e 70 53 74 6d 74 2c 20 32 2c 20 69 29 3b 0a  g.pStmt, 2, i);.
3fc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
3fd0: 5f 74 65 78 74 28 67 2e 70 53 74 6d 74 2c 20 33  _text(g.pStmt, 3
3fe0: 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51 4c 49  , zNum, -1, SQLI
3ff0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
4000: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
4010: 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73  ;.  }.  speedtes
4020: 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22  t1_exec("COMMIT"
4030: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
4040: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20  end_test();...  
4050: 6e 20 3d 20 73 7a 3b 0a 20 20 73 70 65 65 64 74  n = sz;.  speedt
4060: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
4070: 31 31 30 2c 20 22 25 64 20 6f 72 64 65 72 65 64  110, "%d ordered
4080: 20 49 4e 53 45 52 54 53 20 77 69 74 68 20 6f 6e   INSERTS with on
4090: 65 20 69 6e 64 65 78 2f 50 4b 22 2c 20 6e 29 3b  e index/PK", n);
40a0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
40b0: 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73  ec("BEGIN");.  s
40c0: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 0a  peedtest1_exec(.
40d0: 20 20 20 20 20 22 43 52 45 41 54 45 25 73 20 54       "CREATE%s T
40e0: 41 42 4c 45 20 74 32 28 61 20 49 4e 54 45 47 45  ABLE t2(a INTEGE
40f0: 52 20 25 73 20 25 73 2c 20 62 20 49 4e 54 45 47  R %s %s, b INTEG
4100: 45 52 20 25 73 2c 20 63 20 54 45 58 54 20 25 73  ER %s, c TEXT %s
4110: 29 20 25 73 22 2c 0a 20 20 20 20 20 69 73 54 65  ) %s",.     isTe
4120: 6d 70 28 35 29 2c 20 67 2e 7a 4e 4e 2c 20 67 2e  mp(5), g.zNN, g.
4130: 7a 50 4b 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 4e  zPK, g.zNN, g.zN
4140: 4e 2c 20 67 2e 7a 57 52 29 3b 0a 20 20 73 70 65  N, g.zWR);.  spe
4150: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
4160: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
4170: 56 41 4c 55 45 53 28 3f 31 2c 3f 32 2c 3f 33 29  VALUES(?1,?2,?3)
4180: 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20  ; -- %d times", 
4190: 6e 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69  n);.  for(i=1; i
41a0: 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78  <=n; i++){.    x
41b0: 31 20 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 6d 61  1 = swizzle(i,ma
41c0: 78 62 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  xb);.    speedte
41d0: 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 78  st1_numbername(x
41e0: 31 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28  1, zNum, sizeof(
41f0: 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69  zNum));.    sqli
4200: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
4210: 53 74 6d 74 2c 20 31 2c 20 69 29 3b 0a 20 20 20  Stmt, 1, i);.   
4220: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
4230: 74 36 34 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20  t64(g.pStmt, 2, 
4240: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 78  (sqlite3_int64)x
4250: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  1);.    sqlite3_
4260: 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d  bind_text(g.pStm
4270: 74 2c 20 33 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20  t, 3, zNum, -1, 
4280: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
4290: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
42a0: 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  un();.  }.  spee
42b0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d  dtest1_exec("COM
42c0: 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65  MIT");.  speedte
42d0: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
42e0: 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70  ..  n = sz;.  sp
42f0: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
4300: 65 73 74 28 31 32 30 2c 20 22 25 64 20 75 6e 6f  est(120, "%d uno
4310: 72 64 65 72 65 64 20 49 4e 53 45 52 54 53 20 77  rdered INSERTS w
4320: 69 74 68 20 6f 6e 65 20 69 6e 64 65 78 2f 50 4b  ith one index/PK
4330: 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65  ", n);.  speedte
4340: 73 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22  st1_exec("BEGIN"
4350: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
4360: 65 78 65 63 28 0a 20 20 20 20 20 20 22 43 52 45  exec(.      "CRE
4370: 41 54 45 25 73 20 54 41 42 4c 45 20 74 33 28 61  ATE%s TABLE t3(a
4380: 20 49 4e 54 45 47 45 52 20 25 73 20 25 73 2c 20   INTEGER %s %s, 
4390: 62 20 49 4e 54 45 47 45 52 20 25 73 2c 20 63 20  b INTEGER %s, c 
43a0: 54 45 58 54 20 25 73 29 20 25 73 22 2c 0a 20 20  TEXT %s) %s",.  
43b0: 20 20 20 20 69 73 54 65 6d 70 28 33 29 2c 20 67      isTemp(3), g
43c0: 2e 7a 4e 4e 2c 20 67 2e 7a 50 4b 2c 20 67 2e 7a  .zNN, g.zPK, g.z
43d0: 4e 4e 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 57 52  NN, g.zNN, g.zWR
43e0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
43f0: 70 72 65 70 61 72 65 28 22 49 4e 53 45 52 54 20  prepare("INSERT 
4400: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 3f  INTO t3 VALUES(?
4410: 31 2c 3f 32 2c 3f 33 29 3b 20 2d 2d 20 25 64 20  1,?2,?3); -- %d 
4420: 74 69 6d 65 73 22 2c 20 6e 29 3b 0a 20 20 66 6f  times", n);.  fo
4430: 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b  r(i=1; i<=n; i++
4440: 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 77 69 7a  ){.    x1 = swiz
4450: 7a 6c 65 28 69 2c 6d 61 78 62 29 3b 0a 20 20 20  zle(i,maxb);.   
4460: 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62   speedtest1_numb
4470: 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c  ername(x1, zNum,
4480: 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a   sizeof(zNum));.
4490: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
44a0: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c  _int(g.pStmt, 2,
44b0: 20 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   i);.    sqlite3
44c0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 67 2e 70 53  _bind_int64(g.pS
44d0: 74 6d 74 2c 20 31 2c 20 28 73 71 6c 69 74 65 33  tmt, 1, (sqlite3
44e0: 5f 69 6e 74 36 34 29 78 31 29 3b 0a 20 20 20 20  _int64)x1);.    
44f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
4500: 74 28 67 2e 70 53 74 6d 74 2c 20 33 2c 20 7a 4e  t(g.pStmt, 3, zN
4510: 75 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53  um, -1, SQLITE_S
4520: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65  TATIC);.    spee
4530: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
4540: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
4550: 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20  xec("COMMIT");. 
4560: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
4570: 74 65 73 74 28 29 3b 0a 0a 23 69 66 20 53 51 4c  test();..#if SQL
4580: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
4590: 45 52 3c 33 30 30 35 30 30 34 0a 20 20 73 71 6c  ER<3005004.  sql
45a0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
45b0: 74 69 6f 6e 28 67 2e 64 62 2c 20 22 67 72 6f 75  tion(g.db, "grou
45c0: 70 5f 63 6f 6e 63 61 74 22 2c 20 31 2c 20 53 51  p_concat", 1, SQ
45d0: 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20 20  LITE_UTF8, 0,.  
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45f0: 20 20 20 20 20 20 20 20 30 2c 20 67 72 6f 75 70          0, group
4600: 53 74 65 70 2c 20 67 72 6f 75 70 46 69 6e 61 6c  Step, groupFinal
4610: 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d  );.#endif..  n =
4620: 20 32 35 3b 0a 20 20 73 70 65 65 64 74 65 73 74   25;.  speedtest
4630: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 33 30  1_begin_test(130
4640: 2c 20 22 25 64 20 53 45 4c 45 43 54 53 2c 20 6e  , "%d SELECTS, n
4650: 75 6d 65 72 69 63 20 42 45 54 57 45 45 4e 2c 20  umeric BETWEEN, 
4660: 75 6e 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a  unindexed", n);.
4670: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
4680: 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70  c("BEGIN");.  sp
4690: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
46a0: 28 0a 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f  (.    "SELECT co
46b0: 75 6e 74 28 2a 29 2c 20 61 76 67 28 62 29 2c 20  unt(*), avg(b), 
46c0: 73 75 6d 28 6c 65 6e 67 74 68 28 63 29 29 2c 20  sum(length(c)), 
46d0: 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 63 29 20  group_concat(c) 
46e0: 46 52 4f 4d 20 74 31 5c 6e 22 0a 20 20 20 20 22  FROM t1\n".    "
46f0: 20 57 48 45 52 45 20 62 20 42 45 54 57 45 45 4e   WHERE b BETWEEN
4700: 20 3f 31 20 41 4e 44 20 3f 32 3b 20 2d 2d 20 25   ?1 AND ?2; -- %
4710: 64 20 74 69 6d 65 73 22 2c 20 6e 0a 20 20 29 3b  d times", n.  );
4720: 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e  .  for(i=1; i<=n
4730: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
4740: 28 69 2d 31 29 25 67 2e 6e 52 65 70 65 61 74 3d  (i-1)%g.nRepeat=
4750: 3d 30 20 29 7b 0a 20 20 20 20 20 20 78 31 20 3d  =0 ){.      x1 =
4760: 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64   speedtest1_rand
4770: 6f 6d 28 29 25 6d 61 78 62 3b 0a 20 20 20 20 20  om()%maxb;.     
4780: 20 78 32 20 3d 20 73 70 65 65 64 74 65 73 74 31   x2 = speedtest1
4790: 5f 72 61 6e 64 6f 6d 28 29 25 31 30 20 2b 20 73  _random()%10 + s
47a0: 7a 2f 35 30 30 30 20 2b 20 78 31 3b 0a 20 20 20  z/5000 + x1;.   
47b0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62   }.    sqlite3_b
47c0: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
47d0: 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73 71 6c   1, x1);.    sql
47e0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
47f0: 70 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b 0a 20  pStmt, 2, x2);. 
4800: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
4810: 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  n();.  }.  speed
4820: 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d  test1_exec("COMM
4830: 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  IT");.  speedtes
4840: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
4850: 0a 20 20 6e 20 3d 20 31 30 3b 0a 20 20 73 70 65  .  n = 10;.  spe
4860: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
4870: 73 74 28 31 34 30 2c 20 22 25 64 20 53 45 4c 45  st(140, "%d SELE
4880: 43 54 53 2c 20 4c 49 4b 45 2c 20 75 6e 69 6e 64  CTS, LIKE, unind
4890: 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20 73 70 65  exed", n);.  spe
48a0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42 45  edtest1_exec("BE
48b0: 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65  GIN");.  speedte
48c0: 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20  st1_prepare(.   
48d0: 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   "SELECT count(*
48e0: 29 2c 20 61 76 67 28 62 29 2c 20 73 75 6d 28 6c  ), avg(b), sum(l
48f0: 65 6e 67 74 68 28 63 29 29 2c 20 67 72 6f 75 70  ength(c)), group
4900: 5f 63 6f 6e 63 61 74 28 63 29 20 46 52 4f 4d 20  _concat(c) FROM 
4910: 74 31 5c 6e 22 0a 20 20 20 20 22 20 57 48 45 52  t1\n".    " WHER
4920: 45 20 63 20 4c 49 4b 45 20 3f 31 3b 20 2d 2d 20  E c LIKE ?1; -- 
4930: 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a 20 20 29  %d times", n.  )
4940: 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d  ;.  for(i=1; i<=
4950: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  n; i++){.    if(
4960: 20 28 69 2d 31 29 25 67 2e 6e 52 65 70 65 61 74   (i-1)%g.nRepeat
4970: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 78 31 20  ==0 ){.      x1 
4980: 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e  = speedtest1_ran
4990: 64 6f 6d 28 29 25 6d 61 78 62 3b 0a 20 20 20 20  dom()%maxb;.    
49a0: 20 20 7a 4e 75 6d 5b 30 5d 20 3d 20 27 25 27 3b    zNum[0] = '%';
49b0: 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 70 65  .      len = spe
49c0: 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61  edtest1_numberna
49d0: 6d 65 28 69 2c 20 7a 4e 75 6d 2b 31 2c 20 73 69  me(i, zNum+1, si
49e0: 7a 65 6f 66 28 7a 4e 75 6d 29 2d 32 29 3b 0a 20  zeof(zNum)-2);. 
49f0: 20 20 20 20 20 7a 4e 75 6d 5b 6c 65 6e 5d 20 3d       zNum[len] =
4a00: 20 27 25 27 3b 0a 20 20 20 20 20 20 7a 4e 75 6d   '%';.      zNum
4a10: 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  [len+1] = 0;.   
4a20: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62   }.    sqlite3_b
4a30: 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74  ind_text(g.pStmt
4a40: 2c 20 31 2c 20 7a 4e 75 6d 2c 20 6c 65 6e 2b 31  , 1, zNum, len+1
4a50: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
4a60: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
4a70: 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70  _run();.  }.  sp
4a80: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43  eedtest1_exec("C
4a90: 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64  OMMIT");.  speed
4aa0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
4ab0: 3b 0a 0a 0a 20 20 6e 20 3d 20 31 30 3b 0a 20 20  ;...  n = 10;.  
4ac0: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
4ad0: 5f 74 65 73 74 28 31 34 32 2c 20 22 25 64 20 53  _test(142, "%d S
4ae0: 45 4c 45 43 54 53 20 77 2f 4f 52 44 45 52 20 42  ELECTS w/ORDER B
4af0: 59 2c 20 75 6e 69 6e 64 65 78 65 64 22 2c 20 6e  Y, unindexed", n
4b00: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
4b10: 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20  exec("BEGIN");. 
4b20: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
4b30: 61 72 65 28 0a 20 20 20 20 22 53 45 4c 45 43 54  are(.    "SELECT
4b40: 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 31   a, b, c FROM t1
4b50: 20 57 48 45 52 45 20 63 20 4c 49 4b 45 20 3f 31   WHERE c LIKE ?1
4b60: 5c 6e 22 0a 20 20 20 20 22 20 4f 52 44 45 52 20  \n".    " ORDER 
4b70: 42 59 20 61 3b 20 2d 2d 20 25 64 20 74 69 6d 65  BY a; -- %d time
4b80: 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72  s", n.  );.  for
4b90: 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29  (i=1; i<=n; i++)
4ba0: 7b 0a 20 20 20 20 69 66 28 20 28 69 2d 31 29 25  {.    if( (i-1)%
4bb0: 67 2e 6e 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a  g.nRepeat==0 ){.
4bc0: 20 20 20 20 20 20 78 31 20 3d 20 73 70 65 65 64        x1 = speed
4bd0: 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d  test1_random()%m
4be0: 61 78 62 3b 0a 20 20 20 20 20 20 7a 4e 75 6d 5b  axb;.      zNum[
4bf0: 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20  0] = '%';.      
4c00: 6c 65 6e 20 3d 20 73 70 65 65 64 74 65 73 74 31  len = speedtest1
4c10: 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 69 2c 20 7a  _numbername(i, z
4c20: 4e 75 6d 2b 31 2c 20 73 69 7a 65 6f 66 28 7a 4e  Num+1, sizeof(zN
4c30: 75 6d 29 2d 32 29 3b 0a 20 20 20 20 20 20 7a 4e  um)-2);.      zN
4c40: 75 6d 5b 6c 65 6e 5d 20 3d 20 27 25 27 3b 0a 20  um[len] = '%';. 
4c50: 20 20 20 20 20 7a 4e 75 6d 5b 6c 65 6e 2b 31 5d       zNum[len+1]
4c60: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
4c70: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
4c80: 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 4e  t(g.pStmt, 1, zN
4c90: 75 6d 2c 20 6c 65 6e 2b 31 2c 20 53 51 4c 49 54  um, len+1, SQLIT
4ca0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
4cb0: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
4cc0: 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74  .  }.  speedtest
4cd0: 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29  1_exec("COMMIT")
4ce0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
4cf0: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20  nd_test();..  n 
4d00: 3d 20 31 30 3b 20 2f 2a 20 67 2e 73 7a 54 65 73  = 10; /* g.szTes
4d10: 74 2f 35 3b 20 2a 2f 0a 20 20 73 70 65 65 64 74  t/5; */.  speedt
4d20: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
4d30: 31 34 35 2c 20 22 25 64 20 53 45 4c 45 43 54 53  145, "%d SELECTS
4d40: 20 77 2f 4f 52 44 45 52 20 42 59 20 61 6e 64 20   w/ORDER BY and 
4d50: 4c 49 4d 49 54 2c 20 75 6e 69 6e 64 65 78 65 64  LIMIT, unindexed
4d60: 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65  ", n);.  speedte
4d70: 73 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22  st1_exec("BEGIN"
4d80: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
4d90: 70 72 65 70 61 72 65 28 0a 20 20 20 20 22 53 45  prepare(.    "SE
4da0: 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f  LECT a, b, c FRO
4db0: 4d 20 74 31 20 57 48 45 52 45 20 63 20 4c 49 4b  M t1 WHERE c LIK
4dc0: 45 20 3f 31 5c 6e 22 0a 20 20 20 20 22 20 4f 52  E ?1\n".    " OR
4dd0: 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20 31  DER BY a LIMIT 1
4de0: 30 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c  0; -- %d times",
4df0: 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d   n.  );.  for(i=
4e00: 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20  1; i<=n; i++){. 
4e10: 20 20 20 69 66 28 20 28 69 2d 31 29 25 67 2e 6e     if( (i-1)%g.n
4e20: 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a 20 20 20  Repeat==0 ){.   
4e30: 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65 73     x1 = speedtes
4e40: 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78 62  t1_random()%maxb
4e50: 3b 0a 20 20 20 20 20 20 7a 4e 75 6d 5b 30 5d 20  ;.      zNum[0] 
4e60: 3d 20 27 25 27 3b 0a 20 20 20 20 20 20 6c 65 6e  = '%';.      len
4e70: 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75   = speedtest1_nu
4e80: 6d 62 65 72 6e 61 6d 65 28 69 2c 20 7a 4e 75 6d  mbername(i, zNum
4e90: 2b 31 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29  +1, sizeof(zNum)
4ea0: 2d 32 29 3b 0a 20 20 20 20 20 20 7a 4e 75 6d 5b  -2);.      zNum[
4eb0: 6c 65 6e 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20  len] = '%';.    
4ec0: 20 20 7a 4e 75 6d 5b 6c 65 6e 2b 31 5d 20 3d 20    zNum[len+1] = 
4ed0: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  0;.    }.    sql
4ee0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67  ite3_bind_text(g
4ef0: 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 4e 75 6d 2c  .pStmt, 1, zNum,
4f00: 20 6c 65 6e 2b 31 2c 20 53 51 4c 49 54 45 5f 53   len+1, SQLITE_S
4f10: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65  TATIC);.    spee
4f20: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
4f30: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
4f40: 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20  xec("COMMIT");. 
4f50: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
4f60: 74 65 73 74 28 29 3b 0a 0a 0a 20 20 73 70 65 65  test();...  spee
4f70: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
4f80: 74 28 31 35 30 2c 20 22 43 52 45 41 54 45 20 49  t(150, "CREATE I
4f90: 4e 44 45 58 20 66 69 76 65 20 74 69 6d 65 73 22  NDEX five times"
4fa0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
4fb0: 65 78 65 63 28 22 42 45 47 49 4e 3b 22 29 3b 0a  exec("BEGIN;");.
4fc0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
4fd0: 63 28 22 43 52 45 41 54 45 20 55 4e 49 51 55 45  c("CREATE UNIQUE
4fe0: 20 49 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31   INDEX t1b ON t1
4ff0: 28 62 29 3b 22 29 3b 0a 20 20 73 70 65 65 64 74  (b);");.  speedt
5000: 65 73 74 31 5f 65 78 65 63 28 22 43 52 45 41 54  est1_exec("CREAT
5010: 45 20 49 4e 44 45 58 20 74 31 63 20 4f 4e 20 74  E INDEX t1c ON t
5020: 31 28 63 29 3b 22 29 3b 0a 20 20 73 70 65 65 64  1(c);");.  speed
5030: 74 65 73 74 31 5f 65 78 65 63 28 22 43 52 45 41  test1_exec("CREA
5040: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20  TE UNIQUE INDEX 
5050: 74 32 62 20 4f 4e 20 74 32 28 62 29 3b 22 29 3b  t2b ON t2(b);");
5060: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
5070: 65 63 28 22 43 52 45 41 54 45 20 49 4e 44 45 58  ec("CREATE INDEX
5080: 20 74 32 63 20 4f 4e 20 74 32 28 63 20 44 45 53   t2c ON t2(c DES
5090: 43 29 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65  C);");.  speedte
50a0: 73 74 31 5f 65 78 65 63 28 22 43 52 45 41 54 45  st1_exec("CREATE
50b0: 20 49 4e 44 45 58 20 74 33 62 63 20 4f 4e 20 74   INDEX t3bc ON t
50c0: 33 28 62 2c 63 29 3b 22 29 3b 0a 20 20 73 70 65  3(b,c);");.  spe
50d0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f  edtest1_exec("CO
50e0: 4d 4d 49 54 3b 22 29 3b 0a 20 20 73 70 65 65 64  MMIT;");.  speed
50f0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
5100: 3b 0a 0a 0a 20 20 6e 20 3d 20 73 7a 2f 35 3b 0a  ;...  n = sz/5;.
5110: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
5120: 69 6e 5f 74 65 73 74 28 31 36 30 2c 20 22 25 64  in_test(160, "%d
5130: 20 53 45 4c 45 43 54 53 2c 20 6e 75 6d 65 72 69   SELECTS, numeri
5140: 63 20 42 45 54 57 45 45 4e 2c 20 69 6e 64 65 78  c BETWEEN, index
5150: 65 64 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  ed", n);.  speed
5160: 74 65 73 74 31 5f 65 78 65 63 28 22 42 45 47 49  test1_exec("BEGI
5170: 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  N");.  speedtest
5180: 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20 20 22  1_prepare(.    "
5190: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c  SELECT count(*),
51a0: 20 61 76 67 28 62 29 2c 20 73 75 6d 28 6c 65 6e   avg(b), sum(len
51b0: 67 74 68 28 63 29 29 2c 20 67 72 6f 75 70 5f 63  gth(c)), group_c
51c0: 6f 6e 63 61 74 28 61 29 20 46 52 4f 4d 20 74 31  oncat(a) FROM t1
51d0: 5c 6e 22 0a 20 20 20 20 22 20 57 48 45 52 45 20  \n".    " WHERE 
51e0: 62 20 42 45 54 57 45 45 4e 20 3f 31 20 41 4e 44  b BETWEEN ?1 AND
51f0: 20 3f 32 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73   ?2; -- %d times
5200: 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28  ", n.  );.  for(
5210: 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b  i=1; i<=n; i++){
5220: 0a 20 20 20 20 69 66 28 20 28 69 2d 31 29 25 67  .    if( (i-1)%g
5230: 2e 6e 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a 20  .nRepeat==0 ){. 
5240: 20 20 20 20 20 78 31 20 3d 20 73 70 65 65 64 74       x1 = speedt
5250: 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61  est1_random()%ma
5260: 78 62 3b 0a 20 20 20 20 20 20 78 32 20 3d 20 73  xb;.      x2 = s
5270: 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d  peedtest1_random
5280: 28 29 25 31 30 20 2b 20 73 7a 2f 35 30 30 30 20  ()%10 + sz/5000 
5290: 2b 20 78 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  + x1;.    }.    
52a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
52b0: 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 78 31 29  (g.pStmt, 1, x1)
52c0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
52d0: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
52e0: 32 2c 20 78 32 29 3b 0a 20 20 20 20 73 70 65 65  2, x2);.    spee
52f0: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
5300: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
5310: 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20  xec("COMMIT");. 
5320: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
5330: 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20  test();...  n = 
5340: 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65 73  sz/5;.  speedtes
5350: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 36  t1_begin_test(16
5360: 31 2c 20 22 25 64 20 53 45 4c 45 43 54 53 2c 20  1, "%d SELECTS, 
5370: 6e 75 6d 65 72 69 63 20 42 45 54 57 45 45 4e 2c  numeric BETWEEN,
5380: 20 50 4b 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65   PK", n);.  spee
5390: 64 74 65 73 74 31 5f 65 78 65 63 28 22 42 45 47  dtest1_exec("BEG
53a0: 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  IN");.  speedtes
53b0: 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20 20  t1_prepare(.    
53c0: 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  "SELECT count(*)
53d0: 2c 20 61 76 67 28 62 29 2c 20 73 75 6d 28 6c 65  , avg(b), sum(le
53e0: 6e 67 74 68 28 63 29 29 2c 20 67 72 6f 75 70 5f  ngth(c)), group_
53f0: 63 6f 6e 63 61 74 28 61 29 20 46 52 4f 4d 20 74  concat(a) FROM t
5400: 32 5c 6e 22 0a 20 20 20 20 22 20 57 48 45 52 45  2\n".    " WHERE
5410: 20 61 20 42 45 54 57 45 45 4e 20 3f 31 20 41 4e   a BETWEEN ?1 AN
5420: 44 20 3f 32 3b 20 2d 2d 20 25 64 20 74 69 6d 65  D ?2; -- %d time
5430: 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72  s", n.  );.  for
5440: 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29  (i=1; i<=n; i++)
5450: 7b 0a 20 20 20 20 69 66 28 20 28 69 2d 31 29 25  {.    if( (i-1)%
5460: 67 2e 6e 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a  g.nRepeat==0 ){.
5470: 20 20 20 20 20 20 78 31 20 3d 20 73 70 65 65 64        x1 = speed
5480: 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d  test1_random()%m
5490: 61 78 62 3b 0a 20 20 20 20 20 20 78 32 20 3d 20  axb;.      x2 = 
54a0: 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f  speedtest1_rando
54b0: 6d 28 29 25 31 30 20 2b 20 73 7a 2f 35 30 30 30  m()%10 + sz/5000
54c0: 20 2b 20 78 31 3b 0a 20 20 20 20 7d 0a 20 20 20   + x1;.    }.   
54d0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
54e0: 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 78 31  t(g.pStmt, 1, x1
54f0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
5500: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
5510: 20 32 2c 20 78 32 29 3b 0a 20 20 20 20 73 70 65   2, x2);.    spe
5520: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
5530: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
5540: 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a  exec("COMMIT");.
5550: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
5560: 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d  _test();...  n =
5570: 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65   sz/5;.  speedte
5580: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
5590: 37 30 2c 20 22 25 64 20 53 45 4c 45 43 54 53 2c  70, "%d SELECTS,
55a0: 20 74 65 78 74 20 42 45 54 57 45 45 4e 2c 20 69   text BETWEEN, i
55b0: 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20 73  ndexed", n);.  s
55c0: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
55d0: 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64  BEGIN");.  speed
55e0: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20  test1_prepare(. 
55f0: 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74     "SELECT count
5600: 28 2a 29 2c 20 61 76 67 28 62 29 2c 20 73 75 6d  (*), avg(b), sum
5610: 28 6c 65 6e 67 74 68 28 63 29 29 2c 20 67 72 6f  (length(c)), gro
5620: 75 70 5f 63 6f 6e 63 61 74 28 61 29 20 46 52 4f  up_concat(a) FRO
5630: 4d 20 74 31 5c 6e 22 0a 20 20 20 20 22 20 57 48  M t1\n".    " WH
5640: 45 52 45 20 63 20 42 45 54 57 45 45 4e 20 3f 31  ERE c BETWEEN ?1
5650: 20 41 4e 44 20 28 3f 31 7c 7c 27 7e 27 29 3b 20   AND (?1||'~'); 
5660: 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a  -- %d times", n.
5670: 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20    );.  for(i=1; 
5680: 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  i<=n; i++){.    
5690: 69 66 28 20 28 69 2d 31 29 25 67 2e 6e 52 65 70  if( (i-1)%g.nRep
56a0: 65 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  eat==0 ){.      
56b0: 78 31 20 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 20  x1 = swizzle(i, 
56c0: 6d 61 78 62 29 3b 0a 20 20 20 20 20 20 6c 65 6e  maxb);.      len
56d0: 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75   = speedtest1_nu
56e0: 6d 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75  mbername(x1, zNu
56f0: 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 2d  m, sizeof(zNum)-
5700: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  1);.    }.    sq
5710: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
5720: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 4e 75 6d  g.pStmt, 1, zNum
5730: 2c 20 6c 65 6e 2c 20 53 51 4c 49 54 45 5f 53 54  , len, SQLITE_ST
5740: 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65 64  ATIC);.    speed
5750: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d  test1_run();.  }
5760: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
5770: 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20  ec("COMMIT");.  
5780: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
5790: 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 73 7a  est();..  n = sz
57a0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
57b0: 65 67 69 6e 5f 74 65 73 74 28 31 38 30 2c 20 22  egin_test(180, "
57c0: 25 64 20 49 4e 53 45 52 54 53 20 77 69 74 68 20  %d INSERTS with 
57d0: 74 68 72 65 65 20 69 6e 64 65 78 65 73 22 2c 20  three indexes", 
57e0: 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  n);.  speedtest1
57f0: 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a  _exec("BEGIN");.
5800: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
5810: 63 28 0a 20 20 20 20 22 43 52 45 41 54 45 25 73  c(.    "CREATE%s
5820: 20 54 41 42 4c 45 20 74 34 28 5c 6e 22 0a 20 20   TABLE t4(\n".  
5830: 20 20 22 20 20 61 20 49 4e 54 45 47 45 52 20 25    "  a INTEGER %
5840: 73 20 25 73 2c 5c 6e 22 0a 20 20 20 20 22 20 20  s %s,\n".    "  
5850: 62 20 49 4e 54 45 47 45 52 20 25 73 2c 5c 6e 22  b INTEGER %s,\n"
5860: 0a 20 20 20 20 22 20 20 63 20 54 45 58 54 20 25  .    "  c TEXT %
5870: 73 5c 6e 22 0a 20 20 20 20 22 29 20 25 73 22 2c  s\n".    ") %s",
5880: 0a 20 20 20 20 69 73 54 65 6d 70 28 31 29 2c 20  .    isTemp(1), 
5890: 67 2e 7a 4e 4e 2c 20 67 2e 7a 50 4b 2c 20 67 2e  g.zNN, g.zPK, g.
58a0: 7a 4e 4e 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 57  zNN, g.zNN, g.zW
58b0: 52 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  R);.  speedtest1
58c0: 5f 65 78 65 63 28 22 43 52 45 41 54 45 20 49 4e  _exec("CREATE IN
58d0: 44 45 58 20 74 34 62 20 4f 4e 20 74 34 28 62 29  DEX t4b ON t4(b)
58e0: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
58f0: 5f 65 78 65 63 28 22 43 52 45 41 54 45 20 49 4e  _exec("CREATE IN
5900: 44 45 58 20 74 34 63 20 4f 4e 20 74 34 28 63 29  DEX t4c ON t4(c)
5910: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
5920: 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 49 4e  _exec("INSERT IN
5930: 54 4f 20 74 34 20 53 45 4c 45 43 54 20 2a 20 46  TO t4 SELECT * F
5940: 52 4f 4d 20 74 31 22 29 3b 0a 20 20 73 70 65 65  ROM t1");.  spee
5950: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d  dtest1_exec("COM
5960: 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65  MIT");.  speedte
5970: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
5980: 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70 65  .  n = sz;.  spe
5990: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
59a0: 73 74 28 31 39 30 2c 20 22 44 45 4c 45 54 45 20  st(190, "DELETE 
59b0: 61 6e 64 20 52 45 46 49 4c 4c 20 6f 6e 65 20 74  and REFILL one t
59c0: 61 62 6c 65 22 2c 20 6e 29 3b 0a 20 20 73 70 65  able", n);.  spe
59d0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 44 45  edtest1_exec("DE
59e0: 4c 45 54 45 20 46 52 4f 4d 20 74 32 3b 22 29 3b  LETE FROM t2;");
59f0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
5a00: 65 63 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  ec("INSERT INTO 
5a10: 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  t2 SELECT * FROM
5a20: 20 74 31 3b 22 29 3b 0a 20 20 73 70 65 65 64 74   t1;");.  speedt
5a30: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
5a40: 0a 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  ...  speedtest1_
5a50: 62 65 67 69 6e 5f 74 65 73 74 28 32 30 30 2c 20  begin_test(200, 
5a60: 22 56 41 43 55 55 4d 22 29 3b 0a 20 20 73 70 65  "VACUUM");.  spe
5a70: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 56 41  edtest1_exec("VA
5a80: 43 55 55 4d 22 29 3b 0a 20 20 73 70 65 65 64 74  CUUM");.  speedt
5a90: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
5aa0: 0a 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  ...  speedtest1_
5ab0: 62 65 67 69 6e 5f 74 65 73 74 28 32 31 30 2c 20  begin_test(210, 
5ac0: 22 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44  "ALTER TABLE ADD
5ad0: 20 43 4f 4c 55 4d 4e 2c 20 61 6e 64 20 71 75 65   COLUMN, and que
5ae0: 72 79 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  ry");.  speedtes
5af0: 74 31 5f 65 78 65 63 28 22 41 4c 54 45 52 20 54  t1_exec("ALTER T
5b00: 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55  ABLE t2 ADD COLU
5b10: 4d 4e 20 64 20 44 45 46 41 55 4c 54 20 31 32 33  MN d DEFAULT 123
5b20: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
5b30: 5f 65 78 65 63 28 22 53 45 4c 45 43 54 20 73 75  _exec("SELECT su
5b40: 6d 28 64 29 20 46 52 4f 4d 20 74 32 22 29 3b 0a  m(d) FROM t2");.
5b50: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
5b60: 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d  _test();...  n =
5b70: 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65   sz/5;.  speedte
5b80: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32  st1_begin_test(2
5b90: 33 30 2c 20 22 25 64 20 55 50 44 41 54 45 53 2c  30, "%d UPDATES,
5ba0: 20 6e 75 6d 65 72 69 63 20 42 45 54 57 45 45 4e   numeric BETWEEN
5bb0: 2c 20 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a  , indexed", n);.
5bc0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
5bd0: 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70  c("BEGIN");.  sp
5be0: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
5bf0: 28 0a 20 20 20 20 22 55 50 44 41 54 45 20 74 32  (.    "UPDATE t2
5c00: 20 53 45 54 20 64 3d 62 2a 32 20 57 48 45 52 45   SET d=b*2 WHERE
5c10: 20 62 20 42 45 54 57 45 45 4e 20 3f 31 20 41 4e   b BETWEEN ?1 AN
5c20: 44 20 3f 32 3b 20 2d 2d 20 25 64 20 74 69 6d 65  D ?2; -- %d time
5c30: 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72  s", n.  );.  for
5c40: 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29  (i=1; i<=n; i++)
5c50: 7b 0a 20 20 20 20 78 31 20 3d 20 73 70 65 65 64  {.    x1 = speed
5c60: 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d  test1_random()%m
5c70: 61 78 62 3b 0a 20 20 20 20 78 32 20 3d 20 73 70  axb;.    x2 = sp
5c80: 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28  eedtest1_random(
5c90: 29 25 31 30 20 2b 20 73 7a 2f 35 30 30 30 20 2b  )%10 + sz/5000 +
5ca0: 20 78 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   x1;.    sqlite3
5cb0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
5cc0: 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73  t, 1, x1);.    s
5cd0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
5ce0: 67 2e 70 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b  g.pStmt, 2, x2);
5cf0: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
5d00: 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65  run();.  }.  spe
5d10: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f  edtest1_exec("CO
5d20: 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74  MMIT");.  speedt
5d30: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
5d40: 0a 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73  ...  n = sz;.  s
5d50: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
5d60: 74 65 73 74 28 32 34 30 2c 20 22 25 64 20 55 50  test(240, "%d UP
5d70: 44 41 54 45 53 20 6f 66 20 69 6e 64 69 76 69 64  DATES of individ
5d80: 75 61 6c 20 72 6f 77 73 22 2c 20 6e 29 3b 0a 20  ual rows", n);. 
5d90: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
5da0: 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65  ("BEGIN");.  spe
5db0: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
5dc0: 0a 20 20 20 20 22 55 50 44 41 54 45 20 74 32 20  .    "UPDATE t2 
5dd0: 53 45 54 20 64 3d 62 2a 33 20 57 48 45 52 45 20  SET d=b*3 WHERE 
5de0: 61 3d 3f 31 3b 20 2d 2d 20 25 64 20 74 69 6d 65  a=?1; -- %d time
5df0: 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72  s", n.  );.  for
5e00: 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29  (i=1; i<=n; i++)
5e10: 7b 0a 20 20 20 20 78 31 20 3d 20 73 70 65 65 64  {.    x1 = speed
5e20: 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 73  test1_random()%s
5e30: 7a 20 2b 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  z + 1;.    sqlit
5e40: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
5e50: 74 6d 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20  tmt, 1, x1);.   
5e60: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
5e70: 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65  );.  }.  speedte
5e80: 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54  st1_exec("COMMIT
5e90: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
5ea0: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20  _end_test();..  
5eb0: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
5ec0: 5f 74 65 73 74 28 32 35 30 2c 20 22 4f 6e 65 20  _test(250, "One 
5ed0: 62 69 67 20 55 50 44 41 54 45 20 6f 66 20 74 68  big UPDATE of th
5ee0: 65 20 77 68 6f 6c 65 20 25 64 2d 72 6f 77 20 74  e whole %d-row t
5ef0: 61 62 6c 65 22 2c 20 73 7a 29 3b 0a 20 20 73 70  able", sz);.  sp
5f00: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 55  eedtest1_exec("U
5f10: 50 44 41 54 45 20 74 32 20 53 45 54 20 64 3d 62  PDATE t2 SET d=b
5f20: 2a 34 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  *4");.  speedtes
5f30: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
5f40: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65  .  speedtest1_be
5f50: 67 69 6e 5f 74 65 73 74 28 32 36 30 2c 20 22 51  gin_test(260, "Q
5f60: 75 65 72 79 20 61 64 64 65 64 20 63 6f 6c 75 6d  uery added colum
5f70: 6e 20 61 66 74 65 72 20 66 69 6c 6c 69 6e 67 22  n after filling"
5f80: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
5f90: 65 78 65 63 28 22 53 45 4c 45 43 54 20 73 75 6d  exec("SELECT sum
5fa0: 28 64 29 20 46 52 4f 4d 20 74 32 22 29 3b 0a 20  (d) FROM t2");. 
5fb0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
5fc0: 74 65 73 74 28 29 3b 0a 0a 0a 0a 20 20 6e 20 3d  test();....  n =
5fd0: 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65   sz/5;.  speedte
5fe0: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32  st1_begin_test(2
5ff0: 37 30 2c 20 22 25 64 20 44 45 4c 45 54 45 73 2c  70, "%d DELETEs,
6000: 20 6e 75 6d 65 72 69 63 20 42 45 54 57 45 45 4e   numeric BETWEEN
6010: 2c 20 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a  , indexed", n);.
6020: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
6030: 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70  c("BEGIN");.  sp
6040: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
6050: 28 0a 20 20 20 20 22 44 45 4c 45 54 45 20 46 52  (.    "DELETE FR
6060: 4f 4d 20 74 32 20 57 48 45 52 45 20 62 20 42 45  OM t2 WHERE b BE
6070: 54 57 45 45 4e 20 3f 31 20 41 4e 44 20 3f 32 3b  TWEEN ?1 AND ?2;
6080: 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20 6e   -- %d times", n
6090: 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b  .  );.  for(i=1;
60a0: 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<=n; i++){.   
60b0: 20 78 31 20 3d 20 73 70 65 65 64 74 65 73 74 31   x1 = speedtest1
60c0: 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78 62 20 2b  _random()%maxb +
60d0: 20 31 3b 0a 20 20 20 20 78 32 20 3d 20 73 70 65   1;.    x2 = spe
60e0: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
60f0: 25 31 30 20 2b 20 73 7a 2f 35 30 30 30 20 2b 20  %10 + sz/5000 + 
6100: 78 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  x1;.    sqlite3_
6110: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
6120: 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73 71  , 1, x1);.    sq
6130: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
6140: 2e 70 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b 0a  .pStmt, 2, x2);.
6150: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
6160: 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  un();.  }.  spee
6170: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d  dtest1_exec("COM
6180: 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65  MIT");.  speedte
6190: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
61a0: 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70  ..  n = sz;.  sp
61b0: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
61c0: 65 73 74 28 32 38 30 2c 20 22 25 64 20 44 45 4c  est(280, "%d DEL
61d0: 45 54 45 73 20 6f 66 20 69 6e 64 69 76 69 64 75  ETEs of individu
61e0: 61 6c 20 72 6f 77 73 22 2c 20 6e 29 3b 0a 20 20  al rows", n);.  
61f0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
6200: 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65  "BEGIN");.  spee
6210: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
6220: 20 20 20 20 22 44 45 4c 45 54 45 20 46 52 4f 4d      "DELETE FROM
6230: 20 74 33 20 57 48 45 52 45 20 61 3d 3f 31 3b 20   t3 WHERE a=?1; 
6240: 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a  -- %d times", n.
6250: 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20    );.  for(i=1; 
6260: 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  i<=n; i++){.    
6270: 78 31 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f  x1 = speedtest1_
6280: 72 61 6e 64 6f 6d 28 29 25 73 7a 20 2b 20 31 3b  random()%sz + 1;
6290: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
62a0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
62b0: 2c 20 78 31 29 3b 0a 20 20 20 20 73 70 65 65 64  , x1);.    speed
62c0: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d  test1_run();.  }
62d0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
62e0: 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20  ec("COMMIT");.  
62f0: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
6300: 65 73 74 28 29 3b 0a 0a 0a 20 20 73 70 65 65 64  est();...  speed
6310: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
6320: 28 32 39 30 2c 20 22 52 65 66 69 6c 6c 20 74 77  (290, "Refill tw
6330: 6f 20 25 64 2d 72 6f 77 20 74 61 62 6c 65 73 20  o %d-row tables 
6340: 75 73 69 6e 67 20 52 45 50 4c 41 43 45 22 2c 20  using REPLACE", 
6350: 73 7a 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  sz);.  speedtest
6360: 31 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20  1_exec("REPLACE 
6370: 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 29 20 53  INTO t2(a,b,c) S
6380: 45 4c 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d  ELECT a,b,c FROM
6390: 20 74 31 22 29 3b 0a 20 20 73 70 65 65 64 74 65   t1");.  speedte
63a0: 73 74 31 5f 65 78 65 63 28 22 52 45 50 4c 41 43  st1_exec("REPLAC
63b0: 45 20 49 4e 54 4f 20 74 33 28 61 2c 62 2c 63 29  E INTO t3(a,b,c)
63c0: 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20 46 52   SELECT a,b,c FR
63d0: 4f 4d 20 74 31 22 29 3b 0a 20 20 73 70 65 65 64  OM t1");.  speed
63e0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
63f0: 3b 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  ;..  speedtest1_
6400: 62 65 67 69 6e 5f 74 65 73 74 28 33 30 30 2c 20  begin_test(300, 
6410: 22 52 65 66 69 6c 6c 20 61 20 25 64 2d 72 6f 77  "Refill a %d-row
6420: 20 74 61 62 6c 65 20 75 73 69 6e 67 20 28 62 26   table using (b&
6430: 31 29 3d 3d 28 61 26 31 29 22 2c 20 73 7a 29 3b  1)==(a&1)", sz);
6440: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
6450: 65 63 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  ec("DELETE FROM 
6460: 74 32 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65  t2;");.  speedte
6470: 73 74 31 5f 65 78 65 63 28 22 49 4e 53 45 52 54  st1_exec("INSERT
6480: 20 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 29 5c   INTO t2(a,b,c)\
6490: 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n".             
64a0: 20 20 20 20 20 22 20 53 45 4c 45 43 54 20 61 2c       " SELECT a,
64b0: 62 2c 63 20 46 52 4f 4d 20 74 31 20 20 57 48 45  b,c FROM t1  WHE
64c0: 52 45 20 28 62 26 31 29 3d 3d 28 61 26 31 29 3b  RE (b&1)==(a&1);
64d0: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
64e0: 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 49 4e  _exec("INSERT IN
64f0: 54 4f 20 74 32 28 61 2c 62 2c 63 29 5c 6e 22 0a  TO t2(a,b,c)\n".
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6510: 20 20 22 20 53 45 4c 45 43 54 20 61 2c 62 2c 63    " SELECT a,b,c
6520: 20 46 52 4f 4d 20 74 31 20 20 57 48 45 52 45 20   FROM t1  WHERE 
6530: 28 62 26 31 29 3c 3e 28 61 26 31 29 3b 22 29 3b  (b&1)<>(a&1);");
6540: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
6550: 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20  d_test();...  n 
6560: 3d 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74  = sz/5;.  speedt
6570: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
6580: 33 31 30 2c 20 22 25 64 20 66 6f 75 72 2d 77 61  310, "%d four-wa
6590: 79 73 20 6a 6f 69 6e 73 22 2c 20 6e 29 3b 0a 20  ys joins", n);. 
65a0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
65b0: 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65  ("BEGIN");.  spe
65c0: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
65d0: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 74 31 2e  .    "SELECT t1.
65e0: 63 20 46 52 4f 4d 20 74 31 2c 20 74 32 2c 20 74  c FROM t1, t2, t
65f0: 33 2c 20 74 34 5c 6e 22 0a 20 20 20 20 22 20 57  3, t4\n".    " W
6600: 48 45 52 45 20 74 34 2e 61 20 42 45 54 57 45 45  HERE t4.a BETWEE
6610: 4e 20 3f 31 20 41 4e 44 20 3f 32 5c 6e 22 0a 20  N ?1 AND ?2\n". 
6620: 20 20 20 22 20 20 20 41 4e 44 20 74 33 2e 61 3d     "   AND t3.a=
6630: 74 34 2e 62 5c 6e 22 0a 20 20 20 20 22 20 20 20  t4.b\n".    "   
6640: 41 4e 44 20 74 32 2e 61 3d 74 33 2e 62 5c 6e 22  AND t2.a=t3.b\n"
6650: 0a 20 20 20 20 22 20 20 20 41 4e 44 20 74 31 2e  .    "   AND t1.
6660: 63 3d 74 32 2e 63 22 0a 20 20 29 3b 0a 20 20 66  c=t2.c".  );.  f
6670: 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b  or(i=1; i<=n; i+
6680: 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 70 65  +){.    x1 = spe
6690: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
66a0: 25 73 7a 20 2b 20 31 3b 0a 20 20 20 20 78 32 20  %sz + 1;.    x2 
66b0: 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e  = speedtest1_ran
66c0: 64 6f 6d 28 29 25 31 30 20 2b 20 78 31 20 2b 20  dom()%10 + x1 + 
66d0: 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  4;.    sqlite3_b
66e0: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
66f0: 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73 71 6c   1, x1);.    sql
6700: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
6710: 70 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b 0a 20  pStmt, 2, x2);. 
6720: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
6730: 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  n();.  }.  speed
6740: 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d  test1_exec("COMM
6750: 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  IT");.  speedtes
6760: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
6770: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
6780: 69 6e 5f 74 65 73 74 28 33 32 30 2c 20 22 73 75  in_test(320, "su
6790: 62 71 75 65 72 79 20 69 6e 20 72 65 73 75 6c 74  bquery in result
67a0: 20 73 65 74 22 2c 20 6e 29 3b 0a 20 20 73 70 65   set", n);.  spe
67b0: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
67c0: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73 75 6d  .    "SELECT sum
67d0: 28 61 29 2c 20 6d 61 78 28 63 29 2c 5c 6e 22 0a  (a), max(c),\n".
67e0: 20 20 20 20 22 20 20 20 20 20 20 20 61 76 67 28      "       avg(
67f0: 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  (SELECT a FROM t
6800: 32 20 57 48 45 52 45 20 35 2b 74 32 2e 62 3d 74  2 WHERE 5+t2.b=t
6810: 31 2e 62 29 20 41 4e 44 20 72 6f 77 69 64 3c 3f  1.b) AND rowid<?
6820: 31 29 2c 20 6d 61 78 28 63 29 5c 6e 22 0a 20 20  1), max(c)\n".  
6830: 20 20 22 20 46 52 4f 4d 20 74 31 20 57 48 45 52    " FROM t1 WHER
6840: 45 20 72 6f 77 69 64 3c 3f 31 3b 22 0a 20 20 29  E rowid<?1;".  )
6850: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ;.  sqlite3_bind
6860: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c  _int(g.pStmt, 1,
6870: 20 65 73 74 5f 73 71 75 61 72 65 5f 72 6f 6f 74   est_square_root
6880: 28 67 2e 73 7a 54 65 73 74 29 2a 35 30 29 3b 0a  (g.szTest)*50);.
6890: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
68a0: 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ();.  speedtest1
68b0: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20  _end_test();..  
68c0: 73 7a 20 3d 20 6e 20 3d 20 67 2e 73 7a 54 65 73  sz = n = g.szTes
68d0: 74 2a 37 30 30 3b 0a 20 20 7a 4e 75 6d 5b 30 5d  t*700;.  zNum[0]
68e0: 20 3d 20 30 3b 0a 20 20 6d 61 78 62 20 3d 20 72   = 0;.  maxb = r
68f0: 6f 75 6e 64 75 70 5f 61 6c 6c 6f 6e 65 73 28 73  oundup_allones(s
6900: 7a 2f 33 29 3b 0a 20 20 73 70 65 65 64 74 65 73  z/3);.  speedtes
6910: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 34 30  t1_begin_test(40
6920: 30 2c 20 22 25 64 20 52 45 50 4c 41 43 45 20 6f  0, "%d REPLACE o
6930: 70 73 20 6f 6e 20 61 6e 20 49 50 4b 22 2c 20 6e  ps on an IPK", n
6940: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
6950: 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20  exec("BEGIN");. 
6960: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
6970: 28 22 43 52 45 41 54 45 25 73 20 54 41 42 4c 45  ("CREATE%s TABLE
6980: 20 74 35 28 61 20 49 4e 54 45 47 45 52 20 50 52   t5(a INTEGER PR
6990: 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 25 73 29  IMARY KEY, b %s)
69a0: 3b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ;",.            
69b0: 20 20 20 20 20 20 69 73 54 65 6d 70 28 39 29 2c        isTemp(9),
69c0: 20 67 2e 7a 4e 4e 29 3b 0a 20 20 73 70 65 65 64   g.zNN);.  speed
69d0: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 52  test1_prepare("R
69e0: 45 50 4c 41 43 45 20 49 4e 54 4f 20 74 35 20 56  EPLACE INTO t5 V
69f0: 41 4c 55 45 53 28 3f 31 2c 3f 32 29 3b 20 2d 2d  ALUES(?1,?2); --
6a00: 20 20 25 64 20 74 69 6d 65 73 22 2c 6e 29 3b 0a    %d times",n);.
6a10: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b    for(i=1; i<=n;
6a20: 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20   i++){.    x1 = 
6a30: 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b  swizzle(i,maxb);
6a40: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
6a50: 6e 75 6d 62 65 72 6e 61 6d 65 28 69 2c 20 7a 4e  numbername(i, zN
6a60: 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29  um, sizeof(zNum)
6a70: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
6a80: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
6a90: 20 31 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e 74   1, (sqlite3_int
6aa0: 36 34 29 78 31 29 3b 0a 20 20 20 20 73 71 6c 69  64)x1);.    sqli
6ab0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e  te3_bind_text(g.
6ac0: 70 53 74 6d 74 2c 20 32 2c 20 7a 4e 75 6d 2c 20  pStmt, 2, zNum, 
6ad0: 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  -1, SQLITE_STATI
6ae0: 43 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73  C);.    speedtes
6af0: 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20  t1_run();.  }.  
6b00: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
6b10: 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65  "COMMIT");.  spe
6b20: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
6b30: 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ();.  speedtest1
6b40: 5f 62 65 67 69 6e 5f 74 65 73 74 28 34 31 30 2c  _begin_test(410,
6b50: 20 22 25 64 20 53 45 4c 45 43 54 53 20 6f 6e 20   "%d SELECTS on 
6b60: 61 6e 20 49 50 4b 22 2c 20 6e 29 3b 0a 20 20 73  an IPK", n);.  s
6b70: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
6b80: 65 28 22 53 45 4c 45 43 54 20 62 20 46 52 4f 4d  e("SELECT b FROM
6b90: 20 74 35 20 57 48 45 52 45 20 61 3d 3f 31 3b 20   t5 WHERE a=?1; 
6ba0: 2d 2d 20 20 25 64 20 74 69 6d 65 73 22 2c 6e 29  --  %d times",n)
6bb0: 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d  ;.  for(i=1; i<=
6bc0: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20  n; i++){.    x1 
6bd0: 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62  = swizzle(i,maxb
6be0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
6bf0: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
6c00: 20 31 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e 74   1, (sqlite3_int
6c10: 36 34 29 78 31 29 3b 0a 20 20 20 20 73 70 65 65  64)x1);.    spee
6c20: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
6c30: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
6c40: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73 7a  nd_test();..  sz
6c50: 20 3d 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a   = n = g.szTest*
6c60: 37 30 30 3b 0a 20 20 7a 4e 75 6d 5b 30 5d 20 3d  700;.  zNum[0] =
6c70: 20 30 3b 0a 20 20 6d 61 78 62 20 3d 20 72 6f 75   0;.  maxb = rou
6c80: 6e 64 75 70 5f 61 6c 6c 6f 6e 65 73 28 73 7a 2f  ndup_allones(sz/
6c90: 33 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  3);.  speedtest1
6ca0: 5f 62 65 67 69 6e 5f 74 65 73 74 28 35 30 30 2c  _begin_test(500,
6cb0: 20 22 25 64 20 52 45 50 4c 41 43 45 20 6f 6e 20   "%d REPLACE on 
6cc0: 54 45 58 54 20 50 4b 22 2c 20 6e 29 3b 0a 20 20  TEXT PK", n);.  
6cd0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
6ce0: 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65  "BEGIN");.  spee
6cf0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 52 45  dtest1_exec("CRE
6d00: 41 54 45 25 73 20 54 41 42 4c 45 20 74 36 28 61  ATE%s TABLE t6(a
6d10: 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
6d20: 59 2c 20 62 20 25 73 29 25 73 3b 22 2c 0a 20 20  Y, b %s)%s;",.  
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d40: 69 73 54 65 6d 70 28 39 29 2c 20 67 2e 7a 4e 4e  isTemp(9), g.zNN
6d50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
6d60: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76      sqlite3_libv
6d70: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3e  ersion_number()>
6d80: 3d 33 30 30 38 30 30 32 20 3f 20 22 57 49 54 48  =3008002 ? "WITH
6d90: 4f 55 54 20 52 4f 57 49 44 22 20 3a 20 22 22 29  OUT ROWID" : "")
6da0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70  ;.  speedtest1_p
6db0: 72 65 70 61 72 65 28 22 52 45 50 4c 41 43 45 20  repare("REPLACE 
6dc0: 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 3f  INTO t6 VALUES(?
6dd0: 31 2c 3f 32 29 3b 20 2d 2d 20 20 25 64 20 74 69  1,?2); --  %d ti
6de0: 6d 65 73 22 2c 6e 29 3b 0a 20 20 66 6f 72 28 69  mes",n);.  for(i
6df0: 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a  =1; i<=n; i++){.
6e00: 20 20 20 20 78 31 20 3d 20 73 77 69 7a 7a 6c 65      x1 = swizzle
6e10: 28 69 2c 6d 61 78 62 29 3b 0a 20 20 20 20 73 70  (i,maxb);.    sp
6e20: 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e  eedtest1_numbern
6e30: 61 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c 20 73 69  ame(x1, zNum, si
6e40: 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20  zeof(zNum));.   
6e50: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
6e60: 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 69 29  t(g.pStmt, 2, i)
6e70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
6e80: 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74 2c  nd_text(g.pStmt,
6e90: 20 31 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51   1, zNum, -1, SQ
6ea0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
6eb0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
6ec0: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
6ed0: 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49  est1_exec("COMMI
6ee0: 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  T");.  speedtest
6ef0: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 20 20  1_end_test();.  
6f00: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
6f10: 5f 74 65 73 74 28 35 31 30 2c 20 22 25 64 20 53  _test(510, "%d S
6f20: 45 4c 45 43 54 53 20 6f 6e 20 61 20 54 45 58 54  ELECTS on a TEXT
6f30: 20 50 4b 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65   PK", n);.  spee
6f40: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22  dtest1_prepare("
6f50: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 36  SELECT b FROM t6
6f60: 20 57 48 45 52 45 20 61 3d 3f 31 3b 20 2d 2d 20   WHERE a=?1; -- 
6f70: 20 25 64 20 74 69 6d 65 73 22 2c 6e 29 3b 0a 20   %d times",n);. 
6f80: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20   for(i=1; i<=n; 
6f90: 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73  i++){.    x1 = s
6fa0: 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b 0a  wizzle(i,maxb);.
6fb0: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 6e      speedtest1_n
6fc0: 75 6d 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e  umbername(x1, zN
6fd0: 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29  um, sizeof(zNum)
6fe0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
6ff0: 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74  ind_text(g.pStmt
7000: 2c 20 31 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53  , 1, zNum, -1, S
7010: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
7020: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
7030: 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  n();.  }.  speed
7040: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
7050: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
7060: 65 67 69 6e 5f 74 65 73 74 28 35 32 30 2c 20 22  egin_test(520, "
7070: 25 64 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e  %d SELECT DISTIN
7080: 43 54 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  CT", n);.  speed
7090: 74 65 73 74 31 5f 65 78 65 63 28 22 53 45 4c 45  test1_exec("SELE
70a0: 43 54 20 44 49 53 54 49 4e 43 54 20 62 20 46 52  CT DISTINCT b FR
70b0: 4f 4d 20 74 35 3b 22 29 3b 0a 20 20 73 70 65 65  OM t5;");.  spee
70c0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 53 45 4c  dtest1_exec("SEL
70d0: 45 43 54 20 44 49 53 54 49 4e 43 54 20 62 20 46  ECT DISTINCT b F
70e0: 52 4f 4d 20 74 36 3b 22 29 3b 0a 20 20 73 70 65  ROM t6;");.  spe
70f0: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
7100: 28 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74 65 73  ();...  speedtes
7110: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 39 38  t1_begin_test(98
7120: 30 2c 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67  0, "PRAGMA integ
7130: 72 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a 20 20  rity_check");.  
7140: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
7150: 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  "PRAGMA integrit
7160: 79 5f 63 68 65 63 6b 22 29 3b 0a 20 20 73 70 65  y_check");.  spe
7170: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
7180: 28 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74 65 73  ();...  speedtes
7190: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 39 39  t1_begin_test(99
71a0: 30 2c 20 22 41 4e 41 4c 59 5a 45 22 29 3b 0a 20  0, "ANALYZE");. 
71b0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
71c0: 28 22 41 4e 41 4c 59 5a 45 22 29 3b 0a 20 20 73  ("ANALYZE");.  s
71d0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
71e0: 73 74 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  st();.}../*.** A
71f0: 20 74 65 73 74 73 65 74 20 66 6f 72 20 63 6f 6d   testset for com
7200: 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
7210: 73 69 6f 6e 73 2e 20 20 54 68 69 73 20 65 78 65  sions.  This exe
7220: 72 63 69 73 65 73 20 63 6f 64 65 0a 2a 2a 20 66  rcises code.** f
7230: 6f 72 20 76 69 65 77 73 2c 20 73 75 62 71 75 65  or views, subque
7240: 72 69 65 73 2c 20 63 6f 2d 72 6f 75 74 69 6e 65  ries, co-routine
7250: 73 2c 20 65 74 63 2e 0a 2a 2f 0a 76 6f 69 64 20  s, etc..*/.void 
7260: 74 65 73 74 73 65 74 5f 63 74 65 28 76 6f 69 64  testset_cte(void
7270: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ){.  static cons
7280: 74 20 63 68 61 72 20 2a 61 7a 50 75 7a 7a 6c 65  t char *azPuzzle
7290: 5b 5d 20 3d 20 7b 0a 20 20 20 20 2f 2a 20 45 61  [] = {.    /* Ea
72a0: 73 79 20 2a 2f 0a 20 20 20 20 22 35 33 34 2e 2e  sy */.    "534..
72b0: 2e 39 2e 2e 22 0a 20 20 20 20 22 36 37 2e 31 39  .9..".    "67.19
72c0: 35 2e 2e 2e 22 0a 20 20 20 20 22 2e 39 38 2e 2e  5...".    ".98..
72d0: 2e 2e 36 2e 22 0a 20 20 20 20 22 38 2e 2e 2e 36  ..6.".    "8...6
72e0: 2e 2e 2e 33 22 0a 20 20 20 20 22 34 2e 2e 38 2e  ...3".    "4..8.
72f0: 33 2e 2e 31 22 0a 20 20 20 20 22 2e 2e 2e 2e 32  3..1".    "....2
7300: 2e 2e 2e 36 22 0a 20 20 20 20 22 2e 36 2e 2e 2e  ...6".    ".6...
7310: 2e 32 38 2e 22 0a 20 20 20 20 22 2e 2e 2e 34 31  .28.".    "...41
7320: 39 2e 2e 35 22 0a 20 20 20 20 22 2e 2e 2e 32 38  9..5".    "...28
7330: 2e 2e 37 39 22 2c 0a 0a 20 20 20 20 2f 2a 20 4d  ..79",..    /* M
7340: 65 64 69 75 6d 20 2a 2f 0a 20 20 20 20 22 35 33  edium */.    "53
7350: 2e 2e 2e 2e 39 2e 2e 22 0a 20 20 20 20 22 36 2e  ....9..".    "6.
7360: 2e 31 39 35 2e 2e 2e 22 0a 20 20 20 20 22 2e 39  .195...".    ".9
7370: 38 2e 2e 2e 2e 36 2e 22 0a 20 20 20 20 22 38 2e  8....6.".    "8.
7380: 2e 2e 36 2e 2e 2e 33 22 0a 20 20 20 20 22 34 2e  ..6...3".    "4.
7390: 2e 38 2e 33 2e 2e 31 22 0a 20 20 20 20 22 2e 2e  .8.3..1".    "..
73a0: 2e 2e 32 2e 2e 2e 36 22 0a 20 20 20 20 22 2e 36  ..2...6".    ".6
73b0: 2e 2e 2e 2e 32 38 2e 22 0a 20 20 20 20 22 2e 2e  ....28.".    "..
73c0: 2e 34 31 39 2e 2e 35 22 0a 20 20 20 20 22 2e 2e  .419..5".    "..
73d0: 2e 2e 38 2e 2e 37 39 22 2c 0a 0a 20 20 20 20 2f  ..8..79",..    /
73e0: 2a 20 48 61 72 64 20 2a 2f 0a 20 20 20 20 22 35  * Hard */.    "5
73f0: 33 2e 2e 2e 2e 2e 2e 2e 22 0a 20 20 20 20 22 36  3.......".    "6
7400: 2e 2e 31 39 35 2e 2e 2e 22 0a 20 20 20 20 22 2e  ..195...".    ".
7410: 39 38 2e 2e 2e 2e 36 2e 22 0a 20 20 20 20 22 38  98....6.".    "8
7420: 2e 2e 2e 36 2e 2e 2e 33 22 0a 20 20 20 20 22 34  ...6...3".    "4
7430: 2e 2e 38 2e 33 2e 2e 31 22 0a 20 20 20 20 22 2e  ..8.3..1".    ".
7440: 2e 2e 2e 32 2e 2e 2e 36 22 0a 20 20 20 20 22 2e  ...2...6".    ".
7450: 36 2e 2e 2e 2e 32 38 2e 22 0a 20 20 20 20 22 2e  6....28.".    ".
7460: 2e 2e 34 31 39 2e 2e 35 22 0a 20 20 20 20 22 2e  ..419..5".    ".
7470: 2e 2e 2e 38 2e 2e 37 39 22 2c 0a 20 20 7d 3b 0a  ...8..79",.  };.
7480: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50    const char *zP
7490: 75 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72 53 70  uz;.  double rSp
74a0: 61 63 69 6e 67 3b 0a 20 20 69 6e 74 20 6e 45 6c  acing;.  int nEl
74b0: 65 6d 3b 0a 0a 20 20 69 66 28 20 67 2e 73 7a 54  em;..  if( g.szT
74c0: 65 73 74 3c 32 35 20 29 7b 0a 20 20 20 20 7a 50  est<25 ){.    zP
74d0: 75 7a 20 3d 20 61 7a 50 75 7a 7a 6c 65 5b 30 5d  uz = azPuzzle[0]
74e0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 67 2e  ;.  }else if( g.
74f0: 73 7a 54 65 73 74 3c 37 30 20 29 7b 0a 20 20 20  szTest<70 ){.   
7500: 20 7a 50 75 7a 20 3d 20 61 7a 50 75 7a 7a 6c 65   zPuz = azPuzzle
7510: 5b 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  [1];.  }else{.  
7520: 20 20 7a 50 75 7a 20 3d 20 61 7a 50 75 7a 7a 6c    zPuz = azPuzzl
7530: 65 5b 32 5d 3b 0a 20 20 7d 0a 20 20 73 70 65 65  e[2];.  }.  spee
7540: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
7550: 74 28 31 30 30 2c 20 22 53 75 64 6f 6b 75 20 77  t(100, "Sudoku w
7560: 69 74 68 20 72 65 63 75 72 73 69 76 65 20 27 64  ith recursive 'd
7570: 69 67 69 74 73 27 22 29 3b 0a 20 20 73 70 65 65  igits'");.  spee
7580: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
7590: 20 20 20 20 22 57 49 54 48 20 52 45 43 55 52 53      "WITH RECURS
75a0: 49 56 45 5c 6e 22 0a 20 20 20 20 22 20 20 69 6e  IVE\n".    "  in
75b0: 70 75 74 28 73 75 64 29 20 41 53 20 28 56 41 4c  put(sud) AS (VAL
75c0: 55 45 53 28 3f 31 29 29 2c 5c 6e 22 0a 20 20 20  UES(?1)),\n".   
75d0: 20 22 20 20 64 69 67 69 74 73 28 7a 2c 6c 70 29   "  digits(z,lp)
75e0: 20 41 53 20 28 5c 6e 22 0a 20 20 20 20 22 20 20   AS (\n".    "  
75f0: 20 20 56 41 4c 55 45 53 28 27 31 27 2c 20 31 29    VALUES('1', 1)
7600: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 55 4e 49  \n".    "    UNI
7610: 4f 4e 20 41 4c 4c 5c 6e 22 0a 20 20 20 20 22 20  ON ALL\n".    " 
7620: 20 20 20 53 45 4c 45 43 54 20 43 41 53 54 28 6c     SELECT CAST(l
7630: 70 2b 31 20 41 53 20 54 45 58 54 29 2c 20 6c 70  p+1 AS TEXT), lp
7640: 2b 31 20 46 52 4f 4d 20 64 69 67 69 74 73 20 57  +1 FROM digits W
7650: 48 45 52 45 20 6c 70 3c 39 5c 6e 22 0a 20 20 20  HERE lp<9\n".   
7660: 20 22 20 20 29 2c 5c 6e 22 0a 20 20 20 20 22 20   "  ),\n".    " 
7670: 20 78 28 73 2c 20 69 6e 64 29 20 41 53 20 28 5c   x(s, ind) AS (\
7680: 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45 4c 45  n".    "    SELE
7690: 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75  CT sud, instr(su
76a0: 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70  d, '.') FROM inp
76b0: 75 74 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 55  ut\n".    "    U
76c0: 4e 49 4f 4e 20 41 4c 4c 5c 6e 22 0a 20 20 20 20  NION ALL\n".    
76d0: 22 20 20 20 20 53 45 4c 45 43 54 5c 6e 22 0a 20  "    SELECT\n". 
76e0: 20 20 20 22 20 20 20 20 20 20 73 75 62 73 74 72     "      substr
76f0: 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c  (s, 1, ind-1) ||
7700: 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20   z || substr(s, 
7710: 69 6e 64 2b 31 29 2c 5c 6e 22 0a 20 20 20 20 22  ind+1),\n".    "
7720: 20 20 20 20 20 20 69 6e 73 74 72 28 20 73 75 62        instr( sub
7730: 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29  str(s, 1, ind-1)
7740: 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28   || z || substr(
7750: 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29  s, ind+1), '.' )
7760: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 46 52  \n".    "     FR
7770: 4f 4d 20 78 2c 20 64 69 67 69 74 73 20 41 53 20  OM x, digits AS 
7780: 7a 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 57 48  z\n".    "    WH
7790: 45 52 45 20 69 6e 64 3e 30 5c 6e 22 0a 20 20 20  ERE ind>0\n".   
77a0: 20 22 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20   "      AND NOT 
77b0: 45 58 49 53 54 53 20 28 5c 6e 22 0a 20 20 20 20  EXISTS (\n".    
77c0: 22 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c  "            SEL
77d0: 45 43 54 20 31 5c 6e 22 0a 20 20 20 20 22 20 20  ECT 1\n".    "  
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d              FROM
77f0: 20 64 69 67 69 74 73 20 41 53 20 6c 70 5c 6e 22   digits AS lp\n"
7800: 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20  .    "          
7810: 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73     WHERE z.z = s
7820: 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31  ubstr(s, ((ind-1
7830: 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 5c  )/9)*9 + lp, 1)\
7840: 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20  n".    "        
7850: 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d          OR z.z =
7860: 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
7870: 2d 31 29 25 25 39 29 20 2b 20 28 6c 70 2d 31 29  -1)%%9) + (lp-1)
7880: 2a 39 20 2b 20 31 2c 20 31 29 5c 6e 22 0a 20 20  *9 + 1, 1)\n".  
7890: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
78a0: 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73     OR z.z = subs
78b0: 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f  tr(s, (((ind-1)/
78c0: 33 29 20 25 25 20 33 29 20 2a 20 33 5c 6e 22 0a  3) %% 3) * 3\n".
78d0: 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20      "           
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 28               + (
78f0: 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20 32 37  (ind-1)/27) * 27
7900: 20 2b 20 6c 70 5c 6e 22 0a 20 20 20 20 22 20 20   + lp\n".    "  
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20        + ((lp-1) 
7930: 2f 20 33 29 20 2a 20 36 2c 20 31 29 5c 6e 22 0a  / 3) * 6, 1)\n".
7940: 20 20 20 20 22 20 20 20 20 20 20 20 20 20 29 5c      "         )\
7950: 6e 22 0a 20 20 20 20 22 20 20 29 5c 6e 22 0a 20  n".    "  )\n". 
7960: 20 20 20 22 53 45 4c 45 43 54 20 73 20 46 52 4f     "SELECT s FRO
7970: 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d 30 3b  M x WHERE ind=0;
7980: 22 0a 20 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ".  );.  sqlite3
7990: 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74  _bind_text(g.pSt
79a0: 6d 74 2c 20 31 2c 20 7a 50 75 7a 2c 20 2d 31 2c  mt, 1, zPuz, -1,
79b0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
79c0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75  .  speedtest1_ru
79d0: 6e 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  n();.  speedtest
79e0: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20  1_end_test();.. 
79f0: 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69   speedtest1_begi
7a00: 6e 5f 74 65 73 74 28 32 30 30 2c 20 22 53 75 64  n_test(200, "Sud
7a10: 6f 6b 75 20 77 69 74 68 20 56 41 4c 55 45 53 20  oku with VALUES 
7a20: 27 64 69 67 69 74 73 27 22 29 3b 0a 20 20 73 70  'digits'");.  sp
7a30: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
7a40: 28 0a 20 20 20 20 22 57 49 54 48 20 52 45 43 55  (.    "WITH RECU
7a50: 52 53 49 56 45 5c 6e 22 0a 20 20 20 20 22 20 20  RSIVE\n".    "  
7a60: 69 6e 70 75 74 28 73 75 64 29 20 41 53 20 28 56  input(sud) AS (V
7a70: 41 4c 55 45 53 28 3f 31 29 29 2c 5c 6e 22 0a 20  ALUES(?1)),\n". 
7a80: 20 20 20 22 20 20 64 69 67 69 74 73 28 7a 2c 6c     "  digits(z,l
7a90: 70 29 20 41 53 20 28 56 41 4c 55 45 53 28 27 31  p) AS (VALUES('1
7aa0: 27 2c 31 29 2c 28 27 32 27 2c 32 29 2c 28 27 33  ',1),('2',2),('3
7ab0: 27 2c 33 29 2c 28 27 34 27 2c 34 29 2c 28 27 35  ',3),('4',4),('5
7ac0: 27 2c 35 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20  ',5),\n".    "  
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 20 20 28 27 36 27 2c 36 29 2c 28         ('6',6),(
7af0: 27 37 27 2c 37 29 2c 28 27 38 27 2c 38 29 2c 28  '7',7),('8',8),(
7b00: 27 39 27 2c 39 29 29 2c 5c 6e 22 0a 20 20 20 20  '9',9)),\n".    
7b10: 22 20 20 78 28 73 2c 20 69 6e 64 29 20 41 53 20  "  x(s, ind) AS 
7b20: 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45  (\n".    "    SE
7b30: 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28  LECT sud, instr(
7b40: 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69  sud, '.') FROM i
7b50: 6e 70 75 74 5c 6e 22 0a 20 20 20 20 22 20 20 20  nput\n".    "   
7b60: 20 55 4e 49 4f 4e 20 41 4c 4c 5c 6e 22 0a 20 20   UNION ALL\n".  
7b70: 20 20 22 20 20 20 20 53 45 4c 45 43 54 5c 6e 22    "    SELECT\n"
7b80: 0a 20 20 20 20 22 20 20 20 20 20 20 73 75 62 73  .    "      subs
7b90: 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20  tr(s, 1, ind-1) 
7ba0: 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73  || z || substr(s
7bb0: 2c 20 69 6e 64 2b 31 29 2c 5c 6e 22 0a 20 20 20  , ind+1),\n".   
7bc0: 20 22 20 20 20 20 20 20 69 6e 73 74 72 28 20 73   "      instr( s
7bd0: 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
7be0: 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
7bf0: 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27  r(s, ind+1), '.'
7c00: 20 29 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20   )\n".    "     
7c10: 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73 20 41  FROM x, digits A
7c20: 53 20 7a 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  S z\n".    "    
7c30: 57 48 45 52 45 20 69 6e 64 3e 30 5c 6e 22 0a 20  WHERE ind>0\n". 
7c40: 20 20 20 22 20 20 20 20 20 20 41 4e 44 20 4e 4f     "      AND NO
7c50: 54 20 45 58 49 53 54 53 20 28 5c 6e 22 0a 20 20  T EXISTS (\n".  
7c60: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 53    "            S
7c70: 45 4c 45 43 54 20 31 5c 6e 22 0a 20 20 20 20 22  ELECT 1\n".    "
7c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52                FR
7c90: 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c 70 5c  OM digits AS lp\
7ca0: 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20  n".    "        
7cb0: 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d       WHERE z.z =
7cc0: 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
7cd0: 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31  -1)/9)*9 + lp, 1
7ce0: 29 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20  )\n".    "      
7cf0: 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a            OR z.z
7d00: 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 69   = substr(s, ((i
7d10: 6e 64 2d 31 29 25 25 39 29 20 2b 20 28 6c 70 2d  nd-1)%%9) + (lp-
7d20: 31 29 2a 39 20 2b 20 31 2c 20 31 29 5c 6e 22 0a  1)*9 + 1, 1)\n".
7d30: 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20      "           
7d40: 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75       OR z.z = su
7d50: 62 73 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31  bstr(s, (((ind-1
7d60: 29 2f 33 29 20 25 25 20 33 29 20 2a 20 33 5c 6e  )/3) %% 3) * 3\n
7d70: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20  ".    "         
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b                 +
7d90: 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20   ((ind-1)/27) * 
7da0: 32 37 20 2b 20 6c 70 5c 6e 22 0a 20 20 20 20 22  27 + lp\n".    "
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dc0: 20 20 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31          + ((lp-1
7dd0: 29 20 2f 20 33 29 20 2a 20 36 2c 20 31 29 5c 6e  ) / 3) * 6, 1)\n
7de0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20  ".    "         
7df0: 29 5c 6e 22 0a 20 20 20 20 22 20 20 29 5c 6e 22  )\n".    "  )\n"
7e00: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73 20 46  .    "SELECT s F
7e10: 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d  ROM x WHERE ind=
7e20: 30 3b 22 0a 20 20 29 3b 0a 20 20 73 71 6c 69 74  0;".  );.  sqlit
7e30: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70  e3_bind_text(g.p
7e40: 53 74 6d 74 2c 20 31 2c 20 7a 50 75 7a 2c 20 2d  Stmt, 1, zPuz, -
7e50: 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  1, SQLITE_STATIC
7e60: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
7e70: 72 75 6e 28 29 3b 0a 20 20 73 70 65 65 64 74 65  run();.  speedte
7e80: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
7e90: 0a 20 20 72 53 70 61 63 69 6e 67 20 3d 20 35 2e  .  rSpacing = 5.
7ea0: 30 2f 67 2e 73 7a 54 65 73 74 3b 0a 20 20 73 70  0/g.szTest;.  sp
7eb0: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
7ec0: 65 73 74 28 33 30 30 2c 20 22 4d 61 6e 64 65 6c  est(300, "Mandel
7ed0: 62 72 6f 74 20 53 65 74 20 77 69 74 68 20 73 70  brot Set with sp
7ee0: 61 63 69 6e 67 3d 25 66 22 2c 20 72 53 70 61 63  acing=%f", rSpac
7ef0: 69 6e 67 29 3b 0a 20 20 73 70 65 65 64 74 65 73  ing);.  speedtes
7f00: 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20 22  t1_prepare(.   "
7f10: 57 49 54 48 20 52 45 43 55 52 53 49 56 45 20 5c  WITH RECURSIVE \
7f20: 6e 22 0a 20 20 20 22 20 20 78 61 78 69 73 28 78  n".   "  xaxis(x
7f30: 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 32 2e  ) AS (VALUES(-2.
7f40: 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c  0) UNION ALL SEL
7f50: 45 43 54 20 78 2b 3f 31 20 46 52 4f 4d 20 78 61  ECT x+?1 FROM xa
7f60: 78 69 73 20 57 48 45 52 45 20 78 3c 31 2e 32 29  xis WHERE x<1.2)
7f70: 2c 5c 6e 22 0a 20 20 20 22 20 20 79 61 78 69 73  ,\n".   "  yaxis
7f80: 28 79 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d  (y) AS (VALUES(-
7f90: 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53  1.0) UNION ALL S
7fa0: 45 4c 45 43 54 20 79 2b 3f 32 20 46 52 4f 4d 20  ELECT y+?2 FROM 
7fb0: 79 61 78 69 73 20 57 48 45 52 45 20 79 3c 31 2e  yaxis WHERE y<1.
7fc0: 30 29 2c 5c 6e 22 0a 20 20 20 22 20 20 6d 28 69  0),\n".   "  m(i
7fd0: 74 65 72 2c 20 63 78 2c 20 63 79 2c 20 78 2c 20  ter, cx, cy, x, 
7fe0: 79 29 20 41 53 20 28 5c 6e 22 0a 20 20 20 22 20  y) AS (\n".   " 
7ff0: 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78 2c 20     SELECT 0, x, 
8000: 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d  y, 0.0, 0.0 FROM
8010: 20 78 61 78 69 73 2c 20 79 61 78 69 73 5c 6e 22   xaxis, yaxis\n"
8020: 0a 20 20 20 22 20 20 20 20 55 4e 49 4f 4e 20 41  .   "    UNION A
8030: 4c 4c 5c 6e 22 0a 20 20 20 22 20 20 20 20 53 45  LL\n".   "    SE
8040: 4c 45 43 54 20 69 74 65 72 2b 31 2c 20 63 78 2c  LECT iter+1, cx,
8050: 20 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20 63   cy, x*x-y*y + c
8060: 78 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79 20  x, 2.0*x*y + cy 
8070: 46 52 4f 4d 20 6d 20 5c 6e 22 0a 20 20 20 22 20  FROM m \n".   " 
8080: 20 20 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b      WHERE (x*x +
8090: 20 79 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44 20   y*y) < 4.0 AND 
80a0: 69 74 65 72 3c 32 38 5c 6e 22 0a 20 20 20 22 20  iter<28\n".   " 
80b0: 20 29 2c 5c 6e 22 0a 20 20 20 22 20 20 6d 32 28   ),\n".   "  m2(
80c0: 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53  iter, cx, cy) AS
80d0: 20 28 5c 6e 22 0a 20 20 20 22 20 20 20 20 53 45   (\n".   "    SE
80e0: 4c 45 43 54 20 6d 61 78 28 69 74 65 72 29 2c 20  LECT max(iter), 
80f0: 63 78 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47 52  cx, cy FROM m GR
8100: 4f 55 50 20 42 59 20 63 78 2c 20 63 79 5c 6e 22  OUP BY cx, cy\n"
8110: 0a 20 20 20 22 20 20 29 2c 5c 6e 22 0a 20 20 20  .   "  ),\n".   
8120: 22 20 20 61 28 74 29 20 41 53 20 28 5c 6e 22 0a  "  a(t) AS (\n".
8130: 20 20 20 22 20 20 20 20 53 45 4c 45 43 54 20 67     "    SELECT g
8140: 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73 75 62  roup_concat( sub
8150: 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d  str(' .+*#', 1+m
8160: 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20 31 29  in(iter/7,4), 1)
8170: 2c 20 27 27 29 20 5c 6e 22 0a 20 20 20 22 20 20  , '') \n".   "  
8180: 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20    FROM m2 GROUP 
8190: 42 59 20 63 79 5c 6e 22 0a 20 20 20 22 20 20 29  BY cy\n".   "  )
81a0: 5c 6e 22 0a 20 20 20 22 53 45 4c 45 43 54 20 67  \n".   "SELECT g
81b0: 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69  roup_concat(rtri
81c0: 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d  m(t),x'0a') FROM
81d0: 20 61 3b 22 0a 20 20 29 3b 0a 20 20 73 71 6c 69   a;".  );.  sqli
81e0: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
81f0: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 72 53 70 61  g.pStmt, 1, rSpa
8200: 63 69 6e 67 2a 2e 30 35 29 3b 0a 20 20 73 71 6c  cing*.05);.  sql
8210: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
8220: 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 72 53 70  (g.pStmt, 2, rSp
8230: 61 63 69 6e 67 29 3b 0a 20 20 73 70 65 65 64 74  acing);.  speedt
8240: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 73 70  est1_run();.  sp
8250: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
8260: 74 28 29 3b 0a 0a 20 20 6e 45 6c 65 6d 20 3d 20  t();..  nElem = 
8270: 31 30 30 30 30 2a 67 2e 73 7a 54 65 73 74 3b 0a  10000*g.szTest;.
8280: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
8290: 69 6e 5f 74 65 73 74 28 34 30 30 2c 20 22 45 58  in_test(400, "EX
82a0: 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 6f 6e  CEPT operator on
82b0: 20 25 64 2d 65 6c 65 6d 65 6e 74 20 74 61 62 6c   %d-element tabl
82c0: 65 73 22 2c 20 6e 45 6c 65 6d 29 3b 0a 20 20 73  es", nElem);.  s
82d0: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
82e0: 65 28 0a 20 20 20 20 22 57 49 54 48 20 52 45 43  e(.    "WITH REC
82f0: 55 52 53 49 56 45 20 5c 6e 22 0a 20 20 20 20 22  URSIVE \n".    "
8300: 20 20 74 31 28 78 29 20 41 53 20 28 56 41 4c 55    t1(x) AS (VALU
8310: 45 53 28 32 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  ES(2) UNION ALL 
8320: 53 45 4c 45 43 54 20 78 2b 32 20 46 52 4f 4d 20  SELECT x+2 FROM 
8330: 74 31 20 57 48 45 52 45 20 78 3c 25 64 29 2c 5c  t1 WHERE x<%d),\
8340: 6e 22 0a 20 20 20 20 22 20 20 74 32 28 79 29 20  n".    "  t2(y) 
8350: 41 53 20 28 56 41 4c 55 45 53 28 33 29 20 55 4e  AS (VALUES(3) UN
8360: 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 79  ION ALL SELECT y
8370: 2b 33 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  +3 FROM t2 WHERE
8380: 20 79 3c 25 64 29 5c 6e 22 0a 20 20 20 20 22 53   y<%d)\n".    "S
8390: 45 4c 45 43 54 20 63 6f 75 6e 74 28 78 29 2c 20  ELECT count(x), 
83a0: 61 76 67 28 78 29 20 46 52 4f 4d 20 28 5c 6e 22  avg(x) FROM (\n"
83b0: 0a 20 20 20 20 22 20 20 53 45 4c 45 43 54 20 78  .    "  SELECT x
83c0: 20 46 52 4f 4d 20 74 31 20 45 58 43 45 50 54 20   FROM t1 EXCEPT 
83d0: 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 32  SELECT y FROM t2
83e0: 20 4f 52 44 45 52 20 42 59 20 31 5c 6e 22 0a 20   ORDER BY 1\n". 
83f0: 20 20 20 22 29 3b 22 2c 0a 20 20 20 20 6e 45 6c     ");",.    nEl
8400: 65 6d 2c 20 6e 45 6c 65 6d 0a 20 20 29 3b 0a 20  em, nElem.  );. 
8410: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
8420: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
8430: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 7d 0a 0a  end_test();..}..
8440: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
8450: 41 42 4c 45 5f 52 54 52 45 45 0a 2f 2a 20 47 65  ABLE_RTREE./* Ge
8460: 6e 65 72 61 74 65 20 74 77 6f 20 6e 75 6d 62 65  nerate two numbe
8470: 72 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  rs between 1 and
8480: 20 6d 78 2e 20 20 54 68 65 20 66 69 72 73 74 20   mx.  The first 
8490: 6e 75 6d 62 65 72 20 69 73 20 6c 65 73 73 20 74  number is less t
84a0: 68 61 6e 0a 2a 2a 20 74 68 65 20 73 65 63 6f 6e  han.** the secon
84b0: 64 2e 20 20 55 73 75 61 6c 6c 79 20 74 68 65 20  d.  Usually the 
84c0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6e 65 61 72  numbers are near
84d0: 20 65 61 63 68 20 6f 74 68 65 72 20 62 75 74 20   each other but 
84e0: 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  can sometimes.**
84f0: 20 62 65 20 66 61 72 20 61 70 61 72 74 2e 0a 2a   be far apart..*
8500: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 77  /.static void tw
8510: 6f 43 6f 6f 72 64 73 28 0a 20 20 69 6e 74 20 70  oCoords(.  int p
8520: 31 2c 20 69 6e 74 20 70 32 2c 20 20 20 20 20 20  1, int p2,      
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8540: 50 61 72 61 6d 65 74 65 72 73 20 61 64 6a 75 73  Parameters adjus
8550: 74 69 6e 67 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ting sizes */.  
8560: 75 6e 73 69 67 6e 65 64 20 6d 78 2c 20 20 20 20  unsigned mx,    
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 31 2e    /* Range of 1.
8590: 2e 6d 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  .mx */.  unsigne
85a0: 64 20 2a 70 58 30 2c 20 75 6e 73 69 67 6e 65 64  d *pX0, unsigned
85b0: 20 2a 70 58 31 20 20 20 20 20 20 2f 2a 20 4f 55   *pX1      /* OU
85c0: 54 3a 20 77 72 69 74 65 20 72 65 73 75 6c 74 73  T: write results
85d0: 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 75 6e   here */.){.  un
85e0: 73 69 67 6e 65 64 20 64 2c 20 78 30 2c 20 78 31  signed d, x0, x1
85f0: 2c 20 73 70 61 6e 3b 0a 0a 20 20 73 70 61 6e 20  , span;..  span 
8600: 3d 20 6d 78 2f 31 30 30 20 2b 20 31 3b 0a 20 20  = mx/100 + 1;.  
8610: 69 66 28 20 73 70 65 65 64 74 65 73 74 31 5f 72  if( speedtest1_r
8620: 61 6e 64 6f 6d 28 29 25 33 3d 3d 30 20 29 20 73  andom()%3==0 ) s
8630: 70 61 6e 20 2a 3d 20 70 31 3b 0a 20 20 69 66 28  pan *= p1;.  if(
8640: 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64   speedtest1_rand
8650: 6f 6d 28 29 25 70 32 3d 3d 30 20 29 20 73 70 61  om()%p2==0 ) spa
8660: 6e 20 3d 20 6d 78 2f 32 3b 0a 20 20 64 20 3d 20  n = mx/2;.  d = 
8670: 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f  speedtest1_rando
8680: 6d 28 29 25 73 70 61 6e 20 2b 20 31 3b 0a 20 20  m()%span + 1;.  
8690: 78 30 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f  x0 = speedtest1_
86a0: 72 61 6e 64 6f 6d 28 29 25 28 6d 78 2d 64 29 20  random()%(mx-d) 
86b0: 2b 20 31 3b 0a 20 20 78 31 20 3d 20 78 30 20 2b  + 1;.  x1 = x0 +
86c0: 20 64 3b 0a 20 20 2a 70 58 30 20 3d 20 78 30 3b   d;.  *pX0 = x0;
86d0: 0a 20 20 2a 70 58 31 20 3d 20 78 31 3b 0a 7d 0a  .  *pX1 = x1;.}.
86e0: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
86f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52  QLITE_ENABLE_RTR
8700: 45 45 0a 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  EE./* The follow
8710: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61  ing routine is a
8720: 6e 20 52 2d 54 72 65 65 20 67 65 6f 6d 65 74 72  n R-Tree geometr
8730: 79 20 63 61 6c 6c 62 61 63 6b 2e 20 20 49 74 20  y callback.  It 
8740: 72 65 74 75 72 6e 73 0a 2a 2a 20 74 72 75 65 20  returns.** true 
8750: 69 66 20 74 68 65 20 6f 62 6a 65 63 74 20 6f 76  if the object ov
8760: 65 72 6c 61 70 73 20 61 20 73 6c 69 63 65 20 6f  erlaps a slice o
8770: 6e 20 74 68 65 20 59 20 63 6f 6f 72 64 69 6e 61  n the Y coordina
8780: 74 65 20 62 65 74 77 65 65 6e 20 74 68 65 0a 2a  te between the.*
8790: 2a 20 74 77 6f 20 76 61 6c 75 65 73 20 67 69 76  * two values giv
87a0: 65 6e 20 61 73 20 61 72 67 75 6d 65 6e 74 73 2e  en as arguments.
87b0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
87c0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 45 4c 45 43  .**.**     SELEC
87d0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
87e0: 72 74 31 20 57 48 45 52 45 20 69 64 20 4d 41 54  rt1 WHERE id MAT
87f0: 43 48 20 78 73 6c 69 63 65 28 31 30 2c 32 30 29  CH xslice(10,20)
8800: 3b 0a 2a 2a 0a 2a 2a 20 49 73 20 74 68 65 20 73  ;.**.** Is the s
8810: 61 6d 65 20 61 73 20 73 61 79 69 6e 67 3a 0a 2a  ame as saying:.*
8820: 2a 0a 2a 2a 20 20 20 20 20 53 45 4c 45 43 54 20  *.**     SELECT 
8830: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74  count(*) FROM rt
8840: 31 20 57 48 45 52 45 20 79 31 3e 3d 31 30 20 41  1 WHERE y1>=10 A
8850: 4e 44 20 79 30 3c 3d 32 30 3b 0a 2a 2f 0a 73 74  ND y0<=20;.*/.st
8860: 61 74 69 63 20 69 6e 74 20 78 73 6c 69 63 65 47  atic int xsliceG
8870: 65 6f 6d 65 74 72 79 43 61 6c 6c 62 61 63 6b 28  eometryCallback(
8880: 0a 20 20 73 71 6c 69 74 65 33 5f 72 74 72 65 65  .  sqlite3_rtree
8890: 5f 67 65 6f 6d 65 74 72 79 20 2a 70 2c 0a 20 20  _geometry *p,.  
88a0: 69 6e 74 20 6e 43 6f 6f 72 64 2c 0a 20 20 64 6f  int nCoord,.  do
88b0: 75 62 6c 65 20 2a 61 43 6f 6f 72 64 2c 0a 20 20  uble *aCoord,.  
88c0: 69 6e 74 20 2a 70 52 65 73 0a 29 7b 0a 20 20 2a  int *pRes.){.  *
88d0: 70 52 65 73 20 3d 20 61 43 6f 6f 72 64 5b 33 5d  pRes = aCoord[3]
88e0: 3e 3d 70 2d 3e 61 50 61 72 61 6d 5b 30 5d 20 26  >=p->aParam[0] &
88f0: 26 20 61 43 6f 6f 72 64 5b 32 5d 3c 3d 70 2d 3e  & aCoord[2]<=p->
8900: 61 50 61 72 61 6d 5b 31 5d 3b 0a 20 20 72 65 74  aParam[1];.  ret
8910: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
8920: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
8930: 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 20 2a  E_ENABLE_RTREE *
8940: 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  /..#ifdef SQLITE
8950: 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a 2f 2a  _ENABLE_RTREE./*
8960: 0a 2a 2a 20 41 20 74 65 73 74 73 65 74 20 66 6f  .** A testset fo
8970: 72 20 74 68 65 20 52 2d 54 72 65 65 20 76 69 72  r the R-Tree vir
8980: 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2f 0a 76 6f  tual table.*/.vo
8990: 69 64 20 74 65 73 74 73 65 74 5f 72 74 72 65 65  id testset_rtree
89a0: 28 69 6e 74 20 70 31 2c 20 69 6e 74 20 70 32 29  (int p1, int p2)
89b0: 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 2c 20  {.  unsigned i, 
89c0: 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d 78  n;.  unsigned mx
89d0: 43 6f 6f 72 64 3b 0a 20 20 75 6e 73 69 67 6e 65  Coord;.  unsigne
89e0: 64 20 78 30 2c 20 78 31 2c 20 79 30 2c 20 79 31  d x0, x1, y0, y1
89f0: 2c 20 7a 30 2c 20 7a 31 3b 0a 20 20 75 6e 73 69  , z0, z1;.  unsi
8a00: 67 6e 65 64 20 69 53 74 65 70 3b 0a 20 20 69 6e  gned iStep;.  in
8a10: 74 20 2a 61 43 68 65 63 6b 20 3d 20 73 71 6c 69  t *aCheck = sqli
8a20: 74 65 33 5f 6d 61 6c 6c 6f 63 28 20 73 69 7a 65  te3_malloc( size
8a30: 6f 66 28 69 6e 74 29 2a 67 2e 73 7a 54 65 73 74  of(int)*g.szTest
8a40: 2a 35 30 30 20 29 3b 0a 0a 20 20 6d 78 43 6f 6f  *500 );..  mxCoo
8a50: 72 64 20 3d 20 31 35 30 30 30 3b 0a 20 20 6e 20  rd = 15000;.  n 
8a60: 3d 20 67 2e 73 7a 54 65 73 74 2a 35 30 30 3b 0a  = g.szTest*500;.
8a70: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
8a80: 69 6e 5f 74 65 73 74 28 31 30 30 2c 20 22 25 64  in_test(100, "%d
8a90: 20 49 4e 53 45 52 54 73 20 69 6e 74 6f 20 61 6e   INSERTs into an
8aa0: 20 72 2d 74 72 65 65 22 2c 20 6e 29 3b 0a 20 20   r-tree", n);.  
8ab0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
8ac0: 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65  "BEGIN");.  spee
8ad0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 52 45  dtest1_exec("CRE
8ae0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
8af0: 45 20 72 74 31 20 55 53 49 4e 47 20 72 74 72 65  E rt1 USING rtre
8b00: 65 28 69 64 2c 78 30 2c 78 31 2c 79 30 2c 79 31  e(id,x0,x1,y0,y1
8b10: 2c 7a 30 2c 7a 31 29 22 29 3b 0a 20 20 73 70 65  ,z0,z1)");.  spe
8b20: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
8b30: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 74 31  "INSERT INTO rt1
8b40: 28 69 64 2c 78 30 2c 78 31 2c 79 30 2c 79 31 2c  (id,x0,x1,y0,y1,
8b50: 7a 30 2c 7a 31 29 22 0a 20 20 20 20 20 20 20 20  z0,z1)".        
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 41               "VA
8b70: 4c 55 45 53 28 3f 31 2c 3f 32 2c 3f 33 2c 3f 34  LUES(?1,?2,?3,?4
8b80: 2c 3f 35 2c 3f 36 2c 3f 37 29 22 29 3b 0a 20 20  ,?5,?6,?7)");.  
8b90: 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69  for(i=1; i<=n; i
8ba0: 2b 2b 29 7b 0a 20 20 20 20 74 77 6f 43 6f 6f 72  ++){.    twoCoor
8bb0: 64 73 28 70 31 2c 20 70 32 2c 20 6d 78 43 6f 6f  ds(p1, p2, mxCoo
8bc0: 72 64 2c 20 26 78 30 2c 20 26 78 31 29 3b 0a 20  rd, &x0, &x1);. 
8bd0: 20 20 20 74 77 6f 43 6f 6f 72 64 73 28 70 31 2c     twoCoords(p1,
8be0: 20 70 32 2c 20 6d 78 43 6f 6f 72 64 2c 20 26 79   p2, mxCoord, &y
8bf0: 30 2c 20 26 79 31 29 3b 0a 20 20 20 20 74 77 6f  0, &y1);.    two
8c00: 43 6f 6f 72 64 73 28 70 31 2c 20 70 32 2c 20 6d  Coords(p1, p2, m
8c10: 78 43 6f 6f 72 64 2c 20 26 7a 30 2c 20 26 7a 31  xCoord, &z0, &z1
8c20: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
8c30: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
8c40: 20 31 2c 20 69 29 3b 0a 20 20 20 20 73 71 6c 69   1, i);.    sqli
8c50: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
8c60: 53 74 6d 74 2c 20 32 2c 20 78 30 29 3b 0a 20 20  Stmt, 2, x0);.  
8c70: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
8c80: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 33 2c 20 78  nt(g.pStmt, 3, x
8c90: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  1);.    sqlite3_
8ca0: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
8cb0: 2c 20 34 2c 20 79 30 29 3b 0a 20 20 20 20 73 71  , 4, y0);.    sq
8cc0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
8cd0: 2e 70 53 74 6d 74 2c 20 35 2c 20 79 31 29 3b 0a  .pStmt, 5, y1);.
8ce0: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
8cf0: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 36 2c  _int(g.pStmt, 6,
8d00: 20 7a 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   z0);.    sqlite
8d10: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
8d20: 6d 74 2c 20 37 2c 20 7a 31 29 3b 0a 20 20 20 20  mt, 7, z1);.    
8d30: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
8d40: 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73  ;.  }.  speedtes
8d50: 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22  t1_exec("COMMIT"
8d60: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
8d70: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73  end_test();..  s
8d80: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
8d90: 74 65 73 74 28 31 30 31 2c 20 22 43 6f 70 79 20  test(101, "Copy 
8da0: 66 72 6f 6d 20 72 74 72 65 65 20 74 6f 20 61 20  from rtree to a 
8db0: 72 65 67 75 6c 61 72 20 74 61 62 6c 65 22 29 3b  regular table");
8dc0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
8dd0: 65 63 28 22 43 52 45 41 54 45 20 54 41 42 4c 45  ec("CREATE TABLE
8de0: 20 74 31 28 69 64 20 49 4e 54 45 47 45 52 20 50   t1(id INTEGER P
8df0: 52 49 4d 41 52 59 20 4b 45 59 2c 78 30 2c 78 31  RIMARY KEY,x0,x1
8e00: 2c 79 30 2c 79 31 2c 7a 30 2c 7a 31 29 22 29 3b  ,y0,y1,z0,z1)");
8e10: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
8e20: 65 63 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  ec("INSERT INTO 
8e30: 74 31 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  t1 SELECT * FROM
8e40: 20 72 74 31 22 29 3b 0a 20 20 73 70 65 65 64 74   rt1");.  speedt
8e50: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
8e60: 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74  ..  n = g.szTest
8e70: 2a 31 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73  *100;.  speedtes
8e80: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 31  t1_begin_test(11
8e90: 30 2c 20 22 25 64 20 6f 6e 65 2d 64 69 6d 65 6e  0, "%d one-dimen
8ea0: 73 69 6f 6e 61 6c 20 69 6e 74 65 72 73 65 63 74  sional intersect
8eb0: 20 73 6c 69 63 65 20 71 75 65 72 69 65 73 22 2c   slice queries",
8ec0: 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74   n);.  speedtest
8ed0: 31 5f 70 72 65 70 61 72 65 28 22 53 45 4c 45 43  1_prepare("SELEC
8ee0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
8ef0: 72 74 31 20 57 48 45 52 45 20 78 30 3e 3d 3f 31  rt1 WHERE x0>=?1
8f00: 20 41 4e 44 20 78 31 3c 3d 3f 32 22 29 3b 0a 20   AND x1<=?2");. 
8f10: 20 69 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72 64   iStep = mxCoord
8f20: 2f 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  /n;.  for(i=0; i
8f30: 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71  <n; i++){.    sq
8f40: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
8f50: 2e 70 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74  .pStmt, 1, i*iSt
8f60: 65 70 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ep);.    sqlite3
8f70: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
8f80: 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53 74 65  t, 2, (i+1)*iSte
8f90: 70 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73  p);.    speedtes
8fa0: 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20 20 61 43  t1_run();.    aC
8fb0: 68 65 63 6b 5b 69 5d 20 3d 20 61 74 6f 69 28 67  heck[i] = atoi(g
8fc0: 2e 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a 20  .zResult);.  }. 
8fd0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
8fe0: 74 65 73 74 28 29 3b 0a 0a 20 20 69 66 28 20 67  test();..  if( g
8ff0: 2e 62 56 65 72 69 66 79 20 29 7b 0a 20 20 20 20  .bVerify ){.    
9000: 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 31 30 30  n = g.szTest*100
9010: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
9020: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 31 31 2c  _begin_test(111,
9030: 20 22 56 65 72 69 66 79 20 72 65 73 75 6c 74 20   "Verify result 
9040: 66 72 6f 6d 20 31 2d 44 20 69 6e 74 65 72 73 65  from 1-D interse
9050: 63 74 20 73 6c 69 63 65 20 71 75 65 72 69 65 73  ct slice queries
9060: 22 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73  ");.    speedtes
9070: 74 31 5f 70 72 65 70 61 72 65 28 22 53 45 4c 45  t1_prepare("SELE
9080: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
9090: 20 74 31 20 57 48 45 52 45 20 78 30 3e 3d 3f 31   t1 WHERE x0>=?1
90a0: 20 41 4e 44 20 78 31 3c 3d 3f 32 22 29 3b 0a 20   AND x1<=?2");. 
90b0: 20 20 20 69 53 74 65 70 20 3d 20 6d 78 43 6f 6f     iStep = mxCoo
90c0: 72 64 2f 6e 3b 0a 20 20 20 20 66 6f 72 28 69 3d  rd/n;.    for(i=
90d0: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
90e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
90f0: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c  _int(g.pStmt, 1,
9100: 20 69 2a 69 53 74 65 70 29 3b 0a 20 20 20 20 20   i*iStep);.     
9110: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
9120: 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28 69  t(g.pStmt, 2, (i
9130: 2b 31 29 2a 69 53 74 65 70 29 3b 0a 20 20 20 20  +1)*iStep);.    
9140: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
9150: 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 43  ();.      if( aC
9160: 68 65 63 6b 5b 69 5d 21 3d 61 74 6f 69 28 67 2e  heck[i]!=atoi(g.
9170: 7a 52 65 73 75 6c 74 29 20 29 7b 0a 20 20 20 20  zResult) ){.    
9180: 20 20 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28      fatal_error(
9190: 22 43 6f 75 6e 74 20 64 69 73 61 67 72 65 65 20  "Count disagree 
91a0: 73 74 65 70 20 25 64 3a 20 25 64 2e 2e 25 64 2e  step %d: %d..%d.
91b0: 20 20 25 64 20 76 73 20 25 64 22 2c 0a 20 20 20    %d vs %d",.   
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91d0: 20 69 2c 20 69 2a 69 53 74 65 70 2c 20 28 69 2b   i, i*iStep, (i+
91e0: 31 29 2a 69 53 74 65 70 2c 20 61 43 68 65 63 6b  1)*iStep, aCheck
91f0: 5b 69 5d 2c 20 61 74 6f 69 28 67 2e 7a 52 65 73  [i], atoi(g.zRes
9200: 75 6c 74 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ult));.      }. 
9210: 20 20 20 7d 0a 20 20 20 20 73 70 65 65 64 74 65     }.    speedte
9220: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
9230: 20 20 7d 0a 20 20 0a 20 20 6e 20 3d 20 67 2e 73    }.  .  n = g.s
9240: 7a 54 65 73 74 2a 31 30 30 3b 0a 20 20 73 70 65  zTest*100;.  spe
9250: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
9260: 73 74 28 31 32 30 2c 20 22 25 64 20 6f 6e 65 2d  st(120, "%d one-
9270: 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 6f 76 65 72  dimensional over
9280: 6c 61 70 20 73 6c 69 63 65 20 71 75 65 72 69 65  lap slice querie
9290: 73 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74  s", n);.  speedt
92a0: 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 53 45  est1_prepare("SE
92b0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
92c0: 4f 4d 20 72 74 31 20 57 48 45 52 45 20 79 31 3e  OM rt1 WHERE y1>
92d0: 3d 3f 31 20 41 4e 44 20 79 30 3c 3d 3f 32 22 29  =?1 AND y0<=?2")
92e0: 3b 0a 20 20 69 53 74 65 70 20 3d 20 6d 78 43 6f  ;.  iStep = mxCo
92f0: 6f 72 64 2f 6e 3b 0a 20 20 66 6f 72 28 69 3d 30  ord/n;.  for(i=0
9300: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
9310: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
9320: 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69 2a  t(g.pStmt, 1, i*
9330: 69 53 74 65 70 29 3b 0a 20 20 20 20 73 71 6c 69  iStep);.    sqli
9340: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
9350: 53 74 6d 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69  Stmt, 2, (i+1)*i
9360: 53 74 65 70 29 3b 0a 20 20 20 20 73 70 65 65 64  Step);.    speed
9370: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20  test1_run();.   
9380: 20 61 43 68 65 63 6b 5b 69 5d 20 3d 20 61 74 6f   aCheck[i] = ato
9390: 69 28 67 2e 7a 52 65 73 75 6c 74 29 3b 0a 20 20  i(g.zResult);.  
93a0: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
93b0: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 69 66  nd_test();..  if
93c0: 28 20 67 2e 62 56 65 72 69 66 79 20 29 7b 0a 20  ( g.bVerify ){. 
93d0: 20 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a     n = g.szTest*
93e0: 31 30 30 3b 0a 20 20 20 20 73 70 65 65 64 74 65  100;.    speedte
93f0: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
9400: 32 31 2c 20 22 56 65 72 69 66 79 20 72 65 73 75  21, "Verify resu
9410: 6c 74 20 66 72 6f 6d 20 31 2d 44 20 6f 76 65 72  lt from 1-D over
9420: 6c 61 70 20 73 6c 69 63 65 20 71 75 65 72 69 65  lap slice querie
9430: 73 22 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  s");.    speedte
9440: 73 74 31 5f 70 72 65 70 61 72 65 28 22 53 45 4c  st1_prepare("SEL
9450: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
9460: 4d 20 74 31 20 57 48 45 52 45 20 79 31 3e 3d 3f  M t1 WHERE y1>=?
9470: 31 20 41 4e 44 20 79 30 3c 3d 3f 32 22 29 3b 0a  1 AND y0<=?2");.
9480: 20 20 20 20 69 53 74 65 70 20 3d 20 6d 78 43 6f      iStep = mxCo
9490: 6f 72 64 2f 6e 3b 0a 20 20 20 20 66 6f 72 28 69  ord/n;.    for(i
94a0: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
94b0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
94c0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
94d0: 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20 20 20 20  , i*iStep);.    
94e0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
94f0: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28  nt(g.pStmt, 2, (
9500: 69 2b 31 29 2a 69 53 74 65 70 29 3b 0a 20 20 20  i+1)*iStep);.   
9510: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
9520: 6e 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61  n();.      if( a
9530: 43 68 65 63 6b 5b 69 5d 21 3d 61 74 6f 69 28 67  Check[i]!=atoi(g
9540: 2e 7a 52 65 73 75 6c 74 29 20 29 7b 0a 20 20 20  .zResult) ){.   
9550: 20 20 20 20 20 66 61 74 61 6c 5f 65 72 72 6f 72       fatal_error
9560: 28 22 43 6f 75 6e 74 20 64 69 73 61 67 72 65 65  ("Count disagree
9570: 20 73 74 65 70 20 25 64 3a 20 25 64 2e 2e 25 64   step %d: %d..%d
9580: 2e 20 20 25 64 20 76 73 20 25 64 22 2c 0a 20 20  .  %d vs %d",.  
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 69 2c 20 69 2a 69 53 74 65 70 2c 20 28 69    i, i*iStep, (i
95b0: 2b 31 29 2a 69 53 74 65 70 2c 20 61 43 68 65 63  +1)*iStep, aChec
95c0: 6b 5b 69 5d 2c 20 61 74 6f 69 28 67 2e 7a 52 65  k[i], atoi(g.zRe
95d0: 73 75 6c 74 29 29 3b 0a 20 20 20 20 20 20 7d 0a  sult));.      }.
95e0: 20 20 20 20 7d 0a 20 20 20 20 73 70 65 65 64 74      }.    speedt
95f0: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
9600: 0a 20 20 7d 0a 20 20 0a 0a 20 20 6e 20 3d 20 67  .  }.  ..  n = g
9610: 2e 73 7a 54 65 73 74 2a 31 30 30 3b 0a 20 20 73  .szTest*100;.  s
9620: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
9630: 74 65 73 74 28 31 32 35 2c 20 22 25 64 20 63 75  test(125, "%d cu
9640: 73 74 6f 6d 20 67 65 6f 6d 65 74 72 79 20 63 61  stom geometry ca
9650: 6c 6c 62 61 63 6b 20 71 75 65 72 69 65 73 22 2c  llback queries",
9660: 20 6e 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72   n);.  sqlite3_r
9670: 74 72 65 65 5f 67 65 6f 6d 65 74 72 79 5f 63 61  tree_geometry_ca
9680: 6c 6c 62 61 63 6b 28 67 2e 64 62 2c 20 22 78 73  llback(g.db, "xs
9690: 6c 69 63 65 22 2c 20 78 73 6c 69 63 65 47 65 6f  lice", xsliceGeo
96a0: 6d 65 74 72 79 43 61 6c 6c 62 61 63 6b 2c 20 30  metryCallback, 0
96b0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
96c0: 70 72 65 70 61 72 65 28 22 53 45 4c 45 43 54 20  prepare("SELECT 
96d0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74  count(*) FROM rt
96e0: 31 20 57 48 45 52 45 20 69 64 20 4d 41 54 43 48  1 WHERE id MATCH
96f0: 20 78 73 6c 69 63 65 28 3f 31 2c 3f 32 29 22 29   xslice(?1,?2)")
9700: 3b 0a 20 20 69 53 74 65 70 20 3d 20 6d 78 43 6f  ;.  iStep = mxCo
9710: 6f 72 64 2f 6e 3b 0a 20 20 66 6f 72 28 69 3d 30  ord/n;.  for(i=0
9720: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
9730: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
9740: 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69 2a  t(g.pStmt, 1, i*
9750: 69 53 74 65 70 29 3b 0a 20 20 20 20 73 71 6c 69  iStep);.    sqli
9760: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
9770: 53 74 6d 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69  Stmt, 2, (i+1)*i
9780: 53 74 65 70 29 3b 0a 20 20 20 20 73 70 65 65 64  Step);.    speed
9790: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20  test1_run();.   
97a0: 20 69 66 28 20 61 43 68 65 63 6b 5b 69 5d 21 3d   if( aCheck[i]!=
97b0: 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29 20  atoi(g.zResult) 
97c0: 29 7b 0a 20 20 20 20 20 20 66 61 74 61 6c 5f 65  ){.      fatal_e
97d0: 72 72 6f 72 28 22 43 6f 75 6e 74 20 64 69 73 61  rror("Count disa
97e0: 67 72 65 65 20 73 74 65 70 20 25 64 3a 20 25 64  gree step %d: %d
97f0: 2e 2e 25 64 2e 20 20 25 64 20 76 73 20 25 64 22  ..%d.  %d vs %d"
9800: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9810: 20 20 20 20 69 2c 20 69 2a 69 53 74 65 70 2c 20      i, i*iStep, 
9820: 28 69 2b 31 29 2a 69 53 74 65 70 2c 20 61 43 68  (i+1)*iStep, aCh
9830: 65 63 6b 5b 69 5d 2c 20 61 74 6f 69 28 67 2e 7a  eck[i], atoi(g.z
9840: 52 65 73 75 6c 74 29 29 3b 0a 20 20 20 20 7d 0a  Result));.    }.
9850: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
9860: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20  _end_test();..  
9870: 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 34 30 30  n = g.szTest*400
9880: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
9890: 65 67 69 6e 5f 74 65 73 74 28 31 33 30 2c 20 22  egin_test(130, "
98a0: 25 64 20 74 68 72 65 65 2d 64 69 6d 65 6e 73 69  %d three-dimensi
98b0: 6f 6e 61 6c 20 69 6e 74 65 72 73 65 63 74 20 62  onal intersect b
98c0: 6f 78 20 71 75 65 72 69 65 73 22 2c 20 6e 29 3b  ox queries", n);
98d0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
98e0: 65 70 61 72 65 28 22 53 45 4c 45 43 54 20 63 6f  epare("SELECT co
98f0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74 31 20  unt(*) FROM rt1 
9900: 57 48 45 52 45 20 78 31 3e 3d 3f 31 20 41 4e 44  WHERE x1>=?1 AND
9910: 20 78 30 3c 3d 3f 32 22 0a 20 20 20 20 20 20 20   x0<=?2".       
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
9930: 41 4e 44 20 79 31 3e 3d 3f 31 20 41 4e 44 20 79  AND y1>=?1 AND y
9940: 30 3c 3d 3f 32 20 41 4e 44 20 7a 31 3e 3d 3f 31  0<=?2 AND z1>=?1
9950: 20 41 4e 44 20 7a 30 3c 3d 3f 32 22 29 3b 0a 20   AND z0<=?2");. 
9960: 20 69 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72 64   iStep = mxCoord
9970: 2f 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  /n;.  for(i=0; i
9980: 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71  <n; i++){.    sq
9990: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
99a0: 2e 70 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74  .pStmt, 1, i*iSt
99b0: 65 70 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ep);.    sqlite3
99c0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
99d0: 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53 74 65  t, 2, (i+1)*iSte
99e0: 70 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73  p);.    speedtes
99f0: 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20 20 61 43  t1_run();.    aC
9a00: 68 65 63 6b 5b 69 5d 20 3d 20 61 74 6f 69 28 67  heck[i] = atoi(g
9a10: 2e 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a 20  .zResult);.  }. 
9a20: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
9a30: 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 67  test();..  n = g
9a40: 2e 73 7a 54 65 73 74 2a 35 30 30 3b 0a 20 20 73  .szTest*500;.  s
9a50: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
9a60: 74 65 73 74 28 31 34 30 2c 20 22 25 64 20 72 6f  test(140, "%d ro
9a70: 77 69 64 20 71 75 65 72 69 65 73 22 2c 20 6e 29  wid queries", n)
9a80: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70  ;.  speedtest1_p
9a90: 72 65 70 61 72 65 28 22 53 45 4c 45 43 54 20 2a  repare("SELECT *
9aa0: 20 46 52 4f 4d 20 72 74 31 20 57 48 45 52 45 20   FROM rt1 WHERE 
9ab0: 69 64 3d 3f 31 22 29 3b 0a 20 20 66 6f 72 28 69  id=?1");.  for(i
9ac0: 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a  =1; i<=n; i++){.
9ad0: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
9ae0: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c  _int(g.pStmt, 1,
9af0: 20 69 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65   i);.    speedte
9b00: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20  st1_run();.  }. 
9b10: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
9b20: 74 65 73 74 28 29 3b 0a 7d 0a 23 65 6e 64 69 66  test();.}.#endif
9b30: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
9b40: 45 5f 52 54 52 45 45 20 2a 2f 0a 0a 2f 2a 0a 2a  E_RTREE */../*.*
9b50: 2a 20 41 20 74 65 73 74 73 65 74 20 74 68 61 74  * A testset that
9b60: 20 64 6f 65 73 20 6b 65 79 2f 76 61 6c 75 65 20   does key/value 
9b70: 73 74 6f 72 61 67 65 20 6f 6e 20 74 61 62 6c 65  storage on table
9b80: 73 20 77 69 74 68 20 6d 61 6e 79 20 63 6f 6c 75  s with many colu
9b90: 6d 6e 73 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  mns..** This is 
9ba0: 74 68 65 20 6b 69 6e 64 20 6f 66 20 77 6f 72 6b  the kind of work
9bb0: 6c 6f 61 64 20 67 65 6e 65 72 61 74 65 64 20 62  load generated b
9bc0: 79 20 4f 52 4d 73 20 73 75 63 68 20 61 73 20 43  y ORMs such as C
9bd0: 6f 72 65 44 61 74 61 2e 0a 2a 2f 0a 76 6f 69 64  oreData..*/.void
9be0: 20 74 65 73 74 73 65 74 5f 6f 72 6d 28 76 6f 69   testset_orm(voi
9bf0: 64 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69  d){.  unsigned i
9c00: 2c 20 6a 2c 20 6e 3b 0a 20 20 75 6e 73 69 67 6e  , j, n;.  unsign
9c10: 65 64 20 6e 52 6f 77 3b 0a 20 20 75 6e 73 69 67  ed nRow;.  unsig
9c20: 6e 65 64 20 78 31 2c 20 6c 65 6e 3b 0a 20 20 63  ned x1, len;.  c
9c30: 68 61 72 20 7a 4e 75 6d 5b 32 30 30 30 5d 3b 20  har zNum[2000]; 
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9c50: 41 20 6e 75 6d 62 65 72 20 6e 61 6d 65 20 2a 2f  A number name */
9c60: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
9c70: 63 68 61 72 20 7a 54 79 70 65 5b 5d 20 3d 20 20  char zType[] =  
9c80: 20 2f 2a 20 54 79 70 65 73 20 66 6f 72 20 61 6c   /* Types for al
9c90: 6c 20 6e 6f 6e 2d 50 4b 20 63 6f 6c 75 6d 6e 73  l non-PK columns
9ca0: 2c 20 69 6e 20 6f 72 64 65 72 20 2a 2f 0a 20 20  , in order */.  
9cb0: 20 20 22 49 42 42 49 49 49 54 49 56 56 49 54 42    "IBBIIITIVVITB
9cc0: 54 42 46 42 46 49 54 54 46 42 54 42 56 42 56 49  TBFBFITTFBTBVBVI
9cd0: 46 54 42 42 46 49 54 46 46 56 42 49 46 49 56 42  FTBBFITFFVBIFIVB
9ce0: 56 56 56 42 54 56 54 49 42 42 46 46 49 56 49 42  VVVBTVTIBBFFIVIB
9cf0: 54 42 22 0a 20 20 20 20 22 54 56 54 54 46 54 56  TB".    "TVTTFTV
9d00: 54 56 46 46 49 49 54 49 46 42 49 54 46 54 54 46  TVFFIITIFBITFTTF
9d10: 46 46 56 42 49 49 42 54 54 49 54 46 54 46 46 56  FFVBIIBTTITFTFFV
9d20: 56 56 46 49 49 49 54 56 42 42 56 46 46 54 56 56  VVFIIITVBBVFFTVV
9d30: 42 22 3b 0a 0a 20 20 6e 52 6f 77 20 3d 20 6e 20  B";..  nRow = n 
9d40: 3d 20 67 2e 73 7a 54 65 73 74 2a 32 35 30 3b 0a  = g.szTest*250;.
9d50: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
9d60: 69 6e 5f 74 65 73 74 28 31 30 30 2c 20 22 46 69  in_test(100, "Fi
9d70: 6c 6c 20 25 64 20 72 6f 77 73 22 2c 20 6e 29 3b  ll %d rows", n);
9d80: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
9d90: 65 63 28 0a 20 20 20 20 22 42 45 47 49 4e 3b 22  ec(.    "BEGIN;"
9da0: 0a 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .    "CREATE TAB
9db0: 4c 45 20 5a 4c 4f 4f 4b 53 4c 49 4b 45 43 4f 52  LE ZLOOKSLIKECOR
9dc0: 45 44 41 54 41 20 28 22 0a 20 20 20 20 22 20 20  EDATA (".    "  
9dd0: 5a 50 4b 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ZPK INTEGER PRIM
9de0: 41 52 59 20 4b 45 59 2c 22 0a 20 20 20 20 22 20  ARY KEY,".    " 
9df0: 20 5a 54 45 52 4d 46 49 54 54 49 4e 47 48 4f 55   ZTERMFITTINGHOU
9e00: 53 49 4e 47 43 4f 4d 4d 41 4e 44 20 49 4e 54 45  SINGCOMMAND INTE
9e10: 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 42 52  GER,".    "  ZBR
9e20: 49 45 46 47 4f 42 59 44 4f 44 47 45 52 48 45 49  IEFGOBYDODGERHEI
9e30: 47 48 54 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  GHT BLOB,".    "
9e40: 20 20 5a 43 41 50 41 42 4c 45 54 52 49 50 44 4f    ZCAPABLETRIPDO
9e50: 4f 52 41 4c 4d 4f 4e 44 20 42 4c 4f 42 2c 22 0a  ORALMOND BLOB,".
9e60: 20 20 20 20 22 20 20 5a 44 45 50 4f 53 49 54 50      "  ZDEPOSITP
9e70: 41 49 52 43 4f 4c 4c 45 47 45 43 4f 4d 45 54 20  AIRCOLLEGECOMET 
9e80: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
9e90: 20 5a 46 52 41 4d 45 45 4e 54 45 52 53 49 4d 50   ZFRAMEENTERSIMP
9ea0: 4c 45 4d 4f 55 54 48 20 49 4e 54 45 47 45 52 2c  LEMOUTH INTEGER,
9eb0: 22 0a 20 20 20 20 22 20 20 5a 48 4f 50 45 46 55  ".    "  ZHOPEFU
9ec0: 4c 47 41 54 45 48 4f 4c 45 43 48 41 4c 4b 20 49  LGATEHOLECHALK I
9ed0: 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20  NTEGER,".    "  
9ee0: 5a 53 4c 45 45 50 59 55 53 45 52 47 52 41 4e 44  ZSLEEPYUSERGRAND
9ef0: 42 4f 57 4c 20 54 49 4d 45 53 54 41 4d 50 2c 22  BOWL TIMESTAMP,"
9f00: 0a 20 20 20 20 22 20 20 5a 44 45 57 50 45 41 43  .    "  ZDEWPEAC
9f10: 48 43 41 52 45 45 52 43 45 4c 45 52 59 20 49 4e  HCAREERCELERY IN
9f20: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
9f30: 48 41 4e 47 45 52 4c 49 54 48 49 55 4d 44 49 4e  HANGERLITHIUMDIN
9f40: 4e 45 52 4d 45 45 54 20 56 41 52 43 48 41 52 2c  NERMEET VARCHAR,
9f50: 22 0a 20 20 20 20 22 20 20 5a 43 4c 55 42 52 45  ".    "  ZCLUBRE
9f60: 4c 45 41 53 45 4c 49 5a 41 52 44 41 44 56 49 43  LEASELIZARDADVIC
9f70: 45 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20  E VARCHAR,".    
9f80: 22 20 20 5a 43 48 41 52 47 45 43 4c 49 43 4b 48  "  ZCHARGECLICKH
9f90: 55 4d 41 4e 45 48 49 52 45 20 49 4e 54 45 47 45  UMANEHIRE INTEGE
9fa0: 52 2c 22 0a 20 20 20 20 22 20 20 5a 46 49 4e 47  R,".    "  ZFING
9fb0: 45 52 44 55 45 50 49 5a 5a 41 4f 50 54 49 4f 4e  ERDUEPIZZAOPTION
9fc0: 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20   TIMESTAMP,".   
9fd0: 20 22 20 20 5a 46 4c 59 49 4e 47 44 4f 43 54 4f   "  ZFLYINGDOCTO
9fe0: 52 54 41 42 4c 45 4d 45 4c 4f 44 59 20 42 4c 4f  RTABLEMELODY BLO
9ff0: 42 2c 22 0a 20 20 20 20 22 20 20 5a 4c 4f 4e 47  B,".    "  ZLONG
a000: 46 49 4e 4c 45 41 56 45 49 4d 41 47 45 4f 49 4c  FINLEAVEIMAGEOIL
a010: 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20   TIMESTAMP,".   
a020: 20 22 20 20 5a 46 41 4d 49 4c 59 56 49 53 55 41   "  ZFAMILYVISUA
a030: 4c 4f 57 4e 45 52 4d 41 54 54 45 52 20 42 4c 4f  LOWNERMATTER BLO
a040: 42 2c 22 0a 20 20 20 20 22 20 20 5a 47 4f 4c 44  B,".    "  ZGOLD
a050: 59 4f 55 4e 47 49 4e 49 54 49 41 4c 4e 4f 53 45  YOUNGINITIALNOSE
a060: 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20   FLOAT,".    "  
a070: 5a 43 41 55 53 45 53 41 4c 41 4d 49 54 45 52 4d  ZCAUSESALAMITERM
a080: 43 59 41 4e 20 42 4c 4f 42 2c 22 0a 20 20 20 20  CYAN BLOB,".    
a090: 22 20 20 5a 53 50 52 45 41 44 4d 4f 54 4f 52 42  "  ZSPREADMOTORB
a0a0: 49 53 43 55 49 54 42 41 43 4f 4e 20 46 4c 4f 41  ISCUITBACON FLOA
a0b0: 54 2c 22 0a 20 20 20 20 22 20 20 5a 47 49 46 54  T,".    "  ZGIFT
a0c0: 49 43 45 46 49 53 48 47 4c 55 45 48 41 49 52 20  ICEFISHGLUEHAIR 
a0d0: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
a0e0: 20 5a 4e 4f 54 49 43 45 50 45 41 52 50 4f 4c 49   ZNOTICEPEARPOLI
a0f0: 43 59 4a 55 49 43 45 20 54 49 4d 45 53 54 41 4d  CYJUICE TIMESTAM
a100: 50 2c 22 0a 20 20 20 20 22 20 20 5a 42 41 4e 4b  P,".    "  ZBANK
a110: 42 55 46 46 41 4c 4f 52 45 43 4f 56 45 52 4f 52  BUFFALORECOVEROR
a120: 42 49 54 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a  BIT TIMESTAMP,".
a130: 20 20 20 20 22 20 20 5a 4c 4f 4e 47 44 49 45 54      "  ZLONGDIET
a140: 45 53 53 41 59 4e 41 54 55 52 45 20 46 4c 4f 41  ESSAYNATURE FLOA
a150: 54 2c 22 0a 20 20 20 20 22 20 20 5a 41 43 54 49  T,".    "  ZACTI
a160: 4f 4e 52 41 4e 47 45 45 4c 45 47 41 4e 54 4e 45  ONRANGEELEGANTNE
a170: 55 54 52 4f 4e 20 42 4c 4f 42 2c 22 0a 20 20 20  UTRON BLOB,".   
a180: 20 22 20 20 5a 43 41 44 45 54 42 52 49 47 48 54   "  ZCADETBRIGHT
a190: 50 4c 41 4e 45 54 42 41 4e 4b 20 54 49 4d 45 53  PLANETBANK TIMES
a1a0: 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 41  TAMP,".    "  ZA
a1b0: 49 52 46 4f 52 47 49 56 45 48 45 41 44 46 52 4f  IRFORGIVEHEADFRO
a1c0: 47 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20  G BLOB,".    "  
a1d0: 5a 53 48 41 52 4b 4a 55 53 54 46 52 55 49 54 4d  ZSHARKJUSTFRUITM
a1e0: 4f 56 49 45 20 56 41 52 43 48 41 52 2c 22 0a 20  OVIE VARCHAR,". 
a1f0: 20 20 20 22 20 20 5a 46 41 52 4d 45 52 4d 4f 52     "  ZFARMERMOR
a200: 4e 49 4e 47 4d 49 52 52 4f 52 43 4f 4e 43 45 52  NINGMIRRORCONCER
a210: 4e 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20  N BLOB,".    "  
a220: 5a 57 4f 4f 44 50 4f 45 54 52 59 43 4f 42 42 4c  ZWOODPOETRYCOBBL
a230: 45 52 42 45 4e 43 48 20 56 41 52 43 48 41 52 2c  ERBENCH VARCHAR,
a240: 22 0a 20 20 20 20 22 20 20 5a 48 41 46 4e 49 55  ".    "  ZHAFNIU
a250: 4d 53 43 52 49 50 54 53 41 4c 41 44 4d 4f 54 4f  MSCRIPTSALADMOTO
a260: 52 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20  R INTEGER,".    
a270: 22 20 20 5a 50 52 4f 42 4c 45 4d 43 4c 55 42 50  "  ZPROBLEMCLUBP
a280: 4f 50 4f 56 45 52 4a 45 4c 4c 59 20 46 4c 4f 41  OPOVERJELLY FLOA
a290: 54 2c 22 0a 20 20 20 20 22 20 20 5a 45 49 47 48  T,".    "  ZEIGH
a2a0: 54 4c 45 41 44 45 52 57 4f 52 4b 45 52 4d 4f 53  TLEADERWORKERMOS
a2b0: 54 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  T TIMESTAMP,".  
a2c0: 20 20 22 20 20 5a 47 4c 41 53 53 52 45 53 45 52    "  ZGLASSRESER
a2d0: 56 45 42 41 52 49 55 4d 4d 45 41 4c 20 42 4c 4f  VEBARIUMMEAL BLO
a2e0: 42 2c 22 0a 20 20 20 20 22 20 20 5a 43 4c 41 4d  B,".    "  ZCLAM
a2f0: 42 49 54 41 52 55 47 55 4c 41 46 41 4a 49 54 41  BITARUGULAFAJITA
a300: 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a   BLOB,".    "  Z
a310: 44 45 43 41 44 45 4a 4f 59 4f 55 53 57 41 56 45  DECADEJOYOUSWAVE
a320: 48 41 42 49 54 20 46 4c 4f 41 54 2c 22 0a 20 20  HABIT FLOAT,".  
a330: 20 20 22 20 20 5a 43 4f 4d 50 41 4e 59 53 55 4d    "  ZCOMPANYSUM
a340: 4d 45 52 46 49 42 45 52 45 4c 46 20 49 4e 54 45  MERFIBERELF INTE
a350: 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 54 52  GER,".    "  ZTR
a360: 45 41 54 54 45 53 54 51 55 49 4c 4c 43 48 41 52  EATTESTQUILLCHAR
a370: 47 45 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20  GE TIMESTAMP,". 
a380: 20 20 20 22 20 20 5a 42 52 4f 57 42 41 4c 41 4e     "  ZBROWBALAN
a390: 43 45 4b 45 59 43 48 4f 57 44 45 52 20 46 4c 4f  CEKEYCHOWDER FLO
a3a0: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 50 45 41  AT,".    "  ZPEA
a3b0: 43 48 43 4f 50 50 45 52 44 49 4e 4e 45 52 4c 41  CHCOPPERDINNERLA
a3c0: 4b 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22  KE FLOAT,".    "
a3d0: 20 20 5a 44 52 59 57 41 4c 4c 42 45 59 4f 4e 44    ZDRYWALLBEYOND
a3e0: 42 52 4f 57 4e 42 4f 57 4c 20 56 41 52 43 48 41  BROWNBOWL VARCHA
a3f0: 52 2c 22 0a 20 20 20 20 22 20 20 5a 42 45 4c 4c  R,".    "  ZBELL
a400: 59 43 52 41 53 48 49 54 45 4d 4c 41 43 4b 20 42  YCRASHITEMLACK B
a410: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 54 45  LOB,".    "  ZTE
a420: 4e 4e 49 53 43 59 43 4c 45 42 49 4c 4c 4f 46 46  NNISCYCLEBILLOFF
a430: 49 43 45 52 20 49 4e 54 45 47 45 52 2c 22 0a 20  ICER INTEGER,". 
a440: 20 20 20 22 20 20 5a 4d 41 4c 4c 45 51 55 49 50     "  ZMALLEQUIP
a450: 54 48 41 4e 4b 53 47 4c 55 45 20 46 4c 4f 41 54  THANKSGLUE FLOAT
a460: 2c 22 0a 20 20 20 20 22 20 20 5a 4d 49 53 53 52  ,".    "  ZMISSR
a470: 45 50 4c 59 48 55 4d 41 4e 4c 49 56 49 4e 47 20  EPLYHUMANLIVING 
a480: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
a490: 20 5a 4b 49 57 49 56 49 53 55 41 4c 50 52 49 44   ZKIWIVISUALPRID
a4a0: 45 41 50 50 4c 45 20 56 41 52 43 48 41 52 2c 22  EAPPLE VARCHAR,"
a4b0: 0a 20 20 20 20 22 20 20 5a 57 49 53 48 48 49 54  .    "  ZWISHHIT
a4c0: 53 4b 49 4e 4d 4f 54 4f 52 20 42 4c 4f 42 2c 22  SKINMOTOR BLOB,"
a4d0: 0a 20 20 20 20 22 20 20 5a 43 41 4c 4d 52 41 43  .    "  ZCALMRAC
a4e0: 43 4f 4f 4e 50 52 4f 47 52 41 4d 44 45 42 49 54  COONPROGRAMDEBIT
a4f0: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
a500: 20 20 5a 53 48 49 4e 59 41 53 53 49 53 54 4c 49    ZSHINYASSISTLI
a510: 56 49 4e 47 43 52 41 42 20 56 41 52 43 48 41 52  VINGCRAB VARCHAR
a520: 2c 22 0a 20 20 20 20 22 20 20 5a 52 45 53 4f 4c  ,".    "  ZRESOL
a530: 56 45 57 52 49 53 54 57 52 41 50 41 50 50 4c 45  VEWRISTWRAPAPPLE
a540: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
a550: 20 20 5a 41 50 50 45 41 4c 53 49 4d 50 4c 45 53    ZAPPEALSIMPLES
a560: 45 43 4f 4e 44 48 4f 55 53 49 4e 47 20 42 4c 4f  ECONDHOUSING BLO
a570: 42 2c 22 0a 20 20 20 20 22 20 20 5a 43 4f 52 4e  B,".    "  ZCORN
a580: 45 52 41 4e 43 48 4f 52 54 41 50 45 44 49 56 45  ERANCHORTAPEDIVE
a590: 52 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  R TIMESTAMP,".  
a5a0: 20 20 22 20 20 5a 4d 45 4d 4f 52 59 52 45 51 55    "  ZMEMORYREQU
a5b0: 45 53 54 53 4f 55 52 43 45 42 49 47 20 56 41 52  ESTSOURCEBIG VAR
a5c0: 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 54  CHAR,".    "  ZT
a5d0: 52 59 46 41 43 54 4b 45 45 50 4d 49 4c 4b 20 54  RYFACTKEEPMILK T
a5e0: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
a5f0: 20 20 5a 44 49 56 45 52 50 41 49 4e 54 4c 45 41    ZDIVERPAINTLEA
a600: 54 48 45 52 45 41 53 59 20 49 4e 54 45 47 45 52  THEREASY INTEGER
a610: 2c 22 0a 20 20 20 20 22 20 20 5a 53 4f 52 54 4d  ,".    "  ZSORTM
a620: 49 53 54 59 51 55 4f 54 45 43 41 42 42 41 47 45  ISTYQUOTECABBAGE
a630: 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a   BLOB,".    "  Z
a640: 54 55 4e 45 47 41 53 42 55 46 46 41 4c 4f 43 41  TUNEGASBUFFALOCA
a650: 50 49 54 41 4c 20 42 4c 4f 42 2c 22 0a 20 20 20  PITAL BLOB,".   
a660: 20 22 20 20 5a 46 49 4c 4c 53 54 4f 50 4c 41 57   "  ZFILLSTOPLAW
a670: 4a 4f 59 46 55 4c 20 46 4c 4f 41 54 2c 22 0a 20  JOYFUL FLOAT,". 
a680: 20 20 20 22 20 20 5a 53 54 45 45 4c 43 41 52 45     "  ZSTEELCARE
a690: 46 55 4c 50 4c 41 54 45 4e 55 4d 42 45 52 20 46  FULPLATENUMBER F
a6a0: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 47  LOAT,".    "  ZG
a6b0: 49 56 45 56 49 56 49 44 44 49 56 49 4e 45 4d 45  IVEVIVIDDIVINEME
a6c0: 41 4e 49 4e 47 20 49 4e 54 45 47 45 52 2c 22 0a  ANING INTEGER,".
a6d0: 20 20 20 20 22 20 20 5a 54 52 45 41 54 50 41 43      "  ZTREATPAC
a6e0: 4b 46 55 54 55 52 45 43 4f 4e 56 45 52 54 20 56  KFUTURECONVERT V
a6f0: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
a700: 5a 43 41 4c 4d 4c 59 47 45 4d 46 49 4e 49 53 48  ZCALMLYGEMFINISH
a710: 45 46 46 45 43 54 20 49 4e 54 45 47 45 52 2c 22  EFFECT INTEGER,"
a720: 0a 20 20 20 20 22 20 20 5a 43 41 42 42 41 47 45  .    "  ZCABBAGE
a730: 53 4f 43 4b 45 41 53 45 4d 49 4e 55 54 45 20 42  SOCKEASEMINUTE B
a740: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 50 4c  LOB,".    "  ZPL
a750: 41 4e 45 54 46 41 4d 49 4c 59 50 55 52 45 4d 45  ANETFAMILYPUREME
a760: 4d 4f 52 59 20 54 49 4d 45 53 54 41 4d 50 2c 22  MORY TIMESTAMP,"
a770: 0a 20 20 20 20 22 20 20 5a 4d 45 52 52 59 43 52  .    "  ZMERRYCR
a780: 41 43 4b 54 52 41 49 4e 4c 45 41 44 45 52 20 42  ACKTRAINLEADER B
a790: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 4d 49  LOB,".    "  ZMI
a7a0: 4e 4f 52 57 41 59 50 41 50 45 52 43 4c 41 53 53  NORWAYPAPERCLASS
a7b0: 59 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  Y TIMESTAMP,".  
a7c0: 20 20 22 20 20 5a 45 41 47 4c 45 4c 49 4e 45 4d    "  ZEAGLELINEM
a7d0: 49 4e 45 4d 41 49 4c 20 56 41 52 43 48 41 52 2c  INEMAIL VARCHAR,
a7e0: 22 0a 20 20 20 20 22 20 20 5a 52 45 53 4f 52 54  ".    "  ZRESORT
a7f0: 59 41 52 44 47 52 45 45 4e 4c 45 54 20 54 49 4d  YARDGREENLET TIM
a800: 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20  ESTAMP,".    "  
a810: 5a 59 41 52 44 4f 52 45 47 41 4e 4f 56 49 56 49  ZYARDOREGANOVIVI
a820: 44 4a 45 57 45 4c 20 54 49 4d 45 53 54 41 4d 50  DJEWEL TIMESTAMP
a830: 2c 22 0a 20 20 20 20 22 20 20 5a 50 55 52 45 43  ,".    "  ZPUREC
a840: 41 4b 45 56 49 56 49 44 4e 45 41 54 4c 59 20 46  AKEVIVIDNEATLY F
a850: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 41  LOAT,".    "  ZA
a860: 53 4b 43 4f 4e 54 41 43 54 4d 4f 4e 49 54 4f 52  SKCONTACTMONITOR
a870: 46 55 4e 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a  FUN TIMESTAMP,".
a880: 20 20 20 20 22 20 20 5a 4d 4f 56 45 57 48 4f 47      "  ZMOVEWHOG
a890: 41 4d 4d 41 49 4e 43 48 20 56 41 52 43 48 41 52  AMMAINCH VARCHAR
a8a0: 2c 22 0a 20 20 20 20 22 20 20 5a 4c 45 54 54 55  ,".    "  ZLETTU
a8b0: 43 45 42 49 52 44 4d 45 45 54 44 45 42 41 54 45  CEBIRDMEETDEBATE
a8c0: 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20   TIMESTAMP,".   
a8d0: 20 22 20 20 5a 47 45 4e 45 4e 41 54 55 52 41 4c   "  ZGENENATURAL
a8e0: 48 45 41 52 49 4e 47 4b 49 54 45 20 56 41 52 43  HEARINGKITE VARC
a8f0: 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 4d 55  HAR,".    "  ZMU
a900: 46 46 49 4e 44 52 59 45 52 44 52 41 57 46 4f 52  FFINDRYERDRAWFOR
a910: 54 55 4e 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20  TUNE FLOAT,".   
a920: 20 22 20 20 5a 47 52 41 59 53 55 52 56 45 59 57   "  ZGRAYSURVEYW
a930: 49 52 45 4c 4f 56 45 20 46 4c 4f 41 54 2c 22 0a  IRELOVE FLOAT,".
a940: 20 20 20 20 22 20 20 5a 50 4c 49 45 52 53 50 52      "  ZPLIERSPR
a950: 49 4e 54 41 53 4b 4f 52 45 47 41 4e 4f 20 49 4e  INTASKOREGANO IN
a960: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
a970: 54 52 41 56 45 4c 44 52 49 56 45 52 43 4f 4e 54  TRAVELDRIVERCONT
a980: 45 53 54 4c 49 4c 59 20 49 4e 54 45 47 45 52 2c  ESTLILY INTEGER,
a990: 22 0a 20 20 20 20 22 20 20 5a 48 55 4d 4f 52 53  ".    "  ZHUMORS
a9a0: 50 49 43 45 53 41 4e 44 4b 49 44 4e 45 59 20 54  PICESANDKIDNEY T
a9b0: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
a9c0: 20 20 5a 41 52 53 45 4e 49 43 53 41 4d 50 4c 45    ZARSENICSAMPLE
a9d0: 57 41 49 54 4d 55 4f 4e 20 49 4e 54 45 47 45 52  WAITMUON INTEGER
a9e0: 2c 22 0a 20 20 20 20 22 20 20 5a 4c 41 43 45 41  ,".    "  ZLACEA
a9f0: 44 44 52 45 53 53 47 52 4f 55 4e 44 43 41 52 45  DDRESSGROUNDCARE
aa00: 46 55 4c 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  FUL FLOAT,".    
aa10: 22 20 20 5a 42 41 4d 42 4f 4f 4d 45 53 53 57 41  "  ZBAMBOOMESSWA
aa20: 53 41 42 49 45 56 45 4e 49 4e 47 20 42 4c 4f 42  SABIEVENING BLOB
aa30: 2c 22 0a 20 20 20 20 22 20 20 5a 4f 4e 45 52 45  ,".    "  ZONERE
aa40: 4c 45 41 53 45 41 56 45 52 41 47 45 4e 55 52 53  LEASEAVERAGENURS
aa50: 45 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20  E INTEGER,".    
aa60: 22 20 20 5a 52 41 44 49 41 4e 54 57 48 45 4e 54  "  ZRADIANTWHENT
aa70: 52 59 43 41 52 44 20 54 49 4d 45 53 54 41 4d 50  RYCARD TIMESTAMP
aa80: 2c 22 0a 20 20 20 20 22 20 20 5a 52 45 57 41 52  ,".    "  ZREWAR
aa90: 44 49 4e 53 49 44 45 4d 41 4e 47 4f 49 4e 54 45  DINSIDEMANGOINTE
aaa0: 4e 53 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  NSE FLOAT,".    
aab0: 22 20 20 5a 4e 45 41 54 53 54 45 57 50 41 52 54  "  ZNEATSTEWPART
aac0: 49 52 4f 4e 20 54 49 4d 45 53 54 41 4d 50 2c 22  IRON TIMESTAMP,"
aad0: 0a 20 20 20 20 22 20 20 5a 4f 55 54 53 49 44 45  .    "  ZOUTSIDE
aae0: 50 45 41 48 45 4e 43 4f 55 4e 54 49 43 45 20 54  PEAHENCOUNTICE T
aaf0: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
ab00: 20 20 5a 43 52 45 41 4d 45 56 45 4e 49 4e 47 4c    ZCREAMEVENINGL
ab10: 49 50 42 52 41 4e 43 48 20 46 4c 4f 41 54 2c 22  IPBRANCH FLOAT,"
ab20: 0a 20 20 20 20 22 20 20 5a 57 48 41 4c 45 4d 41  .    "  ZWHALEMA
ab30: 54 48 41 56 4f 43 41 44 4f 43 4f 50 50 45 52 20  THAVOCADOCOPPER 
ab40: 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a  FLOAT,".    "  Z
ab50: 4c 49 46 45 55 53 45 4c 45 41 46 59 42 45 4c 4c  LIFEUSELEAFYBELL
ab60: 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20   FLOAT,".    "  
ab70: 5a 57 45 41 4c 54 48 4c 49 4e 45 4e 47 4c 45 45  ZWEALTHLINENGLEE
ab80: 46 55 4c 44 41 59 20 56 41 52 43 48 41 52 2c 22  FULDAY VARCHAR,"
ab90: 0a 20 20 20 20 22 20 20 5a 46 41 43 45 49 4e 56  .    "  ZFACEINV
aba0: 49 54 45 54 41 4c 4b 47 4f 4c 44 20 42 4c 4f 42  ITETALKGOLD BLOB
abb0: 2c 22 0a 20 20 20 20 22 20 20 5a 57 45 53 54 41  ,".    "  ZWESTA
abc0: 4d 4f 55 4e 54 41 46 46 45 43 54 48 45 41 52 49  MOUNTAFFECTHEARI
abd0: 4e 47 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20  NG INTEGER,".   
abe0: 20 22 20 20 5a 44 45 4c 41 59 4f 55 54 43 4f 4d   "  ZDELAYOUTCOM
abf0: 45 48 4f 52 4e 41 47 45 4e 43 59 20 49 4e 54 45  EHORNAGENCY INTE
ac00: 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 42 49  GER,".    "  ZBI
ac10: 47 54 48 49 4e 4b 43 4f 4e 56 45 52 54 45 43 4f  GTHINKCONVERTECO
ac20: 4e 4f 4d 59 20 42 4c 4f 42 2c 22 0a 20 20 20 20  NOMY BLOB,".    
ac30: 22 20 20 5a 42 41 53 45 47 4f 55 44 41 52 45 47  "  ZBASEGOUDAREG
ac40: 55 4c 41 52 46 4f 52 47 49 56 45 20 54 49 4d 45  ULARFORGIVE TIME
ac50: 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a  STAMP,".    "  Z
ac60: 50 41 54 54 45 52 4e 43 4c 4f 52 49 4e 45 47 52  PATTERNCLORINEGR
ac70: 41 4e 44 43 4f 4c 42 59 20 54 49 4d 45 53 54 41  ANDCOLBY TIMESTA
ac80: 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 43 59 41  MP,".    "  ZCYA
ac90: 4e 42 41 53 45 46 45 45 44 41 44 52 4f 49 54 20  NBASEFEEDADROIT 
aca0: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
acb0: 20 5a 43 41 52 52 59 46 4c 4f 4f 52 4d 49 4e 4e   ZCARRYFLOORMINN
acc0: 4f 57 44 52 41 47 4f 4e 20 54 49 4d 45 53 54 41  OWDRAGON TIMESTA
acd0: 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 49 4d 41  MP,".    "  ZIMA
ace0: 47 45 50 45 4e 43 49 4c 4f 54 48 45 52 42 4f 54  GEPENCILOTHERBOT
acf0: 54 4f 4d 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  TOM FLOAT,".    
ad00: 22 20 20 5a 58 45 4e 4f 4e 46 4c 49 47 48 54 50  "  ZXENONFLIGHTP
ad10: 41 4c 45 41 50 50 4c 45 20 54 49 4d 45 53 54 41  ALEAPPLE TIMESTA
ad20: 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 48 45 52  MP,".    "  ZHER
ad30: 52 49 4e 47 4a 4f 4b 45 46 45 41 54 55 52 45 48  RINGJOKEFEATUREH
ad40: 4f 50 45 46 55 4c 20 46 4c 4f 41 54 2c 22 0a 20  OPEFUL FLOAT,". 
ad50: 20 20 20 22 20 20 5a 43 41 50 59 45 41 52 4c 59     "  ZCAPYEARLY
ad60: 52 49 56 45 54 42 52 55 53 48 20 46 4c 4f 41 54  RIVETBRUSH FLOAT
ad70: 2c 22 0a 20 20 20 20 22 20 20 5a 41 47 45 52 45  ,".    "  ZAGERE
ad80: 45 44 46 52 4f 47 42 41 53 4b 45 54 20 56 41 52  EDFROGBASKET VAR
ad90: 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 55  CHAR,".    "  ZU
ada0: 53 55 41 4c 42 4f 44 59 48 41 4c 49 42 55 54 44  SUALBODYHALIBUTD
adb0: 49 41 4d 4f 4e 44 20 56 41 52 43 48 41 52 2c 22  IAMOND VARCHAR,"
adc0: 0a 20 20 20 20 22 20 20 5a 46 4f 4f 54 54 41 50  .    "  ZFOOTTAP
add0: 57 4f 52 44 45 4e 54 52 59 20 56 41 52 43 48 41  WORDENTRY VARCHA
ade0: 52 2c 22 0a 20 20 20 20 22 20 20 5a 44 49 53 48  R,".    "  ZDISH
adf0: 4b 45 45 50 42 4c 45 53 54 4d 4f 4e 49 54 4f 52  KEEPBLESTMONITOR
ae00: 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20   FLOAT,".    "  
ae10: 5a 42 52 4f 41 44 41 42 4c 45 53 4f 4c 49 44 43  ZBROADABLESOLIDC
ae20: 41 53 55 41 4c 20 49 4e 54 45 47 45 52 2c 22 0a  ASUAL INTEGER,".
ae30: 20 20 20 20 22 20 20 5a 53 51 55 41 52 45 47 4c      "  ZSQUAREGL
ae40: 45 45 46 55 4c 43 48 49 4c 44 4c 49 47 48 54 20  EEFULCHILDLIGHT 
ae50: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
ae60: 20 5a 48 4f 4c 49 44 41 59 48 45 41 44 50 4f 4e   ZHOLIDAYHEADPON
ae70: 59 44 45 54 41 49 4c 20 49 4e 54 45 47 45 52 2c  YDETAIL INTEGER,
ae80: 22 0a 20 20 20 20 22 20 20 5a 47 45 4e 45 52 41  ".    "  ZGENERA
ae90: 4c 52 45 53 4f 52 54 53 4b 59 4f 50 45 4e 20 54  LRESORTSKYOPEN T
aea0: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
aeb0: 20 20 5a 47 4c 41 44 53 50 52 41 59 4b 49 44 4e    ZGLADSPRAYKIDN
aec0: 45 59 47 55 50 50 59 20 56 41 52 43 48 41 52 2c  EYGUPPY VARCHAR,
aed0: 22 0a 20 20 20 20 22 20 20 5a 53 57 49 4d 48 45  ".    "  ZSWIMHE
aee0: 41 56 59 4d 45 4e 54 49 4f 4e 4b 49 4e 44 20 42  AVYMENTIONKIND B
aef0: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 4d 45  LOB,".    "  ZME
af00: 53 53 59 53 55 4c 46 55 52 44 52 45 41 4d 46 45  SSYSULFURDREAMFE
af10: 53 54 49 56 45 20 42 4c 4f 42 2c 22 0a 20 20 20  STIVE BLOB,".   
af20: 20 22 20 20 5a 53 4b 59 53 4b 59 43 4c 41 53 53   "  ZSKYSKYCLASS
af30: 49 43 42 52 49 45 46 20 56 41 52 43 48 41 52 2c  ICBRIEF VARCHAR,
af40: 22 0a 20 20 20 20 22 20 20 5a 44 49 4c 4c 41 53  ".    "  ZDILLAS
af50: 4b 48 4f 4b 49 4c 45 4d 4f 4e 20 46 4c 4f 41 54  KHOKILEMON FLOAT
af60: 2c 22 0a 20 20 20 20 22 20 20 5a 4a 55 4e 49 4f  ,".    "  ZJUNIO
af70: 52 53 48 4f 57 50 52 45 53 53 4e 4f 56 41 20 46  RSHOWPRESSNOVA F
af80: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 53  LOAT,".    "  ZS
af90: 49 5a 45 54 4f 45 41 57 41 52 44 46 52 45 53 48  IZETOEAWARDFRESH
afa0: 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20   TIMESTAMP,".   
afb0: 20 22 20 20 5a 4b 45 59 46 41 49 4c 41 50 52 49   "  ZKEYFAILAPRI
afc0: 43 4f 54 4d 45 54 41 4c 20 56 41 52 43 48 41 52  COTMETAL VARCHAR
afd0: 2c 22 0a 20 20 20 20 22 20 20 5a 48 41 4e 44 59  ,".    "  ZHANDY
afe0: 52 45 50 41 49 52 50 52 4f 54 4f 4e 41 49 52 50  REPAIRPROTONAIRP
aff0: 4f 52 54 20 56 41 52 43 48 41 52 2c 22 0a 20 20  ORT VARCHAR,".  
b000: 20 20 22 20 20 5a 50 4f 53 54 50 52 4f 54 45 49    "  ZPOSTPROTEI
b010: 4e 48 41 4e 44 4c 45 41 43 54 4f 52 20 42 4c 4f  NHANDLEACTOR BLO
b020: 42 22 0a 20 20 20 20 22 29 3b 22 0a 20 20 29 3b  B".    ");".  );
b030: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
b040: 65 70 61 72 65 28 0a 20 20 20 20 22 49 4e 53 45  epare(.    "INSE
b050: 52 54 20 49 4e 54 4f 20 5a 4c 4f 4f 4b 53 4c 49  RT INTO ZLOOKSLI
b060: 4b 45 43 4f 52 45 44 41 54 41 28 5a 50 4b 2c 5a  KECOREDATA(ZPK,Z
b070: 41 49 52 46 4f 52 47 49 56 45 48 45 41 44 46 52  AIRFORGIVEHEADFR
b080: 4f 47 2c 22 0a 20 20 20 20 22 5a 47 49 46 54 49  OG,".    "ZGIFTI
b090: 43 45 46 49 53 48 47 4c 55 45 48 41 49 52 2c 5a  CEFISHGLUEHAIR,Z
b0a0: 44 45 4c 41 59 4f 55 54 43 4f 4d 45 48 4f 52 4e  DELAYOUTCOMEHORN
b0b0: 41 47 45 4e 43 59 2c 5a 53 4c 45 45 50 59 55 53  AGENCY,ZSLEEPYUS
b0c0: 45 52 47 52 41 4e 44 42 4f 57 4c 2c 22 0a 20 20  ERGRANDBOWL,".  
b0d0: 20 20 22 5a 47 4c 41 53 53 52 45 53 45 52 56 45    "ZGLASSRESERVE
b0e0: 42 41 52 49 55 4d 4d 45 41 4c 2c 5a 42 52 49 45  BARIUMMEAL,ZBRIE
b0f0: 46 47 4f 42 59 44 4f 44 47 45 52 48 45 49 47 48  FGOBYDODGERHEIGH
b100: 54 2c 22 0a 20 20 20 20 22 5a 42 41 4d 42 4f 4f  T,".    "ZBAMBOO
b110: 4d 45 53 53 57 41 53 41 42 49 45 56 45 4e 49 4e  MESSWASABIEVENIN
b120: 47 2c 5a 46 41 52 4d 45 52 4d 4f 52 4e 49 4e 47  G,ZFARMERMORNING
b130: 4d 49 52 52 4f 52 43 4f 4e 43 45 52 4e 2c 22 0a  MIRRORCONCERN,".
b140: 20 20 20 20 22 5a 54 52 45 41 54 50 41 43 4b 46      "ZTREATPACKF
b150: 55 54 55 52 45 43 4f 4e 56 45 52 54 2c 5a 43 41  UTURECONVERT,ZCA
b160: 55 53 45 53 41 4c 41 4d 49 54 45 52 4d 43 59 41  USESALAMITERMCYA
b170: 4e 2c 5a 43 41 4c 4d 52 41 43 43 4f 4f 4e 50 52  N,ZCALMRACCOONPR
b180: 4f 47 52 41 4d 44 45 42 49 54 2c 22 0a 20 20 20  OGRAMDEBIT,".   
b190: 20 22 5a 48 4f 4c 49 44 41 59 48 45 41 44 50 4f   "ZHOLIDAYHEADPO
b1a0: 4e 59 44 45 54 41 49 4c 2c 5a 57 4f 4f 44 50 4f  NYDETAIL,ZWOODPO
b1b0: 45 54 52 59 43 4f 42 42 4c 45 52 42 45 4e 43 48  ETRYCOBBLERBENCH
b1c0: 2c 5a 48 41 46 4e 49 55 4d 53 43 52 49 50 54 53  ,ZHAFNIUMSCRIPTS
b1d0: 41 4c 41 44 4d 4f 54 4f 52 2c 22 0a 20 20 20 20  ALADMOTOR,".    
b1e0: 22 5a 55 53 55 41 4c 42 4f 44 59 48 41 4c 49 42  "ZUSUALBODYHALIB
b1f0: 55 54 44 49 41 4d 4f 4e 44 2c 5a 4f 55 54 53 49  UTDIAMOND,ZOUTSI
b200: 44 45 50 45 41 48 45 4e 43 4f 55 4e 54 49 43 45  DEPEAHENCOUNTICE
b210: 2c 5a 44 49 56 45 52 50 41 49 4e 54 4c 45 41 54  ,ZDIVERPAINTLEAT
b220: 48 45 52 45 41 53 59 2c 22 0a 20 20 20 20 22 5a  HEREASY,".    "Z
b230: 57 45 53 54 41 4d 4f 55 4e 54 41 46 46 45 43 54  WESTAMOUNTAFFECT
b240: 48 45 41 52 49 4e 47 2c 5a 53 49 5a 45 54 4f 45  HEARING,ZSIZETOE
b250: 41 57 41 52 44 46 52 45 53 48 2c 5a 44 45 57 50  AWARDFRESH,ZDEWP
b260: 45 41 43 48 43 41 52 45 45 52 43 45 4c 45 52 59  EACHCAREERCELERY
b270: 2c 22 0a 20 20 20 20 22 5a 53 54 45 45 4c 43 41  ,".    "ZSTEELCA
b280: 52 45 46 55 4c 50 4c 41 54 45 4e 55 4d 42 45 52  REFULPLATENUMBER
b290: 2c 5a 43 59 41 4e 42 41 53 45 46 45 45 44 41 44  ,ZCYANBASEFEEDAD
b2a0: 52 4f 49 54 2c 5a 43 41 4c 4d 4c 59 47 45 4d 46  ROIT,ZCALMLYGEMF
b2b0: 49 4e 49 53 48 45 46 46 45 43 54 2c 22 0a 20 20  INISHEFFECT,".  
b2c0: 20 20 22 5a 48 41 4e 44 59 52 45 50 41 49 52 50    "ZHANDYREPAIRP
b2d0: 52 4f 54 4f 4e 41 49 52 50 4f 52 54 2c 5a 47 45  ROTONAIRPORT,ZGE
b2e0: 4e 45 4e 41 54 55 52 41 4c 48 45 41 52 49 4e 47  NENATURALHEARING
b2f0: 4b 49 54 45 2c 5a 42 52 4f 41 44 41 42 4c 45 53  KITE,ZBROADABLES
b300: 4f 4c 49 44 43 41 53 55 41 4c 2c 22 0a 20 20 20  OLIDCASUAL,".   
b310: 20 22 5a 50 4f 53 54 50 52 4f 54 45 49 4e 48 41   "ZPOSTPROTEINHA
b320: 4e 44 4c 45 41 43 54 4f 52 2c 5a 4c 41 43 45 41  NDLEACTOR,ZLACEA
b330: 44 44 52 45 53 53 47 52 4f 55 4e 44 43 41 52 45  DDRESSGROUNDCARE
b340: 46 55 4c 2c 5a 49 4d 41 47 45 50 45 4e 43 49 4c  FUL,ZIMAGEPENCIL
b350: 4f 54 48 45 52 42 4f 54 54 4f 4d 2c 22 0a 20 20  OTHERBOTTOM,".  
b360: 20 20 22 5a 50 52 4f 42 4c 45 4d 43 4c 55 42 50    "ZPROBLEMCLUBP
b370: 4f 50 4f 56 45 52 4a 45 4c 4c 59 2c 5a 50 41 54  OPOVERJELLY,ZPAT
b380: 54 45 52 4e 43 4c 4f 52 49 4e 45 47 52 41 4e 44  TERNCLORINEGRAND
b390: 43 4f 4c 42 59 2c 5a 4e 45 41 54 53 54 45 57 50  COLBY,ZNEATSTEWP
b3a0: 41 52 54 49 52 4f 4e 2c 22 0a 20 20 20 20 22 5a  ARTIRON,".    "Z
b3b0: 41 50 50 45 41 4c 53 49 4d 50 4c 45 53 45 43 4f  APPEALSIMPLESECO
b3c0: 4e 44 48 4f 55 53 49 4e 47 2c 5a 4d 4f 56 45 57  NDHOUSING,ZMOVEW
b3d0: 48 4f 47 41 4d 4d 41 49 4e 43 48 2c 5a 54 45 4e  HOGAMMAINCH,ZTEN
b3e0: 4e 49 53 43 59 43 4c 45 42 49 4c 4c 4f 46 46 49  NISCYCLEBILLOFFI
b3f0: 43 45 52 2c 22 0a 20 20 20 20 22 5a 53 48 41 52  CER,".    "ZSHAR
b400: 4b 4a 55 53 54 46 52 55 49 54 4d 4f 56 49 45 2c  KJUSTFRUITMOVIE,
b410: 5a 4b 45 59 46 41 49 4c 41 50 52 49 43 4f 54 4d  ZKEYFAILAPRICOTM
b420: 45 54 41 4c 2c 5a 43 4f 4d 50 41 4e 59 53 55 4d  ETAL,ZCOMPANYSUM
b430: 4d 45 52 46 49 42 45 52 45 4c 46 2c 22 0a 20 20  MERFIBERELF,".  
b440: 20 20 22 5a 54 45 52 4d 46 49 54 54 49 4e 47 48    "ZTERMFITTINGH
b450: 4f 55 53 49 4e 47 43 4f 4d 4d 41 4e 44 2c 5a 52  OUSINGCOMMAND,ZR
b460: 45 53 4f 52 54 59 41 52 44 47 52 45 45 4e 4c 45  ESORTYARDGREENLE
b470: 54 2c 5a 43 41 42 42 41 47 45 53 4f 43 4b 45 41  T,ZCABBAGESOCKEA
b480: 53 45 4d 49 4e 55 54 45 2c 22 0a 20 20 20 20 22  SEMINUTE,".    "
b490: 5a 53 51 55 41 52 45 47 4c 45 45 46 55 4c 43 48  ZSQUAREGLEEFULCH
b4a0: 49 4c 44 4c 49 47 48 54 2c 5a 4f 4e 45 52 45 4c  ILDLIGHT,ZONEREL
b4b0: 45 41 53 45 41 56 45 52 41 47 45 4e 55 52 53 45  EASEAVERAGENURSE
b4c0: 2c 5a 42 49 47 54 48 49 4e 4b 43 4f 4e 56 45 52  ,ZBIGTHINKCONVER
b4d0: 54 45 43 4f 4e 4f 4d 59 2c 22 0a 20 20 20 20 22  TECONOMY,".    "
b4e0: 5a 50 4c 49 45 52 53 50 52 49 4e 54 41 53 4b 4f  ZPLIERSPRINTASKO
b4f0: 52 45 47 41 4e 4f 2c 5a 44 45 43 41 44 45 4a 4f  REGANO,ZDECADEJO
b500: 59 4f 55 53 57 41 56 45 48 41 42 49 54 2c 5a 44  YOUSWAVEHABIT,ZD
b510: 52 59 57 41 4c 4c 42 45 59 4f 4e 44 42 52 4f 57  RYWALLBEYONDBROW
b520: 4e 42 4f 57 4c 2c 22 0a 20 20 20 20 22 5a 43 4c  NBOWL,".    "ZCL
b530: 55 42 52 45 4c 45 41 53 45 4c 49 5a 41 52 44 41  UBRELEASELIZARDA
b540: 44 56 49 43 45 2c 5a 57 48 41 4c 45 4d 41 54 48  DVICE,ZWHALEMATH
b550: 41 56 4f 43 41 44 4f 43 4f 50 50 45 52 2c 5a 42  AVOCADOCOPPER,ZB
b560: 45 4c 4c 59 43 52 41 53 48 49 54 45 4d 4c 41 43  ELLYCRASHITEMLAC
b570: 4b 2c 22 0a 20 20 20 20 22 5a 4c 45 54 54 55 43  K,".    "ZLETTUC
b580: 45 42 49 52 44 4d 45 45 54 44 45 42 41 54 45 2c  EBIRDMEETDEBATE,
b590: 5a 43 41 50 41 42 4c 45 54 52 49 50 44 4f 4f 52  ZCAPABLETRIPDOOR
b5a0: 41 4c 4d 4f 4e 44 2c 5a 52 41 44 49 41 4e 54 57  ALMOND,ZRADIANTW
b5b0: 48 45 4e 54 52 59 43 41 52 44 2c 22 0a 20 20 20  HENTRYCARD,".   
b5c0: 20 22 5a 43 41 50 59 45 41 52 4c 59 52 49 56 45   "ZCAPYEARLYRIVE
b5d0: 54 42 52 55 53 48 2c 5a 41 47 45 52 45 45 44 46  TBRUSH,ZAGEREEDF
b5e0: 52 4f 47 42 41 53 4b 45 54 2c 5a 53 57 49 4d 48  ROGBASKET,ZSWIMH
b5f0: 45 41 56 59 4d 45 4e 54 49 4f 4e 4b 49 4e 44 2c  EAVYMENTIONKIND,
b600: 22 0a 20 20 20 20 22 5a 54 52 41 56 45 4c 44 52  ".    "ZTRAVELDR
b610: 49 56 45 52 43 4f 4e 54 45 53 54 4c 49 4c 59 2c  IVERCONTESTLILY,
b620: 5a 47 4c 41 44 53 50 52 41 59 4b 49 44 4e 45 59  ZGLADSPRAYKIDNEY
b630: 47 55 50 50 59 2c 5a 42 41 4e 4b 42 55 46 46 41  GUPPY,ZBANKBUFFA
b640: 4c 4f 52 45 43 4f 56 45 52 4f 52 42 49 54 2c 22  LORECOVERORBIT,"
b650: 0a 20 20 20 20 22 5a 46 49 4e 47 45 52 44 55 45  .    "ZFINGERDUE
b660: 50 49 5a 5a 41 4f 50 54 49 4f 4e 2c 5a 43 4c 41  PIZZAOPTION,ZCLA
b670: 4d 42 49 54 41 52 55 47 55 4c 41 46 41 4a 49 54  MBITARUGULAFAJIT
b680: 41 2c 5a 4c 4f 4e 47 46 49 4e 4c 45 41 56 45 49  A,ZLONGFINLEAVEI
b690: 4d 41 47 45 4f 49 4c 2c 22 0a 20 20 20 20 22 5a  MAGEOIL,".    "Z
b6a0: 4c 4f 4e 47 44 49 45 54 45 53 53 41 59 4e 41 54  LONGDIETESSAYNAT
b6b0: 55 52 45 2c 5a 4a 55 4e 49 4f 52 53 48 4f 57 50  URE,ZJUNIORSHOWP
b6c0: 52 45 53 53 4e 4f 56 41 2c 5a 48 4f 50 45 46 55  RESSNOVA,ZHOPEFU
b6d0: 4c 47 41 54 45 48 4f 4c 45 43 48 41 4c 4b 2c 22  LGATEHOLECHALK,"
b6e0: 0a 20 20 20 20 22 5a 44 45 50 4f 53 49 54 50 41  .    "ZDEPOSITPA
b6f0: 49 52 43 4f 4c 4c 45 47 45 43 4f 4d 45 54 2c 5a  IRCOLLEGECOMET,Z
b700: 57 45 41 4c 54 48 4c 49 4e 45 4e 47 4c 45 45 46  WEALTHLINENGLEEF
b710: 55 4c 44 41 59 2c 5a 46 49 4c 4c 53 54 4f 50 4c  ULDAY,ZFILLSTOPL
b720: 41 57 4a 4f 59 46 55 4c 2c 22 0a 20 20 20 20 22  AWJOYFUL,".    "
b730: 5a 54 55 4e 45 47 41 53 42 55 46 46 41 4c 4f 43  ZTUNEGASBUFFALOC
b740: 41 50 49 54 41 4c 2c 5a 47 52 41 59 53 55 52 56  APITAL,ZGRAYSURV
b750: 45 59 57 49 52 45 4c 4f 56 45 2c 5a 43 4f 52 4e  EYWIRELOVE,ZCORN
b760: 45 52 41 4e 43 48 4f 52 54 41 50 45 44 49 56 45  ERANCHORTAPEDIVE
b770: 52 2c 22 0a 20 20 20 20 22 5a 52 45 57 41 52 44  R,".    "ZREWARD
b780: 49 4e 53 49 44 45 4d 41 4e 47 4f 49 4e 54 45 4e  INSIDEMANGOINTEN
b790: 53 45 2c 5a 43 41 44 45 54 42 52 49 47 48 54 50  SE,ZCADETBRIGHTP
b7a0: 4c 41 4e 45 54 42 41 4e 4b 2c 5a 50 4c 41 4e 45  LANETBANK,ZPLANE
b7b0: 54 46 41 4d 49 4c 59 50 55 52 45 4d 45 4d 4f 52  TFAMILYPUREMEMOR
b7c0: 59 2c 22 0a 20 20 20 20 22 5a 54 52 45 41 54 54  Y,".    "ZTREATT
b7d0: 45 53 54 51 55 49 4c 4c 43 48 41 52 47 45 2c 5a  ESTQUILLCHARGE,Z
b7e0: 43 52 45 41 4d 45 56 45 4e 49 4e 47 4c 49 50 42  CREAMEVENINGLIPB
b7f0: 52 41 4e 43 48 2c 5a 53 4b 59 53 4b 59 43 4c 41  RANCH,ZSKYSKYCLA
b800: 53 53 49 43 42 52 49 45 46 2c 22 0a 20 20 20 20  SSICBRIEF,".    
b810: 22 5a 41 52 53 45 4e 49 43 53 41 4d 50 4c 45 57  "ZARSENICSAMPLEW
b820: 41 49 54 4d 55 4f 4e 2c 5a 42 52 4f 57 42 41 4c  AITMUON,ZBROWBAL
b830: 41 4e 43 45 4b 45 59 43 48 4f 57 44 45 52 2c 5a  ANCEKEYCHOWDER,Z
b840: 46 4c 59 49 4e 47 44 4f 43 54 4f 52 54 41 42 4c  FLYINGDOCTORTABL
b850: 45 4d 45 4c 4f 44 59 2c 22 0a 20 20 20 20 22 5a  EMELODY,".    "Z
b860: 48 41 4e 47 45 52 4c 49 54 48 49 55 4d 44 49 4e  HANGERLITHIUMDIN
b870: 4e 45 52 4d 45 45 54 2c 5a 4e 4f 54 49 43 45 50  NERMEET,ZNOTICEP
b880: 45 41 52 50 4f 4c 49 43 59 4a 55 49 43 45 2c 5a  EARPOLICYJUICE,Z
b890: 53 48 49 4e 59 41 53 53 49 53 54 4c 49 56 49 4e  SHINYASSISTLIVIN
b8a0: 47 43 52 41 42 2c 22 0a 20 20 20 20 22 5a 4c 49  GCRAB,".    "ZLI
b8b0: 46 45 55 53 45 4c 45 41 46 59 42 45 4c 4c 2c 5a  FEUSELEAFYBELL,Z
b8c0: 46 41 43 45 49 4e 56 49 54 45 54 41 4c 4b 47 4f  FACEINVITETALKGO
b8d0: 4c 44 2c 5a 47 45 4e 45 52 41 4c 52 45 53 4f 52  LD,ZGENERALRESOR
b8e0: 54 53 4b 59 4f 50 45 4e 2c 22 0a 20 20 20 20 22  TSKYOPEN,".    "
b8f0: 5a 50 55 52 45 43 41 4b 45 56 49 56 49 44 4e 45  ZPURECAKEVIVIDNE
b900: 41 54 4c 59 2c 5a 4b 49 57 49 56 49 53 55 41 4c  ATLY,ZKIWIVISUAL
b910: 50 52 49 44 45 41 50 50 4c 45 2c 5a 4d 45 53 53  PRIDEAPPLE,ZMESS
b920: 59 53 55 4c 46 55 52 44 52 45 41 4d 46 45 53 54  YSULFURDREAMFEST
b930: 49 56 45 2c 22 0a 20 20 20 20 22 5a 43 48 41 52  IVE,".    "ZCHAR
b940: 47 45 43 4c 49 43 4b 48 55 4d 41 4e 45 48 49 52  GECLICKHUMANEHIR
b950: 45 2c 5a 48 45 52 52 49 4e 47 4a 4f 4b 45 46 45  E,ZHERRINGJOKEFE
b960: 41 54 55 52 45 48 4f 50 45 46 55 4c 2c 5a 59 41  ATUREHOPEFUL,ZYA
b970: 52 44 4f 52 45 47 41 4e 4f 56 49 56 49 44 4a 45  RDOREGANOVIVIDJE
b980: 57 45 4c 2c 22 0a 20 20 20 20 22 5a 46 4f 4f 54  WEL,".    "ZFOOT
b990: 54 41 50 57 4f 52 44 45 4e 54 52 59 2c 5a 57 49  TAPWORDENTRY,ZWI
b9a0: 53 48 48 49 54 53 4b 49 4e 4d 4f 54 4f 52 2c 5a  SHHITSKINMOTOR,Z
b9b0: 42 41 53 45 47 4f 55 44 41 52 45 47 55 4c 41 52  BASEGOUDAREGULAR
b9c0: 46 4f 52 47 49 56 45 2c 22 0a 20 20 20 20 22 5a  FORGIVE,".    "Z
b9d0: 4d 55 46 46 49 4e 44 52 59 45 52 44 52 41 57 46  MUFFINDRYERDRAWF
b9e0: 4f 52 54 55 4e 45 2c 5a 41 43 54 49 4f 4e 52 41  ORTUNE,ZACTIONRA
b9f0: 4e 47 45 45 4c 45 47 41 4e 54 4e 45 55 54 52 4f  NGEELEGANTNEUTRO
ba00: 4e 2c 5a 54 52 59 46 41 43 54 4b 45 45 50 4d 49  N,ZTRYFACTKEEPMI
ba10: 4c 4b 2c 22 0a 20 20 20 20 22 5a 50 45 41 43 48  LK,".    "ZPEACH
ba20: 43 4f 50 50 45 52 44 49 4e 4e 45 52 4c 41 4b 45  COPPERDINNERLAKE
ba30: 2c 5a 46 52 41 4d 45 45 4e 54 45 52 53 49 4d 50  ,ZFRAMEENTERSIMP
ba40: 4c 45 4d 4f 55 54 48 2c 5a 4d 45 52 52 59 43 52  LEMOUTH,ZMERRYCR
ba50: 41 43 4b 54 52 41 49 4e 4c 45 41 44 45 52 2c 22  ACKTRAINLEADER,"
ba60: 0a 20 20 20 20 22 5a 4d 45 4d 4f 52 59 52 45 51  .    "ZMEMORYREQ
ba70: 55 45 53 54 53 4f 55 52 43 45 42 49 47 2c 5a 43  UESTSOURCEBIG,ZC
ba80: 41 52 52 59 46 4c 4f 4f 52 4d 49 4e 4e 4f 57 44  ARRYFLOORMINNOWD
ba90: 52 41 47 4f 4e 2c 5a 4d 49 4e 4f 52 57 41 59 50  RAGON,ZMINORWAYP
baa0: 41 50 45 52 43 4c 41 53 53 59 2c 22 0a 20 20 20  APERCLASSY,".   
bab0: 20 22 5a 44 49 4c 4c 41 53 4b 48 4f 4b 49 4c 45   "ZDILLASKHOKILE
bac0: 4d 4f 4e 2c 5a 52 45 53 4f 4c 56 45 57 52 49 53  MON,ZRESOLVEWRIS
bad0: 54 57 52 41 50 41 50 50 4c 45 2c 5a 41 53 4b 43  TWRAPAPPLE,ZASKC
bae0: 4f 4e 54 41 43 54 4d 4f 4e 49 54 4f 52 46 55 4e  ONTACTMONITORFUN
baf0: 2c 22 0a 20 20 20 20 22 5a 47 49 56 45 56 49 56  ,".    "ZGIVEVIV
bb00: 49 44 44 49 56 49 4e 45 4d 45 41 4e 49 4e 47 2c  IDDIVINEMEANING,
bb10: 5a 45 49 47 48 54 4c 45 41 44 45 52 57 4f 52 4b  ZEIGHTLEADERWORK
bb20: 45 52 4d 4f 53 54 2c 5a 4d 49 53 53 52 45 50 4c  ERMOST,ZMISSREPL
bb30: 59 48 55 4d 41 4e 4c 49 56 49 4e 47 2c 22 0a 20  YHUMANLIVING,". 
bb40: 20 20 20 22 5a 58 45 4e 4f 4e 46 4c 49 47 48 54     "ZXENONFLIGHT
bb50: 50 41 4c 45 41 50 50 4c 45 2c 5a 53 4f 52 54 4d  PALEAPPLE,ZSORTM
bb60: 49 53 54 59 51 55 4f 54 45 43 41 42 42 41 47 45  ISTYQUOTECABBAGE
bb70: 2c 5a 45 41 47 4c 45 4c 49 4e 45 4d 49 4e 45 4d  ,ZEAGLELINEMINEM
bb80: 41 49 4c 2c 22 0a 20 20 20 20 22 5a 46 41 4d 49  AIL,".    "ZFAMI
bb90: 4c 59 56 49 53 55 41 4c 4f 57 4e 45 52 4d 41 54  LYVISUALOWNERMAT
bba0: 54 45 52 2c 5a 53 50 52 45 41 44 4d 4f 54 4f 52  TER,ZSPREADMOTOR
bbb0: 42 49 53 43 55 49 54 42 41 43 4f 4e 2c 5a 44 49  BISCUITBACON,ZDI
bbc0: 53 48 4b 45 45 50 42 4c 45 53 54 4d 4f 4e 49 54  SHKEEPBLESTMONIT
bbd0: 4f 52 2c 22 0a 20 20 20 20 22 5a 4d 41 4c 4c 45  OR,".    "ZMALLE
bbe0: 51 55 49 50 54 48 41 4e 4b 53 47 4c 55 45 2c 5a  QUIPTHANKSGLUE,Z
bbf0: 47 4f 4c 44 59 4f 55 4e 47 49 4e 49 54 49 41 4c  GOLDYOUNGINITIAL
bc00: 4e 4f 53 45 2c 5a 48 55 4d 4f 52 53 50 49 43 45  NOSE,ZHUMORSPICE
bc10: 53 41 4e 44 4b 49 44 4e 45 59 29 22 0a 20 20 20  SANDKIDNEY)".   
bc20: 20 22 56 41 4c 55 45 53 28 3f 31 2c 3f 32 36 2c   "VALUES(?1,?26,
bc30: 3f 32 30 2c 3f 39 33 2c 3f 38 2c 3f 33 33 2c 3f  ?20,?93,?8,?33,?
bc40: 33 2c 3f 38 31 2c 3f 32 38 2c 3f 36 30 2c 3f 31  3,?81,?28,?60,?1
bc50: 38 2c 3f 34 37 2c 3f 31 30 39 2c 3f 32 39 2c 3f  8,?47,?109,?29,?
bc60: 33 30 2c 3f 31 30 34 2c 3f 38 36 2c 22 0a 20 20  30,?104,?86,".  
bc70: 20 20 22 3f 35 34 2c 3f 39 32 2c 3f 31 31 37 2c    "?54,?92,?117,
bc80: 3f 39 2c 3f 35 38 2c 3f 39 37 2c 3f 36 31 2c 3f  ?9,?58,?97,?61,?
bc90: 31 31 39 2c 3f 37 33 2c 3f 31 30 37 2c 3f 31 32  119,?73,?107,?12
bca0: 30 2c 3f 38 30 2c 3f 39 39 2c 3f 33 31 2c 3f 39  0,?80,?99,?31,?9
bcb0: 36 2c 3f 38 35 2c 3f 35 30 2c 3f 37 31 2c 22 0a  6,?85,?50,?71,".
bcc0: 20 20 20 20 22 3f 34 32 2c 3f 32 37 2c 3f 31 31      "?42,?27,?11
bcd0: 38 2c 3f 33 36 2c 3f 32 2c 3f 36 37 2c 3f 36 32  8,?36,?2,?67,?62
bce0: 2c 3f 31 30 38 2c 3f 38 32 2c 3f 39 34 2c 3f 37  ,?108,?82,?94,?7
bcf0: 36 2c 3f 33 35 2c 3f 34 30 2c 3f 31 31 2c 3f 38  6,?35,?40,?11,?8
bd00: 38 2c 3f 34 31 2c 3f 37 32 2c 3f 34 2c 22 0a 20  8,?41,?72,?4,". 
bd10: 20 20 20 22 3f 38 33 2c 3f 31 30 32 2c 3f 31 30     "?83,?102,?10
bd20: 33 2c 3f 31 31 32 2c 3f 37 37 2c 3f 31 31 31 2c  3,?112,?77,?111,
bd30: 3f 32 32 2c 3f 31 33 2c 3f 33 34 2c 3f 31 35 2c  ?22,?13,?34,?15,
bd40: 3f 32 33 2c 3f 31 31 36 2c 3f 37 2c 3f 35 2c 3f  ?23,?116,?7,?5,?
bd50: 39 30 2c 3f 35 37 2c 3f 35 36 2c 22 0a 20 20 20  90,?57,?56,".   
bd60: 20 22 3f 37 35 2c 3f 35 31 2c 3f 38 34 2c 3f 32   "?75,?51,?84,?2
bd70: 35 2c 3f 36 33 2c 3f 33 37 2c 3f 38 37 2c 3f 31  5,?63,?37,?87,?1
bd80: 31 34 2c 3f 37 39 2c 3f 33 38 2c 3f 31 34 2c 3f  14,?79,?38,?14,?
bd90: 31 30 2c 3f 32 31 2c 3f 34 38 2c 3f 38 39 2c 3f  10,?21,?48,?89,?
bda0: 39 31 2c 3f 31 31 30 2c 22 0a 20 20 20 20 22 3f  91,?110,".    "?
bdb0: 36 39 2c 3f 34 35 2c 3f 31 31 33 2c 3f 31 32 2c  69,?45,?113,?12,
bdc0: 3f 31 30 31 2c 3f 36 38 2c 3f 31 30 35 2c 3f 34  ?101,?68,?105,?4
bdd0: 36 2c 3f 39 35 2c 3f 37 34 2c 3f 32 34 2c 3f 35  6,?95,?74,?24,?5
bde0: 33 2c 3f 33 39 2c 3f 36 2c 3f 36 34 2c 3f 35 32  3,?39,?6,?64,?52
bdf0: 2c 3f 39 38 2c 22 0a 20 20 20 20 22 3f 36 35 2c  ,?98,".    "?65,
be00: 3f 31 31 35 2c 3f 34 39 2c 3f 37 30 2c 3f 35 39  ?115,?49,?70,?59
be10: 2c 3f 33 32 2c 3f 34 34 2c 3f 31 30 30 2c 3f 35  ,?32,?44,?100,?5
be20: 35 2c 3f 36 36 2c 3f 31 36 2c 3f 31 39 2c 3f 31  5,?66,?16,?19,?1
be30: 30 36 2c 3f 34 33 2c 3f 31 37 2c 3f 37 38 29 3b  06,?43,?17,?78);
be40: 22 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ".  );.  for(i=0
be50: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
be60: 20 78 31 20 3d 20 73 70 65 65 64 74 65 73 74 31   x1 = speedtest1
be70: 5f 72 61 6e 64 6f 6d 28 29 3b 0a 20 20 20 20 73  _random();.    s
be80: 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72  peedtest1_number
be90: 6e 61 6d 65 28 78 31 25 31 30 30 30 2c 20 7a 4e  name(x1%1000, zN
bea0: 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29  um, sizeof(zNum)
beb0: 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 28 69 6e  );.    len = (in
bec0: 74 29 73 74 72 6c 65 6e 28 7a 4e 75 6d 29 3b 0a  t)strlen(zNum);.
bed0: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
bee0: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c  _int(g.pStmt, 1,
bef0: 20 69 5e 30 78 66 29 3b 0a 20 20 20 20 66 6f 72   i^0xf);.    for
bf00: 28 6a 3d 30 3b 20 7a 54 79 70 65 5b 6a 5d 3b 20  (j=0; zType[j]; 
bf10: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 73 77 69 74  j++){.      swit
bf20: 63 68 28 20 7a 54 79 70 65 5b 6a 5d 20 29 7b 0a  ch( zType[j] ){.
bf30: 20 20 20 20 20 20 20 20 63 61 73 65 20 27 49 27          case 'I'
bf40: 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27  :.        case '
bf50: 54 27 3a 0a 20 20 20 20 20 20 20 20 20 20 73 71  T':.          sq
bf60: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
bf70: 28 67 2e 70 53 74 6d 74 2c 20 6a 2b 32 2c 20 78  (g.pStmt, j+2, x
bf80: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  1);.          br
bf90: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
bfa0: 65 20 27 46 27 3a 0a 20 20 20 20 20 20 20 20 20  e 'F':.         
bfb0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
bfc0: 75 62 6c 65 28 67 2e 70 53 74 6d 74 2c 20 6a 2b  uble(g.pStmt, j+
bfd0: 32 2c 20 28 64 6f 75 62 6c 65 29 78 31 29 3b 0a  2, (double)x1);.
bfe0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
bff0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27 56  .        case 'V
c000: 27 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ':.        case 
c010: 27 42 27 3a 0a 20 20 20 20 20 20 20 20 20 20 73  'B':.          s
c020: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
c030: 36 34 28 67 2e 70 53 74 6d 74 2c 20 6a 2b 32 2c  64(g.pStmt, j+2,
c040: 20 7a 4e 75 6d 2c 20 6c 65 6e 2c 0a 20 20 20 20   zNum, len,.    
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c060: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
c070: 5f 53 54 41 54 49 43 2c 20 53 51 4c 49 54 45 5f  _STATIC, SQLITE_
c080: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 20 20 20  UTF8);.         
c090: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c0a0: 20 20 20 20 7d 0a 20 20 20 20 73 70 65 65 64 74      }.    speedt
c0b0: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a  est1_run();.  }.
c0c0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
c0d0: 63 28 22 43 4f 4d 4d 49 54 3b 22 29 3b 0a 20 20  c("COMMIT;");.  
c0e0: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
c0f0: 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 67 2e  est();..  n = g.
c100: 73 7a 54 65 73 74 2a 32 35 30 3b 0a 20 20 73 70  szTest*250;.  sp
c110: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
c120: 65 73 74 28 31 31 30 2c 20 22 51 75 65 72 79 20  est(110, "Query 
c130: 25 64 20 72 6f 77 73 20 62 79 20 72 6f 77 69 64  %d rows by rowid
c140: 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65  ", n);.  speedte
c150: 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20  st1_prepare(.   
c160: 20 22 53 45 4c 45 43 54 20 5a 43 59 41 4e 42 41   "SELECT ZCYANBA
c170: 53 45 46 45 45 44 41 44 52 4f 49 54 2c 5a 4a 55  SEFEEDADROIT,ZJU
c180: 4e 49 4f 52 53 48 4f 57 50 52 45 53 53 4e 4f 56  NIORSHOWPRESSNOV
c190: 41 2c 5a 43 41 55 53 45 53 41 4c 41 4d 49 54 45  A,ZCAUSESALAMITE
c1a0: 52 4d 43 59 41 4e 2c 22 0a 20 20 20 20 22 5a 48  RMCYAN,".    "ZH
c1b0: 4f 50 45 46 55 4c 47 41 54 45 48 4f 4c 45 43 48  OPEFULGATEHOLECH
c1c0: 41 4c 4b 2c 5a 48 55 4d 4f 52 53 50 49 43 45 53  ALK,ZHUMORSPICES
c1d0: 41 4e 44 4b 49 44 4e 45 59 2c 5a 53 57 49 4d 48  ANDKIDNEY,ZSWIMH
c1e0: 45 41 56 59 4d 45 4e 54 49 4f 4e 4b 49 4e 44 2c  EAVYMENTIONKIND,
c1f0: 22 0a 20 20 20 20 22 5a 4d 4f 56 45 57 48 4f 47  ".    "ZMOVEWHOG
c200: 41 4d 4d 41 49 4e 43 48 2c 5a 41 50 50 45 41 4c  AMMAINCH,ZAPPEAL
c210: 53 49 4d 50 4c 45 53 45 43 4f 4e 44 48 4f 55 53  SIMPLESECONDHOUS
c220: 49 4e 47 2c 5a 48 41 46 4e 49 55 4d 53 43 52 49  ING,ZHAFNIUMSCRI
c230: 50 54 53 41 4c 41 44 4d 4f 54 4f 52 2c 22 0a 20  PTSALADMOTOR,". 
c240: 20 20 20 22 5a 4e 45 41 54 53 54 45 57 50 41 52     "ZNEATSTEWPAR
c250: 54 49 52 4f 4e 2c 5a 4c 4f 4e 47 46 49 4e 4c 45  TIRON,ZLONGFINLE
c260: 41 56 45 49 4d 41 47 45 4f 49 4c 2c 5a 44 45 57  AVEIMAGEOIL,ZDEW
c270: 50 45 41 43 48 43 41 52 45 45 52 43 45 4c 45 52  PEACHCAREERCELER
c280: 59 2c 22 0a 20 20 20 20 22 5a 58 45 4e 4f 4e 46  Y,".    "ZXENONF
c290: 4c 49 47 48 54 50 41 4c 45 41 50 50 4c 45 2c 5a  LIGHTPALEAPPLE,Z
c2a0: 43 41 4c 4d 52 41 43 43 4f 4f 4e 50 52 4f 47 52  CALMRACCOONPROGR
c2b0: 41 4d 44 45 42 49 54 2c 5a 55 53 55 41 4c 42 4f  AMDEBIT,ZUSUALBO
c2c0: 44 59 48 41 4c 49 42 55 54 44 49 41 4d 4f 4e 44  DYHALIBUTDIAMOND
c2d0: 2c 22 0a 20 20 20 20 22 5a 54 52 59 46 41 43 54  ,".    "ZTRYFACT
c2e0: 4b 45 45 50 4d 49 4c 4b 2c 5a 57 45 41 4c 54 48  KEEPMILK,ZWEALTH
c2f0: 4c 49 4e 45 4e 47 4c 45 45 46 55 4c 44 41 59 2c  LINENGLEEFULDAY,
c300: 5a 4c 4f 4e 47 44 49 45 54 45 53 53 41 59 4e 41  ZLONGDIETESSAYNA
c310: 54 55 52 45 2c 22 0a 20 20 20 20 22 5a 4c 49 46  TURE,".    "ZLIF
c320: 45 55 53 45 4c 45 41 46 59 42 45 4c 4c 2c 5a 54  EUSELEAFYBELL,ZT
c330: 52 45 41 54 50 41 43 4b 46 55 54 55 52 45 43 4f  REATPACKFUTURECO
c340: 4e 56 45 52 54 2c 5a 4d 45 4d 4f 52 59 52 45 51  NVERT,ZMEMORYREQ
c350: 55 45 53 54 53 4f 55 52 43 45 42 49 47 2c 22 0a  UESTSOURCEBIG,".
c360: 20 20 20 20 22 5a 59 41 52 44 4f 52 45 47 41 4e      "ZYARDOREGAN
c370: 4f 56 49 56 49 44 4a 45 57 45 4c 2c 5a 44 45 50  OVIVIDJEWEL,ZDEP
c380: 4f 53 49 54 50 41 49 52 43 4f 4c 4c 45 47 45 43  OSITPAIRCOLLEGEC
c390: 4f 4d 45 54 2c 5a 53 4c 45 45 50 59 55 53 45 52  OMET,ZSLEEPYUSER
c3a0: 47 52 41 4e 44 42 4f 57 4c 2c 22 0a 20 20 20 20  GRANDBOWL,".    
c3b0: 22 5a 42 52 49 45 46 47 4f 42 59 44 4f 44 47 45  "ZBRIEFGOBYDODGE
c3c0: 52 48 45 49 47 48 54 2c 5a 43 4c 55 42 52 45 4c  RHEIGHT,ZCLUBREL
c3d0: 45 41 53 45 4c 49 5a 41 52 44 41 44 56 49 43 45  EASELIZARDADVICE
c3e0: 2c 5a 43 41 50 41 42 4c 45 54 52 49 50 44 4f 4f  ,ZCAPABLETRIPDOO
c3f0: 52 41 4c 4d 4f 4e 44 2c 22 0a 20 20 20 20 22 5a  RALMOND,".    "Z
c400: 44 52 59 57 41 4c 4c 42 45 59 4f 4e 44 42 52 4f  DRYWALLBEYONDBRO
c410: 57 4e 42 4f 57 4c 2c 5a 41 53 4b 43 4f 4e 54 41  WNBOWL,ZASKCONTA
c420: 43 54 4d 4f 4e 49 54 4f 52 46 55 4e 2c 5a 4b 49  CTMONITORFUN,ZKI
c430: 57 49 56 49 53 55 41 4c 50 52 49 44 45 41 50 50  WIVISUALPRIDEAPP
c440: 4c 45 2c 22 0a 20 20 20 20 22 5a 4e 4f 54 49 43  LE,".    "ZNOTIC
c450: 45 50 45 41 52 50 4f 4c 49 43 59 4a 55 49 43 45  EPEARPOLICYJUICE
c460: 2c 5a 50 45 41 43 48 43 4f 50 50 45 52 44 49 4e  ,ZPEACHCOPPERDIN
c470: 4e 45 52 4c 41 4b 45 2c 5a 53 54 45 45 4c 43 41  NERLAKE,ZSTEELCA
c480: 52 45 46 55 4c 50 4c 41 54 45 4e 55 4d 42 45 52  REFULPLATENUMBER
c490: 2c 22 0a 20 20 20 20 22 5a 47 4c 41 44 53 50 52  ,".    "ZGLADSPR
c4a0: 41 59 4b 49 44 4e 45 59 47 55 50 50 59 2c 5a 43  AYKIDNEYGUPPY,ZC
c4b0: 4f 4d 50 41 4e 59 53 55 4d 4d 45 52 46 49 42 45  OMPANYSUMMERFIBE
c4c0: 52 45 4c 46 2c 5a 54 45 4e 4e 49 53 43 59 43 4c  RELF,ZTENNISCYCL
c4d0: 45 42 49 4c 4c 4f 46 46 49 43 45 52 2c 22 0a 20  EBILLOFFICER,". 
c4e0: 20 20 20 22 5a 49 4d 41 47 45 50 45 4e 43 49 4c     "ZIMAGEPENCIL
c4f0: 4f 54 48 45 52 42 4f 54 54 4f 4d 2c 5a 57 45 53  OTHERBOTTOM,ZWES
c500: 54 41 4d 4f 55 4e 54 41 46 46 45 43 54 48 45 41  TAMOUNTAFFECTHEA
c510: 52 49 4e 47 2c 5a 44 49 56 45 52 50 41 49 4e 54  RING,ZDIVERPAINT
c520: 4c 45 41 54 48 45 52 45 41 53 59 2c 22 0a 20 20  LEATHEREASY,".  
c530: 20 20 22 5a 53 4b 59 53 4b 59 43 4c 41 53 53 49    "ZSKYSKYCLASSI
c540: 43 42 52 49 45 46 2c 5a 4d 45 53 53 59 53 55 4c  CBRIEF,ZMESSYSUL
c550: 46 55 52 44 52 45 41 4d 46 45 53 54 49 56 45 2c  FURDREAMFESTIVE,
c560: 5a 4d 45 52 52 59 43 52 41 43 4b 54 52 41 49 4e  ZMERRYCRACKTRAIN
c570: 4c 45 41 44 45 52 2c 22 0a 20 20 20 20 22 5a 42  LEADER,".    "ZB
c580: 52 4f 41 44 41 42 4c 45 53 4f 4c 49 44 43 41 53  ROADABLESOLIDCAS
c590: 55 41 4c 2c 5a 47 4c 41 53 53 52 45 53 45 52 56  UAL,ZGLASSRESERV
c5a0: 45 42 41 52 49 55 4d 4d 45 41 4c 2c 5a 54 55 4e  EBARIUMMEAL,ZTUN
c5b0: 45 47 41 53 42 55 46 46 41 4c 4f 43 41 50 49 54  EGASBUFFALOCAPIT
c5c0: 41 4c 2c 22 0a 20 20 20 20 22 5a 42 41 4e 4b 42  AL,".    "ZBANKB
c5d0: 55 46 46 41 4c 4f 52 45 43 4f 56 45 52 4f 52 42  UFFALORECOVERORB
c5e0: 49 54 2c 5a 54 52 45 41 54 54 45 53 54 51 55 49  IT,ZTREATTESTQUI
c5f0: 4c 4c 43 48 41 52 47 45 2c 5a 42 41 4d 42 4f 4f  LLCHARGE,ZBAMBOO
c600: 4d 45 53 53 57 41 53 41 42 49 45 56 45 4e 49 4e  MESSWASABIEVENIN
c610: 47 2c 22 0a 20 20 20 20 22 5a 52 45 57 41 52 44  G,".    "ZREWARD
c620: 49 4e 53 49 44 45 4d 41 4e 47 4f 49 4e 54 45 4e  INSIDEMANGOINTEN
c630: 53 45 2c 5a 45 41 47 4c 45 4c 49 4e 45 4d 49 4e  SE,ZEAGLELINEMIN
c640: 45 4d 41 49 4c 2c 5a 43 41 4c 4d 4c 59 47 45 4d  EMAIL,ZCALMLYGEM
c650: 46 49 4e 49 53 48 45 46 46 45 43 54 2c 22 0a 20  FINISHEFFECT,". 
c660: 20 20 20 22 5a 4b 45 59 46 41 49 4c 41 50 52 49     "ZKEYFAILAPRI
c670: 43 4f 54 4d 45 54 41 4c 2c 5a 46 49 4e 47 45 52  COTMETAL,ZFINGER
c680: 44 55 45 50 49 5a 5a 41 4f 50 54 49 4f 4e 2c 5a  DUEPIZZAOPTION,Z
c690: 43 41 44 45 54 42 52 49 47 48 54 50 4c 41 4e 45  CADETBRIGHTPLANE
c6a0: 54 42 41 4e 4b 2c 22 0a 20 20 20 20 22 5a 47 4f  TBANK,".    "ZGO
c6b0: 4c 44 59 4f 55 4e 47 49 4e 49 54 49 41 4c 4e 4f  LDYOUNGINITIALNO
c6c0: 53 45 2c 5a 4d 49 53 53 52 45 50 4c 59 48 55 4d  SE,ZMISSREPLYHUM
c6d0: 41 4e 4c 49 56 49 4e 47 2c 5a 45 49 47 48 54 4c  ANLIVING,ZEIGHTL
c6e0: 45 41 44 45 52 57 4f 52 4b 45 52 4d 4f 53 54 2c  EADERWORKERMOST,
c6f0: 22 0a 20 20 20 20 22 5a 46 52 41 4d 45 45 4e 54  ".    "ZFRAMEENT
c700: 45 52 53 49 4d 50 4c 45 4d 4f 55 54 48 2c 5a 42  ERSIMPLEMOUTH,ZB
c710: 49 47 54 48 49 4e 4b 43 4f 4e 56 45 52 54 45 43  IGTHINKCONVERTEC
c720: 4f 4e 4f 4d 59 2c 5a 46 41 43 45 49 4e 56 49 54  ONOMY,ZFACEINVIT
c730: 45 54 41 4c 4b 47 4f 4c 44 2c 22 0a 20 20 20 20  ETALKGOLD,".    
c740: 22 5a 50 4f 53 54 50 52 4f 54 45 49 4e 48 41 4e  "ZPOSTPROTEINHAN
c750: 44 4c 45 41 43 54 4f 52 2c 5a 48 45 52 52 49 4e  DLEACTOR,ZHERRIN
c760: 47 4a 4f 4b 45 46 45 41 54 55 52 45 48 4f 50 45  GJOKEFEATUREHOPE
c770: 46 55 4c 2c 5a 43 41 42 42 41 47 45 53 4f 43 4b  FUL,ZCABBAGESOCK
c780: 45 41 53 45 4d 49 4e 55 54 45 2c 22 0a 20 20 20  EASEMINUTE,".   
c790: 20 22 5a 4d 55 46 46 49 4e 44 52 59 45 52 44 52   "ZMUFFINDRYERDR
c7a0: 41 57 46 4f 52 54 55 4e 45 2c 5a 50 52 4f 42 4c  AWFORTUNE,ZPROBL
c7b0: 45 4d 43 4c 55 42 50 4f 50 4f 56 45 52 4a 45 4c  EMCLUBPOPOVERJEL
c7c0: 4c 59 2c 5a 47 49 56 45 56 49 56 49 44 44 49 56  LY,ZGIVEVIVIDDIV
c7d0: 49 4e 45 4d 45 41 4e 49 4e 47 2c 22 0a 20 20 20  INEMEANING,".   
c7e0: 20 22 5a 47 45 4e 45 4e 41 54 55 52 41 4c 48 45   "ZGENENATURALHE
c7f0: 41 52 49 4e 47 4b 49 54 45 2c 5a 47 45 4e 45 52  ARINGKITE,ZGENER
c800: 41 4c 52 45 53 4f 52 54 53 4b 59 4f 50 45 4e 2c  ALRESORTSKYOPEN,
c810: 5a 4c 45 54 54 55 43 45 42 49 52 44 4d 45 45 54  ZLETTUCEBIRDMEET
c820: 44 45 42 41 54 45 2c 22 0a 20 20 20 20 22 5a 42  DEBATE,".    "ZB
c830: 41 53 45 47 4f 55 44 41 52 45 47 55 4c 41 52 46  ASEGOUDAREGULARF
c840: 4f 52 47 49 56 45 2c 5a 43 48 41 52 47 45 43 4c  ORGIVE,ZCHARGECL
c850: 49 43 4b 48 55 4d 41 4e 45 48 49 52 45 2c 5a 50  ICKHUMANEHIRE,ZP
c860: 4c 41 4e 45 54 46 41 4d 49 4c 59 50 55 52 45 4d  LANETFAMILYPUREM
c870: 45 4d 4f 52 59 2c 22 0a 20 20 20 20 22 5a 4d 49  EMORY,".    "ZMI
c880: 4e 4f 52 57 41 59 50 41 50 45 52 43 4c 41 53 53  NORWAYPAPERCLASS
c890: 59 2c 5a 43 41 50 59 45 41 52 4c 59 52 49 56 45  Y,ZCAPYEARLYRIVE
c8a0: 54 42 52 55 53 48 2c 5a 53 49 5a 45 54 4f 45 41  TBRUSH,ZSIZETOEA
c8b0: 57 41 52 44 46 52 45 53 48 2c 22 0a 20 20 20 20  WARDFRESH,".    
c8c0: 22 5a 41 52 53 45 4e 49 43 53 41 4d 50 4c 45 57  "ZARSENICSAMPLEW
c8d0: 41 49 54 4d 55 4f 4e 2c 5a 53 51 55 41 52 45 47  AITMUON,ZSQUAREG
c8e0: 4c 45 45 46 55 4c 43 48 49 4c 44 4c 49 47 48 54  LEEFULCHILDLIGHT
c8f0: 2c 5a 53 48 49 4e 59 41 53 53 49 53 54 4c 49 56  ,ZSHINYASSISTLIV
c900: 49 4e 47 43 52 41 42 2c 22 0a 20 20 20 20 22 5a  INGCRAB,".    "Z
c910: 43 4f 52 4e 45 52 41 4e 43 48 4f 52 54 41 50 45  CORNERANCHORTAPE
c920: 44 49 56 45 52 2c 5a 44 45 43 41 44 45 4a 4f 59  DIVER,ZDECADEJOY
c930: 4f 55 53 57 41 56 45 48 41 42 49 54 2c 5a 54 52  OUSWAVEHABIT,ZTR
c940: 41 56 45 4c 44 52 49 56 45 52 43 4f 4e 54 45 53  AVELDRIVERCONTES
c950: 54 4c 49 4c 59 2c 22 0a 20 20 20 20 22 5a 46 4c  TLILY,".    "ZFL
c960: 59 49 4e 47 44 4f 43 54 4f 52 54 41 42 4c 45 4d  YINGDOCTORTABLEM
c970: 45 4c 4f 44 59 2c 5a 53 48 41 52 4b 4a 55 53 54  ELODY,ZSHARKJUST
c980: 46 52 55 49 54 4d 4f 56 49 45 2c 5a 46 41 4d 49  FRUITMOVIE,ZFAMI
c990: 4c 59 56 49 53 55 41 4c 4f 57 4e 45 52 4d 41 54  LYVISUALOWNERMAT
c9a0: 54 45 52 2c 22 0a 20 20 20 20 22 5a 46 41 52 4d  TER,".    "ZFARM
c9b0: 45 52 4d 4f 52 4e 49 4e 47 4d 49 52 52 4f 52 43  ERMORNINGMIRRORC
c9c0: 4f 4e 43 45 52 4e 2c 5a 47 49 46 54 49 43 45 46  ONCERN,ZGIFTICEF
c9d0: 49 53 48 47 4c 55 45 48 41 49 52 2c 5a 4f 55 54  ISHGLUEHAIR,ZOUT
c9e0: 53 49 44 45 50 45 41 48 45 4e 43 4f 55 4e 54 49  SIDEPEAHENCOUNTI
c9f0: 43 45 2c 22 0a 20 20 20 20 22 5a 53 50 52 45 41  CE,".    "ZSPREA
ca00: 44 4d 4f 54 4f 52 42 49 53 43 55 49 54 42 41 43  DMOTORBISCUITBAC
ca10: 4f 4e 2c 5a 57 49 53 48 48 49 54 53 4b 49 4e 4d  ON,ZWISHHITSKINM
ca20: 4f 54 4f 52 2c 5a 48 4f 4c 49 44 41 59 48 45 41  OTOR,ZHOLIDAYHEA
ca30: 44 50 4f 4e 59 44 45 54 41 49 4c 2c 22 0a 20 20  DPONYDETAIL,".  
ca40: 20 20 22 5a 57 4f 4f 44 50 4f 45 54 52 59 43 4f    "ZWOODPOETRYCO
ca50: 42 42 4c 45 52 42 45 4e 43 48 2c 5a 41 49 52 46  BBLERBENCH,ZAIRF
ca60: 4f 52 47 49 56 45 48 45 41 44 46 52 4f 47 2c 5a  ORGIVEHEADFROG,Z
ca70: 42 52 4f 57 42 41 4c 41 4e 43 45 4b 45 59 43 48  BROWBALANCEKEYCH
ca80: 4f 57 44 45 52 2c 22 0a 20 20 20 20 22 5a 44 49  OWDER,".    "ZDI
ca90: 53 48 4b 45 45 50 42 4c 45 53 54 4d 4f 4e 49 54  SHKEEPBLESTMONIT
caa0: 4f 52 2c 5a 43 4c 41 4d 42 49 54 41 52 55 47 55  OR,ZCLAMBITARUGU
cab0: 4c 41 46 41 4a 49 54 41 2c 5a 50 4c 49 45 52 53  LAFAJITA,ZPLIERS
cac0: 50 52 49 4e 54 41 53 4b 4f 52 45 47 41 4e 4f 2c  PRINTASKOREGANO,
cad0: 22 0a 20 20 20 20 22 5a 52 41 44 49 41 4e 54 57  ".    "ZRADIANTW
cae0: 48 45 4e 54 52 59 43 41 52 44 2c 5a 44 45 4c 41  HENTRYCARD,ZDELA
caf0: 59 4f 55 54 43 4f 4d 45 48 4f 52 4e 41 47 45 4e  YOUTCOMEHORNAGEN
cb00: 43 59 2c 5a 50 55 52 45 43 41 4b 45 56 49 56 49  CY,ZPURECAKEVIVI
cb10: 44 4e 45 41 54 4c 59 2c 22 0a 20 20 20 20 22 5a  DNEATLY,".    "Z
cb20: 50 41 54 54 45 52 4e 43 4c 4f 52 49 4e 45 47 52  PATTERNCLORINEGR
cb30: 41 4e 44 43 4f 4c 42 59 2c 5a 48 41 4e 44 59 52  ANDCOLBY,ZHANDYR
cb40: 45 50 41 49 52 50 52 4f 54 4f 4e 41 49 52 50 4f  EPAIRPROTONAIRPO
cb50: 52 54 2c 5a 41 47 45 52 45 45 44 46 52 4f 47 42  RT,ZAGEREEDFROGB
cb60: 41 53 4b 45 54 2c 22 0a 20 20 20 20 22 5a 53 4f  ASKET,".    "ZSO
cb70: 52 54 4d 49 53 54 59 51 55 4f 54 45 43 41 42 42  RTMISTYQUOTECABB
cb80: 41 47 45 2c 5a 46 4f 4f 54 54 41 50 57 4f 52 44  AGE,ZFOOTTAPWORD
cb90: 45 4e 54 52 59 2c 5a 52 45 53 4f 4c 56 45 57 52  ENTRY,ZRESOLVEWR
cba0: 49 53 54 57 52 41 50 41 50 50 4c 45 2c 22 0a 20  ISTWRAPAPPLE,". 
cbb0: 20 20 20 22 5a 44 49 4c 4c 41 53 4b 48 4f 4b 49     "ZDILLASKHOKI
cbc0: 4c 45 4d 4f 4e 2c 5a 46 49 4c 4c 53 54 4f 50 4c  LEMON,ZFILLSTOPL
cbd0: 41 57 4a 4f 59 46 55 4c 2c 5a 41 43 54 49 4f 4e  AWJOYFUL,ZACTION
cbe0: 52 41 4e 47 45 45 4c 45 47 41 4e 54 4e 45 55 54  RANGEELEGANTNEUT
cbf0: 52 4f 4e 2c 22 0a 20 20 20 20 22 5a 52 45 53 4f  RON,".    "ZRESO
cc00: 52 54 59 41 52 44 47 52 45 45 4e 4c 45 54 2c 5a  RTYARDGREENLET,Z
cc10: 43 52 45 41 4d 45 56 45 4e 49 4e 47 4c 49 50 42  CREAMEVENINGLIPB
cc20: 52 41 4e 43 48 2c 5a 57 48 41 4c 45 4d 41 54 48  RANCH,ZWHALEMATH
cc30: 41 56 4f 43 41 44 4f 43 4f 50 50 45 52 2c 22 0a  AVOCADOCOPPER,".
cc40: 20 20 20 20 22 5a 47 52 41 59 53 55 52 56 45 59      "ZGRAYSURVEY
cc50: 57 49 52 45 4c 4f 56 45 2c 5a 42 45 4c 4c 59 43  WIRELOVE,ZBELLYC
cc60: 52 41 53 48 49 54 45 4d 4c 41 43 4b 2c 5a 48 41  RASHITEMLACK,ZHA
cc70: 4e 47 45 52 4c 49 54 48 49 55 4d 44 49 4e 4e 45  NGERLITHIUMDINNE
cc80: 52 4d 45 45 54 2c 22 0a 20 20 20 20 22 5a 43 41  RMEET,".    "ZCA
cc90: 52 52 59 46 4c 4f 4f 52 4d 49 4e 4e 4f 57 44 52  RRYFLOORMINNOWDR
cca0: 41 47 4f 4e 2c 5a 4d 41 4c 4c 45 51 55 49 50 54  AGON,ZMALLEQUIPT
ccb0: 48 41 4e 4b 53 47 4c 55 45 2c 5a 54 45 52 4d 46  HANKSGLUE,ZTERMF
ccc0: 49 54 54 49 4e 47 48 4f 55 53 49 4e 47 43 4f 4d  ITTINGHOUSINGCOM
ccd0: 4d 41 4e 44 2c 22 0a 20 20 20 20 22 5a 4f 4e 45  MAND,".    "ZONE
cce0: 52 45 4c 45 41 53 45 41 56 45 52 41 47 45 4e 55  RELEASEAVERAGENU
ccf0: 52 53 45 2c 5a 4c 41 43 45 41 44 44 52 45 53 53  RSE,ZLACEADDRESS
cd00: 47 52 4f 55 4e 44 43 41 52 45 46 55 4c 22 0a 20  GROUNDCAREFUL". 
cd10: 20 20 20 22 20 46 52 4f 4d 20 5a 4c 4f 4f 4b 53     " FROM ZLOOKS
cd20: 4c 49 4b 45 43 4f 52 45 44 41 54 41 20 57 48 45  LIKECOREDATA WHE
cd30: 52 45 20 5a 50 4b 3d 3f 31 3b 22 0a 20 20 29 3b  RE ZPK=?1;".  );
cd40: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
cd50: 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20   i++){.    x1 = 
cd60: 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f  speedtest1_rando
cd70: 6d 28 29 25 6e 52 6f 77 3b 0a 20 20 20 20 73 71  m()%nRow;.    sq
cd80: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
cd90: 2e 70 53 74 6d 74 2c 20 31 2c 20 78 31 29 3b 0a  .pStmt, 1, x1);.
cda0: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
cdb0: 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  un();.  }.  spee
cdc0: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
cdd0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 65  );.}../*.** A te
cde0: 73 74 73 65 74 20 75 73 65 64 20 66 6f 72 20 64  stset used for d
cdf0: 65 62 75 67 67 69 6e 67 20 73 70 65 65 64 74 65  ebugging speedte
ce00: 73 74 31 20 69 74 73 65 6c 66 2e 0a 2a 2f 0a 76  st1 itself..*/.v
ce10: 6f 69 64 20 74 65 73 74 73 65 74 5f 64 65 62 75  oid testset_debu
ce20: 67 31 28 76 6f 69 64 29 7b 0a 20 20 75 6e 73 69  g1(void){.  unsi
ce30: 67 6e 65 64 20 69 2c 20 6e 3b 0a 20 20 75 6e 73  gned i, n;.  uns
ce40: 69 67 6e 65 64 20 78 31 2c 20 78 32 3b 0a 20 20  igned x1, x2;.  
ce50: 63 68 61 72 20 7a 4e 75 6d 5b 32 30 30 30 5d 3b  char zNum[2000];
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce70: 20 41 20 6e 75 6d 62 65 72 20 6e 61 6d 65 20 2a   A number name *
ce80: 2f 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73  /..  n = g.szTes
ce90: 74 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c  t;.  for(i=1; i<
cea0: 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31  =n; i++){.    x1
ceb0: 20 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 20 6e 29   = swizzle(i, n)
cec0: 3b 0a 20 20 20 20 78 32 20 3d 20 73 77 69 7a 7a  ;.    x2 = swizz
ced0: 6c 65 28 78 31 2c 20 6e 29 3b 0a 20 20 20 20 73  le(x1, n);.    s
cee0: 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72  peedtest1_number
cef0: 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c 20 73  name(x1, zNum, s
cf00: 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20  izeof(zNum));.  
cf10: 20 20 70 72 69 6e 74 66 28 22 25 35 64 20 25 35    printf("%5d %5
cf20: 64 20 25 35 64 20 25 73 5c 6e 22 2c 20 69 2c 20  d %5d %s\n", i, 
cf30: 78 31 2c 20 78 32 2c 20 7a 4e 75 6d 29 3b 0a 20  x1, x2, zNum);. 
cf40: 20 7d 0a 7d 0a 0a 23 69 66 64 65 66 20 5f 5f 6c   }.}..#ifdef __l
cf50: 69 6e 75 78 5f 5f 0a 23 69 6e 63 6c 75 64 65 20  inux__.#include 
cf60: 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69  <sys/types.h>.#i
cf70: 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68  nclude <unistd.h
cf80: 3e 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  >../*.** Attempt
cf90: 20 74 6f 20 64 69 73 70 6c 61 79 20 49 2f 4f 20   to display I/O 
cfa0: 73 74 61 74 73 20 6f 6e 20 4c 69 6e 75 78 20 75  stats on Linux u
cfb0: 73 69 6e 67 20 2f 70 72 6f 63 2f 50 49 44 2f 69  sing /proc/PID/i
cfc0: 6f 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  o.*/.static void
cfd0: 20 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53   displayLinuxIoS
cfe0: 74 61 74 73 28 46 49 4c 45 20 2a 6f 75 74 29 7b  tats(FILE *out){
cff0: 0a 20 20 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 63  .  FILE *in;.  c
d000: 68 61 72 20 7a 5b 32 30 30 5d 3b 0a 20 20 73 71  har z[200];.  sq
d010: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
d020: 69 7a 65 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f 70  izeof(z), z, "/p
d030: 72 6f 63 2f 25 64 2f 69 6f 22 2c 20 67 65 74 70  roc/%d/io", getp
d040: 69 64 28 29 29 3b 0a 20 20 69 6e 20 3d 20 66 6f  id());.  in = fo
d050: 70 65 6e 28 7a 2c 20 22 72 62 22 29 3b 0a 20 20  pen(z, "rb");.  
d060: 69 66 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75  if( in==0 ) retu
d070: 72 6e 3b 0a 20 20 77 68 69 6c 65 28 20 66 67 65  rn;.  while( fge
d080: 74 73 28 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c  ts(z, sizeof(z),
d090: 20 69 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 73   in)!=0 ){.    s
d0a0: 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
d0b0: 63 74 20 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ct {.      const
d0c0: 20 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e 3b   char *zPattern;
d0d0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
d0e0: 72 20 2a 7a 44 65 73 63 3b 0a 20 20 20 20 7d 20  r *zDesc;.    } 
d0f0: 61 54 72 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20  aTrans[] = {.   
d100: 20 20 20 7b 20 22 72 63 68 61 72 3a 20 22 2c 20     { "rchar: ", 
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d120: 20 22 42 79 74 65 73 20 72 65 63 65 69 76 65 64   "Bytes received
d130: 20 62 79 20 72 65 61 64 28 29 3a 22 20 7d 2c 0a   by read():" },.
d140: 20 20 20 20 20 20 7b 20 22 77 63 68 61 72 3a 20        { "wchar: 
d150: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
d160: 20 20 20 20 22 42 79 74 65 73 20 73 65 6e 74 20      "Bytes sent 
d170: 74 6f 20 77 72 69 74 65 28 29 3a 22 20 20 20 20  to write():"    
d180: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63  },.      { "sysc
d190: 72 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20  r: ",           
d1a0: 20 20 20 20 20 20 20 22 52 65 61 64 28 29 20 73         "Read() s
d1b0: 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20  ystem calls:"   
d1c0: 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73     },.      { "s
d1d0: 79 73 63 77 3a 20 22 2c 20 20 20 20 20 20 20 20  yscw: ",        
d1e0: 20 20 20 20 20 20 20 20 20 20 22 57 72 69 74 65            "Write
d1f0: 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a  () system calls:
d200: 22 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  "     },.      {
d210: 20 22 72 65 61 64 5f 62 79 74 65 73 3a 20 22 2c   "read_bytes: ",
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79               "By
d230: 74 65 73 20 72 63 76 64 20 66 72 6f 6d 20 73 74  tes rcvd from st
d240: 6f 72 61 67 65 3a 22 20 20 7d 2c 0a 20 20 20 20  orage:"  },.    
d250: 20 20 7b 20 22 77 72 69 74 65 5f 62 79 74 65 73    { "write_bytes
d260: 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  : ",            
d270: 22 42 79 74 65 73 20 73 65 6e 74 20 74 6f 20 73  "Bytes sent to s
d280: 74 6f 72 61 67 65 3a 22 20 20 20 20 7d 2c 0a 20  torage:"    },. 
d290: 20 20 20 20 20 7b 20 22 63 61 6e 63 65 6c 6c 65       { "cancelle
d2a0: 64 5f 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22  d_write_bytes: "
d2b0: 2c 20 20 22 43 61 6e 63 65 6c 6c 65 64 20 77 72  ,  "Cancelled wr
d2c0: 69 74 65 20 62 79 74 65 73 3a 22 20 20 20 20 7d  ite bytes:"    }
d2d0: 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ,.    };.    int
d2e0: 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
d2f0: 20 69 3c 73 69 7a 65 6f 66 28 61 54 72 61 6e 73   i<sizeof(aTrans
d300: 29 2f 73 69 7a 65 6f 66 28 61 54 72 61 6e 73 5b  )/sizeof(aTrans[
d310: 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  0]); i++){.     
d320: 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74   int n = (int)st
d330: 72 6c 65 6e 28 61 54 72 61 6e 73 5b 69 5d 2e 7a  rlen(aTrans[i].z
d340: 50 61 74 74 65 72 6e 29 3b 0a 20 20 20 20 20 20  Pattern);.      
d350: 69 66 28 20 73 74 72 6e 63 6d 70 28 61 54 72 61  if( strncmp(aTra
d360: 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 2c 20  ns[i].zPattern, 
d370: 7a 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  z, n)==0 ){.    
d380: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
d390: 20 22 2d 2d 20 25 2d 32 38 73 20 25 73 22 2c 20   "-- %-28s %s", 
d3a0: 61 54 72 61 6e 73 5b 69 5d 2e 7a 44 65 73 63 2c  aTrans[i].zDesc,
d3b0: 20 26 7a 5b 6e 5d 29 3b 0a 20 20 20 20 20 20 20   &z[n]);.       
d3c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
d3d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 63 6c 6f      }.  }.  fclo
d3e0: 73 65 28 69 6e 29 3b 0a 7d 20 20 20 0a 23 65 6e  se(in);.}   .#en
d3f0: 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
d400: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3c 33  VERSION_NUMBER<3
d410: 30 30 36 30 31 38 0a 23 20 20 64 65 66 69 6e 65  006018.#  define
d420: 20 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69   sqlite3_sourcei
d430: 64 28 58 29 20 22 28 62 65 66 6f 72 65 20 33 2e  d(X) "(before 3.
d440: 36 2e 31 38 29 22 0a 23 65 6e 64 69 66 0a 0a 69  6.18)".#endif..i
d450: 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63  nt main(int argc
d460: 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a  , char **argv){.
d470: 20 20 69 6e 74 20 64 6f 41 75 74 6f 76 61 63 20    int doAutovac 
d480: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
d490: 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 61 75  /* True for --au
d4a0: 74 6f 76 61 63 75 75 6d 20 2a 2f 0a 20 20 69 6e  tovacuum */.  in
d4b0: 74 20 63 61 63 68 65 53 69 7a 65 20 3d 20 30 3b  t cacheSize = 0;
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
d4d0: 65 73 69 72 65 64 20 63 61 63 68 65 20 73 69 7a  esired cache siz
d4e0: 65 2e 20 20 30 20 6d 65 61 6e 73 20 64 65 66 61  e.  0 means defa
d4f0: 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 64 6f 45  ult */.  int doE
d500: 78 63 6c 75 73 69 76 65 20 3d 20 30 3b 20 20 20  xclusive = 0;   
d510: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
d520: 6f 72 20 2d 2d 65 78 63 6c 75 73 69 76 65 20 2a  or --exclusive *
d530: 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 20 3d 20  /.  int nHeap = 
d540: 30 2c 20 6d 6e 48 65 61 70 20 3d 20 30 3b 20 20  0, mnHeap = 0;  
d550: 20 20 2f 2a 20 48 65 61 70 20 73 69 7a 65 20 66    /* Heap size f
d560: 72 6f 6d 20 2d 2d 68 65 61 70 20 2a 2f 0a 20 20  rom --heap */.  
d570: 69 6e 74 20 64 6f 49 6e 63 72 76 61 63 20 3d 20  int doIncrvac = 
d580: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  0;            /*
d590: 20 54 72 75 65 20 66 6f 72 20 2d 2d 69 6e 63 72   True for --incr
d5a0: 76 61 63 75 75 6d 20 2a 2f 0a 20 20 63 6f 6e 73  vacuum */.  cons
d5b0: 74 20 63 68 61 72 20 2a 7a 4a 4d 6f 64 65 20 3d  t char *zJMode =
d5c0: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4a 6f 75   0;       /* Jou
d5d0: 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 63  rnal mode */.  c
d5e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 20  onst char *zKey 
d5f0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
d600: 45 6e 63 72 79 70 74 69 6f 6e 20 6b 65 79 20 2a  Encryption key *
d610: 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 20 3d 20  /.  int nLook = 
d620: 2d 31 2c 20 73 7a 4c 6f 6f 6b 20 3d 20 30 3b 20  -1, szLook = 0; 
d630: 20 20 2f 2a 20 2d 2d 6c 6f 6f 6b 61 73 69 64 65    /* --lookaside
d640: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
d650: 2f 0a 20 20 69 6e 74 20 6e 6f 53 79 6e 63 20 3d  /.  int noSync =
d660: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
d670: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d    /* True for --
d680: 6e 6f 73 79 6e 63 20 2a 2f 0a 20 20 69 6e 74 20  nosync */.  int 
d690: 70 61 67 65 53 69 7a 65 20 3d 20 30 3b 20 20 20  pageSize = 0;   
d6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 73            /* Des
d6b0: 69 72 65 64 20 70 61 67 65 20 73 69 7a 65 2e 20  ired page size. 
d6c0: 20 30 20 6d 65 61 6e 73 20 64 65 66 61 75 6c 74   0 means default
d6d0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 43 61 63 68   */.  int nPCach
d6e0: 65 20 3d 20 30 2c 20 73 7a 50 43 61 63 68 65 20  e = 0, szPCache 
d6f0: 3d 20 30 3b 2f 2a 20 2d 2d 70 63 61 63 68 65 20  = 0;/* --pcache 
d700: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
d710: 0a 20 20 69 6e 74 20 64 6f 50 43 61 63 68 65 20  .  int doPCache 
d720: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
d730: 20 2f 2a 20 54 72 75 65 20 69 66 20 2d 2d 70 63   /* True if --pc
d740: 61 63 68 65 20 69 73 20 73 65 65 6e 20 2a 2f 0a  ache is seen */.
d750: 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 20 3d    int nScratch =
d760: 20 30 2c 20 73 7a 53 63 72 61 74 63 68 3d 30 3b   0, szScratch=0;
d770: 2f 2a 20 2d 2d 73 63 72 61 74 63 68 20 63 6f 6e  /* --scratch con
d780: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 20 20  figuration */.  
d790: 69 6e 74 20 73 68 6f 77 53 74 61 74 73 20 3d 20  int showStats = 
d7a0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  0;            /*
d7b0: 20 54 72 75 65 20 66 6f 72 20 2d 2d 73 74 61 74   True for --stat
d7c0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 68 72 65  s */.  int nThre
d7d0: 61 64 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ad = 0;         
d7e0: 20 20 20 20 20 2f 2a 20 2d 2d 74 68 72 65 61 64       /* --thread
d7f0: 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 6e 74  s value */.  int
d800: 20 6d 6d 61 70 53 69 7a 65 20 3d 20 30 3b 20 20   mmapSize = 0;  
d810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
d820: 77 20 62 69 67 20 6f 66 20 61 20 6d 65 6d 6f 72  w big of a memor
d830: 79 20 6d 61 70 20 74 6f 20 75 73 65 20 2a 2f 0a  y map to use */.
d840: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
d850: 53 65 74 20 3d 20 22 6d 61 69 6e 22 3b 20 20 20  Set = "main";   
d860: 2f 2a 20 57 68 69 63 68 20 2d 2d 74 65 73 74 73  /* Which --tests
d870: 65 74 20 74 6f 72 75 6e 20 2a 2f 0a 20 20 69 6e  et torun */.  in
d880: 74 20 64 6f 54 72 61 63 65 20 3d 20 30 3b 20 20  t doTrace = 0;  
d890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
d8a0: 72 75 65 20 66 6f 72 20 2d 2d 74 72 61 63 65 20  rue for --trace 
d8b0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
d8c0: 2a 7a 45 6e 63 6f 64 69 6e 67 20 3d 20 30 3b 20  *zEncoding = 0; 
d8d0: 20 20 20 2f 2a 20 2d 2d 75 74 66 31 36 62 65 20     /* --utf16be 
d8e0: 6f 72 20 2d 2d 75 74 66 31 36 6c 65 20 2a 2f 0a  or --utf16le */.
d8f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
d900: 62 4e 61 6d 65 20 3d 20 30 3b 20 20 20 20 20 20  bName = 0;      
d910: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
d920: 65 73 74 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  est database */.
d930: 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 20 3d  .  void *pHeap =
d940: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
d950: 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 68 65   /* Allocated he
d960: 61 70 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ap space */.  vo
d970: 69 64 20 2a 70 4c 6f 6f 6b 20 3d 20 30 3b 20 20  id *pLook = 0;  
d980: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d990: 6c 6c 6f 63 61 74 65 64 20 6c 6f 6f 6b 61 73 69  llocated lookasi
d9a0: 64 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  de space */.  vo
d9b0: 69 64 20 2a 70 50 43 61 63 68 65 20 3d 20 30 3b  id *pPCache = 0;
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d9d0: 6c 6c 6f 63 61 74 65 64 20 73 74 6f 72 61 67 65  llocated storage
d9e0: 20 66 6f 72 20 70 63 61 63 68 65 20 2a 2f 0a 20   for pcache */. 
d9f0: 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 20   void *pScratch 
da00: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  = 0;           /
da10: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 74 6f 72  * Allocated stor
da20: 61 67 65 20 66 6f 72 20 73 63 72 61 74 63 68 20  age for scratch 
da30: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 69  */.  int iCur, i
da40: 48 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Hi;             
da50: 20 20 20 2f 2a 20 53 74 61 74 73 20 76 61 6c 75     /* Stats valu
da60: 65 73 2c 20 63 75 72 72 65 6e 74 20 61 6e 64 20  es, current and 
da70: 22 68 69 67 68 77 61 74 65 72 22 20 2a 2f 0a 20  "highwater" */. 
da80: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
daa0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
dab0: 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
dac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dad0: 20 20 2f 2a 20 41 50 49 20 72 65 74 75 72 6e 20    /* API return 
dae0: 63 6f 64 65 20 2a 2f 0a 0a 20 20 2f 2a 20 44 69  code */..  /* Di
daf0: 73 70 6c 61 79 20 74 68 65 20 76 65 72 73 69 6f  splay the versio
db00: 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 69 6e  n of SQLite bein
db10: 67 20 74 65 73 74 65 64 20 2a 2f 0a 20 20 70 72  g tested */.  pr
db20: 69 6e 74 66 28 22 2d 2d 20 53 70 65 65 64 74 65  intf("-- Speedte
db30: 73 74 31 20 66 6f 72 20 53 51 4c 69 74 65 20 25  st1 for SQLite %
db40: 73 20 25 2e 35 30 73 5c 6e 22 2c 0a 20 20 20 20  s %.50s\n",.    
db50: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62       sqlite3_lib
db60: 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74  version(), sqlit
db70: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a  e3_sourceid());.
db80: 0a 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 63 6f  .  /* Process co
db90: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d  mmand-line argum
dba0: 65 6e 74 73 20 2a 2f 0a 20 20 67 2e 7a 57 52 20  ents */.  g.zWR 
dbb0: 3d 20 22 22 3b 0a 20 20 67 2e 7a 4e 4e 20 3d 20  = "";.  g.zNN = 
dbc0: 22 22 3b 0a 20 20 67 2e 7a 50 4b 20 3d 20 22 55  "";.  g.zPK = "U
dbd0: 4e 49 51 55 45 22 3b 0a 20 20 67 2e 73 7a 54 65  NIQUE";.  g.szTe
dbe0: 73 74 20 3d 20 31 30 30 3b 0a 20 20 67 2e 6e 52  st = 100;.  g.nR
dbf0: 65 70 65 61 74 20 3d 20 31 3b 0a 20 20 66 6f 72  epeat = 1;.  for
dc00: 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=1; i<argc; i+
dc10: 2b 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  +){.    const ch
dc20: 61 72 20 2a 7a 20 3d 20 61 72 67 76 5b 69 5d 3b  ar *z = argv[i];
dc30: 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27  .    if( z[0]=='
dc40: 2d 27 20 29 7b 0a 20 20 20 20 20 20 64 6f 7b 20  -' ){.      do{ 
dc50: 7a 2b 2b 3b 20 7d 77 68 69 6c 65 28 20 7a 5b 30  z++; }while( z[0
dc60: 5d 3d 3d 27 2d 27 20 29 3b 0a 20 20 20 20 20 20  ]=='-' );.      
dc70: 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 61 75  if( strcmp(z,"au
dc80: 74 6f 76 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b  tovacuum")==0 ){
dc90: 0a 20 20 20 20 20 20 20 20 64 6f 41 75 74 6f 76  .        doAutov
dca0: 61 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  ac = 1;.      }e
dcb0: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
dcc0: 2c 22 63 61 63 68 65 73 69 7a 65 22 29 3d 3d 30  ,"cachesize")==0
dcd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
dce0: 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61  i>=argc-1 ) fata
dcf0: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
dd00: 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c   argument on %s\
dd10: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
dd20: 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
dd30: 20 20 20 63 61 63 68 65 53 69 7a 65 20 3d 20 69     cacheSize = i
dd40: 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
dd50: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  [i]);.      }els
dd60: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
dd70: 65 78 63 6c 75 73 69 76 65 22 29 3d 3d 30 20 29  exclusive")==0 )
dd80: 7b 0a 20 20 20 20 20 20 20 20 64 6f 45 78 63 6c  {.        doExcl
dd90: 75 73 69 76 65 20 3d 20 31 3b 0a 20 20 20 20 20  usive = 1;.     
dda0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
ddb0: 70 28 7a 2c 22 65 78 70 6c 61 69 6e 22 29 3d 3d  p(z,"explain")==
ddc0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62  0 ){.        g.b
ddd0: 53 71 6c 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20  SqlOnly = 1;.   
dde0: 20 20 20 20 20 67 2e 62 45 78 70 6c 61 69 6e 20       g.bExplain 
ddf0: 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
de00: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 68   if( strcmp(z,"h
de10: 65 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eap")==0 ){.    
de20: 20 20 20 20 69 66 28 20 69 3e 3d 61 72 67 63 2d      if( i>=argc-
de30: 32 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28  2 ) fatal_error(
de40: 22 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e  "missing argumen
de50: 74 73 20 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67  ts on %s\n", arg
de60: 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6e  v[i]);.        n
de70: 48 65 61 70 20 3d 20 69 6e 74 65 67 65 72 56 61  Heap = integerVa
de80: 6c 75 65 28 61 72 67 76 5b 69 2b 31 5d 29 3b 0a  lue(argv[i+1]);.
de90: 20 20 20 20 20 20 20 20 6d 6e 48 65 61 70 20 3d          mnHeap =
dea0: 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72   integerValue(ar
deb0: 67 76 5b 69 2b 32 5d 29 3b 0a 20 20 20 20 20 20  gv[i+2]);.      
dec0: 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20    i += 2;.      
ded0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
dee0: 28 7a 2c 22 69 6e 63 72 76 61 63 75 75 6d 22 29  (z,"incrvacuum")
def0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 64  ==0 ){.        d
df00: 6f 49 6e 63 72 76 61 63 20 3d 20 31 3b 0a 20 20  oIncrvac = 1;.  
df10: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
df20: 72 63 6d 70 28 7a 2c 22 6a 6f 75 72 6e 61 6c 22  rcmp(z,"journal"
df30: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
df40: 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20  if( i>=argc-1 ) 
df50: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73  fatal_error("mis
df60: 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e  sing argument on
df70: 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29   %s\n", argv[i])
df80: 3b 0a 20 20 20 20 20 20 20 20 7a 4a 4d 6f 64 65  ;.        zJMode
df90: 20 3d 20 61 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20   = argv[++i];.  
dfa0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
dfb0: 72 63 6d 70 28 7a 2c 22 6b 65 79 22 29 3d 3d 30  rcmp(z,"key")==0
dfc0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
dfd0: 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61  i>=argc-1 ) fata
dfe0: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
dff0: 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c   argument on %s\
e000: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
e010: 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 61 72 67        zKey = arg
e020: 76 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20 7d 65  v[++i];.      }e
e030: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
e040: 2c 22 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30  ,"lookaside")==0
e050: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
e060: 69 3e 3d 61 72 67 63 2d 32 20 29 20 66 61 74 61  i>=argc-2 ) fata
e070: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
e080: 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 20 25 73   arguments on %s
e090: 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
e0a0: 20 20 20 20 20 20 20 6e 4c 6f 6f 6b 20 3d 20 69         nLook = i
e0b0: 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
e0c0: 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  [i+1]);.        
e0d0: 73 7a 4c 6f 6f 6b 20 3d 20 69 6e 74 65 67 65 72  szLook = integer
e0e0: 56 61 6c 75 65 28 61 72 67 76 5b 69 2b 32 5d 29  Value(argv[i+2])
e0f0: 3b 0a 20 20 20 20 20 20 20 20 69 20 2b 3d 20 32  ;.        i += 2
e100: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ;.#if SQLITE_VER
e110: 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30  SION_NUMBER>=300
e120: 36 30 30 30 0a 20 20 20 20 20 20 7d 65 6c 73 65  6000.      }else
e130: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6d   if( strcmp(z,"m
e140: 75 6c 74 69 74 68 72 65 61 64 22 29 3d 3d 30 20  ultithread")==0 
e150: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
e160: 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
e170: 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52  _CONFIG_MULTITHR
e180: 45 41 44 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  EAD);.      }els
e190: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
e1a0: 6e 6f 6d 65 6d 73 74 61 74 22 29 3d 3d 30 20 29  nomemstat")==0 )
e1b0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
e1c0: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
e1d0: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
e1e0: 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  , 0);.#endif.#if
e1f0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
e200: 4e 55 4d 42 45 52 3e 3d 33 30 30 37 30 31 37 0a  NUMBER>=3007017.
e210: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e220: 73 74 72 63 6d 70 28 7a 2c 20 22 6d 6d 61 70 22  strcmp(z, "mmap"
e230: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
e240: 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20  if( i>=argc-1 ) 
e250: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73  fatal_error("mis
e260: 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e  sing argument on
e270: 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29   %s\n", argv[i])
e280: 3b 0a 20 20 20 20 20 20 20 20 6d 6d 61 70 53 69  ;.        mmapSi
e290: 7a 65 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75  ze = integerValu
e2a0: 65 28 61 72 67 76 5b 2b 2b 69 5d 29 3b 0a 20 23  e(argv[++i]);. #
e2b0: 65 6e 64 69 66 0a 20 20 20 20 20 20 7d 65 6c 73  endif.      }els
e2c0: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
e2d0: 6e 6f 73 79 6e 63 22 29 3d 3d 30 20 29 7b 0a 20  nosync")==0 ){. 
e2e0: 20 20 20 20 20 20 20 6e 6f 53 79 6e 63 20 3d 20         noSync = 
e2f0: 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  1;.      }else i
e300: 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e 6f 74  f( strcmp(z,"not
e310: 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  null")==0 ){.   
e320: 20 20 20 20 20 67 2e 7a 4e 4e 20 3d 20 22 4e 4f       g.zNN = "NO
e330: 54 20 4e 55 4c 4c 22 3b 0a 20 20 20 20 20 20 7d  T NULL";.      }
e340: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
e350: 7a 2c 22 70 61 67 65 73 69 7a 65 22 29 3d 3d 30  z,"pagesize")==0
e360: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
e370: 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61  i>=argc-1 ) fata
e380: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
e390: 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c   argument on %s\
e3a0: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
e3b0: 20 20 20 20 20 20 70 61 67 65 53 69 7a 65 20 3d        pageSize =
e3c0: 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72   integerValue(ar
e3d0: 67 76 5b 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20  gv[++i]);.      
e3e0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
e3f0: 28 7a 2c 22 70 63 61 63 68 65 22 29 3d 3d 30 20  (z,"pcache")==0 
e400: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ){.        if( i
e410: 3e 3d 61 72 67 63 2d 32 20 29 20 66 61 74 61 6c  >=argc-2 ) fatal
e420: 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20  _error("missing 
e430: 61 72 67 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c  arguments on %s\
e440: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
e450: 20 20 20 20 20 20 6e 50 43 61 63 68 65 20 3d 20        nPCache = 
e460: 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67  integerValue(arg
e470: 76 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20  v[i+1]);.       
e480: 20 73 7a 50 43 61 63 68 65 20 3d 20 69 6e 74 65   szPCache = inte
e490: 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b 69 2b  gerValue(argv[i+
e4a0: 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 64 6f 50  2]);.        doP
e4b0: 43 61 63 68 65 20 3d 20 31 3b 0a 20 20 20 20 20  Cache = 1;.     
e4c0: 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20     i += 2;.     
e4d0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
e4e0: 70 28 7a 2c 22 70 72 69 6d 61 72 79 6b 65 79 22  p(z,"primarykey"
e4f0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
e500: 67 2e 7a 50 4b 20 3d 20 22 50 52 49 4d 41 52 59  g.zPK = "PRIMARY
e510: 20 4b 45 59 22 3b 0a 20 20 20 20 20 20 7d 65 6c   KEY";.      }el
e520: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
e530: 22 72 65 70 65 61 74 22 29 3d 3d 30 20 29 7b 0a  "repeat")==0 ){.
e540: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d 61          if( i>=a
e550: 72 67 63 2d 31 20 29 20 66 61 74 61 6c 5f 65 72  rgc-1 ) fatal_er
e560: 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72 67  ror("missing arg
e570: 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c 6e 22 2c  uments on %s\n",
e580: 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
e590: 20 20 20 67 2e 6e 52 65 70 65 61 74 20 3d 20 69     g.nRepeat = i
e5a0: 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
e5b0: 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  [i+1]);.        
e5c0: 69 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  i += 1;.      }e
e5d0: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
e5e0: 2c 22 72 65 70 72 65 70 61 72 65 22 29 3d 3d 30  ,"reprepare")==0
e5f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 52   ){.        g.bR
e600: 65 70 72 65 70 61 72 65 20 3d 20 31 3b 0a 20 20  eprepare = 1;.  
e610: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
e620: 72 63 6d 70 28 7a 2c 22 73 63 72 61 74 63 68 22  rcmp(z,"scratch"
e630: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
e640: 69 66 28 20 69 3e 3d 61 72 67 63 2d 32 20 29 20  if( i>=argc-2 ) 
e650: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73  fatal_error("mis
e660: 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 6f  sing arguments o
e670: 6e 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d  n %s\n", argv[i]
e680: 29 3b 0a 20 20 20 20 20 20 20 20 6e 53 63 72 61  );.        nScra
e690: 74 63 68 20 3d 20 69 6e 74 65 67 65 72 56 61 6c  tch = integerVal
e6a0: 75 65 28 61 72 67 76 5b 69 2b 31 5d 29 3b 0a 20  ue(argv[i+1]);. 
e6b0: 20 20 20 20 20 20 20 73 7a 53 63 72 61 74 63 68         szScratch
e6c0: 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
e6d0: 61 72 67 76 5b 69 2b 32 5d 29 3b 0a 20 20 20 20  argv[i+2]);.    
e6e0: 20 20 20 20 69 20 2b 3d 20 32 3b 0a 23 69 66 20      i += 2;.#if 
e6f0: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
e700: 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 30 0a 20  UMBER>=3006000. 
e710: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
e720: 74 72 63 6d 70 28 7a 2c 22 73 65 72 69 61 6c 69  trcmp(z,"seriali
e730: 7a 65 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  zed")==0 ){.    
e740: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66      sqlite3_conf
e750: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
e760: 5f 53 45 52 49 41 4c 49 5a 45 44 29 3b 0a 20 20  _SERIALIZED);.  
e770: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
e780: 72 63 6d 70 28 7a 2c 22 73 69 6e 67 6c 65 74 68  rcmp(z,"singleth
e790: 72 65 61 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20  read")==0 ){.   
e7a0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e       sqlite3_con
e7b0: 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
e7c0: 47 5f 53 49 4e 47 4c 45 54 48 52 45 41 44 29 3b  G_SINGLETHREAD);
e7d0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7d 65  .#endif.      }e
e7e0: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
e7f0: 2c 22 73 71 6c 6f 6e 6c 79 22 29 3d 3d 30 20 29  ,"sqlonly")==0 )
e800: 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 53 71 6c  {.        g.bSql
e810: 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  Only = 1;.      
e820: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
e830: 28 7a 2c 22 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72  (z,"shrink-memor
e840: 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  y")==0 ){.      
e850: 20 20 67 2e 62 4d 65 6d 53 68 72 69 6e 6b 20 3d    g.bMemShrink =
e860: 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20   1;.      }else 
e870: 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 73 69  if( strcmp(z,"si
e880: 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ze")==0 ){.     
e890: 20 20 20 69 66 28 20 69 3e 3d 61 72 67 63 2d 31     if( i>=argc-1
e8a0: 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22   ) fatal_error("
e8b0: 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74  missing argument
e8c0: 20 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b   on %s\n", argv[
e8d0: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 67 2e 73  i]);.        g.s
e8e0: 7a 54 65 73 74 20 3d 20 69 6e 74 65 67 65 72 56  zTest = integerV
e8f0: 61 6c 75 65 28 61 72 67 76 5b 2b 2b 69 5d 29 3b  alue(argv[++i]);
e900: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
e910: 20 73 74 72 63 6d 70 28 7a 2c 22 73 74 61 74 73   strcmp(z,"stats
e920: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
e930: 20 73 68 6f 77 53 74 61 74 73 20 3d 20 31 3b 0a   showStats = 1;.
e940: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e950: 73 74 72 63 6d 70 28 7a 2c 22 74 65 6d 70 22 29  strcmp(z,"temp")
e960: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
e970: 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66  f( i>=argc-1 ) f
e980: 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73  atal_error("miss
e990: 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  ing argument on 
e9a0: 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b  %s\n", argv[i]);
e9b0: 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  .        i++;.  
e9c0: 20 20 20 20 20 20 69 66 28 20 61 72 67 76 5b 69        if( argv[i
e9d0: 5d 5b 30 5d 3c 27 30 27 20 7c 7c 20 61 72 67 76  ][0]<'0' || argv
e9e0: 5b 69 5d 5b 30 5d 3e 27 39 27 20 7c 7c 20 61 72  [i][0]>'9' || ar
e9f0: 67 76 5b 69 5d 5b 31 5d 21 3d 30 20 29 7b 0a 20  gv[i][1]!=0 ){. 
ea00: 20 20 20 20 20 20 20 20 20 66 61 74 61 6c 5f 65           fatal_e
ea10: 72 72 6f 72 28 22 61 72 67 75 6d 65 6e 74 20 74  rror("argument t
ea20: 6f 20 2d 2d 74 65 6d 70 20 73 68 6f 75 6c 64 20  o --temp should 
ea30: 62 65 20 69 6e 74 65 67 65 72 20 62 65 74 77 65  be integer betwe
ea40: 65 6e 20 30 20 61 6e 64 20 39 22 29 3b 0a 20 20  en 0 and 9");.  
ea50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ea60: 67 2e 65 54 65 6d 70 20 3d 20 61 72 67 76 5b 69  g.eTemp = argv[i
ea70: 5d 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20  ][0] - '0';.    
ea80: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
ea90: 6d 70 28 7a 2c 22 74 65 73 74 73 65 74 22 29 3d  mp(z,"testset")=
eaa0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
eab0: 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61  ( i>=argc-1 ) fa
eac0: 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69  tal_error("missi
ead0: 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25  ng argument on %
eae0: 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a  s\n", argv[i]);.
eaf0: 20 20 20 20 20 20 20 20 7a 54 53 65 74 20 3d 20          zTSet = 
eb00: 61 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20  argv[++i];.     
eb10: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
eb20: 70 28 7a 2c 22 74 72 61 63 65 22 29 3d 3d 30 20  p(z,"trace")==0 
eb30: 29 7b 0a 20 20 20 20 20 20 20 20 64 6f 54 72 61  ){.        doTra
eb40: 63 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  ce = 1;.      }e
eb50: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
eb60: 2c 22 74 68 72 65 61 64 73 22 29 3d 3d 30 20 29  ,"threads")==0 )
eb70: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e  {.        if( i>
eb80: 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c 5f  =argc-1 ) fatal_
eb90: 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61  error("missing a
eba0: 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e 22  rgument on %s\n"
ebb0: 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20  , argv[i]);.    
ebc0: 20 20 20 20 6e 54 68 72 65 61 64 20 3d 20 69 6e      nThread = in
ebd0: 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b  tegerValue(argv[
ebe0: 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ++i]);.      }el
ebf0: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
ec00: 22 75 74 66 31 36 6c 65 22 29 3d 3d 30 20 29 7b  "utf16le")==0 ){
ec10: 0a 20 20 20 20 20 20 20 20 7a 45 6e 63 6f 64 69  .        zEncodi
ec20: 6e 67 20 3d 20 22 75 74 66 31 36 6c 65 22 3b 0a  ng = "utf16le";.
ec30: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
ec40: 73 74 72 63 6d 70 28 7a 2c 22 75 74 66 31 36 62  strcmp(z,"utf16b
ec50: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
ec60: 20 20 7a 45 6e 63 6f 64 69 6e 67 20 3d 20 22 75    zEncoding = "u
ec70: 74 66 31 36 62 65 22 3b 0a 20 20 20 20 20 20 7d  tf16be";.      }
ec80: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
ec90: 7a 2c 22 76 65 72 69 66 79 22 29 3d 3d 30 20 29  z,"verify")==0 )
eca0: 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 56 65 72  {.        g.bVer
ecb0: 69 66 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  ify = 1;.      }
ecc0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
ecd0: 7a 2c 22 77 69 74 68 6f 75 74 2d 72 6f 77 69 64  z,"without-rowid
ece0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
ecf0: 20 67 2e 7a 57 52 20 3d 20 22 57 49 54 48 4f 55   g.zWR = "WITHOU
ed00: 54 20 52 4f 57 49 44 22 3b 0a 20 20 20 20 20 20  T ROWID";.      
ed10: 20 20 67 2e 7a 50 4b 20 3d 20 22 50 52 49 4d 41    g.zPK = "PRIMA
ed20: 52 59 20 4b 45 59 22 3b 0a 20 20 20 20 20 20 7d  RY KEY";.      }
ed30: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
ed40: 7a 2c 20 22 68 65 6c 70 22 29 3d 3d 30 20 7c 7c  z, "help")==0 ||
ed50: 20 73 74 72 63 6d 70 28 7a 2c 22 3f 22 29 3d 3d   strcmp(z,"?")==
ed60: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69  0 ){.        pri
ed70: 6e 74 66 28 7a 48 65 6c 70 2c 20 61 72 67 76 5b  ntf(zHelp, argv[
ed80: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 65 78 69  0]);.        exi
ed90: 74 28 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  t(0);.      }els
eda0: 65 7b 0a 20 20 20 20 20 20 20 20 66 61 74 61 6c  e{.        fatal
edb0: 5f 65 72 72 6f 72 28 22 75 6e 6b 6e 6f 77 6e 20  _error("unknown 
edc0: 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 55 73 65 20  option: %s\nUse 
edd0: 5c 22 25 73 20 2d 3f 5c 22 20 66 6f 72 20 68 65  \"%s -?\" for he
ede0: 6c 70 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  lp\n",.         
edf0: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 76 5b             argv[
ee00: 69 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20  i], argv[0]);.  
ee10: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
ee20: 69 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 20 29  if( zDbName==0 )
ee30: 7b 0a 20 20 20 20 20 20 7a 44 62 4e 61 6d 65 20  {.      zDbName 
ee40: 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 7d  = argv[i];.    }
ee50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 61 74 61  else{.      fata
ee60: 6c 5f 65 72 72 6f 72 28 22 73 75 72 70 6c 75 73  l_error("surplus
ee70: 20 61 72 67 75 6d 65 6e 74 3a 20 25 73 5c 6e 55   argument: %s\nU
ee80: 73 65 20 5c 22 25 73 20 2d 3f 5c 22 20 66 6f 72  se \"%s -?\" for
ee90: 20 68 65 6c 70 5c 6e 22 2c 0a 20 20 20 20 20 20   help\n",.      
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 76              argv
eeb0: 5b 69 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20  [i], argv[0]);. 
eec0: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 7a     }.  }.  if( z
eed0: 44 62 4e 61 6d 65 21 3d 30 20 29 20 75 6e 6c 69  DbName!=0 ) unli
eee0: 6e 6b 28 7a 44 62 4e 61 6d 65 29 3b 0a 23 69 66  nk(zDbName);.#if
eef0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
ef00: 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 31 0a  NUMBER>=3006001.
ef10: 20 20 69 66 28 20 6e 48 65 61 70 3e 30 20 29 7b    if( nHeap>0 ){
ef20: 0a 20 20 20 20 70 48 65 61 70 20 3d 20 6d 61 6c  .    pHeap = mal
ef30: 6c 6f 63 28 20 6e 48 65 61 70 20 29 3b 0a 20 20  loc( nHeap );.  
ef40: 20 20 69 66 28 20 70 48 65 61 70 3d 3d 30 20 29    if( pHeap==0 )
ef50: 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 63 61   fatal_error("ca
ef60: 6e 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 20 25 64  nnot allocate %d
ef70: 2d 62 79 74 65 20 68 65 61 70 5c 6e 22 2c 20 6e  -byte heap\n", n
ef80: 48 65 61 70 29 3b 0a 20 20 20 20 72 63 20 3d 20  Heap);.    rc = 
ef90: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
efa0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41  QLITE_CONFIG_HEA
efb0: 50 2c 20 70 48 65 61 70 2c 20 6e 48 65 61 70 2c  P, pHeap, nHeap,
efc0: 20 6d 6e 48 65 61 70 29 3b 0a 20 20 20 20 69 66   mnHeap);.    if
efd0: 28 20 72 63 20 29 20 66 61 74 61 6c 5f 65 72 72  ( rc ) fatal_err
efe0: 6f 72 28 22 68 65 61 70 20 63 6f 6e 66 69 67 75  or("heap configu
eff0: 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 3a 20 25  ration failed: %
f000: 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 7d 0a 20  d\n", rc);.  }. 
f010: 20 69 66 28 20 64 6f 50 43 61 63 68 65 20 29 7b   if( doPCache ){
f020: 0a 20 20 20 20 69 66 28 20 6e 50 43 61 63 68 65  .    if( nPCache
f030: 3e 30 20 26 26 20 73 7a 50 43 61 63 68 65 3e 30  >0 && szPCache>0
f040: 20 29 7b 0a 20 20 20 20 20 20 70 50 43 61 63 68   ){.      pPCach
f050: 65 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 50 43 61  e = malloc( nPCa
f060: 63 68 65 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74  che*(sqlite3_int
f070: 36 34 29 73 7a 50 43 61 63 68 65 20 29 3b 0a 20  64)szPCache );. 
f080: 20 20 20 20 20 69 66 28 20 70 50 43 61 63 68 65       if( pPCache
f090: 3d 3d 30 20 29 20 66 61 74 61 6c 5f 65 72 72 6f  ==0 ) fatal_erro
f0a0: 72 28 22 63 61 6e 6e 6f 74 20 61 6c 6c 6f 63 61  r("cannot alloca
f0b0: 74 65 20 25 6c 6c 64 2d 62 79 74 65 20 70 63 61  te %lld-byte pca
f0c0: 63 68 65 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  che\n",.        
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0e0: 20 20 20 20 20 20 20 20 20 20 20 6e 50 43 61 63             nPCac
f0f0: 68 65 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36  he*(sqlite3_int6
f100: 34 29 73 7a 50 43 61 63 68 65 29 3b 0a 20 20 20  4)szPCache);.   
f110: 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
f120: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
f130: 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41 43  E_CONFIG_PAGECAC
f140: 48 45 2c 20 70 50 43 61 63 68 65 2c 20 73 7a 50  HE, pPCache, szP
f150: 43 61 63 68 65 2c 20 6e 50 43 61 63 68 65 29 3b  Cache, nPCache);
f160: 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 66 61  .    if( rc ) fa
f170: 74 61 6c 5f 65 72 72 6f 72 28 22 70 63 61 63 68  tal_error("pcach
f180: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
f190: 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20 72  failed: %d\n", r
f1a0: 63 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53  c);.  }.  if( nS
f1b0: 63 72 61 74 63 68 3e 30 20 26 26 20 73 7a 53 63  cratch>0 && szSc
f1c0: 72 61 74 63 68 3e 30 20 29 7b 0a 20 20 20 20 70  ratch>0 ){.    p
f1d0: 53 63 72 61 74 63 68 20 3d 20 6d 61 6c 6c 6f 63  Scratch = malloc
f1e0: 28 20 6e 53 63 72 61 74 63 68 2a 28 73 71 6c 69  ( nScratch*(sqli
f1f0: 74 65 33 5f 69 6e 74 36 34 29 73 7a 53 63 72 61  te3_int64)szScra
f200: 74 63 68 20 29 3b 0a 20 20 20 20 69 66 28 20 70  tch );.    if( p
f210: 53 63 72 61 74 63 68 3d 3d 30 20 29 20 66 61 74  Scratch==0 ) fat
f220: 61 6c 5f 65 72 72 6f 72 28 22 63 61 6e 6e 6f 74  al_error("cannot
f230: 20 61 6c 6c 6f 63 61 74 65 20 25 6c 6c 64 2d 62   allocate %lld-b
f240: 79 74 65 20 73 63 72 61 74 63 68 5c 6e 22 2c 0a  yte scratch\n",.
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f270: 20 6e 53 63 72 61 74 63 68 2a 28 73 71 6c 69 74   nScratch*(sqlit
f280: 65 33 5f 69 6e 74 36 34 29 73 7a 53 63 72 61 74  e3_int64)szScrat
f290: 63 68 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ch);.    rc = sq
f2a0: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
f2b0: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 43 52 41 54  ITE_CONFIG_SCRAT
f2c0: 43 48 2c 20 70 53 63 72 61 74 63 68 2c 20 73 7a  CH, pScratch, sz
f2d0: 53 63 72 61 74 63 68 2c 20 6e 53 63 72 61 74 63  Scratch, nScratc
f2e0: 68 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  h);.    if( rc )
f2f0: 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 73 63   fatal_error("sc
f300: 72 61 74 63 68 20 63 6f 6e 66 69 67 75 72 61 74  ratch configurat
f310: 69 6f 6e 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e  ion failed: %d\n
f320: 22 2c 20 72 63 29 3b 0a 20 20 7d 0a 20 20 69 66  ", rc);.  }.  if
f330: 28 20 6e 4c 6f 6f 6b 3e 3d 30 20 29 7b 0a 20 20  ( nLook>=0 ){.  
f340: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
f350: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  (SQLITE_CONFIG_L
f360: 4f 4f 4b 41 53 49 44 45 2c 20 30 2c 20 30 29 3b  OOKASIDE, 0, 0);
f370: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20  .  }.#endif. .  
f380: 2f 2a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61  /* Open the data
f390: 62 61 73 65 20 61 6e 64 20 74 68 65 20 69 6e 70  base and the inp
f3a0: 75 74 20 66 69 6c 65 20 2a 2f 0a 20 20 69 66 28  ut file */.  if(
f3b0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 44   sqlite3_open(zD
f3c0: 62 4e 61 6d 65 2c 20 26 67 2e 64 62 29 20 29 7b  bName, &g.db) ){
f3d0: 0a 20 20 20 20 66 61 74 61 6c 5f 65 72 72 6f 72  .    fatal_error
f3e0: 28 22 43 61 6e 6e 6f 74 20 6f 70 65 6e 20 64 61  ("Cannot open da
f3f0: 74 61 62 61 73 65 20 66 69 6c 65 3a 20 25 73 5c  tabase file: %s\
f400: 6e 22 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20  n", zDbName);.  
f410: 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  }.#if SQLITE_VER
f420: 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30  SION_NUMBER>=300
f430: 36 30 30 31 0a 20 20 69 66 28 20 6e 4c 6f 6f 6b  6001.  if( nLook
f440: 3e 30 20 26 26 20 73 7a 4c 6f 6f 6b 3e 30 20 29  >0 && szLook>0 )
f450: 7b 0a 20 20 20 20 70 4c 6f 6f 6b 20 3d 20 6d 61  {.    pLook = ma
f460: 6c 6c 6f 63 28 20 6e 4c 6f 6f 6b 2a 73 7a 4c 6f  lloc( nLook*szLo
f470: 6f 6b 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  ok );.    rc = s
f480: 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67  qlite3_db_config
f490: 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  (g.db, SQLITE_DB
f4a0: 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45  CONFIG_LOOKASIDE
f4b0: 2c 20 70 4c 6f 6f 6b 2c 20 73 7a 4c 6f 6f 6b 2c  , pLook, szLook,
f4c0: 6e 4c 6f 6f 6b 29 3b 0a 20 20 20 20 69 66 28 20  nLook);.    if( 
f4d0: 72 63 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72  rc ) fatal_error
f4e0: 28 22 6c 6f 6f 6b 61 73 69 64 65 20 63 6f 6e 66  ("lookaside conf
f4f0: 69 67 75 72 61 74 69 6f 6e 20 66 61 69 6c 65 64  iguration failed
f500: 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20  : %d\n", rc);.  
f510: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 53  }.#endif..  /* S
f520: 65 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  et database conn
f530: 65 63 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 2a  ection options *
f540: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61  /.  sqlite3_crea
f550: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 67 2e 64 62  te_function(g.db
f560: 2c 20 22 72 61 6e 64 6f 6d 22 2c 20 30 2c 20 53  , "random", 0, S
f570: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 72  QLITE_UTF8, 0, r
f580: 61 6e 64 6f 6d 46 75 6e 63 2c 20 30 2c 20 30 29  andomFunc, 0, 0)
f590: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
f5a0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
f5b0: 0a 20 20 69 66 28 20 64 6f 54 72 61 63 65 20 29  .  if( doTrace )
f5c0: 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 67   sqlite3_trace(g
f5d0: 2e 64 62 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  .db, traceCallba
f5e0: 63 6b 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 20  ck, 0);.#endif. 
f5f0: 20 69 66 28 20 6d 6d 61 70 53 69 7a 65 3e 30 20   if( mmapSize>0 
f600: 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  ){.    speedtest
f610: 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20 6d  1_exec("PRAGMA m
f620: 6d 61 70 5f 73 69 7a 65 3d 25 64 22 2c 20 6d 6d  map_size=%d", mm
f630: 61 70 53 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 73  apSize);.  }.  s
f640: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
f650: 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 3d 25  PRAGMA threads=%
f660: 64 22 2c 20 6e 54 68 72 65 61 64 29 3b 0a 20 20  d", nThread);.  
f670: 69 66 28 20 7a 4b 65 79 20 29 7b 0a 20 20 20 20  if( zKey ){.    
f680: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
f690: 22 50 52 41 47 4d 41 20 6b 65 79 28 27 25 73 27  "PRAGMA key('%s'
f6a0: 29 22 2c 20 7a 4b 65 79 29 3b 0a 20 20 7d 0a 20  )", zKey);.  }. 
f6b0: 20 69 66 28 20 7a 45 6e 63 6f 64 69 6e 67 20 29   if( zEncoding )
f6c0: 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  {.    speedtest1
f6d0: 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20 65 6e  _exec("PRAGMA en
f6e0: 63 6f 64 69 6e 67 3d 25 73 22 2c 20 7a 45 6e 63  coding=%s", zEnc
f6f0: 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 69 66  oding);.  }.  if
f700: 28 20 64 6f 41 75 74 6f 76 61 63 20 29 7b 0a 20  ( doAutovac ){. 
f710: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78     speedtest1_ex
f720: 65 63 28 22 50 52 41 47 4d 41 20 61 75 74 6f 5f  ec("PRAGMA auto_
f730: 76 61 63 75 75 6d 3d 46 55 4c 4c 22 29 3b 0a 20  vacuum=FULL");. 
f740: 20 7d 65 6c 73 65 20 69 66 28 20 64 6f 49 6e 63   }else if( doInc
f750: 72 76 61 63 20 29 7b 0a 20 20 20 20 73 70 65 65  rvac ){.    spee
f760: 64 74 65 73 74 31 5f 65 78 65 63 28 22 50 52 41  dtest1_exec("PRA
f770: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d  GMA auto_vacuum=
f780: 49 4e 43 52 45 4d 45 4e 54 41 4c 22 29 3b 0a 20  INCREMENTAL");. 
f790: 20 7d 0a 20 20 69 66 28 20 70 61 67 65 53 69 7a   }.  if( pageSiz
f7a0: 65 20 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65  e ){.    speedte
f7b0: 73 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41  st1_exec("PRAGMA
f7c0: 20 70 61 67 65 5f 73 69 7a 65 3d 25 64 22 2c 20   page_size=%d", 
f7d0: 70 61 67 65 53 69 7a 65 29 3b 0a 20 20 7d 0a 20  pageSize);.  }. 
f7e0: 20 69 66 28 20 63 61 63 68 65 53 69 7a 65 20 29   if( cacheSize )
f7f0: 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  {.    speedtest1
f800: 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20 63 61  _exec("PRAGMA ca
f810: 63 68 65 5f 73 69 7a 65 3d 25 64 22 2c 20 63 61  che_size=%d", ca
f820: 63 68 65 53 69 7a 65 29 3b 0a 20 20 7d 0a 20 20  cheSize);.  }.  
f830: 69 66 28 20 6e 6f 53 79 6e 63 20 29 20 73 70 65  if( noSync ) spe
f840: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 50 52  edtest1_exec("PR
f850: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
f860: 3d 4f 46 46 22 29 3b 0a 20 20 69 66 28 20 64 6f  =OFF");.  if( do
f870: 45 78 63 6c 75 73 69 76 65 20 29 7b 0a 20 20 20  Exclusive ){.   
f880: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
f890: 28 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67  ("PRAGMA locking
f8a0: 5f 6d 6f 64 65 3d 45 58 43 4c 55 53 49 56 45 22  _mode=EXCLUSIVE"
f8b0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 4a 4d  );.  }.  if( zJM
f8c0: 6f 64 65 20 29 7b 0a 20 20 20 20 73 70 65 65 64  ode ){.    speed
f8d0: 74 65 73 74 31 5f 65 78 65 63 28 22 50 52 41 47  test1_exec("PRAG
f8e0: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  MA journal_mode=
f8f0: 25 73 22 2c 20 7a 4a 4d 6f 64 65 29 3b 0a 20 20  %s", zJMode);.  
f900: 7d 0a 0a 20 20 69 66 28 20 67 2e 62 45 78 70 6c  }..  if( g.bExpl
f910: 61 69 6e 20 29 20 70 72 69 6e 74 66 28 22 2e 65  ain ) printf(".e
f920: 78 70 6c 61 69 6e 5c 6e 2e 65 63 68 6f 20 6f 6e  xplain\n.echo on
f930: 5c 6e 22 29 3b 0a 20 20 69 66 28 20 73 74 72 63  \n");.  if( strc
f940: 6d 70 28 7a 54 53 65 74 2c 22 6d 61 69 6e 22 29  mp(zTSet,"main")
f950: 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65 73 74 73  ==0 ){.    tests
f960: 65 74 5f 6d 61 69 6e 28 29 3b 0a 20 20 7d 65 6c  et_main();.  }el
f970: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54  se if( strcmp(zT
f980: 53 65 74 2c 22 64 65 62 75 67 31 22 29 3d 3d 30  Set,"debug1")==0
f990: 20 29 7b 0a 20 20 20 20 74 65 73 74 73 65 74 5f   ){.    testset_
f9a0: 64 65 62 75 67 31 28 29 3b 0a 20 20 7d 65 6c 73  debug1();.  }els
f9b0: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 53  e if( strcmp(zTS
f9c0: 65 74 2c 22 6f 72 6d 22 29 3d 3d 30 20 29 7b 0a  et,"orm")==0 ){.
f9d0: 20 20 20 20 74 65 73 74 73 65 74 5f 6f 72 6d 28      testset_orm(
f9e0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  );.  }else if( s
f9f0: 74 72 63 6d 70 28 7a 54 53 65 74 2c 22 63 74 65  trcmp(zTSet,"cte
fa00: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65 73  ")==0 ){.    tes
fa10: 74 73 65 74 5f 63 74 65 28 29 3b 0a 20 20 7d 65  tset_cte();.  }e
fa20: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
fa30: 54 53 65 74 2c 22 72 74 72 65 65 22 29 3d 3d 30  TSet,"rtree")==0
fa40: 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
fa50: 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a 20  E_ENABLE_RTREE. 
fa60: 20 20 20 74 65 73 74 73 65 74 5f 72 74 72 65 65     testset_rtree
fa70: 28 36 2c 20 31 34 37 29 3b 0a 23 65 6c 73 65 0a  (6, 147);.#else.
fa80: 20 20 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28      fatal_error(
fa90: 22 63 6f 6d 70 69 6c 65 20 77 69 74 68 20 2d 44  "compile with -D
faa0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54  SQLITE_ENABLE_RT
fab0: 52 45 45 20 74 6f 20 65 6e 61 62 6c 65 20 22 0a  REE to enable ".
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fad0: 22 74 68 65 20 52 2d 54 72 65 65 20 74 65 73 74  "the R-Tree test
fae0: 73 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 20 20  s\n");.#endif.  
faf0: 7d 65 6c 73 65 7b 0a 20 20 20 20 66 61 74 61 6c  }else{.    fatal
fb00: 5f 65 72 72 6f 72 28 22 75 6e 6b 6e 6f 77 6e 20  _error("unknown 
fb10: 74 65 73 74 73 65 74 3a 20 5c 22 25 73 5c 22 5c  testset: \"%s\"\
fb20: 6e 43 68 6f 69 63 65 73 3a 20 6d 61 69 6e 20 64  nChoices: main d
fb30: 65 62 75 67 31 20 63 74 65 20 72 74 72 65 65 5c  ebug1 cte rtree\
fb40: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
fb50: 20 20 20 20 20 7a 54 53 65 74 29 3b 0a 20 20 7d       zTSet);.  }
fb60: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 66 69  .  speedtest1_fi
fb70: 6e 61 6c 28 29 3b 0a 0a 20 20 2f 2a 20 44 61 74  nal();..  /* Dat
fb80: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
fb90: 20 73 74 61 74 69 73 74 69 63 73 20 70 72 69 6e   statistics prin
fba0: 74 65 64 20 61 66 74 65 72 20 62 6f 74 68 20 70  ted after both p
fbb0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
fbc0: 74 73 0a 20 20 2a 2a 20 68 61 76 65 20 62 65 65  ts.  ** have bee
fbd0: 6e 20 66 69 6e 61 6c 69 7a 65 64 20 2a 2f 0a 23  n finalized */.#
fbe0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
fbf0: 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 37 30 30  N_NUMBER>=300700
fc00: 39 0a 20 20 69 66 28 20 73 68 6f 77 53 74 61 74  9.  if( showStat
fc10: 73 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  s ){.    sqlite3
fc20: 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64 62 2c  _db_status(g.db,
fc30: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
fc40: 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55 53 45 44 2c  _LOOKASIDE_USED,
fc50: 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29   &iCur, &iHi, 0)
fc60: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d  ;.    printf("--
fc70: 20 4c 6f 6f 6b 61 73 69 64 65 20 53 6c 6f 74 73   Lookaside Slots
fc80: 20 55 73 65 64 3a 20 20 20 20 20 20 20 20 25 64   Used:        %d
fc90: 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20 69 43   (max %d)\n", iC
fca0: 75 72 2c 69 48 69 29 3b 0a 20 20 20 20 73 71 6c  ur,iHi);.    sql
fcb0: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67  ite3_db_status(g
fcc0: 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54  .db, SQLITE_DBST
fcd0: 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 48  ATUS_LOOKASIDE_H
fce0: 49 54 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c  IT, &iCur, &iHi,
fcf0: 20 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28   0);.    printf(
fd00: 22 2d 2d 20 53 75 63 63 65 73 73 66 75 6c 20 6c  "-- Successful l
fd10: 6f 6f 6b 61 73 69 64 65 73 3a 20 20 20 20 20 20  ookasides:      
fd20: 20 25 64 5c 6e 22 2c 20 69 48 69 29 3b 0a 20 20   %d\n", iHi);.  
fd30: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
fd40: 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54 45  tus(g.db, SQLITE
fd50: 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
fd60: 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 20 26  IDE_MISS_SIZE, &
fd70: 69 43 75 72 2c 26 69 48 69 2c 30 29 3b 0a 20 20  iCur,&iHi,0);.  
fd80: 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c 6f 6f    printf("-- Loo
fd90: 6b 61 73 69 64 65 20 73 69 7a 65 20 66 61 75 6c  kaside size faul
fda0: 74 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c  ts:       %d\n",
fdb0: 20 69 48 69 29 3b 0a 20 20 20 20 73 71 6c 69 74   iHi);.    sqlit
fdc0: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64  e3_db_status(g.d
fdd0: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
fde0: 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53  US_LOOKASIDE_MIS
fdf0: 53 5f 46 55 4c 4c 2c 20 26 69 43 75 72 2c 26 69  S_FULL, &iCur,&i
fe00: 48 69 2c 30 29 3b 0a 20 20 20 20 70 72 69 6e 74  Hi,0);.    print
fe10: 66 28 22 2d 2d 20 4c 6f 6f 6b 61 73 69 64 65 20  f("-- Lookaside 
fe20: 4f 4f 4d 20 66 61 75 6c 74 73 3a 20 20 20 20 20  OOM faults:     
fe30: 20 20 20 25 64 5c 6e 22 2c 20 69 48 69 29 3b 0a     %d\n", iHi);.
fe40: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
fe50: 74 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49  tatus(g.db, SQLI
fe60: 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48  TE_DBSTATUS_CACH
fe70: 45 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26  E_USED, &iCur, &
fe80: 69 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69  iHi, 0);.    pri
fe90: 6e 74 66 28 22 2d 2d 20 50 61 67 65 72 20 48 65  ntf("-- Pager He
fea0: 61 70 20 55 73 61 67 65 3a 20 20 20 20 20 20 20  ap Usage:       
feb0: 20 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22       %d bytes\n"
fec0: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 73 71 6c  , iCur);.    sql
fed0: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67  ite3_db_status(g
fee0: 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54  .db, SQLITE_DBST
fef0: 41 54 55 53 5f 43 41 43 48 45 5f 48 49 54 2c 20  ATUS_CACHE_HIT, 
ff00: 26 69 43 75 72 2c 20 26 69 48 69 2c 20 31 29 3b  &iCur, &iHi, 1);
ff10: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20  .    printf("-- 
ff20: 50 61 67 65 20 63 61 63 68 65 20 68 69 74 73 3a  Page cache hits:
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c               %d\
ff40: 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 73  n", iCur);.    s
ff50: 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73  qlite3_db_status
ff60: 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  (g.db, SQLITE_DB
ff70: 53 54 41 54 55 53 5f 43 41 43 48 45 5f 4d 49 53  STATUS_CACHE_MIS
ff80: 53 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20  S, &iCur, &iHi, 
ff90: 31 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  1);.    printf("
ffa0: 2d 2d 20 50 61 67 65 20 63 61 63 68 65 20 6d 69  -- Page cache mi
ffb0: 73 73 65 73 3a 20 20 20 20 20 20 20 20 20 20 20  sses:           
ffc0: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 23 69  %d\n", iCur);.#i
ffd0: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
ffe0: 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 37 30 31 32  _NUMBER>=3007012
fff0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
10000 73 74 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c  status(g.db, SQL
10010 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
10020 48 45 5f 57 52 49 54 45 2c 20 26 69 43 75 72 2c  HE_WRITE, &iCur,
10030 20 26 69 48 69 2c 20 31 29 3b 0a 20 20 20 20 70   &iHi, 1);.    p
10040 72 69 6e 74 66 28 22 2d 2d 20 50 61 67 65 20 63  rintf("-- Page c
10050 61 63 68 65 20 77 72 69 74 65 73 3a 20 20 20 20  ache writes:    
10060 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
10070 75 72 29 3b 20 0a 23 65 6e 64 69 66 0a 20 20 20  ur); .#endif.   
10080 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
10090 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f  us(g.db, SQLITE_
100a0 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d 41 5f  DBSTATUS_SCHEMA_
100b0 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48  USED, &iCur, &iH
100c0 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e 74  i, 0);.    print
100d0 66 28 22 2d 2d 20 53 63 68 65 6d 61 20 48 65 61  f("-- Schema Hea
100e0 70 20 55 73 61 67 65 3a 20 20 20 20 20 20 20 20  p Usage:        
100f0 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 20     %d bytes\n", 
10100 69 43 75 72 29 3b 20 0a 20 20 20 20 73 71 6c 69  iCur); .    sqli
10110 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e  te3_db_status(g.
10120 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
10130 54 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26  TUS_STMT_USED, &
10140 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a  iCur, &iHi, 0);.
10150 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 53      printf("-- S
10160 74 61 74 65 6d 65 6e 74 20 48 65 61 70 20 55 73  tatement Heap Us
10170 61 67 65 3a 20 20 20 20 20 20 20 20 25 64 20 62  age:        %d b
10180 79 74 65 73 5c 6e 22 2c 20 69 43 75 72 29 3b 20  ytes\n", iCur); 
10190 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 73  .  }.#endif..  s
101a0 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 67 2e 64  qlite3_close(g.d
101b0 62 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  b);..#if SQLITE_
101c0 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d  VERSION_NUMBER>=
101d0 33 30 30 36 30 30 31 0a 20 20 2f 2a 20 47 6c 6f  3006001.  /* Glo
101e0 62 61 6c 20 6d 65 6d 6f 72 79 20 75 73 61 67 65  bal memory usage
101f0 20 73 74 61 74 69 73 74 69 63 73 20 70 72 69 6e   statistics prin
10200 74 65 64 20 61 66 74 65 72 20 74 68 65 20 64 61  ted after the da
10210 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10220 6e 0a 20 20 2a 2a 20 68 61 73 20 63 6c 6f 73 65  n.  ** has close
10230 64 2e 20 20 4d 65 6d 6f 72 79 20 75 73 61 67 65  d.  Memory usage
10240 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 20   should be zero 
10250 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 2a  at this point. *
10260 2f 0a 20 20 69 66 28 20 73 68 6f 77 53 74 61 74  /.  if( showStat
10270 73 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  s ){.    sqlite3
10280 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53  _status(SQLITE_S
10290 54 41 54 55 53 5f 4d 45 4d 4f 52 59 5f 55 53 45  TATUS_MEMORY_USE
102a0 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20  D, &iCur, &iHi, 
102b0 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  0);.    printf("
102c0 2d 2d 20 4d 65 6d 6f 72 79 20 55 73 65 64 20 28  -- Memory Used (
102d0 62 79 74 65 73 29 3a 20 20 20 20 20 20 20 20 20  bytes):         
102e0 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20  %d (max %d)\n", 
102f0 69 43 75 72 2c 69 48 69 29 3b 0a 23 69 66 20 53  iCur,iHi);.#if S
10300 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
10310 4d 42 45 52 3e 3d 33 30 30 37 30 30 30 0a 20 20  MBER>=3007000.  
10320 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73    sqlite3_status
10330 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d  (SQLITE_STATUS_M
10340 41 4c 4c 4f 43 5f 43 4f 55 4e 54 2c 20 26 69 43  ALLOC_COUNT, &iC
10350 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20  ur, &iHi, 0);.  
10360 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 4f 75 74    printf("-- Out
10370 73 74 61 6e 64 69 6e 67 20 41 6c 6c 6f 63 61 74  standing Allocat
10380 69 6f 6e 73 3a 20 20 20 20 20 25 64 20 28 6d 61  ions:     %d (ma
10390 78 20 25 64 29 5c 6e 22 2c 20 69 43 75 72 2c 69  x %d)\n", iCur,i
103a0 48 69 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  Hi);.#endif.    
103b0 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53  sqlite3_status(S
103c0 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47  QLITE_STATUS_PAG
103d0 45 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57 2c  ECACHE_OVERFLOW,
103e0 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29   &iCur, &iHi, 0)
103f0 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d  ;.    printf("--
10400 20 50 63 61 63 68 65 20 4f 76 65 72 66 6c 6f 77   Pcache Overflow
10410 20 42 79 74 65 73 3a 20 20 20 20 20 20 20 25 64   Bytes:       %d
10420 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20 69 43   (max %d)\n", iC
10430 75 72 2c 69 48 69 29 3b 0a 20 20 20 20 73 71 6c  ur,iHi);.    sql
10440 69 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c 49  ite3_status(SQLI
10450 54 45 5f 53 54 41 54 55 53 5f 53 43 52 41 54 43  TE_STATUS_SCRATC
10460 48 5f 4f 56 45 52 46 4c 4f 57 2c 20 26 69 43 75  H_OVERFLOW, &iCu
10470 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20 20  r, &iHi, 0);.   
10480 20 70 72 69 6e 74 66 28 22 2d 2d 20 53 63 72 61   printf("-- Scra
10490 74 63 68 20 4f 76 65 72 66 6c 6f 77 20 42 79 74  tch Overflow Byt
104a0 65 73 3a 20 20 20 20 20 20 25 64 20 28 6d 61 78  es:      %d (max
104b0 20 25 64 29 5c 6e 22 2c 20 69 43 75 72 2c 69 48   %d)\n", iCur,iH
104c0 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  i);.    sqlite3_
104d0 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54  status(SQLITE_ST
104e0 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45  ATUS_MALLOC_SIZE
104f0 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30  , &iCur, &iHi, 0
10500 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d  );.    printf("-
10510 2d 20 4c 61 72 67 65 73 74 20 41 6c 6c 6f 63 61  - Largest Alloca
10520 74 69 6f 6e 3a 20 20 20 20 20 20 20 20 20 20 25  tion:          %
10530 64 20 62 79 74 65 73 5c 6e 22 2c 69 48 69 29 3b  d bytes\n",iHi);
10540 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 61  .    sqlite3_sta
10550 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54 55  tus(SQLITE_STATU
10560 53 5f 50 41 47 45 43 41 43 48 45 5f 53 49 5a 45  S_PAGECACHE_SIZE
10570 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30  , &iCur, &iHi, 0
10580 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d  );.    printf("-
10590 2d 20 4c 61 72 67 65 73 74 20 50 63 61 63 68 65  - Largest Pcache
105a0 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a 20 20 20 25   Allocation:   %
105b0 64 20 62 79 74 65 73 5c 6e 22 2c 69 48 69 29 3b  d bytes\n",iHi);
105c0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 61  .    sqlite3_sta
105d0 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54 55  tus(SQLITE_STATU
105e0 53 5f 53 43 52 41 54 43 48 5f 53 49 5a 45 2c 20  S_SCRATCH_SIZE, 
105f0 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b  &iCur, &iHi, 0);
10600 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20  .    printf("-- 
10610 4c 61 72 67 65 73 74 20 53 63 72 61 74 63 68 20  Largest Scratch 
10620 41 6c 6c 6f 63 61 74 69 6f 6e 3a 20 20 25 64 20  Allocation:  %d 
10630 62 79 74 65 73 5c 6e 22 2c 20 69 48 69 29 3b 0a  bytes\n", iHi);.
10640 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64    }.#endif..#ifd
10650 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 69  ef __linux__.  i
10660 66 28 20 73 68 6f 77 53 74 61 74 73 20 29 7b 0a  f( showStats ){.
10670 20 20 20 20 64 69 73 70 6c 61 79 4c 69 6e 75 78      displayLinux
10680 49 6f 53 74 61 74 73 28 73 74 64 6f 75 74 29 3b  IoStats(stdout);
10690 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
106a0 2a 20 52 65 6c 65 61 73 65 20 6d 65 6d 6f 72 79  * Release memory
106b0 20 2a 2f 0a 20 20 66 72 65 65 28 20 70 4c 6f 6f   */.  free( pLoo
106c0 6b 20 29 3b 0a 20 20 66 72 65 65 28 20 70 50 43  k );.  free( pPC
106d0 61 63 68 65 20 29 3b 0a 20 20 66 72 65 65 28 20  ache );.  free( 
106e0 70 53 63 72 61 74 63 68 20 29 3b 0a 20 20 66 72  pScratch );.  fr
106f0 65 65 28 20 70 48 65 61 70 20 29 3b 0a 20 20 72  ee( pHeap );.  r
10700 65 74 75 72 6e 20 30 3b 0a 7d 0a                 eturn 0;.}.