/ Hex Artifact Content
Login

Artifact 42fbad0e81afaa6e0de41c960329f2b2c3526efd:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 53 45 4c 45 43  is testing SELEC
01d0: 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
01e0: 74 20 63 6f 6e 74 61 69 6e 0a 23 20 61 67 67 72  t contain.# aggr
01f0: 65 67 61 74 65 20 6d 69 6e 28 29 20 61 6e 64 20  egate min() and 
0200: 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 73 20  max() functions 
0210: 61 6e 64 20 77 68 69 63 68 20 61 72 65 20 68 61  and which are ha
0220: 6e 64 6c 65 64 20 61 73 0a 23 20 61 73 20 61 20  ndled as.# as a 
0230: 73 70 65 63 69 61 6c 20 63 61 73 65 2e 0a 23 0a  special case..#.
0240: 23 20 24 49 64 3a 20 6d 69 6e 6d 61 78 2e 74 65  # $Id: minmax.te
0250: 73 74 2c 76 20 31 2e 32 31 20 32 30 30 38 2f 30  st,v 1.21 2008/0
0260: 37 2f 30 38 20 31 38 3a 30 35 3a 32 36 20 64 72  7/08 18:05:26 dr
0270: 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73  h Exp $..set tes
0280: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0290: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
02a0: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
02b0: 72 2e 74 63 6c 0a 73 65 74 20 3a 3a 74 65 73 74  r.tcl.set ::test
02c0: 70 72 65 66 69 78 20 6d 69 6e 6d 61 78 0a 0a 64  prefix minmax..d
02d0: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 2e  o_test minmax-1.
02e0: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
02f0: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43      BEGIN;.    C
0300: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
0310: 2c 20 79 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , y);.    INSERT
0320: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0330: 31 2c 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  1,1);.    INSERT
0340: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0350: 32 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2,2);.    INSERT
0360: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0370: 33 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  3,2);.    INSERT
0380: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0390: 34 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  4,3);.    INSERT
03a0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
03b0: 35 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  5,3);.    INSERT
03c0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
03d0: 36 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  6,3);.    INSERT
03e0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
03f0: 37 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  7,3);.    INSERT
0400: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0410: 38 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  8,4);.    INSERT
0420: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0430: 39 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  9,4);.    INSERT
0440: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0450: 31 30 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45 52  10,4);.    INSER
0460: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0470: 28 31 31 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45  (11,4);.    INSE
0480: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0490: 53 28 31 32 2c 34 29 3b 0a 20 20 20 20 49 4e 53  S(12,4);.    INS
04a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
04b0: 45 53 28 31 33 2c 34 29 3b 0a 20 20 20 20 49 4e  ES(13,4);.    IN
04c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
04d0: 55 45 53 28 31 34 2c 34 29 3b 0a 20 20 20 20 49  UES(14,4);.    I
04e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
04f0: 4c 55 45 53 28 31 35 2c 34 29 3b 0a 20 20 20 20  LUES(15,4);.    
0500: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0510: 41 4c 55 45 53 28 31 36 2c 35 29 3b 0a 20 20 20  ALUES(16,5);.   
0520: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0530: 56 41 4c 55 45 53 28 31 37 2c 35 29 3b 0a 20 20  VALUES(17,5);.  
0540: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0550: 20 56 41 4c 55 45 53 28 31 38 2c 35 29 3b 0a 20   VALUES(18,5);. 
0560: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0570: 31 20 56 41 4c 55 45 53 28 31 39 2c 35 29 3b 0a  1 VALUES(19,5);.
0580: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0590: 74 31 20 56 41 4c 55 45 53 28 32 30 2c 35 29 3b  t1 VALUES(20,5);
05a0: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20  .    COMMIT;.   
05b0: 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
05c0: 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   y FROM t1 ORDER
05d0: 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20   BY y;.  }.} {1 
05e0: 32 20 33 20 34 20 35 7d 0a 0a 64 6f 5f 74 65 73  2 3 4 5}..do_tes
05f0: 74 20 6d 69 6e 6d 61 78 2d 31 2e 31 20 7b 0a 20  t minmax-1.1 {. 
0600: 20 73 65 74 20 73 71 6c 69 74 65 5f 73 65 61 72   set sqlite_sear
0610: 63 68 5f 63 6f 75 6e 74 20 30 0a 20 20 65 78 65  ch_count 0.  exe
0620: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 69 6e  csql {SELECT min
0630: 28 78 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b  (x) FROM t1}.} {
0640: 31 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  1}.do_test minma
0650: 78 2d 31 2e 32 20 7b 0a 20 20 73 65 74 20 73 71  x-1.2 {.  set sq
0660: 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e  lite_search_coun
0670: 74 0a 7d 20 7b 31 39 7d 0a 64 6f 5f 74 65 73 74  t.} {19}.do_test
0680: 20 6d 69 6e 6d 61 78 2d 31 2e 33 20 7b 0a 20 20   minmax-1.3 {.  
0690: 73 65 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63  set sqlite_searc
06a0: 68 5f 63 6f 75 6e 74 20 30 0a 20 20 65 78 65 63  h_count 0.  exec
06b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 61 78 28  sql {SELECT max(
06c0: 78 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 32  x) FROM t1}.} {2
06d0: 30 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  0}.do_test minma
06e0: 78 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20 73 71  x-1.4 {.  set sq
06f0: 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e  lite_search_coun
0700: 74 0a 7d 20 7b 31 39 7d 0a 64 6f 5f 74 65 73 74  t.} {19}.do_test
0710: 20 6d 69 6e 6d 61 78 2d 31 2e 35 20 7b 0a 20 20   minmax-1.5 {.  
0720: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
0730: 49 4e 44 45 58 20 74 31 69 31 20 4f 4e 20 74 31  INDEX t1i1 ON t1
0740: 28 78 29 7d 0a 20 20 73 65 74 20 73 71 6c 69 74  (x)}.  set sqlit
0750: 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30  e_search_count 0
0760: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0770: 43 54 20 6d 69 6e 28 78 29 20 46 52 4f 4d 20 74  CT min(x) FROM t
0780: 31 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  1}.} {1}.do_test
0790: 20 6d 69 6e 6d 61 78 2d 31 2e 36 20 7b 0a 20 20   minmax-1.6 {.  
07a0: 73 65 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63  set sqlite_searc
07b0: 68 5f 63 6f 75 6e 74 0a 7d 20 7b 31 7d 0a 64 6f  h_count.} {1}.do
07c0: 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 2e 37  _test minmax-1.7
07d0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f   {.  set sqlite_
07e0: 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a 20  search_count 0. 
07f0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0800: 20 6d 61 78 28 78 29 20 46 52 4f 4d 20 74 31 7d   max(x) FROM t1}
0810: 0a 7d 20 7b 32 30 7d 0a 64 6f 5f 74 65 73 74 20  .} {20}.do_test 
0820: 6d 69 6e 6d 61 78 2d 31 2e 38 20 7b 0a 20 20 73  minmax-1.8 {.  s
0830: 65 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63 68  et sqlite_search
0840: 5f 63 6f 75 6e 74 0a 7d 20 7b 30 7d 0a 64 6f 5f  _count.} {0}.do_
0850: 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 2e 39 20  test minmax-1.9 
0860: 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 73  {.  set sqlite_s
0870: 65 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a 20 20  earch_count 0.  
0880: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0890: 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31 7d 0a  max(y) FROM t1}.
08a0: 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  } {5}.do_test mi
08b0: 6e 6d 61 78 2d 31 2e 31 30 20 7b 0a 20 20 73 65  nmax-1.10 {.  se
08c0: 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f  t sqlite_search_
08d0: 63 6f 75 6e 74 0a 7d 20 7b 31 39 7d 0a 0a 64 6f  count.} {19}..do
08e0: 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 2e 32  _test minmax-1.2
08f0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
0900: 45 4c 45 43 54 20 6d 69 6e 28 78 29 20 46 52 4f  ELECT min(x) FRO
0910: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 35 7d 0a  M t1 WHERE x=5}.
0920: 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  } {5}.do_test mi
0930: 6e 6d 61 78 2d 31 2e 32 32 20 7b 0a 20 20 65 78  nmax-1.22 {.  ex
0940: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 69  ecsql {SELECT mi
0950: 6e 28 78 29 20 46 52 4f 4d 20 74 31 20 57 48 45  n(x) FROM t1 WHE
0960: 52 45 20 78 3e 3d 35 7d 0a 7d 20 7b 35 7d 0a 64  RE x>=5}.} {5}.d
0970: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 2e  o_test minmax-1.
0980: 32 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  23 {.  execsql {
0990: 53 45 4c 45 43 54 20 6d 69 6e 28 78 29 20 46 52  SELECT min(x) FR
09a0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3e 3d 34  OM t1 WHERE x>=4
09b0: 2e 35 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73  .5}.} {5}.do_tes
09c0: 74 20 6d 69 6e 6d 61 78 2d 31 2e 32 34 20 7b 0a  t minmax-1.24 {.
09d0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
09e0: 54 20 6d 69 6e 28 78 29 20 46 52 4f 4d 20 74 31  T min(x) FROM t1
09f0: 20 57 48 45 52 45 20 78 3c 34 2e 35 7d 0a 7d 20   WHERE x<4.5}.} 
0a00: 7b 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 69 6e  {1}..do_test min
0a10: 6d 61 78 2d 32 2e 30 20 7b 0a 20 20 65 78 65 63  max-2.0 {.  exec
0a20: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
0a30: 20 54 41 42 4c 45 20 74 32 28 61 20 49 4e 54 45   TABLE t2(a INTE
0a40: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
0a50: 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   b);.    INSERT 
0a60: 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 2a  INTO t2 SELECT *
0a70: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 20 20   FROM t1;.  }.  
0a80: 73 65 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63  set sqlite_searc
0a90: 68 5f 63 6f 75 6e 74 20 30 0a 20 20 65 78 65 63  h_count 0.  exec
0aa0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 69 6e 28  sql {SELECT min(
0ab0: 61 29 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31  a) FROM t2}.} {1
0ac0: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78  }.do_test minmax
0ad0: 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c  -2.1 {.  set sql
0ae0: 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  ite_search_count
0af0: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 6d  .} {0}.do_test m
0b00: 69 6e 6d 61 78 2d 32 2e 32 20 7b 0a 20 20 73 65  inmax-2.2 {.  se
0b10: 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f  t sqlite_search_
0b20: 63 6f 75 6e 74 20 30 0a 20 20 65 78 65 63 73 71  count 0.  execsq
0b30: 6c 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 61 29  l {SELECT max(a)
0b40: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 32 30 7d   FROM t2}.} {20}
0b50: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d  .do_test minmax-
0b60: 32 2e 33 20 7b 0a 20 20 73 65 74 20 73 71 6c 69  2.3 {.  set sqli
0b70: 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 0a  te_search_count.
0b80: 7d 20 7b 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d  } {0}..do_test m
0b90: 69 6e 6d 61 78 2d 33 2e 30 20 7b 0a 20 20 69 66  inmax-3.0 {.  if
0ba0: 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79  capable subquery
0bb0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
0bc0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
0bd0: 41 4c 55 45 53 28 28 53 45 4c 45 43 54 20 6d 61  ALUES((SELECT ma
0be0: 78 28 61 29 20 46 52 4f 4d 20 74 32 29 2b 31 2c  x(a) FROM t2)+1,
0bf0: 39 39 39 29 7d 0a 20 20 7d 20 65 6c 73 65 20 7b  999)}.  } else {
0c00: 0a 20 20 20 20 64 62 20 66 75 6e 63 74 69 6f 6e  .    db function
0c10: 20 6d 61 78 5f 61 5f 74 32 20 7b 65 78 65 63 73   max_a_t2 {execs
0c20: 71 6c 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 61  ql {SELECT max(a
0c30: 29 20 46 52 4f 4d 20 74 32 7d 7d 0a 20 20 20 20  ) FROM t2}}.    
0c40: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
0c50: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 6d  INTO t2 VALUES(m
0c60: 61 78 5f 61 5f 74 32 28 29 2b 31 2c 39 39 39 29  ax_a_t2()+1,999)
0c70: 7d 0a 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 69  }.  }.  set sqli
0c80: 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20  te_search_count 
0c90: 30 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  0.  execsql {SEL
0ca0: 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d 20  ECT max(a) FROM 
0cb0: 74 32 7d 0a 7d 20 7b 32 31 7d 0a 64 6f 5f 74 65  t2}.} {21}.do_te
0cc0: 73 74 20 6d 69 6e 6d 61 78 2d 33 2e 31 20 7b 0a  st minmax-3.1 {.
0cd0: 20 20 73 65 74 20 73 71 6c 69 74 65 5f 73 65 61    set sqlite_sea
0ce0: 72 63 68 5f 63 6f 75 6e 74 0a 7d 20 7b 30 7d 0a  rch_count.} {0}.
0cf0: 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 33  do_test minmax-3
0d00: 2e 32 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65  .2 {.  ifcapable
0d10: 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20 20 20   subquery {.    
0d20: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
0d30: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 28  INTO t2 VALUES((
0d40: 53 45 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52  SELECT max(a) FR
0d50: 4f 4d 20 74 32 29 2b 31 2c 39 39 39 29 7d 0a 20  OM t2)+1,999)}. 
0d60: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 64 62   } else {.    db
0d70: 20 66 75 6e 63 74 69 6f 6e 20 6d 61 78 5f 61 5f   function max_a_
0d80: 74 32 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c  t2 {execsql {SEL
0d90: 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d 20  ECT max(a) FROM 
0da0: 74 32 7d 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  t2}}.    execsql
0db0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   {INSERT INTO t2
0dc0: 20 56 41 4c 55 45 53 28 6d 61 78 5f 61 5f 74 32   VALUES(max_a_t2
0dd0: 28 29 2b 31 2c 39 39 39 29 7d 0a 20 20 7d 0a 20  ()+1,999)}.  }. 
0de0: 20 73 65 74 20 73 71 6c 69 74 65 5f 73 65 61 72   set sqlite_sear
0df0: 63 68 5f 63 6f 75 6e 74 20 30 0a 20 20 69 66 63  ch_count 0.  ifc
0e00: 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79 20  apable subquery 
0e10: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
0e20: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 32  SELECT b FROM t2
0e30: 20 57 48 45 52 45 20 61 3d 28 53 45 4c 45 43 54   WHERE a=(SELECT
0e40: 20 6d 61 78 28 61 29 20 46 52 4f 4d 20 74 32 29   max(a) FROM t2)
0e50: 20 7d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20   }.  } else {.  
0e60: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
0e70: 43 54 20 62 20 46 52 4f 4d 20 74 32 20 57 48 45  CT b FROM t2 WHE
0e80: 52 45 20 61 3d 6d 61 78 5f 61 5f 74 32 28 29 20  RE a=max_a_t2() 
0e90: 7d 0a 20 20 7d 0a 7d 20 7b 39 39 39 7d 0a 64 6f  }.  }.} {999}.do
0ea0: 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 33 2e 33  _test minmax-3.3
0eb0: 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f   {.  set sqlite_
0ec0: 73 65 61 72 63 68 5f 63 6f 75 6e 74 0a 7d 20 7b  search_count.} {
0ed0: 30 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 63  0}..ifcapable {c
0ee0: 6f 6d 70 6f 75 6e 64 20 26 26 20 73 75 62 71 75  ompound && subqu
0ef0: 65 72 79 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ery} {.  do_test
0f00: 20 6d 69 6e 6d 61 78 2d 34 2e 31 20 7b 0a 20 20   minmax-4.1 {.  
0f10: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0f20: 20 20 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63    SELECT coalesc
0f30: 65 28 6d 69 6e 28 78 2b 30 29 2c 2d 31 29 2c 20  e(min(x+0),-1), 
0f40: 63 6f 61 6c 65 73 63 65 28 6d 61 78 28 78 2b 30  coalesce(max(x+0
0f50: 29 2c 2d 31 29 20 46 52 4f 4d 0a 20 20 20 20 20  ),-1) FROM.     
0f60: 20 20 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f     (SELECT * FRO
0f70: 4d 20 74 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43  M t1 UNION SELEC
0f80: 54 20 4e 55 4c 4c 20 61 73 20 27 78 27 2c 20 4e  T NULL as 'x', N
0f90: 55 4c 4c 20 61 73 20 27 79 27 29 0a 20 20 20 20  ULL as 'y').    
0fa0: 7d 0a 20 20 7d 20 7b 31 20 32 30 7d 0a 20 20 64  }.  } {1 20}.  d
0fb0: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 34 2e  o_test minmax-4.
0fc0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
0fd0: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 79  {.      SELECT y
0fe0: 2c 20 63 6f 61 6c 65 73 63 65 28 73 75 6d 28 78  , coalesce(sum(x
0ff0: 29 2c 30 29 20 46 52 4f 4d 0a 20 20 20 20 20 20  ),0) FROM.      
1000: 20 20 28 53 45 4c 45 43 54 20 6e 75 6c 6c 20 41    (SELECT null A
1010: 53 20 78 2c 20 79 2b 31 20 41 53 20 79 20 46 52  S x, y+1 AS y FR
1020: 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 53 45 4c 45  OM t1 UNION SELE
1030: 43 54 20 2a 20 46 52 4f 4d 20 74 31 29 0a 20 20  CT * FROM t1).  
1040: 20 20 20 20 47 52 4f 55 50 20 42 59 20 79 20 4f      GROUP BY y O
1050: 52 44 45 52 20 42 59 20 79 3b 0a 20 20 20 20 7d  RDER BY y;.    }
1060: 0a 20 20 7d 20 7b 31 20 31 20 32 20 35 20 33 20  .  } {1 1 2 5 3 
1070: 32 32 20 34 20 39 32 20 35 20 39 30 20 36 20 30  22 4 92 5 90 6 0
1080: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  }.  do_test minm
1090: 61 78 2d 34 2e 33 20 7b 0a 20 20 20 20 65 78 65  ax-4.3 {.    exe
10a0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
10b0: 45 43 54 20 79 2c 20 63 6f 75 6e 74 28 78 29 2c  ECT y, count(x),
10c0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 0a 20   count(*) FROM. 
10d0: 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 6e         (SELECT n
10e0: 75 6c 6c 20 41 53 20 78 2c 20 79 2b 31 20 41 53  ull AS x, y+1 AS
10f0: 20 79 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e   y FROM t1 UNION
1100: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1110: 31 29 0a 20 20 20 20 20 20 47 52 4f 55 50 20 42  1).      GROUP B
1120: 59 20 79 20 4f 52 44 45 52 20 42 59 20 79 3b 0a  Y y ORDER BY y;.
1130: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 31 20 31      }.  } {1 1 1
1140: 20 32 20 32 20 33 20 33 20 34 20 35 20 34 20 38   2 2 3 3 4 5 4 8
1150: 20 39 20 35 20 35 20 36 20 36 20 30 20 31 7d 0a   9 5 5 6 6 0 1}.
1160: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 63  } ;# ifcapable c
1170: 6f 6d 70 6f 75 6e 64 0a 0a 23 20 4d 61 6b 65 20  ompound..# Make 
1180: 73 75 72 65 20 74 68 65 20 6d 69 6e 28 78 29 20  sure the min(x) 
1190: 61 6e 64 20 6d 61 78 28 78 29 20 6f 70 74 69 6d  and max(x) optim
11a0: 69 7a 61 74 69 6f 6e 73 20 77 6f 72 6b 20 6f 6e  izations work on
11b0: 20 65 6d 70 74 79 20 74 61 62 6c 65 73 0a 23 20   empty tables.# 
11c0: 69 6e 63 6c 75 64 69 6e 67 20 65 6d 70 74 79 20  including empty 
11d0: 74 61 62 6c 65 73 20 77 69 74 68 20 69 6e 64 69  tables with indi
11e0: 63 65 73 2e 20 54 69 63 6b 65 74 20 23 32 39 36  ces. Ticket #296
11f0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  ..#.do_test minm
1200: 61 78 2d 35 2e 31 20 7b 0a 20 20 65 78 65 63 73  ax-5.1 {.  execs
1210: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1220: 54 41 42 4c 45 20 74 33 28 78 20 49 4e 54 45 47  TABLE t3(x INTEG
1230: 45 52 20 55 4e 49 51 55 45 20 4e 4f 54 20 4e 55  ER UNIQUE NOT NU
1240: 4c 4c 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  LL);.    SELECT 
1250: 63 6f 61 6c 65 73 63 65 28 6d 69 6e 28 78 29 2c  coalesce(min(x),
1260: 39 39 39 29 20 46 52 4f 4d 20 74 33 3b 0a 20 20  999) FROM t3;.  
1270: 7d 0a 7d 20 7b 39 39 39 7d 0a 64 6f 5f 74 65 73  }.} {999}.do_tes
1280: 74 20 6d 69 6e 6d 61 78 2d 35 2e 32 20 7b 0a 20  t minmax-5.2 {. 
1290: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
12a0: 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 6d  ELECT coalesce(m
12b0: 69 6e 28 72 6f 77 69 64 29 2c 39 39 39 29 20 46  in(rowid),999) F
12c0: 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 39  ROM t3;.  }.} {9
12d0: 39 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  99}.do_test minm
12e0: 61 78 2d 35 2e 33 20 7b 0a 20 20 65 78 65 63 73  ax-5.3 {.  execs
12f0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1300: 63 6f 61 6c 65 73 63 65 28 6d 61 78 28 78 29 2c  coalesce(max(x),
1310: 39 39 39 29 20 46 52 4f 4d 20 74 33 3b 0a 20 20  999) FROM t3;.  
1320: 7d 0a 7d 20 7b 39 39 39 7d 0a 64 6f 5f 74 65 73  }.} {999}.do_tes
1330: 74 20 6d 69 6e 6d 61 78 2d 35 2e 34 20 7b 0a 20  t minmax-5.4 {. 
1340: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1350: 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 6d  ELECT coalesce(m
1360: 61 78 28 72 6f 77 69 64 29 2c 39 39 39 29 20 46  ax(rowid),999) F
1370: 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 39  ROM t3;.  }.} {9
1380: 39 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  99}.do_test minm
1390: 61 78 2d 35 2e 35 20 7b 0a 20 20 65 78 65 63 73  ax-5.5 {.  execs
13a0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
13b0: 63 6f 61 6c 65 73 63 65 28 6d 61 78 28 72 6f 77  coalesce(max(row
13c0: 69 64 29 2c 39 39 39 29 20 46 52 4f 4d 20 74 33  id),999) FROM t3
13d0: 20 57 48 45 52 45 20 72 6f 77 69 64 3c 32 35 3b   WHERE rowid<25;
13e0: 0a 20 20 7d 0a 7d 20 7b 39 39 39 7d 0a 0a 23 20  .  }.} {999}..# 
13f0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6d 69  Make sure the mi
1400: 6e 28 78 29 20 61 6e 64 20 6d 61 78 28 78 29 20  n(x) and max(x) 
1410: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 77 6f  optimizations wo
1420: 72 6b 20 77 68 65 6e 20 74 68 65 72 65 0a 23 20  rk when there.# 
1430: 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  is a LIMIT claus
1440: 65 2e 20 20 54 69 63 6b 65 74 20 23 33 39 36 2e  e.  Ticket #396.
1450: 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  .#.do_test minma
1460: 78 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  x-6.1 {.  execsq
1470: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d  l {.    SELECT m
1480: 69 6e 28 61 29 20 46 52 4f 4d 20 74 32 20 4c 49  in(a) FROM t2 LI
1490: 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  MIT 1.  }.} {1}.
14a0: 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 36  do_test minmax-6
14b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
14c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28  .    SELECT max(
14d0: 61 29 20 46 52 4f 4d 20 74 32 20 4c 49 4d 49 54  a) FROM t2 LIMIT
14e0: 20 33 0a 20 20 7d 0a 7d 20 7b 32 32 7d 0a 64 6f   3.  }.} {22}.do
14f0: 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 36 2e 33  _test minmax-6.3
1500: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1510: 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 61 29     SELECT min(a)
1520: 20 46 52 4f 4d 20 74 32 20 4c 49 4d 49 54 20 30   FROM t2 LIMIT 0
1530: 2c 31 30 30 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64  ,100.  }.} {1}.d
1540: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 36 2e  o_test minmax-6.
1550: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
1560: 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 61      SELECT max(a
1570: 29 20 46 52 4f 4d 20 74 32 20 4c 49 4d 49 54 20  ) FROM t2 LIMIT 
1580: 31 2c 31 30 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  1,100.  }.} {}.d
1590: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 36 2e  o_test minmax-6.
15a0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
15b0: 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 78      SELECT min(x
15c0: 29 20 46 52 4f 4d 20 74 33 20 4c 49 4d 49 54 20  ) FROM t3 LIMIT 
15d0: 31 0a 20 20 7d 0a 7d 20 7b 7b 7d 7d 0a 64 6f 5f  1.  }.} {{}}.do_
15e0: 74 65 73 74 20 6d 69 6e 6d 61 78 2d 36 2e 36 20  test minmax-6.6 
15f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1600: 20 20 53 45 4c 45 43 54 20 6d 61 78 28 78 29 20    SELECT max(x) 
1610: 46 52 4f 4d 20 74 33 20 4c 49 4d 49 54 20 30 0a  FROM t3 LIMIT 0.
1620: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
1630: 20 6d 69 6e 6d 61 78 2d 36 2e 37 20 7b 0a 20 20   minmax-6.7 {.  
1640: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1650: 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f 4d  LECT max(a) FROM
1660: 20 74 32 20 4c 49 4d 49 54 20 30 0a 20 20 7d 0a   t2 LIMIT 0.  }.
1670: 7d 20 7b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  } {}..# Make sur
1680: 65 20 74 68 65 20 6d 61 78 28 78 29 20 61 6e 64  e the max(x) and
1690: 20 6d 69 6e 28 78 29 20 6f 70 74 69 6d 69 7a 61   min(x) optimiza
16a0: 74 69 6f 6e 73 20 77 6f 72 6b 20 66 6f 72 20 6e  tions work for n
16b0: 65 73 74 65 64 0a 23 20 71 75 65 72 69 65 73 2e  ested.# queries.
16c0: 20 20 54 69 63 6b 65 74 20 23 35 38 37 2e 0a 23    Ticket #587..#
16d0: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d  .do_test minmax-
16e0: 37 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.1 {.  execsql 
16f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  {.    SELECT max
1700: 28 78 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  (x) FROM t1;.  }
1710: 0a 7d 20 32 30 0a 69 66 63 61 70 61 62 6c 65 20  .} 20.ifcapable 
1720: 73 75 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f  subquery {.  do_
1730: 74 65 73 74 20 6d 69 6e 6d 61 78 2d 37 2e 32 20  test minmax-7.2 
1740: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1750: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
1760: 52 4f 4d 20 28 53 45 4c 45 43 54 20 6d 61 78 28  ROM (SELECT max(
1770: 78 29 20 46 52 4f 4d 20 74 31 29 3b 0a 20 20 20  x) FROM t1);.   
1780: 20 7d 0a 20 20 7d 20 32 30 0a 7d 0a 64 6f 5f 74   }.  } 20.}.do_t
1790: 65 73 74 20 6d 69 6e 6d 61 78 2d 37 2e 33 20 7b  est minmax-7.3 {
17a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
17b0: 20 53 45 4c 45 43 54 20 6d 69 6e 28 78 29 20 46   SELECT min(x) F
17c0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 31 0a  ROM t1;.  }.} 1.
17d0: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
17e0: 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 6d  ry {.  do_test m
17f0: 69 6e 6d 61 78 2d 37 2e 34 20 7b 0a 20 20 20 20  inmax-7.4 {.    
1800: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1810: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53  SELECT * FROM (S
1820: 45 4c 45 43 54 20 6d 69 6e 28 78 29 20 46 52 4f  ELECT min(x) FRO
1830: 4d 20 74 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  M t1);.    }.  }
1840: 20 31 0a 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72   1.}..# Make sur
1850: 65 20 6d 69 6e 28 78 29 20 61 6e 64 20 6d 61 78  e min(x) and max
1860: 28 78 29 20 77 6f 72 6b 20 63 6f 72 72 65 63 74  (x) work correct
1870: 6c 79 20 77 68 65 6e 20 74 68 65 20 64 61 74 61  ly when the data
1880: 74 79 70 65 20 69 73 0a 23 20 54 45 58 54 20 69  type is.# TEXT i
1890: 6e 73 74 65 61 64 20 6f 66 20 4e 55 4d 45 52 49  nstead of NUMERI
18a0: 43 2e 20 20 54 69 63 6b 65 74 20 23 36 32 33 2e  C.  Ticket #623.
18b0: 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  .#.do_test minma
18c0: 78 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  x-8.1 {.  execsq
18d0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
18e0: 41 42 4c 45 20 74 34 28 61 20 54 45 58 54 29 3b  ABLE t4(a TEXT);
18f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1900: 20 74 34 20 56 41 4c 55 45 53 28 27 31 32 33 34   t4 VALUES('1234
1910: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
1920: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 32  NTO t4 VALUES('2
1930: 33 34 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  34');.    INSERT
1940: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
1950: 27 33 34 27 29 3b 0a 20 20 20 20 53 45 4c 45 43  '34');.    SELEC
1960: 54 20 6d 69 6e 28 61 29 2c 20 6d 61 78 28 61 29  T min(a), max(a)
1970: 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20   FROM t4;.  }.} 
1980: 7b 31 32 33 34 20 33 34 7d 0a 64 6f 5f 74 65 73  {1234 34}.do_tes
1990: 74 20 6d 69 6e 6d 61 78 2d 38 2e 32 20 7b 0a 20  t minmax-8.2 {. 
19a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
19b0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
19c0: 20 49 4e 54 45 47 45 52 29 3b 0a 20 20 20 20 49   INTEGER);.    I
19d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41  NSERT INTO t5 VA
19e0: 4c 55 45 53 28 27 31 32 33 34 27 29 3b 0a 20 20  LUES('1234');.  
19f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
1a00: 20 56 41 4c 55 45 53 28 27 32 33 34 27 29 3b 0a   VALUES('234');.
1a10: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1a20: 74 35 20 56 41 4c 55 45 53 28 27 33 34 27 29 3b  t5 VALUES('34');
1a30: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28  .    SELECT min(
1a40: 61 29 2c 20 6d 61 78 28 61 29 20 46 52 4f 4d 20  a), max(a) FROM 
1a50: 74 35 3b 0a 20 20 7d 0a 7d 20 7b 33 34 20 31 32  t5;.  }.} {34 12
1a60: 33 34 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 36  34}..# Ticket #6
1a70: 35 38 3a 20 20 54 65 73 74 20 74 68 65 20 6d 69  58:  Test the mi
1a80: 6e 28 29 2f 6d 61 78 28 29 20 6f 70 74 69 6d 69  n()/max() optimi
1a90: 7a 61 74 69 6f 6e 20 77 68 65 6e 20 74 68 65 20  zation when the 
1aa0: 46 52 4f 4d 20 63 6c 61 75 73 65 0a 23 20 69 73  FROM clause.# is
1ab0: 20 61 20 73 75 62 71 75 65 72 79 2e 0a 23 0a 69   a subquery..#.i
1ac0: 66 63 61 70 61 62 6c 65 20 7b 63 6f 6d 70 6f 75  fcapable {compou
1ad0: 6e 64 20 26 26 20 73 75 62 71 75 65 72 79 7d 20  nd && subquery} 
1ae0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  {.  do_test minm
1af0: 61 78 2d 39 2e 31 20 7b 0a 20 20 20 20 65 78 65  ax-9.1 {.    exe
1b00: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
1b10: 45 43 54 20 6d 61 78 28 72 6f 77 69 64 29 20 46  ECT max(rowid) F
1b20: 52 4f 4d 20 28 0a 20 20 20 20 20 20 20 20 53 45  ROM (.        SE
1b30: 4c 45 43 54 20 6d 61 78 28 72 6f 77 69 64 29 20  LECT max(rowid) 
1b40: 46 52 4f 4d 20 74 34 20 55 4e 49 4f 4e 20 53 45  FROM t4 UNION SE
1b50: 4c 45 43 54 20 6d 61 78 28 72 6f 77 69 64 29 20  LECT max(rowid) 
1b60: 46 52 4f 4d 20 74 35 0a 20 20 20 20 20 20 29 0a  FROM t5.      ).
1b70: 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 7d 0a 20      }.  } {{}}. 
1b80: 20 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d   do_test minmax-
1b90: 39 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  9.2 {.    execsq
1ba0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
1bb0: 20 6d 61 78 28 72 6f 77 69 64 29 20 46 52 4f 4d   max(rowid) FROM
1bc0: 20 28 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43   (.        SELEC
1bd0: 54 20 6d 61 78 28 72 6f 77 69 64 29 20 46 52 4f  T max(rowid) FRO
1be0: 4d 20 74 34 20 45 58 43 45 50 54 20 53 45 4c 45  M t4 EXCEPT SELE
1bf0: 43 54 20 6d 61 78 28 72 6f 77 69 64 29 20 46 52  CT max(rowid) FR
1c00: 4f 4d 20 74 35 0a 20 20 20 20 20 20 29 0a 20 20  OM t5.      ).  
1c10: 20 20 7d 0a 20 20 7d 20 7b 7b 7d 7d 0a 7d 20 3b    }.  } {{}}.} ;
1c20: 23 20 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70  # ifcapable comp
1c30: 6f 75 6e 64 26 26 73 75 62 71 75 65 72 79 0a 0a  ound&&subquery..
1c40: 23 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  # If there is a 
1c50: 4e 55 4c 4c 20 69 6e 20 61 6e 20 61 67 67 72 65  NULL in an aggre
1c60: 67 61 74 65 20 6d 61 78 28 29 20 6f 72 20 6d 69  gate max() or mi
1c70: 6e 28 29 2c 20 69 67 6e 6f 72 65 20 69 74 2e 20  n(), ignore it. 
1c80: 20 41 6e 0a 23 20 61 67 67 72 65 67 61 74 65 20   An.# aggregate 
1c90: 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 77  min() or max() w
1ca0: 69 6c 6c 20 6f 6e 6c 79 20 72 65 74 75 72 6e 20  ill only return 
1cb0: 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 76 61 6c 75  NULL if all valu
1cc0: 65 73 20 61 72 65 20 4e 55 4c 4c 2e 0a 23 0a 64  es are NULL..#.d
1cd0: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 30  o_test minmax-10
1ce0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
1cf0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1d00: 45 20 74 36 28 78 29 3b 0a 20 20 20 20 49 4e 53  E t6(x);.    INS
1d10: 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55  ERT INTO t6 VALU
1d20: 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  ES(1);.    INSER
1d30: 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53  T INTO t6 VALUES
1d40: 28 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (2);.    INSERT 
1d50: 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 4e  INTO t6 VALUES(N
1d60: 55 4c 4c 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  ULL);.    SELECT
1d70: 20 63 6f 61 6c 65 73 63 65 28 6d 69 6e 28 78 29   coalesce(min(x)
1d80: 2c 2d 31 29 20 46 52 4f 4d 20 74 36 3b 0a 20 20  ,-1) FROM t6;.  
1d90: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
1da0: 6d 69 6e 6d 61 78 2d 31 30 2e 32 20 7b 0a 20 20  minmax-10.2 {.  
1db0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1dc0: 4c 45 43 54 20 6d 61 78 28 78 29 20 46 52 4f 4d  LECT max(x) FROM
1dd0: 20 74 36 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64   t6;.  }.} {2}.d
1de0: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 30  o_test minmax-10
1df0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
1e00: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
1e10: 58 20 69 36 20 4f 4e 20 74 36 28 78 29 3b 0a 20  X i6 ON t6(x);. 
1e20: 20 20 20 53 45 4c 45 43 54 20 63 6f 61 6c 65 73     SELECT coales
1e30: 63 65 28 6d 69 6e 28 78 29 2c 2d 31 29 20 46 52  ce(min(x),-1) FR
1e40: 4f 4d 20 74 36 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  OM t6;.  }.} {1}
1e50: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d  .do_test minmax-
1e60: 31 30 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.4 {.  execsql
1e70: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61   {.    SELECT ma
1e80: 78 28 78 29 20 46 52 4f 4d 20 74 36 3b 0a 20 20  x(x) FROM t6;.  
1e90: 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  }.} {2}.do_test 
1ea0: 6d 69 6e 6d 61 78 2d 31 30 2e 35 20 7b 0a 20 20  minmax-10.5 {.  
1eb0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
1ec0: 4c 45 54 45 20 46 52 4f 4d 20 74 36 20 57 48 45  LETE FROM t6 WHE
1ed0: 52 45 20 78 20 4e 4f 54 20 4e 55 4c 4c 3b 0a 20  RE x NOT NULL;. 
1ee0: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
1ef0: 2a 29 20 46 52 4f 4d 20 74 36 3b 0a 20 20 7d 0a  *) FROM t6;.  }.
1f00: 7d 20 31 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  } 1.do_test minm
1f10: 61 78 2d 31 30 2e 36 20 7b 0a 20 20 65 78 65 63  ax-10.6 {.  exec
1f20: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1f30: 20 63 6f 75 6e 74 28 78 29 20 46 52 4f 4d 20 74   count(x) FROM t
1f40: 36 3b 0a 20 20 7d 0a 7d 20 30 0a 69 66 63 61 70  6;.  }.} 0.ifcap
1f50: 61 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a  able subquery {.
1f60: 20 20 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78    do_test minmax
1f70: 2d 31 30 2e 37 20 7b 0a 20 20 20 20 65 78 65 63  -10.7 {.    exec
1f80: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
1f90: 43 54 20 28 53 45 4c 45 43 54 20 6d 69 6e 28 78  CT (SELECT min(x
1fa0: 29 20 46 52 4f 4d 20 74 36 29 2c 20 28 53 45 4c  ) FROM t6), (SEL
1fb0: 45 43 54 20 6d 61 78 28 78 29 20 46 52 4f 4d 20  ECT max(x) FROM 
1fc0: 74 36 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  t6);.    }.  } {
1fd0: 7b 7d 20 7b 7d 7d 0a 7d 0a 64 6f 5f 74 65 73 74  {} {}}.}.do_test
1fe0: 20 6d 69 6e 6d 61 78 2d 31 30 2e 38 20 7b 0a 20   minmax-10.8 {. 
1ff0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2000: 45 4c 45 43 54 20 6d 69 6e 28 78 29 2c 20 6d 61  ELECT min(x), ma
2010: 78 28 78 29 20 46 52 4f 4d 20 74 36 3b 0a 20 20  x(x) FROM t6;.  
2020: 7d 0a 7d 20 7b 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  }.} {{} {}}.do_t
2030: 65 73 74 20 6d 69 6e 6d 61 78 2d 31 30 2e 39 20  est minmax-10.9 
2040: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2050: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36    INSERT INTO t6
2060: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2070: 36 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  6;.    INSERT IN
2080: 54 4f 20 74 36 20 53 45 4c 45 43 54 20 2a 20 46  TO t6 SELECT * F
2090: 52 4f 4d 20 74 36 3b 0a 20 20 20 20 49 4e 53 45  ROM t6;.    INSE
20a0: 52 54 20 49 4e 54 4f 20 74 36 20 53 45 4c 45 43  RT INTO t6 SELEC
20b0: 54 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20 20  T * FROM t6;.   
20c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20   INSERT INTO t6 
20d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36  SELECT * FROM t6
20e0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
20f0: 4f 20 74 36 20 53 45 4c 45 43 54 20 2a 20 46 52  O t6 SELECT * FR
2100: 4f 4d 20 74 36 3b 0a 20 20 20 20 49 4e 53 45 52  OM t6;.    INSER
2110: 54 20 49 4e 54 4f 20 74 36 20 53 45 4c 45 43 54  T INTO t6 SELECT
2120: 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20 20 20   * FROM t6;.    
2130: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 53  INSERT INTO t6 S
2140: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 3b  ELECT * FROM t6;
2150: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2160: 20 74 36 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t6 SELECT * FRO
2170: 4d 20 74 36 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t6;.    INSERT
2180: 20 49 4e 54 4f 20 74 36 20 53 45 4c 45 43 54 20   INTO t6 SELECT 
2190: 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20 20 20 49  * FROM t6;.    I
21a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 53 45  NSERT INTO t6 SE
21b0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 3b 0a  LECT * FROM t6;.
21c0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
21d0: 28 2a 29 20 46 52 4f 4d 20 74 36 3b 0a 20 20 7d  (*) FROM t6;.  }
21e0: 0a 7d 20 31 30 32 34 0a 64 6f 5f 74 65 73 74 20  .} 1024.do_test 
21f0: 6d 69 6e 6d 61 78 2d 31 30 2e 31 30 20 7b 0a 20  minmax-10.10 {. 
2200: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2210: 45 4c 45 43 54 20 63 6f 75 6e 74 28 78 29 20 46  ELECT count(x) F
2220: 52 4f 4d 20 74 36 3b 0a 20 20 7d 0a 7d 20 30 0a  ROM t6;.  }.} 0.
2230: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
2240: 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 6d  ry {.  do_test m
2250: 69 6e 6d 61 78 2d 31 30 2e 31 31 20 7b 0a 20 20  inmax-10.11 {.  
2260: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2270: 20 20 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54    SELECT (SELECT
2280: 20 6d 69 6e 28 78 29 20 46 52 4f 4d 20 74 36 29   min(x) FROM t6)
2290: 2c 20 28 53 45 4c 45 43 54 20 6d 61 78 28 78 29  , (SELECT max(x)
22a0: 20 46 52 4f 4d 20 74 36 29 3b 0a 20 20 20 20 7d   FROM t6);.    }
22b0: 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 7d 0a 7d 0a 64  .  } {{} {}}.}.d
22c0: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 30  o_test minmax-10
22d0: 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .12 {.  execsql 
22e0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e  {.    SELECT min
22f0: 28 78 29 2c 20 6d 61 78 28 78 29 20 46 52 4f 4d  (x), max(x) FROM
2300: 20 74 36 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b   t6;.  }.} {{} {
2310: 7d 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20 6d 69 6e  }}...do_test min
2320: 6d 61 78 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65  max-11.1 {.  exe
2330: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
2340: 45 20 49 4e 44 45 58 20 74 31 69 32 20 4f 4e 20  E INDEX t1i2 ON 
2350: 74 31 28 79 2c 78 29 3b 0a 20 20 20 20 53 45 4c  t1(y,x);.    SEL
2360: 45 43 54 20 6d 69 6e 28 78 29 20 46 52 4f 4d 20  ECT min(x) FROM 
2370: 74 31 20 57 48 45 52 45 20 79 3d 35 3b 0a 20 20  t1 WHERE y=5;.  
2380: 7d 0a 7d 20 7b 31 36 7d 0a 64 6f 5f 74 65 73 74  }.} {16}.do_test
2390: 20 6d 69 6e 6d 61 78 2d 31 31 2e 32 20 7b 0a 20   minmax-11.2 {. 
23a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
23b0: 45 4c 45 43 54 20 6d 61 78 28 78 29 20 46 52 4f  ELECT max(x) FRO
23c0: 4d 20 74 31 20 57 48 45 52 45 20 79 3d 35 3b 0a  M t1 WHERE y=5;.
23d0: 20 20 7d 0a 7d 20 7b 32 30 7d 0a 64 6f 5f 74 65    }.} {20}.do_te
23e0: 73 74 20 6d 69 6e 6d 61 78 2d 31 31 2e 33 20 7b  st minmax-11.3 {
23f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2400: 20 53 45 4c 45 43 54 20 6d 69 6e 28 78 29 20 46   SELECT min(x) F
2410: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 36  ROM t1 WHERE y=6
2420: 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 7d 0a 64 6f 5f  ;.  }.} {{}}.do_
2430: 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 31 2e 34  test minmax-11.4
2440: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2450: 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 78 29     SELECT max(x)
2460: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
2470: 3d 36 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 7d 0a 64  =6;.  }.} {{}}.d
2480: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 31  o_test minmax-11
2490: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
24a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28  .    SELECT min(
24b0: 78 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  x) FROM t1 WHERE
24c0: 20 79 3d 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a   y=1;.  }.} {1}.
24d0: 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31  do_test minmax-1
24e0: 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.6 {.  execsql 
24f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  {.    SELECT max
2500: 28 78 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (x) FROM t1 WHER
2510: 45 20 79 3d 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  E y=1;.  }.} {1}
2520: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d  .do_test minmax-
2530: 31 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.7 {.  execsql
2540: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69   {.    SELECT mi
2550: 6e 28 78 29 20 46 52 4f 4d 20 74 31 20 57 48 45  n(x) FROM t1 WHE
2560: 52 45 20 79 3d 30 3b 0a 20 20 7d 0a 7d 20 7b 7b  RE y=0;.  }.} {{
2570: 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  }}.do_test minma
2580: 78 2d 31 31 2e 38 20 7b 0a 20 20 65 78 65 63 73  x-11.8 {.  execs
2590: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
25a0: 6d 61 78 28 78 29 20 46 52 4f 4d 20 74 31 20 57  max(x) FROM t1 W
25b0: 48 45 52 45 20 79 3d 30 3b 0a 20 20 7d 0a 7d 20  HERE y=0;.  }.} 
25c0: 7b 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e  {{}}.do_test min
25d0: 6d 61 78 2d 31 31 2e 39 20 7b 0a 20 20 65 78 65  max-11.9 {.  exe
25e0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
25f0: 54 20 6d 69 6e 28 78 29 20 46 52 4f 4d 20 74 31  T min(x) FROM t1
2600: 20 57 48 45 52 45 20 79 3d 35 20 41 4e 44 20 78   WHERE y=5 AND x
2610: 3e 3d 31 37 2e 35 3b 0a 20 20 7d 0a 7d 20 7b 31  >=17.5;.  }.} {1
2620: 38 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  8}.do_test minma
2630: 78 2d 31 31 2e 31 30 20 7b 0a 20 20 65 78 65 63  x-11.10 {.  exec
2640: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2650: 20 6d 61 78 28 78 29 20 46 52 4f 4d 20 74 31 20   max(x) FROM t1 
2660: 57 48 45 52 45 20 79 3d 35 20 41 4e 44 20 78 3e  WHERE y=5 AND x>
2670: 3d 31 37 2e 35 3b 0a 20 20 7d 0a 7d 20 7b 32 30  =17.5;.  }.} {20
2680: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  }..do_test minma
2690: 78 2d 31 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  x-12.1 {.  execs
26a0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
26b0: 54 41 42 4c 45 20 74 37 28 61 2c 62 2c 63 29 3b  TABLE t7(a,b,c);
26c0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
26d0: 20 74 37 20 53 45 4c 45 43 54 20 79 2c 20 78 2c   t7 SELECT y, x,
26e0: 20 78 2a 79 20 46 52 4f 4d 20 74 31 3b 0a 20 20   x*y FROM t1;.  
26f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
2700: 20 53 45 4c 45 43 54 20 79 2c 20 78 2c 20 78 2a   SELECT y, x, x*
2710: 79 2b 31 30 30 30 20 46 52 4f 4d 20 74 31 3b 0a  y+1000 FROM t1;.
2720: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
2730: 20 74 37 69 31 20 4f 4e 20 74 37 28 61 2c 62 2c   t7i1 ON t7(a,b,
2740: 63 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d  c);.    SELECT m
2750: 69 6e 28 61 29 20 46 52 4f 4d 20 74 37 3b 0a 20  in(a) FROM t7;. 
2760: 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   }.} {1}.do_test
2770: 20 6d 69 6e 6d 61 78 2d 31 32 2e 32 20 7b 0a 20   minmax-12.2 {. 
2780: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2790: 45 4c 45 43 54 20 6d 61 78 28 61 29 20 46 52 4f  ELECT max(a) FRO
27a0: 4d 20 74 37 3b 0a 20 20 7d 0a 7d 20 7b 35 7d 0a  M t7;.  }.} {5}.
27b0: 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31  do_test minmax-1
27c0: 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.3 {.  execsql 
27d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  {.    SELECT max
27e0: 28 61 29 20 46 52 4f 4d 20 74 37 20 57 48 45 52  (a) FROM t7 WHER
27f0: 45 20 61 3d 35 3b 0a 20 20 7d 0a 7d 20 7b 35 7d  E a=5;.  }.} {5}
2800: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d  .do_test minmax-
2810: 31 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  12.4 {.  execsql
2820: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69   {.    SELECT mi
2830: 6e 28 62 29 20 46 52 4f 4d 20 74 37 20 57 48 45  n(b) FROM t7 WHE
2840: 52 45 20 61 3d 35 3b 0a 20 20 7d 0a 7d 20 7b 31  RE a=5;.  }.} {1
2850: 36 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  6}.do_test minma
2860: 78 2d 31 32 2e 35 20 7b 0a 20 20 65 78 65 63 73  x-12.5 {.  execs
2870: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2880: 6d 61 78 28 62 29 20 46 52 4f 4d 20 74 37 20 57  max(b) FROM t7 W
2890: 48 45 52 45 20 61 3d 35 3b 0a 20 20 7d 0a 7d 20  HERE a=5;.  }.} 
28a0: 7b 32 30 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e  {20}.do_test min
28b0: 6d 61 78 2d 31 32 2e 36 20 7b 0a 20 20 65 78 65  max-12.6 {.  exe
28c0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
28d0: 54 20 6d 69 6e 28 62 29 20 46 52 4f 4d 20 74 37  T min(b) FROM t7
28e0: 20 57 48 45 52 45 20 61 3d 34 3b 0a 20 20 7d 0a   WHERE a=4;.  }.
28f0: 7d 20 7b 38 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  } {8}.do_test mi
2900: 6e 6d 61 78 2d 31 32 2e 37 20 7b 0a 20 20 65 78  nmax-12.7 {.  ex
2910: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2920: 43 54 20 6d 61 78 28 62 29 20 46 52 4f 4d 20 74  CT max(b) FROM t
2930: 37 20 57 48 45 52 45 20 61 3d 34 3b 0a 20 20 7d  7 WHERE a=4;.  }
2940: 0a 7d 20 7b 31 35 7d 0a 64 6f 5f 74 65 73 74 20  .} {15}.do_test 
2950: 6d 69 6e 6d 61 78 2d 31 32 2e 38 20 7b 0a 20 20  minmax-12.8 {.  
2960: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2970: 4c 45 43 54 20 6d 69 6e 28 63 29 20 46 52 4f 4d  LECT min(c) FROM
2980: 20 74 37 20 57 48 45 52 45 20 61 3d 34 20 41 4e   t7 WHERE a=4 AN
2990: 44 20 62 3d 31 30 3b 0a 20 20 7d 0a 7d 20 7b 34  D b=10;.  }.} {4
29a0: 30 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  0}.do_test minma
29b0: 78 2d 31 32 2e 39 20 7b 0a 20 20 65 78 65 63 73  x-12.9 {.  execs
29c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
29d0: 6d 61 78 28 63 29 20 46 52 4f 4d 20 74 37 20 57  max(c) FROM t7 W
29e0: 48 45 52 45 20 61 3d 34 20 41 4e 44 20 62 3d 31  HERE a=4 AND b=1
29f0: 30 3b 0a 20 20 7d 0a 7d 20 7b 31 30 34 30 7d 0a  0;.  }.} {1040}.
2a00: 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31  do_test minmax-1
2a10: 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.10 {.  execsql
2a20: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69   {.    SELECT mi
2a30: 6e 28 72 6f 77 69 64 29 20 46 52 4f 4d 20 74 37  n(rowid) FROM t7
2a40: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ;.  }.} {1}.do_t
2a50: 65 73 74 20 6d 69 6e 6d 61 78 2d 31 32 2e 31 31  est minmax-12.11
2a60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2a70: 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 72 6f     SELECT max(ro
2a80: 77 69 64 29 20 46 52 4f 4d 20 74 37 3b 0a 20 20  wid) FROM t7;.  
2a90: 7d 0a 7d 20 7b 34 30 7d 0a 64 6f 5f 74 65 73 74  }.} {40}.do_test
2aa0: 20 6d 69 6e 6d 61 78 2d 31 32 2e 31 32 20 7b 0a   minmax-12.12 {.
2ab0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2ac0: 53 45 4c 45 43 54 20 6d 69 6e 28 72 6f 77 69 64  SELECT min(rowid
2ad0: 29 20 46 52 4f 4d 20 74 37 20 57 48 45 52 45 20  ) FROM t7 WHERE 
2ae0: 61 3d 33 3b 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 64  a=3;.  }.} {4}.d
2af0: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 32  o_test minmax-12
2b00: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
2b10: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  {.    SELECT max
2b20: 28 72 6f 77 69 64 29 20 46 52 4f 4d 20 74 37 20  (rowid) FROM t7 
2b30: 57 48 45 52 45 20 61 3d 33 3b 0a 20 20 7d 0a 7d  WHERE a=3;.  }.}
2b40: 20 7b 32 37 7d 0a 64 6f 5f 74 65 73 74 20 6d 69   {27}.do_test mi
2b50: 6e 6d 61 78 2d 31 32 2e 31 34 20 7b 0a 20 20 65  nmax-12.14 {.  e
2b60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2b70: 45 43 54 20 6d 69 6e 28 72 6f 77 69 64 29 20 46  ECT min(rowid) F
2b80: 52 4f 4d 20 74 37 20 57 48 45 52 45 20 61 3d 33  ROM t7 WHERE a=3
2b90: 20 41 4e 44 20 62 3d 35 3b 0a 20 20 7d 0a 7d 20   AND b=5;.  }.} 
2ba0: 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  {5}.do_test minm
2bb0: 61 78 2d 31 32 2e 31 35 20 7b 0a 20 20 65 78 65  ax-12.15 {.  exe
2bc0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2bd0: 54 20 6d 61 78 28 72 6f 77 69 64 29 20 46 52 4f  T max(rowid) FRO
2be0: 4d 20 74 37 20 57 48 45 52 45 20 61 3d 33 20 41  M t7 WHERE a=3 A
2bf0: 4e 44 20 62 3d 35 3b 0a 20 20 7d 0a 7d 20 7b 32  ND b=5;.  }.} {2
2c00: 35 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  5}.do_test minma
2c10: 78 2d 31 32 2e 31 36 20 7b 0a 20 20 65 78 65 63  x-12.16 {.  exec
2c20: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2c30: 20 6d 69 6e 28 72 6f 77 69 64 29 20 46 52 4f 4d   min(rowid) FROM
2c40: 20 74 37 20 57 48 45 52 45 20 61 3d 33 20 41 4e   t7 WHERE a=3 AN
2c50: 44 20 62 3d 35 20 41 4e 44 20 63 3d 31 30 31 35  D b=5 AND c=1015
2c60: 3b 0a 20 20 7d 0a 7d 20 7b 32 35 7d 0a 64 6f 5f  ;.  }.} {25}.do_
2c70: 74 65 73 74 20 6d 69 6e 6d 61 78 2d 31 32 2e 31  test minmax-12.1
2c80: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
2c90: 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 72      SELECT max(r
2ca0: 6f 77 69 64 29 20 46 52 4f 4d 20 74 37 20 57 48  owid) FROM t7 WH
2cb0: 45 52 45 20 61 3d 33 20 41 4e 44 20 62 3d 35 20  ERE a=3 AND b=5 
2cc0: 41 4e 44 20 63 3d 31 35 3b 0a 20 20 7d 0a 7d 20  AND c=15;.  }.} 
2cd0: 7b 35 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  {5}..#----------
2ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2d20: 72 65 73 65 74 5f 64 62 0a 0a 70 72 6f 63 20 64  reset_db..proc d
2d30: 6f 5f 74 65 73 74 5f 31 33 20 7b 6f 70 20 6e 61  o_test_13 {op na
2d40: 6d 65 20 73 71 6c 31 20 73 71 6c 32 20 72 65 73  me sql1 sql2 res
2d50: 7d 20 7b 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69  } {.  set ::sqli
2d60: 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20  te_search_count 
2d70: 30 0a 20 20 75 70 6c 65 76 65 6c 20 5b 6c 69 73  0.  uplevel [lis
2d80: 74 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  t do_execsql_tes
2d90: 74 20 24 6e 61 6d 65 2e 31 20 24 73 71 6c 31 20  t $name.1 $sql1 
2da0: 24 72 65 73 5d 0a 20 20 73 65 74 20 61 20 24 3a  $res].  set a $:
2db0: 3a 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63  :sqlite_search_c
2dc0: 6f 75 6e 74 0a 0a 20 20 73 65 74 20 3a 3a 73 71  ount..  set ::sq
2dd0: 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e  lite_search_coun
2de0: 74 20 30 0a 20 20 75 70 6c 65 76 65 6c 20 5b 6c  t 0.  uplevel [l
2df0: 69 73 74 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ist do_execsql_t
2e00: 65 73 74 20 24 6e 61 6d 65 2e 32 20 24 73 71 6c  est $name.2 $sql
2e10: 32 20 24 72 65 73 5d 0a 20 20 73 65 74 20 62 20  2 $res].  set b 
2e20: 24 3a 3a 73 71 6c 69 74 65 5f 73 65 61 72 63 68  $::sqlite_search
2e30: 5f 63 6f 75 6e 74 0a 0a 20 20 75 70 6c 65 76 65  _count..  upleve
2e40: 6c 20 5b 6c 69 73 74 20 64 6f 5f 74 65 73 74 20  l [list do_test 
2e50: 24 6e 61 6d 65 2e 33 20 5b 6c 69 73 74 20 65 78  $name.3 [list ex
2e60: 70 72 20 22 24 61 20 24 6f 70 20 24 62 22 5d 20  pr "$a $op $b"] 
2e70: 31 5d 0a 7d 0a 0a 23 20 52 75 6e 20 61 20 74 65  1].}..# Run a te
2e80: 73 74 20 6e 61 6d 65 64 20 24 6e 61 6d 65 2e 20  st named $name. 
2e90: 43 68 65 63 6b 20 74 68 61 74 20 53 51 4c 20 73  Check that SQL s
2ea0: 74 61 74 65 6d 65 6e 74 73 20 24 73 71 6c 31 20  tatements $sql1 
2eb0: 61 6e 64 20 24 73 71 6c 32 20 62 6f 74 68 0a 23  and $sql2 both.#
2ec0: 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d 65   return the same
2ed0: 20 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68 61   result, but tha
2ee0: 74 20 24 73 71 6c 32 20 69 6e 63 72 65 6d 65 6e  t $sql2 incremen
2ef0: 74 73 20 74 68 65 20 24 73 71 6c 69 74 65 5f 73  ts the $sqlite_s
2f00: 65 61 72 63 68 5f 63 6f 75 6e 74 0a 23 20 76 61  earch_count.# va
2f10: 72 69 61 62 6c 65 20 6d 6f 72 65 20 6f 66 74 65  riable more ofte
2f20: 6e 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  n (indicating th
2f30: 61 74 20 69 74 20 69 73 20 76 69 73 69 74 69 6e  at it is visitin
2f40: 67 20 6d 6f 72 65 20 72 6f 77 73 20 74 6f 20 64  g more rows to d
2f50: 65 74 65 72 6d 69 6e 65 0a 23 20 74 68 65 20 72  etermine.# the r
2f60: 65 73 75 6c 74 29 2e 0a 23 0a 70 72 6f 63 20 64  esult)..#.proc d
2f70: 6f 5f 74 65 73 74 5f 31 33 5f 6f 70 74 20 7b 6e  o_test_13_opt {n
2f80: 61 6d 65 20 73 71 6c 31 20 73 71 6c 32 20 72 65  ame sql1 sql2 re
2f90: 73 7d 20 7b 0a 20 20 75 70 6c 65 76 65 6c 20 5b  s} {.  uplevel [
2fa0: 6c 69 73 74 20 64 6f 5f 74 65 73 74 5f 31 33 20  list do_test_13 
2fb0: 3c 20 24 6e 61 6d 65 20 24 73 71 6c 31 20 24 73  < $name $sql1 $s
2fc0: 71 6c 32 20 24 72 65 73 5d 0a 7d 0a 0a 23 20 4c  ql2 $res].}..# L
2fd0: 69 6b 65 20 5b 64 6f 5f 74 65 73 74 5f 31 33 5f  ike [do_test_13_
2fe0: 6e 6f 6f 70 74 5d 2c 20 65 78 63 65 70 74 20 74  noopt], except t
2ff0: 68 69 73 20 74 69 6d 65 20 63 68 65 63 6b 20 74  his time check t
3000: 68 61 74 20 74 68 65 20 24 73 71 6c 69 74 65 5f  hat the $sqlite_
3010: 73 65 61 72 63 68 5f 63 6f 75 6e 74 0a 23 20 76  search_count.# v
3020: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
3030: 6d 65 6e 74 65 64 20 74 68 65 20 73 61 6d 65 20  mented the same 
3040: 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  number of times 
3050: 62 79 20 62 6f 74 68 20 53 51 4c 20 73 74 61 74  by both SQL stat
3060: 65 6d 65 6e 74 73 2e 0a 23 0a 70 72 6f 63 20 64  ements..#.proc d
3070: 6f 5f 74 65 73 74 5f 31 33 5f 6e 6f 6f 70 74 20  o_test_13_noopt 
3080: 7b 6e 61 6d 65 20 73 71 6c 31 20 73 71 6c 32 20  {name sql1 sql2 
3090: 72 65 73 7d 20 7b 0a 20 20 75 70 6c 65 76 65 6c  res} {.  uplevel
30a0: 20 5b 6c 69 73 74 20 64 6f 5f 74 65 73 74 5f 31   [list do_test_1
30b0: 33 20 3d 3d 20 24 6e 61 6d 65 20 24 73 71 6c 31  3 == $name $sql1
30c0: 20 24 73 71 6c 32 20 24 72 65 73 5d 0a 7d 0a 0a   $sql2 $res].}..
30d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
30e0: 31 33 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  13.1 {.  CREATE 
30f0: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63  TABLE t1(a, b, c
3100: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
3110: 20 74 31 20 56 41 4c 55 45 53 28 27 61 27 2c 20   t1 VALUES('a', 
3120: 31 2c 20 31 29 3b 0a 20 20 49 4e 53 45 52 54 20  1, 1);.  INSERT 
3130: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
3140: 62 27 2c 20 36 2c 20 36 29 3b 0a 20 20 49 4e 53  b', 6, 6);.  INS
3150: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3160: 45 53 28 27 63 27 2c 20 35 2c 20 35 29 3b 0a 20  ES('c', 5, 5);. 
3170: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
3180: 56 41 4c 55 45 53 28 27 61 27 2c 20 34 2c 20 34  VALUES('a', 4, 4
3190: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
31a0: 20 74 31 20 56 41 4c 55 45 53 28 27 61 27 2c 20   t1 VALUES('a', 
31b0: 35 2c 20 35 29 3b 0a 20 20 49 4e 53 45 52 54 20  5, 5);.  INSERT 
31c0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
31d0: 63 27 2c 20 36 2c 20 36 29 3b 0a 20 20 49 4e 53  c', 6, 6);.  INS
31e0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
31f0: 45 53 28 27 62 27 2c 20 34 2c 20 34 29 3b 0a 20  ES('b', 4, 4);. 
3200: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
3210: 56 41 4c 55 45 53 28 27 63 27 2c 20 37 2c 20 37  VALUES('c', 7, 7
3220: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
3230: 20 74 31 20 56 41 4c 55 45 53 28 27 62 27 2c 20   t1 VALUES('b', 
3240: 32 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20  2, 2);.  INSERT 
3250: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
3260: 62 27 2c 20 33 2c 20 33 29 3b 0a 20 20 49 4e 53  b', 3, 3);.  INS
3270: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3280: 45 53 28 27 61 27 2c 20 33 2c 20 33 29 3b 0a 20  ES('a', 3, 3);. 
3290: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
32a0: 56 41 4c 55 45 53 28 27 62 27 2c 20 35 2c 20 35  VALUES('b', 5, 5
32b0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
32c0: 20 74 31 20 56 41 4c 55 45 53 28 27 63 27 2c 20   t1 VALUES('c', 
32d0: 34 2c 20 34 29 3b 0a 20 20 49 4e 53 45 52 54 20  4, 4);.  INSERT 
32e0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
32f0: 63 27 2c 20 33 2c 20 33 29 3b 0a 20 20 49 4e 53  c', 3, 3);.  INS
3300: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3310: 45 53 28 27 61 27 2c 20 32 2c 20 32 29 3b 0a 20  ES('a', 2, 2);. 
3320: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3330: 31 20 4f 52 44 45 52 20 42 59 20 61 2c 20 62 2c  1 ORDER BY a, b,
3340: 20 63 3b 0a 7d 20 7b 61 20 31 20 31 20 61 20 32   c;.} {a 1 1 a 2
3350: 20 32 20 61 20 33 20 33 20 61 20 34 20 34 20 61   2 a 3 3 a 4 4 a
3360: 20 35 20 35 0a 20 20 20 62 20 32 20 32 20 62 20   5 5.   b 2 2 b 
3370: 33 20 33 20 62 20 34 20 34 20 62 20 35 20 35 20  3 3 b 4 4 b 5 5 
3380: 62 20 36 20 36 0a 20 20 20 63 20 33 20 33 20 63  b 6 6.   c 3 3 c
3390: 20 34 20 34 20 63 20 35 20 35 20 63 20 36 20 36   4 4 c 5 5 c 6 6
33a0: 20 63 20 37 20 37 0a 7d 0a 64 6f 5f 65 78 65 63   c 7 7.}.do_exec
33b0: 73 71 6c 5f 74 65 73 74 20 31 33 2e 32 20 7b 20  sql_test 13.2 { 
33c0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
33d0: 4f 4e 20 74 31 28 61 2c 20 62 2c 20 63 29 20 7d  ON t1(a, b, c) }
33e0: 0a 0a 64 6f 5f 74 65 73 74 5f 31 33 5f 6f 70 74  ..do_test_13_opt
33f0: 20 31 33 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54   13.3 {.  SELECT
3400: 20 6d 69 6e 28 62 29 20 46 52 4f 4d 20 74 31 20   min(b) FROM t1 
3410: 57 48 45 52 45 20 61 3d 27 62 27 0a 7d 20 7b 0a  WHERE a='b'.} {.
3420: 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 63 29 20    SELECT min(c) 
3430: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d  FROM t1 WHERE a=
3440: 27 62 27 0a 7d 20 7b 32 7d 0a 0a 64 6f 5f 74 65  'b'.} {2}..do_te
3450: 73 74 5f 31 33 5f 6f 70 74 20 31 33 2e 34 20 7b  st_13_opt 13.4 {
3460: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 6d 69 6e  .  SELECT a, min
3470: 28 62 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (b) FROM t1 WHER
3480: 45 20 61 3d 27 62 27 0a 7d 20 7b 0a 20 20 53 45  E a='b'.} {.  SE
3490: 4c 45 43 54 20 61 2c 20 6d 69 6e 28 63 29 20 46  LECT a, min(c) F
34a0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 27  ROM t1 WHERE a='
34b0: 62 27 0a 7d 20 7b 62 20 32 7d 0a 0a 64 6f 5f 74  b'.} {b 2}..do_t
34c0: 65 73 74 5f 31 33 5f 6f 70 74 20 31 33 2e 34 20  est_13_opt 13.4 
34d0: 7b 0a 20 20 53 45 4c 45 43 54 20 61 7c 7c 63 2c  {.  SELECT a||c,
34e0: 20 6d 61 78 28 62 29 2b 34 20 46 52 4f 4d 20 74   max(b)+4 FROM t
34f0: 31 20 57 48 45 52 45 20 61 3d 27 63 27 0a 7d 20  1 WHERE a='c'.} 
3500: 7b 0a 20 20 53 45 4c 45 43 54 20 61 7c 7c 63 2c  {.  SELECT a||c,
3510: 20 6d 61 78 28 63 29 2b 34 20 46 52 4f 4d 20 74   max(c)+4 FROM t
3520: 31 20 57 48 45 52 45 20 61 3d 27 63 27 0a 7d 20  1 WHERE a='c'.} 
3530: 7b 63 37 20 31 31 7d 0a 0a 64 6f 5f 74 65 73 74  {c7 11}..do_test
3540: 5f 31 33 5f 6e 6f 6f 70 74 20 31 33 2e 35 20 7b  _13_noopt 13.5 {
3550: 0a 20 20 53 45 4c 45 43 54 20 61 7c 7c 63 2c 20  .  SELECT a||c, 
3560: 6d 61 78 28 62 2b 31 29 20 46 52 4f 4d 20 74 31  max(b+1) FROM t1
3570: 20 57 48 45 52 45 20 61 3d 27 63 27 0a 7d 20 7b   WHERE a='c'.} {
3580: 0a 20 20 53 45 4c 45 43 54 20 61 7c 7c 63 2c 20  .  SELECT a||c, 
3590: 6d 61 78 28 63 2b 31 29 20 46 52 4f 4d 20 74 31  max(c+1) FROM t1
35a0: 20 57 48 45 52 45 20 61 3d 27 63 27 0a 7d 20 7b   WHERE a='c'.} {
35b0: 63 37 20 38 7d 0a 0a 64 6f 5f 74 65 73 74 5f 31  c7 8}..do_test_1
35c0: 33 5f 6e 6f 6f 70 74 20 31 33 2e 36 20 7b 0a 20  3_noopt 13.6 {. 
35d0: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 62 29   SELECT count(b)
35e0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
35f0: 3d 27 63 27 0a 7d 20 7b 0a 20 20 53 45 4c 45 43  ='c'.} {.  SELEC
3600: 54 20 63 6f 75 6e 74 28 63 29 20 46 52 4f 4d 20  T count(c) FROM 
3610: 74 31 20 57 48 45 52 45 20 61 3d 27 63 27 0a 7d  t1 WHERE a='c'.}
3620: 20 7b 35 7d 0a 0a 64 6f 5f 74 65 73 74 5f 31 33   {5}..do_test_13
3630: 5f 6e 6f 6f 70 74 20 31 33 2e 37 20 7b 0a 20 20  _noopt 13.7 {.  
3640: 53 45 4c 45 43 54 20 6d 69 6e 28 62 29 2c 20 63  SELECT min(b), c
3650: 6f 75 6e 74 28 62 29 20 46 52 4f 4d 20 74 31 20  ount(b) FROM t1 
3660: 57 48 45 52 45 20 61 3d 27 61 27 3b 0a 7d 20 7b  WHERE a='a';.} {
3670: 0a 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 63 29  .  SELECT min(c)
3680: 2c 20 63 6f 75 6e 74 28 63 29 20 46 52 4f 4d 20  , count(c) FROM 
3690: 74 31 20 57 48 45 52 45 20 61 3d 27 61 27 3b 0a  t1 WHERE a='a';.
36a0: 7d 20 7b 31 20 35 7d 0a 0a 0a 66 69 6e 69 73 68  } {1 5}...finish
36b0: 5f 74 65 73 74 0a                                _test.