/ Hex Artifact Content
Login

Artifact d7bc75fae9157c4a3f4914b505713f398b3c5422:


0000: 23 20 32 30 30 33 20 4a 75 6e 65 20 32 31 0a 23  # 2003 June 21.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  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 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  .#.# This file i
01b0: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
01c0: 66 6f 72 20 6d 69 73 63 65 6c 6c 61 6e 6f 75 73  for miscellanous
01d0: 20 66 65 61 74 75 72 65 73 20 74 68 61 74 20 77   features that w
01e0: 65 72 65 0a 23 20 6c 65 66 74 20 6f 75 74 20 6f  ere.# left out o
01f0: 66 20 6f 74 68 65 72 20 74 65 73 74 20 66 69 6c  f other test fil
0200: 65 73 2e 0a 23 0a 23 20 24 49 64 3a 20 6d 69 73  es..#.# $Id: mis
0210: 63 32 2e 74 65 73 74 2c 76 20 31 2e 38 20 32 30  c2.test,v 1.8 20
0220: 30 33 2f 30 38 2f 32 37 20 32 32 3a 35 34 3a 33  03/08/27 22:54:3
0230: 32 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74  2 drh Exp $..set
0240: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0250: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0260: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0270: 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 54 65 73  ester.tcl..# Tes
0280: 74 20 66 6f 72 20 74 69 63 6b 65 74 20 23 33 36  t for ticket #36
0290: 30 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  0.#.do_test misc
02a0: 32 2d 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 73  2-1.1 {.  catchs
02b0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
02c0: 54 41 42 4c 45 20 46 4f 4f 28 62 61 72 20 69 6e  TABLE FOO(bar in
02d0: 74 65 67 65 72 29 3b 0a 20 20 20 20 43 52 45 41  teger);.    CREA
02e0: 54 45 20 54 52 49 47 47 45 52 20 66 6f 6f 5f 69  TE TRIGGER foo_i
02f0: 6e 73 65 72 74 20 42 45 46 4f 52 45 20 49 4e 53  nsert BEFORE INS
0300: 45 52 54 20 4f 4e 20 66 6f 6f 20 42 45 47 49 4e  ERT ON foo BEGIN
0310: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 41  .      SELECT CA
0320: 53 45 20 57 48 45 4e 20 28 4e 4f 54 20 6e 65 77  SE WHEN (NOT new
0330: 2e 62 61 72 20 42 45 54 57 45 45 4e 20 30 20 41  .bar BETWEEN 0 A
0340: 4e 44 20 32 30 29 0a 20 20 20 20 20 20 20 20 20  ND 20).         
0350: 20 20 20 20 54 48 45 4e 20 72 61 69 73 65 28 72      THEN raise(r
0360: 6f 6c 6c 62 61 63 6b 2c 20 27 61 69 69 65 65 65  ollback, 'aiieee
0370: 27 29 20 45 4e 44 3b 0a 20 20 20 20 45 4e 44 3b  ') END;.    END;
0380: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0390: 20 66 6f 6f 28 62 61 72 29 20 56 41 4c 55 45 53   foo(bar) VALUES
03a0: 20 28 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b   (1);.  }.} {0 {
03b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32  }}.do_test misc2
03c0: 2d 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71  -1.2 {.  catchsq
03d0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
03e0: 4e 54 4f 20 66 6f 6f 28 62 61 72 29 20 56 41 4c  NTO foo(bar) VAL
03f0: 55 45 53 20 28 31 31 31 29 3b 0a 20 20 7d 0a 7d  UES (111);.  }.}
0400: 20 7b 31 20 61 69 69 65 65 65 7d 0a 0a 23 20 4d   {1 aiieee}..# M
0410: 61 6b 65 20 73 75 72 65 20 52 4f 57 49 44 20 77  ake sure ROWID w
0420: 6f 72 6b 73 20 6f 6e 20 61 20 76 69 65 77 20 61  orks on a view a
0430: 6e 64 20 61 20 73 75 62 71 75 65 72 79 2e 20 20  nd a subquery.  
0440: 54 69 63 6b 65 74 20 23 33 36 34 0a 23 0a 64 6f  Ticket #364.#.do
0450: 5f 74 65 73 74 20 6d 69 73 63 32 2d 32 2e 31 20  _test misc2-2.1 
0460: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0470: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0480: 31 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 49 4e  1(a,b,c);.    IN
0490: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
04a0: 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20  UES(1,2,3);.    
04b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
04c0: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45  a,b,c);.    INSE
04d0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
04e0: 53 28 37 2c 38 2c 39 29 3b 0a 20 20 20 20 53 45  S(7,8,9);.    SE
04f0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
0500: 4f 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f  OM (SELECT * FRO
0510: 4d 20 74 31 2c 20 74 32 29 3b 0a 20 20 7d 0a 7d  M t1, t2);.  }.}
0520: 20 7b 7b 7d 20 31 20 32 20 33 20 37 20 38 20 39   {{} 1 2 3 7 8 9
0530: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d  }.do_test misc2-
0540: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.2 {.  execsql 
0550: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  {.    CREATE VIE
0560: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a  W v1 AS SELECT *
0570: 20 46 52 4f 4d 20 74 31 2c 20 74 32 3b 0a 20 20   FROM t1, t2;.  
0580: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
0590: 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a 7d  * FROM v1;.  }.}
05a0: 20 7b 7b 7d 20 31 20 32 20 33 20 37 20 38 20 39   {{} 1 2 3 7 8 9
05b0: 7d 0a 0a 23 20 43 68 65 63 6b 20 6e 61 6d 65 20  }..# Check name 
05c0: 62 69 6e 64 69 6e 67 20 70 72 65 63 65 64 65 6e  binding preceden
05d0: 63 65 2e 20 20 54 69 63 6b 65 74 20 23 33 38 37  ce.  Ticket #387
05e0: 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32  .#.do_test misc2
05f0: 2d 33 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  -3.1 {.  catchsq
0600: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74  l {.    SELECT t
0610: 31 2e 62 2b 74 32 2e 62 20 41 53 20 61 2c 20 74  1.b+t2.b AS a, t
0620: 31 2e 61 2c 20 74 32 2e 61 20 46 52 4f 4d 20 74  1.a, t2.a FROM t
0630: 31 2c 20 74 32 20 57 48 45 52 45 20 61 3d 3d 31  1, t2 WHERE a==1
0640: 30 0a 20 20 7d 0a 7d 20 7b 31 20 7b 61 6d 62 69  0.  }.} {1 {ambi
0650: 67 75 6f 75 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  guous column nam
0660: 65 3a 20 61 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73  e: a}}..# Make s
0670: 75 72 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  ure 32-bit integ
0680: 65 72 20 6f 76 65 72 66 6c 6f 77 20 69 73 20 68  er overflow is h
0690: 61 6e 64 6c 65 64 20 70 72 6f 70 65 72 6c 79 20  andled properly 
06a0: 69 6e 20 71 75 65 72 69 65 73 2e 0a 23 20 74 69  in queries..# ti
06b0: 63 6b 65 74 20 23 34 30 38 0a 23 0a 64 6f 5f 74  cket #408.#.do_t
06c0: 65 73 74 20 6d 69 73 63 32 2d 34 2e 31 20 7b 0a  est misc2-4.1 {.
06d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
06e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
06f0: 41 4c 55 45 53 28 34 30 30 30 30 30 30 30 30 30  ALUES(4000000000
0700: 2c 27 61 27 2c 27 62 27 29 3b 0a 20 20 20 20 53  ,'a','b');.    S
0710: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
0720: 57 48 45 52 45 20 61 3e 31 3b 0a 20 20 7d 0a 7d  WHERE a>1;.  }.}
0730: 20 7b 34 30 30 30 30 30 30 30 30 30 7d 0a 64 6f   {4000000000}.do
0740: 5f 74 65 73 74 20 6d 69 73 63 32 2d 34 2e 32 20  _test misc2-4.2 
0750: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0760: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0770: 20 56 41 4c 55 45 53 28 32 31 34 37 34 38 33 36   VALUES(21474836
0780: 34 38 2c 27 62 32 27 2c 27 63 32 27 29 3b 0a 20  48,'b2','c2');. 
0790: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
07a0: 31 20 56 41 4c 55 45 53 28 32 31 34 37 34 38 33  1 VALUES(2147483
07b0: 36 34 37 2c 27 62 33 27 2c 27 63 33 27 29 3b 0a  647,'b3','c3');.
07c0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
07d0: 4d 20 74 31 20 57 48 45 52 45 20 61 3e 32 31 34  M t1 WHERE a>214
07e0: 37 34 38 33 36 34 37 3b 0a 20 20 7d 0a 7d 20 7b  7483647;.  }.} {
07f0: 34 30 30 30 30 30 30 30 30 30 20 32 31 34 37 34  4000000000 21474
0800: 38 33 36 34 38 7d 0a 64 6f 5f 74 65 73 74 20 6d  83648}.do_test m
0810: 69 73 63 32 2d 34 2e 33 20 7b 0a 20 20 65 78 65  isc2-4.3 {.  exe
0820: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0830: 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T a FROM t1 WHER
0840: 45 20 61 3c 32 31 34 37 34 38 33 36 34 38 3b 0a  E a<2147483648;.
0850: 20 20 7d 0a 7d 20 7b 31 20 32 31 34 37 34 38 33    }.} {1 2147483
0860: 36 34 37 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73  647}.do_test mis
0870: 63 32 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73  c2-4.4 {.  execs
0880: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0890: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
08a0: 61 3c 3d 32 31 34 37 34 38 33 36 34 38 3b 0a 20  a<=2147483648;. 
08b0: 20 7d 0a 7d 20 7b 31 20 32 31 34 37 34 38 33 36   }.} {1 21474836
08c0: 34 38 20 32 31 34 37 34 38 33 36 34 37 7d 0a 64  48 2147483647}.d
08d0: 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 34 2e 35  o_test misc2-4.5
08e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
08f0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
0900: 20 74 31 20 57 48 45 52 45 20 61 3c 31 30 30 30   t1 WHERE a<1000
0910: 30 30 30 30 30 30 30 3b 0a 20 20 7d 0a 7d 20 7b  0000000;.  }.} {
0920: 31 20 34 30 30 30 30 30 30 30 30 30 20 32 31 34  1 4000000000 214
0930: 37 34 38 33 36 34 38 20 32 31 34 37 34 38 33 36  7483648 21474836
0940: 34 37 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  47}.do_test misc
0950: 32 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  2-4.6 {.  execsq
0960: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
0970: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
0980: 3c 31 30 30 30 30 30 30 30 30 30 30 30 30 20 4f  <1000000000000 O
0990: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
09a0: 20 7b 31 20 32 31 34 37 34 38 33 36 34 37 20 32   {1 2147483647 2
09b0: 31 34 37 34 38 33 36 34 38 20 34 30 30 30 30 30  147483648 400000
09c0: 30 30 30 30 7d 0a 0a 23 20 54 68 65 72 65 20 77  0000}..# There w
09d0: 65 72 65 20 73 6f 6d 65 20 69 73 73 75 65 73 20  ere some issues 
09e0: 77 69 74 68 20 65 78 70 61 6e 64 69 6e 67 20 61  with expanding a
09f0: 20 53 72 63 4c 69 73 74 20 6f 62 6a 65 63 74 20   SrcList object 
0a00: 75 73 69 6e 67 20 61 20 63 61 6c 6c 0a 23 20 74  using a call.# t
0a10: 6f 20 73 71 6c 69 74 65 53 72 63 4c 69 73 74 41  o sqliteSrcListA
0a20: 70 70 65 6e 64 28 29 20 69 66 20 74 68 65 20 53  ppend() if the S
0a30: 72 63 4c 69 73 74 20 68 61 64 20 70 72 65 76 69  rcList had previ
0a40: 6f 75 73 6c 79 20 62 65 65 6e 20 64 75 70 6c 69  ously been dupli
0a50: 63 61 74 65 64 0a 23 20 75 73 69 6e 67 20 61 20  cated.# using a 
0a60: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 53 72  call to sqliteSr
0a70: 63 4c 69 73 74 44 75 70 28 29 2e 20 20 54 69 63  cListDup().  Tic
0a80: 6b 65 74 20 23 34 31 36 2e 20 20 54 68 65 20 66  ket #416.  The f
0a90: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 0a 23 20  ollowing test.# 
0aa0: 6d 61 6b 65 73 20 73 75 72 65 20 74 68 65 20 70  makes sure the p
0ab0: 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
0ac0: 66 69 78 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74  fixed..#.do_test
0ad0: 20 6d 69 73 63 32 2d 35 2e 31 20 7b 0a 20 20 65   misc2-5.1 {.  e
0ae0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
0af0: 41 54 45 20 54 41 42 4c 45 20 78 28 61 2c 62 29  ATE TABLE x(a,b)
0b00: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  ;.    CREATE VIE
0b10: 57 20 79 20 41 53 20 0a 20 20 20 20 20 20 53 45  W y AS .      SE
0b20: 4c 45 43 54 20 78 31 2e 62 20 41 53 20 70 2c 20  LECT x1.b AS p, 
0b30: 78 32 2e 62 20 41 53 20 71 20 46 52 4f 4d 20 78  x2.b AS q FROM x
0b40: 20 41 53 20 78 31 2c 20 78 20 41 53 20 78 32 20   AS x1, x AS x2 
0b50: 57 48 45 52 45 20 78 31 2e 61 3d 78 32 2e 61 3b  WHERE x1.a=x2.a;
0b60: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57  .    CREATE VIEW
0b70: 20 7a 20 41 53 0a 20 20 20 20 20 20 53 45 4c 45   z AS.      SELE
0b80: 43 54 20 79 31 2e 70 2c 20 79 32 2e 70 20 46 52  CT y1.p, y2.p FR
0b90: 4f 4d 20 79 20 41 53 20 79 31 2c 20 79 20 41 53  OM y AS y1, y AS
0ba0: 20 79 32 20 57 48 45 52 45 20 79 31 2e 71 3d 79   y2 WHERE y1.q=y
0bb0: 32 2e 71 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  2.q;.    SELECT 
0bc0: 2a 20 66 72 6f 6d 20 7a 3b 0a 20 20 7d 0a 7d 20  * from z;.  }.} 
0bd0: 7b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  {}..# Make sure 
0be0: 77 65 20 63 61 6e 20 6f 70 65 6e 20 61 20 64 61  we can open a da
0bf0: 74 61 62 61 73 65 20 77 69 74 68 20 61 6e 20 65  tabase with an e
0c00: 6d 70 74 79 20 66 69 6c 65 6e 61 6d 65 2e 20 20  mpty filename.  
0c10: 57 68 61 74 20 74 68 69 73 0a 23 20 64 6f 65 73  What this.# does
0c20: 20 69 73 20 73 74 6f 72 65 20 74 68 65 20 64 61   is store the da
0c30: 74 61 62 61 73 65 20 69 6e 20 61 20 74 65 6d 70  tabase in a temp
0c40: 6f 72 61 72 79 20 66 69 6c 65 20 74 68 61 74 20  orary file that 
0c50: 69 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a  is deleted when.
0c60: 23 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  # the database i
0c70: 73 20 63 6c 6f 73 65 64 2e 20 20 54 69 63 6b 65  s closed.  Ticke
0c80: 74 20 23 34 33 32 2e 0a 23 0a 64 6f 5f 74 65 73  t #432..#.do_tes
0c90: 74 20 6d 69 73 63 32 2d 36 2e 31 20 7b 0a 20 20  t misc2-6.1 {.  
0ca0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
0cb0: 65 20 64 62 20 7b 7d 0a 20 20 65 78 65 63 73 71  e db {}.  execsq
0cc0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0cd0: 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a 20 20  ABLE t1(a,b);.  
0ce0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0cf0: 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20   VALUES(1,2);.  
0d00: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0d10: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a  t1;.  }.} {1 2}.
0d20: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20  .# Make sure we 
0d30: 67 65 74 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  get an error mes
0d40: 73 61 67 65 20 28 6e 6f 74 20 61 20 73 65 67 66  sage (not a segf
0d50: 61 75 6c 74 29 20 6f 6e 20 61 6e 20 61 74 74 65  ault) on an atte
0d60: 6d 70 74 20 74 6f 0a 23 20 75 70 64 61 74 65 20  mpt to.# update 
0d70: 61 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 69 74  a table from wit
0d80: 68 69 6e 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  hin the callback
0d90: 20 6f 66 20 61 20 73 65 6c 65 63 74 20 6f 6e 20   of a select on 
0da0: 74 68 61 74 20 73 61 6d 65 0a 23 20 74 61 62 6c  that same.# tabl
0db0: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73  e..#.do_test mis
0dc0: 63 32 2d 37 2e 31 20 7b 0a 20 20 64 62 20 63 6c  c2-7.1 {.  db cl
0dd0: 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  ose.  file delet
0de0: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62  e -force test.db
0df0: 0a 20 20 73 71 6c 69 74 65 20 64 62 20 74 65 73  .  sqlite db tes
0e00: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
0e10: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0e20: 45 20 74 31 28 78 29 3b 0a 20 20 20 20 49 4e 53  E t1(x);.    INS
0e30: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0e40: 45 53 28 31 29 3b 0a 20 20 7d 0a 20 20 73 65 74  ES(1);.  }.  set
0e50: 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20   rc [catch {.   
0e60: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
0e70: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 7d 20   rowid FROM t1} 
0e80: 7b 7d 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  {} {.      db ev
0e90: 61 6c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  al "DELETE FROM 
0ea0: 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d 24  t1 WHERE rowid=$
0eb0: 72 6f 77 69 64 22 0a 20 20 20 20 7d 0a 20 20 7d  rowid".    }.  }
0ec0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0ed0: 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61  rc $msg.} {1 {da
0ee0: 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
0ef0: 6c 6f 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  locked}}.do_test
0f00: 20 6d 69 73 63 32 2d 37 2e 32 20 7b 0a 20 20 73   misc2-7.2 {.  s
0f10: 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20  et rc [catch {. 
0f20: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
0f30: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  CT rowid FROM t1
0f40: 7d 20 7b 7d 20 7b 0a 20 20 20 20 20 20 64 62 20  } {} {.      db 
0f50: 65 76 61 6c 20 22 49 4e 53 45 52 54 20 49 4e 54  eval "INSERT INT
0f60: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 29 22 0a  O t1 VALUES(3)".
0f70: 20 20 20 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20      }.  } msg]. 
0f80: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
0f90: 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20  .} {1 {database 
0fa0: 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d  table is locked}
0fb0: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d  }.do_test misc2-
0fc0: 37 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  7.3 {.  db close
0fd0: 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  .  file delete -
0fe0: 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a 20 20  force test.db.  
0ff0: 73 71 6c 69 74 65 20 64 62 20 3a 6d 65 6d 6f 72  sqlite db :memor
1000: 79 3a 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  y:.  execsql {. 
1010: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1020: 74 31 28 78 29 3b 0a 20 20 20 20 49 4e 53 45 52  t1(x);.    INSER
1030: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1040: 28 31 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 72  (1);.  }.  set r
1050: 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 64  c [catch {.    d
1060: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 72  b eval {SELECT r
1070: 6f 77 69 64 20 46 52 4f 4d 20 74 31 7d 20 7b 7d  owid FROM t1} {}
1080: 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c   {.      db eval
1090: 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31   "DELETE FROM t1
10a0: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 24 72 6f   WHERE rowid=$ro
10b0: 77 69 64 22 0a 20 20 20 20 7d 0a 20 20 7d 20 6d  wid".    }.  } m
10c0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
10d0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61   $msg.} {1 {data
10e0: 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f  base table is lo
10f0: 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d  cked}}.do_test m
1100: 69 73 63 32 2d 37 2e 34 20 7b 0a 20 20 73 65 74  isc2-7.4 {.  set
1110: 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20   rc [catch {.   
1120: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
1130: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 7d 20   rowid FROM t1} 
1140: 7b 7d 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  {} {.      db ev
1150: 61 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  al "INSERT INTO 
1160: 74 31 20 56 41 4c 55 45 53 28 33 29 22 0a 20 20  t1 VALUES(3)".  
1170: 20 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c    }.  } msg].  l
1180: 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d  append rc $msg.}
1190: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 74 61   {1 {database ta
11a0: 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a  ble is locked}}.