/ Hex Artifact Content
Login

Artifact fe55130a43e444ee75e2156ff75dc96e964b5738:


0000: 23 20 32 30 30 33 20 44 65 63 65 6d 62 65 72 20  # 2003 December 
0010: 31 37 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  17.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 0a 23 0a 23 20 54 68 69 73 20 66 69  ary..#.# This fi
01b0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 65  le implements te
01c0: 73 74 73 20 66 6f 72 20 6d 69 73 63 65 6c 6c 61  sts for miscella
01d0: 6e 6f 75 73 20 66 65 61 74 75 72 65 73 20 74 68  nous features th
01e0: 61 74 20 77 65 72 65 0a 23 20 6c 65 66 74 20 6f  at were.# left o
01f0: 75 74 20 6f 66 20 6f 74 68 65 72 20 74 65 73 74  ut of other test
0200: 20 66 69 6c 65 73 2e 0a 23 0a 23 20 24 49 64 3a   files..#.# $Id:
0210: 20 6d 69 73 63 33 2e 74 65 73 74 2c 76 20 31 2e   misc3.test,v 1.
0220: 32 30 20 32 30 30 39 2f 30 35 2f 30 36 20 30 30  20 2009/05/06 00
0230: 3a 34 39 3a 30 31 20 64 72 68 20 45 78 70 20 24  :49:01 drh Exp $
0240: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0250: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0260: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0270: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0280: 69 66 63 61 70 61 62 6c 65 20 7b 69 6e 74 65 67  ifcapable {integ
0290: 72 69 74 79 63 6b 7d 20 7b 0a 20 20 23 20 54 69  rityck} {.  # Ti
02a0: 63 6b 65 74 20 23 35 32 39 2e 20 20 4d 61 6b 65  cket #529.  Make
02b0: 20 73 75 72 65 20 61 6e 20 41 42 4f 52 54 20 64   sure an ABORT d
02c0: 6f 65 73 20 6e 6f 74 20 64 61 6d 61 67 65 20 74  oes not damage t
02d0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 63 61 63  he in-memory cac
02e0: 68 65 0a 20 20 23 20 74 68 61 74 20 77 69 6c 6c  he.  # that will
02f0: 20 62 65 20 75 73 65 64 20 62 79 20 73 75 62 73   be used by subs
0300: 65 71 75 65 6e 74 20 73 74 61 74 65 6d 65 6e 74  equent statement
0310: 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72  s in the same tr
0320: 61 6e 73 61 63 74 69 6f 6e 2e 0a 20 20 23 0a 20  ansaction..  #. 
0330: 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 31   do_test misc3-1
0340: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
0350: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
0360: 54 41 42 4c 45 20 74 31 28 61 20 55 4e 49 51 55  TABLE t1(a UNIQU
0370: 45 2c 62 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  E,b);.      INSE
0380: 52 54 20 49 4e 54 4f 20 74 31 0a 20 20 20 20 20  RT INTO t1.     
0390: 20 20 20 56 41 4c 55 45 53 28 31 2c 27 61 32 33     VALUES(1,'a23
03a0: 34 35 36 37 38 39 5f 62 32 33 34 35 36 37 38 39  456789_b23456789
03b0: 5f 63 32 33 34 35 36 37 38 39 5f 64 32 33 34 35  _c23456789_d2345
03c0: 36 37 38 39 5f 65 32 33 34 35 36 37 38 39 5f 27  6789_e23456789_'
03d0: 29 3b 0a 20 20 20 20 20 20 55 50 44 41 54 45 20  );.      UPDATE 
03e0: 74 31 20 53 45 54 20 62 3d 62 7c 7c 62 3b 0a 20  t1 SET b=b||b;. 
03f0: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53       UPDATE t1 S
0400: 45 54 20 62 3d 62 7c 7c 62 3b 0a 20 20 20 20 20  ET b=b||b;.     
0410: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62   UPDATE t1 SET b
0420: 3d 62 7c 7c 62 3b 0a 20 20 20 20 20 20 55 50 44  =b||b;.      UPD
0430: 41 54 45 20 74 31 20 53 45 54 20 62 3d 62 7c 7c  ATE t1 SET b=b||
0440: 62 3b 0a 20 20 20 20 20 20 55 50 44 41 54 45 20  b;.      UPDATE 
0450: 74 31 20 53 45 54 20 62 3d 62 7c 7c 62 3b 0a 20  t1 SET b=b||b;. 
0460: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
0470: 20 74 31 20 56 41 4c 55 45 53 28 32 2c 27 78 27   t1 VALUES(2,'x'
0480: 29 3b 0a 20 20 20 20 20 20 55 50 44 41 54 45 20  );.      UPDATE 
0490: 74 31 20 53 45 54 20 62 3d 73 75 62 73 74 72 28  t1 SET b=substr(
04a0: 62 2c 31 2c 35 30 30 29 3b 0a 20 20 20 20 20 20  b,1,500);.      
04b0: 42 45 47 49 4e 3b 0a 20 20 20 20 7d 0a 20 20 20  BEGIN;.    }.   
04c0: 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54   catchsql {UPDAT
04d0: 45 20 74 31 20 53 45 54 20 61 3d 43 41 53 45 20  E t1 SET a=CASE 
04e0: 61 20 57 48 45 4e 20 32 20 54 48 45 4e 20 31 20  a WHEN 2 THEN 1 
04f0: 45 4c 53 45 20 61 20 45 4e 44 2c 20 62 3d 27 79  ELSE a END, b='y
0500: 27 3b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ';}.    execsql 
0510: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
0520: 41 42 4c 45 20 74 32 28 78 2c 79 29 3b 0a 20 20  ABLE t2(x,y);.  
0530: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
0540: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
0550: 74 79 5f 63 68 65 63 6b 3b 0a 20 20 20 20 7d 0a  ty_check;.    }.
0560: 20 20 7d 20 6f 6b 0a 7d 0a 69 66 63 61 70 61 62    } ok.}.ifcapab
0570: 6c 65 20 7b 69 6e 74 65 67 72 69 74 79 63 6b 7d  le {integrityck}
0580: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73   {.  do_test mis
0590: 63 33 2d 31 2e 32 20 7b 0a 20 20 20 20 65 78 65  c3-1.2 {.    exe
05a0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f  csql {.      DRO
05b0: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
05c0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b    DROP TABLE t2;
05d0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 63 61 70  .    }.    ifcap
05e0: 61 62 6c 65 20 7b 76 61 63 75 75 6d 7d 20 7b 65  able {vacuum} {e
05f0: 78 65 63 73 71 6c 20 56 41 43 55 55 4d 7d 0a 20  xecsql VACUUM}. 
0600: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
0610: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0620: 74 31 28 61 20 55 4e 49 51 55 45 2c 62 29 3b 0a  t1(a UNIQUE,b);.
0630: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
0640: 4f 20 74 31 0a 20 20 20 20 20 20 56 41 4c 55 45  O t1.      VALUE
0650: 53 28 31 2c 27 61 32 33 34 35 36 37 38 39 5f 62  S(1,'a23456789_b
0660: 32 33 34 35 36 37 38 39 5f 63 32 33 34 35 36 37  23456789_c234567
0670: 38 39 5f 64 32 33 34 35 36 37 38 39 5f 65 32 33  89_d23456789_e23
0680: 34 35 36 37 38 39 5f 27 29 3b 0a 20 20 20 20 20  456789_');.     
0690: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
06a0: 53 45 4c 45 43 54 20 61 2b 31 2c 20 62 7c 7c 62  SELECT a+1, b||b
06b0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20   FROM t1;.      
06c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
06d0: 45 4c 45 43 54 20 61 2b 32 2c 20 62 7c 7c 62 20  ELECT a+2, b||b 
06e0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20 49  FROM t1;.      I
06f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
0700: 4c 45 43 54 20 61 2b 34 2c 20 62 20 46 52 4f 4d  LECT a+4, b FROM
0710: 20 74 31 3b 0a 20 20 20 20 20 20 49 4e 53 45 52   t1;.      INSER
0720: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
0730: 20 61 2b 38 2c 20 62 20 46 52 4f 4d 20 74 31 3b   a+8, b FROM t1;
0740: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
0750: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61 2b 31  TO t1 SELECT a+1
0760: 36 2c 20 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20  6, b FROM t1;.  
0770: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0780: 74 31 20 53 45 4c 45 43 54 20 61 2b 33 32 2c 20  t1 SELECT a+32, 
0790: 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20  b FROM t1;.     
07a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
07b0: 53 45 4c 45 43 54 20 61 2b 36 34 2c 20 62 20 46  SELECT a+64, b F
07c0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20 42 45  ROM t1;.      BE
07d0: 47 49 4e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  GIN;.    }.    c
07e0: 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54 45 20  atchsql {UPDATE 
07f0: 74 31 20 53 45 54 20 61 3d 43 41 53 45 20 61 20  t1 SET a=CASE a 
0800: 57 48 45 4e 20 31 32 38 20 54 48 45 4e 20 31 32  WHEN 128 THEN 12
0810: 37 20 45 4c 53 45 20 61 20 45 4e 44 2c 20 62 3d  7 ELSE a END, b=
0820: 27 27 3b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  '';}.    execsql
0830: 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20   {.      INSERT 
0840: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
0850: 30 30 2c 27 68 65 6c 6c 6f 20 6f 75 74 20 74 68  00,'hello out th
0860: 65 72 65 27 29 3b 0a 20 20 20 20 20 20 43 4f 4d  ere');.      COM
0870: 4d 49 54 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  MIT;.      PRAGM
0880: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
0890: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 6f 6b 0a  k;.    }.  } ok.
08a0: 7d 0a 0a 23 20 54 65 73 74 73 20 6f 66 20 74 68  }..# Tests of th
08b0: 65 20 73 71 6c 69 74 65 41 74 6f 46 28 29 20 66  e sqliteAtoF() f
08c0: 75 6e 63 74 69 6f 6e 20 69 6e 20 75 74 69 6c 2e  unction in util.
08d0: 63 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  c.#.do_test misc
08e0: 33 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  3-2.1 {.  execsq
08f0: 6c 20 7b 53 45 4c 45 43 54 20 32 65 2d 32 35 2a  l {SELECT 2e-25*
0900: 30 2e 35 65 32 35 7d 0a 7d 20 31 2e 30 0a 64 6f  0.5e25}.} 1.0.do
0910: 5f 74 65 73 74 20 6d 69 73 63 33 2d 32 2e 32 20  _test misc3-2.2 
0920: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0930: 45 43 54 20 32 2e 30 65 2d 32 35 2a 30 30 30 30  ECT 2.0e-25*0000
0940: 30 30 2e 35 30 30 30 30 30 30 30 30 30 30 30 30  00.5000000000000
0950: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0960: 30 65 2b 30 30 30 32 35 7d 0a 7d 20 31 2e 30 0a  0e+00025}.} 1.0.
0970: 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 32 2e  do_test misc3-2.
0980: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
0990: 45 4c 45 43 54 20 30 30 30 30 30 30 30 30 30 30  ELECT 0000000000
09a0: 30 32 65 2d 30 30 30 30 30 30 30 30 32 35 2a 30  02e-0000000025*0
09b0: 2e 35 65 32 35 7d 0a 7d 20 31 2e 30 0a 64 6f 5f  .5e25}.} 1.0.do_
09c0: 74 65 73 74 20 6d 69 73 63 33 2d 32 2e 34 20 7b  test misc3-2.4 {
09d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
09e0: 43 54 20 32 65 2d 32 35 2a 30 2e 35 65 32 35 30  CT 2e-25*0.5e250
09f0: 7d 0a 7d 20 31 65 2b 32 32 35 0a 64 6f 5f 74 65  }.} 1e+225.do_te
0a00: 73 74 20 6d 69 73 63 33 2d 32 2e 35 20 7b 0a 20  st misc3-2.5 {. 
0a10: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0a20: 20 32 2e 30 65 2d 32 35 30 2a 30 2e 35 65 32 35   2.0e-250*0.5e25
0a30: 7d 0a 7d 20 31 65 2d 32 32 35 0a 64 6f 5f 74 65  }.} 1e-225.do_te
0a40: 73 74 20 6d 69 73 63 33 2d 32 2e 36 20 7b 0a 20  st misc3-2.6 {. 
0a50: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0a60: 20 27 2d 32 2e 30 65 2d 31 32 37 27 20 2a 20 27   '-2.0e-127' * '
0a70: 2d 30 2e 35 65 32 37 27 7d 0a 7d 20 31 65 2d 31  -0.5e27'}.} 1e-1
0a80: 30 30 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 33  00.do_test misc3
0a90: 2d 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.7 {.  execsql
0aa0: 20 7b 53 45 4c 45 43 54 20 27 2b 32 2e 30 65 2d   {SELECT '+2.0e-
0ab0: 31 32 37 27 20 2a 20 27 2d 30 2e 35 65 32 37 27  127' * '-0.5e27'
0ac0: 7d 0a 7d 20 2d 31 65 2d 31 30 30 0a 64 6f 5f 74  }.} -1e-100.do_t
0ad0: 65 73 74 20 6d 69 73 63 33 2d 32 2e 38 20 7b 0a  est misc3-2.8 {.
0ae0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0af0: 54 20 32 2e 30 65 2d 32 37 20 2a 20 27 2b 30 2e  T 2.0e-27 * '+0.
0b00: 35 65 2b 31 32 37 27 7d 0a 7d 20 31 65 2b 31 30  5e+127'}.} 1e+10
0b10: 30 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d  0.do_test misc3-
0b20: 32 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.9 {.  execsql 
0b30: 7b 53 45 4c 45 43 54 20 32 2e 30 65 2d 32 37 20  {SELECT 2.0e-27 
0b40: 2a 20 27 2b 30 2e 30 30 30 30 30 35 65 2b 31 33  * '+0.000005e+13
0b50: 32 27 7d 0a 7d 20 31 65 2b 31 30 30 0a 0a 23 20  2'}.} 1e+100..# 
0b60: 54 69 63 6b 65 74 20 23 35 32 32 2e 20 20 4d 61  Ticket #522.  Ma
0b70: 6b 65 20 73 75 72 65 20 69 6e 74 65 67 65 72 20  ke sure integer 
0b80: 6f 76 65 72 66 6c 6f 77 20 69 73 20 68 61 6e 64  overflow is hand
0b90: 6c 65 64 20 70 72 6f 70 65 72 6c 79 20 69 6e 0a  led properly in.
0ba0: 23 20 69 6e 64 69 63 65 73 2e 0a 23 0a 69 6e 74  # indices..#.int
0bb0: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 6d 69 73  egrity_check mis
0bc0: 63 33 2d 33 2e 31 0a 64 6f 5f 74 65 73 74 20 6d  c3-3.1.do_test m
0bd0: 69 73 63 33 2d 33 2e 32 20 7b 0a 20 20 65 78 65  isc3-3.2 {.  exe
0be0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
0bf0: 45 20 54 41 42 4c 45 20 74 32 28 61 20 49 4e 54  E TABLE t2(a INT
0c00: 20 55 4e 49 51 55 45 29 3b 0a 20 20 7d 0a 7d 20   UNIQUE);.  }.} 
0c10: 7b 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65  {}.integrity_che
0c20: 63 6b 20 6d 69 73 63 33 2d 33 2e 32 2e 31 0a 64  ck misc3-3.2.1.d
0c30: 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 33 2e 33  o_test misc3-3.3
0c40: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0c50: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0c60: 32 20 56 41 4c 55 45 53 28 32 31 34 37 34 38 33  2 VALUES(2147483
0c70: 36 34 38 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69  648);.  }.} {}.i
0c80: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 6d  ntegrity_check m
0c90: 69 73 63 33 2d 33 2e 33 2e 31 0a 64 6f 5f 74 65  isc3-3.3.1.do_te
0ca0: 73 74 20 6d 69 73 63 33 2d 33 2e 34 20 7b 0a 20  st misc3-3.4 {. 
0cb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
0cc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
0cd0: 4c 55 45 53 28 2d 32 31 34 37 34 38 33 36 34 39  LUES(-2147483649
0ce0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 6e 74 65  );.  }.} {}.inte
0cf0: 67 72 69 74 79 5f 63 68 65 63 6b 20 6d 69 73 63  grity_check misc
0d00: 33 2d 33 2e 34 2e 31 0a 64 6f 5f 74 65 73 74 20  3-3.4.1.do_test 
0d10: 6d 69 73 63 33 2d 33 2e 35 20 7b 0a 20 20 65 78  misc3-3.5 {.  ex
0d20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
0d30: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
0d40: 53 28 2b 32 31 34 37 34 38 33 36 34 39 29 3b 0a  S(+2147483649);.
0d50: 20 20 7d 0a 7d 20 7b 7d 0a 69 6e 74 65 67 72 69    }.} {}.integri
0d60: 74 79 5f 63 68 65 63 6b 20 6d 69 73 63 33 2d 33  ty_check misc3-3
0d70: 2e 35 2e 31 0a 64 6f 5f 74 65 73 74 20 6d 69 73  .5.1.do_test mis
0d80: 63 33 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73  c3-3.6 {.  execs
0d90: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
0da0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 2b  INTO t2 VALUES(+
0db0: 32 31 34 37 34 38 33 36 34 37 29 3b 0a 20 20 20  2147483647);.   
0dc0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0dd0: 56 41 4c 55 45 53 28 2d 32 31 34 37 34 38 33 36  VALUES(-21474836
0de0: 34 38 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  48);.    INSERT 
0df0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 2d  INTO t2 VALUES(-
0e00: 32 31 34 37 34 38 33 36 34 37 29 3b 0a 20 20 20  2147483647);.   
0e10: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0e20: 56 41 4c 55 45 53 28 32 31 34 37 34 38 33 36 34  VALUES(214748364
0e30: 36 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  6);.    SELECT *
0e40: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
0e50: 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 2d 32 31 34  Y a;.  }.} {-214
0e60: 37 34 38 33 36 34 39 20 2d 32 31 34 37 34 38 33  7483649 -2147483
0e70: 36 34 38 20 2d 32 31 34 37 34 38 33 36 34 37 20  648 -2147483647 
0e80: 32 31 34 37 34 38 33 36 34 36 20 32 31 34 37 34  2147483646 21474
0e90: 38 33 36 34 37 20 32 31 34 37 34 38 33 36 34 38  83647 2147483648
0ea0: 20 32 31 34 37 34 38 33 36 34 39 7d 0a 64 6f 5f   2147483649}.do_
0eb0: 74 65 73 74 20 6d 69 73 63 33 2d 33 2e 37 20 7b  test misc3-3.7 {
0ec0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0ed0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0ee0: 32 20 57 48 45 52 45 20 61 3e 3d 2d 32 31 34 37  2 WHERE a>=-2147
0ef0: 34 38 33 36 34 38 20 4f 52 44 45 52 20 42 59 20  483648 ORDER BY 
0f00: 61 3b 0a 20 20 7d 0a 7d 20 7b 2d 32 31 34 37 34  a;.  }.} {-21474
0f10: 38 33 36 34 38 20 2d 32 31 34 37 34 38 33 36 34  83648 -214748364
0f20: 37 20 32 31 34 37 34 38 33 36 34 36 20 32 31 34  7 2147483646 214
0f30: 37 34 38 33 36 34 37 20 32 31 34 37 34 38 33 36  7483647 21474836
0f40: 34 38 20 32 31 34 37 34 38 33 36 34 39 7d 0a 64  48 2147483649}.d
0f50: 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 33 2e 38  o_test misc3-3.8
0f60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0f70: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0f80: 20 74 32 20 57 48 45 52 45 20 61 3e 2d 32 31 34   t2 WHERE a>-214
0f90: 37 34 38 33 36 34 38 20 4f 52 44 45 52 20 42 59  7483648 ORDER BY
0fa0: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 2d 32 31 34 37   a;.  }.} {-2147
0fb0: 34 38 33 36 34 37 20 32 31 34 37 34 38 33 36 34  483647 214748364
0fc0: 36 20 32 31 34 37 34 38 33 36 34 37 20 32 31 34  6 2147483647 214
0fd0: 37 34 38 33 36 34 38 20 32 31 34 37 34 38 33 36  7483648 21474836
0fe0: 34 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  49}.do_test misc
0ff0: 33 2d 33 2e 39 20 7b 0a 20 20 65 78 65 63 73 71  3-3.9 {.  execsq
1000: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
1010: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
1020: 3e 2d 32 31 34 37 34 38 33 36 34 39 20 4f 52 44  >-2147483649 ORD
1030: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
1040: 2d 32 31 34 37 34 38 33 36 34 38 20 2d 32 31 34  -2147483648 -214
1050: 37 34 38 33 36 34 37 20 32 31 34 37 34 38 33 36  7483647 21474836
1060: 34 36 20 32 31 34 37 34 38 33 36 34 37 20 32 31  46 2147483647 21
1070: 34 37 34 38 33 36 34 38 20 32 31 34 37 34 38 33  47483648 2147483
1080: 36 34 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73  649}.do_test mis
1090: 63 33 2d 33 2e 31 30 20 7b 0a 20 20 65 78 65 63  c3-3.10 {.  exec
10a0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
10b0: 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   * FROM t2 WHERE
10c0: 20 61 3e 3d 30 20 41 4e 44 20 61 3c 32 31 34 37   a>=0 AND a<2147
10d0: 34 38 33 36 34 39 20 4f 52 44 45 52 20 42 59 20  483649 ORDER BY 
10e0: 61 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 32  a DESC;.  }.} {2
10f0: 31 34 37 34 38 33 36 34 38 20 32 31 34 37 34 38  147483648 214748
1100: 33 36 34 37 20 32 31 34 37 34 38 33 36 34 36 7d  3647 2147483646}
1110: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 33  .do_test misc3-3
1120: 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .11 {.  execsql 
1130: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1140: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3e 3d  ROM t2 WHERE a>=
1150: 30 20 41 4e 44 20 61 3c 3d 32 31 34 37 34 38 33  0 AND a<=2147483
1160: 36 34 38 20 4f 52 44 45 52 20 42 59 20 61 20 44  648 ORDER BY a D
1170: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 32 31 34 37  ESC;.  }.} {2147
1180: 34 38 33 36 34 38 20 32 31 34 37 34 38 33 36 34  483648 214748364
1190: 37 20 32 31 34 37 34 38 33 36 34 36 7d 0a 64 6f  7 2147483646}.do
11a0: 5f 74 65 73 74 20 6d 69 73 63 33 2d 33 2e 31 32  _test misc3-3.12
11b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
11c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
11d0: 20 74 32 20 57 48 45 52 45 20 61 3e 3d 30 20 41   t2 WHERE a>=0 A
11e0: 4e 44 20 61 3c 32 31 34 37 34 38 33 36 34 38 20  ND a<2147483648 
11f0: 4f 52 44 45 52 20 42 59 20 61 20 44 45 53 43 3b  ORDER BY a DESC;
1200: 0a 20 20 7d 0a 7d 20 7b 32 31 34 37 34 38 33 36  .  }.} {21474836
1210: 34 37 20 32 31 34 37 34 38 33 36 34 36 7d 0a 64  47 2147483646}.d
1220: 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 33 2e 31  o_test misc3-3.1
1230: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1240: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1250: 4d 20 74 32 20 57 48 45 52 45 20 61 3e 3d 30 20  M t2 WHERE a>=0 
1260: 41 4e 44 20 61 3c 3d 32 31 34 37 34 38 33 36 34  AND a<=214748364
1270: 37 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53  7 ORDER BY a DES
1280: 43 3b 0a 20 20 7d 0a 7d 20 7b 32 31 34 37 34 38  C;.  }.} {214748
1290: 33 36 34 37 20 32 31 34 37 34 38 33 36 34 36 7d  3647 2147483646}
12a0: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 33  .do_test misc3-3
12b0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
12c0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
12d0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3e 3d  ROM t2 WHERE a>=
12e0: 30 20 41 4e 44 20 61 3c 32 31 34 37 34 38 33 36  0 AND a<21474836
12f0: 34 37 20 4f 52 44 45 52 20 42 59 20 61 20 44 45  47 ORDER BY a DE
1300: 53 43 3b 0a 20 20 7d 0a 7d 20 7b 32 31 34 37 34  SC;.  }.} {21474
1310: 38 33 36 34 36 7d 0a 0a 23 20 54 69 63 6b 65 74  83646}..# Ticket
1320: 20 23 35 36 35 2e 20 20 41 20 73 74 61 63 6b 20   #565.  A stack 
1330: 6f 76 65 72 66 6c 6f 77 20 69 73 20 6f 63 63 75  overflow is occu
1340: 72 72 69 6e 67 20 77 68 65 6e 20 74 68 65 20 73  rring when the s
1350: 75 62 71 75 65 72 79 20 74 6f 20 74 68 65 0a 23  ubquery to the.#
1360: 20 72 69 67 68 74 20 6f 66 20 61 6e 20 49 4e 20   right of an IN 
1370: 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61 69 6e  operator contain
1380: 73 20 6d 61 6e 79 20 4e 55 4c 4c 73 0a 23 0a 64  s many NULLs.#.d
1390: 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 34 2e 31  o_test misc3-4.1
13a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
13b0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
13c0: 74 33 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t3(a INTEGER PRI
13d0: 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20 20  MARY KEY, b);.  
13e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
13f0: 28 62 29 20 56 41 4c 55 45 53 28 27 61 62 63 27  (b) VALUES('abc'
1400: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1410: 54 4f 20 74 33 28 62 29 20 56 41 4c 55 45 53 28  TO t3(b) VALUES(
1420: 27 78 79 7a 27 29 3b 0a 20 20 20 20 49 4e 53 45  'xyz');.    INSE
1430: 52 54 20 49 4e 54 4f 20 74 33 28 62 29 20 56 41  RT INTO t3(b) VA
1440: 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20 20  LUES(NULL);.    
1450: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 28 62  INSERT INTO t3(b
1460: 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a  ) VALUES(NULL);.
1470: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1480: 74 33 28 62 29 20 53 45 4c 45 43 54 20 62 7c 7c  t3(b) SELECT b||
1490: 27 64 27 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20  'd' FROM t3;.   
14a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 28   INSERT INTO t3(
14b0: 62 29 20 53 45 4c 45 43 54 20 62 7c 7c 27 65 27  b) SELECT b||'e'
14c0: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 49 4e   FROM t3;.    IN
14d0: 53 45 52 54 20 49 4e 54 4f 20 74 33 28 62 29 20  SERT INTO t3(b) 
14e0: 53 45 4c 45 43 54 20 62 7c 7c 27 66 27 20 46 52  SELECT b||'f' FR
14f0: 4f 4d 20 74 33 3b 0a 20 20 20 20 49 4e 53 45 52  OM t3;.    INSER
1500: 54 20 49 4e 54 4f 20 74 33 28 62 29 20 53 45 4c  T INTO t3(b) SEL
1510: 45 43 54 20 62 7c 7c 27 67 27 20 46 52 4f 4d 20  ECT b||'g' FROM 
1520: 74 33 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t3;.    INSERT I
1530: 4e 54 4f 20 74 33 28 62 29 20 53 45 4c 45 43 54  NTO t3(b) SELECT
1540: 20 62 7c 7c 27 68 27 20 46 52 4f 4d 20 74 33 3b   b||'h' FROM t3;
1550: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e  .    SELECT coun
1560: 74 28 61 29 2c 20 63 6f 75 6e 74 28 62 29 20 46  t(a), count(b) F
1570: 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t3;.  }.} {1
1580: 32 38 20 36 34 7d 0a 69 66 63 61 70 61 62 6c 65  28 64}.ifcapable
1590: 20 73 75 62 71 75 65 72 79 20 7b 0a 64 6f 5f 74   subquery {.do_t
15a0: 65 73 74 20 6d 69 73 63 33 2d 34 2e 32 20 7b 0a  est misc3-4.2 {.
15b0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
15c0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
15d0: 28 61 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52  (a) FROM t3 WHER
15e0: 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54 20 62  E b IN (SELECT b
15f0: 20 46 52 4f 4d 20 74 33 29 3b 0a 20 20 20 20 7d   FROM t3);.    }
1600: 0a 20 20 7d 20 7b 36 34 7d 0a 20 20 64 6f 5f 74  .  } {64}.  do_t
1610: 65 73 74 20 6d 69 73 63 33 2d 34 2e 33 20 7b 0a  est misc3-4.3 {.
1620: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1630: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
1640: 28 61 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52  (a) FROM t3 WHER
1650: 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54 20 62  E b IN (SELECT b
1660: 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42   FROM t3 ORDER B
1670: 59 20 61 2b 31 29 3b 0a 20 20 20 20 7d 0a 20 20  Y a+1);.    }.  
1680: 7d 20 7b 36 34 7d 0a 7d 0a 0a 23 20 54 69 63 6b  } {64}.}..# Tick
1690: 65 74 20 23 36 30 31 3a 20 20 50 75 74 74 69 6e  et #601:  Puttin
16a0: 67 20 61 20 6c 65 66 74 20 6a 6f 69 6e 20 69 6e  g a left join in
16b0: 73 69 64 65 20 22 53 45 4c 45 43 54 20 2a 20 46  side "SELECT * F
16c0: 52 4f 4d 20 28 3c 6a 6f 69 6e 2d 68 65 72 65 3e  ROM (<join-here>
16d0: 29 22 0a 23 20 67 69 76 65 73 20 64 69 66 66 65  )".# gives diffe
16e0: 72 65 6e 74 20 72 65 73 75 6c 74 73 20 74 68 61  rent results tha
16f0: 74 20 69 66 20 74 68 65 20 6f 75 74 65 72 20 22  t if the outer "
1700: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 2e 2e  SELECT * FROM ..
1710: 2e 22 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 23  ." is omitted..#
1720: 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75  .ifcapable subqu
1730: 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ery {.  do_test 
1740: 6d 69 73 63 33 2d 35 2e 31 20 7b 0a 20 20 20 20  misc3-5.1 {.    
1750: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1760: 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20  CREATE TABLE x1 
1770: 28 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 49 4e  (b, c);.      IN
1780: 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c  SERT INTO x1 VAL
1790: 55 45 53 28 27 64 6f 67 27 2c 33 29 3b 0a 20 20  UES('dog',3);.  
17a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
17b0: 78 31 20 56 41 4c 55 45 53 28 27 63 61 74 27 2c  x1 VALUES('cat',
17c0: 31 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  1);.      INSERT
17d0: 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28   INTO x1 VALUES(
17e0: 27 64 6f 67 27 2c 34 29 3b 0a 20 20 20 20 20 20  'dog',4);.      
17f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 32 20  CREATE TABLE x2 
1800: 28 63 2c 20 65 29 3b 0a 20 20 20 20 20 20 49 4e  (c, e);.      IN
1810: 53 45 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c  SERT INTO x2 VAL
1820: 55 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20  UES(1,'one');.  
1830: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1840: 78 32 20 56 41 4c 55 45 53 28 32 2c 27 74 77 6f  x2 VALUES(2,'two
1850: 27 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  ');.      INSERT
1860: 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28   INTO x2 VALUES(
1870: 33 2c 27 74 68 72 65 65 27 29 3b 0a 20 20 20 20  3,'three');.    
1880: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32    INSERT INTO x2
1890: 20 56 41 4c 55 45 53 28 34 2c 27 66 6f 75 72 27   VALUES(4,'four'
18a0: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
18b0: 78 32 2e 63 20 41 53 20 63 2c 20 65 2c 20 62 20  x2.c AS c, e, b 
18c0: 46 52 4f 4d 20 78 32 20 4c 45 46 54 20 4a 4f 49  FROM x2 LEFT JOI
18d0: 4e 0a 20 20 20 20 20 20 20 20 20 28 53 45 4c 45  N.         (SELE
18e0: 43 54 20 62 2c 20 6d 61 78 28 63 29 2b 30 20 41  CT b, max(c)+0 A
18f0: 53 20 63 20 46 52 4f 4d 20 78 31 20 47 52 4f 55  S c FROM x1 GROU
1900: 50 20 42 59 20 62 29 0a 20 20 20 20 20 20 20 20  P BY b).        
1910: 20 55 53 49 4e 47 28 63 29 3b 0a 20 20 20 20 7d   USING(c);.    }
1920: 0a 20 20 7d 20 7b 31 20 6f 6e 65 20 63 61 74 20  .  } {1 one cat 
1930: 32 20 74 77 6f 20 7b 7d 20 33 20 74 68 72 65 65  2 two {} 3 three
1940: 20 7b 7d 20 34 20 66 6f 75 72 20 64 6f 67 7d 0a   {} 4 four dog}.
1950: 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d    do_test misc3-
1960: 35 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.2 {.    execsq
1970: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
1980: 20 2a 20 46 52 4f 4d 20 28 0a 20 20 20 20 20 20   * FROM (.      
1990: 20 20 53 45 4c 45 43 54 20 78 32 2e 63 20 41 53    SELECT x2.c AS
19a0: 20 63 2c 20 65 2c 20 62 20 46 52 4f 4d 20 78 32   c, e, b FROM x2
19b0: 20 4c 45 46 54 20 4a 4f 49 4e 0a 20 20 20 20 20   LEFT JOIN.     
19c0: 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 62 2c        (SELECT b,
19d0: 20 6d 61 78 28 63 29 2b 30 20 41 53 20 63 20 46   max(c)+0 AS c F
19e0: 52 4f 4d 20 78 31 20 47 52 4f 55 50 20 42 59 20  ROM x1 GROUP BY 
19f0: 62 29 0a 20 20 20 20 20 20 20 20 20 20 20 55 53  b).           US
1a00: 49 4e 47 28 63 29 0a 20 20 20 20 20 20 29 3b 0a  ING(c).      );.
1a10: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 6f 6e 65      }.  } {1 one
1a20: 20 63 61 74 20 32 20 74 77 6f 20 7b 7d 20 33 20   cat 2 two {} 3 
1a30: 74 68 72 65 65 20 7b 7d 20 34 20 66 6f 75 72 20  three {} 4 four 
1a40: 64 6f 67 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c  dog}.}..ifcapabl
1a50: 65 20 7b 65 78 70 6c 61 69 6e 7d 20 7b 0a 20 20  e {explain} {.  
1a60: 23 20 54 69 63 6b 65 74 20 23 36 32 36 3a 20 20  # Ticket #626:  
1a70: 6d 61 6b 65 20 73 75 72 65 20 45 58 50 4c 41 49  make sure EXPLAI
1a80: 4e 20 70 72 65 76 65 6e 74 73 20 42 45 47 49 4e  N prevents BEGIN
1a90: 20 61 6e 64 20 43 4f 4d 4d 49 54 20 66 72 6f 6d   and COMMIT from
1aa0: 20 77 6f 72 6b 69 6e 67 2e 0a 20 20 23 0a 20 20   working..  #.  
1ab0: 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 36 2e  do_test misc3-6.
1ac0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
1ad0: 7b 45 58 50 4c 41 49 4e 20 42 45 47 49 4e 7d 0a  {EXPLAIN BEGIN}.
1ae0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 42 45      catchsql {BE
1af0: 47 49 4e 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a  GIN}.  } {0 {}}.
1b00: 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d    do_test misc3-
1b10: 36 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.2 {.    execsq
1b20: 6c 20 7b 45 58 50 4c 41 49 4e 20 43 4f 4d 4d 49  l {EXPLAIN COMMI
1b30: 54 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20  T}.    catchsql 
1b40: 7b 43 4f 4d 4d 49 54 7d 0a 20 20 7d 20 7b 30 20  {COMMIT}.  } {0 
1b50: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69  {}}.  do_test mi
1b60: 73 63 33 2d 36 2e 33 20 7b 0a 20 20 20 20 65 78  sc3-6.3 {.    ex
1b70: 65 63 73 71 6c 20 7b 42 45 47 49 4e 3b 20 45 58  ecsql {BEGIN; EX
1b80: 50 4c 41 49 4e 20 52 4f 4c 4c 42 41 43 4b 7d 0a  PLAIN ROLLBACK}.
1b90: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 52 4f      catchsql {RO
1ba0: 4c 4c 42 41 43 4b 7d 0a 20 20 7d 20 7b 30 20 7b  LLBACK}.  } {0 {
1bb0: 7d 7d 0a 0a 20 20 23 20 44 6f 20 73 6f 6d 65 20  }}..  # Do some 
1bc0: 61 64 64 69 74 69 6f 6e 61 6c 20 45 58 50 4c 41  additional EXPLA
1bd0: 49 4e 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 6f  IN operations to
1be0: 20 65 78 65 72 63 69 73 65 20 74 68 65 20 64 69   exercise the di
1bf0: 73 70 6c 61 79 50 34 20 6c 6f 67 69 63 2e 0a 20  splayP4 logic.. 
1c00: 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d 36   do_test misc3-6
1c10: 2e 31 30 20 7b 0a 20 20 20 20 73 65 74 20 78 20  .10 {.    set x 
1c20: 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20  [execsql {.     
1c30: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
1c40: 31 28 0a 20 20 20 20 20 20 20 20 61 20 49 4e 54  1(.        a INT
1c50: 45 47 45 52 20 44 45 46 41 55 4c 54 20 35 34 33  EGER DEFAULT 543
1c60: 32 31 2c 0a 20 20 20 20 20 20 20 20 62 20 54 45  21,.        b TE
1c70: 58 54 20 44 45 46 41 55 4c 54 20 22 68 65 6c 6c  XT DEFAULT "hell
1c80: 6f 22 2c 0a 20 20 20 20 20 20 20 20 63 20 52 45  o",.        c RE
1c90: 41 4c 20 44 45 46 41 55 4c 54 20 33 2e 31 34 31  AL DEFAULT 3.141
1ca0: 35 39 32 36 0a 20 20 20 20 20 20 29 3b 0a 20 20  5926.      );.  
1cb0: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
1cc0: 45 20 49 4e 44 45 58 20 65 78 31 69 31 20 4f 4e  E INDEX ex1i1 ON
1cd0: 20 65 78 31 28 61 29 3b 0a 20 20 20 20 20 20 45   ex1(a);.      E
1ce0: 58 50 4c 41 49 4e 20 52 45 49 4e 44 45 58 3b 0a  XPLAIN REINDEX;.
1cf0: 20 20 20 20 7d 5d 0a 20 20 20 20 69 66 63 61 70      }].    ifcap
1d00: 61 62 6c 65 20 6d 65 72 67 65 73 6f 72 74 20 7b  able mergesort {
1d10: 0a 20 20 20 20 20 20 72 65 67 65 78 70 20 7b 20  .      regexp { 
1d20: 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 5c 64  SorterCompare \d
1d30: 2b 20 5c 64 2b 20 5c 64 2b 20 7d 20 24 78 0a 20  + \d+ \d+ } $x. 
1d40: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
1d50: 20 20 72 65 67 65 78 70 20 7b 20 49 73 55 6e 69    regexp { IsUni
1d60: 71 75 65 20 5c 64 2b 20 5c 64 2b 20 5c 64 2b 20  que \d+ \d+ \d+ 
1d70: 5c 64 2b 20 7d 20 24 78 0a 20 20 20 20 7d 0a 20  \d+ } $x.    }. 
1d80: 20 7d 20 7b 31 7d 0a 20 20 69 66 20 7b 5b 72 65   } {1}.  if {[re
1d90: 67 65 78 70 20 7b 31 36 7d 20 5b 64 62 20 6f 6e  gexp {16} [db on
1da0: 65 20 7b 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  e {PRAGMA encodi
1db0: 6e 67 7d 5d 5d 7d 20 7b 0a 20 20 20 20 64 6f 5f  ng}]]} {.    do_
1dc0: 74 65 73 74 20 6d 69 73 63 33 2d 36 2e 31 31 2d  test misc3-6.11-
1dd0: 75 74 66 31 36 20 7b 0a 20 20 20 20 20 20 73 65  utf16 {.      se
1de0: 74 20 78 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20  t x [execsql {. 
1df0: 20 20 20 20 20 20 20 45 58 50 4c 41 49 4e 20 53         EXPLAIN S
1e00: 45 4c 45 43 54 20 61 2b 31 32 33 34 35 36 37 38  ELECT a+12345678
1e10: 39 30 31 32 2c 20 62 2a 34 2e 35 36 37 38 2c 20  9012, b*4.5678, 
1e20: 63 20 46 52 4f 4d 20 65 78 31 20 4f 52 44 45 52  c FROM ex1 ORDER
1e30: 20 42 59 20 2b 61 2c 20 62 20 44 45 53 43 0a 20   BY +a, b DESC. 
1e40: 20 20 20 20 20 7d 5d 0a 20 20 20 20 20 20 73 65       }].      se
1e50: 74 20 79 20 5b 72 65 67 65 78 70 20 7b 20 31 32  t y [regexp { 12
1e60: 33 34 35 36 37 38 39 30 31 32 20 7d 20 24 78 5d  3456789012 } $x]
1e70: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 79  .      lappend y
1e80: 20 5b 72 65 67 65 78 70 20 7b 20 34 2e 35 36 37   [regexp { 4.567
1e90: 38 20 7d 20 24 78 5d 0a 20 20 20 20 20 20 6c 61  8 } $x].      la
1ea0: 70 70 65 6e 64 20 79 20 5b 72 65 67 65 78 70 20  ppend y [regexp 
1eb0: 7b 2c 2d 42 49 4e 41 52 59 7d 20 24 78 5d 0a 20  {,-BINARY} $x]. 
1ec0: 20 20 20 7d 20 7b 31 20 31 20 31 7d 0a 20 20 7d     } {1 1 1}.  }
1ed0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 64 6f 5f 74   else {.    do_t
1ee0: 65 73 74 20 6d 69 73 63 33 2d 36 2e 31 31 2d 75  est misc3-6.11-u
1ef0: 74 66 38 20 7b 0a 20 20 20 20 20 20 73 65 74 20  tf8 {.      set 
1f00: 78 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  x [execsql {.   
1f10: 20 20 20 20 20 45 58 50 4c 41 49 4e 20 53 45 4c       EXPLAIN SEL
1f20: 45 43 54 20 61 2b 31 32 33 34 35 36 37 38 39 30  ECT a+1234567890
1f30: 31 32 2c 20 62 2a 34 2e 35 36 37 38 2c 20 63 20  12, b*4.5678, c 
1f40: 46 52 4f 4d 20 65 78 31 20 4f 52 44 45 52 20 42  FROM ex1 ORDER B
1f50: 59 20 2b 61 2c 20 62 20 44 45 53 43 0a 20 20 20  Y +a, b DESC.   
1f60: 20 20 20 7d 5d 0a 20 20 20 20 20 20 73 65 74 20     }].      set 
1f70: 79 20 5b 72 65 67 65 78 70 20 7b 20 31 32 33 34  y [regexp { 1234
1f80: 35 36 37 38 39 30 31 32 20 7d 20 24 78 5d 0a 20  56789012 } $x]. 
1f90: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 79 20 5b       lappend y [
1fa0: 72 65 67 65 78 70 20 7b 20 34 2e 35 36 37 38 20  regexp { 4.5678 
1fb0: 7d 20 24 78 5d 0a 20 20 20 20 20 20 6c 61 70 70  } $x].      lapp
1fc0: 65 6e 64 20 79 20 5b 72 65 67 65 78 70 20 7b 20  end y [regexp { 
1fd0: 68 65 6c 6c 6f 20 7d 20 24 78 5d 0a 20 20 20 20  hello } $x].    
1fe0: 20 20 6c 61 70 70 65 6e 64 20 79 20 5b 72 65 67    lappend y [reg
1ff0: 65 78 70 20 7b 2c 2d 42 49 4e 41 52 59 7d 20 24  exp {,-BINARY} $
2000: 78 5d 0a 20 20 20 20 7d 20 7b 31 20 31 20 31 20  x].    } {1 1 1 
2010: 31 7d 0a 20 20 7d 0a 7d 0a 0a 69 66 63 61 70 61  1}.  }.}..ifcapa
2020: 62 6c 65 20 7b 74 72 69 67 67 65 72 7d 20 7b 0a  ble {trigger} {.
2030: 23 20 54 69 63 6b 65 74 20 23 36 34 30 3a 20 20  # Ticket #640:  
2040: 76 64 62 65 20 73 74 61 63 6b 20 6f 76 65 72 66  vdbe stack overf
2050: 6c 6f 77 20 77 69 74 68 20 61 20 4c 49 4d 49 54  low with a LIMIT
2060: 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 53 45 4c   clause on a SEL
2070: 45 43 54 20 69 6e 73 69 64 65 0a 23 20 6f 66 20  ECT inside.# of 
2080: 61 20 74 72 69 67 67 65 72 2e 0a 23 0a 64 6f 5f  a trigger..#.do_
2090: 74 65 73 74 20 6d 69 73 63 33 2d 37 2e 31 20 7b  test misc3-7.1 {
20a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
20b0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41   BEGIN;.    CREA
20c0: 54 45 20 54 41 42 4c 45 20 79 31 28 61 29 3b 0a  TE TABLE y1(a);.
20d0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
20e0: 20 79 32 28 62 29 3b 0a 20 20 20 20 43 52 45 41   y2(b);.    CREA
20f0: 54 45 20 54 41 42 4c 45 20 79 33 28 63 29 3b 0a  TE TABLE y3(c);.
2100: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
2110: 45 52 20 72 31 20 41 46 54 45 52 20 44 45 4c 45  ER r1 AFTER DELE
2120: 54 45 20 4f 4e 20 79 31 20 46 4f 52 20 45 41 43  TE ON y1 FOR EAC
2130: 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20 20 20  H ROW BEGIN.    
2140: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 79 33    INSERT INTO y3
2150: 28 63 29 20 53 45 4c 45 43 54 20 62 20 46 52 4f  (c) SELECT b FRO
2160: 4d 20 79 32 20 4f 52 44 45 52 20 42 59 20 62 20  M y2 ORDER BY b 
2170: 4c 49 4d 49 54 20 31 3b 0a 20 20 20 20 45 4e 44  LIMIT 1;.    END
2180: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2190: 4f 20 79 31 20 56 41 4c 55 45 53 28 31 29 3b 0a  O y1 VALUES(1);.
21a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
21b0: 79 31 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20  y1 VALUES(2);.  
21c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 79 31    INSERT INTO y1
21d0: 20 53 45 4c 45 43 54 20 61 2b 32 20 46 52 4f 4d   SELECT a+2 FROM
21e0: 20 79 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   y1;.    INSERT 
21f0: 49 4e 54 4f 20 79 31 20 53 45 4c 45 43 54 20 61  INTO y1 SELECT a
2200: 2b 34 20 46 52 4f 4d 20 79 31 3b 0a 20 20 20 20  +4 FROM y1;.    
2210: 49 4e 53 45 52 54 20 49 4e 54 4f 20 79 31 20 53  INSERT INTO y1 S
2220: 45 4c 45 43 54 20 61 2b 38 20 46 52 4f 4d 20 79  ELECT a+8 FROM y
2230: 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  1;.    INSERT IN
2240: 54 4f 20 79 31 20 53 45 4c 45 43 54 20 61 2b 31  TO y1 SELECT a+1
2250: 36 20 46 52 4f 4d 20 79 31 3b 0a 20 20 20 20 49  6 FROM y1;.    I
2260: 4e 53 45 52 54 20 49 4e 54 4f 20 79 32 20 53 45  NSERT INTO y2 SE
2270: 4c 45 43 54 20 61 20 46 52 4f 4d 20 79 31 3b 0a  LECT a FROM y1;.
2280: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
2290: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
22a0: 46 52 4f 4d 20 79 31 3b 0a 20 20 7d 0a 7d 20 33  FROM y1;.  }.} 3
22b0: 32 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 33 2d  2.do_test misc3-
22c0: 37 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.2 {.  execsql 
22d0: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
22e0: 4d 20 79 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  M y1;.    SELECT
22f0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 79   count(*) FROM y
2300: 31 3b 0a 20 20 7d 0a 7d 20 30 0a 64 6f 5f 74 65  1;.  }.} 0.do_te
2310: 73 74 20 6d 69 73 63 33 2d 37 2e 33 20 7b 0a 20  st misc3-7.3 {. 
2320: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2330: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
2340: 52 4f 4d 20 79 33 3b 0a 20 20 7d 0a 7d 20 33 32  ROM y3;.  }.} 32
2350: 0a 7d 20 3b 23 20 65 6e 64 69 66 20 74 72 69 67  .} ;# endif trig
2360: 67 65 72 0a 0a 23 20 54 69 63 6b 65 74 20 23 36  ger..# Ticket #6
2370: 36 38 3a 20 20 56 44 42 45 20 73 74 61 63 6b 20  68:  VDBE stack 
2380: 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20  overflow occurs 
2390: 77 68 65 6e 20 74 68 65 20 6c 65 66 74 2d 68 61  when the left-ha
23a0: 6e 64 20 73 69 64 65 0a 23 20 6f 66 20 61 6e 20  nd side.# of an 
23b0: 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  IN expression is
23c0: 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20 72 65   NULL and the re
23d0: 73 75 6c 74 20 69 73 20 75 73 65 64 20 61 73 20  sult is used as 
23e0: 61 6e 20 69 6e 74 65 67 65 72 2c 20 6e 6f 74 0a  an integer, not.
23f0: 23 20 61 73 20 61 20 6a 75 6d 70 2e 0a 23 0a 69  # as a jump..#.i
2400: 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72  fcapable subquer
2410: 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69  y {.  do_test mi
2420: 73 63 2d 38 2e 31 20 7b 0a 20 20 20 20 65 78 65  sc-8.1 {.    exe
2430: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
2440: 45 43 54 20 63 6f 75 6e 74 28 43 41 53 45 20 57  ECT count(CASE W
2450: 48 45 4e 20 62 20 49 4e 20 28 27 61 62 63 27 2c  HEN b IN ('abc',
2460: 27 78 79 7a 27 29 20 54 48 45 4e 20 27 78 27 20  'xyz') THEN 'x' 
2470: 45 4e 44 29 20 46 52 4f 4d 20 74 33 0a 20 20 20  END) FROM t3.   
2480: 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f   }.  } {2}.  do_
2490: 74 65 73 74 20 6d 69 73 63 2d 38 2e 32 20 7b 0a  test misc-8.2 {.
24a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
24b0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
24c0: 28 2a 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52  (*) FROM t3 WHER
24d0: 45 20 31 2b 28 62 20 49 4e 20 28 27 61 62 63 27  E 1+(b IN ('abc'
24e0: 2c 27 78 79 7a 27 29 29 3d 3d 32 0a 20 20 20 20  ,'xyz'))==2.    
24f0: 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 0a 66 69 6e  }.  } {2}.}..fin
2500: 69 73 68 5f 74 65 73 74 0a                       ish_test.