/ Hex Artifact Content
Login

Artifact 1ee89298de9c16b61454658b24999c403e86afe4:


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 32 38 20 32  c2.test,v 1.28 2
0220: 30 30 37 2f 30 39 2f 31 32 20 31 37 3a 30 31 3a  007/09/12 17:01:
0230: 34 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45  45 danielk1977 E
0240: 78 70 20 24 0a 0a 73 65 74 20 74 65 73 74 64 69  xp $..set testdi
0250: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0260: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0270: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
0280: 63 6c 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 74  cl..ifcapable {t
0290: 72 69 67 67 65 72 7d 20 7b 0a 23 20 54 65 73 74  rigger} {.# Test
02a0: 20 66 6f 72 20 74 69 63 6b 65 74 20 23 33 36 30   for ticket #360
02b0: 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32  .#.do_test misc2
02c0: 2d 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  -1.1 {.  catchsq
02d0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
02e0: 41 42 4c 45 20 46 4f 4f 28 62 61 72 20 69 6e 74  ABLE FOO(bar int
02f0: 65 67 65 72 29 3b 0a 20 20 20 20 43 52 45 41 54  eger);.    CREAT
0300: 45 20 54 52 49 47 47 45 52 20 66 6f 6f 5f 69 6e  E TRIGGER foo_in
0310: 73 65 72 74 20 42 45 46 4f 52 45 20 49 4e 53 45  sert BEFORE INSE
0320: 52 54 20 4f 4e 20 66 6f 6f 20 42 45 47 49 4e 0a  RT ON foo BEGIN.
0330: 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 41 53        SELECT CAS
0340: 45 20 57 48 45 4e 20 28 4e 4f 54 20 6e 65 77 2e  E WHEN (NOT new.
0350: 62 61 72 20 42 45 54 57 45 45 4e 20 30 20 41 4e  bar BETWEEN 0 AN
0360: 44 20 32 30 29 0a 20 20 20 20 20 20 20 20 20 20  D 20).          
0370: 20 20 20 54 48 45 4e 20 72 61 69 73 65 28 72 6f     THEN raise(ro
0380: 6c 6c 62 61 63 6b 2c 20 27 61 69 69 65 65 65 27  llback, 'aiieee'
0390: 29 20 45 4e 44 3b 0a 20 20 20 20 45 4e 44 3b 0a  ) END;.    END;.
03a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
03b0: 66 6f 6f 28 62 61 72 29 20 56 41 4c 55 45 53 20  foo(bar) VALUES 
03c0: 28 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  (1);.  }.} {0 {}
03d0: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d  }.do_test misc2-
03e0: 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  1.2 {.  catchsql
03f0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
0400: 54 4f 20 66 6f 6f 28 62 61 72 29 20 56 41 4c 55  TO foo(bar) VALU
0410: 45 53 20 28 31 31 31 29 3b 0a 20 20 7d 0a 7d 20  ES (111);.  }.} 
0420: 7b 31 20 61 69 69 65 65 65 7d 0a 7d 20 3b 23 20  {1 aiieee}.} ;# 
0430: 65 6e 64 69 66 20 74 72 69 67 67 65 72 0a 0a 23  endif trigger..#
0440: 20 4d 61 6b 65 20 73 75 72 65 20 52 4f 57 49 44   Make sure ROWID
0450: 20 77 6f 72 6b 73 20 6f 6e 20 61 20 76 69 65 77   works on a view
0460: 20 61 6e 64 20 61 20 73 75 62 71 75 65 72 79 2e   and a subquery.
0470: 20 20 54 69 63 6b 65 74 20 23 33 36 34 0a 23 0a    Ticket #364.#.
0480: 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 32 2e  do_test misc2-2.
0490: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
04a0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
04b0: 20 74 31 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20   t1(a,b,c);.    
04c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
04d0: 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20  ALUES(1,2,3);.  
04e0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
04f0: 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 49 4e  2(a,b,c);.    IN
0500: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
0510: 55 45 53 28 37 2c 38 2c 39 29 3b 0a 20 20 7d 0a  UES(7,8,9);.  }.
0520: 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 73  } {}.ifcapable s
0530: 75 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74  ubquery {.  do_t
0540: 65 73 74 20 6d 69 73 63 32 2d 32 2e 32 20 7b 0a  est misc2-2.2 {.
0550: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
0560: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
0570: 2c 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  , * FROM (SELECT
0580: 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 29 3b   * FROM t1, t2);
0590: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 31  .    }.  } {{} 1
05a0: 20 32 20 33 20 37 20 38 20 39 7d 0a 7d 0a 69 66   2 3 7 8 9}.}.if
05b0: 63 61 70 61 62 6c 65 20 76 69 65 77 20 7b 0a 20  capable view {. 
05c0: 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 32   do_test misc2-2
05d0: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
05e0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
05f0: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
0600: 54 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 3b  T * FROM t1, t2;
0610: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 72 6f  .      SELECT ro
0620: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 76 31 3b 0a  wid, * FROM v1;.
0630: 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 31 20      }.  } {{} 1 
0640: 32 20 33 20 37 20 38 20 39 7d 0a 7d 20 3b 23 20  2 3 7 8 9}.} ;# 
0650: 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 0a 0a  ifcapable view..
0660: 23 20 54 69 63 6b 65 74 20 23 32 30 30 32 20 61  # Ticket #2002 a
0670: 6e 64 20 23 31 39 35 32 2e 0a 69 66 63 61 70 61  nd #1952..ifcapa
0680: 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20  ble subquery {. 
0690: 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 32   do_test misc2-2
06a0: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
06b0: 32 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  2 {.      SELECT
06c0: 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   * FROM (SELECT 
06d0: 61 2c 20 62 20 41 53 20 27 61 27 2c 20 63 20 41  a, b AS 'a', c A
06e0: 53 20 27 61 27 2c 20 34 20 41 53 20 27 61 27 20  S 'a', 4 AS 'a' 
06f0: 46 52 4f 4d 20 74 31 29 0a 20 20 20 20 7d 0a 20  FROM t1).    }. 
0700: 20 7d 20 7b 61 20 31 20 61 3a 31 20 32 20 61 3a   } {a 1 a:1 2 a:
0710: 32 20 33 20 61 3a 33 20 34 7d 0a 7d 0a 0a 23 20  2 3 a:3 4}.}..# 
0720: 43 68 65 63 6b 20 6e 61 6d 65 20 62 69 6e 64 69  Check name bindi
0730: 6e 67 20 70 72 65 63 65 64 65 6e 63 65 2e 20 20  ng precedence.  
0740: 54 69 63 6b 65 74 20 23 33 38 37 0a 23 0a 64 6f  Ticket #387.#.do
0750: 5f 74 65 73 74 20 6d 69 73 63 32 2d 33 2e 31 20  _test misc2-3.1 
0760: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
0770: 20 20 20 53 45 4c 45 43 54 20 74 31 2e 62 2b 74     SELECT t1.b+t
0780: 32 2e 62 20 41 53 20 61 2c 20 74 31 2e 61 2c 20  2.b AS a, t1.a, 
0790: 74 32 2e 61 20 46 52 4f 4d 20 74 31 2c 20 74 32  t2.a FROM t1, t2
07a0: 20 57 48 45 52 45 20 61 3d 3d 31 30 0a 20 20 7d   WHERE a==10.  }
07b0: 0a 7d 20 7b 31 20 7b 61 6d 62 69 67 75 6f 75 73  .} {1 {ambiguous
07c0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 61 7d   column name: a}
07d0: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 33  }..# Make sure 3
07e0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 6f 76  2-bit integer ov
07f0: 65 72 66 6c 6f 77 20 69 73 20 68 61 6e 64 6c 65  erflow is handle
0800: 64 20 70 72 6f 70 65 72 6c 79 20 69 6e 20 71 75  d properly in qu
0810: 65 72 69 65 73 2e 0a 23 20 74 69 63 6b 65 74 20  eries..# ticket 
0820: 23 34 30 38 0a 23 0a 64 6f 5f 74 65 73 74 20 6d  #408.#.do_test m
0830: 69 73 63 32 2d 34 2e 31 20 7b 0a 20 20 65 78 65  isc2-4.1 {.  exe
0840: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
0850: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0860: 28 34 30 30 30 30 30 30 30 30 30 2c 27 61 27 2c  (4000000000,'a',
0870: 27 62 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  'b');.    SELECT
0880: 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   a FROM t1 WHERE
0890: 20 61 3e 31 3b 0a 20 20 7d 0a 7d 20 7b 34 30 30   a>1;.  }.} {400
08a0: 30 30 30 30 30 30 30 7d 0a 64 6f 5f 74 65 73 74  0000000}.do_test
08b0: 20 6d 69 73 63 32 2d 34 2e 32 20 7b 0a 20 20 65   misc2-4.2 {.  e
08c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
08d0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
08e0: 45 53 28 32 31 34 37 34 38 33 36 34 38 2c 27 62  ES(2147483648,'b
08f0: 32 27 2c 27 63 32 27 29 3b 0a 20 20 20 20 49 4e  2','c2');.    IN
0900: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0910: 55 45 53 28 32 31 34 37 34 38 33 36 34 37 2c 27  UES(2147483647,'
0920: 62 33 27 2c 27 63 33 27 29 3b 0a 20 20 20 20 53  b3','c3');.    S
0930: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
0940: 57 48 45 52 45 20 61 3e 32 31 34 37 34 38 33 36  WHERE a>21474836
0950: 34 37 3b 0a 20 20 7d 0a 7d 20 7b 34 30 30 30 30  47;.  }.} {40000
0960: 30 30 30 30 30 20 32 31 34 37 34 38 33 36 34 38  00000 2147483648
0970: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d  }.do_test misc2-
0980: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
0990: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
09a0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3c 32  ROM t1 WHERE a<2
09b0: 31 34 37 34 38 33 36 34 38 3b 0a 20 20 7d 0a 7d  147483648;.  }.}
09c0: 20 7b 31 20 32 31 34 37 34 38 33 36 34 37 7d 0a   {1 2147483647}.
09d0: 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 34 2e  do_test misc2-4.
09e0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
09f0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
0a00: 4d 20 74 31 20 57 48 45 52 45 20 61 3c 3d 32 31  M t1 WHERE a<=21
0a10: 34 37 34 38 33 36 34 38 3b 0a 20 20 7d 0a 7d 20  47483648;.  }.} 
0a20: 7b 31 20 32 31 34 37 34 38 33 36 34 38 20 32 31  {1 2147483648 21
0a30: 34 37 34 38 33 36 34 37 7d 0a 64 6f 5f 74 65 73  47483647}.do_tes
0a40: 74 20 6d 69 73 63 32 2d 34 2e 35 20 7b 0a 20 20  t misc2-4.5 {.  
0a50: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
0a60: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
0a70: 48 45 52 45 20 61 3c 31 30 30 30 30 30 30 30 30  HERE a<100000000
0a80: 30 30 3b 0a 20 20 7d 0a 7d 20 7b 31 20 34 30 30  00;.  }.} {1 400
0a90: 30 30 30 30 30 30 30 20 32 31 34 37 34 38 33 36  0000000 21474836
0aa0: 34 38 20 32 31 34 37 34 38 33 36 34 37 7d 0a 64  48 2147483647}.d
0ab0: 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 34 2e 36  o_test misc2-4.6
0ac0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0ad0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
0ae0: 20 74 31 20 57 48 45 52 45 20 61 3c 31 30 30 30   t1 WHERE a<1000
0af0: 30 30 30 30 30 30 30 30 30 20 4f 52 44 45 52 20  000000000 ORDER 
0b00: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  BY 1;.  }.} {1 2
0b10: 31 34 37 34 38 33 36 34 37 20 32 31 34 37 34 38  147483647 214748
0b20: 33 36 34 38 20 34 30 30 30 30 30 30 30 30 30 7d  3648 4000000000}
0b30: 0a 0a 23 20 54 68 65 72 65 20 77 65 72 65 20 73  ..# There were s
0b40: 6f 6d 65 20 69 73 73 75 65 73 20 77 69 74 68 20  ome issues with 
0b50: 65 78 70 61 6e 64 69 6e 67 20 61 20 53 72 63 4c  expanding a SrcL
0b60: 69 73 74 20 6f 62 6a 65 63 74 20 75 73 69 6e 67  ist object using
0b70: 20 61 20 63 61 6c 6c 0a 23 20 74 6f 20 73 71 6c   a call.# to sql
0b80: 69 74 65 53 72 63 4c 69 73 74 41 70 70 65 6e 64  iteSrcListAppend
0b90: 28 29 20 69 66 20 74 68 65 20 53 72 63 4c 69 73  () if the SrcLis
0ba0: 74 20 68 61 64 20 70 72 65 76 69 6f 75 73 6c 79  t had previously
0bb0: 20 62 65 65 6e 20 64 75 70 6c 69 63 61 74 65 64   been duplicated
0bc0: 0a 23 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 20  .# using a call 
0bd0: 74 6f 20 73 71 6c 69 74 65 53 72 63 4c 69 73 74  to sqliteSrcList
0be0: 44 75 70 28 29 2e 20 20 54 69 63 6b 65 74 20 23  Dup().  Ticket #
0bf0: 34 31 36 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  416.  The follow
0c00: 69 6e 67 20 74 65 73 74 0a 23 20 6d 61 6b 65 73  ing test.# makes
0c10: 20 73 75 72 65 20 74 68 65 20 70 72 6f 62 6c 65   sure the proble
0c20: 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78 65 64  m has been fixed
0c30: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 76 69  ..#.ifcapable vi
0c40: 65 77 20 7b 0a 64 6f 5f 74 65 73 74 20 6d 69 73  ew {.do_test mis
0c50: 63 32 2d 35 2e 31 20 7b 0a 20 20 65 78 65 63 73  c2-5.1 {.  execs
0c60: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
0c70: 54 41 42 4c 45 20 78 28 61 2c 62 29 3b 0a 20 20  TABLE x(a,b);.  
0c80: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 79 20    CREATE VIEW y 
0c90: 41 53 20 0a 20 20 20 20 20 20 53 45 4c 45 43 54  AS .      SELECT
0ca0: 20 78 31 2e 62 20 41 53 20 70 2c 20 78 32 2e 62   x1.b AS p, x2.b
0cb0: 20 41 53 20 71 20 46 52 4f 4d 20 78 20 41 53 20   AS q FROM x AS 
0cc0: 78 31 2c 20 78 20 41 53 20 78 32 20 57 48 45 52  x1, x AS x2 WHER
0cd0: 45 20 78 31 2e 61 3d 78 32 2e 61 3b 0a 20 20 20  E x1.a=x2.a;.   
0ce0: 20 43 52 45 41 54 45 20 56 49 45 57 20 7a 20 41   CREATE VIEW z A
0cf0: 53 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 79  S.      SELECT y
0d00: 31 2e 70 2c 20 79 32 2e 70 20 46 52 4f 4d 20 79  1.p, y2.p FROM y
0d10: 20 41 53 20 79 31 2c 20 79 20 41 53 20 79 32 20   AS y1, y AS y2 
0d20: 57 48 45 52 45 20 79 31 2e 71 3d 79 32 2e 71 3b  WHERE y1.q=y2.q;
0d30: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 66 72  .    SELECT * fr
0d40: 6f 6d 20 7a 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d  om z;.  }.} {}.}
0d50: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65  ..# Make sure we
0d60: 20 63 61 6e 20 6f 70 65 6e 20 61 20 64 61 74 61   can open a data
0d70: 62 61 73 65 20 77 69 74 68 20 61 6e 20 65 6d 70  base with an emp
0d80: 74 79 20 66 69 6c 65 6e 61 6d 65 2e 20 20 57 68  ty filename.  Wh
0d90: 61 74 20 74 68 69 73 0a 23 20 64 6f 65 73 20 69  at this.# does i
0da0: 73 20 73 74 6f 72 65 20 74 68 65 20 64 61 74 61  s store the data
0db0: 62 61 73 65 20 69 6e 20 61 20 74 65 6d 70 6f 72  base in a tempor
0dc0: 61 72 79 20 66 69 6c 65 20 74 68 61 74 20 69 73  ary file that is
0dd0: 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 23 20   deleted when.# 
0de0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
0df0: 63 6c 6f 73 65 64 2e 20 20 54 69 63 6b 65 74 20  closed.  Ticket 
0e00: 23 34 33 32 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  #432..#.do_test 
0e10: 6d 69 73 63 32 2d 36 2e 31 20 7b 0a 20 20 64 62  misc2-6.1 {.  db
0e20: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
0e30: 20 64 62 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c   db {}.  execsql
0e40: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
0e50: 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a 20 20 20  BLE t1(a,b);.   
0e60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0e70: 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20  VALUES(1,2);.   
0e80: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0e90: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a  1;.  }.} {1 2}..
0ea0: 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 67  # Make sure we g
0eb0: 65 74 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  et an error mess
0ec0: 61 67 65 20 28 6e 6f 74 20 61 20 73 65 67 66 61  age (not a segfa
0ed0: 75 6c 74 29 20 6f 6e 20 61 6e 20 61 74 74 65 6d  ult) on an attem
0ee0: 70 74 20 74 6f 0a 23 20 75 70 64 61 74 65 20 61  pt to.# update a
0ef0: 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 69 74 68   table from with
0f00: 69 6e 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  in the callback 
0f10: 6f 66 20 61 20 73 65 6c 65 63 74 20 6f 6e 20 74  of a select on t
0f20: 68 61 74 20 73 61 6d 65 0a 23 20 74 61 62 6c 65  hat same.# table
0f30: 2e 0a 23 0a 23 20 32 30 30 36 2d 30 38 2d 31 36  ..#.# 2006-08-16
0f40: 3a 20 20 54 68 69 73 20 68 61 73 20 63 68 61 6e  :  This has chan
0f50: 67 65 64 2e 20 20 49 74 20 69 73 20 6e 6f 77 20  ged.  It is now 
0f60: 70 65 72 6d 69 74 74 65 64 20 74 6f 20 75 70 64  permitted to upd
0f70: 61 74 65 0a 23 20 74 68 65 20 74 61 62 6c 65 20  ate.# the table 
0f80: 62 65 69 6e 67 20 53 45 4c 45 43 54 65 64 20 66  being SELECTed f
0f90: 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 63  rom within the c
0fa0: 61 6c 6c 62 61 63 6b 20 6f 66 20 74 68 65 20 71  allback of the q
0fb0: 75 65 72 79 2e 0a 23 0a 69 66 63 61 70 61 62 6c  uery..#.ifcapabl
0fc0: 65 20 74 63 6c 76 61 72 20 7b 0a 20 20 64 6f 5f  e tclvar {.  do_
0fd0: 74 65 73 74 20 6d 69 73 63 32 2d 37 2e 31 20 7b  test misc2-7.1 {
0fe0: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
0ff0: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
1000: 6f 72 63 65 20 74 65 73 74 2e 64 62 0a 20 20 20  orce test.db.   
1010: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
1020: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
1030: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
1040: 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20 20  ABLE t1(x);.    
1050: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1060: 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20   VALUES(1);.    
1070: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1080: 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20   VALUES(2);.    
1090: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
10a0: 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 20 20   VALUES(3);.    
10b0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
10c0: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  t1;.    }.  } {1
10d0: 20 32 20 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20   2 3}.  do_test 
10e0: 6d 69 73 63 32 2d 37 2e 32 20 7b 0a 20 20 20 20  misc2-7.2 {.    
10f0: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
1100: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53        db eval {S
1110: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
1120: 20 74 31 7d 20 7b 7d 20 7b 0a 20 20 20 20 20 20   t1} {} {.      
1130: 20 20 64 62 20 65 76 61 6c 20 22 44 45 4c 45 54    db eval "DELET
1140: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
1150: 72 6f 77 69 64 3d 24 72 6f 77 69 64 22 0a 20 20  rowid=$rowid".  
1160: 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73 67 5d      }.    } msg]
1170: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 63 20  .    lappend rc 
1180: 24 6d 73 67 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a  $msg.  } {0 {}}.
1190: 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d    do_test misc2-
11a0: 37 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  7.3 {.    execsq
11b0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
11c0: 20 74 31 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f   t1}.  } {}.  do
11d0: 5f 74 65 73 74 20 6d 69 73 63 32 2d 37 2e 34 20  _test misc2-7.4 
11e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
11f0: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
1200: 4d 20 74 31 3b 0a 20 20 20 20 20 20 49 4e 53 45  M t1;.      INSE
1210: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1220: 53 28 31 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(1);.      INSE
1230: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1240: 53 28 32 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(2);.      INSE
1250: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1260: 53 28 33 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(3);.      INSE
1270: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1280: 53 28 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  S(4);.    }.    
1290: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
12a0: 72 6f 77 69 64 2c 20 78 20 46 52 4f 4d 20 74 31  rowid, x FROM t1
12b0: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 78  } {.      if {$x
12c0: 20 26 20 31 7d 20 7b 0a 20 20 20 20 20 20 20 20   & 1} {.        
12d0: 64 62 20 65 76 61 6c 20 7b 44 45 4c 45 54 45 20  db eval {DELETE 
12e0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f  FROM t1 WHERE ro
12f0: 77 69 64 3d 24 72 6f 77 69 64 7d 0a 20 20 20 20  wid=$rowid}.    
1300: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 78    }.    }.    ex
1310: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1320: 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 20  FROM t1}.  } {2 
1330: 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73  4}.  do_test mis
1340: 63 32 2d 37 2e 35 20 7b 0a 20 20 20 20 65 78 65  c2-7.5 {.    exe
1350: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c  csql {.      DEL
1360: 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  ETE FROM t1;.   
1370: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1380: 31 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20  1 VALUES(1);.   
1390: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13a0: 31 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20  1 VALUES(2);.   
13b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13c0: 31 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 20  1 VALUES(3);.   
13d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13e0: 31 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 20  1 VALUES(4);.   
13f0: 20 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b   }.    db eval {
1400: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20  SELECT rowid, x 
1410: 46 52 4f 4d 20 74 31 7d 20 7b 0a 20 20 20 20 20  FROM t1} {.     
1420: 20 69 66 20 7b 24 78 20 26 20 31 7d 20 7b 0a 20   if {$x & 1} {. 
1430: 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b         db eval {
1440: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
1450: 48 45 52 45 20 72 6f 77 69 64 3d 24 72 6f 77 69  HERE rowid=$rowi
1460: 64 2b 31 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20  d+1}.      }.   
1470: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
1480: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1490: 7d 0a 20 20 7d 20 7b 31 20 33 7d 0a 20 20 64 6f  }.  } {1 3}.  do
14a0: 5f 74 65 73 74 20 6d 69 73 63 32 2d 37 2e 36 20  _test misc2-7.6 
14b0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
14c0: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
14d0: 4d 20 74 31 3b 0a 20 20 20 20 20 20 49 4e 53 45  M t1;.      INSE
14e0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
14f0: 53 28 31 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(1);.      INSE
1500: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1510: 53 28 32 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(2);.      INSE
1520: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1530: 53 28 33 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(3);.      INSE
1540: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1550: 53 28 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  S(4);.    }.    
1560: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
1570: 72 6f 77 69 64 2c 20 78 20 46 52 4f 4d 20 74 31  rowid, x FROM t1
1580: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 78  } {.      if {$x
1590: 20 26 20 31 7d 20 7b 0a 20 20 20 20 20 20 20 20   & 1} {.        
15a0: 64 62 20 65 76 61 6c 20 7b 44 45 4c 45 54 45 20  db eval {DELETE 
15b0: 46 52 4f 4d 20 74 31 7d 0a 20 20 20 20 20 20 7d  FROM t1}.      }
15c0: 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73  .    }.    execs
15d0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
15e0: 4d 20 74 31 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64  M t1}.  } {}.  d
15f0: 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 37 2e 37  o_test misc2-7.7
1600: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1610: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
1620: 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20 49 4e 53  OM t1;.      INS
1630: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1640: 45 53 28 31 29 3b 0a 20 20 20 20 20 20 49 4e 53  ES(1);.      INS
1650: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1660: 45 53 28 32 29 3b 0a 20 20 20 20 20 20 49 4e 53  ES(2);.      INS
1670: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1680: 45 53 28 33 29 3b 0a 20 20 20 20 20 20 49 4e 53  ES(3);.      INS
1690: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
16a0: 45 53 28 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ES(4);.    }.   
16b0: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
16c0: 20 72 6f 77 69 64 2c 20 78 20 46 52 4f 4d 20 74   rowid, x FROM t
16d0: 31 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  1} {.      if {$
16e0: 78 20 26 20 31 7d 20 7b 0a 20 20 20 20 20 20 20  x & 1} {.       
16f0: 20 64 62 20 65 76 61 6c 20 7b 55 50 44 41 54 45   db eval {UPDATE
1700: 20 74 31 20 53 45 54 20 78 3d 78 2b 31 30 30 20   t1 SET x=x+100 
1710: 57 48 45 52 45 20 72 6f 77 69 64 3d 24 72 6f 77  WHERE rowid=$row
1720: 69 64 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  id}.      }.    
1730: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
1740: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d  ELECT * FROM t1}
1750: 0a 20 20 7d 20 7b 31 30 31 20 32 20 31 30 33 20  .  } {101 2 103 
1760: 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73  4}.  do_test mis
1770: 63 32 2d 37 2e 38 20 7b 0a 20 20 20 20 65 78 65  c2-7.8 {.    exe
1780: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c  csql {.      DEL
1790: 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  ETE FROM t1;.   
17a0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
17b0: 31 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20  1 VALUES(1);.   
17c0: 20 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b   }.    db eval {
17d0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20  SELECT rowid, x 
17e0: 46 52 4f 4d 20 74 31 7d 20 7b 0a 20 20 20 20 20  FROM t1} {.     
17f0: 20 69 66 20 7b 24 78 3c 31 30 7d 20 7b 0a 20 20   if {$x<10} {.  
1800: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 49        db eval {I
1810: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1820: 4c 55 45 53 28 24 78 2b 31 29 7d 0a 20 20 20 20  LUES($x+1)}.    
1830: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 78    }.    }.    ex
1840: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1850: 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 31 20  FROM t1}.  } {1 
1860: 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39 20  2 3 4 5 6 7 8 9 
1870: 31 30 7d 0a 20 20 0a 20 20 23 20 52 65 70 65 61  10}.  .  # Repea
1880: 74 20 74 68 65 20 74 65 73 74 73 20 37 2e 31 20  t the tests 7.1 
1890: 74 68 72 6f 75 67 68 20 37 2e 38 20 61 62 6f 75  through 7.8 abou
18a0: 74 20 62 75 74 20 74 68 69 73 20 74 69 6d 65 20  t but this time 
18b0: 64 6f 20 74 68 65 20 53 45 4c 45 43 54 73 0a 20  do the SELECTs. 
18c0: 20 23 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72   # in reverse or
18d0: 64 65 72 20 73 6f 20 74 68 61 74 20 77 65 20 65  der so that we e
18e0: 78 65 72 63 69 73 65 20 74 68 65 20 73 71 6c 69  xercise the sqli
18f0: 74 65 33 42 74 72 65 65 50 72 65 76 28 29 20 72  te3BtreePrev() r
1900: 6f 75 74 69 6e 65 0a 20 20 23 20 69 6e 73 74 65  outine.  # inste
1910: 61 64 20 6f 66 20 73 71 6c 69 74 65 33 42 74 72  ad of sqlite3Btr
1920: 65 65 4e 65 78 74 28 29 0a 20 20 23 0a 20 20 64  eeNext().  #.  d
1930: 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d 37 2e 31  o_test misc2-7.1
1940: 31 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65  1 {.    db close
1950: 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65  .    file delete
1960: 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a   -force test.db.
1970: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
1980: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
1990: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
19a0: 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20  E TABLE t1(x);. 
19b0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19c0: 20 74 31 20 56 41 4c 55 45 53 28 31 29 3b 0a 20   t1 VALUES(1);. 
19d0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19e0: 20 74 31 20 56 41 4c 55 45 53 28 32 29 3b 0a 20   t1 VALUES(2);. 
19f0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1a00: 20 74 31 20 56 41 4c 55 45 53 28 33 29 3b 0a 20   t1 VALUES(3);. 
1a10: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
1a20: 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  OM t1;.    }.  }
1a30: 20 7b 31 20 32 20 33 7d 0a 20 20 64 6f 5f 74 65   {1 2 3}.  do_te
1a40: 73 74 20 6d 69 73 63 32 2d 37 2e 31 32 20 7b 0a  st misc2-7.12 {.
1a50: 20 20 20 20 73 65 74 20 72 63 20 5b 63 61 74 63      set rc [catc
1a60: 68 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61  h {.      db eva
1a70: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 20  l {SELECT rowid 
1a80: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
1a90: 20 72 6f 77 69 64 20 44 45 53 43 7d 20 7b 7d 20   rowid DESC} {} 
1aa0: 7b 0a 20 20 20 20 20 20 20 20 64 62 20 65 76 61  {.        db eva
1ab0: 6c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l "DELETE FROM t
1ac0: 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d 24 72  1 WHERE rowid=$r
1ad0: 6f 77 69 64 22 0a 20 20 20 20 20 20 7d 0a 20 20  owid".      }.  
1ae0: 20 20 7d 20 6d 73 67 5d 0a 20 20 20 20 6c 61 70    } msg].    lap
1af0: 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 20 20 7d  pend rc $msg.  }
1b00: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
1b10: 74 20 6d 69 73 63 32 2d 37 2e 31 33 20 7b 0a 20  t misc2-7.13 {. 
1b20: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
1b30: 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 20 20  CT * FROM t1}.  
1b40: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 6d  } {}.  do_test m
1b50: 69 73 63 32 2d 37 2e 31 34 20 7b 0a 20 20 20 20  isc2-7.14 {.    
1b60: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1b70: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a  DELETE FROM t1;.
1b80: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1b90: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 29 3b 0a  O t1 VALUES(1);.
1ba0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1bb0: 4f 20 74 31 20 56 41 4c 55 45 53 28 32 29 3b 0a  O t1 VALUES(2);.
1bc0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1bd0: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 29 3b 0a  O t1 VALUES(3);.
1be0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1bf0: 4f 20 74 31 20 56 41 4c 55 45 53 28 34 29 3b 0a  O t1 VALUES(4);.
1c00: 20 20 20 20 7d 0a 20 20 20 20 64 62 20 65 76 61      }.    db eva
1c10: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
1c20: 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   x FROM t1 ORDER
1c30: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 20   BY rowid DESC} 
1c40: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 78 20 26  {.      if {$x &
1c50: 20 31 7d 20 7b 0a 20 20 20 20 20 20 20 20 64 62   1} {.        db
1c60: 20 65 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52   eval {DELETE FR
1c70: 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77 69  OM t1 WHERE rowi
1c80: 64 3d 24 72 6f 77 69 64 7d 0a 20 20 20 20 20 20  d=$rowid}.      
1c90: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63  }.    }.    exec
1ca0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1cb0: 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 20 34 7d  OM t1}.  } {2 4}
1cc0: 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 32  .  do_test misc2
1cd0: 2d 37 2e 31 35 20 7b 0a 20 20 20 20 65 78 65 63  -7.15 {.    exec
1ce0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45  sql {.      DELE
1cf0: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
1d00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1d10: 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20   VALUES(1);.    
1d20: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1d30: 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20   VALUES(2);.    
1d40: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1d50: 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 20 20   VALUES(3);.    
1d60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1d70: 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 20 20   VALUES(4);.    
1d80: 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53  }.    db eval {S
1d90: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20 46  ELECT rowid, x F
1da0: 52 4f 4d 20 74 31 7d 20 7b 0a 20 20 20 20 20 20  ROM t1} {.      
1db0: 69 66 20 7b 24 78 20 26 20 31 7d 20 7b 0a 20 20  if {$x & 1} {.  
1dc0: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 44        db eval {D
1dd0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
1de0: 45 52 45 20 72 6f 77 69 64 3d 24 72 6f 77 69 64  ERE rowid=$rowid
1df0: 2b 31 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  +1}.      }.    
1e00: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
1e10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d  ELECT * FROM t1}
1e20: 0a 20 20 7d 20 7b 31 20 33 7d 0a 20 20 64 6f 5f  .  } {1 3}.  do_
1e30: 74 65 73 74 20 6d 69 73 63 32 2d 37 2e 31 36 20  test misc2-7.16 
1e40: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1e50: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
1e60: 4d 20 74 31 3b 0a 20 20 20 20 20 20 49 4e 53 45  M t1;.      INSE
1e70: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1e80: 53 28 31 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(1);.      INSE
1e90: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1ea0: 53 28 32 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(2);.      INSE
1eb0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1ec0: 53 28 33 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  S(3);.      INSE
1ed0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1ee0: 53 28 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  S(4);.    }.    
1ef0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
1f00: 72 6f 77 69 64 2c 20 78 20 46 52 4f 4d 20 74 31  rowid, x FROM t1
1f10: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
1f20: 44 45 53 43 7d 20 7b 0a 20 20 20 20 20 20 69 66  DESC} {.      if
1f30: 20 7b 24 78 20 26 20 31 7d 20 7b 0a 20 20 20 20   {$x & 1} {.    
1f40: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 44 45 4c      db eval {DEL
1f50: 45 54 45 20 46 52 4f 4d 20 74 31 7d 0a 20 20 20  ETE FROM t1}.   
1f60: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65     }.    }.    e
1f70: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1f80: 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 7d   FROM t1}.  } {}
1f90: 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 32  .  do_test misc2
1fa0: 2d 37 2e 31 37 20 7b 0a 20 20 20 20 65 78 65 63  -7.17 {.    exec
1fb0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45  sql {.      DELE
1fc0: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
1fd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1fe0: 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20   VALUES(1);.    
1ff0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
2000: 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20   VALUES(2);.    
2010: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
2020: 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 20 20   VALUES(3);.    
2030: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
2040: 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 20 20   VALUES(4);.    
2050: 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53  }.    db eval {S
2060: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20 46  ELECT rowid, x F
2070: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
2080: 72 6f 77 69 64 20 44 45 53 43 7d 20 7b 0a 20 20  rowid DESC} {.  
2090: 20 20 20 20 69 66 20 7b 24 78 20 26 20 31 7d 20      if {$x & 1} 
20a0: 7b 0a 20 20 20 20 20 20 20 20 64 62 20 65 76 61  {.        db eva
20b0: 6c 20 7b 55 50 44 41 54 45 20 74 31 20 53 45 54  l {UPDATE t1 SET
20c0: 20 78 3d 78 2b 31 30 30 20 57 48 45 52 45 20 72   x=x+100 WHERE r
20d0: 6f 77 69 64 3d 24 72 6f 77 69 64 7d 0a 20 20 20  owid=$rowid}.   
20e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65     }.    }.    e
20f0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2100: 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 31   FROM t1}.  } {1
2110: 30 31 20 32 20 31 30 33 20 34 7d 0a 20 20 64 6f  01 2 103 4}.  do
2120: 5f 74 65 73 74 20 6d 69 73 63 32 2d 37 2e 31 38  _test misc2-7.18
2130: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
2140: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
2150: 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20 49 4e 53  OM t1;.      INS
2160: 45 52 54 20 49 4e 54 4f 20 74 31 28 72 6f 77 69  ERT INTO t1(rowi
2170: 64 2c 78 29 20 56 41 4c 55 45 53 28 31 30 2c 31  d,x) VALUES(10,1
2180: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  0);.    }.    db
2190: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 72 6f   eval {SELECT ro
21a0: 77 69 64 2c 20 78 20 46 52 4f 4d 20 74 31 20 4f  wid, x FROM t1 O
21b0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
21c0: 53 43 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  SC} {.      if {
21d0: 24 78 3e 31 7d 20 7b 0a 20 20 20 20 20 20 20 20  $x>1} {.        
21e0: 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20  db eval {INSERT 
21f0: 49 4e 54 4f 20 74 31 28 72 6f 77 69 64 2c 78 29  INTO t1(rowid,x)
2200: 20 56 41 4c 55 45 53 28 24 78 2d 31 2c 24 78 2d   VALUES($x-1,$x-
2210: 31 29 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1)}.      }.    
2220: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
2230: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d  ELECT * FROM t1}
2240: 0a 20 20 7d 20 7b 31 20 32 20 33 20 34 20 35 20  .  } {1 2 3 4 5 
2250: 36 20 37 20 38 20 39 20 31 30 7d 0a 7d 0a 0a 64  6 7 8 9 10}.}..d
2260: 62 20 63 6c 6f 73 65 0a 66 69 6c 65 20 64 65 6c  b close.file del
2270: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e  ete -force test.
2280: 64 62 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65  db.sqlite3 db te
2290: 73 74 2e 64 62 0a 0a 23 20 54 69 63 6b 65 74 20  st.db..# Ticket 
22a0: 23 34 35 33 2e 20 20 49 66 20 74 68 65 20 53 51  #453.  If the SQ
22b0: 4c 20 65 6e 64 65 64 20 77 69 74 68 20 22 2d 22  L ended with "-"
22c0: 2c 20 74 68 65 20 74 6f 6b 65 6e 69 7a 65 72 20  , the tokenizer 
22d0: 77 61 73 20 63 61 6c 6c 69 6e 67 20 74 68 61 74  was calling that
22e0: 0a 23 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65  .# an incomplete
22f0: 20 74 6f 6b 65 6e 2c 20 77 68 69 63 68 20 63 61   token, which ca
2300: 75 73 65 64 20 70 72 6f 62 6c 65 6d 2e 20 20 54  used problem.  T
2310: 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20  he solution was 
2320: 74 6f 20 6a 75 73 74 20 63 61 6c 6c 0a 23 20 69  to just call.# i
2330: 74 20 61 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a  t a minus sign..
2340: 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 32 2d  #.do_test misc2-
2350: 38 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  8.1 {.  catchsql
2360: 20 7b 2d 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20   {-}.} {1 {near 
2370: 22 2d 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  "-": syntax erro
2380: 72 7d 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 35  r}}..# Ticket #5
2390: 31 33 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  13.  Make sure t
23a0: 68 65 20 56 44 42 45 20 73 74 61 63 6b 20 64 6f  he VDBE stack do
23b0: 65 73 20 6e 6f 74 20 67 72 6f 77 20 6f 6e 20 61  es not grow on a
23c0: 20 33 2d 77 61 79 20 6a 6f 69 6e 2e 0a 23 0a 69   3-way join..#.i
23d0: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
23e0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63  {.  do_test misc
23f0: 32 2d 39 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  2-9.1 {.    exec
2400: 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45 47 49  sql {.      BEGI
2410: 4e 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  N;.      CREATE 
2420: 54 41 42 4c 45 20 63 6f 75 6e 74 73 28 6e 20 49  TABLE counts(n I
2430: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
2440: 45 59 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  EY);.      INSER
2450: 54 20 49 4e 54 4f 20 63 6f 75 6e 74 73 20 56 41  T INTO counts VA
2460: 4c 55 45 53 28 30 29 3b 0a 20 20 20 20 20 20 49  LUES(0);.      I
2470: 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 75 6e 74  NSERT INTO count
2480: 73 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20  s VALUES(1);.   
2490: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
24a0: 6f 75 6e 74 73 20 53 45 4c 45 43 54 20 6e 2b 32  ounts SELECT n+2
24b0: 20 46 52 4f 4d 20 63 6f 75 6e 74 73 3b 0a 20 20   FROM counts;.  
24c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
24d0: 63 6f 75 6e 74 73 20 53 45 4c 45 43 54 20 6e 2b  counts SELECT n+
24e0: 34 20 46 52 4f 4d 20 63 6f 75 6e 74 73 3b 0a 20  4 FROM counts;. 
24f0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
2500: 20 63 6f 75 6e 74 73 20 53 45 4c 45 43 54 20 6e   counts SELECT n
2510: 2b 38 20 46 52 4f 4d 20 63 6f 75 6e 74 73 3b 0a  +8 FROM counts;.
2520: 20 20 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20        COMMIT;.  
2530: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
2540: 4d 50 20 54 41 42 4c 45 20 78 20 41 53 0a 20 20  MP TABLE x AS.  
2550: 20 20 20 20 53 45 4c 45 43 54 20 64 69 6d 31 2e      SELECT dim1.
2560: 6e 2c 20 64 69 6d 32 2e 6e 2c 20 64 69 6d 33 2e  n, dim2.n, dim3.
2570: 6e 0a 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 75  n.      FROM cou
2580: 6e 74 73 20 41 53 20 64 69 6d 31 2c 20 63 6f 75  nts AS dim1, cou
2590: 6e 74 73 20 41 53 20 64 69 6d 32 2c 20 63 6f 75  nts AS dim2, cou
25a0: 6e 74 73 20 41 53 20 64 69 6d 33 0a 20 20 20 20  nts AS dim3.    
25b0: 20 20 57 48 45 52 45 20 64 69 6d 31 2e 6e 3c 31    WHERE dim1.n<1
25c0: 30 20 41 4e 44 20 64 69 6d 32 2e 6e 3c 31 30 20  0 AND dim2.n<10 
25d0: 41 4e 44 20 64 69 6d 33 2e 6e 3c 31 30 3b 0a 20  AND dim3.n<10;. 
25e0: 20 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 63   .      SELECT c
25f0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 78 3b 0a  ount(*) FROM x;.
2600: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30 30 30 7d      }.  } {1000}
2610: 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 32  .  do_test misc2
2620: 2d 39 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  -9.2 {.    execs
2630: 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20  ql {.      DROP 
2640: 54 41 42 4c 45 20 78 3b 0a 20 20 20 20 20 20 43  TABLE x;.      C
2650: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
2660: 20 78 20 41 53 0a 20 20 20 20 20 20 53 45 4c 45   x AS.      SELE
2670: 43 54 20 64 69 6d 31 2e 6e 2c 20 64 69 6d 32 2e  CT dim1.n, dim2.
2680: 6e 2c 20 64 69 6d 33 2e 6e 0a 20 20 20 20 20 20  n, dim3.n.      
2690: 46 52 4f 4d 20 63 6f 75 6e 74 73 20 41 53 20 64  FROM counts AS d
26a0: 69 6d 31 2c 20 63 6f 75 6e 74 73 20 41 53 20 64  im1, counts AS d
26b0: 69 6d 32 2c 20 63 6f 75 6e 74 73 20 41 53 20 64  im2, counts AS d
26c0: 69 6d 33 0a 20 20 20 20 20 20 57 48 45 52 45 20  im3.      WHERE 
26d0: 64 69 6d 31 2e 6e 3e 3d 36 20 41 4e 44 20 64 69  dim1.n>=6 AND di
26e0: 6d 32 2e 6e 3e 3d 36 20 41 4e 44 20 64 69 6d 33  m2.n>=6 AND dim3
26f0: 2e 6e 3e 3d 36 3b 0a 20 20 0a 20 20 20 20 20 20  .n>=6;.  .      
2700: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
2710: 46 52 4f 4d 20 78 3b 0a 20 20 20 20 7d 0a 20 20  FROM x;.    }.  
2720: 7d 20 7b 31 30 30 30 7d 0a 20 20 64 6f 5f 74 65  } {1000}.  do_te
2730: 73 74 20 6d 69 73 63 32 2d 39 2e 33 20 7b 0a 20  st misc2-9.3 {. 
2740: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2750: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 78 3b     DROP TABLE x;
2760: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
2770: 4d 50 20 54 41 42 4c 45 20 78 20 41 53 0a 20 20  MP TABLE x AS.  
2780: 20 20 20 20 53 45 4c 45 43 54 20 64 69 6d 31 2e      SELECT dim1.
2790: 6e 2c 20 64 69 6d 32 2e 6e 2c 20 64 69 6d 33 2e  n, dim2.n, dim3.
27a0: 6e 2c 20 64 69 6d 34 2e 6e 0a 20 20 20 20 20 20  n, dim4.n.      
27b0: 46 52 4f 4d 20 63 6f 75 6e 74 73 20 41 53 20 64  FROM counts AS d
27c0: 69 6d 31 2c 20 63 6f 75 6e 74 73 20 41 53 20 64  im1, counts AS d
27d0: 69 6d 32 2c 20 63 6f 75 6e 74 73 20 41 53 20 64  im2, counts AS d
27e0: 69 6d 33 2c 20 63 6f 75 6e 74 73 20 41 53 20 64  im3, counts AS d
27f0: 69 6d 34 0a 20 20 20 20 20 20 57 48 45 52 45 20  im4.      WHERE 
2800: 64 69 6d 31 2e 6e 3c 35 20 41 4e 44 20 64 69 6d  dim1.n<5 AND dim
2810: 32 2e 6e 3c 35 20 41 4e 44 20 64 69 6d 33 2e 6e  2.n<5 AND dim3.n
2820: 3c 35 20 41 4e 44 20 64 69 6d 34 2e 6e 3c 35 3b  <5 AND dim4.n<5;
2830: 0a 20 20 0a 20 20 20 20 20 20 53 45 4c 45 43 54  .  .      SELECT
2840: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 78   count(*) FROM x
2850: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 65 78 70  ;.    }.  } [exp
2860: 72 20 35 2a 35 2a 35 2a 35 5d 0a 7d 0a 0a 23 20  r 5*5*5*5].}..# 
2870: 54 69 63 6b 65 74 20 23 31 32 32 39 2e 20 20 53  Ticket #1229.  S
2880: 6f 6d 65 74 69 6d 65 73 20 77 68 65 6e 20 61 20  ometimes when a 
2890: 22 4e 45 57 2e 58 22 20 61 70 70 65 61 72 73 20  "NEW.X" appears 
28a0: 69 6e 20 61 20 53 45 4c 45 43 54 20 77 69 74 68  in a SELECT with
28b0: 6f 75 74 0a 23 20 61 20 46 52 4f 4d 20 63 6c 61  out.# a FROM cla
28c0: 75 73 65 20 64 65 65 70 20 77 69 74 68 69 6e 20  use deep within 
28d0: 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 63  a trigger, the c
28e0: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 69 73  ode generator is
28f0: 20 75 6e 61 62 6c 65 20 74 6f 0a 23 20 74 72 61   unable to.# tra
2900: 63 65 20 74 68 65 20 4e 45 57 2e 58 20 62 61 63  ce the NEW.X bac
2910: 6b 20 74 6f 20 61 6e 20 6f 72 69 67 69 6e 61 6c  k to an original
2920: 20 74 61 62 6c 65 20 61 6e 64 20 74 68 75 73 20   table and thus 
2930: 66 69 67 75 72 65 20 6f 75 74 20 69 74 73 0a 23  figure out its.#
2940: 20 64 65 63 6c 61 72 65 64 20 64 61 74 61 74 79   declared dataty
2950: 70 65 2e 0a 23 0a 23 20 54 68 65 20 53 51 4c 20  pe..#.# The SQL 
2960: 63 6f 64 65 20 62 65 6c 6f 77 20 77 61 73 20 63  code below was c
2970: 61 75 73 69 6e 67 20 61 20 73 65 67 66 61 75 6c  ausing a segfaul
2980: 74 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73  t..#.ifcapable s
2990: 75 62 71 75 65 72 79 26 26 74 72 69 67 67 65 72  ubquery&&trigger
29a0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73   {.  do_test mis
29b0: 63 32 2d 31 30 2e 31 20 7b 0a 20 20 20 20 65 78  c2-10.1 {.    ex
29c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
29d0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 32 32 39  EATE TABLE t1229
29e0: 28 78 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54  (x);.      CREAT
29f0: 45 20 54 52 49 47 47 45 52 20 72 31 32 32 39 20  E TRIGGER r1229 
2a00: 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20 4f 4e  BEFORE INSERT ON
2a10: 20 74 31 32 32 39 20 42 45 47 49 4e 0a 20 20 20   t1229 BEGIN.   
2a20: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
2a30: 20 74 31 32 32 39 20 53 45 4c 45 43 54 20 79 20   t1229 SELECT y 
2a40: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 6e 65 77  FROM (SELECT new
2a50: 2e 78 20 79 29 3b 0a 20 20 20 20 20 20 45 4e 44  .x y);.      END
2a60: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
2a70: 4e 54 4f 20 74 31 32 32 39 20 56 41 4c 55 45 53  NTO t1229 VALUES
2a80: 28 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  (1);.    }.  } {
2a90: 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  }.}..finish_test
2aa0: 0a                                               .