/ Hex Artifact Content
Login

Artifact c2b00864514a68a0e6fd518659dc95d0050307a357a08969872bef027d785dc4:


0000: 23 20 32 30 30 36 20 4a 61 6e 75 61 72 79 20 30  # 2006 January 0
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 73  is testing the s
01d0: 65 72 76 65 72 20 6d 6f 64 65 20 6f 66 20 53 51  erver mode of SQ
01e0: 4c 69 74 65 2e 0a 23 0a 23 20 54 68 69 73 20 66  Lite..#.# This f
01f0: 69 6c 65 20 69 73 20 64 65 72 69 76 65 64 20 66  ile is derived f
0200: 72 6f 6d 20 74 68 72 65 61 64 31 2e 74 65 73 74  rom thread1.test
0210: 0a 23 0a 23 20 24 49 64 3a 20 73 65 72 76 65 72  .#.# $Id: server
0220: 31 2e 74 65 73 74 2c 76 20 31 2e 35 20 32 30 30  1.test,v 1.5 200
0230: 37 2f 30 38 2f 32 39 20 31 38 3a 32 30 3a 31 37  7/08/29 18:20:17
0240: 20 64 72 68 20 45 78 70 20 24 0a 0a 0a 73 65 74   drh Exp $...set
0250: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0260: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0270: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0280: 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 53 6b 69  ester.tcl..# Ski
0290: 70 20 74 68 69 73 20 77 68 6f 6c 65 20 66 69 6c  p this whole fil
02a0: 65 20 69 66 20 74 68 65 20 73 65 72 76 65 72 20  e if the server 
02b0: 74 65 73 74 69 6e 67 20 63 6f 64 65 20 69 73 20  testing code is 
02c0: 6e 6f 74 20 65 6e 61 62 6c 65 64 0a 23 0a 69 66  not enabled.#.if
02d0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
02e0: 20 63 6f 6d 6d 61 6e 64 20 63 6c 69 65 6e 74 5f   command client_
02f0: 73 74 65 70 5d 5d 3d 3d 30 20 7c 7c 20 5b 73 71  step]]==0 || [sq
0300: 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63  lite3 -has-codec
0310: 5d 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65  ]} {.  finish_te
0320: 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23  st.  return.}..#
0330: 20 54 68 69 73 20 74 65 73 74 20 64 6f 65 73 20   This test does 
0340: 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 6f 6c 64 65  not work on olde
0350: 72 20 50 50 43 20 4d 61 63 73 20 64 75 65 20 74  r PPC Macs due t
0360: 6f 20 70 72 6f 62 6c 65 6d 73 20 69 6e 20 74 68  o problems in th
0370: 65 0a 23 20 70 74 68 72 65 61 64 73 20 6c 69 62  e.# pthreads lib
0380: 72 61 72 79 2e 20 20 53 6f 20 73 6b 69 70 20 69  rary.  So skip i
0390: 74 2e 0a 23 0a 69 66 20 7b 24 74 63 6c 5f 70 6c  t..#.if {$tcl_pl
03a0: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 3d  atform(machine)=
03b0: 3d 22 50 6f 77 65 72 20 4d 61 63 69 6e 74 6f 73  ="Power Macintos
03c0: 68 22 20 26 26 20 0a 20 20 20 20 24 74 63 6c 5f  h" && .    $tcl_
03d0: 70 6c 61 74 66 6f 72 6d 28 62 79 74 65 4f 72 64  platform(byteOrd
03e0: 65 72 29 3d 3d 22 62 69 67 45 6e 64 69 61 6e 22  er)=="bigEndian"
03f0: 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73  } {.  finish_tes
0400: 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 20  t.  return.}..# 
0410: 54 68 65 20 73 61 6d 70 6c 65 20 73 65 72 76 65  The sample serve
0420: 72 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  r implementation
0430: 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 72   does not work r
0440: 69 67 68 74 20 77 68 65 6e 20 6d 65 6d 6f 72 79  ight when memory
0450: 0a 23 20 6d 61 6e 61 67 65 6d 65 6e 74 20 69 73  .# management is
0460: 20 65 6e 61 62 6c 65 64 2e 0a 23 0a 69 66 63 61   enabled..#.ifca
0470: 70 61 62 6c 65 20 28 6d 65 6d 6f 72 79 6d 61 6e  pable (memoryman
0480: 61 67 65 7c 7c 6d 75 74 65 78 5f 6e 6f 6f 70 29  age||mutex_noop)
0490: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
04a0: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 20 43  .  return.}..# C
04b0: 72 65 61 74 65 20 73 6f 6d 65 20 64 61 74 61 20  reate some data 
04c0: 74 6f 20 77 6f 72 6b 20 77 69 74 68 0a 23 0a 64  to work with.#.d
04d0: 6f 5f 74 65 73 74 20 73 65 72 76 65 72 31 2d 31  o_test server1-1
04e0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
04f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0500: 45 20 74 31 28 61 2c 62 29 3b 0a 20 20 20 20 49  E t1(a,b);.    I
0510: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0520: 4c 55 45 53 28 31 2c 27 61 62 63 64 65 66 67 68  LUES(1,'abcdefgh
0530: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
0540: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61 2b  NTO t1 SELECT a+
0550: 31 2c 20 62 7c 7c 62 20 46 52 4f 4d 20 74 31 3b  1, b||b FROM t1;
0560: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0570: 20 74 31 20 53 45 4c 45 43 54 20 61 2b 32 2c 20   t1 SELECT a+2, 
0580: 62 7c 7c 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20  b||b FROM t1;.  
0590: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
05a0: 20 53 45 4c 45 43 54 20 61 2b 34 2c 20 62 7c 7c   SELECT a+4, b||
05b0: 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 53  b FROM t1;.    S
05c0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20  ELECT count(*), 
05d0: 6d 61 78 28 6c 65 6e 67 74 68 28 62 29 29 20 46  max(length(b)) F
05e0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 38  ROM t1;.  }.} {8
05f0: 20 36 34 7d 0a 0a 23 20 49 6e 74 65 72 6c 65 61   64}..# Interlea
0600: 76 65 20 74 77 6f 20 74 68 72 65 61 64 73 20 6f  ve two threads o
0610: 6e 20 72 65 61 64 20 61 63 63 65 73 73 2e 20 20  n read access.  
0620: 54 68 65 6e 20 6d 61 6b 65 20 73 75 72 65 20 61  Then make sure a
0630: 20 74 68 69 72 64 0a 23 20 74 68 72 65 61 64 20   third.# thread 
0640: 63 61 6e 20 77 72 69 74 65 20 74 68 65 20 64 61  can write the da
0650: 74 61 62 61 73 65 2e 20 20 49 6e 20 6f 74 68 65  tabase.  In othe
0660: 72 20 77 6f 72 64 73 3a 0a 23 0a 23 20 20 20 20  r words:.#.#    
0670: 72 65 61 64 2d 6c 6f 63 6b 20 41 0a 23 20 20 20  read-lock A.#   
0680: 20 72 65 61 64 2d 6c 6f 63 6b 20 42 0a 23 20 20   read-lock B.#  
0690: 20 20 75 6e 6c 6f 63 6b 20 41 0a 23 20 20 20 20    unlock A.#    
06a0: 75 6e 6c 6f 63 6b 20 42 0a 23 20 20 20 20 77 72  unlock B.#    wr
06b0: 69 74 65 2d 6c 6f 63 6b 20 43 0a 23 0a 64 6f 5f  ite-lock C.#.do_
06c0: 74 65 73 74 20 73 65 72 76 65 72 31 2d 31 2e 32  test server1-1.2
06d0: 20 7b 0a 20 20 63 6c 69 65 6e 74 5f 63 72 65 61   {.  client_crea
06e0: 74 65 20 41 20 74 65 73 74 2e 64 62 0a 20 20 63  te A test.db.  c
06f0: 6c 69 65 6e 74 5f 63 72 65 61 74 65 20 42 20 74  lient_create B t
0700: 65 73 74 2e 64 62 0a 20 20 63 6c 69 65 6e 74 5f  est.db.  client_
0710: 63 72 65 61 74 65 20 43 20 74 65 73 74 2e 64 62  create C test.db
0720: 0a 20 20 63 6c 69 65 6e 74 5f 63 6f 6d 70 69 6c  .  client_compil
0730: 65 20 41 20 7b 53 45 4c 45 43 54 20 61 20 46 52  e A {SELECT a FR
0740: 4f 4d 20 74 31 7d 0a 20 20 63 6c 69 65 6e 74 5f  OM t1}.  client_
0750: 73 74 65 70 20 41 0a 20 20 63 6c 69 65 6e 74 5f  step A.  client_
0760: 72 65 73 75 6c 74 20 41 0a 7d 20 53 51 4c 49 54  result A.} SQLIT
0770: 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 73 65  E_ROW.do_test se
0780: 72 76 65 72 31 2d 31 2e 33 20 7b 0a 20 20 63 6c  rver1-1.3 {.  cl
0790: 69 65 6e 74 5f 61 72 67 63 20 41 0a 7d 20 31 0a  ient_argc A.} 1.
07a0: 64 6f 5f 74 65 73 74 20 73 65 72 76 65 72 31 2d  do_test server1-
07b0: 31 2e 34 20 7b 0a 20 20 63 6c 69 65 6e 74 5f 61  1.4 {.  client_a
07c0: 72 67 76 20 41 20 30 0a 7d 20 31 0a 64 6f 5f 74  rgv A 0.} 1.do_t
07d0: 65 73 74 20 73 65 72 76 65 72 31 2d 31 2e 35 20  est server1-1.5 
07e0: 7b 0a 20 20 63 6c 69 65 6e 74 5f 63 6f 6d 70 69  {.  client_compi
07f0: 6c 65 20 42 20 7b 53 45 4c 45 43 54 20 62 20 46  le B {SELECT b F
0800: 52 4f 4d 20 74 31 7d 0a 20 20 63 6c 69 65 6e 74  ROM t1}.  client
0810: 5f 73 74 65 70 20 42 0a 20 20 63 6c 69 65 6e 74  _step B.  client
0820: 5f 72 65 73 75 6c 74 20 42 0a 7d 20 53 51 4c 49  _result B.} SQLI
0830: 54 45 5f 52 4f 57 0a 64 6f 5f 74 65 73 74 20 73  TE_ROW.do_test s
0840: 65 72 76 65 72 31 2d 31 2e 36 20 7b 0a 20 20 63  erver1-1.6 {.  c
0850: 6c 69 65 6e 74 5f 61 72 67 63 20 42 0a 7d 20 31  lient_argc B.} 1
0860: 0a 64 6f 5f 74 65 73 74 20 73 65 72 76 65 72 31  .do_test server1
0870: 2d 31 2e 37 20 7b 0a 20 20 63 6c 69 65 6e 74 5f  -1.7 {.  client_
0880: 61 72 67 76 20 42 20 30 0a 7d 20 61 62 63 64 65  argv B 0.} abcde
0890: 66 67 68 0a 64 6f 5f 74 65 73 74 20 73 65 72 76  fgh.do_test serv
08a0: 65 72 31 2d 31 2e 38 20 7b 0a 20 20 63 6c 69 65  er1-1.8 {.  clie
08b0: 6e 74 5f 66 69 6e 61 6c 69 7a 65 20 41 0a 20 20  nt_finalize A.  
08c0: 63 6c 69 65 6e 74 5f 72 65 73 75 6c 74 20 41 0a  client_result A.
08d0: 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 64 6f 5f 74  } SQLITE_OK.do_t
08e0: 65 73 74 20 73 65 72 76 65 72 31 2d 31 2e 39 20  est server1-1.9 
08f0: 7b 0a 20 20 63 6c 69 65 6e 74 5f 66 69 6e 61 6c  {.  client_final
0900: 69 7a 65 20 42 0a 20 20 63 6c 69 65 6e 74 5f 72  ize B.  client_r
0910: 65 73 75 6c 74 20 42 0a 7d 20 53 51 4c 49 54 45  esult B.} SQLITE
0920: 5f 4f 4b 0a 64 6f 5f 74 65 73 74 20 73 65 72 76  _OK.do_test serv
0930: 65 72 31 2d 31 2e 31 30 20 7b 0a 20 20 63 6c 69  er1-1.10 {.  cli
0940: 65 6e 74 5f 63 6f 6d 70 69 6c 65 20 43 20 7b 43  ent_compile C {C
0950: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78  REATE TABLE t2(x
0960: 2c 79 29 7d 0a 20 20 63 6c 69 65 6e 74 5f 73 74  ,y)}.  client_st
0970: 65 70 20 43 0a 20 20 63 6c 69 65 6e 74 5f 72 65  ep C.  client_re
0980: 73 75 6c 74 20 43 0a 7d 20 53 51 4c 49 54 45 5f  sult C.} SQLITE_
0990: 44 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 73 65 72  DONE.do_test ser
09a0: 76 65 72 31 2d 31 2e 31 31 20 7b 0a 20 20 63 6c  ver1-1.11 {.  cl
09b0: 69 65 6e 74 5f 66 69 6e 61 6c 69 7a 65 20 43 0a  ient_finalize C.
09c0: 20 20 63 6c 69 65 6e 74 5f 72 65 73 75 6c 74 20    client_result 
09d0: 43 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 64 6f  C.} SQLITE_OK.do
09e0: 5f 74 65 73 74 20 73 65 72 76 65 72 31 2d 31 2e  _test server1-1.
09f0: 31 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  12 {.  catchsql 
0a00: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
0a10: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
0a20: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0a30: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0a40: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
0a50: 31 20 74 32 7d 0a 0a 0a 23 20 52 65 61 64 20 66  1 t2}...# Read f
0a60: 72 6f 6d 20 74 61 62 6c 65 20 74 31 2e 20 20 44  rom table t1.  D
0a70: 6f 20 6e 6f 74 20 66 69 6e 61 6c 69 7a 65 20 74  o not finalize t
0a80: 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  he statement.  T
0a90: 68 69 73 0a 23 20 77 69 6c 6c 20 6c 65 61 76 65  his.# will leave
0aa0: 20 74 68 65 20 6c 6f 63 6b 20 70 65 6e 64 69 6e   the lock pendin
0ab0: 67 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 72  g..#.do_test ser
0ac0: 76 65 72 31 2d 32 2e 31 20 7b 0a 20 20 63 6c 69  ver1-2.1 {.  cli
0ad0: 65 6e 74 5f 68 61 6c 74 20 2a 0a 20 20 63 6c 69  ent_halt *.  cli
0ae0: 65 6e 74 5f 63 72 65 61 74 65 20 41 20 74 65 73  ent_create A tes
0af0: 74 2e 64 62 0a 20 20 63 6c 69 65 6e 74 5f 63 6f  t.db.  client_co
0b00: 6d 70 69 6c 65 20 41 20 7b 53 45 4c 45 43 54 20  mpile A {SELECT 
0b10: 61 20 46 52 4f 4d 20 74 31 7d 0a 20 20 63 6c 69  a FROM t1}.  cli
0b20: 65 6e 74 5f 73 74 65 70 20 41 0a 20 20 63 6c 69  ent_step A.  cli
0b30: 65 6e 74 5f 72 65 73 75 6c 74 20 41 0a 7d 20 53  ent_result A.} S
0b40: 51 4c 49 54 45 5f 52 4f 57 0a 0a 23 20 52 65 61  QLITE_ROW..# Rea
0b50: 64 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20  d from the same 
0b60: 74 61 62 6c 65 20 66 72 6f 6d 20 61 6e 6f 74 68  table from anoth
0b70: 65 72 20 74 68 72 65 61 64 2e 20 20 54 68 69 73  er thread.  This
0b80: 20 69 73 20 61 6c 6c 6f 77 73 2e 0a 23 0a 64 6f   is allows..#.do
0b90: 5f 74 65 73 74 20 73 65 72 76 65 72 31 2d 32 2e  _test server1-2.
0ba0: 32 20 7b 0a 20 20 63 6c 69 65 6e 74 5f 63 72 65  2 {.  client_cre
0bb0: 61 74 65 20 42 20 74 65 73 74 2e 64 62 0a 20 20  ate B test.db.  
0bc0: 63 6c 69 65 6e 74 5f 63 6f 6d 70 69 6c 65 20 42  client_compile B
0bd0: 20 7b 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20   {SELECT b FROM 
0be0: 74 31 7d 0a 20 20 63 6c 69 65 6e 74 5f 73 74 65  t1}.  client_ste
0bf0: 70 20 42 0a 20 20 63 6c 69 65 6e 74 5f 72 65 73  p B.  client_res
0c00: 75 6c 74 20 42 0a 7d 20 53 51 4c 49 54 45 5f 52  ult B.} SQLITE_R
0c10: 4f 57 0a 0a 23 20 57 72 69 74 65 20 74 6f 20 61  OW..# Write to a
0c20: 20 64 69 66 66 65 72 65 6e 74 20 74 61 62 6c 65   different table
0c30: 20 66 72 6f 6d 20 61 6e 6f 74 68 65 72 20 74 68   from another th
0c40: 72 65 61 64 2e 20 20 54 68 69 73 20 69 73 20 61  read.  This is a
0c50: 6c 6c 6f 77 65 64 0a 23 20 62 65 63 61 75 73 65  llowed.# because
0c60: 20 69 6e 20 73 65 72 76 65 72 20 6d 6f 64 65 20   in server mode 
0c70: 77 69 74 68 20 61 20 73 68 61 72 65 64 20 63 61  with a shared ca
0c80: 63 68 65 20 77 65 20 68 61 76 65 20 74 61 62 6c  che we have tabl
0c90: 65 2d 6c 65 76 65 6c 20 6c 6f 63 6b 69 6e 67 2e  e-level locking.
0ca0: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 72 76 65  .#.do_test serve
0cb0: 72 31 2d 32 2e 33 20 7b 0a 20 20 63 6c 69 65 6e  r1-2.3 {.  clien
0cc0: 74 5f 63 72 65 61 74 65 20 43 20 74 65 73 74 2e  t_create C test.
0cd0: 64 62 0a 20 20 63 6c 69 65 6e 74 5f 63 6f 6d 70  db.  client_comp
0ce0: 69 6c 65 20 43 20 7b 49 4e 53 45 52 54 20 49 4e  ile C {INSERT IN
0cf0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 39 38 2c  TO t2 VALUES(98,
0d00: 39 39 29 7d 0a 20 20 63 6c 69 65 6e 74 5f 73 74  99)}.  client_st
0d10: 65 70 20 43 0a 20 20 63 6c 69 65 6e 74 5f 72 65  ep C.  client_re
0d20: 73 75 6c 74 20 43 0a 20 20 63 6c 69 65 6e 74 5f  sult C.  client_
0d30: 66 69 6e 61 6c 69 7a 65 20 43 0a 20 20 63 6c 69  finalize C.  cli
0d40: 65 6e 74 5f 72 65 73 75 6c 74 20 43 0a 7d 20 53  ent_result C.} S
0d50: 51 4c 49 54 45 5f 4f 4b 0a 0a 23 20 42 75 74 20  QLITE_OK..# But 
0d60: 77 65 20 63 61 6e 6e 6f 74 20 69 6e 73 65 72 74  we cannot insert
0d70: 20 69 6e 74 6f 20 74 61 62 6c 65 20 74 31 20 62   into table t1 b
0d80: 65 63 61 75 73 65 20 74 68 72 65 61 64 73 20 41  ecause threads A
0d90: 20 61 6e 64 20 42 20 68 61 76 65 20 69 74 20 6c   and B have it l
0da0: 6f 63 6b 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74  ocked..#.do_test
0db0: 20 73 65 72 76 65 72 31 2d 32 2e 34 20 7b 0a 20   server1-2.4 {. 
0dc0: 20 63 6c 69 65 6e 74 5f 63 6f 6d 70 69 6c 65 20   client_compile 
0dd0: 43 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  C {INSERT INTO t
0de0: 31 20 56 41 4c 55 45 53 28 39 38 2c 39 39 29 7d  1 VALUES(98,99)}
0df0: 0a 20 20 63 6c 69 65 6e 74 5f 73 74 65 70 20 43  .  client_step C
0e00: 0a 20 20 63 6c 69 65 6e 74 5f 72 65 73 75 6c 74  .  client_result
0e10: 20 43 0a 20 20 63 6c 69 65 6e 74 5f 66 69 6e 61   C.  client_fina
0e20: 6c 69 7a 65 20 43 0a 20 20 63 6c 69 65 6e 74 5f  lize C.  client_
0e30: 72 65 73 75 6c 74 20 43 0a 7d 20 53 51 4c 49 54  result C.} SQLIT
0e40: 45 5f 4c 4f 43 4b 45 44 0a 64 6f 5f 74 65 73 74  E_LOCKED.do_test
0e50: 20 73 65 72 76 65 72 31 2d 32 2e 35 20 7b 0a 20   server1-2.5 {. 
0e60: 20 63 6c 69 65 6e 74 5f 66 69 6e 61 6c 69 7a 65   client_finalize
0e70: 20 42 0a 20 20 63 6c 69 65 6e 74 5f 77 61 69 74   B.  client_wait
0e80: 20 42 0a 20 20 63 6c 69 65 6e 74 5f 63 6f 6d 70   B.  client_comp
0e90: 69 6c 65 20 43 20 7b 49 4e 53 45 52 54 20 49 4e  ile C {INSERT IN
0ea0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 39 38 2c  TO t1 VALUES(98,
0eb0: 39 39 29 7d 0a 20 20 63 6c 69 65 6e 74 5f 73 74  99)}.  client_st
0ec0: 65 70 20 43 0a 20 20 63 6c 69 65 6e 74 5f 72 65  ep C.  client_re
0ed0: 73 75 6c 74 20 43 0a 20 20 63 6c 69 65 6e 74 5f  sult C.  client_
0ee0: 66 69 6e 61 6c 69 7a 65 20 43 0a 20 20 63 6c 69  finalize C.  cli
0ef0: 65 6e 74 5f 72 65 73 75 6c 74 20 43 0a 7d 20 53  ent_result C.} S
0f00: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 0a 0a 23 20  QLITE_LOCKED..# 
0f10: 49 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20 69  Insert into t1 i
0f20: 73 20 73 75 63 63 65 73 73 66 75 6c 20 61 66 74  s successful aft
0f30: 65 72 20 66 69 6e 69 73 68 69 6e 67 20 74 68 65  er finishing the
0f40: 20 6f 74 68 65 72 20 74 77 6f 20 74 68 72 65 61   other two threa
0f50: 64 73 2e 0a 64 6f 5f 74 65 73 74 20 73 65 72 76  ds..do_test serv
0f60: 65 72 31 2d 32 2e 36 20 7b 0a 20 20 63 6c 69 65  er1-2.6 {.  clie
0f70: 6e 74 5f 66 69 6e 61 6c 69 7a 65 20 41 0a 20 20  nt_finalize A.  
0f80: 63 6c 69 65 6e 74 5f 77 61 69 74 20 41 0a 20 20  client_wait A.  
0f90: 63 6c 69 65 6e 74 5f 63 6f 6d 70 69 6c 65 20 43  client_compile C
0fa0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   {INSERT INTO t1
0fb0: 20 56 41 4c 55 45 53 28 39 38 2c 39 39 29 7d 0a   VALUES(98,99)}.
0fc0: 20 20 63 6c 69 65 6e 74 5f 73 74 65 70 20 43 0a    client_step C.
0fd0: 20 20 63 6c 69 65 6e 74 5f 72 65 73 75 6c 74 20    client_result 
0fe0: 43 0a 20 20 63 6c 69 65 6e 74 5f 66 69 6e 61 6c  C.  client_final
0ff0: 69 7a 65 20 43 0a 20 20 63 6c 69 65 6e 74 5f 72  ize C.  client_r
1000: 65 73 75 6c 74 20 43 0a 7d 20 53 51 4c 49 54 45  esult C.} SQLITE
1010: 5f 4f 4b 0a 0a 63 6c 69 65 6e 74 5f 68 61 6c 74  _OK..client_halt
1020: 20 2a 20 20 20 0a 73 71 6c 69 74 65 33 5f 65 6e   *   .sqlite3_en
1030: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
1040: 65 20 30 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  e 0.finish_test.