/ Hex Artifact Content
Login

Artifact c57d804716165811d979d4a719e05baccd79277f:


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 7d 0a 20 20 63 6c 6f 73 65 64  D);.  }.  closed
0dd0: 62 28 26 65 72 72 2c 20 26 64 62 29 3b 0a 20 20  b(&err, &db);.  
0de0: 70 72 69 6e 74 5f 61 6e 64 5f 66 72 65 65 5f 65  print_and_free_e
0df0: 72 72 28 26 65 72 72 29 3b 0a 20 20 72 65 74 75  rr(&err);.  retu
0e00: 72 6e 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  rn sqlite3_mprin
0e10: 74 66 28 22 64 65 6c 65 74 65 64 20 66 72 6f 6d  tf("deleted from
0e20: 20 74 31 20 25 64 2f 25 64 20 61 74 74 65 6d 70   t1 %d/%d attemp
0e30: 74 73 22 2c 20 69 32 2c 20 69 31 29 3b 0a 7d 0a  ts", i2, i1);.}.
0e40: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74  ..static void st
0e50: 72 65 73 73 31 28 69 6e 74 20 6e 4d 73 29 7b 0a  ress1(int nMs){.
0e60: 20 20 45 72 72 6f 72 20 65 72 72 20 3d 20 7b 30    Error err = {0
0e70: 7d 3b 0a 20 20 54 68 72 65 61 64 73 65 74 20 74  };.  Threadset t
0e80: 68 72 65 61 64 73 20 3d 20 7b 30 7d 3b 0a 0a 20  hreads = {0};.. 
0e90: 20 73 65 74 73 74 6f 70 74 69 6d 65 28 26 65 72   setstoptime(&er
0ea0: 72 2c 20 6e 4d 73 29 3b 0a 20 20 73 71 6c 69 74  r, nMs);.  sqlit
0eb0: 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
0ec0: 5f 63 61 63 68 65 28 31 29 3b 0a 0a 20 20 6c 61  _cache(1);..  la
0ed0: 75 6e 63 68 5f 74 68 72 65 61 64 28 26 65 72 72  unch_thread(&err
0ee0: 2c 20 26 74 68 72 65 61 64 73 2c 20 73 74 72 65  , &threads, stre
0ef0: 73 73 5f 74 68 72 65 61 64 5f 31 2c 20 30 29 3b  ss_thread_1, 0);
0f00: 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61 64  .  launch_thread
0f10: 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73 2c  (&err, &threads,
0f20: 20 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f 31   stress_thread_1
0f30: 2c 20 30 29 3b 0a 0a 20 20 6c 61 75 6e 63 68 5f  , 0);..  launch_
0f40: 74 68 72 65 61 64 28 26 65 72 72 2c 20 26 74 68  thread(&err, &th
0f50: 72 65 61 64 73 2c 20 73 74 72 65 73 73 5f 74 68  reads, stress_th
0f60: 72 65 61 64 5f 32 2c 20 30 29 3b 0a 20 20 6c 61  read_2, 0);.  la
0f70: 75 6e 63 68 5f 74 68 72 65 61 64 28 26 65 72 72  unch_thread(&err
0f80: 2c 20 26 74 68 72 65 61 64 73 2c 20 73 74 72 65  , &threads, stre
0f90: 73 73 5f 74 68 72 65 61 64 5f 32 2c 20 30 29 3b  ss_thread_2, 0);
0fa0: 0a 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61  ..  launch_threa
0fb0: 64 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73  d(&err, &threads
0fc0: 2c 20 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f  , stress_thread_
0fd0: 33 2c 20 30 29 3b 0a 20 20 6c 61 75 6e 63 68 5f  3, 0);.  launch_
0fe0: 74 68 72 65 61 64 28 26 65 72 72 2c 20 26 74 68  thread(&err, &th
0ff0: 72 65 61 64 73 2c 20 73 74 72 65 73 73 5f 74 68  reads, stress_th
1000: 72 65 61 64 5f 33 2c 20 30 29 3b 0a 0a 20 20 6c  read_3, 0);..  l
1010: 61 75 6e 63 68 5f 74 68 72 65 61 64 28 26 65 72  aunch_thread(&er
1020: 72 2c 20 26 74 68 72 65 61 64 73 2c 20 73 74 72  r, &threads, str
1030: 65 73 73 5f 74 68 72 65 61 64 5f 34 2c 20 30 29  ess_thread_4, 0)
1040: 3b 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61  ;.  launch_threa
1050: 64 28 26 65 72 72 2c 20 26 74 68 72 65 61 64 73  d(&err, &threads
1060: 2c 20 73 74 72 65 73 73 5f 74 68 72 65 61 64 5f  , stress_thread_
1070: 34 2c 20 30 29 3b 0a 0a 20 20 6c 61 75 6e 63 68  4, 0);..  launch
1080: 5f 74 68 72 65 61 64 28 26 65 72 72 2c 20 26 74  _thread(&err, &t
1090: 68 72 65 61 64 73 2c 20 73 74 72 65 73 73 5f 74  hreads, stress_t
10a0: 68 72 65 61 64 5f 35 2c 20 30 29 3b 0a 20 20 6c  hread_5, 0);.  l
10b0: 61 75 6e 63 68 5f 74 68 72 65 61 64 28 26 65 72  aunch_thread(&er
10c0: 72 2c 20 26 74 68 72 65 61 64 73 2c 20 73 74 72  r, &threads, str
10d0: 65 73 73 5f 74 68 72 65 61 64 5f 35 2c 20 28 76  ess_thread_5, (v
10e0: 6f 69 64 2a 29 31 29 3b 0a 0a 20 20 6a 6f 69 6e  oid*)1);..  join
10f0: 5f 61 6c 6c 5f 74 68 72 65 61 64 73 28 26 65 72  _all_threads(&er
1100: 72 2c 20 26 74 68 72 65 61 64 73 29 3b 0a 20 20  r, &threads);.  
1110: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
1120: 68 61 72 65 64 5f 63 61 63 68 65 28 30 29 3b 0a  hared_cache(0);.
1130: 0a 20 20 70 72 69 6e 74 5f 61 6e 64 5f 66 72 65  .  print_and_fre
1140: 65 5f 65 72 72 28 26 65 72 72 29 3b 0a 7d 0a 0a  e_err(&err);.}..
1150: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
1160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1170: 2a 2a 2a 2a 2a 2a 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 0a 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: 2a 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 0a 2a 2a 20 53 74 61 72 74  *******.** Start
11f0: 20 6f 66 20 74 65 73 74 20 63 61 73 65 20 22 73   of test case "s
1200: 74 72 65 73 73 32 22 0a 2a 2f 0a 0a 0a 0a 2f 2a  tress2".*/..../*
1210: 0a 2a 2a 20 31 2e 20 20 43 52 45 41 54 45 20 54  .** 1.  CREATE T
1220: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 2e  ABLE statements.
1230: 0a 2a 2a 20 32 2e 20 20 44 52 4f 50 20 54 41 42  .** 2.  DROP TAB
1240: 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  LE statements..*
1250: 2a 20 33 2e 20 20 53 6d 61 6c 6c 20 53 45 4c 45  * 3.  Small SELE
1260: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  CT statements..*
1270: 2a 20 34 2e 20 20 42 69 67 20 53 45 4c 45 43 54  * 4.  Big SELECT
1280: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20   statements..** 
1290: 35 2e 20 20 53 6d 61 6c 6c 20 49 4e 53 45 52 54  5.  Small INSERT
12a0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20   statements..** 
12b0: 36 2e 20 20 42 69 67 20 49 4e 53 45 52 54 20 73  6.  Big INSERT s
12c0: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20 37 2e  tatements..** 7.
12d0: 20 20 53 6d 61 6c 6c 20 55 50 44 41 54 45 20 73    Small UPDATE s
12e0: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20 38 2e  tatements..** 8.
12f0: 20 20 42 69 67 20 55 50 44 41 54 45 20 73 74 61    Big UPDATE sta
1300: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20 39 2e 20 20  tements..** 9.  
1310: 53 6d 61 6c 6c 20 44 45 4c 45 54 45 20 73 74 61  Small DELETE sta
1320: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 20 31 30 2e 20  tements..** 10. 
1330: 42 69 67 20 44 45 4c 45 54 45 20 73 74 61 74 65  Big DELETE state
1340: 6d 65 6e 74 73 2e 0a 2a 2a 20 31 31 2e 20 56 41  ments..** 11. VA
1350: 43 55 55 4d 2e 0a 2a 2a 20 31 34 2e 20 49 6e 74  CUUM..** 14. Int
1360: 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 2a 2a  egrity-check..**
1370: 20 31 37 2e 20 53 77 69 74 63 68 20 74 68 65 20   17. Switch the 
1380: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 66 72 6f  journal mode fro
1390: 6d 20 64 65 6c 65 74 65 20 74 6f 20 77 61 6c 20  m delete to wal 
13a0: 61 6e 64 20 62 61 63 6b 20 61 67 61 69 6e 2e 0a  and back again..
13b0: 2a 2a 20 31 39 2e 20 4f 70 65 6e 20 61 6e 64 20  ** 19. Open and 
13c0: 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 20 63  close database c
13d0: 6f 6e 6e 65 63 74 69 6f 6e 73 20 72 61 70 69 64  onnections rapid
13e0: 6c 79 2e 0a 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ly..*/..#define 
13f0: 53 54 52 45 53 53 32 5f 54 41 42 43 4e 54 20 35  STRESS2_TABCNT 5
1400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 75            /* cou
1410: 6e 74 31 20 69 6e 20 53 44 53 20 74 65 73 74 20  nt1 in SDS test 
1420: 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 53 54 52 45  */..#define STRE
1430: 53 53 32 5f 43 4f 55 4e 54 32 20 32 30 30 20 20  SS2_COUNT2 200  
1440: 20 20 20 20 20 20 2f 2a 20 63 6f 75 6e 74 32 20        /* count2 
1450: 69 6e 20 53 44 53 20 74 65 73 74 20 2a 2f 0a 23  in SDS test */.#
1460: 64 65 66 69 6e 65 20 53 54 52 45 53 53 32 5f 43  define STRESS2_C
1470: 4f 55 4e 54 33 20 20 35 37 20 20 20 20 20 20 20  OUNT3  57       
1480: 20 2f 2a 20 63 6f 75 6e 74 32 20 69 6e 20 53 44   /* count2 in SD
1490: 53 20 74 65 73 74 20 2a 2f 0a 0a 73 74 61 74 69  S test */..stati
14a0: 63 20 76 6f 69 64 20 73 74 72 65 73 73 32 5f 77  c void stress2_w
14b0: 6f 72 6b 6c 6f 61 64 31 28 45 72 72 6f 72 20 2a  orkload1(Error *
14c0: 70 45 72 72 2c 20 53 71 6c 69 74 65 20 2a 70 44  pErr, Sqlite *pD
14d0: 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  b, int i){.  int
14e0: 20 69 54 61 62 20 3d 20 28 69 20 25 20 28 53 54   iTab = (i % (ST
14f0: 52 45 53 53 32 5f 54 41 42 43 4e 54 2d 31 29 29  RESS2_TABCNT-1))
1500: 20 2b 20 31 3b 0a 20 20 73 71 6c 5f 73 63 72 69   + 1;.  sql_scri
1510: 70 74 5f 70 72 69 6e 74 66 28 70 45 72 72 2c 20  pt_printf(pErr, 
1520: 70 44 62 2c 20 0a 20 20 20 20 20 20 22 43 52 45  pDb, .      "CRE
1530: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
1540: 20 45 58 49 53 54 53 20 74 25 64 28 78 20 50 52   EXISTS t%d(x PR
1550: 49 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29  IMARY KEY, y, z)
1560: 3b 22 2c 20 69 54 61 62 0a 20 20 29 3b 0a 7d 0a  ;", iTab.  );.}.
1570: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74 72  .static void str
1580: 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 32 28 45  ess2_workload2(E
1590: 72 72 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c 69  rror *pErr, Sqli
15a0: 74 65 20 2a 70 44 62 2c 20 69 6e 74 20 69 29 7b  te *pDb, int i){
15b0: 0a 20 20 69 6e 74 20 69 54 61 62 20 3d 20 28 69  .  int iTab = (i
15c0: 20 25 20 28 53 54 52 45 53 53 32 5f 54 41 42 43   % (STRESS2_TABC
15d0: 4e 54 2d 31 29 29 20 2b 20 31 3b 0a 20 20 73 71  NT-1)) + 1;.  sq
15e0: 6c 5f 73 63 72 69 70 74 5f 70 72 69 6e 74 66 28  l_script_printf(
15f0: 70 45 72 72 2c 20 70 44 62 2c 20 22 44 52 4f 50  pErr, pDb, "DROP
1600: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
1610: 20 74 25 64 3b 22 2c 20 69 54 61 62 29 3b 0a 7d   t%d;", iTab);.}
1620: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74  ..static void st
1630: 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 33 28  ress2_workload3(
1640: 45 72 72 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c  Error *pErr, Sql
1650: 69 74 65 20 2a 70 44 62 2c 20 69 6e 74 20 69 29  ite *pDb, int i)
1660: 7b 0a 20 20 73 71 6c 5f 73 63 72 69 70 74 28 70  {.  sql_script(p
1670: 45 72 72 2c 20 70 44 62 2c 20 22 53 45 4c 45 43  Err, pDb, "SELEC
1680: 54 20 2a 20 46 52 4f 4d 20 74 30 20 57 48 45 52  T * FROM t0 WHER
1690: 45 20 7a 20 3d 20 27 73 6d 61 6c 6c 27 22 29 3b  E z = 'small'");
16a0: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .}..static void 
16b0: 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64  stress2_workload
16c0: 34 28 45 72 72 6f 72 20 2a 70 45 72 72 2c 20 53  4(Error *pErr, S
16d0: 71 6c 69 74 65 20 2a 70 44 62 2c 20 69 6e 74 20  qlite *pDb, int 
16e0: 69 29 7b 0a 20 20 73 71 6c 5f 73 63 72 69 70 74  i){.  sql_script
16f0: 28 70 45 72 72 2c 20 70 44 62 2c 20 22 53 45 4c  (pErr, pDb, "SEL
1700: 45 43 54 20 2a 20 46 52 4f 4d 20 74 30 20 57 48  ECT * FROM t0 WH
1710: 45 52 45 20 7a 20 3d 20 27 62 69 67 27 22 29 3b  ERE z = 'big'");
1720: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .}..static void 
1730: 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64  stress2_workload
1740: 35 28 45 72 72 6f 72 20 2a 70 45 72 72 2c 20 53  5(Error *pErr, S
1750: 71 6c 69 74 65 20 2a 70 44 62 2c 20 69 6e 74 20  qlite *pDb, int 
1760: 69 29 7b 0a 20 20 73 71 6c 5f 73 63 72 69 70 74  i){.  sql_script
1770: 28 70 45 72 72 2c 20 70 44 62 2c 0a 20 20 20 20  (pErr, pDb,.    
1780: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
1790: 30 20 56 41 4c 55 45 53 28 68 65 78 28 72 61 6e  0 VALUES(hex(ran
17a0: 64 6f 6d 28 29 29 2c 20 68 65 78 28 72 61 6e 64  dom()), hex(rand
17b0: 6f 6d 62 6c 6f 62 28 32 30 30 29 29 2c 20 27 73  omblob(200)), 's
17c0: 6d 61 6c 6c 27 29 3b 22 0a 20 20 29 3b 0a 7d 0a  mall');".  );.}.
17d0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74 72  .static void str
17e0: 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 36 28 45  ess2_workload6(E
17f0: 72 72 6f 72 20 2a 70 45 72 72 2c 20 53 71 6c 69  rror *pErr, Sqli
1800: 74 65 20 2a 70 44 62 2c 20 69 6e 74 20 69 29 7b  te *pDb, int i){
1810: 0a 20 20 73 71 6c 5f 73 63 72 69 70 74 28 70 45  .  sql_script(pE
1820: 72 72 2c 20 70 44 62 2c 0a 20 20 20 20 20 20 22  rr, pDb,.      "
1830: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 30 20 56  INSERT INTO t0 V
1840: 41 4c 55 45 53 28 68 65 78 28 72 61 6e 64 6f 6d  ALUES(hex(random
1850: 28 29 29 2c 20 68 65 78 28 72 61 6e 64 6f 6d 62  ()), hex(randomb
1860: 6c 6f 62 28 35 37 29 29 2c 20 27 62 69 67 27 29  lob(57)), 'big')
1870: 3b 22 0a 20 20 29 3b 0a 7d 0a 0a 73 74 61 74 69  ;".  );.}..stati
1880: 63 20 76 6f 69 64 20 73 74 72 65 73 73 32 5f 77  c void stress2_w
1890: 6f 72 6b 6c 6f 61 64 37 28 45 72 72 6f 72 20 2a  orkload7(Error *
18a0: 70 45 72 72 2c 20 53 71 6c 69 74 65 20 2a 70 44  pErr, Sqlite *pD
18b0: 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c  b, int i){.  sql
18c0: 5f 73 63 72 69 70 74 5f 70 72 69 6e 74 66 28 70  _script_printf(p
18d0: 45 72 72 2c 20 70 44 62 2c 0a 20 20 20 20 20 20  Err, pDb,.      
18e0: 22 55 50 44 41 54 45 20 74 30 20 53 45 54 20 79  "UPDATE t0 SET y
18f0: 20 3d 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f   = hex(randomblo
1900: 62 28 32 30 30 29 29 20 22 0a 20 20 20 20 20 20  b(200)) ".      
1910: 22 57 48 45 52 45 20 78 20 4c 49 4b 45 20 68 65  "WHERE x LIKE he
1920: 78 28 28 25 64 20 25 25 20 35 29 29 20 41 4e 44  x((%d %% 5)) AND
1930: 20 7a 3d 27 73 6d 61 6c 6c 27 3b 22 0a 20 20 20   z='small';".   
1940: 20 20 20 2c 69 0a 20 20 29 3b 0a 7d 0a 73 74 61     ,i.  );.}.sta
1950: 74 69 63 20 76 6f 69 64 20 73 74 72 65 73 73 32  tic void stress2
1960: 5f 77 6f 72 6b 6c 6f 61 64 38 28 45 72 72 6f 72  _workload8(Error
1970: 20 2a 70 45 72 72 2c 20 53 71 6c 69 74 65 20 2a   *pErr, Sqlite *
1980: 70 44 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20 73  pDb, int i){.  s
1990: 71 6c 5f 73 63 72 69 70 74 5f 70 72 69 6e 74 66  ql_script_printf
19a0: 28 70 45 72 72 2c 20 70 44 62 2c 0a 20 20 20 20  (pErr, pDb,.    
19b0: 20 20 22 55 50 44 41 54 45 20 74 30 20 53 45 54    "UPDATE t0 SET
19c0: 20 79 20 3d 20 68 65 78 28 72 61 6e 64 6f 6d 62   y = hex(randomb
19d0: 6c 6f 62 28 35 37 29 29 20 22 0a 20 20 20 20 20  lob(57)) ".     
19e0: 20 22 57 48 45 52 45 20 78 20 4c 49 4b 45 20 68   "WHERE x LIKE h
19f0: 65 78 28 25 64 20 25 25 20 35 29 20 41 4e 44 20  ex(%d %% 5) AND 
1a00: 7a 3d 27 62 69 67 27 3b 22 0a 20 20 20 20 20 20  z='big';".      
1a10: 2c 69 0a 20 20 29 3b 0a 7d 0a 0a 73 74 61 74 69  ,i.  );.}..stati
1a20: 63 20 76 6f 69 64 20 73 74 72 65 73 73 32 5f 77  c void stress2_w
1a30: 6f 72 6b 6c 6f 61 64 39 28 45 72 72 6f 72 20 2a  orkload9(Error *
1a40: 70 45 72 72 2c 20 53 71 6c 69 74 65 20 2a 70 44  pErr, Sqlite *pD
1a50: 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c  b, int i){.  sql
1a60: 5f 73 63 72 69 70 74 5f 70 72 69 6e 74 66 28 70  _script_printf(p
1a70: 45 72 72 2c 20 70 44 62 2c 0a 20 20 20 20 20 20  Err, pDb,.      
1a80: 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 30 20  "DELETE FROM t0 
1a90: 57 48 45 52 45 20 78 20 4c 49 4b 45 20 68 65 78  WHERE x LIKE hex
1aa0: 28 25 64 20 25 25 20 35 29 20 41 4e 44 20 7a 3d  (%d %% 5) AND z=
1ab0: 27 73 6d 61 6c 6c 27 3b 22 2c 20 69 0a 20 20 29  'small';", i.  )
1ac0: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
1ad0: 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64  stress2_workload
1ae0: 31 30 28 45 72 72 6f 72 20 2a 70 45 72 72 2c 20  10(Error *pErr, 
1af0: 53 71 6c 69 74 65 20 2a 70 44 62 2c 20 69 6e 74  Sqlite *pDb, int
1b00: 20 69 29 7b 0a 20 20 73 71 6c 5f 73 63 72 69 70   i){.  sql_scrip
1b10: 74 5f 70 72 69 6e 74 66 28 70 45 72 72 2c 20 70  t_printf(pErr, p
1b20: 44 62 2c 0a 20 20 20 20 20 20 22 44 45 4c 45 54  Db,.      "DELET
1b30: 45 20 46 52 4f 4d 20 74 30 20 57 48 45 52 45 20  E FROM t0 WHERE 
1b40: 78 20 4c 49 4b 45 20 68 65 78 28 25 64 20 25 25  x LIKE hex(%d %%
1b50: 20 35 29 20 41 4e 44 20 7a 3d 27 62 69 67 27 3b   5) AND z='big';
1b60: 22 2c 20 69 0a 20 20 29 3b 0a 7d 0a 0a 73 74 61  ", i.  );.}..sta
1b70: 74 69 63 20 76 6f 69 64 20 73 74 72 65 73 73 32  tic void stress2
1b80: 5f 77 6f 72 6b 6c 6f 61 64 31 31 28 45 72 72 6f  _workload11(Erro
1b90: 72 20 2a 70 45 72 72 2c 20 53 71 6c 69 74 65 20  r *pErr, Sqlite 
1ba0: 2a 70 44 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20  *pDb, int i){.  
1bb0: 73 71 6c 5f 73 63 72 69 70 74 28 70 45 72 72 2c  sql_script(pErr,
1bc0: 20 70 44 62 2c 20 22 56 41 43 55 55 4d 22 29 3b   pDb, "VACUUM");
1bd0: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .}..static void 
1be0: 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64  stress2_workload
1bf0: 31 34 28 45 72 72 6f 72 20 2a 70 45 72 72 2c 20  14(Error *pErr, 
1c00: 53 71 6c 69 74 65 20 2a 70 44 62 2c 20 69 6e 74  Sqlite *pDb, int
1c10: 20 69 29 7b 0a 20 20 73 71 6c 5f 73 63 72 69 70   i){.  sql_scrip
1c20: 74 28 70 45 72 72 2c 20 70 44 62 2c 20 22 50 52  t(pErr, pDb, "PR
1c30: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
1c40: 68 65 63 6b 22 29 3b 0a 7d 0a 0a 73 74 61 74 69  heck");.}..stati
1c50: 63 20 76 6f 69 64 20 73 74 72 65 73 73 32 5f 77  c void stress2_w
1c60: 6f 72 6b 6c 6f 61 64 31 37 28 45 72 72 6f 72 20  orkload17(Error 
1c70: 2a 70 45 72 72 2c 20 53 71 6c 69 74 65 20 2a 70  *pErr, Sqlite *p
1c80: 44 62 2c 20 69 6e 74 20 69 29 7b 0a 20 20 73 71  Db, int i){.  sq
1c90: 6c 5f 73 63 72 69 70 74 5f 70 72 69 6e 74 66 28  l_script_printf(
1ca0: 70 45 72 72 2c 20 70 44 62 2c 20 0a 20 20 20 20  pErr, pDb, .    
1cb0: 20 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61    "PRAGMA journa
1cc0: 6c 5f 6d 6f 64 65 20 3d 20 25 71 22 2c 20 28 69  l_mode = %q", (i
1cd0: 25 32 29 20 3f 20 22 64 65 6c 65 74 65 22 20 3a  %2) ? "delete" :
1ce0: 20 22 77 61 6c 22 0a 20 20 29 3b 0a 7d 0a 0a 73   "wal".  );.}..s
1cf0: 74 61 74 69 63 20 63 68 61 72 20 2a 73 74 72 65  tatic char *stre
1d00: 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 31 39 28 69  ss2_workload19(i
1d10: 6e 74 20 69 54 69 64 2c 20 76 6f 69 64 20 2a 70  nt iTid, void *p
1d20: 41 72 67 29 7b 0a 20 20 45 72 72 6f 72 20 65 72  Arg){.  Error er
1d30: 72 20 3d 20 7b 30 7d 3b 20 20 20 20 20 20 20 20  r = {0};        
1d40: 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
1d50: 20 63 6f 64 65 20 61 6e 64 20 6d 65 73 73 61 67   code and messag
1d60: 65 20 2a 2f 0a 20 20 53 71 6c 69 74 65 20 64 62  e */.  Sqlite db
1d70: 20 3d 20 7b 30 7d 3b 20 20 20 20 20 20 20 20 20   = {0};         
1d80: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 69 74 65         /* SQLite
1d90: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1da0: 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tion */.  const 
1db0: 63 68 61 72 20 2a 7a 44 62 20 3d 20 28 63 6f 6e  char *zDb = (con
1dc0: 73 74 20 63 68 61 72 2a 29 70 41 72 67 3b 0a 20  st char*)pArg;. 
1dd0: 20 77 68 69 6c 65 28 20 21 74 69 6d 65 74 6f 73   while( !timetos
1de0: 74 6f 70 28 26 65 72 72 29 20 29 7b 0a 20 20 20  top(&err) ){.   
1df0: 20 6f 70 65 6e 64 62 28 26 65 72 72 2c 20 26 64   opendb(&err, &d
1e00: 62 2c 20 7a 44 62 2c 20 30 29 3b 0a 20 20 20 20  b, zDb, 0);.    
1e10: 73 71 6c 5f 73 63 72 69 70 74 28 26 65 72 72 2c  sql_script(&err,
1e20: 20 26 64 62 2c 20 22 53 45 4c 45 43 54 20 2a 20   &db, "SELECT * 
1e30: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1e40: 65 72 3b 22 29 3b 0a 20 20 20 20 63 6c 65 61 72  er;");.    clear
1e50: 5f 65 72 72 6f 72 28 26 65 72 72 2c 20 53 51 4c  _error(&err, SQL
1e60: 49 54 45 5f 4c 4f 43 4b 45 44 29 3b 0a 20 20 20  ITE_LOCKED);.   
1e70: 20 63 6c 6f 73 65 64 62 28 26 65 72 72 2c 20 26   closedb(&err, &
1e80: 64 62 29 3b 0a 20 20 7d 0a 20 20 70 72 69 6e 74  db);.  }.  print
1e90: 5f 61 6e 64 5f 66 72 65 65 5f 65 72 72 28 26 65  _and_free_err(&e
1ea0: 72 72 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71  rr);.  return sq
1eb0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 6f  lite3_mprintf("o
1ec0: 6b 22 29 3b 0a 7d 0a 0a 0a 74 79 70 65 64 65 66  k");.}...typedef
1ed0: 20 73 74 72 75 63 74 20 53 74 72 65 73 73 32 43   struct Stress2C
1ee0: 74 78 20 53 74 72 65 73 73 32 43 74 78 3b 0a 73  tx Stress2Ctx;.s
1ef0: 74 72 75 63 74 20 53 74 72 65 73 73 32 43 74 78  truct Stress2Ctx
1f00: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1f10: 2a 7a 44 62 3b 0a 20 20 76 6f 69 64 20 28 2a 78  *zDb;.  void (*x
1f20: 50 72 6f 63 29 28 45 72 72 6f 72 2a 2c 20 53 71  Proc)(Error*, Sq
1f30: 6c 69 74 65 2a 2c 20 69 6e 74 29 3b 0a 7d 3b 0a  lite*, int);.};.
1f40: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 74  .static char *st
1f50: 72 65 73 73 32 5f 74 68 72 65 61 64 5f 77 72 61  ress2_thread_wra
1f60: 70 70 65 72 28 69 6e 74 20 69 54 69 64 2c 20 76  pper(int iTid, v
1f70: 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 53 74  oid *pArg){.  St
1f80: 72 65 73 73 32 43 74 78 20 2a 70 43 74 78 20 3d  ress2Ctx *pCtx =
1f90: 20 28 53 74 72 65 73 73 32 43 74 78 2a 29 70 41   (Stress2Ctx*)pA
1fa0: 72 67 3b 0a 20 20 45 72 72 6f 72 20 65 72 72 20  rg;.  Error err 
1fb0: 3d 20 7b 30 7d 3b 20 20 20 20 20 20 20 20 20 20  = {0};          
1fc0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 63        /* Error c
1fd0: 6f 64 65 20 61 6e 64 20 6d 65 73 73 61 67 65 20  ode and message 
1fe0: 2a 2f 0a 20 20 53 71 6c 69 74 65 20 64 62 20 3d  */.  Sqlite db =
1ff0: 20 7b 30 7d 3b 20 20 20 20 20 20 20 20 20 20 20   {0};           
2000: 20 20 20 20 20 2f 2a 20 53 51 4c 69 74 65 20 64       /* SQLite d
2010: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2020: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 31 20 3d  on */.  int i1 =
2030: 20 30 3b 0a 20 20 69 6e 74 20 69 32 20 3d 20 30   0;.  int i2 = 0
2040: 3b 0a 0a 20 20 77 68 69 6c 65 28 20 21 74 69 6d  ;..  while( !tim
2050: 65 74 6f 73 74 6f 70 28 26 65 72 72 29 20 29 7b  etostop(&err) ){
2060: 0a 20 20 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20  .    int cnt;.  
2070: 20 20 6f 70 65 6e 64 62 28 26 65 72 72 2c 20 26    opendb(&err, &
2080: 64 62 2c 20 70 43 74 78 2d 3e 7a 44 62 2c 20 30  db, pCtx->zDb, 0
2090: 29 3b 0a 20 20 20 20 66 6f 72 28 63 6e 74 3d 30  );.    for(cnt=0
20a0: 3b 20 65 72 72 2e 72 63 3d 3d 53 51 4c 49 54 45  ; err.rc==SQLITE
20b0: 5f 4f 4b 20 26 26 20 63 6e 74 3c 53 54 52 45 53  _OK && cnt<STRES
20c0: 53 32 5f 54 41 42 43 4e 54 3b 20 63 6e 74 2b 2b  S2_TABCNT; cnt++
20d0: 29 7b 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 78  ){.      pCtx->x
20e0: 50 72 6f 63 28 26 65 72 72 2c 20 26 64 62 2c 20  Proc(&err, &db, 
20f0: 69 31 29 3b 0a 20 20 20 20 20 20 69 32 20 2b 3d  i1);.      i2 +=
2100: 20 28 65 72 72 2e 72 63 3d 3d 53 51 4c 49 54 45   (err.rc==SQLITE
2110: 5f 4f 4b 29 3b 0a 20 20 20 20 20 20 63 6c 65 61  _OK);.      clea
2120: 72 5f 65 72 72 6f 72 28 26 65 72 72 2c 20 53 51  r_error(&err, SQ
2130: 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 3b 0a 20 20  LITE_LOCKED);.  
2140: 20 20 20 20 69 31 2b 2b 3b 0a 20 20 20 20 7d 0a      i1++;.    }.
2150: 20 20 20 20 63 6c 6f 73 65 64 62 28 26 65 72 72      closedb(&err
2160: 2c 20 26 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 70  , &db);.  }..  p
2170: 72 69 6e 74 5f 61 6e 64 5f 66 72 65 65 5f 65 72  rint_and_free_er
2180: 72 28 26 65 72 72 29 3b 0a 20 20 72 65 74 75 72  r(&err);.  retur
2190: 6e 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  n sqlite3_mprint
21a0: 66 28 22 6f 6b 20 25 64 2f 25 64 22 2c 20 69 32  f("ok %d/%d", i2
21b0: 2c 20 69 31 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  , i1);.}..static
21c0: 20 76 6f 69 64 20 73 74 72 65 73 73 32 5f 6c 61   void stress2_la
21d0: 75 6e 63 68 5f 74 68 72 65 61 64 5f 6c 6f 6f 70  unch_thread_loop
21e0: 28 0a 20 20 45 72 72 6f 72 20 2a 70 45 72 72 2c  (.  Error *pErr,
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 2f 2a 20 49 4e 2f 4f 55 54 3a 20 45      /* IN/OUT: E
2210: 72 72 6f 72 20 63 6f 64 65 20 2a 2f 0a 20 20 54  rror code */.  T
2220: 68 72 65 61 64 73 65 74 20 2a 70 54 68 72 65 61  hreadset *pThrea
2230: 64 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f  ds,            /
2240: 2a 20 54 68 72 65 61 64 20 73 65 74 20 2a 2f 0a  * Thread set */.
2250: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
2260: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
2270: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 6e 61    /* Database na
2280: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
2290: 29 28 45 72 72 6f 72 2a 2c 53 71 6c 69 74 65 2a  )(Error*,Sqlite*
22a0: 2c 69 6e 74 29 20 20 20 2f 2a 20 52 75 6e 20 74  ,int)   /* Run t
22b0: 68 69 73 20 75 6e 74 69 6c 20 65 72 72 6f 72 20  his until error 
22c0: 6f 72 20 74 69 6d 65 6f 75 74 20 2a 2f 0a 29 7b  or timeout */.){
22d0: 0a 20 20 53 74 72 65 73 73 32 43 74 78 20 2a 70  .  Stress2Ctx *p
22e0: 43 74 78 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  Ctx = sqlite3_ma
22f0: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 53 74 72 65  lloc(sizeof(Stre
2300: 73 73 32 43 74 78 29 29 3b 0a 20 20 70 43 74 78  ss2Ctx));.  pCtx
2310: 2d 3e 7a 44 62 20 3d 20 7a 44 62 3b 0a 20 20 70  ->zDb = zDb;.  p
2320: 43 74 78 2d 3e 78 50 72 6f 63 20 3d 20 78 3b 0a  Ctx->xProc = x;.
2330: 20 20 6c 61 75 6e 63 68 5f 74 68 72 65 61 64 28    launch_thread(
2340: 70 45 72 72 2c 20 70 54 68 72 65 61 64 73 2c 20  pErr, pThreads, 
2350: 73 74 72 65 73 73 32 5f 74 68 72 65 61 64 5f 77  stress2_thread_w
2360: 72 61 70 70 65 72 2c 20 28 76 6f 69 64 2a 29 70  rapper, (void*)p
2370: 43 74 78 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  Ctx);.}..static 
2380: 76 6f 69 64 20 73 74 72 65 73 73 32 28 69 6e 74  void stress2(int
2390: 20 6e 4d 73 29 7b 0a 20 20 73 74 72 75 63 74 20   nMs){.  struct 
23a0: 53 74 72 65 73 73 32 54 61 73 6b 20 7b 0a 20 20  Stress2Task {.  
23b0: 20 20 76 6f 69 64 20 28 2a 78 29 28 45 72 72 6f    void (*x)(Erro
23c0: 72 2a 2c 53 71 6c 69 74 65 2a 2c 69 6e 74 29 3b  r*,Sqlite*,int);
23d0: 0a 20 20 7d 20 61 54 61 73 6b 5b 5d 20 3d 20 7b  .  } aTask[] = {
23e0: 0a 20 20 20 20 7b 20 73 74 72 65 73 73 32 5f 77  .    { stress2_w
23f0: 6f 72 6b 6c 6f 61 64 31 20 7d 2c 0a 20 20 20 20  orkload1 },.    
2400: 7b 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f  { stress2_worklo
2410: 61 64 32 20 7d 2c 0a 20 20 20 20 7b 20 73 74 72  ad2 },.    { str
2420: 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 33 20 7d  ess2_workload3 }
2430: 2c 0a 20 20 20 20 7b 20 73 74 72 65 73 73 32 5f  ,.    { stress2_
2440: 77 6f 72 6b 6c 6f 61 64 34 20 7d 2c 0a 20 20 20  workload4 },.   
2450: 20 7b 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c   { stress2_workl
2460: 6f 61 64 35 20 7d 2c 0a 20 20 20 20 7b 20 73 74  oad5 },.    { st
2470: 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 36 20  ress2_workload6 
2480: 7d 2c 0a 20 20 20 20 7b 20 73 74 72 65 73 73 32  },.    { stress2
2490: 5f 77 6f 72 6b 6c 6f 61 64 37 20 7d 2c 0a 20 20  _workload7 },.  
24a0: 20 20 7b 20 73 74 72 65 73 73 32 5f 77 6f 72 6b    { stress2_work
24b0: 6c 6f 61 64 38 20 7d 2c 0a 20 20 20 20 7b 20 73  load8 },.    { s
24c0: 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 39  tress2_workload9
24d0: 20 7d 2c 0a 20 20 20 20 7b 20 73 74 72 65 73 73   },.    { stress
24e0: 32 5f 77 6f 72 6b 6c 6f 61 64 31 30 20 7d 2c 0a  2_workload10 },.
24f0: 20 20 20 20 7b 20 73 74 72 65 73 73 32 5f 77 6f      { stress2_wo
2500: 72 6b 6c 6f 61 64 31 31 20 7d 2c 0a 20 20 20 20  rkload11 },.    
2510: 7b 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c 6f  { stress2_worklo
2520: 61 64 31 34 20 7d 2c 0a 20 20 20 20 7b 20 73 74  ad14 },.    { st
2530: 72 65 73 73 32 5f 77 6f 72 6b 6c 6f 61 64 31 37  ress2_workload17
2540: 20 7d 2c 0a 20 20 7d 3b 0a 20 20 63 6f 6e 73 74   },.  };.  const
2550: 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 22 74 65   char *zDb = "te
2560: 73 74 2e 64 62 22 3b 0a 0a 20 20 69 6e 74 20 69  st.db";..  int i
2570: 3b 0a 20 20 45 72 72 6f 72 20 65 72 72 20 3d 20  ;.  Error err = 
2580: 7b 30 7d 3b 0a 20 20 53 71 6c 69 74 65 20 64 62  {0};.  Sqlite db
2590: 20 3d 20 7b 30 7d 3b 0a 20 20 54 68 72 65 61 64   = {0};.  Thread
25a0: 73 65 74 20 74 68 72 65 61 64 73 20 3d 20 7b 30  set threads = {0
25b0: 7d 3b 0a 0a 20 20 2f 2a 20 54 6f 20 6d 61 6b 65  };..  /* To make
25c0: 20 73 75 72 65 20 74 68 65 20 64 62 20 66 69 6c   sure the db fil
25d0: 65 20 69 73 20 65 6d 70 74 79 20 62 65 66 6f 72  e is empty befor
25e0: 65 20 63 6f 6d 6d 65 6e 63 69 6e 67 20 2a 2f 0a  e commencing */.
25f0: 20 20 6f 70 65 6e 64 62 28 26 65 72 72 2c 20 26    opendb(&err, &
2600: 64 62 2c 20 7a 44 62 2c 20 31 29 3b 0a 20 20 73  db, zDb, 1);.  s
2610: 71 6c 5f 73 63 72 69 70 74 28 26 65 72 72 2c 20  ql_script(&err, 
2620: 26 64 62 2c 20 0a 20 20 20 20 20 20 22 43 52 45  &db, .      "CRE
2630: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
2640: 20 45 58 49 53 54 53 20 74 30 28 78 20 50 52 49   EXISTS t0(x PRI
2650: 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29 3b  MARY KEY, y, z);
2660: 22 0a 20 20 20 20 20 20 22 43 52 45 41 54 45 20  ".      "CREATE 
2670: 49 4e 44 45 58 20 49 46 20 4e 4f 54 20 45 58 49  INDEX IF NOT EXI
2680: 53 54 53 20 69 30 20 4f 4e 20 74 30 28 79 29 3b  STS i0 ON t0(y);
2690: 22 0a 20 20 29 3b 0a 20 20 63 6c 6f 73 65 64 62  ".  );.  closedb
26a0: 28 26 65 72 72 2c 20 26 64 62 29 3b 0a 0a 20 20  (&err, &db);..  
26b0: 73 65 74 73 74 6f 70 74 69 6d 65 28 26 65 72 72  setstoptime(&err
26c0: 2c 20 6e 4d 73 29 3b 0a 20 20 73 71 6c 69 74 65  , nMs);.  sqlite
26d0: 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f  3_enable_shared_
26e0: 63 61 63 68 65 28 31 29 3b 0a 0a 20 20 66 6f 72  cache(1);..  for
26f0: 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61  (i=0; i<sizeof(a
2700: 54 61 73 6b 29 2f 73 69 7a 65 6f 66 28 61 54 61  Task)/sizeof(aTa
2710: 73 6b 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  sk[0]); i++){.  
2720: 20 20 73 74 72 65 73 73 32 5f 6c 61 75 6e 63 68    stress2_launch
2730: 5f 74 68 72 65 61 64 5f 6c 6f 6f 70 28 26 65 72  _thread_loop(&er
2740: 72 2c 20 26 74 68 72 65 61 64 73 2c 20 7a 44 62  r, &threads, zDb
2750: 2c 20 61 54 61 73 6b 5b 69 5d 2e 78 29 3b 0a 20  , aTask[i].x);. 
2760: 20 7d 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72 65   }.  launch_thre
2770: 61 64 28 26 65 72 72 2c 20 26 74 68 72 65 61 64  ad(&err, &thread
2780: 73 2c 20 73 74 72 65 73 73 32 5f 77 6f 72 6b 6c  s, stress2_workl
2790: 6f 61 64 31 39 2c 20 28 76 6f 69 64 2a 29 7a 44  oad19, (void*)zD
27a0: 62 29 3b 0a 20 20 6c 61 75 6e 63 68 5f 74 68 72  b);.  launch_thr
27b0: 65 61 64 28 26 65 72 72 2c 20 26 74 68 72 65 61  ead(&err, &threa
27c0: 64 73 2c 20 73 74 72 65 73 73 32 5f 77 6f 72 6b  ds, stress2_work
27d0: 6c 6f 61 64 31 39 2c 20 28 76 6f 69 64 2a 29 7a  load19, (void*)z
27e0: 44 62 29 3b 0a 0a 20 20 6a 6f 69 6e 5f 61 6c 6c  Db);..  join_all
27f0: 5f 74 68 72 65 61 64 73 28 26 65 72 72 2c 20 26  _threads(&err, &
2800: 74 68 72 65 61 64 73 29 3b 0a 20 20 73 71 6c 69  threads);.  sqli
2810: 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  te3_enable_share
2820: 64 5f 63 61 63 68 65 28 30 29 3b 0a 20 20 70 72  d_cache(0);.  pr
2830: 69 6e 74 5f 61 6e 64 5f 66 72 65 65 5f 65 72 72  int_and_free_err
2840: 28 26 65 72 72 29 3b 0a 7d 0a 0a 0a 0a 0a        (&err);.}.....