/ Hex Artifact Content
Login

Artifact cc7e6b4a7c9f3e3d1a497ae3f75236a832a2ce0f6a9b017f95d996c821605bfb:


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 75 6e 73 69 67 6e 65 64 20  tep;.  unsigned 
9220: 6d 78 52 6f 77 69 64 3b 0a 20 20 69 6e 74 20 2a  mxRowid;.  int *
9230: 61 43 68 65 63 6b 20 3d 20 73 71 6c 69 74 65 33  aCheck = sqlite3
9240: 5f 6d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28  _malloc( sizeof(
9250: 69 6e 74 29 2a 67 2e 73 7a 54 65 73 74 2a 35 30  int)*g.szTest*50
9260: 30 20 29 3b 0a 0a 20 20 6d 78 43 6f 6f 72 64 20  0 );..  mxCoord 
9270: 3d 20 31 35 30 30 30 3b 0a 20 20 6d 78 52 6f 77  = 15000;.  mxRow
9280: 69 64 20 3d 20 6e 20 3d 20 67 2e 73 7a 54 65 73  id = n = g.szTes
9290: 74 2a 35 30 30 3b 0a 20 20 73 70 65 65 64 74 65  t*500;.  speedte
92a0: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
92b0: 30 30 2c 20 22 25 64 20 49 4e 53 45 52 54 73 20  00, "%d INSERTs 
92c0: 69 6e 74 6f 20 61 6e 20 72 2d 74 72 65 65 22 2c  into an r-tree",
92d0: 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74   n);.  speedtest
92e0: 31 5f 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b  1_exec("BEGIN");
92f0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
9300: 65 63 28 22 43 52 45 41 54 45 20 56 49 52 54 55  ec("CREATE VIRTU
9310: 41 4c 20 54 41 42 4c 45 20 72 74 31 20 55 53 49  AL TABLE rt1 USI
9320: 4e 47 20 72 74 72 65 65 28 69 64 2c 78 30 2c 78  NG rtree(id,x0,x
9330: 31 2c 79 30 2c 79 31 2c 7a 30 2c 7a 31 29 22 29  1,y0,y1,z0,z1)")
9340: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 70  ;.  speedtest1_p
9350: 72 65 70 61 72 65 28 22 49 4e 53 45 52 54 20 49  repare("INSERT I
9360: 4e 54 4f 20 72 74 31 28 69 64 2c 78 30 2c 78 31  NTO rt1(id,x0,x1
9370: 2c 79 30 2c 79 31 2c 7a 30 2c 7a 31 29 22 0a 20  ,y0,y1,z0,z1)". 
9380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9390: 20 20 20 20 22 56 41 4c 55 45 53 28 3f 31 2c 3f      "VALUES(?1,?
93a0: 32 2c 3f 33 2c 3f 34 2c 3f 35 2c 3f 36 2c 3f 37  2,?3,?4,?5,?6,?7
93b0: 29 22 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20  )");.  for(i=1; 
93c0: 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  i<=n; i++){.    
93d0: 74 77 6f 43 6f 6f 72 64 73 28 70 31 2c 20 70 32  twoCoords(p1, p2
93e0: 2c 20 6d 78 43 6f 6f 72 64 2c 20 26 78 30 2c 20  , mxCoord, &x0, 
93f0: 26 78 31 29 3b 0a 20 20 20 20 74 77 6f 43 6f 6f  &x1);.    twoCoo
9400: 72 64 73 28 70 31 2c 20 70 32 2c 20 6d 78 43 6f  rds(p1, p2, mxCo
9410: 6f 72 64 2c 20 26 79 30 2c 20 26 79 31 29 3b 0a  ord, &y0, &y1);.
9420: 20 20 20 20 74 77 6f 43 6f 6f 72 64 73 28 70 31      twoCoords(p1
9430: 2c 20 70 32 2c 20 6d 78 43 6f 6f 72 64 2c 20 26  , p2, mxCoord, &
9440: 7a 30 2c 20 26 7a 31 29 3b 0a 20 20 20 20 73 71  z0, &z1);.    sq
9450: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67  lite3_bind_int(g
9460: 2e 70 53 74 6d 74 2c 20 31 2c 20 69 29 3b 0a 20  .pStmt, 1, i);. 
9470: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
9480: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20  int(g.pStmt, 2, 
9490: 78 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  x0);.    sqlite3
94a0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
94b0: 74 2c 20 33 2c 20 78 31 29 3b 0a 20 20 20 20 73  t, 3, x1);.    s
94c0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
94d0: 67 2e 70 53 74 6d 74 2c 20 34 2c 20 79 30 29 3b  g.pStmt, 4, y0);
94e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
94f0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 35  d_int(g.pStmt, 5
9500: 2c 20 79 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  , y1);.    sqlit
9510: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
9520: 74 6d 74 2c 20 36 2c 20 7a 30 29 3b 0a 20 20 20  tmt, 6, z0);.   
9530: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
9540: 74 28 67 2e 70 53 74 6d 74 2c 20 37 2c 20 7a 31  t(g.pStmt, 7, z1
9550: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
9560: 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73  1_run();.  }.  s
9570: 70 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22  peedtest1_exec("
9580: 43 4f 4d 4d 49 54 22 29 3b 0a 20 20 73 70 65 65  COMMIT");.  spee
9590: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
95a0: 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31  );..  speedtest1
95b0: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 30 31 2c  _begin_test(101,
95c0: 20 22 43 6f 70 79 20 66 72 6f 6d 20 72 74 72 65   "Copy from rtre
95d0: 65 20 74 6f 20 61 20 72 65 67 75 6c 61 72 20 74  e to a regular t
95e0: 61 62 6c 65 22 29 3b 0a 20 20 73 70 65 65 64 74  able");.  speedt
95f0: 65 73 74 31 5f 65 78 65 63 28 22 43 52 45 41 54  est1_exec("CREAT
9600: 45 20 54 41 42 4c 45 20 74 31 28 69 64 20 49 4e  E TABLE t1(id IN
9610: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
9620: 59 2c 78 30 2c 78 31 2c 79 30 2c 79 31 2c 7a 30  Y,x0,x1,y0,y1,z0
9630: 2c 7a 31 29 22 29 3b 0a 20 20 73 70 65 65 64 74  ,z1)");.  speedt
9640: 65 73 74 31 5f 65 78 65 63 28 22 49 4e 53 45 52  est1_exec("INSER
9650: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
9660: 20 2a 20 46 52 4f 4d 20 72 74 31 22 29 3b 0a 20   * FROM rt1");. 
9670: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
9680: 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 67  test();..  n = g
9690: 2e 73 7a 54 65 73 74 2a 32 30 30 3b 0a 20 20 73  .szTest*200;.  s
96a0: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
96b0: 74 65 73 74 28 31 31 30 2c 20 22 25 64 20 6f 6e  test(110, "%d on
96c0: 65 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 69 6e  e-dimensional in
96d0: 74 65 72 73 65 63 74 20 73 6c 69 63 65 20 71 75  tersect slice qu
96e0: 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20 20 73 70  eries", n);.  sp
96f0: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
9700: 28 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a  ("SELECT count(*
9710: 29 20 46 52 4f 4d 20 72 74 31 20 57 48 45 52 45  ) FROM rt1 WHERE
9720: 20 78 30 3e 3d 3f 31 20 41 4e 44 20 78 31 3c 3d   x0>=?1 AND x1<=
9730: 3f 32 22 29 3b 0a 20 20 69 53 74 65 70 20 3d 20  ?2");.  iStep = 
9740: 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20 66 6f 72  mxCoord/n;.  for
9750: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b  (i=0; i<n; i++){
9760: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
9770: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
9780: 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20 20 20 20  , i*iStep);.    
9790: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
97a0: 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28 69 2b  (g.pStmt, 2, (i+
97b0: 31 29 2a 69 53 74 65 70 29 3b 0a 20 20 20 20 73  1)*iStep);.    s
97c0: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
97d0: 0a 20 20 20 20 61 43 68 65 63 6b 5b 69 5d 20 3d  .    aCheck[i] =
97e0: 20 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29   atoi(g.zResult)
97f0: 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73  ;.  }.  speedtes
9800: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
9810: 20 20 69 66 28 20 67 2e 62 56 65 72 69 66 79 20    if( g.bVerify 
9820: 29 7b 0a 20 20 20 20 6e 20 3d 20 67 2e 73 7a 54  ){.    n = g.szT
9830: 65 73 74 2a 32 30 30 3b 0a 20 20 20 20 73 70 65  est*200;.    spe
9840: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
9850: 73 74 28 31 31 31 2c 20 22 56 65 72 69 66 79 20  st(111, "Verify 
9860: 72 65 73 75 6c 74 20 66 72 6f 6d 20 31 2d 44 20  result from 1-D 
9870: 69 6e 74 65 72 73 65 63 74 20 73 6c 69 63 65 20  intersect slice 
9880: 71 75 65 72 69 65 73 22 29 3b 0a 20 20 20 20 73  queries");.    s
9890: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
98a0: 65 28 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  e("SELECT count(
98b0: 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  *) FROM t1 WHERE
98c0: 20 78 30 3e 3d 3f 31 20 41 4e 44 20 78 31 3c 3d   x0>=?1 AND x1<=
98d0: 3f 32 22 29 3b 0a 20 20 20 20 69 53 74 65 70 20  ?2");.    iStep 
98e0: 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20 20  = mxCoord/n;.   
98f0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
9900: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
9910: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
9920: 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74 65 70 29  tmt, 1, i*iStep)
9930: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
9940: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
9950: 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53 74 65 70  , 2, (i+1)*iStep
9960: 29 3b 0a 20 20 20 20 20 20 73 70 65 65 64 74 65  );.      speedte
9970: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20 20 20  st1_run();.     
9980: 20 69 66 28 20 61 43 68 65 63 6b 5b 69 5d 21 3d   if( aCheck[i]!=
9990: 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29 20  atoi(g.zResult) 
99a0: 29 7b 0a 20 20 20 20 20 20 20 20 66 61 74 61 6c  ){.        fatal
99b0: 5f 65 72 72 6f 72 28 22 43 6f 75 6e 74 20 64 69  _error("Count di
99c0: 73 61 67 72 65 65 20 73 74 65 70 20 25 64 3a 20  sagree step %d: 
99d0: 25 64 2e 2e 25 64 2e 20 20 25 64 20 76 73 20 25  %d..%d.  %d vs %
99e0: 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  d",.            
99f0: 20 20 20 20 20 20 20 20 69 2c 20 69 2a 69 53 74          i, i*iSt
9a00: 65 70 2c 20 28 69 2b 31 29 2a 69 53 74 65 70 2c  ep, (i+1)*iStep,
9a10: 20 61 43 68 65 63 6b 5b 69 5d 2c 20 61 74 6f 69   aCheck[i], atoi
9a20: 28 67 2e 7a 52 65 73 75 6c 74 29 29 3b 0a 20 20  (g.zResult));.  
9a30: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
9a40: 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74  speedtest1_end_t
9a50: 65 73 74 28 29 3b 0a 20 20 7d 0a 20 20 0a 20 20  est();.  }.  .  
9a60: 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 32 30 30  n = g.szTest*200
9a70: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 62  ;.  speedtest1_b
9a80: 65 67 69 6e 5f 74 65 73 74 28 31 32 30 2c 20 22  egin_test(120, "
9a90: 25 64 20 6f 6e 65 2d 64 69 6d 65 6e 73 69 6f 6e  %d one-dimension
9aa0: 61 6c 20 6f 76 65 72 6c 61 70 20 73 6c 69 63 65  al overlap slice
9ab0: 20 71 75 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20   queries", n);. 
9ac0: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
9ad0: 61 72 65 28 22 53 45 4c 45 43 54 20 63 6f 75 6e  are("SELECT coun
9ae0: 74 28 2a 29 20 46 52 4f 4d 20 72 74 31 20 57 48  t(*) FROM rt1 WH
9af0: 45 52 45 20 79 31 3e 3d 3f 31 20 41 4e 44 20 79  ERE y1>=?1 AND y
9b00: 30 3c 3d 3f 32 22 29 3b 0a 20 20 69 53 74 65 70  0<=?2");.  iStep
9b10: 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20   = mxCoord/n;.  
9b20: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
9b30: 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  +){.    sqlite3_
9b40: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
9b50: 2c 20 31 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20  , 1, i*iStep);. 
9b60: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
9b70: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20  int(g.pStmt, 2, 
9b80: 28 69 2b 31 29 2a 69 53 74 65 70 29 3b 0a 20 20  (i+1)*iStep);.  
9b90: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
9ba0: 28 29 3b 0a 20 20 20 20 61 43 68 65 63 6b 5b 69  ();.    aCheck[i
9bb0: 5d 20 3d 20 61 74 6f 69 28 67 2e 7a 52 65 73 75  ] = atoi(g.zResu
9bc0: 6c 74 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  lt);.  }.  speed
9bd0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
9be0: 3b 0a 0a 20 20 69 66 28 20 67 2e 62 56 65 72 69  ;..  if( g.bVeri
9bf0: 66 79 20 29 7b 0a 20 20 20 20 6e 20 3d 20 67 2e  fy ){.    n = g.
9c00: 73 7a 54 65 73 74 2a 32 30 30 3b 0a 20 20 20 20  szTest*200;.    
9c10: 73 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e  speedtest1_begin
9c20: 5f 74 65 73 74 28 31 32 31 2c 20 22 56 65 72 69  _test(121, "Veri
9c30: 66 79 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 31  fy result from 1
9c40: 2d 44 20 6f 76 65 72 6c 61 70 20 73 6c 69 63 65  -D overlap slice
9c50: 20 71 75 65 72 69 65 73 22 29 3b 0a 20 20 20 20   queries");.    
9c60: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
9c70: 72 65 28 22 53 45 4c 45 43 54 20 63 6f 75 6e 74  re("SELECT count
9c80: 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (*) FROM t1 WHER
9c90: 45 20 79 31 3e 3d 3f 31 20 41 4e 44 20 79 30 3c  E y1>=?1 AND y0<
9ca0: 3d 3f 32 22 29 3b 0a 20 20 20 20 69 53 74 65 70  =?2");.    iStep
9cb0: 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20   = mxCoord/n;.  
9cc0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
9cd0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
9ce0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
9cf0: 53 74 6d 74 2c 20 31 2c 20 69 2a 69 53 74 65 70  Stmt, 1, i*iStep
9d00: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9d10: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
9d20: 74 2c 20 32 2c 20 28 69 2b 31 29 2a 69 53 74 65  t, 2, (i+1)*iSte
9d30: 70 29 3b 0a 20 20 20 20 20 20 73 70 65 65 64 74  p);.      speedt
9d40: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20 20  est1_run();.    
9d50: 20 20 69 66 28 20 61 43 68 65 63 6b 5b 69 5d 21    if( aCheck[i]!
9d60: 3d 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29  =atoi(g.zResult)
9d70: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 61 74 61   ){.        fata
9d80: 6c 5f 65 72 72 6f 72 28 22 43 6f 75 6e 74 20 64  l_error("Count d
9d90: 69 73 61 67 72 65 65 20 73 74 65 70 20 25 64 3a  isagree step %d:
9da0: 20 25 64 2e 2e 25 64 2e 20 20 25 64 20 76 73 20   %d..%d.  %d vs 
9db0: 25 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  %d",.           
9dc0: 20 20 20 20 20 20 20 20 20 69 2c 20 69 2a 69 53           i, i*iS
9dd0: 74 65 70 2c 20 28 69 2b 31 29 2a 69 53 74 65 70  tep, (i+1)*iStep
9de0: 2c 20 61 43 68 65 63 6b 5b 69 5d 2c 20 61 74 6f  , aCheck[i], ato
9df0: 69 28 67 2e 7a 52 65 73 75 6c 74 29 29 3b 0a 20  i(g.zResult));. 
9e00: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9e10: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
9e20: 74 65 73 74 28 29 3b 0a 20 20 7d 0a 20 20 0a 0a  test();.  }.  ..
9e30: 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 32    n = g.szTest*2
9e40: 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  00;.  speedtest1
9e50: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 32 35 2c  _begin_test(125,
9e60: 20 22 25 64 20 63 75 73 74 6f 6d 20 67 65 6f 6d   "%d custom geom
9e70: 65 74 72 79 20 63 61 6c 6c 62 61 63 6b 20 71 75  etry callback qu
9e80: 65 72 69 65 73 22 2c 20 6e 29 3b 0a 20 20 73 71  eries", n);.  sq
9e90: 6c 69 74 65 33 5f 72 74 72 65 65 5f 67 65 6f 6d  lite3_rtree_geom
9ea0: 65 74 72 79 5f 63 61 6c 6c 62 61 63 6b 28 67 2e  etry_callback(g.
9eb0: 64 62 2c 20 22 78 73 6c 69 63 65 22 2c 20 78 73  db, "xslice", xs
9ec0: 6c 69 63 65 47 65 6f 6d 65 74 72 79 43 61 6c 6c  liceGeometryCall
9ed0: 62 61 63 6b 2c 20 30 29 3b 0a 20 20 73 70 65 65  back, 0);.  spee
9ee0: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22  dtest1_prepare("
9ef0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
9f00: 46 52 4f 4d 20 72 74 31 20 57 48 45 52 45 20 69  FROM rt1 WHERE i
9f10: 64 20 4d 41 54 43 48 20 78 73 6c 69 63 65 28 3f  d MATCH xslice(?
9f20: 31 2c 3f 32 29 22 29 3b 0a 20 20 69 53 74 65 70  1,?2)");.  iStep
9f30: 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20   = mxCoord/n;.  
9f40: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
9f50: 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  +){.    sqlite3_
9f60: 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74  bind_int(g.pStmt
9f70: 2c 20 31 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20  , 1, i*iStep);. 
9f80: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
9f90: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20  int(g.pStmt, 2, 
9fa0: 28 69 2b 31 29 2a 69 53 74 65 70 29 3b 0a 20 20  (i+1)*iStep);.  
9fb0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
9fc0: 28 29 3b 0a 20 20 20 20 69 66 28 20 61 43 68 65  ();.    if( aChe
9fd0: 63 6b 5b 69 5d 21 3d 61 74 6f 69 28 67 2e 7a 52  ck[i]!=atoi(g.zR
9fe0: 65 73 75 6c 74 29 20 29 7b 0a 20 20 20 20 20 20  esult) ){.      
9ff0: 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 43 6f 75  fatal_error("Cou
a000: 6e 74 20 64 69 73 61 67 72 65 65 20 73 74 65 70  nt disagree step
a010: 20 25 64 3a 20 25 64 2e 2e 25 64 2e 20 20 25 64   %d: %d..%d.  %d
a020: 20 76 73 20 25 64 22 2c 0a 20 20 20 20 20 20 20   vs %d",.       
a030: 20 20 20 20 20 20 20 20 20 20 20 69 2c 20 69 2a             i, i*
a040: 69 53 74 65 70 2c 20 28 69 2b 31 29 2a 69 53 74  iStep, (i+1)*iSt
a050: 65 70 2c 20 61 43 68 65 63 6b 5b 69 5d 2c 20 61  ep, aCheck[i], a
a060: 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29 29 3b  toi(g.zResult));
a070: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 70 65  .    }.  }.  spe
a080: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
a090: 28 29 3b 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a 54  ();..  n = g.szT
a0a0: 65 73 74 2a 34 30 30 3b 0a 20 20 73 70 65 65 64  est*400;.  speed
a0b0: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
a0c0: 28 31 33 30 2c 20 22 25 64 20 74 68 72 65 65 2d  (130, "%d three-
a0d0: 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 69 6e 74 65  dimensional inte
a0e0: 72 73 65 63 74 20 62 6f 78 20 71 75 65 72 69 65  rsect box querie
a0f0: 73 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74  s", n);.  speedt
a100: 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 53 45  est1_prepare("SE
a110: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
a120: 4f 4d 20 72 74 31 20 57 48 45 52 45 20 78 31 3e  OM rt1 WHERE x1>
a130: 3d 3f 31 20 41 4e 44 20 78 30 3c 3d 3f 32 22 0a  =?1 AND x0<=?2".
a140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a150: 20 20 20 20 20 22 20 41 4e 44 20 79 31 3e 3d 3f       " AND y1>=?
a160: 31 20 41 4e 44 20 79 30 3c 3d 3f 32 20 41 4e 44  1 AND y0<=?2 AND
a170: 20 7a 31 3e 3d 3f 31 20 41 4e 44 20 7a 30 3c 3d   z1>=?1 AND z0<=
a180: 3f 32 22 29 3b 0a 20 20 69 53 74 65 70 20 3d 20  ?2");.  iStep = 
a190: 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20 66 6f 72  mxCoord/n;.  for
a1a0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b  (i=0; i<n; i++){
a1b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
a1c0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
a1d0: 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20 20 20 20  , i*iStep);.    
a1e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
a1f0: 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 28 69 2b  (g.pStmt, 2, (i+
a200: 31 29 2a 69 53 74 65 70 29 3b 0a 20 20 20 20 73  1)*iStep);.    s
a210: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
a220: 0a 20 20 20 20 61 43 68 65 63 6b 5b 69 5d 20 3d  .    aCheck[i] =
a230: 20 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c 74 29   atoi(g.zResult)
a240: 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73  ;.  }.  speedtes
a250: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
a260: 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 35    n = g.szTest*5
a270: 30 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31  00;.  speedtest1
a280: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 34 30 2c  _begin_test(140,
a290: 20 22 25 64 20 72 6f 77 69 64 20 71 75 65 72 69   "%d rowid queri
a2a0: 65 73 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64  es", n);.  speed
a2b0: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 53  test1_prepare("S
a2c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 72 74 31  ELECT * FROM rt1
a2d0: 20 57 48 45 52 45 20 69 64 3d 3f 31 22 29 3b 0a   WHERE id=?1");.
a2e0: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b    for(i=1; i<=n;
a2f0: 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74   i++){.    sqlit
a300: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
a310: 74 6d 74 2c 20 31 2c 20 69 29 3b 0a 20 20 20 20  tmt, 1, i);.    
a320: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
a330: 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73  ;.  }.  speedtes
a340: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a  t1_end_test();..
a350: 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 35    n = g.szTest*5
a360: 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  0;.  speedtest1_
a370: 62 65 67 69 6e 5f 74 65 73 74 28 31 35 30 2c 20  begin_test(150, 
a380: 22 25 64 20 55 50 44 41 54 45 73 20 75 73 69 6e  "%d UPDATEs usin
a390: 67 20 72 6f 77 69 64 22 2c 20 6e 29 3b 0a 20 20  g rowid", n);.  
a3a0: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
a3b0: 72 65 28 22 55 50 44 41 54 45 20 72 74 31 20 53  re("UPDATE rt1 S
a3c0: 45 54 20 78 30 3d 78 30 2b 31 30 30 2c 20 78 31  ET x0=x0+100, x1
a3d0: 3d 78 31 2b 31 30 30 20 57 48 45 52 45 20 69 64  =x1+100 WHERE id
a3e0: 3d 3f 31 22 29 3b 0a 20 20 66 6f 72 28 69 3d 31  =?1");.  for(i=1
a3f0: 3b 20 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<=n; i++){.  
a400: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
a410: 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 28  nt(g.pStmt, 1, (
a420: 69 2a 32 35 31 29 25 6d 78 52 6f 77 69 64 20 2b  i*251)%mxRowid +
a430: 20 31 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65   1);.    speedte
a440: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20  st1_run();.  }. 
a450: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
a460: 74 65 73 74 28 29 3b 0a 0a 20 20 6e 20 3d 20 67  test();..  n = g
a470: 2e 73 7a 54 65 73 74 2a 35 3b 0a 20 20 73 70 65  .szTest*5;.  spe
a480: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
a490: 73 74 28 31 35 35 2c 20 22 25 64 20 55 50 44 41  st(155, "%d UPDA
a4a0: 54 45 73 20 75 73 69 6e 67 20 6f 6e 65 2d 64 69  TEs using one-di
a4b0: 6d 65 6e 73 69 6f 6e 61 6c 20 6f 76 65 72 6c 61  mensional overla
a4c0: 70 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74  p", n);.  speedt
a4d0: 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 55 50  est1_prepare("UP
a4e0: 44 41 54 45 20 72 74 31 20 53 45 54 20 78 30 3d  DATE rt1 SET x0=
a4f0: 78 30 2d 31 30 30 2c 20 78 31 3d 78 31 2d 31 30  x0-100, x1=x1-10
a500: 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0".             
a510: 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20          " WHERE 
a520: 79 31 3e 3d 3f 31 20 41 4e 44 20 79 30 3c 3d 3f  y1>=?1 AND y0<=?
a530: 31 2b 35 22 29 3b 0a 20 20 69 53 74 65 70 20 3d  1+5");.  iStep =
a540: 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20 20 66 6f   mxCoord/n;.  fo
a550: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
a560: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69  {.    sqlite3_bi
a570: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
a580: 31 2c 20 69 2a 69 53 74 65 70 29 3b 0a 20 20 20  1, i*iStep);.   
a590: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
a5a0: 29 3b 0a 20 20 20 20 61 43 68 65 63 6b 5b 69 5d  );.    aCheck[i]
a5b0: 20 3d 20 61 74 6f 69 28 67 2e 7a 52 65 73 75 6c   = atoi(g.zResul
a5c0: 74 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  t);.  }.  speedt
a5d0: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
a5e0: 0a 0a 20 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74  ..  n = g.szTest
a5f0: 2a 35 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74  *50;.  speedtest
a600: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 36 30  1_begin_test(160
a610: 2c 20 22 25 64 20 44 45 4c 45 54 45 73 20 75 73  , "%d DELETEs us
a620: 69 6e 67 20 72 6f 77 69 64 22 2c 20 6e 29 3b 0a  ing rowid", n);.
a630: 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65    speedtest1_pre
a640: 70 61 72 65 28 22 44 45 4c 45 54 45 20 46 52 4f  pare("DELETE FRO
a650: 4d 20 72 74 31 20 57 48 45 52 45 20 69 64 3d 3f  M rt1 WHERE id=?
a660: 31 22 29 3b 0a 20 20 66 6f 72 28 69 3d 31 3b 20  1");.  for(i=1; 
a670: 69 3c 3d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  i<=n; i++){.    
a680: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
a690: 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 28 69 2a  (g.pStmt, 1, (i*
a6a0: 32 35 37 29 25 6d 78 52 6f 77 69 64 20 2b 20 31  257)%mxRowid + 1
a6b0: 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  );.    speedtest
a6c0: 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20 20 73  1_run();.  }.  s
a6d0: 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65  peedtest1_end_te
a6e0: 73 74 28 29 3b 0a 0a 0a 20 20 6e 20 3d 20 67 2e  st();...  n = g.
a6f0: 73 7a 54 65 73 74 2a 35 3b 0a 20 20 73 70 65 65  szTest*5;.  spee
a700: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
a710: 74 28 31 36 35 2c 20 22 25 64 20 44 45 4c 45 54  t(165, "%d DELET
a720: 45 73 20 75 73 69 6e 67 20 6f 6e 65 2d 64 69 6d  Es using one-dim
a730: 65 6e 73 69 6f 6e 61 6c 20 6f 76 65 72 6c 61 70  ensional overlap
a740: 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74 65  ", n);.  speedte
a750: 73 74 31 5f 70 72 65 70 61 72 65 28 22 44 45 4c  st1_prepare("DEL
a760: 45 54 45 20 46 52 4f 4d 20 72 74 31 20 57 48 45  ETE FROM rt1 WHE
a770: 52 45 20 79 31 3e 3d 3f 31 20 41 4e 44 20 79 30  RE y1>=?1 AND y0
a780: 3c 3d 3f 31 2b 35 22 29 3b 0a 20 20 69 53 74 65  <=?1+5");.  iSte
a790: 70 20 3d 20 6d 78 43 6f 6f 72 64 2f 6e 3b 0a 20  p = mxCoord/n;. 
a7a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
a7b0: 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
a7c0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
a7d0: 74 2c 20 31 2c 20 69 2a 69 53 74 65 70 29 3b 0a  t, 1, i*iStep);.
a7e0: 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72      speedtest1_r
a7f0: 75 6e 28 29 3b 0a 20 20 20 20 61 43 68 65 63 6b  un();.    aCheck
a800: 5b 69 5d 20 3d 20 61 74 6f 69 28 67 2e 7a 52 65  [i] = atoi(g.zRe
a810: 73 75 6c 74 29 3b 0a 20 20 7d 0a 20 20 73 70 65  sult);.  }.  spe
a820: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
a830: 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73 74  ();..  speedtest
a840: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 37 30  1_begin_test(170
a850: 2c 20 22 52 65 73 74 6f 72 65 20 64 65 6c 65 74  , "Restore delet
a860: 65 64 20 65 6e 74 72 69 65 73 20 75 73 69 6e 67  ed entries using
a870: 20 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52   INSERT OR IGNOR
a880: 45 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  E");.  speedtest
a890: 31 5f 65 78 65 63 28 22 49 4e 53 45 52 54 20 4f  1_exec("INSERT O
a8a0: 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 72 74  R IGNORE INTO rt
a8b0: 31 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  1 SELECT * FROM 
a8c0: 74 31 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73  t1");.  speedtes
a8d0: 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 7d  t1_end_test();.}
a8e0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a8f0: 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 20 2a  E_ENABLE_RTREE *
a900: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 65 73 74 73  /../*.** A tests
a910: 65 74 20 74 68 61 74 20 64 6f 65 73 20 6b 65 79  et that does key
a920: 2f 76 61 6c 75 65 20 73 74 6f 72 61 67 65 20 6f  /value storage o
a930: 6e 20 74 61 62 6c 65 73 20 77 69 74 68 20 6d 61  n tables with ma
a940: 6e 79 20 63 6f 6c 75 6d 6e 73 2e 0a 2a 2a 20 54  ny columns..** T
a950: 68 69 73 20 69 73 20 74 68 65 20 6b 69 6e 64 20  his is the kind 
a960: 6f 66 20 77 6f 72 6b 6c 6f 61 64 20 67 65 6e 65  of workload gene
a970: 72 61 74 65 64 20 62 79 20 4f 52 4d 73 20 73 75  rated by ORMs su
a980: 63 68 20 61 73 20 43 6f 72 65 44 61 74 61 2e 0a  ch as CoreData..
a990: 2a 2f 0a 76 6f 69 64 20 74 65 73 74 73 65 74 5f  */.void testset_
a9a0: 6f 72 6d 28 76 6f 69 64 29 7b 0a 20 20 75 6e 73  orm(void){.  uns
a9b0: 69 67 6e 65 64 20 69 2c 20 6a 2c 20 6e 3b 0a 20  igned i, j, n;. 
a9c0: 20 75 6e 73 69 67 6e 65 64 20 6e 52 6f 77 3b 0a   unsigned nRow;.
a9d0: 20 20 75 6e 73 69 67 6e 65 64 20 78 31 2c 20 6c    unsigned x1, l
a9e0: 65 6e 3b 0a 20 20 63 68 61 72 20 7a 4e 75 6d 5b  en;.  char zNum[
a9f0: 32 30 30 30 5d 3b 20 20 20 20 20 20 20 20 20 20  2000];          
aa00: 20 20 20 20 2f 2a 20 41 20 6e 75 6d 62 65 72 20      /* A number 
aa10: 6e 61 6d 65 20 2a 2f 0a 20 20 73 74 61 74 69 63  name */.  static
aa20: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 79 70   const char zTyp
aa30: 65 5b 5d 20 3d 20 20 20 2f 2a 20 54 79 70 65 73  e[] =   /* Types
aa40: 20 66 6f 72 20 61 6c 6c 20 6e 6f 6e 2d 50 4b 20   for all non-PK 
aa50: 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65  columns, in orde
aa60: 72 20 2a 2f 0a 20 20 20 20 22 49 42 42 49 49 49  r */.    "IBBIII
aa70: 54 49 56 56 49 54 42 54 42 46 42 46 49 54 54 46  TIVVITBTBFBFITTF
aa80: 42 54 42 56 42 56 49 46 54 42 42 46 49 54 46 46  BTBVBVIFTBBFITFF
aa90: 56 42 49 46 49 56 42 56 56 56 42 54 56 54 49 42  VBIFIVBVVVBTVTIB
aaa0: 42 46 46 49 56 49 42 54 42 22 0a 20 20 20 20 22  BFFIVIBTB".    "
aab0: 54 56 54 54 46 54 56 54 56 46 46 49 49 54 49 46  TVTTFTVTVFFIITIF
aac0: 42 49 54 46 54 54 46 46 46 56 42 49 49 42 54 54  BITFTTFFFVBIIBTT
aad0: 49 54 46 54 46 46 56 56 56 46 49 49 49 54 56 42  ITFTFFVVVFIIITVB
aae0: 42 56 46 46 54 56 56 42 22 3b 0a 0a 20 20 6e 52  BVFFTVVB";..  nR
aaf0: 6f 77 20 3d 20 6e 20 3d 20 67 2e 73 7a 54 65 73  ow = n = g.szTes
ab00: 74 2a 32 35 30 3b 0a 20 20 73 70 65 65 64 74 65  t*250;.  speedte
ab10: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
ab20: 30 30 2c 20 22 46 69 6c 6c 20 25 64 20 72 6f 77  00, "Fill %d row
ab30: 73 22 2c 20 6e 29 3b 0a 20 20 73 70 65 65 64 74  s", n);.  speedt
ab40: 65 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20 22  est1_exec(.    "
ab50: 42 45 47 49 4e 3b 22 0a 20 20 20 20 22 43 52 45  BEGIN;".    "CRE
ab60: 41 54 45 20 54 41 42 4c 45 20 5a 4c 4f 4f 4b 53  ATE TABLE ZLOOKS
ab70: 4c 49 4b 45 43 4f 52 45 44 41 54 41 20 28 22 0a  LIKECOREDATA (".
ab80: 20 20 20 20 22 20 20 5a 50 4b 20 49 4e 54 45 47      "  ZPK INTEG
ab90: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 22  ER PRIMARY KEY,"
aba0: 0a 20 20 20 20 22 20 20 5a 54 45 52 4d 46 49 54  .    "  ZTERMFIT
abb0: 54 49 4e 47 48 4f 55 53 49 4e 47 43 4f 4d 4d 41  TINGHOUSINGCOMMA
abc0: 4e 44 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20  ND INTEGER,".   
abd0: 20 22 20 20 5a 42 52 49 45 46 47 4f 42 59 44 4f   "  ZBRIEFGOBYDO
abe0: 44 47 45 52 48 45 49 47 48 54 20 42 4c 4f 42 2c  DGERHEIGHT BLOB,
abf0: 22 0a 20 20 20 20 22 20 20 5a 43 41 50 41 42 4c  ".    "  ZCAPABL
ac00: 45 54 52 49 50 44 4f 4f 52 41 4c 4d 4f 4e 44 20  ETRIPDOORALMOND 
ac10: 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a 44  BLOB,".    "  ZD
ac20: 45 50 4f 53 49 54 50 41 49 52 43 4f 4c 4c 45 47  EPOSITPAIRCOLLEG
ac30: 45 43 4f 4d 45 54 20 49 4e 54 45 47 45 52 2c 22  ECOMET INTEGER,"
ac40: 0a 20 20 20 20 22 20 20 5a 46 52 41 4d 45 45 4e  .    "  ZFRAMEEN
ac50: 54 45 52 53 49 4d 50 4c 45 4d 4f 55 54 48 20 49  TERSIMPLEMOUTH I
ac60: 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20  NTEGER,".    "  
ac70: 5a 48 4f 50 45 46 55 4c 47 41 54 45 48 4f 4c 45  ZHOPEFULGATEHOLE
ac80: 43 48 41 4c 4b 20 49 4e 54 45 47 45 52 2c 22 0a  CHALK INTEGER,".
ac90: 20 20 20 20 22 20 20 5a 53 4c 45 45 50 59 55 53      "  ZSLEEPYUS
aca0: 45 52 47 52 41 4e 44 42 4f 57 4c 20 54 49 4d 45  ERGRANDBOWL TIME
acb0: 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a  STAMP,".    "  Z
acc0: 44 45 57 50 45 41 43 48 43 41 52 45 45 52 43 45  DEWPEACHCAREERCE
acd0: 4c 45 52 59 20 49 4e 54 45 47 45 52 2c 22 0a 20  LERY INTEGER,". 
ace0: 20 20 20 22 20 20 5a 48 41 4e 47 45 52 4c 49 54     "  ZHANGERLIT
acf0: 48 49 55 4d 44 49 4e 4e 45 52 4d 45 45 54 20 56  HIUMDINNERMEET V
ad00: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
ad10: 5a 43 4c 55 42 52 45 4c 45 41 53 45 4c 49 5a 41  ZCLUBRELEASELIZA
ad20: 52 44 41 44 56 49 43 45 20 56 41 52 43 48 41 52  RDADVICE VARCHAR
ad30: 2c 22 0a 20 20 20 20 22 20 20 5a 43 48 41 52 47  ,".    "  ZCHARG
ad40: 45 43 4c 49 43 4b 48 55 4d 41 4e 45 48 49 52 45  ECLICKHUMANEHIRE
ad50: 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22   INTEGER,".    "
ad60: 20 20 5a 46 49 4e 47 45 52 44 55 45 50 49 5a 5a    ZFINGERDUEPIZZ
ad70: 41 4f 50 54 49 4f 4e 20 54 49 4d 45 53 54 41 4d  AOPTION TIMESTAM
ad80: 50 2c 22 0a 20 20 20 20 22 20 20 5a 46 4c 59 49  P,".    "  ZFLYI
ad90: 4e 47 44 4f 43 54 4f 52 54 41 42 4c 45 4d 45 4c  NGDOCTORTABLEMEL
ada0: 4f 44 59 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  ODY BLOB,".    "
adb0: 20 20 5a 4c 4f 4e 47 46 49 4e 4c 45 41 56 45 49    ZLONGFINLEAVEI
adc0: 4d 41 47 45 4f 49 4c 20 54 49 4d 45 53 54 41 4d  MAGEOIL TIMESTAM
add0: 50 2c 22 0a 20 20 20 20 22 20 20 5a 46 41 4d 49  P,".    "  ZFAMI
ade0: 4c 59 56 49 53 55 41 4c 4f 57 4e 45 52 4d 41 54  LYVISUALOWNERMAT
adf0: 54 45 52 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  TER BLOB,".    "
ae00: 20 20 5a 47 4f 4c 44 59 4f 55 4e 47 49 4e 49 54    ZGOLDYOUNGINIT
ae10: 49 41 4c 4e 4f 53 45 20 46 4c 4f 41 54 2c 22 0a  IALNOSE FLOAT,".
ae20: 20 20 20 20 22 20 20 5a 43 41 55 53 45 53 41 4c      "  ZCAUSESAL
ae30: 41 4d 49 54 45 52 4d 43 59 41 4e 20 42 4c 4f 42  AMITERMCYAN BLOB
ae40: 2c 22 0a 20 20 20 20 22 20 20 5a 53 50 52 45 41  ,".    "  ZSPREA
ae50: 44 4d 4f 54 4f 52 42 49 53 43 55 49 54 42 41 43  DMOTORBISCUITBAC
ae60: 4f 4e 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22  ON FLOAT,".    "
ae70: 20 20 5a 47 49 46 54 49 43 45 46 49 53 48 47 4c    ZGIFTICEFISHGL
ae80: 55 45 48 41 49 52 20 49 4e 54 45 47 45 52 2c 22  UEHAIR INTEGER,"
ae90: 0a 20 20 20 20 22 20 20 5a 4e 4f 54 49 43 45 50  .    "  ZNOTICEP
aea0: 45 41 52 50 4f 4c 49 43 59 4a 55 49 43 45 20 54  EARPOLICYJUICE T
aeb0: 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22  IMESTAMP,".    "
aec0: 20 20 5a 42 41 4e 4b 42 55 46 46 41 4c 4f 52 45    ZBANKBUFFALORE
aed0: 43 4f 56 45 52 4f 52 42 49 54 20 54 49 4d 45 53  COVERORBIT TIMES
aee0: 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 4c  TAMP,".    "  ZL
aef0: 4f 4e 47 44 49 45 54 45 53 53 41 59 4e 41 54 55  ONGDIETESSAYNATU
af00: 52 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22  RE FLOAT,".    "
af10: 20 20 5a 41 43 54 49 4f 4e 52 41 4e 47 45 45 4c    ZACTIONRANGEEL
af20: 45 47 41 4e 54 4e 45 55 54 52 4f 4e 20 42 4c 4f  EGANTNEUTRON BLO
af30: 42 2c 22 0a 20 20 20 20 22 20 20 5a 43 41 44 45  B,".    "  ZCADE
af40: 54 42 52 49 47 48 54 50 4c 41 4e 45 54 42 41 4e  TBRIGHTPLANETBAN
af50: 4b 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20  K TIMESTAMP,".  
af60: 20 20 22 20 20 5a 41 49 52 46 4f 52 47 49 56 45    "  ZAIRFORGIVE
af70: 48 45 41 44 46 52 4f 47 20 42 4c 4f 42 2c 22 0a  HEADFROG BLOB,".
af80: 20 20 20 20 22 20 20 5a 53 48 41 52 4b 4a 55 53      "  ZSHARKJUS
af90: 54 46 52 55 49 54 4d 4f 56 49 45 20 56 41 52 43  TFRUITMOVIE VARC
afa0: 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 46 41  HAR,".    "  ZFA
afb0: 52 4d 45 52 4d 4f 52 4e 49 4e 47 4d 49 52 52 4f  RMERMORNINGMIRRO
afc0: 52 43 4f 4e 43 45 52 4e 20 42 4c 4f 42 2c 22 0a  RCONCERN BLOB,".
afd0: 20 20 20 20 22 20 20 5a 57 4f 4f 44 50 4f 45 54      "  ZWOODPOET
afe0: 52 59 43 4f 42 42 4c 45 52 42 45 4e 43 48 20 56  RYCOBBLERBENCH V
aff0: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
b000: 5a 48 41 46 4e 49 55 4d 53 43 52 49 50 54 53 41  ZHAFNIUMSCRIPTSA
b010: 4c 41 44 4d 4f 54 4f 52 20 49 4e 54 45 47 45 52  LADMOTOR INTEGER
b020: 2c 22 0a 20 20 20 20 22 20 20 5a 50 52 4f 42 4c  ,".    "  ZPROBL
b030: 45 4d 43 4c 55 42 50 4f 50 4f 56 45 52 4a 45 4c  EMCLUBPOPOVERJEL
b040: 4c 59 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22  LY FLOAT,".    "
b050: 20 20 5a 45 49 47 48 54 4c 45 41 44 45 52 57 4f    ZEIGHTLEADERWO
b060: 52 4b 45 52 4d 4f 53 54 20 54 49 4d 45 53 54 41  RKERMOST TIMESTA
b070: 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 47 4c 41  MP,".    "  ZGLA
b080: 53 53 52 45 53 45 52 56 45 42 41 52 49 55 4d 4d  SSRESERVEBARIUMM
b090: 45 41 4c 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  EAL BLOB,".    "
b0a0: 20 20 5a 43 4c 41 4d 42 49 54 41 52 55 47 55 4c    ZCLAMBITARUGUL
b0b0: 41 46 41 4a 49 54 41 20 42 4c 4f 42 2c 22 0a 20  AFAJITA BLOB,". 
b0c0: 20 20 20 22 20 20 5a 44 45 43 41 44 45 4a 4f 59     "  ZDECADEJOY
b0d0: 4f 55 53 57 41 56 45 48 41 42 49 54 20 46 4c 4f  OUSWAVEHABIT FLO
b0e0: 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 43 4f 4d  AT,".    "  ZCOM
b0f0: 50 41 4e 59 53 55 4d 4d 45 52 46 49 42 45 52 45  PANYSUMMERFIBERE
b100: 4c 46 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20  LF INTEGER,".   
b110: 20 22 20 20 5a 54 52 45 41 54 54 45 53 54 51 55   "  ZTREATTESTQU
b120: 49 4c 4c 43 48 41 52 47 45 20 54 49 4d 45 53 54  ILLCHARGE TIMEST
b130: 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 42 52  AMP,".    "  ZBR
b140: 4f 57 42 41 4c 41 4e 43 45 4b 45 59 43 48 4f 57  OWBALANCEKEYCHOW
b150: 44 45 52 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20  DER FLOAT,".    
b160: 22 20 20 5a 50 45 41 43 48 43 4f 50 50 45 52 44  "  ZPEACHCOPPERD
b170: 49 4e 4e 45 52 4c 41 4b 45 20 46 4c 4f 41 54 2c  INNERLAKE FLOAT,
b180: 22 0a 20 20 20 20 22 20 20 5a 44 52 59 57 41 4c  ".    "  ZDRYWAL
b190: 4c 42 45 59 4f 4e 44 42 52 4f 57 4e 42 4f 57 4c  LBEYONDBROWNBOWL
b1a0: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
b1b0: 20 20 5a 42 45 4c 4c 59 43 52 41 53 48 49 54 45    ZBELLYCRASHITE
b1c0: 4d 4c 41 43 4b 20 42 4c 4f 42 2c 22 0a 20 20 20  MLACK BLOB,".   
b1d0: 20 22 20 20 5a 54 45 4e 4e 49 53 43 59 43 4c 45   "  ZTENNISCYCLE
b1e0: 42 49 4c 4c 4f 46 46 49 43 45 52 20 49 4e 54 45  BILLOFFICER INTE
b1f0: 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 4d 41  GER,".    "  ZMA
b200: 4c 4c 45 51 55 49 50 54 48 41 4e 4b 53 47 4c 55  LLEQUIPTHANKSGLU
b210: 45 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20  E FLOAT,".    " 
b220: 20 5a 4d 49 53 53 52 45 50 4c 59 48 55 4d 41 4e   ZMISSREPLYHUMAN
b230: 4c 49 56 49 4e 47 20 49 4e 54 45 47 45 52 2c 22  LIVING INTEGER,"
b240: 0a 20 20 20 20 22 20 20 5a 4b 49 57 49 56 49 53  .    "  ZKIWIVIS
b250: 55 41 4c 50 52 49 44 45 41 50 50 4c 45 20 56 41  UALPRIDEAPPLE VA
b260: 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a  RCHAR,".    "  Z
b270: 57 49 53 48 48 49 54 53 4b 49 4e 4d 4f 54 4f 52  WISHHITSKINMOTOR
b280: 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20 20 5a   BLOB,".    "  Z
b290: 43 41 4c 4d 52 41 43 43 4f 4f 4e 50 52 4f 47 52  CALMRACCOONPROGR
b2a0: 41 4d 44 45 42 49 54 20 56 41 52 43 48 41 52 2c  AMDEBIT VARCHAR,
b2b0: 22 0a 20 20 20 20 22 20 20 5a 53 48 49 4e 59 41  ".    "  ZSHINYA
b2c0: 53 53 49 53 54 4c 49 56 49 4e 47 43 52 41 42 20  SSISTLIVINGCRAB 
b2d0: 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20  VARCHAR,".    " 
b2e0: 20 5a 52 45 53 4f 4c 56 45 57 52 49 53 54 57 52   ZRESOLVEWRISTWR
b2f0: 41 50 41 50 50 4c 45 20 56 41 52 43 48 41 52 2c  APAPPLE VARCHAR,
b300: 22 0a 20 20 20 20 22 20 20 5a 41 50 50 45 41 4c  ".    "  ZAPPEAL
b310: 53 49 4d 50 4c 45 53 45 43 4f 4e 44 48 4f 55 53  SIMPLESECONDHOUS
b320: 49 4e 47 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22  ING BLOB,".    "
b330: 20 20 5a 43 4f 52 4e 45 52 41 4e 43 48 4f 52 54    ZCORNERANCHORT
b340: 41 50 45 44 49 56 45 52 20 54 49 4d 45 53 54 41  APEDIVER TIMESTA
b350: 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 4d 45 4d  MP,".    "  ZMEM
b360: 4f 52 59 52 45 51 55 45 53 54 53 4f 55 52 43 45  ORYREQUESTSOURCE
b370: 42 49 47 20 56 41 52 43 48 41 52 2c 22 0a 20 20  BIG VARCHAR,".  
b380: 20 20 22 20 20 5a 54 52 59 46 41 43 54 4b 45 45    "  ZTRYFACTKEE
b390: 50 4d 49 4c 4b 20 54 49 4d 45 53 54 41 4d 50 2c  PMILK TIMESTAMP,
b3a0: 22 0a 20 20 20 20 22 20 20 5a 44 49 56 45 52 50  ".    "  ZDIVERP
b3b0: 41 49 4e 54 4c 45 41 54 48 45 52 45 41 53 59 20  AINTLEATHEREASY 
b3c0: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
b3d0: 20 5a 53 4f 52 54 4d 49 53 54 59 51 55 4f 54 45   ZSORTMISTYQUOTE
b3e0: 43 41 42 42 41 47 45 20 42 4c 4f 42 2c 22 0a 20  CABBAGE BLOB,". 
b3f0: 20 20 20 22 20 20 5a 54 55 4e 45 47 41 53 42 55     "  ZTUNEGASBU
b400: 46 46 41 4c 4f 43 41 50 49 54 41 4c 20 42 4c 4f  FFALOCAPITAL BLO
b410: 42 2c 22 0a 20 20 20 20 22 20 20 5a 46 49 4c 4c  B,".    "  ZFILL
b420: 53 54 4f 50 4c 41 57 4a 4f 59 46 55 4c 20 46 4c  STOPLAWJOYFUL FL
b430: 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 53 54  OAT,".    "  ZST
b440: 45 45 4c 43 41 52 45 46 55 4c 50 4c 41 54 45 4e  EELCAREFULPLATEN
b450: 55 4d 42 45 52 20 46 4c 4f 41 54 2c 22 0a 20 20  UMBER FLOAT,".  
b460: 20 20 22 20 20 5a 47 49 56 45 56 49 56 49 44 44    "  ZGIVEVIVIDD
b470: 49 56 49 4e 45 4d 45 41 4e 49 4e 47 20 49 4e 54  IVINEMEANING INT
b480: 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 54  EGER,".    "  ZT
b490: 52 45 41 54 50 41 43 4b 46 55 54 55 52 45 43 4f  REATPACKFUTURECO
b4a0: 4e 56 45 52 54 20 56 41 52 43 48 41 52 2c 22 0a  NVERT VARCHAR,".
b4b0: 20 20 20 20 22 20 20 5a 43 41 4c 4d 4c 59 47 45      "  ZCALMLYGE
b4c0: 4d 46 49 4e 49 53 48 45 46 46 45 43 54 20 49 4e  MFINISHEFFECT IN
b4d0: 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a  TEGER,".    "  Z
b4e0: 43 41 42 42 41 47 45 53 4f 43 4b 45 41 53 45 4d  CABBAGESOCKEASEM
b4f0: 49 4e 55 54 45 20 42 4c 4f 42 2c 22 0a 20 20 20  INUTE BLOB,".   
b500: 20 22 20 20 5a 50 4c 41 4e 45 54 46 41 4d 49 4c   "  ZPLANETFAMIL
b510: 59 50 55 52 45 4d 45 4d 4f 52 59 20 54 49 4d 45  YPUREMEMORY TIME
b520: 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a  STAMP,".    "  Z
b530: 4d 45 52 52 59 43 52 41 43 4b 54 52 41 49 4e 4c  MERRYCRACKTRAINL
b540: 45 41 44 45 52 20 42 4c 4f 42 2c 22 0a 20 20 20  EADER BLOB,".   
b550: 20 22 20 20 5a 4d 49 4e 4f 52 57 41 59 50 41 50   "  ZMINORWAYPAP
b560: 45 52 43 4c 41 53 53 59 20 54 49 4d 45 53 54 41  ERCLASSY TIMESTA
b570: 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 45 41 47  MP,".    "  ZEAG
b580: 4c 45 4c 49 4e 45 4d 49 4e 45 4d 41 49 4c 20 56  LELINEMINEMAIL V
b590: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
b5a0: 5a 52 45 53 4f 52 54 59 41 52 44 47 52 45 45 4e  ZRESORTYARDGREEN
b5b0: 4c 45 54 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a  LET TIMESTAMP,".
b5c0: 20 20 20 20 22 20 20 5a 59 41 52 44 4f 52 45 47      "  ZYARDOREG
b5d0: 41 4e 4f 56 49 56 49 44 4a 45 57 45 4c 20 54 49  ANOVIVIDJEWEL TI
b5e0: 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20  MESTAMP,".    " 
b5f0: 20 5a 50 55 52 45 43 41 4b 45 56 49 56 49 44 4e   ZPURECAKEVIVIDN
b600: 45 41 54 4c 59 20 46 4c 4f 41 54 2c 22 0a 20 20  EATLY FLOAT,".  
b610: 20 20 22 20 20 5a 41 53 4b 43 4f 4e 54 41 43 54    "  ZASKCONTACT
b620: 4d 4f 4e 49 54 4f 52 46 55 4e 20 54 49 4d 45 53  MONITORFUN TIMES
b630: 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a 4d  TAMP,".    "  ZM
b640: 4f 56 45 57 48 4f 47 41 4d 4d 41 49 4e 43 48 20  OVEWHOGAMMAINCH 
b650: 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20  VARCHAR,".    " 
b660: 20 5a 4c 45 54 54 55 43 45 42 49 52 44 4d 45 45   ZLETTUCEBIRDMEE
b670: 54 44 45 42 41 54 45 20 54 49 4d 45 53 54 41 4d  TDEBATE TIMESTAM
b680: 50 2c 22 0a 20 20 20 20 22 20 20 5a 47 45 4e 45  P,".    "  ZGENE
b690: 4e 41 54 55 52 41 4c 48 45 41 52 49 4e 47 4b 49  NATURALHEARINGKI
b6a0: 54 45 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20  TE VARCHAR,".   
b6b0: 20 22 20 20 5a 4d 55 46 46 49 4e 44 52 59 45 52   "  ZMUFFINDRYER
b6c0: 44 52 41 57 46 4f 52 54 55 4e 45 20 46 4c 4f 41  DRAWFORTUNE FLOA
b6d0: 54 2c 22 0a 20 20 20 20 22 20 20 5a 47 52 41 59  T,".    "  ZGRAY
b6e0: 53 55 52 56 45 59 57 49 52 45 4c 4f 56 45 20 46  SURVEYWIRELOVE F
b6f0: 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 50  LOAT,".    "  ZP
b700: 4c 49 45 52 53 50 52 49 4e 54 41 53 4b 4f 52 45  LIERSPRINTASKORE
b710: 47 41 4e 4f 20 49 4e 54 45 47 45 52 2c 22 0a 20  GANO INTEGER,". 
b720: 20 20 20 22 20 20 5a 54 52 41 56 45 4c 44 52 49     "  ZTRAVELDRI
b730: 56 45 52 43 4f 4e 54 45 53 54 4c 49 4c 59 20 49  VERCONTESTLILY I
b740: 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20  NTEGER,".    "  
b750: 5a 48 55 4d 4f 52 53 50 49 43 45 53 41 4e 44 4b  ZHUMORSPICESANDK
b760: 49 44 4e 45 59 20 54 49 4d 45 53 54 41 4d 50 2c  IDNEY TIMESTAMP,
b770: 22 0a 20 20 20 20 22 20 20 5a 41 52 53 45 4e 49  ".    "  ZARSENI
b780: 43 53 41 4d 50 4c 45 57 41 49 54 4d 55 4f 4e 20  CSAMPLEWAITMUON 
b790: 49 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20  INTEGER,".    " 
b7a0: 20 5a 4c 41 43 45 41 44 44 52 45 53 53 47 52 4f   ZLACEADDRESSGRO
b7b0: 55 4e 44 43 41 52 45 46 55 4c 20 46 4c 4f 41 54  UNDCAREFUL FLOAT
b7c0: 2c 22 0a 20 20 20 20 22 20 20 5a 42 41 4d 42 4f  ,".    "  ZBAMBO
b7d0: 4f 4d 45 53 53 57 41 53 41 42 49 45 56 45 4e 49  OMESSWASABIEVENI
b7e0: 4e 47 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20  NG BLOB,".    " 
b7f0: 20 5a 4f 4e 45 52 45 4c 45 41 53 45 41 56 45 52   ZONERELEASEAVER
b800: 41 47 45 4e 55 52 53 45 20 49 4e 54 45 47 45 52  AGENURSE INTEGER
b810: 2c 22 0a 20 20 20 20 22 20 20 5a 52 41 44 49 41  ,".    "  ZRADIA
b820: 4e 54 57 48 45 4e 54 52 59 43 41 52 44 20 54 49  NTWHENTRYCARD TI
b830: 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20  MESTAMP,".    " 
b840: 20 5a 52 45 57 41 52 44 49 4e 53 49 44 45 4d 41   ZREWARDINSIDEMA
b850: 4e 47 4f 49 4e 54 45 4e 53 45 20 46 4c 4f 41 54  NGOINTENSE FLOAT
b860: 2c 22 0a 20 20 20 20 22 20 20 5a 4e 45 41 54 53  ,".    "  ZNEATS
b870: 54 45 57 50 41 52 54 49 52 4f 4e 20 54 49 4d 45  TEWPARTIRON TIME
b880: 53 54 41 4d 50 2c 22 0a 20 20 20 20 22 20 20 5a  STAMP,".    "  Z
b890: 4f 55 54 53 49 44 45 50 45 41 48 45 4e 43 4f 55  OUTSIDEPEAHENCOU
b8a0: 4e 54 49 43 45 20 54 49 4d 45 53 54 41 4d 50 2c  NTICE TIMESTAMP,
b8b0: 22 0a 20 20 20 20 22 20 20 5a 43 52 45 41 4d 45  ".    "  ZCREAME
b8c0: 56 45 4e 49 4e 47 4c 49 50 42 52 41 4e 43 48 20  VENINGLIPBRANCH 
b8d0: 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a  FLOAT,".    "  Z
b8e0: 57 48 41 4c 45 4d 41 54 48 41 56 4f 43 41 44 4f  WHALEMATHAVOCADO
b8f0: 43 4f 50 50 45 52 20 46 4c 4f 41 54 2c 22 0a 20  COPPER FLOAT,". 
b900: 20 20 20 22 20 20 5a 4c 49 46 45 55 53 45 4c 45     "  ZLIFEUSELE
b910: 41 46 59 42 45 4c 4c 20 46 4c 4f 41 54 2c 22 0a  AFYBELL FLOAT,".
b920: 20 20 20 20 22 20 20 5a 57 45 41 4c 54 48 4c 49      "  ZWEALTHLI
b930: 4e 45 4e 47 4c 45 45 46 55 4c 44 41 59 20 56 41  NENGLEEFULDAY VA
b940: 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a  RCHAR,".    "  Z
b950: 46 41 43 45 49 4e 56 49 54 45 54 41 4c 4b 47 4f  FACEINVITETALKGO
b960: 4c 44 20 42 4c 4f 42 2c 22 0a 20 20 20 20 22 20  LD BLOB,".    " 
b970: 20 5a 57 45 53 54 41 4d 4f 55 4e 54 41 46 46 45   ZWESTAMOUNTAFFE
b980: 43 54 48 45 41 52 49 4e 47 20 49 4e 54 45 47 45  CTHEARING INTEGE
b990: 52 2c 22 0a 20 20 20 20 22 20 20 5a 44 45 4c 41  R,".    "  ZDELA
b9a0: 59 4f 55 54 43 4f 4d 45 48 4f 52 4e 41 47 45 4e  YOUTCOMEHORNAGEN
b9b0: 43 59 20 49 4e 54 45 47 45 52 2c 22 0a 20 20 20  CY INTEGER,".   
b9c0: 20 22 20 20 5a 42 49 47 54 48 49 4e 4b 43 4f 4e   "  ZBIGTHINKCON
b9d0: 56 45 52 54 45 43 4f 4e 4f 4d 59 20 42 4c 4f 42  VERTECONOMY BLOB
b9e0: 2c 22 0a 20 20 20 20 22 20 20 5a 42 41 53 45 47  ,".    "  ZBASEG
b9f0: 4f 55 44 41 52 45 47 55 4c 41 52 46 4f 52 47 49  OUDAREGULARFORGI
ba00: 56 45 20 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20  VE TIMESTAMP,". 
ba10: 20 20 20 22 20 20 5a 50 41 54 54 45 52 4e 43 4c     "  ZPATTERNCL
ba20: 4f 52 49 4e 45 47 52 41 4e 44 43 4f 4c 42 59 20  ORINEGRANDCOLBY 
ba30: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
ba40: 22 20 20 5a 43 59 41 4e 42 41 53 45 46 45 45 44  "  ZCYANBASEFEED
ba50: 41 44 52 4f 49 54 20 49 4e 54 45 47 45 52 2c 22  ADROIT INTEGER,"
ba60: 0a 20 20 20 20 22 20 20 5a 43 41 52 52 59 46 4c  .    "  ZCARRYFL
ba70: 4f 4f 52 4d 49 4e 4e 4f 57 44 52 41 47 4f 4e 20  OORMINNOWDRAGON 
ba80: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
ba90: 22 20 20 5a 49 4d 41 47 45 50 45 4e 43 49 4c 4f  "  ZIMAGEPENCILO
baa0: 54 48 45 52 42 4f 54 54 4f 4d 20 46 4c 4f 41 54  THERBOTTOM FLOAT
bab0: 2c 22 0a 20 20 20 20 22 20 20 5a 58 45 4e 4f 4e  ,".    "  ZXENON
bac0: 46 4c 49 47 48 54 50 41 4c 45 41 50 50 4c 45 20  FLIGHTPALEAPPLE 
bad0: 54 49 4d 45 53 54 41 4d 50 2c 22 0a 20 20 20 20  TIMESTAMP,".    
bae0: 22 20 20 5a 48 45 52 52 49 4e 47 4a 4f 4b 45 46  "  ZHERRINGJOKEF
baf0: 45 41 54 55 52 45 48 4f 50 45 46 55 4c 20 46 4c  EATUREHOPEFUL FL
bb00: 4f 41 54 2c 22 0a 20 20 20 20 22 20 20 5a 43 41  OAT,".    "  ZCA
bb10: 50 59 45 41 52 4c 59 52 49 56 45 54 42 52 55 53  PYEARLYRIVETBRUS
bb20: 48 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20  H FLOAT,".    " 
bb30: 20 5a 41 47 45 52 45 45 44 46 52 4f 47 42 41 53   ZAGEREEDFROGBAS
bb40: 4b 45 54 20 56 41 52 43 48 41 52 2c 22 0a 20 20  KET VARCHAR,".  
bb50: 20 20 22 20 20 5a 55 53 55 41 4c 42 4f 44 59 48    "  ZUSUALBODYH
bb60: 41 4c 49 42 55 54 44 49 41 4d 4f 4e 44 20 56 41  ALIBUTDIAMOND VA
bb70: 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20 5a  RCHAR,".    "  Z
bb80: 46 4f 4f 54 54 41 50 57 4f 52 44 45 4e 54 52 59  FOOTTAPWORDENTRY
bb90: 20 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22   VARCHAR,".    "
bba0: 20 20 5a 44 49 53 48 4b 45 45 50 42 4c 45 53 54    ZDISHKEEPBLEST
bbb0: 4d 4f 4e 49 54 4f 52 20 46 4c 4f 41 54 2c 22 0a  MONITOR FLOAT,".
bbc0: 20 20 20 20 22 20 20 5a 42 52 4f 41 44 41 42 4c      "  ZBROADABL
bbd0: 45 53 4f 4c 49 44 43 41 53 55 41 4c 20 49 4e 54  ESOLIDCASUAL INT
bbe0: 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20 5a 53  EGER,".    "  ZS
bbf0: 51 55 41 52 45 47 4c 45 45 46 55 4c 43 48 49 4c  QUAREGLEEFULCHIL
bc00: 44 4c 49 47 48 54 20 49 4e 54 45 47 45 52 2c 22  DLIGHT INTEGER,"
bc10: 0a 20 20 20 20 22 20 20 5a 48 4f 4c 49 44 41 59  .    "  ZHOLIDAY
bc20: 48 45 41 44 50 4f 4e 59 44 45 54 41 49 4c 20 49  HEADPONYDETAIL I
bc30: 4e 54 45 47 45 52 2c 22 0a 20 20 20 20 22 20 20  NTEGER,".    "  
bc40: 5a 47 45 4e 45 52 41 4c 52 45 53 4f 52 54 53 4b  ZGENERALRESORTSK
bc50: 59 4f 50 45 4e 20 54 49 4d 45 53 54 41 4d 50 2c  YOPEN TIMESTAMP,
bc60: 22 0a 20 20 20 20 22 20 20 5a 47 4c 41 44 53 50  ".    "  ZGLADSP
bc70: 52 41 59 4b 49 44 4e 45 59 47 55 50 50 59 20 56  RAYKIDNEYGUPPY V
bc80: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
bc90: 5a 53 57 49 4d 48 45 41 56 59 4d 45 4e 54 49 4f  ZSWIMHEAVYMENTIO
bca0: 4e 4b 49 4e 44 20 42 4c 4f 42 2c 22 0a 20 20 20  NKIND BLOB,".   
bcb0: 20 22 20 20 5a 4d 45 53 53 59 53 55 4c 46 55 52   "  ZMESSYSULFUR
bcc0: 44 52 45 41 4d 46 45 53 54 49 56 45 20 42 4c 4f  DREAMFESTIVE BLO
bcd0: 42 2c 22 0a 20 20 20 20 22 20 20 5a 53 4b 59 53  B,".    "  ZSKYS
bce0: 4b 59 43 4c 41 53 53 49 43 42 52 49 45 46 20 56  KYCLASSICBRIEF V
bcf0: 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20 20  ARCHAR,".    "  
bd00: 5a 44 49 4c 4c 41 53 4b 48 4f 4b 49 4c 45 4d 4f  ZDILLASKHOKILEMO
bd10: 4e 20 46 4c 4f 41 54 2c 22 0a 20 20 20 20 22 20  N FLOAT,".    " 
bd20: 20 5a 4a 55 4e 49 4f 52 53 48 4f 57 50 52 45 53   ZJUNIORSHOWPRES
bd30: 53 4e 4f 56 41 20 46 4c 4f 41 54 2c 22 0a 20 20  SNOVA FLOAT,".  
bd40: 20 20 22 20 20 5a 53 49 5a 45 54 4f 45 41 57 41    "  ZSIZETOEAWA
bd50: 52 44 46 52 45 53 48 20 54 49 4d 45 53 54 41 4d  RDFRESH TIMESTAM
bd60: 50 2c 22 0a 20 20 20 20 22 20 20 5a 4b 45 59 46  P,".    "  ZKEYF
bd70: 41 49 4c 41 50 52 49 43 4f 54 4d 45 54 41 4c 20  AILAPRICOTMETAL 
bd80: 56 41 52 43 48 41 52 2c 22 0a 20 20 20 20 22 20  VARCHAR,".    " 
bd90: 20 5a 48 41 4e 44 59 52 45 50 41 49 52 50 52 4f   ZHANDYREPAIRPRO
bda0: 54 4f 4e 41 49 52 50 4f 52 54 20 56 41 52 43 48  TONAIRPORT VARCH
bdb0: 41 52 2c 22 0a 20 20 20 20 22 20 20 5a 50 4f 53  AR,".    "  ZPOS
bdc0: 54 50 52 4f 54 45 49 4e 48 41 4e 44 4c 45 41 43  TPROTEINHANDLEAC
bdd0: 54 4f 52 20 42 4c 4f 42 22 0a 20 20 20 20 22 29  TOR BLOB".    ")
bde0: 3b 22 0a 20 20 29 3b 0a 20 20 73 70 65 65 64 74  ;".  );.  speedt
bdf0: 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20  est1_prepare(.  
be00: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5a    "INSERT INTO Z
be10: 4c 4f 4f 4b 53 4c 49 4b 45 43 4f 52 45 44 41 54  LOOKSLIKECOREDAT
be20: 41 28 5a 50 4b 2c 5a 41 49 52 46 4f 52 47 49 56  A(ZPK,ZAIRFORGIV
be30: 45 48 45 41 44 46 52 4f 47 2c 22 0a 20 20 20 20  EHEADFROG,".    
be40: 22 5a 47 49 46 54 49 43 45 46 49 53 48 47 4c 55  "ZGIFTICEFISHGLU
be50: 45 48 41 49 52 2c 5a 44 45 4c 41 59 4f 55 54 43  EHAIR,ZDELAYOUTC
be60: 4f 4d 45 48 4f 52 4e 41 47 45 4e 43 59 2c 5a 53  OMEHORNAGENCY,ZS
be70: 4c 45 45 50 59 55 53 45 52 47 52 41 4e 44 42 4f  LEEPYUSERGRANDBO
be80: 57 4c 2c 22 0a 20 20 20 20 22 5a 47 4c 41 53 53  WL,".    "ZGLASS
be90: 52 45 53 45 52 56 45 42 41 52 49 55 4d 4d 45 41  RESERVEBARIUMMEA
bea0: 4c 2c 5a 42 52 49 45 46 47 4f 42 59 44 4f 44 47  L,ZBRIEFGOBYDODG
beb0: 45 52 48 45 49 47 48 54 2c 22 0a 20 20 20 20 22  ERHEIGHT,".    "
bec0: 5a 42 41 4d 42 4f 4f 4d 45 53 53 57 41 53 41 42  ZBAMBOOMESSWASAB
bed0: 49 45 56 45 4e 49 4e 47 2c 5a 46 41 52 4d 45 52  IEVENING,ZFARMER
bee0: 4d 4f 52 4e 49 4e 47 4d 49 52 52 4f 52 43 4f 4e  MORNINGMIRRORCON
bef0: 43 45 52 4e 2c 22 0a 20 20 20 20 22 5a 54 52 45  CERN,".    "ZTRE
bf00: 41 54 50 41 43 4b 46 55 54 55 52 45 43 4f 4e 56  ATPACKFUTURECONV
bf10: 45 52 54 2c 5a 43 41 55 53 45 53 41 4c 41 4d 49  ERT,ZCAUSESALAMI
bf20: 54 45 52 4d 43 59 41 4e 2c 5a 43 41 4c 4d 52 41  TERMCYAN,ZCALMRA
bf30: 43 43 4f 4f 4e 50 52 4f 47 52 41 4d 44 45 42 49  CCOONPROGRAMDEBI
bf40: 54 2c 22 0a 20 20 20 20 22 5a 48 4f 4c 49 44 41  T,".    "ZHOLIDA
bf50: 59 48 45 41 44 50 4f 4e 59 44 45 54 41 49 4c 2c  YHEADPONYDETAIL,
bf60: 5a 57 4f 4f 44 50 4f 45 54 52 59 43 4f 42 42 4c  ZWOODPOETRYCOBBL
bf70: 45 52 42 45 4e 43 48 2c 5a 48 41 46 4e 49 55 4d  ERBENCH,ZHAFNIUM
bf80: 53 43 52 49 50 54 53 41 4c 41 44 4d 4f 54 4f 52  SCRIPTSALADMOTOR
bf90: 2c 22 0a 20 20 20 20 22 5a 55 53 55 41 4c 42 4f  ,".    "ZUSUALBO
bfa0: 44 59 48 41 4c 49 42 55 54 44 49 41 4d 4f 4e 44  DYHALIBUTDIAMOND
bfb0: 2c 5a 4f 55 54 53 49 44 45 50 45 41 48 45 4e 43  ,ZOUTSIDEPEAHENC
bfc0: 4f 55 4e 54 49 43 45 2c 5a 44 49 56 45 52 50 41  OUNTICE,ZDIVERPA
bfd0: 49 4e 54 4c 45 41 54 48 45 52 45 41 53 59 2c 22  INTLEATHEREASY,"
bfe0: 0a 20 20 20 20 22 5a 57 45 53 54 41 4d 4f 55 4e  .    "ZWESTAMOUN
bff0: 54 41 46 46 45 43 54 48 45 41 52 49 4e 47 2c 5a  TAFFECTHEARING,Z
c000: 53 49 5a 45 54 4f 45 41 57 41 52 44 46 52 45 53  SIZETOEAWARDFRES
c010: 48 2c 5a 44 45 57 50 45 41 43 48 43 41 52 45 45  H,ZDEWPEACHCAREE
c020: 52 43 45 4c 45 52 59 2c 22 0a 20 20 20 20 22 5a  RCELERY,".    "Z
c030: 53 54 45 45 4c 43 41 52 45 46 55 4c 50 4c 41 54  STEELCAREFULPLAT
c040: 45 4e 55 4d 42 45 52 2c 5a 43 59 41 4e 42 41 53  ENUMBER,ZCYANBAS
c050: 45 46 45 45 44 41 44 52 4f 49 54 2c 5a 43 41 4c  EFEEDADROIT,ZCAL
c060: 4d 4c 59 47 45 4d 46 49 4e 49 53 48 45 46 46 45  MLYGEMFINISHEFFE
c070: 43 54 2c 22 0a 20 20 20 20 22 5a 48 41 4e 44 59  CT,".    "ZHANDY
c080: 52 45 50 41 49 52 50 52 4f 54 4f 4e 41 49 52 50  REPAIRPROTONAIRP
c090: 4f 52 54 2c 5a 47 45 4e 45 4e 41 54 55 52 41 4c  ORT,ZGENENATURAL
c0a0: 48 45 41 52 49 4e 47 4b 49 54 45 2c 5a 42 52 4f  HEARINGKITE,ZBRO
c0b0: 41 44 41 42 4c 45 53 4f 4c 49 44 43 41 53 55 41  ADABLESOLIDCASUA
c0c0: 4c 2c 22 0a 20 20 20 20 22 5a 50 4f 53 54 50 52  L,".    "ZPOSTPR
c0d0: 4f 54 45 49 4e 48 41 4e 44 4c 45 41 43 54 4f 52  OTEINHANDLEACTOR
c0e0: 2c 5a 4c 41 43 45 41 44 44 52 45 53 53 47 52 4f  ,ZLACEADDRESSGRO
c0f0: 55 4e 44 43 41 52 45 46 55 4c 2c 5a 49 4d 41 47  UNDCAREFUL,ZIMAG
c100: 45 50 45 4e 43 49 4c 4f 54 48 45 52 42 4f 54 54  EPENCILOTHERBOTT
c110: 4f 4d 2c 22 0a 20 20 20 20 22 5a 50 52 4f 42 4c  OM,".    "ZPROBL
c120: 45 4d 43 4c 55 42 50 4f 50 4f 56 45 52 4a 45 4c  EMCLUBPOPOVERJEL
c130: 4c 59 2c 5a 50 41 54 54 45 52 4e 43 4c 4f 52 49  LY,ZPATTERNCLORI
c140: 4e 45 47 52 41 4e 44 43 4f 4c 42 59 2c 5a 4e 45  NEGRANDCOLBY,ZNE
c150: 41 54 53 54 45 57 50 41 52 54 49 52 4f 4e 2c 22  ATSTEWPARTIRON,"
c160: 0a 20 20 20 20 22 5a 41 50 50 45 41 4c 53 49 4d  .    "ZAPPEALSIM
c170: 50 4c 45 53 45 43 4f 4e 44 48 4f 55 53 49 4e 47  PLESECONDHOUSING
c180: 2c 5a 4d 4f 56 45 57 48 4f 47 41 4d 4d 41 49 4e  ,ZMOVEWHOGAMMAIN
c190: 43 48 2c 5a 54 45 4e 4e 49 53 43 59 43 4c 45 42  CH,ZTENNISCYCLEB
c1a0: 49 4c 4c 4f 46 46 49 43 45 52 2c 22 0a 20 20 20  ILLOFFICER,".   
c1b0: 20 22 5a 53 48 41 52 4b 4a 55 53 54 46 52 55 49   "ZSHARKJUSTFRUI
c1c0: 54 4d 4f 56 49 45 2c 5a 4b 45 59 46 41 49 4c 41  TMOVIE,ZKEYFAILA
c1d0: 50 52 49 43 4f 54 4d 45 54 41 4c 2c 5a 43 4f 4d  PRICOTMETAL,ZCOM
c1e0: 50 41 4e 59 53 55 4d 4d 45 52 46 49 42 45 52 45  PANYSUMMERFIBERE
c1f0: 4c 46 2c 22 0a 20 20 20 20 22 5a 54 45 52 4d 46  LF,".    "ZTERMF
c200: 49 54 54 49 4e 47 48 4f 55 53 49 4e 47 43 4f 4d  ITTINGHOUSINGCOM
c210: 4d 41 4e 44 2c 5a 52 45 53 4f 52 54 59 41 52 44  MAND,ZRESORTYARD
c220: 47 52 45 45 4e 4c 45 54 2c 5a 43 41 42 42 41 47  GREENLET,ZCABBAG
c230: 45 53 4f 43 4b 45 41 53 45 4d 49 4e 55 54 45 2c  ESOCKEASEMINUTE,
c240: 22 0a 20 20 20 20 22 5a 53 51 55 41 52 45 47 4c  ".    "ZSQUAREGL
c250: 45 45 46 55 4c 43 48 49 4c 44 4c 49 47 48 54 2c  EEFULCHILDLIGHT,
c260: 5a 4f 4e 45 52 45 4c 45 41 53 45 41 56 45 52 41  ZONERELEASEAVERA
c270: 47 45 4e 55 52 53 45 2c 5a 42 49 47 54 48 49 4e  GENURSE,ZBIGTHIN
c280: 4b 43 4f 4e 56 45 52 54 45 43 4f 4e 4f 4d 59 2c  KCONVERTECONOMY,
c290: 22 0a 20 20 20 20 22 5a 50 4c 49 45 52 53 50 52  ".    "ZPLIERSPR
c2a0: 49 4e 54 41 53 4b 4f 52 45 47 41 4e 4f 2c 5a 44  INTASKOREGANO,ZD
c2b0: 45 43 41 44 45 4a 4f 59 4f 55 53 57 41 56 45 48  ECADEJOYOUSWAVEH
c2c0: 41 42 49 54 2c 5a 44 52 59 57 41 4c 4c 42 45 59  ABIT,ZDRYWALLBEY
c2d0: 4f 4e 44 42 52 4f 57 4e 42 4f 57 4c 2c 22 0a 20  ONDBROWNBOWL,". 
c2e0: 20 20 20 22 5a 43 4c 55 42 52 45 4c 45 41 53 45     "ZCLUBRELEASE
c2f0: 4c 49 5a 41 52 44 41 44 56 49 43 45 2c 5a 57 48  LIZARDADVICE,ZWH
c300: 41 4c 45 4d 41 54 48 41 56 4f 43 41 44 4f 43 4f  ALEMATHAVOCADOCO
c310: 50 50 45 52 2c 5a 42 45 4c 4c 59 43 52 41 53 48  PPER,ZBELLYCRASH
c320: 49 54 45 4d 4c 41 43 4b 2c 22 0a 20 20 20 20 22  ITEMLACK,".    "
c330: 5a 4c 45 54 54 55 43 45 42 49 52 44 4d 45 45 54  ZLETTUCEBIRDMEET
c340: 44 45 42 41 54 45 2c 5a 43 41 50 41 42 4c 45 54  DEBATE,ZCAPABLET
c350: 52 49 50 44 4f 4f 52 41 4c 4d 4f 4e 44 2c 5a 52  RIPDOORALMOND,ZR
c360: 41 44 49 41 4e 54 57 48 45 4e 54 52 59 43 41 52  ADIANTWHENTRYCAR
c370: 44 2c 22 0a 20 20 20 20 22 5a 43 41 50 59 45 41  D,".    "ZCAPYEA
c380: 52 4c 59 52 49 56 45 54 42 52 55 53 48 2c 5a 41  RLYRIVETBRUSH,ZA
c390: 47 45 52 45 45 44 46 52 4f 47 42 41 53 4b 45 54  GEREEDFROGBASKET
c3a0: 2c 5a 53 57 49 4d 48 45 41 56 59 4d 45 4e 54 49  ,ZSWIMHEAVYMENTI
c3b0: 4f 4e 4b 49 4e 44 2c 22 0a 20 20 20 20 22 5a 54  ONKIND,".    "ZT
c3c0: 52 41 56 45 4c 44 52 49 56 45 52 43 4f 4e 54 45  RAVELDRIVERCONTE
c3d0: 53 54 4c 49 4c 59 2c 5a 47 4c 41 44 53 50 52 41  STLILY,ZGLADSPRA
c3e0: 59 4b 49 44 4e 45 59 47 55 50 50 59 2c 5a 42 41  YKIDNEYGUPPY,ZBA
c3f0: 4e 4b 42 55 46 46 41 4c 4f 52 45 43 4f 56 45 52  NKBUFFALORECOVER
c400: 4f 52 42 49 54 2c 22 0a 20 20 20 20 22 5a 46 49  ORBIT,".    "ZFI
c410: 4e 47 45 52 44 55 45 50 49 5a 5a 41 4f 50 54 49  NGERDUEPIZZAOPTI
c420: 4f 4e 2c 5a 43 4c 41 4d 42 49 54 41 52 55 47 55  ON,ZCLAMBITARUGU
c430: 4c 41 46 41 4a 49 54 41 2c 5a 4c 4f 4e 47 46 49  LAFAJITA,ZLONGFI
c440: 4e 4c 45 41 56 45 49 4d 41 47 45 4f 49 4c 2c 22  NLEAVEIMAGEOIL,"
c450: 0a 20 20 20 20 22 5a 4c 4f 4e 47 44 49 45 54 45  .    "ZLONGDIETE
c460: 53 53 41 59 4e 41 54 55 52 45 2c 5a 4a 55 4e 49  SSAYNATURE,ZJUNI
c470: 4f 52 53 48 4f 57 50 52 45 53 53 4e 4f 56 41 2c  ORSHOWPRESSNOVA,
c480: 5a 48 4f 50 45 46 55 4c 47 41 54 45 48 4f 4c 45  ZHOPEFULGATEHOLE
c490: 43 48 41 4c 4b 2c 22 0a 20 20 20 20 22 5a 44 45  CHALK,".    "ZDE
c4a0: 50 4f 53 49 54 50 41 49 52 43 4f 4c 4c 45 47 45  POSITPAIRCOLLEGE
c4b0: 43 4f 4d 45 54 2c 5a 57 45 41 4c 54 48 4c 49 4e  COMET,ZWEALTHLIN
c4c0: 45 4e 47 4c 45 45 46 55 4c 44 41 59 2c 5a 46 49  ENGLEEFULDAY,ZFI
c4d0: 4c 4c 53 54 4f 50 4c 41 57 4a 4f 59 46 55 4c 2c  LLSTOPLAWJOYFUL,
c4e0: 22 0a 20 20 20 20 22 5a 54 55 4e 45 47 41 53 42  ".    "ZTUNEGASB
c4f0: 55 46 46 41 4c 4f 43 41 50 49 54 41 4c 2c 5a 47  UFFALOCAPITAL,ZG
c500: 52 41 59 53 55 52 56 45 59 57 49 52 45 4c 4f 56  RAYSURVEYWIRELOV
c510: 45 2c 5a 43 4f 52 4e 45 52 41 4e 43 48 4f 52 54  E,ZCORNERANCHORT
c520: 41 50 45 44 49 56 45 52 2c 22 0a 20 20 20 20 22  APEDIVER,".    "
c530: 5a 52 45 57 41 52 44 49 4e 53 49 44 45 4d 41 4e  ZREWARDINSIDEMAN
c540: 47 4f 49 4e 54 45 4e 53 45 2c 5a 43 41 44 45 54  GOINTENSE,ZCADET
c550: 42 52 49 47 48 54 50 4c 41 4e 45 54 42 41 4e 4b  BRIGHTPLANETBANK
c560: 2c 5a 50 4c 41 4e 45 54 46 41 4d 49 4c 59 50 55  ,ZPLANETFAMILYPU
c570: 52 45 4d 45 4d 4f 52 59 2c 22 0a 20 20 20 20 22  REMEMORY,".    "
c580: 5a 54 52 45 41 54 54 45 53 54 51 55 49 4c 4c 43  ZTREATTESTQUILLC
c590: 48 41 52 47 45 2c 5a 43 52 45 41 4d 45 56 45 4e  HARGE,ZCREAMEVEN
c5a0: 49 4e 47 4c 49 50 42 52 41 4e 43 48 2c 5a 53 4b  INGLIPBRANCH,ZSK
c5b0: 59 53 4b 59 43 4c 41 53 53 49 43 42 52 49 45 46  YSKYCLASSICBRIEF
c5c0: 2c 22 0a 20 20 20 20 22 5a 41 52 53 45 4e 49 43  ,".    "ZARSENIC
c5d0: 53 41 4d 50 4c 45 57 41 49 54 4d 55 4f 4e 2c 5a  SAMPLEWAITMUON,Z
c5e0: 42 52 4f 57 42 41 4c 41 4e 43 45 4b 45 59 43 48  BROWBALANCEKEYCH
c5f0: 4f 57 44 45 52 2c 5a 46 4c 59 49 4e 47 44 4f 43  OWDER,ZFLYINGDOC
c600: 54 4f 52 54 41 42 4c 45 4d 45 4c 4f 44 59 2c 22  TORTABLEMELODY,"
c610: 0a 20 20 20 20 22 5a 48 41 4e 47 45 52 4c 49 54  .    "ZHANGERLIT
c620: 48 49 55 4d 44 49 4e 4e 45 52 4d 45 45 54 2c 5a  HIUMDINNERMEET,Z
c630: 4e 4f 54 49 43 45 50 45 41 52 50 4f 4c 49 43 59  NOTICEPEARPOLICY
c640: 4a 55 49 43 45 2c 5a 53 48 49 4e 59 41 53 53 49  JUICE,ZSHINYASSI
c650: 53 54 4c 49 56 49 4e 47 43 52 41 42 2c 22 0a 20  STLIVINGCRAB,". 
c660: 20 20 20 22 5a 4c 49 46 45 55 53 45 4c 45 41 46     "ZLIFEUSELEAF
c670: 59 42 45 4c 4c 2c 5a 46 41 43 45 49 4e 56 49 54  YBELL,ZFACEINVIT
c680: 45 54 41 4c 4b 47 4f 4c 44 2c 5a 47 45 4e 45 52  ETALKGOLD,ZGENER
c690: 41 4c 52 45 53 4f 52 54 53 4b 59 4f 50 45 4e 2c  ALRESORTSKYOPEN,
c6a0: 22 0a 20 20 20 20 22 5a 50 55 52 45 43 41 4b 45  ".    "ZPURECAKE
c6b0: 56 49 56 49 44 4e 45 41 54 4c 59 2c 5a 4b 49 57  VIVIDNEATLY,ZKIW
c6c0: 49 56 49 53 55 41 4c 50 52 49 44 45 41 50 50 4c  IVISUALPRIDEAPPL
c6d0: 45 2c 5a 4d 45 53 53 59 53 55 4c 46 55 52 44 52  E,ZMESSYSULFURDR
c6e0: 45 41 4d 46 45 53 54 49 56 45 2c 22 0a 20 20 20  EAMFESTIVE,".   
c6f0: 20 22 5a 43 48 41 52 47 45 43 4c 49 43 4b 48 55   "ZCHARGECLICKHU
c700: 4d 41 4e 45 48 49 52 45 2c 5a 48 45 52 52 49 4e  MANEHIRE,ZHERRIN
c710: 47 4a 4f 4b 45 46 45 41 54 55 52 45 48 4f 50 45  GJOKEFEATUREHOPE
c720: 46 55 4c 2c 5a 59 41 52 44 4f 52 45 47 41 4e 4f  FUL,ZYARDOREGANO
c730: 56 49 56 49 44 4a 45 57 45 4c 2c 22 0a 20 20 20  VIVIDJEWEL,".   
c740: 20 22 5a 46 4f 4f 54 54 41 50 57 4f 52 44 45 4e   "ZFOOTTAPWORDEN
c750: 54 52 59 2c 5a 57 49 53 48 48 49 54 53 4b 49 4e  TRY,ZWISHHITSKIN
c760: 4d 4f 54 4f 52 2c 5a 42 41 53 45 47 4f 55 44 41  MOTOR,ZBASEGOUDA
c770: 52 45 47 55 4c 41 52 46 4f 52 47 49 56 45 2c 22  REGULARFORGIVE,"
c780: 0a 20 20 20 20 22 5a 4d 55 46 46 49 4e 44 52 59  .    "ZMUFFINDRY
c790: 45 52 44 52 41 57 46 4f 52 54 55 4e 45 2c 5a 41  ERDRAWFORTUNE,ZA
c7a0: 43 54 49 4f 4e 52 41 4e 47 45 45 4c 45 47 41 4e  CTIONRANGEELEGAN
c7b0: 54 4e 45 55 54 52 4f 4e 2c 5a 54 52 59 46 41 43  TNEUTRON,ZTRYFAC
c7c0: 54 4b 45 45 50 4d 49 4c 4b 2c 22 0a 20 20 20 20  TKEEPMILK,".    
c7d0: 22 5a 50 45 41 43 48 43 4f 50 50 45 52 44 49 4e  "ZPEACHCOPPERDIN
c7e0: 4e 45 52 4c 41 4b 45 2c 5a 46 52 41 4d 45 45 4e  NERLAKE,ZFRAMEEN
c7f0: 54 45 52 53 49 4d 50 4c 45 4d 4f 55 54 48 2c 5a  TERSIMPLEMOUTH,Z
c800: 4d 45 52 52 59 43 52 41 43 4b 54 52 41 49 4e 4c  MERRYCRACKTRAINL
c810: 45 41 44 45 52 2c 22 0a 20 20 20 20 22 5a 4d 45  EADER,".    "ZME
c820: 4d 4f 52 59 52 45 51 55 45 53 54 53 4f 55 52 43  MORYREQUESTSOURC
c830: 45 42 49 47 2c 5a 43 41 52 52 59 46 4c 4f 4f 52  EBIG,ZCARRYFLOOR
c840: 4d 49 4e 4e 4f 57 44 52 41 47 4f 4e 2c 5a 4d 49  MINNOWDRAGON,ZMI
c850: 4e 4f 52 57 41 59 50 41 50 45 52 43 4c 41 53 53  NORWAYPAPERCLASS
c860: 59 2c 22 0a 20 20 20 20 22 5a 44 49 4c 4c 41 53  Y,".    "ZDILLAS
c870: 4b 48 4f 4b 49 4c 45 4d 4f 4e 2c 5a 52 45 53 4f  KHOKILEMON,ZRESO
c880: 4c 56 45 57 52 49 53 54 57 52 41 50 41 50 50 4c  LVEWRISTWRAPAPPL
c890: 45 2c 5a 41 53 4b 43 4f 4e 54 41 43 54 4d 4f 4e  E,ZASKCONTACTMON
c8a0: 49 54 4f 52 46 55 4e 2c 22 0a 20 20 20 20 22 5a  ITORFUN,".    "Z
c8b0: 47 49 56 45 56 49 56 49 44 44 49 56 49 4e 45 4d  GIVEVIVIDDIVINEM
c8c0: 45 41 4e 49 4e 47 2c 5a 45 49 47 48 54 4c 45 41  EANING,ZEIGHTLEA
c8d0: 44 45 52 57 4f 52 4b 45 52 4d 4f 53 54 2c 5a 4d  DERWORKERMOST,ZM
c8e0: 49 53 53 52 45 50 4c 59 48 55 4d 41 4e 4c 49 56  ISSREPLYHUMANLIV
c8f0: 49 4e 47 2c 22 0a 20 20 20 20 22 5a 58 45 4e 4f  ING,".    "ZXENO
c900: 4e 46 4c 49 47 48 54 50 41 4c 45 41 50 50 4c 45  NFLIGHTPALEAPPLE
c910: 2c 5a 53 4f 52 54 4d 49 53 54 59 51 55 4f 54 45  ,ZSORTMISTYQUOTE
c920: 43 41 42 42 41 47 45 2c 5a 45 41 47 4c 45 4c 49  CABBAGE,ZEAGLELI
c930: 4e 45 4d 49 4e 45 4d 41 49 4c 2c 22 0a 20 20 20  NEMINEMAIL,".   
c940: 20 22 5a 46 41 4d 49 4c 59 56 49 53 55 41 4c 4f   "ZFAMILYVISUALO
c950: 57 4e 45 52 4d 41 54 54 45 52 2c 5a 53 50 52 45  WNERMATTER,ZSPRE
c960: 41 44 4d 4f 54 4f 52 42 49 53 43 55 49 54 42 41  ADMOTORBISCUITBA
c970: 43 4f 4e 2c 5a 44 49 53 48 4b 45 45 50 42 4c 45  CON,ZDISHKEEPBLE
c980: 53 54 4d 4f 4e 49 54 4f 52 2c 22 0a 20 20 20 20  STMONITOR,".    
c990: 22 5a 4d 41 4c 4c 45 51 55 49 50 54 48 41 4e 4b  "ZMALLEQUIPTHANK
c9a0: 53 47 4c 55 45 2c 5a 47 4f 4c 44 59 4f 55 4e 47  SGLUE,ZGOLDYOUNG
c9b0: 49 4e 49 54 49 41 4c 4e 4f 53 45 2c 5a 48 55 4d  INITIALNOSE,ZHUM
c9c0: 4f 52 53 50 49 43 45 53 41 4e 44 4b 49 44 4e 45  ORSPICESANDKIDNE
c9d0: 59 29 22 0a 20 20 20 20 22 56 41 4c 55 45 53 28  Y)".    "VALUES(
c9e0: 3f 31 2c 3f 32 36 2c 3f 32 30 2c 3f 39 33 2c 3f  ?1,?26,?20,?93,?
c9f0: 38 2c 3f 33 33 2c 3f 33 2c 3f 38 31 2c 3f 32 38  8,?33,?3,?81,?28
ca00: 2c 3f 36 30 2c 3f 31 38 2c 3f 34 37 2c 3f 31 30  ,?60,?18,?47,?10
ca10: 39 2c 3f 32 39 2c 3f 33 30 2c 3f 31 30 34 2c 3f  9,?29,?30,?104,?
ca20: 38 36 2c 22 0a 20 20 20 20 22 3f 35 34 2c 3f 39  86,".    "?54,?9
ca30: 32 2c 3f 31 31 37 2c 3f 39 2c 3f 35 38 2c 3f 39  2,?117,?9,?58,?9
ca40: 37 2c 3f 36 31 2c 3f 31 31 39 2c 3f 37 33 2c 3f  7,?61,?119,?73,?
ca50: 31 30 37 2c 3f 31 32 30 2c 3f 38 30 2c 3f 39 39  107,?120,?80,?99
ca60: 2c 3f 33 31 2c 3f 39 36 2c 3f 38 35 2c 3f 35 30  ,?31,?96,?85,?50
ca70: 2c 3f 37 31 2c 22 0a 20 20 20 20 22 3f 34 32 2c  ,?71,".    "?42,
ca80: 3f 32 37 2c 3f 31 31 38 2c 3f 33 36 2c 3f 32 2c  ?27,?118,?36,?2,
ca90: 3f 36 37 2c 3f 36 32 2c 3f 31 30 38 2c 3f 38 32  ?67,?62,?108,?82
caa0: 2c 3f 39 34 2c 3f 37 36 2c 3f 33 35 2c 3f 34 30  ,?94,?76,?35,?40
cab0: 2c 3f 31 31 2c 3f 38 38 2c 3f 34 31 2c 3f 37 32  ,?11,?88,?41,?72
cac0: 2c 3f 34 2c 22 0a 20 20 20 20 22 3f 38 33 2c 3f  ,?4,".    "?83,?
cad0: 31 30 32 2c 3f 31 30 33 2c 3f 31 31 32 2c 3f 37  102,?103,?112,?7
cae0: 37 2c 3f 31 31 31 2c 3f 32 32 2c 3f 31 33 2c 3f  7,?111,?22,?13,?
caf0: 33 34 2c 3f 31 35 2c 3f 32 33 2c 3f 31 31 36 2c  34,?15,?23,?116,
cb00: 3f 37 2c 3f 35 2c 3f 39 30 2c 3f 35 37 2c 3f 35  ?7,?5,?90,?57,?5
cb10: 36 2c 22 0a 20 20 20 20 22 3f 37 35 2c 3f 35 31  6,".    "?75,?51
cb20: 2c 3f 38 34 2c 3f 32 35 2c 3f 36 33 2c 3f 33 37  ,?84,?25,?63,?37
cb30: 2c 3f 38 37 2c 3f 31 31 34 2c 3f 37 39 2c 3f 33  ,?87,?114,?79,?3
cb40: 38 2c 3f 31 34 2c 3f 31 30 2c 3f 32 31 2c 3f 34  8,?14,?10,?21,?4
cb50: 38 2c 3f 38 39 2c 3f 39 31 2c 3f 31 31 30 2c 22  8,?89,?91,?110,"
cb60: 0a 20 20 20 20 22 3f 36 39 2c 3f 34 35 2c 3f 31  .    "?69,?45,?1
cb70: 31 33 2c 3f 31 32 2c 3f 31 30 31 2c 3f 36 38 2c  13,?12,?101,?68,
cb80: 3f 31 30 35 2c 3f 34 36 2c 3f 39 35 2c 3f 37 34  ?105,?46,?95,?74
cb90: 2c 3f 32 34 2c 3f 35 33 2c 3f 33 39 2c 3f 36 2c  ,?24,?53,?39,?6,
cba0: 3f 36 34 2c 3f 35 32 2c 3f 39 38 2c 22 0a 20 20  ?64,?52,?98,".  
cbb0: 20 20 22 3f 36 35 2c 3f 31 31 35 2c 3f 34 39 2c    "?65,?115,?49,
cbc0: 3f 37 30 2c 3f 35 39 2c 3f 33 32 2c 3f 34 34 2c  ?70,?59,?32,?44,
cbd0: 3f 31 30 30 2c 3f 35 35 2c 3f 36 36 2c 3f 31 36  ?100,?55,?66,?16
cbe0: 2c 3f 31 39 2c 3f 31 30 36 2c 3f 34 33 2c 3f 31  ,?19,?106,?43,?1
cbf0: 37 2c 3f 37 38 29 3b 22 0a 20 20 29 3b 0a 20 20  7,?78);".  );.  
cc00: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
cc10: 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 70 65  +){.    x1 = spe
cc20: 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28 29  edtest1_random()
cc30: 3b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  ;.    speedtest1
cc40: 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 78 31 25 31  _numbername(x1%1
cc50: 30 30 30 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f  000, zNum, sizeo
cc60: 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 6c 65  f(zNum));.    le
cc70: 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  n = (int)strlen(
cc80: 7a 4e 75 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74  zNum);.    sqlit
cc90: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
cca0: 74 6d 74 2c 20 31 2c 20 69 5e 30 78 66 29 3b 0a  tmt, 1, i^0xf);.
ccb0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 7a 54 79      for(j=0; zTy
ccc0: 70 65 5b 6a 5d 3b 20 6a 2b 2b 29 7b 0a 20 20 20  pe[j]; j++){.   
ccd0: 20 20 20 73 77 69 74 63 68 28 20 7a 54 79 70 65     switch( zType
cce0: 5b 6a 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 63  [j] ){.        c
ccf0: 61 73 65 20 27 49 27 3a 0a 20 20 20 20 20 20 20  ase 'I':.       
cd00: 20 63 61 73 65 20 27 54 27 3a 0a 20 20 20 20 20   case 'T':.     
cd10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
cd20: 64 5f 69 6e 74 36 34 28 67 2e 70 53 74 6d 74 2c  d_int64(g.pStmt,
cd30: 20 6a 2b 32 2c 20 78 31 29 3b 0a 20 20 20 20 20   j+2, x1);.     
cd40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
cd50: 20 20 20 20 63 61 73 65 20 27 46 27 3a 0a 20 20      case 'F':.  
cd60: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
cd70: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 67 2e 70 53  bind_double(g.pS
cd80: 74 6d 74 2c 20 6a 2b 32 2c 20 28 64 6f 75 62 6c  tmt, j+2, (doubl
cd90: 65 29 78 31 29 3b 0a 20 20 20 20 20 20 20 20 20  e)x1);.         
cda0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
cdb0: 63 61 73 65 20 27 56 27 3a 0a 20 20 20 20 20 20  case 'V':.      
cdc0: 20 20 63 61 73 65 20 27 42 27 3a 0a 20 20 20 20    case 'B':.    
cdd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
cde0: 6e 64 5f 74 65 78 74 36 34 28 67 2e 70 53 74 6d  nd_text64(g.pStm
cdf0: 74 2c 20 6a 2b 32 2c 20 7a 4e 75 6d 2c 20 6c 65  t, j+2, zNum, le
ce00: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 2c 20   SQLITE_STATIC, 
ce30: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
ce40: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
ce50: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
ce60: 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28   speedtest1_run(
ce70: 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65  );.  }.  speedte
ce80: 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49 54  st1_exec("COMMIT
ce90: 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  ;");.  speedtest
cea0: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20  1_end_test();.. 
ceb0: 20 6e 20 3d 20 67 2e 73 7a 54 65 73 74 2a 32 35   n = g.szTest*25
cec0: 30 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  0;.  speedtest1_
ced0: 62 65 67 69 6e 5f 74 65 73 74 28 31 31 30 2c 20  begin_test(110, 
cee0: 22 51 75 65 72 79 20 25 64 20 72 6f 77 73 20 62  "Query %d rows b
cef0: 79 20 72 6f 77 69 64 22 2c 20 6e 29 3b 0a 20 20  y rowid", n);.  
cf00: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
cf10: 72 65 28 0a 20 20 20 20 22 53 45 4c 45 43 54 20  re(.    "SELECT 
cf20: 5a 43 59 41 4e 42 41 53 45 46 45 45 44 41 44 52  ZCYANBASEFEEDADR
cf30: 4f 49 54 2c 5a 4a 55 4e 49 4f 52 53 48 4f 57 50  OIT,ZJUNIORSHOWP
cf40: 52 45 53 53 4e 4f 56 41 2c 5a 43 41 55 53 45 53  RESSNOVA,ZCAUSES
cf50: 41 4c 41 4d 49 54 45 52 4d 43 59 41 4e 2c 22 0a  ALAMITERMCYAN,".
cf60: 20 20 20 20 22 5a 48 4f 50 45 46 55 4c 47 41 54      "ZHOPEFULGAT
cf70: 45 48 4f 4c 45 43 48 41 4c 4b 2c 5a 48 55 4d 4f  EHOLECHALK,ZHUMO
cf80: 52 53 50 49 43 45 53 41 4e 44 4b 49 44 4e 45 59  RSPICESANDKIDNEY
cf90: 2c 5a 53 57 49 4d 48 45 41 56 59 4d 45 4e 54 49  ,ZSWIMHEAVYMENTI
cfa0: 4f 4e 4b 49 4e 44 2c 22 0a 20 20 20 20 22 5a 4d  ONKIND,".    "ZM
cfb0: 4f 56 45 57 48 4f 47 41 4d 4d 41 49 4e 43 48 2c  OVEWHOGAMMAINCH,
cfc0: 5a 41 50 50 45 41 4c 53 49 4d 50 4c 45 53 45 43  ZAPPEALSIMPLESEC
cfd0: 4f 4e 44 48 4f 55 53 49 4e 47 2c 5a 48 41 46 4e  ONDHOUSING,ZHAFN
cfe0: 49 55 4d 53 43 52 49 50 54 53 41 4c 41 44 4d 4f  IUMSCRIPTSALADMO
cff0: 54 4f 52 2c 22 0a 20 20 20 20 22 5a 4e 45 41 54  TOR,".    "ZNEAT
d000: 53 54 45 57 50 41 52 54 49 52 4f 4e 2c 5a 4c 4f  STEWPARTIRON,ZLO
d010: 4e 47 46 49 4e 4c 45 41 56 45 49 4d 41 47 45 4f  NGFINLEAVEIMAGEO
d020: 49 4c 2c 5a 44 45 57 50 45 41 43 48 43 41 52 45  IL,ZDEWPEACHCARE
d030: 45 52 43 45 4c 45 52 59 2c 22 0a 20 20 20 20 22  ERCELERY,".    "
d040: 5a 58 45 4e 4f 4e 46 4c 49 47 48 54 50 41 4c 45  ZXENONFLIGHTPALE
d050: 41 50 50 4c 45 2c 5a 43 41 4c 4d 52 41 43 43 4f  APPLE,ZCALMRACCO
d060: 4f 4e 50 52 4f 47 52 41 4d 44 45 42 49 54 2c 5a  ONPROGRAMDEBIT,Z
d070: 55 53 55 41 4c 42 4f 44 59 48 41 4c 49 42 55 54  USUALBODYHALIBUT
d080: 44 49 41 4d 4f 4e 44 2c 22 0a 20 20 20 20 22 5a  DIAMOND,".    "Z
d090: 54 52 59 46 41 43 54 4b 45 45 50 4d 49 4c 4b 2c  TRYFACTKEEPMILK,
d0a0: 5a 57 45 41 4c 54 48 4c 49 4e 45 4e 47 4c 45 45  ZWEALTHLINENGLEE
d0b0: 46 55 4c 44 41 59 2c 5a 4c 4f 4e 47 44 49 45 54  FULDAY,ZLONGDIET
d0c0: 45 53 53 41 59 4e 41 54 55 52 45 2c 22 0a 20 20  ESSAYNATURE,".  
d0d0: 20 20 22 5a 4c 49 46 45 55 53 45 4c 45 41 46 59    "ZLIFEUSELEAFY
d0e0: 42 45 4c 4c 2c 5a 54 52 45 41 54 50 41 43 4b 46  BELL,ZTREATPACKF
d0f0: 55 54 55 52 45 43 4f 4e 56 45 52 54 2c 5a 4d 45  UTURECONVERT,ZME
d100: 4d 4f 52 59 52 45 51 55 45 53 54 53 4f 55 52 43  MORYREQUESTSOURC
d110: 45 42 49 47 2c 22 0a 20 20 20 20 22 5a 59 41 52  EBIG,".    "ZYAR
d120: 44 4f 52 45 47 41 4e 4f 56 49 56 49 44 4a 45 57  DOREGANOVIVIDJEW
d130: 45 4c 2c 5a 44 45 50 4f 53 49 54 50 41 49 52 43  EL,ZDEPOSITPAIRC
d140: 4f 4c 4c 45 47 45 43 4f 4d 45 54 2c 5a 53 4c 45  OLLEGECOMET,ZSLE
d150: 45 50 59 55 53 45 52 47 52 41 4e 44 42 4f 57 4c  EPYUSERGRANDBOWL
d160: 2c 22 0a 20 20 20 20 22 5a 42 52 49 45 46 47 4f  ,".    "ZBRIEFGO
d170: 42 59 44 4f 44 47 45 52 48 45 49 47 48 54 2c 5a  BYDODGERHEIGHT,Z
d180: 43 4c 55 42 52 45 4c 45 41 53 45 4c 49 5a 41 52  CLUBRELEASELIZAR
d190: 44 41 44 56 49 43 45 2c 5a 43 41 50 41 42 4c 45  DADVICE,ZCAPABLE
d1a0: 54 52 49 50 44 4f 4f 52 41 4c 4d 4f 4e 44 2c 22  TRIPDOORALMOND,"
d1b0: 0a 20 20 20 20 22 5a 44 52 59 57 41 4c 4c 42 45  .    "ZDRYWALLBE
d1c0: 59 4f 4e 44 42 52 4f 57 4e 42 4f 57 4c 2c 5a 41  YONDBROWNBOWL,ZA
d1d0: 53 4b 43 4f 4e 54 41 43 54 4d 4f 4e 49 54 4f 52  SKCONTACTMONITOR
d1e0: 46 55 4e 2c 5a 4b 49 57 49 56 49 53 55 41 4c 50  FUN,ZKIWIVISUALP
d1f0: 52 49 44 45 41 50 50 4c 45 2c 22 0a 20 20 20 20  RIDEAPPLE,".    
d200: 22 5a 4e 4f 54 49 43 45 50 45 41 52 50 4f 4c 49  "ZNOTICEPEARPOLI
d210: 43 59 4a 55 49 43 45 2c 5a 50 45 41 43 48 43 4f  CYJUICE,ZPEACHCO
d220: 50 50 45 52 44 49 4e 4e 45 52 4c 41 4b 45 2c 5a  PPERDINNERLAKE,Z
d230: 53 54 45 45 4c 43 41 52 45 46 55 4c 50 4c 41 54  STEELCAREFULPLAT
d240: 45 4e 55 4d 42 45 52 2c 22 0a 20 20 20 20 22 5a  ENUMBER,".    "Z
d250: 47 4c 41 44 53 50 52 41 59 4b 49 44 4e 45 59 47  GLADSPRAYKIDNEYG
d260: 55 50 50 59 2c 5a 43 4f 4d 50 41 4e 59 53 55 4d  UPPY,ZCOMPANYSUM
d270: 4d 45 52 46 49 42 45 52 45 4c 46 2c 5a 54 45 4e  MERFIBERELF,ZTEN
d280: 4e 49 53 43 59 43 4c 45 42 49 4c 4c 4f 46 46 49  NISCYCLEBILLOFFI
d290: 43 45 52 2c 22 0a 20 20 20 20 22 5a 49 4d 41 47  CER,".    "ZIMAG
d2a0: 45 50 45 4e 43 49 4c 4f 54 48 45 52 42 4f 54 54  EPENCILOTHERBOTT
d2b0: 4f 4d 2c 5a 57 45 53 54 41 4d 4f 55 4e 54 41 46  OM,ZWESTAMOUNTAF
d2c0: 46 45 43 54 48 45 41 52 49 4e 47 2c 5a 44 49 56  FECTHEARING,ZDIV
d2d0: 45 52 50 41 49 4e 54 4c 45 41 54 48 45 52 45 41  ERPAINTLEATHEREA
d2e0: 53 59 2c 22 0a 20 20 20 20 22 5a 53 4b 59 53 4b  SY,".    "ZSKYSK
d2f0: 59 43 4c 41 53 53 49 43 42 52 49 45 46 2c 5a 4d  YCLASSICBRIEF,ZM
d300: 45 53 53 59 53 55 4c 46 55 52 44 52 45 41 4d 46  ESSYSULFURDREAMF
d310: 45 53 54 49 56 45 2c 5a 4d 45 52 52 59 43 52 41  ESTIVE,ZMERRYCRA
d320: 43 4b 54 52 41 49 4e 4c 45 41 44 45 52 2c 22 0a  CKTRAINLEADER,".
d330: 20 20 20 20 22 5a 42 52 4f 41 44 41 42 4c 45 53      "ZBROADABLES
d340: 4f 4c 49 44 43 41 53 55 41 4c 2c 5a 47 4c 41 53  OLIDCASUAL,ZGLAS
d350: 53 52 45 53 45 52 56 45 42 41 52 49 55 4d 4d 45  SRESERVEBARIUMME
d360: 41 4c 2c 5a 54 55 4e 45 47 41 53 42 55 46 46 41  AL,ZTUNEGASBUFFA
d370: 4c 4f 43 41 50 49 54 41 4c 2c 22 0a 20 20 20 20  LOCAPITAL,".    
d380: 22 5a 42 41 4e 4b 42 55 46 46 41 4c 4f 52 45 43  "ZBANKBUFFALOREC
d390: 4f 56 45 52 4f 52 42 49 54 2c 5a 54 52 45 41 54  OVERORBIT,ZTREAT
d3a0: 54 45 53 54 51 55 49 4c 4c 43 48 41 52 47 45 2c  TESTQUILLCHARGE,
d3b0: 5a 42 41 4d 42 4f 4f 4d 45 53 53 57 41 53 41 42  ZBAMBOOMESSWASAB
d3c0: 49 45 56 45 4e 49 4e 47 2c 22 0a 20 20 20 20 22  IEVENING,".    "
d3d0: 5a 52 45 57 41 52 44 49 4e 53 49 44 45 4d 41 4e  ZREWARDINSIDEMAN
d3e0: 47 4f 49 4e 54 45 4e 53 45 2c 5a 45 41 47 4c 45  GOINTENSE,ZEAGLE
d3f0: 4c 49 4e 45 4d 49 4e 45 4d 41 49 4c 2c 5a 43 41  LINEMINEMAIL,ZCA
d400: 4c 4d 4c 59 47 45 4d 46 49 4e 49 53 48 45 46 46  LMLYGEMFINISHEFF
d410: 45 43 54 2c 22 0a 20 20 20 20 22 5a 4b 45 59 46  ECT,".    "ZKEYF
d420: 41 49 4c 41 50 52 49 43 4f 54 4d 45 54 41 4c 2c  AILAPRICOTMETAL,
d430: 5a 46 49 4e 47 45 52 44 55 45 50 49 5a 5a 41 4f  ZFINGERDUEPIZZAO
d440: 50 54 49 4f 4e 2c 5a 43 41 44 45 54 42 52 49 47  PTION,ZCADETBRIG
d450: 48 54 50 4c 41 4e 45 54 42 41 4e 4b 2c 22 0a 20  HTPLANETBANK,". 
d460: 20 20 20 22 5a 47 4f 4c 44 59 4f 55 4e 47 49 4e     "ZGOLDYOUNGIN
d470: 49 54 49 41 4c 4e 4f 53 45 2c 5a 4d 49 53 53 52  ITIALNOSE,ZMISSR
d480: 45 50 4c 59 48 55 4d 41 4e 4c 49 56 49 4e 47 2c  EPLYHUMANLIVING,
d490: 5a 45 49 47 48 54 4c 45 41 44 45 52 57 4f 52 4b  ZEIGHTLEADERWORK
d4a0: 45 52 4d 4f 53 54 2c 22 0a 20 20 20 20 22 5a 46  ERMOST,".    "ZF
d4b0: 52 41 4d 45 45 4e 54 45 52 53 49 4d 50 4c 45 4d  RAMEENTERSIMPLEM
d4c0: 4f 55 54 48 2c 5a 42 49 47 54 48 49 4e 4b 43 4f  OUTH,ZBIGTHINKCO
d4d0: 4e 56 45 52 54 45 43 4f 4e 4f 4d 59 2c 5a 46 41  NVERTECONOMY,ZFA
d4e0: 43 45 49 4e 56 49 54 45 54 41 4c 4b 47 4f 4c 44  CEINVITETALKGOLD
d4f0: 2c 22 0a 20 20 20 20 22 5a 50 4f 53 54 50 52 4f  ,".    "ZPOSTPRO
d500: 54 45 49 4e 48 41 4e 44 4c 45 41 43 54 4f 52 2c  TEINHANDLEACTOR,
d510: 5a 48 45 52 52 49 4e 47 4a 4f 4b 45 46 45 41 54  ZHERRINGJOKEFEAT
d520: 55 52 45 48 4f 50 45 46 55 4c 2c 5a 43 41 42 42  UREHOPEFUL,ZCABB
d530: 41 47 45 53 4f 43 4b 45 41 53 45 4d 49 4e 55 54  AGESOCKEASEMINUT
d540: 45 2c 22 0a 20 20 20 20 22 5a 4d 55 46 46 49 4e  E,".    "ZMUFFIN
d550: 44 52 59 45 52 44 52 41 57 46 4f 52 54 55 4e 45  DRYERDRAWFORTUNE
d560: 2c 5a 50 52 4f 42 4c 45 4d 43 4c 55 42 50 4f 50  ,ZPROBLEMCLUBPOP
d570: 4f 56 45 52 4a 45 4c 4c 59 2c 5a 47 49 56 45 56  OVERJELLY,ZGIVEV
d580: 49 56 49 44 44 49 56 49 4e 45 4d 45 41 4e 49 4e  IVIDDIVINEMEANIN
d590: 47 2c 22 0a 20 20 20 20 22 5a 47 45 4e 45 4e 41  G,".    "ZGENENA
d5a0: 54 55 52 41 4c 48 45 41 52 49 4e 47 4b 49 54 45  TURALHEARINGKITE
d5b0: 2c 5a 47 45 4e 45 52 41 4c 52 45 53 4f 52 54 53  ,ZGENERALRESORTS
d5c0: 4b 59 4f 50 45 4e 2c 5a 4c 45 54 54 55 43 45 42  KYOPEN,ZLETTUCEB
d5d0: 49 52 44 4d 45 45 54 44 45 42 41 54 45 2c 22 0a  IRDMEETDEBATE,".
d5e0: 20 20 20 20 22 5a 42 41 53 45 47 4f 55 44 41 52      "ZBASEGOUDAR
d5f0: 45 47 55 4c 41 52 46 4f 52 47 49 56 45 2c 5a 43  EGULARFORGIVE,ZC
d600: 48 41 52 47 45 43 4c 49 43 4b 48 55 4d 41 4e 45  HARGECLICKHUMANE
d610: 48 49 52 45 2c 5a 50 4c 41 4e 45 54 46 41 4d 49  HIRE,ZPLANETFAMI
d620: 4c 59 50 55 52 45 4d 45 4d 4f 52 59 2c 22 0a 20  LYPUREMEMORY,". 
d630: 20 20 20 22 5a 4d 49 4e 4f 52 57 41 59 50 41 50     "ZMINORWAYPAP
d640: 45 52 43 4c 41 53 53 59 2c 5a 43 41 50 59 45 41  ERCLASSY,ZCAPYEA
d650: 52 4c 59 52 49 56 45 54 42 52 55 53 48 2c 5a 53  RLYRIVETBRUSH,ZS
d660: 49 5a 45 54 4f 45 41 57 41 52 44 46 52 45 53 48  IZETOEAWARDFRESH
d670: 2c 22 0a 20 20 20 20 22 5a 41 52 53 45 4e 49 43  ,".    "ZARSENIC
d680: 53 41 4d 50 4c 45 57 41 49 54 4d 55 4f 4e 2c 5a  SAMPLEWAITMUON,Z
d690: 53 51 55 41 52 45 47 4c 45 45 46 55 4c 43 48 49  SQUAREGLEEFULCHI
d6a0: 4c 44 4c 49 47 48 54 2c 5a 53 48 49 4e 59 41 53  LDLIGHT,ZSHINYAS
d6b0: 53 49 53 54 4c 49 56 49 4e 47 43 52 41 42 2c 22  SISTLIVINGCRAB,"
d6c0: 0a 20 20 20 20 22 5a 43 4f 52 4e 45 52 41 4e 43  .    "ZCORNERANC
d6d0: 48 4f 52 54 41 50 45 44 49 56 45 52 2c 5a 44 45  HORTAPEDIVER,ZDE
d6e0: 43 41 44 45 4a 4f 59 4f 55 53 57 41 56 45 48 41  CADEJOYOUSWAVEHA
d6f0: 42 49 54 2c 5a 54 52 41 56 45 4c 44 52 49 56 45  BIT,ZTRAVELDRIVE
d700: 52 43 4f 4e 54 45 53 54 4c 49 4c 59 2c 22 0a 20  RCONTESTLILY,". 
d710: 20 20 20 22 5a 46 4c 59 49 4e 47 44 4f 43 54 4f     "ZFLYINGDOCTO
d720: 52 54 41 42 4c 45 4d 45 4c 4f 44 59 2c 5a 53 48  RTABLEMELODY,ZSH
d730: 41 52 4b 4a 55 53 54 46 52 55 49 54 4d 4f 56 49  ARKJUSTFRUITMOVI
d740: 45 2c 5a 46 41 4d 49 4c 59 56 49 53 55 41 4c 4f  E,ZFAMILYVISUALO
d750: 57 4e 45 52 4d 41 54 54 45 52 2c 22 0a 20 20 20  WNERMATTER,".   
d760: 20 22 5a 46 41 52 4d 45 52 4d 4f 52 4e 49 4e 47   "ZFARMERMORNING
d770: 4d 49 52 52 4f 52 43 4f 4e 43 45 52 4e 2c 5a 47  MIRRORCONCERN,ZG
d780: 49 46 54 49 43 45 46 49 53 48 47 4c 55 45 48 41  IFTICEFISHGLUEHA
d790: 49 52 2c 5a 4f 55 54 53 49 44 45 50 45 41 48 45  IR,ZOUTSIDEPEAHE
d7a0: 4e 43 4f 55 4e 54 49 43 45 2c 22 0a 20 20 20 20  NCOUNTICE,".    
d7b0: 22 5a 53 50 52 45 41 44 4d 4f 54 4f 52 42 49 53  "ZSPREADMOTORBIS
d7c0: 43 55 49 54 42 41 43 4f 4e 2c 5a 57 49 53 48 48  CUITBACON,ZWISHH
d7d0: 49 54 53 4b 49 4e 4d 4f 54 4f 52 2c 5a 48 4f 4c  ITSKINMOTOR,ZHOL
d7e0: 49 44 41 59 48 45 41 44 50 4f 4e 59 44 45 54 41  IDAYHEADPONYDETA
d7f0: 49 4c 2c 22 0a 20 20 20 20 22 5a 57 4f 4f 44 50  IL,".    "ZWOODP
d800: 4f 45 54 52 59 43 4f 42 42 4c 45 52 42 45 4e 43  OETRYCOBBLERBENC
d810: 48 2c 5a 41 49 52 46 4f 52 47 49 56 45 48 45 41  H,ZAIRFORGIVEHEA
d820: 44 46 52 4f 47 2c 5a 42 52 4f 57 42 41 4c 41 4e  DFROG,ZBROWBALAN
d830: 43 45 4b 45 59 43 48 4f 57 44 45 52 2c 22 0a 20  CEKEYCHOWDER,". 
d840: 20 20 20 22 5a 44 49 53 48 4b 45 45 50 42 4c 45     "ZDISHKEEPBLE
d850: 53 54 4d 4f 4e 49 54 4f 52 2c 5a 43 4c 41 4d 42  STMONITOR,ZCLAMB
d860: 49 54 41 52 55 47 55 4c 41 46 41 4a 49 54 41 2c  ITARUGULAFAJITA,
d870: 5a 50 4c 49 45 52 53 50 52 49 4e 54 41 53 4b 4f  ZPLIERSPRINTASKO
d880: 52 45 47 41 4e 4f 2c 22 0a 20 20 20 20 22 5a 52  REGANO,".    "ZR
d890: 41 44 49 41 4e 54 57 48 45 4e 54 52 59 43 41 52  ADIANTWHENTRYCAR
d8a0: 44 2c 5a 44 45 4c 41 59 4f 55 54 43 4f 4d 45 48  D,ZDELAYOUTCOMEH
d8b0: 4f 52 4e 41 47 45 4e 43 59 2c 5a 50 55 52 45 43  ORNAGENCY,ZPUREC
d8c0: 41 4b 45 56 49 56 49 44 4e 45 41 54 4c 59 2c 22  AKEVIVIDNEATLY,"
d8d0: 0a 20 20 20 20 22 5a 50 41 54 54 45 52 4e 43 4c  .    "ZPATTERNCL
d8e0: 4f 52 49 4e 45 47 52 41 4e 44 43 4f 4c 42 59 2c  ORINEGRANDCOLBY,
d8f0: 5a 48 41 4e 44 59 52 45 50 41 49 52 50 52 4f 54  ZHANDYREPAIRPROT
d900: 4f 4e 41 49 52 50 4f 52 54 2c 5a 41 47 45 52 45  ONAIRPORT,ZAGERE
d910: 45 44 46 52 4f 47 42 41 53 4b 45 54 2c 22 0a 20  EDFROGBASKET,". 
d920: 20 20 20 22 5a 53 4f 52 54 4d 49 53 54 59 51 55     "ZSORTMISTYQU
d930: 4f 54 45 43 41 42 42 41 47 45 2c 5a 46 4f 4f 54  OTECABBAGE,ZFOOT
d940: 54 41 50 57 4f 52 44 45 4e 54 52 59 2c 5a 52 45  TAPWORDENTRY,ZRE
d950: 53 4f 4c 56 45 57 52 49 53 54 57 52 41 50 41 50  SOLVEWRISTWRAPAP
d960: 50 4c 45 2c 22 0a 20 20 20 20 22 5a 44 49 4c 4c  PLE,".    "ZDILL
d970: 41 53 4b 48 4f 4b 49 4c 45 4d 4f 4e 2c 5a 46 49  ASKHOKILEMON,ZFI
d980: 4c 4c 53 54 4f 50 4c 41 57 4a 4f 59 46 55 4c 2c  LLSTOPLAWJOYFUL,
d990: 5a 41 43 54 49 4f 4e 52 41 4e 47 45 45 4c 45 47  ZACTIONRANGEELEG
d9a0: 41 4e 54 4e 45 55 54 52 4f 4e 2c 22 0a 20 20 20  ANTNEUTRON,".   
d9b0: 20 22 5a 52 45 53 4f 52 54 59 41 52 44 47 52 45   "ZRESORTYARDGRE
d9c0: 45 4e 4c 45 54 2c 5a 43 52 45 41 4d 45 56 45 4e  ENLET,ZCREAMEVEN
d9d0: 49 4e 47 4c 49 50 42 52 41 4e 43 48 2c 5a 57 48  INGLIPBRANCH,ZWH
d9e0: 41 4c 45 4d 41 54 48 41 56 4f 43 41 44 4f 43 4f  ALEMATHAVOCADOCO
d9f0: 50 50 45 52 2c 22 0a 20 20 20 20 22 5a 47 52 41  PPER,".    "ZGRA
da00: 59 53 55 52 56 45 59 57 49 52 45 4c 4f 56 45 2c  YSURVEYWIRELOVE,
da10: 5a 42 45 4c 4c 59 43 52 41 53 48 49 54 45 4d 4c  ZBELLYCRASHITEML
da20: 41 43 4b 2c 5a 48 41 4e 47 45 52 4c 49 54 48 49  ACK,ZHANGERLITHI
da30: 55 4d 44 49 4e 4e 45 52 4d 45 45 54 2c 22 0a 20  UMDINNERMEET,". 
da40: 20 20 20 22 5a 43 41 52 52 59 46 4c 4f 4f 52 4d     "ZCARRYFLOORM
da50: 49 4e 4e 4f 57 44 52 41 47 4f 4e 2c 5a 4d 41 4c  INNOWDRAGON,ZMAL
da60: 4c 45 51 55 49 50 54 48 41 4e 4b 53 47 4c 55 45  LEQUIPTHANKSGLUE
da70: 2c 5a 54 45 52 4d 46 49 54 54 49 4e 47 48 4f 55  ,ZTERMFITTINGHOU
da80: 53 49 4e 47 43 4f 4d 4d 41 4e 44 2c 22 0a 20 20  SINGCOMMAND,".  
da90: 20 20 22 5a 4f 4e 45 52 45 4c 45 41 53 45 41 56    "ZONERELEASEAV
daa0: 45 52 41 47 45 4e 55 52 53 45 2c 5a 4c 41 43 45  ERAGENURSE,ZLACE
dab0: 41 44 44 52 45 53 53 47 52 4f 55 4e 44 43 41 52  ADDRESSGROUNDCAR
dac0: 45 46 55 4c 22 0a 20 20 20 20 22 20 46 52 4f 4d  EFUL".    " FROM
dad0: 20 5a 4c 4f 4f 4b 53 4c 49 4b 45 43 4f 52 45 44   ZLOOKSLIKECORED
dae0: 41 54 41 20 57 48 45 52 45 20 5a 50 4b 3d 3f 31  ATA WHERE ZPK=?1
daf0: 3b 22 0a 20 20 29 3b 0a 20 20 66 6f 72 28 69 3d  ;".  );.  for(i=
db00: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
db10: 20 20 78 31 20 3d 20 73 70 65 65 64 74 65 73 74    x1 = speedtest
db20: 31 5f 72 61 6e 64 6f 6d 28 29 25 6e 52 6f 77 3b  1_random()%nRow;
db30: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
db40: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
db50: 2c 20 78 31 29 3b 0a 20 20 20 20 73 70 65 65 64  , x1);.    speed
db60: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d  test1_run();.  }
db70: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
db80: 64 5f 74 65 73 74 28 29 3b 0a 7d 0a 0a 2f 2a 0a  d_test();.}../*.
db90: 2a 2f 0a 76 6f 69 64 20 74 65 73 74 73 65 74 5f  */.void testset_
dba0: 74 72 69 67 67 65 72 28 76 6f 69 64 29 7b 0a 20  trigger(void){. 
dbb0: 20 69 6e 74 20 6a 6a 2c 20 69 69 3b 0a 20 20 63   int jj, ii;.  c
dbc0: 68 61 72 20 7a 4e 75 6d 5b 32 30 30 30 5d 3b 20  har zNum[2000]; 
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dbe0: 41 20 6e 75 6d 62 65 72 20 6e 61 6d 65 20 2a 2f  A number name */
dbf0: 0a 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20 4e 52  ..  const int NR
dc00: 4f 57 20 20 3d 20 35 30 30 2a 67 2e 73 7a 54 65  OW  = 500*g.szTe
dc10: 73 74 3b 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  st;.  const int 
dc20: 4e 52 4f 57 32 20 3d 20 31 30 30 2a 67 2e 73 7a  NROW2 = 100*g.sz
dc30: 54 65 73 74 3b 0a 0a 20 20 73 70 65 65 64 74 65  Test;..  speedte
dc40: 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20 20 20  st1_exec(.      
dc50: 22 42 45 47 49 4e 3b 22 0a 20 20 20 20 20 20 22  "BEGIN;".      "
dc60: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
dc70: 72 6f 77 69 64 20 49 4e 54 45 47 45 52 20 50 52  rowid INTEGER PR
dc80: 49 4d 41 52 59 20 4b 45 59 2c 20 69 20 49 4e 54  IMARY KEY, i INT
dc90: 45 47 45 52 2c 20 74 20 54 45 58 54 29 3b 22 0a  EGER, t TEXT);".
dca0: 20 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41        "CREATE TA
dcb0: 42 4c 45 20 74 32 28 72 6f 77 69 64 20 49 4e 54  BLE t2(rowid INT
dcc0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
dcd0: 2c 20 69 20 49 4e 54 45 47 45 52 2c 20 74 20 54  , i INTEGER, t T
dce0: 45 58 54 29 3b 22 0a 20 20 20 20 20 20 22 43 52  EXT);".      "CR
dcf0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 72 6f  EATE TABLE t3(ro
dd00: 77 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d  wid INTEGER PRIM
dd10: 41 52 59 20 4b 45 59 2c 20 69 20 49 4e 54 45 47  ARY KEY, i INTEG
dd20: 45 52 2c 20 74 20 54 45 58 54 29 3b 22 0a 20 20  ER, t TEXT);".  
dd30: 20 20 20 20 22 43 52 45 41 54 45 20 56 49 45 57      "CREATE VIEW
dd40: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 72 6f   v1 AS SELECT ro
dd50: 77 69 64 2c 20 69 2c 20 74 20 46 52 4f 4d 20 74  wid, i, t FROM t
dd60: 31 3b 22 0a 20 20 20 20 20 20 22 43 52 45 41 54  1;".      "CREAT
dd70: 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c  E VIEW v2 AS SEL
dd80: 45 43 54 20 72 6f 77 69 64 2c 20 69 2c 20 74 20  ECT rowid, i, t 
dd90: 46 52 4f 4d 20 74 32 3b 22 0a 20 20 20 20 20 20  FROM t2;".      
dda0: 22 43 52 45 41 54 45 20 56 49 45 57 20 76 33 20  "CREATE VIEW v3 
ddb0: 41 53 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  AS SELECT rowid,
ddc0: 20 69 2c 20 74 20 46 52 4f 4d 20 74 33 3b 22 0a   i, t FROM t3;".
ddd0: 20 20 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31 3b    );.  for(jj=1;
dde0: 20 6a 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b 0a 20   jj<=3; jj++){. 
ddf0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72     speedtest1_pr
de00: 65 70 61 72 65 28 22 49 4e 53 45 52 54 20 49 4e  epare("INSERT IN
de10: 54 4f 20 74 25 64 20 56 41 4c 55 45 53 28 4e 55  TO t%d VALUES(NU
de20: 4c 4c 2c 3f 31 2c 3f 32 29 22 2c 20 6a 6a 29 3b  LL,?1,?2)", jj);
de30: 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
de40: 69 3c 4e 52 4f 57 3b 20 69 69 2b 2b 29 7b 0a 20  i<NROW; ii++){. 
de50: 20 20 20 20 20 69 6e 74 20 78 31 20 3d 20 73 70       int x1 = sp
de60: 65 65 64 74 65 73 74 31 5f 72 61 6e 64 6f 6d 28  eedtest1_random(
de70: 29 20 25 20 4e 52 4f 57 3b 0a 20 20 20 20 20 20  ) % NROW;.      
de80: 73 70 65 65 64 74 65 73 74 31 5f 6e 75 6d 62 65  speedtest1_numbe
de90: 72 6e 61 6d 65 28 78 31 2c 20 7a 4e 75 6d 2c 20  rname(x1, zNum, 
dea0: 73 69 7a 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20  sizeof(zNum));. 
deb0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
dec0: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
ded0: 2c 20 78 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  , x1);.      sql
dee0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 67  ite3_bind_text(g
def0: 2e 70 53 74 6d 74 2c 20 32 2c 20 7a 4e 75 6d 2c  .pStmt, 2, zNum,
df00: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54   -1, SQLITE_STAT
df10: 49 43 29 3b 0a 20 20 20 20 20 20 73 70 65 65 64  IC);.      speed
df20: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 20  test1_run();.   
df30: 20 7d 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65   }.  }.  speedte
df40: 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20 20 20  st1_exec(.      
df50: 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31  "CREATE INDEX i1
df60: 20 4f 4e 20 74 31 28 74 29 3b 22 0a 20 20 20 20   ON t1(t);".    
df70: 20 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 20    "CREATE INDEX 
df80: 69 32 20 4f 4e 20 74 32 28 74 29 3b 22 0a 20 20  i2 ON t2(t);".  
df90: 20 20 20 20 22 43 52 45 41 54 45 20 49 4e 44 45      "CREATE INDE
dfa0: 58 20 69 33 20 4f 4e 20 74 33 28 74 29 3b 22 0a  X i3 ON t3(t);".
dfb0: 20 20 20 20 20 20 22 43 4f 4d 4d 49 54 3b 22 0a        "COMMIT;".
dfc0: 20 20 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73    );..  speedtes
dfd0: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 30  t1_begin_test(10
dfe0: 30 2c 20 22 73 70 65 65 64 34 70 2d 6a 6f 69 6e  0, "speed4p-join
dff0: 31 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  1");.  speedtest
e000: 31 5f 70 72 65 70 61 72 65 28 0a 20 20 20 20 20  1_prepare(.     
e010: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
e020: 74 31 2c 20 74 32 2c 20 74 33 20 57 48 45 52 45  t1, t2, t3 WHERE
e030: 20 74 31 2e 6f 69 64 20 3d 20 74 32 2e 6f 69 64   t1.oid = t2.oid
e040: 20 41 4e 44 20 74 32 2e 6f 69 64 20 3d 20 74 33   AND t2.oid = t3
e050: 2e 6f 69 64 22 0a 20 20 29 3b 0a 20 20 73 70 65  .oid".  );.  spe
e060: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
e070: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
e080: 74 65 73 74 28 29 3b 0a 0a 20 20 73 70 65 65 64  test();..  speed
e090: 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74  test1_begin_test
e0a0: 28 31 31 30 2c 20 22 73 70 65 65 64 34 70 2d 6a  (110, "speed4p-j
e0b0: 6f 69 6e 32 22 29 3b 0a 20 20 73 70 65 65 64 74  oin2");.  speedt
e0c0: 65 73 74 31 5f 70 72 65 70 61 72 65 28 0a 20 20  est1_prepare(.  
e0d0: 20 20 20 20 22 53 45 4c 45 43 54 20 2a 20 46 52      "SELECT * FR
e0e0: 4f 4d 20 74 31 2c 20 74 32 2c 20 74 33 20 57 48  OM t1, t2, t3 WH
e0f0: 45 52 45 20 74 31 2e 74 20 3d 20 74 32 2e 74 20  ERE t1.t = t2.t 
e100: 41 4e 44 20 74 32 2e 74 20 3d 20 74 33 2e 74 22  AND t2.t = t3.t"
e110: 0a 20 20 29 3b 0a 20 20 73 70 65 65 64 74 65 73  .  );.  speedtes
e120: 74 31 5f 72 75 6e 28 29 3b 0a 20 20 73 70 65 65  t1_run();.  spee
e130: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
e140: 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31  );..  speedtest1
e150: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 32 30 2c  _begin_test(120,
e160: 20 22 73 70 65 65 64 34 70 2d 76 69 65 77 31 22   "speed4p-view1"
e170: 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31 3b 20 6a  );.  for(jj=1; j
e180: 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20  j<=3; jj++){.   
e190: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
e1a0: 61 72 65 28 22 53 45 4c 45 43 54 20 2a 20 46 52  are("SELECT * FR
e1b0: 4f 4d 20 76 25 64 20 57 48 45 52 45 20 72 6f 77  OM v%d WHERE row
e1c0: 69 64 20 3d 20 3f 22 2c 20 6a 6a 29 3b 0a 20 20  id = ?", jj);.  
e1d0: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 4e    for(ii=0; ii<N
e1e0: 52 4f 57 32 3b 20 69 69 2b 3d 33 29 7b 0a 20 20  ROW2; ii+=3){.  
e1f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
e200: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31 2c  _int(g.pStmt, 1,
e210: 20 69 69 2a 33 29 3b 0a 20 20 20 20 20 20 73 70   ii*3);.      sp
e220: 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a  eedtest1_run();.
e230: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 70 65 65      }.  }.  spee
e240: 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28  dtest1_end_test(
e250: 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73 74 31  );..  speedtest1
e260: 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 33 30 2c  _begin_test(130,
e270: 20 22 73 70 65 65 64 34 70 2d 74 61 62 6c 65 31   "speed4p-table1
e280: 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31 3b 20  ");.  for(jj=1; 
e290: 6a 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b 0a 20 20  jj<=3; jj++){.  
e2a0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65    speedtest1_pre
e2b0: 70 61 72 65 28 22 53 45 4c 45 43 54 20 2a 20 46  pare("SELECT * F
e2c0: 52 4f 4d 20 74 25 64 20 57 48 45 52 45 20 72 6f  ROM t%d WHERE ro
e2d0: 77 69 64 20 3d 20 3f 22 2c 20 6a 6a 29 3b 0a 20  wid = ?", jj);. 
e2e0: 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
e2f0: 4e 52 4f 57 32 3b 20 69 69 2b 3d 33 29 7b 0a 20  NROW2; ii+=3){. 
e300: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
e310: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
e320: 2c 20 69 69 2a 33 29 3b 0a 20 20 20 20 20 20 73  , ii*3);.      s
e330: 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b  peedtest1_run();
e340: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 70 65  .    }.  }.  spe
e350: 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74  edtest1_end_test
e360: 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73 74  ();..  speedtest
e370: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 34 30  1_begin_test(140
e380: 2c 20 22 73 70 65 65 64 34 70 2d 74 61 62 6c 65  , "speed4p-table
e390: 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31 3b  1");.  for(jj=1;
e3a0: 20 6a 6a 3c 3d 33 3b 20 6a 6a 2b 2b 29 7b 0a 20   jj<=3; jj++){. 
e3b0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 70 72     speedtest1_pr
e3c0: 65 70 61 72 65 28 22 53 45 4c 45 43 54 20 2a 20  epare("SELECT * 
e3d0: 46 52 4f 4d 20 74 25 64 20 57 48 45 52 45 20 72  FROM t%d WHERE r
e3e0: 6f 77 69 64 20 3d 20 3f 22 2c 20 6a 6a 29 3b 0a  owid = ?", jj);.
e3f0: 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
e400: 3c 4e 52 4f 57 32 3b 20 69 69 2b 3d 33 29 7b 0a  <NROW2; ii+=3){.
e410: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
e420: 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20  nd_int(g.pStmt, 
e430: 31 2c 20 69 69 2a 33 29 3b 0a 20 20 20 20 20 20  1, ii*3);.      
e440: 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e 28 29  speedtest1_run()
e450: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 70  ;.    }.  }.  sp
e460: 65 65 64 74 65 73 74 31 5f 65 6e 64 5f 74 65 73  eedtest1_end_tes
e470: 74 28 29 3b 0a 0a 20 20 73 70 65 65 64 74 65 73  t();..  speedtes
e480: 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 35  t1_begin_test(15
e490: 30 2c 20 22 73 70 65 65 64 34 70 2d 73 75 62 73  0, "speed4p-subs
e4a0: 65 6c 65 63 74 31 22 29 3b 0a 20 20 73 70 65 65  elect1");.  spee
e4b0: 64 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22  dtest1_prepare("
e4c0: 53 45 4c 45 43 54 20 22 0a 20 20 20 20 20 20 22  SELECT ".      "
e4d0: 28 53 45 4c 45 43 54 20 74 20 46 52 4f 4d 20 74  (SELECT t FROM t
e4e0: 31 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20  1 WHERE rowid = 
e4f0: 3f 31 29 2c 22 0a 20 20 20 20 20 20 22 28 53 45  ?1),".      "(SE
e500: 4c 45 43 54 20 74 20 46 52 4f 4d 20 74 32 20 57  LECT t FROM t2 W
e510: 48 45 52 45 20 72 6f 77 69 64 20 3d 20 3f 31 29  HERE rowid = ?1)
e520: 2c 22 0a 20 20 20 20 20 20 22 28 53 45 4c 45 43  ,".      "(SELEC
e530: 54 20 74 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T t FROM t3 WHER
e540: 45 20 72 6f 77 69 64 20 3d 20 3f 31 29 22 0a 20  E rowid = ?1)". 
e550: 20 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 30 3b 20   );.  for(jj=0; 
e560: 6a 6a 3c 4e 52 4f 57 32 3b 20 6a 6a 2b 2b 29 7b  jj<NROW2; jj++){
e570: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
e580: 64 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 31  d_int(g.pStmt, 1
e590: 2c 20 6a 6a 2a 33 29 3b 0a 20 20 20 20 73 70 65  , jj*3);.    spe
e5a0: 65 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20  edtest1_run();. 
e5b0: 20 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f   }.  speedtest1_
e5c0: 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 73  end_test();..  s
e5d0: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
e5e0: 74 65 73 74 28 31 36 30 2c 20 22 73 70 65 65 64  test(160, "speed
e5f0: 34 70 2d 72 6f 77 69 64 2d 75 70 64 61 74 65 22  4p-rowid-update"
e600: 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f  );.  speedtest1_
e610: 65 78 65 63 28 22 42 45 47 49 4e 22 29 3b 0a 20  exec("BEGIN");. 
e620: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
e630: 61 72 65 28 22 55 50 44 41 54 45 20 74 31 20 53  are("UPDATE t1 S
e640: 45 54 20 69 3d 69 2b 31 20 57 48 45 52 45 20 72  ET i=i+1 WHERE r
e650: 6f 77 69 64 3d 3f 31 22 29 3b 0a 20 20 66 6f 72  owid=?1");.  for
e660: 28 6a 6a 3d 30 3b 20 6a 6a 3c 4e 52 4f 57 32 3b  (jj=0; jj<NROW2;
e670: 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69   jj++){.    sqli
e680: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70  te3_bind_int(g.p
e690: 53 74 6d 74 2c 20 31 2c 20 6a 6a 29 3b 0a 20 20  Stmt, 1, jj);.  
e6a0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
e6b0: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
e6c0: 65 73 74 31 5f 65 78 65 63 28 22 43 4f 4d 4d 49  est1_exec("COMMI
e6d0: 54 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  T");.  speedtest
e6e0: 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20  1_end_test();.. 
e6f0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
e700: 28 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  ("CREATE TABLE t
e710: 35 28 74 20 54 45 58 54 20 50 52 49 4d 41 52 59  5(t TEXT PRIMARY
e720: 20 4b 45 59 2c 20 69 20 49 4e 54 45 47 45 52 29   KEY, i INTEGER)
e730: 3b 22 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74  ;");.  speedtest
e740: 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31 37 30  1_begin_test(170
e750: 2c 20 22 73 70 65 65 64 34 70 2d 69 6e 73 65 72  , "speed4p-inser
e760: 74 2d 69 67 6e 6f 72 65 22 29 3b 0a 20 20 73 70  t-ignore");.  sp
e770: 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 49  eedtest1_exec("I
e780: 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20  NSERT OR IGNORE 
e790: 49 4e 54 4f 20 74 35 20 53 45 4c 45 43 54 20 74  INTO t5 SELECT t
e7a0: 2c 20 69 20 46 52 4f 4d 20 74 31 22 29 3b 0a 20  , i FROM t1");. 
e7b0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
e7c0: 74 65 73 74 28 29 3b 0a 0a 20 20 73 70 65 65 64  test();..  speed
e7d0: 74 65 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20  test1_exec(.    
e7e0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
e7f0: 6c 6f 67 28 6f 70 20 54 45 58 54 2c 20 72 20 49  log(op TEXT, r I
e800: 4e 54 45 47 45 52 2c 20 69 20 49 4e 54 45 47 45  NTEGER, i INTEGE
e810: 52 2c 20 74 20 54 45 58 54 29 3b 22 0a 20 20 20  R, t TEXT);".   
e820: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
e830: 20 74 34 28 72 6f 77 69 64 20 49 4e 54 45 47 45   t4(rowid INTEGE
e840: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 69  R PRIMARY KEY, i
e850: 20 49 4e 54 45 47 45 52 2c 20 74 20 54 45 58 54   INTEGER, t TEXT
e860: 29 3b 22 0a 20 20 20 20 20 20 22 43 52 45 41 54  );".      "CREAT
e870: 45 20 54 52 49 47 47 45 52 20 74 34 5f 74 72 69  E TRIGGER t4_tri
e880: 67 67 65 72 31 20 41 46 54 45 52 20 49 4e 53 45  gger1 AFTER INSE
e890: 52 54 20 4f 4e 20 74 34 20 42 45 47 49 4e 22 0a  RT ON t4 BEGIN".
e8a0: 20 20 20 20 20 20 22 20 20 49 4e 53 45 52 54 20        "  INSERT 
e8b0: 49 4e 54 4f 20 6c 6f 67 20 56 41 4c 55 45 53 28  INTO log VALUES(
e8c0: 27 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 27  'INSERT INTO t4'
e8d0: 2c 20 6e 65 77 2e 72 6f 77 69 64 2c 20 6e 65 77  , new.rowid, new
e8e0: 2e 69 2c 20 6e 65 77 2e 74 29 3b 22 0a 20 20 20  .i, new.t);".   
e8f0: 20 20 20 22 45 4e 44 3b 22 0a 20 20 20 20 20 20     "END;".      
e900: 22 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  "CREATE TRIGGER 
e910: 74 34 5f 74 72 69 67 67 65 72 32 20 41 46 54 45  t4_trigger2 AFTE
e920: 52 20 55 50 44 41 54 45 20 4f 4e 20 74 34 20 42  R UPDATE ON t4 B
e930: 45 47 49 4e 22 0a 20 20 20 20 20 20 22 20 20 49  EGIN".      "  I
e940: 4e 53 45 52 54 20 49 4e 54 4f 20 6c 6f 67 20 56  NSERT INTO log V
e950: 41 4c 55 45 53 28 27 55 50 44 41 54 45 20 4f 46  ALUES('UPDATE OF
e960: 20 74 34 27 2c 20 6e 65 77 2e 72 6f 77 69 64 2c   t4', new.rowid,
e970: 20 6e 65 77 2e 69 2c 20 6e 65 77 2e 74 29 3b 22   new.i, new.t);"
e980: 0a 20 20 20 20 20 20 22 45 4e 44 3b 22 0a 20 20  .      "END;".  
e990: 20 20 20 20 22 43 52 45 41 54 45 20 54 52 49 47      "CREATE TRIG
e9a0: 47 45 52 20 74 34 5f 74 72 69 67 67 65 72 33 20  GER t4_trigger3 
e9b0: 41 46 54 45 52 20 44 45 4c 45 54 45 20 4f 4e 20  AFTER DELETE ON 
e9c0: 74 34 20 42 45 47 49 4e 22 0a 20 20 20 20 20 20  t4 BEGIN".      
e9d0: 22 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c  "  INSERT INTO l
e9e0: 6f 67 20 56 41 4c 55 45 53 28 27 44 45 4c 45 54  og VALUES('DELET
e9f0: 45 20 4f 46 20 74 34 27 2c 20 6f 6c 64 2e 72 6f  E OF t4', old.ro
ea00: 77 69 64 2c 20 6f 6c 64 2e 69 2c 20 6f 6c 64 2e  wid, old.i, old.
ea10: 74 29 3b 22 0a 20 20 20 20 20 20 22 45 4e 44 3b  t);".      "END;
ea20: 22 0a 20 20 20 20 20 20 22 42 45 47 49 4e 3b 22  ".      "BEGIN;"
ea30: 0a 20 20 29 3b 0a 0a 20 20 73 70 65 65 64 74 65  .  );..  speedte
ea40: 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28 31  st1_begin_test(1
ea50: 38 30 2c 20 22 73 70 65 65 64 34 70 2d 74 72 69  80, "speed4p-tri
ea60: 67 67 65 72 31 22 29 3b 0a 20 20 73 70 65 65 64  gger1");.  speed
ea70: 74 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 49  test1_prepare("I
ea80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
ea90: 4c 55 45 53 28 4e 55 4c 4c 2c 20 3f 31 2c 20 3f  LUES(NULL, ?1, ?
eaa0: 32 29 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 30  2)");.  for(jj=0
eab0: 3b 20 6a 6a 3c 4e 52 4f 57 32 3b 20 6a 6a 2b 2b  ; jj<NROW2; jj++
eac0: 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  ){.    speedtest
ead0: 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6a 6a 2c  1_numbername(jj,
eae0: 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e   zNum, sizeof(zN
eaf0: 75 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  um));.    sqlite
eb00: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
eb10: 6d 74 2c 20 31 2c 20 6a 6a 29 3b 0a 20 20 20 20  mt, 1, jj);.    
eb20: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
eb30: 74 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 7a 4e  t(g.pStmt, 2, zN
eb40: 75 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53  um, -1, SQLITE_S
eb50: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65  TATIC);.    spee
eb60: 64 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20  dtest1_run();.  
eb70: 7d 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  }.  speedtest1_e
eb80: 6e 64 5f 74 65 73 74 28 29 3b 0a 0a 20 20 2f 2a  nd_test();..  /*
eb90: 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20 4f 66 20 74  .  ** Note: Of t
eba0: 68 65 20 71 75 65 72 69 65 73 2c 20 6f 6e 6c 79  he queries, only
ebb0: 20 68 61 6c 66 20 61 63 74 75 61 6c 6c 79 20 75   half actually u
ebc0: 70 64 61 74 65 20 61 20 72 6f 77 2e 20 54 68 69  pdate a row. Thi
ebd0: 73 20 70 72 6f 70 65 72 74 79 0a 20 20 2a 2a 20  s property.  ** 
ebe0: 77 61 73 20 63 6f 70 69 65 64 20 6f 76 65 72 20  was copied over 
ebf0: 66 72 6f 6d 20 73 70 65 65 64 34 70 2e 74 65 73  from speed4p.tes
ec00: 74 2c 20 77 68 65 72 65 20 69 74 20 77 61 73 20  t, where it was 
ec10: 70 72 6f 62 61 62 6c 79 20 69 6e 74 72 6f 64 75  probably introdu
ec20: 63 65 64 0a 20 20 2a 2a 20 69 6e 61 64 76 65 72  ced.  ** inadver
ec30: 74 61 6e 74 6c 79 2e 0a 20 20 2a 2f 0a 20 20 73  tantly..  */.  s
ec40: 70 65 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f  peedtest1_begin_
ec50: 74 65 73 74 28 31 39 30 2c 20 22 73 70 65 65 64  test(190, "speed
ec60: 34 70 2d 74 72 69 67 67 65 72 32 22 29 3b 0a 20  4p-trigger2");. 
ec70: 20 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70   speedtest1_prep
ec80: 61 72 65 28 22 55 50 44 41 54 45 20 74 34 20 53  are("UPDATE t4 S
ec90: 45 54 20 69 20 3d 20 3f 31 2c 20 74 20 3d 20 3f  ET i = ?1, t = ?
eca0: 32 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20  2 WHERE rowid = 
ecb0: 3f 33 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31  ?3");.  for(jj=1
ecc0: 3b 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b 20 6a  ; jj<=NROW2*2; j
ecd0: 6a 2b 3d 32 29 7b 0a 20 20 20 20 73 70 65 65 64  j+=2){.    speed
ece0: 74 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65  test1_numbername
ecf0: 28 6a 6a 2a 32 2c 20 7a 4e 75 6d 2c 20 73 69 7a  (jj*2, zNum, siz
ed00: 65 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20  eof(zNum));.    
ed10: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
ed20: 28 67 2e 70 53 74 6d 74 2c 20 31 2c 20 6a 6a 2a  (g.pStmt, 1, jj*
ed30: 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2);.    sqlite3_
ed40: 62 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d  bind_text(g.pStm
ed50: 74 2c 20 32 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20  t, 2, zNum, -1, 
ed60: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
ed70: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
ed80: 5f 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 33 2c  _int(g.pStmt, 3,
ed90: 20 6a 6a 29 3b 0a 20 20 20 20 73 70 65 65 64 74   jj);.    speedt
eda0: 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a  est1_run();.  }.
edb0: 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64    speedtest1_end
edc0: 5f 74 65 73 74 28 29 3b 0a 0a 20 20 2f 2a 0a 20  _test();..  /*. 
edd0: 20 2a 2a 20 4e 6f 74 65 3a 20 53 61 6d 65 20 61   ** Note: Same a
ede0: 67 61 69 6e 2e 0a 20 20 2a 2f 0a 20 20 73 70 65  gain..  */.  spe
edf0: 65 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65  edtest1_begin_te
ee00: 73 74 28 32 30 30 2c 20 22 73 70 65 65 64 34 70  st(200, "speed4p
ee10: 2d 74 72 69 67 67 65 72 33 22 29 3b 0a 20 20 73  -trigger3");.  s
ee20: 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72  peedtest1_prepar
ee30: 65 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  e("DELETE FROM t
ee40: 34 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20  4 WHERE rowid = 
ee50: 3f 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31  ?1");.  for(jj=1
ee60: 3b 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b 20 6a  ; jj<=NROW2*2; j
ee70: 6a 2b 3d 32 29 7b 0a 20 20 20 20 73 71 6c 69 74  j+=2){.    sqlit
ee80: 65 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53  e3_bind_int(g.pS
ee90: 74 6d 74 2c 20 31 2c 20 6a 6a 2a 32 29 3b 0a 20  tmt, 1, jj*2);. 
eea0: 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75     speedtest1_ru
eeb0: 6e 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64  n();.  }.  speed
eec0: 74 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29  test1_end_test()
eed0: 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65  ;.  speedtest1_e
eee0: 78 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 0a  xec("COMMIT");..
eef0: 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 65 20 66 6f    /*.  ** The fo
ef00: 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 63 6f  llowing block co
ef10: 6e 74 61 69 6e 73 20 74 68 65 20 73 61 6d 65 20  ntains the same 
ef20: 74 65 73 74 73 20 61 73 20 74 68 65 20 61 62 6f  tests as the abo
ef30: 76 65 20 62 6c 6f 63 6b 20 74 68 61 74 0a 20 20  ve block that.  
ef40: 2a 2a 20 74 65 73 74 73 20 74 72 69 67 67 65 72  ** tests trigger
ef50: 73 2c 20 77 69 74 68 20 6f 6e 65 20 63 72 75 63  s, with one cruc
ef60: 69 61 6c 20 64 69 66 66 65 72 65 6e 63 65 3a 20  ial difference: 
ef70: 6e 6f 20 74 72 69 67 67 65 72 73 20 61 72 65 20  no triggers are 
ef80: 64 65 66 69 6e 65 64 2e 0a 20 20 2a 2a 20 53 6f  defined..  ** So
ef90: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
efa0: 69 6e 20 73 70 65 65 64 20 62 65 74 77 65 65 6e  in speed between
efb0: 20 74 68 65 73 65 20 74 65 73 74 73 20 61 6e 64   these tests and
efc0: 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 6f   the preceding o
efd0: 6e 65 73 0a 20 20 2a 2a 20 69 73 20 74 68 65 20  nes.  ** is the 
efe0: 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74  amount of time t
eff0: 61 6b 65 6e 20 74 6f 20 63 6f 6d 70 69 6c 65 20  aken to compile 
f000: 61 6e 64 20 65 78 65 63 75 74 65 20 74 68 65 20  and execute the 
f010: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
f020: 2e 0a 20 20 2a 2f 0a 20 20 73 70 65 65 64 74 65  ..  */.  speedte
f030: 73 74 31 5f 65 78 65 63 28 0a 20 20 20 20 20 20  st1_exec(.      
f040: 22 44 52 4f 50 20 54 41 42 4c 45 20 74 34 3b 22  "DROP TABLE t4;"
f050: 0a 20 20 20 20 20 20 22 44 52 4f 50 20 54 41 42  .      "DROP TAB
f060: 4c 45 20 6c 6f 67 3b 22 0a 20 20 20 20 20 20 22  LE log;".      "
f070: 56 41 43 55 55 4d 3b 22 0a 20 20 20 20 20 20 22  VACUUM;".      "
f080: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
f090: 72 6f 77 69 64 20 49 4e 54 45 47 45 52 20 50 52  rowid INTEGER PR
f0a0: 49 4d 41 52 59 20 4b 45 59 2c 20 69 20 49 4e 54  IMARY KEY, i INT
f0b0: 45 47 45 52 2c 20 74 20 54 45 58 54 29 3b 22 0a  EGER, t TEXT);".
f0c0: 20 20 20 20 20 20 22 42 45 47 49 4e 3b 22 0a 20        "BEGIN;". 
f0d0: 20 29 3b 0a 20 20 73 70 65 65 64 74 65 73 74 31   );.  speedtest1
f0e0: 5f 62 65 67 69 6e 5f 74 65 73 74 28 32 31 30 2c  _begin_test(210,
f0f0: 20 22 73 70 65 65 64 34 70 2d 6e 6f 74 72 69 67   "speed4p-notrig
f100: 67 65 72 31 22 29 3b 0a 20 20 73 70 65 65 64 74  ger1");.  speedt
f110: 65 73 74 31 5f 70 72 65 70 61 72 65 28 22 49 4e  est1_prepare("IN
f120: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
f130: 55 45 53 28 4e 55 4c 4c 2c 20 3f 31 2c 20 3f 32  UES(NULL, ?1, ?2
f140: 29 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 30 3b  )");.  for(jj=0;
f150: 20 6a 6a 3c 4e 52 4f 57 32 3b 20 6a 6a 2b 2b 29   jj<NROW2; jj++)
f160: 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  {.    speedtest1
f170: 5f 6e 75 6d 62 65 72 6e 61 6d 65 28 6a 6a 2c 20  _numbername(jj, 
f180: 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66 28 7a 4e 75  zNum, sizeof(zNu
f190: 6d 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  m));.    sqlite3
f1a0: 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74 6d  _bind_int(g.pStm
f1b0: 74 2c 20 31 2c 20 6a 6a 29 3b 0a 20 20 20 20 73  t, 1, jj);.    s
f1c0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
f1d0: 28 67 2e 70 53 74 6d 74 2c 20 32 2c 20 7a 4e 75  (g.pStmt, 2, zNu
f1e0: 6d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  m, -1, SQLITE_ST
f1f0: 41 54 49 43 29 3b 0a 20 20 20 20 73 70 65 65 64  ATIC);.    speed
f200: 74 65 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d  test1_run();.  }
f210: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e  .  speedtest1_en
f220: 64 5f 74 65 73 74 28 29 3b 0a 20 20 73 70 65 65  d_test();.  spee
f230: 64 74 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73  dtest1_begin_tes
f240: 74 28 32 31 30 2c 20 22 73 70 65 65 64 34 70 2d  t(210, "speed4p-
f250: 6e 6f 74 72 69 67 67 65 72 32 22 29 3b 0a 20 20  notrigger2");.  
f260: 73 70 65 65 64 74 65 73 74 31 5f 70 72 65 70 61  speedtest1_prepa
f270: 72 65 28 22 55 50 44 41 54 45 20 74 34 20 53 45  re("UPDATE t4 SE
f280: 54 20 69 20 3d 20 3f 31 2c 20 74 20 3d 20 3f 32  T i = ?1, t = ?2
f290: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 3f   WHERE rowid = ?
f2a0: 33 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31 3b  3");.  for(jj=1;
f2b0: 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b 20 6a 6a   jj<=NROW2*2; jj
f2c0: 2b 3d 32 29 7b 0a 20 20 20 20 73 70 65 65 64 74  +=2){.    speedt
f2d0: 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28  est1_numbername(
f2e0: 6a 6a 2a 32 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65  jj*2, zNum, size
f2f0: 6f 66 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 73  of(zNum));.    s
f300: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
f310: 67 2e 70 53 74 6d 74 2c 20 31 2c 20 6a 6a 2a 32  g.pStmt, 1, jj*2
f320: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  );.    sqlite3_b
f330: 69 6e 64 5f 74 65 78 74 28 67 2e 70 53 74 6d 74  ind_text(g.pStmt
f340: 2c 20 32 2c 20 7a 4e 75 6d 2c 20 2d 31 2c 20 53  , 2, zNum, -1, S
f350: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
f360: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
f370: 69 6e 74 28 67 2e 70 53 74 6d 74 2c 20 33 2c 20  int(g.pStmt, 3, 
f380: 6a 6a 29 3b 0a 20 20 20 20 73 70 65 65 64 74 65  jj);.    speedte
f390: 73 74 31 5f 72 75 6e 28 29 3b 0a 20 20 7d 0a 20  st1_run();.  }. 
f3a0: 20 73 70 65 65 64 74 65 73 74 31 5f 65 6e 64 5f   speedtest1_end_
f3b0: 74 65 73 74 28 29 3b 0a 20 20 73 70 65 65 64 74  test();.  speedt
f3c0: 65 73 74 31 5f 62 65 67 69 6e 5f 74 65 73 74 28  est1_begin_test(
f3d0: 32 32 30 2c 20 22 73 70 65 65 64 34 70 2d 6e 6f  220, "speed4p-no
f3e0: 74 72 69 67 67 65 72 33 22 29 3b 0a 20 20 73 70  trigger3");.  sp
f3f0: 65 65 64 74 65 73 74 31 5f 70 72 65 70 61 72 65  eedtest1_prepare
f400: 28 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 34  ("DELETE FROM t4
f410: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 3f   WHERE rowid = ?
f420: 31 22 29 3b 0a 20 20 66 6f 72 28 6a 6a 3d 31 3b  1");.  for(jj=1;
f430: 20 6a 6a 3c 3d 4e 52 4f 57 32 2a 32 3b 20 6a 6a   jj<=NROW2*2; jj
f440: 2b 3d 32 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  +=2){.    sqlite
f450: 33 5f 62 69 6e 64 5f 69 6e 74 28 67 2e 70 53 74  3_bind_int(g.pSt
f460: 6d 74 2c 20 31 2c 20 6a 6a 2a 32 29 3b 0a 20 20  mt, 1, jj*2);.  
f470: 20 20 73 70 65 65 64 74 65 73 74 31 5f 72 75 6e    speedtest1_run
f480: 28 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  ();.  }.  speedt
f490: 65 73 74 31 5f 65 6e 64 5f 74 65 73 74 28 29 3b  est1_end_test();
f4a0: 0a 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78  .  speedtest1_ex
f4b0: 65 63 28 22 43 4f 4d 4d 49 54 22 29 3b 0a 7d 0a  ec("COMMIT");.}.
f4c0: 0a 2f 2a 0a 2a 2a 20 41 20 74 65 73 74 73 65 74  ./*.** A testset
f4d0: 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   used for debugg
f4e0: 69 6e 67 20 73 70 65 65 64 74 65 73 74 31 20 69  ing speedtest1 i
f4f0: 74 73 65 6c 66 2e 0a 2a 2f 0a 76 6f 69 64 20 74  tself..*/.void t
f500: 65 73 74 73 65 74 5f 64 65 62 75 67 31 28 76 6f  estset_debug1(vo
f510: 69 64 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20  id){.  unsigned 
f520: 69 2c 20 6e 3b 0a 20 20 75 6e 73 69 67 6e 65 64  i, n;.  unsigned
f530: 20 78 31 2c 20 78 32 3b 0a 20 20 63 68 61 72 20   x1, x2;.  char 
f540: 7a 4e 75 6d 5b 32 30 30 30 5d 3b 20 20 20 20 20  zNum[2000];     
f550: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 6e 75           /* A nu
f560: 6d 62 65 72 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20  mber name */..  
f570: 6e 20 3d 20 67 2e 73 7a 54 65 73 74 3b 0a 20 20  n = g.szTest;.  
f580: 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 3b 20 69  for(i=1; i<=n; i
f590: 2b 2b 29 7b 0a 20 20 20 20 78 31 20 3d 20 73 77  ++){.    x1 = sw
f5a0: 69 7a 7a 6c 65 28 69 2c 20 6e 29 3b 0a 20 20 20  izzle(i, n);.   
f5b0: 20 78 32 20 3d 20 73 77 69 7a 7a 6c 65 28 78 31   x2 = swizzle(x1
f5c0: 2c 20 6e 29 3b 0a 20 20 20 20 73 70 65 65 64 74  , n);.    speedt
f5d0: 65 73 74 31 5f 6e 75 6d 62 65 72 6e 61 6d 65 28  est1_numbername(
f5e0: 78 31 2c 20 7a 4e 75 6d 2c 20 73 69 7a 65 6f 66  x1, zNum, sizeof
f5f0: 28 7a 4e 75 6d 29 29 3b 0a 20 20 20 20 70 72 69  (zNum));.    pri
f600: 6e 74 66 28 22 25 35 64 20 25 35 64 20 25 35 64  ntf("%5d %5d %5d
f610: 20 25 73 5c 6e 22 2c 20 69 2c 20 78 31 2c 20 78   %s\n", i, x1, x
f620: 32 2c 20 7a 4e 75 6d 29 3b 0a 20 20 7d 0a 7d 0a  2, zNum);.  }.}.
f630: 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78 5f  .#ifdef __linux_
f640: 5f 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f  _.#include <sys/
f650: 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64  types.h>.#includ
f660: 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 0a 2f 2a  e <unistd.h>../*
f670: 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64  .** Attempt to d
f680: 69 73 70 6c 61 79 20 49 2f 4f 20 73 74 61 74 73  isplay I/O stats
f690: 20 6f 6e 20 4c 69 6e 75 78 20 75 73 69 6e 67 20   on Linux using 
f6a0: 2f 70 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a 2f 0a  /proc/PID/io.*/.
f6b0: 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73 70  static void disp
f6c0: 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28  layLinuxIoStats(
f6d0: 46 49 4c 45 20 2a 6f 75 74 29 7b 0a 20 20 46 49  FILE *out){.  FI
f6e0: 4c 45 20 2a 69 6e 3b 0a 20 20 63 68 61 72 20 7a  LE *in;.  char z
f6f0: 5b 32 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33  [200];.  sqlite3
f700: 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
f710: 28 7a 29 2c 20 7a 2c 20 22 2f 70 72 6f 63 2f 25  (z), z, "/proc/%
f720: 64 2f 69 6f 22 2c 20 67 65 74 70 69 64 28 29 29  d/io", getpid())
f730: 3b 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a  ;.  in = fopen(z
f740: 2c 20 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69  , "rb");.  if( i
f750: 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  n==0 ) return;. 
f760: 20 77 68 69 6c 65 28 20 66 67 65 74 73 28 7a 2c   while( fgets(z,
f770: 20 73 69 7a 65 6f 66 28 7a 29 2c 20 69 6e 29 21   sizeof(z), in)!
f780: 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  =0 ){.    static
f790: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a   const struct {.
f7a0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
f7b0: 20 2a 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20   *zPattern;.    
f7c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
f7d0: 65 73 63 3b 0a 20 20 20 20 7d 20 61 54 72 61 6e  esc;.    } aTran
f7e0: 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  s[] = {.      { 
f7f0: 22 72 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20  "rchar: ",      
f800: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79 74              "Byt
f810: 65 73 20 72 65 63 65 69 76 65 64 20 62 79 20 72  es received by r
f820: 65 61 64 28 29 3a 22 20 7d 2c 0a 20 20 20 20 20  ead():" },.     
f830: 20 7b 20 22 77 63 68 61 72 3a 20 22 2c 20 20 20   { "wchar: ",   
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f850: 42 79 74 65 73 20 73 65 6e 74 20 74 6f 20 77 72  Bytes sent to wr
f860: 69 74 65 28 29 3a 22 20 20 20 20 7d 2c 0a 20 20  ite():"    },.  
f870: 20 20 20 20 7b 20 22 73 79 73 63 72 3a 20 22 2c      { "syscr: ",
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f890: 20 20 22 52 65 61 64 28 29 20 73 79 73 74 65 6d    "Read() system
f8a0: 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 20 7d 2c   calls:"      },
f8b0: 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63 77 3a  .      { "syscw:
f8c0: 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   ",             
f8d0: 20 20 20 20 20 22 57 72 69 74 65 28 29 20 73 79       "Write() sy
f8e0: 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20  stem calls:"    
f8f0: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 61   },.      { "rea
f900: 64 5f 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20  d_bytes: ",     
f910: 20 20 20 20 20 20 20 20 22 42 79 74 65 73 20 72          "Bytes r
f920: 63 76 64 20 66 72 6f 6d 20 73 74 6f 72 61 67 65  cvd from storage
f930: 3a 22 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22  :"  },.      { "
f940: 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20  write_bytes: ", 
f950: 20 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65             "Byte
f960: 73 20 73 65 6e 74 20 74 6f 20 73 74 6f 72 61 67  s sent to storag
f970: 65 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  e:"    },.      
f980: 7b 20 22 63 61 6e 63 65 6c 6c 65 64 5f 77 72 69  { "cancelled_wri
f990: 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20 22 43  te_bytes: ",  "C
f9a0: 61 6e 63 65 6c 6c 65 64 20 77 72 69 74 65 20 62  ancelled write b
f9b0: 79 74 65 73 3a 22 20 20 20 20 7d 2c 0a 20 20 20  ytes:"    },.   
f9c0: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   };.    int i;. 
f9d0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69     for(i=0; i<si
f9e0: 7a 65 6f 66 28 61 54 72 61 6e 73 29 2f 73 69 7a  zeof(aTrans)/siz
f9f0: 65 6f 66 28 61 54 72 61 6e 73 5b 30 5d 29 3b 20  eof(aTrans[0]); 
fa00: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  i++){.      int 
fa10: 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  n = (int)strlen(
fa20: 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65  aTrans[i].zPatte
fa30: 72 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  rn);.      if( s
fa40: 74 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b 69 5d  trncmp(aTrans[i]
fa50: 2e 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20 6e 29  .zPattern, z, n)
fa60: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ==0 ){.        f
fa70: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d 20  printf(out, "-- 
fa80: 25 2d 32 38 73 20 25 73 22 2c 20 61 54 72 61 6e  %-28s %s", aTran
fa90: 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e  s[i].zDesc, &z[n
faa0: 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ]);.        brea
fab0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
fac0: 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e  .  }.  fclose(in
fad0: 29 3b 0a 7d 20 20 20 0a 23 65 6e 64 69 66 0a 0a  );.}   .#endif..
fae0: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
faf0: 4f 4e 5f 4e 55 4d 42 45 52 3c 33 30 30 36 30 31  ON_NUMBER<300601
fb00: 38 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  8.#  define sqli
fb10: 74 65 33 5f 73 6f 75 72 63 65 69 64 28 58 29 20  te3_sourceid(X) 
fb20: 22 28 62 65 66 6f 72 65 20 33 2e 36 2e 31 38 29  "(before 3.6.18)
fb30: 22 0a 23 65 6e 64 69 66 0a 0a 73 74 61 74 69 63  ".#endif..static
fb40: 20 69 6e 74 20 78 43 6f 6d 70 69 6c 65 4f 70 74   int xCompileOpt
fb50: 69 6f 6e 73 28 76 6f 69 64 20 2a 70 43 74 78 2c  ions(void *pCtx,
fb60: 20 69 6e 74 20 6e 56 61 6c 2c 20 63 68 61 72 20   int nVal, char 
fb70: 2a 2a 61 7a 56 61 6c 2c 20 63 68 61 72 20 2a 2a  **azVal, char **
fb80: 61 7a 43 6f 6c 29 7b 0a 20 20 70 72 69 6e 74 66  azCol){.  printf
fb90: 28 22 2d 2d 20 43 6f 6d 70 69 6c 65 20 6f 70 74  ("-- Compile opt
fba0: 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a 56 61  ion: %s\n", azVa
fbb0: 6c 5b 30 5d 29 3b 0a 20 20 72 65 74 75 72 6e 20  l[0]);.  return 
fbc0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 69 6e  SQLITE_OK;.}..in
fbd0: 74 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c  t main(int argc,
fbe0: 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 20   char **argv){. 
fbf0: 20 69 6e 74 20 64 6f 41 75 74 6f 76 61 63 20 3d   int doAutovac =
fc00: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   0;            /
fc10: 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 61 75 74  * True for --aut
fc20: 6f 76 61 63 75 75 6d 20 2a 2f 0a 20 20 69 6e 74  ovacuum */.  int
fc30: 20 63 61 63 68 65 53 69 7a 65 20 3d 20 30 3b 20   cacheSize = 0; 
fc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
fc50: 73 69 72 65 64 20 63 61 63 68 65 20 73 69 7a 65  sired cache size
fc60: 2e 20 20 30 20 6d 65 61 6e 73 20 64 65 66 61 75  .  0 means defau
fc70: 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 64 6f 45 78  lt */.  int doEx
fc80: 63 6c 75 73 69 76 65 20 3d 20 30 3b 20 20 20 20  clusive = 0;    
fc90: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
fca0: 72 20 2d 2d 65 78 63 6c 75 73 69 76 65 20 2a 2f  r --exclusive */
fcb0: 0a 20 20 69 6e 74 20 6e 48 65 61 70 20 3d 20 30  .  int nHeap = 0
fcc0: 2c 20 6d 6e 48 65 61 70 20 3d 20 30 3b 20 20 20  , mnHeap = 0;   
fcd0: 20 2f 2a 20 48 65 61 70 20 73 69 7a 65 20 66 72   /* Heap size fr
fce0: 6f 6d 20 2d 2d 68 65 61 70 20 2a 2f 0a 20 20 69  om --heap */.  i
fcf0: 6e 74 20 64 6f 49 6e 63 72 76 61 63 20 3d 20 30  nt doIncrvac = 0
fd00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fd10: 54 72 75 65 20 66 6f 72 20 2d 2d 69 6e 63 72 76  True for --incrv
fd20: 61 63 75 75 6d 20 2a 2f 0a 20 20 63 6f 6e 73 74  acuum */.  const
fd30: 20 63 68 61 72 20 2a 7a 4a 4d 6f 64 65 20 3d 20   char *zJMode = 
fd40: 30 3b 20 20 20 20 20 20 20 2f 2a 20 4a 6f 75 72  0;       /* Jour
fd50: 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 6f  nal mode */.  co
fd60: 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 20 3d  nst char *zKey =
fd70: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45   0;         /* E
fd80: 6e 63 72 79 70 74 69 6f 6e 20 6b 65 79 20 2a 2f  ncryption key */
fd90: 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 20 3d 20 2d  .  int nLook = -
fda0: 31 2c 20 73 7a 4c 6f 6f 6b 20 3d 20 30 3b 20 20  1, szLook = 0;  
fdb0: 20 2f 2a 20 2d 2d 6c 6f 6f 6b 61 73 69 64 65 20   /* --lookaside 
fdc0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
fdd0: 0a 20 20 69 6e 74 20 6e 6f 53 79 6e 63 20 3d 20  .  int noSync = 
fde0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
fdf0: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 6e   /* True for --n
fe00: 6f 73 79 6e 63 20 2a 2f 0a 20 20 69 6e 74 20 70  osync */.  int p
fe10: 61 67 65 53 69 7a 65 20 3d 20 30 3b 20 20 20 20  ageSize = 0;    
fe20: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 73 69           /* Desi
fe30: 72 65 64 20 70 61 67 65 20 73 69 7a 65 2e 20 20  red page size.  
fe40: 30 20 6d 65 61 6e 73 20 64 65 66 61 75 6c 74 20  0 means default 
fe50: 2a 2f 0a 20 20 69 6e 74 20 6e 50 43 61 63 68 65  */.  int nPCache
fe60: 20 3d 20 30 2c 20 73 7a 50 43 61 63 68 65 20 3d   = 0, szPCache =
fe70: 20 30 3b 2f 2a 20 2d 2d 70 63 61 63 68 65 20 63   0;/* --pcache c
fe80: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
fe90: 20 20 69 6e 74 20 64 6f 50 43 61 63 68 65 20 3d    int doPCache =
fea0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
feb0: 2f 2a 20 54 72 75 65 20 69 66 20 2d 2d 70 63 61  /* True if --pca
fec0: 63 68 65 20 69 73 20 73 65 65 6e 20 2a 2f 0a 20  che is seen */. 
fed0: 20 69 6e 74 20 73 68 6f 77 53 74 61 74 73 20 3d   int showStats =
fee0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   0;            /
fef0: 2a 20 54 72 75 65 20 66 6f 72 20 2d 2d 73 74 61  * True for --sta
ff00: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 68 72  ts */.  int nThr
ff10: 65 61 64 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ead = 0;        
ff20: 20 20 20 20 20 20 2f 2a 20 2d 2d 74 68 72 65 61        /* --threa
ff30: 64 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 6e  ds value */.  in
ff40: 74 20 6d 6d 61 70 53 69 7a 65 20 3d 20 30 3b 20  t mmapSize = 0; 
ff50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
ff60: 6f 77 20 62 69 67 20 6f 66 20 61 20 6d 65 6d 6f  ow big of a memo
ff70: 72 79 20 6d 61 70 20 74 6f 20 75 73 65 20 2a 2f  ry map to use */
ff80: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
ff90: 54 53 65 74 20 3d 20 22 6d 61 69 6e 22 3b 20 20  TSet = "main";  
ffa0: 20 2f 2a 20 57 68 69 63 68 20 2d 2d 74 65 73 74   /* Which --test
ffb0: 73 65 74 20 74 6f 72 75 6e 20 2a 2f 0a 20 20 69  set torun */.  i
ffc0: 6e 74 20 64 6f 54 72 61 63 65 20 3d 20 30 3b 20  nt doTrace = 0; 
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ffe0: 54 72 75 65 20 66 6f 72 20 2d 2d 74 72 61 63 65  True for --trace
fff0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
10000 20 2a 7a 45 6e 63 6f 64 69 6e 67 20 3d 20 30 3b   *zEncoding = 0;
10010 20 20 20 20 2f 2a 20 2d 2d 75 74 66 31 36 62 65      /* --utf16be
10020 20 6f 72 20 2d 2d 75 74 66 31 36 6c 65 20 2a 2f   or --utf16le */
10030 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
10040 44 62 4e 61 6d 65 20 3d 20 30 3b 20 20 20 20 20  DbName = 0;     
10050 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
10060 74 65 73 74 20 64 61 74 61 62 61 73 65 20 2a 2f  test database */
10070 0a 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 20  ..  void *pHeap 
10080 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
10090 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 68    /* Allocated h
100a0 65 61 70 20 73 70 61 63 65 20 2a 2f 0a 20 20 76  eap space */.  v
100b0 6f 69 64 20 2a 70 4c 6f 6f 6b 20 3d 20 30 3b 20  oid *pLook = 0; 
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
100d0 41 6c 6c 6f 63 61 74 65 64 20 6c 6f 6f 6b 61 73  Allocated lookas
100e0 69 64 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 76  ide space */.  v
100f0 6f 69 64 20 2a 70 50 43 61 63 68 65 20 3d 20 30  oid *pPCache = 0
10100 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10110 41 6c 6c 6f 63 61 74 65 64 20 73 74 6f 72 61 67  Allocated storag
10120 65 20 66 6f 72 20 70 63 61 63 68 65 20 2a 2f 0a  e for pcache */.
10130 20 20 69 6e 74 20 69 43 75 72 2c 20 69 48 69 3b    int iCur, iHi;
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 2f 2a 20 53 74 61 74 73 20 76 61 6c 75 65 73 2c  /* Stats values,
10160 20 63 75 72 72 65 6e 74 20 61 6e 64 20 22 68 69   current and "hi
10170 67 68 77 61 74 65 72 22 20 2a 2f 0a 20 20 69 6e  ghwater" */.  in
10180 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
10190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
101a0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
101b0 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
101d0 2a 20 41 50 49 20 72 65 74 75 72 6e 20 63 6f 64  * API return cod
101e0 65 20 2a 2f 0a 0a 20 20 2f 2a 20 44 69 73 70 6c  e */..  /* Displ
101f0 61 79 20 74 68 65 20 76 65 72 73 69 6f 6e 20 6f  ay the version o
10200 66 20 53 51 4c 69 74 65 20 62 65 69 6e 67 20 74  f SQLite being t
10210 65 73 74 65 64 20 2a 2f 0a 20 20 70 72 69 6e 74  ested */.  print
10220 66 28 22 2d 2d 20 53 70 65 65 64 74 65 73 74 31  f("-- Speedtest1
10230 20 66 6f 72 20 53 51 4c 69 74 65 20 25 73 20 25   for SQLite %s %
10240 2e 35 30 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20  .50s\n",.       
10250 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72    sqlite3_libver
10260 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f  sion(), sqlite3_
10270 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 0a 20 20  sourceid());..  
10280 2f 2a 20 50 72 6f 63 65 73 73 20 63 6f 6d 6d 61  /* Process comma
10290 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
102a0 73 20 2a 2f 0a 20 20 67 2e 7a 57 52 20 3d 20 22  s */.  g.zWR = "
102b0 22 3b 0a 20 20 67 2e 7a 4e 4e 20 3d 20 22 22 3b  ";.  g.zNN = "";
102c0 0a 20 20 67 2e 7a 50 4b 20 3d 20 22 55 4e 49 51  .  g.zPK = "UNIQ
102d0 55 45 22 3b 0a 20 20 67 2e 73 7a 54 65 73 74 20  UE";.  g.szTest 
102e0 3d 20 31 30 30 3b 0a 20 20 67 2e 6e 52 65 70 65  = 100;.  g.nRepe
102f0 61 74 20 3d 20 31 3b 0a 20 20 66 6f 72 28 69 3d  at = 1;.  for(i=
10300 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b  1; i<argc; i++){
10310 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
10320 2a 7a 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20  *z = argv[i];.  
10330 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20    if( z[0]=='-' 
10340 29 7b 0a 20 20 20 20 20 20 64 6f 7b 20 7a 2b 2b  ){.      do{ z++
10350 3b 20 7d 77 68 69 6c 65 28 20 7a 5b 30 5d 3d 3d  ; }while( z[0]==
10360 27 2d 27 20 29 3b 0a 20 20 20 20 20 20 69 66 28  '-' );.      if(
10370 20 73 74 72 63 6d 70 28 7a 2c 22 61 75 74 6f 76   strcmp(z,"autov
10380 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b 0a 20 20  acuum")==0 ){.  
10390 20 20 20 20 20 20 64 6f 41 75 74 6f 76 61 63 20        doAutovac 
103a0 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
103b0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 63   if( strcmp(z,"c
103c0 61 63 68 65 73 69 7a 65 22 29 3d 3d 30 20 29 7b  achesize")==0 ){
103d0 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d  .        if( i>=
103e0 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c 5f 65  argc-1 ) fatal_e
103f0 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72  rror("missing ar
10400 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e 22 2c  gument on %s\n",
10410 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
10420 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20     i++;.        
10430 63 61 63 68 65 53 69 7a 65 20 3d 20 69 6e 74 65  cacheSize = inte
10440 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b 69 5d  gerValue(argv[i]
10450 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
10460 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 65 78 63  f( strcmp(z,"exc
10470 6c 75 73 69 76 65 22 29 3d 3d 30 20 29 7b 0a 20  lusive")==0 ){. 
10480 20 20 20 20 20 20 20 64 6f 45 78 63 6c 75 73 69         doExclusi
10490 76 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  ve = 1;.      }e
104a0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
104b0 2c 22 65 78 70 6c 61 69 6e 22 29 3d 3d 30 20 29  ,"explain")==0 )
104c0 7b 0a 20 20 20 20 20 20 20 20 67 2e 62 53 71 6c  {.        g.bSql
104d0 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  Only = 1;.      
104e0 20 20 67 2e 62 45 78 70 6c 61 69 6e 20 3d 20 31    g.bExplain = 1
104f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
10500 28 20 73 74 72 63 6d 70 28 7a 2c 22 68 65 61 70  ( strcmp(z,"heap
10510 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
10520 20 69 66 28 20 69 3e 3d 61 72 67 63 2d 32 20 29   if( i>=argc-2 )
10530 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69   fatal_error("mi
10540 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  ssing arguments 
10550 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69  on %s\n", argv[i
10560 5d 29 3b 0a 20 20 20 20 20 20 20 20 6e 48 65 61  ]);.        nHea
10570 70 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65  p = integerValue
10580 28 61 72 67 76 5b 69 2b 31 5d 29 3b 0a 20 20 20  (argv[i+1]);.   
10590 20 20 20 20 20 6d 6e 48 65 61 70 20 3d 20 69 6e       mnHeap = in
105a0 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b  tegerValue(argv[
105b0 69 2b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  i+2]);.        i
105c0 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c   += 2;.      }el
105d0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
105e0 22 69 6e 63 72 76 61 63 75 75 6d 22 29 3d 3d 30  "incrvacuum")==0
105f0 20 29 7b 0a 20 20 20 20 20 20 20 20 64 6f 49 6e   ){.        doIn
10600 63 72 76 61 63 20 3d 20 31 3b 0a 20 20 20 20 20  crvac = 1;.     
10610 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
10620 70 28 7a 2c 22 6a 6f 75 72 6e 61 6c 22 29 3d 3d  p(z,"journal")==
10630 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
10640 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74   i>=argc-1 ) fat
10650 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e  al_error("missin
10660 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73  g argument on %s
10670 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
10680 20 20 20 20 20 20 20 7a 4a 4d 6f 64 65 20 3d 20         zJMode = 
10690 61 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20  argv[++i];.     
106a0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
106b0 70 28 7a 2c 22 6b 65 79 22 29 3d 3d 30 20 29 7b  p(z,"key")==0 ){
106c0 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d  .        if( i>=
106d0 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c 5f 65  argc-1 ) fatal_e
106e0 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72  rror("missing ar
106f0 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e 22 2c  gument on %s\n",
10700 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
10710 20 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 2b     zKey = argv[+
10720 2b 69 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  +i];.      }else
10730 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6c   if( strcmp(z,"l
10740 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20 29 7b  ookaside")==0 ){
10750 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d  .        if( i>=
10760 61 72 67 63 2d 32 20 29 20 66 61 74 61 6c 5f 65  argc-2 ) fatal_e
10770 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72  rror("missing ar
10780 67 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c 6e 22  guments on %s\n"
10790 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20  , argv[i]);.    
107a0 20 20 20 20 6e 4c 6f 6f 6b 20 3d 20 69 6e 74 65      nLook = inte
107b0 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b 69 2b  gerValue(argv[i+
107c0 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 7a 4c  1]);.        szL
107d0 6f 6f 6b 20 3d 20 69 6e 74 65 67 65 72 56 61 6c  ook = integerVal
107e0 75 65 28 61 72 67 76 5b 69 2b 32 5d 29 3b 0a 20  ue(argv[i+2]);. 
107f0 20 20 20 20 20 20 20 69 20 2b 3d 20 32 3b 0a 23         i += 2;.#
10800 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
10810 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30  N_NUMBER>=300600
10820 30 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  0.      }else if
10830 28 20 73 74 72 63 6d 70 28 7a 2c 22 6d 75 6c 74  ( strcmp(z,"mult
10840 69 74 68 72 65 61 64 22 29 3d 3d 30 20 29 7b 0a  ithread")==0 ){.
10850 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
10860 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
10870 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44  NFIG_MULTITHREAD
10880 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
10890 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e 6f 6d  f( strcmp(z,"nom
108a0 65 6d 73 74 61 74 22 29 3d 3d 30 20 29 7b 0a 20  emstat")==0 ){. 
108b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63         sqlite3_c
108c0 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
108d0 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 2c 20 30  FIG_MEMSTATUS, 0
108e0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  );.#endif.#if SQ
108f0 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
10900 42 45 52 3e 3d 33 30 30 37 30 31 37 0a 20 20 20  BER>=3007017.   
10910 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
10920 63 6d 70 28 7a 2c 20 22 6d 6d 61 70 22 29 3d 3d  cmp(z, "mmap")==
10930 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
10940 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74   i>=argc-1 ) fat
10950 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e  al_error("missin
10960 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73  g argument on %s
10970 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
10980 20 20 20 20 20 20 20 6d 6d 61 70 53 69 7a 65 20         mmapSize 
10990 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61  = integerValue(a
109a0 72 67 76 5b 2b 2b 69 5d 29 3b 0a 20 23 65 6e 64  rgv[++i]);. #end
109b0 69 66 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  if.      }else i
109c0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e 6f 73  f( strcmp(z,"nos
109d0 79 6e 63 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ync")==0 ){.    
109e0 20 20 20 20 6e 6f 53 79 6e 63 20 3d 20 31 3b 0a      noSync = 1;.
109f0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
10a00 73 74 72 63 6d 70 28 7a 2c 22 6e 6f 74 6e 75 6c  strcmp(z,"notnul
10a10 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  l")==0 ){.      
10a20 20 20 67 2e 7a 4e 4e 20 3d 20 22 4e 4f 54 20 4e    g.zNN = "NOT N
10a30 55 4c 4c 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ULL";.      }els
10a40 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
10a50 70 61 67 65 73 69 7a 65 22 29 3d 3d 30 20 29 7b  pagesize")==0 ){
10a60 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d  .        if( i>=
10a70 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c 5f 65  argc-1 ) fatal_e
10a80 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72  rror("missing ar
10a90 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e 22 2c  gument on %s\n",
10aa0 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
10ab0 20 20 20 70 61 67 65 53 69 7a 65 20 3d 20 69 6e     pageSize = in
10ac0 74 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b  tegerValue(argv[
10ad0 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ++i]);.      }el
10ae0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
10af0 22 70 63 61 63 68 65 22 29 3d 3d 30 20 29 7b 0a  "pcache")==0 ){.
10b00 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d 61          if( i>=a
10b10 72 67 63 2d 32 20 29 20 66 61 74 61 6c 5f 65 72  rgc-2 ) fatal_er
10b20 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72 67  ror("missing arg
10b30 75 6d 65 6e 74 73 20 6f 6e 20 25 73 5c 6e 22 2c  uments on %s\n",
10b40 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
10b50 20 20 20 6e 50 43 61 63 68 65 20 3d 20 69 6e 74     nPCache = int
10b60 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b 69  egerValue(argv[i
10b70 2b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 7a  +1]);.        sz
10b80 50 43 61 63 68 65 20 3d 20 69 6e 74 65 67 65 72  PCache = integer
10b90 56 61 6c 75 65 28 61 72 67 76 5b 69 2b 32 5d 29  Value(argv[i+2])
10ba0 3b 0a 20 20 20 20 20 20 20 20 64 6f 50 43 61 63  ;.        doPCac
10bb0 68 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  he = 1;.        
10bc0 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 7d 65  i += 2;.      }e
10bd0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
10be0 2c 22 70 72 69 6d 61 72 79 6b 65 79 22 29 3d 3d  ,"primarykey")==
10bf0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 67 2e 7a  0 ){.        g.z
10c00 50 4b 20 3d 20 22 50 52 49 4d 41 52 59 20 4b 45  PK = "PRIMARY KE
10c10 59 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  Y";.      }else 
10c20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 72 65  if( strcmp(z,"re
10c30 70 65 61 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  peat")==0 ){.   
10c40 20 20 20 20 20 69 66 28 20 69 3e 3d 61 72 67 63       if( i>=argc
10c50 2d 31 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72  -1 ) fatal_error
10c60 28 22 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65  ("missing argume
10c70 6e 74 73 20 6f 6e 20 25 73 5c 6e 22 2c 20 61 72  nts on %s\n", ar
10c80 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  gv[i]);.        
10c90 67 2e 6e 52 65 70 65 61 74 20 3d 20 69 6e 74 65  g.nRepeat = inte
10ca0 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b 69 2b  gerValue(argv[i+
10cb0 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 20 2b  1]);.        i +
10cc0 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
10cd0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 72   if( strcmp(z,"r
10ce0 65 70 72 65 70 61 72 65 22 29 3d 3d 30 20 29 7b  eprepare")==0 ){
10cf0 0a 20 20 20 20 20 20 20 20 67 2e 62 52 65 70 72  .        g.bRepr
10d00 65 70 61 72 65 20 3d 20 31 3b 0a 23 69 66 20 53  epare = 1;.#if S
10d10 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
10d20 4d 42 45 52 3e 3d 33 30 30 36 30 30 30 0a 20 20  MBER>=3006000.  
10d30 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
10d40 72 63 6d 70 28 7a 2c 22 73 65 72 69 61 6c 69 7a  rcmp(z,"serializ
10d50 65 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ed")==0 ){.     
10d60 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
10d70 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
10d80 53 45 52 49 41 4c 49 5a 45 44 29 3b 0a 20 20 20  SERIALIZED);.   
10d90 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
10da0 63 6d 70 28 7a 2c 22 73 69 6e 67 6c 65 74 68 72  cmp(z,"singlethr
10db0 65 61 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ead")==0 ){.    
10dc0 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66      sqlite3_conf
10dd0 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
10de0 5f 53 49 4e 47 4c 45 54 48 52 45 41 44 29 3b 0a  _SINGLETHREAD);.
10df0 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7d 65 6c  #endif.      }el
10e00 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
10e10 22 73 71 6c 6f 6e 6c 79 22 29 3d 3d 30 20 29 7b  "sqlonly")==0 ){
10e20 0a 20 20 20 20 20 20 20 20 67 2e 62 53 71 6c 4f  .        g.bSqlO
10e30 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  nly = 1;.      }
10e40 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
10e50 7a 2c 22 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79  z,"shrink-memory
10e60 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
10e70 20 67 2e 62 4d 65 6d 53 68 72 69 6e 6b 20 3d 20   g.bMemShrink = 
10e80 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  1;.      }else i
10e90 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 73 69 7a  f( strcmp(z,"siz
10ea0 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
10eb0 20 20 69 66 28 20 69 3e 3d 61 72 67 63 2d 31 20    if( i>=argc-1 
10ec0 29 20 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6d  ) fatal_error("m
10ed0 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20  issing argument 
10ee0 6f 6e 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b 69  on %s\n", argv[i
10ef0 5d 29 3b 0a 20 20 20 20 20 20 20 20 67 2e 73 7a  ]);.        g.sz
10f00 54 65 73 74 20 3d 20 69 6e 74 65 67 65 72 56 61  Test = integerVa
10f10 6c 75 65 28 61 72 67 76 5b 2b 2b 69 5d 29 3b 0a  lue(argv[++i]);.
10f20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
10f30 73 74 72 63 6d 70 28 7a 2c 22 73 74 61 74 73 22  strcmp(z,"stats"
10f40 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
10f50 73 68 6f 77 53 74 61 74 73 20 3d 20 31 3b 0a 20  showStats = 1;. 
10f60 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
10f70 74 72 63 6d 70 28 7a 2c 22 74 65 6d 70 22 29 3d  trcmp(z,"temp")=
10f80 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
10f90 28 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61  ( i>=argc-1 ) fa
10fa0 74 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69  tal_error("missi
10fb0 6e 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25  ng argument on %
10fc0 73 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a  s\n", argv[i]);.
10fd0 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
10fe0 20 20 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d       if( argv[i]
10ff0 5b 30 5d 3c 27 30 27 20 7c 7c 20 61 72 67 76 5b  [0]<'0' || argv[
11000 69 5d 5b 30 5d 3e 27 39 27 20 7c 7c 20 61 72 67  i][0]>'9' || arg
11010 76 5b 69 5d 5b 31 5d 21 3d 30 20 29 7b 0a 20 20  v[i][1]!=0 ){.  
11020 20 20 20 20 20 20 20 20 66 61 74 61 6c 5f 65 72          fatal_er
11030 72 6f 72 28 22 61 72 67 75 6d 65 6e 74 20 74 6f  ror("argument to
11040 20 2d 2d 74 65 6d 70 20 73 68 6f 75 6c 64 20 62   --temp should b
11050 65 20 69 6e 74 65 67 65 72 20 62 65 74 77 65 65  e integer betwee
11060 6e 20 30 20 61 6e 64 20 39 22 29 3b 0a 20 20 20  n 0 and 9");.   
11070 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 67       }.        g
11080 2e 65 54 65 6d 70 20 3d 20 61 72 67 76 5b 69 5d  .eTemp = argv[i]
11090 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20 20  [0] - '0';.     
110a0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
110b0 70 28 7a 2c 22 74 65 73 74 73 65 74 22 29 3d 3d  p(z,"testset")==
110c0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
110d0 20 69 3e 3d 61 72 67 63 2d 31 20 29 20 66 61 74   i>=argc-1 ) fat
110e0 61 6c 5f 65 72 72 6f 72 28 22 6d 69 73 73 69 6e  al_error("missin
110f0 67 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 25 73  g argument on %s
11100 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
11110 20 20 20 20 20 20 20 7a 54 53 65 74 20 3d 20 61         zTSet = a
11120 72 67 76 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20  rgv[++i];.      
11130 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
11140 28 7a 2c 22 74 72 61 63 65 22 29 3d 3d 30 20 29  (z,"trace")==0 )
11150 7b 0a 20 20 20 20 20 20 20 20 64 6f 54 72 61 63  {.        doTrac
11160 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c  e = 1;.      }el
11170 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
11180 22 74 68 72 65 61 64 73 22 29 3d 3d 30 20 29 7b  "threads")==0 ){
11190 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 3d  .        if( i>=
111a0 61 72 67 63 2d 31 20 29 20 66 61 74 61 6c 5f 65  argc-1 ) fatal_e
111b0 72 72 6f 72 28 22 6d 69 73 73 69 6e 67 20 61 72  rror("missing ar
111c0 67 75 6d 65 6e 74 20 6f 6e 20 25 73 5c 6e 22 2c  gument on %s\n",
111d0 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
111e0 20 20 20 6e 54 68 72 65 61 64 20 3d 20 69 6e 74     nThread = int
111f0 65 67 65 72 56 61 6c 75 65 28 61 72 67 76 5b 2b  egerValue(argv[+
11200 2b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  +i]);.      }els
11210 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
11220 75 74 66 31 36 6c 65 22 29 3d 3d 30 20 29 7b 0a  utf16le")==0 ){.
11230 20 20 20 20 20 20 20 20 7a 45 6e 63 6f 64 69 6e          zEncodin
11240 67 20 3d 20 22 75 74 66 31 36 6c 65 22 3b 0a 20  g = "utf16le";. 
11250 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
11260 74 72 63 6d 70 28 7a 2c 22 75 74 66 31 36 62 65  trcmp(z,"utf16be
11270 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
11280 20 7a 45 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74   zEncoding = "ut
11290 66 31 36 62 65 22 3b 0a 20 20 20 20 20 20 7d 65  f16be";.      }e
112a0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
112b0 2c 22 76 65 72 69 66 79 22 29 3d 3d 30 20 29 7b  ,"verify")==0 ){
112c0 0a 20 20 20 20 20 20 20 20 67 2e 62 56 65 72 69  .        g.bVeri
112d0 66 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  fy = 1;.      }e
112e0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
112f0 2c 22 77 69 74 68 6f 75 74 2d 72 6f 77 69 64 22  ,"without-rowid"
11300 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
11310 67 2e 7a 57 52 20 3d 20 22 57 49 54 48 4f 55 54  g.zWR = "WITHOUT
11320 20 52 4f 57 49 44 22 3b 0a 20 20 20 20 20 20 20   ROWID";.       
11330 20 67 2e 7a 50 4b 20 3d 20 22 50 52 49 4d 41 52   g.zPK = "PRIMAR
11340 59 20 4b 45 59 22 3b 0a 20 20 20 20 20 20 7d 65  Y KEY";.      }e
11350 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
11360 2c 20 22 68 65 6c 70 22 29 3d 3d 30 20 7c 7c 20  , "help")==0 || 
11370 73 74 72 63 6d 70 28 7a 2c 22 3f 22 29 3d 3d 30  strcmp(z,"?")==0
11380 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e   ){.        prin
11390 74 66 28 7a 48 65 6c 70 2c 20 61 72 67 76 5b 30  tf(zHelp, argv[0
113a0 5d 29 3b 0a 20 20 20 20 20 20 20 20 65 78 69 74  ]);.        exit
113b0 28 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  (0);.      }else
113c0 7b 0a 20 20 20 20 20 20 20 20 66 61 74 61 6c 5f  {.        fatal_
113d0 65 72 72 6f 72 28 22 75 6e 6b 6e 6f 77 6e 20 6f  error("unknown o
113e0 70 74 69 6f 6e 3a 20 25 73 5c 6e 55 73 65 20 5c  ption: %s\nUse \
113f0 22 25 73 20 2d 3f 5c 22 20 66 6f 72 20 68 65 6c  "%s -?\" for hel
11400 70 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  p\n",.          
11410 20 20 20 20 20 20 20 20 20 20 61 72 67 76 5b 69            argv[i
11420 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20  ], argv[0]);.   
11430 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69     }.    }else i
11440 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 20 29 7b  f( zDbName==0 ){
11450 0a 20 20 20 20 20 20 7a 44 62 4e 61 6d 65 20 3d  .      zDbName =
11460 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 7d 65   argv[i];.    }e
11470 6c 73 65 7b 0a 20 20 20 20 20 20 66 61 74 61 6c  lse{.      fatal
11480 5f 65 72 72 6f 72 28 22 73 75 72 70 6c 75 73 20  _error("surplus 
11490 61 72 67 75 6d 65 6e 74 3a 20 25 73 5c 6e 55 73  argument: %s\nUs
114a0 65 20 5c 22 25 73 20 2d 3f 5c 22 20 66 6f 72 20  e \"%s -?\" for 
114b0 68 65 6c 70 5c 6e 22 2c 0a 20 20 20 20 20 20 20  help\n",.       
114c0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 76 5b             argv[
114d0 69 5d 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20  i], argv[0]);.  
114e0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 7a 44    }.  }.  if( zD
114f0 62 4e 61 6d 65 21 3d 30 20 29 20 75 6e 6c 69 6e  bName!=0 ) unlin
11500 6b 28 7a 44 62 4e 61 6d 65 29 3b 0a 23 69 66 20  k(zDbName);.#if 
11510 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
11520 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 31 0a 20  UMBER>=3006001. 
11530 20 69 66 28 20 6e 48 65 61 70 3e 30 20 29 7b 0a   if( nHeap>0 ){.
11540 20 20 20 20 70 48 65 61 70 20 3d 20 6d 61 6c 6c      pHeap = mall
11550 6f 63 28 20 6e 48 65 61 70 20 29 3b 0a 20 20 20  oc( nHeap );.   
11560 20 69 66 28 20 70 48 65 61 70 3d 3d 30 20 29 20   if( pHeap==0 ) 
11570 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 63 61 6e  fatal_error("can
11580 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 20 25 64 2d  not allocate %d-
11590 62 79 74 65 20 68 65 61 70 5c 6e 22 2c 20 6e 48  byte heap\n", nH
115a0 65 61 70 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  eap);.    rc = s
115b0 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
115c0 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50  LITE_CONFIG_HEAP
115d0 2c 20 70 48 65 61 70 2c 20 6e 48 65 61 70 2c 20  , pHeap, nHeap, 
115e0 6d 6e 48 65 61 70 29 3b 0a 20 20 20 20 69 66 28  mnHeap);.    if(
115f0 20 72 63 20 29 20 66 61 74 61 6c 5f 65 72 72 6f   rc ) fatal_erro
11600 72 28 22 68 65 61 70 20 63 6f 6e 66 69 67 75 72  r("heap configur
11610 61 74 69 6f 6e 20 66 61 69 6c 65 64 3a 20 25 64  ation failed: %d
11620 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 7d 0a 20 20  \n", rc);.  }.  
11630 69 66 28 20 64 6f 50 43 61 63 68 65 20 29 7b 0a  if( doPCache ){.
11640 20 20 20 20 69 66 28 20 6e 50 43 61 63 68 65 3e      if( nPCache>
11650 30 20 26 26 20 73 7a 50 43 61 63 68 65 3e 30 20  0 && szPCache>0 
11660 29 7b 0a 20 20 20 20 20 20 70 50 43 61 63 68 65  ){.      pPCache
11670 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 50 43 61 63   = malloc( nPCac
11680 68 65 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36  he*(sqlite3_int6
11690 34 29 73 7a 50 43 61 63 68 65 20 29 3b 0a 20 20  4)szPCache );.  
116a0 20 20 20 20 69 66 28 20 70 50 43 61 63 68 65 3d      if( pPCache=
116b0 3d 30 20 29 20 66 61 74 61 6c 5f 65 72 72 6f 72  =0 ) fatal_error
116c0 28 22 63 61 6e 6e 6f 74 20 61 6c 6c 6f 63 61 74  ("cannot allocat
116d0 65 20 25 6c 6c 64 2d 62 79 74 65 20 70 63 61 63  e %lld-byte pcac
116e0 68 65 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  he\n",.         
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 20 20 20 20 20 20 20 20 20 20 6e 50 43 61 63 68            nPCach
11710 65 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  e*(sqlite3_int64
11720 29 73 7a 50 43 61 63 68 65 29 3b 0a 20 20 20 20  )szPCache);.    
11730 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
11740 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
11750 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48  _CONFIG_PAGECACH
11760 45 2c 20 70 50 43 61 63 68 65 2c 20 73 7a 50 43  E, pPCache, szPC
11770 61 63 68 65 2c 20 6e 50 43 61 63 68 65 29 3b 0a  ache, nPCache);.
11780 20 20 20 20 69 66 28 20 72 63 20 29 20 66 61 74      if( rc ) fat
11790 61 6c 5f 65 72 72 6f 72 28 22 70 63 61 63 68 65  al_error("pcache
117a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
117b0 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63  ailed: %d\n", rc
117c0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 4c 6f  );.  }.  if( nLo
117d0 6f 6b 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  ok>=0 ){.    sql
117e0 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
117f0 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53  TE_CONFIG_LOOKAS
11800 49 44 45 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  IDE, 0, 0);.  }.
11810 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 70  #endif. .  /* Op
11820 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
11830 61 6e 64 20 74 68 65 20 69 6e 70 75 74 20 66 69  and the input fi
11840 6c 65 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  le */.  if( sqli
11850 74 65 33 5f 6f 70 65 6e 28 7a 44 62 4e 61 6d 65  te3_open(zDbName
11860 2c 20 26 67 2e 64 62 29 20 29 7b 0a 20 20 20 20  , &g.db) ){.    
11870 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 43 61 6e  fatal_error("Can
11880 6e 6f 74 20 6f 70 65 6e 20 64 61 74 61 62 61 73  not open databas
11890 65 20 66 69 6c 65 3a 20 25 73 5c 6e 22 2c 20 7a  e file: %s\n", z
118a0 44 62 4e 61 6d 65 29 3b 0a 20 20 7d 0a 23 69 66  DbName);.  }.#if
118b0 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
118c0 4e 55 4d 42 45 52 3e 3d 33 30 30 36 30 30 31 0a  NUMBER>=3006001.
118d0 20 20 69 66 28 20 6e 4c 6f 6f 6b 3e 30 20 26 26    if( nLook>0 &&
118e0 20 73 7a 4c 6f 6f 6b 3e 30 20 29 7b 0a 20 20 20   szLook>0 ){.   
118f0 20 70 4c 6f 6f 6b 20 3d 20 6d 61 6c 6c 6f 63 28   pLook = malloc(
11900 20 6e 4c 6f 6f 6b 2a 73 7a 4c 6f 6f 6b 20 29 3b   nLook*szLook );
11910 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
11920 33 5f 64 62 5f 63 6f 6e 66 69 67 28 67 2e 64 62  3_db_config(g.db
11930 2c 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  , SQLITE_DBCONFI
11940 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 70 4c 6f  G_LOOKASIDE, pLo
11950 6f 6b 2c 20 73 7a 4c 6f 6f 6b 2c 6e 4c 6f 6f 6b  ok, szLook,nLook
11960 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
11970 66 61 74 61 6c 5f 65 72 72 6f 72 28 22 6c 6f 6f  fatal_error("loo
11980 6b 61 73 69 64 65 20 63 6f 6e 66 69 67 75 72 61  kaside configura
11990 74 69 6f 6e 20 66 61 69 6c 65 64 3a 20 25 64 5c  tion failed: %d\
119a0 6e 22 2c 20 72 63 29 3b 0a 20 20 7d 0a 23 65 6e  n", rc);.  }.#en
119b0 64 69 66 0a 0a 20 20 2f 2a 20 53 65 74 20 64 61  dif..  /* Set da
119c0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
119d0 6e 20 6f 70 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  n options */.  s
119e0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
119f0 6e 63 74 69 6f 6e 28 67 2e 64 62 2c 20 22 72 61  nction(g.db, "ra
11a00 6e 64 6f 6d 22 2c 20 30 2c 20 53 51 4c 49 54 45  ndom", 0, SQLITE
11a10 5f 55 54 46 38 2c 20 30 2c 20 72 61 6e 64 6f 6d  _UTF8, 0, random
11a20 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 23 69 66  Func, 0, 0);.#if
11a30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
11a40 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 69 66  _DEPRECATED.  if
11a50 28 20 64 6f 54 72 61 63 65 20 29 20 73 71 6c 69  ( doTrace ) sqli
11a60 74 65 33 5f 74 72 61 63 65 28 67 2e 64 62 2c 20  te3_trace(g.db, 
11a70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 30  traceCallback, 0
11a80 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  );.#endif.  if( 
11a90 6d 6d 61 70 53 69 7a 65 3e 30 20 29 7b 0a 20 20  mmapSize>0 ){.  
11aa0 20 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65    speedtest1_exe
11ab0 63 28 22 50 52 41 47 4d 41 20 6d 6d 61 70 5f 73  c("PRAGMA mmap_s
11ac0 69 7a 65 3d 25 64 22 2c 20 6d 6d 61 70 53 69 7a  ize=%d", mmapSiz
11ad0 65 29 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74  e);.  }.  speedt
11ae0 65 73 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d  est1_exec("PRAGM
11af0 41 20 74 68 72 65 61 64 73 3d 25 64 22 2c 20 6e  A threads=%d", n
11b00 54 68 72 65 61 64 29 3b 0a 20 20 69 66 28 20 7a  Thread);.  if( z
11b10 4b 65 79 20 29 7b 0a 20 20 20 20 73 70 65 65 64  Key ){.    speed
11b20 74 65 73 74 31 5f 65 78 65 63 28 22 50 52 41 47  test1_exec("PRAG
11b30 4d 41 20 6b 65 79 28 27 25 73 27 29 22 2c 20 7a  MA key('%s')", z
11b40 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Key);.  }.  if( 
11b50 7a 45 6e 63 6f 64 69 6e 67 20 29 7b 0a 20 20 20  zEncoding ){.   
11b60 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
11b70 28 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e  ("PRAGMA encodin
11b80 67 3d 25 73 22 2c 20 7a 45 6e 63 6f 64 69 6e 67  g=%s", zEncoding
11b90 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 6f 41  );.  }.  if( doA
11ba0 75 74 6f 76 61 63 20 29 7b 0a 20 20 20 20 73 70  utovac ){.    sp
11bb0 65 65 64 74 65 73 74 31 5f 65 78 65 63 28 22 50  eedtest1_exec("P
11bc0 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
11bd0 6d 3d 46 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73  m=FULL");.  }els
11be0 65 20 69 66 28 20 64 6f 49 6e 63 72 76 61 63 20  e if( doIncrvac 
11bf0 29 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74  ){.    speedtest
11c00 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20 61  1_exec("PRAGMA a
11c10 75 74 6f 5f 76 61 63 75 75 6d 3d 49 4e 43 52 45  uto_vacuum=INCRE
11c20 4d 45 4e 54 41 4c 22 29 3b 0a 20 20 7d 0a 20 20  MENTAL");.  }.  
11c30 69 66 28 20 70 61 67 65 53 69 7a 65 20 29 7b 0a  if( pageSize ){.
11c40 20 20 20 20 73 70 65 65 64 74 65 73 74 31 5f 65      speedtest1_e
11c50 78 65 63 28 22 50 52 41 47 4d 41 20 70 61 67 65  xec("PRAGMA page
11c60 5f 73 69 7a 65 3d 25 64 22 2c 20 70 61 67 65 53  _size=%d", pageS
11c70 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ize);.  }.  if( 
11c80 63 61 63 68 65 53 69 7a 65 20 29 7b 0a 20 20 20  cacheSize ){.   
11c90 20 73 70 65 65 64 74 65 73 74 31 5f 65 78 65 63   speedtest1_exec
11ca0 28 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73  ("PRAGMA cache_s
11cb0 69 7a 65 3d 25 64 22 2c 20 63 61 63 68 65 53 69  ize=%d", cacheSi
11cc0 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e  ze);.  }.  if( n
11cd0 6f 53 79 6e 63 20 29 20 73 70 65 65 64 74 65 73  oSync ) speedtes
11ce0 74 31 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20  t1_exec("PRAGMA 
11cf0 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 22  synchronous=OFF"
11d00 29 3b 0a 20 20 69 66 28 20 64 6f 45 78 63 6c 75  );.  if( doExclu
11d10 73 69 76 65 20 29 7b 0a 20 20 20 20 73 70 65 65  sive ){.    spee
11d20 64 74 65 73 74 31 5f 65 78 65 63 28 22 50 52 41  dtest1_exec("PRA
11d30 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
11d40 3d 45 58 43 4c 55 53 49 56 45 22 29 3b 0a 20 20  =EXCLUSIVE");.  
11d50 7d 0a 20 20 69 66 28 20 7a 4a 4d 6f 64 65 20 29  }.  if( zJMode )
11d60 7b 0a 20 20 20 20 73 70 65 65 64 74 65 73 74 31  {.    speedtest1
11d70 5f 65 78 65 63 28 22 50 52 41 47 4d 41 20 6a 6f  _exec("PRAGMA jo
11d80 75 72 6e 61 6c 5f 6d 6f 64 65 3d 25 73 22 2c 20  urnal_mode=%s", 
11d90 7a 4a 4d 6f 64 65 29 3b 0a 20 20 7d 0a 0a 20 20  zJMode);.  }..  
11da0 69 66 28 20 67 2e 62 45 78 70 6c 61 69 6e 20 29  if( g.bExplain )
11db0 20 70 72 69 6e 74 66 28 22 2e 65 78 70 6c 61 69   printf(".explai
11dc0 6e 5c 6e 2e 65 63 68 6f 20 6f 6e 5c 6e 22 29 3b  n\n.echo on\n");
11dd0 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54  .  if( strcmp(zT
11de0 53 65 74 2c 22 6d 61 69 6e 22 29 3d 3d 30 20 29  Set,"main")==0 )
11df0 7b 0a 20 20 20 20 74 65 73 74 73 65 74 5f 6d 61  {.    testset_ma
11e00 69 6e 28 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  in();.  }else if
11e10 28 20 73 74 72 63 6d 70 28 7a 54 53 65 74 2c 22  ( strcmp(zTSet,"
11e20 64 65 62 75 67 31 22 29 3d 3d 30 20 29 7b 0a 20  debug1")==0 ){. 
11e30 20 20 20 74 65 73 74 73 65 74 5f 64 65 62 75 67     testset_debug
11e40 31 28 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  1();.  }else if(
11e50 20 73 74 72 63 6d 70 28 7a 54 53 65 74 2c 22 6f   strcmp(zTSet,"o
11e60 72 6d 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74  rm")==0 ){.    t
11e70 65 73 74 73 65 74 5f 6f 72 6d 28 29 3b 0a 20 20  estset_orm();.  
11e80 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
11e90 28 7a 54 53 65 74 2c 22 63 74 65 22 29 3d 3d 30  (zTSet,"cte")==0
11ea0 20 29 7b 0a 20 20 20 20 74 65 73 74 73 65 74 5f   ){.    testset_
11eb0 63 74 65 28 29 3b 0a 20 20 7d 65 6c 73 65 20 69  cte();.  }else i
11ec0 66 28 20 73 74 72 63 6d 70 28 7a 54 53 65 74 2c  f( strcmp(zTSet,
11ed0 22 66 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  "fp")==0 ){.    
11ee0 74 65 73 74 73 65 74 5f 66 70 28 29 3b 0a 20 20  testset_fp();.  
11ef0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
11f00 28 7a 54 53 65 74 2c 22 74 72 69 67 67 65 72 22  (zTSet,"trigger"
11f10 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65 73 74  )==0 ){.    test
11f20 73 65 74 5f 74 72 69 67 67 65 72 28 29 3b 0a 20  set_trigger();. 
11f30 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
11f40 70 28 7a 54 53 65 74 2c 22 72 74 72 65 65 22 29  p(zTSet,"rtree")
11f50 3d 3d 30 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ==0 ){.#ifdef SQ
11f60 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45  LITE_ENABLE_RTRE
11f70 45 0a 20 20 20 20 74 65 73 74 73 65 74 5f 72 74  E.    testset_rt
11f80 72 65 65 28 36 2c 20 31 34 37 29 3b 0a 23 65 6c  ree(6, 147);.#el
11f90 73 65 0a 20 20 20 20 66 61 74 61 6c 5f 65 72 72  se.    fatal_err
11fa0 6f 72 28 22 63 6f 6d 70 69 6c 65 20 77 69 74 68  or("compile with
11fb0 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
11fc0 5f 52 54 52 45 45 20 74 6f 20 65 6e 61 62 6c 65  _RTREE to enable
11fd0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
11fe0 20 20 20 22 74 68 65 20 52 2d 54 72 65 65 20 74     "the R-Tree t
11ff0 65 73 74 73 5c 6e 22 29 3b 0a 23 65 6e 64 69 66  ests\n");.#endif
12000 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 61  .  }else{.    fa
12010 74 61 6c 5f 65 72 72 6f 72 28 22 75 6e 6b 6e 6f  tal_error("unkno
12020 77 6e 20 74 65 73 74 73 65 74 3a 20 5c 22 25 73  wn testset: \"%s
12030 5c 22 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20  \"\n".          
12040 20 20 20 20 20 20 22 43 68 6f 69 63 65 73 3a 20        "Choices: 
12050 63 74 65 20 64 65 62 75 67 31 20 66 70 20 6d 61  cte debug1 fp ma
12060 69 6e 20 6f 72 6d 20 72 74 72 65 65 20 74 72 69  in orm rtree tri
12070 67 67 65 72 5c 6e 22 2c 0a 20 20 20 20 20 20 20  gger\n",.       
12080 20 20 20 20 20 20 20 20 20 20 7a 54 53 65 74 29            zTSet)
12090 3b 0a 20 20 7d 0a 20 20 73 70 65 65 64 74 65 73  ;.  }.  speedtes
120a0 74 31 5f 66 69 6e 61 6c 28 29 3b 0a 0a 20 20 69  t1_final();..  i
120b0 66 28 20 73 68 6f 77 53 74 61 74 73 20 29 7b 0a  f( showStats ){.
120c0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
120d0 28 67 2e 64 62 2c 20 22 50 52 41 47 4d 41 20 63  (g.db, "PRAGMA c
120e0 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 2c  ompile_options",
120f0 20 78 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73   xCompileOptions
12100 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20  , 0, 0);.  }..  
12110 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
12120 65 63 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63  ection statistic
12130 73 20 70 72 69 6e 74 65 64 20 61 66 74 65 72 20  s printed after 
12140 62 6f 74 68 20 70 72 65 70 61 72 65 64 20 73 74  both prepared st
12150 61 74 65 6d 65 6e 74 73 0a 20 20 2a 2a 20 68 61  atements.  ** ha
12160 76 65 20 62 65 65 6e 20 66 69 6e 61 6c 69 7a 65  ve been finalize
12170 64 20 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  d */.#if SQLITE_
12180 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d  VERSION_NUMBER>=
12190 33 30 30 37 30 30 39 0a 20 20 69 66 28 20 73 68  3007009.  if( sh
121a0 6f 77 53 74 61 74 73 20 29 7b 0a 20 20 20 20 73  owStats ){.    s
121b0 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73  qlite3_db_status
121c0 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  (g.db, SQLITE_DB
121d0 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45  STATUS_LOOKASIDE
121e0 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69  _USED, &iCur, &i
121f0 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e  Hi, 0);.    prin
12200 74 66 28 22 2d 2d 20 4c 6f 6f 6b 61 73 69 64 65  tf("-- Lookaside
12210 20 53 6c 6f 74 73 20 55 73 65 64 3a 20 20 20 20   Slots Used:    
12220 20 20 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c      %d (max %d)\
12230 6e 22 2c 20 69 43 75 72 2c 69 48 69 29 3b 0a 20  n", iCur,iHi);. 
12240 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
12250 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54  atus(g.db, SQLIT
12260 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41  E_DBSTATUS_LOOKA
12270 53 49 44 45 5f 48 49 54 2c 20 26 69 43 75 72 2c  SIDE_HIT, &iCur,
12280 20 26 69 48 69 2c 20 30 29 3b 0a 20 20 20 20 70   &iHi, 0);.    p
12290 72 69 6e 74 66 28 22 2d 2d 20 53 75 63 63 65 73  rintf("-- Succes
122a0 73 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65 73 3a  sful lookasides:
122b0 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 48         %d\n", iH
122c0 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  i);.    sqlite3_
122d0 64 62 5f 73 74 61 74 75 73 28 67 2e 64 62 2c 20  db_status(g.db, 
122e0 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
122f0 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53 5f 53  LOOKASIDE_MISS_S
12300 49 5a 45 2c 20 26 69 43 75 72 2c 26 69 48 69 2c  IZE, &iCur,&iHi,
12310 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  0);.    printf("
12320 2d 2d 20 4c 6f 6f 6b 61 73 69 64 65 20 73 69 7a  -- Lookaside siz
12330 65 20 66 61 75 6c 74 73 3a 20 20 20 20 20 20 20  e faults:       
12340 25 64 5c 6e 22 2c 20 69 48 69 29 3b 0a 20 20 20  %d\n", iHi);.   
12350 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
12360 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54 45 5f  us(g.db, SQLITE_
12370 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49  DBSTATUS_LOOKASI
12380 44 45 5f 4d 49 53 53 5f 46 55 4c 4c 2c 20 26 69  DE_MISS_FULL, &i
12390 43 75 72 2c 26 69 48 69 2c 30 29 3b 0a 20 20 20  Cur,&iHi,0);.   
123a0 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c 6f 6f 6b   printf("-- Look
123b0 61 73 69 64 65 20 4f 4f 4d 20 66 61 75 6c 74 73  aside OOM faults
123c0 3a 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20  :        %d\n", 
123d0 69 48 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iHi);.    sqlite
123e0 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64 62  3_db_status(g.db
123f0 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
12400 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 20 26 69  S_CACHE_USED, &i
12410 43 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20  Cur, &iHi, 0);. 
12420 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 50 61     printf("-- Pa
12430 67 65 72 20 48 65 61 70 20 55 73 61 67 65 3a 20  ger Heap Usage: 
12440 20 20 20 20 20 20 20 20 20 20 20 25 64 20 62 79             %d by
12450 74 65 73 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20  tes\n", iCur);. 
12460 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
12470 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54  atus(g.db, SQLIT
12480 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
12490 5f 48 49 54 2c 20 26 69 43 75 72 2c 20 26 69 48  _HIT, &iCur, &iH
124a0 69 2c 20 31 29 3b 0a 20 20 20 20 70 72 69 6e 74  i, 1);.    print
124b0 66 28 22 2d 2d 20 50 61 67 65 20 63 61 63 68 65  f("-- Page cache
124c0 20 68 69 74 73 3a 20 20 20 20 20 20 20 20 20 20   hits:          
124d0 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b     %d\n", iCur);
124e0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
124f0 73 74 61 74 75 73 28 67 2e 64 62 2c 20 53 51 4c  status(g.db, SQL
12500 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
12510 48 45 5f 4d 49 53 53 2c 20 26 69 43 75 72 2c 20  HE_MISS, &iCur, 
12520 26 69 48 69 2c 20 31 29 3b 0a 20 20 20 20 70 72  &iHi, 1);.    pr
12530 69 6e 74 66 28 22 2d 2d 20 50 61 67 65 20 63 61  intf("-- Page ca
12540 63 68 65 20 6d 69 73 73 65 73 3a 20 20 20 20 20  che misses:     
12550 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75        %d\n", iCu
12560 72 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 56  r);.#if SQLITE_V
12570 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33  ERSION_NUMBER>=3
12580 30 30 37 30 31 32 0a 20 20 20 20 73 71 6c 69 74  007012.    sqlit
12590 65 33 5f 64 62 5f 73 74 61 74 75 73 28 67 2e 64  e3_db_status(g.d
125a0 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
125b0 55 53 5f 43 41 43 48 45 5f 57 52 49 54 45 2c 20  US_CACHE_WRITE, 
125c0 26 69 43 75 72 2c 20 26 69 48 69 2c 20 31 29 3b  &iCur, &iHi, 1);
125d0 0a 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d 20  .    printf("-- 
125e0 50 61 67 65 20 63 61 63 68 65 20 77 72 69 74 65  Page cache write
125f0 73 3a 20 20 20 20 20 20 20 20 20 20 20 25 64 5c  s:           %d\
12600 6e 22 2c 20 69 43 75 72 29 3b 20 0a 23 65 6e 64  n", iCur); .#end
12610 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64  if.    sqlite3_d
12620 62 5f 73 74 61 74 75 73 28 67 2e 64 62 2c 20 53  b_status(g.db, S
12630 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 53  QLITE_DBSTATUS_S
12640 43 48 45 4d 41 5f 55 53 45 44 2c 20 26 69 43 75  CHEMA_USED, &iCu
12650 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20 20  r, &iHi, 0);.   
12660 20 70 72 69 6e 74 66 28 22 2d 2d 20 53 63 68 65   printf("-- Sche
12670 6d 61 20 48 65 61 70 20 55 73 61 67 65 3a 20 20  ma Heap Usage:  
12680 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74 65           %d byte
12690 73 5c 6e 22 2c 20 69 43 75 72 29 3b 20 0a 20 20  s\n", iCur); .  
126a0 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
126b0 74 75 73 28 67 2e 64 62 2c 20 53 51 4c 49 54 45  tus(g.db, SQLITE
126c0 5f 44 42 53 54 41 54 55 53 5f 53 54 4d 54 5f 55  _DBSTATUS_STMT_U
126d0 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69  SED, &iCur, &iHi
126e0 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  , 0);.    printf
126f0 28 22 2d 2d 20 53 74 61 74 65 6d 65 6e 74 20 48  ("-- Statement H
12700 65 61 70 20 55 73 61 67 65 3a 20 20 20 20 20 20  eap Usage:      
12710 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 20 69    %d bytes\n", i
12720 43 75 72 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69  Cur); .  }.#endi
12730 66 0a 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  f..  sqlite3_clo
12740 73 65 28 67 2e 64 62 29 3b 0a 0a 23 69 66 20 53  se(g.db);..#if S
12750 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
12760 4d 42 45 52 3e 3d 33 30 30 36 30 30 31 0a 20 20  MBER>=3006001.  
12770 2f 2a 20 47 6c 6f 62 61 6c 20 6d 65 6d 6f 72 79  /* Global memory
12780 20 75 73 61 67 65 20 73 74 61 74 69 73 74 69 63   usage statistic
12790 73 20 70 72 69 6e 74 65 64 20 61 66 74 65 72 20  s printed after 
127a0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
127b0 6e 65 63 74 69 6f 6e 0a 20 20 2a 2a 20 68 61 73  nection.  ** has
127c0 20 63 6c 6f 73 65 64 2e 20 20 4d 65 6d 6f 72 79   closed.  Memory
127d0 20 75 73 61 67 65 20 73 68 6f 75 6c 64 20 62 65   usage should be
127e0 20 7a 65 72 6f 20 61 74 20 74 68 69 73 20 70 6f   zero at this po
127f0 69 6e 74 2e 20 2a 2f 0a 20 20 69 66 28 20 73 68  int. */.  if( sh
12800 6f 77 53 74 61 74 73 20 29 7b 0a 20 20 20 20 73  owStats ){.    s
12810 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53 51  qlite3_status(SQ
12820 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f  LITE_STATUS_MEMO
12830 52 59 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20  RY_USED, &iCur, 
12840 26 69 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72  &iHi, 0);.    pr
12850 69 6e 74 66 28 22 2d 2d 20 4d 65 6d 6f 72 79 20  intf("-- Memory 
12860 55 73 65 64 20 28 62 79 74 65 73 29 3a 20 20 20  Used (bytes):   
12870 20 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64        %d (max %d
12880 29 5c 6e 22 2c 20 69 43 75 72 2c 69 48 69 29 3b  )\n", iCur,iHi);
12890 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
128a0 49 4f 4e 5f 4e 55 4d 42 45 52 3e 3d 33 30 30 37  ION_NUMBER>=3007
128b0 30 30 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  000.    sqlite3_
128c0 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54  status(SQLITE_ST
128d0 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 43 4f 55 4e  ATUS_MALLOC_COUN
128e0 54 2c 20 26 69 43 75 72 2c 20 26 69 48 69 2c 20  T, &iCur, &iHi, 
128f0 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  0);.    printf("
12900 2d 2d 20 4f 75 74 73 74 61 6e 64 69 6e 67 20 41  -- Outstanding A
12910 6c 6c 6f 63 61 74 69 6f 6e 73 3a 20 20 20 20 20  llocations:     
12920 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20  %d (max %d)\n", 
12930 69 43 75 72 2c 69 48 69 29 3b 0a 23 65 6e 64 69  iCur,iHi);.#endi
12940 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  f.    sqlite3_st
12950 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54  atus(SQLITE_STAT
12960 55 53 5f 50 41 47 45 43 41 43 48 45 5f 4f 56 45  US_PAGECACHE_OVE
12970 52 46 4c 4f 57 2c 20 26 69 43 75 72 2c 20 26 69  RFLOW, &iCur, &i
12980 48 69 2c 20 30 29 3b 0a 20 20 20 20 70 72 69 6e  Hi, 0);.    prin
12990 74 66 28 22 2d 2d 20 50 63 61 63 68 65 20 4f 76  tf("-- Pcache Ov
129a0 65 72 66 6c 6f 77 20 42 79 74 65 73 3a 20 20 20  erflow Bytes:   
129b0 20 20 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c      %d (max %d)\
129c0 6e 22 2c 20 69 43 75 72 2c 69 48 69 29 3b 0a 20  n", iCur,iHi);. 
129d0 20 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75     sqlite3_statu
129e0 73 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  s(SQLITE_STATUS_
129f0 4d 41 4c 4c 4f 43 5f 53 49 5a 45 2c 20 26 69 43  MALLOC_SIZE, &iC
12a00 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20  ur, &iHi, 0);.  
12a10 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c 61 72    printf("-- Lar
12a20 67 65 73 74 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a  gest Allocation:
12a30 20 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74            %d byt
12a40 65 73 5c 6e 22 2c 69 48 69 29 3b 0a 20 20 20 20  es\n",iHi);.    
12a50 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53  sqlite3_status(S
12a60 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47  QLITE_STATUS_PAG
12a70 45 43 41 43 48 45 5f 53 49 5a 45 2c 20 26 69 43  ECACHE_SIZE, &iC
12a80 75 72 2c 20 26 69 48 69 2c 20 30 29 3b 0a 20 20  ur, &iHi, 0);.  
12a90 20 20 70 72 69 6e 74 66 28 22 2d 2d 20 4c 61 72    printf("-- Lar
12aa0 67 65 73 74 20 50 63 61 63 68 65 20 41 6c 6c 6f  gest Pcache Allo
12ab0 63 61 74 69 6f 6e 3a 20 20 20 25 64 20 62 79 74  cation:   %d byt
12ac0 65 73 5c 6e 22 2c 69 48 69 29 3b 0a 20 20 7d 0a  es\n",iHi);.  }.
12ad0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 5f  #endif..#ifdef _
12ae0 5f 6c 69 6e 75 78 5f 5f 0a 20 20 69 66 28 20 73  _linux__.  if( s
12af0 68 6f 77 53 74 61 74 73 20 29 7b 0a 20 20 20 20  howStats ){.    
12b00 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74  displayLinuxIoSt
12b10 61 74 73 28 73 74 64 6f 75 74 29 3b 0a 20 20 7d  ats(stdout);.  }
12b20 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
12b30 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  lease memory */.
12b40 20 20 66 72 65 65 28 20 70 4c 6f 6f 6b 20 29 3b    free( pLook );
12b50 0a 20 20 66 72 65 65 28 20 70 50 43 61 63 68 65  .  free( pPCache
12b60 20 29 3b 0a 20 20 66 72 65 65 28 20 70 48 65 61   );.  free( pHea
12b70 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b  p );.  return 0;
12b80 0a 7d 0a                                         .}.