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

Artifact 4fb43ad451758d9535693e110d4398fb6a6e3e153dc57bba5e61f884566c725f:


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 7c 7c 73 74 61 74 33 20 7b 0a 20 20 69 66 20  4||stat3 {.  if 
6330: 7b 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d 20 21  {[permutation] !
6340: 3d 20 22 6e 6f 5f 6f 70 74 69 6d 69 7a 61 74 69  = "no_optimizati
6350: 6f 6e 22 7d 20 7b 20 73 65 74 20 73 6f 6c 75 74  on"} { set solut
6360: 69 6f 6e 5f 70 6f 73 73 69 62 6c 65 20 31 20 7d  ion_possible 1 }
6370: 0a 7d 0a 69 66 20 24 73 6f 6c 75 74 69 6f 6e 5f  .}.if $solution_
6380: 70 6f 73 73 69 62 6c 65 20 7b 0a 20 20 23 20 57  possible {.  # W
6390: 68 65 6e 20 53 54 41 54 33 20 69 73 20 65 6e 61  hen STAT3 is ena
63a0: 62 6c 65 64 2c 20 74 68 65 20 22 62 20 4e 4f 54  bled, the "b NOT
63b0: 20 4e 55 4c 4c 22 20 74 65 72 6d 73 20 67 65 74   NULL" terms get
63c0: 20 74 72 61 6e 73 6c 61 74 65 64 0a 20 20 23 20   translated.  # 
63d0: 69 6e 74 6f 20 62 3e 4e 55 4c 4c 2c 20 77 68 69  into b>NULL, whi
63e0: 63 68 20 63 61 6e 20 62 65 20 73 61 74 69 66 69  ch can be satifi
63f0: 65 64 20 62 79 20 74 68 65 20 69 6e 64 65 78 20  ed by the index 
6400: 74 31 62 2e 20 20 49 74 20 69 73 20 61 20 76 65  t1b.  It is a ve
6410: 72 79 0a 20 20 23 20 65 78 70 65 6e 73 69 76 65  ry.  # expensive
6420: 20 77 61 79 20 74 6f 20 64 6f 20 74 68 65 20 71   way to do the q
6430: 75 65 72 79 2c 20 62 75 74 20 69 74 20 77 6f 72  uery, but it wor
6440: 6b 73 2c 20 61 6e 64 20 73 6f 20 61 20 73 6f 6c  ks, and so a sol
6450: 75 74 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  ution is possibl
6460: 65 2e 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  e..  do_test whe
6470: 72 65 39 2d 36 2e 38 2e 33 2d 73 74 61 74 34 20  re9-6.8.3-stat4 
6480: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
6490: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
64a0: 20 49 4e 44 45 58 45 44 20 42 59 20 74 31 62 20   INDEXED BY t1b 
64b0: 53 45 54 20 61 3d 61 2b 31 30 30 0a 20 20 20 20  SET a=a+100.    
64c0: 20 20 20 57 48 45 52 45 20 28 62 20 49 53 20 4e     WHERE (b IS N
64d0: 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55  ULL AND c NOT NU
64e0: 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c  LL AND d NOT NUL
64f0: 4c 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20  L).          OR 
6500: 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  (b NOT NULL AND 
6510: 63 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20  c IS NULL AND d 
6520: 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20  NOT NULL).      
6530: 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55      OR (b NOT NU
6540: 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c  LL AND c NOT NUL
6550: 4c 20 41 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29  L AND d IS NULL)
6560: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d  .    }.  } {0 {}
6570: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  }.  do_test wher
6580: 65 39 2d 36 2e 38 2e 34 2d 73 74 61 74 34 20 7b  e9-6.8.4-stat4 {
6590: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
65a0: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
65b0: 4d 20 74 31 20 49 4e 44 45 58 45 44 20 42 59 20  M t1 INDEXED BY 
65c0: 74 31 62 0a 20 20 20 20 20 20 20 57 48 45 52 45  t1b.       WHERE
65d0: 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e 44 20   (b IS NULL AND 
65e0: 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64  c NOT NULL AND d
65f0: 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20 20 20   NOT NULL).     
6600: 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e       OR (b NOT N
6610: 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c  ULL AND c IS NUL
6620: 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c  L AND d NOT NULL
6630: 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20 28  ).          OR (
6640: 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63  b NOT NULL AND c
6650: 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20   NOT NULL AND d 
6660: 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 7d 0a 20  IS NULL).    }. 
6670: 20 7d 20 7b 30 20 7b 7d 7d 0a 7d 20 65 6c 73 65   } {0 {}}.} else
6680: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65   {.  do_test whe
6690: 72 65 39 2d 36 2e 38 2e 33 20 7b 0a 20 20 20 20  re9-6.8.3 {.    
66a0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
66b0: 20 55 50 44 41 54 45 20 74 31 20 49 4e 44 45 58   UPDATE t1 INDEX
66c0: 45 44 20 42 59 20 74 31 62 20 53 45 54 20 61 3d  ED BY t1b SET a=
66d0: 61 2b 31 30 30 0a 20 20 20 20 20 20 20 57 48 45  a+100.       WHE
66e0: 52 45 20 28 62 20 49 53 20 4e 55 4c 4c 20 41 4e  RE (b IS NULL AN
66f0: 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  D c NOT NULL AND
6700: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
6710: 20 20 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54         OR (b NOT
6720: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e   NULL AND c IS N
6730: 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55  ULL AND d NOT NU
6740: 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52  LL).          OR
6750: 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44   (b NOT NULL AND
6760: 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20   c NOT NULL AND 
6770: 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20 20 20 7d  d IS NULL).    }
6780: 0a 20 20 7d 20 7b 31 20 7b 6e 6f 20 71 75 65 72  .  } {1 {no quer
6790: 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 20 20 64  y solution}}.  d
67a0: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 36 2e  o_test where9-6.
67b0: 38 2e 34 20 7b 0a 20 20 20 20 63 61 74 63 68 73  8.4 {.    catchs
67c0: 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54  ql {.      DELET
67d0: 45 20 46 52 4f 4d 20 74 31 20 49 4e 44 45 58 45  E FROM t1 INDEXE
67e0: 44 20 42 59 20 74 31 62 0a 20 20 20 20 20 20 20  D BY t1b.       
67f0: 57 48 45 52 45 20 28 62 20 49 53 20 4e 55 4c 4c  WHERE (b IS NULL
6800: 20 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20   AND c NOT NULL 
6810: 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a  AND d NOT NULL).
6820: 20 20 20 20 20 20 20 20 20 20 4f 52 20 28 62 20            OR (b 
6830: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 49  NOT NULL AND c I
6840: 53 20 4e 55 4c 4c 20 41 4e 44 20 64 20 4e 4f 54  S NULL AND d NOT
6850: 20 4e 55 4c 4c 29 0a 20 20 20 20 20 20 20 20 20   NULL).         
6860: 20 4f 52 20 28 62 20 4e 4f 54 20 4e 55 4c 4c 20   OR (b NOT NULL 
6870: 41 4e 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41  AND c NOT NULL A
6880: 4e 44 20 64 20 49 53 20 4e 55 4c 4c 29 0a 20 20  ND d IS NULL).  
6890: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 20 71    }.  } {1 {no q
68a0: 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a  uery solution}}.
68b0: 7d 0a 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 23 23 23 23 23 23 23 0a 23  ##############.#
6900: 20 54 65 73 74 20 63 61 73 65 73 20 77 68 65 72   Test cases wher
6910: 65 20 74 65 72 6d 73 20 69 6e 73 69 64 65 20 61  e terms inside a
6920: 6e 20 4f 52 20 73 65 72 69 65 73 20 61 72 65 20  n OR series are 
6930: 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20 41 4e  combined with AN
6940: 44 20 74 65 72 6d 73 0a 23 20 65 78 74 65 72 6e  D terms.# extern
6950: 61 6c 20 74 6f 20 74 68 65 20 4f 52 20 63 6c 61  al to the OR cla
6960: 75 73 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  use.  In other w
6970: 6f 72 64 73 2c 20 63 61 73 65 73 20 77 68 65 72  ords, cases wher
6980: 65 0a 23 0a 23 20 20 20 20 20 20 20 20 20 20 20  e.#.#           
6990: 20 20 20 78 20 41 4e 44 20 28 79 20 4f 52 20 7a     x AND (y OR z
69a0: 29 0a 23 0a 23 20 69 73 20 61 62 6c 65 20 74 6f  ).#.# is able to
69b0: 20 75 73 65 20 69 6e 64 69 63 65 73 20 6f 6e 20   use indices on 
69c0: 78 2c 79 20 61 6e 64 20 78 2c 7a 2c 20 6f 72 20  x,y and x,z, or 
69d0: 69 6e 64 69 63 65 73 20 79 2c 78 20 61 6e 64 20  indices y,x and 
69e0: 7a 2c 78 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77  z,x..#.do_test w
69f0: 68 65 72 65 39 2d 37 2e 30 20 7b 0a 20 20 65 78  here9-7.0 {.  ex
6a00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
6a10: 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62  TE TABLE t5(a, b
6a20: 2c 20 63 2c 20 64 2c 20 65 2c 20 66 2c 20 67 2c  , c, d, e, f, g,
6a30: 20 78 2c 20 79 29 3b 0a 20 20 20 20 49 4e 53 45   x, y);.    INSE
6a40: 52 54 20 49 4e 54 4f 20 74 35 0a 20 20 20 20 20  RT INTO t5.     
6a50: 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 2c 20  SELECT a, b, c, 
6a60: 65 2c 20 64 2c 20 66 2c 20 67 2c 0a 20 20 20 20  e, d, f, g,.    
6a70: 20 20 20 20 20 20 20 20 43 41 53 45 20 57 48 45          CASE WHE
6a80: 4e 20 28 61 26 31 29 21 3d 30 20 54 48 45 4e 20  N (a&1)!=0 THEN 
6a90: 27 79 27 20 45 4c 53 45 20 27 6e 27 20 45 4e 44  'y' ELSE 'n' END
6aa0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 41  ,.            CA
6ab0: 53 45 20 57 48 45 4e 20 28 61 26 32 29 21 3d 30  SE WHEN (a&2)!=0
6ac0: 20 54 48 45 4e 20 27 79 27 20 45 4c 53 45 20 27   THEN 'y' ELSE '
6ad0: 6e 27 20 45 4e 44 0a 20 20 20 20 20 20 20 46 52  n' END.       FR
6ae0: 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54  OM t1;.    CREAT
6af0: 45 20 49 4e 44 45 58 20 74 35 78 62 20 4f 4e 20  E INDEX t5xb ON 
6b00: 74 35 28 78 2c 20 62 29 3b 0a 20 20 20 20 43 52  t5(x, b);.    CR
6b10: 45 41 54 45 20 49 4e 44 45 58 20 74 35 78 63 20  EATE INDEX t5xc 
6b20: 4f 4e 20 74 35 28 78 2c 20 63 29 3b 0a 20 20 20  ON t5(x, c);.   
6b30: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35   CREATE INDEX t5
6b40: 78 64 20 4f 4e 20 74 35 28 78 2c 20 64 29 3b 0a  xd ON t5(x, d);.
6b50: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
6b60: 20 74 35 78 65 20 4f 4e 20 74 35 28 78 2c 20 65   t5xe ON t5(x, e
6b70: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
6b80: 44 45 58 20 74 35 78 66 20 4f 4e 20 74 35 28 78  DEX t5xf ON t5(x
6b90: 2c 20 66 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , f);.    CREATE
6ba0: 20 49 4e 44 45 58 20 74 35 78 67 20 4f 4e 20 74   INDEX t5xg ON t
6bb0: 35 28 78 2c 20 67 29 3b 0a 20 20 20 20 43 52 45  5(x, g);.    CRE
6bc0: 41 54 45 20 49 4e 44 45 58 20 74 35 79 62 20 4f  ATE INDEX t5yb O
6bd0: 4e 20 74 35 28 79 2c 20 62 29 3b 0a 20 20 20 20  N t5(y, b);.    
6be0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 79  CREATE INDEX t5y
6bf0: 63 20 4f 4e 20 74 35 28 79 2c 20 63 29 3b 0a 20  c ON t5(y, c);. 
6c00: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
6c10: 74 35 79 64 20 4f 4e 20 74 35 28 79 2c 20 64 29  t5yd ON t5(y, d)
6c20: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
6c30: 45 58 20 74 35 79 65 20 4f 4e 20 74 35 28 79 2c  EX t5ye ON t5(y,
6c40: 20 65 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   e);.    CREATE 
6c50: 49 4e 44 45 58 20 74 35 79 66 20 4f 4e 20 74 35  INDEX t5yf ON t5
6c60: 28 79 2c 20 66 29 3b 0a 20 20 20 20 43 52 45 41  (y, f);.    CREA
6c70: 54 45 20 49 4e 44 45 58 20 74 35 79 67 20 4f 4e  TE INDEX t5yg ON
6c80: 20 74 35 28 79 2c 20 67 29 3b 0a 20 20 20 20 43   t5(y, g);.    C
6c90: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61  REATE TABLE t6(a
6ca0: 2c 20 62 2c 20 63 2c 20 65 2c 20 64 2c 20 66 2c  , b, c, e, d, f,
6cb0: 20 67 2c 20 78 2c 20 79 29 3b 0a 20 20 20 20 49   g, x, y);.    I
6cc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 53 45  NSERT INTO t6 SE
6cd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 3b 0a  LECT * FROM t5;.
6ce0: 20 20 20 20 41 4e 41 4c 59 5a 45 20 74 35 3b 0a      ANALYZE t5;.
6cf0: 20 20 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20    }.  ifcapable 
6d00: 73 74 61 74 33 20 7b 0a 20 20 20 20 73 71 6c 69  stat3 {.    sqli
6d10: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
6d20: 20 20 20 20 64 62 32 20 65 76 61 6c 20 7b 20 44      db2 eval { D
6d30: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
6d40: 53 54 53 20 73 71 6c 69 74 65 5f 73 74 61 74 33  STS sqlite_stat3
6d50: 20 7d 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65   }.    db2 close
6d60: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
6d70: 74 20 77 68 65 72 65 39 2d 37 2e 31 2e 31 20 7b  t where9-7.1.1 {
6d80: 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73 20 7b  .  count_steps {
6d90: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
6da0: 4f 4d 20 74 35 20 57 48 45 52 45 20 78 3d 27 79  OM t5 WHERE x='y
6db0: 27 20 41 4e 44 20 28 62 3d 39 31 33 20 4f 52 20  ' AND (b=913 OR 
6dc0: 63 3d 32 37 30 32 37 29 20 4f 52 44 45 52 20 42  c=27027) ORDER B
6dd0: 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 37 39 20 38  Y a;.  }.} {79 8
6de0: 31 20 38 33 20 73 63 61 6e 20 30 20 73 6f 72 74  1 83 scan 0 sort
6df0: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   1}.do_test wher
6e00: 65 39 2d 37 2e 31 2e 32 20 7b 0a 20 20 65 78 65  e9-7.1.2 {.  exe
6e10: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
6e20: 54 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52  T a FROM t6 WHER
6e30: 45 20 78 3d 27 79 27 20 41 4e 44 20 28 62 3d 39  E x='y' AND (b=9
6e40: 31 33 20 4f 52 20 63 3d 32 37 30 32 37 29 20 4f  13 OR c=27027) O
6e50: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d  RDER BY a;.  }.}
6e60: 20 7b 37 39 20 38 31 20 38 33 7d 0a 64 6f 5f 74   {79 81 83}.do_t
6e70: 65 73 74 20 77 68 65 72 65 39 2d 37 2e 31 2e 33  est where9-7.1.3
6e80: 20 7b 0a 20 20 63 6f 75 6e 74 5f 73 74 65 70 73   {.  count_steps
6e90: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
6ea0: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 78 3d  FROM t5 WHERE x=
6eb0: 27 6e 27 20 41 4e 44 20 28 62 3d 39 31 33 20 4f  'n' AND (b=913 O
6ec0: 52 20 63 3d 32 37 30 32 37 29 20 4f 52 44 45 52  R c=27027) ORDER
6ed0: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 38 30   BY a;.  }.} {80
6ee0: 20 73 63 61 6e 20 30 20 73 6f 72 74 20 31 7d 0a   scan 0 sort 1}.
6ef0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 37  do_test where9-7
6f00: 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.4 {.  execsql
6f10: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
6f20: 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 78 3d  FROM t6 WHERE x=
6f30: 27 6e 27 20 41 4e 44 20 28 62 3d 39 31 33 20 4f  'n' AND (b=913 O
6f40: 52 20 63 3d 32 37 30 32 37 29 20 4f 52 44 45 52  R c=27027) ORDER
6f50: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 38 30   BY a;.  }.} {80
6f60: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39  }.do_test where9
6f70: 2d 37 2e 32 2e 31 20 7b 0a 20 20 63 6f 75 6e 74  -7.2.1 {.  count
6f80: 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53 45 4c  _steps {.    SEL
6f90: 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48  ECT a FROM t5 WH
6fa0: 45 52 45 20 28 78 3d 27 79 27 20 4f 52 20 79 3d  ERE (x='y' OR y=
6fb0: 27 79 27 29 20 41 4e 44 20 62 3d 39 31 33 20 4f  'y') AND b=913 O
6fc0: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d  RDER BY a;.  }.}
6fd0: 20 7b 38 33 20 73 63 61 6e 20 30 20 73 6f 72 74   {83 scan 0 sort
6fe0: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   1}.do_test wher
6ff0: 65 39 2d 37 2e 32 2e 32 20 7b 0a 20 20 65 78 65  e9-7.2.2 {.  exe
7000: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
7010: 54 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52  T a FROM t6 WHER
7020: 45 20 28 78 3d 27 79 27 20 4f 52 20 79 3d 27 79  E (x='y' OR y='y
7030: 27 29 20 41 4e 44 20 62 3d 39 31 33 20 4f 52 44  ') AND b=913 ORD
7040: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
7050: 38 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  83}.do_test wher
7060: 65 39 2d 37 2e 33 2e 31 20 7b 0a 20 20 63 6f 75  e9-7.3.1 {.  cou
7070: 6e 74 5f 73 74 65 70 73 20 7b 0a 20 20 20 20 53  nt_steps {.    S
7080: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20  ELECT a FROM t5 
7090: 57 48 45 52 45 20 28 78 3d 27 79 27 20 4f 52 20  WHERE (x='y' OR 
70a0: 79 3d 27 79 27 29 20 41 4e 44 20 63 3d 32 37 30  y='y') AND c=270
70b0: 32 37 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  27 ORDER BY a;. 
70c0: 20 7d 0a 7d 20 7b 37 39 20 38 31 20 73 63 61 6e   }.} {79 81 scan
70d0: 20 30 20 73 6f 72 74 20 31 7d 0a 64 6f 5f 74 65   0 sort 1}.do_te
70e0: 73 74 20 77 68 65 72 65 39 2d 37 2e 33 2e 32 20  st where9-7.3.2 
70f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
7100: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
7110: 74 36 20 57 48 45 52 45 20 28 78 3d 27 79 27 20  t6 WHERE (x='y' 
7120: 4f 52 20 79 3d 27 79 27 29 20 41 4e 44 20 63 3d  OR y='y') AND c=
7130: 32 37 30 32 37 20 4f 52 44 45 52 20 42 59 20 61  27027 ORDER BY a
7140: 3b 0a 20 20 7d 0a 7d 20 7b 37 39 20 38 31 7d 0a  ;.  }.} {79 81}.
7150: 0a 23 20 46 69 78 20 66 6f 72 20 74 69 63 6b 65  .# Fix for ticke
7160: 74 20 5b 62 37 63 38 36 38 32 63 63 31 37 66 33  t [b7c8682cc17f3
7170: 32 39 30 33 66 30 33 61 36 31 30 62 64 30 64 33  2903f03a610bd0d3
7180: 35 66 66 64 33 63 31 65 36 65 34 5d 0a 23 20 22  5ffd3c1e6e4].# "
7190: 49 6e 63 6f 72 72 65 63 74 20 72 65 73 75 6c 74  Incorrect result
71a0: 20 66 72 6f 6d 20 4c 45 46 54 20 4a 4f 49 4e 20   from LEFT JOIN 
71b0: 77 69 74 68 20 4f 52 20 69 6e 20 74 68 65 20 57  with OR in the W
71c0: 48 45 52 45 20 63 6c 61 75 73 65 22 0a 23 0a 64  HERE clause".#.d
71d0: 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 38 2e  o_test where9-8.
71e0: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
71f0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
7200: 20 74 38 31 28 61 20 49 4e 54 45 47 45 52 20 50   t81(a INTEGER P
7210: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
7220: 2c 20 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , d);.    CREATE
7230: 20 54 41 42 4c 45 20 74 38 32 28 78 20 49 4e 54   TABLE t82(x INT
7240: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7250: 2c 20 79 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , y);.    CREATE
7260: 20 54 41 42 4c 45 20 74 38 33 28 70 20 49 4e 54   TABLE t83(p INT
7270: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7280: 2c 20 71 29 3b 0a 20 20 20 20 0a 20 20 20 20 49  , q);.    .    I
7290: 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 31 20 56  NSERT INTO t81 V
72a0: 41 4c 55 45 53 28 32 2c 33 2c 34 2c 35 29 3b 0a  ALUES(2,3,4,5);.
72b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
72c0: 74 38 31 20 56 41 4c 55 45 53 28 33 2c 34 2c 35  t81 VALUES(3,4,5
72d0: 2c 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,6);.    INSERT 
72e0: 49 4e 54 4f 20 74 38 32 20 56 41 4c 55 45 53 28  INTO t82 VALUES(
72f0: 32 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2,4);.    INSERT
7300: 20 49 4e 54 4f 20 74 38 33 20 56 41 4c 55 45 53   INTO t83 VALUES
7310: 28 35 2c 35 35 29 3b 0a 20 20 20 20 0a 20 20 20  (5,55);.    .   
7320: 20 53 45 4c 45 43 54 20 2a 0a 20 20 20 20 20 20   SELECT *.      
7330: 46 52 4f 4d 20 74 38 31 20 4c 45 46 54 20 4a 4f  FROM t81 LEFT JO
7340: 49 4e 20 74 38 32 20 4f 4e 20 79 3d 62 20 4a 4f  IN t82 ON y=b JO
7350: 49 4e 20 74 38 33 0a 20 20 20 20 20 57 48 45 52  IN t83.     WHER
7360: 45 20 63 3d 3d 70 20 4f 52 20 64 3d 3d 70 0a 20  E c==p OR d==p. 
7370: 20 20 20 20 4f 52 44 45 52 20 42 59 20 2b 61 3b      ORDER BY +a;
7380: 0a 20 20 7d 0a 7d 20 7b 32 20 33 20 34 20 35 20  .  }.} {2 3 4 5 
7390: 7b 7d 20 7b 7d 20 35 20 35 35 20 33 20 34 20 35  {} {} 5 55 3 4 5
73a0: 20 36 20 32 20 34 20 35 20 35 35 7d 0a 64 6f 5f   6 2 4 5 55}.do_
73b0: 74 65 73 74 20 77 68 65 72 65 39 2d 38 2e 32 20  test where9-8.2 
73c0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
73d0: 20 20 53 45 4c 45 43 54 20 2a 0a 20 20 20 20 20    SELECT *.     
73e0: 20 46 52 4f 4d 20 74 38 31 20 4c 45 46 54 20 4a   FROM t81 LEFT J
73f0: 4f 49 4e 20 28 74 38 32 29 20 4f 4e 20 79 3d 62  OIN (t82) ON y=b
7400: 20 4a 4f 49 4e 20 74 38 33 0a 20 20 20 20 20 57   JOIN t83.     W
7410: 48 45 52 45 20 63 3d 3d 70 20 4f 52 20 64 3d 3d  HERE c==p OR d==
7420: 70 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  p.     ORDER BY 
7430: 2b 61 3b 0a 20 20 7d 0a 7d 20 7b 32 20 33 20 34  +a;.  }.} {2 3 4
7440: 20 35 20 7b 7d 20 7b 7d 20 35 20 35 35 20 33 20   5 {} {} 5 55 3 
7450: 34 20 35 20 36 20 32 20 34 20 35 20 35 35 7d 0a  4 5 6 2 4 5 55}.
7460: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 39 2d 38  do_test where9-8
7470: 2e 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .3 {.  db eval {
7480: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 0a 20 20  .    SELECT *.  
7490: 20 20 20 20 46 52 4f 4d 20 28 74 38 31 29 20 4c      FROM (t81) L
74a0: 45 46 54 20 4a 4f 49 4e 20 28 6d 61 69 6e 2e 74  EFT JOIN (main.t
74b0: 38 32 29 20 4f 4e 20 79 3d 62 20 4a 4f 49 4e 20  82) ON y=b JOIN 
74c0: 74 38 33 0a 20 20 20 20 20 57 48 45 52 45 20 63  t83.     WHERE c
74d0: 3d 3d 70 20 4f 52 20 64 3d 3d 70 0a 20 20 20 20  ==p OR d==p.    
74e0: 20 4f 52 44 45 52 20 42 59 20 2b 61 3b 0a 20 20   ORDER BY +a;.  
74f0: 7d 0a 7d 20 7b 32 20 33 20 34 20 35 20 7b 7d 20  }.} {2 3 4 5 {} 
7500: 7b 7d 20 35 20 35 35 20 33 20 34 20 35 20 36 20  {} 5 55 3 4 5 6 
7510: 32 20 34 20 35 20 35 35 7d 0a 0a 23 20 46 69 78  2 4 5 55}..# Fix
7520: 20 66 6f 72 20 74 69 63 6b 65 74 20 5b 66 32 33   for ticket [f23
7530: 36 39 33 30 34 65 34 37 31 36 37 65 33 65 36 34  69304e47167e3e64
7540: 34 65 32 66 31 66 65 39 37 33 36 30 36 33 33 39  4e2f1fe973606339
7550: 31 64 37 62 37 5d 0a 23 20 49 6e 63 6f 72 72 65  1d7b7].# Incorre
7560: 63 74 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20  ct results when 
7570: 4f 52 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  OR is used in th
7580: 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
7590: 20 4c 45 46 54 20 4a 4f 49 4e 20 0a 23 0a 64 6f   LEFT JOIN .#.do
75a0: 5f 74 65 73 74 20 77 68 65 72 65 39 2d 39 2e 31  _test where9-9.1
75b0: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
75c0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
75d0: 74 39 31 28 78 29 3b 20 49 4e 53 45 52 54 20 49  t91(x); INSERT I
75e0: 4e 54 4f 20 74 39 31 20 56 41 4c 55 45 53 28 31  NTO t91 VALUES(1
75f0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
7600: 42 4c 45 20 74 39 32 28 79 20 49 4e 54 45 47 45  BLE t92(y INTEGE
7610: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 61 2c  R PRIMARY KEY,a,
7620: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
7630: 4e 54 4f 20 74 39 32 20 56 41 4c 55 45 53 28 31  NTO t92 VALUES(1
7640: 2c 32 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43  ,2,3);.    SELEC
7650: 54 20 31 20 46 52 4f 4d 20 74 39 31 20 4c 45 46  T 1 FROM t91 LEF
7660: 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 61 3d  T JOIN t92 ON a=
7670: 32 20 4f 52 20 62 3d 33 3b 0a 20 20 20 20 53 45  2 OR b=3;.    SE
7680: 4c 45 43 54 20 32 20 46 52 4f 4d 20 74 39 31 20  LECT 2 FROM t91 
7690: 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e  LEFT JOIN t92 ON
76a0: 20 61 3d 32 20 41 4e 44 20 62 3d 33 3b 0a 20 20   a=2 AND b=3;.  
76b0: 20 20 53 45 4c 45 43 54 20 33 20 46 52 4f 4d 20    SELECT 3 FROM 
76c0: 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39  t91 LEFT JOIN t9
76d0: 32 20 4f 4e 20 28 61 3d 32 20 4f 52 20 62 3d 33  2 ON (a=2 OR b=3
76e0: 29 20 41 4e 44 20 79 20 49 53 20 4e 55 4c 4c 3b  ) AND y IS NULL;
76f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 34 20 46 52  .    SELECT 4 FR
7700: 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f 49 4e  OM t91 LEFT JOIN
7710: 20 74 39 32 20 4f 4e 20 28 61 3d 32 20 41 4e 44   t92 ON (a=2 AND
7720: 20 62 3d 33 29 20 41 4e 44 20 79 20 49 53 20 4e   b=3) AND y IS N
7730: 55 4c 4c 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ULL;.    CREATE 
7740: 54 45 4d 50 20 54 41 42 4c 45 20 78 39 20 41 53  TEMP TABLE x9 AS
7750: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
7760: 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32  91 LEFT JOIN t92
7770: 20 4f 4e 20 61 3d 32 20 4f 52 20 62 3d 33 3b 0a   ON a=2 OR b=3;.
7780: 20 20 20 20 53 45 4c 45 43 54 20 35 20 46 52 4f      SELECT 5 FRO
7790: 4d 20 78 39 20 57 48 45 52 45 20 79 20 49 53 20  M x9 WHERE y IS 
77a0: 4e 55 4c 4c 3b 0a 20 20 20 20 53 45 4c 45 43 54  NULL;.    SELECT
77b0: 20 36 20 46 52 4f 4d 20 74 39 31 20 4c 45 46 54   6 FROM t91 LEFT
77c0: 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20 61 3d 32   JOIN t92 ON a=2
77d0: 20 4f 52 20 62 3d 33 20 57 48 45 52 45 20 79 20   OR b=3 WHERE y 
77e0: 49 53 20 4e 55 4c 4c 3b 0a 20 20 20 20 53 45 4c  IS NULL;.    SEL
77f0: 45 43 54 20 37 20 46 52 4f 4d 20 74 39 31 20 4c  ECT 7 FROM t91 L
7800: 45 46 54 20 4a 4f 49 4e 20 74 39 32 20 4f 4e 20  EFT JOIN t92 ON 
7810: 61 3d 32 20 41 4e 44 20 62 3d 33 20 57 48 45 52  a=2 AND b=3 WHER
7820: 45 20 79 20 49 53 20 4e 55 4c 4c 3b 0a 20 20 20  E y IS NULL;.   
7830: 20 53 45 4c 45 43 54 20 38 20 46 52 4f 4d 20 74   SELECT 8 FROM t
7840: 39 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 39 32  91 LEFT JOIN t92
7850: 20 4f 4e 20 61 3d 32 32 20 4f 52 20 62 3d 33 33   ON a=22 OR b=33
7860: 20 57 48 45 52 45 20 79 20 49 53 20 4e 55 4c 4c   WHERE y IS NULL
7870: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 39 20 46  ;.    SELECT 9 F
7880: 52 4f 4d 20 74 39 31 20 4c 45 46 54 20 4a 4f 49  ROM t91 LEFT JOI
7890: 4e 20 74 39 32 20 4f 4e 20 61 3d 32 32 20 41 4e  N t92 ON a=22 AN
78a0: 44 20 62 3d 33 33 20 57 48 45 52 45 20 79 20 49  D b=33 WHERE y I
78b0: 53 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 7d 20 7b 31  S NULL;.  }.} {1
78c0: 20 32 20 33 20 34 20 38 20 39 7d 0a 0a 23 20 46   2 3 4 8 9}..# F
78d0: 69 78 20 66 6f 72 20 74 69 63 6b 65 74 20 5b 62  ix for ticket [b
78e0: 63 38 37 38 32 34 36 65 61 66 65 30 66 35 32 63  c878246eafe0f52c
78f0: 35 31 39 65 32 39 30 34 39 62 32 66 65 34 61 39  519e29049b2fe4a9
7900: 39 34 39 31 62 32 37 5d 0a 23 20 49 6e 63 6f 72  9491b27].# Incor
7910: 72 65 63 74 20 72 65 73 75 6c 74 20 77 68 65 6e  rect result when
7920: 20 4f 52 20 69 73 20 75 73 65 64 20 69 6e 20 61   OR is used in a
7930: 20 6a 6f 69 6e 20 74 6f 20 74 68 65 20 72 69 67   join to the rig
7940: 68 74 20 6f 66 20 61 20 4c 45 46 54 20 4a 4f 49  ht of a LEFT JOI
7950: 4e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  N.#.do_test wher
7960: 65 39 2d 31 30 2e 31 20 7b 0a 20 20 64 62 20 65  e9-10.1 {.  db e
7970: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
7980: 20 54 41 42 4c 45 20 74 31 30 31 20 28 69 64 20   TABLE t101 (id 
7990: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
79a0: 4b 45 59 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  KEY);.    INSERT
79b0: 20 49 4e 54 4f 20 74 31 30 31 20 56 41 4c 55 45   INTO t101 VALUE
79c0: 53 20 28 31 29 3b 0a 20 20 20 20 53 45 4c 45 43  S (1);.    SELEC
79d0: 54 20 2a 20 46 52 4f 4d 20 74 31 30 31 20 41 53  T * FROM t101 AS
79e0: 20 74 30 0a 20 20 20 20 20 20 20 20 20 4c 45 46   t0.         LEF
79f0: 54 20 4a 4f 49 4e 20 74 31 30 31 20 41 53 20 74  T JOIN t101 AS t
7a00: 31 20 4f 4e 20 74 31 2e 69 64 20 42 45 54 57 45  1 ON t1.id BETWE
7a10: 45 4e 20 31 30 20 41 4e 44 20 32 30 0a 20 20 20  EN 10 AND 20.   
7a20: 20 20 20 20 20 20 4a 4f 49 4e 20 74 31 30 31 20        JOIN t101 
7a30: 41 53 20 74 32 20 4f 4e 20 28 74 32 2e 69 64 20  AS t2 ON (t2.id 
7a40: 3d 20 74 30 2e 69 64 20 4f 52 20 28 74 32 2e 69  = t0.id OR (t2.i
7a50: 64 3c 3e 35 35 35 20 41 4e 44 20 74 32 2e 69 64  d<>555 AND t2.id
7a60: 3d 74 31 2e 69 64 29 29 3b 0a 20 20 7d 0a 7d 20  =t1.id));.  }.} 
7a70: 7b 31 20 7b 7d 20 31 7d 0a 64 6f 5f 74 65 73 74  {1 {} 1}.do_test
7a80: 20 77 68 65 72 65 39 2d 31 30 2e 32 20 7b 0a 20   where9-10.2 {. 
7a90: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43   db eval {.    C
7aa0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 32  REATE TABLE t102
7ab0: 20 28 69 64 20 54 45 58 54 20 55 4e 49 51 55 45   (id TEXT UNIQUE
7ac0: 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 20 20 20 20   NOT NULL);.    
7ad0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30 32  INSERT INTO t102
7ae0: 20 56 41 4c 55 45 53 20 28 27 31 27 29 3b 0a 20   VALUES ('1');. 
7af0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
7b00: 20 74 31 30 32 20 41 53 20 74 30 0a 20 20 20 20   t102 AS t0.    
7b10: 20 20 20 20 20 4c 45 46 54 20 4a 4f 49 4e 20 74       LEFT JOIN t
7b20: 31 30 32 20 41 53 20 74 31 20 4f 4e 20 74 31 2e  102 AS t1 ON t1.
7b30: 69 64 20 47 4c 4f 42 20 27 61 62 63 25 27 0a 20  id GLOB 'abc%'. 
7b40: 20 20 20 20 20 20 20 20 4a 4f 49 4e 20 74 31 30          JOIN t10
7b50: 32 20 41 53 20 74 32 20 4f 4e 20 28 74 32 2e 69  2 AS t2 ON (t2.i
7b60: 64 20 3d 20 74 30 2e 69 64 20 4f 52 20 28 74 32  d = t0.id OR (t2
7b70: 2e 69 64 3c 3e 35 35 35 20 41 4e 44 20 74 32 2e  .id<>555 AND t2.
7b80: 69 64 3d 74 31 2e 69 64 29 29 3b 0a 20 20 7d 0a  id=t1.id));.  }.
7b90: 7d 20 7b 31 20 7b 7d 20 31 7d 0a 0a 0a 0a 66 69  } {1 {} 1}....fi
7ba0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.