SQLite
Hex Artifact Content
Not logged in

Artifact e44c5fccddcfe916c3bf7fe2f87dcc4b4fd66a0d923eb83515f311212670f267:


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 65 72 69 61 6c 69  ".  "  --seriali
0590: 7a 65 64 20 20 20 20 20 20 20 20 53 65 74 20 73  zed        Set s
05a0: 65 72 69 61 6c 69 7a 65 64 20 74 68 72 65 61 64  erialized thread
05b0: 69 6e 67 20 6d 6f 64 65 5c 6e 22 0a 20 20 22 20  ing mode\n".  " 
05c0: 20 2d 2d 73 69 6e 67 6c 65 74 68 72 65 61 64 20   --singlethread 
05d0: 20 20 20 20 20 53 65 74 20 73 69 6e 67 6c 65 2d       Set single-
05e0: 74 68 72 65 61 64 65 64 20 6d 6f 64 65 20 2d 20  threaded mode - 
05f0: 64 69 73 61 62 6c 65 73 20 61 6c 6c 20 6d 75 74  disables all mut
0600: 65 78 69 6e 67 5c 6e 22 0a 20 20 22 20 20 2d 2d  exing\n".  "  --
0610: 73 71 6c 6f 6e 6c 79 20 20 20 20 20 20 20 20 20  sqlonly         
0620: 20 20 4e 6f 2d 6f 70 2e 20 20 4f 6e 6c 79 20 73    No-op.  Only s
0630: 68 6f 77 20 74 68 65 20 53 51 4c 20 74 68 61 74  how the SQL that
0640: 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   would have been
0650: 20 72 75 6e 2e 5c 6e 22 0a 20 20 22 20 20 2d 2d   run.\n".  "  --
0660: 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20 20 20  shrink-memory   
0670: 20 20 49 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33    Invoke sqlite3
0680: 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
0690: 72 79 28 29 20 66 72 65 71 75 65 6e 74 6c 79 2e  ry() frequently.
06a0: 5c 6e 22 0a 20 20 22 20 20 2d 2d 73 69 7a 65 20  \n".  "  --size 
06b0: 4e 20 20 20 20 20 20 20 20 20 20 20 20 52 65 6c  N            Rel
06c0: 61 74 69 76 65 20 74 65 73 74 20 73 69 7a 65 2e  ative test size.
06d0: 20 20 44 65 66 61 75 6c 74 3d 31 30 30 5c 6e 22    Default=100\n"
06e0: 0a 20 20 22 20 20 2d 2d 73 74 61 74 73 20 20 20  .  "  --stats   
06f0: 20 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 73            Show s
0700: 74 61 74 69 73 74 69 63 73 20 61 74 20 74 68 65  tatistics at the
0710: 20 65 6e 64 5c 6e 22 0a 20 20 22 20 20 2d 2d 74   end\n".  "  --t
0720: 65 6d 70 20 4e 20 20 20 20 20 20 20 20 20 20 20  emp N           
0730: 20 4e 20 66 72 6f 6d 20 30 20 74 6f 20 39 2e 20   N from 0 to 9. 
0740: 20 30 3a 20 6e 6f 20 74 65 6d 70 20 74 61 62 6c   0: no temp tabl
0750: 65 2e 20 39 3a 20 61 6c 6c 20 74 65 6d 70 20 74  e. 9: all temp t
0760: 61 62 6c 65 73 5c 6e 22 0a 20 20 22 20 20 2d 2d  ables\n".  "  --
0770: 74 65 73 74 73 65 74 20 54 20 20 20 20 20 20 20  testset T       
0780: 20 20 52 75 6e 20 74 65 73 74 2d 73 65 74 20 54    Run test-set T
0790: 20 28 6d 61 69 6e 2c 20 63 74 65 2c 20 72 74 72   (main, cte, rtr
07a0: 65 65 2c 20 6f 72 6d 2c 20 64 65 62 75 67 29 5c  ee, orm, debug)\
07b0: 6e 22 0a 20 20 22 20 20 2d 2d 74 72 61 63 65 20  n".  "  --trace 
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 54 75 72 6e              Turn
07d0: 20 6f 6e 20 53 51 4c 20 74 72 61 63 69 6e 67 5c   on SQL tracing\
07e0: 6e 22 0a 20 20 22 20 20 2d 2d 74 68 72 65 61 64  n".  "  --thread
07f0: 73 20 4e 20 20 20 20 20 20 20 20 20 55 73 65 20  s N         Use 
0800: 75 70 20 74 6f 20 4e 20 74 68 72 65 61 64 73 20  up to N threads 
0810: 66 6f 72 20 73 6f 72 74 69 6e 67 5c 6e 22 0a 20  for sorting\n". 
0820: 20 22 20 20 2d 2d 75 74 66 31 36 62 65 20 20 20   "  --utf16be   
0830: 20 20 20 20 20 20 20 20 53 65 74 20 74 65 78 74          Set text
0840: 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 55 54 46   encoding to UTF
0850: 2d 31 36 42 45 5c 6e 22 0a 20 20 22 20 20 2d 2d  -16BE\n".  "  --
0860: 75 74 66 31 36 6c 65 20 20 20 20 20 20 20 20 20  utf16le         
0870: 20 20 53 65 74 20 74 65 78 74 20 65 6e 63 6f 64    Set text encod
0880: 69 6e 67 20 74 6f 20 55 54 46 2d 31 36 4c 45 5c  ing to UTF-16LE\
0890: 6e 22 0a 20 20 22 20 20 2d 2d 76 65 72 69 66 79  n".  "  --verify
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 52 75 6e 20              Run 
08b0: 61 64 64 69 74 69 6f 6e 61 6c 20 76 65 72 69 66  additional verif
08c0: 69 63 61 74 69 6f 6e 20 73 74 65 70 73 2e 5c 6e  ication steps.\n
08d0: 22 0a 20 20 22 20 20 2d 2d 77 69 74 68 6f 75 74  ".  "  --without
08e0: 2d 72 6f 77 69 64 20 20 20 20 20 55 73 65 20 57  -rowid     Use W
08f0: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 77 68 65  ITHOUT ROWID whe
0900: 72 65 20 61 70 70 72 6f 70 72 69 61 74 65 5c 6e  re appropriate\n
0910: 22 0a 3b 0a 0a 0a 23 69 6e 63 6c 75 64 65 20 22  ".;...#include "
0920: 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e 63 6c  sqlite3.h".#incl
0930: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
0940: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
0950: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
0960: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
0970: 73 74 64 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75  stdarg.h>.#inclu
0980: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
0990: 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
09a0: 0a 23 69 66 6e 64 65 66 20 5f 57 49 4e 33 32 0a  .#ifndef _WIN32.
09b0: 23 20 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74  # include <unist
09c0: 64 2e 68 3e 0a 23 65 6c 73 65 0a 23 20 69 6e 63  d.h>.#else.# inc
09d0: 6c 75 64 65 20 3c 69 6f 2e 68 3e 0a 23 65 6e 64  lude <io.h>.#end
09e0: 69 66 0a 23 64 65 66 69 6e 65 20 49 53 53 50 41  if.#define ISSPA
09f0: 43 45 28 58 29 20 69 73 73 70 61 63 65 28 28 75  CE(X) isspace((u
0a00: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 58 29  nsigned char)(X)
0a10: 29 0a 23 64 65 66 69 6e 65 20 49 53 44 49 47 49  ).#define ISDIGI
0a20: 54 28 58 29 20 69 73 64 69 67 69 74 28 28 75 6e  T(X) isdigit((un
0a30: 73 69 67 6e 65 64 20 63 68 61 72 29 28 58 29 29  signed char)(X))
0a40: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
0a50: 53 49 4f 4e 5f 4e 55 4d 42 45 52 3c 33 30 30 35  SION_NUMBER<3005
0a60: 30 30 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  000.# define sql
0a70: 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
0a80: 65 5f 69 6e 74 36 34 0a 23 65 6e 64 69 66 0a 0a  e_int64.#endif..
0a90: 2f 2a 20 41 6c 6c 20 67 6c 6f 62 61 6c 20 73 74  /* All global st
0aa0: 61 74 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ate is held in t
0ab0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
0ac0: 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20 47  .static struct G
0ad0: 6c 6f 62 61 6c 20 7b 0a 20 20 73 71 6c 69 74 65  lobal {.  sqlite
0ae0: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
0af0: 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 70 65 6e       /* The open
0b00: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
0b10: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
0b20: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 20 20  3_stmt *pStmt;  
0b30: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
0b40: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  SQL statement */
0b50: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
0b60: 20 69 53 74 61 72 74 3b 20 20 20 20 20 20 2f 2a   iStart;      /*
0b70: 20 53 74 61 72 74 2d 74 69 6d 65 20 66 6f 72 20   Start-time for 
0b80: 74 68 65 20 63 75 72 72 65 6e 74 20 74 65 73 74  the current test
0b90: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
0ba0: 74 36 34 20 69 54 6f 74 61 6c 3b 20 20 20 20 20  t64 iTotal;     
0bb0: 20 2f 2a 20 54 6f 74 61 6c 20 74 69 6d 65 20 2a   /* Total time *
0bc0: 2f 0a 20 20 69 6e 74 20 62 57 69 74 68 6f 75 74  /.  int bWithout
0bd0: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 2f  Rowid;         /
0be0: 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 77 69 74  * True for --wit
0bf0: 68 6f 75 74 2d 72 6f 77 69 64 20 2a 2f 0a 20 20  hout-rowid */.  
0c00: 69 6e 74 20 62 52 65 70 72 65 70 61 72 65 3b 20  int bReprepare; 
0c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
0c20: 75 65 20 74 6f 20 72 65 70 72 65 70 61 72 65 20  ue to reprepare 
0c30: 74 68 65 20 53 51 4c 20 6f 6e 20 65 61 63 68 20  the SQL on each 
0c40: 72 65 72 75 6e 20 2a 2f 0a 20 20 69 6e 74 20 62  rerun */.  int b
0c50: 53 71 6c 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20  SqlOnly;        
0c60: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
0c70: 20 70 72 69 6e 74 20 74 68 65 20 53 51 4c 20 6f   print the SQL o
0c80: 6e 63 65 20 6f 6e 6c 79 20 2a 2f 0a 20 20 69 6e  nce only */.  in
0c90: 74 20 62 45 78 70 6c 61 69 6e 3b 20 20 20 20 20  t bExplain;     
0ca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6e           /* Prin
0cb0: 74 20 53 51 4c 20 77 69 74 68 20 45 58 50 4c 41  t SQL with EXPLA
0cc0: 49 4e 20 70 72 65 66 69 78 20 2a 2f 0a 20 20 69  IN prefix */.  i
0cd0: 6e 74 20 62 56 65 72 69 66 79 3b 20 20 20 20 20  nt bVerify;     
0ce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 79            /* Try
0cf0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
0d00: 72 65 73 75 6c 74 73 20 61 72 65 20 63 6f 72 72  results are corr
0d10: 65 63 74 20 2a 2f 0a 20 20 69 6e 74 20 62 4d 65  ect */.  int bMe
0d20: 6d 53 68 72 69 6e 6b 3b 20 20 20 20 20 20 20 20  mShrink;        
0d30: 20 20 20 20 2f 2a 20 43 61 6c 6c 20 73 71 6c 69      /* Call sqli
0d40: 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d  te3_db_release_m
0d50: 65 6d 6f 72 79 28 29 20 6f 66 74 65 6e 20 2a 2f  emory() often */
0d60: 0a 20 20 69 6e 74 20 65 54 65 6d 70 3b 20 20 20  .  int eTemp;   
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0d80: 20 30 3a 20 6e 6f 20 54 45 4d 50 2e 20 20 39 3a   0: no TEMP.  9:
0d90: 20 61 6c 77 61 79 73 20 54 45 4d 50 2e 20 2a 2f   always TEMP. */
0da0: 0a 20 20 69 6e 74 20 73 7a 54 65 73 74 3b 20 20  .  int szTest;  
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0dc0: 20 53 63 61 6c 65 20 66 61 63 74 6f 72 20 66 6f   Scale factor fo
0dd0: 72 20 74 65 73 74 20 69 74 65 72 61 74 69 6f 6e  r test iteration
0de0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 70 65  s */.  int nRepe
0df0: 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
0e00: 20 20 2f 2a 20 52 65 70 65 61 74 20 73 65 6c 65    /* Repeat sele
0e10: 63 74 73 20 74 68 69 73 20 6d 61 6e 79 20 74 69  cts this many ti
0e20: 6d 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  mes */.  const c
0e30: 68 61 72 20 2a 7a 57 52 3b 20 20 20 20 20 20 20  har *zWR;       
0e40: 20 20 20 20 2f 2a 20 4d 69 67 68 74 20 62 65 20      /* Might be 
0e50: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 2a 2f  WITHOUT ROWID */
0e60: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
0e70: 4e 4e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  NN;           /*
0e80: 20 4d 69 67 68 74 20 62 65 20 4e 4f 54 20 4e 55   Might be NOT NU
0e90: 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  LL */.  const ch
0ea0: 61 72 20 2a 7a 50 4b 3b 20 20 20 20 20 20 20 20  ar *zPK;        
0eb0: 20 20 20 2f 2a 20 4d 69 67 68 74 20 62 65 20 55     /* Might be U
0ec0: 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59  NIQUE or PRIMARY
0ed0: 20 4b 45 59 20 2a 2f 0a 20 20 75 6e 73 69 67 6e   KEY */.  unsign
0ee0: 65 64 20 69 6e 74 20 78 2c 20 79 3b 20 20 20 20  ed int x, y;    
0ef0: 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 2d 72       /* Pseudo-r
0f00: 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e  andom number gen
0f10: 65 72 61 74 6f 72 20 73 74 61 74 65 20 2a 2f 0a  erator state */.
0f20: 20 20 69 6e 74 20 6e 52 65 73 75 6c 74 3b 20 20    int nResult;  
0f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0f40: 53 69 7a 65 20 6f 66 20 74 68 65 20 63 75 72 72  Size of the curr
0f50: 65 6e 74 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  ent result */.  
0f60: 63 68 61 72 20 7a 52 65 73 75 6c 74 5b 33 30 30  char zResult[300
0f70: 30 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  0];        /* Te
0f80: 78 74 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  xt of the curren
0f90: 74 20 72 65 73 75 6c 74 20 2a 2f 0a 7d 20 67 3b  t result */.} g;
0fa0: 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 22 20 54 45  ../* Return " TE
0fb0: 4d 50 22 20 6f 72 20 22 22 2c 20 61 73 20 61 70  MP" or "", as ap
0fc0: 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 63 72  propriate for cr
0fd0: 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65 2e 0a  eating a table..
0fe0: 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20  */.static const 
0ff0: 63 68 61 72 20 2a 69 73 54 65 6d 70 28 69 6e 74  char *isTemp(int
1000: 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 2e   N){.  return g.
1010: 65 54 65 6d 70 3e 3d 4e 20 3f 20 22 20 54 45 4d  eTemp>=N ? " TEM
1020: 50 22 20 3a 20 22 22 3b 0a 7d 0a 0a 0a 2f 2a 20  P" : "";.}.../* 
1030: 50 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d  Print an error m
1040: 65 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 20  essage and exit 
1050: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 66  */.static void f
1060: 61 74 61 6c 5f 65 72 72 6f 72 28 63 6f 6e 73 74  atal_error(const
1070: 20 63 68 61 72 20 2a 7a 4d 73 67 2c 20 2e 2e 2e   char *zMsg, ...
1080: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  ){.  va_list ap;
1090: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
10a0: 7a 4d 73 67 29 3b 0a 20 20 76 66 70 72 69 6e 74  zMsg);.  vfprint
10b0: 66 28 73 74 64 65 72 72 2c 20 7a 4d 73 67 2c 20  f(stderr, zMsg, 
10c0: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
10d0: 29 3b 0a 20 20 65 78 69 74 28 31 29 3b 0a 7d 0a  );.  exit(1);.}.
10e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
10f0: 65 20 76 61 6c 75 65 20 6f 66 20 61 20 68 65 78  e value of a hex
1100: 61 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2e 20  adecimal digit. 
1110: 20 52 65 74 75 72 6e 20 2d 31 20 69 66 20 74 68   Return -1 if th
1120: 65 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 6e 6f  e input.** is no
1130: 74 20 61 20 68 65 78 20 64 69 67 69 74 2e 0a 2a  t a hex digit..*
1140: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78  /.static int hex
1150: 44 69 67 69 74 56 61 6c 75 65 28 63 68 61 72 20  DigitValue(char 
1160: 63 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 30 27  c){.  if( c>='0'
1170: 20 26 26 20 63 3c 3d 27 39 27 20 29 20 72 65 74   && c<='9' ) ret
1180: 75 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20 20 69  urn c - '0';.  i
1190: 66 28 20 63 3e 3d 27 61 27 20 26 26 20 63 3c 3d  f( c>='a' && c<=
11a0: 27 66 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d  'f' ) return c -
11b0: 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 69 66 28   'a' + 10;.  if(
11c0: 20 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d 27 46   c>='A' && c<='F
11d0: 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27  ' ) return c - '
11e0: 41 27 20 2b 20 31 30 3b 0a 20 20 72 65 74 75 72  A' + 10;.  retur
11f0: 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 20 50 72 6f 76  n -1;.}../* Prov
1200: 69 64 65 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  ide an alternati
1210: 76 65 20 74 6f 20 73 71 6c 69 74 65 33 5f 73 74  ve to sqlite3_st
1220: 72 69 63 6d 70 28 29 20 69 6e 20 6f 6c 64 65 72  ricmp() in older
1230: 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 2a 2a 20   versions of.** 
1240: 53 51 4c 69 74 65 20 2a 2f 0a 23 69 66 20 53 51  SQLite */.#if SQ
1250: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
1260: 42 45 52 3c 33 30 30 37 30 31 31 0a 23 20 64 65  BER<3007011.# de
1270: 66 69 6e 65 20 73 71 6c 69 74 65 33 5f 73 74 72  fine sqlite3_str
1280: 69 63 6d 70 20 73 74 72 63 6d 70 0a 23 65 6e 64  icmp strcmp.#end
1290: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70  if../*.** Interp
12a0: 72 65 74 20 7a 41 72 67 20 61 73 20 61 6e 20 69  ret zArg as an i
12b0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 70 6f  nteger value, po
12c0: 73 73 69 62 6c 79 20 77 69 74 68 20 73 75 66 66  ssibly with suff
12d0: 69 78 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ixes..*/.static 
12e0: 69 6e 74 20 69 6e 74 65 67 65 72 56 61 6c 75 65  int integerValue
12f0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72  (const char *zAr
1300: 67 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  g){.  sqlite3_in
1310: 74 36 34 20 76 20 3d 20 30 3b 0a 20 20 73 74 61  t64 v = 0;.  sta
1320: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
1330: 20 7b 20 63 68 61 72 20 2a 7a 53 75 66 66 69 78   { char *zSuffix
1340: 3b 20 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20 61  ; int iMult; } a
1350: 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b  Mult[] = {.    {
1360: 20 22 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c 0a   "KiB", 1024 },.
1370: 20 20 20 20 7b 20 22 4d 69 42 22 2c 20 31 30 32      { "MiB", 102
1380: 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20  4*1024 },.    { 
1390: 22 47 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34  "GiB", 1024*1024
13a0: 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22  *1024 },.    { "
13b0: 4b 42 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20 20  KB",  1000 },.  
13c0: 20 20 7b 20 22 4d 42 22 2c 20 20 31 30 30 30 30    { "MB",  10000
13d0: 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42 22  00 },.    { "GB"
13e0: 2c 20 20 31 30 30 30 30 30 30 30 30 30 20 7d 2c  ,  1000000000 },
13f0: 0a 20 20 20 20 7b 20 22 4b 22 2c 20 20 20 31 30  .    { "K",   10
1400: 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22 2c  00 },.    { "M",
1410: 20 20 20 31 30 30 30 30 30 30 20 7d 2c 0a 20 20     1000000 },.  
1420: 20 20 7b 20 22 47 22 2c 20 20 20 31 30 30 30 30    { "G",   10000
1430: 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20 20  00000 },.  };.  
1440: 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69 73 4e  int i;.  int isN
1450: 65 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 41  eg = 0;.  if( zA
1460: 72 67 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20  rg[0]=='-' ){.  
1470: 20 20 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20    isNeg = 1;.   
1480: 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73 65   zArg++;.  }else
1490: 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2b   if( zArg[0]=='+
14a0: 27 20 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b  ' ){.    zArg++;
14b0: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 41 72 67 5b  .  }.  if( zArg[
14c0: 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b  0]=='0' && zArg[
14d0: 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 69  1]=='x' ){.    i
14e0: 6e 74 20 78 3b 0a 20 20 20 20 7a 41 72 67 20 2b  nt x;.    zArg +
14f0: 3d 20 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  = 2;.    while( 
1500: 28 78 20 3d 20 68 65 78 44 69 67 69 74 56 61 6c  (x = hexDigitVal
1510: 75 65 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30 20  ue(zArg[0]))>=0 
1520: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 28 76 3c  ){.      v = (v<
1530: 3c 34 29 20 2b 20 78 3b 0a 20 20 20 20 20 20 7a  <4) + x;.      z
1540: 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Arg++;.    }.  }
1550: 65 6c 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28  else{.    while(
1560: 20 69 73 64 69 67 69 74 28 7a 41 72 67 5b 30 5d   isdigit(zArg[0]
1570: 29 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 76  ) ){.      v = v
1580: 2a 31 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20  *10 + zArg[0] - 
1590: 27 30 27 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b  '0';.      zArg+
15a0: 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66  +;.    }.  }.  f
15b0: 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  or(i=0; i<sizeof
15c0: 28 61 4d 75 6c 74 29 2f 73 69 7a 65 6f 66 28 61  (aMult)/sizeof(a
15d0: 4d 75 6c 74 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a  Mult[0]); i++){.
15e0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
15f0: 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b 69 5d  stricmp(aMult[i]
1600: 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67 29 3d  .zSuffix, zArg)=
1610: 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 2a 3d  =0 ){.      v *=
1620: 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c 74 3b   aMult[i].iMult;
1630: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1640: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 76 3e    }.  }.  if( v>
1650: 30 78 37 66 66 66 66 66 66 66 20 29 20 66 61 74  0x7fffffff ) fat
1660: 61 6c 5f 65 72 72 6f 72 28 22 70 61 72 61 6d 65  al_error("parame
1670: 74 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 2d 20  ter too large - 
1680: 6d 61 78 20 32 31 34 37 34 38 33 36 34 38 22 29  max 2147483648")
1690: 3b 0a 20 20 72 65 74 75 72 6e 20 28 69 6e 74 29  ;.  return (int)
16a0: 28 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76 29 3b  (isNeg? -v : v);
16b0: 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68  .}../* Return th
16c0: 65 20 63 75 72 72 65 6e 74 20 77 61 6c 6c 2d 63  e current wall-c
16d0: 6c 6f 63 6b 20 74 69 6d 65 2c 20 69 6e 20 6d 69  lock time, in mi
16e0: 6c 6c 69 73 65 63 6f 6e 64 73 20 2a 2f 0a 73 71  lliseconds */.sq
16f0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 70 65 65  lite3_int64 spee
1700: 64 74 65 73 74 31 5f 74 69 6d 65 73 74 61 6d 70  dtest1_timestamp
1710: 28 76 6f 69 64 29 7b 0a 23 69 66 20 53 51 4c 49  (void){.#if SQLI
1720: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
1730: 52 3c 33 30 30 35 30 30 30 0a 20 20 72 65 74 75  R<3005000.  retu
1740: 72 6e 20 30 3b 0a 23 65 6c 73 65 0a 20 20 73 74  rn 0;.#else.  st
1750: 61 74 69 63 20 73 71 6c 69 74 65 33 5f 76 66 73  atic sqlite3_vfs
1760: 20 2a 63 6c 6f 63 6b 56 66 73 20 3d 20 30 3b 0a   *clockVfs = 0;.
1770: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1780: 74 3b 0a 20 20 69 66 28 20 63 6c 6f 63 6b 56 66  t;.  if( clockVf
1790: 73 3d 3d 30 20 29 20 63 6c 6f 63 6b 56 66 73 20  s==0 ) clockVfs 
17a0: 3d 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  = sqlite3_vfs_fi
17b0: 6e 64 28 30 29 3b 0a 23 69 66 20 53 51 4c 49 54  nd(0);.#if SQLIT
17c0: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
17d0: 3e 3d 33 30 30 37 30 30 30 0a 20 20 69 66 28 20  >=3007000.  if( 
17e0: 63 6c 6f 63 6b 56 66 73 2d 3e 69 56 65 72 73 69  clockVfs->iVersi
17f0: 6f 6e 3e 3d 32 20 26 26 20 63 6c 6f 63 6b 56 66  on>=2 && clockVf
1800: 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d 65 49  s->xCurrentTimeI
1810: 6e 74 36 34 21 3d 30 20 29 7b 0a 20 20 20 20 63  nt64!=0 ){.    c
1820: 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72 65 6e  lockVfs->xCurren
1830: 74 54 69 6d 65 49 6e 74 36 34 28 63 6c 6f 63 6b  tTimeInt64(clock
1840: 56 66 73 2c 20 26 74 29 3b 0a 20 20 7d 65 6c 73  Vfs, &t);.  }els
1850: 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20  e.#endif.  {.   
1860: 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20 63   double r;.    c
1870: 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72 65 6e  lockVfs->xCurren
1880: 74 54 69 6d 65 28 63 6c 6f 63 6b 56 66 73 2c 20  tTime(clockVfs, 
1890: 26 72 29 3b 0a 20 20 20 20 74 20 3d 20 28 73 71  &r);.    t = (sq
18a0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 2a 38  lite3_int64)(r*8
18b0: 36 34 30 30 30 30 30 2e 30 29 3b 0a 20 20 7d 0a  6400000.0);.  }.
18c0: 20 20 72 65 74 75 72 6e 20 74 3b 0a 23 65 6e 64    return t;.#end
18d0: 69 66 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  if.}../* Return 
18e0: 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20  a pseudo-random 
18f0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
1900: 20 2a 2f 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74   */.unsigned int
1910: 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64   speedtest1_rand
1920: 6f 6d 28 76 6f 69 64 29 7b 0a 20 20 67 2e 78 20  om(void){.  g.x 
1930: 3d 20 28 67 2e 78 3e 3e 31 29 20 5e 20 28 28 31  = (g.x>>1) ^ ((1
1940: 2b 7e 28 67 2e 78 26 31 29 29 20 26 20 30 78 64  +~(g.x&1)) & 0xd
1950: 30 30 30 30 30 30 31 29 3b 0a 20 20 67 2e 79 20  0000001);.  g.y 
1960: 3d 20 67 2e 79 2a 31 31 30 33 35 31 35 32 34 35  = g.y*1103515245
1970: 20 2b 20 31 32 33 34 35 3b 0a 20 20 72 65 74 75   + 12345;.  retu
1980: 72 6e 20 67 2e 78 20 5e 20 67 2e 79 3b 0a 7d 0a  rn g.x ^ g.y;.}.
1990: 0a 2f 2a 20 4d 61 70 20 74 68 65 20 76 61 6c 75  ./* Map the valu
19a0: 65 20 69 6e 20 77 69 74 68 69 6e 20 74 68 65 20  e in within the 
19b0: 72 61 6e 67 65 20 6f 66 20 31 2e 2e 2e 6c 69 6d  range of 1...lim
19c0: 69 74 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 0a  it into another.
19d0: 2a 2a 20 6e 75 6d 62 65 72 20 69 6e 20 61 20 77  ** number in a w
19e0: 61 79 20 74 68 61 74 20 69 73 20 63 68 61 74 69  ay that is chati
19f0: 63 20 61 6e 64 20 69 6e 76 65 72 74 61 62 6c 65  c and invertable
1a00: 2e 0a 2a 2f 0a 75 6e 73 69 67 6e 65 64 20 73 77  ..*/.unsigned sw
1a10: 69 7a 7a 6c 65 28 75 6e 73 69 67 6e 65 64 20 69  izzle(unsigned i
1a20: 6e 2c 20 75 6e 73 69 67 6e 65 64 20 6c 69 6d 69  n, unsigned limi
1a30: 74 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6f  t){.  unsigned o
1a40: 75 74 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28  ut = 0;.  while(
1a50: 20 6c 69 6d 69 74 20 29 7b 0a 20 20 20 20 6f 75   limit ){.    ou
1a60: 74 20 3d 20 28 6f 75 74 3c 3c 31 29 20 7c 20 28  t = (out<<1) | (
1a70: 69 6e 26 31 29 3b 0a 20 20 20 20 69 6e 20 3e 3e  in&1);.    in >>
1a80: 3d 20 31 3b 0a 20 20 20 20 6c 69 6d 69 74 20 3e  = 1;.    limit >
1a90: 3e 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  >= 1;.  }.  retu
1aa0: 72 6e 20 6f 75 74 3b 0a 7d 0a 0a 2f 2a 20 52 6f  rn out;.}../* Ro
1ab0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
1ac0: 73 6f 20 74 68 61 74 20 69 74 20 69 73 20 61 20  so that it is a 
1ad0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 6d 69 6e  power of two min
1ae0: 75 73 20 6f 6e 65 0a 2a 2f 0a 75 6e 73 69 67 6e  us one.*/.unsign
1af0: 65 64 20 72 6f 75 6e 64 75 70 5f 61 6c 6c 6f 6e  ed roundup_allon
1b00: 65 73 28 75 6e 73 69 67 6e 65 64 20 6c 69 6d 69  es(unsigned limi
1b10: 74 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d  t){.  unsigned m
1b20: 20 3d 20 31 3b 0a 20 20 77 68 69 6c 65 28 20 6d   = 1;.  while( m
1b30: 3c 6c 69 6d 69 74 20 29 20 6d 20 3d 20 28 6d 3c  <limit ) m = (m<
1b40: 3c 31 29 2b 31 3b 0a 20 20 72 65 74 75 72 6e 20  <1)+1;.  return 
1b50: 6d 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73 70 65  m;.}../* The spe
1b60: 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61  edtest1_numberna
1b70: 6d 65 20 70 72 6f 63 65 64 75 72 65 20 62 65 6c  me procedure bel
1b80: 6f 77 20 63 6f 6e 76 65 72 74 73 20 69 74 73 20  ow converts its 
1b90: 61 72 67 6d 65 6e 74 20 28 61 6e 20 69 6e 74 65  argment (an inte
1ba0: 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 61 20 73  ger).** into a s
1bb0: 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74  tring which is t
1bc0: 68 65 20 45 6e 67 6c 69 73 68 2d 6c 61 6e 67 75  he English-langu
1bd0: 61 67 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 61  age name for tha
1be0: 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 54 68 65  t number..** The
1bf0: 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67   returned string
1c00: 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64   should be freed
1c10: 20 77 69 74 68 20 73 71 6c 69 74 65 33 5f 66 72   with sqlite3_fr
1c20: 65 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d  ee()..**.** Exam
1c30: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 73  ple:.**.**     s
1c40: 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72  peedtest1_number
1c50: 6e 61 6d 65 28 31 32 33 29 20 20 20 2d 3e 20 20  name(123)   ->  
1c60: 22 6f 6e 65 20 68 75 6e 64 72 65 64 20 74 77 65  "one hundred twe
1c70: 6e 74 79 20 74 68 72 65 65 22 0a 2a 2f 0a 69 6e  nty three".*/.in
1c80: 74 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d  t speedtest1_num
1c90: 62 65 72 6e 61 6d 65 28 75 6e 73 69 67 6e 65 64  bername(unsigned
1ca0: 20 69 6e 74 20 6e 2c 20 63 68 61 72 20 2a 7a 4f   int n, char *zO
1cb0: 75 74 2c 20 69 6e 74 20 6e 4f 75 74 29 7b 0a 20  ut, int nOut){. 
1cc0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
1cd0: 61 72 20 2a 6f 6e 65 73 5b 5d 20 3d 20 7b 20 20  ar *ones[] = {  
1ce0: 22 7a 65 72 6f 22 2c 20 22 6f 6e 65 22 2c 20 22  "zero", "one", "
1cf0: 74 77 6f 22 2c 20 22 74 68 72 65 65 22 2c 20 22  two", "three", "
1d00: 66 6f 75 72 22 2c 20 22 66 69 76 65 22 2c 20 0a  four", "five", .
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d20: 20 20 22 73 69 78 22 2c 20 22 73 65 76 65 6e 22    "six", "seven"
1d30: 2c 20 22 65 69 67 68 74 22 2c 20 22 6e 69 6e 65  , "eight", "nine
1d40: 22 2c 20 22 74 65 6e 22 2c 20 22 65 6c 65 76 65  ", "ten", "eleve
1d50: 6e 22 2c 20 22 74 77 65 6c 76 65 22 2c 20 0a 20  n", "twelve", . 
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d70: 20 22 74 68 69 72 74 65 65 6e 22 2c 20 22 66 6f   "thirteen", "fo
1d80: 75 72 74 65 65 6e 22 2c 20 22 66 69 66 74 65 65  urteen", "fiftee
1d90: 6e 22 2c 20 22 73 69 78 74 65 65 6e 22 2c 20 22  n", "sixteen", "
1da0: 73 65 76 65 6e 74 65 65 6e 22 2c 0a 20 20 20 20  seventeen",.    
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65                "e
1dc0: 69 67 68 74 65 65 6e 22 2c 20 22 6e 69 6e 65 74  ighteen", "ninet
1dd0: 65 65 6e 22 20 7d 3b 0a 20 20 73 74 61 74 69 63  een" };.  static
1de0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 74 65 6e   const char *ten
1df0: 73 5b 5d 20 3d 20 7b 20 22 22 2c 20 22 74 65 6e  s[] = { "", "ten
1e00: 22 2c 20 22 74 77 65 6e 74 79 22 2c 20 22 74 68  ", "twenty", "th
1e10: 69 72 74 79 22 2c 20 22 66 6f 72 74 79 22 2c 0a  irty", "forty",.
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e30: 20 22 66 69 66 74 79 22 2c 20 22 73 69 78 74 79   "fifty", "sixty
1e40: 22 2c 20 22 73 65 76 65 6e 74 79 22 2c 20 22 65  ", "seventy", "e
1e50: 69 67 68 74 79 22 2c 20 22 6e 69 6e 65 74 79 22  ighty", "ninety"
1e60: 20 7d 3b 0a 20 20 69 6e 74 20 69 20 3d 20 30 3b   };.  int i = 0;
1e70: 0a 0a 20 20 69 66 28 20 6e 3e 3d 31 30 30 30 30  ..  if( n>=10000
1e80: 30 30 30 30 30 20 29 7b 0a 20 20 20 20 69 20 2b  00000 ){.    i +
1e90: 3d 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d  = speedtest1_num
1ea0: 62 65 72 6e 61 6d 65 28 6e 2f 31 30 30 30 30 30  bername(n/100000
1eb0: 30 30 30 30 2c 20 7a 4f 75 74 2b 69 2c 20 6e 4f  0000, zOut+i, nO
1ec0: 75 74 2d 69 29 3b 0a 20 20 20 20 73 71 6c 69 74  ut-i);.    sqlit
1ed0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74  e3_snprintf(nOut
1ee0: 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 20 62 69  -i, zOut+i, " bi
1ef0: 6c 6c 69 6f 6e 22 29 3b 0a 20 20 20 20 69 20 2b  llion");.    i +
1f00: 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f  = (int)strlen(zO
1f10: 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20 3d 20 6e  ut+i);.    n = n
1f20: 20 25 20 31 30 30 30 30 30 30 30 30 30 3b 0a 20   % 1000000000;. 
1f30: 20 7d 0a 20 20 69 66 28 20 6e 3e 3d 31 30 30 30   }.  if( n>=1000
1f40: 30 30 30 20 29 7b 0a 20 20 20 20 69 66 28 20 69  000 ){.    if( i
1f50: 20 26 26 20 69 3c 6e 4f 75 74 2d 31 20 29 20 7a   && i<nOut-1 ) z
1f60: 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27 20 27 3b 0a  Out[i++] = ' ';.
1f70: 20 20 20 20 69 20 2b 3d 20 73 70 65 65 64 74 65      i += speedte
1f80: 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6e  st1_numbername(n
1f90: 2f 31 30 30 30 30 30 30 2c 20 7a 4f 75 74 2b 69  /1000000, zOut+i
1fa0: 2c 20 6e 4f 75 74 2d 69 29 3b 0a 20 20 20 20 73  , nOut-i);.    s
1fb0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
1fc0: 6e 4f 75 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20  nOut-i, zOut+i, 
1fd0: 22 20 6d 69 6c 6c 69 6f 6e 22 29 3b 0a 20 20 20  " million");.   
1fe0: 20 69 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65   i += (int)strle
1ff0: 6e 28 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e  n(zOut+i);.    n
2000: 20 3d 20 6e 20 25 20 31 30 30 30 30 30 30 3b 0a   = n % 1000000;.
2010: 20 20 7d 0a 20 20 69 66 28 20 6e 3e 3d 31 30 30    }.  if( n>=100
2020: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 69 20 26  0 ){.    if( i &
2030: 26 20 69 3c 6e 4f 75 74 2d 31 20 29 20 7a 4f 75  & i<nOut-1 ) zOu
2040: 74 5b 69 2b 2b 5d 20 3d 20 27 20 27 3b 0a 20 20  t[i++] = ' ';.  
2050: 20 20 69 20 2b 3d 20 73 70 65 65 64 74 65 73 74    i += speedtest
2060: 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6e 2f 31  1_numbername(n/1
2070: 30 30 30 2c 20 7a 4f 75 74 2b 69 2c 20 6e 4f 75  000, zOut+i, nOu
2080: 74 2d 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  t-i);.    sqlite
2090: 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74 2d  3_snprintf(nOut-
20a0: 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 20 74 68 6f  i, zOut+i, " tho
20b0: 75 73 61 6e 64 22 29 3b 0a 20 20 20 20 69 20 2b  usand");.    i +
20c0: 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f  = (int)strlen(zO
20d0: 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20 3d 20 6e  ut+i);.    n = n
20e0: 20 25 20 31 30 30 30 3b 0a 20 20 7d 0a 20 20 69   % 1000;.  }.  i
20f0: 66 28 20 6e 3e 3d 31 30 30 20 29 7b 0a 20 20 20  f( n>=100 ){.   
2100: 20 69 66 28 20 69 20 26 26 20 69 3c 6e 4f 75 74   if( i && i<nOut
2110: 2d 31 20 29 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d  -1 ) zOut[i++] =
2120: 20 27 20 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ' ';.    sqlite
2130: 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74 2d  3_snprintf(nOut-
2140: 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 25 73 20 68  i, zOut+i, "%s h
2150: 75 6e 64 72 65 64 22 2c 20 6f 6e 65 73 5b 6e 2f  undred", ones[n/
2160: 31 30 30 5d 29 3b 0a 20 20 20 20 69 20 2b 3d 20  100]);.    i += 
2170: 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f 75 74  (int)strlen(zOut
2180: 2b 69 29 3b 0a 20 20 20 20 6e 20 3d 20 6e 20 25  +i);.    n = n %
2190: 20 31 30 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   100;.  }.  if( 
21a0: 6e 3e 3d 32 30 20 29 7b 0a 20 20 20 20 69 66 28  n>=20 ){.    if(
21b0: 20 69 20 26 26 20 69 3c 6e 4f 75 74 2d 31 20 29   i && i<nOut-1 )
21c0: 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27 20 27   zOut[i++] = ' '
21d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
21e0: 70 72 69 6e 74 66 28 6e 4f 75 74 2d 69 2c 20 7a  printf(nOut-i, z
21f0: 4f 75 74 2b 69 2c 20 22 25 73 22 2c 20 74 65 6e  Out+i, "%s", ten
2200: 73 5b 6e 2f 31 30 5d 29 3b 0a 20 20 20 20 69 20  s[n/10]);.    i 
2210: 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a  += (int)strlen(z
2220: 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20 3d 20  Out+i);.    n = 
2230: 6e 20 25 20 31 30 3b 0a 20 20 7d 0a 20 20 69 66  n % 10;.  }.  if
2240: 28 20 6e 3e 30 20 29 7b 0a 20 20 20 20 69 66 28  ( n>0 ){.    if(
2250: 20 69 20 26 26 20 69 3c 6e 4f 75 74 2d 31 20 29   i && i<nOut-1 )
2260: 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27 20 27   zOut[i++] = ' '
2270: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
2280: 70 72 69 6e 74 66 28 6e 4f 75 74 2d 69 2c 20 7a  printf(nOut-i, z
2290: 4f 75 74 2b 69 2c 20 22 25 73 22 2c 20 6f 6e 65  Out+i, "%s", one
22a0: 73 5b 6e 5d 29 3b 0a 20 20 20 20 69 20 2b 3d 20  s[n]);.    i += 
22b0: 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f 75 74  (int)strlen(zOut
22c0: 2b 69 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  +i);.  }.  if( i
22d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
22e0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74  e3_snprintf(nOut
22f0: 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 7a 65 72  -i, zOut+i, "zer
2300: 6f 22 29 3b 0a 20 20 20 20 69 20 2b 3d 20 28 69  o");.    i += (i
2310: 6e 74 29 73 74 72 6c 65 6e 28 7a 4f 75 74 2b 69  nt)strlen(zOut+i
2320: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2330: 69 3b 0a 7d 0a 0a 0a 2f 2a 20 53 74 61 72 74 20  i;.}.../* Start 
2340: 61 20 6e 65 77 20 74 65 73 74 20 63 61 73 65 20  a new test case 
2350: 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 41 4d 45 57  */.#define NAMEW
2360: 49 44 54 48 20 36 30 0a 73 74 61 74 69 63 20 63  IDTH 60.static c
2370: 6f 6e 73 74 20 63 68 61 72 20 7a 44 6f 74 73 5b  onst char zDots[
2380: 5d 20 3d 0a 20 20 22 2e 2e 2e 2e 2e 2e 2e 2e 2e  ] =.  ".........
2390: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
23a0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
23b0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
23c0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 22 3b  ..............";
23d0: 0a 76 6f 69 64 20 73 70 65 65 64 74 65 73 74 31  .void speedtest1
23e0: 5f 62 65 67 69 6e 5f 74 65 73 74 28 69 6e 74 20  _begin_test(int 
23f0: 69 54 65 73 74 4e 75 6d 2c 20 63 6f 6e 73 74 20  iTestNum, const 
2400: 63 68 61 72 20 2a 7a 54 65 73 74 4e 61 6d 65 2c  char *zTestName,
2410: 20 2e 2e 2e 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   ...){.  int n =
2420: 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 54 65   (int)strlen(zTe
2430: 73 74 4e 61 6d 65 29 3b 0a 20 20 63 68 61 72 20  stName);.  char 
2440: 2a 7a 4e 61 6d 65 3b 0a 20 20 76 61 5f 6c 69 73  *zName;.  va_lis
2450: 74 20 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74  t ap;.  va_start
2460: 28 61 70 2c 20 7a 54 65 73 74 4e 61 6d 65 29 3b  (ap, zTestName);
2470: 0a 20 20 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74  .  zName = sqlit
2480: 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 54 65 73  e3_vmprintf(zTes
2490: 74 4e 61 6d 65 2c 20 61 70 29 3b 0a 20 20 76 61  tName, ap);.  va
24a0: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 6e 20 3d 20  _end(ap);.  n = 
24b0: 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4e 61 6d  (int)strlen(zNam
24c0: 65 29 3b 0a 20 20 69 66 28 20 6e 3e 4e 41 4d 45  e);.  if( n>NAME
24d0: 57 49 44 54 48 20 29 7b 0a 20 20 20 20 7a 4e 61  WIDTH ){.    zNa
24e0: 6d 65 5b 4e 41 4d 45 57 49 44 54 48 5d 20 3d 20  me[NAMEWIDTH] = 
24f0: 30 3b 0a 20 20 20 20 6e 20 3d 20 4e 41 4d 45 57  0;.    n = NAMEW
2500: 49 44 54 48 3b 0a 20 20 7d 0a 20 20 69 66 28 20  IDTH;.  }.  if( 
2510: 67 2e 62 53 71 6c 4f 6e 6c 79 20 29 7b 0a 20 20  g.bSqlOnly ){.  
2520: 20 20 70 72 69 6e 74 66 28 22 2f 2a 20 25 34 64    printf("/* %4d
2530: 20 2d 20 25 73 25 2e 2a 73 20 2a 2f 5c 6e 22 2c   - %s%.*s */\n",
2540: 20 69 54 65 73 74 4e 75 6d 2c 20 7a 4e 61 6d 65   iTestNum, zName
2550: 2c 20 4e 41 4d 45 57 49 44 54 48 2d 6e 2c 20 7a  , NAMEWIDTH-n, z
2560: 44 6f 74 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Dots);.  }else{.
2570: 20 20 20 20 70 72 69 6e 74 66 28 22 25 34 64 20      printf("%4d 
2580: 2d 20 25 73 25 2e 2a 73 20 22 2c 20 69 54 65 73  - %s%.*s ", iTes
2590: 74 4e 75 6d 2c 20 7a 4e 61 6d 65 2c 20 4e 41 4d  tNum, zName, NAM
25a0: 45 57 49 44 54 48 2d 6e 2c 20 7a 44 6f 74 73 29  EWIDTH-n, zDots)
25b0: 3b 0a 20 20 20 20 66 66 6c 75 73 68 28 73 74 64  ;.    fflush(std
25c0: 6f 75 74 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  out);.  }.  sqli
25d0: 74 65 33 5f 66 72 65 65 28 7a 4e 61 6d 65 29 3b  te3_free(zName);
25e0: 0a 20 20 67 2e 6e 52 65 73 75 6c 74 20 3d 20 30  .  g.nResult = 0
25f0: 3b 0a 20 20 67 2e 69 53 74 61 72 74 20 3d 20 73  ;.  g.iStart = s
2600: 70 65 65 64 74 65 73 74 31 5f 74 69 6d 65 73 74  peedtest1_timest
2610: 61 6d 70 28 29 3b 0a 20 20 67 2e 78 20 3d 20 30  amp();.  g.x = 0
2620: 78 61 64 31 33 31 64 30 62 3b 0a 20 20 67 2e 79  xad131d0b;.  g.y
2630: 20 3d 20 30 78 34 34 66 39 65 61 63 38 3b 0a 7d   = 0x44f9eac8;.}
2640: 0a 0a 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 61 20  ../* Complete a 
2650: 74 65 73 74 20 63 61 73 65 20 2a 2f 0a 76 6f 69  test case */.voi
2660: 64 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64  d speedtest1_end
2670: 5f 74 65 73 74 28 76 6f 69 64 29 7b 0a 20 20 73  _test(void){.  s
2680: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 45 6c  qlite3_int64 iEl
2690: 61 70 73 65 54 69 6d 65 20 3d 20 73 70 65 65 64  apseTime = speed
26a0: 74 65 73 74 31 5f 74 69 6d 65 73 74 61 6d 70 28  test1_timestamp(
26b0: 29 20 2d 20 67 2e 69 53 74 61 72 74 3b 0a 20 20  ) - g.iStart;.  
26c0: 69 66 28 20 21 67 2e 62 53 71 6c 4f 6e 6c 79 20  if( !g.bSqlOnly 
26d0: 29 7b 0a 20 20 20 20 67 2e 69 54 6f 74 61 6c 20  ){.    g.iTotal 
26e0: 2b 3d 20 69 45 6c 61 70 73 65 54 69 6d 65 3b 0a  += iElapseTime;.
26f0: 20 20 20 20 70 72 69 6e 74 66 28 22 25 34 64 2e      printf("%4d.
2700: 25 30 33 64 73 5c 6e 22 2c 20 28 69 6e 74 29 28  %03ds\n", (int)(
2710: 69 45 6c 61 70 73 65 54 69 6d 65 2f 31 30 30 30  iElapseTime/1000
2720: 29 2c 20 28 69 6e 74 29 28 69 45 6c 61 70 73 65  ), (int)(iElapse
2730: 54 69 6d 65 25 31 30 30 30 29 29 3b 0a 20 20 7d  Time%1000));.  }
2740: 0a 20 20 69 66 28 20 67 2e 70 53 74 6d 74 20 29  .  if( g.pStmt )
2750: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  {.    sqlite3_fi
2760: 6e 61 6c 69 7a 65 28 67 2e 70 53 74 6d 74 29 3b  nalize(g.pStmt);
2770: 0a 20 20 20 20 67 2e 70 53 74 6d 74 20 3d 20 30  .    g.pStmt = 0
2780: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 70 6f  ;.  }.}../* Repo
2790: 72 74 20 65 6e 64 20 6f 66 20 74 65 73 74 69 6e  rt end of testin
27a0: 67 20 2a 2f 0a 76 6f 69 64 20 73 70 65 65 64 74  g */.void speedt
27b0: 65 73 74 31 5f 66 69 6e 61 6c 28 76 6f 69 64 29  est1_final(void)
27c0: 7b 0a 20 20 69 66 28 20 21 67 2e 62 53 71 6c 4f  {.  if( !g.bSqlO
27d0: 6e 6c 79 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  nly ){.    print
27e0: 66 28 22 20 20 20 20 20 20 20 54 4f 54 41 4c 25  f("       TOTAL%
27f0: 2e 2a 73 20 25 34 64 2e 25 30 33 64 73 5c 6e 22  .*s %4d.%03ds\n"
2800: 2c 20 4e 41 4d 45 57 49 44 54 48 2d 35 2c 20 7a  , NAMEWIDTH-5, z
2810: 44 6f 74 73 2c 0a 20 20 20 20 20 20 20 20 20 20  Dots,.          
2820: 20 28 69 6e 74 29 28 67 2e 69 54 6f 74 61 6c 2f   (int)(g.iTotal/
2830: 31 30 30 30 29 2c 20 28 69 6e 74 29 28 67 2e 69  1000), (int)(g.i
2840: 54 6f 74 61 6c 25 31 30 30 30 29 29 3b 0a 20 20  Total%1000));.  
2850: 7d 0a 7d 0a 0a 2f 2a 20 50 72 69 6e 74 20 61 6e  }.}../* Print an
2860: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
2870: 6f 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70 75  o standard outpu
2880: 74 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  t */.static void
2890: 20 70 72 69 6e 74 53 71 6c 28 63 6f 6e 73 74 20   printSql(const 
28a0: 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 69  char *zSql){.  i
28b0: 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c  nt n = (int)strl
28c0: 65 6e 28 7a 53 71 6c 29 3b 0a 20 20 77 68 69 6c  en(zSql);.  whil
28d0: 65 28 20 6e 3e 30 20 26 26 20 28 7a 53 71 6c 5b  e( n>0 && (zSql[
28e0: 6e 2d 31 5d 3d 3d 27 3b 27 20 7c 7c 20 49 53 53  n-1]==';' || ISS
28f0: 50 41 43 45 28 7a 53 71 6c 5b 6e 2d 31 5d 29 29  PACE(zSql[n-1]))
2900: 20 29 7b 20 6e 2d 2d 3b 20 7d 0a 20 20 69 66 28   ){ n--; }.  if(
2910: 20 67 2e 62 45 78 70 6c 61 69 6e 20 29 20 70 72   g.bExplain ) pr
2920: 69 6e 74 66 28 22 45 58 50 4c 41 49 4e 20 22 29  intf("EXPLAIN ")
2930: 3b 0a 20 20 70 72 69 6e 74 66 28 22 25 2e 2a 73  ;.  printf("%.*s
2940: 3b 5c 6e 22 2c 20 6e 2c 20 7a 53 71 6c 29 3b 0a  ;\n", n, zSql);.
2950: 20 20 69 66 28 20 67 2e 62 45 78 70 6c 61 69 6e    if( g.bExplain
2960: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
2970: 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 37  ION_NUMBER>=3007
2980: 30 31 37 20 0a 20 20 20 26 26 20 28 20 73 71 6c  017 .   && ( sql
2990: 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 22 43 52  ite3_strglob("CR
29a0: 45 41 54 45 20 2a 22 2c 20 7a 53 71 6c 29 3d 3d  EATE *", zSql)==
29b0: 30 0a 20 20 20 20 20 7c 7c 20 73 71 6c 69 74 65  0.     || sqlite
29c0: 33 5f 73 74 72 67 6c 6f 62 28 22 44 52 4f 50 20  3_strglob("DROP 
29d0: 2a 22 2c 20 7a 53 71 6c 29 3d 3d 30 0a 20 20 20  *", zSql)==0.   
29e0: 20 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72    || sqlite3_str
29f0: 67 6c 6f 62 28 22 41 4c 54 45 52 20 2a 22 2c 20  glob("ALTER *", 
2a00: 7a 53 71 6c 29 3d 3d 30 0a 20 20 20 20 20 20 29  zSql)==0.      )
2a10: 0a 23 65 6e 64 69 66 0a 20 20 29 7b 0a 20 20 20  .#endif.  ){.   
2a20: 20 70 72 69 6e 74 66 28 22 25 2e 2a 73 3b 5c 6e   printf("%.*s;\n
2a30: 22 2c 20 6e 2c 20 7a 53 71 6c 29 3b 0a 20 20 7d  ", n, zSql);.  }
2a40: 0a 7d 0a 0a 2f 2a 20 53 68 72 69 6e 6b 20 6d 65  .}../* Shrink me
2a50: 6d 6f 72 79 20 75 73 65 64 2c 20 69 66 20 61 70  mory used, if ap
2a60: 70 72 6f 70 72 69 61 74 65 20 61 6e 64 20 69 66  propriate and if
2a70: 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
2a80: 69 6f 6e 20 69 73 20 63 61 70 61 62 6c 65 0a 2a  ion is capable.*
2a90: 2a 20 6f 66 20 64 6f 69 6e 67 20 73 6f 2e 0a 2a  * of doing so..*
2aa0: 2f 0a 76 6f 69 64 20 73 70 65 65 64 74 65 73 74  /.void speedtest
2ab0: 31 5f 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 28  1_shrink_memory(
2ac0: 76 6f 69 64 29 7b 0a 23 69 66 20 53 51 4c 49 54  void){.#if SQLIT
2ad0: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
2ae0: 3e 3d 33 30 30 37 30 31 30 0a 20 20 69 66 28 20  >=3007010.  if( 
2af0: 67 2e 62 4d 65 6d 53 68 72 69 6e 6b 20 29 20 73  g.bMemShrink ) s
2b00: 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
2b10: 65 5f 6d 65 6d 6f 72 79 28 67 2e 64 62 29 3b 0a  e_memory(g.db);.
2b20: 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 20 52 75 6e  #endif.}../* Run
2b30: 20 53 51 4c 20 2a 2f 0a 76 6f 69 64 20 73 70 65   SQL */.void spe
2b40: 65 64 74 65 73 74 31 5f 65 78 65 63 28 63 6f 6e  edtest1_exec(con
2b50: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74  st char *zFormat
2b60: 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73  , ...){.  va_lis
2b70: 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 53  t ap;.  char *zS
2b80: 71 6c 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61  ql;.  va_start(a
2b90: 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a  p, zFormat);.  z
2ba0: 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d  Sql = sqlite3_vm
2bb0: 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20  printf(zFormat, 
2bc0: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
2bd0: 29 3b 0a 20 20 69 66 28 20 67 2e 62 53 71 6c 4f  );.  if( g.bSqlO
2be0: 6e 6c 79 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  nly ){.    print
2bf0: 53 71 6c 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c  Sql(zSql);.  }el
2c00: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45  se{.    char *zE
2c10: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69  rrMsg = 0;.    i
2c20: 6e 74 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  nt rc = sqlite3_
2c30: 65 78 65 63 28 67 2e 64 62 2c 20 7a 53 71 6c 2c  exec(g.db, zSql,
2c40: 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29   0, 0, &zErrMsg)
2c50: 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73  ;.    if( zErrMs
2c60: 67 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28  g ) fatal_error(
2c70: 22 53 51 4c 20 65 72 72 6f 72 3a 20 25 73 5c 6e  "SQL error: %s\n
2c80: 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20  %s\n", zErrMsg, 
2c90: 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72  zSql);.    if( r
2ca0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 66  c!=SQLITE_OK ) f
2cb0: 61 74 61 6c 5f 65 72 72 6f 72 28 22 65 78 65 63  atal_error("exec
2cc0: 20 65 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73   error: %s\n", s
2cd0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 67 2e  qlite3_errmsg(g.
2ce0: 64 62 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  db));.  }.  sqli
2cf0: 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
2d00: 20 20 73 70 65 65 64 74 65 73 74 31 5f 73 68 72    speedtest1_shr
2d10: 69 6e 6b 5f 6d 65 6d 6f 72 79 28 29 3b 0a 7d 0a  ink_memory();.}.
2d20: 0a 2f 2a 20 50 72 65 70 61 72 65 20 61 6e 20 53  ./* Prepare an S
2d30: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  QL statement */.
2d40: 76 6f 69 64 20 73 70 65 65 64 74 65 73 74 31 5f  void speedtest1_
2d50: 70 72 65 70 61 72 65 28 63 6f 6e 73 74 20 63 68  prepare(const ch
2d60: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e  ar *zFormat, ...
2d70: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  ){.  va_list ap;
2d80: 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
2d90: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
2da0: 6f 72 6d 61 74 29 3b 0a 20 20 7a 53 71 6c 20 3d  ormat);.  zSql =
2db0: 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74   sqlite3_vmprint
2dc0: 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  f(zFormat, ap);.
2dd0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
2de0: 69 66 28 20 67 2e 62 53 71 6c 4f 6e 6c 79 20 29  if( g.bSqlOnly )
2df0: 7b 0a 20 20 20 20 70 72 69 6e 74 53 71 6c 28 7a  {.    printSql(z
2e00: 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Sql);.  }else{. 
2e10: 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20 69     int rc;.    i
2e20: 66 28 20 67 2e 70 53 74 6d 74 20 29 20 73 71 6c  f( g.pStmt ) sql
2e30: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 67 2e  ite3_finalize(g.
2e40: 70 53 74 6d 74 29 3b 0a 20 20 20 20 72 63 20 3d  pStmt);.    rc =
2e50: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2e60: 5f 76 32 28 67 2e 64 62 2c 20 7a 53 71 6c 2c 20  _v2(g.db, zSql, 
2e70: 2d 31 2c 20 26 67 2e 70 53 74 6d 74 2c 20 30 29  -1, &g.pStmt, 0)
2e80: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
2e90: 20 20 20 20 20 20 66 61 74 61 6c 5f 65 72 72 6f        fatal_erro
2ea0: 72 28 22 53 51 4c 20 65 72 72 6f 72 3a 20 25 73  r("SQL error: %s
2eb0: 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
2ec0: 6d 73 67 28 67 2e 64 62 29 29 3b 0a 20 20 20 20  msg(g.db));.    
2ed0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  }.  }.  sqlite3_
2ee0: 66 72 65 65 28 7a 53 71 6c 29 3b 0a 7d 0a 0a 2f  free(zSql);.}../
2ef0: 2a 20 52 75 6e 20 61 6e 20 53 51 4c 20 73 74 61  * Run an SQL sta
2f00: 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 6c  tement previousl
2f10: 79 20 70 72 65 70 61 72 65 64 20 2a 2f 0a 76 6f  y prepared */.vo
2f20: 69 64 20 73 70 65 65 64 74 65 73 74 31 5f 72 75  id speedtest1_ru
2f30: 6e 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69  n(void){.  int i
2f40: 2c 20 6e 2c 20 6c 65 6e 3b 0a 20 20 69 66 28 20  , n, len;.  if( 
2f50: 67 2e 62 53 71 6c 4f 6e 6c 79 20 29 20 72 65 74  g.bSqlOnly ) ret
2f60: 75 72 6e 3b 0a 20 20 61 73 73 65 72 74 28 20 67  urn;.  assert( g
2f70: 2e 70 53 74 6d 74 20 29 3b 0a 20 20 67 2e 6e 52  .pStmt );.  g.nR
2f80: 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 77 68 69  esult = 0;.  whi
2f90: 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
2fa0: 28 67 2e 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  (g.pStmt)==SQLIT
2fb0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 6e 20 3d  E_ROW ){.    n =
2fc0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2fd0: 63 6f 75 6e 74 28 67 2e 70 53 74 6d 74 29 3b 0a  count(g.pStmt);.
2fe0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
2ff0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f  ; i++){.      co
3000: 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 28 63  nst char *z = (c
3010: 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
3020: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 67  e3_column_text(g
3030: 2e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  .pStmt, i);.    
3040: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 7a 20 3d    if( z==0 ) z =
3050: 20 22 6e 69 6c 22 3b 0a 20 20 20 20 20 20 6c 65   "nil";.      le
3060: 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  n = (int)strlen(
3070: 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20 67 2e  z);.      if( g.
3080: 6e 52 65 73 75 6c 74 2b 6c 65 6e 3c 73 69 7a 65  nResult+len<size
3090: 6f 66 28 67 2e 7a 52 65 73 75 6c 74 29 2d 32 20  of(g.zResult)-2 
30a0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 67  ){.        if( g
30b0: 2e 6e 52 65 73 75 6c 74 3e 30 20 29 20 67 2e 7a  .nResult>0 ) g.z
30c0: 52 65 73 75 6c 74 5b 67 2e 6e 52 65 73 75 6c 74  Result[g.nResult
30d0: 2b 2b 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 20  ++] = ' ';.     
30e0: 20 20 20 6d 65 6d 63 70 79 28 67 2e 7a 52 65 73     memcpy(g.zRes
30f0: 75 6c 74 20 2b 20 67 2e 6e 52 65 73 75 6c 74 2c  ult + g.nResult,
3100: 20 7a 2c 20 6c 65 6e 2b 31 29 3b 0a 20 20 20 20   z, len+1);.    
3110: 20 20 20 20 67 2e 6e 52 65 73 75 6c 74 20 2b 3d      g.nResult +=
3120: 20 6c 65 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20   len;.      }.  
3130: 20 20 7d 0a 20 20 7d 0a 23 69 66 20 53 51 4c 49    }.  }.#if SQLI
3140: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
3150: 52 3e 3d 33 30 30 36 30 30 31 0a 20 20 69 66 28  R>=3006001.  if(
3160: 20 67 2e 62 52 65 70 72 65 70 61 72 65 20 29 7b   g.bReprepare ){
3170: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  .    sqlite3_stm
3180: 74 20 2a 70 4e 65 77 3b 0a 20 20 20 20 73 71 6c  t *pNew;.    sql
3190: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
31a0: 67 2e 64 62 2c 20 73 71 6c 69 74 65 33 5f 73 71  g.db, sqlite3_sq
31b0: 6c 28 67 2e 70 53 74 6d 74 29 2c 20 2d 31 2c 20  l(g.pStmt), -1, 
31c0: 26 70 4e 65 77 2c 20 30 29 3b 0a 20 20 20 20 73  &pNew, 0);.    s
31d0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
31e0: 67 2e 70 53 74 6d 74 29 3b 0a 20 20 20 20 67 2e  g.pStmt);.    g.
31f0: 70 53 74 6d 74 20 3d 20 70 4e 65 77 3b 0a 20 20  pStmt = pNew;.  
3200: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b  }else.#endif.  {
3210: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
3220: 65 74 28 67 2e 70 53 74 6d 74 29 3b 0a 20 20 7d  et(g.pStmt);.  }
3230: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 73 68  .  speedtest1_sh
3240: 72 69 6e 6b 5f 6d 65 6d 6f 72 79 28 29 3b 0a 7d  rink_memory();.}
3250: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
3260: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
3270: 0a 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 33 5f  ./* The sqlite3_
3280: 74 72 61 63 65 28 29 20 63 61 6c 6c 62 61 63 6b  trace() callback
3290: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 73 74 61   function */.sta
32a0: 74 69 63 20 76 6f 69 64 20 74 72 61 63 65 43 61  tic void traceCa
32b0: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 4e 6f 74  llback(void *Not
32c0: 55 73 65 64 2c 20 63 6f 6e 73 74 20 63 68 61 72  Used, const char
32d0: 20 2a 7a 53 71 6c 29 7b 0a 20 20 69 6e 74 20 6e   *zSql){.  int n
32e0: 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
32f0: 53 71 6c 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e  Sql);.  while( n
3300: 3e 30 20 26 26 20 28 7a 53 71 6c 5b 6e 2d 31 5d  >0 && (zSql[n-1]
3310: 3d 3d 27 3b 27 20 7c 7c 20 49 53 53 50 41 43 45  ==';' || ISSPACE
3320: 28 7a 53 71 6c 5b 6e 2d 31 5d 29 29 20 29 20 6e  (zSql[n-1])) ) n
3330: 2d 2d 3b 0a 20 20 66 70 72 69 6e 74 66 28 73 74  --;.  fprintf(st
3340: 64 65 72 72 2c 22 25 2e 2a 73 3b 5c 6e 22 2c 20  derr,"%.*s;\n", 
3350: 6e 2c 20 7a 53 71 6c 29 3b 0a 7d 0a 23 65 6e 64  n, zSql);.}.#end
3360: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
3370: 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a  T_DEPRECATED */.
3380: 0a 2f 2a 20 53 75 62 73 74 69 74 75 74 65 20 72  ./* Substitute r
3390: 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e  andom() function
33a0: 20 74 68 61 74 20 67 69 76 65 73 20 74 68 65 20   that gives the 
33b0: 73 61 6d 65 20 72 61 6e 64 6f 6d 0a 2a 2a 20 73  same random.** s
33c0: 65 71 75 65 6e 63 65 20 6f 6e 20 65 61 63 68 20  equence on each 
33d0: 72 75 6e 2c 20 66 6f 72 20 72 65 70 65 61 74 61  run, for repeata
33e0: 62 69 6c 69 74 79 2e 20 2a 2f 0a 73 74 61 74 69  bility. */.stati
33f0: 63 20 76 6f 69 64 20 72 61 6e 64 6f 6d 46 75 6e  c void randomFun
3400: 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c(.  sqlite3_con
3410: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20  text *context,. 
3420: 20 69 6e 74 20 4e 6f 74 55 73 65 64 2c 0a 20 20   int NotUsed,.  
3430: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
3440: 4e 6f 74 55 73 65 64 32 0a 29 7b 0a 20 20 73 71  NotUsed2.){.  sq
3450: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
3460: 36 34 28 63 6f 6e 74 65 78 74 2c 20 28 73 71 6c  64(context, (sql
3470: 69 74 65 33 5f 69 6e 74 36 34 29 73 70 65 65 64  ite3_int64)speed
3480: 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 29 3b  test1_random());
3490: 0a 7d 0a 0a 2f 2a 20 45 73 74 69 6d 61 74 65 20  .}../* Estimate 
34a0: 74 68 65 20 73 71 75 61 72 65 20 72 6f 6f 74 20  the square root 
34b0: 6f 66 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  of an integer */
34c0: 0a 73 74 61 74 69 63 20 69 6e 74 20 65 73 74 5f  .static int est_
34d0: 73 71 75 61 72 65 5f 72 6f 6f 74 28 69 6e 74 20  square_root(int 
34e0: 78 29 7b 0a 20 20 69 6e 74 20 79 30 20 3d 20 78  x){.  int y0 = x
34f0: 2f 32 3b 0a 20 20 69 6e 74 20 79 31 3b 0a 20 20  /2;.  int y1;.  
3500: 69 6e 74 20 6e 3b 0a 20 20 66 6f 72 28 6e 3d 30  int n;.  for(n=0
3510: 3b 20 79 30 3e 30 20 26 26 20 6e 3c 31 30 3b 20  ; y0>0 && n<10; 
3520: 6e 2b 2b 29 7b 0a 20 20 20 20 79 31 20 3d 20 28  n++){.    y1 = (
3530: 79 30 20 2b 20 78 2f 79 30 29 2f 32 3b 0a 20 20  y0 + x/y0)/2;.  
3540: 20 20 69 66 28 20 79 31 3d 3d 79 30 20 29 20 62    if( y1==y0 ) b
3550: 72 65 61 6b 3b 0a 20 20 20 20 79 30 20 3d 20 79  reak;.    y0 = y
3560: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
3570: 79 30 3b 0a 7d 0a 0a 0a 23 69 66 20 53 51 4c 49  y0;.}...#if SQLI
3580: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
3590: 52 3c 33 30 30 35 30 30 34 0a 2f 2a 0a 2a 2a 20  R<3005004./*.** 
35a0: 41 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  An implementatio
35b0: 6e 20 6f 66 20 67 72 6f 75 70 5f 63 6f 6e 63 61  n of group_conca
35c0: 74 28 29 2e 20 20 55 73 65 64 20 6f 6e 6c 79 20  t().  Used only 
35d0: 77 68 65 6e 20 74 65 73 74 69 6e 67 20 6f 6c 64  when testing old
35e0: 65 72 0a 2a 2a 20 76 65 72 73 69 6f 6e 73 20 6f  er.** versions o
35f0: 66 20 53 51 4c 69 74 65 20 74 68 61 74 20 6c 61  f SQLite that la
3600: 63 6b 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  ck the built-in 
3610: 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 2e 0a  group_concat()..
3620: 2a 2f 0a 73 74 72 75 63 74 20 67 72 6f 75 70 43  */.struct groupC
3630: 6f 6e 63 61 74 20 7b 0a 20 20 63 68 61 72 20 2a  oncat {.  char *
3640: 7a 3b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b  z;.  int nAlloc;
3650: 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 0a 7d 3b  .  int nUsed;.};
3660: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 67 72 6f  .static void gro
3670: 75 70 41 70 70 65 6e 64 28 73 74 72 75 63 74 20  upAppend(struct 
3680: 67 72 6f 75 70 43 6f 6e 63 61 74 20 2a 70 2c 20  groupConcat *p, 
3690: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
36a0: 6e 74 20 6e 29 7b 0a 20 20 69 66 28 20 70 2d 3e  nt n){.  if( p->
36b0: 6e 55 73 65 64 2b 6e 20 3e 3d 20 70 2d 3e 6e 41  nUsed+n >= p->nA
36c0: 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 69 6e 74 20  lloc ){.    int 
36d0: 6e 32 20 3d 20 28 70 2d 3e 6e 41 6c 6c 6f 63 2b  n2 = (p->nAlloc+
36e0: 6e 2b 31 29 2a 32 3b 0a 20 20 20 20 63 68 61 72  n+1)*2;.    char
36f0: 20 2a 7a 32 20 3d 20 73 71 6c 69 74 65 33 5f 72   *z2 = sqlite3_r
3700: 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20 6e 32 29  ealloc(p->z, n2)
3710: 3b 0a 20 20 20 20 69 66 28 20 7a 32 3d 3d 30 20  ;.    if( z2==0 
3720: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 70 2d  ) return;.    p-
3730: 3e 7a 20 3d 20 7a 32 3b 0a 20 20 20 20 70 2d 3e  >z = z2;.    p->
3740: 6e 41 6c 6c 6f 63 20 3d 20 6e 32 3b 0a 20 20 7d  nAlloc = n2;.  }
3750: 0a 20 20 6d 65 6d 63 70 79 28 70 2d 3e 7a 2b 70  .  memcpy(p->z+p
3760: 2d 3e 6e 55 73 65 64 2c 20 7a 2c 20 6e 29 3b 0a  ->nUsed, z, n);.
3770: 20 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b    p->nUsed += n;
3780: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 67  .}.static void g
3790: 72 6f 75 70 53 74 65 70 28 0a 20 20 73 71 6c 69  roupStep(.  sqli
37a0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
37b0: 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63  text,.  int argc
37c0: 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ,.  sqlite3_valu
37d0: 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 6f  e **argv.){.  co
37e0: 6e 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 3b 0a  nst char *zVal;.
37f0: 20 20 73 74 72 75 63 74 20 67 72 6f 75 70 43 6f    struct groupCo
3800: 6e 63 61 74 20 2a 70 3b 0a 20 20 63 6f 6e 73 74  ncat *p;.  const
3810: 20 63 68 61 72 20 2a 7a 53 65 70 3b 0a 20 20 69   char *zSep;.  i
3820: 6e 74 20 6e 56 61 6c 2c 20 6e 53 65 70 3b 0a 20  nt nVal, nSep;. 
3830: 20 61 73 73 65 72 74 28 20 61 72 67 63 3d 3d 31   assert( argc==1
3840: 20 7c 7c 20 61 72 67 63 3d 3d 32 20 29 3b 0a 20   || argc==2 );. 
3850: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 76 61 6c   if( sqlite3_val
3860: 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29  ue_type(argv[0])
3870: 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 20 29 20  ==SQLITE_NULL ) 
3880: 72 65 74 75 72 6e 3b 0a 20 20 70 3d 20 28 73 74  return;.  p= (st
3890: 72 75 63 74 20 67 72 6f 75 70 43 6f 6e 63 61 74  ruct groupConcat
38a0: 2a 29 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  *)sqlite3_aggreg
38b0: 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
38c0: 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29  ext, sizeof(*p))
38d0: 3b 0a 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  ;..  if( p ){.  
38e0: 20 20 69 6e 74 20 66 69 72 73 74 54 65 72 6d 20    int firstTerm 
38f0: 3d 20 70 2d 3e 6e 55 73 65 64 3d 3d 30 3b 0a 20  = p->nUsed==0;. 
3900: 20 20 20 69 66 28 20 21 66 69 72 73 74 54 65 72     if( !firstTer
3910: 6d 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 61  m ){.      if( a
3920: 72 67 63 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  rgc==2 ){.      
3930: 20 20 7a 53 65 70 20 3d 20 28 63 68 61 72 2a 29    zSep = (char*)
3940: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
3950: 78 74 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20  xt(argv[1]);.   
3960: 20 20 20 20 20 6e 53 65 70 20 3d 20 73 71 6c 69       nSep = sqli
3970: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
3980: 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20 20 20  argv[1]);.      
3990: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
39a0: 53 65 70 20 3d 20 22 2c 22 3b 0a 20 20 20 20 20  Sep = ",";.     
39b0: 20 20 20 6e 53 65 70 20 3d 20 31 3b 0a 20 20 20     nSep = 1;.   
39c0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6e     }.      if( n
39d0: 53 65 70 20 29 20 67 72 6f 75 70 41 70 70 65 6e  Sep ) groupAppen
39e0: 64 28 70 2c 20 7a 53 65 70 2c 20 6e 53 65 70 29  d(p, zSep, nSep)
39f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 56 61 6c  ;.    }.    zVal
3a00: 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
3a10: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
3a20: 76 5b 30 5d 29 3b 0a 20 20 20 20 6e 56 61 6c 20  v[0]);.    nVal 
3a30: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
3a40: 62 79 74 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a  bytes(argv[0]);.
3a50: 20 20 20 20 69 66 28 20 7a 56 61 6c 20 29 20 67      if( zVal ) g
3a60: 72 6f 75 70 41 70 70 65 6e 64 28 70 2c 20 7a 56  roupAppend(p, zV
3a70: 61 6c 2c 20 6e 56 61 6c 29 3b 0a 20 20 7d 0a 7d  al, nVal);.  }.}
3a80: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 67 72 6f  .static void gro
3a90: 75 70 46 69 6e 61 6c 28 73 71 6c 69 74 65 33 5f  upFinal(sqlite3_
3aa0: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
3ab0: 29 7b 0a 20 20 73 74 72 75 63 74 20 67 72 6f 75  ){.  struct grou
3ac0: 70 43 6f 6e 63 61 74 20 2a 70 3b 0a 20 20 70 20  pConcat *p;.  p 
3ad0: 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  = sqlite3_aggreg
3ae0: 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
3af0: 65 78 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 70  ext, 0);.  if( p
3b00: 20 26 26 20 70 2d 3e 7a 20 29 7b 0a 20 20 20 20   && p->z ){.    
3b10: 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 5d 20 3d  p->z[p->nUsed] =
3b20: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   0;.    sqlite3_
3b30: 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74  result_text(cont
3b40: 65 78 74 2c 20 70 2d 3e 7a 2c 20 70 2d 3e 6e 55  ext, p->z, p->nU
3b50: 73 65 64 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  sed, sqlite3_fre
3b60: 65 29 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66  e);.  }.}.#endif
3b70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 69 6e  ../*.** The main
3b80: 20 61 6e 64 20 64 65 66 61 75 6c 74 20 74 65 73   and default tes
3b90: 74 73 65 74 0a 2a 2f 0a 76 6f 69 64 20 74 65 73  tset.*/.void tes
3ba0: 74 73 65 74 5f 6d 61 69 6e 28 76 6f 69 64 29 7b  tset_main(void){
3bb0: 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
3be0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 2f 2a 20 69 74 65 72 61 74 69 6f 6e      /* iteration
3c10: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
3c20: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
3c30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
3c40: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 73 20  e of the tables 
3c50: 2a 2f 0a 20 20 69 6e 74 20 6d 61 78 62 3b 20 20  */.  int maxb;  
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c70: 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 77     /* Maximum sw
3c80: 69 7a 7a 6c 65 64 20 76 61 6c 75 65 20 2a 2f 0a  izzled value */.
3c90: 20 20 75 6e 73 69 67 6e 65 64 20 78 31 20 3d 20    unsigned x1 = 
3ca0: 30 2c 20 78 32 20 3d 20 30 3b 20 20 20 20 20 20  0, x2 = 0;      
3cb0: 2f 2a 20 50 61 72 61 6d 65 74 65 72 73 20 2a 2f  /* Parameters */
3cc0: 0a 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 20  .  int len = 0; 
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
3cf0: 65 20 7a 4e 75 6d 5b 5d 20 73 74 72 69 6e 67 20  e zNum[] string 
3d00: 2a 2f 0a 20 20 63 68 61 72 20 7a 4e 75 6d 5b 32  */.  char zNum[2
3d10: 30 30 30 5d 3b 20 20 20 20 20 20 20 20 20 20 20  000];           
3d20: 20 20 20 2f 2a 20 41 20 6e 75 6d 62 65 72 20 6e     /* A number n
3d30: 61 6d 65 20 2a 2f 0a 0a 20 20 73 7a 20 3d 20 6e  ame */..  sz = n
3d40: 20 3d 20 67 2e 73 7a 54 65 73 74 2a 35 30 30 3b   = g.szTest*500;
3d50: 0a 20 20 7a 4e 75 6d 5b 30 5d 20 3d 20 30 3b 0a  .  zNum[0] = 0;.
3d60: 20 20 6d 61 78 62 20 3d 20 72 6f 75 6e 64 75 70    maxb = roundup
3d70: 5f 61 6c 6c 6f 6e 65 73 28 73 7a 29 3b 0a 20 20  _allones(sz);.  
3d80: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
3d90: 5f 74 65 73 74 28 31 30 30 2c 20 22 25 64 20 49  _test(100, "%d I
3da0: 4e 53 45 52 54 73 20 69 6e 74 6f 20 74 61 62 6c  NSERTs into tabl
3db0: 65 20 77 69 74 68 20 6e 6f 20 69 6e 64 65 78 22  e with no index"
3dc0: 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73  , n);.  speedtes
3dd0: 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29  t1_exec("BEGIN")
3de0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
3df0: 78 65 63 28 22 43 52 45 41 54 45 25 73 20 54 41  xec("CREATE%s TA
3e00: 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45 52  BLE t1(a INTEGER
3e10: 20 25 73 2c 20 62 20 49 4e 54 45 47 45 52 20 25   %s, b INTEGER %
3e20: 73 2c 20 63 20 54 45 58 54 20 25 73 29 3b 22 2c  s, c TEXT %s);",
3e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e40: 20 20 20 69 73 54 65 6d 70 28 39 29 2c 20 67 2e     isTemp(9), g.
3e50: 7a 4e 4e 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 4e  zNN, g.zNN, g.zN
3e60: 4e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  N);.  speedtest1
3e70: 5f 70 72 65 70 61 72 65 28 22 49 4e 53 45 52 54  _prepare("INSERT
3e80: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3e90: 3f 31 2c 3f 32 2c 3f 33 29 3b 20 2d 2d 20 20 25  ?1,?2,?3); --  %
3ea0: 64 20 74 69 6d 65 73 22 2c 20 6e 29 3b 0a 20 20  d times", n);.  
3eb0: 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69  for(i=1; i<=n; i
3ec0: 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 77  ++){.    x1 = sw
3ed0: 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b 0a 20  izzle(i,maxb);. 
3ee0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75     speedtest1_nu
3ef0: 6d 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75  mbername(x1, zNu
3f00: 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29  m, sizeof(zNum))
3f10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
3f20: 6e 64 5f 69 6e 74 36 34 28 67 2e 70 53 74 6d 74  nd_int64(g.pStmt
3f30: 2c 20 31 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e  , 1, (sqlite3_in
3f40: 74 36 34 29 78 31 29 3b 0a 20 20 20 20 73 71 6c  t64)x1);.    sql
3f50: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
3f60: 70 53 74 6d 74 2c 20 32 2c 20 69 29 3b 0a 20 20  pStmt, 2, i);.  
3f70: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
3f80: 65 78 74 28 67 2e 70 53 74 6d 74 2c 20 33 2c 20  ext(g.pStmt, 3, 
3f90: 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  zNum, -1, SQLITE
3fa0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70  _STATIC);.    sp
3fb0: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
3fc0: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
3fd0: 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b  _exec("COMMIT");
3fe0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
3ff0: 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20  d_test();...  n 
4000: 3d 20 73 7a 3b 0a 20 20 73 70 65 65 64 74 65 73  = sz;.  speedtes
4010: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 31  t1_begin_test(11
4020: 30 2c 20 22 25 64 20 6f 72 64 65 72 65 64 20 49  0, "%d ordered I
4030: 4e 53 45 52 54 53 20 77 69 74 68 20 6f 6e 65 20  NSERTS with one 
4040: 69 6e 64 65 78 2f 50 4b 22 2c 20 6e 29 3b 0a 20  index/PK", n);. 
4050: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
4060: 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65  ("BEGIN");.  spe
4070: 65 64 74 65 73 74 31 5f 65 78 65 63 28 0a 20 20  edtest1_exec(.  
4080: 20 20 20 22 43 52 45 41 54 45 25 73 20 54 41 42     "CREATE%s TAB
4090: 4c 45 20 74 32 28 61 20 49 4e 54 45 47 45 52 20  LE t2(a INTEGER 
40a0: 25 73 20 25 73 2c 20 62 20 49 4e 54 45 47 45 52  %s %s, b INTEGER
40b0: 20 25 73 2c 20 63 20 54 45 58 54 20 25 73 29 20   %s, c TEXT %s) 
40c0: 25 73 22 2c 0a 20 20 20 20 20 69 73 54 65 6d 70  %s",.     isTemp
40d0: 28 35 29 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 50  (5), g.zNN, g.zP
40e0: 4b 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 4e 4e 2c  K, g.zNN, g.zNN,
40f0: 20 67 2e 7a 57 52 29 3b 0a 20 20 73 70 65 65 64   g.zWR);.  speed
4100: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 49  test1_prepare("I
4110: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
4120: 4c 55 45 53 28 3f 31 2c 3f 32 2c 3f 33 29 3b 20  LUES(?1,?2,?3); 
4130: 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 29  -- %d times", n)
4140: 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d  ;.  for(i=1; i<=
4150: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20  n; i++){.    x1 
4160: 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62  = swizzle(i,maxb
4170: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
4180: 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 78 31 2c  1_numbername(x1,
4190: 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e   zNum, sizeof(zN
41a0: 75 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  um));.    sqlite
41b0: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
41c0: 6d 74 2c 20 31 2c 20 69 29 3b 0a 20 20 20 20 73  mt, 1, i);.    s
41d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
41e0: 34 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28 73  4(g.pStmt, 2, (s
41f0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 78 31 29  qlite3_int64)x1)
4200: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
4210: 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74 2c  nd_text(g.pStmt,
4220: 20 33 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51   3, zNum, -1, SQ
4230: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
4240: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
4250: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
4260: 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49  est1_exec("COMMI
4270: 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  T");.  speedtest
4280: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a  1_end_test();...
4290: 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70 65 65    n = sz;.  spee
42a0: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
42b0: 74 28 31 32 30 2c 20 22 25 64 20 75 6e 6f 72 64  t(120, "%d unord
42c0: 65 72 65 64 20 49 4e 53 45 52 54 53 20 77 69 74  ered INSERTS wit
42d0: 68 20 6f 6e 65 20 69 6e 64 65 78 2f 50 4b 22 2c  h one index/PK",
42e0: 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74   n);.  speedtest
42f0: 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b  1_exec("BEGIN");
4300: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
4310: 65 63 28 0a 20 20 20 20 20 20 22 43 52 45 41 54  ec(.      "CREAT
4320: 45 25 73 20 54 41 42 4c 45 20 74 33 28 61 20 49  E%s TABLE t3(a I
4330: 4e 54 45 47 45 52 20 25 73 20 25 73 2c 20 62 20  NTEGER %s %s, b 
4340: 49 4e 54 45 47 45 52 20 25 73 2c 20 63 20 54 45  INTEGER %s, c TE
4350: 58 54 20 25 73 29 20 25 73 22 2c 0a 20 20 20 20  XT %s) %s",.    
4360: 20 20 69 73 54 65 6d 70 28 33 29 2c 20 67 2e 7a    isTemp(3), g.z
4370: 4e 4e 2c 20 67 2e 7a 50 4b 2c 20 67 2e 7a 4e 4e  NN, g.zPK, g.zNN
4380: 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 57 52 29 3b  , g.zNN, g.zWR);
4390: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
43a0: 65 70 61 72 65 28 22 49 4e 53 45 52 54 20 49 4e  epare("INSERT IN
43b0: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 3f 31 2c  TO t3 VALUES(?1,
43c0: 3f 32 2c 3f 33 29 3b 20 2d 2d 20 25 64 20 74 69  ?2,?3); -- %d ti
43d0: 6d 65 73 22 2c 20 6e 29 3b 0a 20 20 66 6f 72 28  mes", n);.  for(
43e0: 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b  i=1; i<=n; i++){
43f0: 0a 20 20 20 20 78 31 20 3d 20 73 77 69 7a 7a 6c  .    x1 = swizzl
4400: 65 28 69 2c 6d 61 78 62 29 3b 0a 20 20 20 20 73  e(i,maxb);.    s
4410: 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72  peedtest1_number
4420: 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c 20 73  name(x1, zNum, s
4430: 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20  izeof(zNum));.  
4440: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
4450: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 69  nt(g.pStmt, 2, i
4460: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
4470: 69 6e 64 5f 69 6e 74 36 34 28 67 2e 70 53 74 6d  ind_int64(g.pStm
4480: 74 2c 20 31 2c 20 28 73 71 6c 69 74 65 33 5f 69  t, 1, (sqlite3_i
4490: 6e 74 36 34 29 78 31 29 3b 0a 20 20 20 20 73 71  nt64)x1);.    sq
44a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
44b0: 67 2e 70 53 74 6d 74 2c 20 33 2c 20 7a 4e 75 6d  g.pStmt, 3, zNum
44c0: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41  , -1, SQLITE_STA
44d0: 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65 64 74  TIC);.    speedt
44e0: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a  est1_run();.  }.
44f0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
4500: 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73  c("COMMIT");.  s
4510: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
4520: 73 74 28 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54  st();..#if SQLIT
4530: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
4540: 3c 33 30 30 35 30 30 34 0a 20 20 73 71 6c 69 74  <3005004.  sqlit
4550: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
4560: 6f 6e 28 67 2e 64 62 2c 20 22 67 72 6f 75 70 5f  on(g.db, "group_
4570: 63 6f 6e 63 61 74 22 2c 20 31 2c 20 53 51 4c 49  concat", 1, SQLI
4580: 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20 20 20 20  TE_UTF8, 0,.    
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45a0: 20 20 20 20 20 20 30 2c 20 67 72 6f 75 70 53 74        0, groupSt
45b0: 65 70 2c 20 67 72 6f 75 70 46 69 6e 61 6c 29 3b  ep, groupFinal);
45c0: 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 32  .#endif..  n = 2
45d0: 35 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  5;.  speedtest1_
45e0: 62 65 67 69 6e 5f 74 65 73 74 28 31 33 30 2c 20  begin_test(130, 
45f0: 22 25 64 20 53 45 4c 45 43 54 53 2c 20 6e 75 6d  "%d SELECTS, num
4600: 65 72 69 63 20 42 45 54 57 45 45 4e 2c 20 75 6e  eric BETWEEN, un
4610: 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20  indexed", n);.  
4620: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
4630: 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65  "BEGIN");.  spee
4640: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
4650: 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e      "SELECT coun
4660: 74 28 2a 29 2c 20 61 76 67 28 62 29 2c 20 73 75  t(*), avg(b), su
4670: 6d 28 6c 65 6e 67 74 68 28 63 29 29 2c 20 67 72  m(length(c)), gr
4680: 6f 75 70 5f 63 6f 6e 63 61 74 28 63 29 20 46 52  oup_concat(c) FR
4690: 4f 4d 20 74 31 5c 6e 22 0a 20 20 20 20 22 20 57  OM t1\n".    " W
46a0: 48 45 52 45 20 62 20 42 45 54 57 45 45 4e 20 3f  HERE b BETWEEN ?
46b0: 31 20 41 4e 44 20 3f 32 3b 20 2d 2d 20 25 64 20  1 AND ?2; -- %d 
46c0: 74 69 6d 65 73 22 2c 20 6e 0a 20 20 29 3b 0a 20  times", n.  );. 
46d0: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20   for(i=1; i<=n; 
46e0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 28 69  i++){.    if( (i
46f0: 2d 31 29 25 67 2e 6e 52 65 70 65 61 74 3d 3d 30  -1)%g.nRepeat==0
4700: 20 29 7b 0a 20 20 20 20 20 20 78 31 20 3d 20 73   ){.      x1 = s
4710: 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d  peedtest1_random
4720: 28 29 25 6d 61 78 62 3b 0a 20 20 20 20 20 20 78  ()%maxb;.      x
4730: 32 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72  2 = speedtest1_r
4740: 61 6e 64 6f 6d 28 29 25 31 30 20 2b 20 73 7a 2f  andom()%10 + sz/
4750: 35 30 30 30 20 2b 20 78 31 3b 0a 20 20 20 20 7d  5000 + x1;.    }
4760: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
4770: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
4780: 2c 20 78 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  , x1);.    sqlit
4790: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
47a0: 74 6d 74 2c 20 32 2c 20 78 32 29 3b 0a 20 20 20  tmt, 2, x2);.   
47b0: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
47c0: 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65  );.  }.  speedte
47d0: 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54  st1_exec("COMMIT
47e0: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
47f0: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20  _end_test();... 
4800: 20 6e 20 3d 20 31 30 3b 0a 20 20 73 70 65 65 64   n = 10;.  speed
4810: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
4820: 28 31 34 30 2c 20 22 25 64 20 53 45 4c 45 43 54  (140, "%d SELECT
4830: 53 2c 20 4c 49 4b 45 2c 20 75 6e 69 6e 64 65 78  S, LIKE, unindex
4840: 65 64 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  ed", n);.  speed
4850: 74 65 73 74 31 5f 65 78 65 63 28 22 42 45 47 49  test1_exec("BEGI
4860: 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  N");.  speedtest
4870: 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20 20 22  1_prepare(.    "
4880: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c  SELECT count(*),
4890: 20 61 76 67 28 62 29 2c 20 73 75 6d 28 6c 65 6e   avg(b), sum(len
48a0: 67 74 68 28 63 29 29 2c 20 67 72 6f 75 70 5f 63  gth(c)), group_c
48b0: 6f 6e 63 61 74 28 63 29 20 46 52 4f 4d 20 74 31  oncat(c) FROM t1
48c0: 5c 6e 22 0a 20 20 20 20 22 20 57 48 45 52 45 20  \n".    " WHERE 
48d0: 63 20 4c 49 4b 45 20 3f 31 3b 20 2d 2d 20 25 64  c LIKE ?1; -- %d
48e0: 20 74 69 6d 65 73 22 2c 20 6e 0a 20 20 29 3b 0a   times", n.  );.
48f0: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b    for(i=1; i<=n;
4900: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 28   i++){.    if( (
4910: 69 2d 31 29 25 67 2e 6e 52 65 70 65 61 74 3d 3d  i-1)%g.nRepeat==
4920: 30 20 29 7b 0a 20 20 20 20 20 20 78 31 20 3d 20  0 ){.      x1 = 
4930: 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f  speedtest1_rando
4940: 6d 28 29 25 6d 61 78 62 3b 0a 20 20 20 20 20 20  m()%maxb;.      
4950: 7a 4e 75 6d 5b 30 5d 20 3d 20 27 25 27 3b 0a 20  zNum[0] = '%';. 
4960: 20 20 20 20 20 6c 65 6e 20 3d 20 73 70 65 65 64       len = speed
4970: 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65  test1_numbername
4980: 28 69 2c 20 7a 4e 75 6d 2b 31 2c 20 73 69 7a 65  (i, zNum+1, size
4990: 6f 66 28 7a 4e 75 6d 29 2d 32 29 3b 0a 20 20 20  of(zNum)-2);.   
49a0: 20 20 20 7a 4e 75 6d 5b 6c 65 6e 5d 20 3d 20 27     zNum[len] = '
49b0: 25 27 3b 0a 20 20 20 20 20 20 7a 4e 75 6d 5b 6c  %';.      zNum[l
49c0: 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d  en+1] = 0;.    }
49d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
49e0: 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74 2c 20  d_text(g.pStmt, 
49f0: 31 2c 20 7a 4e 75 6d 2c 20 6c 65 6e 2b 31 2c 20  1, zNum, len+1, 
4a00: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
4a10: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
4a20: 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  un();.  }.  spee
4a30: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d  dtest1_exec("COM
4a40: 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65  MIT");.  speedte
4a50: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
4a60: 0a 0a 20 20 6e 20 3d 20 31 30 3b 0a 20 20 73 70  ..  n = 10;.  sp
4a70: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
4a80: 65 73 74 28 31 34 32 2c 20 22 25 64 20 53 45 4c  est(142, "%d SEL
4a90: 45 43 54 53 20 77 2f 4f 52 44 45 52 20 42 59 2c  ECTS w/ORDER BY,
4aa0: 20 75 6e 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b   unindexed", n);
4ab0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
4ac0: 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73  ec("BEGIN");.  s
4ad0: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
4ae0: 65 28 0a 20 20 20 20 22 53 45 4c 45 43 54 20 61  e(.    "SELECT a
4af0: 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 31 20 57  , b, c FROM t1 W
4b00: 48 45 52 45 20 63 20 4c 49 4b 45 20 3f 31 5c 6e  HERE c LIKE ?1\n
4b10: 22 0a 20 20 20 20 22 20 4f 52 44 45 52 20 42 59  ".    " ORDER BY
4b20: 20 61 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22   a; -- %d times"
4b30: 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69  , n.  );.  for(i
4b40: 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a  =1; i<=n; i++){.
4b50: 20 20 20 20 69 66 28 20 28 69 2d 31 29 25 67 2e      if( (i-1)%g.
4b60: 6e 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a 20 20  nRepeat==0 ){.  
4b70: 20 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65      x1 = speedte
4b80: 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78  st1_random()%max
4b90: 62 3b 0a 20 20 20 20 20 20 7a 4e 75 6d 5b 30 5d  b;.      zNum[0]
4ba0: 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20 6c 65   = '%';.      le
4bb0: 6e 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 6e  n = speedtest1_n
4bc0: 75 6d 62 65 72 6e 61 6d 65 28 69 2c 20 7a 4e 75  umbername(i, zNu
4bd0: 6d 2b 31 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d  m+1, sizeof(zNum
4be0: 29 2d 32 29 3b 0a 20 20 20 20 20 20 7a 4e 75 6d  )-2);.      zNum
4bf0: 5b 6c 65 6e 5d 20 3d 20 27 25 27 3b 0a 20 20 20  [len] = '%';.   
4c00: 20 20 20 7a 4e 75 6d 5b 6c 65 6e 2b 31 5d 20 3d     zNum[len+1] =
4c10: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71   0;.    }.    sq
4c20: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
4c30: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 4e 75 6d  g.pStmt, 1, zNum
4c40: 2c 20 6c 65 6e 2b 31 2c 20 53 51 4c 49 54 45 5f  , len+1, SQLITE_
4c50: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65  STATIC);.    spe
4c60: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
4c70: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
4c80: 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a  exec("COMMIT");.
4c90: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
4ca0: 5f 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20  _test();..  n = 
4cb0: 31 30 3b 20 2f 2a 20 67 2e 73 7a 54 65 73 74 2f  10; /* g.szTest/
4cc0: 35 3b 20 2a 2f 0a 20 20 73 70 65 65 64 74 65 73  5; */.  speedtes
4cd0: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 34  t1_begin_test(14
4ce0: 35 2c 20 22 25 64 20 53 45 4c 45 43 54 53 20 77  5, "%d SELECTS w
4cf0: 2f 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49  /ORDER BY and LI
4d00: 4d 49 54 2c 20 75 6e 69 6e 64 65 78 65 64 22 2c  MIT, unindexed",
4d10: 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74   n);.  speedtest
4d20: 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b  1_exec("BEGIN");
4d30: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
4d40: 65 70 61 72 65 28 0a 20 20 20 20 22 53 45 4c 45  epare(.    "SELE
4d50: 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20  CT a, b, c FROM 
4d60: 74 31 20 57 48 45 52 45 20 63 20 4c 49 4b 45 20  t1 WHERE c LIKE 
4d70: 3f 31 5c 6e 22 0a 20 20 20 20 22 20 4f 52 44 45  ?1\n".    " ORDE
4d80: 52 20 42 59 20 61 20 4c 49 4d 49 54 20 31 30 3b  R BY a LIMIT 10;
4d90: 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20 6e   -- %d times", n
4da0: 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b  .  );.  for(i=1;
4db0: 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<=n; i++){.   
4dc0: 20 69 66 28 20 28 69 2d 31 29 25 67 2e 6e 52 65   if( (i-1)%g.nRe
4dd0: 70 65 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  peat==0 ){.     
4de0: 20 78 31 20 3d 20 73 70 65 65 64 74 65 73 74 31   x1 = speedtest1
4df0: 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78 62 3b 0a  _random()%maxb;.
4e00: 20 20 20 20 20 20 7a 4e 75 6d 5b 30 5d 20 3d 20        zNum[0] = 
4e10: 27 25 27 3b 0a 20 20 20 20 20 20 6c 65 6e 20 3d  '%';.      len =
4e20: 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62   speedtest1_numb
4e30: 65 72 6e 61 6d 65 28 69 2c 20 7a 4e 75 6d 2b 31  ername(i, zNum+1
4e40: 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 2d 32  , sizeof(zNum)-2
4e50: 29 3b 0a 20 20 20 20 20 20 7a 4e 75 6d 5b 6c 65  );.      zNum[le
4e60: 6e 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20  n] = '%';.      
4e70: 7a 4e 75 6d 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b  zNum[len+1] = 0;
4e80: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
4e90: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70  e3_bind_text(g.p
4ea0: 53 74 6d 74 2c 20 31 2c 20 7a 4e 75 6d 2c 20 6c  Stmt, 1, zNum, l
4eb0: 65 6e 2b 31 2c 20 53 51 4c 49 54 45 5f 53 54 41  en+1, SQLITE_STA
4ec0: 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65 64 74  TIC);.    speedt
4ed0: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a  est1_run();.  }.
4ee0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
4ef0: 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73  c("COMMIT");.  s
4f00: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
4f10: 73 74 28 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74  st();...  speedt
4f20: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
4f30: 31 35 30 2c 20 22 43 52 45 41 54 45 20 49 4e 44  150, "CREATE IND
4f40: 45 58 20 66 69 76 65 20 74 69 6d 65 73 22 29 3b  EX five times");
4f50: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
4f60: 65 63 28 22 42 45 47 49 4e 3b 22 29 3b 0a 20 20  ec("BEGIN;");.  
4f70: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
4f80: 22 43 52 45 41 54 45 20 55 4e 49 51 55 45 20 49  "CREATE UNIQUE I
4f90: 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31 28 62  NDEX t1b ON t1(b
4fa0: 29 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  );");.  speedtes
4fb0: 74 31 5f 65 78 65 63 28 22 43 52 45 41 54 45 20  t1_exec("CREATE 
4fc0: 49 4e 44 45 58 20 74 31 63 20 4f 4e 20 74 31 28  INDEX t1c ON t1(
4fd0: 63 29 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65  c);");.  speedte
4fe0: 73 74 31 5f 65 78 65 63 28 22 43 52 45 41 54 45  st1_exec("CREATE
4ff0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 32   UNIQUE INDEX t2
5000: 62 20 4f 4e 20 74 32 28 62 29 3b 22 29 3b 0a 20  b ON t2(b);");. 
5010: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
5020: 28 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 74  ("CREATE INDEX t
5030: 32 63 20 4f 4e 20 74 32 28 63 20 44 45 53 43 29  2c ON t2(c DESC)
5040: 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  ;");.  speedtest
5050: 31 5f 65 78 65 63 28 22 43 52 45 41 54 45 20 49  1_exec("CREATE I
5060: 4e 44 45 58 20 74 33 62 63 20 4f 4e 20 74 33 28  NDEX t3bc ON t3(
5070: 62 2c 63 29 3b 22 29 3b 0a 20 20 73 70 65 65 64  b,c);");.  speed
5080: 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d  test1_exec("COMM
5090: 49 54 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65  IT;");.  speedte
50a0: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
50b0: 0a 0a 20 20 6e 20 3d 20 73 7a 2f 35 3b 0a 20 20  ..  n = sz/5;.  
50c0: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
50d0: 5f 74 65 73 74 28 31 36 30 2c 20 22 25 64 20 53  _test(160, "%d S
50e0: 45 4c 45 43 54 53 2c 20 6e 75 6d 65 72 69 63 20  ELECTS, numeric 
50f0: 42 45 54 57 45 45 4e 2c 20 69 6e 64 65 78 65 64  BETWEEN, indexed
5100: 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65  ", n);.  speedte
5110: 73 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22  st1_exec("BEGIN"
5120: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
5130: 70 72 65 70 61 72 65 28 0a 20 20 20 20 22 53 45  prepare(.    "SE
5140: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20 61  LECT count(*), a
5150: 76 67 28 62 29 2c 20 73 75 6d 28 6c 65 6e 67 74  vg(b), sum(lengt
5160: 68 28 63 29 29 2c 20 67 72 6f 75 70 5f 63 6f 6e  h(c)), group_con
5170: 63 61 74 28 61 29 20 46 52 4f 4d 20 74 31 5c 6e  cat(a) FROM t1\n
5180: 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 62 20  ".    " WHERE b 
5190: 42 45 54 57 45 45 4e 20 3f 31 20 41 4e 44 20 3f  BETWEEN ?1 AND ?
51a0: 32 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c  2; -- %d times",
51b0: 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d   n.  );.  for(i=
51c0: 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20  1; i<=n; i++){. 
51d0: 20 20 20 69 66 28 20 28 69 2d 31 29 25 67 2e 6e     if( (i-1)%g.n
51e0: 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a 20 20 20  Repeat==0 ){.   
51f0: 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65 73     x1 = speedtes
5200: 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78 62  t1_random()%maxb
5210: 3b 0a 20 20 20 20 20 20 78 32 20 3d 20 73 70 65  ;.      x2 = spe
5220: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
5230: 25 31 30 20 2b 20 73 7a 2f 35 30 30 30 20 2b 20  %10 + sz/5000 + 
5240: 78 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  x1;.    }.    sq
5250: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
5260: 2e 70 53 74 6d 74 2c 20 31 2c 20 78 31 29 3b 0a  .pStmt, 1, x1);.
5270: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
5280: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c  _int(g.pStmt, 2,
5290: 20 78 32 29 3b 0a 20 20 20 20 73 70 65 65 64 74   x2);.    speedt
52a0: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a  est1_run();.  }.
52b0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
52c0: 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73  c("COMMIT");.  s
52d0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
52e0: 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20 73 7a  st();...  n = sz
52f0: 2f 35 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  /5;.  speedtest1
5300: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 36 31 2c  _begin_test(161,
5310: 20 22 25 64 20 53 45 4c 45 43 54 53 2c 20 6e 75   "%d SELECTS, nu
5320: 6d 65 72 69 63 20 42 45 54 57 45 45 4e 2c 20 50  meric BETWEEN, P
5330: 4b 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74  K", n);.  speedt
5340: 65 73 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e  est1_exec("BEGIN
5350: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
5360: 5f 70 72 65 70 61 72 65 28 0a 20 20 20 20 22 53  _prepare(.    "S
5370: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20  ELECT count(*), 
5380: 61 76 67 28 62 29 2c 20 73 75 6d 28 6c 65 6e 67  avg(b), sum(leng
5390: 74 68 28 63 29 29 2c 20 67 72 6f 75 70 5f 63 6f  th(c)), group_co
53a0: 6e 63 61 74 28 61 29 20 46 52 4f 4d 20 74 32 5c  ncat(a) FROM t2\
53b0: 6e 22 0a 20 20 20 20 22 20 57 48 45 52 45 20 61  n".    " WHERE a
53c0: 20 42 45 54 57 45 45 4e 20 3f 31 20 41 4e 44 20   BETWEEN ?1 AND 
53d0: 3f 32 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22  ?2; -- %d times"
53e0: 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69  , n.  );.  for(i
53f0: 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a  =1; i<=n; i++){.
5400: 20 20 20 20 69 66 28 20 28 69 2d 31 29 25 67 2e      if( (i-1)%g.
5410: 6e 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a 20 20  nRepeat==0 ){.  
5420: 20 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65      x1 = speedte
5430: 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78  st1_random()%max
5440: 62 3b 0a 20 20 20 20 20 20 78 32 20 3d 20 73 70  b;.      x2 = sp
5450: 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28  eedtest1_random(
5460: 29 25 31 30 20 2b 20 73 7a 2f 35 30 30 30 20 2b  )%10 + sz/5000 +
5470: 20 78 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   x1;.    }.    s
5480: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
5490: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 78 31 29 3b  g.pStmt, 1, x1);
54a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
54b0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32  d_int(g.pStmt, 2
54c0: 2c 20 78 32 29 3b 0a 20 20 20 20 73 70 65 65 64  , x2);.    speed
54d0: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d  test1_run();.  }
54e0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
54f0: 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20  ec("COMMIT");.  
5500: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
5510: 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20 73  est();...  n = s
5520: 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65 73 74  z/5;.  speedtest
5530: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 37 30  1_begin_test(170
5540: 2c 20 22 25 64 20 53 45 4c 45 43 54 53 2c 20 74  , "%d SELECTS, t
5550: 65 78 74 20 42 45 54 57 45 45 4e 2c 20 69 6e 64  ext BETWEEN, ind
5560: 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20 73 70 65  exed", n);.  spe
5570: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42 45  edtest1_exec("BE
5580: 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65  GIN");.  speedte
5590: 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20  st1_prepare(.   
55a0: 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   "SELECT count(*
55b0: 29 2c 20 61 76 67 28 62 29 2c 20 73 75 6d 28 6c  ), avg(b), sum(l
55c0: 65 6e 67 74 68 28 63 29 29 2c 20 67 72 6f 75 70  ength(c)), group
55d0: 5f 63 6f 6e 63 61 74 28 61 29 20 46 52 4f 4d 20  _concat(a) FROM 
55e0: 74 31 5c 6e 22 0a 20 20 20 20 22 20 57 48 45 52  t1\n".    " WHER
55f0: 45 20 63 20 42 45 54 57 45 45 4e 20 3f 31 20 41  E c BETWEEN ?1 A
5600: 4e 44 20 28 3f 31 7c 7c 27 7e 27 29 3b 20 2d 2d  ND (?1||'~'); --
5610: 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a 20 20   %d times", n.  
5620: 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c  );.  for(i=1; i<
5630: 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  =n; i++){.    if
5640: 28 20 28 69 2d 31 29 25 67 2e 6e 52 65 70 65 61  ( (i-1)%g.nRepea
5650: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 78 31  t==0 ){.      x1
5660: 20 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 20 6d 61   = swizzle(i, ma
5670: 78 62 29 3b 0a 20 20 20 20 20 20 6c 65 6e 20 3d  xb);.      len =
5680: 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62   speedtest1_numb
5690: 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c  ername(x1, zNum,
56a0: 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 2d 31 29   sizeof(zNum)-1)
56b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
56c0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e  te3_bind_text(g.
56d0: 70 53 74 6d 74 2c 20 31 2c 20 7a 4e 75 6d 2c 20  pStmt, 1, zNum, 
56e0: 6c 65 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  len, SQLITE_STAT
56f0: 49 43 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  IC);.    speedte
5700: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20  st1_run();.  }. 
5710: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
5720: 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70  ("COMMIT");.  sp
5730: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
5740: 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a  t();..  n = sz;.
5750: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
5760: 69 6e 5f 74 65 73 74 28 31 38 30 2c 20 22 25 64  in_test(180, "%d
5770: 20 49 4e 53 45 52 54 53 20 77 69 74 68 20 74 68   INSERTS with th
5780: 72 65 65 20 69 6e 64 65 78 65 73 22 2c 20 6e 29  ree indexes", n)
5790: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
57a0: 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20  xec("BEGIN");.  
57b0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
57c0: 0a 20 20 20 20 22 43 52 45 41 54 45 25 73 20 54  .    "CREATE%s T
57d0: 41 42 4c 45 20 74 34 28 5c 6e 22 0a 20 20 20 20  ABLE t4(\n".    
57e0: 22 20 20 61 20 49 4e 54 45 47 45 52 20 25 73 20  "  a INTEGER %s 
57f0: 25 73 2c 5c 6e 22 0a 20 20 20 20 22 20 20 62 20  %s,\n".    "  b 
5800: 49 4e 54 45 47 45 52 20 25 73 2c 5c 6e 22 0a 20  INTEGER %s,\n". 
5810: 20 20 20 22 20 20 63 20 54 45 58 54 20 25 73 5c     "  c TEXT %s\
5820: 6e 22 0a 20 20 20 20 22 29 20 25 73 22 2c 0a 20  n".    ") %s",. 
5830: 20 20 20 69 73 54 65 6d 70 28 31 29 2c 20 67 2e     isTemp(1), g.
5840: 7a 4e 4e 2c 20 67 2e 7a 50 4b 2c 20 67 2e 7a 4e  zNN, g.zPK, g.zN
5850: 4e 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 57 52 29  N, g.zNN, g.zWR)
5860: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
5870: 78 65 63 28 22 43 52 45 41 54 45 20 49 4e 44 45  xec("CREATE INDE
5880: 58 20 74 34 62 20 4f 4e 20 74 34 28 62 29 22 29  X t4b ON t4(b)")
5890: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
58a0: 78 65 63 28 22 43 52 45 41 54 45 20 49 4e 44 45  xec("CREATE INDE
58b0: 58 20 74 34 63 20 4f 4e 20 74 34 28 63 29 22 29  X t4c ON t4(c)")
58c0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
58d0: 78 65 63 28 22 49 4e 53 45 52 54 20 49 4e 54 4f  xec("INSERT INTO
58e0: 20 74 34 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t4 SELECT * FRO
58f0: 4d 20 74 31 22 29 3b 0a 20 20 73 70 65 65 64 74  M t1");.  speedt
5900: 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49  est1_exec("COMMI
5910: 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  T");.  speedtest
5920: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20  1_end_test();.. 
5930: 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70 65 65 64   n = sz;.  speed
5940: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
5950: 28 31 39 30 2c 20 22 44 45 4c 45 54 45 20 61 6e  (190, "DELETE an
5960: 64 20 52 45 46 49 4c 4c 20 6f 6e 65 20 74 61 62  d REFILL one tab
5970: 6c 65 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  le", n);.  speed
5980: 74 65 73 74 31 5f 65 78 65 63 28 22 44 45 4c 45  test1_exec("DELE
5990: 54 45 20 46 52 4f 4d 20 74 32 3b 22 29 3b 0a 20  TE FROM t2;");. 
59a0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
59b0: 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32  ("INSERT INTO t2
59c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
59d0: 31 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  1;");.  speedtes
59e0: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
59f0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65  .  speedtest1_be
5a00: 67 69 6e 5f 74 65 73 74 28 32 30 30 2c 20 22 56  gin_test(200, "V
5a10: 41 43 55 55 4d 22 29 3b 0a 20 20 73 70 65 65 64  ACUUM");.  speed
5a20: 74 65 73 74 31 5f 65 78 65 63 28 22 56 41 43 55  test1_exec("VACU
5a30: 55 4d 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  UM");.  speedtes
5a40: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
5a50: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65  .  speedtest1_be
5a60: 67 69 6e 5f 74 65 73 74 28 32 31 30 2c 20 22 41  gin_test(210, "A
5a70: 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44 20 43  LTER TABLE ADD C
5a80: 4f 4c 55 4d 4e 2c 20 61 6e 64 20 71 75 65 72 79  OLUMN, and query
5a90: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
5aa0: 5f 65 78 65 63 28 22 41 4c 54 45 52 20 54 41 42  _exec("ALTER TAB
5ab0: 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e  LE t2 ADD COLUMN
5ac0: 20 64 20 44 45 46 41 55 4c 54 20 31 32 33 22 29   d DEFAULT 123")
5ad0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
5ae0: 78 65 63 28 22 53 45 4c 45 43 54 20 73 75 6d 28  xec("SELECT sum(
5af0: 64 29 20 46 52 4f 4d 20 74 32 22 29 3b 0a 20 20  d) FROM t2");.  
5b00: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
5b10: 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20 73  est();...  n = s
5b20: 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65 73 74  z/5;.  speedtest
5b30: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32 33 30  1_begin_test(230
5b40: 2c 20 22 25 64 20 55 50 44 41 54 45 53 2c 20 6e  , "%d UPDATES, n
5b50: 75 6d 65 72 69 63 20 42 45 54 57 45 45 4e 2c 20  umeric BETWEEN, 
5b60: 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20  indexed", n);.  
5b70: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
5b80: 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65  "BEGIN");.  spee
5b90: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
5ba0: 20 20 20 20 22 55 50 44 41 54 45 20 74 32 20 53      "UPDATE t2 S
5bb0: 45 54 20 64 3d 62 2a 32 20 57 48 45 52 45 20 62  ET d=b*2 WHERE b
5bc0: 20 42 45 54 57 45 45 4e 20 3f 31 20 41 4e 44 20   BETWEEN ?1 AND 
5bd0: 3f 32 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22  ?2; -- %d times"
5be0: 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69  , n.  );.  for(i
5bf0: 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a  =1; i<=n; i++){.
5c00: 20 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65      x1 = speedte
5c10: 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78  st1_random()%max
5c20: 62 3b 0a 20 20 20 20 78 32 20 3d 20 73 70 65 65  b;.    x2 = spee
5c30: 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25  dtest1_random()%
5c40: 31 30 20 2b 20 73 7a 2f 35 30 30 30 20 2b 20 78  10 + sz/5000 + x
5c50: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  1;.    sqlite3_b
5c60: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
5c70: 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73 71 6c   1, x1);.    sql
5c80: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
5c90: 70 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b 0a 20  pStmt, 2, x2);. 
5ca0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
5cb0: 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  n();.  }.  speed
5cc0: 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d  test1_exec("COMM
5cd0: 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  IT");.  speedtes
5ce0: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
5cf0: 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70 65  .  n = sz;.  spe
5d00: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
5d10: 73 74 28 32 34 30 2c 20 22 25 64 20 55 50 44 41  st(240, "%d UPDA
5d20: 54 45 53 20 6f 66 20 69 6e 64 69 76 69 64 75 61  TES of individua
5d30: 6c 20 72 6f 77 73 22 2c 20 6e 29 3b 0a 20 20 73  l rows", n);.  s
5d40: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
5d50: 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64  BEGIN");.  speed
5d60: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20  test1_prepare(. 
5d70: 20 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45     "UPDATE t2 SE
5d80: 54 20 64 3d 62 2a 33 20 57 48 45 52 45 20 61 3d  T d=b*3 WHERE a=
5d90: 3f 31 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22  ?1; -- %d times"
5da0: 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69  , n.  );.  for(i
5db0: 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a  =1; i<=n; i++){.
5dc0: 20 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65      x1 = speedte
5dd0: 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 73 7a 20  st1_random()%sz 
5de0: 2b 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  + 1;.    sqlite3
5df0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
5e00: 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73  t, 1, x1);.    s
5e10: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
5e20: 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74  .  }.  speedtest
5e30: 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29  1_exec("COMMIT")
5e40: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
5e50: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73 70  nd_test();..  sp
5e60: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
5e70: 65 73 74 28 32 35 30 2c 20 22 4f 6e 65 20 62 69  est(250, "One bi
5e80: 67 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 20  g UPDATE of the 
5e90: 77 68 6f 6c 65 20 25 64 2d 72 6f 77 20 74 61 62  whole %d-row tab
5ea0: 6c 65 22 2c 20 73 7a 29 3b 0a 20 20 73 70 65 65  le", sz);.  spee
5eb0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 55 50 44  dtest1_exec("UPD
5ec0: 41 54 45 20 74 32 20 53 45 54 20 64 3d 62 2a 34  ATE t2 SET d=b*4
5ed0: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
5ee0: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20  _end_test();... 
5ef0: 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69   speedtest1_begi
5f00: 6e 5f 74 65 73 74 28 32 36 30 2c 20 22 51 75 65  n_test(260, "Que
5f10: 72 79 20 61 64 64 65 64 20 63 6f 6c 75 6d 6e 20  ry added column 
5f20: 61 66 74 65 72 20 66 69 6c 6c 69 6e 67 22 29 3b  after filling");
5f30: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
5f40: 65 63 28 22 53 45 4c 45 43 54 20 73 75 6d 28 64  ec("SELECT sum(d
5f50: 29 20 46 52 4f 4d 20 74 32 22 29 3b 0a 20 20 73  ) FROM t2");.  s
5f60: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
5f70: 73 74 28 29 3b 0a 0a 0a 0a 20 20 6e 20 3d 20 73  st();....  n = s
5f80: 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65 73 74  z/5;.  speedtest
5f90: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32 37 30  1_begin_test(270
5fa0: 2c 20 22 25 64 20 44 45 4c 45 54 45 73 2c 20 6e  , "%d DELETEs, n
5fb0: 75 6d 65 72 69 63 20 42 45 54 57 45 45 4e 2c 20  umeric BETWEEN, 
5fc0: 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20  indexed", n);.  
5fd0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
5fe0: 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65  "BEGIN");.  spee
5ff0: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
6000: 20 20 20 20 22 44 45 4c 45 54 45 20 46 52 4f 4d      "DELETE FROM
6010: 20 74 32 20 57 48 45 52 45 20 62 20 42 45 54 57   t2 WHERE b BETW
6020: 45 45 4e 20 3f 31 20 41 4e 44 20 3f 32 3b 20 2d  EEN ?1 AND ?2; -
6030: 2d 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a 20  - %d times", n. 
6040: 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69   );.  for(i=1; i
6050: 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78  <=n; i++){.    x
6060: 31 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72  1 = speedtest1_r
6070: 61 6e 64 6f 6d 28 29 25 6d 61 78 62 20 2b 20 31  andom()%maxb + 1
6080: 3b 0a 20 20 20 20 78 32 20 3d 20 73 70 65 65 64  ;.    x2 = speed
6090: 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 31  test1_random()%1
60a0: 30 20 2b 20 73 7a 2f 35 30 30 30 20 2b 20 78 31  0 + sz/5000 + x1
60b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
60c0: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
60d0: 31 2c 20 78 31 29 3b 0a 20 20 20 20 73 71 6c 69  1, x1);.    sqli
60e0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
60f0: 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b 0a 20 20  Stmt, 2, x2);.  
6100: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
6110: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
6120: 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49  est1_exec("COMMI
6130: 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  T");.  speedtest
6140: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a  1_end_test();...
6150: 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70 65 65    n = sz;.  spee
6160: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
6170: 74 28 32 38 30 2c 20 22 25 64 20 44 45 4c 45 54  t(280, "%d DELET
6180: 45 73 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c  Es of individual
6190: 20 72 6f 77 73 22 2c 20 6e 29 3b 0a 20 20 73 70   rows", n);.  sp
61a0: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42  eedtest1_exec("B
61b0: 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74  EGIN");.  speedt
61c0: 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20  est1_prepare(.  
61d0: 20 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74    "DELETE FROM t
61e0: 33 20 57 48 45 52 45 20 61 3d 3f 31 3b 20 2d 2d  3 WHERE a=?1; --
61f0: 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a 20 20   %d times", n.  
6200: 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c  );.  for(i=1; i<
6210: 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31  =n; i++){.    x1
6220: 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72 61   = speedtest1_ra
6230: 6e 64 6f 6d 28 29 25 73 7a 20 2b 20 31 3b 0a 20  ndom()%sz + 1;. 
6240: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
6250: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20  int(g.pStmt, 1, 
6260: 78 31 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  x1);.    speedte
6270: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20  st1_run();.  }. 
6280: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
6290: 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70  ("COMMIT");.  sp
62a0: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
62b0: 74 28 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74 65  t();...  speedte
62c0: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32  st1_begin_test(2
62d0: 39 30 2c 20 22 52 65 66 69 6c 6c 20 74 77 6f 20  90, "Refill two 
62e0: 25 64 2d 72 6f 77 20 74 61 62 6c 65 73 20 75 73  %d-row tables us
62f0: 69 6e 67 20 52 45 50 4c 41 43 45 22 2c 20 73 7a  ing REPLACE", sz
6300: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
6310: 65 78 65 63 28 22 52 45 50 4c 41 43 45 20 49 4e  exec("REPLACE IN
6320: 54 4f 20 74 32 28 61 2c 62 2c 63 29 20 53 45 4c  TO t2(a,b,c) SEL
6330: 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74  ECT a,b,c FROM t
6340: 31 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  1");.  speedtest
6350: 31 5f 65 78 65 63 28 22 52 45 50 4c 41 43 45 20  1_exec("REPLACE 
6360: 49 4e 54 4f 20 74 33 28 61 2c 62 2c 63 29 20 53  INTO t3(a,b,c) S
6370: 45 4c 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d  ELECT a,b,c FROM
6380: 20 74 31 22 29 3b 0a 20 20 73 70 65 65 64 74 65   t1");.  speedte
6390: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
63a0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65  .  speedtest1_be
63b0: 67 69 6e 5f 74 65 73 74 28 33 30 30 2c 20 22 52  gin_test(300, "R
63c0: 65 66 69 6c 6c 20 61 20 25 64 2d 72 6f 77 20 74  efill a %d-row t
63d0: 61 62 6c 65 20 75 73 69 6e 67 20 28 62 26 31 29  able using (b&1)
63e0: 3d 3d 28 61 26 31 29 22 2c 20 73 7a 29 3b 0a 20  ==(a&1)", sz);. 
63f0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
6400: 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32  ("DELETE FROM t2
6410: 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  ;");.  speedtest
6420: 31 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 49  1_exec("INSERT I
6430: 4e 54 4f 20 74 32 28 61 2c 62 2c 63 29 5c 6e 22  NTO t2(a,b,c)\n"
6440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6450: 20 20 20 22 20 53 45 4c 45 43 54 20 61 2c 62 2c     " SELECT a,b,
6460: 63 20 46 52 4f 4d 20 74 31 20 20 57 48 45 52 45  c FROM t1  WHERE
6470: 20 28 62 26 31 29 3d 3d 28 61 26 31 29 3b 22 29   (b&1)==(a&1);")
6480: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
6490: 78 65 63 28 22 49 4e 53 45 52 54 20 49 4e 54 4f  xec("INSERT INTO
64a0: 20 74 32 28 61 2c 62 2c 63 29 5c 6e 22 0a 20 20   t2(a,b,c)\n".  
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64c0: 22 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20 46  " SELECT a,b,c F
64d0: 52 4f 4d 20 74 31 20 20 57 48 45 52 45 20 28 62  ROM t1  WHERE (b
64e0: 26 31 29 3c 3e 28 61 26 31 29 3b 22 29 3b 0a 20  &1)<>(a&1);");. 
64f0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
6500: 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20  test();...  n = 
6510: 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74 65 73  sz/5;.  speedtes
6520: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 33 31  t1_begin_test(31
6530: 30 2c 20 22 25 64 20 66 6f 75 72 2d 77 61 79 73  0, "%d four-ways
6540: 20 6a 6f 69 6e 73 22 2c 20 6e 29 3b 0a 20 20 73   joins", n);.  s
6550: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
6560: 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64  BEGIN");.  speed
6570: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20  test1_prepare(. 
6580: 20 20 20 22 53 45 4c 45 43 54 20 74 31 2e 63 20     "SELECT t1.c 
6590: 46 52 4f 4d 20 74 31 2c 20 74 32 2c 20 74 33 2c  FROM t1, t2, t3,
65a0: 20 74 34 5c 6e 22 0a 20 20 20 20 22 20 57 48 45   t4\n".    " WHE
65b0: 52 45 20 74 34 2e 61 20 42 45 54 57 45 45 4e 20  RE t4.a BETWEEN 
65c0: 3f 31 20 41 4e 44 20 3f 32 5c 6e 22 0a 20 20 20  ?1 AND ?2\n".   
65d0: 20 22 20 20 20 41 4e 44 20 74 33 2e 61 3d 74 34   "   AND t3.a=t4
65e0: 2e 62 5c 6e 22 0a 20 20 20 20 22 20 20 20 41 4e  .b\n".    "   AN
65f0: 44 20 74 32 2e 61 3d 74 33 2e 62 5c 6e 22 0a 20  D t2.a=t3.b\n". 
6600: 20 20 20 22 20 20 20 41 4e 44 20 74 31 2e 63 3d     "   AND t1.c=
6610: 74 32 2e 63 22 0a 20 20 29 3b 0a 20 20 66 6f 72  t2.c".  );.  for
6620: 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29  (i=1; i<=n; i++)
6630: 7b 0a 20 20 20 20 78 31 20 3d 20 73 70 65 65 64  {.    x1 = speed
6640: 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 73  test1_random()%s
6650: 7a 20 2b 20 31 3b 0a 20 20 20 20 78 32 20 3d 20  z + 1;.    x2 = 
6660: 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f  speedtest1_rando
6670: 6d 28 29 25 31 30 20 2b 20 78 31 20 2b 20 34 3b  m()%10 + x1 + 4;
6680: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
6690: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
66a0: 2c 20 78 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  , x1);.    sqlit
66b0: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
66c0: 74 6d 74 2c 20 32 2c 20 78 32 29 3b 0a 20 20 20  tmt, 2, x2);.   
66d0: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
66e0: 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65  );.  }.  speedte
66f0: 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54  st1_exec("COMMIT
6700: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
6710: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20  _end_test();..  
6720: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
6730: 5f 74 65 73 74 28 33 32 30 2c 20 22 73 75 62 71  _test(320, "subq
6740: 75 65 72 79 20 69 6e 20 72 65 73 75 6c 74 20 73  uery in result s
6750: 65 74 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  et", n);.  speed
6760: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20  test1_prepare(. 
6770: 20 20 20 22 53 45 4c 45 43 54 20 73 75 6d 28 61     "SELECT sum(a
6780: 29 2c 20 6d 61 78 28 63 29 2c 5c 6e 22 0a 20 20  ), max(c),\n".  
6790: 20 20 22 20 20 20 20 20 20 20 61 76 67 28 28 53    "       avg((S
67a0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 20  ELECT a FROM t2 
67b0: 57 48 45 52 45 20 35 2b 74 32 2e 62 3d 74 31 2e  WHERE 5+t2.b=t1.
67c0: 62 29 20 41 4e 44 20 72 6f 77 69 64 3c 3f 31 29  b) AND rowid<?1)
67d0: 2c 20 6d 61 78 28 63 29 5c 6e 22 0a 20 20 20 20  , max(c)\n".    
67e0: 22 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  " FROM t1 WHERE 
67f0: 72 6f 77 69 64 3c 3f 31 3b 22 0a 20 20 29 3b 0a  rowid<?1;".  );.
6800: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
6810: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 65  nt(g.pStmt, 1, e
6820: 73 74 5f 73 71 75 61 72 65 5f 72 6f 6f 74 28 67  st_square_root(g
6830: 2e 73 7a 54 65 73 74 29 2a 35 30 29 3b 0a 20 20  .szTest)*50);.  
6840: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
6850: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
6860: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73 7a  nd_test();..  sz
6870: 20 3d 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a   = n = g.szTest*
6880: 37 30 30 3b 0a 20 20 7a 4e 75 6d 5b 30 5d 20 3d  700;.  zNum[0] =
6890: 20 30 3b 0a 20 20 6d 61 78 62 20 3d 20 72 6f 75   0;.  maxb = rou
68a0: 6e 64 75 70 5f 61 6c 6c 6f 6e 65 73 28 73 7a 2f  ndup_allones(sz/
68b0: 33 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  3);.  speedtest1
68c0: 5f 62 65 67 69 6e 5f 74 65 73 74 28 34 30 30 2c  _begin_test(400,
68d0: 20 22 25 64 20 52 45 50 4c 41 43 45 20 6f 70 73   "%d REPLACE ops
68e0: 20 6f 6e 20 61 6e 20 49 50 4b 22 2c 20 6e 29 3b   on an IPK", n);
68f0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
6900: 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73  ec("BEGIN");.  s
6910: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
6920: 43 52 45 41 54 45 25 73 20 54 41 42 4c 45 20 74  CREATE%s TABLE t
6930: 35 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  5(a INTEGER PRIM
6940: 41 52 59 20 4b 45 59 2c 20 62 20 25 73 29 3b 22  ARY KEY, b %s);"
6950: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
6960: 20 20 20 20 69 73 54 65 6d 70 28 39 29 2c 20 67      isTemp(9), g
6970: 2e 7a 4e 4e 29 3b 0a 20 20 73 70 65 65 64 74 65  .zNN);.  speedte
6980: 73 74 31 5f 70 72 65 70 61 72 65 28 22 52 45 50  st1_prepare("REP
6990: 4c 41 43 45 20 49 4e 54 4f 20 74 35 20 56 41 4c  LACE INTO t5 VAL
69a0: 55 45 53 28 3f 31 2c 3f 32 29 3b 20 2d 2d 20 20  UES(?1,?2); --  
69b0: 25 64 20 74 69 6d 65 73 22 2c 6e 29 3b 0a 20 20  %d times",n);.  
69c0: 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69  for(i=1; i<=n; i
69d0: 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 77  ++){.    x1 = sw
69e0: 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b 0a 20  izzle(i,maxb);. 
69f0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75     speedtest1_nu
6a00: 6d 62 65 72 6e 61 6d 65 28 69 2c 20 7a 4e 75 6d  mbername(i, zNum
6a10: 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b  , sizeof(zNum));
6a20: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
6a30: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
6a40: 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  , (sqlite3_int64
6a50: 29 78 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  )x1);.    sqlite
6a60: 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53  3_bind_text(g.pS
6a70: 74 6d 74 2c 20 32 2c 20 7a 4e 75 6d 2c 20 2d 31  tmt, 2, zNum, -1
6a80: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
6a90: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
6aa0: 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70  _run();.  }.  sp
6ab0: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43  eedtest1_exec("C
6ac0: 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64  OMMIT");.  speed
6ad0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
6ae0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
6af0: 65 67 69 6e 5f 74 65 73 74 28 34 31 30 2c 20 22  egin_test(410, "
6b00: 25 64 20 53 45 4c 45 43 54 53 20 6f 6e 20 61 6e  %d SELECTS on an
6b10: 20 49 50 4b 22 2c 20 6e 29 3b 0a 20 20 73 70 65   IPK", n);.  spe
6b20: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
6b30: 22 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74  "SELECT b FROM t
6b40: 35 20 57 48 45 52 45 20 61 3d 3f 31 3b 20 2d 2d  5 WHERE a=?1; --
6b50: 20 20 25 64 20 74 69 6d 65 73 22 2c 6e 29 3b 0a    %d times",n);.
6b60: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b    for(i=1; i<=n;
6b70: 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20   i++){.    x1 = 
6b80: 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b  swizzle(i,maxb);
6b90: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
6ba0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
6bb0: 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  , (sqlite3_int64
6bc0: 29 78 31 29 3b 0a 20 20 20 20 73 70 65 65 64 74  )x1);.    speedt
6bd0: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a  est1_run();.  }.
6be0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
6bf0: 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73 7a 20 3d  _test();..  sz =
6c00: 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 37 30   n = g.szTest*70
6c10: 30 3b 0a 20 20 7a 4e 75 6d 5b 30 5d 20 3d 20 30  0;.  zNum[0] = 0
6c20: 3b 0a 20 20 6d 61 78 62 20 3d 20 72 6f 75 6e 64  ;.  maxb = round
6c30: 75 70 5f 61 6c 6c 6f 6e 65 73 28 73 7a 2f 33 29  up_allones(sz/3)
6c40: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
6c50: 65 67 69 6e 5f 74 65 73 74 28 35 30 30 2c 20 22  egin_test(500, "
6c60: 25 64 20 52 45 50 4c 41 43 45 20 6f 6e 20 54 45  %d REPLACE on TE
6c70: 58 54 20 50 4b 22 2c 20 6e 29 3b 0a 20 20 73 70  XT PK", n);.  sp
6c80: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42  eedtest1_exec("B
6c90: 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74  EGIN");.  speedt
6ca0: 65 73 74 31 5f 65 78 65 63 28 22 43 52 45 41 54  est1_exec("CREAT
6cb0: 45 25 73 20 54 41 42 4c 45 20 74 36 28 61 20 54  E%s TABLE t6(a T
6cc0: 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
6cd0: 20 62 20 25 73 29 25 73 3b 22 2c 0a 20 20 20 20   b %s)%s;",.    
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
6cf0: 54 65 6d 70 28 39 29 2c 20 67 2e 7a 4e 4e 2c 0a  Temp(9), g.zNN,.
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72    sqlite3_libver
6d20: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3e 3d 33  sion_number()>=3
6d30: 30 30 38 30 30 32 20 3f 20 22 57 49 54 48 4f 55  008002 ? "WITHOU
6d40: 54 20 52 4f 57 49 44 22 20 3a 20 22 22 29 3b 0a  T ROWID" : "");.
6d50: 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65    speedtest1_pre
6d60: 70 61 72 65 28 22 52 45 50 4c 41 43 45 20 49 4e  pare("REPLACE IN
6d70: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 3f 31 2c  TO t6 VALUES(?1,
6d80: 3f 32 29 3b 20 2d 2d 20 20 25 64 20 74 69 6d 65  ?2); --  %d time
6d90: 73 22 2c 6e 29 3b 0a 20 20 66 6f 72 28 69 3d 31  s",n);.  for(i=1
6da0: 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<=n; i++){.  
6db0: 20 20 78 31 20 3d 20 73 77 69 7a 7a 6c 65 28 69    x1 = swizzle(i
6dc0: 2c 6d 61 78 62 29 3b 0a 20 20 20 20 73 70 65 65  ,maxb);.    spee
6dd0: 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d  dtest1_numbernam
6de0: 65 28 78 31 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65  e(x1, zNum, size
6df0: 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 73  of(zNum));.    s
6e00: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
6e10: 67 2e 70 53 74 6d 74 2c 20 32 2c 20 69 29 3b 0a  g.pStmt, 2, i);.
6e20: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
6e30: 5f 74 65 78 74 28 67 2e 70 53 74 6d 74 2c 20 31  _text(g.pStmt, 1
6e40: 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51 4c 49  , zNum, -1, SQLI
6e50: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
6e60: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
6e70: 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73  ;.  }.  speedtes
6e80: 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22  t1_exec("COMMIT"
6e90: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
6ea0: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 20 20 73 70  end_test();.  sp
6eb0: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
6ec0: 65 73 74 28 35 31 30 2c 20 22 25 64 20 53 45 4c  est(510, "%d SEL
6ed0: 45 43 54 53 20 6f 6e 20 61 20 54 45 58 54 20 50  ECTS on a TEXT P
6ee0: 4b 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74  K", n);.  speedt
6ef0: 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 53 45  est1_prepare("SE
6f00: 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 36 20 57  LECT b FROM t6 W
6f10: 48 45 52 45 20 61 3d 3f 31 3b 20 2d 2d 20 20 25  HERE a=?1; --  %
6f20: 64 20 74 69 6d 65 73 22 2c 6e 29 3b 0a 20 20 66  d times",n);.  f
6f30: 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b  or(i=1; i<=n; i+
6f40: 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 77 69  +){.    x1 = swi
6f50: 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b 0a 20 20  zzle(i,maxb);.  
6f60: 20 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d    speedtest1_num
6f70: 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d  bername(x1, zNum
6f80: 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b  , sizeof(zNum));
6f90: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
6fa0: 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74 2c 20  d_text(g.pStmt, 
6fb0: 31 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51 4c  1, zNum, -1, SQL
6fc0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
6fd0: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
6fe0: 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65  );.  }.  speedte
6ff0: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
7000: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
7010: 69 6e 5f 74 65 73 74 28 35 32 30 2c 20 22 25 64  in_test(520, "%d
7020: 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
7030: 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65  ", n);.  speedte
7040: 73 74 31 5f 65 78 65 63 28 22 53 45 4c 45 43 54  st1_exec("SELECT
7050: 20 44 49 53 54 49 4e 43 54 20 62 20 46 52 4f 4d   DISTINCT b FROM
7060: 20 74 35 3b 22 29 3b 0a 20 20 73 70 65 65 64 74   t5;");.  speedt
7070: 65 73 74 31 5f 65 78 65 63 28 22 53 45 4c 45 43  est1_exec("SELEC
7080: 54 20 44 49 53 54 49 4e 43 54 20 62 20 46 52 4f  T DISTINCT b FRO
7090: 4d 20 74 36 3b 22 29 3b 0a 20 20 73 70 65 65 64  M t6;");.  speed
70a0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
70b0: 3b 0a 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31  ;...  speedtest1
70c0: 5f 62 65 67 69 6e 5f 74 65 73 74 28 39 38 30 2c  _begin_test(980,
70d0: 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   "PRAGMA integri
70e0: 74 79 5f 63 68 65 63 6b 22 29 3b 0a 20 20 73 70  ty_check");.  sp
70f0: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 50  eedtest1_exec("P
7100: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
7110: 63 68 65 63 6b 22 29 3b 0a 20 20 73 70 65 65 64  check");.  speed
7120: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
7130: 3b 0a 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31  ;...  speedtest1
7140: 5f 62 65 67 69 6e 5f 74 65 73 74 28 39 39 30 2c  _begin_test(990,
7150: 20 22 41 4e 41 4c 59 5a 45 22 29 3b 0a 20 20 73   "ANALYZE");.  s
7160: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
7170: 41 4e 41 4c 59 5a 45 22 29 3b 0a 20 20 73 70 65  ANALYZE");.  spe
7180: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
7190: 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  ();.}../*.** A t
71a0: 65 73 74 73 65 74 20 66 6f 72 20 63 6f 6d 6d 6f  estset for commo
71b0: 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
71c0: 6f 6e 73 2e 20 20 54 68 69 73 20 65 78 65 72 63  ons.  This exerc
71d0: 69 73 65 73 20 63 6f 64 65 0a 2a 2a 20 66 6f 72  ises code.** for
71e0: 20 76 69 65 77 73 2c 20 73 75 62 71 75 65 72 69   views, subqueri
71f0: 65 73 2c 20 63 6f 2d 72 6f 75 74 69 6e 65 73 2c  es, co-routines,
7200: 20 65 74 63 2e 0a 2a 2f 0a 76 6f 69 64 20 74 65   etc..*/.void te
7210: 73 74 73 65 74 5f 63 74 65 28 76 6f 69 64 29 7b  stset_cte(void){
7220: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
7230: 63 68 61 72 20 2a 61 7a 50 75 7a 7a 6c 65 5b 5d  char *azPuzzle[]
7240: 20 3d 20 7b 0a 20 20 20 20 2f 2a 20 45 61 73 79   = {.    /* Easy
7250: 20 2a 2f 0a 20 20 20 20 22 35 33 34 2e 2e 2e 39   */.    "534...9
7260: 2e 2e 22 0a 20 20 20 20 22 36 37 2e 31 39 35 2e  ..".    "67.195.
7270: 2e 2e 22 0a 20 20 20 20 22 2e 39 38 2e 2e 2e 2e  ..".    ".98....
7280: 36 2e 22 0a 20 20 20 20 22 38 2e 2e 2e 36 2e 2e  6.".    "8...6..
7290: 2e 33 22 0a 20 20 20 20 22 34 2e 2e 38 2e 33 2e  .3".    "4..8.3.
72a0: 2e 31 22 0a 20 20 20 20 22 2e 2e 2e 2e 32 2e 2e  .1".    "....2..
72b0: 2e 36 22 0a 20 20 20 20 22 2e 36 2e 2e 2e 2e 32  .6".    ".6....2
72c0: 38 2e 22 0a 20 20 20 20 22 2e 2e 2e 34 31 39 2e  8.".    "...419.
72d0: 2e 35 22 0a 20 20 20 20 22 2e 2e 2e 32 38 2e 2e  .5".    "...28..
72e0: 37 39 22 2c 0a 0a 20 20 20 20 2f 2a 20 4d 65 64  79",..    /* Med
72f0: 69 75 6d 20 2a 2f 0a 20 20 20 20 22 35 33 2e 2e  ium */.    "53..
7300: 2e 2e 39 2e 2e 22 0a 20 20 20 20 22 36 2e 2e 31  ..9..".    "6..1
7310: 39 35 2e 2e 2e 22 0a 20 20 20 20 22 2e 39 38 2e  95...".    ".98.
7320: 2e 2e 2e 36 2e 22 0a 20 20 20 20 22 38 2e 2e 2e  ...6.".    "8...
7330: 36 2e 2e 2e 33 22 0a 20 20 20 20 22 34 2e 2e 38  6...3".    "4..8
7340: 2e 33 2e 2e 31 22 0a 20 20 20 20 22 2e 2e 2e 2e  .3..1".    "....
7350: 32 2e 2e 2e 36 22 0a 20 20 20 20 22 2e 36 2e 2e  2...6".    ".6..
7360: 2e 2e 32 38 2e 22 0a 20 20 20 20 22 2e 2e 2e 34  ..28.".    "...4
7370: 31 39 2e 2e 35 22 0a 20 20 20 20 22 2e 2e 2e 2e  19..5".    "....
7380: 38 2e 2e 37 39 22 2c 0a 0a 20 20 20 20 2f 2a 20  8..79",..    /* 
7390: 48 61 72 64 20 2a 2f 0a 20 20 20 20 22 35 33 2e  Hard */.    "53.
73a0: 2e 2e 2e 2e 2e 2e 22 0a 20 20 20 20 22 36 2e 2e  ......".    "6..
73b0: 31 39 35 2e 2e 2e 22 0a 20 20 20 20 22 2e 39 38  195...".    ".98
73c0: 2e 2e 2e 2e 36 2e 22 0a 20 20 20 20 22 38 2e 2e  ....6.".    "8..
73d0: 2e 36 2e 2e 2e 33 22 0a 20 20 20 20 22 34 2e 2e  .6...3".    "4..
73e0: 38 2e 33 2e 2e 31 22 0a 20 20 20 20 22 2e 2e 2e  8.3..1".    "...
73f0: 2e 32 2e 2e 2e 36 22 0a 20 20 20 20 22 2e 36 2e  .2...6".    ".6.
7400: 2e 2e 2e 32 38 2e 22 0a 20 20 20 20 22 2e 2e 2e  ...28.".    "...
7410: 34 31 39 2e 2e 35 22 0a 20 20 20 20 22 2e 2e 2e  419..5".    "...
7420: 2e 38 2e 2e 37 39 22 2c 0a 20 20 7d 3b 0a 20 20  .8..79",.  };.  
7430: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 75 7a  const char *zPuz
7440: 3b 0a 20 20 64 6f 75 62 6c 65 20 72 53 70 61 63  ;.  double rSpac
7450: 69 6e 67 3b 0a 20 20 69 6e 74 20 6e 45 6c 65 6d  ing;.  int nElem
7460: 3b 0a 0a 20 20 69 66 28 20 67 2e 73 7a 54 65 73  ;..  if( g.szTes
7470: 74 3c 32 35 20 29 7b 0a 20 20 20 20 7a 50 75 7a  t<25 ){.    zPuz
7480: 20 3d 20 61 7a 50 75 7a 7a 6c 65 5b 30 5d 3b 0a   = azPuzzle[0];.
7490: 20 20 7d 65 6c 73 65 20 69 66 28 20 67 2e 73 7a    }else if( g.sz
74a0: 54 65 73 74 3c 37 30 20 29 7b 0a 20 20 20 20 7a  Test<70 ){.    z
74b0: 50 75 7a 20 3d 20 61 7a 50 75 7a 7a 6c 65 5b 31  Puz = azPuzzle[1
74c0: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
74d0: 7a 50 75 7a 20 3d 20 61 7a 50 75 7a 7a 6c 65 5b  zPuz = azPuzzle[
74e0: 32 5d 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  2];.  }.  speedt
74f0: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
7500: 31 30 30 2c 20 22 53 75 64 6f 6b 75 20 77 69 74  100, "Sudoku wit
7510: 68 20 72 65 63 75 72 73 69 76 65 20 27 64 69 67  h recursive 'dig
7520: 69 74 73 27 22 29 3b 0a 20 20 73 70 65 65 64 74  its'");.  speedt
7530: 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20  est1_prepare(.  
7540: 20 20 22 57 49 54 48 20 52 45 43 55 52 53 49 56    "WITH RECURSIV
7550: 45 5c 6e 22 0a 20 20 20 20 22 20 20 69 6e 70 75  E\n".    "  inpu
7560: 74 28 73 75 64 29 20 41 53 20 28 56 41 4c 55 45  t(sud) AS (VALUE
7570: 53 28 3f 31 29 29 2c 5c 6e 22 0a 20 20 20 20 22  S(?1)),\n".    "
7580: 20 20 64 69 67 69 74 73 28 7a 2c 6c 70 29 20 41    digits(z,lp) A
7590: 53 20 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  S (\n".    "    
75a0: 56 41 4c 55 45 53 28 27 31 27 2c 20 31 29 5c 6e  VALUES('1', 1)\n
75b0: 22 0a 20 20 20 20 22 20 20 20 20 55 4e 49 4f 4e  ".    "    UNION
75c0: 20 41 4c 4c 5c 6e 22 0a 20 20 20 20 22 20 20 20   ALL\n".    "   
75d0: 20 53 45 4c 45 43 54 20 43 41 53 54 28 6c 70 2b   SELECT CAST(lp+
75e0: 31 20 41 53 20 54 45 58 54 29 2c 20 6c 70 2b 31  1 AS TEXT), lp+1
75f0: 20 46 52 4f 4d 20 64 69 67 69 74 73 20 57 48 45   FROM digits WHE
7600: 52 45 20 6c 70 3c 39 5c 6e 22 0a 20 20 20 20 22  RE lp<9\n".    "
7610: 20 20 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20 78    ),\n".    "  x
7620: 28 73 2c 20 69 6e 64 29 20 41 53 20 28 5c 6e 22  (s, ind) AS (\n"
7630: 0a 20 20 20 20 22 20 20 20 20 53 45 4c 45 43 54  .    "    SELECT
7640: 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c   sud, instr(sud,
7650: 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74   '.') FROM input
7660: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 55 4e 49  \n".    "    UNI
7670: 4f 4e 20 41 4c 4c 5c 6e 22 0a 20 20 20 20 22 20  ON ALL\n".    " 
7680: 20 20 20 53 45 4c 45 43 54 5c 6e 22 0a 20 20 20     SELECT\n".   
7690: 20 22 20 20 20 20 20 20 73 75 62 73 74 72 28 73   "      substr(s
76a0: 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20 7a  , 1, ind-1) || z
76b0: 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69 6e   || substr(s, in
76c0: 64 2b 31 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20  d+1),\n".    "  
76d0: 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73 74      instr( subst
76e0: 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c  r(s, 1, ind-1) |
76f0: 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c  | z || substr(s,
7700: 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 5c 6e   ind+1), '.' )\n
7710: 22 0a 20 20 20 20 22 20 20 20 20 20 46 52 4f 4d  ".    "     FROM
7720: 20 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a 5c   x, digits AS z\
7730: 6e 22 0a 20 20 20 20 22 20 20 20 20 57 48 45 52  n".    "    WHER
7740: 45 20 69 6e 64 3e 30 5c 6e 22 0a 20 20 20 20 22  E ind>0\n".    "
7750: 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45 58        AND NOT EX
7760: 49 53 54 53 20 28 5c 6e 22 0a 20 20 20 20 22 20  ISTS (\n".    " 
7770: 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43             SELEC
7780: 54 20 31 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  T 1\n".    "    
7790: 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 64            FROM d
77a0: 69 67 69 74 73 20 41 53 20 6c 70 5c 6e 22 0a 20  igits AS lp\n". 
77b0: 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20     "            
77c0: 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62   WHERE z.z = sub
77d0: 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f  str(s, ((ind-1)/
77e0: 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 5c 6e 22  9)*9 + lp, 1)\n"
77f0: 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20  .    "          
7800: 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73        OR z.z = s
7810: 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31  ubstr(s, ((ind-1
7820: 29 25 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39  )%%9) + (lp-1)*9
7830: 20 2b 20 31 2c 20 31 29 5c 6e 22 0a 20 20 20 20   + 1, 1)\n".    
7840: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
7850: 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72   OR z.z = substr
7860: 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29  (s, (((ind-1)/3)
7870: 20 25 25 20 33 29 20 2a 20 33 5c 6e 22 0a 20 20   %% 3) * 3\n".  
7880: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
7890: 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 69             + ((i
78a0: 6e 64 2d 31 29 2f 32 37 29 20 2a 20 32 37 20 2b  nd-1)/27) * 27 +
78b0: 20 6c 70 5c 6e 22 0a 20 20 20 20 22 20 20 20 20   lp\n".    "    
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20      + ((lp-1) / 
78e0: 33 29 20 2a 20 36 2c 20 31 29 5c 6e 22 0a 20 20  3) * 6, 1)\n".  
78f0: 20 20 22 20 20 20 20 20 20 20 20 20 29 5c 6e 22    "         )\n"
7900: 0a 20 20 20 20 22 20 20 29 5c 6e 22 0a 20 20 20  .    "  )\n".   
7910: 20 22 53 45 4c 45 43 54 20 73 20 46 52 4f 4d 20   "SELECT s FROM 
7920: 78 20 57 48 45 52 45 20 69 6e 64 3d 30 3b 22 0a  x WHERE ind=0;".
7930: 20 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62    );.  sqlite3_b
7940: 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74  ind_text(g.pStmt
7950: 2c 20 31 2c 20 7a 50 75 7a 2c 20 2d 31 2c 20 53  , 1, zPuz, -1, S
7960: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
7970: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
7980: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
7990: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73  end_test();..  s
79a0: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
79b0: 74 65 73 74 28 32 30 30 2c 20 22 53 75 64 6f 6b  test(200, "Sudok
79c0: 75 20 77 69 74 68 20 56 41 4c 55 45 53 20 27 64  u with VALUES 'd
79d0: 69 67 69 74 73 27 22 29 3b 0a 20 20 73 70 65 65  igits'");.  spee
79e0: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
79f0: 20 20 20 20 22 57 49 54 48 20 52 45 43 55 52 53      "WITH RECURS
7a00: 49 56 45 5c 6e 22 0a 20 20 20 20 22 20 20 69 6e  IVE\n".    "  in
7a10: 70 75 74 28 73 75 64 29 20 41 53 20 28 56 41 4c  put(sud) AS (VAL
7a20: 55 45 53 28 3f 31 29 29 2c 5c 6e 22 0a 20 20 20  UES(?1)),\n".   
7a30: 20 22 20 20 64 69 67 69 74 73 28 7a 2c 6c 70 29   "  digits(z,lp)
7a40: 20 41 53 20 28 56 41 4c 55 45 53 28 27 31 27 2c   AS (VALUES('1',
7a50: 31 29 2c 28 27 32 27 2c 32 29 2c 28 27 33 27 2c  1),('2',2),('3',
7a60: 33 29 2c 28 27 34 27 2c 34 29 2c 28 27 35 27 2c  3),('4',4),('5',
7a70: 35 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  5),\n".    "    
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 20 20 20 20 28 27 36 27 2c 36 29 2c 28 27 37       ('6',6),('7
7aa0: 27 2c 37 29 2c 28 27 38 27 2c 38 29 2c 28 27 39  ',7),('8',8),('9
7ab0: 27 2c 39 29 29 2c 5c 6e 22 0a 20 20 20 20 22 20  ',9)),\n".    " 
7ac0: 20 78 28 73 2c 20 69 6e 64 29 20 41 53 20 28 5c   x(s, ind) AS (\
7ad0: 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45 4c 45  n".    "    SELE
7ae0: 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75  CT sud, instr(su
7af0: 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70  d, '.') FROM inp
7b00: 75 74 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 55  ut\n".    "    U
7b10: 4e 49 4f 4e 20 41 4c 4c 5c 6e 22 0a 20 20 20 20  NION ALL\n".    
7b20: 22 20 20 20 20 53 45 4c 45 43 54 5c 6e 22 0a 20  "    SELECT\n". 
7b30: 20 20 20 22 20 20 20 20 20 20 73 75 62 73 74 72     "      substr
7b40: 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c  (s, 1, ind-1) ||
7b50: 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20   z || substr(s, 
7b60: 69 6e 64 2b 31 29 2c 5c 6e 22 0a 20 20 20 20 22  ind+1),\n".    "
7b70: 20 20 20 20 20 20 69 6e 73 74 72 28 20 73 75 62        instr( sub
7b80: 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29  str(s, 1, ind-1)
7b90: 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28   || z || substr(
7ba0: 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29  s, ind+1), '.' )
7bb0: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 46 52  \n".    "     FR
7bc0: 4f 4d 20 78 2c 20 64 69 67 69 74 73 20 41 53 20  OM x, digits AS 
7bd0: 7a 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 57 48  z\n".    "    WH
7be0: 45 52 45 20 69 6e 64 3e 30 5c 6e 22 0a 20 20 20  ERE ind>0\n".   
7bf0: 20 22 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20   "      AND NOT 
7c00: 45 58 49 53 54 53 20 28 5c 6e 22 0a 20 20 20 20  EXISTS (\n".    
7c10: 22 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c  "            SEL
7c20: 45 43 54 20 31 5c 6e 22 0a 20 20 20 20 22 20 20  ECT 1\n".    "  
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d              FROM
7c40: 20 64 69 67 69 74 73 20 41 53 20 6c 70 5c 6e 22   digits AS lp\n"
7c50: 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20  .    "          
7c60: 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73     WHERE z.z = s
7c70: 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31  ubstr(s, ((ind-1
7c80: 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 5c  )/9)*9 + lp, 1)\
7c90: 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20  n".    "        
7ca0: 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d          OR z.z =
7cb0: 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
7cc0: 2d 31 29 25 25 39 29 20 2b 20 28 6c 70 2d 31 29  -1)%%9) + (lp-1)
7cd0: 2a 39 20 2b 20 31 2c 20 31 29 5c 6e 22 0a 20 20  *9 + 1, 1)\n".  
7ce0: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
7cf0: 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73     OR z.z = subs
7d00: 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f  tr(s, (((ind-1)/
7d10: 33 29 20 25 25 20 33 29 20 2a 20 33 5c 6e 22 0a  3) %% 3) * 3\n".
7d20: 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20      "           
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 28               + (
7d40: 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20 32 37  (ind-1)/27) * 27
7d50: 20 2b 20 6c 70 5c 6e 22 0a 20 20 20 20 22 20 20   + lp\n".    "  
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d70: 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20        + ((lp-1) 
7d80: 2f 20 33 29 20 2a 20 36 2c 20 31 29 5c 6e 22 0a  / 3) * 6, 1)\n".
7d90: 20 20 20 20 22 20 20 20 20 20 20 20 20 20 29 5c      "         )\
7da0: 6e 22 0a 20 20 20 20 22 20 20 29 5c 6e 22 0a 20  n".    "  )\n". 
7db0: 20 20 20 22 53 45 4c 45 43 54 20 73 20 46 52 4f     "SELECT s FRO
7dc0: 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d 30 3b  M x WHERE ind=0;
7dd0: 22 0a 20 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ".  );.  sqlite3
7de0: 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74  _bind_text(g.pSt
7df0: 6d 74 2c 20 31 2c 20 7a 50 75 7a 2c 20 2d 31 2c  mt, 1, zPuz, -1,
7e00: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
7e10: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75  .  speedtest1_ru
7e20: 6e 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  n();.  speedtest
7e30: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20  1_end_test();.. 
7e40: 20 72 53 70 61 63 69 6e 67 20 3d 20 35 2e 30 2f   rSpacing = 5.0/
7e50: 67 2e 73 7a 54 65 73 74 3b 0a 20 20 73 70 65 65  g.szTest;.  spee
7e60: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
7e70: 74 28 33 30 30 2c 20 22 4d 61 6e 64 65 6c 62 72  t(300, "Mandelbr
7e80: 6f 74 20 53 65 74 20 77 69 74 68 20 73 70 61 63  ot Set with spac
7e90: 69 6e 67 3d 25 66 22 2c 20 72 53 70 61 63 69 6e  ing=%f", rSpacin
7ea0: 67 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  g);.  speedtest1
7eb0: 5f 70 72 65 70 61 72 65 28 0a 20 20 20 22 57 49  _prepare(.   "WI
7ec0: 54 48 20 52 45 43 55 52 53 49 56 45 20 5c 6e 22  TH RECURSIVE \n"
7ed0: 0a 20 20 20 22 20 20 78 61 78 69 73 28 78 29 20  .   "  xaxis(x) 
7ee0: 41 53 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29  AS (VALUES(-2.0)
7ef0: 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
7f00: 54 20 78 2b 3f 31 20 46 52 4f 4d 20 78 61 78 69  T x+?1 FROM xaxi
7f10: 73 20 57 48 45 52 45 20 78 3c 31 2e 32 29 2c 5c  s WHERE x<1.2),\
7f20: 6e 22 0a 20 20 20 22 20 20 79 61 78 69 73 28 79  n".   "  yaxis(y
7f30: 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 31 2e  ) AS (VALUES(-1.
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 79 2b 3f 32 20 46 52 4f 4d 20 79 61  ECT y+?2 FROM ya
7f60: 78 69 73 20 57 48 45 52 45 20 79 3c 31 2e 30 29  xis WHERE y<1.0)
7f70: 2c 5c 6e 22 0a 20 20 20 22 20 20 6d 28 69 74 65  ,\n".   "  m(ite
7f80: 72 2c 20 63 78 2c 20 63 79 2c 20 78 2c 20 79 29  r, cx, cy, x, y)
7f90: 20 41 53 20 28 5c 6e 22 0a 20 20 20 22 20 20 20   AS (\n".   "   
7fa0: 20 53 45 4c 45 43 54 20 30 2c 20 78 2c 20 79 2c   SELECT 0, x, y,
7fb0: 20 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d 20 78   0.0, 0.0 FROM x
7fc0: 61 78 69 73 2c 20 79 61 78 69 73 5c 6e 22 0a 20  axis, yaxis\n". 
7fd0: 20 20 22 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c    "    UNION ALL
7fe0: 5c 6e 22 0a 20 20 20 22 20 20 20 20 53 45 4c 45  \n".   "    SELE
7ff0: 43 54 20 69 74 65 72 2b 31 2c 20 63 78 2c 20 63  CT iter+1, cx, c
8000: 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20 63 78 2c  y, x*x-y*y + cx,
8010: 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79 20 46 52   2.0*x*y + cy FR
8020: 4f 4d 20 6d 20 5c 6e 22 0a 20 20 20 22 20 20 20  OM m \n".   "   
8030: 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79    WHERE (x*x + y
8040: 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44 20 69 74  *y) < 4.0 AND it
8050: 65 72 3c 32 38 5c 6e 22 0a 20 20 20 22 20 20 29  er<28\n".   "  )
8060: 2c 5c 6e 22 0a 20 20 20 22 20 20 6d 32 28 69 74  ,\n".   "  m2(it
8070: 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53 20 28  er, cx, cy) AS (
8080: 5c 6e 22 0a 20 20 20 22 20 20 20 20 53 45 4c 45  \n".   "    SELE
8090: 43 54 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78  CT max(iter), cx
80a0: 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55  , cy FROM m GROU
80b0: 50 20 42 59 20 63 78 2c 20 63 79 5c 6e 22 0a 20  P BY cx, cy\n". 
80c0: 20 20 22 20 20 29 2c 5c 6e 22 0a 20 20 20 22 20    "  ),\n".   " 
80d0: 20 61 28 74 29 20 41 53 20 28 5c 6e 22 0a 20 20   a(t) AS (\n".  
80e0: 20 22 20 20 20 20 53 45 4c 45 43 54 20 67 72 6f   "    SELECT gro
80f0: 75 70 5f 63 6f 6e 63 61 74 28 20 73 75 62 73 74  up_concat( subst
8100: 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d 69 6e  r(' .+*#', 1+min
8110: 28 69 74 65 72 2f 37 2c 34 29 2c 20 31 29 2c 20  (iter/7,4), 1), 
8120: 27 27 29 20 5c 6e 22 0a 20 20 20 22 20 20 20 20  '') \n".   "    
8130: 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59  FROM m2 GROUP BY
8140: 20 63 79 5c 6e 22 0a 20 20 20 22 20 20 29 5c 6e   cy\n".   "  )\n
8150: 22 0a 20 20 20 22 53 45 4c 45 43 54 20 67 72 6f  ".   "SELECT gro
8160: 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d 28  up_concat(rtrim(
8170: 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20 61  t),x'0a') FROM a
8180: 3b 22 0a 20 20 29 3b 0a 20 20 73 71 6c 69 74 65  ;".  );.  sqlite
8190: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 67 2e  3_bind_double(g.
81a0: 70 53 74 6d 74 2c 20 31 2c 20 72 53 70 61 63 69  pStmt, 1, rSpaci
81b0: 6e 67 2a 2e 30 35 29 3b 0a 20 20 73 71 6c 69 74  ng*.05);.  sqlit
81c0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 67  e3_bind_double(g
81d0: 2e 70 53 74 6d 74 2c 20 32 2c 20 72 53 70 61 63  .pStmt, 2, rSpac
81e0: 69 6e 67 29 3b 0a 20 20 73 70 65 65 64 74 65 73  ing);.  speedtes
81f0: 74 31 5f 72 75 6e 28 29 3b 0a 20 20 73 70 65 65  t1_run();.  spee
8200: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
8210: 29 3b 0a 0a 20 20 6e 45 6c 65 6d 20 3d 20 31 30  );..  nElem = 10
8220: 30 30 30 2a 67 2e 73 7a 54 65 73 74 3b 0a 20 20  000*g.szTest;.  
8230: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
8240: 5f 74 65 73 74 28 34 30 30 2c 20 22 45 58 43 45  _test(400, "EXCE
8250: 50 54 20 6f 70 65 72 61 74 6f 72 20 6f 6e 20 25  PT operator on %
8260: 64 2d 65 6c 65 6d 65 6e 74 20 74 61 62 6c 65 73  d-element tables
8270: 22 2c 20 6e 45 6c 65 6d 29 3b 0a 20 20 73 70 65  ", nElem);.  spe
8280: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
8290: 0a 20 20 20 20 22 57 49 54 48 20 52 45 43 55 52  .    "WITH RECUR
82a0: 53 49 56 45 20 5c 6e 22 0a 20 20 20 20 22 20 20  SIVE \n".    "  
82b0: 74 31 28 78 29 20 41 53 20 28 56 41 4c 55 45 53  t1(x) AS (VALUES
82c0: 28 32 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  (2) UNION ALL SE
82d0: 4c 45 43 54 20 78 2b 32 20 46 52 4f 4d 20 74 31  LECT x+2 FROM t1
82e0: 20 57 48 45 52 45 20 78 3c 25 64 29 2c 5c 6e 22   WHERE x<%d),\n"
82f0: 0a 20 20 20 20 22 20 20 74 32 28 79 29 20 41 53  .    "  t2(y) AS
8300: 20 28 56 41 4c 55 45 53 28 33 29 20 55 4e 49 4f   (VALUES(3) UNIO
8310: 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 79 2b 33  N ALL SELECT y+3
8320: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 79   FROM t2 WHERE y
8330: 3c 25 64 29 5c 6e 22 0a 20 20 20 20 22 53 45 4c  <%d)\n".    "SEL
8340: 45 43 54 20 63 6f 75 6e 74 28 78 29 2c 20 61 76  ECT count(x), av
8350: 67 28 78 29 20 46 52 4f 4d 20 28 5c 6e 22 0a 20  g(x) FROM (\n". 
8360: 20 20 20 22 20 20 53 45 4c 45 43 54 20 78 20 46     "  SELECT x F
8370: 52 4f 4d 20 74 31 20 45 58 43 45 50 54 20 53 45  ROM t1 EXCEPT SE
8380: 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 32 20 4f  LECT y FROM t2 O
8390: 52 44 45 52 20 42 59 20 31 5c 6e 22 0a 20 20 20  RDER BY 1\n".   
83a0: 20 22 29 3b 22 2c 0a 20 20 20 20 6e 45 6c 65 6d   ");",.    nElem
83b0: 2c 20 6e 45 6c 65 6d 0a 20 20 29 3b 0a 20 20 73  , nElem.  );.  s
83c0: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
83d0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
83e0: 64 5f 74 65 73 74 28 29 3b 0a 0a 7d 0a 0a 23 69  d_test();..}..#i
83f0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
8400: 4c 45 5f 52 54 52 45 45 0a 2f 2a 20 47 65 6e 65  LE_RTREE./* Gene
8410: 72 61 74 65 20 74 77 6f 20 6e 75 6d 62 65 72 73  rate two numbers
8420: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 6d   between 1 and m
8430: 78 2e 20 20 54 68 65 20 66 69 72 73 74 20 6e 75  x.  The first nu
8440: 6d 62 65 72 20 69 73 20 6c 65 73 73 20 74 68 61  mber is less tha
8450: 6e 0a 2a 2a 20 74 68 65 20 73 65 63 6f 6e 64 2e  n.** the second.
8460: 20 20 55 73 75 61 6c 6c 79 20 74 68 65 20 6e 75    Usually the nu
8470: 6d 62 65 72 73 20 61 72 65 20 6e 65 61 72 20 65  mbers are near e
8480: 61 63 68 20 6f 74 68 65 72 20 62 75 74 20 63 61  ach other but ca
8490: 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62  n sometimes.** b
84a0: 65 20 66 61 72 20 61 70 61 72 74 2e 0a 2a 2f 0a  e far apart..*/.
84b0: 73 74 61 74 69 63 20 76 6f 69 64 20 74 77 6f 43  static void twoC
84c0: 6f 6f 72 64 73 28 0a 20 20 69 6e 74 20 70 31 2c  oords(.  int p1,
84d0: 20 69 6e 74 20 70 32 2c 20 20 20 20 20 20 20 20   int p2,        
84e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
84f0: 72 61 6d 65 74 65 72 73 20 61 64 6a 75 73 74 69  rameters adjusti
8500: 6e 67 20 73 69 7a 65 73 20 2a 2f 0a 20 20 75 6e  ng sizes */.  un
8510: 73 69 67 6e 65 64 20 6d 78 2c 20 20 20 20 20 20  signed mx,      
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8530: 2f 2a 20 52 61 6e 67 65 20 6f 66 20 31 2e 2e 6d  /* Range of 1..m
8540: 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  x */.  unsigned 
8550: 2a 70 58 30 2c 20 75 6e 73 69 67 6e 65 64 20 2a  *pX0, unsigned *
8560: 70 58 31 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a  pX1      /* OUT:
8570: 20 77 72 69 74 65 20 72 65 73 75 6c 74 73 20 68   write results h
8580: 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 75 6e 73 69  ere */.){.  unsi
8590: 67 6e 65 64 20 64 2c 20 78 30 2c 20 78 31 2c 20  gned d, x0, x1, 
85a0: 73 70 61 6e 3b 0a 0a 20 20 73 70 61 6e 20 3d 20  span;..  span = 
85b0: 6d 78 2f 31 30 30 20 2b 20 31 3b 0a 20 20 69 66  mx/100 + 1;.  if
85c0: 28 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e  ( speedtest1_ran
85d0: 64 6f 6d 28 29 25 33 3d 3d 30 20 29 20 73 70 61  dom()%3==0 ) spa
85e0: 6e 20 2a 3d 20 70 31 3b 0a 20 20 69 66 28 20 73  n *= p1;.  if( s
85f0: 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d  peedtest1_random
8600: 28 29 25 70 32 3d 3d 30 20 29 20 73 70 61 6e 20  ()%p2==0 ) span 
8610: 3d 20 6d 78 2f 32 3b 0a 20 20 64 20 3d 20 73 70  = mx/2;.  d = sp
8620: 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28  eedtest1_random(
8630: 29 25 73 70 61 6e 20 2b 20 31 3b 0a 20 20 78 30  )%span + 1;.  x0
8640: 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72 61   = speedtest1_ra
8650: 6e 64 6f 6d 28 29 25 28 6d 78 2d 64 29 20 2b 20  ndom()%(mx-d) + 
8660: 31 3b 0a 20 20 78 31 20 3d 20 78 30 20 2b 20 64  1;.  x1 = x0 + d
8670: 3b 0a 20 20 2a 70 58 30 20 3d 20 78 30 3b 0a 20  ;.  *pX0 = x0;. 
8680: 20 2a 70 58 31 20 3d 20 78 31 3b 0a 7d 0a 23 65   *pX1 = x1;.}.#e
8690: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
86a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45  ITE_ENABLE_RTREE
86b0: 0a 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ./* The followin
86c0: 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61 6e 20  g routine is an 
86d0: 52 2d 54 72 65 65 20 67 65 6f 6d 65 74 72 79 20  R-Tree geometry 
86e0: 63 61 6c 6c 62 61 63 6b 2e 20 20 49 74 20 72 65  callback.  It re
86f0: 74 75 72 6e 73 0a 2a 2a 20 74 72 75 65 20 69 66  turns.** true if
8700: 20 74 68 65 20 6f 62 6a 65 63 74 20 6f 76 65 72   the object over
8710: 6c 61 70 73 20 61 20 73 6c 69 63 65 20 6f 6e 20  laps a slice on 
8720: 74 68 65 20 59 20 63 6f 6f 72 64 69 6e 61 74 65  the Y coordinate
8730: 20 62 65 74 77 65 65 6e 20 74 68 65 0a 2a 2a 20   between the.** 
8740: 74 77 6f 20 76 61 6c 75 65 73 20 67 69 76 65 6e  two values given
8750: 20 61 73 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   as arguments.  
8760: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 0a 2a  In other words.*
8770: 2a 0a 2a 2a 20 20 20 20 20 53 45 4c 45 43 54 20  *.**     SELECT 
8780: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74  count(*) FROM rt
8790: 31 20 57 48 45 52 45 20 69 64 20 4d 41 54 43 48  1 WHERE id MATCH
87a0: 20 78 73 6c 69 63 65 28 31 30 2c 32 30 29 3b 0a   xslice(10,20);.
87b0: 2a 2a 0a 2a 2a 20 49 73 20 74 68 65 20 73 61 6d  **.** Is the sam
87c0: 65 20 61 73 20 73 61 79 69 6e 67 3a 0a 2a 2a 0a  e as saying:.**.
87d0: 2a 2a 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f  **     SELECT co
87e0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74 31 20  unt(*) FROM rt1 
87f0: 57 48 45 52 45 20 79 31 3e 3d 31 30 20 41 4e 44  WHERE y1>=10 AND
8800: 20 79 30 3c 3d 32 30 3b 0a 2a 2f 0a 73 74 61 74   y0<=20;.*/.stat
8810: 69 63 20 69 6e 74 20 78 73 6c 69 63 65 47 65 6f  ic int xsliceGeo
8820: 6d 65 74 72 79 43 61 6c 6c 62 61 63 6b 28 0a 20  metryCallback(. 
8830: 20 73 71 6c 69 74 65 33 5f 72 74 72 65 65 5f 67   sqlite3_rtree_g
8840: 65 6f 6d 65 74 72 79 20 2a 70 2c 0a 20 20 69 6e  eometry *p,.  in
8850: 74 20 6e 43 6f 6f 72 64 2c 0a 20 20 64 6f 75 62  t nCoord,.  doub
8860: 6c 65 20 2a 61 43 6f 6f 72 64 2c 0a 20 20 69 6e  le *aCoord,.  in
8870: 74 20 2a 70 52 65 73 0a 29 7b 0a 20 20 2a 70 52  t *pRes.){.  *pR
8880: 65 73 20 3d 20 61 43 6f 6f 72 64 5b 33 5d 3e 3d  es = aCoord[3]>=
8890: 70 2d 3e 61 50 61 72 61 6d 5b 30 5d 20 26 26 20  p->aParam[0] && 
88a0: 61 43 6f 6f 72 64 5b 32 5d 3c 3d 70 2d 3e 61 50  aCoord[2]<=p->aP
88b0: 61 72 61 6d 5b 31 5d 3b 0a 20 20 72 65 74 75 72  aram[1];.  retur
88c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
88d0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
88e0: 45 4e 41 42 4c 45 5f 52 54 52 45 45 20 2a 2f 0a  ENABLE_RTREE */.
88f0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
8900: 4e 41 42 4c 45 5f 52 54 52 45 45 0a 2f 2a 0a 2a  NABLE_RTREE./*.*
8910: 2a 20 41 20 74 65 73 74 73 65 74 20 66 6f 72 20  * A testset for 
8920: 74 68 65 20 52 2d 54 72 65 65 20 76 69 72 74 75  the R-Tree virtu
8930: 61 6c 20 74 61 62 6c 65 0a 2a 2f 0a 76 6f 69 64  al table.*/.void
8940: 20 74 65 73 74 73 65 74 5f 72 74 72 65 65 28 69   testset_rtree(i
8950: 6e 74 20 70 31 2c 20 69 6e 74 20 70 32 29 7b 0a  nt p1, int p2){.
8960: 20 20 75 6e 73 69 67 6e 65 64 20 69 2c 20 6e 3b    unsigned i, n;
8970: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d 78 43 6f  .  unsigned mxCo
8980: 6f 72 64 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20  ord;.  unsigned 
8990: 78 30 2c 20 78 31 2c 20 79 30 2c 20 79 31 2c 20  x0, x1, y0, y1, 
89a0: 7a 30 2c 20 7a 31 3b 0a 20 20 75 6e 73 69 67 6e  z0, z1;.  unsign
89b0: 65 64 20 69 53 74 65 70 3b 0a 20 20 69 6e 74 20  ed iStep;.  int 
89c0: 2a 61 43 68 65 63 6b 20 3d 20 73 71 6c 69 74 65  *aCheck = sqlite
89d0: 33 5f 6d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66  3_malloc( sizeof
89e0: 28 69 6e 74 29 2a 67 2e 73 7a 54 65 73 74 2a 35  (int)*g.szTest*5
89f0: 30 30 20 29 3b 0a 0a 20 20 6d 78 43 6f 6f 72 64  00 );..  mxCoord
8a00: 20 3d 20 31 35 30 30 30 3b 0a 20 20 6e 20 3d 20   = 15000;.  n = 
8a10: 67 2e 73 7a 54 65 73 74 2a 35 30 30 3b 0a 20 20  g.szTest*500;.  
8a20: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
8a30: 5f 74 65 73 74 28 31 30 30 2c 20 22 25 64 20 49  _test(100, "%d I
8a40: 4e 53 45 52 54 73 20 69 6e 74 6f 20 61 6e 20 72  NSERTs into an r
8a50: 2d 74 72 65 65 22 2c 20 6e 29 3b 0a 20 20 73 70  -tree", n);.  sp
8a60: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42  eedtest1_exec("B
8a70: 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74  EGIN");.  speedt
8a80: 65 73 74 31 5f 65 78 65 63 28 22 43 52 45 41 54  est1_exec("CREAT
8a90: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
8aa0: 72 74 31 20 55 53 49 4e 47 20 72 74 72 65 65 28  rt1 USING rtree(
8ab0: 69 64 2c 78 30 2c 78 31 2c 79 30 2c 79 31 2c 7a  id,x0,x1,y0,y1,z
8ac0: 30 2c 7a 31 29 22 29 3b 0a 20 20 73 70 65 65 64  0,z1)");.  speed
8ad0: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 49  test1_prepare("I
8ae0: 4e 53 45 52 54 20 49 4e 54 4f 20 72 74 31 28 69  NSERT INTO rt1(i
8af0: 64 2c 78 30 2c 78 31 2c 79 30 2c 79 31 2c 7a 30  d,x0,x1,y0,y1,z0
8b00: 2c 7a 31 29 22 0a 20 20 20 20 20 20 20 20 20 20  ,z1)".          
8b10: 20 20 20 20 20 20 20 20 20 20 20 22 56 41 4c 55             "VALU
8b20: 45 53 28 3f 31 2c 3f 32 2c 3f 33 2c 3f 34 2c 3f  ES(?1,?2,?3,?4,?
8b30: 35 2c 3f 36 2c 3f 37 29 22 29 3b 0a 20 20 66 6f  5,?6,?7)");.  fo
8b40: 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b  r(i=1; i<=n; i++
8b50: 29 7b 0a 20 20 20 20 74 77 6f 43 6f 6f 72 64 73  ){.    twoCoords
8b60: 28 70 31 2c 20 70 32 2c 20 6d 78 43 6f 6f 72 64  (p1, p2, mxCoord
8b70: 2c 20 26 78 30 2c 20 26 78 31 29 3b 0a 20 20 20  , &x0, &x1);.   
8b80: 20 74 77 6f 43 6f 6f 72 64 73 28 70 31 2c 20 70   twoCoords(p1, p
8b90: 32 2c 20 6d 78 43 6f 6f 72 64 2c 20 26 79 30 2c  2, mxCoord, &y0,
8ba0: 20 26 79 31 29 3b 0a 20 20 20 20 74 77 6f 43 6f   &y1);.    twoCo
8bb0: 6f 72 64 73 28 70 31 2c 20 70 32 2c 20 6d 78 43  ords(p1, p2, mxC
8bc0: 6f 6f 72 64 2c 20 26 7a 30 2c 20 26 7a 31 29 3b  oord, &z0, &z1);
8bd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
8be0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
8bf0: 2c 20 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , i);.    sqlite
8c00: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
8c10: 6d 74 2c 20 32 2c 20 78 30 29 3b 0a 20 20 20 20  mt, 2, x0);.    
8c20: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
8c30: 28 67 2e 70 53 74 6d 74 2c 20 33 2c 20 78 31 29  (g.pStmt, 3, x1)
8c40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
8c50: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
8c60: 34 2c 20 79 30 29 3b 0a 20 20 20 20 73 71 6c 69  4, y0);.    sqli
8c70: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
8c80: 53 74 6d 74 2c 20 35 2c 20 79 31 29 3b 0a 20 20  Stmt, 5, y1);.  
8c90: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
8ca0: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 36 2c 20 7a  nt(g.pStmt, 6, z
8cb0: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
8cc0: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
8cd0: 2c 20 37 2c 20 7a 31 29 3b 0a 20 20 20 20 73 70  , 7, z1);.    sp
8ce0: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
8cf0: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
8d00: 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b  _exec("COMMIT");
8d10: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
8d20: 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73 70 65  d_test();..  spe
8d30: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
8d40: 73 74 28 31 30 31 2c 20 22 43 6f 70 79 20 66 72  st(101, "Copy fr
8d50: 6f 6d 20 72 74 72 65 65 20 74 6f 20 61 20 72 65  om rtree to a re
8d60: 67 75 6c 61 72 20 74 61 62 6c 65 22 29 3b 0a 20  gular table");. 
8d70: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
8d80: 28 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  ("CREATE TABLE t
8d90: 31 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49  1(id INTEGER PRI
8da0: 4d 41 52 59 20 4b 45 59 2c 78 30 2c 78 31 2c 79  MARY KEY,x0,x1,y
8db0: 30 2c 79 31 2c 7a 30 2c 7a 31 29 22 29 3b 0a 20  0,y1,z0,z1)");. 
8dc0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
8dd0: 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  ("INSERT INTO t1
8de0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 72   SELECT * FROM r
8df0: 74 31 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  t1");.  speedtes
8e00: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
8e10: 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 31    n = g.szTest*1
8e20: 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  00;.  speedtest1
8e30: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 31 30 2c  _begin_test(110,
8e40: 20 22 25 64 20 6f 6e 65 2d 64 69 6d 65 6e 73 69   "%d one-dimensi
8e50: 6f 6e 61 6c 20 69 6e 74 65 72 73 65 63 74 20 73  onal intersect s
8e60: 6c 69 63 65 20 71 75 65 72 69 65 73 22 2c 20 6e  lice queries", n
8e70: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
8e80: 70 72 65 70 61 72 65 28 22 53 45 4c 45 43 54 20  prepare("SELECT 
8e90: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74  count(*) FROM rt
8ea0: 31 20 57 48 45 52 45 20 78 30 3e 3d 3f 31 20 41  1 WHERE x0>=?1 A
8eb0: 4e 44 20 78 31 3c 3d 3f 32 22 29 3b 0a 20 20 69  ND x1<=?2");.  i
8ec0: 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e  Step = mxCoord/n
8ed0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
8ee0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
8ef0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
8f00: 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74 65 70  Stmt, 1, i*iStep
8f10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
8f20: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
8f30: 20 32 2c 20 28 69 2b 31 29 2a 69 53 74 65 70 29   2, (i+1)*iStep)
8f40: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
8f50: 5f 72 75 6e 28 29 3b 0a 20 20 20 20 61 43 68 65  _run();.    aChe
8f60: 63 6b 5b 69 5d 20 3d 20 61 74 6f 69 28 67 2e 7a  ck[i] = atoi(g.z
8f70: 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a 20 20 73  Result);.  }.  s
8f80: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
8f90: 73 74 28 29 3b 0a 0a 20 20 69 66 28 20 67 2e 62  st();..  if( g.b
8fa0: 56 65 72 69 66 79 20 29 7b 0a 20 20 20 20 6e 20  Verify ){.    n 
8fb0: 3d 20 67 2e 73 7a 54 65 73 74 2a 31 30 30 3b 0a  = g.szTest*100;.
8fc0: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 62      speedtest1_b
8fd0: 65 67 69 6e 5f 74 65 73 74 28 31 31 31 2c 20 22  egin_test(111, "
8fe0: 56 65 72 69 66 79 20 72 65 73 75 6c 74 20 66 72  Verify result fr
8ff0: 6f 6d 20 31 2d 44 20 69 6e 74 65 72 73 65 63 74  om 1-D intersect
9000: 20 73 6c 69 63 65 20 71 75 65 72 69 65 73 22 29   slice queries")
9010: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
9020: 5f 70 72 65 70 61 72 65 28 22 53 45 4c 45 43 54  _prepare("SELECT
9030: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
9040: 31 20 57 48 45 52 45 20 78 30 3e 3d 3f 31 20 41  1 WHERE x0>=?1 A
9050: 4e 44 20 78 31 3c 3d 3f 32 22 29 3b 0a 20 20 20  ND x1<=?2");.   
9060: 20 69 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72 64   iStep = mxCoord
9070: 2f 6e 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  /n;.    for(i=0;
9080: 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
9090: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
90a0: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69  nt(g.pStmt, 1, i
90b0: 2a 69 53 74 65 70 29 3b 0a 20 20 20 20 20 20 73  *iStep);.      s
90c0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
90d0: 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28 69 2b 31  g.pStmt, 2, (i+1
90e0: 29 2a 69 53 74 65 70 29 3b 0a 20 20 20 20 20 20  )*iStep);.      
90f0: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
9100: 3b 0a 20 20 20 20 20 20 69 66 28 20 61 43 68 65  ;.      if( aChe
9110: 63 6b 5b 69 5d 21 3d 61 74 6f 69 28 67 2e 7a 52  ck[i]!=atoi(g.zR
9120: 65 73 75 6c 74 29 20 29 7b 0a 20 20 20 20 20 20  esult) ){.      
9130: 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 43    fatal_error("C
9140: 6f 75 6e 74 20 64 69 73 61 67 72 65 65 20 73 74  ount disagree st
9150: 65 70 20 25 64 3a 20 25 64 2e 2e 25 64 2e 20 20  ep %d: %d..%d.  
9160: 25 64 20 76 73 20 25 64 22 2c 0a 20 20 20 20 20  %d vs %d",.     
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9180: 2c 20 69 2a 69 53 74 65 70 2c 20 28 69 2b 31 29  , i*iStep, (i+1)
9190: 2a 69 53 74 65 70 2c 20 61 43 68 65 63 6b 5b 69  *iStep, aCheck[i
91a0: 5d 2c 20 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c  ], atoi(g.zResul
91b0: 74 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  t));.      }.   
91c0: 20 7d 0a 20 20 20 20 73 70 65 65 64 74 65 73 74   }.    speedtest
91d0: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 20 20  1_end_test();.  
91e0: 7d 0a 20 20 0a 20 20 6e 20 3d 20 67 2e 73 7a 54  }.  .  n = g.szT
91f0: 65 73 74 2a 31 30 30 3b 0a 20 20 73 70 65 65 64  est*100;.  speed
9200: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
9210: 28 31 32 30 2c 20 22 25 64 20 6f 6e 65 2d 64 69  (120, "%d one-di
9220: 6d 65 6e 73 69 6f 6e 61 6c 20 6f 76 65 72 6c 61  mensional overla
9230: 70 20 73 6c 69 63 65 20 71 75 65 72 69 65 73 22  p slice queries"
9240: 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73  , n);.  speedtes
9250: 74 31 5f 70 72 65 70 61 72 65 28 22 53 45 4c 45  t1_prepare("SELE
9260: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
9270: 20 72 74 31 20 57 48 45 52 45 20 79 31 3e 3d 3f   rt1 WHERE y1>=?
9280: 31 20 41 4e 44 20 79 30 3c 3d 3f 32 22 29 3b 0a  1 AND y0<=?2");.
9290: 20 20 69 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72    iStep = mxCoor
92a0: 64 2f 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  d/n;.  for(i=0; 
92b0: 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  i<n; i++){.    s
92c0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
92d0: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53  g.pStmt, 1, i*iS
92e0: 74 65 70 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  tep);.    sqlite
92f0: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
9300: 6d 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53 74  mt, 2, (i+1)*iSt
9310: 65 70 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  ep);.    speedte
9320: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20 20 61  st1_run();.    a
9330: 43 68 65 63 6b 5b 69 5d 20 3d 20 61 74 6f 69 28  Check[i] = atoi(
9340: 67 2e 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a  g.zResult);.  }.
9350: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
9360: 5f 74 65 73 74 28 29 3b 0a 0a 20 20 69 66 28 20  _test();..  if( 
9370: 67 2e 62 56 65 72 69 66 79 20 29 7b 0a 20 20 20  g.bVerify ){.   
9380: 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 31 30   n = g.szTest*10
9390: 30 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  0;.    speedtest
93a0: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 32 31  1_begin_test(121
93b0: 2c 20 22 56 65 72 69 66 79 20 72 65 73 75 6c 74  , "Verify result
93c0: 20 66 72 6f 6d 20 31 2d 44 20 6f 76 65 72 6c 61   from 1-D overla
93d0: 70 20 73 6c 69 63 65 20 71 75 65 72 69 65 73 22  p slice queries"
93e0: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
93f0: 31 5f 70 72 65 70 61 72 65 28 22 53 45 4c 45 43  1_prepare("SELEC
9400: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
9410: 74 31 20 57 48 45 52 45 20 79 31 3e 3d 3f 31 20  t1 WHERE y1>=?1 
9420: 41 4e 44 20 79 30 3c 3d 3f 32 22 29 3b 0a 20 20  AND y0<=?2");.  
9430: 20 20 69 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72    iStep = mxCoor
9440: 64 2f 6e 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  d/n;.    for(i=0
9450: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
9460: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
9470: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20  int(g.pStmt, 1, 
9480: 69 2a 69 53 74 65 70 29 3b 0a 20 20 20 20 20 20  i*iStep);.      
9490: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
94a0: 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28 69 2b  (g.pStmt, 2, (i+
94b0: 31 29 2a 69 53 74 65 70 29 3b 0a 20 20 20 20 20  1)*iStep);.     
94c0: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
94d0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 43 68  );.      if( aCh
94e0: 65 63 6b 5b 69 5d 21 3d 61 74 6f 69 28 67 2e 7a  eck[i]!=atoi(g.z
94f0: 52 65 73 75 6c 74 29 20 29 7b 0a 20 20 20 20 20  Result) ){.     
9500: 20 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22     fatal_error("
9510: 43 6f 75 6e 74 20 64 69 73 61 67 72 65 65 20 73  Count disagree s
9520: 74 65 70 20 25 64 3a 20 25 64 2e 2e 25 64 2e 20  tep %d: %d..%d. 
9530: 20 25 64 20 76 73 20 25 64 22 2c 0a 20 20 20 20   %d vs %d",.    
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9550: 69 2c 20 69 2a 69 53 74 65 70 2c 20 28 69 2b 31  i, i*iStep, (i+1
9560: 29 2a 69 53 74 65 70 2c 20 61 43 68 65 63 6b 5b  )*iStep, aCheck[
9570: 69 5d 2c 20 61 74 6f 69 28 67 2e 7a 52 65 73 75  i], atoi(g.zResu
9580: 6c 74 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  lt));.      }.  
9590: 20 20 7d 0a 20 20 20 20 73 70 65 65 64 74 65 73    }.    speedtes
95a0: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 20  t1_end_test();. 
95b0: 20 7d 0a 20 20 0a 0a 20 20 6e 20 3d 20 67 2e 73   }.  ..  n = g.s
95c0: 7a 54 65 73 74 2a 31 30 30 3b 0a 20 20 73 70 65  zTest*100;.  spe
95d0: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
95e0: 73 74 28 31 32 35 2c 20 22 25 64 20 63 75 73 74  st(125, "%d cust
95f0: 6f 6d 20 67 65 6f 6d 65 74 72 79 20 63 61 6c 6c  om geometry call
9600: 62 61 63 6b 20 71 75 65 72 69 65 73 22 2c 20 6e  back queries", n
9610: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 74 72  );.  sqlite3_rtr
9620: 65 65 5f 67 65 6f 6d 65 74 72 79 5f 63 61 6c 6c  ee_geometry_call
9630: 62 61 63 6b 28 67 2e 64 62 2c 20 22 78 73 6c 69  back(g.db, "xsli
9640: 63 65 22 2c 20 78 73 6c 69 63 65 47 65 6f 6d 65  ce", xsliceGeome
9650: 74 72 79 43 61 6c 6c 62 61 63 6b 2c 20 30 29 3b  tryCallback, 0);
9660: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
9670: 65 70 61 72 65 28 22 53 45 4c 45 43 54 20 63 6f  epare("SELECT co
9680: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74 31 20  unt(*) FROM rt1 
9690: 57 48 45 52 45 20 69 64 20 4d 41 54 43 48 20 78  WHERE id MATCH x
96a0: 73 6c 69 63 65 28 3f 31 2c 3f 32 29 22 29 3b 0a  slice(?1,?2)");.
96b0: 20 20 69 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72    iStep = mxCoor
96c0: 64 2f 6e 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  d/n;.  for(i=0; 
96d0: 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  i<n; i++){.    s
96e0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
96f0: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53  g.pStmt, 1, i*iS
9700: 74 65 70 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  tep);.    sqlite
9710: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
9720: 6d 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53 74  mt, 2, (i+1)*iSt
9730: 65 70 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  ep);.    speedte
9740: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20 20 69  st1_run();.    i
9750: 66 28 20 61 43 68 65 63 6b 5b 69 5d 21 3d 61 74  f( aCheck[i]!=at
9760: 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29 20 29 7b  oi(g.zResult) ){
9770: 0a 20 20 20 20 20 20 66 61 74 61 6c 5f 65 72 72  .      fatal_err
9780: 6f 72 28 22 43 6f 75 6e 74 20 64 69 73 61 67 72  or("Count disagr
9790: 65 65 20 73 74 65 70 20 25 64 3a 20 25 64 2e 2e  ee step %d: %d..
97a0: 25 64 2e 20 20 25 64 20 76 73 20 25 64 22 2c 0a  %d.  %d vs %d",.
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97c0: 20 20 69 2c 20 69 2a 69 53 74 65 70 2c 20 28 69    i, i*iStep, (i
97d0: 2b 31 29 2a 69 53 74 65 70 2c 20 61 43 68 65 63  +1)*iStep, aChec
97e0: 6b 5b 69 5d 2c 20 61 74 6f 69 28 67 2e 7a 52 65  k[i], atoi(g.zRe
97f0: 73 75 6c 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20  sult));.    }.  
9800: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
9810: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20  nd_test();..  n 
9820: 3d 20 67 2e 73 7a 54 65 73 74 2a 34 30 30 3b 0a  = g.szTest*400;.
9830: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
9840: 69 6e 5f 74 65 73 74 28 31 33 30 2c 20 22 25 64  in_test(130, "%d
9850: 20 74 68 72 65 65 2d 64 69 6d 65 6e 73 69 6f 6e   three-dimension
9860: 61 6c 20 69 6e 74 65 72 73 65 63 74 20 62 6f 78  al intersect box
9870: 20 71 75 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20   queries", n);. 
9880: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
9890: 61 72 65 28 22 53 45 4c 45 43 54 20 63 6f 75 6e  are("SELECT coun
98a0: 74 28 2a 29 20 46 52 4f 4d 20 72 74 31 20 57 48  t(*) FROM rt1 WH
98b0: 45 52 45 20 78 31 3e 3d 3f 31 20 41 4e 44 20 78  ERE x1>=?1 AND x
98c0: 30 3c 3d 3f 32 22 0a 20 20 20 20 20 20 20 20 20  0<=?2".         
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 41 4e              " AN
98e0: 44 20 79 31 3e 3d 3f 31 20 41 4e 44 20 79 30 3c  D y1>=?1 AND y0<
98f0: 3d 3f 32 20 41 4e 44 20 7a 31 3e 3d 3f 31 20 41  =?2 AND z1>=?1 A
9900: 4e 44 20 7a 30 3c 3d 3f 32 22 29 3b 0a 20 20 69  ND z0<=?2");.  i
9910: 53 74 65 70 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e  Step = mxCoord/n
9920: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
9930: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
9940: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
9950: 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74 65 70  Stmt, 1, i*iStep
9960: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
9970: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
9980: 20 32 2c 20 28 69 2b 31 29 2a 69 53 74 65 70 29   2, (i+1)*iStep)
9990: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
99a0: 5f 72 75 6e 28 29 3b 0a 20 20 20 20 61 43 68 65  _run();.    aChe
99b0: 63 6b 5b 69 5d 20 3d 20 61 74 6f 69 28 67 2e 7a  ck[i] = atoi(g.z
99c0: 52 65 73 75 6c 74 29 3b 0a 20 20 7d 0a 20 20 73  Result);.  }.  s
99d0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
99e0: 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 67 2e 73  st();..  n = g.s
99f0: 7a 54 65 73 74 2a 35 30 30 3b 0a 20 20 73 70 65  zTest*500;.  spe
9a00: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
9a10: 73 74 28 31 34 30 2c 20 22 25 64 20 72 6f 77 69  st(140, "%d rowi
9a20: 64 20 71 75 65 72 69 65 73 22 2c 20 6e 29 3b 0a  d queries", n);.
9a30: 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65    speedtest1_pre
9a40: 70 61 72 65 28 22 53 45 4c 45 43 54 20 2a 20 46  pare("SELECT * F
9a50: 52 4f 4d 20 72 74 31 20 57 48 45 52 45 20 69 64  ROM rt1 WHERE id
9a60: 3d 3f 31 22 29 3b 0a 20 20 66 6f 72 28 69 3d 31  =?1");.  for(i=1
9a70: 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<=n; i++){.  
9a80: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
9a90: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69  nt(g.pStmt, 1, i
9aa0: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
9ab0: 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73  1_run();.  }.  s
9ac0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
9ad0: 73 74 28 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  st();.}.#endif /
9ae0: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
9af0: 52 54 52 45 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  RTREE */../*.** 
9b00: 41 20 74 65 73 74 73 65 74 20 74 68 61 74 20 64  A testset that d
9b10: 6f 65 73 20 6b 65 79 2f 76 61 6c 75 65 20 73 74  oes key/value st
9b20: 6f 72 61 67 65 20 6f 6e 20 74 61 62 6c 65 73 20  orage on tables 
9b30: 77 69 74 68 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e  with many column
9b40: 73 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  s..** This is th
9b50: 65 20 6b 69 6e 64 20 6f 66 20 77 6f 72 6b 6c 6f  e kind of worklo
9b60: 61 64 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  ad generated by 
9b70: 4f 52 4d 73 20 73 75 63 68 20 61 73 20 43 6f 72  ORMs such as Cor
9b80: 65 44 61 74 61 2e 0a 2a 2f 0a 76 6f 69 64 20 74  eData..*/.void t
9b90: 65 73 74 73 65 74 5f 6f 72 6d 28 76 6f 69 64 29  estset_orm(void)
9ba0: 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 2c 20  {.  unsigned i, 
9bb0: 6a 2c 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64  j, n;.  unsigned
9bc0: 20 6e 52 6f 77 3b 0a 20 20 75 6e 73 69 67 6e 65   nRow;.  unsigne
9bd0: 64 20 78 31 2c 20 6c 65 6e 3b 0a 20 20 63 68 61  d x1, len;.  cha
9be0: 72 20 7a 4e 75 6d 5b 32 30 30 30 5d 3b 20 20 20  r zNum[2000];   
9bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
9c00: 6e 75 6d 62 65 72 20 6e 61 6d 65 20 2a 2f 0a 20  number name */. 
9c10: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
9c20: 61 72 20 7a 54 79 70 65 5b 5d 20 3d 20 20 20 2f  ar zType[] =   /
9c30: 2a 20 54 79 70 65 73 20 66 6f 72 20 61 6c 6c 20  * Types for all 
9c40: 6e 6f 6e 2d 50 4b 20 63 6f 6c 75 6d 6e 73 2c 20  non-PK columns, 
9c50: 69 6e 20 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20  in order */.    
9c60: 22 49 42 42 49 49 49 54 49 56 56 49 54 42 54 42  "IBBIIITIVVITBTB
9c70: 46 42 46 49 54 54 46 42 54 42 56 42 56 49 46 54  FBFITTFBTBVBVIFT
9c80: 42 42 46 49 54 46 46 56 42 49 46 49 56 42 56 56  BBFITFFVBIFIVBVV
9c90: 56 42 54 56 54 49 42 42 46 46 49 56 49 42 54 42  VBTVTIBBFFIVIBTB
9ca0: 22 0a 20 20 20 20 22 54 56 54 54 46 54 56 54 56  ".    "TVTTFTVTV
9cb0: 46 46 49 49 54 49 46 42 49 54 46 54 54 46 46 46  FFIITIFBITFTTFFF
9cc0: 56 42 49 49 42 54 54 49 54 46 54 46 46 56 56 56  VBIIBTTITFTFFVVV
9cd0: 46 49 49 49 54 56 42 42 56 46 46 54 56 56 42 22  FIIITVBBVFFTVVB"
9ce0: 3b 0a 0a 20 20 6e 52 6f 77 20 3d 20 6e 20 3d 20  ;..  nRow = n = 
9cf0: 67 2e 73 7a 54 65 73 74 2a 32 35 30 3b 0a 20 20  g.szTest*250;.  
9d00: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
9d10: 5f 74 65 73 74 28 31 30 30 2c 20 22 46 69 6c 6c  _test(100, "Fill
9d20: 20 25 64 20 72 6f 77 73 22 2c 20 6e 29 3b 0a 20   %d rows", n);. 
9d30: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
9d40: 28 0a 20 20 20 20 22 42 45 47 49 4e 3b 22 0a 20  (.    "BEGIN;". 
9d50: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
9d60: 20 5a 4c 4f 4f 4b 53 4c 49 4b 45 43 4f 52 45 44   ZLOOKSLIKECORED
9d70: 41 54 41 20 28 22 0a 20 20 20 20 22 20 20 5a 50  ATA (".    "  ZP
9d80: 4b 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  K INTEGER PRIMAR
9d90: 59 20 4b 45 59 2c 22 0a 20 20 20 20 22 20 20 5a  Y KEY,".    "  Z
9da0: 54 45 52 4d 46 49 54 54 49 4e 47 48 4f 55 53 49  TERMFITTINGHOUSI
9db0: 4e 47 43 4f 4d 4d 41 4e 44 20 49 4e 54 45 47 45  NGCOMMAND INTEGE
9dc0: 52 2c 22 0a 20 20 20 20 22 20 20 5a 42 52 49 45  R,".    "  ZBRIE
9dd0: 46 47 4f 42 59 44 4f 44 47 45 52 48 45 49 47 48  FGOBYDODGERHEIGH
9de0: 54 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20  T BLOB,".    "  
9df0: 5a 43 41 50 41 42 4c 45 54 52 49 50 44 4f 4f 52  ZCAPABLETRIPDOOR
9e00: 41 4c 4d 4f 4e 44 20 42 4c 4f 42 2c 22 0a 20 20  ALMOND BLOB,".  
9e10: 20 20 22 20 20 5a 44 45 50 4f 53 49 54 50 41 49    "  ZDEPOSITPAI
9e20: 52 43 4f 4c 4c 45 47 45 43 4f 4d 45 54 20 49 4e  RCOLLEGECOMET IN
9e30: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
9e40: 46 52 41 4d 45 45 4e 54 45 52 53 49 4d 50 4c 45  FRAMEENTERSIMPLE
9e50: 4d 4f 55 54 48 20 49 4e 54 45 47 45 52 2c 22 0a  MOUTH INTEGER,".
9e60: 20 20 20 20 22 20 20 5a 48 4f 50 45 46 55 4c 47      "  ZHOPEFULG
9e70: 41 54 45 48 4f 4c 45 43 48 41 4c 4b 20 49 4e 54  ATEHOLECHALK INT
9e80: 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 53  EGER,".    "  ZS
9e90: 4c 45 45 50 59 55 53 45 52 47 52 41 4e 44 42 4f  LEEPYUSERGRANDBO
9ea0: 57 4c 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20  WL TIMESTAMP,". 
9eb0: 20 20 20 22 20 20 5a 44 45 57 50 45 41 43 48 43     "  ZDEWPEACHC
9ec0: 41 52 45 45 52 43 45 4c 45 52 59 20 49 4e 54 45  AREERCELERY INTE
9ed0: 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 48 41  GER,".    "  ZHA
9ee0: 4e 47 45 52 4c 49 54 48 49 55 4d 44 49 4e 4e 45  NGERLITHIUMDINNE
9ef0: 52 4d 45 45 54 20 56 41 52 43 48 41 52 2c 22 0a  RMEET VARCHAR,".
9f00: 20 20 20 20 22 20 20 5a 43 4c 55 42 52 45 4c 45      "  ZCLUBRELE
9f10: 41 53 45 4c 49 5a 41 52 44 41 44 56 49 43 45 20  ASELIZARDADVICE 
9f20: 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20  VARCHAR,".    " 
9f30: 20 5a 43 48 41 52 47 45 43 4c 49 43 4b 48 55 4d   ZCHARGECLICKHUM
9f40: 41 4e 45 48 49 52 45 20 49 4e 54 45 47 45 52 2c  ANEHIRE INTEGER,
9f50: 22 0a 20 20 20 20 22 20 20 5a 46 49 4e 47 45 52  ".    "  ZFINGER
9f60: 44 55 45 50 49 5a 5a 41 4f 50 54 49 4f 4e 20 54  DUEPIZZAOPTION T
9f70: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
9f80: 20 20 5a 46 4c 59 49 4e 47 44 4f 43 54 4f 52 54    ZFLYINGDOCTORT
9f90: 41 42 4c 45 4d 45 4c 4f 44 59 20 42 4c 4f 42 2c  ABLEMELODY BLOB,
9fa0: 22 0a 20 20 20 20 22 20 20 5a 4c 4f 4e 47 46 49  ".    "  ZLONGFI
9fb0: 4e 4c 45 41 56 45 49 4d 41 47 45 4f 49 4c 20 54  NLEAVEIMAGEOIL T
9fc0: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
9fd0: 20 20 5a 46 41 4d 49 4c 59 56 49 53 55 41 4c 4f    ZFAMILYVISUALO
9fe0: 57 4e 45 52 4d 41 54 54 45 52 20 42 4c 4f 42 2c  WNERMATTER BLOB,
9ff0: 22 0a 20 20 20 20 22 20 20 5a 47 4f 4c 44 59 4f  ".    "  ZGOLDYO
a000: 55 4e 47 49 4e 49 54 49 41 4c 4e 4f 53 45 20 46  UNGINITIALNOSE F
a010: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 43  LOAT,".    "  ZC
a020: 41 55 53 45 53 41 4c 41 4d 49 54 45 52 4d 43 59  AUSESALAMITERMCY
a030: 41 4e 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20  AN BLOB,".    " 
a040: 20 5a 53 50 52 45 41 44 4d 4f 54 4f 52 42 49 53   ZSPREADMOTORBIS
a050: 43 55 49 54 42 41 43 4f 4e 20 46 4c 4f 41 54 2c  CUITBACON FLOAT,
a060: 22 0a 20 20 20 20 22 20 20 5a 47 49 46 54 49 43  ".    "  ZGIFTIC
a070: 45 46 49 53 48 47 4c 55 45 48 41 49 52 20 49 4e  EFISHGLUEHAIR IN
a080: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
a090: 4e 4f 54 49 43 45 50 45 41 52 50 4f 4c 49 43 59  NOTICEPEARPOLICY
a0a0: 4a 55 49 43 45 20 54 49 4d 45 53 54 41 4d 50 2c  JUICE TIMESTAMP,
a0b0: 22 0a 20 20 20 20 22 20 20 5a 42 41 4e 4b 42 55  ".    "  ZBANKBU
a0c0: 46 46 41 4c 4f 52 45 43 4f 56 45 52 4f 52 42 49  FFALORECOVERORBI
a0d0: 54 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  T TIMESTAMP,".  
a0e0: 20 20 22 20 20 5a 4c 4f 4e 47 44 49 45 54 45 53    "  ZLONGDIETES
a0f0: 53 41 59 4e 41 54 55 52 45 20 46 4c 4f 41 54 2c  SAYNATURE FLOAT,
a100: 22 0a 20 20 20 20 22 20 20 5a 41 43 54 49 4f 4e  ".    "  ZACTION
a110: 52 41 4e 47 45 45 4c 45 47 41 4e 54 4e 45 55 54  RANGEELEGANTNEUT
a120: 52 4f 4e 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  RON BLOB,".    "
a130: 20 20 5a 43 41 44 45 54 42 52 49 47 48 54 50 4c    ZCADETBRIGHTPL
a140: 41 4e 45 54 42 41 4e 4b 20 54 49 4d 45 53 54 41  ANETBANK TIMESTA
a150: 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 41 49 52  MP,".    "  ZAIR
a160: 46 4f 52 47 49 56 45 48 45 41 44 46 52 4f 47 20  FORGIVEHEADFROG 
a170: 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 53  BLOB,".    "  ZS
a180: 48 41 52 4b 4a 55 53 54 46 52 55 49 54 4d 4f 56  HARKJUSTFRUITMOV
a190: 49 45 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20  IE VARCHAR,".   
a1a0: 20 22 20 20 5a 46 41 52 4d 45 52 4d 4f 52 4e 49   "  ZFARMERMORNI
a1b0: 4e 47 4d 49 52 52 4f 52 43 4f 4e 43 45 52 4e 20  NGMIRRORCONCERN 
a1c0: 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 57  BLOB,".    "  ZW
a1d0: 4f 4f 44 50 4f 45 54 52 59 43 4f 42 42 4c 45 52  OODPOETRYCOBBLER
a1e0: 42 45 4e 43 48 20 56 41 52 43 48 41 52 2c 22 0a  BENCH VARCHAR,".
a1f0: 20 20 20 20 22 20 20 5a 48 41 46 4e 49 55 4d 53      "  ZHAFNIUMS
a200: 43 52 49 50 54 53 41 4c 41 44 4d 4f 54 4f 52 20  CRIPTSALADMOTOR 
a210: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
a220: 20 5a 50 52 4f 42 4c 45 4d 43 4c 55 42 50 4f 50   ZPROBLEMCLUBPOP
a230: 4f 56 45 52 4a 45 4c 4c 59 20 46 4c 4f 41 54 2c  OVERJELLY FLOAT,
a240: 22 0a 20 20 20 20 22 20 20 5a 45 49 47 48 54 4c  ".    "  ZEIGHTL
a250: 45 41 44 45 52 57 4f 52 4b 45 52 4d 4f 53 54 20  EADERWORKERMOST 
a260: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
a270: 22 20 20 5a 47 4c 41 53 53 52 45 53 45 52 56 45  "  ZGLASSRESERVE
a280: 42 41 52 49 55 4d 4d 45 41 4c 20 42 4c 4f 42 2c  BARIUMMEAL BLOB,
a290: 22 0a 20 20 20 20 22 20 20 5a 43 4c 41 4d 42 49  ".    "  ZCLAMBI
a2a0: 54 41 52 55 47 55 4c 41 46 41 4a 49 54 41 20 42  TARUGULAFAJITA B
a2b0: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 44 45  LOB,".    "  ZDE
a2c0: 43 41 44 45 4a 4f 59 4f 55 53 57 41 56 45 48 41  CADEJOYOUSWAVEHA
a2d0: 42 49 54 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  BIT FLOAT,".    
a2e0: 22 20 20 5a 43 4f 4d 50 41 4e 59 53 55 4d 4d 45  "  ZCOMPANYSUMME
a2f0: 52 46 49 42 45 52 45 4c 46 20 49 4e 54 45 47 45  RFIBERELF INTEGE
a300: 52 2c 22 0a 20 20 20 20 22 20 20 5a 54 52 45 41  R,".    "  ZTREA
a310: 54 54 45 53 54 51 55 49 4c 4c 43 48 41 52 47 45  TTESTQUILLCHARGE
a320: 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20   TIMESTAMP,".   
a330: 20 22 20 20 5a 42 52 4f 57 42 41 4c 41 4e 43 45   "  ZBROWBALANCE
a340: 4b 45 59 43 48 4f 57 44 45 52 20 46 4c 4f 41 54  KEYCHOWDER FLOAT
a350: 2c 22 0a 20 20 20 20 22 20 20 5a 50 45 41 43 48  ,".    "  ZPEACH
a360: 43 4f 50 50 45 52 44 49 4e 4e 45 52 4c 41 4b 45  COPPERDINNERLAKE
a370: 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20   FLOAT,".    "  
a380: 5a 44 52 59 57 41 4c 4c 42 45 59 4f 4e 44 42 52  ZDRYWALLBEYONDBR
a390: 4f 57 4e 42 4f 57 4c 20 56 41 52 43 48 41 52 2c  OWNBOWL VARCHAR,
a3a0: 22 0a 20 20 20 20 22 20 20 5a 42 45 4c 4c 59 43  ".    "  ZBELLYC
a3b0: 52 41 53 48 49 54 45 4d 4c 41 43 4b 20 42 4c 4f  RASHITEMLACK BLO
a3c0: 42 2c 22 0a 20 20 20 20 22 20 20 5a 54 45 4e 4e  B,".    "  ZTENN
a3d0: 49 53 43 59 43 4c 45 42 49 4c 4c 4f 46 46 49 43  ISCYCLEBILLOFFIC
a3e0: 45 52 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20  ER INTEGER,".   
a3f0: 20 22 20 20 5a 4d 41 4c 4c 45 51 55 49 50 54 48   "  ZMALLEQUIPTH
a400: 41 4e 4b 53 47 4c 55 45 20 46 4c 4f 41 54 2c 22  ANKSGLUE FLOAT,"
a410: 0a 20 20 20 20 22 20 20 5a 4d 49 53 53 52 45 50  .    "  ZMISSREP
a420: 4c 59 48 55 4d 41 4e 4c 49 56 49 4e 47 20 49 4e  LYHUMANLIVING IN
a430: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
a440: 4b 49 57 49 56 49 53 55 41 4c 50 52 49 44 45 41  KIWIVISUALPRIDEA
a450: 50 50 4c 45 20 56 41 52 43 48 41 52 2c 22 0a 20  PPLE VARCHAR,". 
a460: 20 20 20 22 20 20 5a 57 49 53 48 48 49 54 53 4b     "  ZWISHHITSK
a470: 49 4e 4d 4f 54 4f 52 20 42 4c 4f 42 2c 22 0a 20  INMOTOR BLOB,". 
a480: 20 20 20 22 20 20 5a 43 41 4c 4d 52 41 43 43 4f     "  ZCALMRACCO
a490: 4f 4e 50 52 4f 47 52 41 4d 44 45 42 49 54 20 56  ONPROGRAMDEBIT V
a4a0: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
a4b0: 5a 53 48 49 4e 59 41 53 53 49 53 54 4c 49 56 49  ZSHINYASSISTLIVI
a4c0: 4e 47 43 52 41 42 20 56 41 52 43 48 41 52 2c 22  NGCRAB VARCHAR,"
a4d0: 0a 20 20 20 20 22 20 20 5a 52 45 53 4f 4c 56 45  .    "  ZRESOLVE
a4e0: 57 52 49 53 54 57 52 41 50 41 50 50 4c 45 20 56  WRISTWRAPAPPLE V
a4f0: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
a500: 5a 41 50 50 45 41 4c 53 49 4d 50 4c 45 53 45 43  ZAPPEALSIMPLESEC
a510: 4f 4e 44 48 4f 55 53 49 4e 47 20 42 4c 4f 42 2c  ONDHOUSING BLOB,
a520: 22 0a 20 20 20 20 22 20 20 5a 43 4f 52 4e 45 52  ".    "  ZCORNER
a530: 41 4e 43 48 4f 52 54 41 50 45 44 49 56 45 52 20  ANCHORTAPEDIVER 
a540: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
a550: 22 20 20 5a 4d 45 4d 4f 52 59 52 45 51 55 45 53  "  ZMEMORYREQUES
a560: 54 53 4f 55 52 43 45 42 49 47 20 56 41 52 43 48  TSOURCEBIG VARCH
a570: 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 54 52 59  AR,".    "  ZTRY
a580: 46 41 43 54 4b 45 45 50 4d 49 4c 4b 20 54 49 4d  FACTKEEPMILK TIM
a590: 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20  ESTAMP,".    "  
a5a0: 5a 44 49 56 45 52 50 41 49 4e 54 4c 45 41 54 48  ZDIVERPAINTLEATH
a5b0: 45 52 45 41 53 59 20 49 4e 54 45 47 45 52 2c 22  EREASY INTEGER,"
a5c0: 0a 20 20 20 20 22 20 20 5a 53 4f 52 54 4d 49 53  .    "  ZSORTMIS
a5d0: 54 59 51 55 4f 54 45 43 41 42 42 41 47 45 20 42  TYQUOTECABBAGE B
a5e0: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 54 55  LOB,".    "  ZTU
a5f0: 4e 45 47 41 53 42 55 46 46 41 4c 4f 43 41 50 49  NEGASBUFFALOCAPI
a600: 54 41 4c 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  TAL BLOB,".    "
a610: 20 20 5a 46 49 4c 4c 53 54 4f 50 4c 41 57 4a 4f    ZFILLSTOPLAWJO
a620: 59 46 55 4c 20 46 4c 4f 41 54 2c 22 0a 20 20 20  YFUL FLOAT,".   
a630: 20 22 20 20 5a 53 54 45 45 4c 43 41 52 45 46 55   "  ZSTEELCAREFU
a640: 4c 50 4c 41 54 45 4e 55 4d 42 45 52 20 46 4c 4f  LPLATENUMBER FLO
a650: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 47 49 56  AT,".    "  ZGIV
a660: 45 56 49 56 49 44 44 49 56 49 4e 45 4d 45 41 4e  EVIVIDDIVINEMEAN
a670: 49 4e 47 20 49 4e 54 45 47 45 52 2c 22 0a 20 20  ING INTEGER,".  
a680: 20 20 22 20 20 5a 54 52 45 41 54 50 41 43 4b 46    "  ZTREATPACKF
a690: 55 54 55 52 45 43 4f 4e 56 45 52 54 20 56 41 52  UTURECONVERT VAR
a6a0: 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 43  CHAR,".    "  ZC
a6b0: 41 4c 4d 4c 59 47 45 4d 46 49 4e 49 53 48 45 46  ALMLYGEMFINISHEF
a6c0: 46 45 43 54 20 49 4e 54 45 47 45 52 2c 22 0a 20  FECT INTEGER,". 
a6d0: 20 20 20 22 20 20 5a 43 41 42 42 41 47 45 53 4f     "  ZCABBAGESO
a6e0: 43 4b 45 41 53 45 4d 49 4e 55 54 45 20 42 4c 4f  CKEASEMINUTE BLO
a6f0: 42 2c 22 0a 20 20 20 20 22 20 20 5a 50 4c 41 4e  B,".    "  ZPLAN
a700: 45 54 46 41 4d 49 4c 59 50 55 52 45 4d 45 4d 4f  ETFAMILYPUREMEMO
a710: 52 59 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20  RY TIMESTAMP,". 
a720: 20 20 20 22 20 20 5a 4d 45 52 52 59 43 52 41 43     "  ZMERRYCRAC
a730: 4b 54 52 41 49 4e 4c 45 41 44 45 52 20 42 4c 4f  KTRAINLEADER BLO
a740: 42 2c 22 0a 20 20 20 20 22 20 20 5a 4d 49 4e 4f  B,".    "  ZMINO
a750: 52 57 41 59 50 41 50 45 52 43 4c 41 53 53 59 20  RWAYPAPERCLASSY 
a760: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
a770: 22 20 20 5a 45 41 47 4c 45 4c 49 4e 45 4d 49 4e  "  ZEAGLELINEMIN
a780: 45 4d 41 49 4c 20 56 41 52 43 48 41 52 2c 22 0a  EMAIL VARCHAR,".
a790: 20 20 20 20 22 20 20 5a 52 45 53 4f 52 54 59 41      "  ZRESORTYA
a7a0: 52 44 47 52 45 45 4e 4c 45 54 20 54 49 4d 45 53  RDGREENLET TIMES
a7b0: 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 59  TAMP,".    "  ZY
a7c0: 41 52 44 4f 52 45 47 41 4e 4f 56 49 56 49 44 4a  ARDOREGANOVIVIDJ
a7d0: 45 57 45 4c 20 54 49 4d 45 53 54 41 4d 50 2c 22  EWEL TIMESTAMP,"
a7e0: 0a 20 20 20 20 22 20 20 5a 50 55 52 45 43 41 4b  .    "  ZPURECAK
a7f0: 45 56 49 56 49 44 4e 45 41 54 4c 59 20 46 4c 4f  EVIVIDNEATLY FLO
a800: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 41 53 4b  AT,".    "  ZASK
a810: 43 4f 4e 54 41 43 54 4d 4f 4e 49 54 4f 52 46 55  CONTACTMONITORFU
a820: 4e 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  N TIMESTAMP,".  
a830: 20 20 22 20 20 5a 4d 4f 56 45 57 48 4f 47 41 4d    "  ZMOVEWHOGAM
a840: 4d 41 49 4e 43 48 20 56 41 52 43 48 41 52 2c 22  MAINCH VARCHAR,"
a850: 0a 20 20 20 20 22 20 20 5a 4c 45 54 54 55 43 45  .    "  ZLETTUCE
a860: 42 49 52 44 4d 45 45 54 44 45 42 41 54 45 20 54  BIRDMEETDEBATE T
a870: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
a880: 20 20 5a 47 45 4e 45 4e 41 54 55 52 41 4c 48 45    ZGENENATURALHE
a890: 41 52 49 4e 47 4b 49 54 45 20 56 41 52 43 48 41  ARINGKITE VARCHA
a8a0: 52 2c 22 0a 20 20 20 20 22 20 20 5a 4d 55 46 46  R,".    "  ZMUFF
a8b0: 49 4e 44 52 59 45 52 44 52 41 57 46 4f 52 54 55  INDRYERDRAWFORTU
a8c0: 4e 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22  NE FLOAT,".    "
a8d0: 20 20 5a 47 52 41 59 53 55 52 56 45 59 57 49 52    ZGRAYSURVEYWIR
a8e0: 45 4c 4f 56 45 20 46 4c 4f 41 54 2c 22 0a 20 20  ELOVE FLOAT,".  
a8f0: 20 20 22 20 20 5a 50 4c 49 45 52 53 50 52 49 4e    "  ZPLIERSPRIN
a900: 54 41 53 4b 4f 52 45 47 41 4e 4f 20 49 4e 54 45  TASKOREGANO INTE
a910: 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 54 52  GER,".    "  ZTR
a920: 41 56 45 4c 44 52 49 56 45 52 43 4f 4e 54 45 53  AVELDRIVERCONTES
a930: 54 4c 49 4c 59 20 49 4e 54 45 47 45 52 2c 22 0a  TLILY INTEGER,".
a940: 20 20 20 20 22 20 20 5a 48 55 4d 4f 52 53 50 49      "  ZHUMORSPI
a950: 43 45 53 41 4e 44 4b 49 44 4e 45 59 20 54 49 4d  CESANDKIDNEY TIM
a960: 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20  ESTAMP,".    "  
a970: 5a 41 52 53 45 4e 49 43 53 41 4d 50 4c 45 57 41  ZARSENICSAMPLEWA
a980: 49 54 4d 55 4f 4e 20 49 4e 54 45 47 45 52 2c 22  ITMUON INTEGER,"
a990: 0a 20 20 20 20 22 20 20 5a 4c 41 43 45 41 44 44  .    "  ZLACEADD
a9a0: 52 45 53 53 47 52 4f 55 4e 44 43 41 52 45 46 55  RESSGROUNDCAREFU
a9b0: 4c 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20  L FLOAT,".    " 
a9c0: 20 5a 42 41 4d 42 4f 4f 4d 45 53 53 57 41 53 41   ZBAMBOOMESSWASA
a9d0: 42 49 45 56 45 4e 49 4e 47 20 42 4c 4f 42 2c 22  BIEVENING BLOB,"
a9e0: 0a 20 20 20 20 22 20 20 5a 4f 4e 45 52 45 4c 45  .    "  ZONERELE
a9f0: 41 53 45 41 56 45 52 41 47 45 4e 55 52 53 45 20  ASEAVERAGENURSE 
aa00: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
aa10: 20 5a 52 41 44 49 41 4e 54 57 48 45 4e 54 52 59   ZRADIANTWHENTRY
aa20: 43 41 52 44 20 54 49 4d 45 53 54 41 4d 50 2c 22  CARD TIMESTAMP,"
aa30: 0a 20 20 20 20 22 20 20 5a 52 45 57 41 52 44 49  .    "  ZREWARDI
aa40: 4e 53 49 44 45 4d 41 4e 47 4f 49 4e 54 45 4e 53  NSIDEMANGOINTENS
aa50: 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20  E FLOAT,".    " 
aa60: 20 5a 4e 45 41 54 53 54 45 57 50 41 52 54 49 52   ZNEATSTEWPARTIR
aa70: 4f 4e 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20  ON TIMESTAMP,". 
aa80: 20 20 20 22 20 20 5a 4f 55 54 53 49 44 45 50 45     "  ZOUTSIDEPE
aa90: 41 48 45 4e 43 4f 55 4e 54 49 43 45 20 54 49 4d  AHENCOUNTICE TIM
aaa0: 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20  ESTAMP,".    "  
aab0: 5a 43 52 45 41 4d 45 56 45 4e 49 4e 47 4c 49 50  ZCREAMEVENINGLIP
aac0: 42 52 41 4e 43 48 20 46 4c 4f 41 54 2c 22 0a 20  BRANCH FLOAT,". 
aad0: 20 20 20 22 20 20 5a 57 48 41 4c 45 4d 41 54 48     "  ZWHALEMATH
aae0: 41 56 4f 43 41 44 4f 43 4f 50 50 45 52 20 46 4c  AVOCADOCOPPER FL
aaf0: 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 4c 49  OAT,".    "  ZLI
ab00: 46 45 55 53 45 4c 45 41 46 59 42 45 4c 4c 20 46  FEUSELEAFYBELL F
ab10: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 57  LOAT,".    "  ZW
ab20: 45 41 4c 54 48 4c 49 4e 45 4e 47 4c 45 45 46 55  EALTHLINENGLEEFU
ab30: 4c 44 41 59 20 56 41 52 43 48 41 52 2c 22 0a 20  LDAY VARCHAR,". 
ab40: 20 20 20 22 20 20 5a 46 41 43 45 49 4e 56 49 54     "  ZFACEINVIT
ab50: 45 54 41 4c 4b 47 4f 4c 44 20 42 4c 4f 42 2c 22  ETALKGOLD BLOB,"
ab60: 0a 20 20 20 20 22 20 20 5a 57 45 53 54 41 4d 4f  .    "  ZWESTAMO
ab70: 55 4e 54 41 46 46 45 43 54 48 45 41 52 49 4e 47  UNTAFFECTHEARING
ab80: 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22   INTEGER,".    "
ab90: 20 20 5a 44 45 4c 41 59 4f 55 54 43 4f 4d 45 48    ZDELAYOUTCOMEH
aba0: 4f 52 4e 41 47 45 4e 43 59 20 49 4e 54 45 47 45  ORNAGENCY INTEGE
abb0: 52 2c 22 0a 20 20 20 20 22 20 20 5a 42 49 47 54  R,".    "  ZBIGT
abc0: 48 49 4e 4b 43 4f 4e 56 45 52 54 45 43 4f 4e 4f  HINKCONVERTECONO
abd0: 4d 59 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20  MY BLOB,".    " 
abe0: 20 5a 42 41 53 45 47 4f 55 44 41 52 45 47 55 4c   ZBASEGOUDAREGUL
abf0: 41 52 46 4f 52 47 49 56 45 20 54 49 4d 45 53 54  ARFORGIVE TIMEST
ac00: 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 50 41  AMP,".    "  ZPA
ac10: 54 54 45 52 4e 43 4c 4f 52 49 4e 45 47 52 41 4e  TTERNCLORINEGRAN
ac20: 44 43 4f 4c 42 59 20 54 49 4d 45 53 54 41 4d 50  DCOLBY TIMESTAMP
ac30: 2c 22 0a 20 20 20 20 22 20 20 5a 43 59 41 4e 42  ,".    "  ZCYANB
ac40: 41 53 45 46 45 45 44 41 44 52 4f 49 54 20 49 4e  ASEFEEDADROIT IN
ac50: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
ac60: 43 41 52 52 59 46 4c 4f 4f 52 4d 49 4e 4e 4f 57  CARRYFLOORMINNOW
ac70: 44 52 41 47 4f 4e 20 54 49 4d 45 53 54 41 4d 50  DRAGON TIMESTAMP
ac80: 2c 22 0a 20 20 20 20 22 20 20 5a 49 4d 41 47 45  ,".    "  ZIMAGE
ac90: 50 45 4e 43 49 4c 4f 54 48 45 52 42 4f 54 54 4f  PENCILOTHERBOTTO
aca0: 4d 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20  M FLOAT,".    " 
acb0: 20 5a 58 45 4e 4f 4e 46 4c 49 47 48 54 50 41 4c   ZXENONFLIGHTPAL
acc0: 45 41 50 50 4c 45 20 54 49 4d 45 53 54 41 4d 50  EAPPLE TIMESTAMP
acd0: 2c 22 0a 20 20 20 20 22 20 20 5a 48 45 52 52 49  ,".    "  ZHERRI
ace0: 4e 47 4a 4f 4b 45 46 45 41 54 55 52 45 48 4f 50  NGJOKEFEATUREHOP
acf0: 45 46 55 4c 20 46 4c 4f 41 54 2c 22 0a 20 20 20  EFUL FLOAT,".   
ad00: 20 22 20 20 5a 43 41 50 59 45 41 52 4c 59 52 49   "  ZCAPYEARLYRI
ad10: 56 45 54 42 52 55 53 48 20 46 4c 4f 41 54 2c 22  VETBRUSH FLOAT,"
ad20: 0a 20 20 20 20 22 20 20 5a 41 47 45 52 45 45 44  .    "  ZAGEREED
ad30: 46 52 4f 47 42 41 53 4b 45 54 20 56 41 52 43 48  FROGBASKET VARCH
ad40: 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 55 53 55  AR,".    "  ZUSU
ad50: 41 4c 42 4f 44 59 48 41 4c 49 42 55 54 44 49 41  ALBODYHALIBUTDIA
ad60: 4d 4f 4e 44 20 56 41 52 43 48 41 52 2c 22 0a 20  MOND VARCHAR,". 
ad70: 20 20 20 22 20 20 5a 46 4f 4f 54 54 41 50 57 4f     "  ZFOOTTAPWO
ad80: 52 44 45 4e 54 52 59 20 56 41 52 43 48 41 52 2c  RDENTRY VARCHAR,
ad90: 22 0a 20 20 20 20 22 20 20 5a 44 49 53 48 4b 45  ".    "  ZDISHKE
ada0: 45 50 42 4c 45 53 54 4d 4f 4e 49 54 4f 52 20 46  EPBLESTMONITOR F
adb0: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 42  LOAT,".    "  ZB
adc0: 52 4f 41 44 41 42 4c 45 53 4f 4c 49 44 43 41 53  ROADABLESOLIDCAS
add0: 55 41 4c 20 49 4e 54 45 47 45 52 2c 22 0a 20 20  UAL INTEGER,".  
ade0: 20 20 22 20 20 5a 53 51 55 41 52 45 47 4c 45 45    "  ZSQUAREGLEE
adf0: 46 55 4c 43 48 49 4c 44 4c 49 47 48 54 20 49 4e  FULCHILDLIGHT IN
ae00: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
ae10: 48 4f 4c 49 44 41 59 48 45 41 44 50 4f 4e 59 44  HOLIDAYHEADPONYD
ae20: 45 54 41 49 4c 20 49 4e 54 45 47 45 52 2c 22 0a  ETAIL INTEGER,".
ae30: 20 20 20 20 22 20 20 5a 47 45 4e 45 52 41 4c 52      "  ZGENERALR
ae40: 45 53 4f 52 54 53 4b 59 4f 50 45 4e 20 54 49 4d  ESORTSKYOPEN TIM
ae50: 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20  ESTAMP,".    "  
ae60: 5a 47 4c 41 44 53 50 52 41 59 4b 49 44 4e 45 59  ZGLADSPRAYKIDNEY
ae70: 47 55 50 50 59 20 56 41 52 43 48 41 52 2c 22 0a  GUPPY VARCHAR,".
ae80: 20 20 20 20 22 20 20 5a 53 57 49 4d 48 45 41 56      "  ZSWIMHEAV
ae90: 59 4d 45 4e 54 49 4f 4e 4b 49 4e 44 20 42 4c 4f  YMENTIONKIND BLO
aea0: 42 2c 22 0a 20 20 20 20 22 20 20 5a 4d 45 53 53  B,".    "  ZMESS
aeb0: 59 53 55 4c 46 55 52 44 52 45 41 4d 46 45 53 54  YSULFURDREAMFEST
aec0: 49 56 45 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  IVE BLOB,".    "
aed0: 20 20 5a 53 4b 59 53 4b 59 43 4c 41 53 53 49 43    ZSKYSKYCLASSIC
aee0: 42 52 49 45 46 20 56 41 52 43 48 41 52 2c 22 0a  BRIEF VARCHAR,".
aef0: 20 20 20 20 22 20 20 5a 44 49 4c 4c 41 53 4b 48      "  ZDILLASKH
af00: 4f 4b 49 4c 45 4d 4f 4e 20 46 4c 4f 41 54 2c 22  OKILEMON FLOAT,"
af10: 0a 20 20 20 20 22 20 20 5a 4a 55 4e 49 4f 52 53  .    "  ZJUNIORS
af20: 48 4f 57 50 52 45 53 53 4e 4f 56 41 20 46 4c 4f  HOWPRESSNOVA FLO
af30: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 53 49 5a  AT,".    "  ZSIZ
af40: 45 54 4f 45 41 57 41 52 44 46 52 45 53 48 20 54  ETOEAWARDFRESH T
af50: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
af60: 20 20 5a 4b 45 59 46 41 49 4c 41 50 52 49 43 4f    ZKEYFAILAPRICO
af70: 54 4d 45 54 41 4c 20 56 41 52 43 48 41 52 2c 22  TMETAL VARCHAR,"
af80: 0a 20 20 20 20 22 20 20 5a 48 41 4e 44 59 52 45  .    "  ZHANDYRE
af90: 50 41 49 52 50 52 4f 54 4f 4e 41 49 52 50 4f 52  PAIRPROTONAIRPOR
afa0: 54 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20  T VARCHAR,".    
afb0: 22 20 20 5a 50 4f 53 54 50 52 4f 54 45 49 4e 48  "  ZPOSTPROTEINH
afc0: 41 4e 44 4c 45 41 43 54 4f 52 20 42 4c 4f 42 22  ANDLEACTOR BLOB"
afd0: 0a 20 20 20 20 22 29 3b 22 0a 20 20 29 3b 0a 20  .    ");".  );. 
afe0: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
aff0: 61 72 65 28 0a 20 20 20 20 22 49 4e 53 45 52 54  are(.    "INSERT
b000: 20 49 4e 54 4f 20 5a 4c 4f 4f 4b 53 4c 49 4b 45   INTO ZLOOKSLIKE
b010: 43 4f 52 45 44 41 54 41 28 5a 50 4b 2c 5a 41 49  COREDATA(ZPK,ZAI
b020: 52 46 4f 52 47 49 56 45 48 45 41 44 46 52 4f 47  RFORGIVEHEADFROG
b030: 2c 22 0a 20 20 20 20 22 5a 47 49 46 54 49 43 45  ,".    "ZGIFTICE
b040: 46 49 53 48 47 4c 55 45 48 41 49 52 2c 5a 44 45  FISHGLUEHAIR,ZDE
b050: 4c 41 59 4f 55 54 43 4f 4d 45 48 4f 52 4e 41 47  LAYOUTCOMEHORNAG
b060: 45 4e 43 59 2c 5a 53 4c 45 45 50 59 55 53 45 52  ENCY,ZSLEEPYUSER
b070: 47 52 41 4e 44 42 4f 57 4c 2c 22 0a 20 20 20 20  GRANDBOWL,".    
b080: 22 5a 47 4c 41 53 53 52 45 53 45 52 56 45 42 41  "ZGLASSRESERVEBA
b090: 52 49 55 4d 4d 45 41 4c 2c 5a 42 52 49 45 46 47  RIUMMEAL,ZBRIEFG
b0a0: 4f 42 59 44 4f 44 47 45 52 48 45 49 47 48 54 2c  OBYDODGERHEIGHT,
b0b0: 22 0a 20 20 20 20 22 5a 42 41 4d 42 4f 4f 4d 45  ".    "ZBAMBOOME
b0c0: 53 53 57 41 53 41 42 49 45 56 45 4e 49 4e 47 2c  SSWASABIEVENING,
b0d0: 5a 46 41 52 4d 45 52 4d 4f 52 4e 49 4e 47 4d 49  ZFARMERMORNINGMI
b0e0: 52 52 4f 52 43 4f 4e 43 45 52 4e 2c 22 0a 20 20  RRORCONCERN,".  
b0f0: 20 20 22 5a 54 52 45 41 54 50 41 43 4b 46 55 54    "ZTREATPACKFUT
b100: 55 52 45 43 4f 4e 56 45 52 54 2c 5a 43 41 55 53  URECONVERT,ZCAUS
b110: 45 53 41 4c 41 4d 49 54 45 52 4d 43 59 41 4e 2c  ESALAMITERMCYAN,
b120: 5a 43 41 4c 4d 52 41 43 43 4f 4f 4e 50 52 4f 47  ZCALMRACCOONPROG
b130: 52 41 4d 44 45 42 49 54 2c 22 0a 20 20 20 20 22  RAMDEBIT,".    "
b140: 5a 48 4f 4c 49 44 41 59 48 45 41 44 50 4f 4e 59  ZHOLIDAYHEADPONY
b150: 44 45 54 41 49 4c 2c 5a 57 4f 4f 44 50 4f 45 54  DETAIL,ZWOODPOET
b160: 52 59 43 4f 42 42 4c 45 52 42 45 4e 43 48 2c 5a  RYCOBBLERBENCH,Z
b170: 48 41 46 4e 49 55 4d 53 43 52 49 50 54 53 41 4c  HAFNIUMSCRIPTSAL
b180: 41 44 4d 4f 54 4f 52 2c 22 0a 20 20 20 20 22 5a  ADMOTOR,".    "Z
b190: 55 53 55 41 4c 42 4f 44 59 48 41 4c 49 42 55 54  USUALBODYHALIBUT
b1a0: 44 49 41 4d 4f 4e 44 2c 5a 4f 55 54 53 49 44 45  DIAMOND,ZOUTSIDE
b1b0: 50 45 41 48 45 4e 43 4f 55 4e 54 49 43 45 2c 5a  PEAHENCOUNTICE,Z
b1c0: 44 49 56 45 52 50 41 49 4e 54 4c 45 41 54 48 45  DIVERPAINTLEATHE
b1d0: 52 45 41 53 59 2c 22 0a 20 20 20 20 22 5a 57 45  REASY,".    "ZWE
b1e0: 53 54 41 4d 4f 55 4e 54 41 46 46 45 43 54 48 45  STAMOUNTAFFECTHE
b1f0: 41 52 49 4e 47 2c 5a 53 49 5a 45 54 4f 45 41 57  ARING,ZSIZETOEAW
b200: 41 52 44 46 52 45 53 48 2c 5a 44 45 57 50 45 41  ARDFRESH,ZDEWPEA
b210: 43 48 43 41 52 45 45 52 43 45 4c 45 52 59 2c 22  CHCAREERCELERY,"
b220: 0a 20 20 20 20 22 5a 53 54 45 45 4c 43 41 52 45  .    "ZSTEELCARE
b230: 46 55 4c 50 4c 41 54 45 4e 55 4d 42 45 52 2c 5a  FULPLATENUMBER,Z
b240: 43 59 41 4e 42 41 53 45 46 45 45 44 41 44 52 4f  CYANBASEFEEDADRO
b250: 49 54 2c 5a 43 41 4c 4d 4c 59 47 45 4d 46 49 4e  IT,ZCALMLYGEMFIN
b260: 49 53 48 45 46 46 45 43 54 2c 22 0a 20 20 20 20  ISHEFFECT,".    
b270: 22 5a 48 41 4e 44 59 52 45 50 41 49 52 50 52 4f  "ZHANDYREPAIRPRO
b280: 54 4f 4e 41 49 52 50 4f 52 54 2c 5a 47 45 4e 45  TONAIRPORT,ZGENE
b290: 4e 41 54 55 52 41 4c 48 45 41 52 49 4e 47 4b 49  NATURALHEARINGKI
b2a0: 54 45 2c 5a 42 52 4f 41 44 41 42 4c 45 53 4f 4c  TE,ZBROADABLESOL
b2b0: 49 44 43 41 53 55 41 4c 2c 22 0a 20 20 20 20 22  IDCASUAL,".    "
b2c0: 5a 50 4f 53 54 50 52 4f 54 45 49 4e 48 41 4e 44  ZPOSTPROTEINHAND
b2d0: 4c 45 41 43 54 4f 52 2c 5a 4c 41 43 45 41 44 44  LEACTOR,ZLACEADD
b2e0: 52 45 53 53 47 52 4f 55 4e 44 43 41 52 45 46 55  RESSGROUNDCAREFU
b2f0: 4c 2c 5a 49 4d 41 47 45 50 45 4e 43 49 4c 4f 54  L,ZIMAGEPENCILOT
b300: 48 45 52 42 4f 54 54 4f 4d 2c 22 0a 20 20 20 20  HERBOTTOM,".    
b310: 22 5a 50 52 4f 42 4c 45 4d 43 4c 55 42 50 4f 50  "ZPROBLEMCLUBPOP
b320: 4f 56 45 52 4a 45 4c 4c 59 2c 5a 50 41 54 54 45  OVERJELLY,ZPATTE
b330: 52 4e 43 4c 4f 52 49 4e 45 47 52 41 4e 44 43 4f  RNCLORINEGRANDCO
b340: 4c 42 59 2c 5a 4e 45 41 54 53 54 45 57 50 41 52  LBY,ZNEATSTEWPAR
b350: 54 49 52 4f 4e 2c 22 0a 20 20 20 20 22 5a 41 50  TIRON,".    "ZAP
b360: 50 45 41 4c 53 49 4d 50 4c 45 53 45 43 4f 4e 44  PEALSIMPLESECOND
b370: 48 4f 55 53 49 4e 47 2c 5a 4d 4f 56 45 57 48 4f  HOUSING,ZMOVEWHO
b380: 47 41 4d 4d 41 49 4e 43 48 2c 5a 54 45 4e 4e 49  GAMMAINCH,ZTENNI
b390: 53 43 59 43 4c 45 42 49 4c 4c 4f 46 46 49 43 45  SCYCLEBILLOFFICE
b3a0: 52 2c 22 0a 20 20 20 20 22 5a 53 48 41 52 4b 4a  R,".    "ZSHARKJ
b3b0: 55 53 54 46 52 55 49 54 4d 4f 56 49 45 2c 5a 4b  USTFRUITMOVIE,ZK
b3c0: 45 59 46 41 49 4c 41 50 52 49 43 4f 54 4d 45 54  EYFAILAPRICOTMET
b3d0: 41 4c 2c 5a 43 4f 4d 50 41 4e 59 53 55 4d 4d 45  AL,ZCOMPANYSUMME
b3e0: 52 46 49 42 45 52 45 4c 46 2c 22 0a 20 20 20 20  RFIBERELF,".    
b3f0: 22 5a 54 45 52 4d 46 49 54 54 49 4e 47 48 4f 55  "ZTERMFITTINGHOU
b400: 53 49 4e 47 43 4f 4d 4d 41 4e 44 2c 5a 52 45 53  SINGCOMMAND,ZRES
b410: 4f 52 54 59 41 52 44 47 52 45 45 4e 4c 45 54 2c  ORTYARDGREENLET,
b420: 5a 43 41 42 42 41 47 45 53 4f 43 4b 45 41 53 45  ZCABBAGESOCKEASE
b430: 4d 49 4e 55 54 45 2c 22 0a 20 20 20 20 22 5a 53  MINUTE,".    "ZS
b440: 51 55 41 52 45 47 4c 45 45 46 55 4c 43 48 49 4c  QUAREGLEEFULCHIL
b450: 44 4c 49 47 48 54 2c 5a 4f 4e 45 52 45 4c 45 41  DLIGHT,ZONERELEA
b460: 53 45 41 56 45 52 41 47 45 4e 55 52 53 45 2c 5a  SEAVERAGENURSE,Z
b470: 42 49 47 54 48 49 4e 4b 43 4f 4e 56 45 52 54 45  BIGTHINKCONVERTE
b480: 43 4f 4e 4f 4d 59 2c 22 0a 20 20 20 20 22 5a 50  CONOMY,".    "ZP
b490: 4c 49 45 52 53 50 52 49 4e 54 41 53 4b 4f 52 45  LIERSPRINTASKORE
b4a0: 47 41 4e 4f 2c 5a 44 45 43 41 44 45 4a 4f 59 4f  GANO,ZDECADEJOYO
b4b0: 55 53 57 41 56 45 48 41 42 49 54 2c 5a 44 52 59  USWAVEHABIT,ZDRY
b4c0: 57 41 4c 4c 42 45 59 4f 4e 44 42 52 4f 57 4e 42  WALLBEYONDBROWNB
b4d0: 4f 57 4c 2c 22 0a 20 20 20 20 22 5a 43 4c 55 42  OWL,".    "ZCLUB
b4e0: 52 45 4c 45 41 53 45 4c 49 5a 41 52 44 41 44 56  RELEASELIZARDADV
b4f0: 49 43 45 2c 5a 57 48 41 4c 45 4d 41 54 48 41 56  ICE,ZWHALEMATHAV
b500: 4f 43 41 44 4f 43 4f 50 50 45 52 2c 5a 42 45 4c  OCADOCOPPER,ZBEL
b510: 4c 59 43 52 41 53 48 49 54 45 4d 4c 41 43 4b 2c  LYCRASHITEMLACK,
b520: 22 0a 20 20 20 20 22 5a 4c 45 54 54 55 43 45 42  ".    "ZLETTUCEB
b530: 49 52 44 4d 45 45 54 44 45 42 41 54 45 2c 5a 43  IRDMEETDEBATE,ZC
b540: 41 50 41 42 4c 45 54 52 49 50 44 4f 4f 52 41 4c  APABLETRIPDOORAL
b550: 4d 4f 4e 44 2c 5a 52 41 44 49 41 4e 54 57 48 45  MOND,ZRADIANTWHE
b560: 4e 54 52 59 43 41 52 44 2c 22 0a 20 20 20 20 22  NTRYCARD,".    "
b570: 5a 43 41 50 59 45 41 52 4c 59 52 49 56 45 54 42  ZCAPYEARLYRIVETB
b580: 52 55 53 48 2c 5a 41 47 45 52 45 45 44 46 52 4f  RUSH,ZAGEREEDFRO
b590: 47 42 41 53 4b 45 54 2c 5a 53 57 49 4d 48 45 41  GBASKET,ZSWIMHEA
b5a0: 56 59 4d 45 4e 54 49 4f 4e 4b 49 4e 44 2c 22 0a  VYMENTIONKIND,".
b5b0: 20 20 20 20 22 5a 54 52 41 56 45 4c 44 52 49 56      "ZTRAVELDRIV
b5c0: 45 52 43 4f 4e 54 45 53 54 4c 49 4c 59 2c 5a 47  ERCONTESTLILY,ZG
b5d0: 4c 41 44 53 50 52 41 59 4b 49 44 4e 45 59 47 55  LADSPRAYKIDNEYGU
b5e0: 50 50 59 2c 5a 42 41 4e 4b 42 55 46 46 41 4c 4f  PPY,ZBANKBUFFALO
b5f0: 52 45 43 4f 56 45 52 4f 52 42 49 54 2c 22 0a 20  RECOVERORBIT,". 
b600: 20 20 20 22 5a 46 49 4e 47 45 52 44 55 45 50 49     "ZFINGERDUEPI
b610: 5a 5a 41 4f 50 54 49 4f 4e 2c 5a 43 4c 41 4d 42  ZZAOPTION,ZCLAMB
b620: 49 54 41 52 55 47 55 4c 41 46 41 4a 49 54 41 2c  ITARUGULAFAJITA,
b630: 5a 4c 4f 4e 47 46 49 4e 4c 45 41 56 45 49 4d 41  ZLONGFINLEAVEIMA
b640: 47 45 4f 49 4c 2c 22 0a 20 20 20 20 22 5a 4c 4f  GEOIL,".    "ZLO
b650: 4e 47 44 49 45 54 45 53 53 41 59 4e 41 54 55 52  NGDIETESSAYNATUR
b660: 45 2c 5a 4a 55 4e 49 4f 52 53 48 4f 57 50 52 45  E,ZJUNIORSHOWPRE
b670: 53 53 4e 4f 56 41 2c 5a 48 4f 50 45 46 55 4c 47  SSNOVA,ZHOPEFULG
b680: 41 54 45 48 4f 4c 45 43 48 41 4c 4b 2c 22 0a 20  ATEHOLECHALK,". 
b690: 20 20 20 22 5a 44 45 50 4f 53 49 54 50 41 49 52     "ZDEPOSITPAIR
b6a0: 43 4f 4c 4c 45 47 45 43 4f 4d 45 54 2c 5a 57 45  COLLEGECOMET,ZWE
b6b0: 41 4c 54 48 4c 49 4e 45 4e 47 4c 45 45 46 55 4c  ALTHLINENGLEEFUL
b6c0: 44 41 59 2c 5a 46 49 4c 4c 53 54 4f 50 4c 41 57  DAY,ZFILLSTOPLAW
b6d0: 4a 4f 59 46 55 4c 2c 22 0a 20 20 20 20 22 5a 54  JOYFUL,".    "ZT
b6e0: 55 4e 45 47 41 53 42 55 46 46 41 4c 4f 43 41 50  UNEGASBUFFALOCAP
b6f0: 49 54 41 4c 2c 5a 47 52 41 59 53 55 52 56 45 59  ITAL,ZGRAYSURVEY
b700: 57 49 52 45 4c 4f 56 45 2c 5a 43 4f 52 4e 45 52  WIRELOVE,ZCORNER
b710: 41 4e 43 48 4f 52 54 41 50 45 44 49 56 45 52 2c  ANCHORTAPEDIVER,
b720: 22 0a 20 20 20 20 22 5a 52 45 57 41 52 44 49 4e  ".    "ZREWARDIN
b730: 53 49 44 45 4d 41 4e 47 4f 49 4e 54 45 4e 53 45  SIDEMANGOINTENSE
b740: 2c 5a 43 41 44 45 54 42 52 49 47 48 54 50 4c 41  ,ZCADETBRIGHTPLA
b750: 4e 45 54 42 41 4e 4b 2c 5a 50 4c 41 4e 45 54 46  NETBANK,ZPLANETF
b760: 41 4d 49 4c 59 50 55 52 45 4d 45 4d 4f 52 59 2c  AMILYPUREMEMORY,
b770: 22 0a 20 20 20 20 22 5a 54 52 45 41 54 54 45 53  ".    "ZTREATTES
b780: 54 51 55 49 4c 4c 43 48 41 52 47 45 2c 5a 43 52  TQUILLCHARGE,ZCR
b790: 45 41 4d 45 56 45 4e 49 4e 47 4c 49 50 42 52 41  EAMEVENINGLIPBRA
b7a0: 4e 43 48 2c 5a 53 4b 59 53 4b 59 43 4c 41 53 53  NCH,ZSKYSKYCLASS
b7b0: 49 43 42 52 49 45 46 2c 22 0a 20 20 20 20 22 5a  ICBRIEF,".    "Z
b7c0: 41 52 53 45 4e 49 43 53 41 4d 50 4c 45 57 41 49  ARSENICSAMPLEWAI
b7d0: 54 4d 55 4f 4e 2c 5a 42 52 4f 57 42 41 4c 41 4e  TMUON,ZBROWBALAN
b7e0: 43 45 4b 45 59 43 48 4f 57 44 45 52 2c 5a 46 4c  CEKEYCHOWDER,ZFL
b7f0: 59 49 4e 47 44 4f 43 54 4f 52 54 41 42 4c 45 4d  YINGDOCTORTABLEM
b800: 45 4c 4f 44 59 2c 22 0a 20 20 20 20 22 5a 48 41  ELODY,".    "ZHA
b810: 4e 47 45 52 4c 49 54 48 49 55 4d 44 49 4e 4e 45  NGERLITHIUMDINNE
b820: 52 4d 45 45 54 2c 5a 4e 4f 54 49 43 45 50 45 41  RMEET,ZNOTICEPEA
b830: 52 50 4f 4c 49 43 59 4a 55 49 43 45 2c 5a 53 48  RPOLICYJUICE,ZSH
b840: 49 4e 59 41 53 53 49 53 54 4c 49 56 49 4e 47 43  INYASSISTLIVINGC
b850: 52 41 42 2c 22 0a 20 20 20 20 22 5a 4c 49 46 45  RAB,".    "ZLIFE
b860: 55 53 45 4c 45 41 46 59 42 45 4c 4c 2c 5a 46 41  USELEAFYBELL,ZFA
b870: 43 45 49 4e 56 49 54 45 54 41 4c 4b 47 4f 4c 44  CEINVITETALKGOLD
b880: 2c 5a 47 45 4e 45 52 41 4c 52 45 53 4f 52 54 53  ,ZGENERALRESORTS
b890: 4b 59 4f 50 45 4e 2c 22 0a 20 20 20 20 22 5a 50  KYOPEN,".    "ZP
b8a0: 55 52 45 43 41 4b 45 56 49 56 49 44 4e 45 41 54  URECAKEVIVIDNEAT
b8b0: 4c 59 2c 5a 4b 49 57 49 56 49 53 55 41 4c 50 52  LY,ZKIWIVISUALPR
b8c0: 49 44 45 41 50 50 4c 45 2c 5a 4d 45 53 53 59 53  IDEAPPLE,ZMESSYS
b8d0: 55 4c 46 55 52 44 52 45 41 4d 46 45 53 54 49 56  ULFURDREAMFESTIV
b8e0: 45 2c 22 0a 20 20 20 20 22 5a 43 48 41 52 47 45  E,".    "ZCHARGE
b8f0: 43 4c 49 43 4b 48 55 4d 41 4e 45 48 49 52 45 2c  CLICKHUMANEHIRE,
b900: 5a 48 45 52 52 49 4e 47 4a 4f 4b 45 46 45 41 54  ZHERRINGJOKEFEAT
b910: 55 52 45 48 4f 50 45 46 55 4c 2c 5a 59 41 52 44  UREHOPEFUL,ZYARD
b920: 4f 52 45 47 41 4e 4f 56 49 56 49 44 4a 45 57 45  OREGANOVIVIDJEWE
b930: 4c 2c 22 0a 20 20 20 20 22 5a 46 4f 4f 54 54 41  L,".    "ZFOOTTA
b940: 50 57 4f 52 44 45 4e 54 52 59 2c 5a 57 49 53 48  PWORDENTRY,ZWISH
b950: 48 49 54 53 4b 49 4e 4d 4f 54 4f 52 2c 5a 42 41  HITSKINMOTOR,ZBA
b960: 53 45 47 4f 55 44 41 52 45 47 55 4c 41 52 46 4f  SEGOUDAREGULARFO
b970: 52 47 49 56 45 2c 22 0a 20 20 20 20 22 5a 4d 55  RGIVE,".    "ZMU
b980: 46 46 49 4e 44 52 59 45 52 44 52 41 57 46 4f 52  FFINDRYERDRAWFOR
b990: 54 55 4e 45 2c 5a 41 43 54 49 4f 4e 52 41 4e 47  TUNE,ZACTIONRANG
b9a0: 45 45 4c 45 47 41 4e 54 4e 45 55 54 52 4f 4e 2c  EELEGANTNEUTRON,
b9b0: 5a 54 52 59 46 41 43 54 4b 45 45 50 4d 49 4c 4b  ZTRYFACTKEEPMILK
b9c0: 2c 22 0a 20 20 20 20 22 5a 50 45 41 43 48 43 4f  ,".    "ZPEACHCO
b9d0: 50 50 45 52 44 49 4e 4e 45 52 4c 41 4b 45 2c 5a  PPERDINNERLAKE,Z
b9e0: 46 52 41 4d 45 45 4e 54 45 52 53 49 4d 50 4c 45  FRAMEENTERSIMPLE
b9f0: 4d 4f 55 54 48 2c 5a 4d 45 52 52 59 43 52 41 43  MOUTH,ZMERRYCRAC
ba00: 4b 54 52 41 49 4e 4c 45 41 44 45 52 2c 22 0a 20  KTRAINLEADER,". 
ba10: 20 20 20 22 5a 4d 45 4d 4f 52 59 52 45 51 55 45     "ZMEMORYREQUE
ba20: 53 54 53 4f 55 52 43 45 42 49 47 2c 5a 43 41 52  STSOURCEBIG,ZCAR
ba30: 52 59 46 4c 4f 4f 52 4d 49 4e 4e 4f 57 44 52 41  RYFLOORMINNOWDRA
ba40: 47 4f 4e 2c 5a 4d 49 4e 4f 52 57 41 59 50 41 50  GON,ZMINORWAYPAP
ba50: 45 52 43 4c 41 53 53 59 2c 22 0a 20 20 20 20 22  ERCLASSY,".    "
ba60: 5a 44 49 4c 4c 41 53 4b 48 4f 4b 49 4c 45 4d 4f  ZDILLASKHOKILEMO
ba70: 4e 2c 5a 52 45 53 4f 4c 56 45 57 52 49 53 54 57  N,ZRESOLVEWRISTW
ba80: 52 41 50 41 50 50 4c 45 2c 5a 41 53 4b 43 4f 4e  RAPAPPLE,ZASKCON
ba90: 54 41 43 54 4d 4f 4e 49 54 4f 52 46 55 4e 2c 22  TACTMONITORFUN,"
baa0: 0a 20 20 20 20 22 5a 47 49 56 45 56 49 56 49 44  .    "ZGIVEVIVID
bab0: 44 49 56 49 4e 45 4d 45 41 4e 49 4e 47 2c 5a 45  DIVINEMEANING,ZE
bac0: 49 47 48 54 4c 45 41 44 45 52 57 4f 52 4b 45 52  IGHTLEADERWORKER
bad0: 4d 4f 53 54 2c 5a 4d 49 53 53 52 45 50 4c 59 48  MOST,ZMISSREPLYH
bae0: 55 4d 41 4e 4c 49 56 49 4e 47 2c 22 0a 20 20 20  UMANLIVING,".   
baf0: 20 22 5a 58 45 4e 4f 4e 46 4c 49 47 48 54 50 41   "ZXENONFLIGHTPA
bb00: 4c 45 41 50 50 4c 45 2c 5a 53 4f 52 54 4d 49 53  LEAPPLE,ZSORTMIS
bb10: 54 59 51 55 4f 54 45 43 41 42 42 41 47 45 2c 5a  TYQUOTECABBAGE,Z
bb20: 45 41 47 4c 45 4c 49 4e 45 4d 49 4e 45 4d 41 49  EAGLELINEMINEMAI
bb30: 4c 2c 22 0a 20 20 20 20 22 5a 46 41 4d 49 4c 59  L,".    "ZFAMILY
bb40: 56 49 53 55 41 4c 4f 57 4e 45 52 4d 41 54 54 45  VISUALOWNERMATTE
bb50: 52 2c 5a 53 50 52 45 41 44 4d 4f 54 4f 52 42 49  R,ZSPREADMOTORBI
bb60: 53 43 55 49 54 42 41 43 4f 4e 2c 5a 44 49 53 48  SCUITBACON,ZDISH
bb70: 4b 45 45 50 42 4c 45 53 54 4d 4f 4e 49 54 4f 52  KEEPBLESTMONITOR
bb80: 2c 22 0a 20 20 20 20 22 5a 4d 41 4c 4c 45 51 55  ,".    "ZMALLEQU
bb90: 49 50 54 48 41 4e 4b 53 47 4c 55 45 2c 5a 47 4f  IPTHANKSGLUE,ZGO
bba0: 4c 44 59 4f 55 4e 47 49 4e 49 54 49 41 4c 4e 4f  LDYOUNGINITIALNO
bbb0: 53 45 2c 5a 48 55 4d 4f 52 53 50 49 43 45 53 41  SE,ZHUMORSPICESA
bbc0: 4e 44 4b 49 44 4e 45 59 29 22 0a 20 20 20 20 22  NDKIDNEY)".    "
bbd0: 56 41 4c 55 45 53 28 3f 31 2c 3f 32 36 2c 3f 32  VALUES(?1,?26,?2
bbe0: 30 2c 3f 39 33 2c 3f 38 2c 3f 33 33 2c 3f 33 2c  0,?93,?8,?33,?3,
bbf0: 3f 38 31 2c 3f 32 38 2c 3f 36 30 2c 3f 31 38 2c  ?81,?28,?60,?18,
bc00: 3f 34 37 2c 3f 31 30 39 2c 3f 32 39 2c 3f 33 30  ?47,?109,?29,?30
bc10: 2c 3f 31 30 34 2c 3f 38 36 2c 22 0a 20 20 20 20  ,?104,?86,".    
bc20: 22 3f 35 34 2c 3f 39 32 2c 3f 31 31 37 2c 3f 39  "?54,?92,?117,?9
bc30: 2c 3f 35 38 2c 3f 39 37 2c 3f 36 31 2c 3f 31 31  ,?58,?97,?61,?11
bc40: 39 2c 3f 37 33 2c 3f 31 30 37 2c 3f 31 32 30 2c  9,?73,?107,?120,
bc50: 3f 38 30 2c 3f 39 39 2c 3f 33 31 2c 3f 39 36 2c  ?80,?99,?31,?96,
bc60: 3f 38 35 2c 3f 35 30 2c 3f 37 31 2c 22 0a 20 20  ?85,?50,?71,".  
bc70: 20 20 22 3f 34 32 2c 3f 32 37 2c 3f 31 31 38 2c    "?42,?27,?118,
bc80: 3f 33 36 2c 3f 32 2c 3f 36 37 2c 3f 36 32 2c 3f  ?36,?2,?67,?62,?
bc90: 31 30 38 2c 3f 38 32 2c 3f 39 34 2c 3f 37 36 2c  108,?82,?94,?76,
bca0: 3f 33 35 2c 3f 34 30 2c 3f 31 31 2c 3f 38 38 2c  ?35,?40,?11,?88,
bcb0: 3f 34 31 2c 3f 37 32 2c 3f 34 2c 22 0a 20 20 20  ?41,?72,?4,".   
bcc0: 20 22 3f 38 33 2c 3f 31 30 32 2c 3f 31 30 33 2c   "?83,?102,?103,
bcd0: 3f 31 31 32 2c 3f 37 37 2c 3f 31 31 31 2c 3f 32  ?112,?77,?111,?2
bce0: 32 2c 3f 31 33 2c 3f 33 34 2c 3f 31 35 2c 3f 32  2,?13,?34,?15,?2
bcf0: 33 2c 3f 31 31 36 2c 3f 37 2c 3f 35 2c 3f 39 30  3,?116,?7,?5,?90
bd00: 2c 3f 35 37 2c 3f 35 36 2c 22 0a 20 20 20 20 22  ,?57,?56,".    "
bd10: 3f 37 35 2c 3f 35 31 2c 3f 38 34 2c 3f 32 35 2c  ?75,?51,?84,?25,
bd20: 3f 36 33 2c 3f 33 37 2c 3f 38 37 2c 3f 31 31 34  ?63,?37,?87,?114
bd30: 2c 3f 37 39 2c 3f 33 38 2c 3f 31 34 2c 3f 31 30  ,?79,?38,?14,?10
bd40: 2c 3f 32 31 2c 3f 34 38 2c 3f 38 39 2c 3f 39 31  ,?21,?48,?89,?91
bd50: 2c 3f 31 31 30 2c 22 0a 20 20 20 20 22 3f 36 39  ,?110,".    "?69
bd60: 2c 3f 34 35 2c 3f 31 31 33 2c 3f 31 32 2c 3f 31  ,?45,?113,?12,?1
bd70: 30 31 2c 3f 36 38 2c 3f 31 30 35 2c 3f 34 36 2c  01,?68,?105,?46,
bd80: 3f 39 35 2c 3f 37 34 2c 3f 32 34 2c 3f 35 33 2c  ?95,?74,?24,?53,
bd90: 3f 33 39 2c 3f 36 2c 3f 36 34 2c 3f 35 32 2c 3f  ?39,?6,?64,?52,?
bda0: 39 38 2c 22 0a 20 20 20 20 22 3f 36 35 2c 3f 31  98,".    "?65,?1
bdb0: 31 35 2c 3f 34 39 2c 3f 37 30 2c 3f 35 39 2c 3f  15,?49,?70,?59,?
bdc0: 33 32 2c 3f 34 34 2c 3f 31 30 30 2c 3f 35 35 2c  32,?44,?100,?55,
bdd0: 3f 36 36 2c 3f 31 36 2c 3f 31 39 2c 3f 31 30 36  ?66,?16,?19,?106
bde0: 2c 3f 34 33 2c 3f 31 37 2c 3f 37 38 29 3b 22 0a  ,?43,?17,?78);".
bdf0: 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20    );.  for(i=0; 
be00: 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78  i<n; i++){.    x
be10: 31 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72  1 = speedtest1_r
be20: 61 6e 64 6f 6d 28 29 3b 0a 20 20 20 20 73 70 65  andom();.    spe
be30: 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61  edtest1_numberna
be40: 6d 65 28 78 31 25 31 30 30 30 2c 20 7a 4e 75 6d  me(x1%1000, zNum
be50: 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b  , sizeof(zNum));
be60: 0a 20 20 20 20 6c 65 6e 20 3d 20 28 69 6e 74 29  .    len = (int)
be70: 73 74 72 6c 65 6e 28 7a 4e 75 6d 29 3b 0a 20 20  strlen(zNum);.  
be80: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
be90: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69  nt(g.pStmt, 1, i
bea0: 5e 30 78 66 29 3b 0a 20 20 20 20 66 6f 72 28 6a  ^0xf);.    for(j
beb0: 3d 30 3b 20 7a 54 79 70 65 5b 6a 5d 3b 20 6a 2b  =0; zType[j]; j+
bec0: 2b 29 7b 0a 20 20 20 20 20 20 73 77 69 74 63 68  +){.      switch
bed0: 28 20 7a 54 79 70 65 5b 6a 5d 20 29 7b 0a 20 20  ( zType[j] ){.  
bee0: 20 20 20 20 20 20 63 61 73 65 20 27 49 27 3a 0a        case 'I':.
bef0: 20 20 20 20 20 20 20 20 63 61 73 65 20 27 54 27          case 'T'
bf00: 3a 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  :.          sqli
bf10: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 67  te3_bind_int64(g
bf20: 2e 70 53 74 6d 74 2c 20 6a 2b 32 2c 20 78 31 29  .pStmt, j+2, x1)
bf30: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
bf40: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
bf50: 27 46 27 3a 0a 20 20 20 20 20 20 20 20 20 20 73  'F':.          s
bf60: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
bf70: 6c 65 28 67 2e 70 53 74 6d 74 2c 20 6a 2b 32 2c  le(g.pStmt, j+2,
bf80: 20 28 64 6f 75 62 6c 65 29 78 31 29 3b 0a 20 20   (double)x1);.  
bf90: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
bfa0: 20 20 20 20 20 20 20 63 61 73 65 20 27 56 27 3a         case 'V':
bfb0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 27 42  .        case 'B
bfc0: 27 3a 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ':.          sql
bfd0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 36 34  ite3_bind_text64
bfe0: 28 67 2e 70 53 74 6d 74 2c 20 6a 2b 32 2c 20 7a  (g.pStmt, j+2, z
bff0: 4e 75 6d 2c 20 6c 65 6e 2c 0a 20 20 20 20 20 20  Num, len,.      
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53          SQLITE_S
c020: 54 41 54 49 43 2c 20 53 51 4c 49 54 45 5f 55 54  TATIC, SQLITE_UT
c030: 46 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 62  F8);.          b
c040: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
c050: 20 20 7d 0a 20 20 20 20 73 70 65 65 64 74 65 73    }.    speedtes
c060: 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20  t1_run();.  }.  
c070: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
c080: 22 43 4f 4d 4d 49 54 3b 22 29 3b 0a 20 20 73 70  "COMMIT;");.  sp
c090: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
c0a0: 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a  t();..  n = g.sz
c0b0: 54 65 73 74 2a 32 35 30 3b 0a 20 20 73 70 65 65  Test*250;.  spee
c0c0: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
c0d0: 74 28 31 31 30 2c 20 22 51 75 65 72 79 20 25 64  t(110, "Query %d
c0e0: 20 72 6f 77 73 20 62 79 20 72 6f 77 69 64 22 2c   rows by rowid",
c0f0: 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74   n);.  speedtest
c100: 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20 20 22  1_prepare(.    "
c110: 53 45 4c 45 43 54 20 5a 43 59 41 4e 42 41 53 45  SELECT ZCYANBASE
c120: 46 45 45 44 41 44 52 4f 49 54 2c 5a 4a 55 4e 49  FEEDADROIT,ZJUNI
c130: 4f 52 53 48 4f 57 50 52 45 53 53 4e 4f 56 41 2c  ORSHOWPRESSNOVA,
c140: 5a 43 41 55 53 45 53 41 4c 41 4d 49 54 45 52 4d  ZCAUSESALAMITERM
c150: 43 59 41 4e 2c 22 0a 20 20 20 20 22 5a 48 4f 50  CYAN,".    "ZHOP
c160: 45 46 55 4c 47 41 54 45 48 4f 4c 45 43 48 41 4c  EFULGATEHOLECHAL
c170: 4b 2c 5a 48 55 4d 4f 52 53 50 49 43 45 53 41 4e  K,ZHUMORSPICESAN
c180: 44 4b 49 44 4e 45 59 2c 5a 53 57 49 4d 48 45 41  DKIDNEY,ZSWIMHEA
c190: 56 59 4d 45 4e 54 49 4f 4e 4b 49 4e 44 2c 22 0a  VYMENTIONKIND,".
c1a0: 20 20 20 20 22 5a 4d 4f 56 45 57 48 4f 47 41 4d      "ZMOVEWHOGAM
c1b0: 4d 41 49 4e 43 48 2c 5a 41 50 50 45 41 4c 53 49  MAINCH,ZAPPEALSI
c1c0: 4d 50 4c 45 53 45 43 4f 4e 44 48 4f 55 53 49 4e  MPLESECONDHOUSIN
c1d0: 47 2c 5a 48 41 46 4e 49 55 4d 53 43 52 49 50 54  G,ZHAFNIUMSCRIPT
c1e0: 53 41 4c 41 44 4d 4f 54 4f 52 2c 22 0a 20 20 20  SALADMOTOR,".   
c1f0: 20 22 5a 4e 45 41 54 53 54 45 57 50 41 52 54 49   "ZNEATSTEWPARTI
c200: 52 4f 4e 2c 5a 4c 4f 4e 47 46 49 4e 4c 45 41 56  RON,ZLONGFINLEAV
c210: 45 49 4d 41 47 45 4f 49 4c 2c 5a 44 45 57 50 45  EIMAGEOIL,ZDEWPE
c220: 41 43 48 43 41 52 45 45 52 43 45 4c 45 52 59 2c  ACHCAREERCELERY,
c230: 22 0a 20 20 20 20 22 5a 58 45 4e 4f 4e 46 4c 49  ".    "ZXENONFLI
c240: 47 48 54 50 41 4c 45 41 50 50 4c 45 2c 5a 43 41  GHTPALEAPPLE,ZCA
c250: 4c 4d 52 41 43 43 4f 4f 4e 50 52 4f 47 52 41 4d  LMRACCOONPROGRAM
c260: 44 45 42 49 54 2c 5a 55 53 55 41 4c 42 4f 44 59  DEBIT,ZUSUALBODY
c270: 48 41 4c 49 42 55 54 44 49 41 4d 4f 4e 44 2c 22  HALIBUTDIAMOND,"
c280: 0a 20 20 20 20 22 5a 54 52 59 46 41 43 54 4b 45  .    "ZTRYFACTKE
c290: 45 50 4d 49 4c 4b 2c 5a 57 45 41 4c 54 48 4c 49  EPMILK,ZWEALTHLI
c2a0: 4e 45 4e 47 4c 45 45 46 55 4c 44 41 59 2c 5a 4c  NENGLEEFULDAY,ZL
c2b0: 4f 4e 47 44 49 45 54 45 53 53 41 59 4e 41 54 55  ONGDIETESSAYNATU
c2c0: 52 45 2c 22 0a 20 20 20 20 22 5a 4c 49 46 45 55  RE,".    "ZLIFEU
c2d0: 53 45 4c 45 41 46 59 42 45 4c 4c 2c 5a 54 52 45  SELEAFYBELL,ZTRE
c2e0: 41 54 50 41 43 4b 46 55 54 55 52 45 43 4f 4e 56  ATPACKFUTURECONV
c2f0: 45 52 54 2c 5a 4d 45 4d 4f 52 59 52 45 51 55 45  ERT,ZMEMORYREQUE
c300: 53 54 53 4f 55 52 43 45 42 49 47 2c 22 0a 20 20  STSOURCEBIG,".  
c310: 20 20 22 5a 59 41 52 44 4f 52 45 47 41 4e 4f 56    "ZYARDOREGANOV
c320: 49 56 49 44 4a 45 57 45 4c 2c 5a 44 45 50 4f 53  IVIDJEWEL,ZDEPOS
c330: 49 54 50 41 49 52 43 4f 4c 4c 45 47 45 43 4f 4d  ITPAIRCOLLEGECOM
c340: 45 54 2c 5a 53 4c 45 45 50 59 55 53 45 52 47 52  ET,ZSLEEPYUSERGR
c350: 41 4e 44 42 4f 57 4c 2c 22 0a 20 20 20 20 22 5a  ANDBOWL,".    "Z
c360: 42 52 49 45 46 47 4f 42 59 44 4f 44 47 45 52 48  BRIEFGOBYDODGERH
c370: 45 49 47 48 54 2c 5a 43 4c 55 42 52 45 4c 45 41  EIGHT,ZCLUBRELEA
c380: 53 45 4c 49 5a 41 52 44 41 44 56 49 43 45 2c 5a  SELIZARDADVICE,Z
c390: 43 41 50 41 42 4c 45 54 52 49 50 44 4f 4f 52 41  CAPABLETRIPDOORA
c3a0: 4c 4d 4f 4e 44 2c 22 0a 20 20 20 20 22 5a 44 52  LMOND,".    "ZDR
c3b0: 59 57 41 4c 4c 42 45 59 4f 4e 44 42 52 4f 57 4e  YWALLBEYONDBROWN
c3c0: 42 4f 57 4c 2c 5a 41 53 4b 43 4f 4e 54 41 43 54  BOWL,ZASKCONTACT
c3d0: 4d 4f 4e 49 54 4f 52 46 55 4e 2c 5a 4b 49 57 49  MONITORFUN,ZKIWI
c3e0: 56 49 53 55 41 4c 50 52 49 44 45 41 50 50 4c 45  VISUALPRIDEAPPLE
c3f0: 2c 22 0a 20 20 20 20 22 5a 4e 4f 54 49 43 45 50  ,".    "ZNOTICEP
c400: 45 41 52 50 4f 4c 49 43 59 4a 55 49 43 45 2c 5a  EARPOLICYJUICE,Z
c410: 50 45 41 43 48 43 4f 50 50 45 52 44 49 4e 4e 45  PEACHCOPPERDINNE
c420: 52 4c 41 4b 45 2c 5a 53 54 45 45 4c 43 41 52 45  RLAKE,ZSTEELCARE
c430: 46 55 4c 50 4c 41 54 45 4e 55 4d 42 45 52 2c 22  FULPLATENUMBER,"
c440: 0a 20 20 20 20 22 5a 47 4c 41 44 53 50 52 41 59  .    "ZGLADSPRAY
c450: 4b 49 44 4e 45 59 47 55 50 50 59 2c 5a 43 4f 4d  KIDNEYGUPPY,ZCOM
c460: 50 41 4e 59 53 55 4d 4d 45 52 46 49 42 45 52 45  PANYSUMMERFIBERE
c470: 4c 46 2c 5a 54 45 4e 4e 49 53 43 59 43 4c 45 42  LF,ZTENNISCYCLEB
c480: 49 4c 4c 4f 46 46 49 43 45 52 2c 22 0a 20 20 20  ILLOFFICER,".   
c490: 20 22 5a 49 4d 41 47 45 50 45 4e 43 49 4c 4f 54   "ZIMAGEPENCILOT
c4a0: 48 45 52 42 4f 54 54 4f 4d 2c 5a 57 45 53 54 41  HERBOTTOM,ZWESTA
c4b0: 4d 4f 55 4e 54 41 46 46 45 43 54 48 45 41 52 49  MOUNTAFFECTHEARI
c4c0: 4e 47 2c 5a 44 49 56 45 52 50 41 49 4e 54 4c 45  NG,ZDIVERPAINTLE
c4d0: 41 54 48 45 52 45 41 53 59 2c 22 0a 20 20 20 20  ATHEREASY,".    
c4e0: 22 5a 53 4b 59 53 4b 59 43 4c 41 53 53 49 43 42  "ZSKYSKYCLASSICB
c4f0: 52 49 45 46 2c 5a 4d 45 53 53 59 53 55 4c 46 55  RIEF,ZMESSYSULFU
c500: 52 44 52 45 41 4d 46 45 53 54 49 56 45 2c 5a 4d  RDREAMFESTIVE,ZM
c510: 45 52 52 59 43 52 41 43 4b 54 52 41 49 4e 4c 45  ERRYCRACKTRAINLE
c520: 41 44 45 52 2c 22 0a 20 20 20 20 22 5a 42 52 4f  ADER,".    "ZBRO
c530: 41 44 41 42 4c 45 53 4f 4c 49 44 43 41 53 55 41  ADABLESOLIDCASUA
c540: 4c 2c 5a 47 4c 41 53 53 52 45 53 45 52 56 45 42  L,ZGLASSRESERVEB
c550: 41 52 49 55 4d 4d 45 41 4c 2c 5a 54 55 4e 45 47  ARIUMMEAL,ZTUNEG
c560: 41 53 42 55 46 46 41 4c 4f 43 41 50 49 54 41 4c  ASBUFFALOCAPITAL
c570: 2c 22 0a 20 20 20 20 22 5a 42 41 4e 4b 42 55 46  ,".    "ZBANKBUF
c580: 46 41 4c 4f 52 45 43 4f 56 45 52 4f 52 42 49 54  FALORECOVERORBIT
c590: 2c 5a 54 52 45 41 54 54 45 53 54 51 55 49 4c 4c  ,ZTREATTESTQUILL
c5a0: 43 48 41 52 47 45 2c 5a 42 41 4d 42 4f 4f 4d 45  CHARGE,ZBAMBOOME
c5b0: 53 53 57 41 53 41 42 49 45 56 45 4e 49 4e 47 2c  SSWASABIEVENING,
c5c0: 22 0a 20 20 20 20 22 5a 52 45 57 41 52 44 49 4e  ".    "ZREWARDIN
c5d0: 53 49 44 45 4d 41 4e 47 4f 49 4e 54 45 4e 53 45  SIDEMANGOINTENSE
c5e0: 2c 5a 45 41 47 4c 45 4c 49 4e 45 4d 49 4e 45 4d  ,ZEAGLELINEMINEM
c5f0: 41 49 4c 2c 5a 43 41 4c 4d 4c 59 47 45 4d 46 49  AIL,ZCALMLYGEMFI
c600: 4e 49 53 48 45 46 46 45 43 54 2c 22 0a 20 20 20  NISHEFFECT,".   
c610: 20 22 5a 4b 45 59 46 41 49 4c 41 50 52 49 43 4f   "ZKEYFAILAPRICO
c620: 54 4d 45 54 41 4c 2c 5a 46 49 4e 47 45 52 44 55  TMETAL,ZFINGERDU
c630: 45 50 49 5a 5a 41 4f 50 54 49 4f 4e 2c 5a 43 41  EPIZZAOPTION,ZCA
c640: 44 45 54 42 52 49 47 48 54 50 4c 41 4e 45 54 42  DETBRIGHTPLANETB
c650: 41 4e 4b 2c 22 0a 20 20 20 20 22 5a 47 4f 4c 44  ANK,".    "ZGOLD
c660: 59 4f 55 4e 47 49 4e 49 54 49 41 4c 4e 4f 53 45  YOUNGINITIALNOSE
c670: 2c 5a 4d 49 53 53 52 45 50 4c 59 48 55 4d 41 4e  ,ZMISSREPLYHUMAN
c680: 4c 49 56 49 4e 47 2c 5a 45 49 47 48 54 4c 45 41  LIVING,ZEIGHTLEA
c690: 44 45 52 57 4f 52 4b 45 52 4d 4f 53 54 2c 22 0a  DERWORKERMOST,".
c6a0: 20 20 20 20 22 5a 46 52 41 4d 45 45 4e 54 45 52      "ZFRAMEENTER
c6b0: 53 49 4d 50 4c 45 4d 4f 55 54 48 2c 5a 42 49 47  SIMPLEMOUTH,ZBIG
c6c0: 54 48 49 4e 4b 43 4f 4e 56 45 52 54 45 43 4f 4e  THINKCONVERTECON
c6d0: 4f 4d 59 2c 5a 46 41 43 45 49 4e 56 49 54 45 54  OMY,ZFACEINVITET
c6e0: 41 4c 4b 47 4f 4c 44 2c 22 0a 20 20 20 20 22 5a  ALKGOLD,".    "Z
c6f0: 50 4f 53 54 50 52 4f 54 45 49 4e 48 41 4e 44 4c  POSTPROTEINHANDL
c700: 45 41 43 54 4f 52 2c 5a 48 45 52 52 49 4e 47 4a  EACTOR,ZHERRINGJ
c710: 4f 4b 45 46 45 41 54 55 52 45 48 4f 50 45 46 55  OKEFEATUREHOPEFU
c720: 4c 2c 5a 43 41 42 42 41 47 45 53 4f 43 4b 45 41  L,ZCABBAGESOCKEA
c730: 53 45 4d 49 4e 55 54 45 2c 22 0a 20 20 20 20 22  SEMINUTE,".    "
c740: 5a 4d 55 46 46 49 4e 44 52 59 45 52 44 52 41 57  ZMUFFINDRYERDRAW
c750: 46 4f 52 54 55 4e 45 2c 5a 50 52 4f 42 4c 45 4d  FORTUNE,ZPROBLEM
c760: 43 4c 55 42 50 4f 50 4f 56 45 52 4a 45 4c 4c 59  CLUBPOPOVERJELLY
c770: 2c 5a 47 49 56 45 56 49 56 49 44 44 49 56 49 4e  ,ZGIVEVIVIDDIVIN
c780: 45 4d 45 41 4e 49 4e 47 2c 22 0a 20 20 20 20 22  EMEANING,".    "
c790: 5a 47 45 4e 45 4e 41 54 55 52 41 4c 48 45 41 52  ZGENENATURALHEAR
c7a0: 49 4e 47 4b 49 54 45 2c 5a 47 45 4e 45 52 41 4c  INGKITE,ZGENERAL
c7b0: 52 45 53 4f 52 54 53 4b 59 4f 50 45 4e 2c 5a 4c  RESORTSKYOPEN,ZL
c7c0: 45 54 54 55 43 45 42 49 52 44 4d 45 45 54 44 45  ETTUCEBIRDMEETDE
c7d0: 42 41 54 45 2c 22 0a 20 20 20 20 22 5a 42 41 53  BATE,".    "ZBAS
c7e0: 45 47 4f 55 44 41 52 45 47 55 4c 41 52 46 4f 52  EGOUDAREGULARFOR
c7f0: 47 49 56 45 2c 5a 43 48 41 52 47 45 43 4c 49 43  GIVE,ZCHARGECLIC
c800: 4b 48 55 4d 41 4e 45 48 49 52 45 2c 5a 50 4c 41  KHUMANEHIRE,ZPLA
c810: 4e 45 54 46 41 4d 49 4c 59 50 55 52 45 4d 45 4d  NETFAMILYPUREMEM
c820: 4f 52 59 2c 22 0a 20 20 20 20 22 5a 4d 49 4e 4f  ORY,".    "ZMINO
c830: 52 57 41 59 50 41 50 45 52 43 4c 41 53 53 59 2c  RWAYPAPERCLASSY,
c840: 5a 43 41 50 59 45 41 52 4c 59 52 49 56 45 54 42  ZCAPYEARLYRIVETB
c850: 52 55 53 48 2c 5a 53 49 5a 45 54 4f 45 41 57 41  RUSH,ZSIZETOEAWA
c860: 52 44 46 52 45 53 48 2c 22 0a 20 20 20 20 22 5a  RDFRESH,".    "Z
c870: 41 52 53 45 4e 49 43 53 41 4d 50 4c 45 57 41 49  ARSENICSAMPLEWAI
c880: 54 4d 55 4f 4e 2c 5a 53 51 55 41 52 45 47 4c 45  TMUON,ZSQUAREGLE
c890: 45 46 55 4c 43 48 49 4c 44 4c 49 47 48 54 2c 5a  EFULCHILDLIGHT,Z
c8a0: 53 48 49 4e 59 41 53 53 49 53 54 4c 49 56 49 4e  SHINYASSISTLIVIN
c8b0: 47 43 52 41 42 2c 22 0a 20 20 20 20 22 5a 43 4f  GCRAB,".    "ZCO
c8c0: 52 4e 45 52 41 4e 43 48 4f 52 54 41 50 45 44 49  RNERANCHORTAPEDI
c8d0: 56 45 52 2c 5a 44 45 43 41 44 45 4a 4f 59 4f 55  VER,ZDECADEJOYOU
c8e0: 53 57 41 56 45 48 41 42 49 54 2c 5a 54 52 41 56  SWAVEHABIT,ZTRAV
c8f0: 45 4c 44 52 49 56 45 52 43 4f 4e 54 45 53 54 4c  ELDRIVERCONTESTL
c900: 49 4c 59 2c 22 0a 20 20 20 20 22 5a 46 4c 59 49  ILY,".    "ZFLYI
c910: 4e 47 44 4f 43 54 4f 52 54 41 42 4c 45 4d 45 4c  NGDOCTORTABLEMEL
c920: 4f 44 59 2c 5a 53 48 41 52 4b 4a 55 53 54 46 52  ODY,ZSHARKJUSTFR
c930: 55 49 54 4d 4f 56 49 45 2c 5a 46 41 4d 49 4c 59  UITMOVIE,ZFAMILY
c940: 56 49 53 55 41 4c 4f 57 4e 45 52 4d 41 54 54 45  VISUALOWNERMATTE
c950: 52 2c 22 0a 20 20 20 20 22 5a 46 41 52 4d 45 52  R,".    "ZFARMER
c960: 4d 4f 52 4e 49 4e 47 4d 49 52 52 4f 52 43 4f 4e  MORNINGMIRRORCON
c970: 43 45 52 4e 2c 5a 47 49 46 54 49 43 45 46 49 53  CERN,ZGIFTICEFIS
c980: 48 47 4c 55 45 48 41 49 52 2c 5a 4f 55 54 53 49  HGLUEHAIR,ZOUTSI
c990: 44 45 50 45 41 48 45 4e 43 4f 55 4e 54 49 43 45  DEPEAHENCOUNTICE
c9a0: 2c 22 0a 20 20 20 20 22 5a 53 50 52 45 41 44 4d  ,".    "ZSPREADM
c9b0: 4f 54 4f 52 42 49 53 43 55 49 54 42 41 43 4f 4e  OTORBISCUITBACON
c9c0: 2c 5a 57 49 53 48 48 49 54 53 4b 49 4e 4d 4f 54  ,ZWISHHITSKINMOT
c9d0: 4f 52 2c 5a 48 4f 4c 49 44 41 59 48 45 41 44 50  OR,ZHOLIDAYHEADP
c9e0: 4f 4e 59 44 45 54 41 49 4c 2c 22 0a 20 20 20 20  ONYDETAIL,".    
c9f0: 22 5a 57 4f 4f 44 50 4f 45 54 52 59 43 4f 42 42  "ZWOODPOETRYCOBB
ca00: 4c 45 52 42 45 4e 43 48 2c 5a 41 49 52 46 4f 52  LERBENCH,ZAIRFOR
ca10: 47 49 56 45 48 45 41 44 46 52 4f 47 2c 5a 42 52  GIVEHEADFROG,ZBR
ca20: 4f 57 42 41 4c 41 4e 43 45 4b 45 59 43 48 4f 57  OWBALANCEKEYCHOW
ca30: 44 45 52 2c 22 0a 20 20 20 20 22 5a 44 49 53 48  DER,".    "ZDISH
ca40: 4b 45 45 50 42 4c 45 53 54 4d 4f 4e 49 54 4f 52  KEEPBLESTMONITOR
ca50: 2c 5a 43 4c 41 4d 42 49 54 41 52 55 47 55 4c 41  ,ZCLAMBITARUGULA
ca60: 46 41 4a 49 54 41 2c 5a 50 4c 49 45 52 53 50 52  FAJITA,ZPLIERSPR
ca70: 49 4e 54 41 53 4b 4f 52 45 47 41 4e 4f 2c 22 0a  INTASKOREGANO,".
ca80: 20 20 20 20 22 5a 52 41 44 49 41 4e 54 57 48 45      "ZRADIANTWHE
ca90: 4e 54 52 59 43 41 52 44 2c 5a 44 45 4c 41 59 4f  NTRYCARD,ZDELAYO
caa0: 55 54 43 4f 4d 45 48 4f 52 4e 41 47 45 4e 43 59  UTCOMEHORNAGENCY
cab0: 2c 5a 50 55 52 45 43 41 4b 45 56 49 56 49 44 4e  ,ZPURECAKEVIVIDN
cac0: 45 41 54 4c 59 2c 22 0a 20 20 20 20 22 5a 50 41  EATLY,".    "ZPA
cad0: 54 54 45 52 4e 43 4c 4f 52 49 4e 45 47 52 41 4e  TTERNCLORINEGRAN
cae0: 44 43 4f 4c 42 59 2c 5a 48 41 4e 44 59 52 45 50  DCOLBY,ZHANDYREP
caf0: 41 49 52 50 52 4f 54 4f 4e 41 49 52 50 4f 52 54  AIRPROTONAIRPORT
cb00: 2c 5a 41 47 45 52 45 45 44 46 52 4f 47 42 41 53  ,ZAGEREEDFROGBAS
cb10: 4b 45 54 2c 22 0a 20 20 20 20 22 5a 53 4f 52 54  KET,".    "ZSORT
cb20: 4d 49 53 54 59 51 55 4f 54 45 43 41 42 42 41 47  MISTYQUOTECABBAG
cb30: 45 2c 5a 46 4f 4f 54 54 41 50 57 4f 52 44 45 4e  E,ZFOOTTAPWORDEN
cb40: 54 52 59 2c 5a 52 45 53 4f 4c 56 45 57 52 49 53  TRY,ZRESOLVEWRIS
cb50: 54 57 52 41 50 41 50 50 4c 45 2c 22 0a 20 20 20  TWRAPAPPLE,".   
cb60: 20 22 5a 44 49 4c 4c 41 53 4b 48 4f 4b 49 4c 45   "ZDILLASKHOKILE
cb70: 4d 4f 4e 2c 5a 46 49 4c 4c 53 54 4f 50 4c 41 57  MON,ZFILLSTOPLAW
cb80: 4a 4f 59 46 55 4c 2c 5a 41 43 54 49 4f 4e 52 41  JOYFUL,ZACTIONRA
cb90: 4e 47 45 45 4c 45 47 41 4e 54 4e 45 55 54 52 4f  NGEELEGANTNEUTRO
cba0: 4e 2c 22 0a 20 20 20 20 22 5a 52 45 53 4f 52 54  N,".    "ZRESORT
cbb0: 59 41 52 44 47 52 45 45 4e 4c 45 54 2c 5a 43 52  YARDGREENLET,ZCR
cbc0: 45 41 4d 45 56 45 4e 49 4e 47 4c 49 50 42 52 41  EAMEVENINGLIPBRA
cbd0: 4e 43 48 2c 5a 57 48 41 4c 45 4d 41 54 48 41 56  NCH,ZWHALEMATHAV
cbe0: 4f 43 41 44 4f 43 4f 50 50 45 52 2c 22 0a 20 20  OCADOCOPPER,".  
cbf0: 20 20 22 5a 47 52 41 59 53 55 52 56 45 59 57 49    "ZGRAYSURVEYWI
cc00: 52 45 4c 4f 56 45 2c 5a 42 45 4c 4c 59 43 52 41  RELOVE,ZBELLYCRA
cc10: 53 48 49 54 45 4d 4c 41 43 4b 2c 5a 48 41 4e 47  SHITEMLACK,ZHANG
cc20: 45 52 4c 49 54 48 49 55 4d 44 49 4e 4e 45 52 4d  ERLITHIUMDINNERM
cc30: 45 45 54 2c 22 0a 20 20 20 20 22 5a 43 41 52 52  EET,".    "ZCARR
cc40: 59 46 4c 4f 4f 52 4d 49 4e 4e 4f 57 44 52 41 47  YFLOORMINNOWDRAG
cc50: 4f 4e 2c 5a 4d 41 4c 4c 45 51 55 49 50 54 48 41  ON,ZMALLEQUIPTHA
cc60: 4e 4b 53 47 4c 55 45 2c 5a 54 45 52 4d 46 49 54  NKSGLUE,ZTERMFIT
cc70: 54 49 4e 47 48 4f 55 53 49 4e 47 43 4f 4d 4d 41  TINGHOUSINGCOMMA
cc80: 4e 44 2c 22 0a 20 20 20 20 22 5a 4f 4e 45 52 45  ND,".    "ZONERE
cc90: 4c 45 41 53 45 41 56 45 52 41 47 45 4e 55 52 53  LEASEAVERAGENURS
cca0: 45 2c 5a 4c 41 43 45 41 44 44 52 45 53 53 47 52  E,ZLACEADDRESSGR
ccb0: 4f 55 4e 44 43 41 52 45 46 55 4c 22 0a 20 20 20  OUNDCAREFUL".   
ccc0: 20 22 20 46 52 4f 4d 20 5a 4c 4f 4f 4b 53 4c 49   " FROM ZLOOKSLI
ccd0: 4b 45 43 4f 52 45 44 41 54 41 20 57 48 45 52 45  KECOREDATA WHERE
cce0: 20 5a 50 4b 3d 3f 31 3b 22 0a 20 20 29 3b 0a 20   ZPK=?1;".  );. 
ccf0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
cd00: 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 70  ++){.    x1 = sp
cd10: 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28  eedtest1_random(
cd20: 29 25 6e 52 6f 77 3b 0a 20 20 20 20 73 71 6c 69  )%nRow;.    sqli
cd30: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
cd40: 53 74 6d 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20  Stmt, 1, x1);.  
cd50: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
cd60: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
cd70: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
cd80: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 65 73 74  .}../*.** A test
cd90: 73 65 74 20 75 73 65 64 20 66 6f 72 20 64 65 62  set used for deb
cda0: 75 67 67 69 6e 67 20 73 70 65 65 64 74 65 73 74  ugging speedtest
cdb0: 31 20 69 74 73 65 6c 66 2e 0a 2a 2f 0a 76 6f 69  1 itself..*/.voi
cdc0: 64 20 74 65 73 74 73 65 74 5f 64 65 62 75 67 31  d testset_debug1
cdd0: 28 76 6f 69 64 29 7b 0a 20 20 75 6e 73 69 67 6e  (void){.  unsign
cde0: 65 64 20 69 2c 20 6e 3b 0a 20 20 75 6e 73 69 67  ed i, n;.  unsig
cdf0: 6e 65 64 20 78 31 2c 20 78 32 3b 0a 20 20 63 68  ned x1, x2;.  ch
ce00: 61 72 20 7a 4e 75 6d 5b 32 30 30 30 5d 3b 20 20  ar zNum[2000];  
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ce20: 20 6e 75 6d 62 65 72 20 6e 61 6d 65 20 2a 2f 0a   number name */.
ce30: 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 3b  .  n = g.szTest;
ce40: 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e  .  for(i=1; i<=n
ce50: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d  ; i++){.    x1 =
ce60: 20 73 77 69 7a 7a 6c 65 28 69 2c 20 6e 29 3b 0a   swizzle(i, n);.
ce70: 20 20 20 20 78 32 20 3d 20 73 77 69 7a 7a 6c 65      x2 = swizzle
ce80: 28 78 31 2c 20 6e 29 3b 0a 20 20 20 20 73 70 65  (x1, n);.    spe
ce90: 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61  edtest1_numberna
cea0: 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c 20 73 69 7a  me(x1, zNum, siz
ceb0: 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20  eof(zNum));.    
cec0: 70 72 69 6e 74 66 28 22 25 35 64 20 25 35 64 20  printf("%5d %5d 
ced0: 25 35 64 20 25 73 5c 6e 22 2c 20 69 2c 20 78 31  %5d %s\n", i, x1
cee0: 2c 20 78 32 2c 20 7a 4e 75 6d 29 3b 0a 20 20 7d  , x2, zNum);.  }
cef0: 0a 7d 0a 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e  .}..#ifdef __lin
cf00: 75 78 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 3c 73  ux__.#include <s
cf10: 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63  ys/types.h>.#inc
cf20: 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a  lude <unistd.h>.
cf30: 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74  ./*.** Attempt t
cf40: 6f 20 64 69 73 70 6c 61 79 20 49 2f 4f 20 73 74  o display I/O st
cf50: 61 74 73 20 6f 6e 20 4c 69 6e 75 78 20 75 73 69  ats on Linux usi
cf60: 6e 67 20 2f 70 72 6f 63 2f 50 49 44 2f 69 6f 0a  ng /proc/PID/io.
cf70: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64  */.static void d
cf80: 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61  isplayLinuxIoSta
cf90: 74 73 28 46 49 4c 45 20 2a 6f 75 74 29 7b 0a 20  ts(FILE *out){. 
cfa0: 20 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 63 68 61   FILE *in;.  cha
cfb0: 72 20 7a 5b 32 30 30 5d 3b 0a 20 20 73 71 6c 69  r z[200];.  sqli
cfc0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
cfd0: 65 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f 70 72 6f  eof(z), z, "/pro
cfe0: 63 2f 25 64 2f 69 6f 22 2c 20 67 65 74 70 69 64  c/%d/io", getpid
cff0: 28 29 29 3b 0a 20 20 69 6e 20 3d 20 66 6f 70 65  ());.  in = fope
d000: 6e 28 7a 2c 20 22 72 62 22 29 3b 0a 20 20 69 66  n(z, "rb");.  if
d010: 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e  ( in==0 ) return
d020: 3b 0a 20 20 77 68 69 6c 65 28 20 66 67 65 74 73  ;.  while( fgets
d030: 28 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c 20 69  (z, sizeof(z), i
d040: 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74 61  n)!=0 ){.    sta
d050: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
d060: 20 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63   {.      const c
d070: 68 61 72 20 2a 7a 50 61 74 74 65 72 6e 3b 0a 20  har *zPattern;. 
d080: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
d090: 2a 7a 44 65 73 63 3b 0a 20 20 20 20 7d 20 61 54  *zDesc;.    } aT
d0a0: 72 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  rans[] = {.     
d0b0: 20 7b 20 22 72 63 68 61 72 3a 20 22 2c 20 20 20   { "rchar: ",   
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
d0d0: 42 79 74 65 73 20 72 65 63 65 69 76 65 64 20 62  Bytes received b
d0e0: 79 20 72 65 61 64 28 29 3a 22 20 7d 2c 0a 20 20  y read():" },.  
d0f0: 20 20 20 20 7b 20 22 77 63 68 61 72 3a 20 22 2c      { "wchar: ",
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d110: 20 20 22 42 79 74 65 73 20 73 65 6e 74 20 74 6f    "Bytes sent to
d120: 20 77 72 69 74 65 28 29 3a 22 20 20 20 20 7d 2c   write():"    },
d130: 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63 72 3a  .      { "syscr:
d140: 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   ",             
d150: 20 20 20 20 20 22 52 65 61 64 28 29 20 73 79 73       "Read() sys
d160: 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20  tem calls:"     
d170: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73   },.      { "sys
d180: 63 77 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20  cw: ",          
d190: 20 20 20 20 20 20 20 20 22 57 72 69 74 65 28 29          "Write()
d1a0: 20 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20   system calls:" 
d1b0: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
d1c0: 72 65 61 64 5f 62 79 74 65 73 3a 20 22 2c 20 20  read_bytes: ",  
d1d0: 20 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65             "Byte
d1e0: 73 20 72 63 76 64 20 66 72 6f 6d 20 73 74 6f 72  s rcvd from stor
d1f0: 61 67 65 3a 22 20 20 7d 2c 0a 20 20 20 20 20 20  age:"  },.      
d200: 7b 20 22 77 72 69 74 65 5f 62 79 74 65 73 3a 20  { "write_bytes: 
d210: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ",            "B
d220: 79 74 65 73 20 73 65 6e 74 20 74 6f 20 73 74 6f  ytes sent to sto
d230: 72 61 67 65 3a 22 20 20 20 20 7d 2c 0a 20 20 20  rage:"    },.   
d240: 20 20 20 7b 20 22 63 61 6e 63 65 6c 6c 65 64 5f     { "cancelled_
d250: 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20  write_bytes: ", 
d260: 20 22 43 61 6e 63 65 6c 6c 65 64 20 77 72 69 74   "Cancelled writ
d270: 65 20 62 79 74 65 73 3a 22 20 20 20 20 7d 2c 0a  e bytes:"    },.
d280: 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69      };.    int i
d290: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
d2a0: 3c 73 69 7a 65 6f 66 28 61 54 72 61 6e 73 29 2f  <sizeof(aTrans)/
d2b0: 73 69 7a 65 6f 66 28 61 54 72 61 6e 73 5b 30 5d  sizeof(aTrans[0]
d2c0: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ); i++){.      i
d2d0: 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c  nt n = (int)strl
d2e0: 65 6e 28 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61  en(aTrans[i].zPa
d2f0: 74 74 65 72 6e 29 3b 0a 20 20 20 20 20 20 69 66  ttern);.      if
d300: 28 20 73 74 72 6e 63 6d 70 28 61 54 72 61 6e 73  ( strncmp(aTrans
d310: 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 2c 20 7a 2c  [i].zPattern, z,
d320: 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   n)==0 ){.      
d330: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
d340: 2d 2d 20 25 2d 32 38 73 20 25 73 22 2c 20 61 54  -- %-28s %s", aT
d350: 72 61 6e 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26  rans[i].zDesc, &
d360: 7a 5b 6e 5d 29 3b 0a 20 20 20 20 20 20 20 20 62  z[n]);.        b
d370: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
d380: 20 20 7d 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65    }.  }.  fclose
d390: 28 69 6e 29 3b 0a 7d 20 20 20 0a 23 65 6e 64 69  (in);.}   .#endi
d3a0: 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  f..#if SQLITE_VE
d3b0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3c 33 30 30  RSION_NUMBER<300
d3c0: 36 30 31 38 0a 23 20 20 64 65 66 69 6e 65 20 73  6018.#  define s
d3d0: 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
d3e0: 58 29 20 22 28 62 65 66 6f 72 65 20 33 2e 36 2e  X) "(before 3.6.
d3f0: 31 38 29 22 0a 23 65 6e 64 69 66 0a 0a 73 74 61  18)".#endif..sta
d400: 74 69 63 20 69 6e 74 20 78 43 6f 6d 70 69 6c 65  tic int xCompile
d410: 4f 70 74 69 6f 6e 73 28 76 6f 69 64 20 2a 70 43  Options(void *pC
d420: 74 78 2c 20 69 6e 74 20 6e 56 61 6c 2c 20 63 68  tx, int nVal, ch
d430: 61 72 20 2a 2a 61 7a 56 61 6c 2c 20 63 68 61 72  ar **azVal, char
d440: 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20 70 72 69   **azCol){.  pri
d450: 6e 74 66 28 22 2d 2d 20 43 6f 6d 70 69 6c 65 20  ntf("-- Compile 
d460: 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61  option: %s\n", a
d470: 7a 56 61 6c 5b 30 5d 29 3b 0a 20 20 72 65 74 75  zVal[0]);.  retu
d480: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
d490: 0a 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72  .int main(int ar
d4a0: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29  gc, char **argv)
d4b0: 7b 0a 20 20 69 6e 74 20 64 6f 41 75 74 6f 76 61  {.  int doAutova
d4c0: 63 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  c = 0;          
d4d0: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d    /* True for --
d4e0: 61 75 74 6f 76 61 63 75 75 6d 20 2a 2f 0a 20 20  autovacuum */.  
d4f0: 69 6e 74 20 63 61 63 68 65 53 69 7a 65 20 3d 20  int cacheSize = 
d500: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  0;            /*
d510: 20 44 65 73 69 72 65 64 20 63 61 63 68 65 20 73   Desired cache s
d520: 69 7a 65 2e 20 20 30 20 6d 65 61 6e 73 20 64 65  ize.  0 means de
d530: 66 61 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 64  fault */.  int d
d540: 6f 45 78 63 6c 75 73 69 76 65 20 3d 20 30 3b 20  oExclusive = 0; 
d550: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
d560: 20 66 6f 72 20 2d 2d 65 78 63 6c 75 73 69 76 65   for --exclusive
d570: 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 20   */.  int nHeap 
d580: 3d 20 30 2c 20 6d 6e 48 65 61 70 20 3d 20 30 3b  = 0, mnHeap = 0;
d590: 20 20 20 20 2f 2a 20 48 65 61 70 20 73 69 7a 65      /* Heap size
d5a0: 20 66 72 6f 6d 20 2d 2d 68 65 61 70 20 2a 2f 0a   from --heap */.
d5b0: 20 20 69 6e 74 20 64 6f 49 6e 63 72 76 61 63 20    int doIncrvac 
d5c0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
d5d0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 69 6e  /* True for --in
d5e0: 63 72 76 61 63 75 75 6d 20 2a 2f 0a 20 20 63 6f  crvacuum */.  co
d5f0: 6e 73 74 20 63 68 61 72 20 2a 7a 4a 4d 6f 64 65  nst char *zJMode
d600: 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4a   = 0;       /* J
d610: 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
d620: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
d630: 79 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  y = 0;         /
d640: 2a 20 45 6e 63 72 79 70 74 69 6f 6e 20 6b 65 79  * Encryption key
d650: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 20   */.  int nLook 
d660: 3d 20 2d 31 2c 20 73 7a 4c 6f 6f 6b 20 3d 20 30  = -1, szLook = 0
d670: 3b 20 20 20 2f 2a 20 2d 2d 6c 6f 6f 6b 61 73 69  ;   /* --lookasi
d680: 64 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  de configuration
d690: 20 2a 2f 0a 20 20 69 6e 74 20 6e 6f 53 79 6e 63   */.  int noSync
d6a0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
d6b0: 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
d6c0: 2d 2d 6e 6f 73 79 6e 63 20 2a 2f 0a 20 20 69 6e  --nosync */.  in
d6d0: 74 20 70 61 67 65 53 69 7a 65 20 3d 20 30 3b 20  t pageSize = 0; 
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
d6f0: 65 73 69 72 65 64 20 70 61 67 65 20 73 69 7a 65  esired page size
d700: 2e 20 20 30 20 6d 65 61 6e 73 20 64 65 66 61 75  .  0 means defau
d710: 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 43 61  lt */.  int nPCa
d720: 63 68 65 20 3d 20 30 2c 20 73 7a 50 43 61 63 68  che = 0, szPCach
d730: 65 20 3d 20 30 3b 2f 2a 20 2d 2d 70 63 61 63 68  e = 0;/* --pcach
d740: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
d750: 2a 2f 0a 20 20 69 6e 74 20 64 6f 50 43 61 63 68  */.  int doPCach
d760: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
d770: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 2d 2d     /* True if --
d780: 70 63 61 63 68 65 20 69 73 20 73 65 65 6e 20 2a  pcache is seen *
d790: 2f 0a 20 20 69 6e 74 20 73 68 6f 77 53 74 61 74  /.  int showStat
d7a0: 73 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  s = 0;          
d7b0: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d    /* True for --
d7c0: 73 74 61 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  stats */.  int n
d7d0: 54 68 72 65 61 64 20 3d 20 30 3b 20 20 20 20 20  Thread = 0;     
d7e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 2d 2d 74 68           /* --th
d7f0: 72 65 61 64 73 20 76 61 6c 75 65 20 2a 2f 0a 20  reads value */. 
d800: 20 69 6e 74 20 6d 6d 61 70 53 69 7a 65 20 3d 20   int mmapSize = 
d810: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
d820: 2a 20 48 6f 77 20 62 69 67 20 6f 66 20 61 20 6d  * How big of a m
d830: 65 6d 6f 72 79 20 6d 61 70 20 74 6f 20 75 73 65  emory map to use
d840: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
d850: 20 2a 7a 54 53 65 74 20 3d 20 22 6d 61 69 6e 22   *zTSet = "main"
d860: 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 2d 2d 74  ;   /* Which --t
d870: 65 73 74 73 65 74 20 74 6f 72 75 6e 20 2a 2f 0a  estset torun */.
d880: 20 20 69 6e 74 20 64 6f 54 72 61 63 65 20 3d 20    int doTrace = 
d890: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
d8a0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 74 72  /* True for --tr
d8b0: 61 63 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ace */.  const c
d8c0: 68 61 72 20 2a 7a 45 6e 63 6f 64 69 6e 67 20 3d  har *zEncoding =
d8d0: 20 30 3b 20 20 20 20 2f 2a 20 2d 2d 75 74 66 31   0;    /* --utf1
d8e0: 36 62 65 20 6f 72 20 2d 2d 75 74 66 31 36 6c 65  6be or --utf16le
d8f0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
d900: 20 2a 7a 44 62 4e 61 6d 65 20 3d 20 30 3b 20 20   *zDbName = 0;  
d910: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
d920: 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65  he test database
d930: 20 2a 2f 0a 0a 20 20 76 6f 69 64 20 2a 70 48 65   */..  void *pHe
d940: 61 70 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ap = 0;         
d950: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
d960: 64 20 68 65 61 70 20 73 70 61 63 65 20 2a 2f 0a  d heap space */.
d970: 20 20 76 6f 69 64 20 2a 70 4c 6f 6f 6b 20 3d 20    void *pLook = 
d980: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
d990: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 6c 6f 6f  /* Allocated loo
d9a0: 6b 61 73 69 64 65 20 73 70 61 63 65 20 2a 2f 0a  kaside space */.
d9b0: 20 20 76 6f 69 64 20 2a 70 50 43 61 63 68 65 20    void *pPCache 
d9c0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
d9d0: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 74 6f  /* Allocated sto
d9e0: 72 61 67 65 20 66 6f 72 20 70 63 61 63 68 65 20  rage for pcache 
d9f0: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 69  */.  int iCur, i
da00: 48 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Hi;             
da10: 20 20 20 2f 2a 20 53 74 61 74 73 20 76 61 6c 75     /* Stats valu
da20: 65 73 2c 20 63 75 72 72 65 6e 74 20 61 6e 64 20  es, current and 
da30: 22 68 69 67 68 77 61 74 65 72 22 20 2a 2f 0a 20  "highwater" */. 
da40: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da60: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
da70: 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da90: 20 20 2f 2a 20 41 50 49 20 72 65 74 75 72 6e 20    /* API return 
daa0: 63 6f 64 65 20 2a 2f 0a 0a 20 20 2f 2a 20 44 69  code */..  /* Di
dab0: 73 70 6c 61 79 20 74 68 65 20 76 65 72 73 69 6f  splay the versio
dac0: 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 69 6e  n of SQLite bein
dad0: 67 20 74 65 73 74 65 64 20 2a 2f 0a 20 20 70 72  g tested */.  pr
dae0: 69 6e 74 66 28 22 2d 2d 20 53 70 65 65 64 74 65  intf("-- Speedte
daf0: 73 74 31 20 66 6f 72 20 53 51 4c 69 74 65 20 25  st1 for SQLite %
db00: 73 20 25 2e 35 30 73 5c 6e 22 2c 0a 20 20 20 20  s %.50s\n",.    
db10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62       sqlite3_lib
db20: 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74  version(), sqlit
db30: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a  e3_sourceid());.
db40: 0a 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 63 6f  .  /* Process co
db50: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d  mmand-line argum
db60: 65 6e 74 73 20 2a 2f 0a 20 20 67 2e 7a 57 52 20  ents */.  g.zWR 
db70: 3d 20 22 22 3b 0a 20 20 67 2e 7a 4e 4e 20 3d 20  = "";.  g.zNN = 
db80: 22 22 3b 0a 20 20 67 2e 7a 50 4b 20 3d 20 22 55  "";.  g.zPK = "U
db90: 4e 49 51 55 45 22 3b 0a 20 20 67 2e 73 7a 54 65  NIQUE";.  g.szTe
dba0: 73 74 20 3d 20 31 30 30 3b 0a 20 20 67 2e 6e 52  st = 100;.  g.nR
dbb0: 65 70 65 61 74 20 3d 20 31 3b 0a 20 20 66 6f 72  epeat = 1;.  for
dbc0: 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=1; i<argc; i+
dbd0: 2b 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  +){.    const ch
dbe0: 61 72 20 2a 7a 20 3d 20 61 72 67 76 5b 69 5d 3b  ar *z = argv[i];
dbf0: 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27  .    if( z[0]=='
dc00: 2d 27 20 29 7b 0a 20 20 20 20 20 20 64 6f 7b 20  -' ){.      do{ 
dc10: 7a 2b 2b 3b 20 7d 77 68 69 6c 65 28 20 7a 5b 30  z++; }while( z[0
dc20: 5d 3d 3d 27 2d 27 20 29 3b 0a 20 20 20 20 20 20  ]=='-' );.      
dc30: 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 61 75  if( strcmp(z,"au
dc40: 74 6f 76 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b  tovacuum")==0 ){
dc50: 0a 20 20 20 20 20 20 20 20 64 6f 41 75 74 6f 76  .        doAutov
dc60: 61 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  ac = 1;.      }e
dc70: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
dc80: 2c 22 63 61 63 68 65 73 69 7a 65 22 29 3d 3d 30  ,"cachesize")==0
dc90: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
dca0: 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61  i>=argc-1 ) fata
dcb0: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
dcc0: 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c   argument on %s\
dcd0: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
dce0: 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
dcf0: 20 20 20 63 61 63 68 65 53 69 7a 65 20 3d 20 69     cacheSize = i
dd00: 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
dd10: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  [i]);.      }els
dd20: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
dd30: 65 78 63 6c 75 73 69 76 65 22 29 3d 3d 30 20 29  exclusive")==0 )
dd40: 7b 0a 20 20 20 20 20 20 20 20 64 6f 45 78 63 6c  {.        doExcl
dd50: 75 73 69 76 65 20 3d 20 31 3b 0a 20 20 20 20 20  usive = 1;.     
dd60: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
dd70: 70 28 7a 2c 22 65 78 70 6c 61 69 6e 22 29 3d 3d  p(z,"explain")==
dd80: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62  0 ){.        g.b
dd90: 53 71 6c 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20  SqlOnly = 1;.   
dda0: 20 20 20 20 20 67 2e 62 45 78 70 6c 61 69 6e 20       g.bExplain 
ddb0: 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
ddc0: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 68   if( strcmp(z,"h
ddd0: 65 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eap")==0 ){.    
dde0: 20 20 20 20 69 66 28 20 69 3e 3d 61 72 67 63 2d      if( i>=argc-
ddf0: 32 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28  2 ) fatal_error(
de00: 22 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e  "missing argumen
de10: 74 73 20 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67  ts on %s\n", arg
de20: 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6e  v[i]);.        n
de30: 48 65 61 70 20 3d 20 69 6e 74 65 67 65 72 56 61  Heap = integerVa
de40: 6c 75 65 28 61 72 67 76 5b 69 2b 31 5d 29 3b 0a  lue(argv[i+1]);.
de50: 20 20 20 20 20 20 20 20 6d 6e 48 65 61 70 20 3d          mnHeap =
de60: 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72   integerValue(ar
de70: 67 76 5b 69 2b 32 5d 29 3b 0a 20 20 20 20 20 20  gv[i+2]);.      
de80: 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20    i += 2;.      
de90: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
dea0: 28 7a 2c 22 69 6e 63 72 76 61 63 75 75 6d 22 29  (z,"incrvacuum")
deb0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 64  ==0 ){.        d
dec0: 6f 49 6e 63 72 76 61 63 20 3d 20 31 3b 0a 20 20  oIncrvac = 1;.  
ded0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
dee0: 72 63 6d 70 28 7a 2c 22 6a 6f 75 72 6e 61 6c 22  rcmp(z,"journal"
def0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
df00: 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20  if( i>=argc-1 ) 
df10: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73  fatal_error("mis
df20: 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e  sing argument on
df30: 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29   %s\n", argv[i])
df40: 3b 0a 20 20 20 20 20 20 20 20 7a 4a 4d 6f 64 65  ;.        zJMode
df50: 20 3d 20 61 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20   = argv[++i];.  
df60: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
df70: 72 63 6d 70 28 7a 2c 22 6b 65 79 22 29 3d 3d 30  rcmp(z,"key")==0
df80: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
df90: 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61  i>=argc-1 ) fata
dfa0: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
dfb0: 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c   argument on %s\
dfc0: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
dfd0: 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 61 72 67        zKey = arg
dfe0: 76 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20 7d 65  v[++i];.      }e
dff0: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
e000: 2c 22 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30  ,"lookaside")==0
e010: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
e020: 69 3e 3d 61 72 67 63 2d 32 20 29 20 66 61 74 61  i>=argc-2 ) fata
e030: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
e040: 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 20 25 73   arguments on %s
e050: 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
e060: 20 20 20 20 20 20 20 6e 4c 6f 6f 6b 20 3d 20 69         nLook = i
e070: 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
e080: 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  [i+1]);.        
e090: 73 7a 4c 6f 6f 6b 20 3d 20 69 6e 74 65 67 65 72  szLook = integer
e0a0: 56 61 6c 75 65 28 61 72 67 76 5b 69 2b 32 5d 29  Value(argv[i+2])
e0b0: 3b 0a 20 20 20 20 20 20 20 20 69 20 2b 3d 20 32  ;.        i += 2
e0c0: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ;.#if SQLITE_VER
e0d0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30  SION_NUMBER>=300
e0e0: 36 30 30 30 0a 20 20 20 20 20 20 7d 65 6c 73 65  6000.      }else
e0f0: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6d   if( strcmp(z,"m
e100: 75 6c 74 69 74 68 72 65 61 64 22 29 3d 3d 30 20  ultithread")==0 
e110: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
e120: 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
e130: 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52  _CONFIG_MULTITHR
e140: 45 41 44 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  EAD);.      }els
e150: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
e160: 6e 6f 6d 65 6d 73 74 61 74 22 29 3d 3d 30 20 29  nomemstat")==0 )
e170: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
e180: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
e190: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
e1a0: 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  , 0);.#endif.#if
e1b0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
e1c0: 4e 55 4d 42 45 52 3e 3d 33 30 30 37 30 31 37 0a  NUMBER>=3007017.
e1d0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e1e0: 73 74 72 63 6d 70 28 7a 2c 20 22 6d 6d 61 70 22  strcmp(z, "mmap"
e1f0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
e200: 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20  if( i>=argc-1 ) 
e210: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73  fatal_error("mis
e220: 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e  sing argument on
e230: 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29   %s\n", argv[i])
e240: 3b 0a 20 20 20 20 20 20 20 20 6d 6d 61 70 53 69  ;.        mmapSi
e250: 7a 65 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75  ze = integerValu
e260: 65 28 61 72 67 76 5b 2b 2b 69 5d 29 3b 0a 20 23  e(argv[++i]);. #
e270: 65 6e 64 69 66 0a 20 20 20 20 20 20 7d 65 6c 73  endif.      }els
e280: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
e290: 6e 6f 73 79 6e 63 22 29 3d 3d 30 20 29 7b 0a 20  nosync")==0 ){. 
e2a0: 20 20 20 20 20 20 20 6e 6f 53 79 6e 63 20 3d 20         noSync = 
e2b0: 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  1;.      }else i
e2c0: 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e 6f 74  f( strcmp(z,"not
e2d0: 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  null")==0 ){.   
e2e0: 20 20 20 20 20 67 2e 7a 4e 4e 20 3d 20 22 4e 4f       g.zNN = "NO
e2f0: 54 20 4e 55 4c 4c 22 3b 0a 20 20 20 20 20 20 7d  T NULL";.      }
e300: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
e310: 7a 2c 22 70 61 67 65 73 69 7a 65 22 29 3d 3d 30  z,"pagesize")==0
e320: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
e330: 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61  i>=argc-1 ) fata
e340: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
e350: 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c   argument on %s\
e360: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
e370: 20 20 20 20 20 20 70 61 67 65 53 69 7a 65 20 3d        pageSize =
e380: 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72   integerValue(ar
e390: 67 76 5b 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20  gv[++i]);.      
e3a0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
e3b0: 28 7a 2c 22 70 63 61 63 68 65 22 29 3d 3d 30 20  (z,"pcache")==0 
e3c0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ){.        if( i
e3d0: 3e 3d 61 72 67 63 2d 32 20 29 20 66 61 74 61 6c  >=argc-2 ) fatal
e3e0: 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20  _error("missing 
e3f0: 61 72 67 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c  arguments on %s\
e400: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
e410: 20 20 20 20 20 20 6e 50 43 61 63 68 65 20 3d 20        nPCache = 
e420: 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67  integerValue(arg
e430: 76 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20  v[i+1]);.       
e440: 20 73 7a 50 43 61 63 68 65 20 3d 20 69 6e 74 65   szPCache = inte
e450: 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b 69 2b  gerValue(argv[i+
e460: 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 64 6f 50  2]);.        doP
e470: 43 61 63 68 65 20 3d 20 31 3b 0a 20 20 20 20 20  Cache = 1;.     
e480: 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20     i += 2;.     
e490: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
e4a0: 70 28 7a 2c 22 70 72 69 6d 61 72 79 6b 65 79 22  p(z,"primarykey"
e4b0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
e4c0: 67 2e 7a 50 4b 20 3d 20 22 50 52 49 4d 41 52 59  g.zPK = "PRIMARY
e4d0: 20 4b 45 59 22 3b 0a 20 20 20 20 20 20 7d 65 6c   KEY";.      }el
e4e0: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
e4f0: 22 72 65 70 65 61 74 22 29 3d 3d 30 20 29 7b 0a  "repeat")==0 ){.
e500: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d 61          if( i>=a
e510: 72 67 63 2d 31 20 29 20 66 61 74 61 6c 5f 65 72  rgc-1 ) fatal_er
e520: 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72 67  ror("missing arg
e530: 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c 6e 22 2c  uments on %s\n",
e540: 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
e550: 20 20 20 67 2e 6e 52 65 70 65 61 74 20 3d 20 69     g.nRepeat = i
e560: 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
e570: 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  [i+1]);.        
e580: 69 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  i += 1;.      }e
e590: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
e5a0: 2c 22 72 65 70 72 65 70 61 72 65 22 29 3d 3d 30  ,"reprepare")==0
e5b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 52   ){.        g.bR
e5c0: 65 70 72 65 70 61 72 65 20 3d 20 31 3b 0a 23 69  eprepare = 1;.#i
e5d0: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
e5e0: 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 30  _NUMBER>=3006000
e5f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
e600: 20 73 74 72 63 6d 70 28 7a 2c 22 73 65 72 69 61   strcmp(z,"seria
e610: 6c 69 7a 65 64 22 29 3d 3d 30 20 29 7b 0a 20 20  lized")==0 ){.  
e620: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f        sqlite3_co
e630: 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
e640: 49 47 5f 53 45 52 49 41 4c 49 5a 45 44 29 3b 0a  IG_SERIALIZED);.
e650: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e660: 73 74 72 63 6d 70 28 7a 2c 22 73 69 6e 67 6c 65  strcmp(z,"single
e670: 74 68 72 65 61 64 22 29 3d 3d 30 20 29 7b 0a 20  thread")==0 ){. 
e680: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63         sqlite3_c
e690: 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
e6a0: 46 49 47 5f 53 49 4e 47 4c 45 54 48 52 45 41 44  FIG_SINGLETHREAD
e6b0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  );.#endif.      
e6c0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
e6d0: 28 7a 2c 22 73 71 6c 6f 6e 6c 79 22 29 3d 3d 30  (z,"sqlonly")==0
e6e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 53   ){.        g.bS
e6f0: 71 6c 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20  qlOnly = 1;.    
e700: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
e710: 6d 70 28 7a 2c 22 73 68 72 69 6e 6b 2d 6d 65 6d  mp(z,"shrink-mem
e720: 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ory")==0 ){.    
e730: 20 20 20 20 67 2e 62 4d 65 6d 53 68 72 69 6e 6b      g.bMemShrink
e740: 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 1;.      }els
e750: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
e760: 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  size")==0 ){.   
e770: 20 20 20 20 20 69 66 28 20 69 3e 3d 61 72 67 63       if( i>=argc
e780: 2d 31 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72  -1 ) fatal_error
e790: 28 22 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65  ("missing argume
e7a0: 6e 74 20 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67  nt on %s\n", arg
e7b0: 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 67  v[i]);.        g
e7c0: 2e 73 7a 54 65 73 74 20 3d 20 69 6e 74 65 67 65  .szTest = intege
e7d0: 72 56 61 6c 75 65 28 61 72 67 76 5b 2b 2b 69 5d  rValue(argv[++i]
e7e0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
e7f0: 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 73 74 61  f( strcmp(z,"sta
e800: 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ts")==0 ){.     
e810: 20 20 20 73 68 6f 77 53 74 61 74 73 20 3d 20 31     showStats = 1
e820: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
e830: 28 20 73 74 72 63 6d 70 28 7a 2c 22 74 65 6d 70  ( strcmp(z,"temp
e840: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
e850: 20 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29   if( i>=argc-1 )
e860: 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69   fatal_error("mi
e870: 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f  ssing argument o
e880: 6e 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d  n %s\n", argv[i]
e890: 29 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  );.        i++;.
e8a0: 20 20 20 20 20 20 20 20 69 66 28 20 61 72 67 76          if( argv
e8b0: 5b 69 5d 5b 30 5d 3c 27 30 27 20 7c 7c 20 61 72  [i][0]<'0' || ar
e8c0: 67 76 5b 69 5d 5b 30 5d 3e 27 39 27 20 7c 7c 20  gv[i][0]>'9' || 
e8d0: 61 72 67 76 5b 69 5d 5b 31 5d 21 3d 30 20 29 7b  argv[i][1]!=0 ){
e8e0: 0a 20 20 20 20 20 20 20 20 20 20 66 61 74 61 6c  .          fatal
e8f0: 5f 65 72 72 6f 72 28 22 61 72 67 75 6d 65 6e 74  _error("argument
e900: 20 74 6f 20 2d 2d 74 65 6d 70 20 73 68 6f 75 6c   to --temp shoul
e910: 64 20 62 65 20 69 6e 74 65 67 65 72 20 62 65 74  d be integer bet
e920: 77 65 65 6e 20 30 20 61 6e 64 20 39 22 29 3b 0a  ween 0 and 9");.
e930: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e940: 20 20 67 2e 65 54 65 6d 70 20 3d 20 61 72 67 76    g.eTemp = argv
e950: 5b 69 5d 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20  [i][0] - '0';.  
e960: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
e970: 72 63 6d 70 28 7a 2c 22 74 65 73 74 73 65 74 22  rcmp(z,"testset"
e980: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
e990: 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20  if( i>=argc-1 ) 
e9a0: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73  fatal_error("mis
e9b0: 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e  sing argument on
e9c0: 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29   %s\n", argv[i])
e9d0: 3b 0a 20 20 20 20 20 20 20 20 7a 54 53 65 74 20  ;.        zTSet 
e9e0: 3d 20 61 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20 20  = argv[++i];.   
e9f0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
ea00: 63 6d 70 28 7a 2c 22 74 72 61 63 65 22 29 3d 3d  cmp(z,"trace")==
ea10: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 64 6f 54  0 ){.        doT
ea20: 72 61 63 65 20 3d 20 31 3b 0a 20 20 20 20 20 20  race = 1;.      
ea30: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
ea40: 28 7a 2c 22 74 68 72 65 61 64 73 22 29 3d 3d 30  (z,"threads")==0
ea50: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
ea60: 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61  i>=argc-1 ) fata
ea70: 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67  l_error("missing
ea80: 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c   argument on %s\
ea90: 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
eaa0: 20 20 20 20 20 20 6e 54 68 72 65 61 64 20 3d 20        nThread = 
eab0: 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67  integerValue(arg
eac0: 76 5b 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20 7d  v[++i]);.      }
ead0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
eae0: 7a 2c 22 75 74 66 31 36 6c 65 22 29 3d 3d 30 20  z,"utf16le")==0 
eaf0: 29 7b 0a 20 20 20 20 20 20 20 20 7a 45 6e 63 6f  ){.        zEnco
eb00: 64 69 6e 67 20 3d 20 22 75 74 66 31 36 6c 65 22  ding = "utf16le"
eb10: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
eb20: 28 20 73 74 72 63 6d 70 28 7a 2c 22 75 74 66 31  ( strcmp(z,"utf1
eb30: 36 62 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  6be")==0 ){.    
eb40: 20 20 20 20 7a 45 6e 63 6f 64 69 6e 67 20 3d 20      zEncoding = 
eb50: 22 75 74 66 31 36 62 65 22 3b 0a 20 20 20 20 20  "utf16be";.     
eb60: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
eb70: 70 28 7a 2c 22 76 65 72 69 66 79 22 29 3d 3d 30  p(z,"verify")==0
eb80: 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 56   ){.        g.bV
eb90: 65 72 69 66 79 20 3d 20 31 3b 0a 20 20 20 20 20  erify = 1;.     
eba0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
ebb0: 70 28 7a 2c 22 77 69 74 68 6f 75 74 2d 72 6f 77  p(z,"without-row
ebc0: 69 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  id")==0 ){.     
ebd0: 20 20 20 67 2e 7a 57 52 20 3d 20 22 57 49 54 48     g.zWR = "WITH
ebe0: 4f 55 54 20 52 4f 57 49 44 22 3b 0a 20 20 20 20  OUT ROWID";.    
ebf0: 20 20 20 20 67 2e 7a 50 4b 20 3d 20 22 50 52 49      g.zPK = "PRI
ec00: 4d 41 52 59 20 4b 45 59 22 3b 0a 20 20 20 20 20  MARY KEY";.     
ec10: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
ec20: 70 28 7a 2c 20 22 68 65 6c 70 22 29 3d 3d 30 20  p(z, "help")==0 
ec30: 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 3f 22 29  || strcmp(z,"?")
ec40: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==0 ){.        p
ec50: 72 69 6e 74 66 28 7a 48 65 6c 70 2c 20 61 72 67  rintf(zHelp, arg
ec60: 76 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 65  v[0]);.        e
ec70: 78 69 74 28 30 29 3b 0a 20 20 20 20 20 20 7d 65  xit(0);.      }e
ec80: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 66 61 74  lse{.        fat
ec90: 61 6c 5f 65 72 72 6f 72 28 22 75 6e 6b 6e 6f 77  al_error("unknow
eca0: 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 55 73  n option: %s\nUs
ecb0: 65 20 5c 22 25 73 20 2d 3f 5c 22 20 66 6f 72 20  e \"%s -?\" for 
ecc0: 68 65 6c 70 5c 6e 22 2c 0a 20 20 20 20 20 20 20  help\n",.       
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
ece0: 76 5b 69 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a  v[i], argv[0]);.
ecf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
ed00: 65 20 69 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30  e if( zDbName==0
ed10: 20 29 7b 0a 20 20 20 20 20 20 7a 44 62 4e 61 6d   ){.      zDbNam
ed20: 65 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20  e = argv[i];.   
ed30: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 61   }else{.      fa
ed40: 74 61 6c 5f 65 72 72 6f 72 28 22 73 75 72 70 6c  tal_error("surpl
ed50: 75 73 20 61 72 67 75 6d 65 6e 74 3a 20 25 73 5c  us argument: %s\
ed60: 6e 55 73 65 20 5c 22 25 73 20 2d 3f 5c 22 20 66  nUse \"%s -?\" f
ed70: 6f 72 20 68 65 6c 70 5c 6e 22 2c 0a 20 20 20 20  or help\n",.    
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
ed90: 67 76 5b 69 5d 2c 20 61 72 67 76 5b 30 5d 29 3b  gv[i], argv[0]);
eda0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
edb0: 20 7a 44 62 4e 61 6d 65 21 3d 30 20 29 20 75 6e   zDbName!=0 ) un
edc0: 6c 69 6e 6b 28 7a 44 62 4e 61 6d 65 29 3b 0a 23  link(zDbName);.#
edd0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
ede0: 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30  N_NUMBER>=300600
edf0: 31 0a 20 20 69 66 28 20 6e 48 65 61 70 3e 30 20  1.  if( nHeap>0 
ee00: 29 7b 0a 20 20 20 20 70 48 65 61 70 20 3d 20 6d  ){.    pHeap = m
ee10: 61 6c 6c 6f 63 28 20 6e 48 65 61 70 20 29 3b 0a  alloc( nHeap );.
ee20: 20 20 20 20 69 66 28 20 70 48 65 61 70 3d 3d 30      if( pHeap==0
ee30: 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22   ) fatal_error("
ee40: 63 61 6e 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 20  cannot allocate 
ee50: 25 64 2d 62 79 74 65 20 68 65 61 70 5c 6e 22 2c  %d-byte heap\n",
ee60: 20 6e 48 65 61 70 29 3b 0a 20 20 20 20 72 63 20   nHeap);.    rc 
ee70: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  = sqlite3_config
ee80: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  (SQLITE_CONFIG_H
ee90: 45 41 50 2c 20 70 48 65 61 70 2c 20 6e 48 65 61  EAP, pHeap, nHea
eea0: 70 2c 20 6d 6e 48 65 61 70 29 3b 0a 20 20 20 20  p, mnHeap);.    
eeb0: 69 66 28 20 72 63 20 29 20 66 61 74 61 6c 5f 65  if( rc ) fatal_e
eec0: 72 72 6f 72 28 22 68 65 61 70 20 63 6f 6e 66 69  rror("heap confi
eed0: 67 75 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 3a  guration failed:
eee0: 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 7d   %d\n", rc);.  }
eef0: 0a 20 20 69 66 28 20 64 6f 50 43 61 63 68 65 20  .  if( doPCache 
ef00: 29 7b 0a 20 20 20 20 69 66 28 20 6e 50 43 61 63  ){.    if( nPCac
ef10: 68 65 3e 30 20 26 26 20 73 7a 50 43 61 63 68 65  he>0 && szPCache
ef20: 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 50 43 61  >0 ){.      pPCa
ef30: 63 68 65 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 50  che = malloc( nP
ef40: 43 61 63 68 65 2a 28 73 71 6c 69 74 65 33 5f 69  Cache*(sqlite3_i
ef50: 6e 74 36 34 29 73 7a 50 43 61 63 68 65 20 29 3b  nt64)szPCache );
ef60: 0a 20 20 20 20 20 20 69 66 28 20 70 50 43 61 63  .      if( pPCac
ef70: 68 65 3d 3d 30 20 29 20 66 61 74 61 6c 5f 65 72  he==0 ) fatal_er
ef80: 72 6f 72 28 22 63 61 6e 6e 6f 74 20 61 6c 6c 6f  ror("cannot allo
ef90: 63 61 74 65 20 25 6c 6c 64 2d 62 79 74 65 20 70  cate %lld-byte p
efa0: 63 61 63 68 65 5c 6e 22 2c 0a 20 20 20 20 20 20  cache\n",.      
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 50 43               nPC
efd0: 61 63 68 65 2a 28 73 71 6c 69 74 65 33 5f 69 6e  ache*(sqlite3_in
efe0: 74 36 34 29 73 7a 50 43 61 63 68 65 29 3b 0a 20  t64)szPCache);. 
eff0: 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
f000: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
f010: 49 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43  ITE_CONFIG_PAGEC
f020: 41 43 48 45 2c 20 70 50 43 61 63 68 65 2c 20 73  ACHE, pPCache, s
f030: 7a 50 43 61 63 68 65 2c 20 6e 50 43 61 63 68 65  zPCache, nPCache
f040: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
f050: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 70 63 61  fatal_error("pca
f060: 63 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  che configuratio
f070: 6e 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c  n failed: %d\n",
f080: 20 72 63 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20   rc);.  }.  if( 
f090: 6e 4c 6f 6f 6b 3e 3d 30 20 29 7b 0a 20 20 20 20  nLook>=0 ){.    
f0a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
f0b0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f  QLITE_CONFIG_LOO
f0c0: 4b 41 53 49 44 45 2c 20 30 2c 20 30 29 3b 0a 20  KASIDE, 0, 0);. 
f0d0: 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a   }.#endif. .  /*
f0e0: 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61   Open the databa
f0f0: 73 65 20 61 6e 64 20 74 68 65 20 69 6e 70 75 74  se and the input
f100: 20 66 69 6c 65 20 2a 2f 0a 20 20 69 66 28 20 73   file */.  if( s
f110: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 44 62 4e  qlite3_open(zDbN
f120: 61 6d 65 2c 20 26 67 2e 64 62 29 20 29 7b 0a 20  ame, &g.db) ){. 
f130: 20 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22     fatal_error("
f140: 43 61 6e 6e 6f 74 20 6f 70 65 6e 20 64 61 74 61  Cannot open data
f150: 62 61 73 65 20 66 69 6c 65 3a 20 25 73 5c 6e 22  base file: %s\n"
f160: 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20 7d 0a  , zDbName);.  }.
f170: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
f180: 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30  ON_NUMBER>=30060
f190: 30 31 0a 20 20 69 66 28 20 6e 4c 6f 6f 6b 3e 30  01.  if( nLook>0
f1a0: 20 26 26 20 73 7a 4c 6f 6f 6b 3e 30 20 29 7b 0a   && szLook>0 ){.
f1b0: 20 20 20 20 70 4c 6f 6f 6b 20 3d 20 6d 61 6c 6c      pLook = mall
f1c0: 6f 63 28 20 6e 4c 6f 6f 6b 2a 73 7a 4c 6f 6f 6b  oc( nLook*szLook
f1d0: 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
f1e0: 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 28 67  ite3_db_config(g
f1f0: 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 43 4f  .db, SQLITE_DBCO
f200: 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  NFIG_LOOKASIDE, 
f210: 70 4c 6f 6f 6b 2c 20 73 7a 4c 6f 6f 6b 2c 6e 4c  pLook, szLook,nL
f220: 6f 6f 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ook);.    if( rc
f230: 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22   ) fatal_error("
f240: 6c 6f 6f 6b 61 73 69 64 65 20 63 6f 6e 66 69 67  lookaside config
f250: 75 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 3a 20  uration failed: 
f260: 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 7d 0a  %d\n", rc);.  }.
f270: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 53 65 74  #endif..  /* Set
f280: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f290: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 2a 2f 0a  tion options */.
f2a0: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
f2b0: 5f 66 75 6e 63 74 69 6f 6e 28 67 2e 64 62 2c 20  _function(g.db, 
f2c0: 22 72 61 6e 64 6f 6d 22 2c 20 30 2c 20 53 51 4c  "random", 0, SQL
f2d0: 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 72 61 6e  ITE_UTF8, 0, ran
f2e0: 64 6f 6d 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  domFunc, 0, 0);.
f2f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f300: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20  MIT_DEPRECATED. 
f310: 20 69 66 28 20 64 6f 54 72 61 63 65 20 29 20 73   if( doTrace ) s
f320: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 67 2e 64  qlite3_trace(g.d
f330: 62 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  b, traceCallback
f340: 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69  , 0);.#endif.  i
f350: 66 28 20 6d 6d 61 70 53 69 7a 65 3e 30 20 29 7b  f( mmapSize>0 ){
f360: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
f370: 65 78 65 63 28 22 50 52 41 47 4d 41 20 6d 6d 61  exec("PRAGMA mma
f380: 70 5f 73 69 7a 65 3d 25 64 22 2c 20 6d 6d 61 70  p_size=%d", mmap
f390: 53 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 73 70 65  Size);.  }.  spe
f3a0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 50 52  edtest1_exec("PR
f3b0: 41 47 4d 41 20 74 68 72 65 61 64 73 3d 25 64 22  AGMA threads=%d"
f3c0: 2c 20 6e 54 68 72 65 61 64 29 3b 0a 20 20 69 66  , nThread);.  if
f3d0: 28 20 7a 4b 65 79 20 29 7b 0a 20 20 20 20 73 70  ( zKey ){.    sp
f3e0: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 50  eedtest1_exec("P
f3f0: 52 41 47 4d 41 20 6b 65 79 28 27 25 73 27 29 22  RAGMA key('%s')"
f400: 2c 20 7a 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 69  , zKey);.  }.  i
f410: 66 28 20 7a 45 6e 63 6f 64 69 6e 67 20 29 7b 0a  f( zEncoding ){.
f420: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65      speedtest1_e
f430: 78 65 63 28 22 50 52 41 47 4d 41 20 65 6e 63 6f  xec("PRAGMA enco
f440: 64 69 6e 67 3d 25 73 22 2c 20 7a 45 6e 63 6f 64  ding=%s", zEncod
f450: 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ing);.  }.  if( 
f460: 64 6f 41 75 74 6f 76 61 63 20 29 7b 0a 20 20 20  doAutovac ){.   
f470: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
f480: 28 22 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61  ("PRAGMA auto_va
f490: 63 75 75 6d 3d 46 55 4c 4c 22 29 3b 0a 20 20 7d  cuum=FULL");.  }
f4a0: 65 6c 73 65 20 69 66 28 20 64 6f 49 6e 63 72 76  else if( doIncrv
f4b0: 61 63 20 29 7b 0a 20 20 20 20 73 70 65 65 64 74  ac ){.    speedt
f4c0: 65 73 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d  est1_exec("PRAGM
f4d0: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 49 4e  A auto_vacuum=IN
f4e0: 43 52 45 4d 45 4e 54 41 4c 22 29 3b 0a 20 20 7d  CREMENTAL");.  }
f4f0: 0a 20 20 69 66 28 20 70 61 67 65 53 69 7a 65 20  .  if( pageSize 
f500: 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  ){.    speedtest
f510: 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20 70  1_exec("PRAGMA p
f520: 61 67 65 5f 73 69 7a 65 3d 25 64 22 2c 20 70 61  age_size=%d", pa
f530: 67 65 53 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69  geSize);.  }.  i
f540: 66 28 20 63 61 63 68 65 53 69 7a 65 20 29 7b 0a  f( cacheSize ){.
f550: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65      speedtest1_e
f560: 78 65 63 28 22 50 52 41 47 4d 41 20 63 61 63 68  xec("PRAGMA cach
f570: 65 5f 73 69 7a 65 3d 25 64 22 2c 20 63 61 63 68  e_size=%d", cach
f580: 65 53 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66  eSize);.  }.  if
f590: 28 20 6e 6f 53 79 6e 63 20 29 20 73 70 65 65 64  ( noSync ) speed
f5a0: 74 65 73 74 31 5f 65 78 65 63 28 22 50 52 41 47  test1_exec("PRAG
f5b0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  MA synchronous=O
f5c0: 46 46 22 29 3b 0a 20 20 69 66 28 20 64 6f 45 78  FF");.  if( doEx
f5d0: 63 6c 75 73 69 76 65 20 29 7b 0a 20 20 20 20 73  clusive ){.    s
f5e0: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
f5f0: 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d  PRAGMA locking_m
f600: 6f 64 65 3d 45 58 43 4c 55 53 49 56 45 22 29 3b  ode=EXCLUSIVE");
f610: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 4a 4d 6f 64  .  }.  if( zJMod
f620: 65 20 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65  e ){.    speedte
f630: 73 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41  st1_exec("PRAGMA
f640: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 25 73   journal_mode=%s
f650: 22 2c 20 7a 4a 4d 6f 64 65 29 3b 0a 20 20 7d 0a  ", zJMode);.  }.
f660: 0a 20 20 69 66 28 20 67 2e 62 45 78 70 6c 61 69  .  if( g.bExplai
f670: 6e 20 29 20 70 72 69 6e 74 66 28 22 2e 65 78 70  n ) printf(".exp
f680: 6c 61 69 6e 5c 6e 2e 65 63 68 6f 20 6f 6e 5c 6e  lain\n.echo on\n
f690: 22 29 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70  ");.  if( strcmp
f6a0: 28 7a 54 53 65 74 2c 22 6d 61 69 6e 22 29 3d 3d  (zTSet,"main")==
f6b0: 30 20 29 7b 0a 20 20 20 20 74 65 73 74 73 65 74  0 ){.    testset
f6c0: 5f 6d 61 69 6e 28 29 3b 0a 20 20 7d 65 6c 73 65  _main();.  }else
f6d0: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 53 65   if( strcmp(zTSe
f6e0: 74 2c 22 64 65 62 75 67 31 22 29 3d 3d 30 20 29  t,"debug1")==0 )
f6f0: 7b 0a 20 20 20 20 74 65 73 74 73 65 74 5f 64 65  {.    testset_de
f700: 62 75 67 31 28 29 3b 0a 20 20 7d 65 6c 73 65 20  bug1();.  }else 
f710: 69 66 28 20 73 74 72 63 6d 70 28 7a 54 53 65 74  if( strcmp(zTSet
f720: 2c 22 6f 72 6d 22 29 3d 3d 30 20 29 7b 0a 20 20  ,"orm")==0 ){.  
f730: 20 20 74 65 73 74 73 65 74 5f 6f 72 6d 28 29 3b    testset_orm();
f740: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
f750: 63 6d 70 28 7a 54 53 65 74 2c 22 63 74 65 22 29  cmp(zTSet,"cte")
f760: 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65 73 74 73  ==0 ){.    tests
f770: 65 74 5f 63 74 65 28 29 3b 0a 20 20 7d 65 6c 73  et_cte();.  }els
f780: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 53  e if( strcmp(zTS
f790: 65 74 2c 22 72 74 72 65 65 22 29 3d 3d 30 20 29  et,"rtree")==0 )
f7a0: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
f7b0: 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a 20 20 20  ENABLE_RTREE.   
f7c0: 20 74 65 73 74 73 65 74 5f 72 74 72 65 65 28 36   testset_rtree(6
f7d0: 2c 20 31 34 37 29 3b 0a 23 65 6c 73 65 0a 20 20  , 147);.#else.  
f7e0: 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 63    fatal_error("c
f7f0: 6f 6d 70 69 6c 65 20 77 69 74 68 20 2d 44 53 51  ompile with -DSQ
f800: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45  LITE_ENABLE_RTRE
f810: 45 20 74 6f 20 65 6e 61 62 6c 65 20 22 0a 20 20  E to enable ".  
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74                "t
f830: 68 65 20 52 2d 54 72 65 65 20 74 65 73 74 73 5c  he R-Tree tests\
f840: 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  n");.#endif.  }e
f850: 6c 73 65 7b 0a 20 20 20 20 66 61 74 61 6c 5f 65  lse{.    fatal_e
f860: 72 72 6f 72 28 22 75 6e 6b 6e 6f 77 6e 20 74 65  rror("unknown te
f870: 73 74 73 65 74 3a 20 5c 22 25 73 5c 22 5c 6e 43  stset: \"%s\"\nC
f880: 68 6f 69 63 65 73 3a 20 6d 61 69 6e 20 64 65 62  hoices: main deb
f890: 75 67 31 20 63 74 65 20 72 74 72 65 65 5c 6e 22  ug1 cte rtree\n"
f8a0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
f8b0: 20 20 20 7a 54 53 65 74 29 3b 0a 20 20 7d 0a 20     zTSet);.  }. 
f8c0: 20 73 70 65 65 64 74 65 73 74 31 5f 66 69 6e 61   speedtest1_fina
f8d0: 6c 28 29 3b 0a 0a 20 20 69 66 28 20 73 68 6f 77  l();..  if( show
f8e0: 53 74 61 74 73 20 29 7b 0a 20 20 20 20 73 71 6c  Stats ){.    sql
f8f0: 69 74 65 33 5f 65 78 65 63 28 67 2e 64 62 2c 20  ite3_exec(g.db, 
f900: 22 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f  "PRAGMA compile_
f910: 6f 70 74 69 6f 6e 73 22 2c 20 78 43 6f 6d 70 69  options", xCompi
f920: 6c 65 4f 70 74 69 6f 6e 73 2c 20 30 2c 20 30 29  leOptions, 0, 0)
f930: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 44 61 74 61  ;.  }..  /* Data
f940: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
f950: 73 74 61 74 69 73 74 69 63 73 20 70 72 69 6e 74  statistics print
f960: 65 64 20 61 66 74 65 72 20 62 6f 74 68 20 70 72  ed after both pr
f970: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
f980: 73 0a 20 20 2a 2a 20 68 61 76 65 20 62 65 65 6e  s.  ** have been
f990: 20 66 69 6e 61 6c 69 7a 65 64 20 2a 2f 0a 23 69   finalized */.#i
f9a0: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
f9b0: 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 37 30 30 39  _NUMBER>=3007009
f9c0: 0a 20 20 69 66 28 20 73 68 6f 77 53 74 61 74 73  .  if( showStats
f9d0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
f9e0: 64 62 5f 73 74 61 74 75 73 28 67 2e 64 62 2c 20  db_status(g.db, 
f9f0: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
fa00: 4c 4f 4f 4b 41 53 49 44 45 5f 55 53 45 44 2c 20  LOOKASIDE_USED, 
fa10: 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b  &iCur, &iHi, 0);
fa20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20  .    printf("-- 
fa30: 4c 6f 6f 6b 61 73 69 64 65 20 53 6c 6f 74 73 20  Lookaside Slots 
fa40: 55 73 65 64 3a 20 20 20 20 20 20 20 20 25 64 20  Used:        %d 
fa50: 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20 69 43 75  (max %d)\n", iCu
fa60: 72 2c 69 48 69 29 3b 0a 20 20 20 20 73 71 6c 69  r,iHi);.    sqli
fa70: 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e  te3_db_status(g.
fa80: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
fa90: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 48 49  TUS_LOOKASIDE_HI
faa0: 54 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20  T, &iCur, &iHi, 
fab0: 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  0);.    printf("
fac0: 2d 2d 20 53 75 63 63 65 73 73 66 75 6c 20 6c 6f  -- Successful lo
fad0: 6f 6b 61 73 69 64 65 73 3a 20 20 20 20 20 20 20  okasides:       
fae0: 25 64 5c 6e 22 2c 20 69 48 69 29 3b 0a 20 20 20  %d\n", iHi);.   
faf0: 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
fb00: 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f  us(g.db, SQLITE_
fb10: 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49  DBSTATUS_LOOKASI
fb20: 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 20 26 69  DE_MISS_SIZE, &i
fb30: 43 75 72 2c 26 69 48 69 2c 30 29 3b 0a 20 20 20  Cur,&iHi,0);.   
fb40: 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c 6f 6f 6b   printf("-- Look
fb50: 61 73 69 64 65 20 73 69 7a 65 20 66 61 75 6c 74  aside size fault
fb60: 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20  s:       %d\n", 
fb70: 69 48 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iHi);.    sqlite
fb80: 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64 62  3_db_status(g.db
fb90: 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
fba0: 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53  S_LOOKASIDE_MISS
fbb0: 5f 46 55 4c 4c 2c 20 26 69 43 75 72 2c 26 69 48  _FULL, &iCur,&iH
fbc0: 69 2c 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  i,0);.    printf
fbd0: 28 22 2d 2d 20 4c 6f 6f 6b 61 73 69 64 65 20 4f  ("-- Lookaside O
fbe0: 4f 4d 20 66 61 75 6c 74 73 3a 20 20 20 20 20 20  OM faults:      
fbf0: 20 20 25 64 5c 6e 22 2c 20 69 48 69 29 3b 0a 20    %d\n", iHi);. 
fc00: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
fc10: 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54  atus(g.db, SQLIT
fc20: 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
fc30: 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69  _USED, &iCur, &i
fc40: 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e  Hi, 0);.    prin
fc50: 74 66 28 22 2d 2d 20 50 61 67 65 72 20 48 65 61  tf("-- Pager Hea
fc60: 70 20 55 73 61 67 65 3a 20 20 20 20 20 20 20 20  p Usage:        
fc70: 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c      %d bytes\n",
fc80: 20 69 43 75 72 29 3b 0a 20 20 20 20 73 71 6c 69   iCur);.    sqli
fc90: 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e  te3_db_status(g.
fca0: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
fcb0: 54 55 53 5f 43 41 43 48 45 5f 48 49 54 2c 20 26  TUS_CACHE_HIT, &
fcc0: 69 43 75 72 2c 20 26 69 48 69 2c 20 31 29 3b 0a  iCur, &iHi, 1);.
fcd0: 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 50      printf("-- P
fce0: 61 67 65 20 63 61 63 68 65 20 68 69 74 73 3a 20  age cache hits: 
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
fd00: 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 73 71  ", iCur);.    sq
fd10: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
fd20: 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  g.db, SQLITE_DBS
fd30: 54 41 54 55 53 5f 43 41 43 48 45 5f 4d 49 53 53  TATUS_CACHE_MISS
fd40: 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20 31  , &iCur, &iHi, 1
fd50: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d  );.    printf("-
fd60: 2d 20 50 61 67 65 20 63 61 63 68 65 20 6d 69 73  - Page cache mis
fd70: 73 65 73 3a 20 20 20 20 20 20 20 20 20 20 20 25  ses:           %
fd80: 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 23 69 66  d\n", iCur);.#if
fd90: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
fda0: 4e 55 4d 42 45 52 3e 3d 33 30 30 37 30 31 32 0a  NUMBER>=3007012.
fdb0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
fdc0: 74 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49  tatus(g.db, SQLI
fdd0: 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48  TE_DBSTATUS_CACH
fde0: 45 5f 57 52 49 54 45 2c 20 26 69 43 75 72 2c 20  E_WRITE, &iCur, 
fdf0: 26 69 48 69 2c 20 31 29 3b 0a 20 20 20 20 70 72  &iHi, 1);.    pr
fe00: 69 6e 74 66 28 22 2d 2d 20 50 61 67 65 20 63 61  intf("-- Page ca
fe10: 63 68 65 20 77 72 69 74 65 73 3a 20 20 20 20 20  che writes:     
fe20: 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75        %d\n", iCu
fe30: 72 29 3b 20 0a 23 65 6e 64 69 66 0a 20 20 20 20  r); .#endif.    
fe40: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
fe50: 73 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44  s(g.db, SQLITE_D
fe60: 42 53 54 41 54 55 53 5f 53 43 48 45 4d 41 5f 55  BSTATUS_SCHEMA_U
fe70: 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69  SED, &iCur, &iHi
fe80: 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  , 0);.    printf
fe90: 28 22 2d 2d 20 53 63 68 65 6d 61 20 48 65 61 70  ("-- Schema Heap
fea0: 20 55 73 61 67 65 3a 20 20 20 20 20 20 20 20 20   Usage:         
feb0: 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 20 69    %d bytes\n", i
fec0: 43 75 72 29 3b 20 0a 20 20 20 20 73 71 6c 69 74  Cur); .    sqlit
fed0: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64  e3_db_status(g.d
fee0: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
fef0: 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26 69  US_STMT_USED, &i
ff00: 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20  Cur, &iHi, 0);. 
ff10: 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 53 74     printf("-- St
ff20: 61 74 65 6d 65 6e 74 20 48 65 61 70 20 55 73 61  atement Heap Usa
ff30: 67 65 3a 20 20 20 20 20 20 20 20 25 64 20 62 79  ge:        %d by
ff40: 74 65 73 5c 6e 22 2c 20 69 43 75 72 29 3b 20 0a  tes\n", iCur); .
ff50: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 73 71    }.#endif..  sq
ff60: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 67 2e 64 62  lite3_close(g.db
ff70: 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 56  );..#if SQLITE_V
ff80: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33  ERSION_NUMBER>=3
ff90: 30 30 36 30 30 31 0a 20 20 2f 2a 20 47 6c 6f 62  006001.  /* Glob
ffa0: 61 6c 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20  al memory usage 
ffb0: 73 74 61 74 69 73 74 69 63 73 20 70 72 69 6e 74  statistics print
ffc0: 65 64 20 61 66 74 65 72 20 74 68 65 20 64 61 74  ed after the dat
ffd0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ffe0: 0a 20 20 2a 2a 20 68 61 73 20 63 6c 6f 73 65 64  .  ** has closed
fff0: 2e 20 20 4d 65 6d 6f 72 79 20 75 73 61 67 65 20  .  Memory usage 
10000 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 20 61  should be zero a
10010 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 2a 2f  t this point. */
10020 0a 20 20 69 66 28 20 73 68 6f 77 53 74 61 74 73  .  if( showStats
10030 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
10040 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54  status(SQLITE_ST
10050 41 54 55 53 5f 4d 45 4d 4f 52 59 5f 55 53 45 44  ATUS_MEMORY_USED
10060 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30  , &iCur, &iHi, 0
10070 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d  );.    printf("-
10080 2d 20 4d 65 6d 6f 72 79 20 55 73 65 64 20 28 62  - Memory Used (b
10090 79 74 65 73 29 3a 20 20 20 20 20 20 20 20 20 25  ytes):         %
100a0 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20 69  d (max %d)\n", i
100b0 43 75 72 2c 69 48 69 29 3b 0a 23 69 66 20 53 51  Cur,iHi);.#if SQ
100c0 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
100d0 42 45 52 3e 3d 33 30 30 37 30 30 30 0a 20 20 20  BER>=3007000.   
100e0 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
100f0 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 41  SQLITE_STATUS_MA
10100 4c 4c 4f 43 5f 43 4f 55 4e 54 2c 20 26 69 43 75  LLOC_COUNT, &iCu
10110 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20 20  r, &iHi, 0);.   
10120 20 70 72 69 6e 74 66 28 22 2d 2d 20 4f 75 74 73   printf("-- Outs
10130 74 61 6e 64 69 6e 67 20 41 6c 6c 6f 63 61 74 69  tanding Allocati
10140 6f 6e 73 3a 20 20 20 20 20 25 64 20 28 6d 61 78  ons:     %d (max
10150 20 25 64 29 5c 6e 22 2c 20 69 43 75 72 2c 69 48   %d)\n", iCur,iH
10160 69 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 73  i);.#endif.    s
10170 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53 51  qlite3_status(SQ
10180 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45  LITE_STATUS_PAGE
10190 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57 2c 20  CACHE_OVERFLOW, 
101a0 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b  &iCur, &iHi, 0);
101b0 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20  .    printf("-- 
101c0 50 63 61 63 68 65 20 4f 76 65 72 66 6c 6f 77 20  Pcache Overflow 
101d0 42 79 74 65 73 3a 20 20 20 20 20 20 20 25 64 20  Bytes:       %d 
101e0 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20 69 43 75  (max %d)\n", iCu
101f0 72 2c 69 48 69 29 3b 0a 20 20 20 20 73 71 6c 69  r,iHi);.    sqli
10200 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c 49 54  te3_status(SQLIT
10210 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f  E_STATUS_MALLOC_
10220 53 49 5a 45 2c 20 26 69 43 75 72 2c 20 26 69 48  SIZE, &iCur, &iH
10230 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e 74  i, 0);.    print
10240 66 28 22 2d 2d 20 4c 61 72 67 65 73 74 20 41 6c  f("-- Largest Al
10250 6c 6f 63 61 74 69 6f 6e 3a 20 20 20 20 20 20 20  location:       
10260 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 69     %d bytes\n",i
10270 48 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Hi);.    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 50 41 47 45 43 41 43 48 45 5f  TATUS_PAGECACHE_
102a0 53 49 5a 45 2c 20 26 69 43 75 72 2c 20 26 69 48  SIZE, &iCur, &iH
102b0 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e 74  i, 0);.    print
102c0 66 28 22 2d 2d 20 4c 61 72 67 65 73 74 20 50 63  f("-- Largest Pc
102d0 61 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a  ache Allocation:
102e0 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 69     %d bytes\n",i
102f0 48 69 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  Hi);.  }.#endif.
10300 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78 5f  .#ifdef __linux_
10310 5f 0a 20 20 69 66 28 20 73 68 6f 77 53 74 61 74  _.  if( showStat
10320 73 20 29 7b 0a 20 20 20 20 64 69 73 70 6c 61 79  s ){.    display
10330 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 73 74 64  LinuxIoStats(std
10340 6f 75 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  out);.  }.#endif
10350 0a 0a 20 20 2f 2a 20 52 65 6c 65 61 73 65 20 6d  ..  /* Release m
10360 65 6d 6f 72 79 20 2a 2f 0a 20 20 66 72 65 65 28  emory */.  free(
10370 20 70 4c 6f 6f 6b 20 29 3b 0a 20 20 66 72 65 65   pLook );.  free
10380 28 20 70 50 43 61 63 68 65 20 29 3b 0a 20 20 66  ( pPCache );.  f
10390 72 65 65 28 20 70 48 65 61 70 20 29 3b 0a 20 20  ree( pHeap );.  
103a0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a              return 0;.}.