/ Hex Artifact Content
Login

Artifact edbb00ed1516535691040315e97cf32c62df22d0:


0000: 2f 2a 0a 2a 2a 20 32 30 31 34 20 44 65 63 65 6d  /*.** 2014 Decem
0010: 62 65 72 20 39 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ber 9.**.** The 
0020: 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d 73  author disclaims
0030: 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74 68   copyright to th
0040: 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 20  is source code. 
0050: 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20   In place of.** 
0060: 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20  a legal notice, 
0070: 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73 69  here is a blessi
0080: 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79  ng:.**.**    May
0090: 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64   you do good and
00a0: 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20   not evil..**   
00b0: 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66 6f   May you find fo
00c0: 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79 6f  rgiveness for yo
00d0: 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67 69  urself and forgi
00e0: 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20  ve others..**   
00f0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
0100: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0110: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0120: 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  u give..**.*****
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 0a 2a 2f 0a 0a 0a  ****.**.**.*/...
0180: 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 20 31 2e 20  /*.** Thread 1. 
0190: 43 52 45 41 54 45 20 61 6e 64 20 44 52 4f 50 20  CREATE and DROP 
01a0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  a table..*/.stat
01b0: 69 63 20 63 68 61 72 20 2a 73 74 72 65 73 73 5f  ic char *stress_
01c0: 74 68 72 65 61 64 5f 31 28 69 6e 74 20 69 54 69  thread_1(int iTi
01d0: 64 2c 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a  d, void *pArg){.
01e0: 20 20 45 72 72 6f 72 20 65 72 72 20 3d 20 7b 30    Error err = {0
01f0: 7d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  };              
0200: 20 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20    /* Error code 
0210: 61 6e 64 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  and message */. 
0220: 20 53 71 6c 69 74 65 20 64 62 20 3d 20 7b 30 7d   Sqlite db = {0}
0230: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
0240: 20 2f 2a 20 53 51 4c 69 74 65 20 64 61 74 61 62   /* SQLite datab
0250: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
0260: 2f 0a 0a 20 20 6f 70 65 6e 64 62 28 26 65 72 72  /..  opendb(&err
0270: 2c 20 26 64 62 2c 20 22 74 65 73 74 2e 64 62 22  , &db, "test.db"
0280: 2c 20 30 29 3b 0a 20 20 77 68 69 6c 65 28 20 21  , 0);.  while( !
0290: 74 69 6d 65 74 6f 73 74 6f 70 28 26 65 72 72 29  timetostop(&err)
02a0: 20 29 7b 0a 20 20 20 20 73 71 6c 5f 73 63 72 69   ){.    sql_scri
02b0: 70 74 28 26 65 72 72 2c 20 26 64 62 2c 20 22 43  pt(&err, &db, "C
02c0: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e  REATE TABLE IF N
02d0: 4f 54 20 45 58 49 53 54 53 20 74 31 28 61 20 50  OT EXISTS t1(a P
02e0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 22 29  RIMARY KEY, b)")
02f0: 3b 0a 20 20 20 20 63 6c 65 61 72 5f 65 72 72 6f  ;.    clear_erro
0300: 72 28 26 65 72 72 2c 20 53 51 4c 49 54 45 5f 4c  r(&err, SQLITE_L
0310: 4f 43 4b 45 44 29 3b 0a 20 20 20 20 73 71 6c 5f  OCKED);.    sql_
0320: 73 63 72 69 70 74 28 26 65 72 72 2c 20 26 64 62  script(&err, &db
0330: 2c 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49 46  , "DROP TABLE IF
0340: 20 45 58 49 53 54 53 20 74 31 22 29 3b 0a 20 20   EXISTS t1");.  
0350: 20 20 63 6c 65 61 72 5f 65 72 72 6f 72 28 26 65    clear_error(&e
0360: 72 72 2c 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  rr, SQLITE_LOCKE
0370: 44 29 3b 0a 20 20 7d 0a 20 20 63 6c 6f 73 65 64  D);.  }.  closed
0380: 62 28 26 65 72 72 2c 20 26 64 62 29 3b 0a 20 20  b(&err, &db);.  
0390: 70 72 69 6e 74 5f 61 6e 64 5f 66 72 65 65 5f 65  print_and_free_e
03a0: 72 72 28 26 65 72 72 29 3b 0a 20 20 72 65 74 75  rr(&err);.  retu
03b0: 72 6e 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  rn sqlite3_mprin
03c0: 74 66 28 22 6f 6b 22 29 3b 0a 7d 0a 0a 2f 2a 0a  tf("ok");.}../*.
03d0: 2a 2a 20 54 68 72 65 61 64 20 32 2e 20 4f 70 65  ** Thread 2. Ope
03e0: 6e 20 61 6e 64 20 63 6c 6f 73 65 20 64 61 74 61  n and close data
03f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
0400: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
0410: 20 2a 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f   *stress_thread_
0420: 32 28 69 6e 74 20 69 54 69 64 2c 20 76 6f 69 64  2(int iTid, void
0430: 20 2a 70 41 72 67 29 7b 0a 20 20 45 72 72 6f 72   *pArg){.  Error
0440: 20 65 72 72 20 3d 20 7b 30 7d 3b 20 20 20 20 20   err = {0};     
0450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
0460: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 6d 65 73  ror code and mes
0470: 73 61 67 65 20 2a 2f 0a 20 20 53 71 6c 69 74 65  sage */.  Sqlite
0480: 20 64 62 20 3d 20 7b 30 7d 3b 20 20 20 20 20 20   db = {0};      
0490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c            /* SQL
04a0: 69 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ite database con
04b0: 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 77 68 69  nection */.  whi
04c0: 6c 65 28 20 21 74 69 6d 65 74 6f 73 74 6f 70 28  le( !timetostop(
04d0: 26 65 72 72 29 20 29 7b 0a 20 20 20 20 6f 70 65  &err) ){.    ope
04e0: 6e 64 62 28 26 65 72 72 2c 20 26 64 62 2c 20 22  ndb(&err, &db, "
04f0: 74 65 73 74 2e 64 62 22 2c 20 30 29 3b 0a 20 20  test.db", 0);.  
0500: 20 20 73 71 6c 5f 73 63 72 69 70 74 28 26 65 72    sql_script(&er
0510: 72 2c 20 26 64 62 2c 20 22 53 45 4c 45 43 54 20  r, &db, "SELECT 
0520: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
0530: 73 74 65 72 3b 22 29 3b 0a 20 20 20 20 63 6c 65  ster;");.    cle
0540: 61 72 5f 65 72 72 6f 72 28 26 65 72 72 2c 20 53  ar_error(&err, S
0550: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 3b 0a 20  QLITE_LOCKED);. 
0560: 20 20 20 63 6c 6f 73 65 64 62 28 26 65 72 72 2c     closedb(&err,
0570: 20 26 64 62 29 3b 0a 20 20 7d 0a 20 20 70 72 69   &db);.  }.  pri
0580: 6e 74 5f 61 6e 64 5f 66 72 65 65 5f 65 72 72 28  nt_and_free_err(
0590: 26 65 72 72 29 3b 0a 20 20 72 65 74 75 72 6e 20  &err);.  return 
05a0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
05b0: 22 6f 6b 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  "ok");.}../*.** 
05c0: 54 68 72 65 61 64 20 33 2e 20 41 74 74 65 6d 70  Thread 3. Attemp
05d0: 74 20 6d 61 6e 79 20 73 6d 61 6c 6c 20 53 45 4c  t many small SEL
05e0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
05f0: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  */.static char *
0600: 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f 33 28  stress_thread_3(
0610: 69 6e 74 20 69 54 69 64 2c 20 76 6f 69 64 20 2a  int iTid, void *
0620: 70 41 72 67 29 7b 0a 20 20 45 72 72 6f 72 20 65  pArg){.  Error e
0630: 72 72 20 3d 20 7b 30 7d 3b 20 20 20 20 20 20 20  rr = {0};       
0640: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
0650: 72 20 63 6f 64 65 20 61 6e 64 20 6d 65 73 73 61  r code and messa
0660: 67 65 20 2a 2f 0a 20 20 53 71 6c 69 74 65 20 64  ge */.  Sqlite d
0670: 62 20 3d 20 7b 30 7d 3b 20 20 20 20 20 20 20 20  b = {0};        
0680: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 69 74          /* SQLit
0690: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
06a0: 63 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20  ction */..  int 
06b0: 69 31 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 32  i1 = 0;.  int i2
06c0: 20 3d 20 30 3b 0a 0a 20 20 6f 70 65 6e 64 62 28   = 0;..  opendb(
06d0: 26 65 72 72 2c 20 26 64 62 2c 20 22 74 65 73 74  &err, &db, "test
06e0: 2e 64 62 22 2c 20 30 29 3b 0a 20 20 77 68 69 6c  .db", 0);.  whil
06f0: 65 28 20 21 74 69 6d 65 74 6f 73 74 6f 70 28 26  e( !timetostop(&
0700: 65 72 72 29 20 29 7b 0a 20 20 20 20 73 71 6c 5f  err) ){.    sql_
0710: 73 63 72 69 70 74 28 26 65 72 72 2c 20 26 64 62  script(&err, &db
0720: 2c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  , "SELECT * FROM
0730: 20 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b 22   t1 ORDER BY a;"
0740: 29 3b 0a 20 20 20 20 69 31 2b 2b 3b 0a 20 20 20  );.    i1++;.   
0750: 20 69 66 28 20 65 72 72 2e 72 63 20 29 20 69 32   if( err.rc ) i2
0760: 2b 2b 3b 0a 20 20 20 20 63 6c 65 61 72 5f 65 72  ++;.    clear_er
0770: 72 6f 72 28 26 65 72 72 2c 20 53 51 4c 49 54 45  ror(&err, SQLITE
0780: 5f 4c 4f 43 4b 45 44 29 3b 0a 20 20 20 20 63 6c  _LOCKED);.    cl
0790: 65 61 72 5f 65 72 72 6f 72 28 26 65 72 72 2c 20  ear_error(&err, 
07a0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 29 3b 0a 20  SQLITE_ERROR);. 
07b0: 20 7d 0a 20 20 63 6c 6f 73 65 64 62 28 26 65 72   }.  closedb(&er
07c0: 72 2c 20 26 64 62 29 3b 0a 20 20 70 72 69 6e 74  r, &db);.  print
07d0: 5f 61 6e 64 5f 66 72 65 65 5f 65 72 72 28 26 65  _and_free_err(&e
07e0: 72 72 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71  rr);.  return sq
07f0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 72  lite3_mprintf("r
0800: 65 61 64 20 74 31 20 25 64 2f 25 64 20 61 74 74  ead t1 %d/%d att
0810: 65 6d 70 74 73 22 2c 20 69 32 2c 20 69 31 29 3b  empts", i2, i1);
0820: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  .}../*.** Thread
0830: 20 35 2e 20 41 74 74 65 6d 70 74 20 49 4e 53 45   5. Attempt INSE
0840: 52 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  RT statements..*
0850: 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 73  /.static char *s
0860: 74 72 65 73 73 5f 74 68 72 65 61 64 5f 34 28 69  tress_thread_4(i
0870: 6e 74 20 69 54 69 64 2c 20 76 6f 69 64 20 2a 70  nt iTid, void *p
0880: 41 72 67 29 7b 0a 20 20 45 72 72 6f 72 20 65 72  Arg){.  Error er
0890: 72 20 3d 20 7b 30 7d 3b 20 20 20 20 20 20 20 20  r = {0};        
08a0: 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
08b0: 20 63 6f 64 65 20 61 6e 64 20 6d 65 73 73 61 67   code and messag
08c0: 65 20 2a 2f 0a 20 20 53 71 6c 69 74 65 20 64 62  e */.  Sqlite db
08d0: 20 3d 20 7b 30 7d 3b 20 20 20 20 20 20 20 20 20   = {0};         
08e0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 69 74 65         /* SQLite
08f0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
0900: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 31  tion */.  int i1
0910: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 32 20 3d   = 0;.  int i2 =
0920: 20 30 3b 0a 20 20 69 6e 74 20 69 41 72 67 20 3d   0;.  int iArg =
0930: 20 50 54 52 32 49 4e 54 28 70 41 72 67 29 3b 0a   PTR2INT(pArg);.
0940: 0a 20 20 6f 70 65 6e 64 62 28 26 65 72 72 2c 20  .  opendb(&err, 
0950: 26 64 62 2c 20 22 74 65 73 74 2e 64 62 22 2c 20  &db, "test.db", 
0960: 30 29 3b 0a 20 20 77 68 69 6c 65 28 20 21 74 69  0);.  while( !ti
0970: 6d 65 74 6f 73 74 6f 70 28 26 65 72 72 29 20 29  metostop(&err) )
0980: 7b 0a 20 20 20 20 69 66 28 20 69 41 72 67 20 29  {.    if( iArg )
0990: 7b 0a 20 20 20 20 20 20 63 6c 6f 73 65 64 62 28  {.      closedb(
09a0: 26 65 72 72 2c 20 26 64 62 29 3b 0a 20 20 20 20  &err, &db);.    
09b0: 20 20 6f 70 65 6e 64 62 28 26 65 72 72 2c 20 26    opendb(&err, &
09c0: 64 62 2c 20 22 74 65 73 74 2e 64 62 22 2c 20 30  db, "test.db", 0
09d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
09e0: 5f 73 63 72 69 70 74 28 26 65 72 72 2c 20 26 64  _script(&err, &d
09f0: 62 2c 20 0a 20 20 20 20 20 20 20 20 22 57 49 54  b, .        "WIT
0a00: 48 20 6c 6f 6f 70 28 69 29 20 41 53 20 28 53 45  H loop(i) AS (SE
0a10: 4c 45 43 54 20 31 20 55 4e 49 4f 4e 20 41 4c 4c  LECT 1 UNION ALL
0a20: 20 53 45 4c 45 43 54 20 69 2b 31 20 46 52 4f 4d   SELECT i+1 FROM
0a30: 20 6c 6f 6f 70 20 4c 49 4d 49 54 20 32 30 30 29   loop LIMIT 200)
0a40: 20 22 0a 20 20 20 20 20 20 20 20 22 49 4e 53 45   ".        "INSE
0a50: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0a60: 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 36 30 29  S(randomblob(60)
0a70: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 36 30 29  , randomblob(60)
0a80: 29 3b 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 69  );".    );.    i
0a90: 31 2b 2b 3b 0a 20 20 20 20 69 66 28 20 65 72 72  1++;.    if( err
0aa0: 2e 72 63 20 29 20 69 32 2b 2b 3b 0a 20 20 20 20  .rc ) i2++;.    
0ab0: 63 6c 65 61 72 5f 65 72 72 6f 72 28 26 65 72 72  clear_error(&err
0ac0: 2c 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29  , SQLITE_LOCKED)
0ad0: 3b 0a 20 20 20 20 63 6c 65 61 72 5f 65 72 72 6f  ;.    clear_erro
0ae0: 72 28 26 65 72 72 2c 20 53 51 4c 49 54 45 5f 45  r(&err, SQLITE_E
0af0: 52 52 4f 52 29 3b 0a 20 20 7d 0a 20 20 63 6c 6f  RROR);.  }.  clo
0b00: 73 65 64 62 28 26 65 72 72 2c 20 26 64 62 29 3b  sedb(&err, &db);
0b10: 0a 20 20 70 72 69 6e 74 5f 61 6e 64 5f 66 72 65  .  print_and_fre
0b20: 65 5f 65 72 72 28 26 65 72 72 29 3b 0a 20 20 72  e_err(&err);.  r
0b30: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 6d 70  eturn sqlite3_mp
0b40: 72 69 6e 74 66 28 22 77 72 6f 74 65 20 74 31 20  rintf("wrote t1 
0b50: 25 64 2f 25 64 20 61 74 74 65 6d 70 74 73 22 2c  %d/%d attempts",
0b60: 20 69 32 2c 20 69 31 29 3b 0a 7d 0a 0a 2f 2a 0a   i2, i1);.}../*.
0b70: 2a 2a 20 54 68 72 65 61 64 20 36 2e 20 41 74 74  ** Thread 6. Att
0b80: 65 6d 70 74 20 44 45 4c 45 54 45 20 6f 70 65 72  empt DELETE oper
0b90: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 61 74 69  ations..*/.stati
0ba0: 63 20 63 68 61 72 20 2a 73 74 72 65 73 73 5f 74  c char *stress_t
0bb0: 68 72 65 61 64 5f 35 28 69 6e 74 20 69 54 69 64  hread_5(int iTid
0bc0: 2c 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20  , void *pArg){. 
0bd0: 20 45 72 72 6f 72 20 65 72 72 20 3d 20 7b 30 7d   Error err = {0}
0be0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
0bf0: 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20 61   /* Error code a
0c00: 6e 64 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  nd message */.  
0c10: 53 71 6c 69 74 65 20 64 62 20 3d 20 7b 30 7d 3b  Sqlite db = {0};
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c30: 2f 2a 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  /* SQLite databa
0c40: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
0c50: 0a 20 20 69 6e 74 20 69 41 72 67 20 3d 20 50 54  .  int iArg = PT
0c60: 52 32 49 4e 54 28 70 41 72 67 29 3b 0a 0a 20 20  R2INT(pArg);..  
0c70: 69 6e 74 20 69 31 20 3d 20 30 3b 0a 20 20 69 6e  int i1 = 0;.  in
0c80: 74 20 69 32 20 3d 20 30 3b 0a 0a 20 20 6f 70 65  t i2 = 0;..  ope
0c90: 6e 64 62 28 26 65 72 72 2c 20 26 64 62 2c 20 22  ndb(&err, &db, "
0ca0: 74 65 73 74 2e 64 62 22 2c 20 30 29 3b 0a 20 20  test.db", 0);.  
0cb0: 77 68 69 6c 65 28 20 21 74 69 6d 65 74 6f 73 74  while( !timetost
0cc0: 6f 70 28 26 65 72 72 29 20 29 7b 0a 20 20 20 20  op(&err) ){.    
0cd0: 69 36 34 20 69 20 3d 20 28 69 31 20 25 20 34 29  i64 i = (i1 % 4)
0ce0: 3b 0a 20 20 20 20 69 66 28 20 69 41 72 67 20 29  ;.    if( iArg )
0cf0: 7b 0a 20 20 20 20 20 20 63 6c 6f 73 65 64 62 28  {.      closedb(
0d00: 26 65 72 72 2c 20 26 64 62 29 3b 0a 20 20 20 20  &err, &db);.    
0d10: 20 20 6f 70 65 6e 64 62 28 26 65 72 72 2c 20 26    opendb(&err, &
0d20: 64 62 2c 20 22 74 65 73 74 2e 64 62 22 2c 20 30  db, "test.db", 0
0d30: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65  );.    }.    exe
0d40: 63 73 71 6c 28 26 65 72 72 2c 20 26 64 62 2c 20  csql(&err, &db, 
0d50: 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20  "DELETE FROM t1 
0d60: 57 48 45 52 45 20 28 72 6f 77 69 64 20 25 20 34  WHERE (rowid % 4
0d70: 29 3d 3d 3a 69 22 2c 20 26 69 29 3b 0a 20 20 20  )==:i", &i);.   
0d80: 20 69 31 2b 2b 3b 0a 20 20 20 20 69 66 28 20 65   i1++;.    if( e
0d90: 72 72 2e 72 63 20 29 20 69 32 2b 2b 3b 0a 20 20  rr.rc ) i2++;.  
0da0: 20 20 63 6c 65 61 72 5f 65 72 72 6f 72 28 26 65    clear_error(&e
0db0: 72 72 2c 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  rr, SQLITE_LOCKE
0dc0: 44 29 3b 0a 20 20 20 20 63 6c 65 61 72 5f 65 72  D);.    clear_er
0dd0: 72 6f 72 28 26 65 72 72 2c 20 53 51 4c 49 54 45  ror(&err, SQLITE
0de0: 5f 45 52 52 4f 52 29 3b 0a 20 20 7d 0a 20 20 63  _ERROR);.  }.  c
0df0: 6c 6f 73 65 64 62 28 26 65 72 72 2c 20 26 64 62  losedb(&err, &db
0e00: 29 3b 0a 20 20 70 72 69 6e 74 5f 61 6e 64 5f 66  );.  print_and_f
0e10: 72 65 65 5f 65 72 72 28 26 65 72 72 29 3b 0a 20  ree_err(&err);. 
0e20: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
0e30: 6d 70 72 69 6e 74 66 28 22 64 65 6c 65 74 65 64  mprintf("deleted
0e40: 20 66 72 6f 6d 20 74 31 20 25 64 2f 25 64 20 61   from t1 %d/%d a
0e50: 74 74 65 6d 70 74 73 22 2c 20 69 32 2c 20 69 31  ttempts", i2, i1
0e60: 29 3b 0a 7d 0a 0a 0a 73 74 61 74 69 63 20 76 6f  );.}...static vo
0e70: 69 64 20 73 74 72 65 73 73 31 28 69 6e 74 20 6e  id stress1(int n
0e80: 4d 73 29 7b 0a 20 20 45 72 72 6f 72 20 65 72 72  Ms){.  Error err
0e90: 20 3d 20 7b 30 7d 3b 0a 20 20 54 68 72 65 61 64   = {0};.  Thread
0ea0: 73 65 74 20 74 68 72 65 61 64 73 20 3d 20 7b 30  set threads = {0
0eb0: 7d 3b 0a 0a 20 20 73 65 74 73 74 6f 70 74 69 6d  };..  setstoptim
0ec0: 65 28 26 65 72 72 2c 20 6e 4d 73 29 3b 0a 20 20  e(&err, nMs);.  
0ed0: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
0ee0: 68 61 72 65 64 5f 63 61 63 68 65 28 31 29 3b 0a  hared_cache(1);.
0ef0: 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61 64  .  launch_thread
0f00: 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73 2c  (&err, &threads,
0f10: 20 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f 31   stress_thread_1
0f20: 2c 20 30 29 3b 0a 20 20 6c 61 75 6e 63 68 5f 74  , 0);.  launch_t
0f30: 68 72 65 61 64 28 26 65 72 72 2c 20 26 74 68 72  hread(&err, &thr
0f40: 65 61 64 73 2c 20 73 74 72 65 73 73 5f 74 68 72  eads, stress_thr
0f50: 65 61 64 5f 31 2c 20 30 29 3b 0a 0a 20 20 6c 61  ead_1, 0);..  la
0f60: 75 6e 63 68 5f 74 68 72 65 61 64 28 26 65 72 72  unch_thread(&err
0f70: 2c 20 26 74 68 72 65 61 64 73 2c 20 73 74 72 65  , &threads, stre
0f80: 73 73 5f 74 68 72 65 61 64 5f 32 2c 20 30 29 3b  ss_thread_2, 0);
0f90: 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61 64  .  launch_thread
0fa0: 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73 2c  (&err, &threads,
0fb0: 20 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f 32   stress_thread_2
0fc0: 2c 20 30 29 3b 0a 0a 20 20 6c 61 75 6e 63 68 5f  , 0);..  launch_
0fd0: 74 68 72 65 61 64 28 26 65 72 72 2c 20 26 74 68  thread(&err, &th
0fe0: 72 65 61 64 73 2c 20 73 74 72 65 73 73 5f 74 68  reads, stress_th
0ff0: 72 65 61 64 5f 33 2c 20 30 29 3b 0a 20 20 6c 61  read_3, 0);.  la
1000: 75 6e 63 68 5f 74 68 72 65 61 64 28 26 65 72 72  unch_thread(&err
1010: 2c 20 26 74 68 72 65 61 64 73 2c 20 73 74 72 65  , &threads, stre
1020: 73 73 5f 74 68 72 65 61 64 5f 33 2c 20 30 29 3b  ss_thread_3, 0);
1030: 0a 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61  ..  launch_threa
1040: 64 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73  d(&err, &threads
1050: 2c 20 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f  , stress_thread_
1060: 34 2c 20 30 29 3b 0a 20 20 6c 61 75 6e 63 68 5f  4, 0);.  launch_
1070: 74 68 72 65 61 64 28 26 65 72 72 2c 20 26 74 68  thread(&err, &th
1080: 72 65 61 64 73 2c 20 73 74 72 65 73 73 5f 74 68  reads, stress_th
1090: 72 65 61 64 5f 34 2c 20 30 29 3b 0a 0a 20 20 6c  read_4, 0);..  l
10a0: 61 75 6e 63 68 5f 74 68 72 65 61 64 28 26 65 72  aunch_thread(&er
10b0: 72 2c 20 26 74 68 72 65 61 64 73 2c 20 73 74 72  r, &threads, str
10c0: 65 73 73 5f 74 68 72 65 61 64 5f 35 2c 20 30 29  ess_thread_5, 0)
10d0: 3b 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61  ;.  launch_threa
10e0: 64 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73  d(&err, &threads
10f0: 2c 20 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f  , stress_thread_
1100: 35 2c 20 28 76 6f 69 64 2a 29 31 29 3b 0a 0a 20  5, (void*)1);.. 
1110: 20 6a 6f 69 6e 5f 61 6c 6c 5f 74 68 72 65 61 64   join_all_thread
1120: 73 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73  s(&err, &threads
1130: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65 6e 61  );.  sqlite3_ena
1140: 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
1150: 28 30 29 3b 0a 0a 20 20 70 72 69 6e 74 5f 61 6e  (0);..  print_an
1160: 64 5f 66 72 65 65 5f 65 72 72 28 26 65 72 72 29  d_free_err(&err)
1170: 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
1180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
11d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
1210: 53 74 61 72 74 20 6f 66 20 74 65 73 74 20 63 61  Start of test ca
1220: 73 65 20 22 73 74 72 65 73 73 32 22 0a 2a 2f 0a  se "stress2".*/.
1230: 0a 0a 0a 2f 2a 0a 2a 2a 20 31 2e 20 20 43 52 45  .../*.** 1.  CRE
1240: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
1250: 65 6e 74 73 2e 0a 2a 2a 20 32 2e 20 20 44 52 4f  ents..** 2.  DRO
1260: 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  P TABLE statemen
1270: 74 73 2e 0a 2a 2a 20 33 2e 20 20 53 6d 61 6c 6c  ts..** 3.  Small
1280: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1290: 74 73 2e 0a 2a 2a 20 34 2e 20 20 42 69 67 20 53  ts..** 4.  Big S
12a0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
12b0: 2e 0a 2a 2a 20 35 2e 20 20 53 6d 61 6c 6c 20 49  ..** 5.  Small I
12c0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
12d0: 2e 0a 2a 2a 20 36 2e 20 20 42 69 67 20 49 4e 53  ..** 6.  Big INS
12e0: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ERT statements..
12f0: 2a 2a 20 37 2e 20 20 53 6d 61 6c 6c 20 55 50 44  ** 7.  Small UPD
1300: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ATE statements..
1310: 2a 2a 20 38 2e 20 20 42 69 67 20 55 50 44 41 54  ** 8.  Big UPDAT
1320: 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  E statements..**
1330: 20 39 2e 20 20 53 6d 61 6c 6c 20 44 45 4c 45 54   9.  Small DELET
1340: 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  E statements..**
1350: 20 31 30 2e 20 42 69 67 20 44 45 4c 45 54 45 20   10. Big DELETE 
1360: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20 31  statements..** 1
1370: 31 2e 20 56 41 43 55 55 4d 2e 0a 2a 2a 20 31 34  1. VACUUM..** 14
1380: 2e 20 49 6e 74 65 67 72 69 74 79 2d 63 68 65 63  . Integrity-chec
1390: 6b 2e 0a 2a 2a 20 31 37 2e 20 53 77 69 74 63 68  k..** 17. Switch
13a0: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   the journal mod
13b0: 65 20 66 72 6f 6d 20 64 65 6c 65 74 65 20 74 6f  e from delete to
13c0: 20 77 61 6c 20 61 6e 64 20 62 61 63 6b 20 61 67   wal and back ag
13d0: 61 69 6e 2e 0a 2a 2a 20 31 39 2e 20 4f 70 65 6e  ain..** 19. Open
13e0: 20 61 6e 64 20 63 6c 6f 73 65 20 64 61 74 61 62   and close datab
13f0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ase connections 
1400: 72 61 70 69 64 6c 79 2e 0a 2a 2f 0a 0a 23 64 65  rapidly..*/..#de
1410: 66 69 6e 65 20 53 54 52 45 53 53 32 5f 54 41 42  fine STRESS2_TAB
1420: 43 4e 54 20 35 0a 0a 73 74 61 74 69 63 20 76 6f  CNT 5..static vo
1430: 69 64 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c  id stress2_workl
1440: 6f 61 64 31 28 45 72 72 6f 72 20 2a 70 45 72 72  oad1(Error *pErr
1450: 2c 20 53 71 6c 69 74 65 20 2a 70 44 62 2c 20 69  , Sqlite *pDb, i
1460: 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 69 54 61  nt i){.  int iTa
1470: 62 20 3d 20 28 69 20 25 20 53 54 52 45 53 53 32  b = (i % STRESS2
1480: 5f 54 41 42 43 4e 54 29 3b 0a 20 20 73 71 6c 5f  _TABCNT);.  sql_
1490: 73 63 72 69 70 74 5f 70 72 69 6e 74 66 28 70 45  script_printf(pE
14a0: 72 72 2c 20 70 44 62 2c 20 0a 20 20 20 20 20 20  rr, pDb, .      
14b0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
14c0: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 25 64 28   NOT EXISTS t%d(
14d0: 78 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79  x PRIMARY KEY, y
14e0: 2c 20 7a 29 3b 22 2c 20 69 54 61 62 0a 20 20 29  , z);", iTab.  )
14f0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64  ;.}..static void
1500: 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61   stress2_workloa
1510: 64 32 28 45 72 72 6f 72 20 2a 70 45 72 72 2c 20  d2(Error *pErr, 
1520: 53 71 6c 69 74 65 20 2a 70 44 62 2c 20 69 6e 74  Sqlite *pDb, int
1530: 20 69 29 7b 0a 20 20 69 6e 74 20 69 54 61 62 20   i){.  int iTab 
1540: 3d 20 28 69 20 25 20 53 54 52 45 53 53 32 5f 54  = (i % STRESS2_T
1550: 41 42 43 4e 54 29 3b 0a 20 20 73 71 6c 5f 73 63  ABCNT);.  sql_sc
1560: 72 69 70 74 5f 70 72 69 6e 74 66 28 70 45 72 72  ript_printf(pErr
1570: 2c 20 70 44 62 2c 20 22 44 52 4f 50 20 54 41 42  , pDb, "DROP TAB
1580: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 25 64  LE IF EXISTS t%d
1590: 3b 22 2c 20 69 54 61 62 29 3b 0a 7d 0a 0a 73 74  ;", iTab);.}..st
15a0: 61 74 69 63 20 76 6f 69 64 20 73 74 72 65 73 73  atic void stress
15b0: 32 5f 77 6f 72 6b 6c 6f 61 64 33 28 45 72 72 6f  2_workload3(Erro
15c0: 72 20 2a 70 45 72 72 2c 20 53 71 6c 69 74 65 20  r *pErr, Sqlite 
15d0: 2a 70 44 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20  *pDb, int i){.  
15e0: 69 6e 74 20 69 54 61 62 20 3d 20 28 69 20 25 20  int iTab = (i % 
15f0: 53 54 52 45 53 53 32 5f 54 41 42 43 4e 54 29 3b  STRESS2_TABCNT);
1600: 0a 20 20 73 71 6c 5f 73 63 72 69 70 74 5f 70 72  .  sql_script_pr
1610: 69 6e 74 66 28 70 45 72 72 2c 20 70 44 62 2c 20  intf(pErr, pDb, 
1620: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1630: 25 64 20 57 48 45 52 45 20 7a 20 3d 20 27 73 6d  %d WHERE z = 'sm
1640: 61 6c 6c 27 22 2c 20 69 54 61 62 29 3b 0a 7d 0a  all'", iTab);.}.
1650: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74 72  .static void str
1660: 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 34 28 45  ess2_workload4(E
1670: 72 72 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c 69  rror *pErr, Sqli
1680: 74 65 20 2a 70 44 62 2c 20 69 6e 74 20 69 29 7b  te *pDb, int i){
1690: 0a 20 20 69 6e 74 20 69 54 61 62 20 3d 20 28 69  .  int iTab = (i
16a0: 20 25 20 53 54 52 45 53 53 32 5f 54 41 42 43 4e   % STRESS2_TABCN
16b0: 54 29 3b 0a 20 20 73 71 6c 5f 73 63 72 69 70 74  T);.  sql_script
16c0: 5f 70 72 69 6e 74 66 28 70 45 72 72 2c 20 70 44  _printf(pErr, pD
16d0: 62 2c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  b, "SELECT * FRO
16e0: 4d 20 74 25 64 20 57 48 45 52 45 20 7a 20 3d 20  M t%d WHERE z = 
16f0: 27 62 69 67 27 22 2c 20 69 54 61 62 29 3b 0a 7d  'big'", iTab);.}
1700: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74  ..static void st
1710: 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 35 28  ress2_workload5(
1720: 45 72 72 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c  Error *pErr, Sql
1730: 69 74 65 20 2a 70 44 62 2c 20 69 6e 74 20 69 29  ite *pDb, int i)
1740: 7b 0a 20 20 69 6e 74 20 69 54 61 62 20 3d 20 28  {.  int iTab = (
1750: 69 20 25 20 53 54 52 45 53 53 32 5f 54 41 42 43  i % STRESS2_TABC
1760: 4e 54 29 3b 0a 20 20 73 71 6c 5f 73 63 72 69 70  NT);.  sql_scrip
1770: 74 5f 70 72 69 6e 74 66 28 70 45 72 72 2c 20 70  t_printf(pErr, p
1780: 44 62 2c 0a 20 20 20 20 20 20 22 49 4e 53 45 52  Db,.      "INSER
1790: 54 20 49 4e 54 4f 20 74 25 64 20 56 41 4c 55 45  T INTO t%d VALUE
17a0: 53 28 72 61 6e 64 6f 6d 28 29 2c 20 68 65 78 28  S(random(), hex(
17b0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 37 29 29 2c  randomblob(57)),
17c0: 20 27 73 6d 61 6c 6c 27 29 3b 22 2c 20 69 54 61   'small');", iTa
17d0: 62 0a 20 20 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  b.  );.}..static
17e0: 20 76 6f 69 64 20 73 74 72 65 73 73 32 5f 77 6f   void stress2_wo
17f0: 72 6b 6c 6f 61 64 36 28 45 72 72 6f 72 20 2a 70  rkload6(Error *p
1800: 45 72 72 2c 20 53 71 6c 69 74 65 20 2a 70 44 62  Err, Sqlite *pDb
1810: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
1820: 69 54 61 62 20 3d 20 28 69 20 25 20 53 54 52 45  iTab = (i % STRE
1830: 53 53 32 5f 54 41 42 43 4e 54 29 3b 0a 20 20 73  SS2_TABCNT);.  s
1840: 71 6c 5f 73 63 72 69 70 74 5f 70 72 69 6e 74 66  ql_script_printf
1850: 28 70 45 72 72 2c 20 70 44 62 2c 0a 20 20 20 20  (pErr, pDb,.    
1860: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
1870: 25 64 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  %d VALUES(random
1880: 28 29 2c 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c  (), hex(randombl
1890: 6f 62 28 32 30 30 30 29 29 2c 20 27 62 69 67 27  ob(2000)), 'big'
18a0: 29 3b 22 2c 20 69 54 61 62 0a 20 20 29 3b 0a 7d  );", iTab.  );.}
18b0: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74  ..static void st
18c0: 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 37 28  ress2_workload7(
18d0: 45 72 72 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c  Error *pErr, Sql
18e0: 69 74 65 20 2a 70 44 62 2c 20 69 6e 74 20 69 29  ite *pDb, int i)
18f0: 7b 0a 20 20 69 6e 74 20 69 54 61 62 20 3d 20 28  {.  int iTab = (
1900: 69 20 25 20 53 54 52 45 53 53 32 5f 54 41 42 43  i % STRESS2_TABC
1910: 4e 54 29 3b 0a 20 20 73 71 6c 5f 73 63 72 69 70  NT);.  sql_scrip
1920: 74 5f 70 72 69 6e 74 66 28 70 45 72 72 2c 20 70  t_printf(pErr, p
1930: 44 62 2c 0a 20 20 20 20 20 20 22 55 50 44 41 54  Db,.      "UPDAT
1940: 45 20 74 25 64 20 53 45 54 20 79 20 3d 20 68 65  E t%d SET y = he
1950: 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 35 37 29  x(randomblob(57)
1960: 29 20 22 0a 20 20 20 20 20 20 22 57 48 45 52 45  ) ".      "WHERE
1970: 20 28 78 20 25 25 20 35 29 3d 3d 28 25 64 20 25   (x %% 5)==(%d %
1980: 25 20 35 29 20 41 4e 44 20 7a 3d 27 73 6d 61 6c  % 5) AND z='smal
1990: 6c 27 3b 22 0a 20 20 20 20 20 20 2c 69 54 61 62  l';".      ,iTab
19a0: 2c 20 69 0a 20 20 29 3b 0a 7d 0a 73 74 61 74 69  , i.  );.}.stati
19b0: 63 20 76 6f 69 64 20 73 74 72 65 73 73 32 5f 77  c void stress2_w
19c0: 6f 72 6b 6c 6f 61 64 38 28 45 72 72 6f 72 20 2a  orkload8(Error *
19d0: 70 45 72 72 2c 20 53 71 6c 69 74 65 20 2a 70 44  pErr, Sqlite *pD
19e0: 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  b, int i){.  int
19f0: 20 69 54 61 62 20 3d 20 28 69 20 25 20 53 54 52   iTab = (i % STR
1a00: 45 53 53 32 5f 54 41 42 43 4e 54 29 3b 0a 20 20  ESS2_TABCNT);.  
1a10: 73 71 6c 5f 73 63 72 69 70 74 5f 70 72 69 6e 74  sql_script_print
1a20: 66 28 70 45 72 72 2c 20 70 44 62 2c 0a 20 20 20  f(pErr, pDb,.   
1a30: 20 20 20 22 55 50 44 41 54 45 20 74 25 64 20 53     "UPDATE t%d S
1a40: 45 54 20 79 20 3d 20 68 65 78 28 72 61 6e 64 6f  ET y = hex(rando
1a50: 6d 62 6c 6f 62 28 32 30 30 30 29 29 20 22 0a 20  mblob(2000)) ". 
1a60: 20 20 20 20 20 22 57 48 45 52 45 20 28 78 20 25       "WHERE (x %
1a70: 25 20 35 29 3d 3d 28 25 64 20 25 25 20 35 29 20  % 5)==(%d %% 5) 
1a80: 41 4e 44 20 7a 3d 27 62 69 67 27 3b 22 0a 20 20  AND z='big';".  
1a90: 20 20 20 20 2c 69 54 61 62 2c 20 69 0a 20 20 29      ,iTab, i.  )
1aa0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64  ;.}..static void
1ab0: 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61   stress2_workloa
1ac0: 64 39 28 45 72 72 6f 72 20 2a 70 45 72 72 2c 20  d9(Error *pErr, 
1ad0: 53 71 6c 69 74 65 20 2a 70 44 62 2c 20 69 6e 74  Sqlite *pDb, int
1ae0: 20 69 29 7b 0a 20 20 69 6e 74 20 69 54 61 62 20   i){.  int iTab 
1af0: 3d 20 28 69 20 25 20 53 54 52 45 53 53 32 5f 54  = (i % STRESS2_T
1b00: 41 42 43 4e 54 29 3b 0a 20 20 73 71 6c 5f 73 63  ABCNT);.  sql_sc
1b10: 72 69 70 74 5f 70 72 69 6e 74 66 28 70 45 72 72  ript_printf(pErr
1b20: 2c 20 70 44 62 2c 0a 20 20 20 20 20 20 22 44 45  , pDb,.      "DE
1b30: 4c 45 54 45 20 46 52 4f 4d 20 74 25 64 20 57 48  LETE FROM t%d WH
1b40: 45 52 45 20 28 78 20 25 25 20 35 29 3d 3d 28 25  ERE (x %% 5)==(%
1b50: 64 20 25 25 20 35 29 20 41 4e 44 20 7a 3d 27 73  d %% 5) AND z='s
1b60: 6d 61 6c 6c 27 3b 22 0a 20 20 20 20 20 20 2c 69  mall';".      ,i
1b70: 54 61 62 2c 20 69 0a 20 20 29 3b 0a 7d 0a 73 74  Tab, i.  );.}.st
1b80: 61 74 69 63 20 76 6f 69 64 20 73 74 72 65 73 73  atic void stress
1b90: 32 5f 77 6f 72 6b 6c 6f 61 64 31 30 28 45 72 72  2_workload10(Err
1ba0: 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c 69 74 65  or *pErr, Sqlite
1bb0: 20 2a 70 44 62 2c 20 69 6e 74 20 69 29 7b 0a 20   *pDb, int i){. 
1bc0: 20 69 6e 74 20 69 54 61 62 20 3d 20 28 69 20 25   int iTab = (i %
1bd0: 20 53 54 52 45 53 53 32 5f 54 41 42 43 4e 54 29   STRESS2_TABCNT)
1be0: 3b 0a 20 20 73 71 6c 5f 73 63 72 69 70 74 5f 70  ;.  sql_script_p
1bf0: 72 69 6e 74 66 28 70 45 72 72 2c 20 70 44 62 2c  rintf(pErr, pDb,
1c00: 0a 20 20 20 20 20 20 22 44 45 4c 45 54 45 20 46  .      "DELETE F
1c10: 52 4f 4d 20 74 25 64 20 57 48 45 52 45 20 28 78  ROM t%d WHERE (x
1c20: 20 25 25 20 35 29 3d 3d 28 25 64 20 25 25 20 35   %% 5)==(%d %% 5
1c30: 29 20 41 4e 44 20 7a 3d 27 62 69 67 27 3b 22 0a  ) AND z='big';".
1c40: 20 20 20 20 20 20 2c 69 54 61 62 2c 20 69 0a 20        ,iTab, i. 
1c50: 20 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f   );.}..static vo
1c60: 69 64 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c  id stress2_workl
1c70: 6f 61 64 31 31 28 45 72 72 6f 72 20 2a 70 45 72  oad11(Error *pEr
1c80: 72 2c 20 53 71 6c 69 74 65 20 2a 70 44 62 2c 20  r, Sqlite *pDb, 
1c90: 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c 5f 73 63  int i){.  sql_sc
1ca0: 72 69 70 74 28 70 45 72 72 2c 20 70 44 62 2c 20  ript(pErr, pDb, 
1cb0: 22 56 41 43 55 55 4d 22 29 3b 0a 7d 0a 0a 73 74  "VACUUM");.}..st
1cc0: 61 74 69 63 20 76 6f 69 64 20 73 74 72 65 73 73  atic void stress
1cd0: 32 5f 77 6f 72 6b 6c 6f 61 64 31 34 28 45 72 72  2_workload14(Err
1ce0: 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c 69 74 65  or *pErr, Sqlite
1cf0: 20 2a 70 44 62 2c 20 69 6e 74 20 69 29 7b 0a 20   *pDb, int i){. 
1d00: 20 73 71 6c 5f 73 63 72 69 70 74 28 70 45 72 72   sql_script(pErr
1d10: 2c 20 70 44 62 2c 20 22 50 52 41 47 4d 41 20 69  , pDb, "PRAGMA i
1d20: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 29  ntegrity_check")
1d30: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64  ;.}..static void
1d40: 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61   stress2_workloa
1d50: 64 31 37 28 45 72 72 6f 72 20 2a 70 45 72 72 2c  d17(Error *pErr,
1d60: 20 53 71 6c 69 74 65 20 2a 70 44 62 2c 20 69 6e   Sqlite *pDb, in
1d70: 74 20 69 29 7b 0a 20 20 73 71 6c 5f 73 63 72 69  t i){.  sql_scri
1d80: 70 74 5f 70 72 69 6e 74 66 28 70 45 72 72 2c 20  pt_printf(pErr, 
1d90: 70 44 62 2c 20 0a 20 20 20 20 20 20 22 50 52 41  pDb, .      "PRA
1da0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
1db0: 20 3d 20 25 71 22 2c 20 28 69 25 32 29 20 3f 20   = %q", (i%2) ? 
1dc0: 22 64 65 6c 65 74 65 22 20 3a 20 22 77 61 6c 22  "delete" : "wal"
1dd0: 0a 20 20 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  .  );.}..static 
1de0: 63 68 61 72 20 2a 73 74 72 65 73 73 32 5f 77 6f  char *stress2_wo
1df0: 72 6b 6c 6f 61 64 31 39 28 69 6e 74 20 69 54 69  rkload19(int iTi
1e00: 64 2c 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a  d, void *pArg){.
1e10: 20 20 45 72 72 6f 72 20 65 72 72 20 3d 20 7b 30    Error err = {0
1e20: 7d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  };              
1e30: 20 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20    /* Error code 
1e40: 61 6e 64 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  and message */. 
1e50: 20 53 71 6c 69 74 65 20 64 62 20 3d 20 7b 30 7d   Sqlite db = {0}
1e60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e70: 20 2f 2a 20 53 51 4c 69 74 65 20 64 61 74 61 62   /* SQLite datab
1e80: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
1e90: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1ea0: 7a 44 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  zDb = (const cha
1eb0: 72 2a 29 70 41 72 67 3b 0a 20 20 77 68 69 6c 65  r*)pArg;.  while
1ec0: 28 20 21 74 69 6d 65 74 6f 73 74 6f 70 28 26 65  ( !timetostop(&e
1ed0: 72 72 29 20 29 7b 0a 20 20 20 20 6f 70 65 6e 64  rr) ){.    opend
1ee0: 62 28 26 65 72 72 2c 20 26 64 62 2c 20 7a 44 62  b(&err, &db, zDb
1ef0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 5f 73 63  , 0);.    sql_sc
1f00: 72 69 70 74 28 26 65 72 72 2c 20 26 64 62 2c 20  ript(&err, &db, 
1f10: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  "SELECT * FROM s
1f20: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 22 29 3b  qlite_master;");
1f30: 0a 20 20 20 20 63 6c 65 61 72 5f 65 72 72 6f 72  .    clear_error
1f40: 28 26 65 72 72 2c 20 53 51 4c 49 54 45 5f 4c 4f  (&err, SQLITE_LO
1f50: 43 4b 45 44 29 3b 0a 20 20 20 20 63 6c 6f 73 65  CKED);.    close
1f60: 64 62 28 26 65 72 72 2c 20 26 64 62 29 3b 0a 20  db(&err, &db);. 
1f70: 20 7d 0a 20 20 70 72 69 6e 74 5f 61 6e 64 5f 66   }.  print_and_f
1f80: 72 65 65 5f 65 72 72 28 26 65 72 72 29 3b 0a 20  ree_err(&err);. 
1f90: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
1fa0: 6d 70 72 69 6e 74 66 28 22 6f 6b 22 29 3b 0a 7d  mprintf("ok");.}
1fb0: 0a 0a 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  ...typedef struc
1fc0: 74 20 53 74 72 65 73 73 32 43 74 78 20 53 74 72  t Stress2Ctx Str
1fd0: 65 73 73 32 43 74 78 3b 0a 73 74 72 75 63 74 20  ess2Ctx;.struct 
1fe0: 53 74 72 65 73 73 32 43 74 78 20 7b 0a 20 20 63  Stress2Ctx {.  c
1ff0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a  onst char *zDb;.
2000: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 63 29 28    void (*xProc)(
2010: 45 72 72 6f 72 2a 2c 20 53 71 6c 69 74 65 2a 2c  Error*, Sqlite*,
2020: 20 69 6e 74 29 3b 0a 7d 3b 0a 0a 73 74 61 74 69   int);.};..stati
2030: 63 20 63 68 61 72 20 2a 73 74 72 65 73 73 32 5f  c char *stress2_
2040: 74 68 72 65 61 64 5f 77 72 61 70 70 65 72 28 69  thread_wrapper(i
2050: 6e 74 20 69 54 69 64 2c 20 76 6f 69 64 20 2a 70  nt iTid, void *p
2060: 41 72 67 29 7b 0a 20 20 53 74 72 65 73 73 32 43  Arg){.  Stress2C
2070: 74 78 20 2a 70 43 74 78 20 3d 20 28 53 74 72 65  tx *pCtx = (Stre
2080: 73 73 32 43 74 78 2a 29 70 41 72 67 3b 0a 20 20  ss2Ctx*)pArg;.  
2090: 45 72 72 6f 72 20 65 72 72 20 3d 20 7b 30 7d 3b  Error err = {0};
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b0: 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20 61 6e  /* Error code an
20c0: 64 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 53  d message */.  S
20d0: 71 6c 69 74 65 20 64 62 20 3d 20 7b 30 7d 3b 20  qlite db = {0}; 
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20f0: 2a 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  * SQLite databas
2100: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
2110: 20 20 69 6e 74 20 69 31 20 3d 20 30 3b 0a 20 20    int i1 = 0;.  
2120: 69 6e 74 20 69 32 20 3d 20 30 3b 0a 0a 20 20 6f  int i2 = 0;..  o
2130: 70 65 6e 64 62 28 26 65 72 72 2c 20 26 64 62 2c  pendb(&err, &db,
2140: 20 70 43 74 78 2d 3e 7a 44 62 2c 20 30 29 3b 0a   pCtx->zDb, 0);.
2150: 20 20 77 68 69 6c 65 28 20 21 74 69 6d 65 74 6f    while( !timeto
2160: 73 74 6f 70 28 26 65 72 72 29 20 29 7b 0a 20 20  stop(&err) ){.  
2170: 20 20 70 43 74 78 2d 3e 78 50 72 6f 63 28 26 65    pCtx->xProc(&e
2180: 72 72 2c 20 26 64 62 2c 20 69 31 29 3b 0a 20 20  rr, &db, i1);.  
2190: 20 20 69 32 20 2b 3d 20 28 65 72 72 2e 72 63 3d    i2 += (err.rc=
21a0: 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 20 20 20  =SQLITE_OK);.   
21b0: 20 63 6c 65 61 72 5f 65 72 72 6f 72 28 26 65 72   clear_error(&er
21c0: 72 2c 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  r, SQLITE_LOCKED
21d0: 29 3b 0a 20 20 20 20 63 6c 65 61 72 5f 65 72 72  );.    clear_err
21e0: 6f 72 28 26 65 72 72 2c 20 53 51 4c 49 54 45 5f  or(&err, SQLITE_
21f0: 45 52 52 4f 52 29 3b 0a 20 20 20 20 69 31 2b 2b  ERROR);.    i1++
2200: 3b 0a 20 20 7d 0a 0a 20 20 70 72 69 6e 74 5f 61  ;.  }..  print_a
2210: 6e 64 5f 66 72 65 65 5f 65 72 72 28 26 65 72 72  nd_free_err(&err
2220: 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  );.  return sqli
2230: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 6f 6b 20  te3_mprintf("ok 
2240: 25 64 2f 25 64 22 2c 20 69 32 2c 20 69 31 29 3b  %d/%d", i2, i1);
2250: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .}..static void 
2260: 73 74 72 65 73 73 32 5f 6c 61 75 6e 63 68 5f 74  stress2_launch_t
2270: 68 72 65 61 64 5f 6c 6f 6f 70 28 0a 20 20 45 72  hread_loop(.  Er
2280: 72 6f 72 20 2a 70 45 72 72 2c 20 20 20 20 20 20  ror *pErr,      
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22a0: 20 49 4e 2f 4f 55 54 3a 20 45 72 72 6f 72 20 63   IN/OUT: Error c
22b0: 6f 64 65 20 2a 2f 0a 20 20 54 68 72 65 61 64 73  ode */.  Threads
22c0: 65 74 20 2a 70 54 68 72 65 61 64 73 2c 20 20 20  et *pThreads,   
22d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 72 65           /* Thre
22e0: 61 64 20 73 65 74 20 2a 2f 0a 20 20 63 6f 6e 73  ad set */.  cons
22f0: 74 20 63 68 61 72 20 2a 7a 44 62 2c 20 20 20 20  t char *zDb,    
2300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
2310: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a  atabase name */.
2320: 20 20 76 6f 69 64 20 28 2a 78 29 28 45 72 72 6f    void (*x)(Erro
2330: 72 2a 2c 53 71 6c 69 74 65 2a 2c 69 6e 74 29 20  r*,Sqlite*,int) 
2340: 20 20 2f 2a 20 52 75 6e 20 74 68 69 73 20 75 6e    /* Run this un
2350: 74 69 6c 20 65 72 72 6f 72 20 6f 72 20 74 69 6d  til error or tim
2360: 65 6f 75 74 20 2a 2f 0a 29 7b 0a 20 20 53 74 72  eout */.){.  Str
2370: 65 73 73 32 43 74 78 20 2a 70 43 74 78 20 3d 20  ess2Ctx *pCtx = 
2380: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 73  sqlite3_malloc(s
2390: 69 7a 65 6f 66 28 53 74 72 65 73 73 32 43 74 78  izeof(Stress2Ctx
23a0: 29 29 3b 0a 20 20 70 43 74 78 2d 3e 7a 44 62 20  ));.  pCtx->zDb 
23b0: 3d 20 7a 44 62 3b 0a 20 20 70 43 74 78 2d 3e 78  = zDb;.  pCtx->x
23c0: 50 72 6f 63 20 3d 20 78 3b 0a 20 20 6c 61 75 6e  Proc = x;.  laun
23d0: 63 68 5f 74 68 72 65 61 64 28 70 45 72 72 2c 20  ch_thread(pErr, 
23e0: 70 54 68 72 65 61 64 73 2c 20 73 74 72 65 73 73  pThreads, stress
23f0: 32 5f 74 68 72 65 61 64 5f 77 72 61 70 70 65 72  2_thread_wrapper
2400: 2c 20 28 76 6f 69 64 2a 29 70 43 74 78 29 3b 0a  , (void*)pCtx);.
2410: 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  }..static void s
2420: 74 72 65 73 73 32 28 69 6e 74 20 6e 4d 73 29 7b  tress2(int nMs){
2430: 0a 20 20 73 74 72 75 63 74 20 53 74 72 65 73 73  .  struct Stress
2440: 32 54 61 73 6b 20 7b 0a 20 20 20 20 76 6f 69 64  2Task {.    void
2450: 20 28 2a 78 29 28 45 72 72 6f 72 2a 2c 53 71 6c   (*x)(Error*,Sql
2460: 69 74 65 2a 2c 69 6e 74 29 3b 0a 20 20 7d 20 61  ite*,int);.  } a
2470: 54 61 73 6b 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b  Task[] = {.    {
2480: 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61   stress2_workloa
2490: 64 31 20 7d 2c 0a 20 20 20 20 7b 20 73 74 72 65  d1 },.    { stre
24a0: 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 32 20 7d 2c  ss2_workload2 },
24b0: 0a 20 20 20 20 7b 20 73 74 72 65 73 73 32 5f 77  .    { stress2_w
24c0: 6f 72 6b 6c 6f 61 64 33 20 7d 2c 0a 20 20 20 20  orkload3 },.    
24d0: 7b 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f  { stress2_worklo
24e0: 61 64 34 20 7d 2c 0a 20 20 20 20 7b 20 73 74 72  ad4 },.    { str
24f0: 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 35 20 7d  ess2_workload5 }
2500: 2c 0a 20 20 20 20 7b 20 73 74 72 65 73 73 32 5f  ,.    { stress2_
2510: 77 6f 72 6b 6c 6f 61 64 36 20 7d 2c 0a 20 20 20  workload6 },.   
2520: 20 7b 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c   { stress2_workl
2530: 6f 61 64 37 20 7d 2c 0a 20 20 20 20 7b 20 73 74  oad7 },.    { st
2540: 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 38 20  ress2_workload8 
2550: 7d 2c 0a 20 20 20 20 7b 20 73 74 72 65 73 73 32  },.    { stress2
2560: 5f 77 6f 72 6b 6c 6f 61 64 39 20 7d 2c 0a 20 20  _workload9 },.  
2570: 20 20 7b 20 73 74 72 65 73 73 32 5f 77 6f 72 6b    { stress2_work
2580: 6c 6f 61 64 31 30 20 7d 2c 0a 20 20 20 20 7b 20  load10 },.    { 
2590: 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64  stress2_workload
25a0: 31 31 20 7d 2c 0a 20 20 20 20 7b 20 73 74 72 65  11 },.    { stre
25b0: 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 31 34 20 7d  ss2_workload14 }
25c0: 2c 0a 20 20 20 20 7b 20 73 74 72 65 73 73 32 5f  ,.    { stress2_
25d0: 77 6f 72 6b 6c 6f 61 64 31 37 20 7d 2c 0a 20 20  workload17 },.  
25e0: 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  };.  const char 
25f0: 2a 61 7a 44 62 5b 5d 20 3d 20 7b 0a 20 20 20 20  *azDb[] = {.    
2600: 22 74 65 73 74 2e 64 62 22 2c 0a 20 20 20 20 22  "test.db",.    "
2610: 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 3f 63 61  file::memory:?ca
2620: 63 68 65 3d 73 68 61 72 65 64 22 0a 20 20 7d 3b  che=shared".  };
2630: 0a 20 20 69 6e 74 20 6a 3b 0a 0a 20 20 66 6f 72  .  int j;..  for
2640: 28 6a 3d 30 3b 20 6a 3c 73 69 7a 65 6f 66 28 61  (j=0; j<sizeof(a
2650: 7a 44 62 29 2f 73 69 7a 65 6f 66 28 61 7a 44 62  zDb)/sizeof(azDb
2660: 5b 30 5d 29 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  [0]); j++){.    
2670: 69 6e 74 20 69 3b 0a 20 20 20 20 45 72 72 6f 72  int i;.    Error
2680: 20 65 72 72 20 3d 20 7b 30 7d 3b 0a 20 20 20 20   err = {0};.    
2690: 53 71 6c 69 74 65 20 64 62 20 3d 20 7b 30 7d 3b  Sqlite db = {0};
26a0: 0a 20 20 20 20 54 68 72 65 61 64 73 65 74 20 74  .    Threadset t
26b0: 68 72 65 61 64 73 20 3d 20 7b 30 7d 3b 0a 20 20  hreads = {0};.  
26c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
26d0: 62 20 3d 20 61 7a 44 62 5b 6a 5d 3b 0a 0a 20 20  b = azDb[j];..  
26e0: 20 20 2f 2a 20 54 6f 20 6d 61 6b 65 20 73 75 72    /* To make sur
26f0: 65 20 74 68 65 20 64 62 20 66 69 6c 65 20 69 73  e the db file is
2700: 20 65 6d 70 74 79 20 62 65 66 6f 72 65 20 63 6f   empty before co
2710: 6d 6d 65 6e 63 69 6e 67 20 2a 2f 0a 20 20 20 20  mmencing */.    
2720: 6f 70 65 6e 64 62 28 26 65 72 72 2c 20 26 64 62  opendb(&err, &db
2730: 2c 20 7a 44 62 2c 20 31 29 3b 0a 20 20 20 20 63  , zDb, 1);.    c
2740: 6c 6f 73 65 64 62 28 26 65 72 72 2c 20 26 64 62  losedb(&err, &db
2750: 29 3b 0a 0a 20 20 20 20 73 65 74 73 74 6f 70 74  );..    setstopt
2760: 69 6d 65 28 26 65 72 72 2c 20 6e 4d 73 29 3b 0a  ime(&err, nMs);.
2770: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62      sqlite3_enab
2780: 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28  le_shared_cache(
2790: 31 29 3b 0a 0a 20 20 20 20 66 6f 72 28 69 3d 30  1);..    for(i=0
27a0: 3b 20 69 3c 73 69 7a 65 6f 66 28 61 54 61 73 6b  ; i<sizeof(aTask
27b0: 29 2f 73 69 7a 65 6f 66 28 61 54 61 73 6b 5b 30  )/sizeof(aTask[0
27c0: 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); i++){.      
27d0: 73 74 72 65 73 73 32 5f 6c 61 75 6e 63 68 5f 74  stress2_launch_t
27e0: 68 72 65 61 64 5f 6c 6f 6f 70 28 26 65 72 72 2c  hread_loop(&err,
27f0: 20 26 74 68 72 65 61 64 73 2c 20 7a 44 62 2c 20   &threads, zDb, 
2800: 61 54 61 73 6b 5b 69 5d 2e 78 29 3b 0a 20 20 20  aTask[i].x);.   
2810: 20 7d 0a 20 20 20 20 6c 61 75 6e 63 68 5f 74 68   }.    launch_th
2820: 72 65 61 64 28 26 65 72 72 2c 20 26 74 68 72 65  read(&err, &thre
2830: 61 64 73 2c 20 73 74 72 65 73 73 32 5f 77 6f 72  ads, stress2_wor
2840: 6b 6c 6f 61 64 31 39 2c 20 28 76 6f 69 64 2a 29  kload19, (void*)
2850: 7a 44 62 29 3b 0a 20 20 20 20 6c 61 75 6e 63 68  zDb);.    launch
2860: 5f 74 68 72 65 61 64 28 26 65 72 72 2c 20 26 74  _thread(&err, &t
2870: 68 72 65 61 64 73 2c 20 73 74 72 65 73 73 32 5f  hreads, stress2_
2880: 77 6f 72 6b 6c 6f 61 64 31 39 2c 20 28 76 6f 69  workload19, (voi
2890: 64 2a 29 7a 44 62 29 3b 0a 0a 20 20 20 20 6a 6f  d*)zDb);..    jo
28a0: 69 6e 5f 61 6c 6c 5f 74 68 72 65 61 64 73 28 26  in_all_threads(&
28b0: 65 72 72 2c 20 26 74 68 72 65 61 64 73 29 3b 0a  err, &threads);.
28c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62      sqlite3_enab
28d0: 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28  le_shared_cache(
28e0: 30 29 3b 0a 20 20 20 20 70 72 69 6e 74 5f 61 6e  0);.    print_an
28f0: 64 5f 66 72 65 65 5f 65 72 72 28 26 65 72 72 29  d_free_err(&err)
2900: 3b 0a 20 20 20 20 69 66 28 20 6a 3d 3d 30 20 29  ;.    if( j==0 )
2910: 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22  {.      printf("
2920: 52 75 6e 6e 69 6e 67 20 73 74 72 65 73 73 32 20  Running stress2 
2930: 28 61 67 61 69 6e 2c 20 77 69 74 68 20 69 6e 2d  (again, with in-
2940: 6d 65 6d 6f 72 79 20 64 62 29 20 66 6f 72 20 25  memory db) for %
2950: 64 20 73 65 63 6f 6e 64 73 2e 2e 2e 5c 6e 22 2c  d seconds...\n",
2960: 0a 20 20 20 20 20 20 20 20 20 20 6e 4d 73 20 2f  .          nMs /
2970: 20 31 30 30 30 0a 20 20 20 20 20 20 29 3b 0a 20   1000.      );. 
2980: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 0a 0a 0a        }.  }.}.....