/ Hex Artifact Content
Login

Artifact 66a60eb0f20281b0753249d347c5de0766954cee:


0000: 23 20 32 30 30 38 20 4a 61 6e 75 61 72 79 20 35  # 2008 January 5
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you give..#.#*
0120: 2a 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 0a 23 20 24 49 64 3a 20 6d 69  ******.# $Id: mi
0170: 6e 6d 61 78 33 2e 74 65 73 74 2c 76 20 31 2e 35  nmax3.test,v 1.5
0180: 20 32 30 30 38 2f 30 37 2f 31 32 20 31 34 3a 35   2008/07/12 14:5
0190: 32 3a 32 30 20 64 72 68 20 45 78 70 20 24 0a 0a  2:20 drh Exp $..
01a0: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
01b0: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
01c0: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
01d0: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20  r/tester.tcl..# 
01e0: 44 6f 20 6e 6f 74 20 75 73 65 20 61 20 63 6f 64  Do not use a cod
01f0: 65 63 20 66 6f 72 20 74 65 73 74 73 20 69 6e 20  ec for tests in 
0200: 74 68 69 73 20 66 69 6c 65 2c 20 61 73 20 74 68  this file, as th
0210: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
0220: 69 73 0a 23 20 6d 61 6e 69 70 75 6c 61 74 65 64  is.# manipulated
0230: 20 64 69 72 65 63 74 6c 79 20 75 73 69 6e 67 20   directly using 
0240: 74 63 6c 20 73 63 72 69 70 74 73 20 28 75 73 69  tcl scripts (usi
0250: 6e 67 20 74 68 65 20 5b 68 65 78 69 6f 5f 77 72  ng the [hexio_wr
0260: 69 74 65 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0a 23  ite] command)..#
0270: 0a 64 6f 5f 6e 6f 74 5f 75 73 65 5f 63 6f 64 65  .do_not_use_code
0280: 63 0a 0a 23 20 44 6f 20 61 6e 20 53 51 4c 20 73  c..# Do an SQL s
0290: 74 61 74 65 6d 65 6e 74 2e 20 20 41 70 70 65 6e  tatement.  Appen
02a0: 64 20 74 68 65 20 73 65 61 72 63 68 20 63 6f 75  d the search cou
02b0: 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  nt to the end of
02c0: 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 23 0a 70   the result..#.p
02d0: 72 6f 63 20 63 6f 75 6e 74 20 73 71 6c 20 7b 0a  roc count sql {.
02e0: 20 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 5f 73    set ::sqlite_s
02f0: 65 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a 20 20  earch_count 0.  
0300: 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74 20 5b  return [concat [
0310: 65 78 65 63 73 71 6c 20 24 73 71 6c 5d 20 24 3a  execsql $sql] $:
0320: 3a 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63  :sqlite_search_c
0330: 6f 75 6e 74 5d 0a 7d 0a 0a 23 20 54 68 69 73 20  ount].}..# This 
0340: 70 72 6f 63 65 64 75 72 65 20 73 65 74 73 20 74  procedure sets t
0350: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
0360: 66 69 6c 65 2d 66 6f 72 6d 61 74 20 69 6e 20 66  file-format in f
0370: 69 6c 65 20 27 74 65 73 74 2e 64 62 27 0a 23 20  ile 'test.db'.# 
0380: 74 6f 20 24 6e 65 77 76 61 6c 2e 20 41 6c 73 6f  to $newval. Also
0390: 2c 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  , the schema coo
03a0: 6b 69 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  kie is increment
03b0: 65 64 2e 0a 23 20 0a 70 72 6f 63 20 73 65 74 5f  ed..# .proc set_
03c0: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 7b 6e 65 77  file_format {new
03d0: 76 61 6c 7d 20 7b 0a 20 20 68 65 78 69 6f 5f 77  val} {.  hexio_w
03e0: 72 69 74 65 20 74 65 73 74 2e 64 62 20 34 34 20  rite test.db 44 
03f0: 5b 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e  [hexio_render_in
0400: 74 33 32 20 24 6e 65 77 76 61 6c 5d 0a 20 20 73  t32 $newval].  s
0410: 65 74 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 20  et schemacookie 
0420: 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b  [hexio_get_int [
0430: 68 65 78 69 6f 5f 72 65 61 64 20 74 65 73 74 2e  hexio_read test.
0440: 64 62 20 34 30 20 34 5d 5d 0a 20 20 69 6e 63 72  db 40 4]].  incr
0450: 20 73 63 68 65 6d 61 63 6f 6f 6b 69 65 0a 20 20   schemacookie.  
0460: 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74  hexio_write test
0470: 2e 64 62 20 34 30 20 5b 68 65 78 69 6f 5f 72 65  .db 40 [hexio_re
0480: 6e 64 65 72 5f 69 6e 74 33 32 20 24 73 63 68 65  nder_int32 $sche
0490: 6d 61 63 6f 6f 6b 69 65 5d 0a 20 20 72 65 74 75  macookie].  retu
04a0: 72 6e 20 7b 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  rn {}.}..do_test
04b0: 20 6d 69 6e 6d 61 78 33 2d 31 2e 30 20 7b 0a 20   minmax3-1.0 {. 
04c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
04d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
04e0: 2c 20 79 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20 64  , y, z);.  }.  d
04f0: 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 5f 66 69  b close.  set_fi
0500: 6c 65 5f 66 6f 72 6d 61 74 20 34 0a 20 20 73 71  le_format 4.  sq
0510: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
0520: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0530: 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45   BEGIN;.    INSE
0540: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0550: 53 28 27 31 27 2c 20 27 49 27 2c 20 20 20 27 6f  S('1', 'I',   'o
0560: 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ne');.    INSERT
0570: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0580: 27 32 27 2c 20 27 49 56 27 2c 20 20 27 66 6f 75  '2', 'IV',  'fou
0590: 72 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  r');.    INSERT 
05a0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
05b0: 32 27 2c 20 4e 55 4c 4c 2c 20 20 27 74 68 72 65  2', NULL,  'thre
05c0: 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  e');.    INSERT 
05d0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
05e0: 32 27 2c 20 27 49 49 27 2c 20 20 27 74 77 6f 27  2', 'II',  'two'
05f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0600: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 32 27  TO t1 VALUES('2'
0610: 2c 20 27 56 27 2c 20 20 20 27 66 69 76 65 27 29  , 'V',   'five')
0620: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0630: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 33 27 2c  O t1 VALUES('3',
0640: 20 27 56 49 27 2c 20 20 27 73 69 78 27 29 3b 0a   'VI',  'six');.
0650: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
0660: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e  } {}.do_test min
0670: 6d 61 78 33 2d 31 2e 31 2e 31 20 7b 0a 20 20 23  max3-1.1.1 {.  #
0680: 20 4c 69 6e 65 61 72 20 73 63 61 6e 2e 0a 20 20   Linear scan..  
0690: 63 6f 75 6e 74 20 7b 20 53 45 4c 45 43 54 20 6d  count { SELECT m
06a0: 61 78 28 79 29 20 46 52 4f 4d 20 74 31 20 57 48  ax(y) FROM t1 WH
06b0: 45 52 45 20 78 20 3d 20 27 32 27 3b 20 7d 0a 7d  ERE x = '2'; }.}
06c0: 20 7b 56 20 35 7d 0a 64 6f 5f 74 65 73 74 20 6d   {V 5}.do_test m
06d0: 69 6e 6d 61 78 33 2d 31 2e 31 2e 32 20 7b 0a 20  inmax3-1.1.2 {. 
06e0: 20 23 20 49 6e 64 65 78 20 6f 70 74 69 6d 69 7a   # Index optimiz
06f0: 65 73 20 74 68 65 20 57 48 45 52 45 20 78 3d 27  es the WHERE x='
0700: 32 27 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 20  2' constraint.. 
0710: 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54   execsql { CREAT
0720: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
0730: 28 78 29 20 7d 0a 20 20 63 6f 75 6e 74 20 20 20  (x) }.  count   
0740: 7b 20 53 45 4c 45 43 54 20 6d 61 78 28 79 29 20  { SELECT max(y) 
0750: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
0760: 3d 20 27 32 27 3b 20 7d 0a 7d 20 7b 56 20 39 7d  = '2'; }.} {V 9}
0770: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33  .do_test minmax3
0780: 2d 31 2e 31 2e 33 20 7b 0a 20 20 23 20 49 6e 64  -1.1.3 {.  # Ind
0790: 65 78 20 6f 70 74 69 6d 69 7a 65 73 20 74 68 65  ex optimizes the
07a0: 20 57 48 45 52 45 20 78 3d 27 32 27 20 63 6f 6e   WHERE x='2' con
07b0: 73 74 72 61 69 6e 74 20 61 6e 64 20 74 68 65 20  straint and the 
07c0: 4d 41 58 28 79 29 2e 0a 20 20 65 78 65 63 73 71  MAX(y)..  execsq
07d0: 6c 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58  l { CREATE INDEX
07e0: 20 69 32 20 4f 4e 20 74 31 28 78 2c 79 29 20 7d   i2 ON t1(x,y) }
07f0: 0a 20 20 63 6f 75 6e 74 20 20 20 7b 20 53 45 4c  .  count   { SEL
0800: 45 43 54 20 6d 61 78 28 79 29 20 46 52 4f 4d 20  ECT max(y) FROM 
0810: 74 31 20 57 48 45 52 45 20 78 20 3d 20 27 32 27  t1 WHERE x = '2'
0820: 3b 20 7d 0a 7d 20 7b 56 20 31 7d 0a 64 6f 5f 74  ; }.} {V 1}.do_t
0830: 65 73 74 20 6d 69 6e 6d 61 78 33 2d 31 2e 31 2e  est minmax3-1.1.
0840: 34 20 7b 0a 20 20 23 20 49 6e 64 65 78 20 6f 70  4 {.  # Index op
0850: 74 69 6d 69 7a 65 73 20 74 68 65 20 57 48 45 52  timizes the WHER
0860: 45 20 78 3d 27 32 27 20 63 6f 6e 73 74 72 61 69  E x='2' constrai
0870: 6e 74 20 61 6e 64 20 74 68 65 20 4d 41 58 28 79  nt and the MAX(y
0880: 29 2e 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44  )..  execsql { D
0890: 52 4f 50 20 49 4e 44 45 58 20 69 32 20 3b 20 43  ROP INDEX i2 ; C
08a0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f  REATE INDEX i2 O
08b0: 4e 20 74 31 28 78 2c 20 79 20 44 45 53 43 29 20  N t1(x, y DESC) 
08c0: 7d 0a 20 20 63 6f 75 6e 74 20 20 20 7b 20 53 45  }.  count   { SE
08d0: 4c 45 43 54 20 6d 61 78 28 79 29 20 46 52 4f 4d  LECT max(y) FROM
08e0: 20 74 31 20 57 48 45 52 45 20 78 20 3d 20 27 32   t1 WHERE x = '2
08f0: 27 3b 20 7d 0a 7d 20 7b 56 20 31 7d 0a 64 6f 5f  '; }.} {V 1}.do_
0900: 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 31 2e 31  test minmax3-1.1
0910: 2e 35 20 7b 0a 20 20 63 6f 75 6e 74 20 20 20 7b  .5 {.  count   {
0920: 20 53 45 4c 45 43 54 20 6d 61 78 28 79 29 20 46   SELECT max(y) F
0930: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 3d  ROM t1 WHERE x =
0940: 20 27 32 27 20 41 4e 44 20 79 20 21 3d 20 27 56   '2' AND y != 'V
0950: 27 3b 20 7d 0a 7d 20 7b 49 56 20 32 7d 0a 64 6f  '; }.} {IV 2}.do
0960: 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 31 2e  _test minmax3-1.
0970: 31 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 20 20 20  1.6 {.  count   
0980: 7b 20 53 45 4c 45 43 54 20 6d 61 78 28 79 29 20  { SELECT max(y) 
0990: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
09a0: 3d 20 27 32 27 20 41 4e 44 20 79 20 3c 20 27 56  = '2' AND y < 'V
09b0: 27 3b 20 7d 0a 7d 20 7b 49 56 20 31 7d 0a 64 6f  '; }.} {IV 1}.do
09c0: 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 31 2e  _test minmax3-1.
09d0: 31 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 20 20 20  1.6 {.  count   
09e0: 7b 20 53 45 4c 45 43 54 20 6d 61 78 28 79 29 20  { SELECT max(y) 
09f0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
0a00: 3d 20 27 32 27 20 41 4e 44 20 7a 20 21 3d 20 27  = '2' AND z != '
0a10: 66 69 76 65 27 3b 20 7d 0a 7d 20 7b 49 56 20 34  five'; }.} {IV 4
0a20: 7d 0a 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  }..do_test minma
0a30: 78 33 2d 31 2e 32 2e 31 20 7b 0a 20 20 23 20 4c  x3-1.2.1 {.  # L
0a40: 69 6e 65 61 72 20 73 63 61 6e 20 6f 66 20 74 31  inear scan of t1
0a50: 2e 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 52  ..  execsql { DR
0a60: 4f 50 20 49 4e 44 45 58 20 69 31 20 3b 20 44 52  OP INDEX i1 ; DR
0a70: 4f 50 20 49 4e 44 45 58 20 69 32 20 7d 0a 20 20  OP INDEX i2 }.  
0a80: 63 6f 75 6e 74 20 7b 20 53 45 4c 45 43 54 20 6d  count { SELECT m
0a90: 69 6e 28 79 29 20 46 52 4f 4d 20 74 31 20 57 48  in(y) FROM t1 WH
0aa0: 45 52 45 20 78 20 3d 20 27 32 27 3b 20 7d 0a 7d  ERE x = '2'; }.}
0ab0: 20 7b 49 49 20 35 7d 0a 64 6f 5f 74 65 73 74 20   {II 5}.do_test 
0ac0: 6d 69 6e 6d 61 78 33 2d 31 2e 32 2e 32 20 7b 0a  minmax3-1.2.2 {.
0ad0: 20 20 23 20 49 6e 64 65 78 20 69 31 20 6f 70 74    # Index i1 opt
0ae0: 69 6d 69 7a 65 73 20 74 68 65 20 57 48 45 52 45  imizes the WHERE
0af0: 20 78 3d 27 32 27 20 63 6f 6e 73 74 72 61 69 6e   x='2' constrain
0b00: 74 2e 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43  t..  execsql { C
0b10: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
0b20: 4e 20 74 31 28 78 29 20 7d 0a 20 20 63 6f 75 6e  N t1(x) }.  coun
0b30: 74 20 20 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e  t   { SELECT min
0b40: 28 79 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (y) FROM t1 WHER
0b50: 45 20 78 20 3d 20 27 32 27 3b 20 7d 0a 7d 20 7b  E x = '2'; }.} {
0b60: 49 49 20 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  II 9}.do_test mi
0b70: 6e 6d 61 78 33 2d 31 2e 32 2e 33 20 7b 0a 20 20  nmax3-1.2.3 {.  
0b80: 23 20 49 6e 64 65 78 20 69 32 20 6f 70 74 69 6d  # Index i2 optim
0b90: 69 7a 65 73 20 74 68 65 20 57 48 45 52 45 20 78  izes the WHERE x
0ba0: 3d 27 32 27 20 63 6f 6e 73 74 72 61 69 6e 74 20  ='2' constraint 
0bb0: 61 6e 64 20 74 68 65 20 6d 69 6e 28 79 29 2e 0a  and the min(y)..
0bc0: 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41    execsql { CREA
0bd0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
0be0: 31 28 78 2c 79 29 20 7d 0a 20 20 63 6f 75 6e 74  1(x,y) }.  count
0bf0: 20 20 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e 28     { SELECT min(
0c00: 79 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  y) FROM t1 WHERE
0c10: 20 78 20 3d 20 27 32 27 3b 20 7d 0a 7d 20 7b 49   x = '2'; }.} {I
0c20: 49 20 31 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e  I 1}.do_test min
0c30: 6d 61 78 33 2d 31 2e 32 2e 34 20 7b 0a 20 20 23  max3-1.2.4 {.  #
0c40: 20 49 6e 64 65 78 20 6f 70 74 69 6d 69 7a 65 73   Index optimizes
0c50: 20 74 68 65 20 57 48 45 52 45 20 78 3d 27 32 27   the WHERE x='2'
0c60: 20 63 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64 20   constraint and 
0c70: 74 68 65 20 4d 41 58 28 79 29 2e 0a 20 20 65 78  the MAX(y)..  ex
0c80: 65 63 73 71 6c 20 7b 20 44 52 4f 50 20 49 4e 44  ecsql { DROP IND
0c90: 45 58 20 69 32 20 3b 20 43 52 45 41 54 45 20 49  EX i2 ; CREATE I
0ca0: 4e 44 45 58 20 69 32 20 4f 4e 20 74 31 28 78 2c  NDEX i2 ON t1(x,
0cb0: 20 79 20 44 45 53 43 29 20 7d 0a 20 20 63 6f 75   y DESC) }.  cou
0cc0: 6e 74 20 20 20 7b 20 53 45 4c 45 43 54 20 6d 69  nt   { SELECT mi
0cd0: 6e 28 79 29 20 46 52 4f 4d 20 74 31 20 57 48 45  n(y) FROM t1 WHE
0ce0: 52 45 20 78 20 3d 20 27 32 27 3b 20 7d 0a 7d 20  RE x = '2'; }.} 
0cf0: 7b 49 49 20 31 7d 0a 0a 64 6f 5f 74 65 73 74 20  {II 1}..do_test 
0d00: 6d 69 6e 6d 61 78 33 2d 31 2e 33 2e 31 20 7b 0a  minmax3-1.3.1 {.
0d10: 20 20 23 20 4c 69 6e 65 61 72 20 73 63 61 6e 0a    # Linear scan.
0d20: 20 20 65 78 65 63 73 71 6c 20 7b 20 44 52 4f 50    execsql { DROP
0d30: 20 49 4e 44 45 58 20 69 31 20 3b 20 44 52 4f 50   INDEX i1 ; DROP
0d40: 20 49 4e 44 45 58 20 69 32 20 7d 0a 20 20 63 6f   INDEX i2 }.  co
0d50: 75 6e 74 20 20 20 7b 20 53 45 4c 45 43 54 20 6d  unt   { SELECT m
0d60: 69 6e 28 79 29 20 46 52 4f 4d 20 74 31 3b 20 7d  in(y) FROM t1; }
0d70: 0a 7d 20 7b 49 20 35 7d 0a 64 6f 5f 74 65 73 74  .} {I 5}.do_test
0d80: 20 6d 69 6e 6d 61 78 33 2d 31 2e 33 2e 32 20 7b   minmax3-1.3.2 {
0d90: 0a 20 20 23 20 49 6e 64 65 78 20 69 31 20 6f 70  .  # Index i1 op
0da0: 74 69 6d 69 7a 65 73 20 74 68 65 20 6d 69 6e 28  timizes the min(
0db0: 79 29 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43  y).  execsql { C
0dc0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
0dd0: 4e 20 74 31 28 79 29 20 7d 0a 20 20 63 6f 75 6e  N t1(y) }.  coun
0de0: 74 20 20 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e  t   { SELECT min
0df0: 28 79 29 20 46 52 4f 4d 20 74 31 3b 20 7d 0a 7d  (y) FROM t1; }.}
0e00: 20 7b 49 20 31 7d 0a 64 6f 5f 74 65 73 74 20 6d   {I 1}.do_test m
0e10: 69 6e 6d 61 78 33 2d 31 2e 33 2e 33 20 7b 0a 20  inmax3-1.3.3 {. 
0e20: 20 23 20 49 6e 64 65 78 20 69 31 20 6f 70 74 69   # Index i1 opti
0e30: 6d 69 7a 65 73 20 74 68 65 20 6d 69 6e 28 79 29  mizes the min(y)
0e40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 52 4f  .  execsql { DRO
0e50: 50 20 49 4e 44 45 58 20 69 31 20 3b 20 43 52 45  P INDEX i1 ; CRE
0e60: 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20  ATE INDEX i1 ON 
0e70: 74 31 28 79 20 44 45 53 43 29 20 7d 0a 20 20 63  t1(y DESC) }.  c
0e80: 6f 75 6e 74 20 20 20 7b 20 53 45 4c 45 43 54 20  ount   { SELECT 
0e90: 6d 69 6e 28 79 29 20 46 52 4f 4d 20 74 31 3b 20  min(y) FROM t1; 
0ea0: 7d 0a 7d 20 7b 49 20 31 7d 0a 0a 64 6f 5f 74 65  }.} {I 1}..do_te
0eb0: 73 74 20 6d 69 6e 6d 61 78 33 2d 31 2e 34 2e 31  st minmax3-1.4.1
0ec0: 20 7b 0a 20 20 23 20 4c 69 6e 65 61 72 20 73 63   {.  # Linear sc
0ed0: 61 6e 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44  an.  execsql { D
0ee0: 52 4f 50 20 49 4e 44 45 58 20 69 31 20 7d 0a 20  ROP INDEX i1 }. 
0ef0: 20 63 6f 75 6e 74 20 20 20 7b 20 53 45 4c 45 43   count   { SELEC
0f00: 54 20 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31  T max(y) FROM t1
0f10: 3b 20 7d 0a 7d 20 7b 56 49 20 35 7d 0a 64 6f 5f  ; }.} {VI 5}.do_
0f20: 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 31 2e 34  test minmax3-1.4
0f30: 2e 32 20 7b 0a 20 20 23 20 49 6e 64 65 78 20 69  .2 {.  # Index i
0f40: 31 20 6f 70 74 69 6d 69 7a 65 73 20 74 68 65 20  1 optimizes the 
0f50: 6d 61 78 28 79 29 0a 20 20 65 78 65 63 73 71 6c  max(y).  execsql
0f60: 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58 20   { CREATE INDEX 
0f70: 69 31 20 4f 4e 20 74 31 28 79 29 20 7d 0a 20 20  i1 ON t1(y) }.  
0f80: 63 6f 75 6e 74 20 20 20 7b 20 53 45 4c 45 43 54  count   { SELECT
0f90: 20 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31 3b   max(y) FROM t1;
0fa0: 20 7d 0a 7d 20 7b 56 49 20 30 7d 0a 64 6f 5f 74   }.} {VI 0}.do_t
0fb0: 65 73 74 20 6d 69 6e 6d 61 78 33 2d 31 2e 34 2e  est minmax3-1.4.
0fc0: 33 20 7b 0a 20 20 23 20 49 6e 64 65 78 20 69 31  3 {.  # Index i1
0fd0: 20 6f 70 74 69 6d 69 7a 65 73 20 74 68 65 20 6d   optimizes the m
0fe0: 61 78 28 79 29 0a 20 20 65 78 65 63 73 71 6c 20  ax(y).  execsql 
0ff0: 7b 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31 20  { DROP INDEX i1 
1000: 3b 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69  ; CREATE INDEX i
1010: 31 20 4f 4e 20 74 31 28 79 20 44 45 53 43 29 20  1 ON t1(y DESC) 
1020: 7d 0a 20 20 65 78 65 63 73 71 6c 20 20 20 7b 20  }.  execsql   { 
1030: 53 45 4c 45 43 54 20 79 20 66 72 6f 6d 20 74 31  SELECT y from t1
1040: 7d 0a 20 20 63 6f 75 6e 74 20 20 20 7b 20 53 45  }.  count   { SE
1050: 4c 45 43 54 20 6d 61 78 28 79 29 20 46 52 4f 4d  LECT max(y) FROM
1060: 20 74 31 3b 20 7d 0a 7d 20 7b 56 49 20 30 7d 0a   t1; }.} {VI 0}.
1070: 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d  do_test minmax3-
1080: 31 2e 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  1.4.4 {.  execsq
1090: 6c 20 7b 20 44 52 4f 50 20 49 4e 44 45 58 20 69  l { DROP INDEX i
10a0: 31 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73  1 }.} {}..do_tes
10b0: 74 20 6d 69 6e 6d 61 78 33 2d 32 2e 31 20 7b 0a  t minmax3-2.1 {.
10c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
10d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
10e0: 61 2c 20 62 29 3b 0a 20 20 20 20 43 52 45 41 54  a, b);.    CREAT
10f0: 45 20 49 4e 44 45 58 20 69 33 20 4f 4e 20 74 32  E INDEX i3 ON t2
1100: 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45  (a, b);.    INSE
1110: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
1120: 53 28 31 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  S(1, NULL);.    
1130: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
1140: 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a 20 20 20  ALUES(1, 1);.   
1150: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
1160: 56 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20  VALUES(1, 2);.  
1170: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
1180: 20 56 41 4c 55 45 53 28 31 2c 20 33 29 3b 0a 20   VALUES(1, 3);. 
1190: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
11a0: 32 20 56 41 4c 55 45 53 28 32 2c 20 4e 55 4c 4c  2 VALUES(2, NULL
11b0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
11c0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 2c 20  TO t2 VALUES(2, 
11d0: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
11e0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 2c  NTO t2 VALUES(2,
11f0: 20 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   2);.    INSERT 
1200: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32  INTO t2 VALUES(2
1210: 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , 3);.    INSERT
1220: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1230: 33 2c 20 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  3, 1);.    INSER
1240: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
1250: 28 33 2c 20 32 29 3b 0a 20 20 20 20 49 4e 53 45  (3, 2);.    INSE
1260: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
1270: 53 28 33 2c 20 33 29 3b 0a 20 20 7d 0a 7d 20 7b  S(3, 3);.  }.} {
1280: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78  }.do_test minmax
1290: 33 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  3-2.2 {.  execsq
12a0: 6c 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e 28 62  l { SELECT min(b
12b0: 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  ) FROM t2 WHERE 
12c0: 61 20 3d 20 31 3b 20 7d 0a 7d 20 7b 31 7d 0a 64  a = 1; }.} {1}.d
12d0: 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 32  o_test minmax3-2
12e0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
12f0: 20 53 45 4c 45 43 54 20 6d 69 6e 28 62 29 20 46   SELECT min(b) F
1300: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 20 3d  ROM t2 WHERE a =
1310: 20 31 20 41 4e 44 20 62 3e 31 3b 20 7d 0a 7d 20   1 AND b>1; }.} 
1320: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  {2}.do_test minm
1330: 61 78 33 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63  ax3-2.4 {.  exec
1340: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e  sql { SELECT min
1350: 28 62 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52  (b) FROM t2 WHER
1360: 45 20 61 20 3d 20 31 20 41 4e 44 20 62 3e 2d 31  E a = 1 AND b>-1
1370: 3b 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  ; }.} {1}.do_tes
1380: 74 20 6d 69 6e 6d 61 78 33 2d 32 2e 35 20 7b 0a  t minmax3-2.5 {.
1390: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
13a0: 43 54 20 6d 69 6e 28 62 29 20 46 52 4f 4d 20 74  CT min(b) FROM t
13b0: 32 20 57 48 45 52 45 20 61 20 3d 20 31 3b 20 7d  2 WHERE a = 1; }
13c0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 6d  .} {1}.do_test m
13d0: 69 6e 6d 61 78 33 2d 32 2e 36 20 7b 0a 20 20 65  inmax3-2.6 {.  e
13e0: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
13f0: 6d 69 6e 28 62 29 20 46 52 4f 4d 20 74 32 20 57  min(b) FROM t2 W
1400: 48 45 52 45 20 61 20 3d 20 31 20 41 4e 44 20 62  HERE a = 1 AND b
1410: 3c 32 3b 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  <2; }.} {1}.do_t
1420: 65 73 74 20 6d 69 6e 6d 61 78 33 2d 32 2e 37 20  est minmax3-2.7 
1430: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45  {.  execsql { SE
1440: 4c 45 43 54 20 6d 69 6e 28 62 29 20 46 52 4f 4d  LECT min(b) FROM
1450: 20 74 32 20 57 48 45 52 45 20 61 20 3d 20 31 20   t2 WHERE a = 1 
1460: 41 4e 44 20 62 3c 31 3b 20 7d 0a 7d 20 7b 7b 7d  AND b<1; }.} {{}
1470: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78  }.do_test minmax
1480: 33 2d 32 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  3-2.8 {.  execsq
1490: 6c 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e 28 62  l { SELECT min(b
14a0: 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  ) FROM t2 WHERE 
14b0: 61 20 3d 20 33 20 41 4e 44 20 62 3c 31 3b 20 7d  a = 3 AND b<1; }
14c0: 0a 7d 20 7b 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74  .} {{}}..do_test
14d0: 20 6d 69 6e 6d 61 78 33 2d 33 2e 31 20 7b 0a 20   minmax3-3.1 {. 
14e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
14f0: 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20  ROP TABLE t2;.  
1500: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1510: 32 28 61 2c 20 62 29 3b 0a 20 20 20 20 43 52 45  2(a, b);.    CRE
1520: 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f 4e 20  ATE INDEX i3 ON 
1530: 74 32 28 61 2c 20 62 20 44 45 53 43 29 3b 0a 20  t2(a, b DESC);. 
1540: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1550: 32 20 56 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c  2 VALUES(1, NULL
1560: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1570: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c 20  TO t2 VALUES(1, 
1580: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
1590: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
15a0: 20 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   2);.    INSERT 
15b0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
15c0: 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , 3);.    INSERT
15d0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
15e0: 32 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e  2, NULL);.    IN
15f0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
1600: 55 45 53 28 32 2c 20 31 29 3b 0a 20 20 20 20 49  UES(2, 1);.    I
1610: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1620: 4c 55 45 53 28 32 2c 20 32 29 3b 0a 20 20 20 20  LUES(2, 2);.    
1630: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
1640: 41 4c 55 45 53 28 32 2c 20 33 29 3b 0a 20 20 20  ALUES(2, 3);.   
1650: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
1660: 56 41 4c 55 45 53 28 33 2c 20 31 29 3b 0a 20 20  VALUES(3, 1);.  
1670: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
1680: 20 56 41 4c 55 45 53 28 33 2c 20 32 29 3b 0a 20   VALUES(3, 2);. 
1690: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
16a0: 32 20 56 41 4c 55 45 53 28 33 2c 20 33 29 3b 0a  2 VALUES(3, 3);.
16b0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
16c0: 20 6d 69 6e 6d 61 78 33 2d 33 2e 32 20 7b 0a 20   minmax3-3.2 {. 
16d0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
16e0: 54 20 6d 69 6e 28 62 29 20 46 52 4f 4d 20 74 32  T min(b) FROM t2
16f0: 20 57 48 45 52 45 20 61 20 3d 20 31 3b 20 7d 0a   WHERE a = 1; }.
1700: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  } {1}.do_test mi
1710: 6e 6d 61 78 33 2d 33 2e 33 20 7b 0a 20 20 65 78  nmax3-3.3 {.  ex
1720: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 6d  ecsql { SELECT m
1730: 69 6e 28 62 29 20 46 52 4f 4d 20 74 32 20 57 48  in(b) FROM t2 WH
1740: 45 52 45 20 61 20 3d 20 31 20 41 4e 44 20 62 3e  ERE a = 1 AND b>
1750: 31 3b 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65  1; }.} {2}.do_te
1760: 73 74 20 6d 69 6e 6d 61 78 33 2d 33 2e 34 20 7b  st minmax3-3.4 {
1770: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
1780: 45 43 54 20 6d 69 6e 28 62 29 20 46 52 4f 4d 20  ECT min(b) FROM 
1790: 74 32 20 57 48 45 52 45 20 61 20 3d 20 31 20 41  t2 WHERE a = 1 A
17a0: 4e 44 20 62 3e 2d 31 3b 20 7d 0a 7d 20 7b 31 7d  ND b>-1; }.} {1}
17b0: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33  .do_test minmax3
17c0: 2d 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.5 {.  execsql
17d0: 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e 28 62 29   { SELECT min(b)
17e0: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
17f0: 20 3d 20 31 3b 20 7d 0a 7d 20 7b 31 7d 0a 64 6f   = 1; }.} {1}.do
1800: 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 33 2e  _test minmax3-3.
1810: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  6 {.  execsql { 
1820: 53 45 4c 45 43 54 20 6d 69 6e 28 62 29 20 46 52  SELECT min(b) FR
1830: 4f 4d 20 74 32 20 57 48 45 52 45 20 61 20 3d 20  OM t2 WHERE a = 
1840: 31 20 41 4e 44 20 62 3c 32 3b 20 7d 0a 7d 20 7b  1 AND b<2; }.} {
1850: 31 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61  1}.do_test minma
1860: 78 33 2d 33 2e 37 20 7b 0a 20 20 65 78 65 63 73  x3-3.7 {.  execs
1870: 71 6c 20 7b 20 53 45 4c 45 43 54 20 6d 69 6e 28  ql { SELECT min(
1880: 62 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  b) FROM t2 WHERE
1890: 20 61 20 3d 20 31 20 41 4e 44 20 62 3c 31 3b 20   a = 1 AND b<1; 
18a0: 7d 0a 7d 20 7b 7b 7d 7d 0a 64 6f 5f 74 65 73 74  }.} {{}}.do_test
18b0: 20 6d 69 6e 6d 61 78 33 2d 33 2e 38 20 7b 0a 20   minmax3-3.8 {. 
18c0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
18d0: 54 20 6d 69 6e 28 62 29 20 46 52 4f 4d 20 74 32  T min(b) FROM t2
18e0: 20 57 48 45 52 45 20 61 20 3d 20 33 20 41 4e 44   WHERE a = 3 AND
18f0: 20 62 3c 31 3b 20 7d 0a 7d 20 7b 7b 7d 7d 0a 0a   b<1; }.} {{}}..
1900: 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d  do_test minmax3-
1910: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
1920: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1930: 4c 45 20 74 34 28 78 29 3b 0a 20 20 20 20 49 4e  LE t4(x);.    IN
1940: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
1950: 55 45 53 28 27 61 62 63 27 29 3b 0a 20 20 20 20  UES('abc');.    
1960: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
1970: 41 4c 55 45 53 28 27 42 43 44 27 29 3b 0a 20 20  ALUES('BCD');.  
1980: 20 20 53 45 4c 45 43 54 20 6d 61 78 28 78 29 20    SELECT max(x) 
1990: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b  FROM t4;.  }.} {
19a0: 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e  abc}.do_test min
19b0: 6d 61 78 33 2d 34 2e 32 20 7b 0a 20 20 65 78 65  max3-4.2 {.  exe
19c0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
19d0: 54 20 6d 61 78 28 78 20 43 4f 4c 4c 41 54 45 20  T max(x COLLATE 
19e0: 6e 6f 63 61 73 65 29 20 46 52 4f 4d 20 74 34 3b  nocase) FROM t4;
19f0: 0a 20 20 7d 0a 7d 20 7b 42 43 44 7d 0a 64 6f 5f  .  }.} {BCD}.do_
1a00: 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 34 2e 33  test minmax3-4.3
1a10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1a20: 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 78 29     SELECT max(x)
1a30: 2c 20 6d 61 78 28 78 20 43 4f 4c 4c 41 54 45 20  , max(x COLLATE 
1a40: 6e 6f 63 61 73 65 29 20 46 52 4f 4d 20 74 34 3b  nocase) FROM t4;
1a50: 0a 20 20 7d 0a 7d 20 7b 61 62 63 20 42 43 44 7d  .  }.} {abc BCD}
1a60: 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78 33  .do_test minmax3
1a70: 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.4 {.  execsql
1a80: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61   {.    SELECT ma
1a90: 78 28 78 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61  x(x COLLATE bina
1aa0: 72 79 29 2c 20 6d 61 78 28 78 20 43 4f 4c 4c 41  ry), max(x COLLA
1ab0: 54 45 20 6e 6f 63 61 73 65 29 20 46 52 4f 4d 20  TE nocase) FROM 
1ac0: 74 34 3b 0a 20 20 7d 0a 7d 20 7b 61 62 63 20 42  t4;.  }.} {abc B
1ad0: 43 44 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  CD}.do_test minm
1ae0: 61 78 33 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63  ax3-4.5 {.  exec
1af0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1b00: 20 6d 61 78 28 78 20 43 4f 4c 4c 41 54 45 20 6e   max(x COLLATE n
1b10: 6f 63 61 73 65 29 2c 20 6d 61 78 28 78 20 43 4f  ocase), max(x CO
1b20: 4c 4c 41 54 45 20 72 74 72 69 6d 29 20 46 52 4f  LLATE rtrim) FRO
1b30: 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 42 43 44  M t4;.  }.} {BCD
1b40: 20 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 6d 69   abc}.do_test mi
1b50: 6e 6d 61 78 33 2d 34 2e 36 20 7b 0a 20 20 65 78  nmax3-4.6 {.  ex
1b60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1b70: 43 54 20 6d 61 78 28 78 20 43 4f 4c 4c 41 54 45  CT max(x COLLATE
1b80: 20 6e 6f 63 61 73 65 29 2c 20 6d 61 78 28 78 29   nocase), max(x)
1b90: 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20   FROM t4;.  }.} 
1ba0: 7b 42 43 44 20 61 62 63 7d 0a 64 6f 5f 74 65 73  {BCD abc}.do_tes
1bb0: 74 20 6d 69 6e 6d 61 78 33 2d 34 2e 31 30 20 7b  t minmax3-4.10 {
1bc0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1bd0: 20 53 45 4c 45 43 54 20 6d 69 6e 28 78 29 20 46   SELECT min(x) F
1be0: 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 42  ROM t4;.  }.} {B
1bf0: 43 44 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d  CD}.do_test minm
1c00: 61 78 33 2d 34 2e 31 31 20 7b 0a 20 20 65 78 65  ax3-4.11 {.  exe
1c10: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1c20: 54 20 6d 69 6e 28 78 20 43 4f 4c 4c 41 54 45 20  T min(x COLLATE 
1c30: 6e 6f 63 61 73 65 29 20 46 52 4f 4d 20 74 34 3b  nocase) FROM t4;
1c40: 0a 20 20 7d 0a 7d 20 7b 61 62 63 7d 0a 64 6f 5f  .  }.} {abc}.do_
1c50: 74 65 73 74 20 6d 69 6e 6d 61 78 33 2d 34 2e 31  test minmax3-4.1
1c60: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
1c70: 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 78      SELECT min(x
1c80: 29 2c 20 6d 69 6e 28 78 20 43 4f 4c 4c 41 54 45  ), min(x COLLATE
1c90: 20 6e 6f 63 61 73 65 29 20 46 52 4f 4d 20 74 34   nocase) FROM t4
1ca0: 3b 0a 20 20 7d 0a 7d 20 7b 42 43 44 20 61 62 63  ;.  }.} {BCD abc
1cb0: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 6e 6d 61 78  }.do_test minmax
1cc0: 33 2d 34 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  3-4.13 {.  execs
1cd0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1ce0: 6d 69 6e 28 78 20 43 4f 4c 4c 41 54 45 20 62 69  min(x COLLATE bi
1cf0: 6e 61 72 79 29 2c 20 6d 69 6e 28 78 20 43 4f 4c  nary), min(x COL
1d00: 4c 41 54 45 20 6e 6f 63 61 73 65 29 20 46 52 4f  LATE nocase) FRO
1d10: 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 42 43 44  M t4;.  }.} {BCD
1d20: 20 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 6d 69   abc}.do_test mi
1d30: 6e 6d 61 78 33 2d 34 2e 31 34 20 7b 0a 20 20 65  nmax3-4.14 {.  e
1d40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1d50: 45 43 54 20 6d 69 6e 28 78 20 43 4f 4c 4c 41 54  ECT min(x COLLAT
1d60: 45 20 6e 6f 63 61 73 65 29 2c 20 6d 69 6e 28 78  E nocase), min(x
1d70: 20 43 4f 4c 4c 41 54 45 20 72 74 72 69 6d 29 20   COLLATE rtrim) 
1d80: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b  FROM t4;.  }.} {
1d90: 61 62 63 20 42 43 44 7d 0a 64 6f 5f 74 65 73 74  abc BCD}.do_test
1da0: 20 6d 69 6e 6d 61 78 33 2d 34 2e 31 35 20 7b 0a   minmax3-4.15 {.
1db0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1dc0: 53 45 4c 45 43 54 20 6d 69 6e 28 78 20 43 4f 4c  SELECT min(x COL
1dd0: 4c 41 54 45 20 6e 6f 63 61 73 65 29 2c 20 6d 69  LATE nocase), mi
1de0: 6e 28 78 29 20 46 52 4f 4d 20 74 34 3b 0a 20 20  n(x) FROM t4;.  
1df0: 7d 0a 7d 20 7b 61 62 63 20 42 43 44 7d 0a 0a 0a  }.} {abc BCD}...
1e00: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.