Artifact
c2b00864514a68a0e6fd518659dc95d0050307a357a08969872bef027d785dc4:
- File
test/server1.test
— part of check-in
[43efdd8c]
at
2018-08-28 21:12:02
on branch trunk
— Disable the server1.test script on old PPC Macs due to problems in the
pthreads implementation on those archaic machines.
(user:
drh
size: 4176)
[more...]
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.