/ Hex Artifact Content
Login

Artifact 20cc4028b0e88392b5a635c2ea5d5e777d569bf7258aead37f8be7a886c38344:


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 66 70 2c 20 64 65 62  ee, orm, fp, deb
07b0: 75 67 29 5c 6e 22 0a 20 20 22 20 20 2d 2d 74 72  ug)\n".  "  --tr
07c0: 61 63 65 20 20 20 20 20 20 20 20 20 20 20 20 20  ace             
07d0: 54 75 72 6e 20 6f 6e 20 53 51 4c 20 74 72 61 63  Turn on SQL trac
07e0: 69 6e 67 5c 6e 22 0a 20 20 22 20 20 2d 2d 74 68  ing\n".  "  --th
07f0: 72 65 61 64 73 20 4e 20 20 20 20 20 20 20 20 20  reads N         
0800: 55 73 65 20 75 70 20 74 6f 20 4e 20 74 68 72 65  Use up to N thre
0810: 61 64 73 20 66 6f 72 20 73 6f 72 74 69 6e 67 5c  ads for sorting\
0820: 6e 22 0a 20 20 22 20 20 2d 2d 75 74 66 31 36 62  n".  "  --utf16b
0830: 65 20 20 20 20 20 20 20 20 20 20 20 53 65 74 20  e           Set 
0840: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f  text encoding to
0850: 20 55 54 46 2d 31 36 42 45 5c 6e 22 0a 20 20 22   UTF-16BE\n".  "
0860: 20 20 2d 2d 75 74 66 31 36 6c 65 20 20 20 20 20    --utf16le     
0870: 20 20 20 20 20 20 53 65 74 20 74 65 78 74 20 65        Set text e
0880: 6e 63 6f 64 69 6e 67 20 74 6f 20 55 54 46 2d 31  ncoding to UTF-1
0890: 36 4c 45 5c 6e 22 0a 20 20 22 20 20 2d 2d 76 65  6LE\n".  "  --ve
08a0: 72 69 66 79 20 20 20 20 20 20 20 20 20 20 20 20  rify            
08b0: 52 75 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 76  Run additional v
08c0: 65 72 69 66 69 63 61 74 69 6f 6e 20 73 74 65 70  erification step
08d0: 73 2e 5c 6e 22 0a 20 20 22 20 20 2d 2d 77 69 74  s.\n".  "  --wit
08e0: 68 6f 75 74 2d 72 6f 77 69 64 20 20 20 20 20 55  hout-rowid     U
08f0: 73 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  se WITHOUT ROWID
0900: 20 77 68 65 72 65 20 61 70 70 72 6f 70 72 69 61   where appropria
0910: 74 65 5c 6e 22 0a 3b 0a 0a 0a 23 69 6e 63 6c 75  te\n".;...#inclu
0920: 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23  de "sqlite3.h".#
0930: 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e  include <assert.
0940: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
0950: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
0960: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
0970: 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23 69  de <stdarg.h>.#i
0980: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
0990: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  >.#include <ctyp
09a0: 65 2e 68 3e 0a 23 69 66 6e 64 65 66 20 5f 57 49  e.h>.#ifndef _WI
09b0: 4e 33 32 0a 23 20 69 6e 63 6c 75 64 65 20 3c 75  N32.# include <u
09c0: 6e 69 73 74 64 2e 68 3e 0a 23 65 6c 73 65 0a 23  nistd.h>.#else.#
09d0: 20 69 6e 63 6c 75 64 65 20 3c 69 6f 2e 68 3e 0a   include <io.h>.
09e0: 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 49  #endif.#define I
09f0: 53 53 50 41 43 45 28 58 29 20 69 73 73 70 61 63  SSPACE(X) isspac
0a00: 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
0a10: 29 28 58 29 29 0a 23 64 65 66 69 6e 65 20 49 53  )(X)).#define IS
0a20: 44 49 47 49 54 28 58 29 20 69 73 64 69 67 69 74  DIGIT(X) isdigit
0a30: 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
0a40: 28 58 29 29 0a 0a 23 69 66 20 53 51 4c 49 54 45  (X))..#if SQLITE
0a50: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3c  _VERSION_NUMBER<
0a60: 33 30 30 35 30 30 30 0a 23 20 64 65 66 69 6e 65  3005000.# define
0a70: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
0a80: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 65 6e 64  qlite_int64.#end
0a90: 69 66 0a 0a 2f 2a 20 41 6c 6c 20 67 6c 6f 62 61  if../* All globa
0aa0: 6c 20 73 74 61 74 65 20 69 73 20 68 65 6c 64 20  l state is held 
0ab0: 69 6e 20 74 68 69 73 20 73 74 72 75 63 74 75 72  in this structur
0ac0: 65 20 2a 2f 0a 73 74 61 74 69 63 20 73 74 72 75  e */.static stru
0ad0: 63 74 20 47 6c 6f 62 61 6c 20 7b 0a 20 20 73 71  ct Global {.  sq
0ae0: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
0af0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
0b00: 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 63 6f  open database co
0b10: 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  nnection */.  sq
0b20: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
0b30: 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72  t;       /* Curr
0b40: 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
0b50: 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  t */.  sqlite3_i
0b60: 6e 74 36 34 20 69 53 74 61 72 74 3b 20 20 20 20  nt64 iStart;    
0b70: 20 20 2f 2a 20 53 74 61 72 74 2d 74 69 6d 65 20    /* Start-time 
0b80: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
0b90: 74 65 73 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65  test */.  sqlite
0ba0: 33 5f 69 6e 74 36 34 20 69 54 6f 74 61 6c 3b 20  3_int64 iTotal; 
0bb0: 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 74 69       /* Total ti
0bc0: 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 62 57 69 74  me */.  int bWit
0bd0: 68 6f 75 74 52 6f 77 69 64 3b 20 20 20 20 20 20  houtRowid;      
0be0: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d     /* True for -
0bf0: 2d 77 69 74 68 6f 75 74 2d 72 6f 77 69 64 20 2a  -without-rowid *
0c00: 2f 0a 20 20 69 6e 74 20 62 52 65 70 72 65 70 61  /.  int bReprepa
0c10: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  re;            /
0c20: 2a 20 54 72 75 65 20 74 6f 20 72 65 70 72 65 70  * True to reprep
0c30: 61 72 65 20 74 68 65 20 53 51 4c 20 6f 6e 20 65  are the SQL on e
0c40: 61 63 68 20 72 65 72 75 6e 20 2a 2f 0a 20 20 69  ach rerun */.  i
0c50: 6e 74 20 62 53 71 6c 4f 6e 6c 79 3b 20 20 20 20  nt bSqlOnly;    
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
0c70: 65 20 74 6f 20 70 72 69 6e 74 20 74 68 65 20 53  e to print the S
0c80: 51 4c 20 6f 6e 63 65 20 6f 6e 6c 79 20 2a 2f 0a  QL once only */.
0c90: 20 20 69 6e 74 20 62 45 78 70 6c 61 69 6e 3b 20    int bExplain; 
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0cb0: 50 72 69 6e 74 20 53 51 4c 20 77 69 74 68 20 45  Print SQL with E
0cc0: 58 50 4c 41 49 4e 20 70 72 65 66 69 78 20 2a 2f  XPLAIN prefix */
0cd0: 0a 20 20 69 6e 74 20 62 56 65 72 69 66 79 3b 20  .  int bVerify; 
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0cf0: 20 54 72 79 20 74 6f 20 76 65 72 69 66 79 20 74   Try to verify t
0d00: 68 61 74 20 72 65 73 75 6c 74 73 20 61 72 65 20  hat results are 
0d10: 63 6f 72 72 65 63 74 20 2a 2f 0a 20 20 69 6e 74  correct */.  int
0d20: 20 62 4d 65 6d 53 68 72 69 6e 6b 3b 20 20 20 20   bMemShrink;    
0d30: 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20          /* Call 
0d40: 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
0d50: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 6f 66 74 65  se_memory() ofte
0d60: 6e 20 2a 2f 0a 20 20 69 6e 74 20 65 54 65 6d 70  n */.  int eTemp
0d70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
0d80: 20 20 2f 2a 20 30 3a 20 6e 6f 20 54 45 4d 50 2e    /* 0: no TEMP.
0d90: 20 20 39 3a 20 61 6c 77 61 79 73 20 54 45 4d 50    9: always TEMP
0da0: 2e 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 54 65 73  . */.  int szTes
0db0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
0dc0: 20 20 2f 2a 20 53 63 61 6c 65 20 66 61 63 74 6f    /* Scale facto
0dd0: 72 20 66 6f 72 20 74 65 73 74 20 69 74 65 72 61  r for test itera
0de0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
0df0: 52 65 70 65 61 74 3b 20 20 20 20 20 20 20 20 20  Repeat;         
0e00: 20 20 20 20 20 20 2f 2a 20 52 65 70 65 61 74 20        /* Repeat 
0e10: 73 65 6c 65 63 74 73 20 74 68 69 73 20 6d 61 6e  selects this man
0e20: 79 20 74 69 6d 65 73 20 2a 2f 0a 20 20 63 6f 6e  y times */.  con
0e30: 73 74 20 63 68 61 72 20 2a 7a 57 52 3b 20 20 20  st char *zWR;   
0e40: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 67 68 74          /* Might
0e50: 20 62 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49   be WITHOUT ROWI
0e60: 44 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  D */.  const cha
0e70: 72 20 2a 7a 4e 4e 3b 20 20 20 20 20 20 20 20 20  r *zNN;         
0e80: 20 20 2f 2a 20 4d 69 67 68 74 20 62 65 20 4e 4f    /* Might be NO
0e90: 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  T NULL */.  cons
0ea0: 74 20 63 68 61 72 20 2a 7a 50 4b 3b 20 20 20 20  t char *zPK;    
0eb0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 67 68 74 20         /* Might 
0ec0: 62 65 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49  be UNIQUE or PRI
0ed0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 6e  MARY KEY */.  un
0ee0: 73 69 67 6e 65 64 20 69 6e 74 20 78 2c 20 79 3b  signed int x, y;
0ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75           /* Pseu
0f00: 64 6f 2d 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72  do-random number
0f10: 20 67 65 6e 65 72 61 74 6f 72 20 73 74 61 74 65   generator state
0f20: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 73 75 6c   */.  int nResul
0f30: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
0f40: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
0f50: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 20 2a  current result *
0f60: 2f 0a 20 20 63 68 61 72 20 7a 52 65 73 75 6c 74  /.  char zResult
0f70: 5b 33 30 30 30 5d 3b 20 20 20 20 20 20 20 20 2f  [3000];        /
0f80: 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 63 75  * Text of the cu
0f90: 72 72 65 6e 74 20 72 65 73 75 6c 74 20 2a 2f 0a  rrent result */.
0fa0: 7d 20 67 3b 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  } g;../* Return 
0fb0: 22 20 54 45 4d 50 22 20 6f 72 20 22 22 2c 20 61  " TEMP" or "", a
0fc0: 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
0fd0: 72 20 63 72 65 61 74 69 6e 67 20 61 20 74 61 62  r creating a tab
0fe0: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  le..*/.static co
0ff0: 6e 73 74 20 63 68 61 72 20 2a 69 73 54 65 6d 70  nst char *isTemp
1000: 28 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72  (int N){.  retur
1010: 6e 20 67 2e 65 54 65 6d 70 3e 3d 4e 20 3f 20 22  n g.eTemp>=N ? "
1020: 20 54 45 4d 50 22 20 3a 20 22 22 3b 0a 7d 0a 0a   TEMP" : "";.}..
1030: 0a 2f 2a 20 50 72 69 6e 74 20 61 6e 20 65 72 72  ./* Print an err
1040: 6f 72 20 6d 65 73 73 61 67 65 20 61 6e 64 20 65  or message and e
1050: 78 69 74 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f  xit */.static vo
1060: 69 64 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 63  id fatal_error(c
1070: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 73 67 2c  onst char *zMsg,
1080: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
1090: 20 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   ap;.  va_start(
10a0: 61 70 2c 20 7a 4d 73 67 29 3b 0a 20 20 76 66 70  ap, zMsg);.  vfp
10b0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 7a 4d  rintf(stderr, zM
10c0: 73 67 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  sg, ap);.  va_en
10d0: 64 28 61 70 29 3b 0a 20 20 65 78 69 74 28 31 29  d(ap);.  exit(1)
10e0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
10f0: 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  n the value of a
1100: 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67   hexadecimal dig
1110: 69 74 2e 20 20 52 65 74 75 72 6e 20 2d 31 20 69  it.  Return -1 i
1120: 66 20 74 68 65 20 69 6e 70 75 74 0a 2a 2a 20 69  f the input.** i
1130: 73 20 6e 6f 74 20 61 20 68 65 78 20 64 69 67 69  s not a hex digi
1140: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
1150: 20 68 65 78 44 69 67 69 74 56 61 6c 75 65 28 63   hexDigitValue(c
1160: 68 61 72 20 63 29 7b 0a 20 20 69 66 28 20 63 3e  har c){.  if( c>
1170: 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29  ='0' && c<='9' )
1180: 20 72 65 74 75 72 6e 20 63 20 2d 20 27 30 27 3b   return c - '0';
1190: 0a 20 20 69 66 28 20 63 3e 3d 27 61 27 20 26 26  .  if( c>='a' &&
11a0: 20 63 3c 3d 27 66 27 20 29 20 72 65 74 75 72 6e   c<='f' ) return
11b0: 20 63 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20   c - 'a' + 10;. 
11c0: 20 69 66 28 20 63 3e 3d 27 41 27 20 26 26 20 63   if( c>='A' && c
11d0: 3c 3d 27 46 27 20 29 20 72 65 74 75 72 6e 20 63  <='F' ) return c
11e0: 20 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20 20 72   - 'A' + 10;.  r
11f0: 65 74 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 20  eturn -1;.}../* 
1200: 50 72 6f 76 69 64 65 20 61 6e 20 61 6c 74 65 72  Provide an alter
1210: 6e 61 74 69 76 65 20 74 6f 20 73 71 6c 69 74 65  native to sqlite
1220: 33 5f 73 74 72 69 63 6d 70 28 29 20 69 6e 20 6f  3_stricmp() in o
1230: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
1240: 0a 2a 2a 20 53 51 4c 69 74 65 20 2a 2f 0a 23 69  .** SQLite */.#i
1250: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
1260: 5f 4e 55 4d 42 45 52 3c 33 30 30 37 30 31 31 0a  _NUMBER<3007011.
1270: 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1280: 5f 73 74 72 69 63 6d 70 20 73 74 72 63 6d 70 0a  _stricmp strcmp.
1290: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
12a0: 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73 20  terpret zArg as 
12b0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
12c0: 2c 20 70 6f 73 73 69 62 6c 79 20 77 69 74 68 20  , possibly with 
12d0: 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a 73 74 61  suffixes..*/.sta
12e0: 74 69 63 20 69 6e 74 20 69 6e 74 65 67 65 72 56  tic int integerV
12f0: 61 6c 75 65 28 63 6f 6e 73 74 20 63 68 61 72 20  alue(const char 
1300: 2a 7a 41 72 67 29 7b 0a 20 20 73 71 6c 69 74 65  *zArg){.  sqlite
1310: 33 5f 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20  3_int64 v = 0;. 
1320: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
1330: 72 75 63 74 20 7b 20 63 68 61 72 20 2a 7a 53 75  ruct { char *zSu
1340: 66 66 69 78 3b 20 69 6e 74 20 69 4d 75 6c 74 3b  ffix; int iMult;
1350: 20 7d 20 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20   } aMult[] = {. 
1360: 20 20 20 7b 20 22 4b 69 42 22 2c 20 31 30 32 34     { "KiB", 1024
1370: 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 69 42 22 2c   },.    { "MiB",
1380: 20 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20   1024*1024 },.  
1390: 20 20 7b 20 22 47 69 42 22 2c 20 31 30 32 34 2a    { "GiB", 1024*
13a0: 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20  1024*1024 },.   
13b0: 20 7b 20 22 4b 42 22 2c 20 20 31 30 30 30 20 7d   { "KB",  1000 }
13c0: 2c 0a 20 20 20 20 7b 20 22 4d 42 22 2c 20 20 31  ,.    { "MB",  1
13d0: 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20  000000 },.    { 
13e0: 22 47 42 22 2c 20 20 31 30 30 30 30 30 30 30 30  "GB",  100000000
13f0: 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 22 2c 20  0 },.    { "K", 
1400: 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20    1000 },.    { 
1410: 22 4d 22 2c 20 20 20 31 30 30 30 30 30 30 20 7d  "M",   1000000 }
1420: 2c 0a 20 20 20 20 7b 20 22 47 22 2c 20 20 20 31  ,.    { "G",   1
1430: 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d  000000000 },.  }
1440: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
1450: 20 69 73 4e 65 67 20 3d 20 30 3b 0a 20 20 69 66   isNeg = 0;.  if
1460: 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2d 27 20 29  ( zArg[0]=='-' )
1470: 7b 0a 20 20 20 20 69 73 4e 65 67 20 3d 20 31 3b  {.    isNeg = 1;
1480: 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d  .    zArg++;.  }
1490: 65 6c 73 65 20 69 66 28 20 7a 41 72 67 5b 30 5d  else if( zArg[0]
14a0: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 41 72  =='+' ){.    zAr
14b0: 67 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  g++;.  }.  if( z
14c0: 41 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a  Arg[0]=='0' && z
14d0: 41 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20  Arg[1]=='x' ){. 
14e0: 20 20 20 69 6e 74 20 78 3b 0a 20 20 20 20 7a 41     int x;.    zA
14f0: 72 67 20 2b 3d 20 32 3b 0a 20 20 20 20 77 68 69  rg += 2;.    whi
1500: 6c 65 28 20 28 78 20 3d 20 68 65 78 44 69 67 69  le( (x = hexDigi
1510: 74 56 61 6c 75 65 28 7a 41 72 67 5b 30 5d 29 29  tValue(zArg[0]))
1520: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  >=0 ){.      v =
1530: 20 28 76 3c 3c 34 29 20 2b 20 78 3b 0a 20 20 20   (v<<4) + x;.   
1540: 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 20 20 7d     zArg++;.    }
1550: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68  .  }else{.    wh
1560: 69 6c 65 28 20 69 73 64 69 67 69 74 28 7a 41 72  ile( isdigit(zAr
1570: 67 5b 30 5d 29 20 29 7b 0a 20 20 20 20 20 20 76  g[0]) ){.      v
1580: 20 3d 20 76 2a 31 30 20 2b 20 7a 41 72 67 5b 30   = v*10 + zArg[0
1590: 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a  ] - '0';.      z
15a0: 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Arg++;.    }.  }
15b0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
15c0: 7a 65 6f 66 28 61 4d 75 6c 74 29 2f 73 69 7a 65  zeof(aMult)/size
15d0: 6f 66 28 61 4d 75 6c 74 5b 30 5d 29 3b 20 69 2b  of(aMult[0]); i+
15e0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  +){.    if( sqli
15f0: 74 65 33 5f 73 74 72 69 63 6d 70 28 61 4d 75 6c  te3_stricmp(aMul
1600: 74 5b 69 5d 2e 7a 53 75 66 66 69 78 2c 20 7a 41  t[i].zSuffix, zA
1610: 72 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  rg)==0 ){.      
1620: 76 20 2a 3d 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d  v *= aMult[i].iM
1630: 75 6c 74 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  ult;.      break
1640: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1650: 28 20 76 3e 30 78 37 66 66 66 66 66 66 66 20 29  ( v>0x7fffffff )
1660: 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 70 61   fatal_error("pa
1670: 72 61 6d 65 74 65 72 20 74 6f 6f 20 6c 61 72 67  rameter too larg
1680: 65 20 2d 20 6d 61 78 20 32 31 34 37 34 38 33 36  e - max 21474836
1690: 34 38 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 28  48");.  return (
16a0: 69 6e 74 29 28 69 73 4e 65 67 3f 20 2d 76 20 3a  int)(isNeg? -v :
16b0: 20 76 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72   v);.}../* Retur
16c0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 77 61  n the current wa
16d0: 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65 2c 20 69  ll-clock time, i
16e0: 6e 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2a  n milliseconds *
16f0: 2f 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  /.sqlite3_int64 
1700: 73 70 65 65 64 74 65 73 74 31 5f 74 69 6d 65 73  speedtest1_times
1710: 74 61 6d 70 28 76 6f 69 64 29 7b 0a 23 69 66 20  tamp(void){.#if 
1720: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
1730: 55 4d 42 45 52 3c 33 30 30 35 30 30 30 0a 20 20  UMBER<3005000.  
1740: 72 65 74 75 72 6e 20 30 3b 0a 23 65 6c 73 65 0a  return 0;.#else.
1750: 20 20 73 74 61 74 69 63 20 73 71 6c 69 74 65 33    static sqlite3
1760: 5f 76 66 73 20 2a 63 6c 6f 63 6b 56 66 73 20 3d  _vfs *clockVfs =
1770: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   0;.  sqlite3_in
1780: 74 36 34 20 74 3b 0a 20 20 69 66 28 20 63 6c 6f  t64 t;.  if( clo
1790: 63 6b 56 66 73 3d 3d 30 20 29 20 63 6c 6f 63 6b  ckVfs==0 ) clock
17a0: 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f 76 66  Vfs = sqlite3_vf
17b0: 73 5f 66 69 6e 64 28 30 29 3b 0a 23 69 66 20 53  s_find(0);.#if S
17c0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
17d0: 4d 42 45 52 3e 3d 33 30 30 37 30 30 30 0a 20 20  MBER>=3007000.  
17e0: 69 66 28 20 63 6c 6f 63 6b 56 66 73 2d 3e 69 56  if( clockVfs->iV
17f0: 65 72 73 69 6f 6e 3e 3d 32 20 26 26 20 63 6c 6f  ersion>=2 && clo
1800: 63 6b 56 66 73 2d 3e 78 43 75 72 72 65 6e 74 54  ckVfs->xCurrentT
1810: 69 6d 65 49 6e 74 36 34 21 3d 30 20 29 7b 0a 20  imeInt64!=0 ){. 
1820: 20 20 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75     clockVfs->xCu
1830: 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 63  rrentTimeInt64(c
1840: 6c 6f 63 6b 56 66 73 2c 20 26 74 29 3b 0a 20 20  lockVfs, &t);.  
1850: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b  }else.#endif.  {
1860: 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20  .    double r;. 
1870: 20 20 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75     clockVfs->xCu
1880: 72 72 65 6e 74 54 69 6d 65 28 63 6c 6f 63 6b 56  rrentTime(clockV
1890: 66 73 2c 20 26 72 29 3b 0a 20 20 20 20 74 20 3d  fs, &r);.    t =
18a0: 20 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29   (sqlite3_int64)
18b0: 28 72 2a 38 36 34 30 30 30 30 30 2e 30 29 3b 0a  (r*86400000.0);.
18c0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 74 3b 0a    }.  return t;.
18d0: 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 20 52 65 74  #endif.}../* Ret
18e0: 75 72 6e 20 61 20 70 73 65 75 64 6f 2d 72 61 6e  urn a pseudo-ran
18f0: 64 6f 6d 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  dom unsigned int
1900: 65 67 65 72 20 2a 2f 0a 75 6e 73 69 67 6e 65 64  eger */.unsigned
1910: 20 69 6e 74 20 73 70 65 65 64 74 65 73 74 31 5f   int speedtest1_
1920: 72 61 6e 64 6f 6d 28 76 6f 69 64 29 7b 0a 20 20  random(void){.  
1930: 67 2e 78 20 3d 20 28 67 2e 78 3e 3e 31 29 20 5e  g.x = (g.x>>1) ^
1940: 20 28 28 31 2b 7e 28 67 2e 78 26 31 29 29 20 26   ((1+~(g.x&1)) &
1950: 20 30 78 64 30 30 30 30 30 30 31 29 3b 0a 20 20   0xd0000001);.  
1960: 67 2e 79 20 3d 20 67 2e 79 2a 31 31 30 33 35 31  g.y = g.y*110351
1970: 35 32 34 35 20 2b 20 31 32 33 34 35 3b 0a 20 20  5245 + 12345;.  
1980: 72 65 74 75 72 6e 20 67 2e 78 20 5e 20 67 2e 79  return g.x ^ g.y
1990: 3b 0a 7d 0a 0a 2f 2a 20 4d 61 70 20 74 68 65 20  ;.}../* Map the 
19a0: 76 61 6c 75 65 20 69 6e 20 77 69 74 68 69 6e 20  value in within 
19b0: 74 68 65 20 72 61 6e 67 65 20 6f 66 20 31 2e 2e  the range of 1..
19c0: 2e 6c 69 6d 69 74 20 69 6e 74 6f 20 61 6e 6f 74  .limit into anot
19d0: 68 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 69 6e  her.** number in
19e0: 20 61 20 77 61 79 20 74 68 61 74 20 69 73 20 63   a way that is c
19f0: 68 61 74 69 63 20 61 6e 64 20 69 6e 76 65 72 74  hatic and invert
1a00: 61 62 6c 65 2e 0a 2a 2f 0a 75 6e 73 69 67 6e 65  able..*/.unsigne
1a10: 64 20 73 77 69 7a 7a 6c 65 28 75 6e 73 69 67 6e  d swizzle(unsign
1a20: 65 64 20 69 6e 2c 20 75 6e 73 69 67 6e 65 64 20  ed in, unsigned 
1a30: 6c 69 6d 69 74 29 7b 0a 20 20 75 6e 73 69 67 6e  limit){.  unsign
1a40: 65 64 20 6f 75 74 20 3d 20 30 3b 0a 20 20 77 68  ed out = 0;.  wh
1a50: 69 6c 65 28 20 6c 69 6d 69 74 20 29 7b 0a 20 20  ile( limit ){.  
1a60: 20 20 6f 75 74 20 3d 20 28 6f 75 74 3c 3c 31 29    out = (out<<1)
1a70: 20 7c 20 28 69 6e 26 31 29 3b 0a 20 20 20 20 69   | (in&1);.    i
1a80: 6e 20 3e 3e 3d 20 31 3b 0a 20 20 20 20 6c 69 6d  n >>= 1;.    lim
1a90: 69 74 20 3e 3e 3d 20 31 3b 0a 20 20 7d 0a 20 20  it >>= 1;.  }.  
1aa0: 72 65 74 75 72 6e 20 6f 75 74 3b 0a 7d 0a 0a 2f  return out;.}../
1ab0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
1ac0: 62 65 72 20 73 6f 20 74 68 61 74 20 69 74 20 69  ber so that it i
1ad0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
1ae0: 20 6d 69 6e 75 73 20 6f 6e 65 0a 2a 2f 0a 75 6e   minus one.*/.un
1af0: 73 69 67 6e 65 64 20 72 6f 75 6e 64 75 70 5f 61  signed roundup_a
1b00: 6c 6c 6f 6e 65 73 28 75 6e 73 69 67 6e 65 64 20  llones(unsigned 
1b10: 6c 69 6d 69 74 29 7b 0a 20 20 75 6e 73 69 67 6e  limit){.  unsign
1b20: 65 64 20 6d 20 3d 20 31 3b 0a 20 20 77 68 69 6c  ed m = 1;.  whil
1b30: 65 28 20 6d 3c 6c 69 6d 69 74 20 29 20 6d 20 3d  e( m<limit ) m =
1b40: 20 28 6d 3c 3c 31 29 2b 31 3b 0a 20 20 72 65 74   (m<<1)+1;.  ret
1b50: 75 72 6e 20 6d 3b 0a 7d 0a 0a 2f 2a 20 54 68 65  urn m;.}../* The
1b60: 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62   speedtest1_numb
1b70: 65 72 6e 61 6d 65 20 70 72 6f 63 65 64 75 72 65  ername procedure
1b80: 20 62 65 6c 6f 77 20 63 6f 6e 76 65 72 74 73 20   below converts 
1b90: 69 74 73 20 61 72 67 6d 65 6e 74 20 28 61 6e 20  its argment (an 
1ba0: 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f  integer).** into
1bb0: 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
1bc0: 69 73 20 74 68 65 20 45 6e 67 6c 69 73 68 2d 6c  is the English-l
1bd0: 61 6e 67 75 61 67 65 20 6e 61 6d 65 20 66 6f 72  anguage name for
1be0: 20 74 68 61 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a   that number..**
1bf0: 20 54 68 65 20 72 65 74 75 72 6e 65 64 20 73 74   The returned st
1c00: 72 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66  ring should be f
1c10: 72 65 65 64 20 77 69 74 68 20 73 71 6c 69 74 65  reed with sqlite
1c20: 33 5f 66 72 65 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  3_free()..**.** 
1c30: 45 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  Example:.**.**  
1c40: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75     speedtest1_nu
1c50: 6d 62 65 72 6e 61 6d 65 28 31 32 33 29 20 20 20  mbername(123)   
1c60: 2d 3e 20 20 22 6f 6e 65 20 68 75 6e 64 72 65 64  ->  "one hundred
1c70: 20 74 77 65 6e 74 79 20 74 68 72 65 65 22 0a 2a   twenty three".*
1c80: 2f 0a 69 6e 74 20 73 70 65 65 64 74 65 73 74 31  /.int speedtest1
1c90: 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 75 6e 73 69  _numbername(unsi
1ca0: 67 6e 65 64 20 69 6e 74 20 6e 2c 20 63 68 61 72  gned int n, char
1cb0: 20 2a 7a 4f 75 74 2c 20 69 6e 74 20 6e 4f 75 74   *zOut, int nOut
1cc0: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ){.  static cons
1cd0: 74 20 63 68 61 72 20 2a 6f 6e 65 73 5b 5d 20 3d  t char *ones[] =
1ce0: 20 7b 20 20 22 7a 65 72 6f 22 2c 20 22 6f 6e 65   {  "zero", "one
1cf0: 22 2c 20 22 74 77 6f 22 2c 20 22 74 68 72 65 65  ", "two", "three
1d00: 22 2c 20 22 66 6f 75 72 22 2c 20 22 66 69 76 65  ", "four", "five
1d10: 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
1d20: 20 20 20 20 20 20 22 73 69 78 22 2c 20 22 73 65        "six", "se
1d30: 76 65 6e 22 2c 20 22 65 69 67 68 74 22 2c 20 22  ven", "eight", "
1d40: 6e 69 6e 65 22 2c 20 22 74 65 6e 22 2c 20 22 65  nine", "ten", "e
1d50: 6c 65 76 65 6e 22 2c 20 22 74 77 65 6c 76 65 22  leven", "twelve"
1d60: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1d70: 20 20 20 20 20 22 74 68 69 72 74 65 65 6e 22 2c       "thirteen",
1d80: 20 22 66 6f 75 72 74 65 65 6e 22 2c 20 22 66 69   "fourteen", "fi
1d90: 66 74 65 65 6e 22 2c 20 22 73 69 78 74 65 65 6e  fteen", "sixteen
1da0: 22 2c 20 22 73 65 76 65 6e 74 65 65 6e 22 2c 0a  ", "seventeen",.
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 20 22 65 69 67 68 74 65 65 6e 22 2c 20 22 6e    "eighteen", "n
1dd0: 69 6e 65 74 65 65 6e 22 20 7d 3b 0a 20 20 73 74  ineteen" };.  st
1de0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
1df0: 2a 74 65 6e 73 5b 5d 20 3d 20 7b 20 22 22 2c 20  *tens[] = { "", 
1e00: 22 74 65 6e 22 2c 20 22 74 77 65 6e 74 79 22 2c  "ten", "twenty",
1e10: 20 22 74 68 69 72 74 79 22 2c 20 22 66 6f 72 74   "thirty", "fort
1e20: 79 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  y",.            
1e30: 20 20 20 20 20 22 66 69 66 74 79 22 2c 20 22 73       "fifty", "s
1e40: 69 78 74 79 22 2c 20 22 73 65 76 65 6e 74 79 22  ixty", "seventy"
1e50: 2c 20 22 65 69 67 68 74 79 22 2c 20 22 6e 69 6e  , "eighty", "nin
1e60: 65 74 79 22 20 7d 3b 0a 20 20 69 6e 74 20 69 20  ety" };.  int i 
1e70: 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6e 3e 3d 31  = 0;..  if( n>=1
1e80: 30 30 30 30 30 30 30 30 30 20 29 7b 0a 20 20 20  000000000 ){.   
1e90: 20 69 20 2b 3d 20 73 70 65 65 64 74 65 73 74 31   i += speedtest1
1ea0: 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6e 2f 31 30  _numbername(n/10
1eb0: 30 30 30 30 30 30 30 30 2c 20 7a 4f 75 74 2b 69  00000000, zOut+i
1ec0: 2c 20 6e 4f 75 74 2d 69 29 3b 0a 20 20 20 20 73  , nOut-i);.    s
1ed0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
1ee0: 6e 4f 75 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20  nOut-i, zOut+i, 
1ef0: 22 20 62 69 6c 6c 69 6f 6e 22 29 3b 0a 20 20 20  " billion");.   
1f00: 20 69 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65   i += (int)strle
1f10: 6e 28 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e  n(zOut+i);.    n
1f20: 20 3d 20 6e 20 25 20 31 30 30 30 30 30 30 30 30   = n % 100000000
1f30: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3e 3d  0;.  }.  if( n>=
1f40: 31 30 30 30 30 30 30 20 29 7b 0a 20 20 20 20 69  1000000 ){.    i
1f50: 66 28 20 69 20 26 26 20 69 3c 6e 4f 75 74 2d 31  f( i && i<nOut-1
1f60: 20 29 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27   ) zOut[i++] = '
1f70: 20 27 3b 0a 20 20 20 20 69 20 2b 3d 20 73 70 65   ';.    i += spe
1f80: 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61  edtest1_numberna
1f90: 6d 65 28 6e 2f 31 30 30 30 30 30 30 2c 20 7a 4f  me(n/1000000, zO
1fa0: 75 74 2b 69 2c 20 6e 4f 75 74 2d 69 29 3b 0a 20  ut+i, nOut-i);. 
1fb0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
1fc0: 6e 74 66 28 6e 4f 75 74 2d 69 2c 20 7a 4f 75 74  ntf(nOut-i, zOut
1fd0: 2b 69 2c 20 22 20 6d 69 6c 6c 69 6f 6e 22 29 3b  +i, " million");
1fe0: 0a 20 20 20 20 69 20 2b 3d 20 28 69 6e 74 29 73  .    i += (int)s
1ff0: 74 72 6c 65 6e 28 7a 4f 75 74 2b 69 29 3b 0a 20  trlen(zOut+i);. 
2000: 20 20 20 6e 20 3d 20 6e 20 25 20 31 30 30 30 30     n = n % 10000
2010: 30 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 3e  00;.  }.  if( n>
2020: 3d 31 30 30 30 20 29 7b 0a 20 20 20 20 69 66 28  =1000 ){.    if(
2030: 20 69 20 26 26 20 69 3c 6e 4f 75 74 2d 31 20 29   i && i<nOut-1 )
2040: 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d 20 27 20 27   zOut[i++] = ' '
2050: 3b 0a 20 20 20 20 69 20 2b 3d 20 73 70 65 65 64  ;.    i += speed
2060: 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65  test1_numbername
2070: 28 6e 2f 31 30 30 30 2c 20 7a 4f 75 74 2b 69 2c  (n/1000, zOut+i,
2080: 20 6e 4f 75 74 2d 69 29 3b 0a 20 20 20 20 73 71   nOut-i);.    sq
2090: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e  lite3_snprintf(n
20a0: 4f 75 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22  Out-i, zOut+i, "
20b0: 20 74 68 6f 75 73 61 6e 64 22 29 3b 0a 20 20 20   thousand");.   
20c0: 20 69 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65   i += (int)strle
20d0: 6e 28 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e  n(zOut+i);.    n
20e0: 20 3d 20 6e 20 25 20 31 30 30 30 3b 0a 20 20 7d   = n % 1000;.  }
20f0: 0a 20 20 69 66 28 20 6e 3e 3d 31 30 30 20 29 7b  .  if( n>=100 ){
2100: 0a 20 20 20 20 69 66 28 20 69 20 26 26 20 69 3c  .    if( i && i<
2110: 6e 4f 75 74 2d 31 20 29 20 7a 4f 75 74 5b 69 2b  nOut-1 ) zOut[i+
2120: 2b 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 73 71  +] = ' ';.    sq
2130: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e  lite3_snprintf(n
2140: 4f 75 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20 22  Out-i, zOut+i, "
2150: 25 73 20 68 75 6e 64 72 65 64 22 2c 20 6f 6e 65  %s hundred", one
2160: 73 5b 6e 2f 31 30 30 5d 29 3b 0a 20 20 20 20 69  s[n/100]);.    i
2170: 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28   += (int)strlen(
2180: 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20 6e 20 3d  zOut+i);.    n =
2190: 20 6e 20 25 20 31 30 30 3b 0a 20 20 7d 0a 20 20   n % 100;.  }.  
21a0: 69 66 28 20 6e 3e 3d 32 30 20 29 7b 0a 20 20 20  if( n>=20 ){.   
21b0: 20 69 66 28 20 69 20 26 26 20 69 3c 6e 4f 75 74   if( i && i<nOut
21c0: 2d 31 20 29 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d  -1 ) zOut[i++] =
21d0: 20 27 20 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ' ';.    sqlite
21e0: 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74 2d  3_snprintf(nOut-
21f0: 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 25 73 22 2c  i, zOut+i, "%s",
2200: 20 74 65 6e 73 5b 6e 2f 31 30 5d 29 3b 0a 20 20   tens[n/10]);.  
2210: 20 20 69 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c    i += (int)strl
2220: 65 6e 28 7a 4f 75 74 2b 69 29 3b 0a 20 20 20 20  en(zOut+i);.    
2230: 6e 20 3d 20 6e 20 25 20 31 30 3b 0a 20 20 7d 0a  n = n % 10;.  }.
2240: 20 20 69 66 28 20 6e 3e 30 20 29 7b 0a 20 20 20    if( n>0 ){.   
2250: 20 69 66 28 20 69 20 26 26 20 69 3c 6e 4f 75 74   if( i && i<nOut
2260: 2d 31 20 29 20 7a 4f 75 74 5b 69 2b 2b 5d 20 3d  -1 ) zOut[i++] =
2270: 20 27 20 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ' ';.    sqlite
2280: 33 5f 73 6e 70 72 69 6e 74 66 28 6e 4f 75 74 2d  3_snprintf(nOut-
2290: 69 2c 20 7a 4f 75 74 2b 69 2c 20 22 25 73 22 2c  i, zOut+i, "%s",
22a0: 20 6f 6e 65 73 5b 6e 5d 29 3b 0a 20 20 20 20 69   ones[n]);.    i
22b0: 20 2b 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28   += (int)strlen(
22c0: 7a 4f 75 74 2b 69 29 3b 0a 20 20 7d 0a 20 20 69  zOut+i);.  }.  i
22d0: 66 28 20 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73  f( i==0 ){.    s
22e0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
22f0: 6e 4f 75 74 2d 69 2c 20 7a 4f 75 74 2b 69 2c 20  nOut-i, zOut+i, 
2300: 22 7a 65 72 6f 22 29 3b 0a 20 20 20 20 69 20 2b  "zero");.    i +
2310: 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4f  = (int)strlen(zO
2320: 75 74 2b 69 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ut+i);.  }.  ret
2330: 75 72 6e 20 69 3b 0a 7d 0a 0a 0a 2f 2a 20 53 74  urn i;.}.../* St
2340: 61 72 74 20 61 20 6e 65 77 20 74 65 73 74 20 63  art a new test c
2350: 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ase */.#define N
2360: 41 4d 45 57 49 44 54 48 20 36 30 0a 73 74 61 74  AMEWIDTH 60.stat
2370: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 44  ic const char zD
2380: 6f 74 73 5b 5d 20 3d 0a 20 20 22 2e 2e 2e 2e 2e  ots[] =.  ".....
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 2e 2e  ................
23d0: 2e 2e 22 3b 0a 76 6f 69 64 20 73 70 65 65 64 74  ..";.void speedt
23e0: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
23f0: 69 6e 74 20 69 54 65 73 74 4e 75 6d 2c 20 63 6f  int iTestNum, co
2400: 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 73 74 4e  nst char *zTestN
2410: 61 6d 65 2c 20 2e 2e 2e 29 7b 0a 20 20 69 6e 74  ame, ...){.  int
2420: 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e   n = (int)strlen
2430: 28 7a 54 65 73 74 4e 61 6d 65 29 3b 0a 20 20 63  (zTestName);.  c
2440: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 76 61  har *zName;.  va
2450: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f 73  _list ap;.  va_s
2460: 74 61 72 74 28 61 70 2c 20 7a 54 65 73 74 4e 61  tart(ap, zTestNa
2470: 6d 65 29 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 73  me);.  zName = s
2480: 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28  qlite3_vmprintf(
2490: 7a 54 65 73 74 4e 61 6d 65 2c 20 61 70 29 3b 0a  zTestName, ap);.
24a0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
24b0: 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  n = (int)strlen(
24c0: 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e 3e  zName);.  if( n>
24d0: 4e 41 4d 45 57 49 44 54 48 20 29 7b 0a 20 20 20  NAMEWIDTH ){.   
24e0: 20 7a 4e 61 6d 65 5b 4e 41 4d 45 57 49 44 54 48   zName[NAMEWIDTH
24f0: 5d 20 3d 20 30 3b 0a 20 20 20 20 6e 20 3d 20 4e  ] = 0;.    n = N
2500: 41 4d 45 57 49 44 54 48 3b 0a 20 20 7d 0a 20 20  AMEWIDTH;.  }.  
2510: 69 66 28 20 67 2e 62 53 71 6c 4f 6e 6c 79 20 29  if( g.bSqlOnly )
2520: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2f 2a  {.    printf("/*
2530: 20 25 34 64 20 2d 20 25 73 25 2e 2a 73 20 2a 2f   %4d - %s%.*s */
2540: 5c 6e 22 2c 20 69 54 65 73 74 4e 75 6d 2c 20 7a  \n", iTestNum, z
2550: 4e 61 6d 65 2c 20 4e 41 4d 45 57 49 44 54 48 2d  Name, NAMEWIDTH-
2560: 6e 2c 20 7a 44 6f 74 73 29 3b 0a 20 20 7d 65 6c  n, zDots);.  }el
2570: 73 65 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  se{.    printf("
2580: 25 34 64 20 2d 20 25 73 25 2e 2a 73 20 22 2c 20  %4d - %s%.*s ", 
2590: 69 54 65 73 74 4e 75 6d 2c 20 7a 4e 61 6d 65 2c  iTestNum, zName,
25a0: 20 4e 41 4d 45 57 49 44 54 48 2d 6e 2c 20 7a 44   NAMEWIDTH-n, zD
25b0: 6f 74 73 29 3b 0a 20 20 20 20 66 66 6c 75 73 68  ots);.    fflush
25c0: 28 73 74 64 6f 75 74 29 3b 0a 20 20 7d 0a 20 20  (stdout);.  }.  
25d0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e 61  sqlite3_free(zNa
25e0: 6d 65 29 3b 0a 20 20 67 2e 6e 52 65 73 75 6c 74  me);.  g.nResult
25f0: 20 3d 20 30 3b 0a 20 20 67 2e 69 53 74 61 72 74   = 0;.  g.iStart
2600: 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 74 69   = speedtest1_ti
2610: 6d 65 73 74 61 6d 70 28 29 3b 0a 20 20 67 2e 78  mestamp();.  g.x
2620: 20 3d 20 30 78 61 64 31 33 31 64 30 62 3b 0a 20   = 0xad131d0b;. 
2630: 20 67 2e 79 20 3d 20 30 78 34 34 66 39 65 61 63   g.y = 0x44f9eac
2640: 38 3b 0a 7d 0a 0a 2f 2a 20 43 6f 6d 70 6c 65 74  8;.}../* Complet
2650: 65 20 61 20 74 65 73 74 20 63 61 73 65 20 2a 2f  e a test case */
2660: 0a 76 6f 69 64 20 73 70 65 65 64 74 65 73 74 31  .void speedtest1
2670: 5f 65 6e 64 5f 74 65 73 74 28 76 6f 69 64 29 7b  _end_test(void){
2680: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
2690: 20 69 45 6c 61 70 73 65 54 69 6d 65 20 3d 20 73   iElapseTime = s
26a0: 70 65 65 64 74 65 73 74 31 5f 74 69 6d 65 73 74  peedtest1_timest
26b0: 61 6d 70 28 29 20 2d 20 67 2e 69 53 74 61 72 74  amp() - g.iStart
26c0: 3b 0a 20 20 69 66 28 20 21 67 2e 62 53 71 6c 4f  ;.  if( !g.bSqlO
26d0: 6e 6c 79 20 29 7b 0a 20 20 20 20 67 2e 69 54 6f  nly ){.    g.iTo
26e0: 74 61 6c 20 2b 3d 20 69 45 6c 61 70 73 65 54 69  tal += iElapseTi
26f0: 6d 65 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  me;.    printf("
2700: 25 34 64 2e 25 30 33 64 73 5c 6e 22 2c 20 28 69  %4d.%03ds\n", (i
2710: 6e 74 29 28 69 45 6c 61 70 73 65 54 69 6d 65 2f  nt)(iElapseTime/
2720: 31 30 30 30 29 2c 20 28 69 6e 74 29 28 69 45 6c  1000), (int)(iEl
2730: 61 70 73 65 54 69 6d 65 25 31 30 30 30 29 29 3b  apseTime%1000));
2740: 0a 20 20 7d 0a 20 20 69 66 28 20 67 2e 70 53 74  .  }.  if( g.pSt
2750: 6d 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  mt ){.    sqlite
2760: 33 5f 66 69 6e 61 6c 69 7a 65 28 67 2e 70 53 74  3_finalize(g.pSt
2770: 6d 74 29 3b 0a 20 20 20 20 67 2e 70 53 74 6d 74  mt);.    g.pStmt
2780: 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20   = 0;.  }.}../* 
2790: 52 65 70 6f 72 74 20 65 6e 64 20 6f 66 20 74 65  Report end of te
27a0: 73 74 69 6e 67 20 2a 2f 0a 76 6f 69 64 20 73 70  sting */.void sp
27b0: 65 65 64 74 65 73 74 31 5f 66 69 6e 61 6c 28 76  eedtest1_final(v
27c0: 6f 69 64 29 7b 0a 20 20 69 66 28 20 21 67 2e 62  oid){.  if( !g.b
27d0: 53 71 6c 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 70  SqlOnly ){.    p
27e0: 72 69 6e 74 66 28 22 20 20 20 20 20 20 20 54 4f  rintf("       TO
27f0: 54 41 4c 25 2e 2a 73 20 25 34 64 2e 25 30 33 64  TAL%.*s %4d.%03d
2800: 73 5c 6e 22 2c 20 4e 41 4d 45 57 49 44 54 48 2d  s\n", NAMEWIDTH-
2810: 35 2c 20 7a 44 6f 74 73 2c 0a 20 20 20 20 20 20  5, zDots,.      
2820: 20 20 20 20 20 28 69 6e 74 29 28 67 2e 69 54 6f       (int)(g.iTo
2830: 74 61 6c 2f 31 30 30 30 29 2c 20 28 69 6e 74 29  tal/1000), (int)
2840: 28 67 2e 69 54 6f 74 61 6c 25 31 30 30 30 29 29  (g.iTotal%1000))
2850: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 50 72 69 6e  ;.  }.}../* Prin
2860: 74 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t an SQL stateme
2870: 6e 74 20 74 6f 20 73 74 61 6e 64 61 72 64 20 6f  nt to standard o
2880: 75 74 70 75 74 20 2a 2f 0a 73 74 61 74 69 63 20  utput */.static 
2890: 76 6f 69 64 20 70 72 69 6e 74 53 71 6c 28 63 6f  void printSql(co
28a0: 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b  nst char *zSql){
28b0: 0a 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29  .  int n = (int)
28c0: 73 74 72 6c 65 6e 28 7a 53 71 6c 29 3b 0a 20 20  strlen(zSql);.  
28d0: 77 68 69 6c 65 28 20 6e 3e 30 20 26 26 20 28 7a  while( n>0 && (z
28e0: 53 71 6c 5b 6e 2d 31 5d 3d 3d 27 3b 27 20 7c 7c  Sql[n-1]==';' ||
28f0: 20 49 53 53 50 41 43 45 28 7a 53 71 6c 5b 6e 2d   ISSPACE(zSql[n-
2900: 31 5d 29 29 20 29 7b 20 6e 2d 2d 3b 20 7d 0a 20  1])) ){ n--; }. 
2910: 20 69 66 28 20 67 2e 62 45 78 70 6c 61 69 6e 20   if( g.bExplain 
2920: 29 20 70 72 69 6e 74 66 28 22 45 58 50 4c 41 49  ) printf("EXPLAI
2930: 4e 20 22 29 3b 0a 20 20 70 72 69 6e 74 66 28 22  N ");.  printf("
2940: 25 2e 2a 73 3b 5c 6e 22 2c 20 6e 2c 20 7a 53 71  %.*s;\n", n, zSq
2950: 6c 29 3b 0a 20 20 69 66 28 20 67 2e 62 45 78 70  l);.  if( g.bExp
2960: 6c 61 69 6e 0a 23 69 66 20 53 51 4c 49 54 45 5f  lain.#if SQLITE_
2970: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d  VERSION_NUMBER>=
2980: 33 30 30 37 30 31 37 20 0a 20 20 20 26 26 20 28  3007017 .   && (
2990: 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
29a0: 28 22 43 52 45 41 54 45 20 2a 22 2c 20 7a 53 71  ("CREATE *", zSq
29b0: 6c 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 71  l)==0.     || sq
29c0: 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 22 44  lite3_strglob("D
29d0: 52 4f 50 20 2a 22 2c 20 7a 53 71 6c 29 3d 3d 30  ROP *", zSql)==0
29e0: 0a 20 20 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  .     || sqlite3
29f0: 5f 73 74 72 67 6c 6f 62 28 22 41 4c 54 45 52 20  _strglob("ALTER 
2a00: 2a 22 2c 20 7a 53 71 6c 29 3d 3d 30 0a 20 20 20  *", zSql)==0.   
2a10: 20 20 20 29 0a 23 65 6e 64 69 66 0a 20 20 29 7b     ).#endif.  ){
2a20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 2e 2a  .    printf("%.*
2a30: 73 3b 5c 6e 22 2c 20 6e 2c 20 7a 53 71 6c 29 3b  s;\n", n, zSql);
2a40: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 53 68 72 69 6e  .  }.}../* Shrin
2a50: 6b 20 6d 65 6d 6f 72 79 20 75 73 65 64 2c 20 69  k memory used, i
2a60: 66 20 61 70 70 72 6f 70 72 69 61 74 65 20 61 6e  f appropriate an
2a70: 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
2a80: 76 65 72 73 69 6f 6e 20 69 73 20 63 61 70 61 62  version is capab
2a90: 6c 65 0a 2a 2a 20 6f 66 20 64 6f 69 6e 67 20 73  le.** of doing s
2aa0: 6f 2e 0a 2a 2f 0a 76 6f 69 64 20 73 70 65 65 64  o..*/.void speed
2ab0: 74 65 73 74 31 5f 73 68 72 69 6e 6b 5f 6d 65 6d  test1_shrink_mem
2ac0: 6f 72 79 28 76 6f 69 64 29 7b 0a 23 69 66 20 53  ory(void){.#if S
2ad0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
2ae0: 4d 42 45 52 3e 3d 33 30 30 37 30 31 30 0a 20 20  MBER>=3007010.  
2af0: 69 66 28 20 67 2e 62 4d 65 6d 53 68 72 69 6e 6b  if( g.bMemShrink
2b00: 20 29 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65   ) sqlite3_db_re
2b10: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 67 2e 64  lease_memory(g.d
2b20: 62 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a  b);.#endif.}../*
2b30: 20 52 75 6e 20 53 51 4c 20 2a 2f 0a 76 6f 69 64   Run SQL */.void
2b40: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
2b50: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f  (const char *zFo
2b60: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
2b70: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72  _list ap;.  char
2b80: 20 2a 7a 53 71 6c 3b 0a 20 20 76 61 5f 73 74 61   *zSql;.  va_sta
2b90: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b  rt(ap, zFormat);
2ba0: 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  .  zSql = sqlite
2bb0: 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d  3_vmprintf(zForm
2bc0: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
2bd0: 64 28 61 70 29 3b 0a 20 20 69 66 28 20 67 2e 62  d(ap);.  if( g.b
2be0: 53 71 6c 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 70  SqlOnly ){.    p
2bf0: 72 69 6e 74 53 71 6c 28 7a 53 71 6c 29 3b 0a 20  rintSql(zSql);. 
2c00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
2c10: 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20   *zErrMsg = 0;. 
2c20: 20 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c 69     int rc = sqli
2c30: 74 65 33 5f 65 78 65 63 28 67 2e 64 62 2c 20 7a  te3_exec(g.db, z
2c40: 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72  Sql, 0, 0, &zErr
2c50: 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 45  Msg);.    if( zE
2c60: 72 72 4d 73 67 20 29 20 66 61 74 61 6c 5f 65 72  rrMsg ) fatal_er
2c70: 72 6f 72 28 22 53 51 4c 20 65 72 72 6f 72 3a 20  ror("SQL error: 
2c80: 25 73 5c 6e 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  %s\n%s\n", zErrM
2c90: 73 67 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 69  sg, zSql);.    i
2ca0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
2cb0: 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22   ) fatal_error("
2cc0: 65 78 65 63 20 65 72 72 6f 72 3a 20 25 73 5c 6e  exec error: %s\n
2cd0: 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
2ce0: 67 28 67 2e 64 62 29 29 3b 0a 20 20 7d 0a 20 20  g(g.db));.  }.  
2cf0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
2d00: 6c 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  l);.  speedtest1
2d10: 5f 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 28 29  _shrink_memory()
2d20: 3b 0a 7d 0a 0a 2f 2a 20 50 72 65 70 61 72 65 20  ;.}../* Prepare 
2d30: 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
2d40: 20 2a 2f 0a 76 6f 69 64 20 73 70 65 65 64 74 65   */.void speedte
2d50: 73 74 31 5f 70 72 65 70 61 72 65 28 63 6f 6e 73  st1_prepare(cons
2d60: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
2d70: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
2d80: 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71   ap;.  char *zSq
2d90: 6c 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  l;.  va_start(ap
2da0: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 53  , zFormat);.  zS
2db0: 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70  ql = sqlite3_vmp
2dc0: 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61  rintf(zFormat, a
2dd0: 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29  p);.  va_end(ap)
2de0: 3b 0a 20 20 69 66 28 20 67 2e 62 53 71 6c 4f 6e  ;.  if( g.bSqlOn
2df0: 6c 79 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 53  ly ){.    printS
2e00: 71 6c 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73  ql(zSql);.  }els
2e10: 65 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20  e{.    int rc;. 
2e20: 20 20 20 69 66 28 20 67 2e 70 53 74 6d 74 20 29     if( g.pStmt )
2e30: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
2e40: 65 28 67 2e 70 53 74 6d 74 29 3b 0a 20 20 20 20  e(g.pStmt);.    
2e50: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
2e60: 70 61 72 65 5f 76 32 28 67 2e 64 62 2c 20 7a 53  pare_v2(g.db, zS
2e70: 71 6c 2c 20 2d 31 2c 20 26 67 2e 70 53 74 6d 74  ql, -1, &g.pStmt
2e80: 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63  , 0);.    if( rc
2e90: 20 29 7b 0a 20 20 20 20 20 20 66 61 74 61 6c 5f   ){.      fatal_
2ea0: 65 72 72 6f 72 28 22 53 51 4c 20 65 72 72 6f 72  error("SQL error
2eb0: 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
2ec0: 5f 65 72 72 6d 73 67 28 67 2e 64 62 29 29 3b 0a  _errmsg(g.db));.
2ed0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
2ee0: 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
2ef0: 7d 0a 0a 2f 2a 20 52 75 6e 20 61 6e 20 53 51 4c  }../* Run an SQL
2f00: 20 73 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69   statement previ
2f10: 6f 75 73 6c 79 20 70 72 65 70 61 72 65 64 20 2a  ously prepared *
2f20: 2f 0a 76 6f 69 64 20 73 70 65 65 64 74 65 73 74  /.void speedtest
2f30: 31 5f 72 75 6e 28 76 6f 69 64 29 7b 0a 20 20 69  1_run(void){.  i
2f40: 6e 74 20 69 2c 20 6e 2c 20 6c 65 6e 3b 0a 20 20  nt i, n, len;.  
2f50: 69 66 28 20 67 2e 62 53 71 6c 4f 6e 6c 79 20 29  if( g.bSqlOnly )
2f60: 20 72 65 74 75 72 6e 3b 0a 20 20 61 73 73 65 72   return;.  asser
2f70: 74 28 20 67 2e 70 53 74 6d 74 20 29 3b 0a 20 20  t( g.pStmt );.  
2f80: 67 2e 6e 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  g.nResult = 0;. 
2f90: 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f   while( sqlite3_
2fa0: 73 74 65 70 28 67 2e 70 53 74 6d 74 29 3d 3d 53  step(g.pStmt)==S
2fb0: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
2fc0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c   n = sqlite3_col
2fd0: 75 6d 6e 5f 63 6f 75 6e 74 28 67 2e 70 53 74 6d  umn_count(g.pStm
2fe0: 74 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  t);.    for(i=0;
2ff0: 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
3000: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
3010: 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
3020: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
3030: 78 74 28 67 2e 70 53 74 6d 74 2c 20 69 29 3b 0a  xt(g.pStmt, i);.
3040: 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29        if( z==0 )
3050: 20 7a 20 3d 20 22 6e 69 6c 22 3b 0a 20 20 20 20   z = "nil";.    
3060: 20 20 6c 65 6e 20 3d 20 28 69 6e 74 29 73 74 72    len = (int)str
3070: 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 20 20 69 66  len(z);.      if
3080: 28 20 67 2e 6e 52 65 73 75 6c 74 2b 6c 65 6e 3c  ( g.nResult+len<
3090: 73 69 7a 65 6f 66 28 67 2e 7a 52 65 73 75 6c 74  sizeof(g.zResult
30a0: 29 2d 32 20 29 7b 0a 20 20 20 20 20 20 20 20 69  )-2 ){.        i
30b0: 66 28 20 67 2e 6e 52 65 73 75 6c 74 3e 30 20 29  f( g.nResult>0 )
30c0: 20 67 2e 7a 52 65 73 75 6c 74 5b 67 2e 6e 52 65   g.zResult[g.nRe
30d0: 73 75 6c 74 2b 2b 5d 20 3d 20 27 20 27 3b 0a 20  sult++] = ' ';. 
30e0: 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 67 2e         memcpy(g.
30f0: 7a 52 65 73 75 6c 74 20 2b 20 67 2e 6e 52 65 73  zResult + g.nRes
3100: 75 6c 74 2c 20 7a 2c 20 6c 65 6e 2b 31 29 3b 0a  ult, z, len+1);.
3110: 20 20 20 20 20 20 20 20 67 2e 6e 52 65 73 75 6c          g.nResul
3120: 74 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20  t += len;.      
3130: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 69 66 20  }.    }.  }.#if 
3140: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
3150: 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 31 0a 20  UMBER>=3006001. 
3160: 20 69 66 28 20 67 2e 62 52 65 70 72 65 70 61 72   if( g.bReprepar
3170: 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  e ){.    sqlite3
3180: 5f 73 74 6d 74 20 2a 70 4e 65 77 3b 0a 20 20 20  _stmt *pNew;.   
3190: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
31a0: 5f 76 32 28 67 2e 64 62 2c 20 73 71 6c 69 74 65  _v2(g.db, sqlite
31b0: 33 5f 73 71 6c 28 67 2e 70 53 74 6d 74 29 2c 20  3_sql(g.pStmt), 
31c0: 2d 31 2c 20 26 70 4e 65 77 2c 20 30 29 3b 0a 20  -1, &pNew, 0);. 
31d0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
31e0: 69 7a 65 28 67 2e 70 53 74 6d 74 29 3b 0a 20 20  ize(g.pStmt);.  
31f0: 20 20 67 2e 70 53 74 6d 74 20 3d 20 70 4e 65 77    g.pStmt = pNew
3200: 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
3210: 0a 20 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .  {.    sqlite3
3220: 5f 72 65 73 65 74 28 67 2e 70 53 74 6d 74 29 3b  _reset(g.pStmt);
3230: 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74  .  }.  speedtest
3240: 31 5f 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 28  1_shrink_memory(
3250: 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  );.}..#ifndef SQ
3260: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
3270: 41 54 45 44 0a 2f 2a 20 54 68 65 20 73 71 6c 69  ATED./* The sqli
3280: 74 65 33 5f 74 72 61 63 65 28 29 20 63 61 6c 6c  te3_trace() call
3290: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  back function */
32a0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 61  .static void tra
32b0: 63 65 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20  ceCallback(void 
32c0: 2a 4e 6f 74 55 73 65 64 2c 20 63 6f 6e 73 74 20  *NotUsed, const 
32d0: 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 69  char *zSql){.  i
32e0: 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c  nt n = (int)strl
32f0: 65 6e 28 7a 53 71 6c 29 3b 0a 20 20 77 68 69 6c  en(zSql);.  whil
3300: 65 28 20 6e 3e 30 20 26 26 20 28 7a 53 71 6c 5b  e( n>0 && (zSql[
3310: 6e 2d 31 5d 3d 3d 27 3b 27 20 7c 7c 20 49 53 53  n-1]==';' || ISS
3320: 50 41 43 45 28 7a 53 71 6c 5b 6e 2d 31 5d 29 29  PACE(zSql[n-1]))
3330: 20 29 20 6e 2d 2d 3b 0a 20 20 66 70 72 69 6e 74   ) n--;.  fprint
3340: 66 28 73 74 64 65 72 72 2c 22 25 2e 2a 73 3b 5c  f(stderr,"%.*s;\
3350: 6e 22 2c 20 6e 2c 20 7a 53 71 6c 29 3b 0a 7d 0a  n", n, zSql);.}.
3360: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
3370: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
3380: 20 2a 2f 0a 0a 2f 2a 20 53 75 62 73 74 69 74 75   */../* Substitu
3390: 74 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63  te random() func
33a0: 74 69 6f 6e 20 74 68 61 74 20 67 69 76 65 73 20  tion that gives 
33b0: 74 68 65 20 73 61 6d 65 20 72 61 6e 64 6f 6d 0a  the same random.
33c0: 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 6e 20 65  ** sequence on e
33d0: 61 63 68 20 72 75 6e 2c 20 66 6f 72 20 72 65 70  ach run, for rep
33e0: 65 61 74 61 62 69 6c 69 74 79 2e 20 2a 2f 0a 73  eatability. */.s
33f0: 74 61 74 69 63 20 76 6f 69 64 20 72 61 6e 64 6f  tatic void rando
3400: 6d 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33  mFunc(.  sqlite3
3410: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
3420: 74 2c 0a 20 20 69 6e 74 20 4e 6f 74 55 73 65 64  t,.  int NotUsed
3430: 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ,.  sqlite3_valu
3440: 65 20 2a 2a 4e 6f 74 55 73 65 64 32 0a 29 7b 0a  e **NotUsed2.){.
3450: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
3460: 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
3470: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 73  (sqlite3_int64)s
3480: 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d  peedtest1_random
3490: 28 29 29 3b 0a 7d 0a 0a 2f 2a 20 45 73 74 69 6d  ());.}../* Estim
34a0: 61 74 65 20 74 68 65 20 73 71 75 61 72 65 20 72  ate the square r
34b0: 6f 6f 74 20 6f 66 20 61 6e 20 69 6e 74 65 67 65  oot of an intege
34c0: 72 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  r */.static int 
34d0: 65 73 74 5f 73 71 75 61 72 65 5f 72 6f 6f 74 28  est_square_root(
34e0: 69 6e 74 20 78 29 7b 0a 20 20 69 6e 74 20 79 30  int x){.  int y0
34f0: 20 3d 20 78 2f 32 3b 0a 20 20 69 6e 74 20 79 31   = x/2;.  int y1
3500: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 66 6f 72  ;.  int n;.  for
3510: 28 6e 3d 30 3b 20 79 30 3e 30 20 26 26 20 6e 3c  (n=0; y0>0 && n<
3520: 31 30 3b 20 6e 2b 2b 29 7b 0a 20 20 20 20 79 31  10; n++){.    y1
3530: 20 3d 20 28 79 30 20 2b 20 78 2f 79 30 29 2f 32   = (y0 + x/y0)/2
3540: 3b 0a 20 20 20 20 69 66 28 20 79 31 3d 3d 79 30  ;.    if( y1==y0
3550: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 79 30   ) break;.    y0
3560: 20 3d 20 79 31 3b 0a 20 20 7d 0a 20 20 72 65 74   = y1;.  }.  ret
3570: 75 72 6e 20 79 30 3b 0a 7d 0a 0a 0a 23 69 66 20  urn y0;.}...#if 
3580: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
3590: 55 4d 42 45 52 3c 33 30 30 35 30 30 34 0a 2f 2a  UMBER<3005004./*
35a0: 0a 2a 2a 20 41 6e 20 69 6d 70 6c 65 6d 65 6e 74  .** An implement
35b0: 61 74 69 6f 6e 20 6f 66 20 67 72 6f 75 70 5f 63  ation of group_c
35c0: 6f 6e 63 61 74 28 29 2e 20 20 55 73 65 64 20 6f  oncat().  Used o
35d0: 6e 6c 79 20 77 68 65 6e 20 74 65 73 74 69 6e 67  nly when testing
35e0: 20 6f 6c 64 65 72 0a 2a 2a 20 76 65 72 73 69 6f   older.** versio
35f0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 74 68 61  ns of SQLite tha
3600: 74 20 6c 61 63 6b 20 74 68 65 20 62 75 69 6c 74  t lack the built
3610: 2d 69 6e 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  -in group_concat
3620: 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 67 72  ()..*/.struct gr
3630: 6f 75 70 43 6f 6e 63 61 74 20 7b 0a 20 20 63 68  oupConcat {.  ch
3640: 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 6e 41 6c  ar *z;.  int nAl
3650: 6c 6f 63 3b 0a 20 20 69 6e 74 20 6e 55 73 65 64  loc;.  int nUsed
3660: 3b 0a 7d 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  ;.};.static void
3670: 20 67 72 6f 75 70 41 70 70 65 6e 64 28 73 74 72   groupAppend(str
3680: 75 63 74 20 67 72 6f 75 70 43 6f 6e 63 61 74 20  uct groupConcat 
3690: 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
36a0: 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 69 66 28  z, int n){.  if(
36b0: 20 70 2d 3e 6e 55 73 65 64 2b 6e 20 3e 3d 20 70   p->nUsed+n >= p
36c0: 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  ->nAlloc ){.    
36d0: 69 6e 74 20 6e 32 20 3d 20 28 70 2d 3e 6e 41 6c  int n2 = (p->nAl
36e0: 6c 6f 63 2b 6e 2b 31 29 2a 32 3b 0a 20 20 20 20  loc+n+1)*2;.    
36f0: 63 68 61 72 20 2a 7a 32 20 3d 20 73 71 6c 69 74  char *z2 = sqlit
3700: 65 33 5f 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c  e3_realloc(p->z,
3710: 20 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 7a 32   n2);.    if( z2
3720: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
3730: 20 20 70 2d 3e 7a 20 3d 20 7a 32 3b 0a 20 20 20    p->z = z2;.   
3740: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 6e 32 3b   p->nAlloc = n2;
3750: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 70 2d  .  }.  memcpy(p-
3760: 3e 7a 2b 70 2d 3e 6e 55 73 65 64 2c 20 7a 2c 20  >z+p->nUsed, z, 
3770: 6e 29 3b 0a 20 20 70 2d 3e 6e 55 73 65 64 20 2b  n);.  p->nUsed +
3780: 3d 20 6e 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  = n;.}.static vo
3790: 69 64 20 67 72 6f 75 70 53 74 65 70 28 0a 20 20  id groupStep(.  
37a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
37b0: 2a 63 6f 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20  *context,.  int 
37c0: 61 72 67 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f  argc,.  sqlite3_
37d0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a  value **argv.){.
37e0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56    const char *zV
37f0: 61 6c 3b 0a 20 20 73 74 72 75 63 74 20 67 72 6f  al;.  struct gro
3800: 75 70 43 6f 6e 63 61 74 20 2a 70 3b 0a 20 20 63  upConcat *p;.  c
3810: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 65 70 3b  onst char *zSep;
3820: 0a 20 20 69 6e 74 20 6e 56 61 6c 2c 20 6e 53 65  .  int nVal, nSe
3830: 70 3b 0a 20 20 61 73 73 65 72 74 28 20 61 72 67  p;.  assert( arg
3840: 63 3d 3d 31 20 7c 7c 20 61 72 67 63 3d 3d 32 20  c==1 || argc==2 
3850: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
3860: 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76  _value_type(argv
3870: 5b 30 5d 29 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c  [0])==SQLITE_NUL
3880: 4c 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 70 3d  L ) return;.  p=
3890: 20 28 73 74 72 75 63 74 20 67 72 6f 75 70 43 6f   (struct groupCo
38a0: 6e 63 61 74 2a 29 73 71 6c 69 74 65 33 5f 61 67  ncat*)sqlite3_ag
38b0: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
38c0: 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28  context, sizeof(
38d0: 2a 70 29 29 3b 0a 0a 20 20 69 66 28 20 70 20 29  *p));..  if( p )
38e0: 7b 0a 20 20 20 20 69 6e 74 20 66 69 72 73 74 54  {.    int firstT
38f0: 65 72 6d 20 3d 20 70 2d 3e 6e 55 73 65 64 3d 3d  erm = p->nUsed==
3900: 30 3b 0a 20 20 20 20 69 66 28 20 21 66 69 72 73  0;.    if( !firs
3910: 74 54 65 72 6d 20 29 7b 0a 20 20 20 20 20 20 69  tTerm ){.      i
3920: 66 28 20 61 72 67 63 3d 3d 32 20 29 7b 0a 20 20  f( argc==2 ){.  
3930: 20 20 20 20 20 20 7a 53 65 70 20 3d 20 28 63 68        zSep = (ch
3940: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
3950: 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29 3b  e_text(argv[1]);
3960: 0a 20 20 20 20 20 20 20 20 6e 53 65 70 20 3d 20  .        nSep = 
3970: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
3980: 74 65 73 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20  tes(argv[1]);.  
3990: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
39a0: 20 20 20 7a 53 65 70 20 3d 20 22 2c 22 3b 0a 20     zSep = ",";. 
39b0: 20 20 20 20 20 20 20 6e 53 65 70 20 3d 20 31 3b         nSep = 1;
39c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
39d0: 66 28 20 6e 53 65 70 20 29 20 67 72 6f 75 70 41  f( nSep ) groupA
39e0: 70 70 65 6e 64 28 70 2c 20 7a 53 65 70 2c 20 6e  ppend(p, zSep, n
39f0: 53 65 70 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Sep);.    }.    
3a00: 7a 56 61 6c 20 3d 20 28 63 68 61 72 2a 29 73 71  zVal = (char*)sq
3a10: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
3a20: 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 6e  (argv[0]);.    n
3a30: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  Val = sqlite3_va
3a40: 6c 75 65 5f 62 79 74 65 73 28 61 72 67 76 5b 30  lue_bytes(argv[0
3a50: 5d 29 3b 0a 20 20 20 20 69 66 28 20 7a 56 61 6c  ]);.    if( zVal
3a60: 20 29 20 67 72 6f 75 70 41 70 70 65 6e 64 28 70   ) groupAppend(p
3a70: 2c 20 7a 56 61 6c 2c 20 6e 56 61 6c 29 3b 0a 20  , zVal, nVal);. 
3a80: 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
3a90: 20 67 72 6f 75 70 46 69 6e 61 6c 28 73 71 6c 69   groupFinal(sqli
3aa0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
3ab0: 74 65 78 74 29 7b 0a 20 20 73 74 72 75 63 74 20  text){.  struct 
3ac0: 67 72 6f 75 70 43 6f 6e 63 61 74 20 2a 70 3b 0a  groupConcat *p;.
3ad0: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67    p = sqlite3_ag
3ae0: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
3af0: 63 6f 6e 74 65 78 74 2c 20 30 29 3b 0a 20 20 69  context, 0);.  i
3b00: 66 28 20 70 20 26 26 20 70 2d 3e 7a 20 29 7b 0a  f( p && p->z ){.
3b10: 20 20 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65      p->z[p->nUse
3b20: 64 5d 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  d] = 0;.    sqli
3b30: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
3b40: 63 6f 6e 74 65 78 74 2c 20 70 2d 3e 7a 2c 20 70  context, p->z, p
3b50: 2d 3e 6e 55 73 65 64 2c 20 73 71 6c 69 74 65 33  ->nUsed, sqlite3
3b60: 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 7d 0a 23 65  _free);.  }.}.#e
3b70: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3b80: 6d 61 69 6e 20 61 6e 64 20 64 65 66 61 75 6c 74  main and default
3b90: 20 74 65 73 74 73 65 74 0a 2a 2f 0a 76 6f 69 64   testset.*/.void
3ba0: 20 74 65 73 74 73 65 74 5f 6d 61 69 6e 28 76 6f   testset_main(vo
3bb0: 69 64 29 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20  id){.  int i;   
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
3be0: 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  nter */.  int n;
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 20 20 20 20 2f 2a 20 69 74 65 72 61          /* itera
3c10: 74 69 6f 6e 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  tion count */.  
3c20: 69 6e 74 20 73 7a 3b 20 20 20 20 20 20 20 20 20  int sz;         
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3c40: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 61 62   Size of the tab
3c50: 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 61 78  les */.  int max
3c60: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
3c70: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
3c80: 6d 20 73 77 69 7a 7a 6c 65 64 20 76 61 6c 75 65  m swizzled value
3c90: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 78   */.  unsigned x
3ca0: 31 20 3d 20 30 2c 20 78 32 20 3d 20 30 3b 20 20  1 = 0, x2 = 0;  
3cb0: 20 20 20 20 2f 2a 20 50 61 72 61 6d 65 74 65 72      /* Parameter
3cc0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 20 3d  s */.  int len =
3cd0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
3ce0: 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
3cf0: 66 20 74 68 65 20 7a 4e 75 6d 5b 5d 20 73 74 72  f the zNum[] str
3d00: 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 7a 4e  ing */.  char zN
3d10: 75 6d 5b 32 30 30 30 5d 3b 20 20 20 20 20 20 20  um[2000];       
3d20: 20 20 20 20 20 20 20 2f 2a 20 41 20 6e 75 6d 62         /* A numb
3d30: 65 72 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 73 7a  er name */..  sz
3d40: 20 3d 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a   = n = g.szTest*
3d50: 35 30 30 3b 0a 20 20 7a 4e 75 6d 5b 30 5d 20 3d  500;.  zNum[0] =
3d60: 20 30 3b 0a 20 20 6d 61 78 62 20 3d 20 72 6f 75   0;.  maxb = rou
3d70: 6e 64 75 70 5f 61 6c 6c 6f 6e 65 73 28 73 7a 29  ndup_allones(sz)
3d80: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
3d90: 65 67 69 6e 5f 74 65 73 74 28 31 30 30 2c 20 22  egin_test(100, "
3da0: 25 64 20 49 4e 53 45 52 54 73 20 69 6e 74 6f 20  %d INSERTs into 
3db0: 74 61 62 6c 65 20 77 69 74 68 20 6e 6f 20 69 6e  table with no in
3dc0: 64 65 78 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65  dex", n);.  spee
3dd0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 42 45 47  dtest1_exec("BEG
3de0: 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  IN");.  speedtes
3df0: 74 31 5f 65 78 65 63 28 22 43 52 45 41 54 45 25  t1_exec("CREATE%
3e00: 73 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54  s TABLE t1(a INT
3e10: 45 47 45 52 20 25 73 2c 20 62 20 49 4e 54 45 47  EGER %s, b INTEG
3e20: 45 52 20 25 73 2c 20 63 20 54 45 58 54 20 25 73  ER %s, c TEXT %s
3e30: 29 3b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  );",.           
3e40: 20 20 20 20 20 20 20 69 73 54 65 6d 70 28 39 29         isTemp(9)
3e50: 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 4e 4e 2c 20  , g.zNN, g.zNN, 
3e60: 67 2e 7a 4e 4e 29 3b 0a 20 20 73 70 65 65 64 74  g.zNN);.  speedt
3e70: 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 49 4e  est1_prepare("IN
3e80: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3e90: 55 45 53 28 3f 31 2c 3f 32 2c 3f 33 29 3b 20 2d  UES(?1,?2,?3); -
3ea0: 2d 20 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 29  -  %d times", n)
3eb0: 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d  ;.  for(i=1; i<=
3ec0: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20  n; i++){.    x1 
3ed0: 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62  = swizzle(i,maxb
3ee0: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
3ef0: 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 78 31 2c  1_numbername(x1,
3f00: 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e   zNum, sizeof(zN
3f10: 75 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  um));.    sqlite
3f20: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 67 2e 70  3_bind_int64(g.p
3f30: 53 74 6d 74 2c 20 31 2c 20 28 73 71 6c 69 74 65  Stmt, 1, (sqlite
3f40: 33 5f 69 6e 74 36 34 29 78 31 29 3b 0a 20 20 20  3_int64)x1);.   
3f50: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
3f60: 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 69 29  t(g.pStmt, 2, i)
3f70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
3f80: 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74 2c  nd_text(g.pStmt,
3f90: 20 33 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51   3, zNum, -1, SQ
3fa0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
3fb0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
3fc0: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
3fd0: 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49  est1_exec("COMMI
3fe0: 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  T");.  speedtest
3ff0: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a  1_end_test();...
4000: 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73 70 65 65    n = sz;.  spee
4010: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
4020: 74 28 31 31 30 2c 20 22 25 64 20 6f 72 64 65 72  t(110, "%d order
4030: 65 64 20 49 4e 53 45 52 54 53 20 77 69 74 68 20  ed INSERTS with 
4040: 6f 6e 65 20 69 6e 64 65 78 2f 50 4b 22 2c 20 6e  one index/PK", n
4050: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
4060: 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20  exec("BEGIN");. 
4070: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
4080: 28 0a 20 20 20 20 20 22 43 52 45 41 54 45 25 73  (.     "CREATE%s
4090: 20 54 41 42 4c 45 20 74 32 28 61 20 49 4e 54 45   TABLE t2(a INTE
40a0: 47 45 52 20 25 73 20 25 73 2c 20 62 20 49 4e 54  GER %s %s, b INT
40b0: 45 47 45 52 20 25 73 2c 20 63 20 54 45 58 54 20  EGER %s, c TEXT 
40c0: 25 73 29 20 25 73 22 2c 0a 20 20 20 20 20 69 73  %s) %s",.     is
40d0: 54 65 6d 70 28 35 29 2c 20 67 2e 7a 4e 4e 2c 20  Temp(5), g.zNN, 
40e0: 67 2e 7a 50 4b 2c 20 67 2e 7a 4e 4e 2c 20 67 2e  g.zPK, g.zNN, g.
40f0: 7a 4e 4e 2c 20 67 2e 7a 57 52 29 3b 0a 20 20 73  zNN, g.zWR);.  s
4100: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
4110: 65 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  e("INSERT INTO t
4120: 32 20 56 41 4c 55 45 53 28 3f 31 2c 3f 32 2c 3f  2 VALUES(?1,?2,?
4130: 33 29 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22  3); -- %d times"
4140: 2c 20 6e 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b  , n);.  for(i=1;
4150: 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<=n; i++){.   
4160: 20 78 31 20 3d 20 73 77 69 7a 7a 6c 65 28 69 2c   x1 = swizzle(i,
4170: 6d 61 78 62 29 3b 0a 20 20 20 20 73 70 65 65 64  maxb);.    speed
4180: 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65  test1_numbername
4190: 28 78 31 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f  (x1, zNum, sizeo
41a0: 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 73 71  f(zNum));.    sq
41b0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
41c0: 2e 70 53 74 6d 74 2c 20 31 2c 20 69 29 3b 0a 20  .pStmt, 1, i);. 
41d0: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
41e0: 69 6e 74 36 34 28 67 2e 70 53 74 6d 74 2c 20 32  int64(g.pStmt, 2
41f0: 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  , (sqlite3_int64
4200: 29 78 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  )x1);.    sqlite
4210: 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53  3_bind_text(g.pS
4220: 74 6d 74 2c 20 33 2c 20 7a 4e 75 6d 2c 20 2d 31  tmt, 3, zNum, -1
4230: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
4240: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
4250: 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70  _run();.  }.  sp
4260: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43  eedtest1_exec("C
4270: 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64  OMMIT");.  speed
4280: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
4290: 3b 0a 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20  ;...  n = sz;.  
42a0: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
42b0: 5f 74 65 73 74 28 31 32 30 2c 20 22 25 64 20 75  _test(120, "%d u
42c0: 6e 6f 72 64 65 72 65 64 20 49 4e 53 45 52 54 53  nordered INSERTS
42d0: 20 77 69 74 68 20 6f 6e 65 20 69 6e 64 65 78 2f   with one index/
42e0: 50 4b 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  PK", n);.  speed
42f0: 74 65 73 74 31 5f 65 78 65 63 28 22 42 45 47 49  test1_exec("BEGI
4300: 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  N");.  speedtest
4310: 31 5f 65 78 65 63 28 0a 20 20 20 20 20 20 22 43  1_exec(.      "C
4320: 52 45 41 54 45 25 73 20 54 41 42 4c 45 20 74 33  REATE%s TABLE t3
4330: 28 61 20 49 4e 54 45 47 45 52 20 25 73 20 25 73  (a INTEGER %s %s
4340: 2c 20 62 20 49 4e 54 45 47 45 52 20 25 73 2c 20  , b INTEGER %s, 
4350: 63 20 54 45 58 54 20 25 73 29 20 25 73 22 2c 0a  c TEXT %s) %s",.
4360: 20 20 20 20 20 20 69 73 54 65 6d 70 28 33 29 2c        isTemp(3),
4370: 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 50 4b 2c 20 67   g.zNN, g.zPK, g
4380: 2e 7a 4e 4e 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a  .zNN, g.zNN, g.z
4390: 57 52 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  WR);.  speedtest
43a0: 31 5f 70 72 65 70 61 72 65 28 22 49 4e 53 45 52  1_prepare("INSER
43b0: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
43c0: 28 3f 31 2c 3f 32 2c 3f 33 29 3b 20 2d 2d 20 25  (?1,?2,?3); -- %
43d0: 64 20 74 69 6d 65 73 22 2c 20 6e 29 3b 0a 20 20  d times", n);.  
43e0: 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69  for(i=1; i<=n; i
43f0: 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 77  ++){.    x1 = sw
4400: 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29 3b 0a 20  izzle(i,maxb);. 
4410: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75     speedtest1_nu
4420: 6d 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75  mbername(x1, zNu
4430: 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29  m, sizeof(zNum))
4440: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
4450: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
4460: 32 2c 20 69 29 3b 0a 20 20 20 20 73 71 6c 69 74  2, i);.    sqlit
4470: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 67 2e  e3_bind_int64(g.
4480: 70 53 74 6d 74 2c 20 31 2c 20 28 73 71 6c 69 74  pStmt, 1, (sqlit
4490: 65 33 5f 69 6e 74 36 34 29 78 31 29 3b 0a 20 20  e3_int64)x1);.  
44a0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
44b0: 65 78 74 28 67 2e 70 53 74 6d 74 2c 20 33 2c 20  ext(g.pStmt, 3, 
44c0: 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  zNum, -1, SQLITE
44d0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70  _STATIC);.    sp
44e0: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
44f0: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
4500: 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b  _exec("COMMIT");
4510: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
4520: 64 5f 74 65 73 74 28 29 3b 0a 0a 23 69 66 20 53  d_test();..#if S
4530: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
4540: 4d 42 45 52 3c 33 30 30 35 30 30 34 0a 20 20 73  MBER<3005004.  s
4550: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
4560: 6e 63 74 69 6f 6e 28 67 2e 64 62 2c 20 22 67 72  nction(g.db, "gr
4570: 6f 75 70 5f 63 6f 6e 63 61 74 22 2c 20 31 2c 20  oup_concat", 1, 
4580: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a  SQLITE_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 20 20 20 20 30 2c 20 67 72 6f            0, gro
45b0: 75 70 53 74 65 70 2c 20 67 72 6f 75 70 46 69 6e  upStep, groupFin
45c0: 61 6c 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e  al);.#endif..  n
45d0: 20 3d 20 32 35 3b 0a 20 20 73 70 65 65 64 74 65   = 25;.  speedte
45e0: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
45f0: 33 30 2c 20 22 25 64 20 53 45 4c 45 43 54 53 2c  30, "%d SELECTS,
4600: 20 6e 75 6d 65 72 69 63 20 42 45 54 57 45 45 4e   numeric BETWEEN
4610: 2c 20 75 6e 69 6e 64 65 78 65 64 22 2c 20 6e 29  , unindexed", n)
4620: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
4630: 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20  xec("BEGIN");.  
4640: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
4650: 72 65 28 0a 20 20 20 20 22 53 45 4c 45 43 54 20  re(.    "SELECT 
4660: 63 6f 75 6e 74 28 2a 29 2c 20 61 76 67 28 62 29  count(*), avg(b)
4670: 2c 20 73 75 6d 28 6c 65 6e 67 74 68 28 63 29 29  , sum(length(c))
4680: 2c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 63  , group_concat(c
4690: 29 20 46 52 4f 4d 20 74 31 5c 6e 22 0a 20 20 20  ) FROM t1\n".   
46a0: 20 22 20 57 48 45 52 45 20 62 20 42 45 54 57 45   " WHERE b BETWE
46b0: 45 4e 20 3f 31 20 41 4e 44 20 3f 32 3b 20 2d 2d  EN ?1 AND ?2; --
46c0: 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a 20 20   %d times", n.  
46d0: 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c  );.  for(i=1; i<
46e0: 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  =n; i++){.    if
46f0: 28 20 28 69 2d 31 29 25 67 2e 6e 52 65 70 65 61  ( (i-1)%g.nRepea
4700: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 78 31  t==0 ){.      x1
4710: 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72 61   = speedtest1_ra
4720: 6e 64 6f 6d 28 29 25 6d 61 78 62 3b 0a 20 20 20  ndom()%maxb;.   
4730: 20 20 20 78 32 20 3d 20 73 70 65 65 64 74 65 73     x2 = speedtes
4740: 74 31 5f 72 61 6e 64 6f 6d 28 29 25 31 30 20 2b  t1_random()%10 +
4750: 20 73 7a 2f 35 30 30 30 20 2b 20 78 31 3b 0a 20   sz/5000 + x1;. 
4760: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
4770: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
4780: 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73  t, 1, x1);.    s
4790: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
47a0: 67 2e 70 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b  g.pStmt, 2, x2);
47b0: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
47c0: 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65  run();.  }.  spe
47d0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f  edtest1_exec("CO
47e0: 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74  MMIT");.  speedt
47f0: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
4800: 0a 0a 0a 20 20 6e 20 3d 20 31 30 3b 0a 20 20 73  ...  n = 10;.  s
4810: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
4820: 74 65 73 74 28 31 34 30 2c 20 22 25 64 20 53 45  test(140, "%d SE
4830: 4c 45 43 54 53 2c 20 4c 49 4b 45 2c 20 75 6e 69  LECTS, LIKE, uni
4840: 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20 73  ndexed", n);.  s
4850: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
4860: 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64  BEGIN");.  speed
4870: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20  test1_prepare(. 
4880: 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74     "SELECT count
4890: 28 2a 29 2c 20 61 76 67 28 62 29 2c 20 73 75 6d  (*), avg(b), sum
48a0: 28 6c 65 6e 67 74 68 28 63 29 29 2c 20 67 72 6f  (length(c)), gro
48b0: 75 70 5f 63 6f 6e 63 61 74 28 63 29 20 46 52 4f  up_concat(c) FRO
48c0: 4d 20 74 31 5c 6e 22 0a 20 20 20 20 22 20 57 48  M t1\n".    " WH
48d0: 45 52 45 20 63 20 4c 49 4b 45 20 3f 31 3b 20 2d  ERE c LIKE ?1; -
48e0: 2d 20 25 64 20 74 69 6d 65 73 22 2c 20 6e 0a 20  - %d times", n. 
48f0: 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69   );.  for(i=1; i
4900: 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  <=n; i++){.    i
4910: 66 28 20 28 69 2d 31 29 25 67 2e 6e 52 65 70 65  f( (i-1)%g.nRepe
4920: 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 78  at==0 ){.      x
4930: 31 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72  1 = speedtest1_r
4940: 61 6e 64 6f 6d 28 29 25 6d 61 78 62 3b 0a 20 20  andom()%maxb;.  
4950: 20 20 20 20 7a 4e 75 6d 5b 30 5d 20 3d 20 27 25      zNum[0] = '%
4960: 27 3b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  ';.      len = s
4970: 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72  peedtest1_number
4980: 6e 61 6d 65 28 69 2c 20 7a 4e 75 6d 2b 31 2c 20  name(i, zNum+1, 
4990: 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 2d 32 29 3b  sizeof(zNum)-2);
49a0: 0a 20 20 20 20 20 20 7a 4e 75 6d 5b 6c 65 6e 5d  .      zNum[len]
49b0: 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20 7a 4e   = '%';.      zN
49c0: 75 6d 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  um[len+1] = 0;. 
49d0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
49e0: 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74  _bind_text(g.pSt
49f0: 6d 74 2c 20 31 2c 20 7a 4e 75 6d 2c 20 6c 65 6e  mt, 1, zNum, len
4a00: 2b 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  +1, SQLITE_STATI
4a10: 43 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73  C);.    speedtes
4a20: 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20  t1_run();.  }.  
4a30: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
4a40: 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65  "COMMIT");.  spe
4a50: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
4a60: 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20 31 30 3b 0a  ();...  n = 10;.
4a70: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
4a80: 69 6e 5f 74 65 73 74 28 31 34 32 2c 20 22 25 64  in_test(142, "%d
4a90: 20 53 45 4c 45 43 54 53 20 77 2f 4f 52 44 45 52   SELECTS w/ORDER
4aa0: 20 42 59 2c 20 75 6e 69 6e 64 65 78 65 64 22 2c   BY, unindexed",
4ab0: 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74   n);.  speedtest
4ac0: 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b  1_exec("BEGIN");
4ad0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
4ae0: 65 70 61 72 65 28 0a 20 20 20 20 22 53 45 4c 45  epare(.    "SELE
4af0: 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20  CT a, b, c FROM 
4b00: 74 31 20 57 48 45 52 45 20 63 20 4c 49 4b 45 20  t1 WHERE c LIKE 
4b10: 3f 31 5c 6e 22 0a 20 20 20 20 22 20 4f 52 44 45  ?1\n".    " ORDE
4b20: 52 20 42 59 20 61 3b 20 2d 2d 20 25 64 20 74 69  R BY a; -- %d ti
4b30: 6d 65 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66  mes", n.  );.  f
4b40: 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b  or(i=1; i<=n; i+
4b50: 2b 29 7b 0a 20 20 20 20 69 66 28 20 28 69 2d 31  +){.    if( (i-1
4b60: 29 25 67 2e 6e 52 65 70 65 61 74 3d 3d 30 20 29  )%g.nRepeat==0 )
4b70: 7b 0a 20 20 20 20 20 20 78 31 20 3d 20 73 70 65  {.      x1 = spe
4b80: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
4b90: 25 6d 61 78 62 3b 0a 20 20 20 20 20 20 7a 4e 75  %maxb;.      zNu
4ba0: 6d 5b 30 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20  m[0] = '%';.    
4bb0: 20 20 6c 65 6e 20 3d 20 73 70 65 65 64 74 65 73    len = speedtes
4bc0: 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 69 2c  t1_numbername(i,
4bd0: 20 7a 4e 75 6d 2b 31 2c 20 73 69 7a 65 6f 66 28   zNum+1, sizeof(
4be0: 7a 4e 75 6d 29 2d 32 29 3b 0a 20 20 20 20 20 20  zNum)-2);.      
4bf0: 7a 4e 75 6d 5b 6c 65 6e 5d 20 3d 20 27 25 27 3b  zNum[len] = '%';
4c00: 0a 20 20 20 20 20 20 7a 4e 75 6d 5b 6c 65 6e 2b  .      zNum[len+
4c10: 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  1] = 0;.    }.  
4c20: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
4c30: 65 78 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20  ext(g.pStmt, 1, 
4c40: 7a 4e 75 6d 2c 20 6c 65 6e 2b 31 2c 20 53 51 4c  zNum, len+1, SQL
4c50: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
4c60: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
4c70: 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65  );.  }.  speedte
4c80: 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54  st1_exec("COMMIT
4c90: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
4ca0: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20  _end_test();..  
4cb0: 6e 20 3d 20 31 30 3b 20 2f 2a 20 67 2e 73 7a 54  n = 10; /* g.szT
4cc0: 65 73 74 2f 35 3b 20 2a 2f 0a 20 20 73 70 65 65  est/5; */.  spee
4cd0: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
4ce0: 74 28 31 34 35 2c 20 22 25 64 20 53 45 4c 45 43  t(145, "%d SELEC
4cf0: 54 53 20 77 2f 4f 52 44 45 52 20 42 59 20 61 6e  TS w/ORDER BY an
4d00: 64 20 4c 49 4d 49 54 2c 20 75 6e 69 6e 64 65 78  d LIMIT, unindex
4d10: 65 64 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  ed", n);.  speed
4d20: 74 65 73 74 31 5f 65 78 65 63 28 22 42 45 47 49  test1_exec("BEGI
4d30: 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  N");.  speedtest
4d40: 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20 20 22  1_prepare(.    "
4d50: 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46  SELECT a, b, c F
4d60: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63 20 4c  ROM t1 WHERE c L
4d70: 49 4b 45 20 3f 31 5c 6e 22 0a 20 20 20 20 22 20  IKE ?1\n".    " 
4d80: 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54  ORDER BY a LIMIT
4d90: 20 31 30 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73   10; -- %d times
4da0: 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28  ", n.  );.  for(
4db0: 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b  i=1; i<=n; i++){
4dc0: 0a 20 20 20 20 69 66 28 20 28 69 2d 31 29 25 67  .    if( (i-1)%g
4dd0: 2e 6e 52 65 70 65 61 74 3d 3d 30 20 29 7b 0a 20  .nRepeat==0 ){. 
4de0: 20 20 20 20 20 78 31 20 3d 20 73 70 65 65 64 74       x1 = speedt
4df0: 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61  est1_random()%ma
4e00: 78 62 3b 0a 20 20 20 20 20 20 7a 4e 75 6d 5b 30  xb;.      zNum[0
4e10: 5d 20 3d 20 27 25 27 3b 0a 20 20 20 20 20 20 6c  ] = '%';.      l
4e20: 65 6e 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f  en = speedtest1_
4e30: 6e 75 6d 62 65 72 6e 61 6d 65 28 69 2c 20 7a 4e  numbername(i, zN
4e40: 75 6d 2b 31 2c 20 73 69 7a 65 6f 66 28 7a 4e 75  um+1, sizeof(zNu
4e50: 6d 29 2d 32 29 3b 0a 20 20 20 20 20 20 7a 4e 75  m)-2);.      zNu
4e60: 6d 5b 6c 65 6e 5d 20 3d 20 27 25 27 3b 0a 20 20  m[len] = '%';.  
4e70: 20 20 20 20 7a 4e 75 6d 5b 6c 65 6e 2b 31 5d 20      zNum[len+1] 
4e80: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  = 0;.    }.    s
4e90: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
4ea0: 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 4e 75  (g.pStmt, 1, zNu
4eb0: 6d 2c 20 6c 65 6e 2b 31 2c 20 53 51 4c 49 54 45  m, len+1, SQLITE
4ec0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70  _STATIC);.    sp
4ed0: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
4ee0: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
4ef0: 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b  _exec("COMMIT");
4f00: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
4f10: 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 73 70  d_test();...  sp
4f20: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
4f30: 65 73 74 28 31 35 30 2c 20 22 43 52 45 41 54 45  est(150, "CREATE
4f40: 20 49 4e 44 45 58 20 66 69 76 65 20 74 69 6d 65   INDEX five time
4f50: 73 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  s");.  speedtest
4f60: 31 5f 65 78 65 63 28 22 42 45 47 49 4e 3b 22 29  1_exec("BEGIN;")
4f70: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
4f80: 78 65 63 28 22 43 52 45 41 54 45 20 55 4e 49 51  xec("CREATE UNIQ
4f90: 55 45 20 49 4e 44 45 58 20 74 31 62 20 4f 4e 20  UE INDEX t1b ON 
4fa0: 74 31 28 62 29 3b 22 29 3b 0a 20 20 73 70 65 65  t1(b);");.  spee
4fb0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 52 45  dtest1_exec("CRE
4fc0: 41 54 45 20 49 4e 44 45 58 20 74 31 63 20 4f 4e  ATE INDEX t1c ON
4fd0: 20 74 31 28 63 29 3b 22 29 3b 0a 20 20 73 70 65   t1(c);");.  spe
4fe0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 52  edtest1_exec("CR
4ff0: 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45  EATE UNIQUE INDE
5000: 58 20 74 32 62 20 4f 4e 20 74 32 28 62 29 3b 22  X t2b ON t2(b);"
5010: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
5020: 65 78 65 63 28 22 43 52 45 41 54 45 20 49 4e 44  exec("CREATE IND
5030: 45 58 20 74 32 63 20 4f 4e 20 74 32 28 63 20 44  EX t2c ON t2(c D
5040: 45 53 43 29 3b 22 29 3b 0a 20 20 73 70 65 65 64  ESC);");.  speed
5050: 74 65 73 74 31 5f 65 78 65 63 28 22 43 52 45 41  test1_exec("CREA
5060: 54 45 20 49 4e 44 45 58 20 74 33 62 63 20 4f 4e  TE INDEX t3bc ON
5070: 20 74 33 28 62 2c 63 29 3b 22 29 3b 0a 20 20 73   t3(b,c);");.  s
5080: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
5090: 43 4f 4d 4d 49 54 3b 22 29 3b 0a 20 20 73 70 65  COMMIT;");.  spe
50a0: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
50b0: 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20 73 7a 2f 35  ();...  n = sz/5
50c0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
50d0: 65 67 69 6e 5f 74 65 73 74 28 31 36 30 2c 20 22  egin_test(160, "
50e0: 25 64 20 53 45 4c 45 43 54 53 2c 20 6e 75 6d 65  %d SELECTS, nume
50f0: 72 69 63 20 42 45 54 57 45 45 4e 2c 20 69 6e 64  ric BETWEEN, ind
5100: 65 78 65 64 22 2c 20 6e 29 3b 0a 20 20 73 70 65  exed", n);.  spe
5110: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42 45  edtest1_exec("BE
5120: 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65  GIN");.  speedte
5130: 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20  st1_prepare(.   
5140: 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   "SELECT count(*
5150: 29 2c 20 61 76 67 28 62 29 2c 20 73 75 6d 28 6c  ), avg(b), sum(l
5160: 65 6e 67 74 68 28 63 29 29 2c 20 67 72 6f 75 70  ength(c)), group
5170: 5f 63 6f 6e 63 61 74 28 61 29 20 46 52 4f 4d 20  _concat(a) FROM 
5180: 74 31 5c 6e 22 0a 20 20 20 20 22 20 57 48 45 52  t1\n".    " WHER
5190: 45 20 62 20 42 45 54 57 45 45 4e 20 3f 31 20 41  E b BETWEEN ?1 A
51a0: 4e 44 20 3f 32 3b 20 2d 2d 20 25 64 20 74 69 6d  ND ?2; -- %d tim
51b0: 65 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66 6f  es", n.  );.  fo
51c0: 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b  r(i=1; i<=n; i++
51d0: 29 7b 0a 20 20 20 20 69 66 28 20 28 69 2d 31 29  ){.    if( (i-1)
51e0: 25 67 2e 6e 52 65 70 65 61 74 3d 3d 30 20 29 7b  %g.nRepeat==0 ){
51f0: 0a 20 20 20 20 20 20 78 31 20 3d 20 73 70 65 65  .      x1 = spee
5200: 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25  dtest1_random()%
5210: 6d 61 78 62 3b 0a 20 20 20 20 20 20 78 32 20 3d  maxb;.      x2 =
5220: 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64   speedtest1_rand
5230: 6f 6d 28 29 25 31 30 20 2b 20 73 7a 2f 35 30 30  om()%10 + sz/500
5240: 30 20 2b 20 78 31 3b 0a 20 20 20 20 7d 0a 20 20  0 + x1;.    }.  
5250: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
5260: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 78  nt(g.pStmt, 1, x
5270: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  1);.    sqlite3_
5280: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
5290: 2c 20 32 2c 20 78 32 29 3b 0a 20 20 20 20 73 70  , 2, x2);.    sp
52a0: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
52b0: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
52c0: 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b  _exec("COMMIT");
52d0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
52e0: 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e 20  d_test();...  n 
52f0: 3d 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64 74  = sz/5;.  speedt
5300: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
5310: 31 36 31 2c 20 22 25 64 20 53 45 4c 45 43 54 53  161, "%d SELECTS
5320: 2c 20 6e 75 6d 65 72 69 63 20 42 45 54 57 45 45  , numeric BETWEE
5330: 4e 2c 20 50 4b 22 2c 20 6e 29 3b 0a 20 20 73 70  N, PK", n);.  sp
5340: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42  eedtest1_exec("B
5350: 45 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74  EGIN");.  speedt
5360: 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20  est1_prepare(.  
5370: 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
5380: 2a 29 2c 20 61 76 67 28 62 29 2c 20 73 75 6d 28  *), avg(b), sum(
5390: 6c 65 6e 67 74 68 28 63 29 29 2c 20 67 72 6f 75  length(c)), grou
53a0: 70 5f 63 6f 6e 63 61 74 28 61 29 20 46 52 4f 4d  p_concat(a) FROM
53b0: 20 74 32 5c 6e 22 0a 20 20 20 20 22 20 57 48 45   t2\n".    " WHE
53c0: 52 45 20 61 20 42 45 54 57 45 45 4e 20 3f 31 20  RE a BETWEEN ?1 
53d0: 41 4e 44 20 3f 32 3b 20 2d 2d 20 25 64 20 74 69  AND ?2; -- %d ti
53e0: 6d 65 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66  mes", n.  );.  f
53f0: 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b  or(i=1; i<=n; i+
5400: 2b 29 7b 0a 20 20 20 20 69 66 28 20 28 69 2d 31  +){.    if( (i-1
5410: 29 25 67 2e 6e 52 65 70 65 61 74 3d 3d 30 20 29  )%g.nRepeat==0 )
5420: 7b 0a 20 20 20 20 20 20 78 31 20 3d 20 73 70 65  {.      x1 = spe
5430: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
5440: 25 6d 61 78 62 3b 0a 20 20 20 20 20 20 78 32 20  %maxb;.      x2 
5450: 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e  = speedtest1_ran
5460: 64 6f 6d 28 29 25 31 30 20 2b 20 73 7a 2f 35 30  dom()%10 + sz/50
5470: 30 30 20 2b 20 78 31 3b 0a 20 20 20 20 7d 0a 20  00 + x1;.    }. 
5480: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
5490: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20  int(g.pStmt, 1, 
54a0: 78 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  x1);.    sqlite3
54b0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
54c0: 74 2c 20 32 2c 20 78 32 29 3b 0a 20 20 20 20 73  t, 2, x2);.    s
54d0: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
54e0: 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74  .  }.  speedtest
54f0: 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29  1_exec("COMMIT")
5500: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
5510: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e  nd_test();...  n
5520: 20 3d 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64   = sz/5;.  speed
5530: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
5540: 28 31 37 30 2c 20 22 25 64 20 53 45 4c 45 43 54  (170, "%d SELECT
5550: 53 2c 20 74 65 78 74 20 42 45 54 57 45 45 4e 2c  S, text BETWEEN,
5560: 20 69 6e 64 65 78 65 64 22 2c 20 6e 29 3b 0a 20   indexed", n);. 
5570: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
5580: 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70 65  ("BEGIN");.  spe
5590: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
55a0: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75  .    "SELECT cou
55b0: 6e 74 28 2a 29 2c 20 61 76 67 28 62 29 2c 20 73  nt(*), avg(b), s
55c0: 75 6d 28 6c 65 6e 67 74 68 28 63 29 29 2c 20 67  um(length(c)), g
55d0: 72 6f 75 70 5f 63 6f 6e 63 61 74 28 61 29 20 46  roup_concat(a) F
55e0: 52 4f 4d 20 74 31 5c 6e 22 0a 20 20 20 20 22 20  ROM t1\n".    " 
55f0: 57 48 45 52 45 20 63 20 42 45 54 57 45 45 4e 20  WHERE c BETWEEN 
5600: 3f 31 20 41 4e 44 20 28 3f 31 7c 7c 27 7e 27 29  ?1 AND (?1||'~')
5610: 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20  ; -- %d times", 
5620: 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31  n.  );.  for(i=1
5630: 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<=n; i++){.  
5640: 20 20 69 66 28 20 28 69 2d 31 29 25 67 2e 6e 52    if( (i-1)%g.nR
5650: 65 70 65 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20  epeat==0 ){.    
5660: 20 20 78 31 20 3d 20 73 77 69 7a 7a 6c 65 28 69    x1 = swizzle(i
5670: 2c 20 6d 61 78 62 29 3b 0a 20 20 20 20 20 20 6c  , maxb);.      l
5680: 65 6e 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f  en = speedtest1_
5690: 6e 75 6d 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a  numbername(x1, z
56a0: 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d  Num, sizeof(zNum
56b0: 29 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  )-1);.    }.    
56c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
56d0: 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 4e  t(g.pStmt, 1, zN
56e0: 75 6d 2c 20 6c 65 6e 2c 20 53 51 4c 49 54 45 5f  um, len, SQLITE_
56f0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65  STATIC);.    spe
5700: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
5710: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
5720: 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a  exec("COMMIT");.
5730: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
5740: 5f 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20  _test();..  n = 
5750: 73 7a 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  sz;.  speedtest1
5760: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 38 30 2c  _begin_test(180,
5770: 20 22 25 64 20 49 4e 53 45 52 54 53 20 77 69 74   "%d INSERTS wit
5780: 68 20 74 68 72 65 65 20 69 6e 64 65 78 65 73 22  h three indexes"
5790: 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73  , n);.  speedtes
57a0: 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29  t1_exec("BEGIN")
57b0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
57c0: 78 65 63 28 0a 20 20 20 20 22 43 52 45 41 54 45  xec(.    "CREATE
57d0: 25 73 20 54 41 42 4c 45 20 74 34 28 5c 6e 22 0a  %s TABLE t4(\n".
57e0: 20 20 20 20 22 20 20 61 20 49 4e 54 45 47 45 52      "  a INTEGER
57f0: 20 25 73 20 25 73 2c 5c 6e 22 0a 20 20 20 20 22   %s %s,\n".    "
5800: 20 20 62 20 49 4e 54 45 47 45 52 20 25 73 2c 5c    b INTEGER %s,\
5810: 6e 22 0a 20 20 20 20 22 20 20 63 20 54 45 58 54  n".    "  c TEXT
5820: 20 25 73 5c 6e 22 0a 20 20 20 20 22 29 20 25 73   %s\n".    ") %s
5830: 22 2c 0a 20 20 20 20 69 73 54 65 6d 70 28 31 29  ",.    isTemp(1)
5840: 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 50 4b 2c 20  , g.zNN, g.zPK, 
5850: 67 2e 7a 4e 4e 2c 20 67 2e 7a 4e 4e 2c 20 67 2e  g.zNN, g.zNN, g.
5860: 7a 57 52 29 3b 0a 20 20 73 70 65 65 64 74 65 73  zWR);.  speedtes
5870: 74 31 5f 65 78 65 63 28 22 43 52 45 41 54 45 20  t1_exec("CREATE 
5880: 49 4e 44 45 58 20 74 34 62 20 4f 4e 20 74 34 28  INDEX t4b ON t4(
5890: 62 29 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  b)");.  speedtes
58a0: 74 31 5f 65 78 65 63 28 22 43 52 45 41 54 45 20  t1_exec("CREATE 
58b0: 49 4e 44 45 58 20 74 34 63 20 4f 4e 20 74 34 28  INDEX t4c ON t4(
58c0: 63 29 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  c)");.  speedtes
58d0: 74 31 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20  t1_exec("INSERT 
58e0: 49 4e 54 4f 20 74 34 20 53 45 4c 45 43 54 20 2a  INTO t4 SELECT *
58f0: 20 46 52 4f 4d 20 74 31 22 29 3b 0a 20 20 73 70   FROM t1");.  sp
5900: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43  eedtest1_exec("C
5910: 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64  OMMIT");.  speed
5920: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
5930: 3b 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20 73  ;..  n = sz;.  s
5940: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
5950: 74 65 73 74 28 31 39 30 2c 20 22 44 45 4c 45 54  test(190, "DELET
5960: 45 20 61 6e 64 20 52 45 46 49 4c 4c 20 6f 6e 65  E and REFILL one
5970: 20 74 61 62 6c 65 22 2c 20 6e 29 3b 0a 20 20 73   table", n);.  s
5980: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
5990: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 3b 22  DELETE FROM t2;"
59a0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
59b0: 65 78 65 63 28 22 49 4e 53 45 52 54 20 49 4e 54  exec("INSERT INT
59c0: 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52  O t2 SELECT * FR
59d0: 4f 4d 20 74 31 3b 22 29 3b 0a 20 20 73 70 65 65  OM t1;");.  spee
59e0: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
59f0: 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74 65 73 74  );...  speedtest
5a00: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32 30 30  1_begin_test(200
5a10: 2c 20 22 56 41 43 55 55 4d 22 29 3b 0a 20 20 73  , "VACUUM");.  s
5a20: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
5a30: 56 41 43 55 55 4d 22 29 3b 0a 20 20 73 70 65 65  VACUUM");.  spee
5a40: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
5a50: 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74 65 73 74  );...  speedtest
5a60: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32 31 30  1_begin_test(210
5a70: 2c 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 41  , "ALTER TABLE A
5a80: 44 44 20 43 4f 4c 55 4d 4e 2c 20 61 6e 64 20 71  DD COLUMN, and q
5a90: 75 65 72 79 22 29 3b 0a 20 20 73 70 65 65 64 74  uery");.  speedt
5aa0: 65 73 74 31 5f 65 78 65 63 28 22 41 4c 54 45 52  est1_exec("ALTER
5ab0: 20 54 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f   TABLE t2 ADD CO
5ac0: 4c 55 4d 4e 20 64 20 44 45 46 41 55 4c 54 20 31  LUMN d DEFAULT 1
5ad0: 32 33 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  23");.  speedtes
5ae0: 74 31 5f 65 78 65 63 28 22 53 45 4c 45 43 54 20  t1_exec("SELECT 
5af0: 73 75 6d 28 64 29 20 46 52 4f 4d 20 74 32 22 29  sum(d) FROM t2")
5b00: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
5b10: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 6e  nd_test();...  n
5b20: 20 3d 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64   = sz/5;.  speed
5b30: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
5b40: 28 32 33 30 2c 20 22 25 64 20 55 50 44 41 54 45  (230, "%d UPDATE
5b50: 53 2c 20 6e 75 6d 65 72 69 63 20 42 45 54 57 45  S, numeric BETWE
5b60: 45 4e 2c 20 69 6e 64 65 78 65 64 22 2c 20 6e 29  EN, indexed", n)
5b70: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
5b80: 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20  xec("BEGIN");.  
5b90: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
5ba0: 72 65 28 0a 20 20 20 20 22 55 50 44 41 54 45 20  re(.    "UPDATE 
5bb0: 74 32 20 53 45 54 20 64 3d 62 2a 32 20 57 48 45  t2 SET d=b*2 WHE
5bc0: 52 45 20 62 20 42 45 54 57 45 45 4e 20 3f 31 20  RE b BETWEEN ?1 
5bd0: 41 4e 44 20 3f 32 3b 20 2d 2d 20 25 64 20 74 69  AND ?2; -- %d ti
5be0: 6d 65 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66  mes", n.  );.  f
5bf0: 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b  or(i=1; i<=n; i+
5c00: 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 70 65  +){.    x1 = spe
5c10: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
5c20: 25 6d 61 78 62 3b 0a 20 20 20 20 78 32 20 3d 20  %maxb;.    x2 = 
5c30: 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f  speedtest1_rando
5c40: 6d 28 29 25 31 30 20 2b 20 73 7a 2f 35 30 30 30  m()%10 + sz/5000
5c50: 20 2b 20 78 31 3b 0a 20 20 20 20 73 71 6c 69 74   + x1;.    sqlit
5c60: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
5c70: 74 6d 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20  tmt, 1, x1);.   
5c80: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
5c90: 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 78 32  t(g.pStmt, 2, x2
5ca0: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
5cb0: 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73  1_run();.  }.  s
5cc0: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
5cd0: 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65  COMMIT");.  spee
5ce0: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
5cf0: 29 3b 0a 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20  );...  n = sz;. 
5d00: 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69   speedtest1_begi
5d10: 6e 5f 74 65 73 74 28 32 34 30 2c 20 22 25 64 20  n_test(240, "%d 
5d20: 55 50 44 41 54 45 53 20 6f 66 20 69 6e 64 69 76  UPDATES of indiv
5d30: 69 64 75 61 6c 20 72 6f 77 73 22 2c 20 6e 29 3b  idual rows", n);
5d40: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
5d50: 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73  ec("BEGIN");.  s
5d60: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
5d70: 65 28 0a 20 20 20 20 22 55 50 44 41 54 45 20 74  e(.    "UPDATE t
5d80: 32 20 53 45 54 20 64 3d 62 2a 33 20 57 48 45 52  2 SET d=b*3 WHER
5d90: 45 20 61 3d 3f 31 3b 20 2d 2d 20 25 64 20 74 69  E a=?1; -- %d ti
5da0: 6d 65 73 22 2c 20 6e 0a 20 20 29 3b 0a 20 20 66  mes", n.  );.  f
5db0: 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b  or(i=1; i<=n; i+
5dc0: 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 70 65  +){.    x1 = spe
5dd0: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
5de0: 25 73 7a 20 2b 20 31 3b 0a 20 20 20 20 73 71 6c  %sz + 1;.    sql
5df0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
5e00: 70 53 74 6d 74 2c 20 31 2c 20 78 31 29 3b 0a 20  pStmt, 1, x1);. 
5e10: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
5e20: 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  n();.  }.  speed
5e30: 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d  test1_exec("COMM
5e40: 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  IT");.  speedtes
5e50: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
5e60: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
5e70: 69 6e 5f 74 65 73 74 28 32 35 30 2c 20 22 4f 6e  in_test(250, "On
5e80: 65 20 62 69 67 20 55 50 44 41 54 45 20 6f 66 20  e big UPDATE of 
5e90: 74 68 65 20 77 68 6f 6c 65 20 25 64 2d 72 6f 77  the whole %d-row
5ea0: 20 74 61 62 6c 65 22 2c 20 73 7a 29 3b 0a 20 20   table", sz);.  
5eb0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
5ec0: 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20 64  "UPDATE t2 SET d
5ed0: 3d 62 2a 34 22 29 3b 0a 20 20 73 70 65 65 64 74  =b*4");.  speedt
5ee0: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
5ef0: 0a 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  ...  speedtest1_
5f00: 62 65 67 69 6e 5f 74 65 73 74 28 32 36 30 2c 20  begin_test(260, 
5f10: 22 51 75 65 72 79 20 61 64 64 65 64 20 63 6f 6c  "Query added col
5f20: 75 6d 6e 20 61 66 74 65 72 20 66 69 6c 6c 69 6e  umn after fillin
5f30: 67 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  g");.  speedtest
5f40: 31 5f 65 78 65 63 28 22 53 45 4c 45 43 54 20 73  1_exec("SELECT s
5f50: 75 6d 28 64 29 20 46 52 4f 4d 20 74 32 22 29 3b  um(d) FROM t2");
5f60: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
5f70: 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 0a 20 20 6e  d_test();....  n
5f80: 20 3d 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65 64   = sz/5;.  speed
5f90: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
5fa0: 28 32 37 30 2c 20 22 25 64 20 44 45 4c 45 54 45  (270, "%d DELETE
5fb0: 73 2c 20 6e 75 6d 65 72 69 63 20 42 45 54 57 45  s, numeric BETWE
5fc0: 45 4e 2c 20 69 6e 64 65 78 65 64 22 2c 20 6e 29  EN, indexed", n)
5fd0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
5fe0: 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20  xec("BEGIN");.  
5ff0: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
6000: 72 65 28 0a 20 20 20 20 22 44 45 4c 45 54 45 20  re(.    "DELETE 
6010: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 20  FROM t2 WHERE b 
6020: 42 45 54 57 45 45 4e 20 3f 31 20 41 4e 44 20 3f  BETWEEN ?1 AND ?
6030: 32 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c  2; -- %d times",
6040: 20 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d   n.  );.  for(i=
6050: 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20  1; i<=n; i++){. 
6060: 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65 73     x1 = speedtes
6070: 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6d 61 78 62  t1_random()%maxb
6080: 20 2b 20 31 3b 0a 20 20 20 20 78 32 20 3d 20 73   + 1;.    x2 = s
6090: 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d  peedtest1_random
60a0: 28 29 25 31 30 20 2b 20 73 7a 2f 35 30 30 30 20  ()%10 + sz/5000 
60b0: 2b 20 78 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  + x1;.    sqlite
60c0: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
60d0: 6d 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20 20  mt, 1, x1);.    
60e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
60f0: 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 78 32 29  (g.pStmt, 2, x2)
6100: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
6110: 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70  _run();.  }.  sp
6120: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43  eedtest1_exec("C
6130: 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64  OMMIT");.  speed
6140: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
6150: 3b 0a 0a 0a 20 20 6e 20 3d 20 73 7a 3b 0a 20 20  ;...  n = sz;.  
6160: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
6170: 5f 74 65 73 74 28 32 38 30 2c 20 22 25 64 20 44  _test(280, "%d D
6180: 45 4c 45 54 45 73 20 6f 66 20 69 6e 64 69 76 69  ELETEs of indivi
6190: 64 75 61 6c 20 72 6f 77 73 22 2c 20 6e 29 3b 0a  dual rows", n);.
61a0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
61b0: 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70  c("BEGIN");.  sp
61c0: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
61d0: 28 0a 20 20 20 20 22 44 45 4c 45 54 45 20 46 52  (.    "DELETE FR
61e0: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 3f 31  OM t3 WHERE a=?1
61f0: 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73 22 2c 20  ; -- %d times", 
6200: 6e 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d 31  n.  );.  for(i=1
6210: 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<=n; i++){.  
6220: 20 20 78 31 20 3d 20 73 70 65 65 64 74 65 73 74    x1 = speedtest
6230: 31 5f 72 61 6e 64 6f 6d 28 29 25 73 7a 20 2b 20  1_random()%sz + 
6240: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  1;.    sqlite3_b
6250: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
6260: 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73 70 65   1, x1);.    spe
6270: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
6280: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
6290: 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a  exec("COMMIT");.
62a0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
62b0: 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20 73 70 65  _test();...  spe
62c0: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
62d0: 73 74 28 32 39 30 2c 20 22 52 65 66 69 6c 6c 20  st(290, "Refill 
62e0: 74 77 6f 20 25 64 2d 72 6f 77 20 74 61 62 6c 65  two %d-row table
62f0: 73 20 75 73 69 6e 67 20 52 45 50 4c 41 43 45 22  s using REPLACE"
6300: 2c 20 73 7a 29 3b 0a 20 20 73 70 65 65 64 74 65  , sz);.  speedte
6310: 73 74 31 5f 65 78 65 63 28 22 52 45 50 4c 41 43  st1_exec("REPLAC
6320: 45 20 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 29  E INTO t2(a,b,c)
6330: 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20 46 52   SELECT a,b,c FR
6340: 4f 4d 20 74 31 22 29 3b 0a 20 20 73 70 65 65 64  OM t1");.  speed
6350: 74 65 73 74 31 5f 65 78 65 63 28 22 52 45 50 4c  test1_exec("REPL
6360: 41 43 45 20 49 4e 54 4f 20 74 33 28 61 2c 62 2c  ACE INTO t3(a,b,
6370: 63 29 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20  c) SELECT a,b,c 
6380: 46 52 4f 4d 20 74 31 22 29 3b 0a 20 20 73 70 65  FROM t1");.  spe
6390: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
63a0: 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73 74  ();..  speedtest
63b0: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 33 30 30  1_begin_test(300
63c0: 2c 20 22 52 65 66 69 6c 6c 20 61 20 25 64 2d 72  , "Refill a %d-r
63d0: 6f 77 20 74 61 62 6c 65 20 75 73 69 6e 67 20 28  ow table using (
63e0: 62 26 31 29 3d 3d 28 61 26 31 29 22 2c 20 73 7a  b&1)==(a&1)", sz
63f0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
6400: 65 78 65 63 28 22 44 45 4c 45 54 45 20 46 52 4f  exec("DELETE FRO
6410: 4d 20 74 32 3b 22 29 3b 0a 20 20 73 70 65 65 64  M t2;");.  speed
6420: 74 65 73 74 31 5f 65 78 65 63 28 22 49 4e 53 45  test1_exec("INSE
6430: 52 54 20 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63  RT INTO t2(a,b,c
6440: 29 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  )\n".           
6450: 20 20 20 20 20 20 20 22 20 53 45 4c 45 43 54 20         " SELECT 
6460: 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 20 57  a,b,c FROM t1  W
6470: 48 45 52 45 20 28 62 26 31 29 3d 3d 28 61 26 31  HERE (b&1)==(a&1
6480: 29 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  );");.  speedtes
6490: 74 31 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20  t1_exec("INSERT 
64a0: 49 4e 54 4f 20 74 32 28 61 2c 62 2c 63 29 5c 6e  INTO t2(a,b,c)\n
64b0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
64c0: 20 20 20 20 22 20 53 45 4c 45 43 54 20 61 2c 62      " SELECT a,b
64d0: 2c 63 20 46 52 4f 4d 20 74 31 20 20 57 48 45 52  ,c FROM t1  WHER
64e0: 45 20 28 62 26 31 29 3c 3e 28 61 26 31 29 3b 22  E (b&1)<>(a&1);"
64f0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
6500: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 0a 20 20  end_test();...  
6510: 6e 20 3d 20 73 7a 2f 35 3b 0a 20 20 73 70 65 65  n = sz/5;.  spee
6520: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
6530: 74 28 33 31 30 2c 20 22 25 64 20 66 6f 75 72 2d  t(310, "%d four-
6540: 77 61 79 73 20 6a 6f 69 6e 73 22 2c 20 6e 29 3b  ways joins", n);
6550: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
6560: 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73  ec("BEGIN");.  s
6570: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
6580: 65 28 0a 20 20 20 20 22 53 45 4c 45 43 54 20 74  e(.    "SELECT t
6590: 31 2e 63 20 46 52 4f 4d 20 74 31 2c 20 74 32 2c  1.c FROM t1, t2,
65a0: 20 74 33 2c 20 74 34 5c 6e 22 0a 20 20 20 20 22   t3, t4\n".    "
65b0: 20 57 48 45 52 45 20 74 34 2e 61 20 42 45 54 57   WHERE t4.a BETW
65c0: 45 45 4e 20 3f 31 20 41 4e 44 20 3f 32 5c 6e 22  EEN ?1 AND ?2\n"
65d0: 0a 20 20 20 20 22 20 20 20 41 4e 44 20 74 33 2e  .    "   AND t3.
65e0: 61 3d 74 34 2e 62 5c 6e 22 0a 20 20 20 20 22 20  a=t4.b\n".    " 
65f0: 20 20 41 4e 44 20 74 32 2e 61 3d 74 33 2e 62 5c    AND t2.a=t3.b\
6600: 6e 22 0a 20 20 20 20 22 20 20 20 41 4e 44 20 74  n".    "   AND t
6610: 31 2e 63 3d 74 32 2e 63 22 0a 20 20 29 3b 0a 20  1.c=t2.c".  );. 
6620: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20   for(i=1; i<=n; 
6630: 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73  i++){.    x1 = s
6640: 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d  peedtest1_random
6650: 28 29 25 73 7a 20 2b 20 31 3b 0a 20 20 20 20 78  ()%sz + 1;.    x
6660: 32 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72  2 = speedtest1_r
6670: 61 6e 64 6f 6d 28 29 25 31 30 20 2b 20 78 31 20  andom()%10 + x1 
6680: 2b 20 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  + 4;.    sqlite3
6690: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
66a0: 74 2c 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73  t, 1, x1);.    s
66b0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
66c0: 67 2e 70 53 74 6d 74 2c 20 32 2c 20 78 32 29 3b  g.pStmt, 2, x2);
66d0: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
66e0: 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65  run();.  }.  spe
66f0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f  edtest1_exec("CO
6700: 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74  MMIT");.  speedt
6710: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
6720: 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ..  speedtest1_b
6730: 65 67 69 6e 5f 74 65 73 74 28 33 32 30 2c 20 22  egin_test(320, "
6740: 73 75 62 71 75 65 72 79 20 69 6e 20 72 65 73 75  subquery in resu
6750: 6c 74 20 73 65 74 22 2c 20 6e 29 3b 0a 20 20 73  lt set", n);.  s
6760: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
6770: 65 28 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73  e(.    "SELECT s
6780: 75 6d 28 61 29 2c 20 6d 61 78 28 63 29 2c 5c 6e  um(a), max(c),\n
6790: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 61 76  ".    "       av
67a0: 67 28 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  g((SELECT a FROM
67b0: 20 74 32 20 57 48 45 52 45 20 35 2b 74 32 2e 62   t2 WHERE 5+t2.b
67c0: 3d 74 31 2e 62 29 20 41 4e 44 20 72 6f 77 69 64  =t1.b) AND rowid
67d0: 3c 3f 31 29 2c 20 6d 61 78 28 63 29 5c 6e 22 0a  <?1), max(c)\n".
67e0: 20 20 20 20 22 20 46 52 4f 4d 20 74 31 20 57 48      " FROM t1 WH
67f0: 45 52 45 20 72 6f 77 69 64 3c 3f 31 3b 22 0a 20  ERE rowid<?1;". 
6800: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69   );.  sqlite3_bi
6810: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
6820: 31 2c 20 65 73 74 5f 73 71 75 61 72 65 5f 72 6f  1, est_square_ro
6830: 6f 74 28 67 2e 73 7a 54 65 73 74 29 2a 35 30 29  ot(g.szTest)*50)
6840: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 72  ;.  speedtest1_r
6850: 75 6e 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73  un();.  speedtes
6860: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
6870: 20 20 73 7a 20 3d 20 6e 20 3d 20 67 2e 73 7a 54    sz = n = g.szT
6880: 65 73 74 2a 37 30 30 3b 0a 20 20 7a 4e 75 6d 5b  est*700;.  zNum[
6890: 30 5d 20 3d 20 30 3b 0a 20 20 6d 61 78 62 20 3d  0] = 0;.  maxb =
68a0: 20 72 6f 75 6e 64 75 70 5f 61 6c 6c 6f 6e 65 73   roundup_allones
68b0: 28 73 7a 2f 33 29 3b 0a 20 20 73 70 65 65 64 74  (sz/3);.  speedt
68c0: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
68d0: 34 30 30 2c 20 22 25 64 20 52 45 50 4c 41 43 45  400, "%d REPLACE
68e0: 20 6f 70 73 20 6f 6e 20 61 6e 20 49 50 4b 22 2c   ops on an IPK",
68f0: 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74   n);.  speedtest
6900: 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b  1_exec("BEGIN");
6910: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
6920: 65 63 28 22 43 52 45 41 54 45 25 73 20 54 41 42  ec("CREATE%s TAB
6930: 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45 52 20  LE t5(a INTEGER 
6940: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 25  PRIMARY KEY, b %
6950: 73 29 3b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s);",.          
6960: 20 20 20 20 20 20 20 20 69 73 54 65 6d 70 28 39          isTemp(9
6970: 29 2c 20 67 2e 7a 4e 4e 29 3b 0a 20 20 73 70 65  ), g.zNN);.  spe
6980: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
6990: 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 74 35  "REPLACE INTO t5
69a0: 20 56 41 4c 55 45 53 28 3f 31 2c 3f 32 29 3b 20   VALUES(?1,?2); 
69b0: 2d 2d 20 20 25 64 20 74 69 6d 65 73 22 2c 6e 29  --  %d times",n)
69c0: 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d  ;.  for(i=1; i<=
69d0: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20  n; i++){.    x1 
69e0: 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62  = swizzle(i,maxb
69f0: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
6a00: 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 69 2c 20  1_numbername(i, 
6a10: 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75  zNum, sizeof(zNu
6a20: 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  m));.    sqlite3
6a30: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
6a40: 74 2c 20 31 2c 20 28 73 71 6c 69 74 65 33 5f 69  t, 1, (sqlite3_i
6a50: 6e 74 36 34 29 78 31 29 3b 0a 20 20 20 20 73 71  nt64)x1);.    sq
6a60: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
6a70: 67 2e 70 53 74 6d 74 2c 20 32 2c 20 7a 4e 75 6d  g.pStmt, 2, zNum
6a80: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41  , -1, SQLITE_STA
6a90: 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65 64 74  TIC);.    speedt
6aa0: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a  est1_run();.  }.
6ab0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
6ac0: 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73  c("COMMIT");.  s
6ad0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
6ae0: 73 74 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73  st();.  speedtes
6af0: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 34 31  t1_begin_test(41
6b00: 30 2c 20 22 25 64 20 53 45 4c 45 43 54 53 20 6f  0, "%d SELECTS o
6b10: 6e 20 61 6e 20 49 50 4b 22 2c 20 6e 29 3b 0a 20  n an IPK", n);. 
6b20: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
6b30: 61 72 65 28 22 53 45 4c 45 43 54 20 62 20 46 52  are("SELECT b FR
6b40: 4f 4d 20 74 35 20 57 48 45 52 45 20 61 3d 3f 31  OM t5 WHERE a=?1
6b50: 3b 20 2d 2d 20 20 25 64 20 74 69 6d 65 73 22 2c  ; --  %d times",
6b60: 6e 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69  n);.  for(i=1; i
6b70: 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78  <=n; i++){.    x
6b80: 31 20 3d 20 73 77 69 7a 7a 6c 65 28 69 2c 6d 61  1 = swizzle(i,ma
6b90: 78 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  xb);.    sqlite3
6ba0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
6bb0: 74 2c 20 31 2c 20 28 73 71 6c 69 74 65 33 5f 69  t, 1, (sqlite3_i
6bc0: 6e 74 36 34 29 78 31 29 3b 0a 20 20 20 20 73 70  nt64)x1);.    sp
6bd0: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
6be0: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
6bf0: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20  _end_test();..  
6c00: 73 7a 20 3d 20 6e 20 3d 20 67 2e 73 7a 54 65 73  sz = n = g.szTes
6c10: 74 2a 37 30 30 3b 0a 20 20 7a 4e 75 6d 5b 30 5d  t*700;.  zNum[0]
6c20: 20 3d 20 30 3b 0a 20 20 6d 61 78 62 20 3d 20 72   = 0;.  maxb = r
6c30: 6f 75 6e 64 75 70 5f 61 6c 6c 6f 6e 65 73 28 73  oundup_allones(s
6c40: 7a 2f 33 29 3b 0a 20 20 73 70 65 65 64 74 65 73  z/3);.  speedtes
6c50: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 35 30  t1_begin_test(50
6c60: 30 2c 20 22 25 64 20 52 45 50 4c 41 43 45 20 6f  0, "%d REPLACE o
6c70: 6e 20 54 45 58 54 20 50 4b 22 2c 20 6e 29 3b 0a  n TEXT PK", n);.
6c80: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
6c90: 63 28 22 42 45 47 49 4e 22 29 3b 0a 20 20 73 70  c("BEGIN");.  sp
6ca0: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43  eedtest1_exec("C
6cb0: 52 45 41 54 45 25 73 20 54 41 42 4c 45 20 74 36  REATE%s TABLE t6
6cc0: 28 61 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  (a TEXT PRIMARY 
6cd0: 4b 45 59 2c 20 62 20 25 73 29 25 73 3b 22 2c 0a  KEY, b %s)%s;",.
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cf0: 20 20 69 73 54 65 6d 70 28 39 29 2c 20 67 2e 7a    isTemp(9), g.z
6d00: 4e 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  NN,.            
6d10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
6d20: 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28  bversion_number(
6d30: 29 3e 3d 33 30 30 38 30 30 32 20 3f 20 22 57 49  )>=3008002 ? "WI
6d40: 54 48 4f 55 54 20 52 4f 57 49 44 22 20 3a 20 22  THOUT ROWID" : "
6d50: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
6d60: 5f 70 72 65 70 61 72 65 28 22 52 45 50 4c 41 43  _prepare("REPLAC
6d70: 45 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53  E INTO t6 VALUES
6d80: 28 3f 31 2c 3f 32 29 3b 20 2d 2d 20 20 25 64 20  (?1,?2); --  %d 
6d90: 74 69 6d 65 73 22 2c 6e 29 3b 0a 20 20 66 6f 72  times",n);.  for
6da0: 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29  (i=1; i<=n; i++)
6db0: 7b 0a 20 20 20 20 78 31 20 3d 20 73 77 69 7a 7a  {.    x1 = swizz
6dc0: 6c 65 28 69 2c 6d 61 78 62 29 3b 0a 20 20 20 20  le(i,maxb);.    
6dd0: 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65  speedtest1_numbe
6de0: 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c 20  rname(x1, zNum, 
6df0: 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20  sizeof(zNum));. 
6e00: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
6e10: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20  int(g.pStmt, 2, 
6e20: 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  i);.    sqlite3_
6e30: 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d  bind_text(g.pStm
6e40: 74 2c 20 31 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20  t, 1, zNum, -1, 
6e50: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
6e60: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
6e70: 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  un();.  }.  spee
6e80: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d  dtest1_exec("COM
6e90: 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65  MIT");.  speedte
6ea0: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
6eb0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
6ec0: 69 6e 5f 74 65 73 74 28 35 31 30 2c 20 22 25 64  in_test(510, "%d
6ed0: 20 53 45 4c 45 43 54 53 20 6f 6e 20 61 20 54 45   SELECTS on a TE
6ee0: 58 54 20 50 4b 22 2c 20 6e 29 3b 0a 20 20 73 70  XT PK", n);.  sp
6ef0: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
6f00: 28 22 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20  ("SELECT b FROM 
6f10: 74 36 20 57 48 45 52 45 20 61 3d 3f 31 3b 20 2d  t6 WHERE a=?1; -
6f20: 2d 20 20 25 64 20 74 69 6d 65 73 22 2c 6e 29 3b  -  %d times",n);
6f30: 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e  .  for(i=1; i<=n
6f40: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d  ; i++){.    x1 =
6f50: 20 73 77 69 7a 7a 6c 65 28 69 2c 6d 61 78 62 29   swizzle(i,maxb)
6f60: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
6f70: 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 78 31 2c 20  _numbername(x1, 
6f80: 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75  zNum, sizeof(zNu
6f90: 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  m));.    sqlite3
6fa0: 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74  _bind_text(g.pSt
6fb0: 6d 74 2c 20 31 2c 20 7a 4e 75 6d 2c 20 2d 31 2c  mt, 1, zNum, -1,
6fc0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
6fd0: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
6fe0: 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65  run();.  }.  spe
6ff0: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
7000: 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ();.  speedtest1
7010: 5f 62 65 67 69 6e 5f 74 65 73 74 28 35 32 30 2c  _begin_test(520,
7020: 20 22 25 64 20 53 45 4c 45 43 54 20 44 49 53 54   "%d SELECT DIST
7030: 49 4e 43 54 22 2c 20 6e 29 3b 0a 20 20 73 70 65  INCT", n);.  spe
7040: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 53 45  edtest1_exec("SE
7050: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 62 20  LECT DISTINCT b 
7060: 46 52 4f 4d 20 74 35 3b 22 29 3b 0a 20 20 73 70  FROM t5;");.  sp
7070: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 53  eedtest1_exec("S
7080: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 62  ELECT DISTINCT b
7090: 20 46 52 4f 4d 20 74 36 3b 22 29 3b 0a 20 20 73   FROM t6;");.  s
70a0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
70b0: 73 74 28 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74  st();...  speedt
70c0: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
70d0: 39 38 30 2c 20 22 50 52 41 47 4d 41 20 69 6e 74  980, "PRAGMA int
70e0: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a  egrity_check");.
70f0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
7100: 63 28 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72  c("PRAGMA integr
7110: 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a 20 20 73  ity_check");.  s
7120: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
7130: 73 74 28 29 3b 0a 0a 0a 20 20 73 70 65 65 64 74  st();...  speedt
7140: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
7150: 39 39 30 2c 20 22 41 4e 41 4c 59 5a 45 22 29 3b  990, "ANALYZE");
7160: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
7170: 65 63 28 22 41 4e 41 4c 59 5a 45 22 29 3b 0a 20  ec("ANALYZE");. 
7180: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
7190: 74 65 73 74 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  test();.}../*.**
71a0: 20 41 20 74 65 73 74 73 65 74 20 66 6f 72 20 63   A testset for c
71b0: 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
71c0: 65 73 73 69 6f 6e 73 2e 20 20 54 68 69 73 20 65  essions.  This e
71d0: 78 65 72 63 69 73 65 73 20 63 6f 64 65 0a 2a 2a  xercises code.**
71e0: 20 66 6f 72 20 76 69 65 77 73 2c 20 73 75 62 71   for views, subq
71f0: 75 65 72 69 65 73 2c 20 63 6f 2d 72 6f 75 74 69  ueries, co-routi
7200: 6e 65 73 2c 20 65 74 63 2e 0a 2a 2f 0a 76 6f 69  nes, etc..*/.voi
7210: 64 20 74 65 73 74 73 65 74 5f 63 74 65 28 76 6f  d testset_cte(vo
7220: 69 64 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f  id){.  static co
7230: 6e 73 74 20 63 68 61 72 20 2a 61 7a 50 75 7a 7a  nst char *azPuzz
7240: 6c 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 2f 2a 20  le[] = {.    /* 
7250: 45 61 73 79 20 2a 2f 0a 20 20 20 20 22 35 33 34  Easy */.    "534
7260: 2e 2e 2e 39 2e 2e 22 0a 20 20 20 20 22 36 37 2e  ...9..".    "67.
7270: 31 39 35 2e 2e 2e 22 0a 20 20 20 20 22 2e 39 38  195...".    ".98
7280: 2e 2e 2e 2e 36 2e 22 0a 20 20 20 20 22 38 2e 2e  ....6.".    "8..
7290: 2e 36 2e 2e 2e 33 22 0a 20 20 20 20 22 34 2e 2e  .6...3".    "4..
72a0: 38 2e 33 2e 2e 31 22 0a 20 20 20 20 22 2e 2e 2e  8.3..1".    "...
72b0: 2e 32 2e 2e 2e 36 22 0a 20 20 20 20 22 2e 36 2e  .2...6".    ".6.
72c0: 2e 2e 2e 32 38 2e 22 0a 20 20 20 20 22 2e 2e 2e  ...28.".    "...
72d0: 34 31 39 2e 2e 35 22 0a 20 20 20 20 22 2e 2e 2e  419..5".    "...
72e0: 32 38 2e 2e 37 39 22 2c 0a 0a 20 20 20 20 2f 2a  28..79",..    /*
72f0: 20 4d 65 64 69 75 6d 20 2a 2f 0a 20 20 20 20 22   Medium */.    "
7300: 35 33 2e 2e 2e 2e 39 2e 2e 22 0a 20 20 20 20 22  53....9..".    "
7310: 36 2e 2e 31 39 35 2e 2e 2e 22 0a 20 20 20 20 22  6..195...".    "
7320: 2e 39 38 2e 2e 2e 2e 36 2e 22 0a 20 20 20 20 22  .98....6.".    "
7330: 38 2e 2e 2e 36 2e 2e 2e 33 22 0a 20 20 20 20 22  8...6...3".    "
7340: 34 2e 2e 38 2e 33 2e 2e 31 22 0a 20 20 20 20 22  4..8.3..1".    "
7350: 2e 2e 2e 2e 32 2e 2e 2e 36 22 0a 20 20 20 20 22  ....2...6".    "
7360: 2e 36 2e 2e 2e 2e 32 38 2e 22 0a 20 20 20 20 22  .6....28.".    "
7370: 2e 2e 2e 34 31 39 2e 2e 35 22 0a 20 20 20 20 22  ...419..5".    "
7380: 2e 2e 2e 2e 38 2e 2e 37 39 22 2c 0a 0a 20 20 20  ....8..79",..   
7390: 20 2f 2a 20 48 61 72 64 20 2a 2f 0a 20 20 20 20   /* Hard */.    
73a0: 22 35 33 2e 2e 2e 2e 2e 2e 2e 22 0a 20 20 20 20  "53.......".    
73b0: 22 36 2e 2e 31 39 35 2e 2e 2e 22 0a 20 20 20 20  "6..195...".    
73c0: 22 2e 39 38 2e 2e 2e 2e 36 2e 22 0a 20 20 20 20  ".98....6.".    
73d0: 22 38 2e 2e 2e 36 2e 2e 2e 33 22 0a 20 20 20 20  "8...6...3".    
73e0: 22 34 2e 2e 38 2e 33 2e 2e 31 22 0a 20 20 20 20  "4..8.3..1".    
73f0: 22 2e 2e 2e 2e 32 2e 2e 2e 36 22 0a 20 20 20 20  "....2...6".    
7400: 22 2e 36 2e 2e 2e 2e 32 38 2e 22 0a 20 20 20 20  ".6....28.".    
7410: 22 2e 2e 2e 34 31 39 2e 2e 35 22 0a 20 20 20 20  "...419..5".    
7420: 22 2e 2e 2e 2e 38 2e 2e 37 39 22 2c 0a 20 20 7d  "....8..79",.  }
7430: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
7440: 7a 50 75 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72  zPuz;.  double r
7450: 53 70 61 63 69 6e 67 3b 0a 20 20 69 6e 74 20 6e  Spacing;.  int n
7460: 45 6c 65 6d 3b 0a 0a 20 20 69 66 28 20 67 2e 73  Elem;..  if( g.s
7470: 7a 54 65 73 74 3c 32 35 20 29 7b 0a 20 20 20 20  zTest<25 ){.    
7480: 7a 50 75 7a 20 3d 20 61 7a 50 75 7a 7a 6c 65 5b  zPuz = azPuzzle[
7490: 30 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0];.  }else if( 
74a0: 67 2e 73 7a 54 65 73 74 3c 37 30 20 29 7b 0a 20  g.szTest<70 ){. 
74b0: 20 20 20 7a 50 75 7a 20 3d 20 61 7a 50 75 7a 7a     zPuz = azPuzz
74c0: 6c 65 5b 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  le[1];.  }else{.
74d0: 20 20 20 20 7a 50 75 7a 20 3d 20 61 7a 50 75 7a      zPuz = azPuz
74e0: 7a 6c 65 5b 32 5d 3b 0a 20 20 7d 0a 20 20 73 70  zle[2];.  }.  sp
74f0: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
7500: 65 73 74 28 31 30 30 2c 20 22 53 75 64 6f 6b 75  est(100, "Sudoku
7510: 20 77 69 74 68 20 72 65 63 75 72 73 69 76 65 20   with recursive 
7520: 27 64 69 67 69 74 73 27 22 29 3b 0a 20 20 73 70  'digits'");.  sp
7530: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
7540: 28 0a 20 20 20 20 22 57 49 54 48 20 52 45 43 55  (.    "WITH RECU
7550: 52 53 49 56 45 5c 6e 22 0a 20 20 20 20 22 20 20  RSIVE\n".    "  
7560: 69 6e 70 75 74 28 73 75 64 29 20 41 53 20 28 56  input(sud) AS (V
7570: 41 4c 55 45 53 28 3f 31 29 29 2c 5c 6e 22 0a 20  ALUES(?1)),\n". 
7580: 20 20 20 22 20 20 64 69 67 69 74 73 28 7a 2c 6c     "  digits(z,l
7590: 70 29 20 41 53 20 28 5c 6e 22 0a 20 20 20 20 22  p) AS (\n".    "
75a0: 20 20 20 20 56 41 4c 55 45 53 28 27 31 27 2c 20      VALUES('1', 
75b0: 31 29 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 55  1)\n".    "    U
75c0: 4e 49 4f 4e 20 41 4c 4c 5c 6e 22 0a 20 20 20 20  NION ALL\n".    
75d0: 22 20 20 20 20 53 45 4c 45 43 54 20 43 41 53 54  "    SELECT CAST
75e0: 28 6c 70 2b 31 20 41 53 20 54 45 58 54 29 2c 20  (lp+1 AS TEXT), 
75f0: 6c 70 2b 31 20 46 52 4f 4d 20 64 69 67 69 74 73  lp+1 FROM digits
7600: 20 57 48 45 52 45 20 6c 70 3c 39 5c 6e 22 0a 20   WHERE lp<9\n". 
7610: 20 20 20 22 20 20 29 2c 5c 6e 22 0a 20 20 20 20     "  ),\n".    
7620: 22 20 20 78 28 73 2c 20 69 6e 64 29 20 41 53 20  "  x(s, ind) AS 
7630: 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45  (\n".    "    SE
7640: 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28  LECT sud, instr(
7650: 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69  sud, '.') FROM i
7660: 6e 70 75 74 5c 6e 22 0a 20 20 20 20 22 20 20 20  nput\n".    "   
7670: 20 55 4e 49 4f 4e 20 41 4c 4c 5c 6e 22 0a 20 20   UNION ALL\n".  
7680: 20 20 22 20 20 20 20 53 45 4c 45 43 54 5c 6e 22    "    SELECT\n"
7690: 0a 20 20 20 20 22 20 20 20 20 20 20 73 75 62 73  .    "      subs
76a0: 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20  tr(s, 1, ind-1) 
76b0: 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73  || z || substr(s
76c0: 2c 20 69 6e 64 2b 31 29 2c 5c 6e 22 0a 20 20 20  , ind+1),\n".   
76d0: 20 22 20 20 20 20 20 20 69 6e 73 74 72 28 20 73   "      instr( s
76e0: 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
76f0: 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
7700: 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27  r(s, ind+1), '.'
7710: 20 29 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20   )\n".    "     
7720: 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73 20 41  FROM x, digits A
7730: 53 20 7a 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  S z\n".    "    
7740: 57 48 45 52 45 20 69 6e 64 3e 30 5c 6e 22 0a 20  WHERE ind>0\n". 
7750: 20 20 20 22 20 20 20 20 20 20 41 4e 44 20 4e 4f     "      AND NO
7760: 54 20 45 58 49 53 54 53 20 28 5c 6e 22 0a 20 20  T EXISTS (\n".  
7770: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 53    "            S
7780: 45 4c 45 43 54 20 31 5c 6e 22 0a 20 20 20 20 22  ELECT 1\n".    "
7790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52                FR
77a0: 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c 70 5c  OM digits AS lp\
77b0: 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20  n".    "        
77c0: 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d       WHERE z.z =
77d0: 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
77e0: 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31  -1)/9)*9 + lp, 1
77f0: 29 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20  )\n".    "      
7800: 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a            OR z.z
7810: 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 69   = substr(s, ((i
7820: 6e 64 2d 31 29 25 25 39 29 20 2b 20 28 6c 70 2d  nd-1)%%9) + (lp-
7830: 31 29 2a 39 20 2b 20 31 2c 20 31 29 5c 6e 22 0a  1)*9 + 1, 1)\n".
7840: 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20      "           
7850: 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75       OR z.z = su
7860: 62 73 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31  bstr(s, (((ind-1
7870: 29 2f 33 29 20 25 25 20 33 29 20 2a 20 33 5c 6e  )/3) %% 3) * 3\n
7880: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20  ".    "         
7890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b                 +
78a0: 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20   ((ind-1)/27) * 
78b0: 32 37 20 2b 20 6c 70 5c 6e 22 0a 20 20 20 20 22  27 + lp\n".    "
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 20 20 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31          + ((lp-1
78e0: 29 20 2f 20 33 29 20 2a 20 36 2c 20 31 29 5c 6e  ) / 3) * 6, 1)\n
78f0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20  ".    "         
7900: 29 5c 6e 22 0a 20 20 20 20 22 20 20 29 5c 6e 22  )\n".    "  )\n"
7910: 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73 20 46  .    "SELECT s F
7920: 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d  ROM x WHERE ind=
7930: 30 3b 22 0a 20 20 29 3b 0a 20 20 73 71 6c 69 74  0;".  );.  sqlit
7940: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70  e3_bind_text(g.p
7950: 53 74 6d 74 2c 20 31 2c 20 7a 50 75 7a 2c 20 2d  Stmt, 1, zPuz, -
7960: 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  1, SQLITE_STATIC
7970: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
7980: 72 75 6e 28 29 3b 0a 20 20 73 70 65 65 64 74 65  run();.  speedte
7990: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
79a0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65  .  speedtest1_be
79b0: 67 69 6e 5f 74 65 73 74 28 32 30 30 2c 20 22 53  gin_test(200, "S
79c0: 75 64 6f 6b 75 20 77 69 74 68 20 56 41 4c 55 45  udoku with VALUE
79d0: 53 20 27 64 69 67 69 74 73 27 22 29 3b 0a 20 20  S 'digits'");.  
79e0: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
79f0: 72 65 28 0a 20 20 20 20 22 57 49 54 48 20 52 45  re(.    "WITH RE
7a00: 43 55 52 53 49 56 45 5c 6e 22 0a 20 20 20 20 22  CURSIVE\n".    "
7a10: 20 20 69 6e 70 75 74 28 73 75 64 29 20 41 53 20    input(sud) AS 
7a20: 28 56 41 4c 55 45 53 28 3f 31 29 29 2c 5c 6e 22  (VALUES(?1)),\n"
7a30: 0a 20 20 20 20 22 20 20 64 69 67 69 74 73 28 7a  .    "  digits(z
7a40: 2c 6c 70 29 20 41 53 20 28 56 41 4c 55 45 53 28  ,lp) AS (VALUES(
7a50: 27 31 27 2c 31 29 2c 28 27 32 27 2c 32 29 2c 28  '1',1),('2',2),(
7a60: 27 33 27 2c 33 29 2c 28 27 34 27 2c 34 29 2c 28  '3',3),('4',4),(
7a70: 27 35 27 2c 35 29 2c 5c 6e 22 0a 20 20 20 20 22  '5',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 20 20 20 20 28 27 36 27 2c 36 29           ('6',6)
7aa0: 2c 28 27 37 27 2c 37 29 2c 28 27 38 27 2c 38 29  ,('7',7),('8',8)
7ab0: 2c 28 27 39 27 2c 39 29 29 2c 5c 6e 22 0a 20 20  ,('9',9)),\n".  
7ac0: 20 20 22 20 20 78 28 73 2c 20 69 6e 64 29 20 41    "  x(s, ind) A
7ad0: 53 20 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  S (\n".    "    
7ae0: 53 45 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74  SELECT sud, inst
7af0: 72 28 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d  r(sud, '.') FROM
7b00: 20 69 6e 70 75 74 5c 6e 22 0a 20 20 20 20 22 20   input\n".    " 
7b10: 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 5c 6e 22 0a     UNION ALL\n".
7b20: 20 20 20 20 22 20 20 20 20 53 45 4c 45 43 54 5c      "    SELECT\
7b30: 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 73 75  n".    "      su
7b40: 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31  bstr(s, 1, ind-1
7b50: 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72  ) || z || substr
7b60: 28 73 2c 20 69 6e 64 2b 31 29 2c 5c 6e 22 0a 20  (s, ind+1),\n". 
7b70: 20 20 20 22 20 20 20 20 20 20 69 6e 73 74 72 28     "      instr(
7b80: 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e   substr(s, 1, in
7b90: 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62  d-1) || z || sub
7ba0: 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27  str(s, ind+1), '
7bb0: 2e 27 20 29 5c 6e 22 0a 20 20 20 20 22 20 20 20  .' )\n".    "   
7bc0: 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73    FROM x, digits
7bd0: 20 41 53 20 7a 5c 6e 22 0a 20 20 20 20 22 20 20   AS z\n".    "  
7be0: 20 20 57 48 45 52 45 20 69 6e 64 3e 30 5c 6e 22    WHERE ind>0\n"
7bf0: 0a 20 20 20 20 22 20 20 20 20 20 20 41 4e 44 20  .    "      AND 
7c00: 4e 4f 54 20 45 58 49 53 54 53 20 28 5c 6e 22 0a  NOT EXISTS (\n".
7c10: 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20 20      "           
7c20: 20 53 45 4c 45 43 54 20 31 5c 6e 22 0a 20 20 20   SELECT 1\n".   
7c30: 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
7c40: 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c  FROM digits AS l
7c50: 70 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20  p\n".    "      
7c60: 20 20 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a         WHERE z.z
7c70: 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 69   = substr(s, ((i
7c80: 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c  nd-1)/9)*9 + lp,
7c90: 20 31 29 5c 6e 22 0a 20 20 20 20 22 20 20 20 20   1)\n".    "    
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a              OR z
7cb0: 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28  .z = substr(s, (
7cc0: 28 69 6e 64 2d 31 29 25 25 39 29 20 2b 20 28 6c  (ind-1)%%9) + (l
7cd0: 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 5c 6e  p-1)*9 + 1, 1)\n
7ce0: 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20  ".    "         
7cf0: 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20         OR z.z = 
7d00: 73 75 62 73 74 72 28 73 2c 20 28 28 28 69 6e 64  substr(s, (((ind
7d10: 2d 31 29 2f 33 29 20 25 25 20 33 29 20 2a 20 33  -1)/3) %% 3) * 3
7d20: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20   + ((ind-1)/27) 
7d50: 2a 20 32 37 20 2b 20 6c 70 5c 6e 22 0a 20 20 20  * 27 + lp\n".   
7d60: 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
7d70: 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c 70            + ((lp
7d80: 2d 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31 29  -1) / 3) * 6, 1)
7d90: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
7da0: 20 20 29 5c 6e 22 0a 20 20 20 20 22 20 20 29 5c    )\n".    "  )\
7db0: 6e 22 0a 20 20 20 20 22 53 45 4c 45 43 54 20 73  n".    "SELECT s
7dc0: 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e   FROM x WHERE in
7dd0: 64 3d 30 3b 22 0a 20 20 29 3b 0a 20 20 73 71 6c  d=0;".  );.  sql
7de0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67  ite3_bind_text(g
7df0: 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 50 75 7a 2c  .pStmt, 1, zPuz,
7e00: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54   -1, SQLITE_STAT
7e10: 49 43 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  IC);.  speedtest
7e20: 31 5f 72 75 6e 28 29 3b 0a 20 20 73 70 65 65 64  1_run();.  speed
7e30: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
7e40: 3b 0a 0a 20 20 72 53 70 61 63 69 6e 67 20 3d 20  ;..  rSpacing = 
7e50: 35 2e 30 2f 67 2e 73 7a 54 65 73 74 3b 0a 20 20  5.0/g.szTest;.  
7e60: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
7e70: 5f 74 65 73 74 28 33 30 30 2c 20 22 4d 61 6e 64  _test(300, "Mand
7e80: 65 6c 62 72 6f 74 20 53 65 74 20 77 69 74 68 20  elbrot Set with 
7e90: 73 70 61 63 69 6e 67 3d 25 66 22 2c 20 72 53 70  spacing=%f", rSp
7ea0: 61 63 69 6e 67 29 3b 0a 20 20 73 70 65 65 64 74  acing);.  speedt
7eb0: 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20  est1_prepare(.  
7ec0: 20 22 57 49 54 48 20 52 45 43 55 52 53 49 56 45   "WITH RECURSIVE
7ed0: 20 5c 6e 22 0a 20 20 20 22 20 20 78 61 78 69 73   \n".   "  xaxis
7ee0: 28 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d  (x) AS (VALUES(-
7ef0: 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53  2.0) UNION ALL S
7f00: 45 4c 45 43 54 20 78 2b 3f 31 20 46 52 4f 4d 20  ELECT x+?1 FROM 
7f10: 78 61 78 69 73 20 57 48 45 52 45 20 78 3c 31 2e  xaxis WHERE x<1.
7f20: 32 29 2c 5c 6e 22 0a 20 20 20 22 20 20 79 61 78  2),\n".   "  yax
7f30: 69 73 28 79 29 20 41 53 20 28 56 41 4c 55 45 53  is(y) AS (VALUES
7f40: 28 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c  (-1.0) UNION ALL
7f50: 20 53 45 4c 45 43 54 20 79 2b 3f 32 20 46 52 4f   SELECT y+?2 FRO
7f60: 4d 20 79 61 78 69 73 20 57 48 45 52 45 20 79 3c  M yaxis WHERE y<
7f70: 31 2e 30 29 2c 5c 6e 22 0a 20 20 20 22 20 20 6d  1.0),\n".   "  m
7f80: 28 69 74 65 72 2c 20 63 78 2c 20 63 79 2c 20 78  (iter, cx, cy, x
7f90: 2c 20 79 29 20 41 53 20 28 5c 6e 22 0a 20 20 20  , y) AS (\n".   
7fa0: 22 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78  "    SELECT 0, x
7fb0: 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52  , y, 0.0, 0.0 FR
7fc0: 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 5c  OM xaxis, yaxis\
7fd0: 6e 22 0a 20 20 20 22 20 20 20 20 55 4e 49 4f 4e  n".   "    UNION
7fe0: 20 41 4c 4c 5c 6e 22 0a 20 20 20 22 20 20 20 20   ALL\n".   "    
7ff0: 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c 20 63  SELECT iter+1, c
8000: 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b  x, cy, x*x-y*y +
8010: 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63   cx, 2.0*x*y + c
8020: 79 20 46 52 4f 4d 20 6d 20 5c 6e 22 0a 20 20 20  y FROM m \n".   
8030: 22 20 20 20 20 20 57 48 45 52 45 20 28 78 2a 78  "     WHERE (x*x
8040: 20 2b 20 79 2a 79 29 20 3c 20 34 2e 30 20 41 4e   + y*y) < 4.0 AN
8050: 44 20 69 74 65 72 3c 32 38 5c 6e 22 0a 20 20 20  D iter<28\n".   
8060: 22 20 20 29 2c 5c 6e 22 0a 20 20 20 22 20 20 6d  "  ),\n".   "  m
8070: 32 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20  2(iter, cx, cy) 
8080: 41 53 20 28 5c 6e 22 0a 20 20 20 22 20 20 20 20  AS (\n".   "    
8090: 53 45 4c 45 43 54 20 6d 61 78 28 69 74 65 72 29  SELECT max(iter)
80a0: 2c 20 63 78 2c 20 63 79 20 46 52 4f 4d 20 6d 20  , cx, cy FROM m 
80b0: 47 52 4f 55 50 20 42 59 20 63 78 2c 20 63 79 5c  GROUP BY cx, cy\
80c0: 6e 22 0a 20 20 20 22 20 20 29 2c 5c 6e 22 0a 20  n".   "  ),\n". 
80d0: 20 20 22 20 20 61 28 74 29 20 41 53 20 28 5c 6e    "  a(t) AS (\n
80e0: 22 0a 20 20 20 22 20 20 20 20 53 45 4c 45 43 54  ".   "    SELECT
80f0: 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73   group_concat( s
8100: 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31  ubstr(' .+*#', 1
8110: 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20  +min(iter/7,4), 
8120: 31 29 2c 20 27 27 29 20 5c 6e 22 0a 20 20 20 22  1), '') \n".   "
8130: 20 20 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55      FROM m2 GROU
8140: 50 20 42 59 20 63 79 5c 6e 22 0a 20 20 20 22 20  P BY cy\n".   " 
8150: 20 29 5c 6e 22 0a 20 20 20 22 53 45 4c 45 43 54   )\n".   "SELECT
8160: 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74   group_concat(rt
8170: 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52  rim(t),x'0a') FR
8180: 4f 4d 20 61 3b 22 0a 20 20 29 3b 0a 20 20 73 71  OM a;".  );.  sq
8190: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
81a0: 65 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 72 53  e(g.pStmt, 1, rS
81b0: 70 61 63 69 6e 67 2a 2e 30 35 29 3b 0a 20 20 73  pacing*.05);.  s
81c0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
81d0: 6c 65 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 72  le(g.pStmt, 2, r
81e0: 53 70 61 63 69 6e 67 29 3b 0a 20 20 73 70 65 65  Spacing);.  spee
81f0: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
8200: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
8210: 65 73 74 28 29 3b 0a 0a 20 20 6e 45 6c 65 6d 20  est();..  nElem 
8220: 3d 20 31 30 30 30 30 2a 67 2e 73 7a 54 65 73 74  = 10000*g.szTest
8230: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
8240: 65 67 69 6e 5f 74 65 73 74 28 34 30 30 2c 20 22  egin_test(400, "
8250: 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20  EXCEPT operator 
8260: 6f 6e 20 25 64 2d 65 6c 65 6d 65 6e 74 20 74 61  on %d-element ta
8270: 62 6c 65 73 22 2c 20 6e 45 6c 65 6d 29 3b 0a 20  bles", nElem);. 
8280: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
8290: 61 72 65 28 0a 20 20 20 20 22 57 49 54 48 20 52  are(.    "WITH R
82a0: 45 43 55 52 53 49 56 45 20 5c 6e 22 0a 20 20 20  ECURSIVE \n".   
82b0: 20 22 20 20 74 31 28 78 29 20 41 53 20 28 56 41   "  t1(x) AS (VA
82c0: 4c 55 45 53 28 32 29 20 55 4e 49 4f 4e 20 41 4c  LUES(2) UNION AL
82d0: 4c 20 53 45 4c 45 43 54 20 78 2b 32 20 46 52 4f  L SELECT x+2 FRO
82e0: 4d 20 74 31 20 57 48 45 52 45 20 78 3c 25 64 29  M t1 WHERE x<%d)
82f0: 2c 5c 6e 22 0a 20 20 20 20 22 20 20 74 32 28 79  ,\n".    "  t2(y
8300: 29 20 41 53 20 28 56 41 4c 55 45 53 28 33 29 20  ) AS (VALUES(3) 
8310: 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
8320: 20 79 2b 33 20 46 52 4f 4d 20 74 32 20 57 48 45   y+3 FROM t2 WHE
8330: 52 45 20 79 3c 25 64 29 5c 6e 22 0a 20 20 20 20  RE y<%d)\n".    
8340: 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 78 29  "SELECT count(x)
8350: 2c 20 61 76 67 28 78 29 20 46 52 4f 4d 20 28 5c  , avg(x) FROM (\
8360: 6e 22 0a 20 20 20 20 22 20 20 53 45 4c 45 43 54  n".    "  SELECT
8370: 20 78 20 46 52 4f 4d 20 74 31 20 45 58 43 45 50   x FROM t1 EXCEP
8380: 54 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20  T SELECT y FROM 
8390: 74 32 20 4f 52 44 45 52 20 42 59 20 31 5c 6e 22  t2 ORDER BY 1\n"
83a0: 0a 20 20 20 20 22 29 3b 22 2c 0a 20 20 20 20 6e  .    ");",.    n
83b0: 45 6c 65 6d 2c 20 6e 45 6c 65 6d 0a 20 20 29 3b  Elem, nElem.  );
83c0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75  .  speedtest1_ru
83d0: 6e 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  n();.  speedtest
83e0: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 7d 0a  1_end_test();.}.
83f0: 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 61  ./*.** Compute a
8400: 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 66   pseudo-random f
8410: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 61 73  loating point as
8420: 63 69 69 20 6e 75 6d 62 65 72 2e 0a 2a 2f 0a 76  cii number..*/.v
8430: 6f 69 64 20 73 70 65 65 64 74 65 73 74 31 5f 72  oid speedtest1_r
8440: 61 6e 64 6f 6d 5f 61 73 63 69 69 5f 66 70 28 63  andom_ascii_fp(c
8450: 68 61 72 20 2a 7a 46 50 29 7b 0a 20 20 69 6e 74  har *zFP){.  int
8460: 20 78 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f   x = speedtest1_
8470: 72 61 6e 64 6f 6d 28 29 3b 0a 20 20 69 6e 74 20  random();.  int 
8480: 79 20 3d 20 73 70 65 65 64 74 65 73 74 31 5f 72  y = speedtest1_r
8490: 61 6e 64 6f 6d 28 29 3b 0a 20 20 69 6e 74 20 7a  andom();.  int z
84a0: 3b 0a 20 20 7a 20 3d 20 79 25 31 30 3b 0a 20 20  ;.  z = y%10;.  
84b0: 69 66 28 20 7a 3c 30 20 29 20 7a 20 3d 20 2d 7a  if( z<0 ) z = -z
84c0: 3b 0a 20 20 79 20 2f 3d 20 31 30 3b 0a 20 20 73  ;.  y /= 10;.  s
84d0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
84e0: 31 30 30 2c 7a 46 50 2c 22 25 64 2e 25 64 65 25  100,zFP,"%d.%de%
84f0: 64 22 2c 79 2c 7a 2c 78 25 32 30 30 29 3b 0a 7d  d",y,z,x%200);.}
8500: 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 65 73 74 73 65  ../*.** A testse
8510: 74 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  t for floating-p
8520: 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f  oint numbers..*/
8530: 0a 76 6f 69 64 20 74 65 73 74 73 65 74 5f 66 70  .void testset_fp
8540: 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 6e 3b  (void){.  int n;
8550: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72  .  int i;.  char
8560: 20 7a 46 50 31 5b 31 30 30 5d 3b 0a 20 20 63 68   zFP1[100];.  ch
8570: 61 72 20 7a 46 50 32 5b 31 30 30 5d 3b 0a 20 20  ar zFP2[100];.  
8580: 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a  .  n = g.szTest*
8590: 35 30 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73  5000;.  speedtes
85a0: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 30  t1_begin_test(10
85b0: 30 2c 20 22 46 69 6c 6c 20 61 20 74 61 62 6c 65  0, "Fill a table
85c0: 20 77 69 74 68 20 25 64 20 46 50 20 76 61 6c 75   with %d FP valu
85d0: 65 73 22 2c 20 6e 2a 32 29 3b 0a 20 20 73 70 65  es", n*2);.  spe
85e0: 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 42 45  edtest1_exec("BE
85f0: 47 49 4e 22 29 3b 0a 20 20 73 70 65 65 64 74 65  GIN");.  speedte
8600: 73 74 31 5f 65 78 65 63 28 22 43 52 45 41 54 45  st1_exec("CREATE
8610: 25 73 20 54 41 42 4c 45 20 74 31 28 61 20 52 45  %s TABLE t1(a RE
8620: 41 4c 20 25 73 2c 20 62 20 52 45 41 4c 20 25 73  AL %s, b REAL %s
8630: 29 3b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  );",.           
8640: 20 20 20 20 20 20 20 69 73 54 65 6d 70 28 31 29         isTemp(1)
8650: 2c 20 67 2e 7a 4e 4e 2c 20 67 2e 7a 4e 4e 29 3b  , g.zNN, g.zNN);
8660: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
8670: 65 70 61 72 65 28 22 49 4e 53 45 52 54 20 49 4e  epare("INSERT IN
8680: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 3f 31 2c  TO t1 VALUES(?1,
8690: 3f 32 29 3b 20 2d 2d 20 25 64 20 74 69 6d 65 73  ?2); -- %d times
86a0: 22 2c 20 6e 29 3b 0a 20 20 66 6f 72 28 69 3d 31  ", n);.  for(i=1
86b0: 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<=n; i++){.  
86c0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e    speedtest1_ran
86d0: 64 6f 6d 5f 61 73 63 69 69 5f 66 70 28 7a 46 50  dom_ascii_fp(zFP
86e0: 31 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73  1);.    speedtes
86f0: 74 31 5f 72 61 6e 64 6f 6d 5f 61 73 63 69 69 5f  t1_random_ascii_
8700: 66 70 28 7a 46 50 32 29 3b 0a 20 20 20 20 73 71  fp(zFP2);.    sq
8710: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
8720: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 46 50 31  g.pStmt, 1, zFP1
8730: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41  , -1, SQLITE_STA
8740: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
8750: 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53  3_bind_text(g.pS
8760: 74 6d 74 2c 20 32 2c 20 7a 46 50 32 2c 20 2d 31  tmt, 2, zFP2, -1
8770: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8780: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
8790: 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70  _run();.  }.  sp
87a0: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 43  eedtest1_exec("C
87b0: 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64  OMMIT");.  speed
87c0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
87d0: 3b 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73  ;..  n = g.szTes
87e0: 74 2f 32 35 20 2b 20 32 3b 0a 20 20 73 70 65 65  t/25 + 2;.  spee
87f0: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
8800: 74 28 31 31 30 2c 20 22 25 64 20 72 61 6e 67 65  t(110, "%d range
8810: 20 71 75 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20   queries", n);. 
8820: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
8830: 61 72 65 28 22 53 45 4c 45 43 54 20 73 75 6d 28  are("SELECT sum(
8840: 62 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  b) FROM t1 WHERE
8850: 20 61 20 42 45 54 57 45 45 4e 20 3f 31 20 41 4e   a BETWEEN ?1 AN
8860: 44 20 3f 32 22 29 3b 0a 20 20 66 6f 72 28 69 3d  D ?2");.  for(i=
8870: 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20  1; i<=n; i++){. 
8880: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 61     speedtest1_ra
8890: 6e 64 6f 6d 5f 61 73 63 69 69 5f 66 70 28 7a 46  ndom_ascii_fp(zF
88a0: 50 31 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  P1);.    speedte
88b0: 73 74 31 5f 72 61 6e 64 6f 6d 5f 61 73 63 69 69  st1_random_ascii
88c0: 5f 66 70 28 7a 46 50 32 29 3b 0a 20 20 20 20 73  _fp(zFP2);.    s
88d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
88e0: 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 46 50  (g.pStmt, 1, zFP
88f0: 31 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  1, -1, SQLITE_ST
8900: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
8910: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70  e3_bind_text(g.p
8920: 53 74 6d 74 2c 20 32 2c 20 7a 46 50 32 2c 20 2d  Stmt, 2, zFP2, -
8930: 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  1, SQLITE_STATIC
8940: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
8950: 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73  1_run();.  }.  s
8960: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
8970: 73 74 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65  st();..  speedte
8980: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
8990: 32 30 2c 20 22 43 52 45 41 54 45 20 49 4e 44 45  20, "CREATE INDE
89a0: 58 20 74 68 72 65 65 20 74 69 6d 65 73 22 29 3b  X three times");
89b0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
89c0: 65 63 28 22 42 45 47 49 4e 3b 22 29 3b 0a 20 20  ec("BEGIN;");.  
89d0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
89e0: 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31  "CREATE INDEX t1
89f0: 61 20 4f 4e 20 74 31 28 61 29 3b 22 29 3b 0a 20  a ON t1(a);");. 
8a00: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
8a10: 28 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 74  ("CREATE INDEX t
8a20: 31 62 20 4f 4e 20 74 31 28 62 29 3b 22 29 3b 0a  1b ON t1(b);");.
8a30: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
8a40: 63 28 22 43 52 45 41 54 45 20 49 4e 44 45 58 20  c("CREATE INDEX 
8a50: 74 31 61 62 20 4f 4e 20 74 31 28 61 2c 62 29 3b  t1ab ON t1(a,b);
8a60: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
8a70: 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 3b 22 29  _exec("COMMIT;")
8a80: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
8a90: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20  nd_test();..  n 
8aa0: 3d 20 67 2e 73 7a 54 65 73 74 2f 33 20 2b 20 32  = g.szTest/3 + 2
8ab0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
8ac0: 65 67 69 6e 5f 74 65 73 74 28 31 33 30 2c 20 22  egin_test(130, "
8ad0: 25 64 20 69 6e 64 65 78 65 64 20 72 61 6e 67 65  %d indexed range
8ae0: 20 71 75 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20   queries", n);. 
8af0: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
8b00: 61 72 65 28 22 53 45 4c 45 43 54 20 73 75 6d 28  are("SELECT sum(
8b10: 62 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  b) FROM t1 WHERE
8b20: 20 61 20 42 45 54 57 45 45 4e 20 3f 31 20 41 4e   a BETWEEN ?1 AN
8b30: 44 20 3f 32 22 29 3b 0a 20 20 66 6f 72 28 69 3d  D ?2");.  for(i=
8b40: 31 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20  1; i<=n; i++){. 
8b50: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 61     speedtest1_ra
8b60: 6e 64 6f 6d 5f 61 73 63 69 69 5f 66 70 28 7a 46  ndom_ascii_fp(zF
8b70: 50 31 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  P1);.    speedte
8b80: 73 74 31 5f 72 61 6e 64 6f 6d 5f 61 73 63 69 69  st1_random_ascii
8b90: 5f 66 70 28 7a 46 50 32 29 3b 0a 20 20 20 20 73  _fp(zFP2);.    s
8ba0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
8bb0: 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 7a 46 50  (g.pStmt, 1, zFP
8bc0: 31 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  1, -1, SQLITE_ST
8bd0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
8be0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70  e3_bind_text(g.p
8bf0: 53 74 6d 74 2c 20 32 2c 20 7a 46 50 32 2c 20 2d  Stmt, 2, zFP2, -
8c00: 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  1, SQLITE_STATIC
8c10: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
8c20: 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73  1_run();.  }.  s
8c30: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
8c40: 73 74 28 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  st();.}..#ifdef 
8c50: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54  SQLITE_ENABLE_RT
8c60: 52 45 45 0a 2f 2a 20 47 65 6e 65 72 61 74 65 20  REE./* Generate 
8c70: 74 77 6f 20 6e 75 6d 62 65 72 73 20 62 65 74 77  two numbers betw
8c80: 65 65 6e 20 31 20 61 6e 64 20 6d 78 2e 20 20 54  een 1 and mx.  T
8c90: 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65 72 20  he first number 
8ca0: 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
8cb0: 74 68 65 20 73 65 63 6f 6e 64 2e 20 20 55 73 75  the second.  Usu
8cc0: 61 6c 6c 79 20 74 68 65 20 6e 75 6d 62 65 72 73  ally the numbers
8cd0: 20 61 72 65 20 6e 65 61 72 20 65 61 63 68 20 6f   are near each o
8ce0: 74 68 65 72 20 62 75 74 20 63 61 6e 20 73 6f 6d  ther but can som
8cf0: 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 66 61 72  etimes.** be far
8d00: 20 61 70 61 72 74 2e 0a 2a 2f 0a 73 74 61 74 69   apart..*/.stati
8d10: 63 20 76 6f 69 64 20 74 77 6f 43 6f 6f 72 64 73  c void twoCoords
8d20: 28 0a 20 20 69 6e 74 20 70 31 2c 20 69 6e 74 20  (.  int p1, int 
8d30: 70 32 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  p2,             
8d40: 20 20 20 20 20 20 2f 2a 20 50 61 72 61 6d 65 74        /* Paramet
8d50: 65 72 73 20 61 64 6a 75 73 74 69 6e 67 20 73 69  ers adjusting si
8d60: 7a 65 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  zes */.  unsigne
8d70: 64 20 6d 78 2c 20 20 20 20 20 20 20 20 20 20 20  d mx,           
8d80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 61             /* Ra
8d90: 6e 67 65 20 6f 66 20 31 2e 2e 6d 78 20 2a 2f 0a  nge of 1..mx */.
8da0: 20 20 75 6e 73 69 67 6e 65 64 20 2a 70 58 30 2c    unsigned *pX0,
8db0: 20 75 6e 73 69 67 6e 65 64 20 2a 70 58 31 20 20   unsigned *pX1  
8dc0: 20 20 20 20 2f 2a 20 4f 55 54 3a 20 77 72 69 74      /* OUT: writ
8dd0: 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
8de0: 2f 0a 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20  /.){.  unsigned 
8df0: 64 2c 20 78 30 2c 20 78 31 2c 20 73 70 61 6e 3b  d, x0, x1, span;
8e00: 0a 0a 20 20 73 70 61 6e 20 3d 20 6d 78 2f 31 30  ..  span = mx/10
8e10: 30 20 2b 20 31 3b 0a 20 20 69 66 28 20 73 70 65  0 + 1;.  if( spe
8e20: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
8e30: 25 33 3d 3d 30 20 29 20 73 70 61 6e 20 2a 3d 20  %3==0 ) span *= 
8e40: 70 31 3b 0a 20 20 69 66 28 20 73 70 65 65 64 74  p1;.  if( speedt
8e50: 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 70 32  est1_random()%p2
8e60: 3d 3d 30 20 29 20 73 70 61 6e 20 3d 20 6d 78 2f  ==0 ) span = mx/
8e70: 32 3b 0a 20 20 64 20 3d 20 73 70 65 65 64 74 65  2;.  d = speedte
8e80: 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 73 70 61  st1_random()%spa
8e90: 6e 20 2b 20 31 3b 0a 20 20 78 30 20 3d 20 73 70  n + 1;.  x0 = sp
8ea0: 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28  eedtest1_random(
8eb0: 29 25 28 6d 78 2d 64 29 20 2b 20 31 3b 0a 20 20  )%(mx-d) + 1;.  
8ec0: 78 31 20 3d 20 78 30 20 2b 20 64 3b 0a 20 20 2a  x1 = x0 + d;.  *
8ed0: 70 58 30 20 3d 20 78 30 3b 0a 20 20 2a 70 58 31  pX0 = x0;.  *pX1
8ee0: 20 3d 20 78 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a   = x1;.}.#endif.
8ef0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
8f00: 4e 41 42 4c 45 5f 52 54 52 45 45 0a 2f 2a 20 54  NABLE_RTREE./* T
8f10: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
8f20: 74 69 6e 65 20 69 73 20 61 6e 20 52 2d 54 72 65  tine is an R-Tre
8f30: 65 20 67 65 6f 6d 65 74 72 79 20 63 61 6c 6c 62  e geometry callb
8f40: 61 63 6b 2e 20 20 49 74 20 72 65 74 75 72 6e 73  ack.  It returns
8f50: 0a 2a 2a 20 74 72 75 65 20 69 66 20 74 68 65 20  .** true if the 
8f60: 6f 62 6a 65 63 74 20 6f 76 65 72 6c 61 70 73 20  object overlaps 
8f70: 61 20 73 6c 69 63 65 20 6f 6e 20 74 68 65 20 59  a slice on the Y
8f80: 20 63 6f 6f 72 64 69 6e 61 74 65 20 62 65 74 77   coordinate betw
8f90: 65 65 6e 20 74 68 65 0a 2a 2a 20 74 77 6f 20 76  een the.** two v
8fa0: 61 6c 75 65 73 20 67 69 76 65 6e 20 61 73 20 61  alues given as a
8fb0: 72 67 75 6d 65 6e 74 73 2e 20 20 49 6e 20 6f 74  rguments.  In ot
8fc0: 68 65 72 20 77 6f 72 64 73 0a 2a 2a 0a 2a 2a 20  her words.**.** 
8fd0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
8fe0: 28 2a 29 20 46 52 4f 4d 20 72 74 31 20 57 48 45  (*) FROM rt1 WHE
8ff0: 52 45 20 69 64 20 4d 41 54 43 48 20 78 73 6c 69  RE id MATCH xsli
9000: 63 65 28 31 30 2c 32 30 29 3b 0a 2a 2a 0a 2a 2a  ce(10,20);.**.**
9010: 20 49 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   Is the same as 
9020: 73 61 79 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20  saying:.**.**   
9030: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
9040: 29 20 46 52 4f 4d 20 72 74 31 20 57 48 45 52 45  ) FROM rt1 WHERE
9050: 20 79 31 3e 3d 31 30 20 41 4e 44 20 79 30 3c 3d   y1>=10 AND y0<=
9060: 32 30 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  20;.*/.static in
9070: 74 20 78 73 6c 69 63 65 47 65 6f 6d 65 74 72 79  t xsliceGeometry
9080: 43 61 6c 6c 62 61 63 6b 28 0a 20 20 73 71 6c 69  Callback(.  sqli
9090: 74 65 33 5f 72 74 72 65 65 5f 67 65 6f 6d 65 74  te3_rtree_geomet
90a0: 72 79 20 2a 70 2c 0a 20 20 69 6e 74 20 6e 43 6f  ry *p,.  int nCo
90b0: 6f 72 64 2c 0a 20 20 64 6f 75 62 6c 65 20 2a 61  ord,.  double *a
90c0: 43 6f 6f 72 64 2c 0a 20 20 69 6e 74 20 2a 70 52  Coord,.  int *pR
90d0: 65 73 0a 29 7b 0a 20 20 2a 70 52 65 73 20 3d 20  es.){.  *pRes = 
90e0: 61 43 6f 6f 72 64 5b 33 5d 3e 3d 70 2d 3e 61 50  aCoord[3]>=p->aP
90f0: 61 72 61 6d 5b 30 5d 20 26 26 20 61 43 6f 6f 72  aram[0] && aCoor
9100: 64 5b 32 5d 3c 3d 70 2d 3e 61 50 61 72 61 6d 5b  d[2]<=p->aParam[
9110: 31 5d 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  1];.  return SQL
9120: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
9130: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
9140: 45 5f 52 54 52 45 45 20 2a 2f 0a 0a 23 69 66 64  E_RTREE */..#ifd
9150: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
9160: 5f 52 54 52 45 45 0a 2f 2a 0a 2a 2a 20 41 20 74  _RTREE./*.** A t
9170: 65 73 74 73 65 74 20 66 6f 72 20 74 68 65 20 52  estset for the R
9180: 2d 54 72 65 65 20 76 69 72 74 75 61 6c 20 74 61  -Tree virtual ta
9190: 62 6c 65 0a 2a 2f 0a 76 6f 69 64 20 74 65 73 74  ble.*/.void test
91a0: 73 65 74 5f 72 74 72 65 65 28 69 6e 74 20 70 31  set_rtree(int p1
91b0: 2c 20 69 6e 74 20 70 32 29 7b 0a 20 20 75 6e 73  , int p2){.  uns
91c0: 69 67 6e 65 64 20 69 2c 20 6e 3b 0a 20 20 75 6e  igned i, n;.  un
91d0: 73 69 67 6e 65 64 20 6d 78 43 6f 6f 72 64 3b 0a  signed mxCoord;.
91e0: 20 20 75 6e 73 69 67 6e 65 64 20 78 30 2c 20 78    unsigned x0, x
91f0: 31 2c 20 79 30 2c 20 79 31 2c 20 7a 30 2c 20 7a  1, y0, y1, z0, z
9200: 31 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 53  1;.  unsigned iS
9210: 74 65 70 3b 0a 20 20 69 6e 74 20 2a 61 43 68 65  tep;.  int *aChe
9220: 63 6b 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  ck = sqlite3_mal
9230: 6c 6f 63 28 20 73 69 7a 65 6f 66 28 69 6e 74 29  loc( sizeof(int)
9240: 2a 67 2e 73 7a 54 65 73 74 2a 35 30 30 20 29 3b  *g.szTest*500 );
9250: 0a 0a 20 20 6d 78 43 6f 6f 72 64 20 3d 20 31 35  ..  mxCoord = 15
9260: 30 30 30 3b 0a 20 20 6e 20 3d 20 67 2e 73 7a 54  000;.  n = g.szT
9270: 65 73 74 2a 35 30 30 3b 0a 20 20 73 70 65 65 64  est*500;.  speed
9280: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
9290: 28 31 30 30 2c 20 22 25 64 20 49 4e 53 45 52 54  (100, "%d INSERT
92a0: 73 20 69 6e 74 6f 20 61 6e 20 72 2d 74 72 65 65  s into an r-tree
92b0: 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65  ", n);.  speedte
92c0: 73 74 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22  st1_exec("BEGIN"
92d0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
92e0: 65 78 65 63 28 22 43 52 45 41 54 45 20 56 49 52  exec("CREATE VIR
92f0: 54 55 41 4c 20 54 41 42 4c 45 20 72 74 31 20 55  TUAL TABLE rt1 U
9300: 53 49 4e 47 20 72 74 72 65 65 28 69 64 2c 78 30  SING rtree(id,x0
9310: 2c 78 31 2c 79 30 2c 79 31 2c 7a 30 2c 7a 31 29  ,x1,y0,y1,z0,z1)
9320: 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ");.  speedtest1
9330: 5f 70 72 65 70 61 72 65 28 22 49 4e 53 45 52 54  _prepare("INSERT
9340: 20 49 4e 54 4f 20 72 74 31 28 69 64 2c 78 30 2c   INTO rt1(id,x0,
9350: 78 31 2c 79 30 2c 79 31 2c 7a 30 2c 7a 31 29 22  x1,y0,y1,z0,z1)"
9360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9370: 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 3f 31        "VALUES(?1
9380: 2c 3f 32 2c 3f 33 2c 3f 34 2c 3f 35 2c 3f 36 2c  ,?2,?3,?4,?5,?6,
9390: 3f 37 29 22 29 3b 0a 20 20 66 6f 72 28 69 3d 31  ?7)");.  for(i=1
93a0: 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<=n; i++){.  
93b0: 20 20 74 77 6f 43 6f 6f 72 64 73 28 70 31 2c 20    twoCoords(p1, 
93c0: 70 32 2c 20 6d 78 43 6f 6f 72 64 2c 20 26 78 30  p2, mxCoord, &x0
93d0: 2c 20 26 78 31 29 3b 0a 20 20 20 20 74 77 6f 43  , &x1);.    twoC
93e0: 6f 6f 72 64 73 28 70 31 2c 20 70 32 2c 20 6d 78  oords(p1, p2, mx
93f0: 43 6f 6f 72 64 2c 20 26 79 30 2c 20 26 79 31 29  Coord, &y0, &y1)
9400: 3b 0a 20 20 20 20 74 77 6f 43 6f 6f 72 64 73 28  ;.    twoCoords(
9410: 70 31 2c 20 70 32 2c 20 6d 78 43 6f 6f 72 64 2c  p1, p2, mxCoord,
9420: 20 26 7a 30 2c 20 26 7a 31 29 3b 0a 20 20 20 20   &z0, &z1);.    
9430: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
9440: 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 69 29 3b  (g.pStmt, 1, i);
9450: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
9460: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32  d_int(g.pStmt, 2
9470: 2c 20 78 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  , x0);.    sqlit
9480: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
9490: 74 6d 74 2c 20 33 2c 20 78 31 29 3b 0a 20 20 20  tmt, 3, x1);.   
94a0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
94b0: 74 28 67 2e 70 53 74 6d 74 2c 20 34 2c 20 79 30  t(g.pStmt, 4, y0
94c0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
94d0: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
94e0: 20 35 2c 20 79 31 29 3b 0a 20 20 20 20 73 71 6c   5, y1);.    sql
94f0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
9500: 70 53 74 6d 74 2c 20 36 2c 20 7a 30 29 3b 0a 20  pStmt, 6, z0);. 
9510: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
9520: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 37 2c 20  int(g.pStmt, 7, 
9530: 7a 31 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  z1);.    speedte
9540: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20  st1_run();.  }. 
9550: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
9560: 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70  ("COMMIT");.  sp
9570: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
9580: 74 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73  t();..  speedtes
9590: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 30  t1_begin_test(10
95a0: 31 2c 20 22 43 6f 70 79 20 66 72 6f 6d 20 72 74  1, "Copy from rt
95b0: 72 65 65 20 74 6f 20 61 20 72 65 67 75 6c 61 72  ree to a regular
95c0: 20 74 61 62 6c 65 22 29 3b 0a 20 20 73 70 65 65   table");.  spee
95d0: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 52 45  dtest1_exec("CRE
95e0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 69 64 20  ATE TABLE t1(id 
95f0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9600: 4b 45 59 2c 78 30 2c 78 31 2c 79 30 2c 79 31 2c  KEY,x0,x1,y0,y1,
9610: 7a 30 2c 7a 31 29 22 29 3b 0a 20 20 73 70 65 65  z0,z1)");.  spee
9620: 64 74 65 73 74 31 5f 65 78 65 63 28 22 49 4e 53  dtest1_exec("INS
9630: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
9640: 43 54 20 2a 20 46 52 4f 4d 20 72 74 31 22 29 3b  CT * FROM rt1");
9650: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
9660: 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d  d_test();..  n =
9670: 20 67 2e 73 7a 54 65 73 74 2a 31 30 30 3b 0a 20   g.szTest*100;. 
9680: 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69   speedtest1_begi
9690: 6e 5f 74 65 73 74 28 31 31 30 2c 20 22 25 64 20  n_test(110, "%d 
96a0: 6f 6e 65 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20  one-dimensional 
96b0: 69 6e 74 65 72 73 65 63 74 20 73 6c 69 63 65 20  intersect slice 
96c0: 71 75 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20 20  queries", n);.  
96d0: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
96e0: 72 65 28 22 53 45 4c 45 43 54 20 63 6f 75 6e 74  re("SELECT count
96f0: 28 2a 29 20 46 52 4f 4d 20 72 74 31 20 57 48 45  (*) FROM rt1 WHE
9700: 52 45 20 78 30 3e 3d 3f 31 20 41 4e 44 20 78 31  RE x0>=?1 AND x1
9710: 3c 3d 3f 32 22 29 3b 0a 20 20 69 53 74 65 70 20  <=?2");.  iStep 
9720: 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20 66  = mxCoord/n;.  f
9730: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
9740: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  ){.    sqlite3_b
9750: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
9760: 20 31 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20 20   1, i*iStep);.  
9770: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
9780: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28  nt(g.pStmt, 2, (
9790: 69 2b 31 29 2a 69 53 74 65 70 29 3b 0a 20 20 20  i+1)*iStep);.   
97a0: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
97b0: 29 3b 0a 20 20 20 20 61 43 68 65 63 6b 5b 69 5d  );.    aCheck[i]
97c0: 20 3d 20 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c   = atoi(g.zResul
97d0: 74 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  t);.  }.  speedt
97e0: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
97f0: 0a 0a 20 20 69 66 28 20 67 2e 62 56 65 72 69 66  ..  if( g.bVerif
9800: 79 20 29 7b 0a 20 20 20 20 6e 20 3d 20 67 2e 73  y ){.    n = g.s
9810: 7a 54 65 73 74 2a 31 30 30 3b 0a 20 20 20 20 73  zTest*100;.    s
9820: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
9830: 74 65 73 74 28 31 31 31 2c 20 22 56 65 72 69 66  test(111, "Verif
9840: 79 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 31 2d  y result from 1-
9850: 44 20 69 6e 74 65 72 73 65 63 74 20 73 6c 69 63  D intersect slic
9860: 65 20 71 75 65 72 69 65 73 22 29 3b 0a 20 20 20  e queries");.   
9870: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
9880: 61 72 65 28 22 53 45 4c 45 43 54 20 63 6f 75 6e  are("SELECT coun
9890: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
98a0: 52 45 20 78 30 3e 3d 3f 31 20 41 4e 44 20 78 31  RE x0>=?1 AND x1
98b0: 3c 3d 3f 32 22 29 3b 0a 20 20 20 20 69 53 74 65  <=?2");.    iSte
98c0: 70 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20  p = mxCoord/n;. 
98d0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b     for(i=0; i<n;
98e0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
98f0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
9900: 70 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74 65  pStmt, 1, i*iSte
9910: 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  p);.      sqlite
9920: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
9930: 6d 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53 74  mt, 2, (i+1)*iSt
9940: 65 70 29 3b 0a 20 20 20 20 20 20 73 70 65 65 64  ep);.      speed
9950: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20  test1_run();.   
9960: 20 20 20 69 66 28 20 61 43 68 65 63 6b 5b 69 5d     if( aCheck[i]
9970: 21 3d 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74  !=atoi(g.zResult
9980: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 66 61 74  ) ){.        fat
9990: 61 6c 5f 65 72 72 6f 72 28 22 43 6f 75 6e 74 20  al_error("Count 
99a0: 64 69 73 61 67 72 65 65 20 73 74 65 70 20 25 64  disagree step %d
99b0: 3a 20 25 64 2e 2e 25 64 2e 20 20 25 64 20 76 73  : %d..%d.  %d vs
99c0: 20 25 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20   %d",.          
99d0: 20 20 20 20 20 20 20 20 20 20 69 2c 20 69 2a 69            i, i*i
99e0: 53 74 65 70 2c 20 28 69 2b 31 29 2a 69 53 74 65  Step, (i+1)*iSte
99f0: 70 2c 20 61 43 68 65 63 6b 5b 69 5d 2c 20 61 74  p, aCheck[i], at
9a00: 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29 29 3b 0a  oi(g.zResult));.
9a10: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9a20: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
9a30: 5f 74 65 73 74 28 29 3b 0a 20 20 7d 0a 20 20 0a  _test();.  }.  .
9a40: 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 31    n = g.szTest*1
9a50: 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  00;.  speedtest1
9a60: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 32 30 2c  _begin_test(120,
9a70: 20 22 25 64 20 6f 6e 65 2d 64 69 6d 65 6e 73 69   "%d one-dimensi
9a80: 6f 6e 61 6c 20 6f 76 65 72 6c 61 70 20 73 6c 69  onal overlap sli
9a90: 63 65 20 71 75 65 72 69 65 73 22 2c 20 6e 29 3b  ce queries", n);
9aa0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
9ab0: 65 70 61 72 65 28 22 53 45 4c 45 43 54 20 63 6f  epare("SELECT co
9ac0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 72 74 31 20  unt(*) FROM rt1 
9ad0: 57 48 45 52 45 20 79 31 3e 3d 3f 31 20 41 4e 44  WHERE y1>=?1 AND
9ae0: 20 79 30 3c 3d 3f 32 22 29 3b 0a 20 20 69 53 74   y0<=?2");.  iSt
9af0: 65 70 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a  ep = mxCoord/n;.
9b00: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
9b10: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
9b20: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
9b30: 6d 74 2c 20 31 2c 20 69 2a 69 53 74 65 70 29 3b  mt, 1, i*iStep);
9b40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
9b50: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32  d_int(g.pStmt, 2
9b60: 2c 20 28 69 2b 31 29 2a 69 53 74 65 70 29 3b 0a  , (i+1)*iStep);.
9b70: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
9b80: 75 6e 28 29 3b 0a 20 20 20 20 61 43 68 65 63 6b  un();.    aCheck
9b90: 5b 69 5d 20 3d 20 61 74 6f 69 28 67 2e 7a 52 65  [i] = atoi(g.zRe
9ba0: 73 75 6c 74 29 3b 0a 20 20 7d 0a 20 20 73 70 65  sult);.  }.  spe
9bb0: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
9bc0: 28 29 3b 0a 0a 20 20 69 66 28 20 67 2e 62 56 65  ();..  if( g.bVe
9bd0: 72 69 66 79 20 29 7b 0a 20 20 20 20 6e 20 3d 20  rify ){.    n = 
9be0: 67 2e 73 7a 54 65 73 74 2a 31 30 30 3b 0a 20 20  g.szTest*100;.  
9bf0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67    speedtest1_beg
9c00: 69 6e 5f 74 65 73 74 28 31 32 31 2c 20 22 56 65  in_test(121, "Ve
9c10: 72 69 66 79 20 72 65 73 75 6c 74 20 66 72 6f 6d  rify result from
9c20: 20 31 2d 44 20 6f 76 65 72 6c 61 70 20 73 6c 69   1-D overlap sli
9c30: 63 65 20 71 75 65 72 69 65 73 22 29 3b 0a 20 20  ce queries");.  
9c40: 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65    speedtest1_pre
9c50: 70 61 72 65 28 22 53 45 4c 45 43 54 20 63 6f 75  pare("SELECT cou
9c60: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48  nt(*) FROM t1 WH
9c70: 45 52 45 20 79 31 3e 3d 3f 31 20 41 4e 44 20 79  ERE y1>=?1 AND y
9c80: 30 3c 3d 3f 32 22 29 3b 0a 20 20 20 20 69 53 74  0<=?2");.    iSt
9c90: 65 70 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a  ep = mxCoord/n;.
9ca0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
9cb0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
9cc0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
9cd0: 2e 70 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74  .pStmt, 1, i*iSt
9ce0: 65 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ep);.      sqlit
9cf0: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
9d00: 74 6d 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53  tmt, 2, (i+1)*iS
9d10: 74 65 70 29 3b 0a 20 20 20 20 20 20 73 70 65 65  tep);.      spee
9d20: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
9d30: 20 20 20 20 69 66 28 20 61 43 68 65 63 6b 5b 69      if( aCheck[i
9d40: 5d 21 3d 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c  ]!=atoi(g.zResul
9d50: 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 66 61  t) ){.        fa
9d60: 74 61 6c 5f 65 72 72 6f 72 28 22 43 6f 75 6e 74  tal_error("Count
9d70: 20 64 69 73 61 67 72 65 65 20 73 74 65 70 20 25   disagree step %
9d80: 64 3a 20 25 64 2e 2e 25 64 2e 20 20 25 64 20 76  d: %d..%d.  %d v
9d90: 73 20 25 64 22 2c 0a 20 20 20 20 20 20 20 20 20  s %d",.         
9da0: 20 20 20 20 20 20 20 20 20 20 20 69 2c 20 69 2a             i, i*
9db0: 69 53 74 65 70 2c 20 28 69 2b 31 29 2a 69 53 74  iStep, (i+1)*iSt
9dc0: 65 70 2c 20 61 43 68 65 63 6b 5b 69 5d 2c 20 61  ep, aCheck[i], a
9dd0: 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29 29 3b  toi(g.zResult));
9de0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9df0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e     speedtest1_en
9e00: 64 5f 74 65 73 74 28 29 3b 0a 20 20 7d 0a 20 20  d_test();.  }.  
9e10: 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74  ..  n = g.szTest
9e20: 2a 31 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73  *100;.  speedtes
9e30: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 32  t1_begin_test(12
9e40: 35 2c 20 22 25 64 20 63 75 73 74 6f 6d 20 67 65  5, "%d custom ge
9e50: 6f 6d 65 74 72 79 20 63 61 6c 6c 62 61 63 6b 20  ometry callback 
9e60: 71 75 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20 20  queries", n);.  
9e70: 73 71 6c 69 74 65 33 5f 72 74 72 65 65 5f 67 65  sqlite3_rtree_ge
9e80: 6f 6d 65 74 72 79 5f 63 61 6c 6c 62 61 63 6b 28  ometry_callback(
9e90: 67 2e 64 62 2c 20 22 78 73 6c 69 63 65 22 2c 20  g.db, "xslice", 
9ea0: 78 73 6c 69 63 65 47 65 6f 6d 65 74 72 79 43 61  xsliceGeometryCa
9eb0: 6c 6c 62 61 63 6b 2c 20 30 29 3b 0a 20 20 73 70  llback, 0);.  sp
9ec0: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
9ed0: 28 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a  ("SELECT count(*
9ee0: 29 20 46 52 4f 4d 20 72 74 31 20 57 48 45 52 45  ) FROM rt1 WHERE
9ef0: 20 69 64 20 4d 41 54 43 48 20 78 73 6c 69 63 65   id MATCH xslice
9f00: 28 3f 31 2c 3f 32 29 22 29 3b 0a 20 20 69 53 74  (?1,?2)");.  iSt
9f10: 65 70 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a  ep = mxCoord/n;.
9f20: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
9f30: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
9f40: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
9f50: 6d 74 2c 20 31 2c 20 69 2a 69 53 74 65 70 29 3b  mt, 1, i*iStep);
9f60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
9f70: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32  d_int(g.pStmt, 2
9f80: 2c 20 28 69 2b 31 29 2a 69 53 74 65 70 29 3b 0a  , (i+1)*iStep);.
9f90: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
9fa0: 75 6e 28 29 3b 0a 20 20 20 20 69 66 28 20 61 43  un();.    if( aC
9fb0: 68 65 63 6b 5b 69 5d 21 3d 61 74 6f 69 28 67 2e  heck[i]!=atoi(g.
9fc0: 7a 52 65 73 75 6c 74 29 20 29 7b 0a 20 20 20 20  zResult) ){.    
9fd0: 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 43    fatal_error("C
9fe0: 6f 75 6e 74 20 64 69 73 61 67 72 65 65 20 73 74  ount disagree st
9ff0: 65 70 20 25 64 3a 20 25 64 2e 2e 25 64 2e 20 20  ep %d: %d..%d.  
a000: 25 64 20 76 73 20 25 64 22 2c 0a 20 20 20 20 20  %d vs %d",.     
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 2c 20               i, 
a020: 69 2a 69 53 74 65 70 2c 20 28 69 2b 31 29 2a 69  i*iStep, (i+1)*i
a030: 53 74 65 70 2c 20 61 43 68 65 63 6b 5b 69 5d 2c  Step, aCheck[i],
a040: 20 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29   atoi(g.zResult)
a050: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  );.    }.  }.  s
a060: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
a070: 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 67 2e 73  st();..  n = g.s
a080: 7a 54 65 73 74 2a 34 30 30 3b 0a 20 20 73 70 65  zTest*400;.  spe
a090: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
a0a0: 73 74 28 31 33 30 2c 20 22 25 64 20 74 68 72 65  st(130, "%d thre
a0b0: 65 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 69 6e  e-dimensional in
a0c0: 74 65 72 73 65 63 74 20 62 6f 78 20 71 75 65 72  tersect box quer
a0d0: 69 65 73 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65  ies", n);.  spee
a0e0: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22  dtest1_prepare("
a0f0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
a100: 46 52 4f 4d 20 72 74 31 20 57 48 45 52 45 20 78  FROM rt1 WHERE x
a110: 31 3e 3d 3f 31 20 41 4e 44 20 78 30 3c 3d 3f 32  1>=?1 AND x0<=?2
a120: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
a130: 20 20 20 20 20 20 20 22 20 41 4e 44 20 79 31 3e         " AND y1>
a140: 3d 3f 31 20 41 4e 44 20 79 30 3c 3d 3f 32 20 41  =?1 AND y0<=?2 A
a150: 4e 44 20 7a 31 3e 3d 3f 31 20 41 4e 44 20 7a 30  ND z1>=?1 AND z0
a160: 3c 3d 3f 32 22 29 3b 0a 20 20 69 53 74 65 70 20  <=?2");.  iStep 
a170: 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20 66  = mxCoord/n;.  f
a180: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
a190: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  ){.    sqlite3_b
a1a0: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
a1b0: 20 31 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20 20   1, i*iStep);.  
a1c0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
a1d0: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28  nt(g.pStmt, 2, (
a1e0: 69 2b 31 29 2a 69 53 74 65 70 29 3b 0a 20 20 20  i+1)*iStep);.   
a1f0: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
a200: 29 3b 0a 20 20 20 20 61 43 68 65 63 6b 5b 69 5d  );.    aCheck[i]
a210: 20 3d 20 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c   = atoi(g.zResul
a220: 74 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  t);.  }.  speedt
a230: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
a240: 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74  ..  n = g.szTest
a250: 2a 35 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73  *500;.  speedtes
a260: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 34  t1_begin_test(14
a270: 30 2c 20 22 25 64 20 72 6f 77 69 64 20 71 75 65  0, "%d rowid que
a280: 72 69 65 73 22 2c 20 6e 29 3b 0a 20 20 73 70 65  ries", n);.  spe
a290: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
a2a0: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 72  "SELECT * FROM r
a2b0: 74 31 20 57 48 45 52 45 20 69 64 3d 3f 31 22 29  t1 WHERE id=?1")
a2c0: 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d  ;.  for(i=1; i<=
a2d0: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  n; i++){.    sql
a2e0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
a2f0: 70 53 74 6d 74 2c 20 31 2c 20 69 29 3b 0a 20 20  pStmt, 1, i);.  
a300: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
a310: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
a320: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
a330: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
a340: 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45  ITE_ENABLE_RTREE
a350: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 65 73   */../*.** A tes
a360: 74 73 65 74 20 74 68 61 74 20 64 6f 65 73 20 6b  tset that does k
a370: 65 79 2f 76 61 6c 75 65 20 73 74 6f 72 61 67 65  ey/value storage
a380: 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68 20   on tables with 
a390: 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 2e 0a 2a 2a  many columns..**
a3a0: 20 54 68 69 73 20 69 73 20 74 68 65 20 6b 69 6e   This is the kin
a3b0: 64 20 6f 66 20 77 6f 72 6b 6c 6f 61 64 20 67 65  d of workload ge
a3c0: 6e 65 72 61 74 65 64 20 62 79 20 4f 52 4d 73 20  nerated by ORMs 
a3d0: 73 75 63 68 20 61 73 20 43 6f 72 65 44 61 74 61  such as CoreData
a3e0: 2e 0a 2a 2f 0a 76 6f 69 64 20 74 65 73 74 73 65  ..*/.void testse
a3f0: 74 5f 6f 72 6d 28 76 6f 69 64 29 7b 0a 20 20 75  t_orm(void){.  u
a400: 6e 73 69 67 6e 65 64 20 69 2c 20 6a 2c 20 6e 3b  nsigned i, j, n;
a410: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 52 6f 77  .  unsigned nRow
a420: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 78 31 2c  ;.  unsigned x1,
a430: 20 6c 65 6e 3b 0a 20 20 63 68 61 72 20 7a 4e 75   len;.  char zNu
a440: 6d 5b 32 30 30 30 5d 3b 20 20 20 20 20 20 20 20  m[2000];        
a450: 20 20 20 20 20 20 2f 2a 20 41 20 6e 75 6d 62 65        /* A numbe
a460: 72 20 6e 61 6d 65 20 2a 2f 0a 20 20 73 74 61 74  r name */.  stat
a470: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54  ic const char zT
a480: 79 70 65 5b 5d 20 3d 20 20 20 2f 2a 20 54 79 70  ype[] =   /* Typ
a490: 65 73 20 66 6f 72 20 61 6c 6c 20 6e 6f 6e 2d 50  es for all non-P
a4a0: 4b 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72  K columns, in or
a4b0: 64 65 72 20 2a 2f 0a 20 20 20 20 22 49 42 42 49  der */.    "IBBI
a4c0: 49 49 54 49 56 56 49 54 42 54 42 46 42 46 49 54  IITIVVITBTBFBFIT
a4d0: 54 46 42 54 42 56 42 56 49 46 54 42 42 46 49 54  TFBTBVBVIFTBBFIT
a4e0: 46 46 56 42 49 46 49 56 42 56 56 56 42 54 56 54  FFVBIFIVBVVVBTVT
a4f0: 49 42 42 46 46 49 56 49 42 54 42 22 0a 20 20 20  IBBFFIVIBTB".   
a500: 20 22 54 56 54 54 46 54 56 54 56 46 46 49 49 54   "TVTTFTVTVFFIIT
a510: 49 46 42 49 54 46 54 54 46 46 46 56 42 49 49 42  IFBITFTTFFFVBIIB
a520: 54 54 49 54 46 54 46 46 56 56 56 46 49 49 49 54  TTITFTFFVVVFIIIT
a530: 56 42 42 56 46 46 54 56 56 42 22 3b 0a 0a 20 20  VBBVFFTVVB";..  
a540: 6e 52 6f 77 20 3d 20 6e 20 3d 20 67 2e 73 7a 54  nRow = n = g.szT
a550: 65 73 74 2a 32 35 30 3b 0a 20 20 73 70 65 65 64  est*250;.  speed
a560: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
a570: 28 31 30 30 2c 20 22 46 69 6c 6c 20 25 64 20 72  (100, "Fill %d r
a580: 6f 77 73 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65  ows", n);.  spee
a590: 64 74 65 73 74 31 5f 65 78 65 63 28 0a 20 20 20  dtest1_exec(.   
a5a0: 20 22 42 45 47 49 4e 3b 22 0a 20 20 20 20 22 43   "BEGIN;".    "C
a5b0: 52 45 41 54 45 20 54 41 42 4c 45 20 5a 4c 4f 4f  REATE TABLE ZLOO
a5c0: 4b 53 4c 49 4b 45 43 4f 52 45 44 41 54 41 20 28  KSLIKECOREDATA (
a5d0: 22 0a 20 20 20 20 22 20 20 5a 50 4b 20 49 4e 54  ".    "  ZPK INT
a5e0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a5f0: 2c 22 0a 20 20 20 20 22 20 20 5a 54 45 52 4d 46  ,".    "  ZTERMF
a600: 49 54 54 49 4e 47 48 4f 55 53 49 4e 47 43 4f 4d  ITTINGHOUSINGCOM
a610: 4d 41 4e 44 20 49 4e 54 45 47 45 52 2c 22 0a 20  MAND INTEGER,". 
a620: 20 20 20 22 20 20 5a 42 52 49 45 46 47 4f 42 59     "  ZBRIEFGOBY
a630: 44 4f 44 47 45 52 48 45 49 47 48 54 20 42 4c 4f  DODGERHEIGHT BLO
a640: 42 2c 22 0a 20 20 20 20 22 20 20 5a 43 41 50 41  B,".    "  ZCAPA
a650: 42 4c 45 54 52 49 50 44 4f 4f 52 41 4c 4d 4f 4e  BLETRIPDOORALMON
a660: 44 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20  D BLOB,".    "  
a670: 5a 44 45 50 4f 53 49 54 50 41 49 52 43 4f 4c 4c  ZDEPOSITPAIRCOLL
a680: 45 47 45 43 4f 4d 45 54 20 49 4e 54 45 47 45 52  EGECOMET INTEGER
a690: 2c 22 0a 20 20 20 20 22 20 20 5a 46 52 41 4d 45  ,".    "  ZFRAME
a6a0: 45 4e 54 45 52 53 49 4d 50 4c 45 4d 4f 55 54 48  ENTERSIMPLEMOUTH
a6b0: 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22   INTEGER,".    "
a6c0: 20 20 5a 48 4f 50 45 46 55 4c 47 41 54 45 48 4f    ZHOPEFULGATEHO
a6d0: 4c 45 43 48 41 4c 4b 20 49 4e 54 45 47 45 52 2c  LECHALK INTEGER,
a6e0: 22 0a 20 20 20 20 22 20 20 5a 53 4c 45 45 50 59  ".    "  ZSLEEPY
a6f0: 55 53 45 52 47 52 41 4e 44 42 4f 57 4c 20 54 49  USERGRANDBOWL TI
a700: 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20  MESTAMP,".    " 
a710: 20 5a 44 45 57 50 45 41 43 48 43 41 52 45 45 52   ZDEWPEACHCAREER
a720: 43 45 4c 45 52 59 20 49 4e 54 45 47 45 52 2c 22  CELERY INTEGER,"
a730: 0a 20 20 20 20 22 20 20 5a 48 41 4e 47 45 52 4c  .    "  ZHANGERL
a740: 49 54 48 49 55 4d 44 49 4e 4e 45 52 4d 45 45 54  ITHIUMDINNERMEET
a750: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
a760: 20 20 5a 43 4c 55 42 52 45 4c 45 41 53 45 4c 49    ZCLUBRELEASELI
a770: 5a 41 52 44 41 44 56 49 43 45 20 56 41 52 43 48  ZARDADVICE VARCH
a780: 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 43 48 41  AR,".    "  ZCHA
a790: 52 47 45 43 4c 49 43 4b 48 55 4d 41 4e 45 48 49  RGECLICKHUMANEHI
a7a0: 52 45 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20  RE INTEGER,".   
a7b0: 20 22 20 20 5a 46 49 4e 47 45 52 44 55 45 50 49   "  ZFINGERDUEPI
a7c0: 5a 5a 41 4f 50 54 49 4f 4e 20 54 49 4d 45 53 54  ZZAOPTION TIMEST
a7d0: 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 46 4c  AMP,".    "  ZFL
a7e0: 59 49 4e 47 44 4f 43 54 4f 52 54 41 42 4c 45 4d  YINGDOCTORTABLEM
a7f0: 45 4c 4f 44 59 20 42 4c 4f 42 2c 22 0a 20 20 20  ELODY BLOB,".   
a800: 20 22 20 20 5a 4c 4f 4e 47 46 49 4e 4c 45 41 56   "  ZLONGFINLEAV
a810: 45 49 4d 41 47 45 4f 49 4c 20 54 49 4d 45 53 54  EIMAGEOIL TIMEST
a820: 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 46 41  AMP,".    "  ZFA
a830: 4d 49 4c 59 56 49 53 55 41 4c 4f 57 4e 45 52 4d  MILYVISUALOWNERM
a840: 41 54 54 45 52 20 42 4c 4f 42 2c 22 0a 20 20 20  ATTER BLOB,".   
a850: 20 22 20 20 5a 47 4f 4c 44 59 4f 55 4e 47 49 4e   "  ZGOLDYOUNGIN
a860: 49 54 49 41 4c 4e 4f 53 45 20 46 4c 4f 41 54 2c  ITIALNOSE FLOAT,
a870: 22 0a 20 20 20 20 22 20 20 5a 43 41 55 53 45 53  ".    "  ZCAUSES
a880: 41 4c 41 4d 49 54 45 52 4d 43 59 41 4e 20 42 4c  ALAMITERMCYAN BL
a890: 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 53 50 52  OB,".    "  ZSPR
a8a0: 45 41 44 4d 4f 54 4f 52 42 49 53 43 55 49 54 42  EADMOTORBISCUITB
a8b0: 41 43 4f 4e 20 46 4c 4f 41 54 2c 22 0a 20 20 20  ACON FLOAT,".   
a8c0: 20 22 20 20 5a 47 49 46 54 49 43 45 46 49 53 48   "  ZGIFTICEFISH
a8d0: 47 4c 55 45 48 41 49 52 20 49 4e 54 45 47 45 52  GLUEHAIR INTEGER
a8e0: 2c 22 0a 20 20 20 20 22 20 20 5a 4e 4f 54 49 43  ,".    "  ZNOTIC
a8f0: 45 50 45 41 52 50 4f 4c 49 43 59 4a 55 49 43 45  EPEARPOLICYJUICE
a900: 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20   TIMESTAMP,".   
a910: 20 22 20 20 5a 42 41 4e 4b 42 55 46 46 41 4c 4f   "  ZBANKBUFFALO
a920: 52 45 43 4f 56 45 52 4f 52 42 49 54 20 54 49 4d  RECOVERORBIT TIM
a930: 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20  ESTAMP,".    "  
a940: 5a 4c 4f 4e 47 44 49 45 54 45 53 53 41 59 4e 41  ZLONGDIETESSAYNA
a950: 54 55 52 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20  TURE FLOAT,".   
a960: 20 22 20 20 5a 41 43 54 49 4f 4e 52 41 4e 47 45   "  ZACTIONRANGE
a970: 45 4c 45 47 41 4e 54 4e 45 55 54 52 4f 4e 20 42  ELEGANTNEUTRON B
a980: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 43 41  LOB,".    "  ZCA
a990: 44 45 54 42 52 49 47 48 54 50 4c 41 4e 45 54 42  DETBRIGHTPLANETB
a9a0: 41 4e 4b 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a  ANK TIMESTAMP,".
a9b0: 20 20 20 20 22 20 20 5a 41 49 52 46 4f 52 47 49      "  ZAIRFORGI
a9c0: 56 45 48 45 41 44 46 52 4f 47 20 42 4c 4f 42 2c  VEHEADFROG BLOB,
a9d0: 22 0a 20 20 20 20 22 20 20 5a 53 48 41 52 4b 4a  ".    "  ZSHARKJ
a9e0: 55 53 54 46 52 55 49 54 4d 4f 56 49 45 20 56 41  USTFRUITMOVIE VA
a9f0: 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a  RCHAR,".    "  Z
aa00: 46 41 52 4d 45 52 4d 4f 52 4e 49 4e 47 4d 49 52  FARMERMORNINGMIR
aa10: 52 4f 52 43 4f 4e 43 45 52 4e 20 42 4c 4f 42 2c  RORCONCERN BLOB,
aa20: 22 0a 20 20 20 20 22 20 20 5a 57 4f 4f 44 50 4f  ".    "  ZWOODPO
aa30: 45 54 52 59 43 4f 42 42 4c 45 52 42 45 4e 43 48  ETRYCOBBLERBENCH
aa40: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
aa50: 20 20 5a 48 41 46 4e 49 55 4d 53 43 52 49 50 54    ZHAFNIUMSCRIPT
aa60: 53 41 4c 41 44 4d 4f 54 4f 52 20 49 4e 54 45 47  SALADMOTOR INTEG
aa70: 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 50 52 4f  ER,".    "  ZPRO
aa80: 42 4c 45 4d 43 4c 55 42 50 4f 50 4f 56 45 52 4a  BLEMCLUBPOPOVERJ
aa90: 45 4c 4c 59 20 46 4c 4f 41 54 2c 22 0a 20 20 20  ELLY FLOAT,".   
aaa0: 20 22 20 20 5a 45 49 47 48 54 4c 45 41 44 45 52   "  ZEIGHTLEADER
aab0: 57 4f 52 4b 45 52 4d 4f 53 54 20 54 49 4d 45 53  WORKERMOST TIMES
aac0: 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 47  TAMP,".    "  ZG
aad0: 4c 41 53 53 52 45 53 45 52 56 45 42 41 52 49 55  LASSRESERVEBARIU
aae0: 4d 4d 45 41 4c 20 42 4c 4f 42 2c 22 0a 20 20 20  MMEAL BLOB,".   
aaf0: 20 22 20 20 5a 43 4c 41 4d 42 49 54 41 52 55 47   "  ZCLAMBITARUG
ab00: 55 4c 41 46 41 4a 49 54 41 20 42 4c 4f 42 2c 22  ULAFAJITA BLOB,"
ab10: 0a 20 20 20 20 22 20 20 5a 44 45 43 41 44 45 4a  .    "  ZDECADEJ
ab20: 4f 59 4f 55 53 57 41 56 45 48 41 42 49 54 20 46  OYOUSWAVEHABIT F
ab30: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 43  LOAT,".    "  ZC
ab40: 4f 4d 50 41 4e 59 53 55 4d 4d 45 52 46 49 42 45  OMPANYSUMMERFIBE
ab50: 52 45 4c 46 20 49 4e 54 45 47 45 52 2c 22 0a 20  RELF INTEGER,". 
ab60: 20 20 20 22 20 20 5a 54 52 45 41 54 54 45 53 54     "  ZTREATTEST
ab70: 51 55 49 4c 4c 43 48 41 52 47 45 20 54 49 4d 45  QUILLCHARGE TIME
ab80: 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a  STAMP,".    "  Z
ab90: 42 52 4f 57 42 41 4c 41 4e 43 45 4b 45 59 43 48  BROWBALANCEKEYCH
aba0: 4f 57 44 45 52 20 46 4c 4f 41 54 2c 22 0a 20 20  OWDER FLOAT,".  
abb0: 20 20 22 20 20 5a 50 45 41 43 48 43 4f 50 50 45    "  ZPEACHCOPPE
abc0: 52 44 49 4e 4e 45 52 4c 41 4b 45 20 46 4c 4f 41  RDINNERLAKE FLOA
abd0: 54 2c 22 0a 20 20 20 20 22 20 20 5a 44 52 59 57  T,".    "  ZDRYW
abe0: 41 4c 4c 42 45 59 4f 4e 44 42 52 4f 57 4e 42 4f  ALLBEYONDBROWNBO
abf0: 57 4c 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20  WL VARCHAR,".   
ac00: 20 22 20 20 5a 42 45 4c 4c 59 43 52 41 53 48 49   "  ZBELLYCRASHI
ac10: 54 45 4d 4c 41 43 4b 20 42 4c 4f 42 2c 22 0a 20  TEMLACK BLOB,". 
ac20: 20 20 20 22 20 20 5a 54 45 4e 4e 49 53 43 59 43     "  ZTENNISCYC
ac30: 4c 45 42 49 4c 4c 4f 46 46 49 43 45 52 20 49 4e  LEBILLOFFICER IN
ac40: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
ac50: 4d 41 4c 4c 45 51 55 49 50 54 48 41 4e 4b 53 47  MALLEQUIPTHANKSG
ac60: 4c 55 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  LUE FLOAT,".    
ac70: 22 20 20 5a 4d 49 53 53 52 45 50 4c 59 48 55 4d  "  ZMISSREPLYHUM
ac80: 41 4e 4c 49 56 49 4e 47 20 49 4e 54 45 47 45 52  ANLIVING INTEGER
ac90: 2c 22 0a 20 20 20 20 22 20 20 5a 4b 49 57 49 56  ,".    "  ZKIWIV
aca0: 49 53 55 41 4c 50 52 49 44 45 41 50 50 4c 45 20  ISUALPRIDEAPPLE 
acb0: 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20  VARCHAR,".    " 
acc0: 20 5a 57 49 53 48 48 49 54 53 4b 49 4e 4d 4f 54   ZWISHHITSKINMOT
acd0: 4f 52 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20  OR BLOB,".    " 
ace0: 20 5a 43 41 4c 4d 52 41 43 43 4f 4f 4e 50 52 4f   ZCALMRACCOONPRO
acf0: 47 52 41 4d 44 45 42 49 54 20 56 41 52 43 48 41  GRAMDEBIT VARCHA
ad00: 52 2c 22 0a 20 20 20 20 22 20 20 5a 53 48 49 4e  R,".    "  ZSHIN
ad10: 59 41 53 53 49 53 54 4c 49 56 49 4e 47 43 52 41  YASSISTLIVINGCRA
ad20: 42 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20  B VARCHAR,".    
ad30: 22 20 20 5a 52 45 53 4f 4c 56 45 57 52 49 53 54  "  ZRESOLVEWRIST
ad40: 57 52 41 50 41 50 50 4c 45 20 56 41 52 43 48 41  WRAPAPPLE VARCHA
ad50: 52 2c 22 0a 20 20 20 20 22 20 20 5a 41 50 50 45  R,".    "  ZAPPE
ad60: 41 4c 53 49 4d 50 4c 45 53 45 43 4f 4e 44 48 4f  ALSIMPLESECONDHO
ad70: 55 53 49 4e 47 20 42 4c 4f 42 2c 22 0a 20 20 20  USING BLOB,".   
ad80: 20 22 20 20 5a 43 4f 52 4e 45 52 41 4e 43 48 4f   "  ZCORNERANCHO
ad90: 52 54 41 50 45 44 49 56 45 52 20 54 49 4d 45 53  RTAPEDIVER TIMES
ada0: 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 4d  TAMP,".    "  ZM
adb0: 45 4d 4f 52 59 52 45 51 55 45 53 54 53 4f 55 52  EMORYREQUESTSOUR
adc0: 43 45 42 49 47 20 56 41 52 43 48 41 52 2c 22 0a  CEBIG VARCHAR,".
add0: 20 20 20 20 22 20 20 5a 54 52 59 46 41 43 54 4b      "  ZTRYFACTK
ade0: 45 45 50 4d 49 4c 4b 20 54 49 4d 45 53 54 41 4d  EEPMILK TIMESTAM
adf0: 50 2c 22 0a 20 20 20 20 22 20 20 5a 44 49 56 45  P,".    "  ZDIVE
ae00: 52 50 41 49 4e 54 4c 45 41 54 48 45 52 45 41 53  RPAINTLEATHEREAS
ae10: 59 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20  Y INTEGER,".    
ae20: 22 20 20 5a 53 4f 52 54 4d 49 53 54 59 51 55 4f  "  ZSORTMISTYQUO
ae30: 54 45 43 41 42 42 41 47 45 20 42 4c 4f 42 2c 22  TECABBAGE BLOB,"
ae40: 0a 20 20 20 20 22 20 20 5a 54 55 4e 45 47 41 53  .    "  ZTUNEGAS
ae50: 42 55 46 46 41 4c 4f 43 41 50 49 54 41 4c 20 42  BUFFALOCAPITAL B
ae60: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 46 49  LOB,".    "  ZFI
ae70: 4c 4c 53 54 4f 50 4c 41 57 4a 4f 59 46 55 4c 20  LLSTOPLAWJOYFUL 
ae80: 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a  FLOAT,".    "  Z
ae90: 53 54 45 45 4c 43 41 52 45 46 55 4c 50 4c 41 54  STEELCAREFULPLAT
aea0: 45 4e 55 4d 42 45 52 20 46 4c 4f 41 54 2c 22 0a  ENUMBER FLOAT,".
aeb0: 20 20 20 20 22 20 20 5a 47 49 56 45 56 49 56 49      "  ZGIVEVIVI
aec0: 44 44 49 56 49 4e 45 4d 45 41 4e 49 4e 47 20 49  DDIVINEMEANING I
aed0: 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20  NTEGER,".    "  
aee0: 5a 54 52 45 41 54 50 41 43 4b 46 55 54 55 52 45  ZTREATPACKFUTURE
aef0: 43 4f 4e 56 45 52 54 20 56 41 52 43 48 41 52 2c  CONVERT VARCHAR,
af00: 22 0a 20 20 20 20 22 20 20 5a 43 41 4c 4d 4c 59  ".    "  ZCALMLY
af10: 47 45 4d 46 49 4e 49 53 48 45 46 46 45 43 54 20  GEMFINISHEFFECT 
af20: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
af30: 20 5a 43 41 42 42 41 47 45 53 4f 43 4b 45 41 53   ZCABBAGESOCKEAS
af40: 45 4d 49 4e 55 54 45 20 42 4c 4f 42 2c 22 0a 20  EMINUTE BLOB,". 
af50: 20 20 20 22 20 20 5a 50 4c 41 4e 45 54 46 41 4d     "  ZPLANETFAM
af60: 49 4c 59 50 55 52 45 4d 45 4d 4f 52 59 20 54 49  ILYPUREMEMORY TI
af70: 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20  MESTAMP,".    " 
af80: 20 5a 4d 45 52 52 59 43 52 41 43 4b 54 52 41 49   ZMERRYCRACKTRAI
af90: 4e 4c 45 41 44 45 52 20 42 4c 4f 42 2c 22 0a 20  NLEADER BLOB,". 
afa0: 20 20 20 22 20 20 5a 4d 49 4e 4f 52 57 41 59 50     "  ZMINORWAYP
afb0: 41 50 45 52 43 4c 41 53 53 59 20 54 49 4d 45 53  APERCLASSY TIMES
afc0: 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 45  TAMP,".    "  ZE
afd0: 41 47 4c 45 4c 49 4e 45 4d 49 4e 45 4d 41 49 4c  AGLELINEMINEMAIL
afe0: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
aff0: 20 20 5a 52 45 53 4f 52 54 59 41 52 44 47 52 45    ZRESORTYARDGRE
b000: 45 4e 4c 45 54 20 54 49 4d 45 53 54 41 4d 50 2c  ENLET TIMESTAMP,
b010: 22 0a 20 20 20 20 22 20 20 5a 59 41 52 44 4f 52  ".    "  ZYARDOR
b020: 45 47 41 4e 4f 56 49 56 49 44 4a 45 57 45 4c 20  EGANOVIVIDJEWEL 
b030: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
b040: 22 20 20 5a 50 55 52 45 43 41 4b 45 56 49 56 49  "  ZPURECAKEVIVI
b050: 44 4e 45 41 54 4c 59 20 46 4c 4f 41 54 2c 22 0a  DNEATLY FLOAT,".
b060: 20 20 20 20 22 20 20 5a 41 53 4b 43 4f 4e 54 41      "  ZASKCONTA
b070: 43 54 4d 4f 4e 49 54 4f 52 46 55 4e 20 54 49 4d  CTMONITORFUN TIM
b080: 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20  ESTAMP,".    "  
b090: 5a 4d 4f 56 45 57 48 4f 47 41 4d 4d 41 49 4e 43  ZMOVEWHOGAMMAINC
b0a0: 48 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20  H VARCHAR,".    
b0b0: 22 20 20 5a 4c 45 54 54 55 43 45 42 49 52 44 4d  "  ZLETTUCEBIRDM
b0c0: 45 45 54 44 45 42 41 54 45 20 54 49 4d 45 53 54  EETDEBATE TIMEST
b0d0: 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 47 45  AMP,".    "  ZGE
b0e0: 4e 45 4e 41 54 55 52 41 4c 48 45 41 52 49 4e 47  NENATURALHEARING
b0f0: 4b 49 54 45 20 56 41 52 43 48 41 52 2c 22 0a 20  KITE VARCHAR,". 
b100: 20 20 20 22 20 20 5a 4d 55 46 46 49 4e 44 52 59     "  ZMUFFINDRY
b110: 45 52 44 52 41 57 46 4f 52 54 55 4e 45 20 46 4c  ERDRAWFORTUNE FL
b120: 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 47 52  OAT,".    "  ZGR
b130: 41 59 53 55 52 56 45 59 57 49 52 45 4c 4f 56 45  AYSURVEYWIRELOVE
b140: 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20   FLOAT,".    "  
b150: 5a 50 4c 49 45 52 53 50 52 49 4e 54 41 53 4b 4f  ZPLIERSPRINTASKO
b160: 52 45 47 41 4e 4f 20 49 4e 54 45 47 45 52 2c 22  REGANO INTEGER,"
b170: 0a 20 20 20 20 22 20 20 5a 54 52 41 56 45 4c 44  .    "  ZTRAVELD
b180: 52 49 56 45 52 43 4f 4e 54 45 53 54 4c 49 4c 59  RIVERCONTESTLILY
b190: 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22   INTEGER,".    "
b1a0: 20 20 5a 48 55 4d 4f 52 53 50 49 43 45 53 41 4e    ZHUMORSPICESAN
b1b0: 44 4b 49 44 4e 45 59 20 54 49 4d 45 53 54 41 4d  DKIDNEY TIMESTAM
b1c0: 50 2c 22 0a 20 20 20 20 22 20 20 5a 41 52 53 45  P,".    "  ZARSE
b1d0: 4e 49 43 53 41 4d 50 4c 45 57 41 49 54 4d 55 4f  NICSAMPLEWAITMUO
b1e0: 4e 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20  N INTEGER,".    
b1f0: 22 20 20 5a 4c 41 43 45 41 44 44 52 45 53 53 47  "  ZLACEADDRESSG
b200: 52 4f 55 4e 44 43 41 52 45 46 55 4c 20 46 4c 4f  ROUNDCAREFUL FLO
b210: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 42 41 4d  AT,".    "  ZBAM
b220: 42 4f 4f 4d 45 53 53 57 41 53 41 42 49 45 56 45  BOOMESSWASABIEVE
b230: 4e 49 4e 47 20 42 4c 4f 42 2c 22 0a 20 20 20 20  NING BLOB,".    
b240: 22 20 20 5a 4f 4e 45 52 45 4c 45 41 53 45 41 56  "  ZONERELEASEAV
b250: 45 52 41 47 45 4e 55 52 53 45 20 49 4e 54 45 47  ERAGENURSE INTEG
b260: 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 52 41 44  ER,".    "  ZRAD
b270: 49 41 4e 54 57 48 45 4e 54 52 59 43 41 52 44 20  IANTWHENTRYCARD 
b280: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
b290: 22 20 20 5a 52 45 57 41 52 44 49 4e 53 49 44 45  "  ZREWARDINSIDE
b2a0: 4d 41 4e 47 4f 49 4e 54 45 4e 53 45 20 46 4c 4f  MANGOINTENSE FLO
b2b0: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 4e 45 41  AT,".    "  ZNEA
b2c0: 54 53 54 45 57 50 41 52 54 49 52 4f 4e 20 54 49  TSTEWPARTIRON TI
b2d0: 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20  MESTAMP,".    " 
b2e0: 20 5a 4f 55 54 53 49 44 45 50 45 41 48 45 4e 43   ZOUTSIDEPEAHENC
b2f0: 4f 55 4e 54 49 43 45 20 54 49 4d 45 53 54 41 4d  OUNTICE TIMESTAM
b300: 50 2c 22 0a 20 20 20 20 22 20 20 5a 43 52 45 41  P,".    "  ZCREA
b310: 4d 45 56 45 4e 49 4e 47 4c 49 50 42 52 41 4e 43  MEVENINGLIPBRANC
b320: 48 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20  H FLOAT,".    " 
b330: 20 5a 57 48 41 4c 45 4d 41 54 48 41 56 4f 43 41   ZWHALEMATHAVOCA
b340: 44 4f 43 4f 50 50 45 52 20 46 4c 4f 41 54 2c 22  DOCOPPER FLOAT,"
b350: 0a 20 20 20 20 22 20 20 5a 4c 49 46 45 55 53 45  .    "  ZLIFEUSE
b360: 4c 45 41 46 59 42 45 4c 4c 20 46 4c 4f 41 54 2c  LEAFYBELL FLOAT,
b370: 22 0a 20 20 20 20 22 20 20 5a 57 45 41 4c 54 48  ".    "  ZWEALTH
b380: 4c 49 4e 45 4e 47 4c 45 45 46 55 4c 44 41 59 20  LINENGLEEFULDAY 
b390: 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20  VARCHAR,".    " 
b3a0: 20 5a 46 41 43 45 49 4e 56 49 54 45 54 41 4c 4b   ZFACEINVITETALK
b3b0: 47 4f 4c 44 20 42 4c 4f 42 2c 22 0a 20 20 20 20  GOLD BLOB,".    
b3c0: 22 20 20 5a 57 45 53 54 41 4d 4f 55 4e 54 41 46  "  ZWESTAMOUNTAF
b3d0: 46 45 43 54 48 45 41 52 49 4e 47 20 49 4e 54 45  FECTHEARING INTE
b3e0: 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 44 45  GER,".    "  ZDE
b3f0: 4c 41 59 4f 55 54 43 4f 4d 45 48 4f 52 4e 41 47  LAYOUTCOMEHORNAG
b400: 45 4e 43 59 20 49 4e 54 45 47 45 52 2c 22 0a 20  ENCY INTEGER,". 
b410: 20 20 20 22 20 20 5a 42 49 47 54 48 49 4e 4b 43     "  ZBIGTHINKC
b420: 4f 4e 56 45 52 54 45 43 4f 4e 4f 4d 59 20 42 4c  ONVERTECONOMY BL
b430: 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 42 41 53  OB,".    "  ZBAS
b440: 45 47 4f 55 44 41 52 45 47 55 4c 41 52 46 4f 52  EGOUDAREGULARFOR
b450: 47 49 56 45 20 54 49 4d 45 53 54 41 4d 50 2c 22  GIVE TIMESTAMP,"
b460: 0a 20 20 20 20 22 20 20 5a 50 41 54 54 45 52 4e  .    "  ZPATTERN
b470: 43 4c 4f 52 49 4e 45 47 52 41 4e 44 43 4f 4c 42  CLORINEGRANDCOLB
b480: 59 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  Y TIMESTAMP,".  
b490: 20 20 22 20 20 5a 43 59 41 4e 42 41 53 45 46 45    "  ZCYANBASEFE
b4a0: 45 44 41 44 52 4f 49 54 20 49 4e 54 45 47 45 52  EDADROIT INTEGER
b4b0: 2c 22 0a 20 20 20 20 22 20 20 5a 43 41 52 52 59  ,".    "  ZCARRY
b4c0: 46 4c 4f 4f 52 4d 49 4e 4e 4f 57 44 52 41 47 4f  FLOORMINNOWDRAGO
b4d0: 4e 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  N TIMESTAMP,".  
b4e0: 20 20 22 20 20 5a 49 4d 41 47 45 50 45 4e 43 49    "  ZIMAGEPENCI
b4f0: 4c 4f 54 48 45 52 42 4f 54 54 4f 4d 20 46 4c 4f  LOTHERBOTTOM FLO
b500: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 58 45 4e  AT,".    "  ZXEN
b510: 4f 4e 46 4c 49 47 48 54 50 41 4c 45 41 50 50 4c  ONFLIGHTPALEAPPL
b520: 45 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  E TIMESTAMP,".  
b530: 20 20 22 20 20 5a 48 45 52 52 49 4e 47 4a 4f 4b    "  ZHERRINGJOK
b540: 45 46 45 41 54 55 52 45 48 4f 50 45 46 55 4c 20  EFEATUREHOPEFUL 
b550: 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a  FLOAT,".    "  Z
b560: 43 41 50 59 45 41 52 4c 59 52 49 56 45 54 42 52  CAPYEARLYRIVETBR
b570: 55 53 48 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  USH FLOAT,".    
b580: 22 20 20 5a 41 47 45 52 45 45 44 46 52 4f 47 42  "  ZAGEREEDFROGB
b590: 41 53 4b 45 54 20 56 41 52 43 48 41 52 2c 22 0a  ASKET VARCHAR,".
b5a0: 20 20 20 20 22 20 20 5a 55 53 55 41 4c 42 4f 44      "  ZUSUALBOD
b5b0: 59 48 41 4c 49 42 55 54 44 49 41 4d 4f 4e 44 20  YHALIBUTDIAMOND 
b5c0: 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20  VARCHAR,".    " 
b5d0: 20 5a 46 4f 4f 54 54 41 50 57 4f 52 44 45 4e 54   ZFOOTTAPWORDENT
b5e0: 52 59 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20  RY VARCHAR,".   
b5f0: 20 22 20 20 5a 44 49 53 48 4b 45 45 50 42 4c 45   "  ZDISHKEEPBLE
b600: 53 54 4d 4f 4e 49 54 4f 52 20 46 4c 4f 41 54 2c  STMONITOR FLOAT,
b610: 22 0a 20 20 20 20 22 20 20 5a 42 52 4f 41 44 41  ".    "  ZBROADA
b620: 42 4c 45 53 4f 4c 49 44 43 41 53 55 41 4c 20 49  BLESOLIDCASUAL I
b630: 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20  NTEGER,".    "  
b640: 5a 53 51 55 41 52 45 47 4c 45 45 46 55 4c 43 48  ZSQUAREGLEEFULCH
b650: 49 4c 44 4c 49 47 48 54 20 49 4e 54 45 47 45 52  ILDLIGHT INTEGER
b660: 2c 22 0a 20 20 20 20 22 20 20 5a 48 4f 4c 49 44  ,".    "  ZHOLID
b670: 41 59 48 45 41 44 50 4f 4e 59 44 45 54 41 49 4c  AYHEADPONYDETAIL
b680: 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22   INTEGER,".    "
b690: 20 20 5a 47 45 4e 45 52 41 4c 52 45 53 4f 52 54    ZGENERALRESORT
b6a0: 53 4b 59 4f 50 45 4e 20 54 49 4d 45 53 54 41 4d  SKYOPEN TIMESTAM
b6b0: 50 2c 22 0a 20 20 20 20 22 20 20 5a 47 4c 41 44  P,".    "  ZGLAD
b6c0: 53 50 52 41 59 4b 49 44 4e 45 59 47 55 50 50 59  SPRAYKIDNEYGUPPY
b6d0: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
b6e0: 20 20 5a 53 57 49 4d 48 45 41 56 59 4d 45 4e 54    ZSWIMHEAVYMENT
b6f0: 49 4f 4e 4b 49 4e 44 20 42 4c 4f 42 2c 22 0a 20  IONKIND BLOB,". 
b700: 20 20 20 22 20 20 5a 4d 45 53 53 59 53 55 4c 46     "  ZMESSYSULF
b710: 55 52 44 52 45 41 4d 46 45 53 54 49 56 45 20 42  URDREAMFESTIVE B
b720: 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 53 4b  LOB,".    "  ZSK
b730: 59 53 4b 59 43 4c 41 53 53 49 43 42 52 49 45 46  YSKYCLASSICBRIEF
b740: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
b750: 20 20 5a 44 49 4c 4c 41 53 4b 48 4f 4b 49 4c 45    ZDILLASKHOKILE
b760: 4d 4f 4e 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  MON FLOAT,".    
b770: 22 20 20 5a 4a 55 4e 49 4f 52 53 48 4f 57 50 52  "  ZJUNIORSHOWPR
b780: 45 53 53 4e 4f 56 41 20 46 4c 4f 41 54 2c 22 0a  ESSNOVA FLOAT,".
b790: 20 20 20 20 22 20 20 5a 53 49 5a 45 54 4f 45 41      "  ZSIZETOEA
b7a0: 57 41 52 44 46 52 45 53 48 20 54 49 4d 45 53 54  WARDFRESH TIMEST
b7b0: 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 4b 45  AMP,".    "  ZKE
b7c0: 59 46 41 49 4c 41 50 52 49 43 4f 54 4d 45 54 41  YFAILAPRICOTMETA
b7d0: 4c 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20  L VARCHAR,".    
b7e0: 22 20 20 5a 48 41 4e 44 59 52 45 50 41 49 52 50  "  ZHANDYREPAIRP
b7f0: 52 4f 54 4f 4e 41 49 52 50 4f 52 54 20 56 41 52  ROTONAIRPORT VAR
b800: 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 50  CHAR,".    "  ZP
b810: 4f 53 54 50 52 4f 54 45 49 4e 48 41 4e 44 4c 45  OSTPROTEINHANDLE
b820: 41 43 54 4f 52 20 42 4c 4f 42 22 0a 20 20 20 20  ACTOR BLOB".    
b830: 22 29 3b 22 0a 20 20 29 3b 0a 20 20 73 70 65 65  ");".  );.  spee
b840: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
b850: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
b860: 20 5a 4c 4f 4f 4b 53 4c 49 4b 45 43 4f 52 45 44   ZLOOKSLIKECORED
b870: 41 54 41 28 5a 50 4b 2c 5a 41 49 52 46 4f 52 47  ATA(ZPK,ZAIRFORG
b880: 49 56 45 48 45 41 44 46 52 4f 47 2c 22 0a 20 20  IVEHEADFROG,".  
b890: 20 20 22 5a 47 49 46 54 49 43 45 46 49 53 48 47    "ZGIFTICEFISHG
b8a0: 4c 55 45 48 41 49 52 2c 5a 44 45 4c 41 59 4f 55  LUEHAIR,ZDELAYOU
b8b0: 54 43 4f 4d 45 48 4f 52 4e 41 47 45 4e 43 59 2c  TCOMEHORNAGENCY,
b8c0: 5a 53 4c 45 45 50 59 55 53 45 52 47 52 41 4e 44  ZSLEEPYUSERGRAND
b8d0: 42 4f 57 4c 2c 22 0a 20 20 20 20 22 5a 47 4c 41  BOWL,".    "ZGLA
b8e0: 53 53 52 45 53 45 52 56 45 42 41 52 49 55 4d 4d  SSRESERVEBARIUMM
b8f0: 45 41 4c 2c 5a 42 52 49 45 46 47 4f 42 59 44 4f  EAL,ZBRIEFGOBYDO
b900: 44 47 45 52 48 45 49 47 48 54 2c 22 0a 20 20 20  DGERHEIGHT,".   
b910: 20 22 5a 42 41 4d 42 4f 4f 4d 45 53 53 57 41 53   "ZBAMBOOMESSWAS
b920: 41 42 49 45 56 45 4e 49 4e 47 2c 5a 46 41 52 4d  ABIEVENING,ZFARM
b930: 45 52 4d 4f 52 4e 49 4e 47 4d 49 52 52 4f 52 43  ERMORNINGMIRRORC
b940: 4f 4e 43 45 52 4e 2c 22 0a 20 20 20 20 22 5a 54  ONCERN,".    "ZT
b950: 52 45 41 54 50 41 43 4b 46 55 54 55 52 45 43 4f  REATPACKFUTURECO
b960: 4e 56 45 52 54 2c 5a 43 41 55 53 45 53 41 4c 41  NVERT,ZCAUSESALA
b970: 4d 49 54 45 52 4d 43 59 41 4e 2c 5a 43 41 4c 4d  MITERMCYAN,ZCALM
b980: 52 41 43 43 4f 4f 4e 50 52 4f 47 52 41 4d 44 45  RACCOONPROGRAMDE
b990: 42 49 54 2c 22 0a 20 20 20 20 22 5a 48 4f 4c 49  BIT,".    "ZHOLI
b9a0: 44 41 59 48 45 41 44 50 4f 4e 59 44 45 54 41 49  DAYHEADPONYDETAI
b9b0: 4c 2c 5a 57 4f 4f 44 50 4f 45 54 52 59 43 4f 42  L,ZWOODPOETRYCOB
b9c0: 42 4c 45 52 42 45 4e 43 48 2c 5a 48 41 46 4e 49  BLERBENCH,ZHAFNI
b9d0: 55 4d 53 43 52 49 50 54 53 41 4c 41 44 4d 4f 54  UMSCRIPTSALADMOT
b9e0: 4f 52 2c 22 0a 20 20 20 20 22 5a 55 53 55 41 4c  OR,".    "ZUSUAL
b9f0: 42 4f 44 59 48 41 4c 49 42 55 54 44 49 41 4d 4f  BODYHALIBUTDIAMO
ba00: 4e 44 2c 5a 4f 55 54 53 49 44 45 50 45 41 48 45  ND,ZOUTSIDEPEAHE
ba10: 4e 43 4f 55 4e 54 49 43 45 2c 5a 44 49 56 45 52  NCOUNTICE,ZDIVER
ba20: 50 41 49 4e 54 4c 45 41 54 48 45 52 45 41 53 59  PAINTLEATHEREASY
ba30: 2c 22 0a 20 20 20 20 22 5a 57 45 53 54 41 4d 4f  ,".    "ZWESTAMO
ba40: 55 4e 54 41 46 46 45 43 54 48 45 41 52 49 4e 47  UNTAFFECTHEARING
ba50: 2c 5a 53 49 5a 45 54 4f 45 41 57 41 52 44 46 52  ,ZSIZETOEAWARDFR
ba60: 45 53 48 2c 5a 44 45 57 50 45 41 43 48 43 41 52  ESH,ZDEWPEACHCAR
ba70: 45 45 52 43 45 4c 45 52 59 2c 22 0a 20 20 20 20  EERCELERY,".    
ba80: 22 5a 53 54 45 45 4c 43 41 52 45 46 55 4c 50 4c  "ZSTEELCAREFULPL
ba90: 41 54 45 4e 55 4d 42 45 52 2c 5a 43 59 41 4e 42  ATENUMBER,ZCYANB
baa0: 41 53 45 46 45 45 44 41 44 52 4f 49 54 2c 5a 43  ASEFEEDADROIT,ZC
bab0: 41 4c 4d 4c 59 47 45 4d 46 49 4e 49 53 48 45 46  ALMLYGEMFINISHEF
bac0: 46 45 43 54 2c 22 0a 20 20 20 20 22 5a 48 41 4e  FECT,".    "ZHAN
bad0: 44 59 52 45 50 41 49 52 50 52 4f 54 4f 4e 41 49  DYREPAIRPROTONAI
bae0: 52 50 4f 52 54 2c 5a 47 45 4e 45 4e 41 54 55 52  RPORT,ZGENENATUR
baf0: 41 4c 48 45 41 52 49 4e 47 4b 49 54 45 2c 5a 42  ALHEARINGKITE,ZB
bb00: 52 4f 41 44 41 42 4c 45 53 4f 4c 49 44 43 41 53  ROADABLESOLIDCAS
bb10: 55 41 4c 2c 22 0a 20 20 20 20 22 5a 50 4f 53 54  UAL,".    "ZPOST
bb20: 50 52 4f 54 45 49 4e 48 41 4e 44 4c 45 41 43 54  PROTEINHANDLEACT
bb30: 4f 52 2c 5a 4c 41 43 45 41 44 44 52 45 53 53 47  OR,ZLACEADDRESSG
bb40: 52 4f 55 4e 44 43 41 52 45 46 55 4c 2c 5a 49 4d  ROUNDCAREFUL,ZIM
bb50: 41 47 45 50 45 4e 43 49 4c 4f 54 48 45 52 42 4f  AGEPENCILOTHERBO
bb60: 54 54 4f 4d 2c 22 0a 20 20 20 20 22 5a 50 52 4f  TTOM,".    "ZPRO
bb70: 42 4c 45 4d 43 4c 55 42 50 4f 50 4f 56 45 52 4a  BLEMCLUBPOPOVERJ
bb80: 45 4c 4c 59 2c 5a 50 41 54 54 45 52 4e 43 4c 4f  ELLY,ZPATTERNCLO
bb90: 52 49 4e 45 47 52 41 4e 44 43 4f 4c 42 59 2c 5a  RINEGRANDCOLBY,Z
bba0: 4e 45 41 54 53 54 45 57 50 41 52 54 49 52 4f 4e  NEATSTEWPARTIRON
bbb0: 2c 22 0a 20 20 20 20 22 5a 41 50 50 45 41 4c 53  ,".    "ZAPPEALS
bbc0: 49 4d 50 4c 45 53 45 43 4f 4e 44 48 4f 55 53 49  IMPLESECONDHOUSI
bbd0: 4e 47 2c 5a 4d 4f 56 45 57 48 4f 47 41 4d 4d 41  NG,ZMOVEWHOGAMMA
bbe0: 49 4e 43 48 2c 5a 54 45 4e 4e 49 53 43 59 43 4c  INCH,ZTENNISCYCL
bbf0: 45 42 49 4c 4c 4f 46 46 49 43 45 52 2c 22 0a 20  EBILLOFFICER,". 
bc00: 20 20 20 22 5a 53 48 41 52 4b 4a 55 53 54 46 52     "ZSHARKJUSTFR
bc10: 55 49 54 4d 4f 56 49 45 2c 5a 4b 45 59 46 41 49  UITMOVIE,ZKEYFAI
bc20: 4c 41 50 52 49 43 4f 54 4d 45 54 41 4c 2c 5a 43  LAPRICOTMETAL,ZC
bc30: 4f 4d 50 41 4e 59 53 55 4d 4d 45 52 46 49 42 45  OMPANYSUMMERFIBE
bc40: 52 45 4c 46 2c 22 0a 20 20 20 20 22 5a 54 45 52  RELF,".    "ZTER
bc50: 4d 46 49 54 54 49 4e 47 48 4f 55 53 49 4e 47 43  MFITTINGHOUSINGC
bc60: 4f 4d 4d 41 4e 44 2c 5a 52 45 53 4f 52 54 59 41  OMMAND,ZRESORTYA
bc70: 52 44 47 52 45 45 4e 4c 45 54 2c 5a 43 41 42 42  RDGREENLET,ZCABB
bc80: 41 47 45 53 4f 43 4b 45 41 53 45 4d 49 4e 55 54  AGESOCKEASEMINUT
bc90: 45 2c 22 0a 20 20 20 20 22 5a 53 51 55 41 52 45  E,".    "ZSQUARE
bca0: 47 4c 45 45 46 55 4c 43 48 49 4c 44 4c 49 47 48  GLEEFULCHILDLIGH
bcb0: 54 2c 5a 4f 4e 45 52 45 4c 45 41 53 45 41 56 45  T,ZONERELEASEAVE
bcc0: 52 41 47 45 4e 55 52 53 45 2c 5a 42 49 47 54 48  RAGENURSE,ZBIGTH
bcd0: 49 4e 4b 43 4f 4e 56 45 52 54 45 43 4f 4e 4f 4d  INKCONVERTECONOM
bce0: 59 2c 22 0a 20 20 20 20 22 5a 50 4c 49 45 52 53  Y,".    "ZPLIERS
bcf0: 50 52 49 4e 54 41 53 4b 4f 52 45 47 41 4e 4f 2c  PRINTASKOREGANO,
bd00: 5a 44 45 43 41 44 45 4a 4f 59 4f 55 53 57 41 56  ZDECADEJOYOUSWAV
bd10: 45 48 41 42 49 54 2c 5a 44 52 59 57 41 4c 4c 42  EHABIT,ZDRYWALLB
bd20: 45 59 4f 4e 44 42 52 4f 57 4e 42 4f 57 4c 2c 22  EYONDBROWNBOWL,"
bd30: 0a 20 20 20 20 22 5a 43 4c 55 42 52 45 4c 45 41  .    "ZCLUBRELEA
bd40: 53 45 4c 49 5a 41 52 44 41 44 56 49 43 45 2c 5a  SELIZARDADVICE,Z
bd50: 57 48 41 4c 45 4d 41 54 48 41 56 4f 43 41 44 4f  WHALEMATHAVOCADO
bd60: 43 4f 50 50 45 52 2c 5a 42 45 4c 4c 59 43 52 41  COPPER,ZBELLYCRA
bd70: 53 48 49 54 45 4d 4c 41 43 4b 2c 22 0a 20 20 20  SHITEMLACK,".   
bd80: 20 22 5a 4c 45 54 54 55 43 45 42 49 52 44 4d 45   "ZLETTUCEBIRDME
bd90: 45 54 44 45 42 41 54 45 2c 5a 43 41 50 41 42 4c  ETDEBATE,ZCAPABL
bda0: 45 54 52 49 50 44 4f 4f 52 41 4c 4d 4f 4e 44 2c  ETRIPDOORALMOND,
bdb0: 5a 52 41 44 49 41 4e 54 57 48 45 4e 54 52 59 43  ZRADIANTWHENTRYC
bdc0: 41 52 44 2c 22 0a 20 20 20 20 22 5a 43 41 50 59  ARD,".    "ZCAPY
bdd0: 45 41 52 4c 59 52 49 56 45 54 42 52 55 53 48 2c  EARLYRIVETBRUSH,
bde0: 5a 41 47 45 52 45 45 44 46 52 4f 47 42 41 53 4b  ZAGEREEDFROGBASK
bdf0: 45 54 2c 5a 53 57 49 4d 48 45 41 56 59 4d 45 4e  ET,ZSWIMHEAVYMEN
be00: 54 49 4f 4e 4b 49 4e 44 2c 22 0a 20 20 20 20 22  TIONKIND,".    "
be10: 5a 54 52 41 56 45 4c 44 52 49 56 45 52 43 4f 4e  ZTRAVELDRIVERCON
be20: 54 45 53 54 4c 49 4c 59 2c 5a 47 4c 41 44 53 50  TESTLILY,ZGLADSP
be30: 52 41 59 4b 49 44 4e 45 59 47 55 50 50 59 2c 5a  RAYKIDNEYGUPPY,Z
be40: 42 41 4e 4b 42 55 46 46 41 4c 4f 52 45 43 4f 56  BANKBUFFALORECOV
be50: 45 52 4f 52 42 49 54 2c 22 0a 20 20 20 20 22 5a  ERORBIT,".    "Z
be60: 46 49 4e 47 45 52 44 55 45 50 49 5a 5a 41 4f 50  FINGERDUEPIZZAOP
be70: 54 49 4f 4e 2c 5a 43 4c 41 4d 42 49 54 41 52 55  TION,ZCLAMBITARU
be80: 47 55 4c 41 46 41 4a 49 54 41 2c 5a 4c 4f 4e 47  GULAFAJITA,ZLONG
be90: 46 49 4e 4c 45 41 56 45 49 4d 41 47 45 4f 49 4c  FINLEAVEIMAGEOIL
bea0: 2c 22 0a 20 20 20 20 22 5a 4c 4f 4e 47 44 49 45  ,".    "ZLONGDIE
beb0: 54 45 53 53 41 59 4e 41 54 55 52 45 2c 5a 4a 55  TESSAYNATURE,ZJU
bec0: 4e 49 4f 52 53 48 4f 57 50 52 45 53 53 4e 4f 56  NIORSHOWPRESSNOV
bed0: 41 2c 5a 48 4f 50 45 46 55 4c 47 41 54 45 48 4f  A,ZHOPEFULGATEHO
bee0: 4c 45 43 48 41 4c 4b 2c 22 0a 20 20 20 20 22 5a  LECHALK,".    "Z
bef0: 44 45 50 4f 53 49 54 50 41 49 52 43 4f 4c 4c 45  DEPOSITPAIRCOLLE
bf00: 47 45 43 4f 4d 45 54 2c 5a 57 45 41 4c 54 48 4c  GECOMET,ZWEALTHL
bf10: 49 4e 45 4e 47 4c 45 45 46 55 4c 44 41 59 2c 5a  INENGLEEFULDAY,Z
bf20: 46 49 4c 4c 53 54 4f 50 4c 41 57 4a 4f 59 46 55  FILLSTOPLAWJOYFU
bf30: 4c 2c 22 0a 20 20 20 20 22 5a 54 55 4e 45 47 41  L,".    "ZTUNEGA
bf40: 53 42 55 46 46 41 4c 4f 43 41 50 49 54 41 4c 2c  SBUFFALOCAPITAL,
bf50: 5a 47 52 41 59 53 55 52 56 45 59 57 49 52 45 4c  ZGRAYSURVEYWIREL
bf60: 4f 56 45 2c 5a 43 4f 52 4e 45 52 41 4e 43 48 4f  OVE,ZCORNERANCHO
bf70: 52 54 41 50 45 44 49 56 45 52 2c 22 0a 20 20 20  RTAPEDIVER,".   
bf80: 20 22 5a 52 45 57 41 52 44 49 4e 53 49 44 45 4d   "ZREWARDINSIDEM
bf90: 41 4e 47 4f 49 4e 54 45 4e 53 45 2c 5a 43 41 44  ANGOINTENSE,ZCAD
bfa0: 45 54 42 52 49 47 48 54 50 4c 41 4e 45 54 42 41  ETBRIGHTPLANETBA
bfb0: 4e 4b 2c 5a 50 4c 41 4e 45 54 46 41 4d 49 4c 59  NK,ZPLANETFAMILY
bfc0: 50 55 52 45 4d 45 4d 4f 52 59 2c 22 0a 20 20 20  PUREMEMORY,".   
bfd0: 20 22 5a 54 52 45 41 54 54 45 53 54 51 55 49 4c   "ZTREATTESTQUIL
bfe0: 4c 43 48 41 52 47 45 2c 5a 43 52 45 41 4d 45 56  LCHARGE,ZCREAMEV
bff0: 45 4e 49 4e 47 4c 49 50 42 52 41 4e 43 48 2c 5a  ENINGLIPBRANCH,Z
c000: 53 4b 59 53 4b 59 43 4c 41 53 53 49 43 42 52 49  SKYSKYCLASSICBRI
c010: 45 46 2c 22 0a 20 20 20 20 22 5a 41 52 53 45 4e  EF,".    "ZARSEN
c020: 49 43 53 41 4d 50 4c 45 57 41 49 54 4d 55 4f 4e  ICSAMPLEWAITMUON
c030: 2c 5a 42 52 4f 57 42 41 4c 41 4e 43 45 4b 45 59  ,ZBROWBALANCEKEY
c040: 43 48 4f 57 44 45 52 2c 5a 46 4c 59 49 4e 47 44  CHOWDER,ZFLYINGD
c050: 4f 43 54 4f 52 54 41 42 4c 45 4d 45 4c 4f 44 59  OCTORTABLEMELODY
c060: 2c 22 0a 20 20 20 20 22 5a 48 41 4e 47 45 52 4c  ,".    "ZHANGERL
c070: 49 54 48 49 55 4d 44 49 4e 4e 45 52 4d 45 45 54  ITHIUMDINNERMEET
c080: 2c 5a 4e 4f 54 49 43 45 50 45 41 52 50 4f 4c 49  ,ZNOTICEPEARPOLI
c090: 43 59 4a 55 49 43 45 2c 5a 53 48 49 4e 59 41 53  CYJUICE,ZSHINYAS
c0a0: 53 49 53 54 4c 49 56 49 4e 47 43 52 41 42 2c 22  SISTLIVINGCRAB,"
c0b0: 0a 20 20 20 20 22 5a 4c 49 46 45 55 53 45 4c 45  .    "ZLIFEUSELE
c0c0: 41 46 59 42 45 4c 4c 2c 5a 46 41 43 45 49 4e 56  AFYBELL,ZFACEINV
c0d0: 49 54 45 54 41 4c 4b 47 4f 4c 44 2c 5a 47 45 4e  ITETALKGOLD,ZGEN
c0e0: 45 52 41 4c 52 45 53 4f 52 54 53 4b 59 4f 50 45  ERALRESORTSKYOPE
c0f0: 4e 2c 22 0a 20 20 20 20 22 5a 50 55 52 45 43 41  N,".    "ZPURECA
c100: 4b 45 56 49 56 49 44 4e 45 41 54 4c 59 2c 5a 4b  KEVIVIDNEATLY,ZK
c110: 49 57 49 56 49 53 55 41 4c 50 52 49 44 45 41 50  IWIVISUALPRIDEAP
c120: 50 4c 45 2c 5a 4d 45 53 53 59 53 55 4c 46 55 52  PLE,ZMESSYSULFUR
c130: 44 52 45 41 4d 46 45 53 54 49 56 45 2c 22 0a 20  DREAMFESTIVE,". 
c140: 20 20 20 22 5a 43 48 41 52 47 45 43 4c 49 43 4b     "ZCHARGECLICK
c150: 48 55 4d 41 4e 45 48 49 52 45 2c 5a 48 45 52 52  HUMANEHIRE,ZHERR
c160: 49 4e 47 4a 4f 4b 45 46 45 41 54 55 52 45 48 4f  INGJOKEFEATUREHO
c170: 50 45 46 55 4c 2c 5a 59 41 52 44 4f 52 45 47 41  PEFUL,ZYARDOREGA
c180: 4e 4f 56 49 56 49 44 4a 45 57 45 4c 2c 22 0a 20  NOVIVIDJEWEL,". 
c190: 20 20 20 22 5a 46 4f 4f 54 54 41 50 57 4f 52 44     "ZFOOTTAPWORD
c1a0: 45 4e 54 52 59 2c 5a 57 49 53 48 48 49 54 53 4b  ENTRY,ZWISHHITSK
c1b0: 49 4e 4d 4f 54 4f 52 2c 5a 42 41 53 45 47 4f 55  INMOTOR,ZBASEGOU
c1c0: 44 41 52 45 47 55 4c 41 52 46 4f 52 47 49 56 45  DAREGULARFORGIVE
c1d0: 2c 22 0a 20 20 20 20 22 5a 4d 55 46 46 49 4e 44  ,".    "ZMUFFIND
c1e0: 52 59 45 52 44 52 41 57 46 4f 52 54 55 4e 45 2c  RYERDRAWFORTUNE,
c1f0: 5a 41 43 54 49 4f 4e 52 41 4e 47 45 45 4c 45 47  ZACTIONRANGEELEG
c200: 41 4e 54 4e 45 55 54 52 4f 4e 2c 5a 54 52 59 46  ANTNEUTRON,ZTRYF
c210: 41 43 54 4b 45 45 50 4d 49 4c 4b 2c 22 0a 20 20  ACTKEEPMILK,".  
c220: 20 20 22 5a 50 45 41 43 48 43 4f 50 50 45 52 44    "ZPEACHCOPPERD
c230: 49 4e 4e 45 52 4c 41 4b 45 2c 5a 46 52 41 4d 45  INNERLAKE,ZFRAME
c240: 45 4e 54 45 52 53 49 4d 50 4c 45 4d 4f 55 54 48  ENTERSIMPLEMOUTH
c250: 2c 5a 4d 45 52 52 59 43 52 41 43 4b 54 52 41 49  ,ZMERRYCRACKTRAI
c260: 4e 4c 45 41 44 45 52 2c 22 0a 20 20 20 20 22 5a  NLEADER,".    "Z
c270: 4d 45 4d 4f 52 59 52 45 51 55 45 53 54 53 4f 55  MEMORYREQUESTSOU
c280: 52 43 45 42 49 47 2c 5a 43 41 52 52 59 46 4c 4f  RCEBIG,ZCARRYFLO
c290: 4f 52 4d 49 4e 4e 4f 57 44 52 41 47 4f 4e 2c 5a  ORMINNOWDRAGON,Z
c2a0: 4d 49 4e 4f 52 57 41 59 50 41 50 45 52 43 4c 41  MINORWAYPAPERCLA
c2b0: 53 53 59 2c 22 0a 20 20 20 20 22 5a 44 49 4c 4c  SSY,".    "ZDILL
c2c0: 41 53 4b 48 4f 4b 49 4c 45 4d 4f 4e 2c 5a 52 45  ASKHOKILEMON,ZRE
c2d0: 53 4f 4c 56 45 57 52 49 53 54 57 52 41 50 41 50  SOLVEWRISTWRAPAP
c2e0: 50 4c 45 2c 5a 41 53 4b 43 4f 4e 54 41 43 54 4d  PLE,ZASKCONTACTM
c2f0: 4f 4e 49 54 4f 52 46 55 4e 2c 22 0a 20 20 20 20  ONITORFUN,".    
c300: 22 5a 47 49 56 45 56 49 56 49 44 44 49 56 49 4e  "ZGIVEVIVIDDIVIN
c310: 45 4d 45 41 4e 49 4e 47 2c 5a 45 49 47 48 54 4c  EMEANING,ZEIGHTL
c320: 45 41 44 45 52 57 4f 52 4b 45 52 4d 4f 53 54 2c  EADERWORKERMOST,
c330: 5a 4d 49 53 53 52 45 50 4c 59 48 55 4d 41 4e 4c  ZMISSREPLYHUMANL
c340: 49 56 49 4e 47 2c 22 0a 20 20 20 20 22 5a 58 45  IVING,".    "ZXE
c350: 4e 4f 4e 46 4c 49 47 48 54 50 41 4c 45 41 50 50  NONFLIGHTPALEAPP
c360: 4c 45 2c 5a 53 4f 52 54 4d 49 53 54 59 51 55 4f  LE,ZSORTMISTYQUO
c370: 54 45 43 41 42 42 41 47 45 2c 5a 45 41 47 4c 45  TECABBAGE,ZEAGLE
c380: 4c 49 4e 45 4d 49 4e 45 4d 41 49 4c 2c 22 0a 20  LINEMINEMAIL,". 
c390: 20 20 20 22 5a 46 41 4d 49 4c 59 56 49 53 55 41     "ZFAMILYVISUA
c3a0: 4c 4f 57 4e 45 52 4d 41 54 54 45 52 2c 5a 53 50  LOWNERMATTER,ZSP
c3b0: 52 45 41 44 4d 4f 54 4f 52 42 49 53 43 55 49 54  READMOTORBISCUIT
c3c0: 42 41 43 4f 4e 2c 5a 44 49 53 48 4b 45 45 50 42  BACON,ZDISHKEEPB
c3d0: 4c 45 53 54 4d 4f 4e 49 54 4f 52 2c 22 0a 20 20  LESTMONITOR,".  
c3e0: 20 20 22 5a 4d 41 4c 4c 45 51 55 49 50 54 48 41    "ZMALLEQUIPTHA
c3f0: 4e 4b 53 47 4c 55 45 2c 5a 47 4f 4c 44 59 4f 55  NKSGLUE,ZGOLDYOU
c400: 4e 47 49 4e 49 54 49 41 4c 4e 4f 53 45 2c 5a 48  NGINITIALNOSE,ZH
c410: 55 4d 4f 52 53 50 49 43 45 53 41 4e 44 4b 49 44  UMORSPICESANDKID
c420: 4e 45 59 29 22 0a 20 20 20 20 22 56 41 4c 55 45  NEY)".    "VALUE
c430: 53 28 3f 31 2c 3f 32 36 2c 3f 32 30 2c 3f 39 33  S(?1,?26,?20,?93
c440: 2c 3f 38 2c 3f 33 33 2c 3f 33 2c 3f 38 31 2c 3f  ,?8,?33,?3,?81,?
c450: 32 38 2c 3f 36 30 2c 3f 31 38 2c 3f 34 37 2c 3f  28,?60,?18,?47,?
c460: 31 30 39 2c 3f 32 39 2c 3f 33 30 2c 3f 31 30 34  109,?29,?30,?104
c470: 2c 3f 38 36 2c 22 0a 20 20 20 20 22 3f 35 34 2c  ,?86,".    "?54,
c480: 3f 39 32 2c 3f 31 31 37 2c 3f 39 2c 3f 35 38 2c  ?92,?117,?9,?58,
c490: 3f 39 37 2c 3f 36 31 2c 3f 31 31 39 2c 3f 37 33  ?97,?61,?119,?73
c4a0: 2c 3f 31 30 37 2c 3f 31 32 30 2c 3f 38 30 2c 3f  ,?107,?120,?80,?
c4b0: 39 39 2c 3f 33 31 2c 3f 39 36 2c 3f 38 35 2c 3f  99,?31,?96,?85,?
c4c0: 35 30 2c 3f 37 31 2c 22 0a 20 20 20 20 22 3f 34  50,?71,".    "?4
c4d0: 32 2c 3f 32 37 2c 3f 31 31 38 2c 3f 33 36 2c 3f  2,?27,?118,?36,?
c4e0: 32 2c 3f 36 37 2c 3f 36 32 2c 3f 31 30 38 2c 3f  2,?67,?62,?108,?
c4f0: 38 32 2c 3f 39 34 2c 3f 37 36 2c 3f 33 35 2c 3f  82,?94,?76,?35,?
c500: 34 30 2c 3f 31 31 2c 3f 38 38 2c 3f 34 31 2c 3f  40,?11,?88,?41,?
c510: 37 32 2c 3f 34 2c 22 0a 20 20 20 20 22 3f 38 33  72,?4,".    "?83
c520: 2c 3f 31 30 32 2c 3f 31 30 33 2c 3f 31 31 32 2c  ,?102,?103,?112,
c530: 3f 37 37 2c 3f 31 31 31 2c 3f 32 32 2c 3f 31 33  ?77,?111,?22,?13
c540: 2c 3f 33 34 2c 3f 31 35 2c 3f 32 33 2c 3f 31 31  ,?34,?15,?23,?11
c550: 36 2c 3f 37 2c 3f 35 2c 3f 39 30 2c 3f 35 37 2c  6,?7,?5,?90,?57,
c560: 3f 35 36 2c 22 0a 20 20 20 20 22 3f 37 35 2c 3f  ?56,".    "?75,?
c570: 35 31 2c 3f 38 34 2c 3f 32 35 2c 3f 36 33 2c 3f  51,?84,?25,?63,?
c580: 33 37 2c 3f 38 37 2c 3f 31 31 34 2c 3f 37 39 2c  37,?87,?114,?79,
c590: 3f 33 38 2c 3f 31 34 2c 3f 31 30 2c 3f 32 31 2c  ?38,?14,?10,?21,
c5a0: 3f 34 38 2c 3f 38 39 2c 3f 39 31 2c 3f 31 31 30  ?48,?89,?91,?110
c5b0: 2c 22 0a 20 20 20 20 22 3f 36 39 2c 3f 34 35 2c  ,".    "?69,?45,
c5c0: 3f 31 31 33 2c 3f 31 32 2c 3f 31 30 31 2c 3f 36  ?113,?12,?101,?6
c5d0: 38 2c 3f 31 30 35 2c 3f 34 36 2c 3f 39 35 2c 3f  8,?105,?46,?95,?
c5e0: 37 34 2c 3f 32 34 2c 3f 35 33 2c 3f 33 39 2c 3f  74,?24,?53,?39,?
c5f0: 36 2c 3f 36 34 2c 3f 35 32 2c 3f 39 38 2c 22 0a  6,?64,?52,?98,".
c600: 20 20 20 20 22 3f 36 35 2c 3f 31 31 35 2c 3f 34      "?65,?115,?4
c610: 39 2c 3f 37 30 2c 3f 35 39 2c 3f 33 32 2c 3f 34  9,?70,?59,?32,?4
c620: 34 2c 3f 31 30 30 2c 3f 35 35 2c 3f 36 36 2c 3f  4,?100,?55,?66,?
c630: 31 36 2c 3f 31 39 2c 3f 31 30 36 2c 3f 34 33 2c  16,?19,?106,?43,
c640: 3f 31 37 2c 3f 37 38 29 3b 22 0a 20 20 29 3b 0a  ?17,?78);".  );.
c650: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
c660: 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73  i++){.    x1 = s
c670: 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d  peedtest1_random
c680: 28 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73  ();.    speedtes
c690: 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 78 31  t1_numbername(x1
c6a0: 25 31 30 30 30 2c 20 7a 4e 75 6d 2c 20 73 69 7a  %1000, zNum, siz
c6b0: 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20  eof(zNum));.    
c6c0: 6c 65 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  len = (int)strle
c6d0: 6e 28 7a 4e 75 6d 29 3b 0a 20 20 20 20 73 71 6c  n(zNum);.    sql
c6e0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
c6f0: 70 53 74 6d 74 2c 20 31 2c 20 69 5e 30 78 66 29  pStmt, 1, i^0xf)
c700: 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 7a  ;.    for(j=0; z
c710: 54 79 70 65 5b 6a 5d 3b 20 6a 2b 2b 29 7b 0a 20  Type[j]; j++){. 
c720: 20 20 20 20 20 73 77 69 74 63 68 28 20 7a 54 79       switch( zTy
c730: 70 65 5b 6a 5d 20 29 7b 0a 20 20 20 20 20 20 20  pe[j] ){.       
c740: 20 63 61 73 65 20 27 49 27 3a 0a 20 20 20 20 20   case 'I':.     
c750: 20 20 20 63 61 73 65 20 27 54 27 3a 0a 20 20 20     case 'T':.   
c760: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62         sqlite3_b
c770: 69 6e 64 5f 69 6e 74 36 34 28 67 2e 70 53 74 6d  ind_int64(g.pStm
c780: 74 2c 20 6a 2b 32 2c 20 78 31 29 3b 0a 20 20 20  t, j+2, x1);.   
c790: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c7a0: 20 20 20 20 20 20 63 61 73 65 20 27 46 27 3a 0a        case 'F':.
c7b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c7c0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 67 2e  3_bind_double(g.
c7d0: 70 53 74 6d 74 2c 20 6a 2b 32 2c 20 28 64 6f 75  pStmt, j+2, (dou
c7e0: 62 6c 65 29 78 31 29 3b 0a 20 20 20 20 20 20 20  ble)x1);.       
c7f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c800: 20 20 63 61 73 65 20 27 56 27 3a 0a 20 20 20 20    case 'V':.    
c810: 20 20 20 20 63 61 73 65 20 27 42 27 3a 0a 20 20      case 'B':.  
c820: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
c830: 62 69 6e 64 5f 74 65 78 74 36 34 28 67 2e 70 53  bind_text64(g.pS
c840: 74 6d 74 2c 20 6a 2b 32 2c 20 7a 4e 75 6d 2c 20  tmt, j+2, zNum, 
c850: 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  len,.           
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 20 20 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43     SQLITE_STATIC
c880: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
c890: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
c8a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c8b0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
c8c0: 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  n();.  }.  speed
c8d0: 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d  test1_exec("COMM
c8e0: 49 54 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65  IT;");.  speedte
c8f0: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
c900: 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a  .  n = g.szTest*
c910: 32 35 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74  250;.  speedtest
c920: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 31 30  1_begin_test(110
c930: 2c 20 22 51 75 65 72 79 20 25 64 20 72 6f 77 73  , "Query %d rows
c940: 20 62 79 20 72 6f 77 69 64 22 2c 20 6e 29 3b 0a   by rowid", n);.
c950: 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65    speedtest1_pre
c960: 70 61 72 65 28 0a 20 20 20 20 22 53 45 4c 45 43  pare(.    "SELEC
c970: 54 20 5a 43 59 41 4e 42 41 53 45 46 45 45 44 41  T ZCYANBASEFEEDA
c980: 44 52 4f 49 54 2c 5a 4a 55 4e 49 4f 52 53 48 4f  DROIT,ZJUNIORSHO
c990: 57 50 52 45 53 53 4e 4f 56 41 2c 5a 43 41 55 53  WPRESSNOVA,ZCAUS
c9a0: 45 53 41 4c 41 4d 49 54 45 52 4d 43 59 41 4e 2c  ESALAMITERMCYAN,
c9b0: 22 0a 20 20 20 20 22 5a 48 4f 50 45 46 55 4c 47  ".    "ZHOPEFULG
c9c0: 41 54 45 48 4f 4c 45 43 48 41 4c 4b 2c 5a 48 55  ATEHOLECHALK,ZHU
c9d0: 4d 4f 52 53 50 49 43 45 53 41 4e 44 4b 49 44 4e  MORSPICESANDKIDN
c9e0: 45 59 2c 5a 53 57 49 4d 48 45 41 56 59 4d 45 4e  EY,ZSWIMHEAVYMEN
c9f0: 54 49 4f 4e 4b 49 4e 44 2c 22 0a 20 20 20 20 22  TIONKIND,".    "
ca00: 5a 4d 4f 56 45 57 48 4f 47 41 4d 4d 41 49 4e 43  ZMOVEWHOGAMMAINC
ca10: 48 2c 5a 41 50 50 45 41 4c 53 49 4d 50 4c 45 53  H,ZAPPEALSIMPLES
ca20: 45 43 4f 4e 44 48 4f 55 53 49 4e 47 2c 5a 48 41  ECONDHOUSING,ZHA
ca30: 46 4e 49 55 4d 53 43 52 49 50 54 53 41 4c 41 44  FNIUMSCRIPTSALAD
ca40: 4d 4f 54 4f 52 2c 22 0a 20 20 20 20 22 5a 4e 45  MOTOR,".    "ZNE
ca50: 41 54 53 54 45 57 50 41 52 54 49 52 4f 4e 2c 5a  ATSTEWPARTIRON,Z
ca60: 4c 4f 4e 47 46 49 4e 4c 45 41 56 45 49 4d 41 47  LONGFINLEAVEIMAG
ca70: 45 4f 49 4c 2c 5a 44 45 57 50 45 41 43 48 43 41  EOIL,ZDEWPEACHCA
ca80: 52 45 45 52 43 45 4c 45 52 59 2c 22 0a 20 20 20  REERCELERY,".   
ca90: 20 22 5a 58 45 4e 4f 4e 46 4c 49 47 48 54 50 41   "ZXENONFLIGHTPA
caa0: 4c 45 41 50 50 4c 45 2c 5a 43 41 4c 4d 52 41 43  LEAPPLE,ZCALMRAC
cab0: 43 4f 4f 4e 50 52 4f 47 52 41 4d 44 45 42 49 54  COONPROGRAMDEBIT
cac0: 2c 5a 55 53 55 41 4c 42 4f 44 59 48 41 4c 49 42  ,ZUSUALBODYHALIB
cad0: 55 54 44 49 41 4d 4f 4e 44 2c 22 0a 20 20 20 20  UTDIAMOND,".    
cae0: 22 5a 54 52 59 46 41 43 54 4b 45 45 50 4d 49 4c  "ZTRYFACTKEEPMIL
caf0: 4b 2c 5a 57 45 41 4c 54 48 4c 49 4e 45 4e 47 4c  K,ZWEALTHLINENGL
cb00: 45 45 46 55 4c 44 41 59 2c 5a 4c 4f 4e 47 44 49  EEFULDAY,ZLONGDI
cb10: 45 54 45 53 53 41 59 4e 41 54 55 52 45 2c 22 0a  ETESSAYNATURE,".
cb20: 20 20 20 20 22 5a 4c 49 46 45 55 53 45 4c 45 41      "ZLIFEUSELEA
cb30: 46 59 42 45 4c 4c 2c 5a 54 52 45 41 54 50 41 43  FYBELL,ZTREATPAC
cb40: 4b 46 55 54 55 52 45 43 4f 4e 56 45 52 54 2c 5a  KFUTURECONVERT,Z
cb50: 4d 45 4d 4f 52 59 52 45 51 55 45 53 54 53 4f 55  MEMORYREQUESTSOU
cb60: 52 43 45 42 49 47 2c 22 0a 20 20 20 20 22 5a 59  RCEBIG,".    "ZY
cb70: 41 52 44 4f 52 45 47 41 4e 4f 56 49 56 49 44 4a  ARDOREGANOVIVIDJ
cb80: 45 57 45 4c 2c 5a 44 45 50 4f 53 49 54 50 41 49  EWEL,ZDEPOSITPAI
cb90: 52 43 4f 4c 4c 45 47 45 43 4f 4d 45 54 2c 5a 53  RCOLLEGECOMET,ZS
cba0: 4c 45 45 50 59 55 53 45 52 47 52 41 4e 44 42 4f  LEEPYUSERGRANDBO
cbb0: 57 4c 2c 22 0a 20 20 20 20 22 5a 42 52 49 45 46  WL,".    "ZBRIEF
cbc0: 47 4f 42 59 44 4f 44 47 45 52 48 45 49 47 48 54  GOBYDODGERHEIGHT
cbd0: 2c 5a 43 4c 55 42 52 45 4c 45 41 53 45 4c 49 5a  ,ZCLUBRELEASELIZ
cbe0: 41 52 44 41 44 56 49 43 45 2c 5a 43 41 50 41 42  ARDADVICE,ZCAPAB
cbf0: 4c 45 54 52 49 50 44 4f 4f 52 41 4c 4d 4f 4e 44  LETRIPDOORALMOND
cc00: 2c 22 0a 20 20 20 20 22 5a 44 52 59 57 41 4c 4c  ,".    "ZDRYWALL
cc10: 42 45 59 4f 4e 44 42 52 4f 57 4e 42 4f 57 4c 2c  BEYONDBROWNBOWL,
cc20: 5a 41 53 4b 43 4f 4e 54 41 43 54 4d 4f 4e 49 54  ZASKCONTACTMONIT
cc30: 4f 52 46 55 4e 2c 5a 4b 49 57 49 56 49 53 55 41  ORFUN,ZKIWIVISUA
cc40: 4c 50 52 49 44 45 41 50 50 4c 45 2c 22 0a 20 20  LPRIDEAPPLE,".  
cc50: 20 20 22 5a 4e 4f 54 49 43 45 50 45 41 52 50 4f    "ZNOTICEPEARPO
cc60: 4c 49 43 59 4a 55 49 43 45 2c 5a 50 45 41 43 48  LICYJUICE,ZPEACH
cc70: 43 4f 50 50 45 52 44 49 4e 4e 45 52 4c 41 4b 45  COPPERDINNERLAKE
cc80: 2c 5a 53 54 45 45 4c 43 41 52 45 46 55 4c 50 4c  ,ZSTEELCAREFULPL
cc90: 41 54 45 4e 55 4d 42 45 52 2c 22 0a 20 20 20 20  ATENUMBER,".    
cca0: 22 5a 47 4c 41 44 53 50 52 41 59 4b 49 44 4e 45  "ZGLADSPRAYKIDNE
ccb0: 59 47 55 50 50 59 2c 5a 43 4f 4d 50 41 4e 59 53  YGUPPY,ZCOMPANYS
ccc0: 55 4d 4d 45 52 46 49 42 45 52 45 4c 46 2c 5a 54  UMMERFIBERELF,ZT
ccd0: 45 4e 4e 49 53 43 59 43 4c 45 42 49 4c 4c 4f 46  ENNISCYCLEBILLOF
cce0: 46 49 43 45 52 2c 22 0a 20 20 20 20 22 5a 49 4d  FICER,".    "ZIM
ccf0: 41 47 45 50 45 4e 43 49 4c 4f 54 48 45 52 42 4f  AGEPENCILOTHERBO
cd00: 54 54 4f 4d 2c 5a 57 45 53 54 41 4d 4f 55 4e 54  TTOM,ZWESTAMOUNT
cd10: 41 46 46 45 43 54 48 45 41 52 49 4e 47 2c 5a 44  AFFECTHEARING,ZD
cd20: 49 56 45 52 50 41 49 4e 54 4c 45 41 54 48 45 52  IVERPAINTLEATHER
cd30: 45 41 53 59 2c 22 0a 20 20 20 20 22 5a 53 4b 59  EASY,".    "ZSKY
cd40: 53 4b 59 43 4c 41 53 53 49 43 42 52 49 45 46 2c  SKYCLASSICBRIEF,
cd50: 5a 4d 45 53 53 59 53 55 4c 46 55 52 44 52 45 41  ZMESSYSULFURDREA
cd60: 4d 46 45 53 54 49 56 45 2c 5a 4d 45 52 52 59 43  MFESTIVE,ZMERRYC
cd70: 52 41 43 4b 54 52 41 49 4e 4c 45 41 44 45 52 2c  RACKTRAINLEADER,
cd80: 22 0a 20 20 20 20 22 5a 42 52 4f 41 44 41 42 4c  ".    "ZBROADABL
cd90: 45 53 4f 4c 49 44 43 41 53 55 41 4c 2c 5a 47 4c  ESOLIDCASUAL,ZGL
cda0: 41 53 53 52 45 53 45 52 56 45 42 41 52 49 55 4d  ASSRESERVEBARIUM
cdb0: 4d 45 41 4c 2c 5a 54 55 4e 45 47 41 53 42 55 46  MEAL,ZTUNEGASBUF
cdc0: 46 41 4c 4f 43 41 50 49 54 41 4c 2c 22 0a 20 20  FALOCAPITAL,".  
cdd0: 20 20 22 5a 42 41 4e 4b 42 55 46 46 41 4c 4f 52    "ZBANKBUFFALOR
cde0: 45 43 4f 56 45 52 4f 52 42 49 54 2c 5a 54 52 45  ECOVERORBIT,ZTRE
cdf0: 41 54 54 45 53 54 51 55 49 4c 4c 43 48 41 52 47  ATTESTQUILLCHARG
ce00: 45 2c 5a 42 41 4d 42 4f 4f 4d 45 53 53 57 41 53  E,ZBAMBOOMESSWAS
ce10: 41 42 49 45 56 45 4e 49 4e 47 2c 22 0a 20 20 20  ABIEVENING,".   
ce20: 20 22 5a 52 45 57 41 52 44 49 4e 53 49 44 45 4d   "ZREWARDINSIDEM
ce30: 41 4e 47 4f 49 4e 54 45 4e 53 45 2c 5a 45 41 47  ANGOINTENSE,ZEAG
ce40: 4c 45 4c 49 4e 45 4d 49 4e 45 4d 41 49 4c 2c 5a  LELINEMINEMAIL,Z
ce50: 43 41 4c 4d 4c 59 47 45 4d 46 49 4e 49 53 48 45  CALMLYGEMFINISHE
ce60: 46 46 45 43 54 2c 22 0a 20 20 20 20 22 5a 4b 45  FFECT,".    "ZKE
ce70: 59 46 41 49 4c 41 50 52 49 43 4f 54 4d 45 54 41  YFAILAPRICOTMETA
ce80: 4c 2c 5a 46 49 4e 47 45 52 44 55 45 50 49 5a 5a  L,ZFINGERDUEPIZZ
ce90: 41 4f 50 54 49 4f 4e 2c 5a 43 41 44 45 54 42 52  AOPTION,ZCADETBR
cea0: 49 47 48 54 50 4c 41 4e 45 54 42 41 4e 4b 2c 22  IGHTPLANETBANK,"
ceb0: 0a 20 20 20 20 22 5a 47 4f 4c 44 59 4f 55 4e 47  .    "ZGOLDYOUNG
cec0: 49 4e 49 54 49 41 4c 4e 4f 53 45 2c 5a 4d 49 53  INITIALNOSE,ZMIS
ced0: 53 52 45 50 4c 59 48 55 4d 41 4e 4c 49 56 49 4e  SREPLYHUMANLIVIN
cee0: 47 2c 5a 45 49 47 48 54 4c 45 41 44 45 52 57 4f  G,ZEIGHTLEADERWO
cef0: 52 4b 45 52 4d 4f 53 54 2c 22 0a 20 20 20 20 22  RKERMOST,".    "
cf00: 5a 46 52 41 4d 45 45 4e 54 45 52 53 49 4d 50 4c  ZFRAMEENTERSIMPL
cf10: 45 4d 4f 55 54 48 2c 5a 42 49 47 54 48 49 4e 4b  EMOUTH,ZBIGTHINK
cf20: 43 4f 4e 56 45 52 54 45 43 4f 4e 4f 4d 59 2c 5a  CONVERTECONOMY,Z
cf30: 46 41 43 45 49 4e 56 49 54 45 54 41 4c 4b 47 4f  FACEINVITETALKGO
cf40: 4c 44 2c 22 0a 20 20 20 20 22 5a 50 4f 53 54 50  LD,".    "ZPOSTP
cf50: 52 4f 54 45 49 4e 48 41 4e 44 4c 45 41 43 54 4f  ROTEINHANDLEACTO
cf60: 52 2c 5a 48 45 52 52 49 4e 47 4a 4f 4b 45 46 45  R,ZHERRINGJOKEFE
cf70: 41 54 55 52 45 48 4f 50 45 46 55 4c 2c 5a 43 41  ATUREHOPEFUL,ZCA
cf80: 42 42 41 47 45 53 4f 43 4b 45 41 53 45 4d 49 4e  BBAGESOCKEASEMIN
cf90: 55 54 45 2c 22 0a 20 20 20 20 22 5a 4d 55 46 46  UTE,".    "ZMUFF
cfa0: 49 4e 44 52 59 45 52 44 52 41 57 46 4f 52 54 55  INDRYERDRAWFORTU
cfb0: 4e 45 2c 5a 50 52 4f 42 4c 45 4d 43 4c 55 42 50  NE,ZPROBLEMCLUBP
cfc0: 4f 50 4f 56 45 52 4a 45 4c 4c 59 2c 5a 47 49 56  OPOVERJELLY,ZGIV
cfd0: 45 56 49 56 49 44 44 49 56 49 4e 45 4d 45 41 4e  EVIVIDDIVINEMEAN
cfe0: 49 4e 47 2c 22 0a 20 20 20 20 22 5a 47 45 4e 45  ING,".    "ZGENE
cff0: 4e 41 54 55 52 41 4c 48 45 41 52 49 4e 47 4b 49  NATURALHEARINGKI
d000: 54 45 2c 5a 47 45 4e 45 52 41 4c 52 45 53 4f 52  TE,ZGENERALRESOR
d010: 54 53 4b 59 4f 50 45 4e 2c 5a 4c 45 54 54 55 43  TSKYOPEN,ZLETTUC
d020: 45 42 49 52 44 4d 45 45 54 44 45 42 41 54 45 2c  EBIRDMEETDEBATE,
d030: 22 0a 20 20 20 20 22 5a 42 41 53 45 47 4f 55 44  ".    "ZBASEGOUD
d040: 41 52 45 47 55 4c 41 52 46 4f 52 47 49 56 45 2c  AREGULARFORGIVE,
d050: 5a 43 48 41 52 47 45 43 4c 49 43 4b 48 55 4d 41  ZCHARGECLICKHUMA
d060: 4e 45 48 49 52 45 2c 5a 50 4c 41 4e 45 54 46 41  NEHIRE,ZPLANETFA
d070: 4d 49 4c 59 50 55 52 45 4d 45 4d 4f 52 59 2c 22  MILYPUREMEMORY,"
d080: 0a 20 20 20 20 22 5a 4d 49 4e 4f 52 57 41 59 50  .    "ZMINORWAYP
d090: 41 50 45 52 43 4c 41 53 53 59 2c 5a 43 41 50 59  APERCLASSY,ZCAPY
d0a0: 45 41 52 4c 59 52 49 56 45 54 42 52 55 53 48 2c  EARLYRIVETBRUSH,
d0b0: 5a 53 49 5a 45 54 4f 45 41 57 41 52 44 46 52 45  ZSIZETOEAWARDFRE
d0c0: 53 48 2c 22 0a 20 20 20 20 22 5a 41 52 53 45 4e  SH,".    "ZARSEN
d0d0: 49 43 53 41 4d 50 4c 45 57 41 49 54 4d 55 4f 4e  ICSAMPLEWAITMUON
d0e0: 2c 5a 53 51 55 41 52 45 47 4c 45 45 46 55 4c 43  ,ZSQUAREGLEEFULC
d0f0: 48 49 4c 44 4c 49 47 48 54 2c 5a 53 48 49 4e 59  HILDLIGHT,ZSHINY
d100: 41 53 53 49 53 54 4c 49 56 49 4e 47 43 52 41 42  ASSISTLIVINGCRAB
d110: 2c 22 0a 20 20 20 20 22 5a 43 4f 52 4e 45 52 41  ,".    "ZCORNERA
d120: 4e 43 48 4f 52 54 41 50 45 44 49 56 45 52 2c 5a  NCHORTAPEDIVER,Z
d130: 44 45 43 41 44 45 4a 4f 59 4f 55 53 57 41 56 45  DECADEJOYOUSWAVE
d140: 48 41 42 49 54 2c 5a 54 52 41 56 45 4c 44 52 49  HABIT,ZTRAVELDRI
d150: 56 45 52 43 4f 4e 54 45 53 54 4c 49 4c 59 2c 22  VERCONTESTLILY,"
d160: 0a 20 20 20 20 22 5a 46 4c 59 49 4e 47 44 4f 43  .    "ZFLYINGDOC
d170: 54 4f 52 54 41 42 4c 45 4d 45 4c 4f 44 59 2c 5a  TORTABLEMELODY,Z
d180: 53 48 41 52 4b 4a 55 53 54 46 52 55 49 54 4d 4f  SHARKJUSTFRUITMO
d190: 56 49 45 2c 5a 46 41 4d 49 4c 59 56 49 53 55 41  VIE,ZFAMILYVISUA
d1a0: 4c 4f 57 4e 45 52 4d 41 54 54 45 52 2c 22 0a 20  LOWNERMATTER,". 
d1b0: 20 20 20 22 5a 46 41 52 4d 45 52 4d 4f 52 4e 49     "ZFARMERMORNI
d1c0: 4e 47 4d 49 52 52 4f 52 43 4f 4e 43 45 52 4e 2c  NGMIRRORCONCERN,
d1d0: 5a 47 49 46 54 49 43 45 46 49 53 48 47 4c 55 45  ZGIFTICEFISHGLUE
d1e0: 48 41 49 52 2c 5a 4f 55 54 53 49 44 45 50 45 41  HAIR,ZOUTSIDEPEA
d1f0: 48 45 4e 43 4f 55 4e 54 49 43 45 2c 22 0a 20 20  HENCOUNTICE,".  
d200: 20 20 22 5a 53 50 52 45 41 44 4d 4f 54 4f 52 42    "ZSPREADMOTORB
d210: 49 53 43 55 49 54 42 41 43 4f 4e 2c 5a 57 49 53  ISCUITBACON,ZWIS
d220: 48 48 49 54 53 4b 49 4e 4d 4f 54 4f 52 2c 5a 48  HHITSKINMOTOR,ZH
d230: 4f 4c 49 44 41 59 48 45 41 44 50 4f 4e 59 44 45  OLIDAYHEADPONYDE
d240: 54 41 49 4c 2c 22 0a 20 20 20 20 22 5a 57 4f 4f  TAIL,".    "ZWOO
d250: 44 50 4f 45 54 52 59 43 4f 42 42 4c 45 52 42 45  DPOETRYCOBBLERBE
d260: 4e 43 48 2c 5a 41 49 52 46 4f 52 47 49 56 45 48  NCH,ZAIRFORGIVEH
d270: 45 41 44 46 52 4f 47 2c 5a 42 52 4f 57 42 41 4c  EADFROG,ZBROWBAL
d280: 41 4e 43 45 4b 45 59 43 48 4f 57 44 45 52 2c 22  ANCEKEYCHOWDER,"
d290: 0a 20 20 20 20 22 5a 44 49 53 48 4b 45 45 50 42  .    "ZDISHKEEPB
d2a0: 4c 45 53 54 4d 4f 4e 49 54 4f 52 2c 5a 43 4c 41  LESTMONITOR,ZCLA
d2b0: 4d 42 49 54 41 52 55 47 55 4c 41 46 41 4a 49 54  MBITARUGULAFAJIT
d2c0: 41 2c 5a 50 4c 49 45 52 53 50 52 49 4e 54 41 53  A,ZPLIERSPRINTAS
d2d0: 4b 4f 52 45 47 41 4e 4f 2c 22 0a 20 20 20 20 22  KOREGANO,".    "
d2e0: 5a 52 41 44 49 41 4e 54 57 48 45 4e 54 52 59 43  ZRADIANTWHENTRYC
d2f0: 41 52 44 2c 5a 44 45 4c 41 59 4f 55 54 43 4f 4d  ARD,ZDELAYOUTCOM
d300: 45 48 4f 52 4e 41 47 45 4e 43 59 2c 5a 50 55 52  EHORNAGENCY,ZPUR
d310: 45 43 41 4b 45 56 49 56 49 44 4e 45 41 54 4c 59  ECAKEVIVIDNEATLY
d320: 2c 22 0a 20 20 20 20 22 5a 50 41 54 54 45 52 4e  ,".    "ZPATTERN
d330: 43 4c 4f 52 49 4e 45 47 52 41 4e 44 43 4f 4c 42  CLORINEGRANDCOLB
d340: 59 2c 5a 48 41 4e 44 59 52 45 50 41 49 52 50 52  Y,ZHANDYREPAIRPR
d350: 4f 54 4f 4e 41 49 52 50 4f 52 54 2c 5a 41 47 45  OTONAIRPORT,ZAGE
d360: 52 45 45 44 46 52 4f 47 42 41 53 4b 45 54 2c 22  REEDFROGBASKET,"
d370: 0a 20 20 20 20 22 5a 53 4f 52 54 4d 49 53 54 59  .    "ZSORTMISTY
d380: 51 55 4f 54 45 43 41 42 42 41 47 45 2c 5a 46 4f  QUOTECABBAGE,ZFO
d390: 4f 54 54 41 50 57 4f 52 44 45 4e 54 52 59 2c 5a  OTTAPWORDENTRY,Z
d3a0: 52 45 53 4f 4c 56 45 57 52 49 53 54 57 52 41 50  RESOLVEWRISTWRAP
d3b0: 41 50 50 4c 45 2c 22 0a 20 20 20 20 22 5a 44 49  APPLE,".    "ZDI
d3c0: 4c 4c 41 53 4b 48 4f 4b 49 4c 45 4d 4f 4e 2c 5a  LLASKHOKILEMON,Z
d3d0: 46 49 4c 4c 53 54 4f 50 4c 41 57 4a 4f 59 46 55  FILLSTOPLAWJOYFU
d3e0: 4c 2c 5a 41 43 54 49 4f 4e 52 41 4e 47 45 45 4c  L,ZACTIONRANGEEL
d3f0: 45 47 41 4e 54 4e 45 55 54 52 4f 4e 2c 22 0a 20  EGANTNEUTRON,". 
d400: 20 20 20 22 5a 52 45 53 4f 52 54 59 41 52 44 47     "ZRESORTYARDG
d410: 52 45 45 4e 4c 45 54 2c 5a 43 52 45 41 4d 45 56  REENLET,ZCREAMEV
d420: 45 4e 49 4e 47 4c 49 50 42 52 41 4e 43 48 2c 5a  ENINGLIPBRANCH,Z
d430: 57 48 41 4c 45 4d 41 54 48 41 56 4f 43 41 44 4f  WHALEMATHAVOCADO
d440: 43 4f 50 50 45 52 2c 22 0a 20 20 20 20 22 5a 47  COPPER,".    "ZG
d450: 52 41 59 53 55 52 56 45 59 57 49 52 45 4c 4f 56  RAYSURVEYWIRELOV
d460: 45 2c 5a 42 45 4c 4c 59 43 52 41 53 48 49 54 45  E,ZBELLYCRASHITE
d470: 4d 4c 41 43 4b 2c 5a 48 41 4e 47 45 52 4c 49 54  MLACK,ZHANGERLIT
d480: 48 49 55 4d 44 49 4e 4e 45 52 4d 45 45 54 2c 22  HIUMDINNERMEET,"
d490: 0a 20 20 20 20 22 5a 43 41 52 52 59 46 4c 4f 4f  .    "ZCARRYFLOO
d4a0: 52 4d 49 4e 4e 4f 57 44 52 41 47 4f 4e 2c 5a 4d  RMINNOWDRAGON,ZM
d4b0: 41 4c 4c 45 51 55 49 50 54 48 41 4e 4b 53 47 4c  ALLEQUIPTHANKSGL
d4c0: 55 45 2c 5a 54 45 52 4d 46 49 54 54 49 4e 47 48  UE,ZTERMFITTINGH
d4d0: 4f 55 53 49 4e 47 43 4f 4d 4d 41 4e 44 2c 22 0a  OUSINGCOMMAND,".
d4e0: 20 20 20 20 22 5a 4f 4e 45 52 45 4c 45 41 53 45      "ZONERELEASE
d4f0: 41 56 45 52 41 47 45 4e 55 52 53 45 2c 5a 4c 41  AVERAGENURSE,ZLA
d500: 43 45 41 44 44 52 45 53 53 47 52 4f 55 4e 44 43  CEADDRESSGROUNDC
d510: 41 52 45 46 55 4c 22 0a 20 20 20 20 22 20 46 52  AREFUL".    " FR
d520: 4f 4d 20 5a 4c 4f 4f 4b 53 4c 49 4b 45 43 4f 52  OM ZLOOKSLIKECOR
d530: 45 44 41 54 41 20 57 48 45 52 45 20 5a 50 4b 3d  EDATA WHERE ZPK=
d540: 3f 31 3b 22 0a 20 20 29 3b 0a 20 20 66 6f 72 28  ?1;".  );.  for(
d550: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
d560: 20 20 20 20 78 31 20 3d 20 73 70 65 65 64 74 65      x1 = speedte
d570: 73 74 31 5f 72 61 6e 64 6f 6d 28 29 25 6e 52 6f  st1_random()%nRo
d580: 77 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  w;.    sqlite3_b
d590: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
d5a0: 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 73 70 65   1, x1);.    spe
d5b0: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
d5c0: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
d5d0: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 7d 0a 0a 2f  end_test();.}../
d5e0: 2a 0a 2a 2f 0a 76 6f 69 64 20 74 65 73 74 73 65  *.*/.void testse
d5f0: 74 5f 74 72 69 67 67 65 72 28 76 6f 69 64 29 7b  t_trigger(void){
d600: 0a 20 20 69 6e 74 20 6a 6a 2c 20 69 69 3b 0a 20  .  int jj, ii;. 
d610: 20 63 68 61 72 20 7a 4e 75 6d 5b 32 30 30 30 5d   char zNum[2000]
d620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
d630: 2a 20 41 20 6e 75 6d 62 65 72 20 6e 61 6d 65 20  * A number name 
d640: 2a 2f 0a 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  */..  const int 
d650: 4e 52 4f 57 20 20 3d 20 35 30 30 2a 67 2e 73 7a  NROW  = 500*g.sz
d660: 54 65 73 74 3b 0a 20 20 63 6f 6e 73 74 20 69 6e  Test;.  const in
d670: 74 20 4e 52 4f 57 32 20 3d 20 31 30 30 2a 67 2e  t NROW2 = 100*g.
d680: 73 7a 54 65 73 74 3b 0a 0a 20 20 73 70 65 65 64  szTest;..  speed
d690: 74 65 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20  test1_exec(.    
d6a0: 20 20 22 42 45 47 49 4e 3b 22 0a 20 20 20 20 20    "BEGIN;".     
d6b0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
d6c0: 31 28 72 6f 77 69 64 20 49 4e 54 45 47 45 52 20  1(rowid INTEGER 
d6d0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 69 20 49  PRIMARY KEY, i I
d6e0: 4e 54 45 47 45 52 2c 20 74 20 54 45 58 54 29 3b  NTEGER, t TEXT);
d6f0: 22 0a 20 20 20 20 20 20 22 43 52 45 41 54 45 20  ".      "CREATE 
d700: 54 41 42 4c 45 20 74 32 28 72 6f 77 69 64 20 49  TABLE t2(rowid I
d710: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
d720: 45 59 2c 20 69 20 49 4e 54 45 47 45 52 2c 20 74  EY, i INTEGER, t
d730: 20 54 45 58 54 29 3b 22 0a 20 20 20 20 20 20 22   TEXT);".      "
d740: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
d750: 72 6f 77 69 64 20 49 4e 54 45 47 45 52 20 50 52  rowid INTEGER PR
d760: 49 4d 41 52 59 20 4b 45 59 2c 20 69 20 49 4e 54  IMARY KEY, i INT
d770: 45 47 45 52 2c 20 74 20 54 45 58 54 29 3b 22 0a  EGER, t TEXT);".
d780: 20 20 20 20 20 20 22 43 52 45 41 54 45 20 56 49        "CREATE VI
d790: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
d7a0: 72 6f 77 69 64 2c 20 69 2c 20 74 20 46 52 4f 4d  rowid, i, t FROM
d7b0: 20 74 31 3b 22 0a 20 20 20 20 20 20 22 43 52 45   t1;".      "CRE
d7c0: 41 54 45 20 56 49 45 57 20 76 32 20 41 53 20 53  ATE VIEW v2 AS S
d7d0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 69 2c 20  ELECT rowid, i, 
d7e0: 74 20 46 52 4f 4d 20 74 32 3b 22 0a 20 20 20 20  t FROM t2;".    
d7f0: 20 20 22 43 52 45 41 54 45 20 56 49 45 57 20 76    "CREATE VIEW v
d800: 33 20 41 53 20 53 45 4c 45 43 54 20 72 6f 77 69  3 AS SELECT rowi
d810: 64 2c 20 69 2c 20 74 20 46 52 4f 4d 20 74 33 3b  d, i, t FROM t3;
d820: 22 0a 20 20 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d  ".  );.  for(jj=
d830: 31 3b 20 6a 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b  1; jj<=3; jj++){
d840: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
d850: 70 72 65 70 61 72 65 28 22 49 4e 53 45 52 54 20  prepare("INSERT 
d860: 49 4e 54 4f 20 74 25 64 20 56 41 4c 55 45 53 28  INTO t%d VALUES(
d870: 4e 55 4c 4c 2c 3f 31 2c 3f 32 29 22 2c 20 6a 6a  NULL,?1,?2)", jj
d880: 29 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  );.    for(ii=0;
d890: 20 69 69 3c 4e 52 4f 57 3b 20 69 69 2b 2b 29 7b   ii<NROW; ii++){
d8a0: 0a 20 20 20 20 20 20 69 6e 74 20 78 31 20 3d 20  .      int x1 = 
d8b0: 73 70 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f  speedtest1_rando
d8c0: 6d 28 29 20 25 20 4e 52 4f 57 3b 0a 20 20 20 20  m() % NROW;.    
d8d0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d    speedtest1_num
d8e0: 62 65 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d  bername(x1, zNum
d8f0: 2c 20 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b  , sizeof(zNum));
d900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62  .      sqlite3_b
d910: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
d920: 20 31 2c 20 78 31 29 3b 0a 20 20 20 20 20 20 73   1, x1);.      s
d930: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
d940: 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 7a 4e 75  (g.pStmt, 2, zNu
d950: 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  m, -1, SQLITE_ST
d960: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 70 65  ATIC);.      spe
d970: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
d980: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 70 65 65 64     }.  }.  speed
d990: 74 65 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20  test1_exec(.    
d9a0: 20 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 20    "CREATE INDEX 
d9b0: 69 31 20 4f 4e 20 74 31 28 74 29 3b 22 0a 20 20  i1 ON t1(t);".  
d9c0: 20 20 20 20 22 43 52 45 41 54 45 20 49 4e 44 45      "CREATE INDE
d9d0: 58 20 69 32 20 4f 4e 20 74 32 28 74 29 3b 22 0a  X i2 ON t2(t);".
d9e0: 20 20 20 20 20 20 22 43 52 45 41 54 45 20 49 4e        "CREATE IN
d9f0: 44 45 58 20 69 33 20 4f 4e 20 74 33 28 74 29 3b  DEX i3 ON t3(t);
da00: 22 0a 20 20 20 20 20 20 22 43 4f 4d 4d 49 54 3b  ".      "COMMIT;
da10: 22 0a 20 20 29 3b 0a 0a 20 20 73 70 65 65 64 74  ".  );..  speedt
da20: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
da30: 31 30 30 2c 20 22 73 70 65 65 64 34 70 2d 6a 6f  100, "speed4p-jo
da40: 69 6e 31 22 29 3b 0a 20 20 73 70 65 65 64 74 65  in1");.  speedte
da50: 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20  st1_prepare(.   
da60: 20 20 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f     "SELECT * FRO
da70: 4d 20 74 31 2c 20 74 32 2c 20 74 33 20 57 48 45  M t1, t2, t3 WHE
da80: 52 45 20 74 31 2e 6f 69 64 20 3d 20 74 32 2e 6f  RE t1.oid = t2.o
da90: 69 64 20 41 4e 44 20 74 32 2e 6f 69 64 20 3d 20  id AND t2.oid = 
daa0: 74 33 2e 6f 69 64 22 0a 20 20 29 3b 0a 20 20 73  t3.oid".  );.  s
dab0: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
dac0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
dad0: 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73 70 65  d_test();..  spe
dae0: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
daf0: 73 74 28 31 31 30 2c 20 22 73 70 65 65 64 34 70  st(110, "speed4p
db00: 2d 6a 6f 69 6e 32 22 29 3b 0a 20 20 73 70 65 65  -join2");.  spee
db10: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a  dtest1_prepare(.
db20: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 2a 20        "SELECT * 
db30: 46 52 4f 4d 20 74 31 2c 20 74 32 2c 20 74 33 20  FROM t1, t2, t3 
db40: 57 48 45 52 45 20 74 31 2e 74 20 3d 20 74 32 2e  WHERE t1.t = t2.
db50: 74 20 41 4e 44 20 74 32 2e 74 20 3d 20 74 33 2e  t AND t2.t = t3.
db60: 74 22 0a 20 20 29 3b 0a 20 20 73 70 65 65 64 74  t".  );.  speedt
db70: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 73 70  est1_run();.  sp
db80: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
db90: 74 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73  t();..  speedtes
dba0: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 32  t1_begin_test(12
dbb0: 30 2c 20 22 73 70 65 65 64 34 70 2d 76 69 65 77  0, "speed4p-view
dbc0: 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31 3b  1");.  for(jj=1;
dbd0: 20 6a 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b 0a 20   jj<=3; jj++){. 
dbe0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72     speedtest1_pr
dbf0: 65 70 61 72 65 28 22 53 45 4c 45 43 54 20 2a 20  epare("SELECT * 
dc00: 46 52 4f 4d 20 76 25 64 20 57 48 45 52 45 20 72  FROM v%d WHERE r
dc10: 6f 77 69 64 20 3d 20 3f 22 2c 20 6a 6a 29 3b 0a  owid = ?", jj);.
dc20: 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
dc30: 3c 4e 52 4f 57 32 3b 20 69 69 2b 3d 33 29 7b 0a  <NROW2; ii+=3){.
dc40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
dc50: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
dc60: 31 2c 20 69 69 2a 33 29 3b 0a 20 20 20 20 20 20  1, ii*3);.      
dc70: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
dc80: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 70  ;.    }.  }.  sp
dc90: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
dca0: 74 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73  t();..  speedtes
dcb0: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 33  t1_begin_test(13
dcc0: 30 2c 20 22 73 70 65 65 64 34 70 2d 74 61 62 6c  0, "speed4p-tabl
dcd0: 65 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31  e1");.  for(jj=1
dce0: 3b 20 6a 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b 0a  ; jj<=3; jj++){.
dcf0: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 70      speedtest1_p
dd00: 72 65 70 61 72 65 28 22 53 45 4c 45 43 54 20 2a  repare("SELECT *
dd10: 20 46 52 4f 4d 20 74 25 64 20 57 48 45 52 45 20   FROM t%d WHERE 
dd20: 72 6f 77 69 64 20 3d 20 3f 22 2c 20 6a 6a 29 3b  rowid = ?", jj);
dd30: 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
dd40: 69 3c 4e 52 4f 57 32 3b 20 69 69 2b 3d 33 29 7b  i<NROW2; ii+=3){
dd50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62  .      sqlite3_b
dd60: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
dd70: 20 31 2c 20 69 69 2a 33 29 3b 0a 20 20 20 20 20   1, ii*3);.     
dd80: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
dd90: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  );.    }.  }.  s
dda0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
ddb0: 73 74 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65  st();..  speedte
ddc0: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
ddd0: 34 30 2c 20 22 73 70 65 65 64 34 70 2d 74 61 62  40, "speed4p-tab
dde0: 6c 65 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d  le1");.  for(jj=
ddf0: 31 3b 20 6a 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b  1; jj<=3; jj++){
de00: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
de10: 70 72 65 70 61 72 65 28 22 53 45 4c 45 43 54 20  prepare("SELECT 
de20: 2a 20 46 52 4f 4d 20 74 25 64 20 57 48 45 52 45  * FROM t%d WHERE
de30: 20 72 6f 77 69 64 20 3d 20 3f 22 2c 20 6a 6a 29   rowid = ?", jj)
de40: 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  ;.    for(ii=0; 
de50: 69 69 3c 4e 52 4f 57 32 3b 20 69 69 2b 3d 33 29  ii<NROW2; ii+=3)
de60: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
de70: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
de80: 2c 20 31 2c 20 69 69 2a 33 29 3b 0a 20 20 20 20  , 1, ii*3);.    
de90: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
dea0: 28 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ();.    }.  }.  
deb0: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
dec0: 65 73 74 28 29 3b 0a 0a 20 20 73 70 65 65 64 74  est();..  speedt
ded0: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
dee0: 31 35 30 2c 20 22 73 70 65 65 64 34 70 2d 73 75  150, "speed4p-su
def0: 62 73 65 6c 65 63 74 31 22 29 3b 0a 20 20 73 70  bselect1");.  sp
df00: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
df10: 28 22 53 45 4c 45 43 54 20 22 0a 20 20 20 20 20  ("SELECT ".     
df20: 20 22 28 53 45 4c 45 43 54 20 74 20 46 52 4f 4d   "(SELECT t FROM
df30: 20 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 20   t1 WHERE rowid 
df40: 3d 20 3f 31 29 2c 22 0a 20 20 20 20 20 20 22 28  = ?1),".      "(
df50: 53 45 4c 45 43 54 20 74 20 46 52 4f 4d 20 74 32  SELECT t FROM t2
df60: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 3f   WHERE rowid = ?
df70: 31 29 2c 22 0a 20 20 20 20 20 20 22 28 53 45 4c  1),".      "(SEL
df80: 45 43 54 20 74 20 46 52 4f 4d 20 74 33 20 57 48  ECT t FROM t3 WH
df90: 45 52 45 20 72 6f 77 69 64 20 3d 20 3f 31 29 22  ERE rowid = ?1)"
dfa0: 0a 20 20 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 30  .  );.  for(jj=0
dfb0: 3b 20 6a 6a 3c 4e 52 4f 57 32 3b 20 6a 6a 2b 2b  ; jj<NROW2; jj++
dfc0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  ){.    sqlite3_b
dfd0: 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c  ind_int(g.pStmt,
dfe0: 20 31 2c 20 6a 6a 2a 33 29 3b 0a 20 20 20 20 73   1, jj*3);.    s
dff0: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
e000: 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74  .  }.  speedtest
e010: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20  1_end_test();.. 
e020: 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69   speedtest1_begi
e030: 6e 5f 74 65 73 74 28 31 36 30 2c 20 22 73 70 65  n_test(160, "spe
e040: 65 64 34 70 2d 72 6f 77 69 64 2d 75 70 64 61 74  ed4p-rowid-updat
e050: 65 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  e");.  speedtest
e060: 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b  1_exec("BEGIN");
e070: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
e080: 65 70 61 72 65 28 22 55 50 44 41 54 45 20 74 31  epare("UPDATE t1
e090: 20 53 45 54 20 69 3d 69 2b 31 20 57 48 45 52 45   SET i=i+1 WHERE
e0a0: 20 72 6f 77 69 64 3d 3f 31 22 29 3b 0a 20 20 66   rowid=?1");.  f
e0b0: 6f 72 28 6a 6a 3d 30 3b 20 6a 6a 3c 4e 52 4f 57  or(jj=0; jj<NROW
e0c0: 32 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 73 71  2; jj++){.    sq
e0d0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
e0e0: 2e 70 53 74 6d 74 2c 20 31 2c 20 6a 6a 29 3b 0a  .pStmt, 1, jj);.
e0f0: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
e100: 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  un();.  }.  spee
e110: 64 74 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d  dtest1_exec("COM
e120: 4d 49 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65  MIT");.  speedte
e130: 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a  st1_end_test();.
e140: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
e150: 65 63 28 22 43 52 45 41 54 45 20 54 41 42 4c 45  ec("CREATE TABLE
e160: 20 74 35 28 74 20 54 45 58 54 20 50 52 49 4d 41   t5(t TEXT PRIMA
e170: 52 59 20 4b 45 59 2c 20 69 20 49 4e 54 45 47 45  RY KEY, i INTEGE
e180: 52 29 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65  R);");.  speedte
e190: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
e1a0: 37 30 2c 20 22 73 70 65 65 64 34 70 2d 69 6e 73  70, "speed4p-ins
e1b0: 65 72 74 2d 69 67 6e 6f 72 65 22 29 3b 0a 20 20  ert-ignore");.  
e1c0: 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
e1d0: 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  "INSERT OR IGNOR
e1e0: 45 20 49 4e 54 4f 20 74 35 20 53 45 4c 45 43 54  E INTO t5 SELECT
e1f0: 20 74 2c 20 69 20 46 52 4f 4d 20 74 31 22 29 3b   t, i FROM t1");
e200: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
e210: 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73 70 65  d_test();..  spe
e220: 65 64 74 65 73 74 31 5f 65 78 65 63 28 0a 20 20  edtest1_exec(.  
e230: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
e240: 45 20 6c 6f 67 28 6f 70 20 54 45 58 54 2c 20 72  E log(op TEXT, r
e250: 20 49 4e 54 45 47 45 52 2c 20 69 20 49 4e 54 45   INTEGER, i INTE
e260: 47 45 52 2c 20 74 20 54 45 58 54 29 3b 22 0a 20  GER, t TEXT);". 
e270: 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42       "CREATE TAB
e280: 4c 45 20 74 34 28 72 6f 77 69 64 20 49 4e 54 45  LE t4(rowid INTE
e290: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
e2a0: 20 69 20 49 4e 54 45 47 45 52 2c 20 74 20 54 45   i INTEGER, t TE
e2b0: 58 54 29 3b 22 0a 20 20 20 20 20 20 22 43 52 45  XT);".      "CRE
e2c0: 41 54 45 20 54 52 49 47 47 45 52 20 74 34 5f 74  ATE TRIGGER t4_t
e2d0: 72 69 67 67 65 72 31 20 41 46 54 45 52 20 49 4e  rigger1 AFTER IN
e2e0: 53 45 52 54 20 4f 4e 20 74 34 20 42 45 47 49 4e  SERT ON t4 BEGIN
e2f0: 22 0a 20 20 20 20 20 20 22 20 20 49 4e 53 45 52  ".      "  INSER
e300: 54 20 49 4e 54 4f 20 6c 6f 67 20 56 41 4c 55 45  T INTO log VALUE
e310: 53 28 27 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  S('INSERT INTO t
e320: 34 27 2c 20 6e 65 77 2e 72 6f 77 69 64 2c 20 6e  4', new.rowid, n
e330: 65 77 2e 69 2c 20 6e 65 77 2e 74 29 3b 22 0a 20  ew.i, new.t);". 
e340: 20 20 20 20 20 22 45 4e 44 3b 22 0a 20 20 20 20       "END;".    
e350: 20 20 22 43 52 45 41 54 45 20 54 52 49 47 47 45    "CREATE TRIGGE
e360: 52 20 74 34 5f 74 72 69 67 67 65 72 32 20 41 46  R t4_trigger2 AF
e370: 54 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 34  TER UPDATE ON t4
e380: 20 42 45 47 49 4e 22 0a 20 20 20 20 20 20 22 20   BEGIN".      " 
e390: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c 6f 67   INSERT INTO log
e3a0: 20 56 41 4c 55 45 53 28 27 55 50 44 41 54 45 20   VALUES('UPDATE 
e3b0: 4f 46 20 74 34 27 2c 20 6e 65 77 2e 72 6f 77 69  OF t4', new.rowi
e3c0: 64 2c 20 6e 65 77 2e 69 2c 20 6e 65 77 2e 74 29  d, new.i, new.t)
e3d0: 3b 22 0a 20 20 20 20 20 20 22 45 4e 44 3b 22 0a  ;".      "END;".
e3e0: 20 20 20 20 20 20 22 43 52 45 41 54 45 20 54 52        "CREATE TR
e3f0: 49 47 47 45 52 20 74 34 5f 74 72 69 67 67 65 72  IGGER t4_trigger
e400: 33 20 41 46 54 45 52 20 44 45 4c 45 54 45 20 4f  3 AFTER DELETE O
e410: 4e 20 74 34 20 42 45 47 49 4e 22 0a 20 20 20 20  N t4 BEGIN".    
e420: 20 20 22 20 20 49 4e 53 45 52 54 20 49 4e 54 4f    "  INSERT INTO
e430: 20 6c 6f 67 20 56 41 4c 55 45 53 28 27 44 45 4c   log VALUES('DEL
e440: 45 54 45 20 4f 46 20 74 34 27 2c 20 6f 6c 64 2e  ETE OF t4', old.
e450: 72 6f 77 69 64 2c 20 6f 6c 64 2e 69 2c 20 6f 6c  rowid, old.i, ol
e460: 64 2e 74 29 3b 22 0a 20 20 20 20 20 20 22 45 4e  d.t);".      "EN
e470: 44 3b 22 0a 20 20 20 20 20 20 22 42 45 47 49 4e  D;".      "BEGIN
e480: 3b 22 0a 20 20 29 3b 0a 0a 20 20 73 70 65 65 64  ;".  );..  speed
e490: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
e4a0: 28 31 38 30 2c 20 22 73 70 65 65 64 34 70 2d 74  (180, "speed4p-t
e4b0: 72 69 67 67 65 72 31 22 29 3b 0a 20 20 73 70 65  rigger1");.  spe
e4c0: 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28  edtest1_prepare(
e4d0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20  "INSERT INTO t4 
e4e0: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 3f 31 2c  VALUES(NULL, ?1,
e4f0: 20 3f 32 29 22 29 3b 0a 20 20 66 6f 72 28 6a 6a   ?2)");.  for(jj
e500: 3d 30 3b 20 6a 6a 3c 4e 52 4f 57 32 3b 20 6a 6a  =0; jj<NROW2; jj
e510: 2b 2b 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65  ++){.    speedte
e520: 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6a  st1_numbername(j
e530: 6a 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28  j, zNum, sizeof(
e540: 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69  zNum));.    sqli
e550: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
e560: 53 74 6d 74 2c 20 31 2c 20 6a 6a 29 3b 0a 20 20  Stmt, 1, jj);.  
e570: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
e580: 65 78 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20  ext(g.pStmt, 2, 
e590: 7a 4e 75 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  zNum, -1, SQLITE
e5a0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70  _STATIC);.    sp
e5b0: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
e5c0: 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31    }.  speedtest1
e5d0: 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20  _end_test();..  
e5e0: 2f 2a 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20 4f 66  /*.  ** Note: Of
e5f0: 20 74 68 65 20 71 75 65 72 69 65 73 2c 20 6f 6e   the queries, on
e600: 6c 79 20 68 61 6c 66 20 61 63 74 75 61 6c 6c 79  ly half actually
e610: 20 75 70 64 61 74 65 20 61 20 72 6f 77 2e 20 54   update a row. T
e620: 68 69 73 20 70 72 6f 70 65 72 74 79 0a 20 20 2a  his property.  *
e630: 2a 20 77 61 73 20 63 6f 70 69 65 64 20 6f 76 65  * was copied ove
e640: 72 20 66 72 6f 6d 20 73 70 65 65 64 34 70 2e 74  r from speed4p.t
e650: 65 73 74 2c 20 77 68 65 72 65 20 69 74 20 77 61  est, where it wa
e660: 73 20 70 72 6f 62 61 62 6c 79 20 69 6e 74 72 6f  s probably intro
e670: 64 75 63 65 64 0a 20 20 2a 2a 20 69 6e 61 64 76  duced.  ** inadv
e680: 65 72 74 61 6e 74 6c 79 2e 0a 20 20 2a 2f 0a 20  ertantly..  */. 
e690: 20 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69   speedtest1_begi
e6a0: 6e 5f 74 65 73 74 28 31 39 30 2c 20 22 73 70 65  n_test(190, "spe
e6b0: 65 64 34 70 2d 74 72 69 67 67 65 72 32 22 29 3b  ed4p-trigger2");
e6c0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72  .  speedtest1_pr
e6d0: 65 70 61 72 65 28 22 55 50 44 41 54 45 20 74 34  epare("UPDATE t4
e6e0: 20 53 45 54 20 69 20 3d 20 3f 31 2c 20 74 20 3d   SET i = ?1, t =
e6f0: 20 3f 32 20 57 48 45 52 45 20 72 6f 77 69 64 20   ?2 WHERE rowid 
e700: 3d 20 3f 33 22 29 3b 0a 20 20 66 6f 72 28 6a 6a  = ?3");.  for(jj
e710: 3d 31 3b 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b  =1; jj<=NROW2*2;
e720: 20 6a 6a 2b 3d 32 29 7b 0a 20 20 20 20 73 70 65   jj+=2){.    spe
e730: 65 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61  edtest1_numberna
e740: 6d 65 28 6a 6a 2a 32 2c 20 7a 4e 75 6d 2c 20 73  me(jj*2, zNum, s
e750: 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20  izeof(zNum));.  
e760: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
e770: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 6a  nt(g.pStmt, 1, j
e780: 6a 2a 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  j*2);.    sqlite
e790: 33 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53  3_bind_text(g.pS
e7a0: 74 6d 74 2c 20 32 2c 20 7a 4e 75 6d 2c 20 2d 31  tmt, 2, zNum, -1
e7b0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
e7c0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ;.    sqlite3_bi
e7d0: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
e7e0: 33 2c 20 6a 6a 29 3b 0a 20 20 20 20 73 70 65 65  3, jj);.    spee
e7f0: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
e800: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
e810: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 2f 2a  nd_test();..  /*
e820: 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20 53 61 6d 65  .  ** Note: Same
e830: 20 61 67 61 69 6e 2e 0a 20 20 2a 2f 0a 20 20 73   again..  */.  s
e840: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
e850: 74 65 73 74 28 32 30 30 2c 20 22 73 70 65 65 64  test(200, "speed
e860: 34 70 2d 74 72 69 67 67 65 72 33 22 29 3b 0a 20  4p-trigger3");. 
e870: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
e880: 61 72 65 28 22 44 45 4c 45 54 45 20 46 52 4f 4d  are("DELETE FROM
e890: 20 74 34 20 57 48 45 52 45 20 72 6f 77 69 64 20   t4 WHERE rowid 
e8a0: 3d 20 3f 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a  = ?1");.  for(jj
e8b0: 3d 31 3b 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b  =1; jj<=NROW2*2;
e8c0: 20 6a 6a 2b 3d 32 29 7b 0a 20 20 20 20 73 71 6c   jj+=2){.    sql
e8d0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e  ite3_bind_int(g.
e8e0: 70 53 74 6d 74 2c 20 31 2c 20 6a 6a 2a 32 29 3b  pStmt, 1, jj*2);
e8f0: 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f  .    speedtest1_
e900: 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65  run();.  }.  spe
e910: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
e920: 28 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  ();.  speedtest1
e930: 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b  _exec("COMMIT");
e940: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  /*.  ** The 
e950: 66 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20  following block 
e960: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 61 6d  contains the sam
e970: 65 20 74 65 73 74 73 20 61 73 20 74 68 65 20 61  e tests as the a
e980: 62 6f 76 65 20 62 6c 6f 63 6b 20 74 68 61 74 0a  bove block that.
e990: 20 20 2a 2a 20 74 65 73 74 73 20 74 72 69 67 67    ** tests trigg
e9a0: 65 72 73 2c 20 77 69 74 68 20 6f 6e 65 20 63 72  ers, with one cr
e9b0: 75 63 69 61 6c 20 64 69 66 66 65 72 65 6e 63 65  ucial difference
e9c0: 3a 20 6e 6f 20 74 72 69 67 67 65 72 73 20 61 72  : no triggers ar
e9d0: 65 20 64 65 66 69 6e 65 64 2e 0a 20 20 2a 2a 20  e defined..  ** 
e9e0: 53 6f 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  So the differenc
e9f0: 65 20 69 6e 20 73 70 65 65 64 20 62 65 74 77 65  e in speed betwe
ea00: 65 6e 20 74 68 65 73 65 20 74 65 73 74 73 20 61  en these tests a
ea10: 6e 64 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  nd the preceding
ea20: 20 6f 6e 65 73 0a 20 20 2a 2a 20 69 73 20 74 68   ones.  ** is th
ea30: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  e amount of time
ea40: 20 74 61 6b 65 6e 20 74 6f 20 63 6f 6d 70 69 6c   taken to compil
ea50: 65 20 61 6e 64 20 65 78 65 63 75 74 65 20 74 68  e and execute th
ea60: 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
ea70: 6d 73 2e 0a 20 20 2a 2f 0a 20 20 73 70 65 65 64  ms..  */.  speed
ea80: 74 65 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20  test1_exec(.    
ea90: 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 74 34    "DROP TABLE t4
eaa0: 3b 22 0a 20 20 20 20 20 20 22 44 52 4f 50 20 54  ;".      "DROP T
eab0: 41 42 4c 45 20 6c 6f 67 3b 22 0a 20 20 20 20 20  ABLE log;".     
eac0: 20 22 56 41 43 55 55 4d 3b 22 0a 20 20 20 20 20   "VACUUM;".     
ead0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
eae0: 34 28 72 6f 77 69 64 20 49 4e 54 45 47 45 52 20  4(rowid INTEGER 
eaf0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 69 20 49  PRIMARY KEY, i I
eb00: 4e 54 45 47 45 52 2c 20 74 20 54 45 58 54 29 3b  NTEGER, t TEXT);
eb10: 22 0a 20 20 20 20 20 20 22 42 45 47 49 4e 3b 22  ".      "BEGIN;"
eb20: 0a 20 20 29 3b 0a 20 20 73 70 65 65 64 74 65 73  .  );.  speedtes
eb30: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 32 31  t1_begin_test(21
eb40: 30 2c 20 22 73 70 65 65 64 34 70 2d 6e 6f 74 72  0, "speed4p-notr
eb50: 69 67 67 65 72 31 22 29 3b 0a 20 20 73 70 65 65  igger1");.  spee
eb60: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22  dtest1_prepare("
eb70: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
eb80: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 3f 31 2c 20  ALUES(NULL, ?1, 
eb90: 3f 32 29 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d  ?2)");.  for(jj=
eba0: 30 3b 20 6a 6a 3c 4e 52 4f 57 32 3b 20 6a 6a 2b  0; jj<NROW2; jj+
ebb0: 2b 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73  +){.    speedtes
ebc0: 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6a 6a  t1_numbername(jj
ebd0: 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a  , zNum, sizeof(z
ebe0: 4e 75 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69 74  Num));.    sqlit
ebf0: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
ec00: 74 6d 74 2c 20 31 2c 20 6a 6a 29 3b 0a 20 20 20  tmt, 1, jj);.   
ec10: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
ec20: 78 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 7a  xt(g.pStmt, 2, z
ec30: 4e 75 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  Num, -1, SQLITE_
ec40: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65  STATIC);.    spe
ec50: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
ec60: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
ec70: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 20 20 73 70  end_test();.  sp
ec80: 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74  eedtest1_begin_t
ec90: 65 73 74 28 32 31 30 2c 20 22 73 70 65 65 64 34  est(210, "speed4
eca0: 70 2d 6e 6f 74 72 69 67 67 65 72 32 22 29 3b 0a  p-notrigger2");.
ecb0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65    speedtest1_pre
ecc0: 70 61 72 65 28 22 55 50 44 41 54 45 20 74 34 20  pare("UPDATE t4 
ecd0: 53 45 54 20 69 20 3d 20 3f 31 2c 20 74 20 3d 20  SET i = ?1, t = 
ece0: 3f 32 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d  ?2 WHERE rowid =
ecf0: 20 3f 33 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d   ?3");.  for(jj=
ed00: 31 3b 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b 20  1; jj<=NROW2*2; 
ed10: 6a 6a 2b 3d 32 29 7b 0a 20 20 20 20 73 70 65 65  jj+=2){.    spee
ed20: 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d  dtest1_numbernam
ed30: 65 28 6a 6a 2a 32 2c 20 7a 4e 75 6d 2c 20 73 69  e(jj*2, zNum, si
ed40: 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20  zeof(zNum));.   
ed50: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
ed60: 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 6a 6a  t(g.pStmt, 1, jj
ed70: 2a 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  *2);.    sqlite3
ed80: 5f 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74  _bind_text(g.pSt
ed90: 6d 74 2c 20 32 2c 20 7a 4e 75 6d 2c 20 2d 31 2c  mt, 2, zNum, -1,
eda0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
edb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
edc0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 33  d_int(g.pStmt, 3
edd0: 2c 20 6a 6a 29 3b 0a 20 20 20 20 73 70 65 65 64  , jj);.    speed
ede0: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d  test1_run();.  }
edf0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
ee00: 64 5f 74 65 73 74 28 29 3b 0a 20 20 73 70 65 65  d_test();.  spee
ee10: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
ee20: 74 28 32 32 30 2c 20 22 73 70 65 65 64 34 70 2d  t(220, "speed4p-
ee30: 6e 6f 74 72 69 67 67 65 72 33 22 29 3b 0a 20 20  notrigger3");.  
ee40: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
ee50: 72 65 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  re("DELETE FROM 
ee60: 74 34 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d  t4 WHERE rowid =
ee70: 20 3f 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d   ?1");.  for(jj=
ee80: 31 3b 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b 20  1; jj<=NROW2*2; 
ee90: 6a 6a 2b 3d 32 29 7b 0a 20 20 20 20 73 71 6c 69  jj+=2){.    sqli
eea0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
eeb0: 53 74 6d 74 2c 20 31 2c 20 6a 6a 2a 32 29 3b 0a  Stmt, 1, jj*2);.
eec0: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
eed0: 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  un();.  }.  spee
eee0: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
eef0: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
ef00: 65 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a  exec("COMMIT");.
ef10: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 65 73 74 73  }../*.** A tests
ef20: 65 74 20 75 73 65 64 20 66 6f 72 20 64 65 62 75  et used for debu
ef30: 67 67 69 6e 67 20 73 70 65 65 64 74 65 73 74 31  gging speedtest1
ef40: 20 69 74 73 65 6c 66 2e 0a 2a 2f 0a 76 6f 69 64   itself..*/.void
ef50: 20 74 65 73 74 73 65 74 5f 64 65 62 75 67 31 28   testset_debug1(
ef60: 76 6f 69 64 29 7b 0a 20 20 75 6e 73 69 67 6e 65  void){.  unsigne
ef70: 64 20 69 2c 20 6e 3b 0a 20 20 75 6e 73 69 67 6e  d i, n;.  unsign
ef80: 65 64 20 78 31 2c 20 78 32 3b 0a 20 20 63 68 61  ed x1, x2;.  cha
ef90: 72 20 7a 4e 75 6d 5b 32 30 30 30 5d 3b 20 20 20  r zNum[2000];   
efa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
efb0: 6e 75 6d 62 65 72 20 6e 61 6d 65 20 2a 2f 0a 0a  number name */..
efc0: 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 3b 0a    n = g.szTest;.
efd0: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b    for(i=1; i<=n;
efe0: 20 69 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20   i++){.    x1 = 
eff0: 73 77 69 7a 7a 6c 65 28 69 2c 20 6e 29 3b 0a 20  swizzle(i, n);. 
f000: 20 20 20 78 32 20 3d 20 73 77 69 7a 7a 6c 65 28     x2 = swizzle(
f010: 78 31 2c 20 6e 29 3b 0a 20 20 20 20 73 70 65 65  x1, n);.    spee
f020: 64 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d  dtest1_numbernam
f030: 65 28 78 31 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65  e(x1, zNum, size
f040: 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 70  of(zNum));.    p
f050: 72 69 6e 74 66 28 22 25 35 64 20 25 35 64 20 25  rintf("%5d %5d %
f060: 35 64 20 25 73 5c 6e 22 2c 20 69 2c 20 78 31 2c  5d %s\n", i, x1,
f070: 20 78 32 2c 20 7a 4e 75 6d 29 3b 0a 20 20 7d 0a   x2, zNum);.  }.
f080: 7d 0a 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75  }..#ifdef __linu
f090: 78 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  x__.#include <sy
f0a0: 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c  s/types.h>.#incl
f0b0: 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 0a  ude <unistd.h>..
f0c0: 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f  /*.** Attempt to
f0d0: 20 64 69 73 70 6c 61 79 20 49 2f 4f 20 73 74 61   display I/O sta
f0e0: 74 73 20 6f 6e 20 4c 69 6e 75 78 20 75 73 69 6e  ts on Linux usin
f0f0: 67 20 2f 70 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a  g /proc/PID/io.*
f100: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69  /.static void di
f110: 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61 74  splayLinuxIoStat
f120: 73 28 46 49 4c 45 20 2a 6f 75 74 29 7b 0a 20 20  s(FILE *out){.  
f130: 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 63 68 61 72  FILE *in;.  char
f140: 20 7a 5b 32 30 30 5d 3b 0a 20 20 73 71 6c 69 74   z[200];.  sqlit
f150: 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
f160: 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f 70 72 6f 63  of(z), z, "/proc
f170: 2f 25 64 2f 69 6f 22 2c 20 67 65 74 70 69 64 28  /%d/io", getpid(
f180: 29 29 3b 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e  ));.  in = fopen
f190: 28 7a 2c 20 22 72 62 22 29 3b 0a 20 20 69 66 28  (z, "rb");.  if(
f1a0: 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b   in==0 ) return;
f1b0: 0a 20 20 77 68 69 6c 65 28 20 66 67 65 74 73 28  .  while( fgets(
f1c0: 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c 20 69 6e  z, sizeof(z), in
f1d0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )!=0 ){.    stat
f1e0: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
f1f0: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
f200: 61 72 20 2a 7a 50 61 74 74 65 72 6e 3b 0a 20 20  ar *zPattern;.  
f210: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
f220: 7a 44 65 73 63 3b 0a 20 20 20 20 7d 20 61 54 72  zDesc;.    } aTr
f230: 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ans[] = {.      
f240: 7b 20 22 72 63 68 61 72 3a 20 22 2c 20 20 20 20  { "rchar: ",    
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
f260: 79 74 65 73 20 72 65 63 65 69 76 65 64 20 62 79  ytes received by
f270: 20 72 65 61 64 28 29 3a 22 20 7d 2c 0a 20 20 20   read():" },.   
f280: 20 20 20 7b 20 22 77 63 68 61 72 3a 20 22 2c 20     { "wchar: ", 
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2a0: 20 22 42 79 74 65 73 20 73 65 6e 74 20 74 6f 20   "Bytes sent to 
f2b0: 77 72 69 74 65 28 29 3a 22 20 20 20 20 7d 2c 0a  write():"    },.
f2c0: 20 20 20 20 20 20 7b 20 22 73 79 73 63 72 3a 20        { "syscr: 
f2d0: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
f2e0: 20 20 20 20 22 52 65 61 64 28 29 20 73 79 73 74      "Read() syst
f2f0: 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 20  em calls:"      
f300: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63  },.      { "sysc
f310: 77 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20  w: ",           
f320: 20 20 20 20 20 20 20 22 57 72 69 74 65 28 29 20         "Write() 
f330: 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20  system calls:"  
f340: 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 72     },.      { "r
f350: 65 61 64 5f 62 79 74 65 73 3a 20 22 2c 20 20 20  ead_bytes: ",   
f360: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
f370: 20 72 63 76 64 20 66 72 6f 6d 20 73 74 6f 72 61   rcvd from stora
f380: 67 65 3a 22 20 20 7d 2c 0a 20 20 20 20 20 20 7b  ge:"  },.      {
f390: 20 22 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22   "write_bytes: "
f3a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79  ,            "By
f3b0: 74 65 73 20 73 65 6e 74 20 74 6f 20 73 74 6f 72  tes sent to stor
f3c0: 61 67 65 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20  age:"    },.    
f3d0: 20 20 7b 20 22 63 61 6e 63 65 6c 6c 65 64 5f 77    { "cancelled_w
f3e0: 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20  rite_bytes: ",  
f3f0: 22 43 61 6e 63 65 6c 6c 65 64 20 77 72 69 74 65  "Cancelled write
f400: 20 62 79 74 65 73 3a 22 20 20 20 20 7d 2c 0a 20   bytes:"    },. 
f410: 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b     };.    int i;
f420: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
f430: 73 69 7a 65 6f 66 28 61 54 72 61 6e 73 29 2f 73  sizeof(aTrans)/s
f440: 69 7a 65 6f 66 28 61 54 72 61 6e 73 5b 30 5d 29  izeof(aTrans[0])
f450: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e  ; i++){.      in
f460: 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  t n = (int)strle
f470: 6e 28 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74  n(aTrans[i].zPat
f480: 74 65 72 6e 29 3b 0a 20 20 20 20 20 20 69 66 28  tern);.      if(
f490: 20 73 74 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b   strncmp(aTrans[
f4a0: 69 5d 2e 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20  i].zPattern, z, 
f4b0: 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  n)==0 ){.       
f4c0: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d   fprintf(out, "-
f4d0: 2d 20 25 2d 32 38 73 20 25 73 22 2c 20 61 54 72  - %-28s %s", aTr
f4e0: 61 6e 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a  ans[i].zDesc, &z
f4f0: 5b 6e 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72  [n]);.        br
f500: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
f510: 20 7d 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28   }.  }.  fclose(
f520: 69 6e 29 3b 0a 7d 20 20 20 0a 23 65 6e 64 69 66  in);.}   .#endif
f530: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
f540: 53 49 4f 4e 5f 4e 55 4d 42 45 52 3c 33 30 30 36  SION_NUMBER<3006
f550: 30 31 38 0a 23 20 20 64 65 66 69 6e 65 20 73 71  018.#  define sq
f560: 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 58  lite3_sourceid(X
f570: 29 20 22 28 62 65 66 6f 72 65 20 33 2e 36 2e 31  ) "(before 3.6.1
f580: 38 29 22 0a 23 65 6e 64 69 66 0a 0a 73 74 61 74  8)".#endif..stat
f590: 69 63 20 69 6e 74 20 78 43 6f 6d 70 69 6c 65 4f  ic int xCompileO
f5a0: 70 74 69 6f 6e 73 28 76 6f 69 64 20 2a 70 43 74  ptions(void *pCt
f5b0: 78 2c 20 69 6e 74 20 6e 56 61 6c 2c 20 63 68 61  x, int nVal, cha
f5c0: 72 20 2a 2a 61 7a 56 61 6c 2c 20 63 68 61 72 20  r **azVal, char 
f5d0: 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20 70 72 69 6e  **azCol){.  prin
f5e0: 74 66 28 22 2d 2d 20 43 6f 6d 70 69 6c 65 20 6f  tf("-- Compile o
f5f0: 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a  ption: %s\n", az
f600: 56 61 6c 5b 30 5d 29 3b 0a 20 20 72 65 74 75 72  Val[0]);.  retur
f610: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
f620: 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72 67  int main(int arg
f630: 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b  c, char **argv){
f640: 0a 20 20 69 6e 74 20 64 6f 41 75 74 6f 76 61 63  .  int doAutovac
f650: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
f660: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 61   /* True for --a
f670: 75 74 6f 76 61 63 75 75 6d 20 2a 2f 0a 20 20 69  utovacuum */.  i
f680: 6e 74 20 63 61 63 68 65 53 69 7a 65 20 3d 20 30  nt cacheSize = 0
f690: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f6a0: 44 65 73 69 72 65 64 20 63 61 63 68 65 20 73 69  Desired cache si
f6b0: 7a 65 2e 20 20 30 20 6d 65 61 6e 73 20 64 65 66  ze.  0 means def
f6c0: 61 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 64 6f  ault */.  int do
f6d0: 45 78 63 6c 75 73 69 76 65 20 3d 20 30 3b 20 20  Exclusive = 0;  
f6e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
f6f0: 66 6f 72 20 2d 2d 65 78 63 6c 75 73 69 76 65 20  for --exclusive 
f700: 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 20 3d  */.  int nHeap =
f710: 20 30 2c 20 6d 6e 48 65 61 70 20 3d 20 30 3b 20   0, mnHeap = 0; 
f720: 20 20 20 2f 2a 20 48 65 61 70 20 73 69 7a 65 20     /* Heap size 
f730: 66 72 6f 6d 20 2d 2d 68 65 61 70 20 2a 2f 0a 20  from --heap */. 
f740: 20 69 6e 74 20 64 6f 49 6e 63 72 76 61 63 20 3d   int doIncrvac =
f750: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   0;            /
f760: 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 69 6e 63  * True for --inc
f770: 72 76 61 63 75 75 6d 20 2a 2f 0a 20 20 63 6f 6e  rvacuum */.  con
f780: 73 74 20 63 68 61 72 20 2a 7a 4a 4d 6f 64 65 20  st char *zJMode 
f790: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4a 6f  = 0;       /* Jo
f7a0: 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
f7b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79  const char *zKey
f7c0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
f7d0: 20 45 6e 63 72 79 70 74 69 6f 6e 20 6b 65 79 20   Encryption key 
f7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 20 3d  */.  int nLook =
f7f0: 20 2d 31 2c 20 73 7a 4c 6f 6f 6b 20 3d 20 30 3b   -1, szLook = 0;
f800: 20 20 20 2f 2a 20 2d 2d 6c 6f 6f 6b 61 73 69 64     /* --lookasid
f810: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
f820: 2a 2f 0a 20 20 69 6e 74 20 6e 6f 53 79 6e 63 20  */.  int noSync 
f830: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
f840: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d     /* True for -
f850: 2d 6e 6f 73 79 6e 63 20 2a 2f 0a 20 20 69 6e 74  -nosync */.  int
f860: 20 70 61 67 65 53 69 7a 65 20 3d 20 30 3b 20 20   pageSize = 0;  
f870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
f880: 73 69 72 65 64 20 70 61 67 65 20 73 69 7a 65 2e  sired page size.
f890: 20 20 30 20 6d 65 61 6e 73 20 64 65 66 61 75 6c    0 means defaul
f8a0: 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 43 61 63  t */.  int nPCac
f8b0: 68 65 20 3d 20 30 2c 20 73 7a 50 43 61 63 68 65  he = 0, szPCache
f8c0: 20 3d 20 30 3b 2f 2a 20 2d 2d 70 63 61 63 68 65   = 0;/* --pcache
f8d0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
f8e0: 2f 0a 20 20 69 6e 74 20 64 6f 50 43 61 63 68 65  /.  int doPCache
f8f0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
f900: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 2d 2d 70    /* True if --p
f910: 63 61 63 68 65 20 69 73 20 73 65 65 6e 20 2a 2f  cache is seen */
f920: 0a 20 20 69 6e 74 20 73 68 6f 77 53 74 61 74 73  .  int showStats
f930: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
f940: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 73   /* True for --s
f950: 74 61 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  tats */.  int nT
f960: 68 72 65 61 64 20 3d 20 30 3b 20 20 20 20 20 20  hread = 0;      
f970: 20 20 20 20 20 20 20 20 2f 2a 20 2d 2d 74 68 72          /* --thr
f980: 65 61 64 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20  eads value */.  
f990: 69 6e 74 20 6d 6d 61 70 53 69 7a 65 20 3d 20 30  int mmapSize = 0
f9a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f9b0: 20 48 6f 77 20 62 69 67 20 6f 66 20 61 20 6d 65   How big of a me
f9c0: 6d 6f 72 79 20 6d 61 70 20 74 6f 20 75 73 65 20  mory map to use 
f9d0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f9e0: 2a 7a 54 53 65 74 20 3d 20 22 6d 61 69 6e 22 3b  *zTSet = "main";
f9f0: 20 20 20 2f 2a 20 57 68 69 63 68 20 2d 2d 74 65     /* Which --te
fa00: 73 74 73 65 74 20 74 6f 72 75 6e 20 2a 2f 0a 20  stset torun */. 
fa10: 20 69 6e 74 20 64 6f 54 72 61 63 65 20 3d 20 30   int doTrace = 0
fa20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
fa30: 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 74 72 61  * True for --tra
fa40: 63 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ce */.  const ch
fa50: 61 72 20 2a 7a 45 6e 63 6f 64 69 6e 67 20 3d 20  ar *zEncoding = 
fa60: 30 3b 20 20 20 20 2f 2a 20 2d 2d 75 74 66 31 36  0;    /* --utf16
fa70: 62 65 20 6f 72 20 2d 2d 75 74 66 31 36 6c 65 20  be or --utf16le 
fa80: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
fa90: 2a 7a 44 62 4e 61 6d 65 20 3d 20 30 3b 20 20 20  *zDbName = 0;   
faa0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
fab0: 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20  e test database 
fac0: 2a 2f 0a 0a 20 20 76 6f 69 64 20 2a 70 48 65 61  */..  void *pHea
fad0: 70 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  p = 0;          
fae0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
faf0: 20 68 65 61 70 20 73 70 61 63 65 20 2a 2f 0a 20   heap space */. 
fb00: 20 76 6f 69 64 20 2a 70 4c 6f 6f 6b 20 3d 20 30   void *pLook = 0
fb10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
fb20: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 6c 6f 6f 6b  * Allocated look
fb30: 61 73 69 64 65 20 73 70 61 63 65 20 2a 2f 0a 20  aside space */. 
fb40: 20 76 6f 69 64 20 2a 70 50 43 61 63 68 65 20 3d   void *pPCache =
fb50: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   0;            /
fb60: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 74 6f 72  * Allocated stor
fb70: 61 67 65 20 66 6f 72 20 70 63 61 63 68 65 20 2a  age for pcache *
fb80: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 69 48  /.  int iCur, iH
fb90: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
fba0: 20 20 2f 2a 20 53 74 61 74 73 20 76 61 6c 75 65    /* Stats value
fbb0: 73 2c 20 63 75 72 72 65 6e 74 20 61 6e 64 20 22  s, current and "
fbc0: 68 69 67 68 77 61 74 65 72 22 20 2a 2f 0a 20 20  highwater" */.  
fbd0: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fbf0: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
fc00: 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 20 2f 2a 20 41 50 49 20 72 65 74 75 72 6e 20 63   /* API return c
fc30: 6f 64 65 20 2a 2f 0a 0a 20 20 2f 2a 20 44 69 73  ode */..  /* Dis
fc40: 70 6c 61 79 20 74 68 65 20 76 65 72 73 69 6f 6e  play the version
fc50: 20 6f 66 20 53 51 4c 69 74 65 20 62 65 69 6e 67   of SQLite being
fc60: 20 74 65 73 74 65 64 20 2a 2f 0a 20 20 70 72 69   tested */.  pri
fc70: 6e 74 66 28 22 2d 2d 20 53 70 65 65 64 74 65 73  ntf("-- Speedtes
fc80: 74 31 20 66 6f 72 20 53 51 4c 69 74 65 20 25 73  t1 for SQLite %s
fc90: 20 25 2e 35 30 73 5c 6e 22 2c 0a 20 20 20 20 20   %.50s\n",.     
fca0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76      sqlite3_libv
fcb0: 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65  ersion(), sqlite
fcc0: 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 0a  3_sourceid());..
fcd0: 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 63 6f 6d    /* Process com
fce0: 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65  mand-line argume
fcf0: 6e 74 73 20 2a 2f 0a 20 20 67 2e 7a 57 52 20 3d  nts */.  g.zWR =
fd00: 20 22 22 3b 0a 20 20 67 2e 7a 4e 4e 20 3d 20 22   "";.  g.zNN = "
fd10: 22 3b 0a 20 20 67 2e 7a 50 4b 20 3d 20 22 55 4e  ";.  g.zPK = "UN
fd20: 49 51 55 45 22 3b 0a 20 20 67 2e 73 7a 54 65 73  IQUE";.  g.szTes
fd30: 74 20 3d 20 31 30 30 3b 0a 20 20 67 2e 6e 52 65  t = 100;.  g.nRe
fd40: 70 65 61 74 20 3d 20 31 3b 0a 20 20 66 6f 72 28  peat = 1;.  for(
fd50: 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=1; i<argc; i++
fd60: 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
fd70: 72 20 2a 7a 20 3d 20 61 72 67 76 5b 69 5d 3b 0a  r *z = argv[i];.
fd80: 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d      if( z[0]=='-
fd90: 27 20 29 7b 0a 20 20 20 20 20 20 64 6f 7b 20 7a  ' ){.      do{ z
fda0: 2b 2b 3b 20 7d 77 68 69 6c 65 28 20 7a 5b 30 5d  ++; }while( z[0]
fdb0: 3d 3d 27 2d 27 20 29 3b 0a 20 20 20 20 20 20 69  =='-' );.      i
fdc0: 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 61 75 74  f( strcmp(z,"aut
fdd0: 6f 76 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b 0a  ovacuum")==0 ){.
fde0: 20 20 20 20 20 20 20 20 64 6f 41 75 74 6f 76 61          doAutova
fdf0: 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c  c = 1;.      }el
fe00: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
fe10: 22 63 61 63 68 65 73 69 7a 65 22 29 3d 3d 30 20  "cachesize")==0 
fe20: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ){.        if( i
fe30: 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c  >=argc-1 ) fatal
fe40: 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20  _error("missing 
fe50: 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e  argument on %s\n
fe60: 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20  ", argv[i]);.   
fe70: 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
fe80: 20 20 63 61 63 68 65 53 69 7a 65 20 3d 20 69 6e    cacheSize = in
fe90: 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b  tegerValue(argv[
fea0: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  i]);.      }else
feb0: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 65   if( strcmp(z,"e
fec0: 78 63 6c 75 73 69 76 65 22 29 3d 3d 30 20 29 7b  xclusive")==0 ){
fed0: 0a 20 20 20 20 20 20 20 20 64 6f 45 78 63 6c 75  .        doExclu
fee0: 73 69 76 65 20 3d 20 31 3b 0a 20 20 20 20 20 20  sive = 1;.      
fef0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
ff00: 28 7a 2c 22 65 78 70 6c 61 69 6e 22 29 3d 3d 30  (z,"explain")==0
ff10: 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 53   ){.        g.bS
ff20: 71 6c 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20  qlOnly = 1;.    
ff30: 20 20 20 20 67 2e 62 45 78 70 6c 61 69 6e 20 3d      g.bExplain =
ff40: 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20   1;.      }else 
ff50: 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 68 65  if( strcmp(z,"he
ff60: 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ap")==0 ){.     
ff70: 20 20 20 69 66 28 20 69 3e 3d 61 72 67 63 2d 32     if( i>=argc-2
ff80: 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22   ) fatal_error("
ff90: 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74  missing argument
ffa0: 73 20 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67 76  s on %s\n", argv
ffb0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6e 48  [i]);.        nH
ffc0: 65 61 70 20 3d 20 69 6e 74 65 67 65 72 56 61 6c  eap = integerVal
ffd0: 75 65 28 61 72 67 76 5b 69 2b 31 5d 29 3b 0a 20  ue(argv[i+1]);. 
ffe0: 20 20 20 20 20 20 20 6d 6e 48 65 61 70 20 3d 20         mnHeap = 
fff0: 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67  integerValue(arg
10000 76 5b 69 2b 32 5d 29 3b 0a 20 20 20 20 20 20 20  v[i+2]);.       
10010 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 7d   i += 2;.      }
10020 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
10030 7a 2c 22 69 6e 63 72 76 61 63 75 75 6d 22 29 3d  z,"incrvacuum")=
10040 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 64 6f  =0 ){.        do
10050 49 6e 63 72 76 61 63 20 3d 20 31 3b 0a 20 20 20  Incrvac = 1;.   
10060 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
10070 63 6d 70 28 7a 2c 22 6a 6f 75 72 6e 61 6c 22 29  cmp(z,"journal")
10080 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
10090 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66  f( i>=argc-1 ) f
100a0 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73  atal_error("miss
100b0 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  ing argument on 
100c0 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b  %s\n", argv[i]);
100d0 0a 20 20 20 20 20 20 20 20 7a 4a 4d 6f 64 65 20  .        zJMode 
100e0 3d 20 61 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20 20  = argv[++i];.   
100f0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
10100 63 6d 70 28 7a 2c 22 6b 65 79 22 29 3d 3d 30 20  cmp(z,"key")==0 
10110 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ){.        if( i
10120 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c  >=argc-1 ) fatal
10130 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20  _error("missing 
10140 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e  argument on %s\n
10150 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20  ", argv[i]);.   
10160 20 20 20 20 20 7a 4b 65 79 20 3d 20 61 72 67 76       zKey = argv
10170 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  [++i];.      }el
10180 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
10190 22 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20  "lookaside")==0 
101a0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ){.        if( i
101b0 3e 3d 61 72 67 63 2d 32 20 29 20 66 61 74 61 6c  >=argc-2 ) fatal
101c0 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20  _error("missing 
101d0 61 72 67 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c  arguments on %s\
101e0 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20  n", argv[i]);.  
101f0 20 20 20 20 20 20 6e 4c 6f 6f 6b 20 3d 20 69 6e        nLook = in
10200 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b  tegerValue(argv[
10210 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 73  i+1]);.        s
10220 7a 4c 6f 6f 6b 20 3d 20 69 6e 74 65 67 65 72 56  zLook = integerV
10230 61 6c 75 65 28 61 72 67 76 5b 69 2b 32 5d 29 3b  alue(argv[i+2]);
10240 0a 20 20 20 20 20 20 20 20 69 20 2b 3d 20 32 3b  .        i += 2;
10250 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
10260 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 36  ION_NUMBER>=3006
10270 30 30 30 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  000.      }else 
10280 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6d 75  if( strcmp(z,"mu
10290 6c 74 69 74 68 72 65 61 64 22 29 3d 3d 30 20 29  ltithread")==0 )
102a0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
102b0 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
102c0 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45  CONFIG_MULTITHRE
102d0 41 44 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  AD);.      }else
102e0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e   if( strcmp(z,"n
102f0 6f 6d 65 6d 73 74 61 74 22 29 3d 3d 30 20 29 7b  omemstat")==0 ){
10300 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10310 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
10320 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c  ONFIG_MEMSTATUS,
10330 20 30 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20   0);.#endif.#if 
10340 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
10350 55 4d 42 45 52 3e 3d 33 30 30 37 30 31 37 0a 20  UMBER>=3007017. 
10360 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
10370 74 72 63 6d 70 28 7a 2c 20 22 6d 6d 61 70 22 29  trcmp(z, "mmap")
10380 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
10390 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66  f( i>=argc-1 ) f
103a0 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73  atal_error("miss
103b0 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  ing argument on 
103c0 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b  %s\n", argv[i]);
103d0 0a 20 20 20 20 20 20 20 20 6d 6d 61 70 53 69 7a  .        mmapSiz
103e0 65 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65  e = integerValue
103f0 28 61 72 67 76 5b 2b 2b 69 5d 29 3b 0a 20 23 65  (argv[++i]);. #e
10400 6e 64 69 66 0a 20 20 20 20 20 20 7d 65 6c 73 65  ndif.      }else
10410 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e   if( strcmp(z,"n
10420 6f 73 79 6e 63 22 29 3d 3d 30 20 29 7b 0a 20 20  osync")==0 ){.  
10430 20 20 20 20 20 20 6e 6f 53 79 6e 63 20 3d 20 31        noSync = 1
10440 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
10450 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e 6f 74 6e  ( strcmp(z,"notn
10460 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
10470 20 20 20 20 67 2e 7a 4e 4e 20 3d 20 22 4e 4f 54      g.zNN = "NOT
10480 20 4e 55 4c 4c 22 3b 0a 20 20 20 20 20 20 7d 65   NULL";.      }e
10490 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
104a0 2c 22 70 61 67 65 73 69 7a 65 22 29 3d 3d 30 20  ,"pagesize")==0 
104b0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ){.        if( i
104c0 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c  >=argc-1 ) fatal
104d0 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20  _error("missing 
104e0 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e  argument on %s\n
104f0 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20  ", argv[i]);.   
10500 20 20 20 20 20 70 61 67 65 53 69 7a 65 20 3d 20       pageSize = 
10510 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67  integerValue(arg
10520 76 5b 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20 7d  v[++i]);.      }
10530 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
10540 7a 2c 22 70 63 61 63 68 65 22 29 3d 3d 30 20 29  z,"pcache")==0 )
10550 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e  {.        if( i>
10560 3d 61 72 67 63 2d 32 20 29 20 66 61 74 61 6c 5f  =argc-2 ) fatal_
10570 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61  error("missing a
10580 72 67 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c 6e  rguments on %s\n
10590 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20  ", argv[i]);.   
105a0 20 20 20 20 20 6e 50 43 61 63 68 65 20 3d 20 69       nPCache = i
105b0 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
105c0 5b 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  [i+1]);.        
105d0 73 7a 50 43 61 63 68 65 20 3d 20 69 6e 74 65 67  szPCache = integ
105e0 65 72 56 61 6c 75 65 28 61 72 67 76 5b 69 2b 32  erValue(argv[i+2
105f0 5d 29 3b 0a 20 20 20 20 20 20 20 20 64 6f 50 43  ]);.        doPC
10600 61 63 68 65 20 3d 20 31 3b 0a 20 20 20 20 20 20  ache = 1;.      
10610 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20    i += 2;.      
10620 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
10630 28 7a 2c 22 70 72 69 6d 61 72 79 6b 65 79 22 29  (z,"primarykey")
10640 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67  ==0 ){.        g
10650 2e 7a 50 4b 20 3d 20 22 50 52 49 4d 41 52 59 20  .zPK = "PRIMARY 
10660 4b 45 59 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73  KEY";.      }els
10670 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
10680 72 65 70 65 61 74 22 29 3d 3d 30 20 29 7b 0a 20  repeat")==0 ){. 
10690 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d 61 72         if( i>=ar
106a0 67 63 2d 31 20 29 20 66 61 74 61 6c 5f 65 72 72  gc-1 ) fatal_err
106b0 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72 67 75  or("missing argu
106c0 6d 65 6e 74 73 20 6f 6e 20 25 73 5c 6e 22 2c 20  ments on %s\n", 
106d0 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20  argv[i]);.      
106e0 20 20 67 2e 6e 52 65 70 65 61 74 20 3d 20 69 6e    g.nRepeat = in
106f0 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b  tegerValue(argv[
10700 69 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  i+1]);.        i
10710 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c   += 1;.      }el
10720 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
10730 22 72 65 70 72 65 70 61 72 65 22 29 3d 3d 30 20  "reprepare")==0 
10740 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 52 65  ){.        g.bRe
10750 70 72 65 70 61 72 65 20 3d 20 31 3b 0a 23 69 66  prepare = 1;.#if
10760 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
10770 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 30 0a  NUMBER>=3006000.
10780 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
10790 73 74 72 63 6d 70 28 7a 2c 22 73 65 72 69 61 6c  strcmp(z,"serial
107a0 69 7a 65 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ized")==0 ){.   
107b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e       sqlite3_con
107c0 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
107d0 47 5f 53 45 52 49 41 4c 49 5a 45 44 29 3b 0a 20  G_SERIALIZED);. 
107e0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
107f0 74 72 63 6d 70 28 7a 2c 22 73 69 6e 67 6c 65 74  trcmp(z,"singlet
10800 68 72 65 61 64 22 29 3d 3d 30 20 29 7b 0a 20 20  hread")==0 ){.  
10810 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f        sqlite3_co
10820 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
10830 49 47 5f 53 49 4e 47 4c 45 54 48 52 45 41 44 29  IG_SINGLETHREAD)
10840 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7d  ;.#endif.      }
10850 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
10860 7a 2c 22 73 71 6c 6f 6e 6c 79 22 29 3d 3d 30 20  z,"sqlonly")==0 
10870 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 53 71  ){.        g.bSq
10880 6c 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20  lOnly = 1;.     
10890 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
108a0 70 28 7a 2c 22 73 68 72 69 6e 6b 2d 6d 65 6d 6f  p(z,"shrink-memo
108b0 72 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ry")==0 ){.     
108c0 20 20 20 67 2e 62 4d 65 6d 53 68 72 69 6e 6b 20     g.bMemShrink 
108d0 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
108e0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 73   if( strcmp(z,"s
108f0 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ize")==0 ){.    
10900 20 20 20 20 69 66 28 20 69 3e 3d 61 72 67 63 2d      if( i>=argc-
10910 31 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28  1 ) fatal_error(
10920 22 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e  "missing argumen
10930 74 20 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67 76  t on %s\n", argv
10940 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 67 2e  [i]);.        g.
10950 73 7a 54 65 73 74 20 3d 20 69 6e 74 65 67 65 72  szTest = integer
10960 56 61 6c 75 65 28 61 72 67 76 5b 2b 2b 69 5d 29  Value(argv[++i])
10970 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
10980 28 20 73 74 72 63 6d 70 28 7a 2c 22 73 74 61 74  ( strcmp(z,"stat
10990 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  s")==0 ){.      
109a0 20 20 73 68 6f 77 53 74 61 74 73 20 3d 20 31 3b    showStats = 1;
109b0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
109c0 20 73 74 72 63 6d 70 28 7a 2c 22 74 65 6d 70 22   strcmp(z,"temp"
109d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
109e0 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20  if( i>=argc-1 ) 
109f0 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73  fatal_error("mis
10a00 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e  sing argument on
10a10 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29   %s\n", argv[i])
10a20 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20  ;.        i++;. 
10a30 20 20 20 20 20 20 20 69 66 28 20 61 72 67 76 5b         if( argv[
10a40 69 5d 5b 30 5d 3c 27 30 27 20 7c 7c 20 61 72 67  i][0]<'0' || arg
10a50 76 5b 69 5d 5b 30 5d 3e 27 39 27 20 7c 7c 20 61  v[i][0]>'9' || a
10a60 72 67 76 5b 69 5d 5b 31 5d 21 3d 30 20 29 7b 0a  rgv[i][1]!=0 ){.
10a70 20 20 20 20 20 20 20 20 20 20 66 61 74 61 6c 5f            fatal_
10a80 65 72 72 6f 72 28 22 61 72 67 75 6d 65 6e 74 20  error("argument 
10a90 74 6f 20 2d 2d 74 65 6d 70 20 73 68 6f 75 6c 64  to --temp should
10aa0 20 62 65 20 69 6e 74 65 67 65 72 20 62 65 74 77   be integer betw
10ab0 65 65 6e 20 30 20 61 6e 64 20 39 22 29 3b 0a 20  een 0 and 9");. 
10ac0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10ad0 20 67 2e 65 54 65 6d 70 20 3d 20 61 72 67 76 5b   g.eTemp = argv[
10ae0 69 5d 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20 20  i][0] - '0';.   
10af0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
10b00 63 6d 70 28 7a 2c 22 74 65 73 74 73 65 74 22 29  cmp(z,"testset")
10b10 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
10b20 66 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66  f( i>=argc-1 ) f
10b30 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73  atal_error("miss
10b40 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  ing argument on 
10b50 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b  %s\n", argv[i]);
10b60 0a 20 20 20 20 20 20 20 20 7a 54 53 65 74 20 3d  .        zTSet =
10b70 20 61 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20 20 20   argv[++i];.    
10b80 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
10b90 6d 70 28 7a 2c 22 74 72 61 63 65 22 29 3d 3d 30  mp(z,"trace")==0
10ba0 20 29 7b 0a 20 20 20 20 20 20 20 20 64 6f 54 72   ){.        doTr
10bb0 61 63 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  ace = 1;.      }
10bc0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
10bd0 7a 2c 22 74 68 72 65 61 64 73 22 29 3d 3d 30 20  z,"threads")==0 
10be0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  ){.        if( i
10bf0 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c  >=argc-1 ) fatal
10c00 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20  _error("missing 
10c10 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e  argument on %s\n
10c20 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20  ", argv[i]);.   
10c30 20 20 20 20 20 6e 54 68 72 65 61 64 20 3d 20 69       nThread = i
10c40 6e 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76  ntegerValue(argv
10c50 5b 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65  [++i]);.      }e
10c60 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
10c70 2c 22 75 74 66 31 36 6c 65 22 29 3d 3d 30 20 29  ,"utf16le")==0 )
10c80 7b 0a 20 20 20 20 20 20 20 20 7a 45 6e 63 6f 64  {.        zEncod
10c90 69 6e 67 20 3d 20 22 75 74 66 31 36 6c 65 22 3b  ing = "utf16le";
10ca0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
10cb0 20 73 74 72 63 6d 70 28 7a 2c 22 75 74 66 31 36   strcmp(z,"utf16
10cc0 62 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  be")==0 ){.     
10cd0 20 20 20 7a 45 6e 63 6f 64 69 6e 67 20 3d 20 22     zEncoding = "
10ce0 75 74 66 31 36 62 65 22 3b 0a 20 20 20 20 20 20  utf16be";.      
10cf0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
10d00 28 7a 2c 22 76 65 72 69 66 79 22 29 3d 3d 30 20  (z,"verify")==0 
10d10 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 56 65  ){.        g.bVe
10d20 72 69 66 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  rify = 1;.      
10d30 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
10d40 28 7a 2c 22 77 69 74 68 6f 75 74 2d 72 6f 77 69  (z,"without-rowi
10d50 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  d")==0 ){.      
10d60 20 20 67 2e 7a 57 52 20 3d 20 22 57 49 54 48 4f    g.zWR = "WITHO
10d70 55 54 20 52 4f 57 49 44 22 3b 0a 20 20 20 20 20  UT ROWID";.     
10d80 20 20 20 67 2e 7a 50 4b 20 3d 20 22 50 52 49 4d     g.zPK = "PRIM
10d90 41 52 59 20 4b 45 59 22 3b 0a 20 20 20 20 20 20  ARY KEY";.      
10da0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
10db0 28 7a 2c 20 22 68 65 6c 70 22 29 3d 3d 30 20 7c  (z, "help")==0 |
10dc0 7c 20 73 74 72 63 6d 70 28 7a 2c 22 3f 22 29 3d  | strcmp(z,"?")=
10dd0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72  =0 ){.        pr
10de0 69 6e 74 66 28 7a 48 65 6c 70 2c 20 61 72 67 76  intf(zHelp, argv
10df0 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 65 78  [0]);.        ex
10e00 69 74 28 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  it(0);.      }el
10e10 73 65 7b 0a 20 20 20 20 20 20 20 20 66 61 74 61  se{.        fata
10e20 6c 5f 65 72 72 6f 72 28 22 75 6e 6b 6e 6f 77 6e  l_error("unknown
10e30 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 55 73 65   option: %s\nUse
10e40 20 5c 22 25 73 20 2d 3f 5c 22 20 66 6f 72 20 68   \"%s -?\" for h
10e50 65 6c 70 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  elp\n",.        
10e60 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 76              argv
10e70 5b 69 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20  [i], argv[0]);. 
10e80 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
10e90 20 69 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 20   if( zDbName==0 
10ea0 29 7b 0a 20 20 20 20 20 20 7a 44 62 4e 61 6d 65  ){.      zDbName
10eb0 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20   = argv[i];.    
10ec0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 61 74  }else{.      fat
10ed0 61 6c 5f 65 72 72 6f 72 28 22 73 75 72 70 6c 75  al_error("surplu
10ee0 73 20 61 72 67 75 6d 65 6e 74 3a 20 25 73 5c 6e  s argument: %s\n
10ef0 55 73 65 20 5c 22 25 73 20 2d 3f 5c 22 20 66 6f  Use \"%s -?\" fo
10f00 72 20 68 65 6c 70 5c 6e 22 2c 0a 20 20 20 20 20  r help\n",.     
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
10f20 76 5b 69 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a  v[i], argv[0]);.
10f30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
10f40 7a 44 62 4e 61 6d 65 21 3d 30 20 29 20 75 6e 6c  zDbName!=0 ) unl
10f50 69 6e 6b 28 7a 44 62 4e 61 6d 65 29 3b 0a 23 69  ink(zDbName);.#i
10f60 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
10f70 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 31  _NUMBER>=3006001
10f80 0a 20 20 69 66 28 20 6e 48 65 61 70 3e 30 20 29  .  if( nHeap>0 )
10f90 7b 0a 20 20 20 20 70 48 65 61 70 20 3d 20 6d 61  {.    pHeap = ma
10fa0 6c 6c 6f 63 28 20 6e 48 65 61 70 20 29 3b 0a 20  lloc( nHeap );. 
10fb0 20 20 20 69 66 28 20 70 48 65 61 70 3d 3d 30 20     if( pHeap==0 
10fc0 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 63  ) fatal_error("c
10fd0 61 6e 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 20 25  annot allocate %
10fe0 64 2d 62 79 74 65 20 68 65 61 70 5c 6e 22 2c 20  d-byte heap\n", 
10ff0 6e 48 65 61 70 29 3b 0a 20 20 20 20 72 63 20 3d  nHeap);.    rc =
11000 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
11010 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45  SQLITE_CONFIG_HE
11020 41 50 2c 20 70 48 65 61 70 2c 20 6e 48 65 61 70  AP, pHeap, nHeap
11030 2c 20 6d 6e 48 65 61 70 29 3b 0a 20 20 20 20 69  , mnHeap);.    i
11040 66 28 20 72 63 20 29 20 66 61 74 61 6c 5f 65 72  f( rc ) fatal_er
11050 72 6f 72 28 22 68 65 61 70 20 63 6f 6e 66 69 67  ror("heap config
11060 75 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 3a 20  uration failed: 
11070 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 7d 0a  %d\n", rc);.  }.
11080 20 20 69 66 28 20 64 6f 50 43 61 63 68 65 20 29    if( doPCache )
11090 7b 0a 20 20 20 20 69 66 28 20 6e 50 43 61 63 68  {.    if( nPCach
110a0 65 3e 30 20 26 26 20 73 7a 50 43 61 63 68 65 3e  e>0 && szPCache>
110b0 30 20 29 7b 0a 20 20 20 20 20 20 70 50 43 61 63  0 ){.      pPCac
110c0 68 65 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 50 43  he = malloc( nPC
110d0 61 63 68 65 2a 28 73 71 6c 69 74 65 33 5f 69 6e  ache*(sqlite3_in
110e0 74 36 34 29 73 7a 50 43 61 63 68 65 20 29 3b 0a  t64)szPCache );.
110f0 20 20 20 20 20 20 69 66 28 20 70 50 43 61 63 68        if( pPCach
11100 65 3d 3d 30 20 29 20 66 61 74 61 6c 5f 65 72 72  e==0 ) fatal_err
11110 6f 72 28 22 63 61 6e 6e 6f 74 20 61 6c 6c 6f 63  or("cannot alloc
11120 61 74 65 20 25 6c 6c 64 2d 62 79 74 65 20 70 63  ate %lld-byte pc
11130 61 63 68 65 5c 6e 22 2c 0a 20 20 20 20 20 20 20  ache\n",.       
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 20 20 20 20 20 20 20 20 20 20 20 6e 50 43 61              nPCa
11160 63 68 65 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74  che*(sqlite3_int
11170 36 34 29 73 7a 50 43 61 63 68 65 29 3b 0a 20 20  64)szPCache);.  
11180 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
11190 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
111a0 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41  TE_CONFIG_PAGECA
111b0 43 48 45 2c 20 70 50 43 61 63 68 65 2c 20 73 7a  CHE, pPCache, sz
111c0 50 43 61 63 68 65 2c 20 6e 50 43 61 63 68 65 29  PCache, nPCache)
111d0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 66  ;.    if( rc ) f
111e0 61 74 61 6c 5f 65 72 72 6f 72 28 22 70 63 61 63  atal_error("pcac
111f0 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
11200 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20   failed: %d\n", 
11210 72 63 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e  rc);.  }.  if( n
11220 4c 6f 6f 6b 3e 3d 30 20 29 7b 0a 20 20 20 20 73  Look>=0 ){.    s
11230 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
11240 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b  LITE_CONFIG_LOOK
11250 41 53 49 44 45 2c 20 30 2c 20 30 29 3b 0a 20 20  ASIDE, 0, 0);.  
11260 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20  }.#endif. .  /* 
11270 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  Open the databas
11280 65 20 61 6e 64 20 74 68 65 20 69 6e 70 75 74 20  e and the input 
11290 66 69 6c 65 20 2a 2f 0a 20 20 69 66 28 20 73 71  file */.  if( sq
112a0 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 44 62 4e 61  lite3_open(zDbNa
112b0 6d 65 2c 20 26 67 2e 64 62 29 20 29 7b 0a 20 20  me, &g.db) ){.  
112c0 20 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 43    fatal_error("C
112d0 61 6e 6e 6f 74 20 6f 70 65 6e 20 64 61 74 61 62  annot open datab
112e0 61 73 65 20 66 69 6c 65 3a 20 25 73 5c 6e 22 2c  ase file: %s\n",
112f0 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20 7d 0a 23   zDbName);.  }.#
11300 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
11310 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30  N_NUMBER>=300600
11320 31 0a 20 20 69 66 28 20 6e 4c 6f 6f 6b 3e 30 20  1.  if( nLook>0 
11330 26 26 20 73 7a 4c 6f 6f 6b 3e 30 20 29 7b 0a 20  && szLook>0 ){. 
11340 20 20 20 70 4c 6f 6f 6b 20 3d 20 6d 61 6c 6c 6f     pLook = mallo
11350 63 28 20 6e 4c 6f 6f 6b 2a 73 7a 4c 6f 6f 6b 20  c( nLook*szLook 
11360 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
11370 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 28 67 2e  te3_db_config(g.
11380 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e  db, SQLITE_DBCON
11390 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 70  FIG_LOOKASIDE, p
113a0 4c 6f 6f 6b 2c 20 73 7a 4c 6f 6f 6b 2c 6e 4c 6f  Look, szLook,nLo
113b0 6f 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ok);.    if( rc 
113c0 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6c  ) fatal_error("l
113d0 6f 6f 6b 61 73 69 64 65 20 63 6f 6e 66 69 67 75  ookaside configu
113e0 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 3a 20 25  ration failed: %
113f0 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 7d 0a 23  d\n", rc);.  }.#
11400 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 53 65 74 20  endif..  /* Set 
11410 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11420 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 2a 2f 0a 20  ion options */. 
11430 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
11440 66 75 6e 63 74 69 6f 6e 28 67 2e 64 62 2c 20 22  function(g.db, "
11450 72 61 6e 64 6f 6d 22 2c 20 30 2c 20 53 51 4c 49  random", 0, SQLI
11460 54 45 5f 55 54 46 38 2c 20 30 2c 20 72 61 6e 64  TE_UTF8, 0, rand
11470 6f 6d 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 23  omFunc, 0, 0);.#
11480 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11490 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20  IT_DEPRECATED.  
114a0 69 66 28 20 64 6f 54 72 61 63 65 20 29 20 73 71  if( doTrace ) sq
114b0 6c 69 74 65 33 5f 74 72 61 63 65 28 67 2e 64 62  lite3_trace(g.db
114c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
114d0 20 30 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66   0);.#endif.  if
114e0 28 20 6d 6d 61 70 53 69 7a 65 3e 30 20 29 7b 0a  ( mmapSize>0 ){.
114f0 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65      speedtest1_e
11500 78 65 63 28 22 50 52 41 47 4d 41 20 6d 6d 61 70  xec("PRAGMA mmap
11510 5f 73 69 7a 65 3d 25 64 22 2c 20 6d 6d 61 70 53  _size=%d", mmapS
11520 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65  ize);.  }.  spee
11530 64 74 65 73 74 31 5f 65 78 65 63 28 22 50 52 41  dtest1_exec("PRA
11540 47 4d 41 20 74 68 72 65 61 64 73 3d 25 64 22 2c  GMA threads=%d",
11550 20 6e 54 68 72 65 61 64 29 3b 0a 20 20 69 66 28   nThread);.  if(
11560 20 7a 4b 65 79 20 29 7b 0a 20 20 20 20 73 70 65   zKey ){.    spe
11570 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 50 52  edtest1_exec("PR
11580 41 47 4d 41 20 6b 65 79 28 27 25 73 27 29 22 2c  AGMA key('%s')",
11590 20 7a 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 69 66   zKey);.  }.  if
115a0 28 20 7a 45 6e 63 6f 64 69 6e 67 20 29 7b 0a 20  ( zEncoding ){. 
115b0 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78     speedtest1_ex
115c0 65 63 28 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  ec("PRAGMA encod
115d0 69 6e 67 3d 25 73 22 2c 20 7a 45 6e 63 6f 64 69  ing=%s", zEncodi
115e0 6e 67 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  ng);.  }.  if( d
115f0 6f 41 75 74 6f 76 61 63 20 29 7b 0a 20 20 20 20  oAutovac ){.    
11600 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28  speedtest1_exec(
11610 22 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63  "PRAGMA auto_vac
11620 75 75 6d 3d 46 55 4c 4c 22 29 3b 0a 20 20 7d 65  uum=FULL");.  }e
11630 6c 73 65 20 69 66 28 20 64 6f 49 6e 63 72 76 61  lse if( doIncrva
11640 63 20 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65  c ){.    speedte
11650 73 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41  st1_exec("PRAGMA
11660 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 49 4e 43   auto_vacuum=INC
11670 52 45 4d 45 4e 54 41 4c 22 29 3b 0a 20 20 7d 0a  REMENTAL");.  }.
11680 20 20 69 66 28 20 70 61 67 65 53 69 7a 65 20 29    if( pageSize )
11690 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  {.    speedtest1
116a0 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20 70 61  _exec("PRAGMA pa
116b0 67 65 5f 73 69 7a 65 3d 25 64 22 2c 20 70 61 67  ge_size=%d", pag
116c0 65 53 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66  eSize);.  }.  if
116d0 28 20 63 61 63 68 65 53 69 7a 65 20 29 7b 0a 20  ( cacheSize ){. 
116e0 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78     speedtest1_ex
116f0 65 63 28 22 50 52 41 47 4d 41 20 63 61 63 68 65  ec("PRAGMA cache
11700 5f 73 69 7a 65 3d 25 64 22 2c 20 63 61 63 68 65  _size=%d", cache
11710 53 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28  Size);.  }.  if(
11720 20 6e 6f 53 79 6e 63 20 29 20 73 70 65 65 64 74   noSync ) speedt
11730 65 73 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d  est1_exec("PRAGM
11740 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  A synchronous=OF
11750 46 22 29 3b 0a 20 20 69 66 28 20 64 6f 45 78 63  F");.  if( doExc
11760 6c 75 73 69 76 65 20 29 7b 0a 20 20 20 20 73 70  lusive ){.    sp
11770 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 50  eedtest1_exec("P
11780 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f  RAGMA locking_mo
11790 64 65 3d 45 58 43 4c 55 53 49 56 45 22 29 3b 0a  de=EXCLUSIVE");.
117a0 20 20 7d 0a 20 20 69 66 28 20 7a 4a 4d 6f 64 65    }.  if( zJMode
117b0 20 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73   ){.    speedtes
117c0 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20  t1_exec("PRAGMA 
117d0 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 25 73 22  journal_mode=%s"
117e0 2c 20 7a 4a 4d 6f 64 65 29 3b 0a 20 20 7d 0a 0a  , zJMode);.  }..
117f0 20 20 69 66 28 20 67 2e 62 45 78 70 6c 61 69 6e    if( g.bExplain
11800 20 29 20 70 72 69 6e 74 66 28 22 2e 65 78 70 6c   ) printf(".expl
11810 61 69 6e 5c 6e 2e 65 63 68 6f 20 6f 6e 5c 6e 22  ain\n.echo on\n"
11820 29 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28  );.  if( strcmp(
11830 7a 54 53 65 74 2c 22 6d 61 69 6e 22 29 3d 3d 30  zTSet,"main")==0
11840 20 29 7b 0a 20 20 20 20 74 65 73 74 73 65 74 5f   ){.    testset_
11850 6d 61 69 6e 28 29 3b 0a 20 20 7d 65 6c 73 65 20  main();.  }else 
11860 69 66 28 20 73 74 72 63 6d 70 28 7a 54 53 65 74  if( strcmp(zTSet
11870 2c 22 64 65 62 75 67 31 22 29 3d 3d 30 20 29 7b  ,"debug1")==0 ){
11880 0a 20 20 20 20 74 65 73 74 73 65 74 5f 64 65 62  .    testset_deb
11890 75 67 31 28 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ug1();.  }else i
118a0 66 28 20 73 74 72 63 6d 70 28 7a 54 53 65 74 2c  f( strcmp(zTSet,
118b0 22 6f 72 6d 22 29 3d 3d 30 20 29 7b 0a 20 20 20  "orm")==0 ){.   
118c0 20 74 65 73 74 73 65 74 5f 6f 72 6d 28 29 3b 0a   testset_orm();.
118d0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
118e0 6d 70 28 7a 54 53 65 74 2c 22 63 74 65 22 29 3d  mp(zTSet,"cte")=
118f0 3d 30 20 29 7b 0a 20 20 20 20 74 65 73 74 73 65  =0 ){.    testse
11900 74 5f 63 74 65 28 29 3b 0a 20 20 7d 65 6c 73 65  t_cte();.  }else
11910 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 53 65   if( strcmp(zTSe
11920 74 2c 22 66 70 22 29 3d 3d 30 20 29 7b 0a 20 20  t,"fp")==0 ){.  
11930 20 20 74 65 73 74 73 65 74 5f 66 70 28 29 3b 0a    testset_fp();.
11940 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
11950 6d 70 28 7a 54 53 65 74 2c 22 74 72 69 67 67 65  mp(zTSet,"trigge
11960 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65  r")==0 ){.    te
11970 73 74 73 65 74 5f 74 72 69 67 67 65 72 28 29 3b  stset_trigger();
11980 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
11990 63 6d 70 28 7a 54 53 65 74 2c 22 72 74 72 65 65  cmp(zTSet,"rtree
119a0 22 29 3d 3d 30 20 29 7b 0a 23 69 66 64 65 66 20  ")==0 ){.#ifdef 
119b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54  SQLITE_ENABLE_RT
119c0 52 45 45 0a 20 20 20 20 74 65 73 74 73 65 74 5f  REE.    testset_
119d0 72 74 72 65 65 28 36 2c 20 31 34 37 29 3b 0a 23  rtree(6, 147);.#
119e0 65 6c 73 65 0a 20 20 20 20 66 61 74 61 6c 5f 65  else.    fatal_e
119f0 72 72 6f 72 28 22 63 6f 6d 70 69 6c 65 20 77 69  rror("compile wi
11a00 74 68 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42  th -DSQLITE_ENAB
11a10 4c 45 5f 52 54 52 45 45 20 74 6f 20 65 6e 61 62  LE_RTREE to enab
11a20 6c 65 20 22 0a 20 20 20 20 20 20 20 20 20 20 20  le ".           
11a30 20 20 20 20 20 22 74 68 65 20 52 2d 54 72 65 65       "the R-Tree
11a40 20 74 65 73 74 73 5c 6e 22 29 3b 0a 23 65 6e 64   tests\n");.#end
11a50 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
11a60 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 75 6e 6b  fatal_error("unk
11a70 6e 6f 77 6e 20 74 65 73 74 73 65 74 3a 20 5c 22  nown testset: \"
11a80 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20 20 20 20  %s\"\n".        
11a90 20 20 20 20 20 20 20 20 22 43 68 6f 69 63 65 73          "Choices
11aa0 3a 20 63 74 65 20 64 65 62 75 67 31 20 66 70 20  : cte debug1 fp 
11ab0 6d 61 69 6e 20 6f 72 6d 20 72 74 72 65 65 20 74  main orm rtree t
11ac0 72 69 67 67 65 72 5c 6e 22 2c 0a 20 20 20 20 20  rigger\n",.     
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 7a 54 53 65              zTSe
11ae0 74 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  t);.  }.  speedt
11af0 65 73 74 31 5f 66 69 6e 61 6c 28 29 3b 0a 0a 20  est1_final();.. 
11b00 20 69 66 28 20 73 68 6f 77 53 74 61 74 73 20 29   if( showStats )
11b10 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  {.    sqlite3_ex
11b20 65 63 28 67 2e 64 62 2c 20 22 50 52 41 47 4d 41  ec(g.db, "PRAGMA
11b30 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73   compile_options
11b40 22 2c 20 78 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  ", xCompileOptio
11b50 6e 73 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  ns, 0, 0);.  }..
11b60 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
11b70 6e 6e 65 63 74 69 6f 6e 20 73 74 61 74 69 73 74  nnection statist
11b80 69 63 73 20 70 72 69 6e 74 65 64 20 61 66 74 65  ics printed afte
11b90 72 20 62 6f 74 68 20 70 72 65 70 61 72 65 64 20  r both prepared 
11ba0 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 2a 2a 20  statements.  ** 
11bb0 68 61 76 65 20 62 65 65 6e 20 66 69 6e 61 6c 69  have been finali
11bc0 7a 65 64 20 2a 2f 0a 23 69 66 20 53 51 4c 49 54  zed */.#if SQLIT
11bd0 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
11be0 3e 3d 33 30 30 37 30 30 39 0a 20 20 69 66 28 20  >=3007009.  if( 
11bf0 73 68 6f 77 53 74 61 74 73 20 29 7b 0a 20 20 20  showStats ){.   
11c00 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
11c10 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f  us(g.db, SQLITE_
11c20 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49  DBSTATUS_LOOKASI
11c30 44 45 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20  DE_USED, &iCur, 
11c40 26 69 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72  &iHi, 0);.    pr
11c50 69 6e 74 66 28 22 2d 2d 20 4c 6f 6f 6b 61 73 69  intf("-- Lookasi
11c60 64 65 20 53 6c 6f 74 73 20 55 73 65 64 3a 20 20  de Slots Used:  
11c70 20 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64        %d (max %d
11c80 29 5c 6e 22 2c 20 69 43 75 72 2c 69 48 69 29 3b  )\n", iCur,iHi);
11c90 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
11ca0 73 74 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c  status(g.db, SQL
11cb0 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f  ITE_DBSTATUS_LOO
11cc0 4b 41 53 49 44 45 5f 48 49 54 2c 20 26 69 43 75  KASIDE_HIT, &iCu
11cd0 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20 20  r, &iHi, 0);.   
11ce0 20 70 72 69 6e 74 66 28 22 2d 2d 20 53 75 63 63   printf("-- Succ
11cf0 65 73 73 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65  essful lookaside
11d00 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20  s:       %d\n", 
11d10 69 48 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iHi);.    sqlite
11d20 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64 62  3_db_status(g.db
11d30 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
11d40 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53  S_LOOKASIDE_MISS
11d50 5f 53 49 5a 45 2c 20 26 69 43 75 72 2c 26 69 48  _SIZE, &iCur,&iH
11d60 69 2c 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  i,0);.    printf
11d70 28 22 2d 2d 20 4c 6f 6f 6b 61 73 69 64 65 20 73  ("-- Lookaside s
11d80 69 7a 65 20 66 61 75 6c 74 73 3a 20 20 20 20 20  ize faults:     
11d90 20 20 25 64 5c 6e 22 2c 20 69 48 69 29 3b 0a 20    %d\n", iHi);. 
11da0 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
11db0 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54  atus(g.db, SQLIT
11dc0 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41  E_DBSTATUS_LOOKA
11dd0 53 49 44 45 5f 4d 49 53 53 5f 46 55 4c 4c 2c 20  SIDE_MISS_FULL, 
11de0 26 69 43 75 72 2c 26 69 48 69 2c 30 29 3b 0a 20  &iCur,&iHi,0);. 
11df0 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c 6f     printf("-- Lo
11e00 6f 6b 61 73 69 64 65 20 4f 4f 4d 20 66 61 75 6c  okaside OOM faul
11e10 74 73 3a 20 20 20 20 20 20 20 20 25 64 5c 6e 22  ts:        %d\n"
11e20 2c 20 69 48 69 29 3b 0a 20 20 20 20 73 71 6c 69  , iHi);.    sqli
11e30 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e  te3_db_status(g.
11e40 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
11e50 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 20  TUS_CACHE_USED, 
11e60 26 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b  &iCur, &iHi, 0);
11e70 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20  .    printf("-- 
11e80 50 61 67 65 72 20 48 65 61 70 20 55 73 61 67 65  Pager Heap Usage
11e90 3a 20 20 20 20 20 20 20 20 20 20 20 20 25 64 20  :            %d 
11ea0 62 79 74 65 73 5c 6e 22 2c 20 69 43 75 72 29 3b  bytes\n", iCur);
11eb0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
11ec0 73 74 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c  status(g.db, SQL
11ed0 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
11ee0 48 45 5f 48 49 54 2c 20 26 69 43 75 72 2c 20 26  HE_HIT, &iCur, &
11ef0 69 48 69 2c 20 31 29 3b 0a 20 20 20 20 70 72 69  iHi, 1);.    pri
11f00 6e 74 66 28 22 2d 2d 20 50 61 67 65 20 63 61 63  ntf("-- Page cac
11f10 68 65 20 68 69 74 73 3a 20 20 20 20 20 20 20 20  he hits:        
11f20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72       %d\n", iCur
11f30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64  );.    sqlite3_d
11f40 62 5f 73 74 61 74 75 73 28 67 2e 64 62 2c 20 53  b_status(g.db, S
11f50 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43  QLITE_DBSTATUS_C
11f60 41 43 48 45 5f 4d 49 53 53 2c 20 26 69 43 75 72  ACHE_MISS, &iCur
11f70 2c 20 26 69 48 69 2c 20 31 29 3b 0a 20 20 20 20  , &iHi, 1);.    
11f80 70 72 69 6e 74 66 28 22 2d 2d 20 50 61 67 65 20  printf("-- Page 
11f90 63 61 63 68 65 20 6d 69 73 73 65 73 3a 20 20 20  cache misses:   
11fa0 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69          %d\n", i
11fb0 43 75 72 29 3b 0a 23 69 66 20 53 51 4c 49 54 45  Cur);.#if SQLITE
11fc0 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e  _VERSION_NUMBER>
11fd0 3d 33 30 30 37 30 31 32 0a 20 20 20 20 73 71 6c  =3007012.    sql
11fe0 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67  ite3_db_status(g
11ff0 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54  .db, SQLITE_DBST
12000 41 54 55 53 5f 43 41 43 48 45 5f 57 52 49 54 45  ATUS_CACHE_WRITE
12010 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20 31  , &iCur, &iHi, 1
12020 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d  );.    printf("-
12030 2d 20 50 61 67 65 20 63 61 63 68 65 20 77 72 69  - Page cache wri
12040 74 65 73 3a 20 20 20 20 20 20 20 20 20 20 20 25  tes:           %
12050 64 5c 6e 22 2c 20 69 43 75 72 29 3b 20 0a 23 65  d\n", iCur); .#e
12060 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33  ndif.    sqlite3
12070 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64 62 2c  _db_status(g.db,
12080 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
12090 5f 53 43 48 45 4d 41 5f 55 53 45 44 2c 20 26 69  _SCHEMA_USED, &i
120a0 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20  Cur, &iHi, 0);. 
120b0 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 53 63     printf("-- Sc
120c0 68 65 6d 61 20 48 65 61 70 20 55 73 61 67 65 3a  hema Heap Usage:
120d0 20 20 20 20 20 20 20 20 20 20 20 25 64 20 62 79             %d by
120e0 74 65 73 5c 6e 22 2c 20 69 43 75 72 29 3b 20 0a  tes\n", iCur); .
120f0 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
12100 74 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49  tatus(g.db, SQLI
12110 54 45 5f 44 42 53 54 41 54 55 53 5f 53 54 4d 54  TE_DBSTATUS_STMT
12120 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69  _USED, &iCur, &i
12130 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e  Hi, 0);.    prin
12140 74 66 28 22 2d 2d 20 53 74 61 74 65 6d 65 6e 74  tf("-- Statement
12150 20 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20   Heap Usage:    
12160 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c      %d bytes\n",
12170 20 69 43 75 72 29 3b 20 0a 20 20 7d 0a 23 65 6e   iCur); .  }.#en
12180 64 69 66 0a 0a 20 20 73 71 6c 69 74 65 33 5f 63  dif..  sqlite3_c
12190 6c 6f 73 65 28 67 2e 64 62 29 3b 0a 0a 23 69 66  lose(g.db);..#if
121a0 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
121b0 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 31 0a  NUMBER>=3006001.
121c0 20 20 2f 2a 20 47 6c 6f 62 61 6c 20 6d 65 6d 6f    /* Global memo
121d0 72 79 20 75 73 61 67 65 20 73 74 61 74 69 73 74  ry usage statist
121e0 69 63 73 20 70 72 69 6e 74 65 64 20 61 66 74 65  ics printed afte
121f0 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  r the database c
12200 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 2a 2a 20 68  onnection.  ** h
12210 61 73 20 63 6c 6f 73 65 64 2e 20 20 4d 65 6d 6f  as closed.  Memo
12220 72 79 20 75 73 61 67 65 20 73 68 6f 75 6c 64 20  ry usage should 
12230 62 65 20 7a 65 72 6f 20 61 74 20 74 68 69 73 20  be zero at this 
12240 70 6f 69 6e 74 2e 20 2a 2f 0a 20 20 69 66 28 20  point. */.  if( 
12250 73 68 6f 77 53 74 61 74 73 20 29 7b 0a 20 20 20  showStats ){.   
12260 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
12270 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45  SQLITE_STATUS_ME
12280 4d 4f 52 59 5f 55 53 45 44 2c 20 26 69 43 75 72  MORY_USED, &iCur
12290 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20 20 20  , &iHi, 0);.    
122a0 70 72 69 6e 74 66 28 22 2d 2d 20 4d 65 6d 6f 72  printf("-- Memor
122b0 79 20 55 73 65 64 20 28 62 79 74 65 73 29 3a 20  y Used (bytes): 
122c0 20 20 20 20 20 20 20 20 25 64 20 28 6d 61 78 20          %d (max 
122d0 25 64 29 5c 6e 22 2c 20 69 43 75 72 2c 69 48 69  %d)\n", iCur,iHi
122e0 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  );.#if SQLITE_VE
122f0 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30  RSION_NUMBER>=30
12300 30 37 30 30 30 0a 20 20 20 20 73 71 6c 69 74 65  07000.    sqlite
12310 33 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f  3_status(SQLITE_
12320 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 43 4f  STATUS_MALLOC_CO
12330 55 4e 54 2c 20 26 69 43 75 72 2c 20 26 69 48 69  UNT, &iCur, &iHi
12340 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  , 0);.    printf
12350 28 22 2d 2d 20 4f 75 74 73 74 61 6e 64 69 6e 67  ("-- Outstanding
12360 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 20 20 20   Allocations:   
12370 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22    %d (max %d)\n"
12380 2c 20 69 43 75 72 2c 69 48 69 29 3b 0a 23 65 6e  , iCur,iHi);.#en
12390 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  dif.    sqlite3_
123a0 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54  status(SQLITE_ST
123b0 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f 4f  ATUS_PAGECACHE_O
123c0 56 45 52 46 4c 4f 57 2c 20 26 69 43 75 72 2c 20  VERFLOW, &iCur, 
123d0 26 69 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72  &iHi, 0);.    pr
123e0 69 6e 74 66 28 22 2d 2d 20 50 63 61 63 68 65 20  intf("-- Pcache 
123f0 4f 76 65 72 66 6c 6f 77 20 42 79 74 65 73 3a 20  Overflow Bytes: 
12400 20 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64        %d (max %d
12410 29 5c 6e 22 2c 20 69 43 75 72 2c 69 48 69 29 3b  )\n", iCur,iHi);
12420 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 61  .    sqlite3_sta
12430 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54 55  tus(SQLITE_STATU
12440 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45 2c 20 26  S_MALLOC_SIZE, &
12450 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a  iCur, &iHi, 0);.
12460 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c      printf("-- L
12470 61 72 67 65 73 74 20 41 6c 6c 6f 63 61 74 69 6f  argest Allocatio
12480 6e 3a 20 20 20 20 20 20 20 20 20 20 25 64 20 62  n:          %d b
12490 79 74 65 73 5c 6e 22 2c 69 48 69 29 3b 0a 20 20  ytes\n",iHi);.  
124a0 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73    sqlite3_status
124b0 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50  (SQLITE_STATUS_P
124c0 41 47 45 43 41 43 48 45 5f 53 49 5a 45 2c 20 26  AGECACHE_SIZE, &
124d0 69 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a  iCur, &iHi, 0);.
124e0 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c      printf("-- L
124f0 61 72 67 65 73 74 20 50 63 61 63 68 65 20 41 6c  argest Pcache Al
12500 6c 6f 63 61 74 69 6f 6e 3a 20 20 20 25 64 20 62  location:   %d b
12510 79 74 65 73 5c 6e 22 2c 69 48 69 29 3b 0a 20 20  ytes\n",iHi);.  
12520 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
12530 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 69 66 28   __linux__.  if(
12540 20 73 68 6f 77 53 74 61 74 73 20 29 7b 0a 20 20   showStats ){.  
12550 20 20 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f    displayLinuxIo
12560 53 74 61 74 73 28 73 74 64 6f 75 74 29 3b 0a 20  Stats(stdout);. 
12570 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
12580 52 65 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20 2a  Release memory *
12590 2f 0a 20 20 66 72 65 65 28 20 70 4c 6f 6f 6b 20  /.  free( pLook 
125a0 29 3b 0a 20 20 66 72 65 65 28 20 70 50 43 61 63  );.  free( pPCac
125b0 68 65 20 29 3b 0a 20 20 66 72 65 65 28 20 70 48  he );.  free( pH
125c0 65 61 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  eap );.  return 
125d0 30 3b 0a 7d 0a                                   0;.}.