/ Hex Artifact Content
Login

Artifact 729c3ba9b47e8f9f1aab96bae7dad2a524f1d1a2:


0000: 23 20 32 30 30 38 20 44 65 63 65 6d 62 65 72 20  # 2008 December 
0010: 33 30 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  30.#.# 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 20 20 54 68 65 0a 23 20 66 6f 63 75  ary.  The.# focu
01b0: 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  s of this file i
01c0: 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 6d 75  s testing the mu
01d0: 6c 74 69 2d 69 6e 64 65 78 20 4f 52 20 63 6c 61  lti-index OR cla
01e0: 75 73 65 20 6f 70 74 69 6d 69 7a 65 72 2e 0a 23  use optimizer..#
01f0: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0200: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0210: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0220: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0230: 69 66 63 61 70 61 62 6c 65 20 21 6f 72 5f 6f 70  ifcapable !or_op
0240: 74 7c 7c 21 63 6f 6d 70 6f 75 6e 64 20 7b 0a 20  t||!compound {. 
0250: 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72   finish_test.  r
0260: 65 74 75 72 6e 0a 7d 0a 0a 23 20 45 76 61 6c 75  eturn.}..# Evalu
0270: 61 74 65 20 53 51 4c 2e 20 20 52 65 74 75 72 6e  ate SQL.  Return
0280: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
0290: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a  followed by the.
02a0: 23 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72  # and the number
02b0: 20 6f 66 20 66 75 6c 6c 2d 73 63 61 6e 20 73 74   of full-scan st
02c0: 65 70 73 2e 0a 23 0a 70 72 6f 63 20 63 6f 75 6e  eps..#.proc coun
02d0: 74 5f 73 74 65 70 73 20 7b 73 71 6c 7d 20 7b 0a  t_steps {sql} {.
02e0: 20 20 73 65 74 20 72 20 5b 64 62 20 65 76 61 6c    set r [db eval
02f0: 20 24 73 71 6c 5d 0a 20 20 6c 61 70 70 65 6e 64   $sql].  lappend
0300: 20 72 20 73 63 61 6e 20 5b 64 62 20 73 74 61 74   r scan [db stat
0310: 75 73 20 73 74 65 70 5d 20 73 6f 72 74 20 5b 64  us step] sort [d
0320: 62 20 73 74 61 74 75 73 20 73 6f 72 74 5d 0a 7d  b status sort].}
0330: 0a 0a 0a 23 20 43 6f 6e 73 74 72 75 63 74 20 74  ...# Construct t
0340: 65 73 74 20 64 61 74 61 2e 20 20 0a 23 20 0a 64  est data.  .# .d
0350: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 31 2e  o_test where9-1.
0360: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
0370: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0380: 20 74 31 28 61 20 49 4e 54 45 47 45 52 20 50 52   t1(a INTEGER PR
0390: 49 4d 41 52 59 20 4b 45 59 2c 62 2c 63 2c 64 2c  IMARY KEY,b,c,d,
03a0: 65 2c 66 2c 67 29 3b 0a 20 20 20 20 49 4e 53 45  e,f,g);.    INSE
03b0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
03c0: 53 28 31 2c 31 31 2c 31 30 30 31 2c 31 2e 30 30  S(1,11,1001,1.00
03d0: 31 2c 31 30 30 2e 31 2c 27 62 63 64 65 66 67 68  1,100.1,'bcdefgh
03e0: 69 6a 27 2c 27 79 78 77 76 75 74 73 27 29 3b 0a  ij','yxwvuts');.
03f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0400: 74 31 20 56 41 4c 55 45 53 28 32 2c 32 32 2c 31  t1 VALUES(2,22,1
0410: 30 30 31 2c 32 2e 30 30 32 2c 31 30 30 2e 31 2c  001,2.002,100.1,
0420: 27 63 64 65 66 67 68 69 6a 6b 27 2c 27 79 78 77  'cdefghijk','yxw
0430: 76 75 74 73 27 29 3b 0a 20 20 20 20 49 4e 53 45  vuts');.    INSE
0440: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0450: 53 28 33 2c 33 33 2c 31 30 30 31 2c 33 2e 30 30  S(3,33,1001,3.00
0460: 33 2c 31 30 30 2e 31 2c 27 64 65 66 67 68 69 6a  3,100.1,'defghij
0470: 6b 6c 27 2c 27 78 77 76 75 74 73 72 27 29 3b 0a  kl','xwvutsr');.
0480: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0490: 74 31 20 56 41 4c 55 45 53 28 34 2c 34 34 2c 32  t1 VALUES(4,44,2
04a0: 30 30 32 2c 34 2e 30 30 34 2c 32 30 30 2e 32 2c  002,4.004,200.2,
04b0: 27 65 66 67 68 69 6a 6b 6c 6d 27 2c 27 78 77 76  'efghijklm','xwv
04c0: 75 74 73 72 27 29 3b 0a 20 20 20 20 49 4e 53 45  utsr');.    INSE
04d0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
04e0: 53 28 35 2c 35 35 2c 32 30 30 32 2c 35 2e 30 30  S(5,55,2002,5.00
04f0: 35 2c 32 30 30 2e 32 2c 27 66 67 68 69 6a 6b 6c  5,200.2,'fghijkl
0500: 6d 6e 27 2c 27 78 77 76 75 74 73 72 27 29 3b 0a  mn','xwvutsr');.
0510: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0520: 74 31 20 56 41 4c 55 45 53 28 36 2c 36 36 2c 32  t1 VALUES(6,66,2
0530: 30 30 32 2c 36 2e 30 30 36 2c 32 30 30 2e 32 2c  002,6.006,200.2,
0540: 27 67 68 69 6a 6b 6c 6d 6e 6f 27 2c 27 78 77 76  'ghijklmno','xwv
0550: 75 74 73 72 27 29 3b 0a 20 20 20 20 49 4e 53 45  utsr');.    INSE
0560: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0570: 53 28 37 2c 37 37 2c 33 30 30 33 2c 37 2e 30 30  S(7,77,3003,7.00
0580: 37 2c 33 30 30 2e 33 2c 27 68 69 6a 6b 6c 6d 6e  7,300.3,'hijklmn
0590: 6f 70 27 2c 27 78 77 76 75 74 73 72 27 29 3b 0a  op','xwvutsr');.
05a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
05b0: 74 31 20 56 41 4c 55 45 53 28 38 2c 38 38 2c 33  t1 VALUES(8,88,3
05c0: 30 30 33 2c 38 2e 30 30 38 2c 33 30 30 2e 33 2c  003,8.008,300.3,
05d0: 27 69 6a 6b 6c 6d 6e 6f 70 71 27 2c 27 77 76 75  'ijklmnopq','wvu
05e0: 74 73 72 71 27 29 3b 0a 20 20 20 20 49 4e 53 45  tsrq');.    INSE
05f0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0600: 53 28 39 2c 39 39 2c 33 30 30 33 2c 39 2e 30 30  S(9,99,3003,9.00
0610: 39 2c 33 30 30 2e 33 2c 27 6a 6b 6c 6d 6e 6f 70  9,300.3,'jklmnop
0620: 71 72 27 2c 27 77 76 75 74 73 72 71 27 29 3b 0a  qr','wvutsrq');.
0630: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0640: 74 31 20 56 41 4c 55 45 53 28 31 30 2c 31 31 30  t1 VALUES(10,110
0650: 2c 34 30 30 34 2c 31 30 2e 30 31 2c 34 30 30 2e  ,4004,10.01,400.
0660: 34 2c 27 6b 6c 6d 6e 6f 70 71 72 73 27 2c 27 77  4,'klmnopqrs','w
0670: 76 75 74 73 72 71 27 29 3b 0a 20 20 20 20 49 4e  vutsrq');.    IN
0680: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0690: 55 45 53 28 31 31 2c 31 32 31 2c 34 30 30 34 2c  UES(11,121,4004,
06a0: 31 31 2e 30 31 31 2c 34 30 30 2e 34 2c 27 6c 6d  11.011,400.4,'lm
06b0: 6e 6f 70 71 72 73 74 27 2c 27 77 76 75 74 73 72  nopqrst','wvutsr
06c0: 71 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  q');.    INSERT 
06d0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
06e0: 32 2c 31 33 32 2c 34 30 30 34 2c 31 32 2e 30 31  2,132,4004,12.01
06f0: 32 2c 34 30 30 2e 34 2c 27 6d 6e 6f 70 71 72 73  2,400.4,'mnopqrs
0700: 74 75 27 2c 27 77 76 75 74 73 72 71 27 29 3b 0a  tu','wvutsrq');.
0710: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0720: 74 31 20 56 41 4c 55 45 53 28 31 33 2c 31 34 33  t1 VALUES(13,143
0730: 2c 35 30 30 35 2c 31 33 2e 30 31 33 2c 35 30 30  ,5005,13.013,500
0740: 2e 35 2c 27 6e 6f 70 71 72 73 74 75 76 27 2c 27  .5,'nopqrstuv','
0750: 76 75 74 73 72 71 70 27 29 3b 0a 20 20 20 20 49  vutsrqp');.    I
0760: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0770: 4c 55 45 53 28 31 34 2c 31 35 34 2c 35 30 30 35  LUES(14,154,5005
0780: 2c 31 34 2e 30 31 34 2c 35 30 30 2e 35 2c 27 6f  ,14.014,500.5,'o
0790: 70 71 72 73 74 75 76 77 27 2c 27 76 75 74 73 72  pqrstuvw','vutsr
07a0: 71 70 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  qp');.    INSERT
07b0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
07c0: 31 35 2c 31 36 35 2c 35 30 30 35 2c 31 35 2e 30  15,165,5005,15.0
07d0: 31 35 2c 35 30 30 2e 35 2c 27 70 71 72 73 74 75  15,500.5,'pqrstu
07e0: 76 77 78 27 2c 27 76 75 74 73 72 71 70 27 29 3b  vwx','vutsrqp');
07f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0800: 20 74 31 20 56 41 4c 55 45 53 28 31 36 2c 31 37   t1 VALUES(16,17
0810: 36 2c 36 30 30 36 2c 31 36 2e 30 31 36 2c 36 30  6,6006,16.016,60
0820: 30 2e 36 2c 27 71 72 73 74 75 76 77 78 79 27 2c  0.6,'qrstuvwxy',
0830: 27 76 75 74 73 72 71 70 27 29 3b 0a 20 20 20 20  'vutsrqp');.    
0840: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0850: 41 4c 55 45 53 28 31 37 2c 31 38 37 2c 36 30 30  ALUES(17,187,600
0860: 36 2c 31 37 2e 30 31 37 2c 36 30 30 2e 36 2c 27  6,17.017,600.6,'
0870: 72 73 74 75 76 77 78 79 7a 27 2c 27 76 75 74 73  rstuvwxyz','vuts
0880: 72 71 70 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  rqp');.    INSER
0890: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
08a0: 28 31 38 2c 31 39 38 2c 36 30 30 36 2c 31 38 2e  (18,198,6006,18.
08b0: 30 31 38 2c 36 30 30 2e 36 2c 27 73 74 75 76 77  018,600.6,'stuvw
08c0: 78 79 7a 61 27 2c 27 75 74 73 72 71 70 6f 27 29  xyza','utsrqpo')
08d0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
08e0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 39 2c 32  O t1 VALUES(19,2
08f0: 30 39 2c 37 30 30 37 2c 31 39 2e 30 31 39 2c 37  09,7007,19.019,7
0900: 30 30 2e 37 2c 27 74 75 76 77 78 79 7a 61 62 27  00.7,'tuvwxyzab'
0910: 2c 27 75 74 73 72 71 70 6f 27 29 3b 0a 20 20 20  ,'utsrqpo');.   
0920: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0930: 56 41 4c 55 45 53 28 32 30 2c 32 32 30 2c 37 30  VALUES(20,220,70
0940: 30 37 2c 32 30 2e 30 32 2c 37 30 30 2e 37 2c 27  07,20.02,700.7,'
0950: 75 76 77 78 79 7a 61 62 63 27 2c 27 75 74 73 72  uvwxyzabc','utsr
0960: 71 70 6f 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  qpo');.    INSER
0970: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0980: 28 32 31 2c 32 33 31 2c 37 30 30 37 2c 32 31 2e  (21,231,7007,21.
0990: 30 32 31 2c 37 30 30 2e 37 2c 27 76 77 78 79 7a  021,700.7,'vwxyz
09a0: 61 62 63 64 27 2c 27 75 74 73 72 71 70 6f 27 29  abcd','utsrqpo')
09b0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
09c0: 4f 20 74 31 20 56 41 4c 55 45 53 28 32 32 2c 32  O t1 VALUES(22,2
09d0: 34 32 2c 38 30 30 38 2c 32 32 2e 30 32 32 2c 38  42,8008,22.022,8
09e0: 30 30 2e 38 2c 27 77 78 79 7a 61 62 63 64 65 27  00.8,'wxyzabcde'
09f0: 2c 27 75 74 73 72 71 70 6f 27 29 3b 0a 20 20 20  ,'utsrqpo');.   
0a00: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0a10: 56 41 4c 55 45 53 28 32 33 2c 32 35 33 2c 38 30  VALUES(23,253,80
0a20: 30 38 2c 32 33 2e 30 32 33 2c 38 30 30 2e 38 2c  08,23.023,800.8,
0a30: 27 78 79 7a 61 62 63 64 65 66 27 2c 27 74 73 72  'xyzabcdef','tsr
0a40: 71 70 6f 6e 27 29 3b 0a 20 20 20 20 49 4e 53 45  qpon');.    INSE
0a50: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0a60: 53 28 32 34 2c 32 36 34 2c 38 30 30 38 2c 32 34  S(24,264,8008,24
0a70: 2e 30 32 34 2c 38 30 30 2e 38 2c 27 79 7a 61 62  .024,800.8,'yzab
0a80: 63 64 65 66 67 27 2c 27 74 73 72 71 70 6f 6e 27  cdefg','tsrqpon'
0a90: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0aa0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 35 2c  TO t1 VALUES(25,
0ab0: 32 37 35 2c 39 30 30 39 2c 32 35 2e 30 32 35 2c  275,9009,25.025,
0ac0: 39 30 30 2e 39 2c 27 7a 61 62 63 64 65 66 67 68  900.9,'zabcdefgh
0ad0: 27 2c 27 74 73 72 71 70 6f 6e 27 29 3b 0a 20 20  ','tsrqpon');.  
0ae0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0af0: 20 56 41 4c 55 45 53 28 32 36 2c 32 38 36 2c 39   VALUES(26,286,9
0b00: 30 30 39 2c 32 36 2e 30 32 36 2c 39 30 30 2e 39  009,26.026,900.9
0b10: 2c 27 61 62 63 64 65 66 67 68 69 27 2c 27 74 73  ,'abcdefghi','ts
0b20: 72 71 70 6f 6e 27 29 3b 0a 20 20 20 20 49 4e 53  rqpon');.    INS
0b30: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0b40: 45 53 28 32 37 2c 32 39 37 2c 39 30 30 39 2c 32  ES(27,297,9009,2
0b50: 37 2e 30 32 37 2c 39 30 30 2e 39 2c 27 62 63 64  7.027,900.9,'bcd
0b60: 65 66 67 68 69 6a 27 2c 27 74 73 72 71 70 6f 6e  efghij','tsrqpon
0b70: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
0b80: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 38  NTO t1 VALUES(28
0b90: 2c 33 30 38 2c 31 30 30 31 30 2c 32 38 2e 30 32  ,308,10010,28.02
0ba0: 38 2c 31 30 30 31 2e 30 2c 27 63 64 65 66 67 68  8,1001.0,'cdefgh
0bb0: 69 6a 6b 27 2c 27 73 72 71 70 6f 6e 6d 27 29 3b  ijk','srqponm');
0bc0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0bd0: 20 74 31 20 56 41 4c 55 45 53 28 32 39 2c 33 31   t1 VALUES(29,31
0be0: 39 2c 31 30 30 31 30 2c 32 39 2e 30 32 39 2c 31  9,10010,29.029,1
0bf0: 30 30 31 2e 30 2c 27 64 65 66 67 68 69 6a 6b 6c  001.0,'defghijkl
0c00: 27 2c 27 73 72 71 70 6f 6e 6d 27 29 3b 0a 20 20  ','srqponm');.  
0c10: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0c20: 20 56 41 4c 55 45 53 28 33 30 2c 33 33 30 2c 31   VALUES(30,330,1
0c30: 30 30 31 30 2c 33 30 2e 30 33 2c 31 30 30 31 2e  0010,30.03,1001.
0c40: 30 2c 27 65 66 67 68 69 6a 6b 6c 6d 27 2c 27 73  0,'efghijklm','s
0c50: 72 71 70 6f 6e 6d 27 29 3b 0a 20 20 20 20 49 4e  rqponm');.    IN
0c60: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0c70: 55 45 53 28 33 31 2c 33 34 31 2c 31 31 30 31 31  UES(31,341,11011
0c80: 2c 33 31 2e 30 33 31 2c 31 31 30 31 2e 31 2c 27  ,31.031,1101.1,'
0c90: 66 67 68 69 6a 6b 6c 6d 6e 27 2c 27 73 72 71 70  fghijklmn','srqp
0ca0: 6f 6e 6d 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  onm');.    INSER
0cb0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0cc0: 28 33 32 2c 33 35 32 2c 31 31 30 31 31 2c 33 32  (32,352,11011,32
0cd0: 2e 30 33 32 2c 31 31 30 31 2e 31 2c 27 67 68 69  .032,1101.1,'ghi
0ce0: 6a 6b 6c 6d 6e 6f 27 2c 27 73 72 71 70 6f 6e 6d  jklmno','srqponm
0cf0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
0d00: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 33  NTO t1 VALUES(33
0d10: 2c 33 36 33 2c 31 31 30 31 31 2c 33 33 2e 30 33  ,363,11011,33.03
0d20: 33 2c 31 31 30 31 2e 31 2c 27 68 69 6a 6b 6c 6d  3,1101.1,'hijklm
0d30: 6e 6f 70 27 2c 27 72 71 70 6f 6e 6d 6c 27 29 3b  nop','rqponml');
0d40: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0d50: 20 74 31 20 56 41 4c 55 45 53 28 33 34 2c 33 37   t1 VALUES(34,37
0d60: 34 2c 31 32 30 31 32 2c 33 34 2e 30 33 34 2c 31  4,12012,34.034,1
0d70: 32 30 31 2e 32 2c 27 69 6a 6b 6c 6d 6e 6f 70 71  201.2,'ijklmnopq
0d80: 27 2c 27 72 71 70 6f 6e 6d 6c 27 29 3b 0a 20 20  ','rqponml');.  
0d90: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0da0: 20 56 41 4c 55 45 53 28 33 35 2c 33 38 35 2c 31   VALUES(35,385,1
0db0: 32 30 31 32 2c 33 35 2e 30 33 35 2c 31 32 30 31  2012,35.035,1201
0dc0: 2e 32 2c 27 6a 6b 6c 6d 6e 6f 70 71 72 27 2c 27  .2,'jklmnopqr','
0dd0: 72 71 70 6f 6e 6d 6c 27 29 3b 0a 20 20 20 20 49  rqponml');.    I
0de0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0df0: 4c 55 45 53 28 33 36 2c 33 39 36 2c 31 32 30 31  LUES(36,396,1201
0e00: 32 2c 33 36 2e 30 33 36 2c 31 32 30 31 2e 32 2c  2,36.036,1201.2,
0e10: 27 6b 6c 6d 6e 6f 70 71 72 73 27 2c 27 72 71 70  'klmnopqrs','rqp
0e20: 6f 6e 6d 6c 27 29 3b 0a 20 20 20 20 49 4e 53 45  onml');.    INSE
0e30: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0e40: 53 28 33 37 2c 34 30 37 2c 31 33 30 31 33 2c 33  S(37,407,13013,3
0e50: 37 2e 30 33 37 2c 31 33 30 31 2e 33 2c 27 6c 6d  7.037,1301.3,'lm
0e60: 6e 6f 70 71 72 73 74 27 2c 27 72 71 70 6f 6e 6d  nopqrst','rqponm
0e70: 6c 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  l');.    INSERT 
0e80: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
0e90: 38 2c 34 31 38 2c 31 33 30 31 33 2c 33 38 2e 30  8,418,13013,38.0
0ea0: 33 38 2c 31 33 30 31 2e 33 2c 27 6d 6e 6f 70 71  38,1301.3,'mnopq
0eb0: 72 73 74 75 27 2c 27 71 70 6f 6e 6d 6c 6b 27 29  rstu','qponmlk')
0ec0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0ed0: 4f 20 74 31 20 56 41 4c 55 45 53 28 33 39 2c 34  O t1 VALUES(39,4
0ee0: 32 39 2c 31 33 30 31 33 2c 33 39 2e 30 33 39 2c  29,13013,39.039,
0ef0: 31 33 30 31 2e 33 2c 27 6e 6f 70 71 72 73 74 75  1301.3,'nopqrstu
0f00: 76 27 2c 27 71 70 6f 6e 6d 6c 6b 27 29 3b 0a 20  v','qponmlk');. 
0f10: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0f20: 31 20 56 41 4c 55 45 53 28 34 30 2c 34 34 30 2c  1 VALUES(40,440,
0f30: 31 34 30 31 34 2c 34 30 2e 30 34 2c 31 34 30 31  14014,40.04,1401
0f40: 2e 34 2c 27 6f 70 71 72 73 74 75 76 77 27 2c 27  .4,'opqrstuvw','
0f50: 71 70 6f 6e 6d 6c 6b 27 29 3b 0a 20 20 20 20 49  qponmlk');.    I
0f60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0f70: 4c 55 45 53 28 34 31 2c 34 35 31 2c 31 34 30 31  LUES(41,451,1401
0f80: 34 2c 34 31 2e 30 34 31 2c 31 34 30 31 2e 34 2c  4,41.041,1401.4,
0f90: 27 70 71 72 73 74 75 76 77 78 27 2c 27 71 70 6f  'pqrstuvwx','qpo
0fa0: 6e 6d 6c 6b 27 29 3b 0a 20 20 20 20 49 4e 53 45  nmlk');.    INSE
0fb0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0fc0: 53 28 34 32 2c 34 36 32 2c 31 34 30 31 34 2c 34  S(42,462,14014,4
0fd0: 32 2e 30 34 32 2c 31 34 30 31 2e 34 2c 27 71 72  2.042,1401.4,'qr
0fe0: 73 74 75 76 77 78 79 27 2c 27 71 70 6f 6e 6d 6c  stuvwxy','qponml
0ff0: 6b 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  k');.    INSERT 
1000: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34  INTO t1 VALUES(4
1010: 33 2c 34 37 33 2c 31 35 30 31 35 2c 34 33 2e 30  3,473,15015,43.0
1020: 34 33 2c 31 35 30 31 2e 35 2c 27 72 73 74 75 76  43,1501.5,'rstuv
1030: 77 78 79 7a 27 2c 27 70 6f 6e 6d 6c 6b 6a 27 29  wxyz','ponmlkj')
1040: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1050: 4f 20 74 31 20 56 41 4c 55 45 53 28 34 34 2c 34  O t1 VALUES(44,4
1060: 38 34 2c 31 35 30 31 35 2c 34 34 2e 30 34 34 2c  84,15015,44.044,
1070: 31 35 30 31 2e 35 2c 27 73 74 75 76 77 78 79 7a  1501.5,'stuvwxyz
1080: 61 27 2c 27 70 6f 6e 6d 6c 6b 6a 27 29 3b 0a 20  a','ponmlkj');. 
1090: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
10a0: 31 20 56 41 4c 55 45 53 28 34 35 2c 34 39 35 2c  1 VALUES(45,495,
10b0: 31 35 30 31 35 2c 34 35 2e 30 34 35 2c 31 35 30  15015,45.045,150
10c0: 31 2e 35 2c 27 74 75 76 77 78 79 7a 61 62 27 2c  1.5,'tuvwxyzab',
10d0: 27 70 6f 6e 6d 6c 6b 6a 27 29 3b 0a 20 20 20 20  'ponmlkj');.    
10e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
10f0: 41 4c 55 45 53 28 34 36 2c 35 30 36 2c 31 36 30  ALUES(46,506,160
1100: 31 36 2c 34 36 2e 30 34 36 2c 31 36 30 31 2e 36  16,46.046,1601.6
1110: 2c 27 75 76 77 78 79 7a 61 62 63 27 2c 27 70 6f  ,'uvwxyzabc','po
1120: 6e 6d 6c 6b 6a 27 29 3b 0a 20 20 20 20 49 4e 53  nmlkj');.    INS
1130: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1140: 45 53 28 34 37 2c 35 31 37 2c 31 36 30 31 36 2c  ES(47,517,16016,
1150: 34 37 2e 30 34 37 2c 31 36 30 31 2e 36 2c 27 76  47.047,1601.6,'v
1160: 77 78 79 7a 61 62 63 64 27 2c 27 70 6f 6e 6d 6c  wxyzabcd','ponml
1170: 6b 6a 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  kj');.    INSERT
1180: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1190: 34 38 2c 35 32 38 2c 31 36 30 31 36 2c 34 38 2e  48,528,16016,48.
11a0: 30 34 38 2c 31 36 30 31 2e 36 2c 27 77 78 79 7a  048,1601.6,'wxyz
11b0: 61 62 63 64 65 27 2c 27 6f 6e 6d 6c 6b 6a 69 27  abcde','onmlkji'
11c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
11d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 39 2c  TO t1 VALUES(49,
11e0: 35 33 39 2c 31 37 30 31 37 2c 34 39 2e 30 34 39  539,17017,49.049
11f0: 2c 31 37 30 31 2e 37 2c 27 78 79 7a 61 62 63 64  ,1701.7,'xyzabcd
1200: 65 66 27 2c 27 6f 6e 6d 6c 6b 6a 69 27 29 3b 0a  ef','onmlkji');.
1210: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1220: 74 31 20 56 41 4c 55 45 53 28 35 30 2c 35 35 30  t1 VALUES(50,550
1230: 2c 31 37 30 31 37 2c 35 30 2e 30 35 2c 31 37 30  ,17017,50.05,170
1240: 31 2e 37 2c 27 79 7a 61 62 63 64 65 66 67 27 2c  1.7,'yzabcdefg',
1250: 27 6f 6e 6d 6c 6b 6a 69 27 29 3b 0a 20 20 20 20  'onmlkji');.    
1260: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1270: 41 4c 55 45 53 28 35 31 2c 35 36 31 2c 31 37 30  ALUES(51,561,170
1280: 31 37 2c 35 31 2e 30 35 31 2c 31 37 30 31 2e 37  17,51.051,1701.7
1290: 2c 27 7a 61 62 63 64 65 66 67 68 27 2c 27 6f 6e  ,'zabcdefgh','on
12a0: 6d 6c 6b 6a 69 27 29 3b 0a 20 20 20 20 49 4e 53  mlkji');.    INS
12b0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
12c0: 45 53 28 35 32 2c 35 37 32 2c 31 38 30 31 38 2c  ES(52,572,18018,
12d0: 35 32 2e 30 35 32 2c 31 38 30 31 2e 38 2c 27 61  52.052,1801.8,'a
12e0: 62 63 64 65 66 67 68 69 27 2c 27 6f 6e 6d 6c 6b  bcdefghi','onmlk
12f0: 6a 69 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ji');.    INSERT
1300: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1310: 35 33 2c 35 38 33 2c 31 38 30 31 38 2c 35 33 2e  53,583,18018,53.
1320: 30 35 33 2c 31 38 30 31 2e 38 2c 27 62 63 64 65  053,1801.8,'bcde
1330: 66 67 68 69 6a 27 2c 27 6e 6d 6c 6b 6a 69 68 27  fghij','nmlkjih'
1340: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1350: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 34 2c  TO t1 VALUES(54,
1360: 35 39 34 2c 31 38 30 31 38 2c 35 34 2e 30 35 34  594,18018,54.054
1370: 2c 31 38 30 31 2e 38 2c 27 63 64 65 66 67 68 69  ,1801.8,'cdefghi
1380: 6a 6b 27 2c 27 6e 6d 6c 6b 6a 69 68 27 29 3b 0a  jk','nmlkjih');.
1390: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
13a0: 74 31 20 56 41 4c 55 45 53 28 35 35 2c 36 30 35  t1 VALUES(55,605
13b0: 2c 31 39 30 31 39 2c 35 35 2e 30 35 35 2c 31 39  ,19019,55.055,19
13c0: 30 31 2e 39 2c 27 64 65 66 67 68 69 6a 6b 6c 27  01.9,'defghijkl'
13d0: 2c 27 6e 6d 6c 6b 6a 69 68 27 29 3b 0a 20 20 20  ,'nmlkjih');.   
13e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
13f0: 56 41 4c 55 45 53 28 35 36 2c 36 31 36 2c 31 39  VALUES(56,616,19
1400: 30 31 39 2c 35 36 2e 30 35 36 2c 31 39 30 31 2e  019,56.056,1901.
1410: 39 2c 27 65 66 67 68 69 6a 6b 6c 6d 27 2c 27 6e  9,'efghijklm','n
1420: 6d 6c 6b 6a 69 68 27 29 3b 0a 20 20 20 20 49 4e  mlkjih');.    IN
1430: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1440: 55 45 53 28 35 37 2c 36 32 37 2c 31 39 30 31 39  UES(57,627,19019
1450: 2c 35 37 2e 30 35 37 2c 31 39 30 31 2e 39 2c 27  ,57.057,1901.9,'
1460: 66 67 68 69 6a 6b 6c 6d 6e 27 2c 27 6e 6d 6c 6b  fghijklmn','nmlk
1470: 6a 69 68 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  jih');.    INSER
1480: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1490: 28 35 38 2c 36 33 38 2c 32 30 30 32 30 2c 35 38  (58,638,20020,58
14a0: 2e 30 35 38 2c 32 30 30 32 2e 30 2c 27 67 68 69  .058,2002.0,'ghi
14b0: 6a 6b 6c 6d 6e 6f 27 2c 27 6d 6c 6b 6a 69 68 67  jklmno','mlkjihg
14c0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
14d0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 39  NTO t1 VALUES(59
14e0: 2c 36 34 39 2c 32 30 30 32 30 2c 35 39 2e 30 35  ,649,20020,59.05
14f0: 39 2c 32 30 30 32 2e 30 2c 27 68 69 6a 6b 6c 6d  9,2002.0,'hijklm
1500: 6e 6f 70 27 2c 27 6d 6c 6b 6a 69 68 67 27 29 3b  nop','mlkjihg');
1510: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1520: 20 74 31 20 56 41 4c 55 45 53 28 36 30 2c 36 36   t1 VALUES(60,66
1530: 30 2c 32 30 30 32 30 2c 36 30 2e 30 36 2c 32 30  0,20020,60.06,20
1540: 30 32 2e 30 2c 27 69 6a 6b 6c 6d 6e 6f 70 71 27  02.0,'ijklmnopq'
1550: 2c 27 6d 6c 6b 6a 69 68 67 27 29 3b 0a 20 20 20  ,'mlkjihg');.   
1560: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1570: 56 41 4c 55 45 53 28 36 31 2c 36 37 31 2c 32 31  VALUES(61,671,21
1580: 30 32 31 2c 36 31 2e 30 36 31 2c 32 31 30 32 2e  021,61.061,2102.
1590: 31 2c 27 6a 6b 6c 6d 6e 6f 70 71 72 27 2c 27 6d  1,'jklmnopqr','m
15a0: 6c 6b 6a 69 68 67 27 29 3b 0a 20 20 20 20 49 4e  lkjihg');.    IN
15b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
15c0: 55 45 53 28 36 32 2c 36 38 32 2c 32 31 30 32 31  UES(62,682,21021
15d0: 2c 36 32 2e 30 36 32 2c 32 31 30 32 2e 31 2c 27  ,62.062,2102.1,'
15e0: 6b 6c 6d 6e 6f 70 71 72 73 27 2c 27 6d 6c 6b 6a  klmnopqrs','mlkj
15f0: 69 68 67 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ihg');.    INSER
1600: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1610: 28 36 33 2c 36 39 33 2c 32 31 30 32 31 2c 36 33  (63,693,21021,63
1620: 2e 30 36 33 2c 32 31 30 32 2e 31 2c 27 6c 6d 6e  .063,2102.1,'lmn
1630: 6f 70 71 72 73 74 27 2c 27 6c 6b 6a 69 68 67 66  opqrst','lkjihgf
1640: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
1650: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 36 34  NTO t1 VALUES(64
1660: 2c 37 30 34 2c 32 32 30 32 32 2c 36 34 2e 30 36  ,704,22022,64.06
1670: 34 2c 32 32 30 32 2e 32 2c 27 6d 6e 6f 70 71 72  4,2202.2,'mnopqr
1680: 73 74 75 27 2c 27 6c 6b 6a 69 68 67 66 27 29 3b  stu','lkjihgf');
1690: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
16a0: 20 74 31 20 56 41 4c 55 45 53 28 36 35 2c 37 31   t1 VALUES(65,71
16b0: 35 2c 32 32 30 32 32 2c 36 35 2e 30 36 35 2c 32  5,22022,65.065,2
16c0: 32 30 32 2e 32 2c 27 6e 6f 70 71 72 73 74 75 76  202.2,'nopqrstuv
16d0: 27 2c 27 6c 6b 6a 69 68 67 66 27 29 3b 0a 20 20  ','lkjihgf');.  
16e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
16f0: 20 56 41 4c 55 45 53 28 36 36 2c 37 32 36 2c 32   VALUES(66,726,2
1700: 32 30 32 32 2c 36 36 2e 30 36 36 2c 32 32 30 32  2022,66.066,2202
1710: 2e 32 2c 27 6f 70 71 72 73 74 75 76 77 27 2c 27  .2,'opqrstuvw','
1720: 6c 6b 6a 69 68 67 66 27 29 3b 0a 20 20 20 20 49  lkjihgf');.    I
1730: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1740: 4c 55 45 53 28 36 37 2c 37 33 37 2c 32 33 30 32  LUES(67,737,2302
1750: 33 2c 36 37 2e 30 36 37 2c 32 33 30 32 2e 33 2c  3,67.067,2302.3,
1760: 27 70 71 72 73 74 75 76 77 78 27 2c 27 6c 6b 6a  'pqrstuvwx','lkj
1770: 69 68 67 66 27 29 3b 0a 20 20 20 20 49 4e 53 45  ihgf');.    INSE
1780: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1790: 53 28 36 38 2c 37 34 38 2c 32 33 30 32 33 2c 36  S(68,748,23023,6
17a0: 38 2e 30 36 38 2c 32 33 30 32 2e 33 2c 27 71 72  8.068,2302.3,'qr
17b0: 73 74 75 76 77 78 79 27 2c 27 6b 6a 69 68 67 66  stuvwxy','kjihgf
17c0: 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  e');.    INSERT 
17d0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 36  INTO t1 VALUES(6
17e0: 39 2c 37 35 39 2c 32 33 30 32 33 2c 36 39 2e 30  9,759,23023,69.0
17f0: 36 39 2c 32 33 30 32 2e 33 2c 27 72 73 74 75 76  69,2302.3,'rstuv
1800: 77 78 79 7a 27 2c 27 6b 6a 69 68 67 66 65 27 29  wxyz','kjihgfe')
1810: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1820: 4f 20 74 31 20 56 41 4c 55 45 53 28 37 30 2c 37  O t1 VALUES(70,7
1830: 37 30 2c 32 34 30 32 34 2c 37 30 2e 30 37 2c 32  70,24024,70.07,2
1840: 34 30 32 2e 34 2c 27 73 74 75 76 77 78 79 7a 61  402.4,'stuvwxyza
1850: 27 2c 27 6b 6a 69 68 67 66 65 27 29 3b 0a 20 20  ','kjihgfe');.  
1860: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1870: 20 56 41 4c 55 45 53 28 37 31 2c 37 38 31 2c 32   VALUES(71,781,2
1880: 34 30 32 34 2c 37 31 2e 30 37 31 2c 32 34 30 32  4024,71.071,2402
1890: 2e 34 2c 27 74 75 76 77 78 79 7a 61 62 27 2c 27  .4,'tuvwxyzab','
18a0: 6b 6a 69 68 67 66 65 27 29 3b 0a 20 20 20 20 49  kjihgfe');.    I
18b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
18c0: 4c 55 45 53 28 37 32 2c 37 39 32 2c 32 34 30 32  LUES(72,792,2402
18d0: 34 2c 37 32 2e 30 37 32 2c 32 34 30 32 2e 34 2c  4,72.072,2402.4,
18e0: 27 75 76 77 78 79 7a 61 62 63 27 2c 27 6b 6a 69  'uvwxyzabc','kji
18f0: 68 67 66 65 27 29 3b 0a 20 20 20 20 49 4e 53 45  hgfe');.    INSE
1900: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1910: 53 28 37 33 2c 38 30 33 2c 32 35 30 32 35 2c 37  S(73,803,25025,7
1920: 33 2e 30 37 33 2c 32 35 30 32 2e 35 2c 27 76 77  3.073,2502.5,'vw
1930: 78 79 7a 61 62 63 64 27 2c 27 6a 69 68 67 66 65  xyzabcd','jihgfe
1940: 64 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  d');.    INSERT 
1950: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 37  INTO t1 VALUES(7
1960: 34 2c 38 31 34 2c 32 35 30 32 35 2c 37 34 2e 30  4,814,25025,74.0
1970: 37 34 2c 32 35 30 32 2e 35 2c 27 77 78 79 7a 61  74,2502.5,'wxyza
1980: 62 63 64 65 27 2c 27 6a 69 68 67 66 65 64 27 29  bcde','jihgfed')
1990: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
19a0: 4f 20 74 31 20 56 41 4c 55 45 53 28 37 35 2c 38  O t1 VALUES(75,8
19b0: 32 35 2c 32 35 30 32 35 2c 37 35 2e 30 37 35 2c  25,25025,75.075,
19c0: 32 35 30 32 2e 35 2c 27 78 79 7a 61 62 63 64 65  2502.5,'xyzabcde
19d0: 66 27 2c 27 6a 69 68 67 66 65 64 27 29 3b 0a 20  f','jihgfed');. 
19e0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
19f0: 31 20 56 41 4c 55 45 53 28 37 36 2c 38 33 36 2c  1 VALUES(76,836,
1a00: 32 36 30 32 36 2c 37 36 2e 30 37 36 2c 32 36 30  26026,76.076,260
1a10: 32 2e 36 2c 27 79 7a 61 62 63 64 65 66 67 27 2c  2.6,'yzabcdefg',
1a20: 27 6a 69 68 67 66 65 64 27 29 3b 0a 20 20 20 20  'jihgfed');.    
1a30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1a40: 41 4c 55 45 53 28 37 37 2c 38 34 37 2c 32 36 30  ALUES(77,847,260
1a50: 32 36 2c 37 37 2e 30 37 37 2c 32 36 30 32 2e 36  26,77.077,2602.6
1a60: 2c 27 7a 61 62 63 64 65 66 67 68 27 2c 27 6a 69  ,'zabcdefgh','ji
1a70: 68 67 66 65 64 27 29 3b 0a 20 20 20 20 49 4e 53  hgfed');.    INS
1a80: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1a90: 45 53 28 37 38 2c 38 35 38 2c 32 36 30 32 36 2c  ES(78,858,26026,
1aa0: 37 38 2e 30 37 38 2c 32 36 30 32 2e 36 2c 27 61  78.078,2602.6,'a
1ab0: 62 63 64 65 66 67 68 69 27 2c 27 69 68 67 66 65  bcdefghi','ihgfe
1ac0: 64 63 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  dc');.    INSERT
1ad0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1ae0: 37 39 2c 38 36 39 2c 32 37 30 32 37 2c 37 39 2e  79,869,27027,79.
1af0: 30 37 39 2c 32 37 30 32 2e 37 2c 27 62 63 64 65  079,2702.7,'bcde
1b00: 66 67 68 69 6a 27 2c 27 69 68 67 66 65 64 63 27  fghij','ihgfedc'
1b10: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1b20: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 38 30 2c  TO t1 VALUES(80,
1b30: 38 38 30 2c 32 37 30 32 37 2c 38 30 2e 30 38 2c  880,27027,80.08,
1b40: 32 37 30 32 2e 37 2c 27 63 64 65 66 67 68 69 6a  2702.7,'cdefghij
1b50: 6b 27 2c 27 69 68 67 66 65 64 63 27 29 3b 0a 20  k','ihgfedc');. 
1b60: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1b70: 31 20 56 41 4c 55 45 53 28 38 31 2c 38 39 31 2c  1 VALUES(81,891,
1b80: 32 37 30 32 37 2c 38 31 2e 30 38 31 2c 32 37 30  27027,81.081,270
1b90: 32 2e 37 2c 27 64 65 66 67 68 69 6a 6b 6c 27 2c  2.7,'defghijkl',
1ba0: 27 69 68 67 66 65 64 63 27 29 3b 0a 20 20 20 20  'ihgfedc');.    
1bb0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1bc0: 41 4c 55 45 53 28 38 32 2c 39 30 32 2c 32 38 30  ALUES(82,902,280
1bd0: 32 38 2c 38 32 2e 30 38 32 2c 32 38 30 32 2e 38  28,82.082,2802.8
1be0: 2c 27 65 66 67 68 69 6a 6b 6c 6d 27 2c 27 69 68  ,'efghijklm','ih
1bf0: 67 66 65 64 63 27 29 3b 0a 20 20 20 20 49 4e 53  gfedc');.    INS
1c00: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1c10: 45 53 28 38 33 2c 39 31 33 2c 32 38 30 32 38 2c  ES(83,913,28028,
1c20: 38 33 2e 30 38 33 2c 32 38 30 32 2e 38 2c 27 66  83.083,2802.8,'f
1c30: 67 68 69 6a 6b 6c 6d 6e 27 2c 27 68 67 66 65 64  ghijklmn','hgfed
1c40: 63 62 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  cb');.    INSERT
1c50: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1c60: 38 34 2c 39 32 34 2c 32 38 30 32 38 2c 38 34 2e  84,924,28028,84.
1c70: 30 38 34 2c 32 38 30 32 2e 38 2c 27 67 68 69 6a  084,2802.8,'ghij
1c80: 6b 6c 6d 6e 6f 27 2c 27 68 67 66 65 64 63 62 27  klmno','hgfedcb'
1c90: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1ca0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 38 35 2c  TO t1 VALUES(85,
1cb0: 39 33 35 2c 32 39 30 32 39 2c 38 35 2e 30 38 35  935,29029,85.085
1cc0: 2c 32 39 30 32 2e 39 2c 27 68 69 6a 6b 6c 6d 6e  ,2902.9,'hijklmn
1cd0: 6f 70 27 2c 27 68 67 66 65 64 63 62 27 29 3b 0a  op','hgfedcb');.
1ce0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1cf0: 74 31 20 56 41 4c 55 45 53 28 38 36 2c 39 34 36  t1 VALUES(86,946
1d00: 2c 32 39 30 32 39 2c 38 36 2e 30 38 36 2c 32 39  ,29029,86.086,29
1d10: 30 32 2e 39 2c 27 69 6a 6b 6c 6d 6e 6f 70 71 27  02.9,'ijklmnopq'
1d20: 2c 27 68 67 66 65 64 63 62 27 29 3b 0a 20 20 20  ,'hgfedcb');.   
1d30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1d40: 56 41 4c 55 45 53 28 38 37 2c 39 35 37 2c 32 39  VALUES(87,957,29
1d50: 30 32 39 2c 38 37 2e 30 38 37 2c 32 39 30 32 2e  029,87.087,2902.
1d60: 39 2c 27 6a 6b 6c 6d 6e 6f 70 71 72 27 2c 27 68  9,'jklmnopqr','h
1d70: 67 66 65 64 63 62 27 29 3b 0a 20 20 20 20 49 4e  gfedcb');.    IN
1d80: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1d90: 55 45 53 28 38 38 2c 39 36 38 2c 33 30 30 33 30  UES(88,968,30030
1da0: 2c 38 38 2e 30 38 38 2c 33 30 30 33 2e 30 2c 27  ,88.088,3003.0,'
1db0: 6b 6c 6d 6e 6f 70 71 72 73 27 2c 27 67 66 65 64  klmnopqrs','gfed
1dc0: 63 62 61 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  cba');.    INSER
1dd0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1de0: 28 38 39 2c 39 37 39 2c 33 30 30 33 30 2c 38 39  (89,979,30030,89
1df0: 2e 30 38 39 2c 33 30 30 33 2e 30 2c 27 6c 6d 6e  .089,3003.0,'lmn
1e00: 6f 70 71 72 73 74 27 2c 27 67 66 65 64 63 62 61  opqrst','gfedcba
1e10: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
1e20: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 39 30  NTO t1 VALUES(90
1e30: 2c 4e 55 4c 4c 2c 33 30 30 33 30 2c 39 30 2e 30  ,NULL,30030,90.0
1e40: 39 2c 33 30 30 33 2e 30 2c 27 6d 6e 6f 70 71 72  9,3003.0,'mnopqr
1e50: 73 74 75 27 2c 27 67 66 65 64 63 62 61 27 29 3b  stu','gfedcba');
1e60: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1e70: 20 74 31 20 56 41 4c 55 45 53 28 39 31 2c 31 30   t1 VALUES(91,10
1e80: 30 31 2c 4e 55 4c 4c 2c 39 31 2e 30 39 31 2c 33  01,NULL,91.091,3
1e90: 31 30 33 2e 31 2c 27 6e 6f 70 71 72 73 74 75 76  103.1,'nopqrstuv
1ea0: 27 2c 27 67 66 65 64 63 62 61 27 29 3b 0a 20 20  ','gfedcba');.  
1eb0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1ec0: 20 56 41 4c 55 45 53 28 39 32 2c 31 30 31 32 2c   VALUES(92,1012,
1ed0: 33 31 30 33 31 2c 4e 55 4c 4c 2c 33 31 30 33 2e  31031,NULL,3103.
1ee0: 31 2c 27 6f 70 71 72 73 74 75 76 77 27 2c 27 67  1,'opqrstuvw','g
1ef0: 66 65 64 63 62 61 27 29 3b 0a 20 20 20 20 49 4e  fedcba');.    IN
1f00: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1f10: 55 45 53 28 39 33 2c 31 30 32 33 2c 33 31 30 33  UES(93,1023,3103
1f20: 31 2c 39 33 2e 30 39 33 2c 4e 55 4c 4c 2c 27 70  1,93.093,NULL,'p
1f30: 71 72 73 74 75 76 77 78 27 2c 27 66 65 64 63 62  qrstuvwx','fedcb
1f40: 61 7a 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  az');.    INSERT
1f50: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1f60: 39 34 2c 31 30 33 34 2c 33 32 30 33 32 2c 39 34  94,1034,32032,94
1f70: 2e 30 39 34 2c 33 32 30 33 2e 32 2c 4e 55 4c 4c  .094,3203.2,NULL
1f80: 2c 27 66 65 64 63 62 61 7a 27 29 3b 0a 20 20 20  ,'fedcbaz');.   
1f90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1fa0: 56 41 4c 55 45 53 28 39 35 2c 31 30 34 35 2c 33  VALUES(95,1045,3
1fb0: 32 30 33 32 2c 39 35 2e 30 39 35 2c 33 32 30 33  2032,95.095,3203
1fc0: 2e 32 2c 27 72 73 74 75 76 77 78 79 7a 27 2c 4e  .2,'rstuvwxyz',N
1fd0: 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ULL);.    INSERT
1fe0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1ff0: 39 36 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 39 36 2e  96,NULL,NULL,96.
2000: 30 39 36 2c 33 32 30 33 2e 32 2c 27 73 74 75 76  096,3203.2,'stuv
2010: 77 78 79 7a 61 27 2c 27 66 65 64 63 62 61 7a 27  wxyza','fedcbaz'
2020: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2030: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 39 37 2c  TO t1 VALUES(97,
2040: 31 30 36 37 2c 33 33 30 33 33 2c 4e 55 4c 4c 2c  1067,33033,NULL,
2050: 4e 55 4c 4c 2c 27 74 75 76 77 78 79 7a 61 62 27  NULL,'tuvwxyzab'
2060: 2c 27 66 65 64 63 62 61 7a 27 29 3b 0a 20 20 20  ,'fedcbaz');.   
2070: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
2080: 56 41 4c 55 45 53 28 39 38 2c 31 30 37 38 2c 33  VALUES(98,1078,3
2090: 33 30 33 33 2c 39 38 2e 30 39 38 2c 33 33 30 33  3033,98.098,3303
20a0: 2e 33 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20  .3,NULL,NULL);. 
20b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
20c0: 31 20 56 41 4c 55 45 53 28 39 39 2c 4e 55 4c 4c  1 VALUES(99,NULL
20d0: 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c  ,NULL,NULL,NULL,
20e0: 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20  NULL,NULL);.    
20f0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 62  CREATE INDEX t1b
2100: 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 20 20 43   ON t1(b);.    C
2110: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 63 20  REATE INDEX t1c 
2120: 4f 4e 20 74 31 28 63 29 3b 0a 20 20 20 20 43 52  ON t1(c);.    CR
2130: 45 41 54 45 20 49 4e 44 45 58 20 74 31 64 20 4f  EATE INDEX t1d O
2140: 4e 20 74 31 28 64 29 3b 0a 20 20 20 20 43 52 45  N t1(d);.    CRE
2150: 41 54 45 20 49 4e 44 45 58 20 74 31 65 20 4f 4e  ATE INDEX t1e ON
2160: 20 74 31 28 65 29 3b 0a 20 20 20 20 43 52 45 41   t1(e);.    CREA
2170: 54 45 20 49 4e 44 45 58 20 74 31 66 20 4f 4e 20  TE INDEX t1f ON 
2180: 74 31 28 66 29 3b 0a 20 20 20 20 43 52 45 41 54  t1(f);.    CREAT
2190: 45 20 49 4e 44 45 58 20 74 31 67 20 4f 4e 20 74  E INDEX t1g ON t
21a0: 31 28 67 29 3b 0a 20 20 20 20 43 52 45 41 54 45  1(g);.    CREATE
21b0: 20 54 41 42 4c 45 20 74 32 28 61 20 49 4e 54 45   TABLE t2(a INTE
21c0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
21d0: 62 2c 63 2c 64 2c 65 2c 66 2c 67 29 3b 0a 20 20  b,c,d,e,f,g);.  
21e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
21f0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2200: 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  1;.    CREATE IN
2210: 44 45 58 20 74 32 62 20 4f 4e 20 74 32 28 62 2c  DEX t2b ON t2(b,
2220: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  c);.    CREATE I
2230: 4e 44 45 58 20 74 32 63 20 4f 4e 20 74 32 28 63  NDEX t2c ON t2(c
2240: 2c 65 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,e);.    CREATE 
2250: 49 4e 44 45 58 20 74 32 64 20 4f 4e 20 74 32 28  INDEX t2d ON t2(
2260: 64 2c 67 29 3b 0a 20 20 20 20 43 52 45 41 54 45  d,g);.    CREATE
2270: 20 49 4e 44 45 58 20 74 32 65 20 4f 4e 20 74 32   INDEX t2e ON t2
2280: 28 65 2c 66 2c 67 29 3b 0a 20 20 20 20 43 52 45  (e,f,g);.    CRE
2290: 41 54 45 20 49 4e 44 45 58 20 74 32 66 20 4f 4e  ATE INDEX t2f ON
22a0: 20 74 32 28 66 2c 62 2c 64 2c 63 29 3b 0a 20 20   t2(f,b,d,c);.  
22b0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
22c0: 32 67 20 4f 4e 20 74 32 28 67 2c 66 29 3b 0a 20  2g ON t2(g,f);. 
22d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
22e0: 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 49 4e 53  t3(x,y);.    INS
22f0: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
2300: 45 53 28 31 2c 38 30 29 3b 0a 20 20 20 20 49 4e  ES(1,80);.    IN
2310: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
2320: 55 45 53 28 32 2c 38 30 29 3b 0a 20 20 20 20 43  UES(2,80);.    C
2330: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61  REATE TABLE t4(a
2340: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
2350: 20 4b 45 59 2c 62 2c 63 2c 64 2c 65 2c 66 2c 67   KEY,b,c,d,e,f,g
2360: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2370: 54 4f 20 74 34 20 53 45 4c 45 43 54 20 2a 20 46  TO t4 SELECT * F
2380: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41  ROM t1;.    CREA
2390: 54 45 20 49 4e 44 45 58 20 74 34 62 20 4f 4e 20  TE INDEX t4b ON 
23a0: 74 34 28 62 29 3b 0a 20 20 20 20 43 52 45 41 54  t4(b);.    CREAT
23b0: 45 20 49 4e 44 45 58 20 74 34 63 20 4f 4e 20 74  E INDEX t4c ON t
23c0: 34 28 63 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  4(c);.  }.} {}..
23d0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 31  do_test where9-1
23e0: 2e 32 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73  .2.1 {.  count_s
23f0: 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43  teps {.    SELEC
2400: 54 20 61 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  T a FROM t1.    
2410: 20 57 48 45 52 45 20 62 20 49 53 20 4e 55 4c 4c   WHERE b IS NULL
2420: 0a 20 20 20 20 20 20 20 20 4f 52 20 63 20 49 53  .        OR c IS
2430: 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 4f 52   NULL.        OR
2440: 20 64 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 4f   d IS NULL.    O
2450: 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20  RDER BY a.  }.} 
2460: 7b 39 30 20 39 31 20 39 32 20 39 36 20 39 37 20  {90 91 92 96 97 
2470: 39 39 20 73 63 61 6e 20 30 20 73 6f 72 74 20 31  99 scan 0 sort 1
2480: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  }.do_test where9
2490: 2d 31 2e 32 2e 32 20 7b 0a 20 20 63 6f 75 6e 74  -1.2.2 {.  count
24a0: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c  _steps {.    SEL
24b0: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 0a 20 20  ECT a FROM t1.  
24c0: 20 20 20 57 48 45 52 45 20 2b 62 20 49 53 20 4e     WHERE +b IS N
24d0: 55 4c 4c 0a 20 20 20 20 20 20 20 20 4f 52 20 63  ULL.        OR c
24e0: 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   IS NULL.       
24f0: 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 0a 20 20   OR d IS NULL.  
2500: 20 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d    ORDER BY a.  }
2510: 0a 7d 20 7b 39 30 20 39 31 20 39 32 20 39 36 20  .} {90 91 92 96 
2520: 39 37 20 39 39 20 73 63 61 6e 20 39 38 20 73 6f  97 99 scan 98 so
2530: 72 74 20 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68  rt 0}.do_test wh
2540: 65 72 65 39 2d 31 2e 32 2e 33 20 7b 0a 20 20 63  ere9-1.2.3 {.  c
2550: 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20  ount_steps {.   
2560: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
2570: 31 0a 20 20 20 20 20 57 48 45 52 45 20 62 20 49  1.     WHERE b I
2580: 53 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 4f  S NULL.        O
2590: 52 20 2b 63 20 49 53 20 4e 55 4c 4c 0a 20 20 20  R +c IS NULL.   
25a0: 20 20 20 20 20 4f 52 20 64 20 49 53 20 4e 55 4c       OR d IS NUL
25b0: 4c 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 61  L.    ORDER BY a
25c0: 0a 20 20 7d 0a 7d 20 7b 39 30 20 39 31 20 39 32  .  }.} {90 91 92
25d0: 20 39 36 20 39 37 20 39 39 20 73 63 61 6e 20 39   96 97 99 scan 9
25e0: 38 20 73 6f 72 74 20 30 7d 0a 64 6f 5f 74 65 73  8 sort 0}.do_tes
25f0: 74 20 77 68 65 72 65 39 2d 31 2e 32 2e 34 20 7b  t where9-1.2.4 {
2600: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
2610: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
2620: 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45  OM t1.     WHERE
2630: 20 62 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 20   b IS NULL.     
2640: 20 20 20 4f 52 20 63 20 49 53 20 4e 55 4c 4c 0a     OR c IS NULL.
2650: 20 20 20 20 20 20 20 20 4f 52 20 2b 64 20 49 53          OR +d IS
2660: 20 4e 55 4c 4c 0a 20 20 20 20 4f 52 44 45 52 20   NULL.    ORDER 
2670: 42 59 20 61 0a 20 20 7d 0a 7d 20 7b 39 30 20 39  BY a.  }.} {90 9
2680: 31 20 39 32 20 39 36 20 39 37 20 39 39 20 73 63  1 92 96 97 99 sc
2690: 61 6e 20 39 38 20 73 6f 72 74 20 30 7d 0a 64 6f  an 98 sort 0}.do
26a0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 31 2e 32  _test where9-1.2
26b0: 2e 35 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65  .5 {.  count_ste
26c0: 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ps {.    SELECT 
26d0: 61 20 46 52 4f 4d 20 74 34 0a 20 20 20 20 20 57  a FROM t4.     W
26e0: 48 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 0a 20  HERE b IS NULL. 
26f0: 20 20 20 20 20 20 20 4f 52 20 63 20 49 53 20 4e         OR c IS N
2700: 55 4c 4c 0a 20 20 20 20 20 20 20 20 4f 52 20 64  ULL.        OR d
2710: 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 4f 52 44   IS NULL.    ORD
2720: 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b 39  ER BY a.  }.} {9
2730: 30 20 39 31 20 39 32 20 39 36 20 39 37 20 39 39  0 91 92 96 97 99
2740: 20 73 63 61 6e 20 39 38 20 73 6f 72 74 20 30 7d   scan 98 sort 0}
2750: 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  ..do_test where9
2760: 2d 31 2e 33 2e 31 20 7b 0a 20 20 63 6f 75 6e 74  -1.3.1 {.  count
2770: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c  _steps {.    SEL
2780: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 0a 20 20  ECT a FROM t1.  
2790: 20 20 20 57 48 45 52 45 20 28 62 20 49 53 20 4e     WHERE (b IS N
27a0: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
27b0: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
27c0: 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62  L).        OR (b
27d0: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
27e0: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  IS NULL AND d NO
27f0: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
2800: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
2810: 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  ND c NOT NULL AN
2820: 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20  D d IS NULL).   
2830: 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a   ORDER BY a.  }.
2840: 7d 20 7b 39 30 20 39 31 20 39 32 20 39 37 20 73  } {90 91 92 97 s
2850: 63 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f  can 0 sort 1}.do
2860: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 31 2e 33  _test where9-1.3
2870: 2e 32 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65  .2 {.  count_ste
2880: 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ps {.    SELECT 
2890: 61 20 46 52 4f 4d 20 74 34 0a 20 20 20 20 20 57  a FROM t4.     W
28a0: 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 20  HERE (b IS NULL 
28b0: 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41  AND c NOT NULL A
28c0: 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20  ND d NOT NULL). 
28d0: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
28e0: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e   NULL AND c IS N
28f0: 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55  ULL AND d NOT NU
2900: 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28  LL).        OR (
2910: 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63  b NOT NULL AND c
2920: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20   NOT NULL AND d 
2930: 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 4f 52 44  IS NULL).    ORD
2940: 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b 39  ER BY a.  }.} {9
2950: 30 20 39 31 20 39 32 20 39 37 20 73 63 61 6e 20  0 91 92 97 scan 
2960: 39 38 20 73 6f 72 74 20 30 7d 0a 64 6f 5f 74 65  98 sort 0}.do_te
2970: 73 74 20 77 68 65 72 65 39 2d 31 2e 33 2e 33 20  st where9-1.3.3 
2980: 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20  {.  count_steps 
2990: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
29a0: 52 4f 4d 20 74 34 0a 20 20 20 20 20 57 48 45 52  ROM t4.     WHER
29b0: 45 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  E (b NOT NULL AN
29c0: 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  D c NOT NULL AND
29d0: 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20   d IS NULL).    
29e0: 20 20 20 20 4f 52 20 28 62 20 49 53 20 4e 55 4c      OR (b IS NUL
29f0: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
2a00: 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29   AND d NOT NULL)
2a10: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e  .        OR (b N
2a20: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53  OT NULL AND c IS
2a30: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
2a40: 4e 55 4c 4c 29 0a 20 20 20 20 4f 52 44 45 52 20  NULL).    ORDER 
2a50: 42 59 20 61 0a 20 20 7d 0a 7d 20 7b 39 30 20 39  BY a.  }.} {90 9
2a60: 31 20 39 32 20 39 37 20 73 63 61 6e 20 39 38 20  1 92 97 scan 98 
2a70: 73 6f 72 74 20 30 7d 0a 64 6f 5f 74 65 73 74 20  sort 0}.do_test 
2a80: 77 68 65 72 65 39 2d 31 2e 33 2e 34 20 7b 0a 20  where9-1.3.4 {. 
2a90: 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20   count_steps {. 
2aa0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
2ab0: 20 28 74 34 29 0a 20 20 20 20 20 57 48 45 52 45   (t4).     WHERE
2ac0: 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20   (b IS NULL AND 
2ad0: 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64  c NOT NULL AND d
2ae0: 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20   NOT NULL).     
2af0: 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c     OR (b NOT NUL
2b00: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
2b10: 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a   AND d IS NULL).
2b20: 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f          OR (b NO
2b30: 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20  T NULL AND c IS 
2b40: 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e  NULL AND d NOT N
2b50: 55 4c 4c 29 0a 20 20 20 20 4f 52 44 45 52 20 42  ULL).    ORDER B
2b60: 59 20 61 0a 20 20 7d 0a 7d 20 7b 39 30 20 39 31  Y a.  }.} {90 91
2b70: 20 39 32 20 39 37 20 73 63 61 6e 20 39 38 20 73   92 97 scan 98 s
2b80: 6f 72 74 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20  ort 0}..do_test 
2b90: 77 68 65 72 65 39 2d 31 2e 34 20 7b 0a 20 20 63  where9-1.4 {.  c
2ba0: 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20  ount_steps {.   
2bb0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
2bc0: 31 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 3e  1.     WHERE (b>
2bd0: 3d 39 35 30 20 41 4e 44 20 62 3c 3d 31 30 31 30  =950 AND b<=1010
2be0: 29 20 4f 52 20 28 62 20 49 53 20 4e 55 4c 4c 20  ) OR (b IS NULL 
2bf0: 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND c NOT NULL).
2c00: 20 20 20 20 4f 52 44 45 52 20 42 59 20 61 0a 20      ORDER BY a. 
2c10: 20 7d 0a 7d 20 7b 38 37 20 38 38 20 38 39 20 39   }.} {87 88 89 9
2c20: 30 20 39 31 20 73 63 61 6e 20 30 20 73 6f 72 74  0 91 scan 0 sort
2c30: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   1}.do_test wher
2c40: 65 39 2d 31 2e 35 20 7b 0a 20 20 23 20 57 68 65  e9-1.5 {.  # Whe
2c50: 6e 20 74 68 69 73 20 74 65 73 74 20 77 61 73 20  n this test was 
2c60: 6f 72 69 67 69 6e 61 6c 6c 79 20 77 72 69 74 74  originally writt
2c70: 65 6e 2c 20 53 51 4c 69 74 65 20 75 73 65 64 20  en, SQLite used 
2c80: 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2c90: 0a 20 20 23 20 74 6f 20 6f 70 74 69 6d 69 7a 65  .  # to optimize
2ca0: 20 74 68 65 20 22 4f 52 44 45 52 20 42 59 20 61   the "ORDER BY a
2cb0: 22 20 63 6c 61 75 73 65 2e 20 4e 6f 77 20 74 68  " clause. Now th
2cc0: 61 74 20 69 74 20 69 73 20 75 73 69 6e 67 20 61  at it is using a
2cd0: 20 72 6f 77 68 61 73 68 2c 0a 20 20 23 20 74 68   rowhash,.  # th
2ce0: 69 73 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  is is not possib
2cf0: 6c 65 2e 20 53 6f 20 77 65 20 68 61 76 65 20 74  le. So we have t
2d00: 6f 20 63 6f 6d 6d 65 6e 74 20 6f 75 74 20 6f 6e  o comment out on
2d10: 65 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52  e term of the OR
2d20: 0a 20 20 23 20 65 78 70 72 65 73 73 69 6f 6e 20  .  # expression 
2d30: 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 65 76  in order to prev
2d40: 65 6e 74 20 53 51 4c 69 74 65 20 66 72 6f 6d 20  ent SQLite from 
2d50: 64 65 65 6d 69 6e 67 20 61 20 66 75 6c 6c 2d 74  deeming a full-t
2d60: 61 62 6c 65 0a 20 20 23 20 73 63 61 6e 20 74 6f  able.  # scan to
2d70: 20 62 65 20 61 20 62 65 74 74 65 72 20 73 74 72   be a better str
2d80: 61 74 65 67 79 20 74 68 61 6e 20 75 73 69 6e 67  ategy than using
2d90: 20 6d 75 6c 74 69 70 6c 65 20 69 6e 64 65 78 65   multiple indexe
2da0: 73 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 0a 20  s, which would. 
2db0: 20 23 20 64 65 66 65 61 74 20 74 68 65 20 70 6f   # defeat the po
2dc0: 69 6e 74 20 6f 66 20 74 68 65 20 74 65 73 74 2e  int of the test.
2dd0: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
2de0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
2df0: 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45  OM t1.     WHERE
2e00: 20 61 3d 38 33 0a 20 20 20 20 20 20 20 20 4f 52   a=83.        OR
2e10: 20 62 3d 39 31 33 0a 20 20 20 20 20 20 20 20 4f   b=913.        O
2e20: 52 20 63 3d 32 38 30 32 38 0a 20 20 20 20 20 20  R c=28028.      
2e30: 20 20 4f 52 20 28 64 3e 3d 38 32 20 41 4e 44 20    OR (d>=82 AND 
2e40: 64 3c 38 33 29 0a 2f 2a 20 20 20 20 20 20 4f 52  d<83)./*      OR
2e50: 20 28 65 3e 32 38 30 32 20 41 4e 44 20 65 3c 32   (e>2802 AND e<2
2e60: 38 30 33 29 20 20 2a 2f 0a 20 20 20 20 20 20 20  803)  */.       
2e70: 20 4f 52 20 66 3d 27 66 67 68 69 6a 6b 6c 6d 6e   OR f='fghijklmn
2e80: 27 0a 20 20 20 20 20 20 20 20 4f 52 20 67 3d 27  '.        OR g='
2e90: 68 67 66 65 64 63 62 27 0a 20 20 20 20 4f 52 44  hgfedcb'.    ORD
2ea0: 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b 35  ER BY a.  }.} {5
2eb0: 20 33 31 20 35 37 20 38 32 20 38 33 20 38 34 20   31 57 82 83 84 
2ec0: 38 35 20 38 36 20 38 37 20 73 63 61 6e 20 30 20  85 86 87 scan 0 
2ed0: 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73 74 20  sort 1}.do_test 
2ee0: 77 68 65 72 65 39 2d 31 2e 36 20 7b 0a 20 20 63  where9-1.6 {.  c
2ef0: 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20  ount_steps {.   
2f00: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
2f10: 31 0a 20 20 20 20 20 57 48 45 52 45 20 62 3d 31  1.     WHERE b=1
2f20: 30 31 32 0a 20 20 20 20 20 20 20 20 4f 52 20 28  012.        OR (
2f30: 64 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 65 20  d IS NULL AND e 
2f40: 49 53 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 7d  IS NOT NULL).  }
2f50: 0a 7d 20 7b 39 32 20 73 63 61 6e 20 30 20 73 6f  .} {92 scan 0 so
2f60: 72 74 20 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68  rt 0}.do_test wh
2f70: 65 72 65 39 2d 31 2e 37 20 7b 0a 20 20 63 6f 75  ere9-1.7 {.  cou
2f80: 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53  nt_steps {.    S
2f90: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 0a  ELECT a FROM t1.
2fa0: 20 20 20 20 20 57 48 45 52 45 20 28 62 3d 31 30       WHERE (b=10
2fb0: 31 32 20 4f 52 20 28 64 20 49 53 20 4e 55 4c 4c  12 OR (d IS NULL
2fc0: 20 41 4e 44 20 65 20 49 53 20 4e 4f 54 20 4e 55   AND e IS NOT NU
2fd0: 4c 4c 29 29 0a 20 20 20 20 20 20 20 41 4e 44 20  LL)).       AND 
2fe0: 66 21 3d 67 0a 20 20 7d 0a 7d 20 7b 39 32 20 73  f!=g.  }.} {92 s
2ff0: 63 61 6e 20 30 20 73 6f 72 74 20 30 7d 0a 64 6f  can 0 sort 0}.do
3000: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 31 2e 38  _test where9-1.8
3010: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
3020: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
3030: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45  FROM t1.     WHE
3040: 52 45 20 28 62 3d 31 30 31 32 20 4f 52 20 28 64  RE (b=1012 OR (d
3050: 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 65 20 49   IS NULL AND e I
3060: 53 20 4e 4f 54 20 4e 55 4c 4c 29 29 0a 20 20 20  S NOT NULL)).   
3070: 20 20 20 20 41 4e 44 20 66 3d 3d 67 0a 20 20 7d      AND f==g.  }
3080: 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f 72 74 20  .} {scan 0 sort 
3090: 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  0}..do_test wher
30a0: 65 39 2d 32 2e 31 20 7b 0a 20 20 63 6f 75 6e 74  e9-2.1 {.  count
30b0: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c  _steps {.    SEL
30c0: 45 43 54 20 74 32 2e 61 20 46 52 4f 4d 20 74 31  ECT t2.a FROM t1
30d0: 2c 20 74 32 0a 20 20 20 20 20 57 48 45 52 45 20  , t2.     WHERE 
30e0: 74 31 2e 61 3d 38 30 0a 20 20 20 20 20 20 20 41  t1.a=80.       A
30f0: 4e 44 20 28 74 31 2e 63 3d 74 32 2e 63 20 4f 52  ND (t1.c=t2.c OR
3100: 20 74 31 2e 64 3d 74 32 2e 64 29 0a 20 20 20 20   t1.d=t2.d).    
3110: 4f 52 44 45 52 20 42 59 20 31 0a 20 20 7d 0a 7d  ORDER BY 1.  }.}
3120: 20 7b 37 39 20 38 30 20 38 31 20 73 63 61 6e 20   {79 80 81 scan 
3130: 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73  0 sort 1}.do_tes
3140: 74 20 77 68 65 72 65 39 2d 32 2e 32 20 7b 0a 20  t where9-2.2 {. 
3150: 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20   count_steps {. 
3160: 20 20 20 53 45 4c 45 43 54 20 74 32 2e 61 20 46     SELECT t2.a F
3170: 52 4f 4d 20 74 31 2c 20 74 32 0a 20 20 20 20 20  ROM t1, t2.     
3180: 57 48 45 52 45 20 74 31 2e 61 3d 38 30 0a 20 20  WHERE t1.a=80.  
3190: 20 20 20 20 20 41 4e 44 20 28 28 74 31 2e 63 3d       AND ((t1.c=
31a0: 74 32 2e 63 20 41 4e 44 20 74 31 2e 64 3d 74 32  t2.c AND t1.d=t2
31b0: 2e 64 29 20 4f 52 20 74 31 2e 66 3d 74 32 2e 66  .d) OR t1.f=t2.f
31c0: 29 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 31  ).    ORDER BY 1
31d0: 0a 20 20 7d 0a 7d 20 7b 32 20 32 38 20 35 34 20  .  }.} {2 28 54 
31e0: 38 30 20 73 63 61 6e 20 30 20 73 6f 72 74 20 31  80 scan 0 sort 1
31f0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  }.do_test where9
3200: 2d 32 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 5f 73  -2.3 {.  count_s
3210: 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43  teps {.    SELEC
3220: 54 20 63 6f 61 6c 65 73 63 65 28 74 32 2e 61 2c  T coalesce(t2.a,
3230: 39 39 39 39 29 0a 20 20 20 20 20 20 46 52 4f 4d  9999).      FROM
3240: 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 32   t1 LEFT JOIN t2
3250: 20 4f 4e 20 28 74 31 2e 63 3d 74 32 2e 63 20 41   ON (t1.c=t2.c A
3260: 4e 44 20 74 31 2e 64 3d 74 32 2e 64 29 20 4f 52  ND t1.d=t2.d) OR
3270: 20 74 31 2e 66 3d 74 32 2e 66 0a 20 20 20 20 20   t1.f=t2.f.     
3280: 57 48 45 52 45 20 74 31 2e 61 3d 38 30 0a 20 20  WHERE t1.a=80.  
3290: 20 20 4f 52 44 45 52 20 42 59 20 31 0a 20 20 7d    ORDER BY 1.  }
32a0: 0a 7d 20 7b 32 20 32 38 20 35 34 20 38 30 20 73  .} {2 28 54 80 s
32b0: 63 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f  can 0 sort 1}.do
32c0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 32 2e 34  _test where9-2.4
32d0: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
32e0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f   {.    SELECT co
32f0: 61 6c 65 73 63 65 28 74 32 2e 61 2c 39 39 39 39  alesce(t2.a,9999
3300: 29 0a 20 20 20 20 20 20 46 52 4f 4d 20 74 31 20  ).      FROM t1 
3310: 4c 45 46 54 20 4a 4f 49 4e 20 74 32 20 4f 4e 20  LEFT JOIN t2 ON 
3320: 28 74 31 2e 63 2b 31 3d 74 32 2e 63 20 41 4e 44  (t1.c+1=t2.c AND
3330: 20 74 31 2e 64 3d 74 32 2e 64 29 20 4f 52 20 28   t1.d=t2.d) OR (
3340: 74 31 2e 66 7c 7c 27 78 27 29 3d 74 32 2e 66 0a  t1.f||'x')=t2.f.
3350: 20 20 20 20 20 57 48 45 52 45 20 74 31 2e 61 3d       WHERE t1.a=
3360: 38 30 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20  80.    ORDER BY 
3370: 31 0a 20 20 7d 0a 7d 20 7b 39 39 39 39 20 73 63  1.  }.} {9999 sc
3380: 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f  an 0 sort 1}.do_
3390: 74 65 73 74 20 77 68 65 72 65 39 2d 32 2e 35 20  test where9-2.5 
33a0: 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20  {.  count_steps 
33b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 31 2e  {.    SELECT t1.
33c0: 61 2c 20 63 6f 61 6c 65 73 63 65 28 74 32 2e 61  a, coalesce(t2.a
33d0: 2c 39 39 39 39 29 0a 20 20 20 20 20 20 46 52 4f  ,9999).      FRO
33e0: 4d 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74  M t1 LEFT JOIN t
33f0: 32 20 4f 4e 20 28 74 31 2e 63 3d 74 32 2e 63 20  2 ON (t1.c=t2.c 
3400: 41 4e 44 20 74 31 2e 64 3d 74 32 2e 64 29 20 4f  AND t1.d=t2.d) O
3410: 52 20 28 74 31 2e 66 29 3d 74 32 2e 66 0a 20 20  R (t1.f)=t2.f.  
3420: 20 20 20 57 48 45 52 45 20 74 31 2e 61 3d 38 30     WHERE t1.a=80
3430: 20 4f 52 20 74 31 2e 62 3d 38 38 30 20 4f 52 20   OR t1.b=880 OR 
3440: 28 74 31 2e 63 3d 32 37 30 32 37 20 41 4e 44 20  (t1.c=27027 AND 
3450: 72 6f 75 6e 64 28 74 31 2e 64 29 3d 3d 38 30 29  round(t1.d)==80)
3460: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 31 0a  .    ORDER BY 1.
3470: 20 20 7d 0a 7d 20 7b 38 30 20 38 30 20 38 30 20    }.} {80 80 80 
3480: 32 20 38 30 20 32 38 20 38 30 20 35 34 20 73 63  2 80 28 80 54 sc
3490: 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f  an 0 sort 1}.do_
34a0: 74 65 73 74 20 77 68 65 72 65 39 2d 32 2e 36 20  test where9-2.6 
34b0: 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20  {.  count_steps 
34c0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 31 2e  {.    SELECT t1.
34d0: 61 2c 20 63 6f 61 6c 65 73 63 65 28 74 32 2e 61  a, coalesce(t2.a
34e0: 2c 39 39 39 39 29 0a 20 20 20 20 20 20 46 52 4f  ,9999).      FRO
34f0: 4d 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74  M t1 LEFT JOIN t
3500: 32 20 4f 4e 20 28 74 31 2e 63 2b 31 3d 74 32 2e  2 ON (t1.c+1=t2.
3510: 63 20 41 4e 44 20 74 31 2e 64 3d 74 32 2e 64 29  c AND t1.d=t2.d)
3520: 20 4f 52 20 28 74 31 2e 66 7c 7c 27 78 27 29 3d   OR (t1.f||'x')=
3530: 74 32 2e 66 0a 20 20 20 20 20 57 48 45 52 45 20  t2.f.     WHERE 
3540: 74 31 2e 61 3d 38 30 20 4f 52 20 74 31 2e 62 3d  t1.a=80 OR t1.b=
3550: 38 38 30 20 4f 52 20 28 74 31 2e 63 3d 32 37 30  880 OR (t1.c=270
3560: 32 37 20 41 4e 44 20 72 6f 75 6e 64 28 74 31 2e  27 AND round(t1.
3570: 64 29 3d 3d 38 30 29 0a 20 20 20 20 4f 52 44 45  d)==80).    ORDE
3580: 52 20 42 59 20 31 0a 20 20 7d 0a 7d 20 7b 38 30  R BY 1.  }.} {80
3590: 20 39 39 39 39 20 73 63 61 6e 20 30 20 73 6f 72   9999 scan 0 sor
35a0: 74 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  t 1}.do_test whe
35b0: 72 65 39 2d 32 2e 37 20 7b 0a 20 20 63 6f 75 6e  re9-2.7 {.  coun
35c0: 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45  t_steps {.    SE
35d0: 4c 45 43 54 20 74 33 2e 78 2c 20 74 31 2e 61 2c  LECT t3.x, t1.a,
35e0: 20 63 6f 61 6c 65 73 63 65 28 74 32 2e 61 2c 39   coalesce(t2.a,9
35f0: 39 39 39 29 0a 20 20 20 20 20 20 46 52 4f 4d 20  999).      FROM 
3600: 74 33 20 4a 4f 49 4e 0a 20 20 20 20 20 20 20 20  t3 JOIN.        
3610: 20 20 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20     t1 LEFT JOIN 
3620: 74 32 20 4f 4e 20 28 74 31 2e 63 2b 31 3d 74 32  t2 ON (t1.c+1=t2
3630: 2e 63 20 41 4e 44 20 74 31 2e 64 3d 74 32 2e 64  .c AND t1.d=t2.d
3640: 29 20 4f 52 20 28 74 31 2e 66 7c 7c 27 78 27 29  ) OR (t1.f||'x')
3650: 3d 74 32 2e 66 0a 20 20 20 20 20 57 48 45 52 45  =t2.f.     WHERE
3660: 20 74 31 2e 61 3d 74 33 2e 79 20 4f 52 20 74 31   t1.a=t3.y OR t1
3670: 2e 62 3d 74 33 2e 79 2a 31 31 20 4f 52 20 28 74  .b=t3.y*11 OR (t
3680: 31 2e 63 3d 32 37 30 32 37 20 41 4e 44 20 72 6f  1.c=27027 AND ro
3690: 75 6e 64 28 74 31 2e 64 29 3d 3d 38 30 29 0a 20  und(t1.d)==80). 
36a0: 20 20 20 4f 52 44 45 52 20 42 59 20 31 2c 20 32     ORDER BY 1, 2
36b0: 0a 20 20 7d 0a 7d 20 7b 31 20 38 30 20 39 39 39  .  }.} {1 80 999
36c0: 39 20 32 20 38 30 20 39 39 39 39 20 73 63 61 6e  9 2 80 9999 scan
36d0: 20 31 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65   1 sort 1}.do_te
36e0: 73 74 20 77 68 65 72 65 39 2d 32 2e 38 20 7b 0a  st where9-2.8 {.
36f0: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
3700: 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e 78 2c      SELECT t3.x,
3710: 20 74 31 2e 61 2c 20 63 6f 61 6c 65 73 63 65 28   t1.a, coalesce(
3720: 74 32 2e 61 2c 39 39 39 39 29 0a 20 20 20 20 20  t2.a,9999).     
3730: 20 46 52 4f 4d 20 74 33 20 4a 4f 49 4e 0a 20 20   FROM t3 JOIN.  
3740: 20 20 20 20 20 20 20 20 20 74 31 20 4c 45 46 54           t1 LEFT
3750: 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 28 74 31 2e   JOIN t2 ON (t1.
3760: 63 3d 74 32 2e 63 20 41 4e 44 20 74 31 2e 64 3d  c=t2.c AND t1.d=
3770: 74 32 2e 64 29 20 4f 52 20 28 74 31 2e 66 29 3d  t2.d) OR (t1.f)=
3780: 74 32 2e 66 0a 20 20 20 20 20 57 48 45 52 45 20  t2.f.     WHERE 
3790: 74 31 2e 61 3d 74 33 2e 79 20 4f 52 20 74 31 2e  t1.a=t3.y OR t1.
37a0: 62 3d 74 33 2e 79 2a 31 31 20 4f 52 20 28 74 31  b=t3.y*11 OR (t1
37b0: 2e 63 3d 32 37 30 32 37 20 41 4e 44 20 72 6f 75  .c=27027 AND rou
37c0: 6e 64 28 74 31 2e 64 29 3d 3d 38 30 29 0a 20 20  nd(t1.d)==80).  
37d0: 20 20 4f 52 44 45 52 20 42 59 20 31 2c 20 32 2c    ORDER BY 1, 2,
37e0: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 38 30 20 32   3.  }.} {1 80 2
37f0: 20 31 20 38 30 20 32 38 20 31 20 38 30 20 35 34   1 80 28 1 80 54
3800: 20 31 20 38 30 20 38 30 20 32 20 38 30 20 32 20   1 80 80 2 80 2 
3810: 32 20 38 30 20 32 38 20 32 20 38 30 20 35 34 20  2 80 28 2 80 54 
3820: 32 20 38 30 20 38 30 20 73 63 61 6e 20 31 20 73  2 80 80 scan 1 s
3830: 6f 72 74 20 31 7d 0a 0a 0a 69 66 63 61 70 61 62  ort 1}...ifcapab
3840: 6c 65 20 65 78 70 6c 61 69 6e 20 7b 0a 20 20 64  le explain {.  d
3850: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77  o_execsql_test w
3860: 68 65 72 65 39 2d 33 2e 31 20 7b 0a 20 20 20 20  here9-3.1 {.    
3870: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
3880: 41 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 74 32  AN.    SELECT t2
3890: 2e 61 20 46 52 4f 4d 20 74 31 2c 20 74 32 0a 20  .a FROM t1, t2. 
38a0: 20 20 20 57 48 45 52 45 20 74 31 2e 61 3d 38 30     WHERE t1.a=80
38b0: 20 41 4e 44 20 28 28 74 31 2e 63 3d 74 32 2e 63   AND ((t1.c=t2.c
38c0: 20 41 4e 44 20 74 31 2e 64 3d 74 32 2e 64 29 20   AND t1.d=t2.d) 
38d0: 4f 52 20 74 31 2e 66 3d 74 32 2e 66 29 0a 20 20  OR t1.f=t2.f).  
38e0: 7d 20 7b 0a 20 20 20 20 30 20 30 20 30 20 7b 53  } {.    0 0 0 {S
38f0: 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20 55  EARCH TABLE t1 U
3900: 53 49 4e 47 20 49 4e 54 45 47 45 52 20 50 52 49  SING INTEGER PRI
3910: 4d 41 52 59 20 4b 45 59 20 28 72 6f 77 69 64 3d  MARY KEY (rowid=
3920: 3f 29 7d 20 0a 20 20 20 20 30 20 31 20 31 20 7b  ?)} .    0 1 1 {
3930: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 32 20  SEARCH TABLE t2 
3940: 55 53 49 4e 47 20 49 4e 44 45 58 20 74 32 64 20  USING INDEX t2d 
3950: 28 64 3d 3f 29 7d 20 0a 20 20 20 20 30 20 31 20  (d=?)} .    0 1 
3960: 31 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20  1 {SEARCH TABLE 
3970: 74 32 20 55 53 49 4e 47 20 43 4f 56 45 52 49 4e  t2 USING COVERIN
3980: 47 20 49 4e 44 45 58 20 74 32 66 20 28 66 3d 3f  G INDEX t2f (f=?
3990: 29 7d 0a 20 20 7d 0a 20 20 64 6f 5f 65 78 65 63  )}.  }.  do_exec
39a0: 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 39 2d  sql_test where9-
39b0: 33 2e 32 20 7b 0a 20 20 20 20 45 58 50 4c 41 49  3.2 {.    EXPLAI
39c0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 20  N QUERY PLAN.   
39d0: 20 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65   SELECT coalesce
39e0: 28 74 32 2e 61 2c 39 39 39 39 29 0a 20 20 20 20  (t2.a,9999).    
39f0: 46 52 4f 4d 20 74 31 20 4c 45 46 54 20 4a 4f 49  FROM t1 LEFT JOI
3a00: 4e 20 74 32 20 4f 4e 20 28 74 31 2e 63 2b 31 3d  N t2 ON (t1.c+1=
3a10: 74 32 2e 63 20 41 4e 44 20 74 31 2e 64 3d 74 32  t2.c AND t1.d=t2
3a20: 2e 64 29 20 4f 52 20 28 74 31 2e 66 7c 7c 27 78  .d) OR (t1.f||'x
3a30: 27 29 3d 74 32 2e 66 0a 20 20 20 20 57 48 45 52  ')=t2.f.    WHER
3a40: 45 20 74 31 2e 61 3d 38 30 0a 20 20 7d 20 7b 0a  E t1.a=80.  } {.
3a50: 20 20 20 20 30 20 30 20 30 20 7b 53 45 41 52 43      0 0 0 {SEARC
3a60: 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  H TABLE t1 USING
3a70: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
3a80: 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 7d 20   KEY (rowid=?)} 
3a90: 0a 20 20 20 20 30 20 31 20 31 20 7b 53 45 41 52  .    0 1 1 {SEAR
3aa0: 43 48 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e  CH TABLE t2 USIN
3ab0: 47 20 49 4e 44 45 58 20 74 32 64 20 28 64 3d 3f  G INDEX t2d (d=?
3ac0: 29 7d 20 0a 20 20 20 20 30 20 31 20 31 20 7b 53  )} .    0 1 1 {S
3ad0: 45 41 52 43 48 20 54 41 42 4c 45 20 74 32 20 55  EARCH TABLE t2 U
3ae0: 53 49 4e 47 20 43 4f 56 45 52 49 4e 47 20 49 4e  SING COVERING IN
3af0: 44 45 58 20 74 32 66 20 28 66 3d 3f 29 7d 0a 20  DEX t2f (f=?)}. 
3b00: 20 7d 0a 7d 20 0a 0a 23 20 4d 61 6b 65 20 73 75   }.} ..# Make su
3b10: 72 65 20 74 68 61 74 20 49 4e 44 45 58 45 44 20  re that INDEXED 
3b20: 42 59 20 61 6e 64 20 6d 75 6c 74 69 2d 69 6e 64  BY and multi-ind
3b30: 65 78 20 4f 52 20 63 6c 61 75 73 65 73 20 70 6c  ex OR clauses pl
3b40: 61 79 20 77 65 6c 6c 20 77 69 74 68 0a 23 20 6f  ay well with.# o
3b50: 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 23 0a 64 6f  ne another..#.do
3b60: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 34 2e 31  _test where9-4.1
3b70: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
3b80: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
3b90: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45  FROM t1.     WHE
3ba0: 52 45 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20  RE b>1000.      
3bb0: 20 41 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52   AND (c=31031 OR
3bc0: 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20   d IS NULL).    
3bd0: 20 4f 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d   ORDER BY +a.  }
3be0: 0a 7d 20 7b 39 32 20 39 33 20 39 37 20 73 63 61  .} {92 93 97 sca
3bf0: 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74  n 0 sort 1}.do_t
3c00: 65 73 74 20 77 68 65 72 65 39 2d 34 2e 32 20 7b  est where9-4.2 {
3c10: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
3c20: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
3c30: 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45  OM t1.     WHERE
3c40: 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20 41   b>1000.       A
3c50: 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20 2b  ND (c=31031 OR +
3c60: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20  d IS NULL).     
3c70: 4f 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a  ORDER BY +a.  }.
3c80: 7d 20 7b 39 32 20 39 33 20 39 37 20 73 63 61 6e  } {92 93 97 scan
3c90: 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65   0 sort 1}.do_te
3ca0: 73 74 20 77 68 65 72 65 39 2d 34 2e 33 20 7b 0a  st where9-4.3 {.
3cb0: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
3cc0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
3cd0: 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45 20  M t1.     WHERE 
3ce0: 2b 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20 41  +b>1000.       A
3cf0: 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20 64  ND (c=31031 OR d
3d00: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20 4f   IS NULL).     O
3d10: 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a 7d  RDER BY +a.  }.}
3d20: 20 7b 39 32 20 39 33 20 39 37 20 73 63 61 6e 20   {92 93 97 scan 
3d30: 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73  0 sort 1}.do_tes
3d40: 74 20 77 68 65 72 65 39 2d 34 2e 34 20 7b 0a 20  t where9-4.4 {. 
3d50: 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20   count_steps {. 
3d60: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
3d70: 20 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 74   t1 INDEXED BY t
3d80: 31 62 0a 20 20 20 20 20 57 48 45 52 45 20 62 3e  1b.     WHERE b>
3d90: 31 30 30 30 0a 20 20 20 20 20 20 20 41 4e 44 20  1000.       AND 
3da0: 28 63 3d 33 31 30 33 31 20 4f 52 20 64 20 49 53  (c=31031 OR d IS
3db0: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 4f 52 44 45   NULL).     ORDE
3dc0: 52 20 42 59 20 2b 61 0a 20 20 7d 0a 7d 20 7b 39  R BY +a.  }.} {9
3dd0: 32 20 39 33 20 39 37 20 73 63 61 6e 20 30 20 73  2 93 97 scan 0 s
3de0: 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77  ort 1}.do_test w
3df0: 68 65 72 65 39 2d 34 2e 35 20 7b 0a 20 20 63 61  here9-4.5 {.  ca
3e00: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  tchsql {.    SEL
3e10: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 49 4e  ECT a FROM t1 IN
3e20: 44 45 58 45 44 20 42 59 20 74 31 62 0a 20 20 20  DEXED BY t1b.   
3e30: 20 20 57 48 45 52 45 20 2b 62 3e 31 30 30 30 0a    WHERE +b>1000.
3e40: 20 20 20 20 20 20 20 41 4e 44 20 28 63 3d 33 31         AND (c=31
3e50: 30 33 31 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c  031 OR d IS NULL
3e60: 29 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  ).     ORDER BY 
3e70: 2b 61 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20  +a.  }.} {1 {no 
3e80: 71 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d  query solution}}
3e90: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
3ea0: 34 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74  4.6 {.  count_st
3eb0: 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  eps {.    SELECT
3ec0: 20 61 20 46 52 4f 4d 20 74 31 20 4e 4f 54 20 49   a FROM t1 NOT I
3ed0: 4e 44 45 58 45 44 0a 20 20 20 20 20 57 48 45 52  NDEXED.     WHER
3ee0: 45 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20  E b>1000.       
3ef0: 41 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20  AND (c=31031 OR 
3f00: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20  d IS NULL).     
3f10: 4f 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a  ORDER BY +a.  }.
3f20: 7d 20 7b 39 32 20 39 33 20 39 37 20 73 63 61 6e  } {92 93 97 scan
3f30: 20 39 38 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74   98 sort 1}.do_t
3f40: 65 73 74 20 77 68 65 72 65 39 2d 34 2e 37 20 7b  est where9-4.7 {
3f50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3f60: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
3f70: 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 74 31  t1 INDEXED BY t1
3f80: 63 0a 20 20 20 20 20 57 48 45 52 45 20 62 3e 31  c.     WHERE b>1
3f90: 30 30 30 0a 20 20 20 20 20 20 20 41 4e 44 20 28  000.       AND (
3fa0: 63 3d 33 31 30 33 31 20 4f 52 20 64 20 49 53 20  c=31031 OR d IS 
3fb0: 4e 55 4c 4c 29 0a 20 20 20 20 20 4f 52 44 45 52  NULL).     ORDER
3fc0: 20 42 59 20 2b 61 0a 20 20 7d 0a 7d 20 7b 31 20   BY +a.  }.} {1 
3fd0: 7b 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69  {no query soluti
3fe0: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  on}}.do_test whe
3ff0: 72 65 39 2d 34 2e 38 20 7b 0a 20 20 63 61 74 63  re9-4.8 {.  catc
4000: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
4010: 54 20 61 20 46 52 4f 4d 20 74 31 20 49 4e 44 45  T a FROM t1 INDE
4020: 58 45 44 20 42 59 20 74 31 64 0a 20 20 20 20 20  XED BY t1d.     
4030: 57 48 45 52 45 20 62 3e 31 30 30 30 0a 20 20 20  WHERE b>1000.   
4040: 20 20 20 20 41 4e 44 20 28 63 3d 33 31 30 33 31      AND (c=31031
4050: 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20   OR d IS NULL). 
4060: 20 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61 0a      ORDER BY +a.
4070: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75 65    }.} {1 {no que
4080: 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 0a 69  ry solution}}..i
4090: 66 63 61 70 61 62 6c 65 20 65 78 70 6c 61 69 6e  fcapable explain
40a0: 20 7b 0a 20 20 23 20 54 68 65 20 28 63 3d 33 31   {.  # The (c=31
40b0: 30 33 31 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c  031 OR d IS NULL
40c0: 29 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 66  ) clause is pref
40d0: 65 72 72 65 64 20 6f 76 65 72 20 62 3e 31 30 30  erred over b>100
40e0: 30 20 62 65 63 61 75 73 65 0a 20 20 23 20 74 68  0 because.  # th
40f0: 65 20 66 6f 72 6d 65 72 20 69 73 20 61 6e 20 65  e former is an e
4100: 71 75 61 6c 69 74 79 20 74 65 73 74 20 77 68 69  quality test whi
4110: 63 68 20 69 73 20 65 78 70 65 63 74 65 64 20 74  ch is expected t
4120: 6f 20 72 65 74 75 72 6e 20 66 65 77 65 72 20 72  o return fewer r
4130: 6f 77 73 2e 0a 20 20 23 0a 20 20 64 6f 5f 65 78  ows..  #.  do_ex
4140: 65 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65  ecsql_test where
4150: 39 2d 35 2e 31 20 7b 0a 20 20 20 20 45 58 50 4c  9-5.1 {.    EXPL
4160: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53  AIN QUERY PLAN S
4170: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
4180: 57 48 45 52 45 20 62 3e 31 30 30 30 20 41 4e 44  WHERE b>1000 AND
4190: 20 28 63 3d 33 31 30 33 31 20 4f 52 20 64 20 49   (c=31031 OR d I
41a0: 53 20 4e 55 4c 4c 29 0a 20 20 7d 20 7b 0a 20 20  S NULL).  } {.  
41b0: 20 20 30 20 30 20 30 20 7b 53 45 41 52 43 48 20    0 0 0 {SEARCH 
41c0: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
41d0: 4e 44 45 58 20 74 31 63 20 28 63 3d 3f 29 7d 20  NDEX t1c (c=?)} 
41e0: 0a 20 20 20 20 30 20 30 20 30 20 7b 53 45 41 52  .    0 0 0 {SEAR
41f0: 43 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e  CH TABLE t1 USIN
4200: 47 20 49 4e 44 45 58 20 74 31 64 20 28 64 3d 3f  G INDEX t1d (d=?
4210: 29 7d 0a 20 20 7d 0a 0a 20 20 23 20 49 6e 20 63  )}.  }..  # In c
4220: 6f 6e 74 72 61 73 74 2c 20 62 3d 31 30 30 30 20  ontrast, b=1000 
4230: 69 73 20 70 72 65 66 65 72 72 65 64 20 6f 76 65  is preferred ove
4240: 72 20 61 6e 79 20 4f 52 2d 63 6c 61 75 73 65 2e  r any OR-clause.
4250: 0a 20 20 23 0a 20 20 64 6f 5f 65 78 65 63 73 71  .  #.  do_execsq
4260: 6c 5f 74 65 73 74 20 77 68 65 72 65 39 2d 35 2e  l_test where9-5.
4270: 32 20 7b 0a 20 20 20 20 45 58 50 4c 41 49 4e 20  2 {.    EXPLAIN 
4280: 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43  QUERY PLAN SELEC
4290: 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T a FROM t1 WHER
42a0: 45 20 62 3d 31 30 30 30 20 41 4e 44 20 28 63 3d  E b=1000 AND (c=
42b0: 33 31 30 33 31 20 4f 52 20 64 20 49 53 20 4e 55  31031 OR d IS NU
42c0: 4c 4c 29 0a 20 20 7d 20 7b 0a 20 20 20 20 30 20  LL).  } {.    0 
42d0: 30 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c  0 0 {SEARCH TABL
42e0: 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45 58  E t1 USING INDEX
42f0: 20 74 31 62 20 28 62 3d 3f 29 7d 0a 20 20 7d 0a   t1b (b=?)}.  }.
4300: 0a 20 20 23 20 4c 69 6b 65 77 69 73 65 2c 20 69  .  # Likewise, i
4310: 6e 65 71 75 61 6c 69 74 69 65 73 20 69 6e 20 61  nequalities in a
4320: 6e 20 41 4e 44 20 61 72 65 20 70 72 65 66 65 72  n AND are prefer
4330: 72 65 64 20 6f 76 65 72 20 69 6e 65 71 75 61 6c  red over inequal
4340: 69 74 69 65 73 20 69 6e 0a 20 20 23 20 61 6e 20  ities in.  # an 
4350: 4f 52 2e 0a 20 20 23 0a 20 20 64 6f 5f 65 78 65  OR..  #.  do_exe
4360: 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 39  csql_test where9
4370: 2d 35 2e 33 20 7b 0a 20 20 20 20 45 58 50 4c 41  -5.3 {.    EXPLA
4380: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
4390: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
43a0: 48 45 52 45 20 62 3e 31 30 30 30 20 41 4e 44 20  HERE b>1000 AND 
43b0: 28 63 3e 3d 33 31 30 33 31 20 4f 52 20 64 20 49  (c>=31031 OR d I
43c0: 53 20 4e 55 4c 4c 29 0a 20 20 7d 20 7b 0a 20 20  S NULL).  } {.  
43d0: 20 20 30 20 30 20 30 20 7b 53 45 41 52 43 48 20    0 0 0 {SEARCH 
43e0: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
43f0: 4e 44 45 58 20 74 31 62 20 28 62 3e 3f 29 7d 0a  NDEX t1b (b>?)}.
4400: 20 20 7d 0a 7d 0a 0a 23 23 23 23 23 23 23 23 23    }.}..#########
4410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4450: 23 23 23 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  ###.# Make sure 
4460: 4f 52 2d 63 6c 61 75 73 65 73 20 77 6f 72 6b 20  OR-clauses work 
4470: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 55 50 44  correctly on UPD
4480: 41 54 45 20 61 6e 64 20 44 45 4c 45 54 45 20 73  ATE and DELETE s
4490: 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 64 6f 5f 74  tatements...do_t
44a0: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 32 2e 31  est where9-6.2.1
44b0: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
44c0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
44d0: 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 20  OM t1 UNION ALL 
44e0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
44f0: 20 57 48 45 52 45 20 61 3e 3d 38 35 7d 0a 7d 20   WHERE a>=85}.} 
4500: 7b 39 39 20 38 35 20 38 36 20 38 37 20 38 38 20  {99 85 86 87 88 
4510: 38 39 20 39 30 20 39 31 20 39 32 20 39 33 20 39  89 90 91 92 93 9
4520: 34 20 39 35 20 39 36 20 39 37 20 39 38 20 39 39  4 95 96 97 98 99
4530: 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  }..do_test where
4540: 39 2d 36 2e 32 2e 32 20 7b 20 20 20 3b 23 20 44  9-6.2.2 {   ;# D
4550: 65 6c 65 74 65 73 20 65 6e 74 72 69 65 73 20 39  eletes entries 9
4560: 30 20 39 31 20 39 32 20 39 36 20 39 37 20 39 39  0 91 92 96 97 99
4570: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
4580: 0a 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  .     BEGIN;.   
4590: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
45a0: 0a 20 20 20 20 20 57 48 45 52 45 20 62 20 49 53  .     WHERE b IS
45b0: 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 4f 52   NULL.        OR
45c0: 20 63 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 20   c IS NULL.     
45d0: 20 20 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 0a     OR d IS NULL.
45e0: 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f    }.} {scan 0 so
45f0: 72 74 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 77  rt 0}..do_test w
4600: 68 65 72 65 39 2d 36 2e 32 2e 33 20 7b 0a 20 20  here9-6.2.3 {.  
4610: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45  db eval {.    SE
4620: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
4630: 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a  OM t1 UNION ALL.
4640: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
4650: 4d 20 74 31 20 57 48 45 52 45 20 61 3e 3d 38 35  M t1 WHERE a>=85
4660: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
4670: 20 20 7d 0a 7d 20 7b 39 33 20 38 35 20 38 36 20    }.} {93 85 86 
4680: 38 37 20 38 38 20 38 39 20 39 33 20 39 34 20 39  87 88 89 93 94 9
4690: 35 20 39 38 7d 0a 0a 64 6f 5f 74 65 73 74 20 77  5 98}..do_test w
46a0: 68 65 72 65 39 2d 36 2e 32 2e 34 20 7b 20 20 20  here9-6.2.4 {   
46b0: 3b 23 20 44 65 6c 65 74 65 73 20 65 6e 74 72 69  ;# Deletes entri
46c0: 65 73 20 39 30 20 39 31 20 39 32 20 39 36 20 39  es 90 91 92 96 9
46d0: 37 20 39 39 0a 20 20 63 6f 75 6e 74 5f 73 74 65  7 99.  count_ste
46e0: 70 73 20 7b 0a 20 20 20 20 20 42 45 47 49 4e 3b  ps {.     BEGIN;
46f0: 0a 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  .     DELETE FRO
4700: 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45 20  M t1.     WHERE 
4710: 2b 62 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 20  +b IS NULL.     
4720: 20 20 20 4f 52 20 63 20 49 53 20 4e 55 4c 4c 0a     OR c IS NULL.
4730: 20 20 20 20 20 20 20 20 4f 52 20 64 20 49 53 20          OR d IS 
4740: 4e 55 4c 4c 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e  NULL.  }.} {scan
4750: 20 39 38 20 73 6f 72 74 20 30 7d 0a 0a 64 6f 5f   98 sort 0}..do_
4760: 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 32 2e  test where9-6.2.
4770: 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  5 {.  db eval {.
4780: 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e       SELECT coun
4790: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e 49  t(*) FROM t1 UNI
47a0: 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45  ON ALL.     SELE
47b0: 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45  CT a FROM t1 WHE
47c0: 52 45 20 61 3e 3d 38 35 3b 0a 20 20 20 20 20 52  RE a>=85;.     R
47d0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
47e0: 39 33 20 38 35 20 38 36 20 38 37 20 38 38 20 38  93 85 86 87 88 8
47f0: 39 20 39 33 20 39 34 20 39 35 20 39 38 7d 0a 0a  9 93 94 95 98}..
4800: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
4810: 2e 32 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 5f 73  .2.6 {.  count_s
4820: 74 65 70 73 20 7b 0a 20 20 20 20 20 42 45 47 49  teps {.     BEGI
4830: 4e 3b 0a 20 20 20 20 20 55 50 44 41 54 45 20 74  N;.     UPDATE t
4840: 31 20 53 45 54 20 61 3d 61 2b 31 30 30 0a 20 20  1 SET a=a+100.  
4850: 20 20 20 57 48 45 52 45 20 28 62 20 49 53 20 4e     WHERE (b IS N
4860: 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ULL.            
4870: 4f 52 20 63 20 49 53 20 4e 55 4c 4c 0a 20 20 20  OR c IS NULL.   
4880: 20 20 20 20 20 20 20 20 20 4f 52 20 64 20 49 53           OR d IS
4890: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 41 4e   NULL).       AN
48a0: 44 20 61 21 3d 39 32 0a 20 20 20 20 20 20 20 41  D a!=92.       A
48b0: 4e 44 20 61 21 3d 39 37 0a 20 20 7d 0a 7d 20 7b  ND a!=97.  }.} {
48c0: 73 63 61 6e 20 30 20 73 6f 72 74 20 30 7d 20 20  scan 0 sort 0}  
48d0: 20 3b 23 20 41 64 64 20 31 30 30 20 74 6f 20 65   ;# Add 100 to e
48e0: 6e 74 72 69 65 73 20 39 30 20 39 31 20 39 36 20  ntries 90 91 96 
48f0: 39 39 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  99..do_test wher
4900: 65 39 2d 36 2e 32 2e 37 20 7b 0a 20 20 64 62 20  e9-6.2.7 {.  db 
4910: 65 76 61 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45  eval {.     SELE
4920: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
4930: 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20   t1 UNION ALL.  
4940: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
4950: 20 74 31 20 57 48 45 52 45 20 61 3e 3d 38 35 3b   t1 WHERE a>=85;
4960: 0a 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20  .     ROLLBACK. 
4970: 20 7d 0a 7d 20 7b 39 39 20 38 35 20 38 36 20 38   }.} {99 85 86 8
4980: 37 20 38 38 20 38 39 20 39 32 20 39 33 20 39 34  7 88 89 92 93 94
4990: 20 39 35 20 39 37 20 39 38 20 31 39 30 20 31 39   95 97 98 190 19
49a0: 31 20 31 39 36 20 31 39 39 7d 0a 0a 64 6f 5f 74  1 196 199}..do_t
49b0: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 32 2e 38  est where9-6.2.8
49c0: 20 7b 20 20 20 3b 23 20 44 65 6c 65 74 65 73 20   {   ;# Deletes 
49d0: 65 6e 74 72 69 65 73 20 39 30 20 39 31 20 39 32  entries 90 91 92
49e0: 20 39 37 20 39 39 0a 20 20 63 6f 75 6e 74 5f 73   97 99.  count_s
49f0: 74 65 70 73 20 7b 0a 20 20 20 20 20 42 45 47 49  teps {.     BEGI
4a00: 4e 3b 0a 20 20 20 20 20 44 45 4c 45 54 45 20 46  N;.     DELETE F
4a10: 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52  ROM t1.     WHER
4a20: 45 20 28 62 20 49 53 20 4e 55 4c 4c 0a 20 20 20  E (b IS NULL.   
4a30: 20 20 20 20 20 20 20 20 20 4f 52 20 63 20 49 53           OR c IS
4a40: 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20   NULL.          
4a50: 20 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a    OR d IS NULL).
4a60: 20 20 20 20 20 20 20 41 4e 44 20 61 21 3d 39 36         AND a!=96
4a70: 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73  .  }.} {scan 0 s
4a80: 6f 72 74 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20  ort 0}..do_test 
4a90: 77 68 65 72 65 39 2d 36 2e 32 2e 39 20 7b 0a 20  where9-6.2.9 {. 
4aa0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
4ab0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
4ac0: 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c  FROM t1 UNION AL
4ad0: 4c 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20  L SELECT a FROM 
4ae0: 74 31 20 57 48 45 52 45 20 61 3e 3d 38 35 3b 0a  t1 WHERE a>=85;.
4af0: 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20       ROLLBACK;. 
4b00: 20 7d 0a 7d 20 7b 39 34 20 38 35 20 38 36 20 38   }.} {94 85 86 8
4b10: 37 20 38 38 20 38 39 20 39 33 20 39 34 20 39 35  7 88 89 93 94 95
4b20: 20 39 36 20 39 38 7d 0a 0a 64 6f 5f 74 65 73 74   96 98}..do_test
4b30: 20 77 68 65 72 65 39 2d 36 2e 33 2e 31 20 7b 0a   where9-6.3.1 {.
4b40: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
4b50: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 44      BEGIN;.    D
4b60: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 0a 20 20  ELETE FROM t1.  
4b70: 20 20 20 57 48 45 52 45 20 28 62 20 49 53 20 4e     WHERE (b IS N
4b80: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
4b90: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
4ba0: 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62  L).        OR (b
4bb0: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
4bc0: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  IS NULL AND d NO
4bd0: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
4be0: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
4bf0: 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  ND c NOT NULL AN
4c00: 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d  D d IS NULL).  }
4c10: 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f 72 74 20  .} {scan 0 sort 
4c20: 30 7d 20 20 20 3b 23 20 44 45 4c 45 54 45 73 20  0}   ;# DELETEs 
4c30: 72 6f 77 73 20 39 30 20 39 31 20 39 32 20 39 37  rows 90 91 92 97
4c40: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
4c50: 36 2e 33 2e 32 20 7b 0a 20 20 64 62 20 65 76 61  6.3.2 {.  db eva
4c60: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
4c70: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
4c80: 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45  UNION ALL.    SE
4c90: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
4ca0: 48 45 52 45 20 61 20 42 45 54 57 45 45 4e 20 38  HERE a BETWEEN 8
4cb0: 35 20 41 4e 44 20 31 30 30 3b 0a 20 20 20 20 52  5 AND 100;.    R
4cc0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
4cd0: 39 35 20 38 35 20 38 36 20 38 37 20 38 38 20 38  95 85 86 87 88 8
4ce0: 39 20 39 33 20 39 34 20 39 35 20 39 36 20 39 38  9 93 94 95 96 98
4cf0: 20 39 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68   99}..do_test wh
4d00: 65 72 65 39 2d 36 2e 33 2e 33 20 7b 0a 20 20 63  ere9-6.3.3 {.  c
4d10: 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20  ount_steps {.   
4d20: 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44 41   BEGIN;.    UPDA
4d30: 54 45 20 74 31 20 53 45 54 20 61 3d 61 2b 31 30  TE t1 SET a=a+10
4d40: 30 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 20  0.     WHERE (b 
4d50: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f  IS NULL AND c NO
4d60: 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54  T NULL AND d NOT
4d70: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f   NULL).        O
4d80: 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  R (b NOT NULL AN
4d90: 44 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20  D c IS NULL AND 
4da0: 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20  d NOT NULL).    
4db0: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
4dc0: 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c  LL AND c NOT NUL
4dd0: 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29  L AND d IS NULL)
4de0: 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73  .  }.} {scan 0 s
4df0: 6f 72 74 20 30 7d 20 20 20 3b 23 20 41 64 64 20  ort 0}   ;# Add 
4e00: 31 30 30 20 74 6f 20 72 6f 77 69 64 73 20 39 30  100 to rowids 90
4e10: 20 39 31 20 39 32 20 39 37 0a 64 6f 5f 74 65 73   91 92 97.do_tes
4e20: 74 20 77 68 65 72 65 39 2d 36 2e 33 2e 34 20 7b  t where9-6.3.4 {
4e30: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
4e40: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
4e50: 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41   FROM t1 UNION A
4e60: 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20  LL.    SELECT a 
4e70: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20  FROM t1 WHERE a 
4e80: 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20 32  BETWEEN 85 AND 2
4e90: 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  00;.    ROLLBACK
4ea0: 3b 0a 20 20 7d 0a 7d 20 7b 39 39 20 38 35 20 38  ;.  }.} {99 85 8
4eb0: 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39 34  6 87 88 89 93 94
4ec0: 20 39 35 20 39 36 20 39 38 20 39 39 20 31 39 30   95 96 98 99 190
4ed0: 20 31 39 31 20 31 39 32 20 31 39 37 7d 0a 0a 64   191 192 197}..d
4ee0: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
4ef0: 33 2e 35 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74  3.5 {.  count_st
4f00: 65 70 73 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  eps {.    BEGIN;
4f10: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
4f20: 20 74 31 0a 20 20 20 20 20 57 48 45 52 45 20 28   t1.     WHERE (
4f30: 2b 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63  +b IS NULL AND c
4f40: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20   NOT NULL AND d 
4f50: 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20  NOT NULL).      
4f60: 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c    OR (b NOT NULL
4f70: 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c 20 41   AND c IS NULL A
4f80: 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20  ND d NOT NULL). 
4f90: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
4fa0: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20   NULL AND c NOT 
4fb0: 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e 55  NULL AND d IS NU
4fc0: 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20  LL).  }.} {scan 
4fd0: 39 38 20 73 6f 72 74 20 30 7d 20 20 20 3b 23 20  98 sort 0}   ;# 
4fe0: 44 45 4c 45 54 45 73 20 72 6f 77 73 20 39 30 20  DELETEs rows 90 
4ff0: 39 31 20 39 32 20 39 37 0a 64 6f 5f 74 65 73 74  91 92 97.do_test
5000: 20 77 68 65 72 65 39 2d 36 2e 33 2e 36 20 7b 0a   where9-6.3.6 {.
5010: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
5020: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
5030: 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c  FROM t1 UNION AL
5040: 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  L.    SELECT a F
5050: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20 42  ROM t1 WHERE a B
5060: 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20 31 30  ETWEEN 85 AND 10
5070: 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b  0;.    ROLLBACK;
5080: 0a 20 20 7d 0a 7d 20 7b 39 35 20 38 35 20 38 36  .  }.} {95 85 86
5090: 20 38 37 20 38 38 20 38 39 20 39 33 20 39 34 20   87 88 89 93 94 
50a0: 39 35 20 39 36 20 39 38 20 39 39 7d 0a 0a 64 6f  95 96 98 99}..do
50b0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 33  _test where9-6.3
50c0: 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65  .7 {.  count_ste
50d0: 70 73 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ps {.    BEGIN;.
50e0: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45      UPDATE t1 SE
50f0: 54 20 61 3d 61 2b 31 30 30 0a 20 20 20 20 20 57  T a=a+100.     W
5100: 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 20  HERE (b IS NULL 
5110: 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41  AND c NOT NULL A
5120: 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20  ND d NOT NULL). 
5130: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
5140: 20 4e 55 4c 4c 20 41 4e 44 20 2b 63 20 49 53 20   NULL AND +c IS 
5150: 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e  NULL AND d NOT N
5160: 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20  ULL).        OR 
5170: 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  (b NOT NULL AND 
5180: 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64  c NOT NULL AND d
5190: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20   IS NULL).  }.} 
51a0: 7b 73 63 61 6e 20 39 38 20 73 6f 72 74 20 30 7d  {scan 98 sort 0}
51b0: 20 20 20 3b 23 20 41 64 64 20 31 30 30 20 74 6f     ;# Add 100 to
51c0: 20 72 6f 77 69 64 73 20 39 30 20 39 31 20 39 32   rowids 90 91 92
51d0: 20 39 37 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   97.do_test wher
51e0: 65 39 2d 36 2e 33 2e 38 20 7b 0a 20 20 64 62 20  e9-6.3.8 {.  db 
51f0: 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  eval {.    SELEC
5200: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
5210: 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20  t1 UNION ALL.   
5220: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
5230: 31 20 57 48 45 52 45 20 61 20 42 45 54 57 45 45  1 WHERE a BETWEE
5240: 4e 20 38 35 20 41 4e 44 20 31 30 30 3b 0a 20 20  N 85 AND 100;.  
5250: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a    ROLLBACK;.  }.
5260: 7d 20 7b 39 39 20 38 35 20 38 36 20 38 37 20 38  } {99 85 86 87 8
5270: 38 20 38 39 20 39 33 20 39 34 20 39 35 20 39 36  8 89 93 94 95 96
5280: 20 39 38 20 39 39 7d 0a 0a 0a 64 6f 5f 74 65 73   98 99}...do_tes
5290: 74 20 77 68 65 72 65 39 2d 36 2e 34 2e 31 20 7b  t where9-6.4.1 {
52a0: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
52b0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
52c0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 0a 20  DELETE FROM t1. 
52d0: 20 20 20 20 57 48 45 52 45 20 28 62 3e 3d 39 35      WHERE (b>=95
52e0: 30 20 41 4e 44 20 62 3c 3d 31 30 31 30 29 20 4f  0 AND b<=1010) O
52f0: 52 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44  R (b IS NULL AND
5300: 20 63 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 7d   c NOT NULL).  }
5310: 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f 72 74 20  .} {scan 0 sort 
5320: 30 7d 20 20 3b 23 20 44 45 4c 45 54 45 20 72 6f  0}  ;# DELETE ro
5330: 77 73 20 38 37 20 38 38 20 38 39 20 39 30 20 39  ws 87 88 89 90 9
5340: 31 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  1.do_test where9
5350: 2d 36 2e 34 2e 32 20 7b 0a 20 20 64 62 20 65 76  -6.4.2 {.  db ev
5360: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
5370: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
5380: 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
5390: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
53a0: 57 48 45 52 45 20 61 20 42 45 54 57 45 45 4e 20  WHERE a BETWEEN 
53b0: 38 35 20 41 4e 44 20 31 30 30 3b 0a 20 20 20 20  85 AND 100;.    
53c0: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20  ROLLBACK;.  }.} 
53d0: 7b 39 34 20 38 35 20 38 36 20 39 32 20 39 33 20  {94 85 86 92 93 
53e0: 39 34 20 39 35 20 39 36 20 39 37 20 39 38 20 39  94 95 96 97 98 9
53f0: 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  9}.do_test where
5400: 39 2d 36 2e 34 2e 33 20 7b 0a 20 20 63 6f 75 6e  9-6.4.3 {.  coun
5410: 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 42 45  t_steps {.    BE
5420: 47 49 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20  GIN;.    UPDATE 
5430: 74 31 20 53 45 54 20 61 3d 61 2b 31 30 30 0a 20  t1 SET a=a+100. 
5440: 20 20 20 20 57 48 45 52 45 20 28 62 3e 3d 39 35      WHERE (b>=95
5450: 30 20 41 4e 44 20 62 3c 3d 31 30 31 30 29 20 4f  0 AND b<=1010) O
5460: 52 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44  R (b IS NULL AND
5470: 20 63 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 7d   c NOT NULL).  }
5480: 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f 72 74 20  .} {scan 0 sort 
5490: 30 7d 20 20 3b 23 20 41 64 64 20 31 30 30 20 74  0}  ;# Add 100 t
54a0: 6f 20 72 6f 77 69 64 73 20 38 37 20 38 38 20 38  o rowids 87 88 8
54b0: 39 20 39 30 20 39 31 0a 64 6f 5f 74 65 73 74 20  9 90 91.do_test 
54c0: 77 68 65 72 65 39 2d 36 2e 34 2e 34 20 7b 0a 20  where9-6.4.4 {. 
54d0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
54e0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
54f0: 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c  ROM t1 UNION ALL
5500: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
5510: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20 42 45  OM t1 WHERE a BE
5520: 54 57 45 45 4e 20 38 35 20 41 4e 44 20 31 30 30  TWEEN 85 AND 100
5530: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
5540: 20 20 7d 0a 7d 20 7b 39 39 20 38 35 20 38 36 20    }.} {99 85 86 
5550: 39 32 20 39 33 20 39 34 20 39 35 20 39 36 20 39  92 93 94 95 96 9
5560: 37 20 39 38 20 39 39 7d 0a 0a 0a 64 6f 5f 74 65  7 98 99}...do_te
5570: 73 74 20 77 68 65 72 65 39 2d 36 2e 35 2e 31 20  st where9-6.5.1 
5580: 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20  {.  count_steps 
5590: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
55a0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 0a   DELETE FROM t1.
55b0: 20 20 20 20 20 57 48 45 52 45 20 61 3d 38 33 0a       WHERE a=83.
55c0: 20 20 20 20 20 20 20 20 4f 52 20 62 3d 39 31 33          OR b=913
55d0: 0a 20 20 20 20 20 20 20 20 4f 52 20 63 3d 32 38  .        OR c=28
55e0: 30 32 38 0a 20 20 20 20 20 20 20 20 4f 52 20 28  028.        OR (
55f0: 64 3e 3d 38 32 20 41 4e 44 20 64 3c 38 33 29 0a  d>=82 AND d<83).
5600: 20 20 20 20 20 20 20 20 4f 52 20 28 65 3e 32 38          OR (e>28
5610: 30 32 20 41 4e 44 20 65 3c 32 38 30 33 29 20 0a  02 AND e<2803) .
5620: 20 20 20 20 20 20 20 20 4f 52 20 66 3d 27 66 67          OR f='fg
5630: 68 69 6a 6b 6c 6d 6e 27 0a 20 20 20 20 20 20 20  hijklmn'.       
5640: 20 4f 52 20 67 3d 27 68 67 66 65 64 63 62 27 0a   OR g='hgfedcb'.
5650: 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f    }.} {scan 0 so
5660: 72 74 20 30 7d 20 20 20 3b 23 20 20 44 45 4c 45  rt 0}   ;#  DELE
5670: 54 45 20 72 6f 77 73 20 35 20 33 31 20 35 37 20  TE rows 5 31 57 
5680: 38 32 20 38 33 20 38 34 20 38 35 20 38 36 20 38  82 83 84 85 86 8
5690: 37 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  7.do_test where9
56a0: 2d 36 2e 35 2e 32 20 7b 0a 20 20 64 62 20 65 76  -6.5.2 {.  db ev
56b0: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
56c0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
56d0: 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
56e0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
56f0: 57 48 45 52 45 20 61 20 49 4e 20 28 35 2c 33 31  WHERE a IN (5,31
5700: 2c 35 37 2c 38 32 2c 38 33 2c 38 34 2c 38 35 2c  ,57,82,83,84,85,
5710: 38 36 2c 38 37 29 3b 0a 20 20 20 20 52 4f 4c 4c  86,87);.    ROLL
5720: 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 30 7d  BACK;.  }.} {90}
5730: 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  ..do_test where9
5740: 2d 36 2e 35 2e 33 20 7b 0a 20 20 63 6f 75 6e 74  -6.5.3 {.  count
5750: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 42 45 47  _steps {.    BEG
5760: 49 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  IN;.    UPDATE t
5770: 31 20 53 45 54 20 61 3d 61 2b 31 30 30 0a 20 20  1 SET a=a+100.  
5780: 20 20 20 57 48 45 52 45 20 61 3d 38 33 0a 20 20     WHERE a=83.  
5790: 20 20 20 20 20 20 4f 52 20 62 3d 39 31 33 0a 20        OR b=913. 
57a0: 20 20 20 20 20 20 20 4f 52 20 63 3d 32 38 30 32         OR c=2802
57b0: 38 0a 20 20 20 20 20 20 20 20 4f 52 20 28 64 3e  8.        OR (d>
57c0: 3d 38 32 20 41 4e 44 20 64 3c 38 33 29 0a 20 20  =82 AND d<83).  
57d0: 20 20 20 20 20 20 4f 52 20 28 65 3e 32 38 30 32        OR (e>2802
57e0: 20 41 4e 44 20 65 3c 32 38 30 33 29 20 0a 20 20   AND e<2803) .  
57f0: 20 20 20 20 20 20 4f 52 20 66 3d 27 66 67 68 69        OR f='fghi
5800: 6a 6b 6c 6d 6e 27 0a 20 20 20 20 20 20 20 20 4f  jklmn'.        O
5810: 52 20 67 3d 27 68 67 66 65 64 63 62 27 0a 20 20  R g='hgfedcb'.  
5820: 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f 72 74  }.} {scan 0 sort
5830: 20 30 7d 20 20 20 3b 23 20 20 41 64 64 20 31 30   0}   ;#  Add 10
5840: 30 20 74 6f 20 72 6f 77 69 64 73 20 35 20 33 31  0 to rowids 5 31
5850: 20 35 37 20 38 32 20 38 33 20 38 34 20 38 35 20   57 82 83 84 85 
5860: 38 36 20 38 37 0a 64 6f 5f 74 65 73 74 20 77 68  86 87.do_test wh
5870: 65 72 65 39 2d 36 2e 35 2e 34 20 7b 0a 20 20 64  ere9-6.5.4 {.  d
5880: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c  b eval {.    SEL
5890: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
58a0: 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  M t1 UNION ALL. 
58b0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
58c0: 20 74 31 20 57 48 45 52 45 20 61 25 31 30 30 20   t1 WHERE a%100 
58d0: 49 4e 20 28 35 2c 33 31 2c 35 37 2c 38 32 2c 38  IN (5,31,57,82,8
58e0: 33 2c 38 34 2c 38 35 2c 38 36 2c 38 37 29 20 4f  3,84,85,86,87) O
58f0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 3b 0a 20  RDER BY rowid;. 
5900: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5910: 0a 7d 20 7b 39 39 20 31 30 35 20 31 33 31 20 31  .} {99 105 131 1
5920: 35 37 20 31 38 32 20 31 38 33 20 31 38 34 20 31  57 182 183 184 1
5930: 38 35 20 31 38 36 20 31 38 37 7d 0a 0a 64 6f 5f  85 186 187}..do_
5940: 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 36 2e  test where9-6.6.
5950: 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70  1 {.  count_step
5960: 73 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  s {.    BEGIN;. 
5970: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
5980: 31 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 20  1.     WHERE (b 
5990: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f  IS NULL AND c NO
59a0: 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54  T NULL AND d NOT
59b0: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f   NULL).        O
59c0: 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  R (b NOT NULL AN
59d0: 44 20 2b 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44  D +c IS NULL AND
59e0: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
59f0: 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e       OR (b NOT N
5a00: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
5a10: 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c  LL AND d IS NULL
5a20: 29 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 39 38  ).  }.} {scan 98
5a30: 20 73 6f 72 74 20 30 7d 20 20 20 3b 23 20 44 45   sort 0}   ;# DE
5a40: 4c 45 54 45 73 20 72 6f 77 73 20 39 30 20 39 31  LETEs rows 90 91
5a50: 20 39 32 20 39 37 0a 64 6f 5f 74 65 73 74 20 77   92 97.do_test w
5a60: 68 65 72 65 39 2d 36 2e 36 2e 32 20 7b 0a 20 20  here9-6.6.2 {.  
5a70: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45  db eval {.    SE
5a80: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
5a90: 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a  OM t1 UNION ALL.
5aa0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
5ab0: 4d 20 74 31 20 57 48 45 52 45 20 61 20 42 45 54  M t1 WHERE a BET
5ac0: 57 45 45 4e 20 38 35 20 41 4e 44 20 31 30 30 3b  WEEN 85 AND 100;
5ad0: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
5ae0: 20 7d 0a 7d 20 7b 39 35 20 38 35 20 38 36 20 38   }.} {95 85 86 8
5af0: 37 20 38 38 20 38 39 20 39 33 20 39 34 20 39 35  7 88 89 93 94 95
5b00: 20 39 36 20 39 38 20 39 39 7d 0a 0a 64 6f 5f 74   96 98 99}..do_t
5b10: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 36 2e 33  est where9-6.6.3
5b20: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
5b30: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
5b40: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
5b50: 61 3d 61 2b 31 30 30 0a 20 20 20 20 20 57 48 45  a=a+100.     WHE
5b60: 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e  RE (b IS NULL AN
5b70: 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  D c NOT NULL AND
5b80: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
5b90: 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e       OR (b NOT N
5ba0: 55 4c 4c 20 41 4e 44 20 2b 63 20 49 53 20 4e 55  ULL AND +c IS NU
5bb0: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
5bc0: 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62  L).        OR (b
5bd0: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
5be0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49  NOT NULL AND d I
5bf0: 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73  S NULL).  }.} {s
5c00: 63 61 6e 20 39 38 20 73 6f 72 74 20 30 7d 20 20  can 98 sort 0}  
5c10: 20 3b 23 20 41 64 64 20 31 30 30 20 74 6f 20 72   ;# Add 100 to r
5c20: 6f 77 69 64 73 20 39 30 20 39 31 20 39 32 20 39  owids 90 91 92 9
5c30: 37 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  7.do_test where9
5c40: 2d 36 2e 36 2e 34 20 7b 0a 20 20 64 62 20 65 76  -6.6.4 {.  db ev
5c50: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
5c60: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
5c70: 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
5c80: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
5c90: 57 48 45 52 45 20 61 20 42 45 54 57 45 45 4e 20  WHERE a BETWEEN 
5ca0: 38 35 20 41 4e 44 20 32 30 30 3b 0a 20 20 20 20  85 AND 200;.    
5cb0: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20  ROLLBACK;.  }.} 
5cc0: 7b 39 39 20 38 35 20 38 36 20 38 37 20 38 38 20  {99 85 86 87 88 
5cd0: 38 39 20 39 33 20 39 34 20 39 35 20 39 36 20 39  89 93 94 95 96 9
5ce0: 38 20 39 39 20 31 39 30 20 31 39 31 20 31 39 32  8 99 190 191 192
5cf0: 20 31 39 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 77   197}..do_test w
5d00: 68 65 72 65 39 2d 36 2e 37 2e 31 20 7b 0a 20 20  here9-6.7.1 {.  
5d10: 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20  count_steps {.  
5d20: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c    BEGIN;.    DEL
5d30: 45 54 45 20 46 52 4f 4d 20 74 31 20 4e 4f 54 20  ETE FROM t1 NOT 
5d40: 49 4e 44 45 58 45 44 0a 20 20 20 20 20 57 48 45  INDEXED.     WHE
5d50: 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e  RE (b IS NULL AN
5d60: 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  D c NOT NULL AND
5d70: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
5d80: 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e       OR (b NOT N
5d90: 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c  ULL AND c IS NUL
5da0: 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c  L AND d NOT NULL
5db0: 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20  ).        OR (b 
5dc0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e  NOT NULL AND c N
5dd0: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53  OT NULL AND d IS
5de0: 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63   NULL).  }.} {sc
5df0: 61 6e 20 39 38 20 73 6f 72 74 20 30 7d 20 20 20  an 98 sort 0}   
5e00: 3b 23 20 44 45 4c 45 54 45 73 20 72 6f 77 73 20  ;# DELETEs rows 
5e10: 39 30 20 39 31 20 39 32 20 39 37 0a 64 6f 5f 74  90 91 92 97.do_t
5e20: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 37 2e 32  est where9-6.7.2
5e30: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
5e40: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
5e50: 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e  *) FROM t1 UNION
5e60: 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
5e70: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
5e80: 61 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44  a BETWEEN 85 AND
5e90: 20 31 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41   100;.    ROLLBA
5ea0: 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 35 20 38 35  CK;.  }.} {95 85
5eb0: 20 38 36 20 38 37 20 38 38 20 38 39 20 39 33 20   86 87 88 89 93 
5ec0: 39 34 20 39 35 20 39 36 20 39 38 20 39 39 7d 0a  94 95 96 98 99}.
5ed0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
5ee0: 36 2e 37 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 5f  6.7.3 {.  count_
5ef0: 73 74 65 70 73 20 7b 0a 20 20 20 20 42 45 47 49  steps {.    BEGI
5f00: 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31  N;.    UPDATE t1
5f10: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 53 45 54   NOT INDEXED SET
5f20: 20 61 3d 61 2b 31 30 30 0a 20 20 20 20 20 57 48   a=a+100.     WH
5f30: 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 20 41  ERE (b IS NULL A
5f40: 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  ND c NOT NULL AN
5f50: 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20  D d NOT NULL).  
5f60: 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20        OR (b NOT 
5f70: 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55  NULL AND c IS NU
5f80: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
5f90: 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62  L).        OR (b
5fa0: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
5fb0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49  NOT NULL AND d I
5fc0: 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73  S NULL).  }.} {s
5fd0: 63 61 6e 20 39 38 20 73 6f 72 74 20 30 7d 20 20  can 98 sort 0}  
5fe0: 20 3b 23 20 41 64 64 20 31 30 30 20 74 6f 20 72   ;# Add 100 to r
5ff0: 6f 77 69 64 73 20 39 30 20 39 31 20 39 32 20 39  owids 90 91 92 9
6000: 37 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  7.do_test where9
6010: 2d 36 2e 37 2e 34 20 7b 0a 20 20 64 62 20 65 76  -6.7.4 {.  db ev
6020: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
6030: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
6040: 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
6050: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
6060: 57 48 45 52 45 20 61 20 42 45 54 57 45 45 4e 20  WHERE a BETWEEN 
6070: 38 35 20 41 4e 44 20 32 30 30 3b 0a 20 20 20 20  85 AND 200;.    
6080: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20  ROLLBACK;.  }.} 
6090: 7b 39 39 20 38 35 20 38 36 20 38 37 20 38 38 20  {99 85 86 87 88 
60a0: 38 39 20 39 33 20 39 34 20 39 35 20 39 36 20 39  89 93 94 95 96 9
60b0: 38 20 39 39 20 31 39 30 20 31 39 31 20 31 39 32  8 99 190 191 192
60c0: 20 31 39 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 77   197}..do_test w
60d0: 68 65 72 65 39 2d 36 2e 38 2e 31 20 7b 0a 20 20  here9-6.8.1 {.  
60e0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
60f0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 49 4e  ELETE FROM t1 IN
6100: 44 45 58 45 44 20 42 59 20 74 31 62 0a 20 20 20  DEXED BY t1b.   
6110: 20 20 57 48 45 52 45 20 28 2b 62 20 49 53 20 4e    WHERE (+b IS N
6120: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
6130: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
6140: 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62  L).        OR (b
6150: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
6160: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  IS NULL AND d NO
6170: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
6180: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
6190: 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  ND c NOT NULL AN
61a0: 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d  D d IS NULL).  }
61b0: 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20  .} {1 {no query 
61c0: 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65  solution}}.do_te
61d0: 73 74 20 77 68 65 72 65 39 2d 36 2e 38 2e 32 20  st where9-6.8.2 
61e0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
61f0: 20 20 20 55 50 44 41 54 45 20 74 31 20 49 4e 44     UPDATE t1 IND
6200: 45 58 45 44 20 42 59 20 74 31 62 20 53 45 54 20  EXED BY t1b SET 
6210: 61 3d 61 2b 31 30 30 0a 20 20 20 20 20 57 48 45  a=a+100.     WHE
6220: 52 45 20 28 2b 62 20 49 53 20 4e 55 4c 4c 20 41  RE (+b IS NULL A
6230: 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  ND c NOT NULL AN
6240: 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20  D d NOT NULL).  
6250: 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20        OR (b NOT 
6260: 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55  NULL AND c IS NU
6270: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
6280: 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62  L).        OR (b
6290: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
62a0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49  NOT NULL AND d I
62b0: 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 31  S NULL).  }.} {1
62c0: 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74   {no query solut
62d0: 69 6f 6e 7d 7d 0a 0a 73 65 74 20 73 6f 6c 75 74  ion}}..set solut
62e0: 69 6f 6e 5f 70 6f 73 73 69 62 6c 65 20 30 0a 69  ion_possible 0.i
62f0: 66 63 61 70 61 62 6c 65 20 73 74 61 74 34 7c 7c  fcapable stat4||
6300: 73 74 61 74 33 20 7b 0a 20 20 69 66 20 7b 5b 70  stat3 {.  if {[p
6310: 65 72 6d 75 74 61 74 69 6f 6e 5d 20 21 3d 20 22  ermutation] != "
6320: 6e 6f 5f 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 22  no_optimization"
6330: 7d 20 7b 20 73 65 74 20 73 6f 6c 75 74 69 6f 6e  } { set solution
6340: 5f 70 6f 73 73 69 62 6c 65 20 31 20 7d 0a 7d 0a  _possible 1 }.}.
6350: 69 66 20 24 73 6f 6c 75 74 69 6f 6e 5f 70 6f 73  if $solution_pos
6360: 73 69 62 6c 65 20 7b 0a 20 20 23 20 57 68 65 6e  sible {.  # When
6370: 20 53 54 41 54 33 20 69 73 20 65 6e 61 62 6c 65   STAT3 is enable
6380: 64 2c 20 74 68 65 20 22 62 20 4e 4f 54 20 4e 55  d, the "b NOT NU
6390: 4c 4c 22 20 74 65 72 6d 73 20 67 65 74 20 74 72  LL" terms get tr
63a0: 61 6e 73 6c 61 74 65 64 0a 20 20 23 20 69 6e 74  anslated.  # int
63b0: 6f 20 62 3e 4e 55 4c 4c 2c 20 77 68 69 63 68 20  o b>NULL, which 
63c0: 63 61 6e 20 62 65 20 73 61 74 69 66 69 65 64 20  can be satified 
63d0: 62 79 20 74 68 65 20 69 6e 64 65 78 20 74 31 62  by the index t1b
63e0: 2e 20 20 49 74 20 69 73 20 61 20 76 65 72 79 0a  .  It is a very.
63f0: 20 20 23 20 65 78 70 65 6e 73 69 76 65 20 77 61    # expensive wa
6400: 79 20 74 6f 20 64 6f 20 74 68 65 20 71 75 65 72  y to do the quer
6410: 79 2c 20 62 75 74 20 69 74 20 77 6f 72 6b 73 2c  y, but it works,
6420: 20 61 6e 64 20 73 6f 20 61 20 73 6f 6c 75 74 69   and so a soluti
6430: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
6440: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39    do_test where9
6450: 2d 36 2e 38 2e 33 2d 73 74 61 74 34 20 7b 0a 20  -6.8.3-stat4 {. 
6460: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
6470: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 49 4e      UPDATE t1 IN
6480: 44 45 58 45 44 20 42 59 20 74 31 62 20 53 45 54  DEXED BY t1b SET
6490: 20 61 3d 61 2b 31 30 30 0a 20 20 20 20 20 20 20   a=a+100.       
64a0: 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c  WHERE (b IS NULL
64b0: 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20   AND c NOT NULL 
64c0: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
64d0: 20 20 20 20 20 20 20 20 20 20 4f 52 20 28 62 20            OR (b 
64e0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49  NOT NULL AND c I
64f0: 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54  S NULL AND d NOT
6500: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 20   NULL).         
6510: 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20   OR (b NOT NULL 
6520: 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41  AND c NOT NULL A
6530: 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20  ND d IS NULL).  
6540: 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20    }.  } {0 {}}. 
6550: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d   do_test where9-
6560: 36 2e 38 2e 34 2d 73 74 61 74 34 20 7b 0a 20 20  6.8.4-stat4 {.  
6570: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
6580: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
6590: 31 20 49 4e 44 45 58 45 44 20 42 59 20 74 31 62  1 INDEXED BY t1b
65a0: 0a 20 20 20 20 20 20 20 57 48 45 52 45 20 28 62  .       WHERE (b
65b0: 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e   IS NULL AND c N
65c0: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  OT NULL AND d NO
65d0: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
65e0: 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c    OR (b NOT NULL
65f0: 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c 20 41   AND c IS NULL A
6600: 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20  ND d NOT NULL). 
6610: 20 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e           OR (b N
6620: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f  OT NULL AND c NO
6630: 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20  T NULL AND d IS 
6640: 4e 55 4c 4c 29 0a 20 20 20 20 7d 0a 20 20 7d 20  NULL).    }.  } 
6650: 7b 30 20 7b 7d 7d 0a 7d 20 65 6c 73 65 20 7b 0a  {0 {}}.} else {.
6660: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39    do_test where9
6670: 2d 36 2e 38 2e 33 20 7b 0a 20 20 20 20 63 61 74  -6.8.3 {.    cat
6680: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 55 50  chsql {.      UP
6690: 44 41 54 45 20 74 31 20 49 4e 44 45 58 45 44 20  DATE t1 INDEXED 
66a0: 42 59 20 74 31 62 20 53 45 54 20 61 3d 61 2b 31  BY t1b SET a=a+1
66b0: 30 30 0a 20 20 20 20 20 20 20 57 48 45 52 45 20  00.       WHERE 
66c0: 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63  (b IS NULL AND c
66d0: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20   NOT NULL AND d 
66e0: 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20  NOT NULL).      
66f0: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
6700: 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c  LL AND c IS NULL
6710: 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29   AND d NOT NULL)
6720: 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20 28 62  .          OR (b
6730: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
6740: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49  NOT NULL AND d I
6750: 53 20 4e 55 4c 4c 29 0a 20 20 20 20 7d 0a 20 20  S NULL).    }.  
6760: 7d 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20 73  } {1 {no query s
6770: 6f 6c 75 74 69 6f 6e 7d 7d 0a 20 20 64 6f 5f 74  olution}}.  do_t
6780: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 38 2e 34  est where9-6.8.4
6790: 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   {.    catchsql 
67a0: 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46  {.      DELETE F
67b0: 52 4f 4d 20 74 31 20 49 4e 44 45 58 45 44 20 42  ROM t1 INDEXED B
67c0: 59 20 74 31 62 0a 20 20 20 20 20 20 20 57 48 45  Y t1b.       WHE
67d0: 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e  RE (b IS NULL AN
67e0: 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  D c NOT NULL AND
67f0: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
6800: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
6810: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e   NULL AND c IS N
6820: 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55  ULL AND d NOT NU
6830: 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52  LL).          OR
6840: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
6850: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
6860: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 7d  d IS NULL).    }
6870: 0a 20 20 7d 20 7b 31 20 7b 6e 6f 20 71 75 65 72  .  } {1 {no quer
6880: 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 7d 0a 23  y solution}}.}.#
6890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68d0: 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 54 65  ###########.# Te
68e0: 73 74 20 63 61 73 65 73 20 77 68 65 72 65 20 74  st cases where t
68f0: 65 72 6d 73 20 69 6e 73 69 64 65 20 61 6e 20 4f  erms inside an O
6900: 52 20 73 65 72 69 65 73 20 61 72 65 20 63 6f 6d  R series are com
6910: 62 69 6e 65 64 20 77 69 74 68 20 41 4e 44 20 74  bined with AND t
6920: 65 72 6d 73 0a 23 20 65 78 74 65 72 6e 61 6c 20  erms.# external 
6930: 74 6f 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  to the OR clause
6940: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
6950: 73 2c 20 63 61 73 65 73 20 77 68 65 72 65 0a 23  s, cases where.#
6960: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
6970: 78 20 41 4e 44 20 28 79 20 4f 52 20 7a 29 0a 23  x AND (y OR z).#
6980: 0a 23 20 69 73 20 61 62 6c 65 20 74 6f 20 75 73  .# is able to us
6990: 65 20 69 6e 64 69 63 65 73 20 6f 6e 20 78 2c 79  e indices on x,y
69a0: 20 61 6e 64 20 78 2c 7a 2c 20 6f 72 20 69 6e 64   and x,z, or ind
69b0: 69 63 65 73 20 79 2c 78 20 61 6e 64 20 7a 2c 78  ices y,x and z,x
69c0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  ..#.do_test wher
69d0: 65 39 2d 37 2e 30 20 7b 0a 20 20 65 78 65 63 73  e9-7.0 {.  execs
69e0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
69f0: 54 41 42 4c 45 20 74 35 28 61 2c 20 62 2c 20 63  TABLE t5(a, b, c
6a00: 2c 20 64 2c 20 65 2c 20 66 2c 20 67 2c 20 78 2c  , d, e, f, g, x,
6a10: 20 79 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   y);.    INSERT 
6a20: 49 4e 54 4f 20 74 35 0a 20 20 20 20 20 53 45 4c  INTO t5.     SEL
6a30: 45 43 54 20 61 2c 20 62 2c 20 63 2c 20 65 2c 20  ECT a, b, c, e, 
6a40: 64 2c 20 66 2c 20 67 2c 0a 20 20 20 20 20 20 20  d, f, g,.       
6a50: 20 20 20 20 20 43 41 53 45 20 57 48 45 4e 20 28       CASE WHEN (
6a60: 61 26 31 29 21 3d 30 20 54 48 45 4e 20 27 79 27  a&1)!=0 THEN 'y'
6a70: 20 45 4c 53 45 20 27 6e 27 20 45 4e 44 2c 0a 20   ELSE 'n' END,. 
6a80: 20 20 20 20 20 20 20 20 20 20 20 43 41 53 45 20             CASE 
6a90: 57 48 45 4e 20 28 61 26 32 29 21 3d 30 20 54 48  WHEN (a&2)!=0 TH
6aa0: 45 4e 20 27 79 27 20 45 4c 53 45 20 27 6e 27 20  EN 'y' ELSE 'n' 
6ab0: 45 4e 44 0a 20 20 20 20 20 20 20 46 52 4f 4d 20  END.       FROM 
6ac0: 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  t1;.    CREATE I
6ad0: 4e 44 45 58 20 74 35 78 62 20 4f 4e 20 74 35 28  NDEX t5xb ON t5(
6ae0: 78 2c 20 62 29 3b 0a 20 20 20 20 43 52 45 41 54  x, b);.    CREAT
6af0: 45 20 49 4e 44 45 58 20 74 35 78 63 20 4f 4e 20  E INDEX t5xc ON 
6b00: 74 35 28 78 2c 20 63 29 3b 0a 20 20 20 20 43 52  t5(x, c);.    CR
6b10: 45 41 54 45 20 49 4e 44 45 58 20 74 35 78 64 20  EATE INDEX t5xd 
6b20: 4f 4e 20 74 35 28 78 2c 20 64 29 3b 0a 20 20 20  ON t5(x, d);.   
6b30: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35   CREATE INDEX t5
6b40: 78 65 20 4f 4e 20 74 35 28 78 2c 20 65 29 3b 0a  xe ON t5(x, e);.
6b50: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
6b60: 20 74 35 78 66 20 4f 4e 20 74 35 28 78 2c 20 66   t5xf ON t5(x, f
6b70: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
6b80: 44 45 58 20 74 35 78 67 20 4f 4e 20 74 35 28 78  DEX t5xg ON t5(x
6b90: 2c 20 67 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , g);.    CREATE
6ba0: 20 49 4e 44 45 58 20 74 35 79 62 20 4f 4e 20 74   INDEX t5yb ON t
6bb0: 35 28 79 2c 20 62 29 3b 0a 20 20 20 20 43 52 45  5(y, b);.    CRE
6bc0: 41 54 45 20 49 4e 44 45 58 20 74 35 79 63 20 4f  ATE INDEX t5yc O
6bd0: 4e 20 74 35 28 79 2c 20 63 29 3b 0a 20 20 20 20  N t5(y, c);.    
6be0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 79  CREATE INDEX t5y
6bf0: 64 20 4f 4e 20 74 35 28 79 2c 20 64 29 3b 0a 20  d ON t5(y, d);. 
6c00: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
6c10: 74 35 79 65 20 4f 4e 20 74 35 28 79 2c 20 65 29  t5ye ON t5(y, e)
6c20: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
6c30: 45 58 20 74 35 79 66 20 4f 4e 20 74 35 28 79 2c  EX t5yf ON t5(y,
6c40: 20 66 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   f);.    CREATE 
6c50: 49 4e 44 45 58 20 74 35 79 67 20 4f 4e 20 74 35  INDEX t5yg ON t5
6c60: 28 79 2c 20 67 29 3b 0a 20 20 20 20 43 52 45 41  (y, g);.    CREA
6c70: 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c 20 62  TE TABLE t6(a, b
6c80: 2c 20 63 2c 20 65 2c 20 64 2c 20 66 2c 20 67 2c  , c, e, d, f, g,
6c90: 20 78 2c 20 79 29 3b 0a 20 20 20 20 49 4e 53 45   x, y);.    INSE
6ca0: 52 54 20 49 4e 54 4f 20 74 36 20 53 45 4c 45 43  RT INTO t6 SELEC
6cb0: 54 20 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20  T * FROM t5;.   
6cc0: 20 41 4e 41 4c 59 5a 45 20 74 35 3b 0a 20 20 7d   ANALYZE t5;.  }
6cd0: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73 74 61  .  ifcapable sta
6ce0: 74 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t3 {.    sqlite3
6cf0: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
6d00: 20 64 62 32 20 65 76 61 6c 20 7b 20 44 52 4f 50   db2 eval { DROP
6d10: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
6d20: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 7d 0a   sqlite_stat3 }.
6d30: 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20      db2 close.  
6d40: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
6d50: 68 65 72 65 39 2d 37 2e 31 2e 31 20 7b 0a 20 20  here9-7.1.1 {.  
6d60: 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20  count_steps {.  
6d70: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
6d80: 74 35 20 57 48 45 52 45 20 78 3d 27 79 27 20 41  t5 WHERE x='y' A
6d90: 4e 44 20 28 62 3d 39 31 33 20 4f 52 20 63 3d 32  ND (b=913 OR c=2
6da0: 37 30 32 37 29 20 4f 52 44 45 52 20 42 59 20 61  7027) ORDER BY a
6db0: 3b 0a 20 20 7d 0a 7d 20 7b 37 39 20 38 31 20 38  ;.  }.} {79 81 8
6dc0: 33 20 73 63 61 6e 20 30 20 73 6f 72 74 20 31 7d  3 scan 0 sort 1}
6dd0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
6de0: 37 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  7.1.2 {.  execsq
6df0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
6e00: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 78   FROM t6 WHERE x
6e10: 3d 27 79 27 20 41 4e 44 20 28 62 3d 39 31 33 20  ='y' AND (b=913 
6e20: 4f 52 20 63 3d 32 37 30 32 37 29 20 4f 52 44 45  OR c=27027) ORDE
6e30: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 37  R BY a;.  }.} {7
6e40: 39 20 38 31 20 38 33 7d 0a 64 6f 5f 74 65 73 74  9 81 83}.do_test
6e50: 20 77 68 65 72 65 39 2d 37 2e 31 2e 33 20 7b 0a   where9-7.1.3 {.
6e60: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
6e70: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
6e80: 4d 20 74 35 20 57 48 45 52 45 20 78 3d 27 6e 27  M t5 WHERE x='n'
6e90: 20 41 4e 44 20 28 62 3d 39 31 33 20 4f 52 20 63   AND (b=913 OR c
6ea0: 3d 32 37 30 32 37 29 20 4f 52 44 45 52 20 42 59  =27027) ORDER BY
6eb0: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 38 30 20 73 63   a;.  }.} {80 sc
6ec0: 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f  an 0 sort 1}.do_
6ed0: 74 65 73 74 20 77 68 65 72 65 39 2d 37 2e 31 2e  test where9-7.1.
6ee0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
6ef0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
6f00: 4d 20 74 36 20 57 48 45 52 45 20 78 3d 27 6e 27  M t6 WHERE x='n'
6f10: 20 41 4e 44 20 28 62 3d 39 31 33 20 4f 52 20 63   AND (b=913 OR c
6f20: 3d 32 37 30 32 37 29 20 4f 52 44 45 52 20 42 59  =27027) ORDER BY
6f30: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 38 30 7d 0a 64   a;.  }.} {80}.d
6f40: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 37 2e  o_test where9-7.
6f50: 32 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74  2.1 {.  count_st
6f60: 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  eps {.    SELECT
6f70: 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45   a FROM t5 WHERE
6f80: 20 28 78 3d 27 79 27 20 4f 52 20 79 3d 27 79 27   (x='y' OR y='y'
6f90: 29 20 41 4e 44 20 62 3d 39 31 33 20 4f 52 44 45  ) AND b=913 ORDE
6fa0: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 38  R BY a;.  }.} {8
6fb0: 33 20 73 63 61 6e 20 30 20 73 6f 72 74 20 31 7d  3 scan 0 sort 1}
6fc0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
6fd0: 37 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  7.2.2 {.  execsq
6fe0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
6ff0: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 28   FROM t6 WHERE (
7000: 78 3d 27 79 27 20 4f 52 20 79 3d 27 79 27 29 20  x='y' OR y='y') 
7010: 41 4e 44 20 62 3d 39 31 33 20 4f 52 44 45 52 20  AND b=913 ORDER 
7020: 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 38 33 7d  BY a;.  }.} {83}
7030: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
7040: 37 2e 33 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f  7.3.1 {.  count_
7050: 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45  steps {.    SELE
7060: 43 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45  CT a FROM t5 WHE
7070: 52 45 20 28 78 3d 27 79 27 20 4f 52 20 79 3d 27  RE (x='y' OR y='
7080: 79 27 29 20 41 4e 44 20 63 3d 32 37 30 32 37 20  y') AND c=27027 
7090: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
70a0: 7d 20 7b 37 39 20 38 31 20 73 63 61 6e 20 30 20  } {79 81 scan 0 
70b0: 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73 74 20  sort 1}.do_test 
70c0: 77 68 65 72 65 39 2d 37 2e 33 2e 32 20 7b 0a 20  where9-7.3.2 {. 
70d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
70e0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 36 20  ELECT a FROM t6 
70f0: 57 48 45 52 45 20 28 78 3d 27 79 27 20 4f 52 20  WHERE (x='y' OR 
7100: 79 3d 27 79 27 29 20 41 4e 44 20 63 3d 32 37 30  y='y') AND c=270
7110: 32 37 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  27 ORDER BY a;. 
7120: 20 7d 0a 7d 20 7b 37 39 20 38 31 7d 0a 0a 23 20   }.} {79 81}..# 
7130: 46 69 78 20 66 6f 72 20 74 69 63 6b 65 74 20 5b  Fix for ticket [
7140: 62 37 63 38 36 38 32 63 63 31 37 66 33 32 39 30  b7c8682cc17f3290
7150: 33 66 30 33 61 36 31 30 62 64 30 64 33 35 66 66  3f03a610bd0d35ff
7160: 64 33 63 31 65 36 65 34 5d 0a 23 20 22 49 6e 63  d3c1e6e4].# "Inc
7170: 6f 72 72 65 63 74 20 72 65 73 75 6c 74 20 66 72  orrect result fr
7180: 6f 6d 20 4c 45 46 54 20 4a 4f 49 4e 20 77 69 74  om LEFT JOIN wit
7190: 68 20 4f 52 20 69 6e 20 74 68 65 20 57 48 45 52  h OR in the WHER
71a0: 45 20 63 6c 61 75 73 65 22 0a 23 0a 64 6f 5f 74  E clause".#.do_t
71b0: 65 73 74 20 77 68 65 72 65 39 2d 38 2e 31 20 7b  est where9-8.1 {
71c0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
71d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 38   CREATE TABLE t8
71e0: 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  1(a INTEGER PRIM
71f0: 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 64  ARY KEY, b, c, d
7200: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
7210: 42 4c 45 20 74 38 32 28 78 20 49 4e 54 45 47 45  BLE t82(x INTEGE
7220: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79  R PRIMARY KEY, y
7230: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
7240: 42 4c 45 20 74 38 33 28 70 20 49 4e 54 45 47 45  BLE t83(p INTEGE
7250: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 71  R PRIMARY KEY, q
7260: 29 3b 0a 20 20 20 20 0a 20 20 20 20 49 4e 53 45  );.    .    INSE
7270: 52 54 20 49 4e 54 4f 20 74 38 31 20 56 41 4c 55  RT INTO t81 VALU
7280: 45 53 28 32 2c 33 2c 34 2c 35 29 3b 0a 20 20 20  ES(2,3,4,5);.   
7290: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 31   INSERT INTO t81
72a0: 20 56 41 4c 55 45 53 28 33 2c 34 2c 35 2c 36 29   VALUES(3,4,5,6)
72b0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
72c0: 4f 20 74 38 32 20 56 41 4c 55 45 53 28 32 2c 34  O t82 VALUES(2,4
72d0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
72e0: 54 4f 20 74 38 33 20 56 41 4c 55 45 53 28 35 2c  TO t83 VALUES(5,
72f0: 35 35 29 3b 0a 20 20 20 20 0a 20 20 20 20 53 45  55);.    .    SE
7300: 4c 45 43 54 20 2a 0a 20 20 20 20 20 20 46 52 4f  LECT *.      FRO
7310: 4d 20 74 38 31 20 4c 45 46 54 20 4a 4f 49 4e 20  M t81 LEFT JOIN 
7320: 74 38 32 20 4f 4e 20 79 3d 62 20 4a 4f 49 4e 20  t82 ON y=b JOIN 
7330: 74 38 33 0a 20 20 20 20 20 57 48 45 52 45 20 63  t83.     WHERE c
7340: 3d 3d 70 20 4f 52 20 64 3d 3d 70 0a 20 20 20 20  ==p OR d==p.    
7350: 20 4f 52 44 45 52 20 42 59 20 2b 61 3b 0a 20 20   ORDER BY +a;.  
7360: 7d 0a 7d 20 7b 32 20 33 20 34 20 35 20 7b 7d 20  }.} {2 3 4 5 {} 
7370: 7b 7d 20 35 20 35 35 20 33 20 34 20 35 20 36 20  {} 5 55 3 4 5 6 
7380: 32 20 34 20 35 20 35 35 7d 0a 64 6f 5f 74 65 73  2 4 5 55}.do_tes
7390: 74 20 77 68 65 72 65 39 2d 38 2e 32 20 7b 0a 20  t where9-8.2 {. 
73a0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
73b0: 45 4c 45 43 54 20 2a 0a 20 20 20 20 20 20 46 52  ELECT *.      FR
73c0: 4f 4d 20 74 38 31 20 4c 45 46 54 20 4a 4f 49 4e  OM t81 LEFT JOIN
73d0: 20 28 74 38 32 29 20 4f 4e 20 79 3d 62 20 4a 4f   (t82) ON y=b JO
73e0: 49 4e 20 74 38 33 0a 20 20 20 20 20 57 48 45 52  IN t83.     WHER
73f0: 45 20 63 3d 3d 70 20 4f 52 20 64 3d 3d 70 0a 20  E c==p OR d==p. 
7400: 20 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61 3b      ORDER BY +a;
7410: 0a 20 20 7d 0a 7d 20 7b 32 20 33 20 34 20 35 20  .  }.} {2 3 4 5 
7420: 7b 7d 20 7b 7d 20 35 20 35 35 20 33 20 34 20 35  {} {} 5 55 3 4 5
7430: 20 36 20 32 20 34 20 35 20 35 35 7d 0a 64 6f 5f   6 2 4 5 55}.do_
7440: 74 65 73 74 20 77 68 65 72 65 39 2d 38 2e 33 20  test where9-8.3 
7450: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
7460: 20 20 53 45 4c 45 43 54 20 2a 0a 20 20 20 20 20    SELECT *.     
7470: 20 46 52 4f 4d 20 28 74 38 31 29 20 4c 45 46 54   FROM (t81) LEFT
7480: 20 4a 4f 49 4e 20 28 6d 61 69 6e 2e 74 38 32 29   JOIN (main.t82)
7490: 20 4f 4e 20 79 3d 62 20 4a 4f 49 4e 20 74 38 33   ON y=b JOIN t83
74a0: 0a 20 20 20 20 20 57 48 45 52 45 20 63 3d 3d 70  .     WHERE c==p
74b0: 20 4f 52 20 64 3d 3d 70 0a 20 20 20 20 20 4f 52   OR d==p.     OR
74c0: 44 45 52 20 42 59 20 2b 61 3b 0a 20 20 7d 0a 7d  DER BY +a;.  }.}
74d0: 20 7b 32 20 33 20 34 20 35 20 7b 7d 20 7b 7d 20   {2 3 4 5 {} {} 
74e0: 35 20 35 35 20 33 20 34 20 35 20 36 20 32 20 34  5 55 3 4 5 6 2 4
74f0: 20 35 20 35 35 7d 0a 0a 23 20 46 69 78 20 66 6f   5 55}..# Fix fo
7500: 72 20 74 69 63 6b 65 74 20 5b 66 32 33 36 39 33  r ticket [f23693
7510: 30 34 65 34 37 31 36 37 65 33 65 36 34 34 65 32  04e47167e3e644e2
7520: 66 31 66 65 39 37 33 36 30 36 33 33 39 31 64 37  f1fe9736063391d7
7530: 62 37 5d 0a 23 20 49 6e 63 6f 72 72 65 63 74 20  b7].# Incorrect 
7540: 72 65 73 75 6c 74 73 20 77 68 65 6e 20 4f 52 20  results when OR 
7550: 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 4f  is used in the O
7560: 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 4c 45  N clause of a LE
7570: 46 54 20 4a 4f 49 4e 20 0a 23 0a 64 6f 5f 74 65  FT JOIN .#.do_te
7580: 73 74 20 77 68 65 72 65 39 2d 39 2e 31 20 7b 0a  st where9-9.1 {.
7590: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
75a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 31  CREATE TABLE t91
75b0: 28 78 29 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f  (x); INSERT INTO
75c0: 20 74 39 31 20 56 41 4c 55 45 53 28 31 29 3b 0a   t91 VALUES(1);.
75d0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
75e0: 20 74 39 32 28 79 20 49 4e 54 45 47 45 52 20 50   t92(y INTEGER P
75f0: 52 49 4d 41 52 59 20 4b 45 59 2c 61 2c 62 29 3b  RIMARY KEY,a,b);
7600: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
7610: 20 74 39 32 20 56 41 4c 55 45 53 28 31 2c 32 2c   t92 VALUES(1,2,
7620: 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 31  3);.    SELECT 1
7630: 20 46 52 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a   FROM t91 LEFT J
7640: 4f 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32 20 4f  OIN t92 ON a=2 O
7650: 52 20 62 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43  R b=3;.    SELEC
7660: 54 20 32 20 46 52 4f 4d 20 74 39 31 20 4c 45 46  T 2 FROM t91 LEF
7670: 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 61 3d  T JOIN t92 ON a=
7680: 32 20 41 4e 44 20 62 3d 33 3b 0a 20 20 20 20 53  2 AND b=3;.    S
7690: 45 4c 45 43 54 20 33 20 46 52 4f 4d 20 74 39 31  ELECT 3 FROM t91
76a0: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f   LEFT JOIN t92 O
76b0: 4e 20 28 61 3d 32 20 4f 52 20 62 3d 33 29 20 41  N (a=2 OR b=3) A
76c0: 4e 44 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20 20  ND y IS NULL;.  
76d0: 20 20 53 45 4c 45 43 54 20 34 20 46 52 4f 4d 20    SELECT 4 FROM 
76e0: 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39  t91 LEFT JOIN t9
76f0: 32 20 4f 4e 20 28 61 3d 32 20 41 4e 44 20 62 3d  2 ON (a=2 AND b=
7700: 33 29 20 41 4e 44 20 79 20 49 53 20 4e 55 4c 4c  3) AND y IS NULL
7710: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
7720: 50 20 54 41 42 4c 45 20 78 39 20 41 53 20 53 45  P TABLE x9 AS SE
7730: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 39 31 20  LECT * FROM t91 
7740: 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e  LEFT JOIN t92 ON
7750: 20 61 3d 32 20 4f 52 20 62 3d 33 3b 0a 20 20 20   a=2 OR b=3;.   
7760: 20 53 45 4c 45 43 54 20 35 20 46 52 4f 4d 20 78   SELECT 5 FROM x
7770: 39 20 57 48 45 52 45 20 79 20 49 53 20 4e 55 4c  9 WHERE y IS NUL
7780: 4c 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 36 20  L;.    SELECT 6 
7790: 46 52 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f  FROM t91 LEFT JO
77a0: 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32 20 4f 52  IN t92 ON a=2 OR
77b0: 20 62 3d 33 20 57 48 45 52 45 20 79 20 49 53 20   b=3 WHERE y IS 
77c0: 4e 55 4c 4c 3b 0a 20 20 20 20 53 45 4c 45 43 54  NULL;.    SELECT
77d0: 20 37 20 46 52 4f 4d 20 74 39 31 20 4c 45 46 54   7 FROM t91 LEFT
77e0: 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32   JOIN t92 ON a=2
77f0: 20 41 4e 44 20 62 3d 33 20 57 48 45 52 45 20 79   AND b=3 WHERE y
7800: 20 49 53 20 4e 55 4c 4c 3b 0a 20 20 20 20 53 45   IS NULL;.    SE
7810: 4c 45 43 54 20 38 20 46 52 4f 4d 20 74 39 31 20  LECT 8 FROM t91 
7820: 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e  LEFT JOIN t92 ON
7830: 20 61 3d 32 32 20 4f 52 20 62 3d 33 33 20 57 48   a=22 OR b=33 WH
7840: 45 52 45 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20  ERE y IS NULL;. 
7850: 20 20 20 53 45 4c 45 43 54 20 39 20 46 52 4f 4d     SELECT 9 FROM
7860: 20 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74   t91 LEFT JOIN t
7870: 39 32 20 4f 4e 20 61 3d 32 32 20 41 4e 44 20 62  92 ON a=22 AND b
7880: 3d 33 33 20 57 48 45 52 45 20 79 20 49 53 20 4e  =33 WHERE y IS N
7890: 55 4c 4c 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  ULL;.  }.} {1 2 
78a0: 33 20 34 20 38 20 39 7d 0a 0a 23 20 46 69 78 20  3 4 8 9}..# Fix 
78b0: 66 6f 72 20 74 69 63 6b 65 74 20 5b 62 63 38 37  for ticket [bc87
78c0: 38 32 34 36 65 61 66 65 30 66 35 32 63 35 31 39  8246eafe0f52c519
78d0: 65 32 39 30 34 39 62 32 66 65 34 61 39 39 34 39  e29049b2fe4a9949
78e0: 31 62 32 37 5d 0a 23 20 49 6e 63 6f 72 72 65 63  1b27].# Incorrec
78f0: 74 20 72 65 73 75 6c 74 20 77 68 65 6e 20 4f 52  t result when OR
7900: 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 6a 6f   is used in a jo
7910: 69 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  in to the right 
7920: 6f 66 20 61 20 4c 45 46 54 20 4a 4f 49 4e 0a 23  of a LEFT JOIN.#
7930: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
7940: 31 30 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  10.1 {.  db eval
7950: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
7960: 42 4c 45 20 74 31 30 31 20 28 69 64 20 49 4e 54  BLE t101 (id INT
7970: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7980: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
7990: 54 4f 20 74 31 30 31 20 56 41 4c 55 45 53 20 28  TO t101 VALUES (
79a0: 31 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  1);.    SELECT *
79b0: 20 46 52 4f 4d 20 74 31 30 31 20 41 53 20 74 30   FROM t101 AS t0
79c0: 0a 20 20 20 20 20 20 20 20 20 4c 45 46 54 20 4a  .         LEFT J
79d0: 4f 49 4e 20 74 31 30 31 20 41 53 20 74 31 20 4f  OIN t101 AS t1 O
79e0: 4e 20 74 31 2e 69 64 20 42 45 54 57 45 45 4e 20  N t1.id BETWEEN 
79f0: 31 30 20 41 4e 44 20 32 30 0a 20 20 20 20 20 20  10 AND 20.      
7a00: 20 20 20 4a 4f 49 4e 20 74 31 30 31 20 41 53 20     JOIN t101 AS 
7a10: 74 32 20 4f 4e 20 28 74 32 2e 69 64 20 3d 20 74  t2 ON (t2.id = t
7a20: 30 2e 69 64 20 4f 52 20 28 74 32 2e 69 64 3c 3e  0.id OR (t2.id<>
7a30: 35 35 35 20 41 4e 44 20 74 32 2e 69 64 3d 74 31  555 AND t2.id=t1
7a40: 2e 69 64 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  .id));.  }.} {1 
7a50: 7b 7d 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68  {} 1}.do_test wh
7a60: 65 72 65 39 2d 31 30 2e 32 20 7b 0a 20 20 64 62  ere9-10.2 {.  db
7a70: 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41   eval {.    CREA
7a80: 54 45 20 54 41 42 4c 45 20 74 31 30 32 20 28 69  TE TABLE t102 (i
7a90: 64 20 54 45 58 54 20 55 4e 49 51 55 45 20 4e 4f  d TEXT UNIQUE NO
7aa0: 54 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53  T NULL);.    INS
7ab0: 45 52 54 20 49 4e 54 4f 20 74 31 30 32 20 56 41  ERT INTO t102 VA
7ac0: 4c 55 45 53 20 28 27 31 27 29 3b 0a 20 20 20 20  LUES ('1');.    
7ad0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
7ae0: 30 32 20 41 53 20 74 30 0a 20 20 20 20 20 20 20  02 AS t0.       
7af0: 20 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 30 32    LEFT JOIN t102
7b00: 20 41 53 20 74 31 20 4f 4e 20 74 31 2e 69 64 20   AS t1 ON t1.id 
7b10: 47 4c 4f 42 20 27 61 62 63 25 27 0a 20 20 20 20  GLOB 'abc%'.    
7b20: 20 20 20 20 20 4a 4f 49 4e 20 74 31 30 32 20 41       JOIN t102 A
7b30: 53 20 74 32 20 4f 4e 20 28 74 32 2e 69 64 20 3d  S t2 ON (t2.id =
7b40: 20 74 30 2e 69 64 20 4f 52 20 28 74 32 2e 69 64   t0.id OR (t2.id
7b50: 3c 3e 35 35 35 20 41 4e 44 20 74 32 2e 69 64 3d  <>555 AND t2.id=
7b60: 74 31 2e 69 64 29 29 3b 0a 20 20 7d 0a 7d 20 7b  t1.id));.  }.} {
7b70: 31 20 7b 7d 20 31 7d 0a 0a 0a 0a 66 69 6e 69 73  1 {} 1}....finis
7b80: 68 5f 74 65 73 74 0a                             h_test.