/ Hex Artifact Content
Login

Artifact e3a14332de9770be8ff14bd15c19a49cbec10808:


0000: 23 20 32 30 30 35 20 4e 6f 76 65 6d 62 65 72 20  # 2005 November 
0010: 32 36 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  26.#.# 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 74 6f 20 76 65 72 69 66 79 20 74 68  sts to verify th
01d0: 61 74 20 74 69 63 6b 65 74 20 23 31 35 33 37 20  at ticket #1537 
01e0: 69 73 0a 23 20 66 69 78 65 64 2e 20 20 0a 23 0a  is.# fixed.  .#.
01f0: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0200: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0210: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0220: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 64  ir/tester.tcl..d
0230: 6f 5f 74 65 73 74 20 74 6b 74 31 35 33 37 2d 31  o_test tkt1537-1
0240: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0250: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0260: 45 20 74 31 28 69 64 2c 20 61 31 2c 20 61 32 29  E t1(id, a1, a2)
0270: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0280: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 4e  O t1 VALUES(1, N
0290: 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  ULL, NULL);.    
02a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
02b0: 41 4c 55 45 53 28 32 2c 20 31 2c 20 33 29 3b 0a  ALUES(2, 1, 3);.
02c0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
02d0: 20 74 32 28 69 64 2c 20 62 29 3b 0a 20 20 20 20   t2(id, b);.    
02e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
02f0: 41 4c 55 45 53 28 33 2c 20 31 29 3b 0a 20 20 20  ALUES(3, 1);.   
0300: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0310: 56 41 4c 55 45 53 28 34 2c 20 4e 55 4c 4c 29 3b  VALUES(4, NULL);
0320: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0330: 4f 4d 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20  OM t1 LEFT JOIN 
0340: 74 32 20 4f 4e 20 61 31 3d 62 20 4f 52 20 61 32  t2 ON a1=b OR a2
0350: 3d 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 7d  =+b;.  }.} {1 {}
0360: 20 7b 7d 20 7b 7d 20 7b 7d 20 32 20 31 20 33 20   {} {} {} 2 1 3 
0370: 33 20 31 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74  3 1}.do_test tkt
0380: 31 35 33 37 2d 31 2e 32 20 7b 0a 20 20 65 78 65  1537-1.2 {.  exe
0390: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
03a0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 4c 45 46 54  T * FROM t1 LEFT
03b0: 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 61 31 3d 62   JOIN t2 ON a1=b
03c0: 20 4f 52 20 61 32 3d 62 3b 0a 20 20 7d 0a 7d 20   OR a2=b;.  }.} 
03d0: 7b 31 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 32  {1 {} {} {} {} 2
03e0: 20 31 20 33 20 33 20 31 7d 0a 64 6f 5f 74 65 73   1 3 3 1}.do_tes
03f0: 74 20 74 6b 74 31 35 33 37 2d 31 2e 33 20 7b 0a  t tkt1537-1.3 {.
0400: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0410: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
0420: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 20 4f 4e   LEFT JOIN t1 ON
0430: 20 61 31 3d 62 20 4f 52 20 61 32 3d 62 3b 0a 20   a1=b OR a2=b;. 
0440: 20 7d 0a 7d 20 7b 33 20 31 20 32 20 31 20 33 20   }.} {3 1 2 1 3 
0450: 34 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 69  4 {} {} {} {}}.i
0460: 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72  fcapable subquer
0470: 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74 6b  y {.  do_test tk
0480: 74 31 35 33 37 2d 31 2e 34 20 7b 0a 20 20 20 20  t1537-1.4 {.    
0490: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
04a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
04b0: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 32 20 4f 4e   LEFT JOIN t2 ON
04c0: 20 62 20 49 4e 20 28 61 31 2c 61 32 29 3b 0a 20   b IN (a1,a2);. 
04d0: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 7d 20 7b     }.  } {1 {} {
04e0: 7d 20 7b 7d 20 7b 7d 20 32 20 31 20 33 20 33 20  } {} {} 2 1 3 3 
04f0: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 74 6b 74  1}.  do_test tkt
0500: 31 35 33 37 2d 31 2e 35 20 7b 0a 20 20 20 20 65  1537-1.5 {.    e
0510: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  xecsql {.      S
0520: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20  ELECT * FROM t2 
0530: 4c 45 46 54 20 4a 4f 49 4e 20 74 31 20 4f 4e 20  LEFT JOIN t1 ON 
0540: 62 20 49 4e 20 28 61 32 2c 61 31 29 3b 0a 20 20  b IN (a2,a1);.  
0550: 20 20 7d 0a 20 20 7d 20 7b 33 20 31 20 32 20 31    }.  } {3 1 2 1
0560: 20 33 20 34 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d   3 4 {} {} {} {}
0570: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74 31  }.}.do_test tkt1
0580: 35 33 37 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63  537-1.6 {.  exec
0590: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
05a0: 20 49 4e 44 45 58 20 74 31 61 31 20 4f 4e 20 74   INDEX t1a1 ON t
05b0: 31 28 61 31 29 3b 0a 20 20 20 20 43 52 45 41 54  1(a1);.    CREAT
05c0: 45 20 49 4e 44 45 58 20 74 31 61 32 20 4f 4e 20  E INDEX t1a2 ON 
05d0: 74 31 28 61 32 29 3b 0a 20 20 20 20 43 52 45 41  t1(a2);.    CREA
05e0: 54 45 20 49 4e 44 45 58 20 74 32 62 20 4f 4e 20  TE INDEX t2b ON 
05f0: 74 32 28 62 29 3b 0a 20 20 20 20 53 45 4c 45 43  t2(b);.    SELEC
0600: 54 20 2a 20 46 52 4f 4d 20 74 31 20 4c 45 46 54  T * FROM t1 LEFT
0610: 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 61 31 3d 62   JOIN t2 ON a1=b
0620: 20 4f 52 20 61 32 3d 62 3b 0a 20 20 7d 0a 7d 20   OR a2=b;.  }.} 
0630: 7b 31 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 32  {1 {} {} {} {} 2
0640: 20 31 20 33 20 33 20 31 7d 0a 64 6f 5f 74 65 73   1 3 3 1}.do_tes
0650: 74 20 74 6b 74 31 35 33 37 2d 31 2e 37 20 7b 0a  t tkt1537-1.7 {.
0660: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0670: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
0680: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 20 4f 4e   LEFT JOIN t1 ON
0690: 20 61 31 3d 62 20 4f 52 20 61 32 3d 62 3b 0a 20   a1=b OR a2=b;. 
06a0: 20 7d 0a 7d 20 7b 33 20 31 20 32 20 31 20 33 20   }.} {3 1 2 1 3 
06b0: 34 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 0a  4 {} {} {} {}}..
06c0: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
06d0: 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74  ry {.  do_test t
06e0: 6b 74 31 35 33 37 2d 31 2e 38 20 7b 0a 20 20 20  kt1537-1.8 {.   
06f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
0700: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0710: 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 32 20 4f  1 LEFT JOIN t2 O
0720: 4e 20 62 20 49 4e 20 28 61 31 2c 61 32 29 3b 0a  N b IN (a1,a2);.
0730: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 7d 20      }.  } {1 {} 
0740: 7b 7d 20 7b 7d 20 7b 7d 20 32 20 31 20 33 20 33  {} {} {} 2 1 3 3
0750: 20 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 74 6b   1}.  do_test tk
0760: 74 31 35 33 37 2d 31 2e 39 20 7b 0a 20 20 20 20  t1537-1.9 {.    
0770: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
0780: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
0790: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 20 4f 4e   LEFT JOIN t1 ON
07a0: 20 62 20 49 4e 20 28 61 32 2c 61 31 29 3b 0a 20   b IN (a2,a1);. 
07b0: 20 20 20 7d 0a 20 20 7d 20 7b 33 20 31 20 32 20     }.  } {3 1 2 
07c0: 31 20 33 20 34 20 7b 7d 20 7b 7d 20 7b 7d 20 7b  1 3 4 {} {} {} {
07d0: 7d 7d 0a 7d 0a 0a 65 78 65 63 73 71 6c 20 7b 0a  }}.}..execsql {.
07e0: 20 20 44 52 4f 50 20 49 4e 44 45 58 20 74 31 61    DROP INDEX t1a
07f0: 31 3b 0a 20 20 44 52 4f 50 20 49 4e 44 45 58 20  1;.  DROP INDEX 
0800: 74 31 61 32 3b 0a 20 20 44 52 4f 50 20 49 4e 44  t1a2;.  DROP IND
0810: 45 58 20 74 32 62 3b 0a 7d 0a 0a 64 6f 5f 74 65  EX t2b;.}..do_te
0820: 73 74 20 74 6b 74 31 35 33 37 2d 32 2e 31 20 7b  st tkt1537-2.1 {
0830: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0840: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0850: 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 32 20 4f  1 LEFT JOIN t2 O
0860: 4e 20 62 20 42 45 54 57 45 45 4e 20 61 31 20 41  N b BETWEEN a1 A
0870: 4e 44 20 61 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  ND a2;.  }.} {1 
0880: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 32 20 31 20  {} {} {} {} 2 1 
0890: 33 20 33 20 31 7d 0a 64 6f 5f 74 65 73 74 20 74  3 3 1}.do_test t
08a0: 6b 74 31 35 33 37 2d 32 2e 32 20 7b 0a 20 20 65  kt1537-2.2 {.  e
08b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
08c0: 41 54 45 20 49 4e 44 45 58 20 74 32 62 20 4f 4e  ATE INDEX t2b ON
08d0: 20 74 32 28 62 29 3b 0a 20 20 20 20 53 45 4c 45   t2(b);.    SELE
08e0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4c 45 46  CT * FROM t1 LEF
08f0: 54 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 62 20 42  T JOIN t2 ON b B
0900: 45 54 57 45 45 4e 20 61 31 20 41 4e 44 20 61 32  ETWEEN a1 AND a2
0910: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 7d 20 7b 7d  ;.  }.} {1 {} {}
0920: 20 7b 7d 20 7b 7d 20 32 20 31 20 33 20 33 20 31   {} {} 2 1 3 3 1
0930: 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74 31 35 33  }.do_test tkt153
0940: 37 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  7-2.3 {.  execsq
0950: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
0960: 20 46 52 4f 4d 20 74 32 20 4c 45 46 54 20 4a 4f   FROM t2 LEFT JO
0970: 49 4e 20 74 31 20 4f 4e 20 62 20 42 45 54 57 45  IN t1 ON b BETWE
0980: 45 4e 20 61 31 20 41 4e 44 20 61 32 3b 0a 20 20  EN a1 AND a2;.  
0990: 7d 0a 7d 20 7b 33 20 31 20 32 20 31 20 33 20 34  }.} {3 1 2 1 3 4
09a0: 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f   {} {} {} {}}.do
09b0: 5f 74 65 73 74 20 74 6b 74 31 35 33 37 2d 32 2e  _test tkt1537-2.
09c0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
09d0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
09e0: 20 74 31 61 31 20 4f 4e 20 74 31 28 61 31 29 3b   t1a1 ON t1(a1);
09f0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
0a00: 58 20 74 31 61 32 20 4f 4e 20 74 31 28 61 32 29  X t1a2 ON t1(a2)
0a10: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0a20: 52 4f 4d 20 74 32 20 4c 45 46 54 20 4a 4f 49 4e  ROM t2 LEFT JOIN
0a30: 20 74 31 20 4f 4e 20 62 20 42 45 54 57 45 45 4e   t1 ON b BETWEEN
0a40: 20 61 31 20 41 4e 44 20 61 32 3b 0a 20 20 7d 0a   a1 AND a2;.  }.
0a50: 7d 20 7b 33 20 31 20 32 20 31 20 33 20 34 20 7b  } {3 1 2 1 3 4 {
0a60: 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 0a 64 6f 5f  } {} {} {}}..do_
0a70: 74 65 73 74 20 74 6b 74 31 35 33 37 2d 33 2e 31  test tkt1537-3.1
0a80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0a90: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0aa0: 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 32   t1 LEFT JOIN t2
0ab0: 20 4f 4e 20 62 20 47 4c 4f 42 20 27 61 62 63 2a   ON b GLOB 'abc*
0ac0: 27 20 57 48 45 52 45 20 74 31 2e 69 64 3d 31 3b  ' WHERE t1.id=1;
0ad0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 7d 20 7b 7d 20  .  }.} {1 {} {} 
0ae0: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  {} {}}.do_test t
0af0: 6b 74 31 35 33 37 2d 33 2e 32 20 7b 0a 20 20 65  kt1537-3.2 {.  e
0b00: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 53 45  xecsql { .    SE
0b10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 4c  LECT * FROM t2 L
0b20: 45 46 54 20 4a 4f 49 4e 20 74 31 20 4f 4e 20 61  EFT JOIN t1 ON a
0b30: 31 20 47 4c 4f 42 20 27 61 62 63 2a 27 20 57 48  1 GLOB 'abc*' WH
0b40: 45 52 45 20 74 32 2e 69 64 3d 33 3b 0a 20 20 7d  ERE t2.id=3;.  }
0b50: 0a 7d 20 7b 33 20 31 20 7b 7d 20 7b 7d 20 7b 7d  .} {3 1 {} {} {}
0b60: 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  }...finish_test.