/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 2c554b97bbdb2fdf26c57099f60db8a52bfcf7c147f2c256f9798fa0e267ca85:


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 49 4e 44 45 58  .       |--INDEX
3950: 20 31 0a 20 20 20 20 20 20 20 7c 20 20 60 2d 2d   1.       |  `--
3960: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 32 20  SEARCH TABLE t2 
3970: 55 53 49 4e 47 20 49 4e 44 45 58 20 74 32 64 20  USING INDEX t2d 
3980: 28 64 3d 3f 29 0a 20 20 20 20 20 20 20 60 2d 2d  (d=?).       `--
3990: 49 4e 44 45 58 20 33 0a 20 20 20 20 20 20 20 20  INDEX 3.        
39a0: 20 20 60 2d 2d 53 45 41 52 43 48 20 54 41 42 4c    `--SEARCH TABL
39b0: 45 20 74 32 20 55 53 49 4e 47 20 43 4f 56 45 52  E t2 USING COVER
39c0: 49 4e 47 20 49 4e 44 45 58 20 74 32 66 20 28 66  ING INDEX t2f (f
39d0: 3d 3f 29 0a 20 20 7d 5d 0a 20 20 64 6f 5f 65 71  =?).  }].  do_eq
39e0: 70 5f 74 65 73 74 20 77 68 65 72 65 39 2d 33 2e  p_test where9-3.
39f0: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  2 {.    SELECT c
3a00: 6f 61 6c 65 73 63 65 28 74 32 2e 61 2c 39 39 39  oalesce(t2.a,999
3a10: 39 29 0a 20 20 20 20 46 52 4f 4d 20 74 31 20 4c  9).    FROM t1 L
3a20: 45 46 54 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 28  EFT JOIN t2 ON (
3a30: 74 31 2e 63 2b 31 3d 74 32 2e 63 20 41 4e 44 20  t1.c+1=t2.c AND 
3a40: 74 31 2e 64 3d 74 32 2e 64 29 20 4f 52 20 28 74  t1.d=t2.d) OR (t
3a50: 31 2e 66 7c 7c 27 78 27 29 3d 74 32 2e 66 0a 20  1.f||'x')=t2.f. 
3a60: 20 20 20 57 48 45 52 45 20 74 31 2e 61 3d 38 30     WHERE t1.a=80
3a70: 0a 20 20 7d 20 5b 73 74 72 69 6e 67 20 6d 61 70  .  } [string map
3a80: 20 7b 22 5c 6e 20 20 22 20 5c 6e 7d 20 7b 0a 20   {"\n  " \n} {. 
3a90: 20 20 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20     QUERY PLAN.  
3aa0: 20 20 7c 2d 2d 53 45 41 52 43 48 20 54 41 42 4c    |--SEARCH TABL
3ab0: 45 20 74 31 20 55 53 49 4e 47 20 49 4e 54 45 47  E t1 USING INTEG
3ac0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 28  ER PRIMARY KEY (
3ad0: 72 6f 77 69 64 3d 3f 29 0a 20 20 20 20 60 2d 2d  rowid=?).    `--
3ae0: 4d 55 4c 54 49 2d 49 4e 44 45 58 20 4f 52 0a 20  MULTI-INDEX OR. 
3af0: 20 20 20 20 20 20 7c 2d 2d 49 4e 44 45 58 20 31        |--INDEX 1
3b00: 0a 20 20 20 20 20 20 20 7c 20 20 60 2d 2d 53 45  .       |  `--SE
3b10: 41 52 43 48 20 54 41 42 4c 45 20 74 32 20 55 53  ARCH TABLE t2 US
3b20: 49 4e 47 20 49 4e 44 45 58 20 74 32 64 20 28 64  ING INDEX t2d (d
3b30: 3d 3f 29 0a 20 20 20 20 20 20 20 60 2d 2d 49 4e  =?).       `--IN
3b40: 44 45 58 20 32 0a 20 20 20 20 20 20 20 20 20 20  DEX 2.          
3b50: 60 2d 2d 53 45 41 52 43 48 20 54 41 42 4c 45 20  `--SEARCH TABLE 
3b60: 74 32 20 55 53 49 4e 47 20 43 4f 56 45 52 49 4e  t2 USING COVERIN
3b70: 47 20 49 4e 44 45 58 20 74 32 66 20 28 66 3d 3f  G INDEX t2f (f=?
3b80: 29 0a 20 20 7d 5d 0a 7d 20 0a 0a 23 20 4d 61 6b  ).  }].} ..# Mak
3b90: 65 20 73 75 72 65 20 74 68 61 74 20 49 4e 44 45  e sure that INDE
3ba0: 58 45 44 20 42 59 20 61 6e 64 20 6d 75 6c 74 69  XED BY and multi
3bb0: 2d 69 6e 64 65 78 20 4f 52 20 63 6c 61 75 73 65  -index OR clause
3bc0: 73 20 70 6c 61 79 20 77 65 6c 6c 20 77 69 74 68  s play well with
3bd0: 0a 23 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  .# one another..
3be0: 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  #.do_test where9
3bf0: 2d 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73  -4.1 {.  count_s
3c00: 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43  teps {.    SELEC
3c10: 54 20 61 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  T a FROM t1.    
3c20: 20 57 48 45 52 45 20 62 3e 31 30 30 30 0a 20 20   WHERE b>1000.  
3c30: 20 20 20 20 20 41 4e 44 20 28 63 3d 33 31 30 33       AND (c=3103
3c40: 31 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a  1 OR d IS NULL).
3c50: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61       ORDER BY +a
3c60: 0a 20 20 7d 0a 7d 20 7b 39 32 20 39 33 20 39 37  .  }.} {92 93 97
3c70: 20 73 63 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a   scan 0 sort 1}.
3c80: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 34  do_test where9-4
3c90: 2e 32 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65  .2 {.  count_ste
3ca0: 70 73 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ps {.    SELECT 
3cb0: 61 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57  a FROM t1.     W
3cc0: 48 45 52 45 20 62 3e 31 30 30 30 0a 20 20 20 20  HERE b>1000.    
3cd0: 20 20 20 41 4e 44 20 28 63 3d 33 31 30 33 31 20     AND (c=31031 
3ce0: 4f 52 20 2b 64 20 49 53 20 4e 55 4c 4c 29 0a 20  OR +d IS NULL). 
3cf0: 20 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61 0a      ORDER BY +a.
3d00: 20 20 7d 0a 7d 20 7b 39 32 20 39 33 20 39 37 20    }.} {92 93 97 
3d10: 73 63 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64  scan 0 sort 1}.d
3d20: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 34 2e  o_test where9-4.
3d30: 33 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70  3 {.  count_step
3d40: 73 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  s {.    SELECT a
3d50: 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48   FROM t1.     WH
3d60: 45 52 45 20 2b 62 3e 31 30 30 30 0a 20 20 20 20  ERE +b>1000.    
3d70: 20 20 20 41 4e 44 20 28 63 3d 33 31 30 33 31 20     AND (c=31031 
3d80: 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20  OR d IS NULL).  
3d90: 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61 0a 20     ORDER BY +a. 
3da0: 20 7d 0a 7d 20 7b 39 32 20 39 33 20 39 37 20 73   }.} {92 93 97 s
3db0: 63 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f  can 0 sort 1}.do
3dc0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 34 2e 34  _test where9-4.4
3dd0: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
3de0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
3df0: 46 52 4f 4d 20 74 31 20 49 4e 44 45 58 45 44 20  FROM t1 INDEXED 
3e00: 42 59 20 74 31 62 0a 20 20 20 20 20 57 48 45 52  BY t1b.     WHER
3e10: 45 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20  E b>1000.       
3e20: 41 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20  AND (c=31031 OR 
3e30: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20  d IS NULL).     
3e40: 4f 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a  ORDER BY +a.  }.
3e50: 7d 20 7b 39 32 20 39 33 20 39 37 20 73 63 61 6e  } {92 93 97 scan
3e60: 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65   0 sort 1}.do_te
3e70: 73 74 20 77 68 65 72 65 39 2d 34 2e 35 20 7b 0a  st where9-4.5 {.
3e80: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3e90: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
3ea0: 31 20 49 4e 44 45 58 45 44 20 42 59 20 74 31 62  1 INDEXED BY t1b
3eb0: 0a 20 20 20 20 20 57 48 45 52 45 20 2b 62 3e 31  .     WHERE +b>1
3ec0: 30 30 30 0a 20 20 20 20 20 20 20 41 4e 44 20 28  000.       AND (
3ed0: 63 3d 33 31 30 33 31 20 4f 52 20 64 20 49 53 20  c=31031 OR d IS 
3ee0: 4e 55 4c 4c 29 0a 20 20 20 20 20 4f 52 44 45 52  NULL).     ORDER
3ef0: 20 42 59 20 2b 61 0a 20 20 7d 0a 7d 20 7b 31 20   BY +a.  }.} {1 
3f00: 7b 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69  {no query soluti
3f10: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  on}}.do_test whe
3f20: 72 65 39 2d 34 2e 36 20 7b 0a 20 20 63 6f 75 6e  re9-4.6 {.  coun
3f30: 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45  t_steps {.    SE
3f40: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 4e  LECT a FROM t1 N
3f50: 4f 54 20 49 4e 44 45 58 45 44 0a 20 20 20 20 20  OT INDEXED.     
3f60: 57 48 45 52 45 20 62 3e 31 30 30 30 0a 20 20 20  WHERE b>1000.   
3f70: 20 20 20 20 41 4e 44 20 28 63 3d 33 31 30 33 31      AND (c=31031
3f80: 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20   OR d IS NULL). 
3f90: 20 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61 0a      ORDER BY +a.
3fa0: 20 20 7d 0a 7d 20 7b 39 32 20 39 33 20 39 37 20    }.} {92 93 97 
3fb0: 73 63 61 6e 20 39 38 20 73 6f 72 74 20 31 7d 0a  scan 98 sort 1}.
3fc0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 34  do_test where9-4
3fd0: 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .7 {.  catchsql 
3fe0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
3ff0: 52 4f 4d 20 74 31 20 49 4e 44 45 58 45 44 20 42  ROM t1 INDEXED B
4000: 59 20 74 31 63 0a 20 20 20 20 20 57 48 45 52 45  Y t1c.     WHERE
4010: 20 62 3e 31 30 30 30 0a 20 20 20 20 20 20 20 41   b>1000.       A
4020: 4e 44 20 28 63 3d 33 31 30 33 31 20 4f 52 20 64  ND (c=31031 OR d
4030: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20 4f   IS NULL).     O
4040: 52 44 45 52 20 42 59 20 2b 61 0a 20 20 7d 0a 7d  RDER BY +a.  }.}
4050: 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f   {1 {no query so
4060: 6c 75 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74  lution}}.do_test
4070: 20 77 68 65 72 65 39 2d 34 2e 38 20 7b 0a 20 20   where9-4.8 {.  
4080: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
4090: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
40a0: 49 4e 44 45 58 45 44 20 42 59 20 74 31 64 0a 20  INDEXED BY t1d. 
40b0: 20 20 20 20 57 48 45 52 45 20 62 3e 31 30 30 30      WHERE b>1000
40c0: 0a 20 20 20 20 20 20 20 41 4e 44 20 28 63 3d 33  .       AND (c=3
40d0: 31 30 33 31 20 4f 52 20 64 20 49 53 20 4e 55 4c  1031 OR d IS NUL
40e0: 4c 29 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  L).     ORDER BY
40f0: 20 2b 61 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f   +a.  }.} {1 {no
4100: 20 71 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e 7d   query solution}
4110: 7d 0a 0a 23 20 54 68 65 20 28 63 3d 33 31 30 33  }..# The (c=3103
4120: 31 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 20  1 OR d IS NULL) 
4130: 63 6c 61 75 73 65 20 69 73 20 70 72 65 66 65 72  clause is prefer
4140: 72 65 64 20 6f 76 65 72 20 62 3e 31 30 30 30 20  red over b>1000 
4150: 62 65 63 61 75 73 65 0a 23 20 74 68 65 20 66 6f  because.# the fo
4160: 72 6d 65 72 20 69 73 20 61 6e 20 65 71 75 61 6c  rmer is an equal
4170: 69 74 79 20 74 65 73 74 20 77 68 69 63 68 20 69  ity test which i
4180: 73 20 65 78 70 65 63 74 65 64 20 74 6f 20 72 65  s expected to re
4190: 74 75 72 6e 20 66 65 77 65 72 20 72 6f 77 73 2e  turn fewer rows.
41a0: 0a 23 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 77  .#.do_eqp_test w
41b0: 68 65 72 65 39 2d 35 2e 31 20 7b 0a 20 20 53 45  here9-5.1 {.  SE
41c0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
41d0: 48 45 52 45 20 62 3e 31 30 30 30 20 41 4e 44 20  HERE b>1000 AND 
41e0: 28 63 3d 33 31 30 33 31 20 4f 52 20 64 20 49 53  (c=31031 OR d IS
41f0: 20 4e 55 4c 4c 29 0a 7d 20 7b 0a 20 20 51 55 45   NULL).} {.  QUE
4200: 52 59 20 50 4c 41 4e 0a 20 20 60 2d 2d 4d 55 4c  RY PLAN.  `--MUL
4210: 54 49 2d 49 4e 44 45 58 20 4f 52 0a 20 20 20 20  TI-INDEX OR.    
4220: 20 7c 2d 2d 49 4e 44 45 58 20 31 0a 20 20 20 20   |--INDEX 1.    
4230: 20 7c 20 20 60 2d 2d 53 45 41 52 43 48 20 54 41   |  `--SEARCH TA
4240: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44  BLE t1 USING IND
4250: 45 58 20 74 31 63 20 28 63 3d 3f 29 0a 20 20 20  EX t1c (c=?).   
4260: 20 20 60 2d 2d 49 4e 44 45 58 20 32 0a 20 20 20    `--INDEX 2.   
4270: 20 20 20 20 20 60 2d 2d 53 45 41 52 43 48 20 54       `--SEARCH T
4280: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e  ABLE t1 USING IN
4290: 44 45 58 20 74 31 64 20 28 64 3d 3f 29 0a 7d 0a  DEX t1d (d=?).}.
42a0: 0a 23 20 49 6e 20 63 6f 6e 74 72 61 73 74 2c 20  .# In contrast, 
42b0: 62 3d 31 30 30 30 20 69 73 20 70 72 65 66 65 72  b=1000 is prefer
42c0: 72 65 64 20 6f 76 65 72 20 61 6e 79 20 4f 52 2d  red over any OR-
42d0: 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f 65 71 70  clause..#.do_eqp
42e0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 35 2e 32  _test where9-5.2
42f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52   {.  SELECT a FR
4300: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 31 30  OM t1 WHERE b=10
4310: 30 30 20 41 4e 44 20 28 63 3d 33 31 30 33 31 20  00 AND (c=31031 
4320: 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a 7d 20  OR d IS NULL).} 
4330: 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  {SEARCH TABLE t1
4340: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31 62   USING INDEX t1b
4350: 20 28 62 3d 3f 29 7d 0a 0a 23 20 4c 69 6b 65 77   (b=?)}..# Likew
4360: 69 73 65 2c 20 69 6e 65 71 75 61 6c 69 74 69 65  ise, inequalitie
4370: 73 20 69 6e 20 61 6e 20 41 4e 44 20 61 72 65 20  s in an AND are 
4380: 70 72 65 66 65 72 72 65 64 20 6f 76 65 72 20 69  preferred over i
4390: 6e 65 71 75 61 6c 69 74 69 65 73 20 69 6e 0a 23  nequalities in.#
43a0: 20 61 6e 20 4f 52 2e 0a 23 0a 64 6f 5f 65 71 70   an OR..#.do_eqp
43b0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 35 2e 33  _test where9-5.3
43c0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52   {.  SELECT a FR
43d0: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e 31 30  OM t1 WHERE b>10
43e0: 30 30 20 41 4e 44 20 28 63 3e 3d 33 31 30 33 31  00 AND (c>=31031
43f0: 20 4f 52 20 64 20 49 53 20 4e 55 4c 4c 29 0a 7d   OR d IS NULL).}
4400: 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74   {SEARCH TABLE t
4410: 31 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31  1 USING INDEX t1
4420: 62 20 28 62 3e 3f 29 7d 0a 0a 23 23 23 23 23 23  b (b>?)}..######
4430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4470: 23 23 23 23 23 23 0a 23 20 4d 61 6b 65 20 73 75  ######.# Make su
4480: 72 65 20 4f 52 2d 63 6c 61 75 73 65 73 20 77 6f  re OR-clauses wo
4490: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
44a0: 55 50 44 41 54 45 20 61 6e 64 20 44 45 4c 45 54  UPDATE and DELET
44b0: 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 64  E statements...d
44c0: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
44d0: 32 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  2.1 {.  db eval 
44e0: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
44f0: 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41   FROM t1 UNION A
4500: 4c 4c 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  LL SELECT a FROM
4510: 20 74 31 20 57 48 45 52 45 20 61 3e 3d 38 35 7d   t1 WHERE a>=85}
4520: 0a 7d 20 7b 39 39 20 38 35 20 38 36 20 38 37 20  .} {99 85 86 87 
4530: 38 38 20 38 39 20 39 30 20 39 31 20 39 32 20 39  88 89 90 91 92 9
4540: 33 20 39 34 20 39 35 20 39 36 20 39 37 20 39 38  3 94 95 96 97 98
4550: 20 39 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68   99}..do_test wh
4560: 65 72 65 39 2d 36 2e 32 2e 32 20 7b 20 20 20 3b  ere9-6.2.2 {   ;
4570: 23 20 44 65 6c 65 74 65 73 20 65 6e 74 72 69 65  # Deletes entrie
4580: 73 20 39 30 20 39 31 20 39 32 20 39 36 20 39 37  s 90 91 92 96 97
4590: 20 39 39 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70   99.  count_step
45a0: 73 20 7b 0a 20 20 20 20 20 42 45 47 49 4e 3b 0a  s {.     BEGIN;.
45b0: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
45c0: 20 74 31 0a 20 20 20 20 20 57 48 45 52 45 20 62   t1.     WHERE b
45d0: 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   IS NULL.       
45e0: 20 4f 52 20 63 20 49 53 20 4e 55 4c 4c 0a 20 20   OR c IS NULL.  
45f0: 20 20 20 20 20 20 4f 52 20 64 20 49 53 20 4e 55        OR d IS NU
4600: 4c 4c 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30  LL.  }.} {scan 0
4610: 20 73 6f 72 74 20 30 7d 0a 0a 64 6f 5f 74 65 73   sort 0}..do_tes
4620: 74 20 77 68 65 72 65 39 2d 36 2e 32 2e 33 20 7b  t where9-6.2.3 {
4630: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
4640: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
4650: 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41   FROM t1 UNION A
4660: 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20  LL.    SELECT a 
4670: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e  FROM t1 WHERE a>
4680: 3d 38 35 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  =85;.    ROLLBAC
4690: 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 33 20 38 35 20  K;.  }.} {93 85 
46a0: 38 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39  86 87 88 89 93 9
46b0: 34 20 39 35 20 39 38 7d 0a 0a 64 6f 5f 74 65 73  4 95 98}..do_tes
46c0: 74 20 77 68 65 72 65 39 2d 36 2e 32 2e 34 20 7b  t where9-6.2.4 {
46d0: 20 20 20 3b 23 20 44 65 6c 65 74 65 73 20 65 6e     ;# Deletes en
46e0: 74 72 69 65 73 20 39 30 20 39 31 20 39 32 20 39  tries 90 91 92 9
46f0: 36 20 39 37 20 39 39 0a 20 20 63 6f 75 6e 74 5f  6 97 99.  count_
4700: 73 74 65 70 73 20 7b 0a 20 20 20 20 20 42 45 47  steps {.     BEG
4710: 49 4e 3b 0a 20 20 20 20 20 44 45 4c 45 54 45 20  IN;.     DELETE 
4720: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45  FROM t1.     WHE
4730: 52 45 20 2b 62 20 49 53 20 4e 55 4c 4c 0a 20 20  RE +b IS NULL.  
4740: 20 20 20 20 20 20 4f 52 20 63 20 49 53 20 4e 55        OR c IS NU
4750: 4c 4c 0a 20 20 20 20 20 20 20 20 4f 52 20 64 20  LL.        OR d 
4760: 49 53 20 4e 55 4c 4c 0a 20 20 7d 0a 7d 20 7b 73  IS NULL.  }.} {s
4770: 63 61 6e 20 39 38 20 73 6f 72 74 20 30 7d 0a 0a  can 98 sort 0}..
4780: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
4790: 2e 32 2e 35 20 7b 0a 20 20 64 62 20 65 76 61 6c  .2.5 {.  db eval
47a0: 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 63   {.     SELECT c
47b0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
47c0: 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53  UNION ALL.     S
47d0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20  ELECT a FROM t1 
47e0: 57 48 45 52 45 20 61 3e 3d 38 35 3b 0a 20 20 20  WHERE a>=85;.   
47f0: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a    ROLLBACK;.  }.
4800: 7d 20 7b 39 33 20 38 35 20 38 36 20 38 37 20 38  } {93 85 86 87 8
4810: 38 20 38 39 20 39 33 20 39 34 20 39 35 20 39 38  8 89 93 94 95 98
4820: 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  }..do_test where
4830: 39 2d 36 2e 32 2e 36 20 7b 0a 20 20 63 6f 75 6e  9-6.2.6 {.  coun
4840: 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 20 42  t_steps {.     B
4850: 45 47 49 4e 3b 0a 20 20 20 20 20 55 50 44 41 54  EGIN;.     UPDAT
4860: 45 20 74 31 20 53 45 54 20 61 3d 61 2b 31 30 30  E t1 SET a=a+100
4870: 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 20 49  .     WHERE (b I
4880: 53 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20  S NULL.         
4890: 20 20 20 4f 52 20 63 20 49 53 20 4e 55 4c 4c 0a     OR c IS NULL.
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 64              OR d
48b0: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20   IS NULL).      
48c0: 20 41 4e 44 20 61 21 3d 39 32 0a 20 20 20 20 20   AND a!=92.     
48d0: 20 20 41 4e 44 20 61 21 3d 39 37 0a 20 20 7d 0a    AND a!=97.  }.
48e0: 7d 20 7b 73 63 61 6e 20 30 20 73 6f 72 74 20 30  } {scan 0 sort 0
48f0: 7d 20 20 20 3b 23 20 41 64 64 20 31 30 30 20 74  }   ;# Add 100 t
4900: 6f 20 65 6e 74 72 69 65 73 20 39 30 20 39 31 20  o entries 90 91 
4910: 39 36 20 39 39 0a 0a 64 6f 5f 74 65 73 74 20 77  96 99..do_test w
4920: 68 65 72 65 39 2d 36 2e 32 2e 37 20 7b 0a 20 20  here9-6.2.7 {.  
4930: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 53  db eval {.     S
4940: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
4950: 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c  ROM t1 UNION ALL
4960: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  .     SELECT a F
4970: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 3d  ROM t1 WHERE a>=
4980: 38 35 3b 0a 20 20 20 20 20 52 4f 4c 4c 42 41 43  85;.     ROLLBAC
4990: 4b 0a 20 20 7d 0a 7d 20 7b 39 39 20 38 35 20 38  K.  }.} {99 85 8
49a0: 36 20 38 37 20 38 38 20 38 39 20 39 32 20 39 33  6 87 88 89 92 93
49b0: 20 39 34 20 39 35 20 39 37 20 39 38 20 31 39 30   94 95 97 98 190
49c0: 20 31 39 31 20 31 39 36 20 31 39 39 7d 0a 0a 64   191 196 199}..d
49d0: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
49e0: 32 2e 38 20 7b 20 20 20 3b 23 20 44 65 6c 65 74  2.8 {   ;# Delet
49f0: 65 73 20 65 6e 74 72 69 65 73 20 39 30 20 39 31  es entries 90 91
4a00: 20 39 32 20 39 37 20 39 39 0a 20 20 63 6f 75 6e   92 97 99.  coun
4a10: 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 20 42  t_steps {.     B
4a20: 45 47 49 4e 3b 0a 20 20 20 20 20 44 45 4c 45 54  EGIN;.     DELET
4a30: 45 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57  E FROM t1.     W
4a40: 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 0a  HERE (b IS NULL.
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 63              OR c
4a60: 20 49 53 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   IS NULL.       
4a70: 20 20 20 20 20 4f 52 20 64 20 49 53 20 4e 55 4c       OR d IS NUL
4a80: 4c 29 0a 20 20 20 20 20 20 20 41 4e 44 20 61 21  L).       AND a!
4a90: 3d 39 36 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20  =96.  }.} {scan 
4aa0: 30 20 73 6f 72 74 20 30 7d 0a 0a 64 6f 5f 74 65  0 sort 0}..do_te
4ab0: 73 74 20 77 68 65 72 65 39 2d 36 2e 32 2e 39 20  st where9-6.2.9 
4ac0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
4ad0: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
4ae0: 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e  *) FROM t1 UNION
4af0: 20 41 4c 4c 20 53 45 4c 45 43 54 20 61 20 46 52   ALL SELECT a FR
4b00: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 3d 38  OM t1 WHERE a>=8
4b10: 35 3b 0a 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b  5;.     ROLLBACK
4b20: 3b 0a 20 20 7d 0a 7d 20 7b 39 34 20 38 35 20 38  ;.  }.} {94 85 8
4b30: 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39 34  6 87 88 89 93 94
4b40: 20 39 35 20 39 36 20 39 38 7d 0a 0a 64 6f 5f 74   95 96 98}..do_t
4b50: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 33 2e 31  est where9-6.3.1
4b60: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
4b70: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
4b80: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
4b90: 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 20 49  .     WHERE (b I
4ba0: 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54  S NULL AND c NOT
4bb0: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
4bc0: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
4bd0: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
4be0: 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64   c IS NULL AND d
4bf0: 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20   NOT NULL).     
4c00: 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c     OR (b NOT NUL
4c10: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
4c20: 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a   AND d IS NULL).
4c30: 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f    }.} {scan 0 so
4c40: 72 74 20 30 7d 20 20 20 3b 23 20 44 45 4c 45 54  rt 0}   ;# DELET
4c50: 45 73 20 72 6f 77 73 20 39 30 20 39 31 20 39 32  Es rows 90 91 92
4c60: 20 39 37 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   97.do_test wher
4c70: 65 39 2d 36 2e 33 2e 32 20 7b 0a 20 20 64 62 20  e9-6.3.2 {.  db 
4c80: 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  eval {.    SELEC
4c90: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
4ca0: 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20  t1 UNION ALL.   
4cb0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
4cc0: 31 20 57 48 45 52 45 20 61 20 42 45 54 57 45 45  1 WHERE a BETWEE
4cd0: 4e 20 38 35 20 41 4e 44 20 31 30 30 3b 0a 20 20  N 85 AND 100;.  
4ce0: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a    ROLLBACK;.  }.
4cf0: 7d 20 7b 39 35 20 38 35 20 38 36 20 38 37 20 38  } {95 85 86 87 8
4d00: 38 20 38 39 20 39 33 20 39 34 20 39 35 20 39 36  8 89 93 94 95 96
4d10: 20 39 38 20 39 39 7d 0a 0a 64 6f 5f 74 65 73 74   98 99}..do_test
4d20: 20 77 68 65 72 65 39 2d 36 2e 33 2e 33 20 7b 0a   where9-6.3.3 {.
4d30: 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a    count_steps {.
4d40: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 55      BEGIN;.    U
4d50: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d 61  PDATE t1 SET a=a
4d60: 2b 31 30 30 0a 20 20 20 20 20 57 48 45 52 45 20  +100.     WHERE 
4d70: 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63  (b IS NULL AND c
4d80: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20   NOT NULL AND d 
4d90: 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20  NOT NULL).      
4da0: 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c    OR (b NOT NULL
4db0: 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c 20 41   AND c IS NULL A
4dc0: 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20  ND d NOT NULL). 
4dd0: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
4de0: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20   NULL AND c NOT 
4df0: 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e 55  NULL AND d IS NU
4e00: 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20  LL).  }.} {scan 
4e10: 30 20 73 6f 72 74 20 30 7d 20 20 20 3b 23 20 41  0 sort 0}   ;# A
4e20: 64 64 20 31 30 30 20 74 6f 20 72 6f 77 69 64 73  dd 100 to rowids
4e30: 20 39 30 20 39 31 20 39 32 20 39 37 0a 64 6f 5f   90 91 92 97.do_
4e40: 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 33 2e  test where9-6.3.
4e50: 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  4 {.  db eval {.
4e60: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
4e70: 28 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f  (*) FROM t1 UNIO
4e80: 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
4e90: 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   a FROM t1 WHERE
4ea0: 20 61 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e   a BETWEEN 85 AN
4eb0: 44 20 32 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42  D 200;.    ROLLB
4ec0: 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 39 20 38  ACK;.  }.} {99 8
4ed0: 35 20 38 36 20 38 37 20 38 38 20 38 39 20 39 33  5 86 87 88 89 93
4ee0: 20 39 34 20 39 35 20 39 36 20 39 38 20 39 39 20   94 95 96 98 99 
4ef0: 31 39 30 20 31 39 31 20 31 39 32 20 31 39 37 7d  190 191 192 197}
4f00: 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  ..do_test where9
4f10: 2d 36 2e 33 2e 35 20 7b 0a 20 20 63 6f 75 6e 74  -6.3.5 {.  count
4f20: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 42 45 47  _steps {.    BEG
4f30: 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  IN;.    DELETE F
4f40: 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52  ROM t1.     WHER
4f50: 45 20 28 2b 62 20 49 53 20 4e 55 4c 4c 20 41 4e  E (+b IS NULL AN
4f60: 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  D c NOT NULL AND
4f70: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
4f80: 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e       OR (b NOT N
4f90: 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c  ULL AND c IS NUL
4fa0: 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c  L AND d NOT NULL
4fb0: 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20  ).        OR (b 
4fc0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e  NOT NULL AND c N
4fd0: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53  OT NULL AND d IS
4fe0: 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63   NULL).  }.} {sc
4ff0: 61 6e 20 39 38 20 73 6f 72 74 20 30 7d 20 20 20  an 98 sort 0}   
5000: 3b 23 20 44 45 4c 45 54 45 73 20 72 6f 77 73 20  ;# DELETEs rows 
5010: 39 30 20 39 31 20 39 32 20 39 37 0a 64 6f 5f 74  90 91 92 97.do_t
5020: 65 73 74 20 77 68 65 72 65 39 2d 36 2e 33 2e 36  est where9-6.3.6
5030: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
5040: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
5050: 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e  *) FROM t1 UNION
5060: 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
5070: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
5080: 61 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44  a BETWEEN 85 AND
5090: 20 31 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41   100;.    ROLLBA
50a0: 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 35 20 38 35  CK;.  }.} {95 85
50b0: 20 38 36 20 38 37 20 38 38 20 38 39 20 39 33 20   86 87 88 89 93 
50c0: 39 34 20 39 35 20 39 36 20 39 38 20 39 39 7d 0a  94 95 96 98 99}.
50d0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
50e0: 36 2e 33 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 5f  6.3.7 {.  count_
50f0: 73 74 65 70 73 20 7b 0a 20 20 20 20 42 45 47 49  steps {.    BEGI
5100: 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31  N;.    UPDATE t1
5110: 20 53 45 54 20 61 3d 61 2b 31 30 30 0a 20 20 20   SET a=a+100.   
5120: 20 20 57 48 45 52 45 20 28 62 20 49 53 20 4e 55    WHERE (b IS NU
5130: 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c  LL AND c NOT NUL
5140: 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c  L AND d NOT NULL
5150: 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20  ).        OR (b 
5160: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 2b 63 20  NOT NULL AND +c 
5170: 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f  IS NULL AND d NO
5180: 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20  T NULL).        
5190: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
51a0: 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e  ND c NOT NULL AN
51b0: 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d  D d IS NULL).  }
51c0: 0a 7d 20 7b 73 63 61 6e 20 39 38 20 73 6f 72 74  .} {scan 98 sort
51d0: 20 30 7d 20 20 20 3b 23 20 41 64 64 20 31 30 30   0}   ;# Add 100
51e0: 20 74 6f 20 72 6f 77 69 64 73 20 39 30 20 39 31   to rowids 90 91
51f0: 20 39 32 20 39 37 0a 64 6f 5f 74 65 73 74 20 77   92 97.do_test w
5200: 68 65 72 65 39 2d 36 2e 33 2e 38 20 7b 0a 20 20  here9-6.3.8 {.  
5210: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45  db eval {.    SE
5220: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
5230: 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a  OM t1 UNION ALL.
5240: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
5250: 4d 20 74 31 20 57 48 45 52 45 20 61 20 42 45 54  M t1 WHERE a BET
5260: 57 45 45 4e 20 38 35 20 41 4e 44 20 31 30 30 3b  WEEN 85 AND 100;
5270: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
5280: 20 7d 0a 7d 20 7b 39 39 20 38 35 20 38 36 20 38   }.} {99 85 86 8
5290: 37 20 38 38 20 38 39 20 39 33 20 39 34 20 39 35  7 88 89 93 94 95
52a0: 20 39 36 20 39 38 20 39 39 7d 0a 0a 0a 64 6f 5f   96 98 99}...do_
52b0: 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 34 2e  test where9-6.4.
52c0: 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70  1 {.  count_step
52d0: 73 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  s {.    BEGIN;. 
52e0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
52f0: 31 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 3e  1.     WHERE (b>
5300: 3d 39 35 30 20 41 4e 44 20 62 3c 3d 31 30 31 30  =950 AND b<=1010
5310: 29 20 4f 52 20 28 62 20 49 53 20 4e 55 4c 4c 20  ) OR (b IS NULL 
5320: 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND c NOT NULL).
5330: 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f    }.} {scan 0 so
5340: 72 74 20 30 7d 20 20 3b 23 20 44 45 4c 45 54 45  rt 0}  ;# DELETE
5350: 20 72 6f 77 73 20 38 37 20 38 38 20 38 39 20 39   rows 87 88 89 9
5360: 30 20 39 31 0a 64 6f 5f 74 65 73 74 20 77 68 65  0 91.do_test whe
5370: 72 65 39 2d 36 2e 34 2e 32 20 7b 0a 20 20 64 62  re9-6.4.2 {.  db
5380: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
5390: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
53a0: 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20   t1 UNION ALL.  
53b0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
53c0: 74 31 20 57 48 45 52 45 20 61 20 42 45 54 57 45  t1 WHERE a BETWE
53d0: 45 4e 20 38 35 20 41 4e 44 20 31 30 30 3b 0a 20  EN 85 AND 100;. 
53e0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
53f0: 0a 7d 20 7b 39 34 20 38 35 20 38 36 20 39 32 20  .} {94 85 86 92 
5400: 39 33 20 39 34 20 39 35 20 39 36 20 39 37 20 39  93 94 95 96 97 9
5410: 38 20 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68  8 99}.do_test wh
5420: 65 72 65 39 2d 36 2e 34 2e 33 20 7b 0a 20 20 63  ere9-6.4.3 {.  c
5430: 6f 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20  ount_steps {.   
5440: 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44 41   BEGIN;.    UPDA
5450: 54 45 20 74 31 20 53 45 54 20 61 3d 61 2b 31 30  TE t1 SET a=a+10
5460: 30 0a 20 20 20 20 20 57 48 45 52 45 20 28 62 3e  0.     WHERE (b>
5470: 3d 39 35 30 20 41 4e 44 20 62 3c 3d 31 30 31 30  =950 AND b<=1010
5480: 29 20 4f 52 20 28 62 20 49 53 20 4e 55 4c 4c 20  ) OR (b IS NULL 
5490: 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND c NOT NULL).
54a0: 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73 6f    }.} {scan 0 so
54b0: 72 74 20 30 7d 20 20 3b 23 20 41 64 64 20 31 30  rt 0}  ;# Add 10
54c0: 30 20 74 6f 20 72 6f 77 69 64 73 20 38 37 20 38  0 to rowids 87 8
54d0: 38 20 38 39 20 39 30 20 39 31 0a 64 6f 5f 74 65  8 89 90 91.do_te
54e0: 73 74 20 77 68 65 72 65 39 2d 36 2e 34 2e 34 20  st where9-6.4.4 
54f0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
5500: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
5510: 29 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20  ) FROM t1 UNION 
5520: 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61  ALL.    SELECT a
5530: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
5540: 20 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20   BETWEEN 85 AND 
5550: 31 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  100;.    ROLLBAC
5560: 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 39 20 38 35 20  K;.  }.} {99 85 
5570: 38 36 20 39 32 20 39 33 20 39 34 20 39 35 20 39  86 92 93 94 95 9
5580: 36 20 39 37 20 39 38 20 39 39 7d 0a 0a 0a 64 6f  6 97 98 99}...do
5590: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 35  _test where9-6.5
55a0: 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65  .1 {.  count_ste
55b0: 70 73 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ps {.    BEGIN;.
55c0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
55d0: 74 31 0a 20 20 20 20 20 57 48 45 52 45 20 61 3d  t1.     WHERE a=
55e0: 38 33 0a 20 20 20 20 20 20 20 20 4f 52 20 62 3d  83.        OR b=
55f0: 39 31 33 0a 20 20 20 20 20 20 20 20 4f 52 20 63  913.        OR c
5600: 3d 32 38 30 32 38 0a 20 20 20 20 20 20 20 20 4f  =28028.        O
5610: 52 20 28 64 3e 3d 38 32 20 41 4e 44 20 64 3c 38  R (d>=82 AND d<8
5620: 33 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 65  3).        OR (e
5630: 3e 32 38 30 32 20 41 4e 44 20 65 3c 32 38 30 33  >2802 AND e<2803
5640: 29 20 0a 20 20 20 20 20 20 20 20 4f 52 20 66 3d  ) .        OR f=
5650: 27 66 67 68 69 6a 6b 6c 6d 6e 27 0a 20 20 20 20  'fghijklmn'.    
5660: 20 20 20 20 4f 52 20 67 3d 27 68 67 66 65 64 63      OR g='hgfedc
5670: 62 27 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30  b'.  }.} {scan 0
5680: 20 73 6f 72 74 20 30 7d 20 20 20 3b 23 20 20 44   sort 0}   ;#  D
5690: 45 4c 45 54 45 20 72 6f 77 73 20 35 20 33 31 20  ELETE rows 5 31 
56a0: 35 37 20 38 32 20 38 33 20 38 34 20 38 35 20 38  57 82 83 84 85 8
56b0: 36 20 38 37 0a 64 6f 5f 74 65 73 74 20 77 68 65  6 87.do_test whe
56c0: 72 65 39 2d 36 2e 35 2e 32 20 7b 0a 20 20 64 62  re9-6.5.2 {.  db
56d0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
56e0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
56f0: 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20   t1 UNION ALL.  
5700: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
5710: 74 31 20 57 48 45 52 45 20 61 20 49 4e 20 28 35  t1 WHERE a IN (5
5720: 2c 33 31 2c 35 37 2c 38 32 2c 38 33 2c 38 34 2c  ,31,57,82,83,84,
5730: 38 35 2c 38 36 2c 38 37 29 3b 0a 20 20 20 20 52  85,86,87);.    R
5740: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b  OLLBACK;.  }.} {
5750: 39 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65  90}..do_test whe
5760: 72 65 39 2d 36 2e 35 2e 33 20 7b 0a 20 20 63 6f  re9-6.5.3 {.  co
5770: 75 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20  unt_steps {.    
5780: 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44 41 54  BEGIN;.    UPDAT
5790: 45 20 74 31 20 53 45 54 20 61 3d 61 2b 31 30 30  E t1 SET a=a+100
57a0: 0a 20 20 20 20 20 57 48 45 52 45 20 61 3d 38 33  .     WHERE a=83
57b0: 0a 20 20 20 20 20 20 20 20 4f 52 20 62 3d 39 31  .        OR b=91
57c0: 33 0a 20 20 20 20 20 20 20 20 4f 52 20 63 3d 32  3.        OR c=2
57d0: 38 30 32 38 0a 20 20 20 20 20 20 20 20 4f 52 20  8028.        OR 
57e0: 28 64 3e 3d 38 32 20 41 4e 44 20 64 3c 38 33 29  (d>=82 AND d<83)
57f0: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 65 3e 32  .        OR (e>2
5800: 38 30 32 20 41 4e 44 20 65 3c 32 38 30 33 29 20  802 AND e<2803) 
5810: 0a 20 20 20 20 20 20 20 20 4f 52 20 66 3d 27 66  .        OR f='f
5820: 67 68 69 6a 6b 6c 6d 6e 27 0a 20 20 20 20 20 20  ghijklmn'.      
5830: 20 20 4f 52 20 67 3d 27 68 67 66 65 64 63 62 27    OR g='hgfedcb'
5840: 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e 20 30 20 73  .  }.} {scan 0 s
5850: 6f 72 74 20 30 7d 20 20 20 3b 23 20 20 41 64 64  ort 0}   ;#  Add
5860: 20 31 30 30 20 74 6f 20 72 6f 77 69 64 73 20 35   100 to rowids 5
5870: 20 33 31 20 35 37 20 38 32 20 38 33 20 38 34 20   31 57 82 83 84 
5880: 38 35 20 38 36 20 38 37 0a 64 6f 5f 74 65 73 74  85 86 87.do_test
5890: 20 77 68 65 72 65 39 2d 36 2e 35 2e 34 20 7b 0a   where9-6.5.4 {.
58a0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
58b0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
58c0: 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c  FROM t1 UNION AL
58d0: 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  L.    SELECT a F
58e0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 25 31  ROM t1 WHERE a%1
58f0: 30 30 20 49 4e 20 28 35 2c 33 31 2c 35 37 2c 38  00 IN (5,31,57,8
5900: 32 2c 38 33 2c 38 34 2c 38 35 2c 38 36 2c 38 37  2,83,84,85,86,87
5910: 29 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  ) ORDER BY rowid
5920: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
5930: 20 20 7d 0a 7d 20 7b 39 39 20 31 30 35 20 31 33    }.} {99 105 13
5940: 31 20 31 35 37 20 31 38 32 20 31 38 33 20 31 38  1 157 182 183 18
5950: 34 20 31 38 35 20 31 38 36 20 31 38 37 7d 0a 0a  4 185 186 187}..
5960: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36  do_test where9-6
5970: 2e 36 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 5f 73  .6.1 {.  count_s
5980: 74 65 70 73 20 7b 0a 20 20 20 20 42 45 47 49 4e  teps {.    BEGIN
5990: 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  ;.    DELETE FRO
59a0: 4d 20 74 31 0a 20 20 20 20 20 57 48 45 52 45 20  M t1.     WHERE 
59b0: 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63  (b IS NULL AND c
59c0: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20   NOT NULL AND d 
59d0: 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20  NOT NULL).      
59e0: 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c    OR (b NOT NULL
59f0: 20 41 4e 44 20 2b 63 20 49 53 20 4e 55 4c 4c 20   AND +c IS NULL 
5a00: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
5a10: 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f          OR (b NO
5a20: 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54  T NULL AND c NOT
5a30: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e   NULL AND d IS N
5a40: 55 4c 4c 29 0a 20 20 7d 0a 7d 20 7b 73 63 61 6e  ULL).  }.} {scan
5a50: 20 39 38 20 73 6f 72 74 20 30 7d 20 20 20 3b 23   98 sort 0}   ;#
5a60: 20 44 45 4c 45 54 45 73 20 72 6f 77 73 20 39 30   DELETEs rows 90
5a70: 20 39 31 20 39 32 20 39 37 0a 64 6f 5f 74 65 73   91 92 97.do_tes
5a80: 74 20 77 68 65 72 65 39 2d 36 2e 36 2e 32 20 7b  t where9-6.6.2 {
5a90: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
5aa0: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
5ab0: 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41   FROM t1 UNION A
5ac0: 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20  LL.    SELECT a 
5ad0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20  FROM t1 WHERE a 
5ae0: 42 45 54 57 45 45 4e 20 38 35 20 41 4e 44 20 31  BETWEEN 85 AND 1
5af0: 30 30 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  00;.    ROLLBACK
5b00: 3b 0a 20 20 7d 0a 7d 20 7b 39 35 20 38 35 20 38  ;.  }.} {95 85 8
5b10: 36 20 38 37 20 38 38 20 38 39 20 39 33 20 39 34  6 87 88 89 93 94
5b20: 20 39 35 20 39 36 20 39 38 20 39 39 7d 0a 0a 64   95 96 98 99}..d
5b30: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
5b40: 36 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74  6.3 {.  count_st
5b50: 65 70 73 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  eps {.    BEGIN;
5b60: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
5b70: 45 54 20 61 3d 61 2b 31 30 30 0a 20 20 20 20 20  ET a=a+100.     
5b80: 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c  WHERE (b IS NULL
5b90: 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20   AND c NOT NULL 
5ba0: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
5bb0: 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f          OR (b NO
5bc0: 54 20 4e 55 4c 4c 20 41 4e 44 20 2b 63 20 49 53  T NULL AND +c IS
5bd0: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
5be0: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
5bf0: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
5c00: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
5c10: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d  d IS NULL).  }.}
5c20: 20 7b 73 63 61 6e 20 39 38 20 73 6f 72 74 20 30   {scan 98 sort 0
5c30: 7d 20 20 20 3b 23 20 41 64 64 20 31 30 30 20 74  }   ;# Add 100 t
5c40: 6f 20 72 6f 77 69 64 73 20 39 30 20 39 31 20 39  o rowids 90 91 9
5c50: 32 20 39 37 0a 64 6f 5f 74 65 73 74 20 77 68 65  2 97.do_test whe
5c60: 72 65 39 2d 36 2e 36 2e 34 20 7b 0a 20 20 64 62  re9-6.6.4 {.  db
5c70: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
5c80: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
5c90: 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20   t1 UNION ALL.  
5ca0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
5cb0: 74 31 20 57 48 45 52 45 20 61 20 42 45 54 57 45  t1 WHERE a BETWE
5cc0: 45 4e 20 38 35 20 41 4e 44 20 32 30 30 3b 0a 20  EN 85 AND 200;. 
5cd0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
5ce0: 0a 7d 20 7b 39 39 20 38 35 20 38 36 20 38 37 20  .} {99 85 86 87 
5cf0: 38 38 20 38 39 20 39 33 20 39 34 20 39 35 20 39  88 89 93 94 95 9
5d00: 36 20 39 38 20 39 39 20 31 39 30 20 31 39 31 20  6 98 99 190 191 
5d10: 31 39 32 20 31 39 37 7d 0a 0a 64 6f 5f 74 65 73  192 197}..do_tes
5d20: 74 20 77 68 65 72 65 39 2d 36 2e 37 2e 31 20 7b  t where9-6.7.1 {
5d30: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
5d40: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
5d50: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 4e  DELETE FROM t1 N
5d60: 4f 54 20 49 4e 44 45 58 45 44 0a 20 20 20 20 20  OT INDEXED.     
5d70: 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c  WHERE (b IS NULL
5d80: 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20   AND c NOT NULL 
5d90: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
5da0: 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f          OR (b NO
5db0: 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20  T NULL AND c IS 
5dc0: 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e  NULL AND d NOT N
5dd0: 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52 20  ULL).        OR 
5de0: 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  (b NOT NULL AND 
5df0: 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64  c NOT NULL AND d
5e00: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d 20   IS NULL).  }.} 
5e10: 7b 73 63 61 6e 20 39 38 20 73 6f 72 74 20 30 7d  {scan 98 sort 0}
5e20: 20 20 20 3b 23 20 44 45 4c 45 54 45 73 20 72 6f     ;# DELETEs ro
5e30: 77 73 20 39 30 20 39 31 20 39 32 20 39 37 0a 64  ws 90 91 92 97.d
5e40: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
5e50: 37 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  7.2 {.  db eval 
5e60: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75  {.    SELECT cou
5e70: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 55 4e  nt(*) FROM t1 UN
5e80: 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
5e90: 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45  CT a FROM t1 WHE
5ea0: 52 45 20 61 20 42 45 54 57 45 45 4e 20 38 35 20  RE a BETWEEN 85 
5eb0: 41 4e 44 20 31 30 30 3b 0a 20 20 20 20 52 4f 4c  AND 100;.    ROL
5ec0: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 39 35  LBACK;.  }.} {95
5ed0: 20 38 35 20 38 36 20 38 37 20 38 38 20 38 39 20   85 86 87 88 89 
5ee0: 39 33 20 39 34 20 39 35 20 39 36 20 39 38 20 39  93 94 95 96 98 9
5ef0: 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  9}..do_test wher
5f00: 65 39 2d 36 2e 37 2e 33 20 7b 0a 20 20 63 6f 75  e9-6.7.3 {.  cou
5f10: 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 42  nt_steps {.    B
5f20: 45 47 49 4e 3b 0a 20 20 20 20 55 50 44 41 54 45  EGIN;.    UPDATE
5f30: 20 74 31 20 4e 4f 54 20 49 4e 44 45 58 45 44 20   t1 NOT INDEXED 
5f40: 53 45 54 20 61 3d 61 2b 31 30 30 0a 20 20 20 20  SET a=a+100.    
5f50: 20 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c   WHERE (b IS NUL
5f60: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
5f70: 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29   AND d NOT NULL)
5f80: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e  .        OR (b N
5f90: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53  OT NULL AND c IS
5fa0: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
5fb0: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
5fc0: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
5fd0: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
5fe0: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d  d IS NULL).  }.}
5ff0: 20 7b 73 63 61 6e 20 39 38 20 73 6f 72 74 20 30   {scan 98 sort 0
6000: 7d 20 20 20 3b 23 20 41 64 64 20 31 30 30 20 74  }   ;# Add 100 t
6010: 6f 20 72 6f 77 69 64 73 20 39 30 20 39 31 20 39  o rowids 90 91 9
6020: 32 20 39 37 0a 64 6f 5f 74 65 73 74 20 77 68 65  2 97.do_test whe
6030: 72 65 39 2d 36 2e 37 2e 34 20 7b 0a 20 20 64 62  re9-6.7.4 {.  db
6040: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
6050: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
6060: 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20   t1 UNION ALL.  
6070: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
6080: 74 31 20 57 48 45 52 45 20 61 20 42 45 54 57 45  t1 WHERE a BETWE
6090: 45 4e 20 38 35 20 41 4e 44 20 32 30 30 3b 0a 20  EN 85 AND 200;. 
60a0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
60b0: 0a 7d 20 7b 39 39 20 38 35 20 38 36 20 38 37 20  .} {99 85 86 87 
60c0: 38 38 20 38 39 20 39 33 20 39 34 20 39 35 20 39  88 89 93 94 95 9
60d0: 36 20 39 38 20 39 39 20 31 39 30 20 31 39 31 20  6 98 99 190 191 
60e0: 31 39 32 20 31 39 37 7d 0a 0a 64 6f 5f 74 65 73  192 197}..do_tes
60f0: 74 20 77 68 65 72 65 39 2d 36 2e 38 2e 31 20 7b  t where9-6.8.1 {
6100: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
6110: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
6120: 20 49 4e 44 45 58 45 44 20 42 59 20 74 31 62 0a   INDEXED BY t1b.
6130: 20 20 20 20 20 57 48 45 52 45 20 28 2b 62 20 49       WHERE (+b I
6140: 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54  S NULL AND c NOT
6150: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
6160: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
6170: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
6180: 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64   c IS NULL AND d
6190: 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20   NOT NULL).     
61a0: 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c     OR (b NOT NUL
61b0: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
61c0: 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a   AND d IS NULL).
61d0: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75 65    }.} {1 {no que
61e0: 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 64 6f  ry solution}}.do
61f0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 38  _test where9-6.8
6200: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
6210: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  {.    UPDATE t1 
6220: 49 4e 44 45 58 45 44 20 42 59 20 74 31 62 20 53  INDEXED BY t1b S
6230: 45 54 20 61 3d 61 2b 31 30 30 0a 20 20 20 20 20  ET a=a+100.     
6240: 57 48 45 52 45 20 28 2b 62 20 49 53 20 4e 55 4c  WHERE (+b IS NUL
6250: 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c  L AND c NOT NULL
6260: 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29   AND d NOT NULL)
6270: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e  .        OR (b N
6280: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53  OT NULL AND c IS
6290: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
62a0: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 4f 52  NULL).        OR
62b0: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
62c0: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
62d0: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 7d 0a 7d  d IS NULL).  }.}
62e0: 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f   {1 {no query so
62f0: 6c 75 74 69 6f 6e 7d 7d 0a 0a 73 65 74 20 73 6f  lution}}..set so
6300: 6c 75 74 69 6f 6e 5f 70 6f 73 73 69 62 6c 65 20  lution_possible 
6310: 30 0a 69 66 63 61 70 61 62 6c 65 20 73 74 61 74  0.ifcapable stat
6320: 34 20 7b 0a 20 20 69 66 20 7b 5b 70 65 72 6d 75  4 {.  if {[permu
6330: 74 61 74 69 6f 6e 5d 20 21 3d 20 22 6e 6f 5f 6f  tation] != "no_o
6340: 70 74 69 6d 69 7a 61 74 69 6f 6e 22 7d 20 7b 20  ptimization"} { 
6350: 73 65 74 20 73 6f 6c 75 74 69 6f 6e 5f 70 6f 73  set solution_pos
6360: 73 69 62 6c 65 20 31 20 7d 0a 7d 0a 69 66 20 24  sible 1 }.}.if $
6370: 73 6f 6c 75 74 69 6f 6e 5f 70 6f 73 73 69 62 6c  solution_possibl
6380: 65 20 7b 0a 20 20 23 20 57 68 65 6e 20 53 54 41  e {.  # When STA
6390: 54 33 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 74  T3 is enabled, t
63a0: 68 65 20 22 62 20 4e 4f 54 20 4e 55 4c 4c 22 20  he "b NOT NULL" 
63b0: 74 65 72 6d 73 20 67 65 74 20 74 72 61 6e 73 6c  terms get transl
63c0: 61 74 65 64 0a 20 20 23 20 69 6e 74 6f 20 62 3e  ated.  # into b>
63d0: 4e 55 4c 4c 2c 20 77 68 69 63 68 20 63 61 6e 20  NULL, which can 
63e0: 62 65 20 73 61 74 69 66 69 65 64 20 62 79 20 74  be satified by t
63f0: 68 65 20 69 6e 64 65 78 20 74 31 62 2e 20 20 49  he index t1b.  I
6400: 74 20 69 73 20 61 20 76 65 72 79 0a 20 20 23 20  t is a very.  # 
6410: 65 78 70 65 6e 73 69 76 65 20 77 61 79 20 74 6f  expensive way to
6420: 20 64 6f 20 74 68 65 20 71 75 65 72 79 2c 20 62   do the query, b
6430: 75 74 20 69 74 20 77 6f 72 6b 73 2c 20 61 6e 64  ut it works, and
6440: 20 73 6f 20 61 20 73 6f 6c 75 74 69 6f 6e 20 69   so a solution i
6450: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 20 20 64 6f  s possible..  do
6460: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 38  _test where9-6.8
6470: 2e 33 2d 73 74 61 74 34 20 7b 0a 20 20 20 20 63  .3-stat4 {.    c
6480: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
6490: 55 50 44 41 54 45 20 74 31 20 49 4e 44 45 58 45  UPDATE t1 INDEXE
64a0: 44 20 42 59 20 74 31 62 20 53 45 54 20 61 3d 61  D BY t1b SET a=a
64b0: 2b 31 30 30 0a 20 20 20 20 20 20 20 57 48 45 52  +100.       WHER
64c0: 45 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44  E (b IS NULL AND
64d0: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
64e0: 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20  d NOT NULL).    
64f0: 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20        OR (b NOT 
6500: 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55  NULL AND c IS NU
6510: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
6520: 4c 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20  L).          OR 
6530: 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  (b NOT NULL AND 
6540: 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64  c NOT NULL AND d
6550: 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 7d 0a   IS NULL).    }.
6560: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
6570: 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 38 2e  test where9-6.8.
6580: 34 2d 73 74 61 74 34 20 7b 0a 20 20 20 20 63 61  4-stat4 {.    ca
6590: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 44  tchsql {.      D
65a0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 49 4e  ELETE FROM t1 IN
65b0: 44 45 58 45 44 20 42 59 20 74 31 62 0a 20 20 20  DEXED BY t1b.   
65c0: 20 20 20 20 57 48 45 52 45 20 28 62 20 49 53 20      WHERE (b IS 
65d0: 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e  NULL AND c NOT N
65e0: 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55  ULL AND d NOT NU
65f0: 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52  LL).          OR
6600: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
6610: 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64   c IS NULL AND d
6620: 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20   NOT NULL).     
6630: 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e       OR (b NOT N
6640: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
6650: 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c  LL AND d IS NULL
6660: 29 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b  ).    }.  } {0 {
6670: 7d 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f  }}.} else {.  do
6680: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e 38  _test where9-6.8
6690: 2e 33 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  .3 {.    catchsq
66a0: 6c 20 7b 0a 20 20 20 20 20 20 55 50 44 41 54 45  l {.      UPDATE
66b0: 20 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 74   t1 INDEXED BY t
66c0: 31 62 20 53 45 54 20 61 3d 61 2b 31 30 30 0a 20  1b SET a=a+100. 
66d0: 20 20 20 20 20 20 57 48 45 52 45 20 28 62 20 49        WHERE (b I
66e0: 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54  S NULL AND c NOT
66f0: 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20   NULL AND d NOT 
6700: 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20  NULL).          
6710: 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41  OR (b NOT NULL A
6720: 4e 44 20 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44  ND c IS NULL AND
6730: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
6740: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
6750: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20   NULL AND c NOT 
6760: 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53 20 4e 55  NULL AND d IS NU
6770: 4c 4c 29 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  LL).    }.  } {1
6780: 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74   {no query solut
6790: 69 6f 6e 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ion}}.  do_test 
67a0: 77 68 65 72 65 39 2d 36 2e 38 2e 34 20 7b 0a 20  where9-6.8.4 {. 
67b0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
67c0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
67d0: 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 74 31  t1 INDEXED BY t1
67e0: 62 0a 20 20 20 20 20 20 20 57 48 45 52 45 20 28  b.       WHERE (
67f0: 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 63 20  b IS NULL AND c 
6800: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e  NOT NULL AND d N
6810: 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20  OT NULL).       
6820: 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c     OR (b NOT NUL
6830: 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c 4c 20  L AND c IS NULL 
6840: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
6850: 20 20 20 20 20 20 20 20 20 20 4f 52 20 28 62 20            OR (b 
6860: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e  NOT NULL AND c N
6870: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53  OT NULL AND d IS
6880: 20 4e 55 4c 4c 29 0a 20 20 20 20 7d 0a 20 20 7d   NULL).    }.  }
6890: 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f   {1 {no query so
68a0: 6c 75 74 69 6f 6e 7d 7d 0a 7d 0a 23 23 23 23 23  lution}}.}.#####
68b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
68f0: 23 23 23 23 23 23 23 0a 23 20 54 65 73 74 20 63  #######.# Test c
6900: 61 73 65 73 20 77 68 65 72 65 20 74 65 72 6d 73  ases where terms
6910: 20 69 6e 73 69 64 65 20 61 6e 20 4f 52 20 73 65   inside an OR se
6920: 72 69 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65  ries are combine
6930: 64 20 77 69 74 68 20 41 4e 44 20 74 65 72 6d 73  d with AND terms
6940: 0a 23 20 65 78 74 65 72 6e 61 6c 20 74 6f 20 74  .# external to t
6950: 68 65 20 4f 52 20 63 6c 61 75 73 65 2e 20 20 49  he OR clause.  I
6960: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63  n other words, c
6970: 61 73 65 73 20 77 68 65 72 65 0a 23 0a 23 20 20  ases where.#.#  
6980: 20 20 20 20 20 20 20 20 20 20 20 20 78 20 41 4e              x AN
6990: 44 20 28 79 20 4f 52 20 7a 29 0a 23 0a 23 20 69  D (y OR z).#.# i
69a0: 73 20 61 62 6c 65 20 74 6f 20 75 73 65 20 69 6e  s able to use in
69b0: 64 69 63 65 73 20 6f 6e 20 78 2c 79 20 61 6e 64  dices on x,y and
69c0: 20 78 2c 7a 2c 20 6f 72 20 69 6e 64 69 63 65 73   x,z, or indices
69d0: 20 79 2c 78 20 61 6e 64 20 7a 2c 78 2e 0a 23 0a   y,x and z,x..#.
69e0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 37  do_test where9-7
69f0: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
6a00: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
6a10: 45 20 74 35 28 61 2c 20 62 2c 20 63 2c 20 64 2c  E t5(a, b, c, d,
6a20: 20 65 2c 20 66 2c 20 67 2c 20 78 2c 20 79 29 3b   e, f, g, x, y);
6a30: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6a40: 20 74 35 0a 20 20 20 20 20 53 45 4c 45 43 54 20   t5.     SELECT 
6a50: 61 2c 20 62 2c 20 63 2c 20 65 2c 20 64 2c 20 66  a, b, c, e, d, f
6a60: 2c 20 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , g,.           
6a70: 20 43 41 53 45 20 57 48 45 4e 20 28 61 26 31 29   CASE WHEN (a&1)
6a80: 21 3d 30 20 54 48 45 4e 20 27 79 27 20 45 4c 53  !=0 THEN 'y' ELS
6a90: 45 20 27 6e 27 20 45 4e 44 2c 0a 20 20 20 20 20  E 'n' END,.     
6aa0: 20 20 20 20 20 20 20 43 41 53 45 20 57 48 45 4e         CASE WHEN
6ab0: 20 28 61 26 32 29 21 3d 30 20 54 48 45 4e 20 27   (a&2)!=0 THEN '
6ac0: 79 27 20 45 4c 53 45 20 27 6e 27 20 45 4e 44 0a  y' ELSE 'n' END.
6ad0: 20 20 20 20 20 20 20 46 52 4f 4d 20 74 31 3b 0a         FROM t1;.
6ae0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
6af0: 20 74 35 78 62 20 4f 4e 20 74 35 28 78 2c 20 62   t5xb ON t5(x, b
6b00: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
6b10: 44 45 58 20 74 35 78 63 20 4f 4e 20 74 35 28 78  DEX t5xc ON t5(x
6b20: 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , c);.    CREATE
6b30: 20 49 4e 44 45 58 20 74 35 78 64 20 4f 4e 20 74   INDEX t5xd ON t
6b40: 35 28 78 2c 20 64 29 3b 0a 20 20 20 20 43 52 45  5(x, d);.    CRE
6b50: 41 54 45 20 49 4e 44 45 58 20 74 35 78 65 20 4f  ATE INDEX t5xe O
6b60: 4e 20 74 35 28 78 2c 20 65 29 3b 0a 20 20 20 20  N t5(x, e);.    
6b70: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 78  CREATE INDEX t5x
6b80: 66 20 4f 4e 20 74 35 28 78 2c 20 66 29 3b 0a 20  f ON t5(x, f);. 
6b90: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
6ba0: 74 35 78 67 20 4f 4e 20 74 35 28 78 2c 20 67 29  t5xg ON t5(x, g)
6bb0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
6bc0: 45 58 20 74 35 79 62 20 4f 4e 20 74 35 28 79 2c  EX t5yb ON t5(y,
6bd0: 20 62 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   b);.    CREATE 
6be0: 49 4e 44 45 58 20 74 35 79 63 20 4f 4e 20 74 35  INDEX t5yc ON t5
6bf0: 28 79 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41  (y, c);.    CREA
6c00: 54 45 20 49 4e 44 45 58 20 74 35 79 64 20 4f 4e  TE INDEX t5yd ON
6c10: 20 74 35 28 79 2c 20 64 29 3b 0a 20 20 20 20 43   t5(y, d);.    C
6c20: 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 79 65  REATE INDEX t5ye
6c30: 20 4f 4e 20 74 35 28 79 2c 20 65 29 3b 0a 20 20   ON t5(y, e);.  
6c40: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
6c50: 35 79 66 20 4f 4e 20 74 35 28 79 2c 20 66 29 3b  5yf ON t5(y, f);
6c60: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
6c70: 58 20 74 35 79 67 20 4f 4e 20 74 35 28 79 2c 20  X t5yg ON t5(y, 
6c80: 67 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  g);.    CREATE T
6c90: 41 42 4c 45 20 74 36 28 61 2c 20 62 2c 20 63 2c  ABLE t6(a, b, c,
6ca0: 20 65 2c 20 64 2c 20 66 2c 20 67 2c 20 78 2c 20   e, d, f, g, x, 
6cb0: 79 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  y);.    INSERT I
6cc0: 4e 54 4f 20 74 36 20 53 45 4c 45 43 54 20 2a 20  NTO t6 SELECT * 
6cd0: 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 41 4e 41  FROM t5;.    ANA
6ce0: 4c 59 5a 45 20 74 35 3b 0a 20 20 7d 0a 7d 20 7b  LYZE t5;.  }.} {
6cf0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  }.do_test where9
6d00: 2d 37 2e 31 2e 31 20 7b 0a 20 20 63 6f 75 6e 74  -7.1.1 {.  count
6d10: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c  _steps {.    SEL
6d20: 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48  ECT a FROM t5 WH
6d30: 45 52 45 20 78 3d 27 79 27 20 41 4e 44 20 28 62  ERE x='y' AND (b
6d40: 3d 39 31 33 20 4f 52 20 63 3d 32 37 30 32 37 29  =913 OR c=27027)
6d50: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
6d60: 0a 7d 20 7b 37 39 20 38 31 20 38 33 20 73 63 61  .} {79 81 83 sca
6d70: 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74  n 0 sort 1}.do_t
6d80: 65 73 74 20 77 68 65 72 65 39 2d 37 2e 31 2e 32  est where9-7.1.2
6d90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6da0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
6db0: 20 74 36 20 57 48 45 52 45 20 78 3d 27 79 27 20   t6 WHERE x='y' 
6dc0: 41 4e 44 20 28 62 3d 39 31 33 20 4f 52 20 63 3d  AND (b=913 OR c=
6dd0: 32 37 30 32 37 29 20 4f 52 44 45 52 20 42 59 20  27027) ORDER BY 
6de0: 61 3b 0a 20 20 7d 0a 7d 20 7b 37 39 20 38 31 20  a;.  }.} {79 81 
6df0: 38 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  83}.do_test wher
6e00: 65 39 2d 37 2e 31 2e 33 20 7b 0a 20 20 63 6f 75  e9-7.1.3 {.  cou
6e10: 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53  nt_steps {.    S
6e20: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20  ELECT a FROM t5 
6e30: 57 48 45 52 45 20 78 3d 27 6e 27 20 41 4e 44 20  WHERE x='n' AND 
6e40: 28 62 3d 39 31 33 20 4f 52 20 63 3d 32 37 30 32  (b=913 OR c=2702
6e50: 37 29 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  7) ORDER BY a;. 
6e60: 20 7d 0a 7d 20 7b 38 30 20 73 63 61 6e 20 30 20   }.} {80 scan 0 
6e70: 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65 73 74 20  sort 1}.do_test 
6e80: 77 68 65 72 65 39 2d 37 2e 31 2e 34 20 7b 0a 20  where9-7.1.4 {. 
6e90: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
6ea0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 36 20  ELECT a FROM t6 
6eb0: 57 48 45 52 45 20 78 3d 27 6e 27 20 41 4e 44 20  WHERE x='n' AND 
6ec0: 28 62 3d 39 31 33 20 4f 52 20 63 3d 32 37 30 32  (b=913 OR c=2702
6ed0: 37 29 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  7) ORDER BY a;. 
6ee0: 20 7d 0a 7d 20 7b 38 30 7d 0a 64 6f 5f 74 65 73   }.} {80}.do_tes
6ef0: 74 20 77 68 65 72 65 39 2d 37 2e 32 2e 31 20 7b  t where9-7.2.1 {
6f00: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
6f10: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
6f20: 4f 4d 20 74 35 20 57 48 45 52 45 20 28 78 3d 27  OM t5 WHERE (x='
6f30: 79 27 20 4f 52 20 79 3d 27 79 27 29 20 41 4e 44  y' OR y='y') AND
6f40: 20 62 3d 39 31 33 20 4f 52 44 45 52 20 42 59 20   b=913 ORDER BY 
6f50: 61 3b 0a 20 20 7d 0a 7d 20 7b 38 33 20 73 63 61  a;.  }.} {83 sca
6f60: 6e 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74  n 0 sort 1}.do_t
6f70: 65 73 74 20 77 68 65 72 65 39 2d 37 2e 32 2e 32  est where9-7.2.2
6f80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6f90: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
6fa0: 20 74 36 20 57 48 45 52 45 20 28 78 3d 27 79 27   t6 WHERE (x='y'
6fb0: 20 4f 52 20 79 3d 27 79 27 29 20 41 4e 44 20 62   OR y='y') AND b
6fc0: 3d 39 31 33 20 4f 52 44 45 52 20 42 59 20 61 3b  =913 ORDER BY a;
6fd0: 0a 20 20 7d 0a 7d 20 7b 38 33 7d 0a 64 6f 5f 74  .  }.} {83}.do_t
6fe0: 65 73 74 20 77 68 65 72 65 39 2d 37 2e 33 2e 31  est where9-7.3.1
6ff0: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
7000: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
7010: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 28 78  FROM t5 WHERE (x
7020: 3d 27 79 27 20 4f 52 20 79 3d 27 79 27 29 20 41  ='y' OR y='y') A
7030: 4e 44 20 63 3d 32 37 30 32 37 20 4f 52 44 45 52  ND c=27027 ORDER
7040: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 37 39   BY a;.  }.} {79
7050: 20 38 31 20 73 63 61 6e 20 30 20 73 6f 72 74 20   81 scan 0 sort 
7060: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  1}.do_test where
7070: 39 2d 37 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63  9-7.3.2 {.  exec
7080: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
7090: 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45   a FROM t6 WHERE
70a0: 20 28 78 3d 27 79 27 20 4f 52 20 79 3d 27 79 27   (x='y' OR y='y'
70b0: 29 20 41 4e 44 20 63 3d 32 37 30 32 37 20 4f 52  ) AND c=27027 OR
70c0: 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20  DER BY a;.  }.} 
70d0: 7b 37 39 20 38 31 7d 0a 0a 23 20 46 69 78 20 66  {79 81}..# Fix f
70e0: 6f 72 20 74 69 63 6b 65 74 20 5b 62 37 63 38 36  or ticket [b7c86
70f0: 38 32 63 63 31 37 66 33 32 39 30 33 66 30 33 61  82cc17f32903f03a
7100: 36 31 30 62 64 30 64 33 35 66 66 64 33 63 31 65  610bd0d35ffd3c1e
7110: 36 65 34 5d 0a 23 20 22 49 6e 63 6f 72 72 65 63  6e4].# "Incorrec
7120: 74 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 4c 45  t result from LE
7130: 46 54 20 4a 4f 49 4e 20 77 69 74 68 20 4f 52 20  FT JOIN with OR 
7140: 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
7150: 75 73 65 22 0a 23 0a 64 6f 5f 74 65 73 74 20 77  use".#.do_test w
7160: 68 65 72 65 39 2d 38 2e 31 20 7b 0a 20 20 64 62  here9-8.1 {.  db
7170: 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41   eval {.    CREA
7180: 54 45 20 54 41 42 4c 45 20 74 38 31 28 61 20 49  TE TABLE t81(a I
7190: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
71a0: 45 59 2c 20 62 2c 20 63 2c 20 64 29 3b 0a 20 20  EY, b, c, d);.  
71b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
71c0: 38 32 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  82(x INTEGER PRI
71d0: 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20 20  MARY KEY, y);.  
71e0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
71f0: 38 33 28 70 20 49 4e 54 45 47 45 52 20 50 52 49  83(p INTEGER PRI
7200: 4d 41 52 59 20 4b 45 59 2c 20 71 29 3b 0a 20 20  MARY KEY, q);.  
7210: 20 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e    .    INSERT IN
7220: 54 4f 20 74 38 31 20 56 41 4c 55 45 53 28 32 2c  TO t81 VALUES(2,
7230: 33 2c 34 2c 35 29 3b 0a 20 20 20 20 49 4e 53 45  3,4,5);.    INSE
7240: 52 54 20 49 4e 54 4f 20 74 38 31 20 56 41 4c 55  RT INTO t81 VALU
7250: 45 53 28 33 2c 34 2c 35 2c 36 29 3b 0a 20 20 20  ES(3,4,5,6);.   
7260: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 32   INSERT INTO t82
7270: 20 56 41 4c 55 45 53 28 32 2c 34 29 3b 0a 20 20   VALUES(2,4);.  
7280: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38    INSERT INTO t8
7290: 33 20 56 41 4c 55 45 53 28 35 2c 35 35 29 3b 0a  3 VALUES(5,55);.
72a0: 20 20 20 20 0a 20 20 20 20 53 45 4c 45 43 54 20      .    SELECT 
72b0: 2a 0a 20 20 20 20 20 20 46 52 4f 4d 20 74 38 31  *.      FROM t81
72c0: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 38 32 20 4f   LEFT JOIN t82 O
72d0: 4e 20 79 3d 62 20 4a 4f 49 4e 20 74 38 33 0a 20  N y=b JOIN t83. 
72e0: 20 20 20 20 57 48 45 52 45 20 63 3d 3d 70 20 4f      WHERE c==p O
72f0: 52 20 64 3d 3d 70 0a 20 20 20 20 20 4f 52 44 45  R d==p.     ORDE
7300: 52 20 42 59 20 2b 61 3b 0a 20 20 7d 0a 7d 20 7b  R BY +a;.  }.} {
7310: 32 20 33 20 34 20 35 20 7b 7d 20 7b 7d 20 35 20  2 3 4 5 {} {} 5 
7320: 35 35 20 33 20 34 20 35 20 36 20 32 20 34 20 35  55 3 4 5 6 2 4 5
7330: 20 35 35 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65   55}.do_test whe
7340: 72 65 39 2d 38 2e 32 20 7b 0a 20 20 64 62 20 65  re9-8.2 {.  db e
7350: 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  val {.    SELECT
7360: 20 2a 0a 20 20 20 20 20 20 46 52 4f 4d 20 74 38   *.      FROM t8
7370: 31 20 4c 45 46 54 20 4a 4f 49 4e 20 28 74 38 32  1 LEFT JOIN (t82
7380: 29 20 4f 4e 20 79 3d 62 20 4a 4f 49 4e 20 74 38  ) ON y=b JOIN t8
7390: 33 0a 20 20 20 20 20 57 48 45 52 45 20 63 3d 3d  3.     WHERE c==
73a0: 70 20 4f 52 20 64 3d 3d 70 0a 20 20 20 20 20 4f  p OR d==p.     O
73b0: 52 44 45 52 20 42 59 20 2b 61 3b 0a 20 20 7d 0a  RDER BY +a;.  }.
73c0: 7d 20 7b 32 20 33 20 34 20 35 20 7b 7d 20 7b 7d  } {2 3 4 5 {} {}
73d0: 20 35 20 35 35 20 33 20 34 20 35 20 36 20 32 20   5 55 3 4 5 6 2 
73e0: 34 20 35 20 35 35 7d 0a 64 6f 5f 74 65 73 74 20  4 5 55}.do_test 
73f0: 77 68 65 72 65 39 2d 38 2e 33 20 7b 0a 20 20 64  where9-8.3 {.  d
7400: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c  b eval {.    SEL
7410: 45 43 54 20 2a 0a 20 20 20 20 20 20 46 52 4f 4d  ECT *.      FROM
7420: 20 28 74 38 31 29 20 4c 45 46 54 20 4a 4f 49 4e   (t81) LEFT JOIN
7430: 20 28 6d 61 69 6e 2e 74 38 32 29 20 4f 4e 20 79   (main.t82) ON y
7440: 3d 62 20 4a 4f 49 4e 20 74 38 33 0a 20 20 20 20  =b JOIN t83.    
7450: 20 57 48 45 52 45 20 63 3d 3d 70 20 4f 52 20 64   WHERE c==p OR d
7460: 3d 3d 70 0a 20 20 20 20 20 4f 52 44 45 52 20 42  ==p.     ORDER B
7470: 59 20 2b 61 3b 0a 20 20 7d 0a 7d 20 7b 32 20 33  Y +a;.  }.} {2 3
7480: 20 34 20 35 20 7b 7d 20 7b 7d 20 35 20 35 35 20   4 5 {} {} 5 55 
7490: 33 20 34 20 35 20 36 20 32 20 34 20 35 20 35 35  3 4 5 6 2 4 5 55
74a0: 7d 0a 0a 23 20 46 69 78 20 66 6f 72 20 74 69 63  }..# Fix for tic
74b0: 6b 65 74 20 5b 66 32 33 36 39 33 30 34 65 34 37  ket [f2369304e47
74c0: 31 36 37 65 33 65 36 34 34 65 32 66 31 66 65 39  167e3e644e2f1fe9
74d0: 37 33 36 30 36 33 33 39 31 64 37 62 37 5d 0a 23  736063391d7b7].#
74e0: 20 49 6e 63 6f 72 72 65 63 74 20 72 65 73 75 6c   Incorrect resul
74f0: 74 73 20 77 68 65 6e 20 4f 52 20 69 73 20 75 73  ts when OR is us
7500: 65 64 20 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61  ed in the ON cla
7510: 75 73 65 20 6f 66 20 61 20 4c 45 46 54 20 4a 4f  use of a LEFT JO
7520: 49 4e 20 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68  IN .#.do_test wh
7530: 65 72 65 39 2d 39 2e 31 20 7b 0a 20 20 64 62 20  ere9-9.1 {.  db 
7540: 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  eval {.    CREAT
7550: 45 20 54 41 42 4c 45 20 74 39 31 28 78 29 3b 20  E TABLE t91(x); 
7560: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 31 20  INSERT INTO t91 
7570: 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 43  VALUES(1);.    C
7580: 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 32 28  REATE TABLE t92(
7590: 79 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  y INTEGER PRIMAR
75a0: 59 20 4b 45 59 2c 61 2c 62 29 3b 0a 20 20 20 20  Y KEY,a,b);.    
75b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 32 20  INSERT INTO t92 
75c0: 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20  VALUES(1,2,3);. 
75d0: 20 20 20 53 45 4c 45 43 54 20 31 20 46 52 4f 4d     SELECT 1 FROM
75e0: 20 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74   t91 LEFT JOIN t
75f0: 39 32 20 4f 4e 20 61 3d 32 20 4f 52 20 62 3d 33  92 ON a=2 OR b=3
7600: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 32 20 46  ;.    SELECT 2 F
7610: 52 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f 49  ROM t91 LEFT JOI
7620: 4e 20 74 39 32 20 4f 4e 20 61 3d 32 20 41 4e 44  N t92 ON a=2 AND
7630: 20 62 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43 54   b=3;.    SELECT
7640: 20 33 20 46 52 4f 4d 20 74 39 31 20 4c 45 46 54   3 FROM t91 LEFT
7650: 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 28 61 3d   JOIN t92 ON (a=
7660: 32 20 4f 52 20 62 3d 33 29 20 41 4e 44 20 79 20  2 OR b=3) AND y 
7670: 49 53 20 4e 55 4c 4c 3b 0a 20 20 20 20 53 45 4c  IS NULL;.    SEL
7680: 45 43 54 20 34 20 46 52 4f 4d 20 74 39 31 20 4c  ECT 4 FROM t91 L
7690: 45 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20  EFT JOIN t92 ON 
76a0: 28 61 3d 32 20 41 4e 44 20 62 3d 33 29 20 41 4e  (a=2 AND b=3) AN
76b0: 44 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20 20 20  D y IS NULL;.   
76c0: 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42   CREATE TEMP TAB
76d0: 4c 45 20 78 39 20 41 53 20 53 45 4c 45 43 54 20  LE x9 AS SELECT 
76e0: 2a 20 46 52 4f 4d 20 74 39 31 20 4c 45 46 54 20  * FROM t91 LEFT 
76f0: 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32 20  JOIN t92 ON a=2 
7700: 4f 52 20 62 3d 33 3b 0a 20 20 20 20 53 45 4c 45  OR b=3;.    SELE
7710: 43 54 20 35 20 46 52 4f 4d 20 78 39 20 57 48 45  CT 5 FROM x9 WHE
7720: 52 45 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20 20  RE y IS NULL;.  
7730: 20 20 53 45 4c 45 43 54 20 36 20 46 52 4f 4d 20    SELECT 6 FROM 
7740: 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39  t91 LEFT JOIN t9
7750: 32 20 4f 4e 20 61 3d 32 20 4f 52 20 62 3d 33 20  2 ON a=2 OR b=3 
7760: 57 48 45 52 45 20 79 20 49 53 20 4e 55 4c 4c 3b  WHERE y IS NULL;
7770: 0a 20 20 20 20 53 45 4c 45 43 54 20 37 20 46 52  .    SELECT 7 FR
7780: 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e  OM t91 LEFT JOIN
7790: 20 74 39 32 20 4f 4e 20 61 3d 32 20 41 4e 44 20   t92 ON a=2 AND 
77a0: 62 3d 33 20 57 48 45 52 45 20 79 20 49 53 20 4e  b=3 WHERE y IS N
77b0: 55 4c 4c 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ULL;.    SELECT 
77c0: 38 20 46 52 4f 4d 20 74 39 31 20 4c 45 46 54 20  8 FROM t91 LEFT 
77d0: 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32 32  JOIN t92 ON a=22
77e0: 20 4f 52 20 62 3d 33 33 20 57 48 45 52 45 20 79   OR b=33 WHERE y
77f0: 20 49 53 20 4e 55 4c 4c 3b 0a 20 20 20 20 53 45   IS NULL;.    SE
7800: 4c 45 43 54 20 39 20 46 52 4f 4d 20 74 39 31 20  LECT 9 FROM t91 
7810: 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e  LEFT JOIN t92 ON
7820: 20 61 3d 32 32 20 41 4e 44 20 62 3d 33 33 20 57   a=22 AND b=33 W
7830: 48 45 52 45 20 79 20 49 53 20 4e 55 4c 4c 3b 0a  HERE y IS NULL;.
7840: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 38    }.} {1 2 3 4 8
7850: 20 39 7d 0a 0a 23 20 46 69 78 20 66 6f 72 20 74   9}..# Fix for t
7860: 69 63 6b 65 74 20 5b 62 63 38 37 38 32 34 36 65  icket [bc878246e
7870: 61 66 65 30 66 35 32 63 35 31 39 65 32 39 30 34  afe0f52c519e2904
7880: 39 62 32 66 65 34 61 39 39 34 39 31 62 32 37 5d  9b2fe4a99491b27]
7890: 0a 23 20 49 6e 63 6f 72 72 65 63 74 20 72 65 73  .# Incorrect res
78a0: 75 6c 74 20 77 68 65 6e 20 4f 52 20 69 73 20 75  ult when OR is u
78b0: 73 65 64 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  sed in a join to
78c0: 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 61 20   the right of a 
78d0: 4c 45 46 54 20 4a 4f 49 4e 0a 23 0a 64 6f 5f 74  LEFT JOIN.#.do_t
78e0: 65 73 74 20 77 68 65 72 65 39 2d 31 30 2e 31 20  est where9-10.1 
78f0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
7900: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
7910: 31 30 31 20 28 69 64 20 49 4e 54 45 47 45 52 20  101 (id INTEGER 
7920: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
7930: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
7940: 30 31 20 56 41 4c 55 45 53 20 28 31 29 3b 0a 20  01 VALUES (1);. 
7950: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
7960: 20 74 31 30 31 20 41 53 20 74 30 0a 20 20 20 20   t101 AS t0.    
7970: 20 20 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 74       LEFT JOIN t
7980: 31 30 31 20 41 53 20 74 31 20 4f 4e 20 74 31 2e  101 AS t1 ON t1.
7990: 69 64 20 42 45 54 57 45 45 4e 20 31 30 20 41 4e  id BETWEEN 10 AN
79a0: 44 20 32 30 0a 20 20 20 20 20 20 20 20 20 4a 4f  D 20.         JO
79b0: 49 4e 20 74 31 30 31 20 41 53 20 74 32 20 4f 4e  IN t101 AS t2 ON
79c0: 20 28 74 32 2e 69 64 20 3d 20 74 30 2e 69 64 20   (t2.id = t0.id 
79d0: 4f 52 20 28 74 32 2e 69 64 3c 3e 35 35 35 20 41  OR (t2.id<>555 A
79e0: 4e 44 20 74 32 2e 69 64 3d 74 31 2e 69 64 29 29  ND t2.id=t1.id))
79f0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 7d 20 31 7d  ;.  }.} {1 {} 1}
7a00: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d  .do_test where9-
7a10: 31 30 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  10.2 {.  db eval
7a20: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
7a30: 42 4c 45 20 74 31 30 32 20 28 69 64 20 54 45 58  BLE t102 (id TEX
7a40: 54 20 55 4e 49 51 55 45 20 4e 4f 54 20 4e 55 4c  T UNIQUE NOT NUL
7a50: 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  L);.    INSERT I
7a60: 4e 54 4f 20 74 31 30 32 20 56 41 4c 55 45 53 20  NTO t102 VALUES 
7a70: 28 27 31 27 29 3b 0a 20 20 20 20 53 45 4c 45 43  ('1');.    SELEC
7a80: 54 20 2a 20 46 52 4f 4d 20 74 31 30 32 20 41 53  T * FROM t102 AS
7a90: 20 74 30 0a 20 20 20 20 20 20 20 20 20 4c 45 46   t0.         LEF
7aa0: 54 20 4a 4f 49 4e 20 74 31 30 32 20 41 53 20 74  T JOIN t102 AS t
7ab0: 31 20 4f 4e 20 74 31 2e 69 64 20 47 4c 4f 42 20  1 ON t1.id GLOB 
7ac0: 27 61 62 63 25 27 0a 20 20 20 20 20 20 20 20 20  'abc%'.         
7ad0: 4a 4f 49 4e 20 74 31 30 32 20 41 53 20 74 32 20  JOIN t102 AS t2 
7ae0: 4f 4e 20 28 74 32 2e 69 64 20 3d 20 74 30 2e 69  ON (t2.id = t0.i
7af0: 64 20 4f 52 20 28 74 32 2e 69 64 3c 3e 35 35 35  d OR (t2.id<>555
7b00: 20 41 4e 44 20 74 32 2e 69 64 3d 74 31 2e 69 64   AND t2.id=t1.id
7b10: 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 7d 20  ));.  }.} {1 {} 
7b20: 31 7d 0a 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73  1}....finish_tes
7b30: 74 0a                                            t.