/ Hex Artifact Content
Login

Artifact ad2ddb339d10d324763c3da60502b8631f15a2397b869192fbd4e82f40e167d3:


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 71 70 5f 74 65 73 74 20 77 68 65 72 65  o_eqp_test where
3860: 39 2d 33 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45  9-3.1 {.    SELE
3870: 43 54 20 74 32 2e 61 20 46 52 4f 4d 20 74 31 2c  CT t2.a FROM t1,
3880: 20 74 32 0a 20 20 20 20 57 48 45 52 45 20 74 31   t2.    WHERE t1
3890: 2e 61 3d 38 30 20 41 4e 44 20 28 28 74 31 2e 63  .a=80 AND ((t1.c
38a0: 3d 74 32 2e 63 20 41 4e 44 20 74 31 2e 64 3d 74  =t2.c AND t1.d=t
38b0: 32 2e 64 29 20 4f 52 20 74 31 2e 66 3d 74 32 2e  2.d) OR t1.f=t2.
38c0: 66 29 0a 20 20 7d 20 5b 73 74 72 69 6e 67 20 6d  f).  } [string m
38d0: 61 70 20 7b 22 5c 6e 20 20 22 20 5c 6e 7d 20 7b  ap {"\n  " \n} {
38e0: 0a 20 20 20 20 51 55 45 52 59 20 50 4c 41 4e 0a  .    QUERY PLAN.
38f0: 20 20 20 20 7c 2d 2d 53 45 41 52 43 48 20 54 41      |--SEARCH TA
3900: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 54  BLE t1 USING INT
3910: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
3920: 20 28 72 6f 77 69 64 3d 3f 29 0a 20 20 20 20 60   (rowid=?).    `
3930: 2d 2d 4d 55 4c 54 49 2d 49 4e 44 45 58 20 4f 52  --MULTI-INDEX OR
3940: 0a 20 20 20 20 20 20 20 7c 2d 2d 53 45 41 52 43  .       |--SEARC
3950: 48 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47  H TABLE t2 USING
3960: 20 49 4e 44 45 58 20 74 32 64 20 28 64 3d 3f 29   INDEX t2d (d=?)
3970: 0a 20 20 20 20 20 20 20 60 2d 2d 53 45 41 52 43  .       `--SEARC
3980: 48 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47  H TABLE t2 USING
3990: 20 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 20   COVERING INDEX 
39a0: 74 32 66 20 28 66 3d 3f 29 0a 20 20 7d 5d 0a 20  t2f (f=?).  }]. 
39b0: 20 64 6f 5f 65 71 70 5f 74 65 73 74 20 77 68 65   do_eqp_test whe
39c0: 72 65 39 2d 33 2e 32 20 7b 0a 20 20 20 20 53 45  re9-3.2 {.    SE
39d0: 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 74 32  LECT coalesce(t2
39e0: 2e 61 2c 39 39 39 39 29 0a 20 20 20 20 46 52 4f  .a,9999).    FRO
39f0: 4d 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74  M t1 LEFT JOIN t
3a00: 32 20 4f 4e 20 28 74 31 2e 63 2b 31 3d 74 32 2e  2 ON (t1.c+1=t2.
3a10: 63 20 41 4e 44 20 74 31 2e 64 3d 74 32 2e 64 29  c AND t1.d=t2.d)
3a20: 20 4f 52 20 28 74 31 2e 66 7c 7c 27 78 27 29 3d   OR (t1.f||'x')=
3a30: 74 32 2e 66 0a 20 20 20 20 57 48 45 52 45 20 74  t2.f.    WHERE t
3a40: 31 2e 61 3d 38 30 0a 20 20 7d 20 5b 73 74 72 69  1.a=80.  } [stri
3a50: 6e 67 20 6d 61 70 20 7b 22 5c 6e 20 20 22 20 5c  ng map {"\n  " \
3a60: 6e 7d 20 7b 0a 20 20 20 20 51 55 45 52 59 20 50  n} {.    QUERY P
3a70: 4c 41 4e 0a 20 20 20 20 7c 2d 2d 53 45 41 52 43  LAN.    |--SEARC
3a80: 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  H TABLE t1 USING
3a90: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
3aa0: 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 0a 20   KEY (rowid=?). 
3ab0: 20 20 20 60 2d 2d 4d 55 4c 54 49 2d 49 4e 44 45     `--MULTI-INDE
3ac0: 58 20 4f 52 0a 20 20 20 20 20 20 20 7c 2d 2d 53  X OR.       |--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 49 4e 44 45 58 20 74 32 64 20 28  SING INDEX t2d (
3af0: 64 3d 3f 29 0a 20 20 20 20 20 20 20 60 2d 2d 53  d=?).       `--S
3b00: 45 41 52 43 48 20 54 41 42 4c 45 20 74 32 20 55  EARCH TABLE t2 U
3b10: 53 49 4e 47 20 43 4f 56 45 52 49 4e 47 20 49 4e  SING COVERING IN
3b20: 44 45 58 20 74 32 66 20 28 66 3d 3f 29 0a 20 20  DEX t2f (f=?).  
3b30: 7d 5d 0a 7d 20 0a 0a 23 20 4d 61 6b 65 20 73 75  }].} ..# Make su
3b40: 72 65 20 74 68 61 74 20 49 4e 44 45 58 45 44 20  re that INDEXED 
3b50: 42 59 20 61 6e 64 20 6d 75 6c 74 69 2d 69 6e 64  BY and multi-ind
3b60: 65 78 20 4f 52 20 63 6c 61 75 73 65 73 20 70 6c  ex OR clauses pl
3b70: 61 79 20 77 65 6c 6c 20 77 69 74 68 0a 23 20 6f  ay well with.# o
3b80: 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 23 0a 64 6f  ne another..#.do
3b90: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 34 2e 31  _test where9-4.1
3ba0: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
3bb0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
3bc0: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45  FROM t1.     WHE
3bd0: 52 45 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20  RE b>1000.      
3be0: 20 41 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52   AND (c=31031 OR
3bf0: 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20   d IS NULL).    
3c00: 20 4f 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d   ORDER BY +a.  }
3c10: 0a 7d 20 7b 39 32 20 39 33 20 39 37 20 73 63 61  .} {92 93 97 sca
3c20: 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74  n 0 sort 1}.do_t
3c30: 65 73 74 20 77 68 65 72 65 39 2d 34 2e 32 20 7b  est where9-4.2 {
3c40: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
3c50: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
3c60: 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45  OM t1.     WHERE
3c70: 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20 41   b>1000.       A
3c80: 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20 2b  ND (c=31031 OR +
3c90: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20  d IS NULL).     
3ca0: 4f 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a  ORDER BY +a.  }.
3cb0: 7d 20 7b 39 32 20 39 33 20 39 37 20 73 63 61 6e  } {92 93 97 scan
3cc0: 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65   0 sort 1}.do_te
3cd0: 73 74 20 77 68 65 72 65 39 2d 34 2e 33 20 7b 0a  st where9-4.3 {.
3ce0: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
3cf0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
3d00: 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45 20  M t1.     WHERE 
3d10: 2b 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20 41  +b>1000.       A
3d20: 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20 64  ND (c=31031 OR d
3d30: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20 4f   IS NULL).     O
3d40: 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a 7d  RDER BY +a.  }.}
3d50: 20 7b 39 32 20 39 33 20 39 37 20 73 63 61 6e 20   {92 93 97 scan 
3d60: 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73  0 sort 1}.do_tes
3d70: 74 20 77 68 65 72 65 39 2d 34 2e 34 20 7b 0a 20  t where9-4.4 {. 
3d80: 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20   count_steps {. 
3d90: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
3da0: 20 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 74   t1 INDEXED BY t
3db0: 31 62 0a 20 20 20 20 20 57 48 45 52 45 20 62 3e  1b.     WHERE b>
3dc0: 31 30 30 30 0a 20 20 20 20 20 20 20 41 4e 44 20  1000.       AND 
3dd0: 28 63 3d 33 31 30 33 31 20 4f 52 20 64 20 49 53  (c=31031 OR d IS
3de0: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 4f 52 44 45   NULL).     ORDE
3df0: 52 20 42 59 20 2b 61 0a 20 20 7d 0a 7d 20 7b 39  R BY +a.  }.} {9
3e00: 32 20 39 33 20 39 37 20 73 63 61 6e 20 30 20 73  2 93 97 scan 0 s
3e10: 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77  ort 1}.do_test w
3e20: 68 65 72 65 39 2d 34 2e 35 20 7b 0a 20 20 63 61  here9-4.5 {.  ca
3e30: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  tchsql {.    SEL
3e40: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 49 4e  ECT a FROM t1 IN
3e50: 44 45 58 45 44 20 42 59 20 74 31 62 0a 20 20 20  DEXED BY t1b.   
3e60: 20 20 57 48 45 52 45 20 2b 62 3e 31 30 30 30 0a    WHERE +b>1000.
3e70: 20 20 20 20 20 20 20 41 4e 44 20 28 63 3d 33 31         AND (c=31
3e80: 30 33 31 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c  031 OR d IS NULL
3e90: 29 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  ).     ORDER BY 
3ea0: 2b 61 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20  +a.  }.} {1 {no 
3eb0: 71 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d  query solution}}
3ec0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
3ed0: 34 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74  4.6 {.  count_st
3ee0: 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  eps {.    SELECT
3ef0: 20 61 20 46 52 4f 4d 20 74 31 20 4e 4f 54 20 49   a FROM t1 NOT I
3f00: 4e 44 45 58 45 44 0a 20 20 20 20 20 57 48 45 52  NDEXED.     WHER
3f10: 45 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20  E b>1000.       
3f20: 41 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20  AND (c=31031 OR 
3f30: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20  d IS NULL).     
3f40: 4f 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a  ORDER BY +a.  }.
3f50: 7d 20 7b 39 32 20 39 33 20 39 37 20 73 63 61 6e  } {92 93 97 scan
3f60: 20 39 38 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74   98 sort 1}.do_t
3f70: 65 73 74 20 77 68 65 72 65 39 2d 34 2e 37 20 7b  est where9-4.7 {
3f80: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3f90: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
3fa0: 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 74 31  t1 INDEXED BY t1
3fb0: 63 0a 20 20 20 20 20 57 48 45 52 45 20 62 3e 31  c.     WHERE b>1
3fc0: 30 30 30 0a 20 20 20 20 20 20 20 41 4e 44 20 28  000.       AND (
3fd0: 63 3d 33 31 30 33 31 20 4f 52 20 64 20 49 53 20  c=31031 OR d IS 
3fe0: 4e 55 4c 4c 29 0a 20 20 20 20 20 4f 52 44 45 52  NULL).     ORDER
3ff0: 20 42 59 20 2b 61 0a 20 20 7d 0a 7d 20 7b 31 20   BY +a.  }.} {1 
4000: 7b 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69  {no query soluti
4010: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  on}}.do_test whe
4020: 72 65 39 2d 34 2e 38 20 7b 0a 20 20 63 61 74 63  re9-4.8 {.  catc
4030: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
4040: 54 20 61 20 46 52 4f 4d 20 74 31 20 49 4e 44 45  T a FROM t1 INDE
4050: 58 45 44 20 42 59 20 74 31 64 0a 20 20 20 20 20  XED BY t1d.     
4060: 57 48 45 52 45 20 62 3e 31 30 30 30 0a 20 20 20  WHERE b>1000.   
4070: 20 20 20 20 41 4e 44 20 28 63 3d 33 31 30 33 31      AND (c=31031
4080: 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20   OR d IS NULL). 
4090: 20 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61 0a      ORDER BY +a.
40a0: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75 65    }.} {1 {no que
40b0: 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 0a 23  ry solution}}..#
40c0: 20 54 68 65 20 28 63 3d 33 31 30 33 31 20 4f 52   The (c=31031 OR
40d0: 20 64 20 49 53 20 4e 55 4c 4c 29 20 63 6c 61 75   d IS NULL) clau
40e0: 73 65 20 69 73 20 70 72 65 66 65 72 72 65 64 20  se is preferred 
40f0: 6f 76 65 72 20 62 3e 31 30 30 30 20 62 65 63 61  over b>1000 beca
4100: 75 73 65 0a 23 20 74 68 65 20 66 6f 72 6d 65 72  use.# the former
4110: 20 69 73 20 61 6e 20 65 71 75 61 6c 69 74 79 20   is an equality 
4120: 74 65 73 74 20 77 68 69 63 68 20 69 73 20 65 78  test which is ex
4130: 70 65 63 74 65 64 20 74 6f 20 72 65 74 75 72 6e  pected to return
4140: 20 66 65 77 65 72 20 72 6f 77 73 2e 0a 23 0a 64   fewer rows..#.d
4150: 6f 5f 65 71 70 5f 74 65 73 74 20 77 68 65 72 65  o_eqp_test where
4160: 39 2d 35 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54  9-5.1 {.  SELECT
4170: 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   a FROM t1 WHERE
4180: 20 62 3e 31 30 30 30 20 41 4e 44 20 28 63 3d 33   b>1000 AND (c=3
4190: 31 30 33 31 20 4f 52 20 64 20 49 53 20 4e 55 4c  1031 OR d IS NUL
41a0: 4c 29 0a 7d 20 7b 0a 20 20 51 55 45 52 59 20 50  L).} {.  QUERY P
41b0: 4c 41 4e 0a 20 20 60 2d 2d 4d 55 4c 54 49 2d 49  LAN.  `--MULTI-I
41c0: 4e 44 45 58 20 4f 52 0a 20 20 20 20 20 7c 2d 2d  NDEX OR.     |--
41d0: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20  SEARCH TABLE t1 
41e0: 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31 63 20  USING INDEX t1c 
41f0: 28 63 3d 3f 29 0a 20 20 20 20 20 60 2d 2d 53 45  (c=?).     `--SE
4200: 41 52 43 48 20 54 41 42 4c 45 20 74 31 20 55 53  ARCH TABLE t1 US
4210: 49 4e 47 20 49 4e 44 45 58 20 74 31 64 20 28 64  ING INDEX t1d (d
4220: 3d 3f 29 0a 7d 0a 0a 23 20 49 6e 20 63 6f 6e 74  =?).}..# In cont
4230: 72 61 73 74 2c 20 62 3d 31 30 30 30 20 69 73 20  rast, b=1000 is 
4240: 70 72 65 66 65 72 72 65 64 20 6f 76 65 72 20 61  preferred over a
4250: 6e 79 20 4f 52 2d 63 6c 61 75 73 65 2e 0a 23 0a  ny OR-clause..#.
4260: 64 6f 5f 65 71 70 5f 74 65 73 74 20 77 68 65 72  do_eqp_test wher
4270: 65 39 2d 35 2e 32 20 7b 0a 20 20 53 45 4c 45 43  e9-5.2 {.  SELEC
4280: 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T a FROM t1 WHER
4290: 45 20 62 3d 31 30 30 30 20 41 4e 44 20 28 63 3d  E b=1000 AND (c=
42a0: 33 31 30 33 31 20 4f 52 20 64 20 49 53 20 4e 55  31031 OR d IS NU
42b0: 4c 4c 29 0a 7d 20 7b 53 45 41 52 43 48 20 54 41  LL).} {SEARCH TA
42c0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44  BLE t1 USING IND
42d0: 45 58 20 74 31 62 20 28 62 3d 3f 29 7d 0a 0a 23  EX t1b (b=?)}..#
42e0: 20 4c 69 6b 65 77 69 73 65 2c 20 69 6e 65 71 75   Likewise, inequ
42f0: 61 6c 69 74 69 65 73 20 69 6e 20 61 6e 20 41 4e  alities in an AN
4300: 44 20 61 72 65 20 70 72 65 66 65 72 72 65 64 20  D are preferred 
4310: 6f 76 65 72 20 69 6e 65 71 75 61 6c 69 74 69 65  over inequalitie
4320: 73 20 69 6e 0a 23 20 61 6e 20 4f 52 2e 0a 23 0a  s in.# an OR..#.
4330: 64 6f 5f 65 71 70 5f 74 65 73 74 20 77 68 65 72  do_eqp_test wher
4340: 65 39 2d 35 2e 33 20 7b 0a 20 20 53 45 4c 45 43  e9-5.3 {.  SELEC
4350: 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T a FROM t1 WHER
4360: 45 20 62 3e 31 30 30 30 20 41 4e 44 20 28 63 3e  E b>1000 AND (c>
4370: 3d 33 31 30 33 31 20 4f 52 20 64 20 49 53 20 4e  =31031 OR d IS N
4380: 55 4c 4c 29 0a 7d 20 7b 53 45 41 52 43 48 20 54  ULL).} {SEARCH T
4390: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e  ABLE t1 USING IN
43a0: 44 45 58 20 74 31 62 20 28 62 3e 3f 29 7d 0a 0a  DEX t1b (b>?)}..
43b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 4d  ############.# M
4400: 61 6b 65 20 73 75 72 65 20 4f 52 2d 63 6c 61 75  ake sure OR-clau
4410: 73 65 73 20 77 6f 72 6b 20 63 6f 72 72 65 63 74  ses work correct
4420: 6c 79 20 6f 6e 20 55 50 44 41 54 45 20 61 6e 64  ly on UPDATE and
4430: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
4440: 74 73 2e 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65  ts...do_test whe
4450: 72 65 39 2d 36 2e 32 2e 31 20 7b 0a 20 20 64 62  re9-6.2.1 {.  db
4460: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
4470: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 55  unt(*) FROM t1 U
4480: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
4490: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
44a0: 61 3e 3d 38 35 7d 0a 7d 20 7b 39 39 20 38 35 20  a>=85}.} {99 85 
44b0: 38 36 20 38 37 20 38 38 20 38 39 20 39 30 20 39  86 87 88 89 90 9
44c0: 31 20 39 32 20 39 33 20 39 34 20 39 35 20 39 36  1 92 93 94 95 96
44d0: 20 39 37 20 39 38 20 39 39 7d 0a 0a 64 6f 5f 74   97 98 99}..do_t
44e0: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 32 2e 32  est where9-6.2.2
44f0: 20 7b 20 20 20 3b 23 20 44 65 6c 65 74 65 73 20   {   ;# Deletes 
4500: 65 6e 74 72 69 65 73 20 39 30 20 39 31 20 39 32  entries 90 91 92
4510: 20 39 36 20 39 37 20 39 39 0a 20 20 63 6f 75 6e   96 97 99.  coun
4520: 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 20 42  t_steps {.     B
4530: 45 47 49 4e 3b 0a 20 20 20 20 20 44 45 4c 45 54  EGIN;.     DELET
4540: 45 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57  E FROM t1.     W
4550: 48 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 0a 20  HERE b IS NULL. 
4560: 20 20 20 20 20 20 20 4f 52 20 63 20 49 53 20 4e         OR c IS N
4570: 55 4c 4c 0a 20 20 20 20 20 20 20 20 4f 52 20 64  ULL.        OR d
4580: 20 49 53 20 4e 55 4c 4c 0a 20 20 7d 0a 7d 20 7b   IS NULL.  }.} {
4590: 73 63 61 6e 20 30 20 73 6f 72 74 20 30 7d 0a 0a  scan 0 sort 0}..
45a0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
45b0: 2e 32 2e 33 20 7b 0a 20 20 64 62 20 65 76 61 6c  .2.3 {.  db eval
45c0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f   {.    SELECT co
45d0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 55  unt(*) FROM t1 U
45e0: 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
45f0: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48  ECT a FROM t1 WH
4600: 45 52 45 20 61 3e 3d 38 35 3b 0a 20 20 20 20 52  ERE a>=85;.    R
4610: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
4620: 39 33 20 38 35 20 38 36 20 38 37 20 38 38 20 38  93 85 86 87 88 8
4630: 39 20 39 33 20 39 34 20 39 35 20 39 38 7d 0a 0a  9 93 94 95 98}..
4640: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
4650: 2e 32 2e 34 20 7b 20 20 20 3b 23 20 44 65 6c 65  .2.4 {   ;# Dele
4660: 74 65 73 20 65 6e 74 72 69 65 73 20 39 30 20 39  tes entries 90 9
4670: 31 20 39 32 20 39 36 20 39 37 20 39 39 0a 20 20  1 92 96 97 99.  
4680: 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20  count_steps {.  
4690: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 44     BEGIN;.     D
46a0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 0a 20 20  ELETE FROM t1.  
46b0: 20 20 20 57 48 45 52 45 20 2b 62 20 49 53 20 4e     WHERE +b IS N
46c0: 55 4c 4c 0a 20 20 20 20 20 20 20 20 4f 52 20 63  ULL.        OR c
46d0: 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   IS NULL.       
46e0: 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 0a 20 20   OR d IS NULL.  
46f0: 7d 0a 7d 20 7b 73 63 61 6e 20 39 38 20 73 6f 72  }.} {scan 98 sor
4700: 74 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68  t 0}..do_test wh
4710: 65 72 65 39 2d 36 2e 32 2e 35 20 7b 0a 20 20 64  ere9-6.2.5 {.  d
4720: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 53 45  b eval {.     SE
4730: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
4740: 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a  OM t1 UNION ALL.
4750: 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52       SELECT a FR
4760: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 3d 38  OM t1 WHERE a>=8
4770: 35 3b 0a 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b  5;.     ROLLBACK
4780: 3b 0a 20 20 7d 0a 7d 20 7b 39 33 20 38 35 20 38  ;.  }.} {93 85 8
4790: 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39 34  6 87 88 89 93 94
47a0: 20 39 35 20 39 38 7d 0a 0a 64 6f 5f 74 65 73 74   95 98}..do_test
47b0: 20 77 68 65 72 65 39 2d 36 2e 32 2e 36 20 7b 0a   where9-6.2.6 {.
47c0: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
47d0: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
47e0: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61   UPDATE t1 SET a
47f0: 3d 61 2b 31 30 30 0a 20 20 20 20 20 57 48 45 52  =a+100.     WHER
4800: 45 20 28 62 20 49 53 20 4e 55 4c 4c 0a 20 20 20  E (b IS NULL.   
4810: 20 20 20 20 20 20 20 20 20 4f 52 20 63 20 49 53           OR c IS
4820: 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20   NULL.          
4830: 20 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a    OR d IS NULL).
4840: 20 20 20 20 20 20 20 41 4e 44 20 61 21 3d 39 32         AND a!=92
4850: 0a 20 20 20 20 20 20 20 41 4e 44 20 61 21 3d 39  .       AND a!=9
4860: 37 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20  7.  }.} {scan 0 
4870: 73 6f 72 74 20 30 7d 20 20 20 3b 23 20 41 64 64  sort 0}   ;# Add
4880: 20 31 30 30 20 74 6f 20 65 6e 74 72 69 65 73 20   100 to entries 
4890: 39 30 20 39 31 20 39 36 20 39 39 0a 0a 64 6f 5f  90 91 96 99..do_
48a0: 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 32 2e  test where9-6.2.
48b0: 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  7 {.  db eval {.
48c0: 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e       SELECT coun
48d0: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e 49  t(*) FROM t1 UNI
48e0: 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45  ON ALL.     SELE
48f0: 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45  CT a FROM t1 WHE
4900: 52 45 20 61 3e 3d 38 35 3b 0a 20 20 20 20 20 52  RE a>=85;.     R
4910: 4f 4c 4c 42 41 43 4b 0a 20 20 7d 0a 7d 20 7b 39  OLLBACK.  }.} {9
4920: 39 20 38 35 20 38 36 20 38 37 20 38 38 20 38 39  9 85 86 87 88 89
4930: 20 39 32 20 39 33 20 39 34 20 39 35 20 39 37 20   92 93 94 95 97 
4940: 39 38 20 31 39 30 20 31 39 31 20 31 39 36 20 31  98 190 191 196 1
4950: 39 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65  99}..do_test whe
4960: 72 65 39 2d 36 2e 32 2e 38 20 7b 20 20 20 3b 23  re9-6.2.8 {   ;#
4970: 20 44 65 6c 65 74 65 73 20 65 6e 74 72 69 65 73   Deletes entries
4980: 20 39 30 20 39 31 20 39 32 20 39 37 20 39 39 0a   90 91 92 97 99.
4990: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
49a0: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
49b0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 0a   DELETE FROM t1.
49c0: 20 20 20 20 20 57 48 45 52 45 20 28 62 20 49 53       WHERE (b IS
49d0: 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20   NULL.          
49e0: 20 20 4f 52 20 63 20 49 53 20 4e 55 4c 4c 0a 20    OR c IS NULL. 
49f0: 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 64 20             OR d 
4a00: 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20  IS NULL).       
4a10: 41 4e 44 20 61 21 3d 39 36 0a 20 20 7d 0a 7d 20  AND a!=96.  }.} 
4a20: 7b 73 63 61 6e 20 30 20 73 6f 72 74 20 30 7d 0a  {scan 0 sort 0}.
4a30: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
4a40: 36 2e 32 2e 39 20 7b 0a 20 20 64 62 20 65 76 61  6.2.9 {.  db eva
4a50: 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20  l {.     SELECT 
4a60: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
4a70: 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
4a80: 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T a FROM t1 WHER
4a90: 45 20 61 3e 3d 38 35 3b 0a 20 20 20 20 20 52 4f  E a>=85;.     RO
4aa0: 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39  LLBACK;.  }.} {9
4ab0: 34 20 38 35 20 38 36 20 38 37 20 38 38 20 38 39  4 85 86 87 88 89
4ac0: 20 39 33 20 39 34 20 39 35 20 39 36 20 39 38 7d   93 94 95 96 98}
4ad0: 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  ..do_test where9
4ae0: 2d 36 2e 33 2e 31 20 7b 0a 20 20 63 6f 75 6e 74  -6.3.1 {.  count
4af0: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 42 45 47  _steps {.    BEG
4b00: 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  IN;.    DELETE F
4b10: 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52  ROM t1.     WHER
4b20: 45 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44  E (b IS NULL AND
4b30: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
4b40: 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20  d NOT NULL).    
4b50: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
4b60: 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c  LL AND c IS NULL
4b70: 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29   AND d NOT NULL)
4b80: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e  .        OR (b N
4b90: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f  OT NULL AND c NO
4ba0: 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20  T NULL AND d IS 
4bb0: 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63 61  NULL).  }.} {sca
4bc0: 6e 20 30 20 73 6f 72 74 20 30 7d 20 20 20 3b 23  n 0 sort 0}   ;#
4bd0: 20 44 45 4c 45 54 45 73 20 72 6f 77 73 20 39 30   DELETEs rows 90
4be0: 20 39 31 20 39 32 20 39 37 0a 64 6f 5f 74 65 73   91 92 97.do_tes
4bf0: 74 20 77 68 65 72 65 39 2d 36 2e 33 2e 32 20 7b  t where9-6.3.2 {
4c00: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
4c10: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
4c20: 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41   FROM t1 UNION A
4c30: 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20  LL.    SELECT a 
4c40: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20  FROM t1 WHERE a 
4c50: 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20 31  BETWEEN 85 AND 1
4c60: 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  00;.    ROLLBACK
4c70: 3b 0a 20 20 7d 0a 7d 20 7b 39 35 20 38 35 20 38  ;.  }.} {95 85 8
4c80: 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39 34  6 87 88 89 93 94
4c90: 20 39 35 20 39 36 20 39 38 20 39 39 7d 0a 0a 64   95 96 98 99}..d
4ca0: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
4cb0: 33 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74  3.3 {.  count_st
4cc0: 65 70 73 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  eps {.    BEGIN;
4cd0: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
4ce0: 45 54 20 61 3d 61 2b 31 30 30 0a 20 20 20 20 20  ET a=a+100.     
4cf0: 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c  WHERE (b IS NULL
4d00: 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20   AND c NOT NULL 
4d10: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
4d20: 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f          OR (b NO
4d30: 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20  T NULL AND c IS 
4d40: 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e  NULL AND d NOT N
4d50: 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20  ULL).        OR 
4d60: 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  (b NOT NULL AND 
4d70: 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64  c NOT NULL AND d
4d80: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20   IS NULL).  }.} 
4d90: 7b 73 63 61 6e 20 30 20 73 6f 72 74 20 30 7d 20  {scan 0 sort 0} 
4da0: 20 20 3b 23 20 41 64 64 20 31 30 30 20 74 6f 20    ;# Add 100 to 
4db0: 72 6f 77 69 64 73 20 39 30 20 39 31 20 39 32 20  rowids 90 91 92 
4dc0: 39 37 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  97.do_test where
4dd0: 39 2d 36 2e 33 2e 34 20 7b 0a 20 20 64 62 20 65  9-6.3.4 {.  db e
4de0: 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  val {.    SELECT
4df0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
4e00: 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20  1 UNION ALL.    
4e10: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
4e20: 20 57 48 45 52 45 20 61 20 42 45 54 57 45 45 4e   WHERE a BETWEEN
4e30: 20 38 35 20 41 4e 44 20 32 30 30 3b 0a 20 20 20   85 AND 200;.   
4e40: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d   ROLLBACK;.  }.}
4e50: 20 7b 39 39 20 38 35 20 38 36 20 38 37 20 38 38   {99 85 86 87 88
4e60: 20 38 39 20 39 33 20 39 34 20 39 35 20 39 36 20   89 93 94 95 96 
4e70: 39 38 20 39 39 20 31 39 30 20 31 39 31 20 31 39  98 99 190 191 19
4e80: 32 20 31 39 37 7d 0a 0a 64 6f 5f 74 65 73 74 20  2 197}..do_test 
4e90: 77 68 65 72 65 39 2d 36 2e 33 2e 35 20 7b 0a 20  where9-6.3.5 {. 
4ea0: 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20   count_steps {. 
4eb0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 44 45     BEGIN;.    DE
4ec0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 0a 20 20 20  LETE FROM t1.   
4ed0: 20 20 57 48 45 52 45 20 28 2b 62 20 49 53 20 4e    WHERE (+b IS N
4ee0: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
4ef0: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
4f00: 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62  L).        OR (b
4f10: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
4f20: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  IS NULL AND d NO
4f30: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
4f40: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
4f50: 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  ND c NOT NULL AN
4f60: 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d  D d IS NULL).  }
4f70: 0a 7d 20 7b 73 63 61 6e 20 39 38 20 73 6f 72 74  .} {scan 98 sort
4f80: 20 30 7d 20 20 20 3b 23 20 44 45 4c 45 54 45 73   0}   ;# DELETEs
4f90: 20 72 6f 77 73 20 39 30 20 39 31 20 39 32 20 39   rows 90 91 92 9
4fa0: 37 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  7.do_test where9
4fb0: 2d 36 2e 33 2e 36 20 7b 0a 20 20 64 62 20 65 76  -6.3.6 {.  db ev
4fc0: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
4fd0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
4fe0: 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
4ff0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
5000: 57 48 45 52 45 20 61 20 42 45 54 57 45 45 4e 20  WHERE a BETWEEN 
5010: 38 35 20 41 4e 44 20 31 30 30 3b 0a 20 20 20 20  85 AND 100;.    
5020: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20  ROLLBACK;.  }.} 
5030: 7b 39 35 20 38 35 20 38 36 20 38 37 20 38 38 20  {95 85 86 87 88 
5040: 38 39 20 39 33 20 39 34 20 39 35 20 39 36 20 39  89 93 94 95 96 9
5050: 38 20 39 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77  8 99}..do_test w
5060: 68 65 72 65 39 2d 36 2e 33 2e 37 20 7b 0a 20 20  here9-6.3.7 {.  
5070: 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20  count_steps {.  
5080: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44    BEGIN;.    UPD
5090: 41 54 45 20 74 31 20 53 45 54 20 61 3d 61 2b 31  ATE t1 SET a=a+1
50a0: 30 30 0a 20 20 20 20 20 57 48 45 52 45 20 28 62  00.     WHERE (b
50b0: 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e   IS NULL AND c N
50c0: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  OT NULL AND d NO
50d0: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
50e0: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
50f0: 4e 44 20 2b 63 20 49 53 20 4e 55 4c 4c 20 41 4e  ND +c IS NULL AN
5100: 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20  D d NOT NULL).  
5110: 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20        OR (b NOT 
5120: 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e  NULL AND c NOT N
5130: 55 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c  ULL AND d IS NUL
5140: 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 39  L).  }.} {scan 9
5150: 38 20 73 6f 72 74 20 30 7d 20 20 20 3b 23 20 41  8 sort 0}   ;# A
5160: 64 64 20 31 30 30 20 74 6f 20 72 6f 77 69 64 73  dd 100 to rowids
5170: 20 39 30 20 39 31 20 39 32 20 39 37 0a 64 6f 5f   90 91 92 97.do_
5180: 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 33 2e  test where9-6.3.
5190: 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  8 {.  db eval {.
51a0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
51b0: 28 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f  (*) FROM t1 UNIO
51c0: 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
51d0: 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   a FROM t1 WHERE
51e0: 20 61 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e   a BETWEEN 85 AN
51f0: 44 20 31 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42  D 100;.    ROLLB
5200: 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 39 20 38  ACK;.  }.} {99 8
5210: 35 20 38 36 20 38 37 20 38 38 20 38 39 20 39 33  5 86 87 88 89 93
5220: 20 39 34 20 39 35 20 39 36 20 39 38 20 39 39 7d   94 95 96 98 99}
5230: 0a 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  ...do_test where
5240: 39 2d 36 2e 34 2e 31 20 7b 0a 20 20 63 6f 75 6e  9-6.4.1 {.  coun
5250: 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 42 45  t_steps {.    BE
5260: 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20  GIN;.    DELETE 
5270: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45  FROM t1.     WHE
5280: 52 45 20 28 62 3e 3d 39 35 30 20 41 4e 44 20 62  RE (b>=950 AND b
5290: 3c 3d 31 30 31 30 29 20 4f 52 20 28 62 20 49 53  <=1010) OR (b IS
52a0: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20   NULL AND c NOT 
52b0: 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63 61  NULL).  }.} {sca
52c0: 6e 20 30 20 73 6f 72 74 20 30 7d 20 20 3b 23 20  n 0 sort 0}  ;# 
52d0: 44 45 4c 45 54 45 20 72 6f 77 73 20 38 37 20 38  DELETE rows 87 8
52e0: 38 20 38 39 20 39 30 20 39 31 0a 64 6f 5f 74 65  8 89 90 91.do_te
52f0: 73 74 20 77 68 65 72 65 39 2d 36 2e 34 2e 32 20  st where9-6.4.2 
5300: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
5310: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
5320: 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20  ) FROM t1 UNION 
5330: 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61  ALL.    SELECT a
5340: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
5350: 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20   BETWEEN 85 AND 
5360: 31 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  100;.    ROLLBAC
5370: 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 34 20 38 35 20  K;.  }.} {94 85 
5380: 38 36 20 39 32 20 39 33 20 39 34 20 39 35 20 39  86 92 93 94 95 9
5390: 36 20 39 37 20 39 38 20 39 39 7d 0a 64 6f 5f 74  6 97 98 99}.do_t
53a0: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 34 2e 33  est where9-6.4.3
53b0: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
53c0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
53d0: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
53e0: 61 3d 61 2b 31 30 30 0a 20 20 20 20 20 57 48 45  a=a+100.     WHE
53f0: 52 45 20 28 62 3e 3d 39 35 30 20 41 4e 44 20 62  RE (b>=950 AND b
5400: 3c 3d 31 30 31 30 29 20 4f 52 20 28 62 20 49 53  <=1010) OR (b IS
5410: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20   NULL AND c NOT 
5420: 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63 61  NULL).  }.} {sca
5430: 6e 20 30 20 73 6f 72 74 20 30 7d 20 20 3b 23 20  n 0 sort 0}  ;# 
5440: 41 64 64 20 31 30 30 20 74 6f 20 72 6f 77 69 64  Add 100 to rowid
5450: 73 20 38 37 20 38 38 20 38 39 20 39 30 20 39 31  s 87 88 89 90 91
5460: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
5470: 36 2e 34 2e 34 20 7b 0a 20 20 64 62 20 65 76 61  6.4.4 {.  db eva
5480: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
5490: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
54a0: 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45  UNION ALL.    SE
54b0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
54c0: 48 45 52 45 20 61 20 42 45 54 57 45 45 4e 20 38  HERE a BETWEEN 8
54d0: 35 20 41 4e 44 20 31 30 30 3b 0a 20 20 20 20 52  5 AND 100;.    R
54e0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
54f0: 39 39 20 38 35 20 38 36 20 39 32 20 39 33 20 39  99 85 86 92 93 9
5500: 34 20 39 35 20 39 36 20 39 37 20 39 38 20 39 39  4 95 96 97 98 99
5510: 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  }...do_test wher
5520: 65 39 2d 36 2e 35 2e 31 20 7b 0a 20 20 63 6f 75  e9-6.5.1 {.  cou
5530: 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 42  nt_steps {.    B
5540: 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45  EGIN;.    DELETE
5550: 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48   FROM t1.     WH
5560: 45 52 45 20 61 3d 38 33 0a 20 20 20 20 20 20 20  ERE a=83.       
5570: 20 4f 52 20 62 3d 39 31 33 0a 20 20 20 20 20 20   OR b=913.      
5580: 20 20 4f 52 20 63 3d 32 38 30 32 38 0a 20 20 20    OR c=28028.   
5590: 20 20 20 20 20 4f 52 20 28 64 3e 3d 38 32 20 41       OR (d>=82 A
55a0: 4e 44 20 64 3c 38 33 29 0a 20 20 20 20 20 20 20  ND d<83).       
55b0: 20 4f 52 20 28 65 3e 32 38 30 32 20 41 4e 44 20   OR (e>2802 AND 
55c0: 65 3c 32 38 30 33 29 20 0a 20 20 20 20 20 20 20  e<2803) .       
55d0: 20 4f 52 20 66 3d 27 66 67 68 69 6a 6b 6c 6d 6e   OR f='fghijklmn
55e0: 27 0a 20 20 20 20 20 20 20 20 4f 52 20 67 3d 27  '.        OR g='
55f0: 68 67 66 65 64 63 62 27 0a 20 20 7d 0a 7d 20 7b  hgfedcb'.  }.} {
5600: 73 63 61 6e 20 30 20 73 6f 72 74 20 30 7d 20 20  scan 0 sort 0}  
5610: 20 3b 23 20 20 44 45 4c 45 54 45 20 72 6f 77 73   ;#  DELETE rows
5620: 20 35 20 33 31 20 35 37 20 38 32 20 38 33 20 38   5 31 57 82 83 8
5630: 34 20 38 35 20 38 36 20 38 37 0a 64 6f 5f 74 65  4 85 86 87.do_te
5640: 73 74 20 77 68 65 72 65 39 2d 36 2e 35 2e 32 20  st where9-6.5.2 
5650: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
5660: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
5670: 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20  ) FROM t1 UNION 
5680: 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61  ALL.    SELECT a
5690: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
56a0: 20 49 4e 20 28 35 2c 33 31 2c 35 37 2c 38 32 2c   IN (5,31,57,82,
56b0: 38 33 2c 38 34 2c 38 35 2c 38 36 2c 38 37 29 3b  83,84,85,86,87);
56c0: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
56d0: 20 7d 0a 7d 20 7b 39 30 7d 0a 0a 64 6f 5f 74 65   }.} {90}..do_te
56e0: 73 74 20 77 68 65 72 65 39 2d 36 2e 35 2e 33 20  st where9-6.5.3 
56f0: 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20  {.  count_steps 
5700: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
5710: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61   UPDATE t1 SET a
5720: 3d 61 2b 31 30 30 0a 20 20 20 20 20 57 48 45 52  =a+100.     WHER
5730: 45 20 61 3d 38 33 0a 20 20 20 20 20 20 20 20 4f  E a=83.        O
5740: 52 20 62 3d 39 31 33 0a 20 20 20 20 20 20 20 20  R b=913.        
5750: 4f 52 20 63 3d 32 38 30 32 38 0a 20 20 20 20 20  OR c=28028.     
5760: 20 20 20 4f 52 20 28 64 3e 3d 38 32 20 41 4e 44     OR (d>=82 AND
5770: 20 64 3c 38 33 29 0a 20 20 20 20 20 20 20 20 4f   d<83).        O
5780: 52 20 28 65 3e 32 38 30 32 20 41 4e 44 20 65 3c  R (e>2802 AND e<
5790: 32 38 30 33 29 20 0a 20 20 20 20 20 20 20 20 4f  2803) .        O
57a0: 52 20 66 3d 27 66 67 68 69 6a 6b 6c 6d 6e 27 0a  R f='fghijklmn'.
57b0: 20 20 20 20 20 20 20 20 4f 52 20 67 3d 27 68 67          OR g='hg
57c0: 66 65 64 63 62 27 0a 20 20 7d 0a 7d 20 7b 73 63  fedcb'.  }.} {sc
57d0: 61 6e 20 30 20 73 6f 72 74 20 30 7d 20 20 20 3b  an 0 sort 0}   ;
57e0: 23 20 20 41 64 64 20 31 30 30 20 74 6f 20 72 6f  #  Add 100 to ro
57f0: 77 69 64 73 20 35 20 33 31 20 35 37 20 38 32 20  wids 5 31 57 82 
5800: 38 33 20 38 34 20 38 35 20 38 36 20 38 37 0a 64  83 84 85 86 87.d
5810: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
5820: 35 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  5.4 {.  db eval 
5830: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75  {.    SELECT cou
5840: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e  nt(*) FROM t1 UN
5850: 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
5860: 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45  CT a FROM t1 WHE
5870: 52 45 20 61 25 31 30 30 20 49 4e 20 28 35 2c 33  RE a%100 IN (5,3
5880: 31 2c 35 37 2c 38 32 2c 38 33 2c 38 34 2c 38 35  1,57,82,83,84,85
5890: 2c 38 36 2c 38 37 29 20 4f 52 44 45 52 20 42 59  ,86,87) ORDER BY
58a0: 20 72 6f 77 69 64 3b 0a 20 20 20 20 52 4f 4c 4c   rowid;.    ROLL
58b0: 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 39 20  BACK;.  }.} {99 
58c0: 31 30 35 20 31 33 31 20 31 35 37 20 31 38 32 20  105 131 157 182 
58d0: 31 38 33 20 31 38 34 20 31 38 35 20 31 38 36 20  183 184 185 186 
58e0: 31 38 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68  187}..do_test wh
58f0: 65 72 65 39 2d 36 2e 36 2e 31 20 7b 0a 20 20 63  ere9-6.6.1 {.  c
5900: 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20  ount_steps {.   
5910: 20 42 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45   BEGIN;.    DELE
5920: 54 45 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20  TE FROM t1.     
5930: 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c  WHERE (b IS NULL
5940: 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20   AND c NOT NULL 
5950: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
5960: 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f          OR (b NO
5970: 54 20 4e 55 4c 4c 20 41 4e 44 20 2b 63 20 49 53  T NULL AND +c IS
5980: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
5990: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
59a0: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
59b0: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
59c0: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d  d IS NULL).  }.}
59d0: 20 7b 73 63 61 6e 20 39 38 20 73 6f 72 74 20 30   {scan 98 sort 0
59e0: 7d 20 20 20 3b 23 20 44 45 4c 45 54 45 73 20 72  }   ;# DELETEs r
59f0: 6f 77 73 20 39 30 20 39 31 20 39 32 20 39 37 0a  ows 90 91 92 97.
5a00: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
5a10: 2e 36 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  .6.2 {.  db eval
5a20: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f   {.    SELECT co
5a30: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 55  unt(*) FROM t1 U
5a40: 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
5a50: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48  ECT a FROM t1 WH
5a60: 45 52 45 20 61 20 42 45 54 57 45 45 4e 20 38 35  ERE a BETWEEN 85
5a70: 20 41 4e 44 20 31 30 30 3b 0a 20 20 20 20 52 4f   AND 100;.    RO
5a80: 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39  LLBACK;.  }.} {9
5a90: 35 20 38 35 20 38 36 20 38 37 20 38 38 20 38 39  5 85 86 87 88 89
5aa0: 20 39 33 20 39 34 20 39 35 20 39 36 20 39 38 20   93 94 95 96 98 
5ab0: 39 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65  99}..do_test whe
5ac0: 72 65 39 2d 36 2e 36 2e 33 20 7b 0a 20 20 63 6f  re9-6.6.3 {.  co
5ad0: 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20  unt_steps {.    
5ae0: 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44 41 54  BEGIN;.    UPDAT
5af0: 45 20 74 31 20 53 45 54 20 61 3d 61 2b 31 30 30  E t1 SET a=a+100
5b00: 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 20 49  .     WHERE (b I
5b10: 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54  S NULL AND c NOT
5b20: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
5b30: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
5b40: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
5b50: 20 2b 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20   +c IS NULL AND 
5b60: 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20  d NOT NULL).    
5b70: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
5b80: 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c  LL AND c NOT NUL
5b90: 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29  L AND d IS NULL)
5ba0: 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 39 38 20  .  }.} {scan 98 
5bb0: 73 6f 72 74 20 30 7d 20 20 20 3b 23 20 41 64 64  sort 0}   ;# Add
5bc0: 20 31 30 30 20 74 6f 20 72 6f 77 69 64 73 20 39   100 to rowids 9
5bd0: 30 20 39 31 20 39 32 20 39 37 0a 64 6f 5f 74 65  0 91 92 97.do_te
5be0: 73 74 20 77 68 65 72 65 39 2d 36 2e 36 2e 34 20  st where9-6.6.4 
5bf0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
5c00: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
5c10: 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20  ) FROM t1 UNION 
5c20: 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61  ALL.    SELECT a
5c30: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
5c40: 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20   BETWEEN 85 AND 
5c50: 32 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  200;.    ROLLBAC
5c60: 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 39 20 38 35 20  K;.  }.} {99 85 
5c70: 38 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39  86 87 88 89 93 9
5c80: 34 20 39 35 20 39 36 20 39 38 20 39 39 20 31 39  4 95 96 98 99 19
5c90: 30 20 31 39 31 20 31 39 32 20 31 39 37 7d 0a 0a  0 191 192 197}..
5ca0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
5cb0: 2e 37 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73  .7.1 {.  count_s
5cc0: 74 65 70 73 20 7b 0a 20 20 20 20 42 45 47 49 4e  teps {.    BEGIN
5cd0: 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  ;.    DELETE FRO
5ce0: 4d 20 74 31 20 4e 4f 54 20 49 4e 44 45 58 45 44  M t1 NOT INDEXED
5cf0: 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 20 49  .     WHERE (b I
5d00: 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54  S NULL AND c NOT
5d10: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
5d20: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
5d30: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
5d40: 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64   c IS NULL AND d
5d50: 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20   NOT NULL).     
5d60: 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c     OR (b NOT NUL
5d70: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
5d80: 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a   AND d IS NULL).
5d90: 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 39 38 20 73    }.} {scan 98 s
5da0: 6f 72 74 20 30 7d 20 20 20 3b 23 20 44 45 4c 45  ort 0}   ;# DELE
5db0: 54 45 73 20 72 6f 77 73 20 39 30 20 39 31 20 39  TEs rows 90 91 9
5dc0: 32 20 39 37 0a 64 6f 5f 74 65 73 74 20 77 68 65  2 97.do_test whe
5dd0: 72 65 39 2d 36 2e 37 2e 32 20 7b 0a 20 20 64 62  re9-6.7.2 {.  db
5de0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
5df0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
5e00: 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20   t1 UNION ALL.  
5e10: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
5e20: 74 31 20 57 48 45 52 45 20 61 20 42 45 54 57 45  t1 WHERE a BETWE
5e30: 45 4e 20 38 35 20 41 4e 44 20 31 30 30 3b 0a 20  EN 85 AND 100;. 
5e40: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5e50: 0a 7d 20 7b 39 35 20 38 35 20 38 36 20 38 37 20  .} {95 85 86 87 
5e60: 38 38 20 38 39 20 39 33 20 39 34 20 39 35 20 39  88 89 93 94 95 9
5e70: 36 20 39 38 20 39 39 7d 0a 0a 64 6f 5f 74 65 73  6 98 99}..do_tes
5e80: 74 20 77 68 65 72 65 39 2d 36 2e 37 2e 33 20 7b  t where9-6.7.3 {
5e90: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
5ea0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
5eb0: 55 50 44 41 54 45 20 74 31 20 4e 4f 54 20 49 4e  UPDATE t1 NOT IN
5ec0: 44 45 58 45 44 20 53 45 54 20 61 3d 61 2b 31 30  DEXED SET a=a+10
5ed0: 30 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 20  0.     WHERE (b 
5ee0: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f  IS NULL AND c NO
5ef0: 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54  T NULL AND d NOT
5f00: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f   NULL).        O
5f10: 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  R (b NOT NULL AN
5f20: 44 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20  D c IS NULL AND 
5f30: 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20  d NOT NULL).    
5f40: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
5f50: 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c  LL AND c NOT NUL
5f60: 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29  L AND d IS NULL)
5f70: 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 39 38 20  .  }.} {scan 98 
5f80: 73 6f 72 74 20 30 7d 20 20 20 3b 23 20 41 64 64  sort 0}   ;# Add
5f90: 20 31 30 30 20 74 6f 20 72 6f 77 69 64 73 20 39   100 to rowids 9
5fa0: 30 20 39 31 20 39 32 20 39 37 0a 64 6f 5f 74 65  0 91 92 97.do_te
5fb0: 73 74 20 77 68 65 72 65 39 2d 36 2e 37 2e 34 20  st where9-6.7.4 
5fc0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
5fd0: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
5fe0: 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20  ) FROM t1 UNION 
5ff0: 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61  ALL.    SELECT a
6000: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
6010: 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20   BETWEEN 85 AND 
6020: 32 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  200;.    ROLLBAC
6030: 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 39 20 38 35 20  K;.  }.} {99 85 
6040: 38 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39  86 87 88 89 93 9
6050: 34 20 39 35 20 39 36 20 39 38 20 39 39 20 31 39  4 95 96 98 99 19
6060: 30 20 31 39 31 20 31 39 32 20 31 39 37 7d 0a 0a  0 191 192 197}..
6070: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
6080: 2e 38 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  .8.1 {.  catchsq
6090: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
60a0: 52 4f 4d 20 74 31 20 49 4e 44 45 58 45 44 20 42  ROM t1 INDEXED B
60b0: 59 20 74 31 62 0a 20 20 20 20 20 57 48 45 52 45  Y t1b.     WHERE
60c0: 20 28 2b 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44   (+b IS NULL AND
60d0: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
60e0: 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20  d NOT NULL).    
60f0: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
6100: 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c  LL AND c IS NULL
6110: 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29   AND d NOT NULL)
6120: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e  .        OR (b N
6130: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f  OT NULL AND c NO
6140: 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20  T NULL AND d IS 
6150: 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 31 20 7b  NULL).  }.} {1 {
6160: 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69 6f  no query solutio
6170: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  n}}.do_test wher
6180: 65 39 2d 36 2e 38 2e 32 20 7b 0a 20 20 63 61 74  e9-6.8.2 {.  cat
6190: 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  chsql {.    UPDA
61a0: 54 45 20 74 31 20 49 4e 44 45 58 45 44 20 42 59  TE t1 INDEXED BY
61b0: 20 74 31 62 20 53 45 54 20 61 3d 61 2b 31 30 30   t1b SET a=a+100
61c0: 0a 20 20 20 20 20 57 48 45 52 45 20 28 2b 62 20  .     WHERE (+b 
61d0: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f  IS NULL AND c NO
61e0: 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54  T NULL AND d NOT
61f0: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f   NULL).        O
6200: 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  R (b NOT NULL AN
6210: 44 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20  D c IS NULL AND 
6220: 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20  d NOT NULL).    
6230: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
6240: 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c  LL AND c NOT NUL
6250: 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29  L AND d IS NULL)
6260: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75  .  }.} {1 {no qu
6270: 65 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 0a  ery solution}}..
6280: 73 65 74 20 73 6f 6c 75 74 69 6f 6e 5f 70 6f 73  set solution_pos
6290: 73 69 62 6c 65 20 30 0a 69 66 63 61 70 61 62 6c  sible 0.ifcapabl
62a0: 65 20 73 74 61 74 34 7c 7c 73 74 61 74 33 20 7b  e stat4||stat3 {
62b0: 0a 20 20 69 66 20 7b 5b 70 65 72 6d 75 74 61 74  .  if {[permutat
62c0: 69 6f 6e 5d 20 21 3d 20 22 6e 6f 5f 6f 70 74 69  ion] != "no_opti
62d0: 6d 69 7a 61 74 69 6f 6e 22 7d 20 7b 20 73 65 74  mization"} { set
62e0: 20 73 6f 6c 75 74 69 6f 6e 5f 70 6f 73 73 69 62   solution_possib
62f0: 6c 65 20 31 20 7d 0a 7d 0a 69 66 20 24 73 6f 6c  le 1 }.}.if $sol
6300: 75 74 69 6f 6e 5f 70 6f 73 73 69 62 6c 65 20 7b  ution_possible {
6310: 0a 20 20 23 20 57 68 65 6e 20 53 54 41 54 33 20  .  # When STAT3 
6320: 69 73 20 65 6e 61 62 6c 65 64 2c 20 74 68 65 20  is enabled, the 
6330: 22 62 20 4e 4f 54 20 4e 55 4c 4c 22 20 74 65 72  "b NOT NULL" ter
6340: 6d 73 20 67 65 74 20 74 72 61 6e 73 6c 61 74 65  ms get translate
6350: 64 0a 20 20 23 20 69 6e 74 6f 20 62 3e 4e 55 4c  d.  # into b>NUL
6360: 4c 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20  L, which can be 
6370: 73 61 74 69 66 69 65 64 20 62 79 20 74 68 65 20  satified by the 
6380: 69 6e 64 65 78 20 74 31 62 2e 20 20 49 74 20 69  index t1b.  It i
6390: 73 20 61 20 76 65 72 79 0a 20 20 23 20 65 78 70  s a very.  # exp
63a0: 65 6e 73 69 76 65 20 77 61 79 20 74 6f 20 64 6f  ensive way to do
63b0: 20 74 68 65 20 71 75 65 72 79 2c 20 62 75 74 20   the query, but 
63c0: 69 74 20 77 6f 72 6b 73 2c 20 61 6e 64 20 73 6f  it works, and so
63d0: 20 61 20 73 6f 6c 75 74 69 6f 6e 20 69 73 20 70   a solution is p
63e0: 6f 73 73 69 62 6c 65 2e 0a 20 20 64 6f 5f 74 65  ossible..  do_te
63f0: 73 74 20 77 68 65 72 65 39 2d 36 2e 38 2e 33 2d  st where9-6.8.3-
6400: 73 74 61 74 34 20 7b 0a 20 20 20 20 63 61 74 63  stat4 {.    catc
6410: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 55 50 44  hsql {.      UPD
6420: 41 54 45 20 74 31 20 49 4e 44 45 58 45 44 20 42  ATE t1 INDEXED B
6430: 59 20 74 31 62 20 53 45 54 20 61 3d 61 2b 31 30  Y t1b SET a=a+10
6440: 30 0a 20 20 20 20 20 20 20 57 48 45 52 45 20 28  0.       WHERE (
6450: 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20  b IS NULL AND c 
6460: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e  NOT NULL AND d N
6470: 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20  OT NULL).       
6480: 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c     OR (b NOT NUL
6490: 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c 20  L AND c IS NULL 
64a0: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
64b0: 20 20 20 20 20 20 20 20 20 20 4f 52 20 28 62 20            OR (b 
64c0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e  NOT NULL AND c N
64d0: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53  OT NULL AND d IS
64e0: 20 4e 55 4c 4c 29 0a 20 20 20 20 7d 0a 20 20 7d   NULL).    }.  }
64f0: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
6500: 74 20 77 68 65 72 65 39 2d 36 2e 38 2e 34 2d 73  t where9-6.8.4-s
6510: 74 61 74 34 20 7b 0a 20 20 20 20 63 61 74 63 68  tat4 {.    catch
6520: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45  sql {.      DELE
6530: 54 45 20 46 52 4f 4d 20 74 31 20 49 4e 44 45 58  TE FROM t1 INDEX
6540: 45 44 20 42 59 20 74 31 62 0a 20 20 20 20 20 20  ED BY t1b.      
6550: 20 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c   WHERE (b IS NUL
6560: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
6570: 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29   AND d NOT NULL)
6580: 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20 28 62  .          OR (b
6590: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20   NOT NULL AND c 
65a0: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  IS NULL AND d NO
65b0: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
65c0: 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c    OR (b NOT NULL
65d0: 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20   AND c NOT NULL 
65e0: 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20  AND d IS NULL). 
65f0: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a     }.  } {0 {}}.
6600: 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65  } else {.  do_te
6610: 73 74 20 77 68 65 72 65 39 2d 36 2e 38 2e 33 20  st where9-6.8.3 
6620: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
6630: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
6640: 20 49 4e 44 45 58 45 44 20 42 59 20 74 31 62 20   INDEXED BY t1b 
6650: 53 45 54 20 61 3d 61 2b 31 30 30 0a 20 20 20 20  SET a=a+100.    
6660: 20 20 20 57 48 45 52 45 20 28 62 20 49 53 20 4e     WHERE (b IS N
6670: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
6680: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
6690: 4c 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20  L).          OR 
66a0: 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  (b NOT NULL AND 
66b0: 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20  c IS NULL AND d 
66c0: 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20  NOT NULL).      
66d0: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
66e0: 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c  LL AND c NOT NUL
66f0: 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29  L AND d IS NULL)
6700: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e  .    }.  } {1 {n
6710: 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e  o query solution
6720: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  }}.  do_test whe
6730: 72 65 39 2d 36 2e 38 2e 34 20 7b 0a 20 20 20 20  re9-6.8.4 {.    
6740: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
6750: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20   DELETE FROM t1 
6760: 49 4e 44 45 58 45 44 20 42 59 20 74 31 62 0a 20  INDEXED BY t1b. 
6770: 20 20 20 20 20 20 57 48 45 52 45 20 28 62 20 49        WHERE (b I
6780: 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54  S NULL AND c NOT
6790: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
67a0: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20  NULL).          
67b0: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
67c0: 4e 44 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44  ND c IS NULL AND
67d0: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
67e0: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
67f0: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20   NULL AND c NOT 
6800: 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e 55  NULL AND d IS NU
6810: 4c 4c 29 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  LL).    }.  } {1
6820: 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74   {no query solut
6830: 69 6f 6e 7d 7d 0a 7d 0a 23 23 23 23 23 23 23 23  ion}}.}.########
6840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6880: 23 23 23 23 0a 23 20 54 65 73 74 20 63 61 73 65  ####.# Test case
6890: 73 20 77 68 65 72 65 20 74 65 72 6d 73 20 69 6e  s where terms in
68a0: 73 69 64 65 20 61 6e 20 4f 52 20 73 65 72 69 65  side an OR serie
68b0: 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 77  s are combined w
68c0: 69 74 68 20 41 4e 44 20 74 65 72 6d 73 0a 23 20  ith AND terms.# 
68d0: 65 78 74 65 72 6e 61 6c 20 74 6f 20 74 68 65 20  external to the 
68e0: 4f 52 20 63 6c 61 75 73 65 2e 20 20 49 6e 20 6f  OR clause.  In o
68f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 63 61 73 65  ther words, case
6900: 73 20 77 68 65 72 65 0a 23 0a 23 20 20 20 20 20  s where.#.#     
6910: 20 20 20 20 20 20 20 20 20 78 20 41 4e 44 20 28           x AND (
6920: 79 20 4f 52 20 7a 29 0a 23 0a 23 20 69 73 20 61  y OR z).#.# is a
6930: 62 6c 65 20 74 6f 20 75 73 65 20 69 6e 64 69 63  ble to use indic
6940: 65 73 20 6f 6e 20 78 2c 79 20 61 6e 64 20 78 2c  es on x,y and x,
6950: 7a 2c 20 6f 72 20 69 6e 64 69 63 65 73 20 79 2c  z, or indices y,
6960: 78 20 61 6e 64 20 7a 2c 78 2e 0a 23 0a 64 6f 5f  x and z,x..#.do_
6970: 74 65 73 74 20 77 68 65 72 65 39 2d 37 2e 30 20  test where9-7.0 
6980: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6990: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
69a0: 35 28 61 2c 20 62 2c 20 63 2c 20 64 2c 20 65 2c  5(a, b, c, d, e,
69b0: 20 66 2c 20 67 2c 20 78 2c 20 79 29 3b 0a 20 20   f, g, x, y);.  
69c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
69d0: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20  .     SELECT a, 
69e0: 62 2c 20 63 2c 20 65 2c 20 64 2c 20 66 2c 20 67  b, c, e, d, f, g
69f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 41  ,.            CA
6a00: 53 45 20 57 48 45 4e 20 28 61 26 31 29 21 3d 30  SE WHEN (a&1)!=0
6a10: 20 54 48 45 4e 20 27 79 27 20 45 4c 53 45 20 27   THEN 'y' ELSE '
6a20: 6e 27 20 45 4e 44 2c 0a 20 20 20 20 20 20 20 20  n' END,.        
6a30: 20 20 20 20 43 41 53 45 20 57 48 45 4e 20 28 61      CASE WHEN (a
6a40: 26 32 29 21 3d 30 20 54 48 45 4e 20 27 79 27 20  &2)!=0 THEN 'y' 
6a50: 45 4c 53 45 20 27 6e 27 20 45 4e 44 0a 20 20 20  ELSE 'n' END.   
6a60: 20 20 20 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20      FROM t1;.   
6a70: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35   CREATE INDEX t5
6a80: 78 62 20 4f 4e 20 74 35 28 78 2c 20 62 29 3b 0a  xb ON t5(x, b);.
6a90: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
6aa0: 20 74 35 78 63 20 4f 4e 20 74 35 28 78 2c 20 63   t5xc ON t5(x, c
6ab0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
6ac0: 44 45 58 20 74 35 78 64 20 4f 4e 20 74 35 28 78  DEX t5xd ON t5(x
6ad0: 2c 20 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , d);.    CREATE
6ae0: 20 49 4e 44 45 58 20 74 35 78 65 20 4f 4e 20 74   INDEX t5xe ON t
6af0: 35 28 78 2c 20 65 29 3b 0a 20 20 20 20 43 52 45  5(x, e);.    CRE
6b00: 41 54 45 20 49 4e 44 45 58 20 74 35 78 66 20 4f  ATE INDEX t5xf O
6b10: 4e 20 74 35 28 78 2c 20 66 29 3b 0a 20 20 20 20  N t5(x, f);.    
6b20: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 78  CREATE INDEX t5x
6b30: 67 20 4f 4e 20 74 35 28 78 2c 20 67 29 3b 0a 20  g ON t5(x, g);. 
6b40: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
6b50: 74 35 79 62 20 4f 4e 20 74 35 28 79 2c 20 62 29  t5yb ON t5(y, b)
6b60: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
6b70: 45 58 20 74 35 79 63 20 4f 4e 20 74 35 28 79 2c  EX t5yc ON t5(y,
6b80: 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   c);.    CREATE 
6b90: 49 4e 44 45 58 20 74 35 79 64 20 4f 4e 20 74 35  INDEX t5yd ON t5
6ba0: 28 79 2c 20 64 29 3b 0a 20 20 20 20 43 52 45 41  (y, d);.    CREA
6bb0: 54 45 20 49 4e 44 45 58 20 74 35 79 65 20 4f 4e  TE INDEX t5ye ON
6bc0: 20 74 35 28 79 2c 20 65 29 3b 0a 20 20 20 20 43   t5(y, e);.    C
6bd0: 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 79 66  REATE INDEX t5yf
6be0: 20 4f 4e 20 74 35 28 79 2c 20 66 29 3b 0a 20 20   ON t5(y, f);.  
6bf0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
6c00: 35 79 67 20 4f 4e 20 74 35 28 79 2c 20 67 29 3b  5yg ON t5(y, g);
6c10: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
6c20: 45 20 74 36 28 61 2c 20 62 2c 20 63 2c 20 65 2c  E t6(a, b, c, e,
6c30: 20 64 2c 20 66 2c 20 67 2c 20 78 2c 20 79 29 3b   d, f, g, x, y);
6c40: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6c50: 20 74 36 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t6 SELECT * FRO
6c60: 4d 20 74 35 3b 0a 20 20 20 20 41 4e 41 4c 59 5a  M t5;.    ANALYZ
6c70: 45 20 74 35 3b 0a 20 20 7d 0a 20 20 69 66 63 61  E t5;.  }.  ifca
6c80: 70 61 62 6c 65 20 73 74 61 74 33 20 7b 0a 20 20  pable stat3 {.  
6c90: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
6ca0: 73 74 2e 64 62 0a 20 20 20 20 64 62 32 20 65 76  st.db.    db2 ev
6cb0: 61 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20  al { DROP TABLE 
6cc0: 49 46 20 45 58 49 53 54 53 20 73 71 6c 69 74 65  IF EXISTS sqlite
6cd0: 5f 73 74 61 74 33 20 7d 0a 20 20 20 20 64 62 32  _stat3 }.    db2
6ce0: 20 63 6c 6f 73 65 0a 20 20 7d 0a 7d 20 7b 7d 0a   close.  }.} {}.
6cf0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 37  do_test where9-7
6d00: 2e 31 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73  .1.1 {.  count_s
6d10: 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43  teps {.    SELEC
6d20: 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52  T a FROM t5 WHER
6d30: 45 20 78 3d 27 79 27 20 41 4e 44 20 28 62 3d 39  E x='y' AND (b=9
6d40: 31 33 20 4f 52 20 63 3d 32 37 30 32 37 29 20 4f  13 OR c=27027) O
6d50: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d  RDER BY a;.  }.}
6d60: 20 7b 37 39 20 38 31 20 38 33 20 73 63 61 6e 20   {79 81 83 scan 
6d70: 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73  0 sort 1}.do_tes
6d80: 74 20 77 68 65 72 65 39 2d 37 2e 31 2e 32 20 7b  t where9-7.1.2 {
6d90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6da0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
6db0: 36 20 57 48 45 52 45 20 78 3d 27 79 27 20 41 4e  6 WHERE x='y' AN
6dc0: 44 20 28 62 3d 39 31 33 20 4f 52 20 63 3d 32 37  D (b=913 OR c=27
6dd0: 30 32 37 29 20 4f 52 44 45 52 20 42 59 20 61 3b  027) ORDER BY a;
6de0: 0a 20 20 7d 0a 7d 20 7b 37 39 20 38 31 20 38 33  .  }.} {79 81 83
6df0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  }.do_test where9
6e00: 2d 37 2e 31 2e 33 20 7b 0a 20 20 63 6f 75 6e 74  -7.1.3 {.  count
6e10: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c  _steps {.    SEL
6e20: 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48  ECT a FROM t5 WH
6e30: 45 52 45 20 78 3d 27 6e 27 20 41 4e 44 20 28 62  ERE x='n' AND (b
6e40: 3d 39 31 33 20 4f 52 20 63 3d 32 37 30 32 37 29  =913 OR c=27027)
6e50: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
6e60: 0a 7d 20 7b 38 30 20 73 63 61 6e 20 30 20 73 6f  .} {80 scan 0 so
6e70: 72 74 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68  rt 1}.do_test wh
6e80: 65 72 65 39 2d 37 2e 31 2e 34 20 7b 0a 20 20 65  ere9-7.1.4 {.  e
6e90: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
6ea0: 45 43 54 20 61 20 46 52 4f 4d 20 74 36 20 57 48  ECT a FROM t6 WH
6eb0: 45 52 45 20 78 3d 27 6e 27 20 41 4e 44 20 28 62  ERE x='n' AND (b
6ec0: 3d 39 31 33 20 4f 52 20 63 3d 32 37 30 32 37 29  =913 OR c=27027)
6ed0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
6ee0: 0a 7d 20 7b 38 30 7d 0a 64 6f 5f 74 65 73 74 20  .} {80}.do_test 
6ef0: 77 68 65 72 65 39 2d 37 2e 32 2e 31 20 7b 0a 20  where9-7.2.1 {. 
6f00: 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20   count_steps {. 
6f10: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
6f20: 20 74 35 20 57 48 45 52 45 20 28 78 3d 27 79 27   t5 WHERE (x='y'
6f30: 20 4f 52 20 79 3d 27 79 27 29 20 41 4e 44 20 62   OR y='y') AND b
6f40: 3d 39 31 33 20 4f 52 44 45 52 20 42 59 20 61 3b  =913 ORDER BY a;
6f50: 0a 20 20 7d 0a 7d 20 7b 38 33 20 73 63 61 6e 20  .  }.} {83 scan 
6f60: 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73  0 sort 1}.do_tes
6f70: 74 20 77 68 65 72 65 39 2d 37 2e 32 2e 32 20 7b  t where9-7.2.2 {
6f80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6f90: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
6fa0: 36 20 57 48 45 52 45 20 28 78 3d 27 79 27 20 4f  6 WHERE (x='y' O
6fb0: 52 20 79 3d 27 79 27 29 20 41 4e 44 20 62 3d 39  R y='y') AND b=9
6fc0: 31 33 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  13 ORDER BY a;. 
6fd0: 20 7d 0a 7d 20 7b 38 33 7d 0a 64 6f 5f 74 65 73   }.} {83}.do_tes
6fe0: 74 20 77 68 65 72 65 39 2d 37 2e 33 2e 31 20 7b  t where9-7.3.1 {
6ff0: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
7000: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
7010: 4f 4d 20 74 35 20 57 48 45 52 45 20 28 78 3d 27  OM t5 WHERE (x='
7020: 79 27 20 4f 52 20 79 3d 27 79 27 29 20 41 4e 44  y' OR y='y') AND
7030: 20 63 3d 32 37 30 32 37 20 4f 52 44 45 52 20 42   c=27027 ORDER B
7040: 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 37 39 20 38  Y a;.  }.} {79 8
7050: 31 20 73 63 61 6e 20 30 20 73 6f 72 74 20 31 7d  1 scan 0 sort 1}
7060: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
7070: 37 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  7.3.2 {.  execsq
7080: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
7090: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 28   FROM t6 WHERE (
70a0: 78 3d 27 79 27 20 4f 52 20 79 3d 27 79 27 29 20  x='y' OR y='y') 
70b0: 41 4e 44 20 63 3d 32 37 30 32 37 20 4f 52 44 45  AND c=27027 ORDE
70c0: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 37  R BY a;.  }.} {7
70d0: 39 20 38 31 7d 0a 0a 23 20 46 69 78 20 66 6f 72  9 81}..# Fix for
70e0: 20 74 69 63 6b 65 74 20 5b 62 37 63 38 36 38 32   ticket [b7c8682
70f0: 63 63 31 37 66 33 32 39 30 33 66 30 33 61 36 31  cc17f32903f03a61
7100: 30 62 64 30 64 33 35 66 66 64 33 63 31 65 36 65  0bd0d35ffd3c1e6e
7110: 34 5d 0a 23 20 22 49 6e 63 6f 72 72 65 63 74 20  4].# "Incorrect 
7120: 72 65 73 75 6c 74 20 66 72 6f 6d 20 4c 45 46 54  result from LEFT
7130: 20 4a 4f 49 4e 20 77 69 74 68 20 4f 52 20 69 6e   JOIN with OR in
7140: 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
7150: 65 22 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65  e".#.do_test whe
7160: 72 65 39 2d 38 2e 31 20 7b 0a 20 20 64 62 20 65  re9-8.1 {.  db e
7170: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
7180: 20 54 41 42 4c 45 20 74 38 31 28 61 20 49 4e 54   TABLE t81(a INT
7190: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
71a0: 2c 20 62 2c 20 63 2c 20 64 29 3b 0a 20 20 20 20  , b, c, d);.    
71b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 32  CREATE TABLE t82
71c0: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
71d0: 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20 20 20 20  RY KEY, y);.    
71e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 33  CREATE TABLE t83
71f0: 28 70 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (p INTEGER PRIMA
7200: 52 59 20 4b 45 59 2c 20 71 29 3b 0a 20 20 20 20  RY KEY, q);.    
7210: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
7220: 20 74 38 31 20 56 41 4c 55 45 53 28 32 2c 33 2c   t81 VALUES(2,3,
7230: 34 2c 35 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  4,5);.    INSERT
7240: 20 49 4e 54 4f 20 74 38 31 20 56 41 4c 55 45 53   INTO t81 VALUES
7250: 28 33 2c 34 2c 35 2c 36 29 3b 0a 20 20 20 20 49  (3,4,5,6);.    I
7260: 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 32 20 56  NSERT INTO t82 V
7270: 41 4c 55 45 53 28 32 2c 34 29 3b 0a 20 20 20 20  ALUES(2,4);.    
7280: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 33 20  INSERT INTO t83 
7290: 56 41 4c 55 45 53 28 35 2c 35 35 29 3b 0a 20 20  VALUES(5,55);.  
72a0: 20 20 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 0a    .    SELECT *.
72b0: 20 20 20 20 20 20 46 52 4f 4d 20 74 38 31 20 4c        FROM t81 L
72c0: 45 46 54 20 4a 4f 49 4e 20 74 38 32 20 4f 4e 20  EFT JOIN t82 ON 
72d0: 79 3d 62 20 4a 4f 49 4e 20 74 38 33 0a 20 20 20  y=b JOIN t83.   
72e0: 20 20 57 48 45 52 45 20 63 3d 3d 70 20 4f 52 20    WHERE c==p OR 
72f0: 64 3d 3d 70 0a 20 20 20 20 20 4f 52 44 45 52 20  d==p.     ORDER 
7300: 42 59 20 2b 61 3b 0a 20 20 7d 0a 7d 20 7b 32 20  BY +a;.  }.} {2 
7310: 33 20 34 20 35 20 7b 7d 20 7b 7d 20 35 20 35 35  3 4 5 {} {} 5 55
7320: 20 33 20 34 20 35 20 36 20 32 20 34 20 35 20 35   3 4 5 6 2 4 5 5
7330: 35 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  5}.do_test where
7340: 39 2d 38 2e 32 20 7b 0a 20 20 64 62 20 65 76 61  9-8.2 {.  db eva
7350: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
7360: 0a 20 20 20 20 20 20 46 52 4f 4d 20 74 38 31 20  .      FROM t81 
7370: 4c 45 46 54 20 4a 4f 49 4e 20 28 74 38 32 29 20  LEFT JOIN (t82) 
7380: 4f 4e 20 79 3d 62 20 4a 4f 49 4e 20 74 38 33 0a  ON y=b JOIN t83.
7390: 20 20 20 20 20 57 48 45 52 45 20 63 3d 3d 70 20       WHERE c==p 
73a0: 4f 52 20 64 3d 3d 70 0a 20 20 20 20 20 4f 52 44  OR d==p.     ORD
73b0: 45 52 20 42 59 20 2b 61 3b 0a 20 20 7d 0a 7d 20  ER BY +a;.  }.} 
73c0: 7b 32 20 33 20 34 20 35 20 7b 7d 20 7b 7d 20 35  {2 3 4 5 {} {} 5
73d0: 20 35 35 20 33 20 34 20 35 20 36 20 32 20 34 20   55 3 4 5 6 2 4 
73e0: 35 20 35 35 7d 0a 64 6f 5f 74 65 73 74 20 77 68  5 55}.do_test wh
73f0: 65 72 65 39 2d 38 2e 33 20 7b 0a 20 20 64 62 20  ere9-8.3 {.  db 
7400: 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  eval {.    SELEC
7410: 54 20 2a 0a 20 20 20 20 20 20 46 52 4f 4d 20 28  T *.      FROM (
7420: 74 38 31 29 20 4c 45 46 54 20 4a 4f 49 4e 20 28  t81) LEFT JOIN (
7430: 6d 61 69 6e 2e 74 38 32 29 20 4f 4e 20 79 3d 62  main.t82) ON y=b
7440: 20 4a 4f 49 4e 20 74 38 33 0a 20 20 20 20 20 57   JOIN t83.     W
7450: 48 45 52 45 20 63 3d 3d 70 20 4f 52 20 64 3d 3d  HERE c==p OR d==
7460: 70 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  p.     ORDER BY 
7470: 2b 61 3b 0a 20 20 7d 0a 7d 20 7b 32 20 33 20 34  +a;.  }.} {2 3 4
7480: 20 35 20 7b 7d 20 7b 7d 20 35 20 35 35 20 33 20   5 {} {} 5 55 3 
7490: 34 20 35 20 36 20 32 20 34 20 35 20 35 35 7d 0a  4 5 6 2 4 5 55}.
74a0: 0a 23 20 46 69 78 20 66 6f 72 20 74 69 63 6b 65  .# Fix for ticke
74b0: 74 20 5b 66 32 33 36 39 33 30 34 65 34 37 31 36  t [f2369304e4716
74c0: 37 65 33 65 36 34 34 65 32 66 31 66 65 39 37 33  7e3e644e2f1fe973
74d0: 36 30 36 33 33 39 31 64 37 62 37 5d 0a 23 20 49  6063391d7b7].# I
74e0: 6e 63 6f 72 72 65 63 74 20 72 65 73 75 6c 74 73  ncorrect results
74f0: 20 77 68 65 6e 20 4f 52 20 69 73 20 75 73 65 64   when OR is used
7500: 20 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75 73   in the ON claus
7510: 65 20 6f 66 20 61 20 4c 45 46 54 20 4a 4f 49 4e  e of a LEFT JOIN
7520: 20 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   .#.do_test wher
7530: 65 39 2d 39 2e 31 20 7b 0a 20 20 64 62 20 65 76  e9-9.1 {.  db ev
7540: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
7550: 54 41 42 4c 45 20 74 39 31 28 78 29 3b 20 49 4e  TABLE t91(x); IN
7560: 53 45 52 54 20 49 4e 54 4f 20 74 39 31 20 56 41  SERT INTO t91 VA
7570: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 43 52 45  LUES(1);.    CRE
7580: 41 54 45 20 54 41 42 4c 45 20 74 39 32 28 79 20  ATE TABLE t92(y 
7590: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
75a0: 4b 45 59 2c 61 2c 62 29 3b 0a 20 20 20 20 49 4e  KEY,a,b);.    IN
75b0: 53 45 52 54 20 49 4e 54 4f 20 74 39 32 20 56 41  SERT INTO t92 VA
75c0: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20  LUES(1,2,3);.   
75d0: 20 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74   SELECT 1 FROM t
75e0: 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32  91 LEFT JOIN t92
75f0: 20 4f 4e 20 61 3d 32 20 4f 52 20 62 3d 33 3b 0a   ON a=2 OR b=3;.
7600: 20 20 20 20 53 45 4c 45 43 54 20 32 20 46 52 4f      SELECT 2 FRO
7610: 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20  M t91 LEFT JOIN 
7620: 74 39 32 20 4f 4e 20 61 3d 32 20 41 4e 44 20 62  t92 ON a=2 AND b
7630: 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 33  =3;.    SELECT 3
7640: 20 46 52 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a   FROM t91 LEFT J
7650: 4f 49 4e 20 74 39 32 20 4f 4e 20 28 61 3d 32 20  OIN t92 ON (a=2 
7660: 4f 52 20 62 3d 33 29 20 41 4e 44 20 79 20 49 53  OR b=3) AND y IS
7670: 20 4e 55 4c 4c 3b 0a 20 20 20 20 53 45 4c 45 43   NULL;.    SELEC
7680: 54 20 34 20 46 52 4f 4d 20 74 39 31 20 4c 45 46  T 4 FROM t91 LEF
7690: 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 28 61  T JOIN t92 ON (a
76a0: 3d 32 20 41 4e 44 20 62 3d 33 29 20 41 4e 44 20  =2 AND b=3) AND 
76b0: 79 20 49 53 20 4e 55 4c 4c 3b 0a 20 20 20 20 43  y IS NULL;.    C
76c0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
76d0: 20 78 39 20 41 53 20 53 45 4c 45 43 54 20 2a 20   x9 AS SELECT * 
76e0: 46 52 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f  FROM t91 LEFT JO
76f0: 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32 20 4f 52  IN t92 ON a=2 OR
7700: 20 62 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43 54   b=3;.    SELECT
7710: 20 35 20 46 52 4f 4d 20 78 39 20 57 48 45 52 45   5 FROM x9 WHERE
7720: 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20 20 20 20   y IS NULL;.    
7730: 53 45 4c 45 43 54 20 36 20 46 52 4f 4d 20 74 39  SELECT 6 FROM t9
7740: 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32 20  1 LEFT JOIN t92 
7750: 4f 4e 20 61 3d 32 20 4f 52 20 62 3d 33 20 57 48  ON a=2 OR b=3 WH
7760: 45 52 45 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20  ERE y IS NULL;. 
7770: 20 20 20 53 45 4c 45 43 54 20 37 20 46 52 4f 4d     SELECT 7 FROM
7780: 20 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74   t91 LEFT JOIN t
7790: 39 32 20 4f 4e 20 61 3d 32 20 41 4e 44 20 62 3d  92 ON a=2 AND b=
77a0: 33 20 57 48 45 52 45 20 79 20 49 53 20 4e 55 4c  3 WHERE y IS NUL
77b0: 4c 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 38 20  L;.    SELECT 8 
77c0: 46 52 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f  FROM t91 LEFT JO
77d0: 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32 32 20 4f  IN t92 ON a=22 O
77e0: 52 20 62 3d 33 33 20 57 48 45 52 45 20 79 20 49  R b=33 WHERE y I
77f0: 53 20 4e 55 4c 4c 3b 0a 20 20 20 20 53 45 4c 45  S NULL;.    SELE
7800: 43 54 20 39 20 46 52 4f 4d 20 74 39 31 20 4c 45  CT 9 FROM t91 LE
7810: 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 61  FT JOIN t92 ON a
7820: 3d 32 32 20 41 4e 44 20 62 3d 33 33 20 57 48 45  =22 AND b=33 WHE
7830: 52 45 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20 20  RE y IS NULL;.  
7840: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 38 20 39  }.} {1 2 3 4 8 9
7850: 7d 0a 0a 23 20 46 69 78 20 66 6f 72 20 74 69 63  }..# Fix for tic
7860: 6b 65 74 20 5b 62 63 38 37 38 32 34 36 65 61 66  ket [bc878246eaf
7870: 65 30 66 35 32 63 35 31 39 65 32 39 30 34 39 62  e0f52c519e29049b
7880: 32 66 65 34 61 39 39 34 39 31 62 32 37 5d 0a 23  2fe4a99491b27].#
7890: 20 49 6e 63 6f 72 72 65 63 74 20 72 65 73 75 6c   Incorrect resul
78a0: 74 20 77 68 65 6e 20 4f 52 20 69 73 20 75 73 65  t when OR is use
78b0: 64 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 74  d in a join to t
78c0: 68 65 20 72 69 67 68 74 20 6f 66 20 61 20 4c 45  he right of a LE
78d0: 46 54 20 4a 4f 49 4e 0a 23 0a 64 6f 5f 74 65 73  FT JOIN.#.do_tes
78e0: 74 20 77 68 65 72 65 39 2d 31 30 2e 31 20 7b 0a  t where9-10.1 {.
78f0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
7900: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30  CREATE TABLE t10
7910: 31 20 28 69 64 20 49 4e 54 45 47 45 52 20 50 52  1 (id INTEGER PR
7920: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
7930: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30 31  INSERT INTO t101
7940: 20 56 41 4c 55 45 53 20 28 31 29 3b 0a 20 20 20   VALUES (1);.   
7950: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
7960: 31 30 31 20 41 53 20 74 30 0a 20 20 20 20 20 20  101 AS t0.      
7970: 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 30     LEFT JOIN t10
7980: 31 20 41 53 20 74 31 20 4f 4e 20 74 31 2e 69 64  1 AS t1 ON t1.id
7990: 20 42 45 54 57 45 45 4e 20 31 30 20 41 4e 44 20   BETWEEN 10 AND 
79a0: 32 30 0a 20 20 20 20 20 20 20 20 20 4a 4f 49 4e  20.         JOIN
79b0: 20 74 31 30 31 20 41 53 20 74 32 20 4f 4e 20 28   t101 AS t2 ON (
79c0: 74 32 2e 69 64 20 3d 20 74 30 2e 69 64 20 4f 52  t2.id = t0.id OR
79d0: 20 28 74 32 2e 69 64 3c 3e 35 35 35 20 41 4e 44   (t2.id<>555 AND
79e0: 20 74 32 2e 69 64 3d 74 31 2e 69 64 29 29 3b 0a   t2.id=t1.id));.
79f0: 20 20 7d 0a 7d 20 7b 31 20 7b 7d 20 31 7d 0a 64    }.} {1 {} 1}.d
7a00: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 31 30  o_test where9-10
7a10: 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .2 {.  db eval {
7a20: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
7a30: 45 20 74 31 30 32 20 28 69 64 20 54 45 58 54 20  E t102 (id TEXT 
7a40: 55 4e 49 51 55 45 20 4e 4f 54 20 4e 55 4c 4c 29  UNIQUE NOT NULL)
7a50: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
7a60: 4f 20 74 31 30 32 20 56 41 4c 55 45 53 20 28 27  O t102 VALUES ('
7a70: 31 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  1');.    SELECT 
7a80: 2a 20 46 52 4f 4d 20 74 31 30 32 20 41 53 20 74  * FROM t102 AS t
7a90: 30 0a 20 20 20 20 20 20 20 20 20 4c 45 46 54 20  0.         LEFT 
7aa0: 4a 4f 49 4e 20 74 31 30 32 20 41 53 20 74 31 20  JOIN t102 AS t1 
7ab0: 4f 4e 20 74 31 2e 69 64 20 47 4c 4f 42 20 27 61  ON t1.id GLOB 'a
7ac0: 62 63 25 27 0a 20 20 20 20 20 20 20 20 20 4a 4f  bc%'.         JO
7ad0: 49 4e 20 74 31 30 32 20 41 53 20 74 32 20 4f 4e  IN t102 AS t2 ON
7ae0: 20 28 74 32 2e 69 64 20 3d 20 74 30 2e 69 64 20   (t2.id = t0.id 
7af0: 4f 52 20 28 74 32 2e 69 64 3c 3e 35 35 35 20 41  OR (t2.id<>555 A
7b00: 4e 44 20 74 32 2e 69 64 3d 74 31 2e 69 64 29 29  ND t2.id=t1.id))
7b10: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 7d 20 31 7d  ;.  }.} {1 {} 1}
7b20: 0a 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  ....finish_test.