/ Hex Artifact Content
Login

Artifact 1084050991e9ba22c1c10edd8d84673b501cc25a:


0000: 23 20 32 30 30 38 20 44 65 63 65 6d 62 65 72 20  # 2008 December 
0010: 31 36 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  16.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 0a 23 0a 23 20 54 68 69 73 20 66 69  ary..#.# This fi
01b0: 6c 65 20 74 65 73 74 73 20 72 61 6e 64 6f 6d 6c  le tests randoml
01c0: 79 20 67 65 6e 65 72 61 74 65 64 20 53 51 4c 20  y generated SQL 
01d0: 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 54 68  expressions.  Th
01e0: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 23 20  e expressions.# 
01f0: 61 72 65 20 67 65 6e 65 72 61 74 65 64 20 62 79  are generated by
0200: 20 61 20 54 43 4c 20 73 63 72 69 70 74 2e 20 20   a TCL script.  
0210: 54 68 65 20 73 61 6d 65 20 54 43 4c 20 73 63 72  The same TCL scr
0220: 69 70 74 20 61 6c 73 6f 20 63 6f 6d 70 75 74 65  ipt also compute
0230: 73 20 74 68 65 0a 23 20 63 6f 72 72 65 63 74 20  s the.# correct 
0240: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78 70  value of the exp
0250: 72 65 73 73 69 6f 6e 2e 20 20 53 6f 2c 20 66 72  ression.  So, fr
0260: 6f 6d 20 6f 6e 65 20 70 6f 69 6e 74 20 6f 66 20  om one point of 
0270: 76 69 65 77 2c 20 74 68 69 73 0a 23 20 66 69 6c  view, this.# fil
0280: 65 20 76 65 72 69 66 69 65 73 20 74 68 65 20 65  e verifies the e
0290: 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
02a0: 74 69 6f 6e 20 6c 6f 67 69 63 20 6f 66 20 53 51  tion logic of SQ
02b0: 4c 69 74 65 20 61 67 61 69 6e 73 74 20 74 68 65  Lite against the
02c0: 0a 23 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  .# expression ev
02d0: 61 6c 75 61 74 69 6f 6e 20 6c 6f 67 69 63 20 6f  aluation logic o
02e0: 66 20 54 43 4c 2e 0a 23 0a 23 20 41 6e 20 65 61  f TCL..#.# An ea
02f0: 72 6c 79 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  rly version of t
0300: 68 69 73 20 73 63 72 69 70 74 20 69 73 20 68 6f  his script is ho
0310: 77 20 62 75 67 20 23 33 35 34 31 20 77 61 73 20  w bug #3541 was 
0320: 64 65 74 65 63 74 65 64 2e 0a 23 0a 23 20 24 49  detected..#.# $I
0330: 64 3a 20 72 61 6e 64 65 78 70 72 31 2e 74 65 73  d: randexpr1.tes
0340: 74 2c 76 20 31 2e 31 20 32 30 30 38 2f 31 32 2f  t,v 1.1 2008/12/
0350: 31 35 20 31 36 3a 33 33 3a 33 30 20 64 72 68 20  15 16:33:30 drh 
0360: 45 78 70 20 24 0a 73 65 74 20 74 65 73 74 64 69  Exp $.set testdi
0370: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0380: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0390: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
03a0: 63 6c 0a 0a 23 20 43 72 65 61 74 65 20 74 65 73  cl..# Create tes
03b0: 74 20 64 61 74 61 0a 23 0a 64 6f 5f 74 65 73 74  t data.#.do_test
03c0: 20 72 61 6e 64 65 78 70 72 31 2d 31 2e 31 20 7b   randexpr1-1.1 {
03d0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
03e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
03f0: 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 3b 0a 20  (a,b,c,d,e,f);. 
0400: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0410: 31 20 56 41 4c 55 45 53 28 31 30 30 2c 32 30 30  1 VALUES(100,200
0420: 2c 33 30 30 2c 34 30 30 2c 35 30 30 2c 36 30 30  ,300,400,500,600
0430: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
0440: 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b 31  FROM t1.  }.} {1
0450: 30 30 20 32 30 30 20 33 30 30 20 34 30 30 20 35  00 200 300 400 5
0460: 30 30 20 36 30 30 7d 0a 0a 64 6f 5f 74 65 73 74  00 600}..do_test
0470: 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 20 7b 0a   randexpr-2.1 {.
0480: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
0490: 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  T coalesce((sele
04a0: 63 74 20 31 31 20 66 72 6f 6d 20 74 31 20 77 68  ct 11 from t1 wh
04b0: 65 72 65 20 31 39 20 69 6e 20 28 74 31 2e 62 2c  ere 19 in (t1.b,
04c0: 2b 31 31 2c 63 6f 61 6c 65 73 63 65 28 28 73 65  +11,coalesce((se
04d0: 6c 65 63 74 20 6d 61 78 28 28 61 62 73 28 31 37  lect max((abs(17
04e0: 29 2f 61 62 73 28 74 31 2e 66 29 29 29 20 66 72  )/abs(t1.f))) fr
04f0: 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28 61 62  om t1 where ((ab
0500: 73 28 74 31 2e 66 29 2f 61 62 73 28 74 31 2e 62  s(t1.f)/abs(t1.b
0510: 29 29 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61  )) in (select ca
0520: 73 65 20 28 6d 69 6e 28 74 31 2e 61 20 7c 20 64  se (min(t1.a | d
0530: 2a 64 29 2b 28 61 62 73 28 63 6f 75 6e 74 28 2a  *d)+(abs(count(*
0540: 29 2d 63 6f 75 6e 74 28 2a 29 2b 20 2d 63 6f 75  )-count(*)+ -cou
0550: 6e 74 28 2a 29 2a 6d 61 78 28 20 2d 74 31 2e 63  nt(*)*max( -t1.c
0560: 29 29 2d 6d 61 78 28 66 29 29 29 20 77 68 65 6e  ))-max(f))) when
0570: 20 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63    -count(distinc
0580: 74 20 31 39 29 20 74 68 65 6e 20 28 28 63 6f 75  t 19) then ((cou
0590: 6e 74 28 2a 29 29 29 20 65 6c 73 65 20 6d 61 78  nt(*))) else max
05a0: 28 31 33 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  (13) end from t1
05b0: 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f   union select co
05c0: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62 29 20  unt(distinct b) 
05d0: 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 31 39 20  from t1)) or 19 
05e0: 69 6e 20 28 74 31 2e 61 2c 74 31 2e 63 2c 31 37  in (t1.a,t1.c,17
05f0: 29 29 2c 31 37 29 20 7c 20 31 37 29 29 2c 31 33  )),17) | 17)),13
0600: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
0610: 6e 6f 74 20 6e 6f 74 20 63 3d 61 2d 2b 28 73 65  not not c=a-+(se
0620: 6c 65 63 74 20 63 61 73 65 20 7e 63 61 73 65 20  lect case ~case 
0630: 20 2d 7e 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e   -~+count(distin
0640: 63 74 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74  ct (select count
0650: 28 64 69 73 74 69 6e 63 74 20 74 31 2e 61 29 2a  (distinct t1.a)*
0660: 6d 61 78 28 31 33 29 20 66 72 6f 6d 20 74 31 29  max(13) from t1)
0670: 29 2b 6d 61 78 28 20 2d 31 39 2a 66 29 2a 6d 61  )+max( -19*f)*ma
0680: 78 28 66 29 2a 6d 61 78 28 66 29 2a 20 2d 63 6f  x(f)*max(f)* -co
0690: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 64 29 2d  unt(distinct d)-
06a0: 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  (count(distinct 
06b0: 31 31 29 29 20 7c 20 6d 61 78 28 74 31 2e 66 29  11)) | max(t1.f)
06c0: 2a 63 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 63  *count(*) when c
06d0: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62 29  ount(distinct b)
06e0: 20 74 68 65 6e 20 63 6f 75 6e 74 28 64 69 73 74   then count(dist
06f0: 69 6e 63 74 20 74 31 2e 62 29 20 65 6c 73 65 20  inct t1.b) else 
0700: 20 2d 6d 69 6e 28 74 31 2e 66 29 20 65 6e 64 2a   -min(t1.f) end*
0710: 63 61 73 74 28 61 76 67 28 31 31 29 20 41 53 20  cast(avg(11) AS 
0720: 69 6e 74 65 67 65 72 29 20 77 68 65 6e 20 6d 61  integer) when ma
0730: 78 28 74 31 2e 66 29 20 74 68 65 6e 20 6d 61 78  x(t1.f) then max
0740: 28 63 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a  (c) else count(*
0750: 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 2b 64  ) end from t1)+d
0760: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72  }.} {}.do_test r
0770: 61 6e 64 65 78 70 72 2d 32 2e 32 20 7b 0a 20 20  andexpr-2.2 {.  
0780: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
0790: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
07a0: 20 31 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72   11 from t1 wher
07b0: 65 20 31 39 20 69 6e 20 28 74 31 2e 62 2c 2b 31  e 19 in (t1.b,+1
07c0: 31 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  1,coalesce((sele
07d0: 63 74 20 6d 61 78 28 28 61 62 73 28 31 37 29 2f  ct max((abs(17)/
07e0: 61 62 73 28 74 31 2e 66 29 29 29 20 66 72 6f 6d  abs(t1.f))) from
07f0: 20 74 31 20 77 68 65 72 65 20 28 28 61 62 73 28   t1 where ((abs(
0800: 74 31 2e 66 29 2f 61 62 73 28 74 31 2e 62 29 29  t1.f)/abs(t1.b))
0810: 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73 65   in (select case
0820: 20 28 6d 69 6e 28 74 31 2e 61 20 7c 20 64 2a 64   (min(t1.a | d*d
0830: 29 2b 28 61 62 73 28 63 6f 75 6e 74 28 2a 29 2d  )+(abs(count(*)-
0840: 63 6f 75 6e 74 28 2a 29 2b 20 2d 63 6f 75 6e 74  count(*)+ -count
0850: 28 2a 29 2a 6d 61 78 28 20 2d 74 31 2e 63 29 29  (*)*max( -t1.c))
0860: 2d 6d 61 78 28 66 29 29 29 20 77 68 65 6e 20 20  -max(f))) when  
0870: 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
0880: 31 39 29 20 74 68 65 6e 20 28 28 63 6f 75 6e 74  19) then ((count
0890: 28 2a 29 29 29 20 65 6c 73 65 20 6d 61 78 28 31  (*))) else max(1
08a0: 33 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75  3) end from t1 u
08b0: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
08c0: 74 28 64 69 73 74 69 6e 63 74 20 62 29 20 66 72  t(distinct b) fr
08d0: 6f 6d 20 74 31 29 29 20 6f 72 20 31 39 20 69 6e  om t1)) or 19 in
08e0: 20 28 74 31 2e 61 2c 74 31 2e 63 2c 31 37 29 29   (t1.a,t1.c,17))
08f0: 2c 31 37 29 20 7c 20 31 37 29 29 2c 31 33 29 20  ,17) | 17)),13) 
0900: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
0910: 54 20 28 6e 6f 74 20 6e 6f 74 20 63 3d 61 2d 2b  T (not not c=a-+
0920: 28 73 65 6c 65 63 74 20 63 61 73 65 20 7e 63 61  (select case ~ca
0930: 73 65 20 20 2d 7e 2b 63 6f 75 6e 74 28 64 69 73  se  -~+count(dis
0940: 74 69 6e 63 74 20 28 73 65 6c 65 63 74 20 63 6f  tinct (select co
0950: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
0960: 61 29 2a 6d 61 78 28 31 33 29 20 66 72 6f 6d 20  a)*max(13) from 
0970: 74 31 29 29 2b 6d 61 78 28 20 2d 31 39 2a 66 29  t1))+max( -19*f)
0980: 2a 6d 61 78 28 66 29 2a 6d 61 78 28 66 29 2a 20  *max(f)*max(f)* 
0990: 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
09a0: 64 29 2d 28 63 6f 75 6e 74 28 64 69 73 74 69 6e  d)-(count(distin
09b0: 63 74 20 31 31 29 29 20 7c 20 6d 61 78 28 74 31  ct 11)) | max(t1
09c0: 2e 66 29 2a 63 6f 75 6e 74 28 2a 29 20 77 68 65  .f)*count(*) whe
09d0: 6e 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  n count(distinct
09e0: 20 62 29 20 74 68 65 6e 20 63 6f 75 6e 74 28 64   b) then count(d
09f0: 69 73 74 69 6e 63 74 20 74 31 2e 62 29 20 65 6c  istinct t1.b) el
0a00: 73 65 20 20 2d 6d 69 6e 28 74 31 2e 66 29 20 65  se  -min(t1.f) e
0a10: 6e 64 2a 63 61 73 74 28 61 76 67 28 31 31 29 20  nd*cast(avg(11) 
0a20: 41 53 20 69 6e 74 65 67 65 72 29 20 77 68 65 6e  AS integer) when
0a30: 20 6d 61 78 28 74 31 2e 66 29 20 74 68 65 6e 20   max(t1.f) then 
0a40: 6d 61 78 28 63 29 20 65 6c 73 65 20 63 6f 75 6e  max(c) else coun
0a50: 74 28 2a 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  t(*) end from t1
0a60: 29 2b 64 29 7d 0a 7d 20 7b 31 33 7d 0a 64 6f 5f  )+d)}.} {13}.do_
0a70: 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
0a80: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  3 {.  db eval {S
0a90: 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28  ELECT coalesce((
0aa0: 73 65 6c 65 63 74 20 31 31 20 66 72 6f 6d 20 74  select 11 from t
0ab0: 31 20 77 68 65 72 65 20 31 39 20 69 6e 20 28 74  1 where 19 in (t
0ac0: 31 2e 62 2c 2b 31 31 2c 63 6f 61 6c 65 73 63 65  1.b,+11,coalesce
0ad0: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 28 61 62  ((select max((ab
0ae0: 73 28 31 37 29 2f 61 62 73 28 74 31 2e 66 29 29  s(17)/abs(t1.f))
0af0: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
0b00: 28 28 61 62 73 28 74 31 2e 66 29 2f 61 62 73 28  ((abs(t1.f)/abs(
0b10: 74 31 2e 62 29 29 20 69 6e 20 28 73 65 6c 65 63  t1.b)) in (selec
0b20: 74 20 63 61 73 65 20 28 6d 69 6e 28 74 31 2e 61  t case (min(t1.a
0b30: 20 26 20 64 2a 64 29 2b 28 61 62 73 28 63 6f 75   & d*d)+(abs(cou
0b40: 6e 74 28 2a 29 2d 63 6f 75 6e 74 28 2a 29 2b 20  nt(*)-count(*)+ 
0b50: 2d 63 6f 75 6e 74 28 2a 29 2a 6d 61 78 28 20 2d  -count(*)*max( -
0b60: 74 31 2e 63 29 29 2d 6d 61 78 28 66 29 29 29 20  t1.c))-max(f))) 
0b70: 77 68 65 6e 20 20 2d 63 6f 75 6e 74 28 64 69 73  when  -count(dis
0b80: 74 69 6e 63 74 20 31 39 29 20 74 68 65 6e 20 28  tinct 19) then (
0b90: 28 63 6f 75 6e 74 28 2a 29 29 29 20 65 6c 73 65  (count(*))) else
0ba0: 20 6d 61 78 28 31 33 29 20 65 6e 64 20 66 72 6f   max(13) end fro
0bb0: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
0bc0: 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  t count(distinct
0bd0: 20 62 29 20 66 72 6f 6d 20 74 31 29 29 20 6f 72   b) from t1)) or
0be0: 20 31 39 20 69 6e 20 28 74 31 2e 61 2c 74 31 2e   19 in (t1.a,t1.
0bf0: 63 2c 31 37 29 29 2c 31 37 29 20 26 20 31 37 29  c,17)),17) & 17)
0c00: 29 2c 31 33 29 20 46 52 4f 4d 20 74 31 20 57 48  ),13) FROM t1 WH
0c10: 45 52 45 20 4e 4f 54 20 28 6e 6f 74 20 6e 6f 74  ERE NOT (not not
0c20: 20 63 3d 61 2d 2b 28 73 65 6c 65 63 74 20 63 61   c=a-+(select ca
0c30: 73 65 20 7e 63 61 73 65 20 20 2d 7e 2b 63 6f 75  se ~case  -~+cou
0c40: 6e 74 28 64 69 73 74 69 6e 63 74 20 28 73 65 6c  nt(distinct (sel
0c50: 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ect count(distin
0c60: 63 74 20 74 31 2e 61 29 2a 6d 61 78 28 31 33 29  ct t1.a)*max(13)
0c70: 20 66 72 6f 6d 20 74 31 29 29 2b 6d 61 78 28 20   from t1))+max( 
0c80: 2d 31 39 2a 66 29 2a 6d 61 78 28 66 29 2a 6d 61  -19*f)*max(f)*ma
0c90: 78 28 66 29 2a 20 2d 63 6f 75 6e 74 28 64 69 73  x(f)* -count(dis
0ca0: 74 69 6e 63 74 20 64 29 2d 28 63 6f 75 6e 74 28  tinct d)-(count(
0cb0: 64 69 73 74 69 6e 63 74 20 31 31 29 29 20 7c 20  distinct 11)) | 
0cc0: 6d 61 78 28 74 31 2e 66 29 2a 63 6f 75 6e 74 28  max(t1.f)*count(
0cd0: 2a 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 64 69  *) when count(di
0ce0: 73 74 69 6e 63 74 20 62 29 20 74 68 65 6e 20 63  stinct b) then c
0cf0: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
0d00: 2e 62 29 20 65 6c 73 65 20 20 2d 6d 69 6e 28 74  .b) else  -min(t
0d10: 31 2e 66 29 20 65 6e 64 2a 63 61 73 74 28 61 76  1.f) end*cast(av
0d20: 67 28 31 31 29 20 41 53 20 69 6e 74 65 67 65 72  g(11) AS integer
0d30: 29 20 77 68 65 6e 20 6d 61 78 28 74 31 2e 66 29  ) when max(t1.f)
0d40: 20 74 68 65 6e 20 6d 61 78 28 63 29 20 65 6c 73   then max(c) els
0d50: 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e 64 20 66  e count(*) end f
0d60: 72 6f 6d 20 74 31 29 2b 64 29 7d 0a 7d 20 7b 31  rom t1)+d)}.} {1
0d70: 33 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  3}.do_test rande
0d80: 78 70 72 2d 32 2e 34 20 7b 0a 20 20 64 62 20 65  xpr-2.4 {.  db e
0d90: 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 31 2e 63  val {SELECT t1.c
0da0: 2a 31 39 2d 74 31 2e 66 2a 31 39 2b 63 6f 61 6c  *19-t1.f*19+coal
0db0: 65 73 63 65 28 28 73 65 6c 65 63 74 20 31 37 20  esce((select 17 
0dc0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 20  from t1 where e 
0dd0: 69 6e 20 28 66 2c 63 61 73 65 20 28 73 65 6c 65  in (f,case (sele
0de0: 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e 61  ct cast(avg(t1.a
0df0: 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72  ) AS integer) fr
0e00: 6f 6d 20 74 31 29 2d 74 31 2e 64 20 77 68 65 6e  om t1)-t1.d when
0e10: 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
0e20: 74 20 2b 63 61 73 65 20 77 68 65 6e 20 6e 6f 74  t +case when not
0e30: 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
0e40: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
0e50: 37 3c 3e 74 31 2e 66 20 61 6e 64 20 28 28 61 29  7<>t1.f and ((a)
0e60: 29 3c 74 31 2e 62 29 20 74 68 65 6e 20 74 31 2e  )<t1.b) then t1.
0e70: 63 20 77 68 65 6e 20 63 20 6e 6f 74 20 62 65 74  c when c not bet
0e80: 77 65 65 6e 20 62 20 61 6e 64 20 31 31 20 74 68  ween b and 11 th
0e90: 65 6e 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e  en case when t1.
0ea0: 63 3c 66 20 74 68 65 6e 20 74 31 2e 62 20 77 68  c<f then t1.b wh
0eb0: 65 6e 20 65 20 69 6e 20 28 74 31 2e 64 2c 74 31  en e in (t1.d,t1
0ec0: 2e 64 2c 20 2d 65 29 20 74 68 65 6e 20 64 20 65  .d, -e) then d e
0ed0: 6c 73 65 20 74 31 2e 62 20 65 6e 64 20 65 6c 73  lse t1.b end els
0ee0: 65 20 66 20 65 6e 64 2b 31 31 20 66 72 6f 6d 20  e f end+11 from 
0ef0: 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
0f00: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
0f10: 20 77 68 65 72 65 20 74 31 2e 66 20 69 6e 20 28   where t1.f in (
0f20: 73 65 6c 65 63 74 20 28 63 6f 75 6e 74 28 64 69  select (count(di
0f30: 73 74 69 6e 63 74 20 66 29 29 20 66 72 6f 6d 20  stinct f)) from 
0f40: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
0f50: 6d 61 78 28 31 31 29 20 66 72 6f 6d 20 74 31 29  max(11) from t1)
0f60: 29 29 2c 65 29 20 74 68 65 6e 20 31 31 20 65 6c  )),e) then 11 el
0f70: 73 65 20 74 31 2e 61 20 65 6e 64 2c 74 31 2e 64  se t1.a end,t1.d
0f80: 29 29 2c 31 33 29 2a 62 2b 62 20 46 52 4f 4d 20  )),13)*b+b FROM 
0f90: 74 31 20 57 48 45 52 45 20 7e 74 31 2e 62 3c 63  t1 WHERE ~t1.b<c
0fa0: 61 73 65 20 77 68 65 6e 20 74 31 2e 62 2b 74 31  ase when t1.b+t1
0fb0: 2e 63 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d  .c in (select  -
0fc0: 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31  count(distinct 1
0fd0: 37 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  7+coalesce((sele
0fe0: 63 74 20 6d 61 78 28 20 2d 66 2b 74 31 2e 63 2d  ct max( -f+t1.c-
0ff0: 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  d) from t1 where
1000: 20 28 31 39 3e 3d 61 29 20 61 6e 64 20 74 31 2e   (19>=a) and t1.
1010: 62 20 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20  b between f and 
1020: 31 33 29 2c 74 31 2e 61 29 29 2b 63 61 73 65 20  13),t1.a))+case 
1030: 61 62 73 28 2b 28 6d 61 78 28 31 39 29 29 29 20  abs(+(max(19))) 
1040: 7c 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  | count(distinct
1050: 20 74 31 2e 65 29 20 7c 20 63 6f 75 6e 74 28 64   t1.e) | count(d
1060: 69 73 74 69 6e 63 74 20 31 39 29 20 77 68 65 6e  istinct 19) when
1070: 20 63 6f 75 6e 74 28 2a 29 20 74 68 65 6e 20 28   count(*) then (
1080: 6d 61 78 28 61 29 29 20 65 6c 73 65 20 63 6f 75  max(a)) else cou
1090: 6e 74 28 64 69 73 74 69 6e 63 74 20 64 29 20 65  nt(distinct d) e
10a0: 6e 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  nd from t1 union
10b0: 20 73 65 6c 65 63 74 20 28 63 6f 75 6e 74 28 2a   select (count(*
10c0: 29 29 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20  )) from t1) and 
10d0: 74 31 2e 62 3e 3d 31 39 20 74 68 65 6e 20 64 20  t1.b>=19 then d 
10e0: 77 68 65 6e 20 74 31 2e 62 20 69 6e 20 28 73 65  when t1.b in (se
10f0: 6c 65 63 74 20 64 20 66 72 6f 6d 20 74 31 20 75  lect d from t1 u
1100: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 20 66 72  nion select c fr
1110: 6f 6d 20 74 31 29 20 74 68 65 6e 20 74 31 2e 65  om t1) then t1.e
1120: 20 65 6c 73 65 20 61 20 65 6e 64 7d 0a 7d 20 7b   else a end}.} {
1130: 2d 32 39 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72  -2900}.do_test r
1140: 61 6e 64 65 78 70 72 2d 32 2e 35 20 7b 0a 20 20  andexpr-2.5 {.  
1150: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
1160: 74 31 2e 63 2a 31 39 2d 74 31 2e 66 2a 31 39 2b  t1.c*19-t1.f*19+
1170: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1180: 20 31 37 20 66 72 6f 6d 20 74 31 20 77 68 65 72   17 from t1 wher
1190: 65 20 65 20 69 6e 20 28 66 2c 63 61 73 65 20 28  e e in (f,case (
11a0: 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
11b0: 74 31 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72  t1.a) AS integer
11c0: 29 20 66 72 6f 6d 20 74 31 29 2d 74 31 2e 64 20  ) from t1)-t1.d 
11d0: 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73  when coalesce((s
11e0: 65 6c 65 63 74 20 2b 63 61 73 65 20 77 68 65 6e  elect +case when
11f0: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
1200: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
1210: 72 65 20 31 37 3c 3e 74 31 2e 66 20 61 6e 64 20  re 17<>t1.f and 
1220: 28 28 61 29 29 3c 74 31 2e 62 29 20 74 68 65 6e  ((a))<t1.b) then
1230: 20 74 31 2e 63 20 77 68 65 6e 20 63 20 6e 6f 74   t1.c when c not
1240: 20 62 65 74 77 65 65 6e 20 62 20 61 6e 64 20 31   between b and 1
1250: 31 20 74 68 65 6e 20 63 61 73 65 20 77 68 65 6e  1 then case when
1260: 20 74 31 2e 63 3c 66 20 74 68 65 6e 20 74 31 2e   t1.c<f then t1.
1270: 62 20 77 68 65 6e 20 65 20 69 6e 20 28 74 31 2e  b when e in (t1.
1280: 64 2c 74 31 2e 64 2c 20 2d 65 29 20 74 68 65 6e  d,t1.d, -e) then
1290: 20 64 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64   d else t1.b end
12a0: 20 65 6c 73 65 20 66 20 65 6e 64 2b 31 31 20 66   else f end+11 f
12b0: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69  rom t1 where exi
12c0: 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
12d0: 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66 20  m t1 where t1.f 
12e0: 69 6e 20 28 73 65 6c 65 63 74 20 28 63 6f 75 6e  in (select (coun
12f0: 74 28 64 69 73 74 69 6e 63 74 20 66 29 29 20 66  t(distinct f)) f
1300: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1310: 65 63 74 20 6d 61 78 28 31 31 29 20 66 72 6f 6d  ect max(11) from
1320: 20 74 31 29 29 29 2c 65 29 20 74 68 65 6e 20 31   t1))),e) then 1
1330: 31 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 2c  1 else t1.a end,
1340: 74 31 2e 64 29 29 2c 31 33 29 2a 62 2b 62 20 46  t1.d)),13)*b+b F
1350: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
1360: 20 28 7e 74 31 2e 62 3c 63 61 73 65 20 77 68 65   (~t1.b<case whe
1370: 6e 20 74 31 2e 62 2b 74 31 2e 63 20 69 6e 20 28  n t1.b+t1.c in (
1380: 73 65 6c 65 63 74 20 20 2d 63 6f 75 6e 74 28 64  select  -count(d
1390: 69 73 74 69 6e 63 74 20 31 37 2b 63 6f 61 6c 65  istinct 17+coale
13a0: 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
13b0: 20 2d 66 2b 74 31 2e 63 2d 64 29 20 66 72 6f 6d   -f+t1.c-d) from
13c0: 20 74 31 20 77 68 65 72 65 20 28 31 39 3e 3d 61   t1 where (19>=a
13d0: 29 20 61 6e 64 20 74 31 2e 62 20 62 65 74 77 65  ) and t1.b betwe
13e0: 65 6e 20 66 20 61 6e 64 20 31 33 29 2c 74 31 2e  en f and 13),t1.
13f0: 61 29 29 2b 63 61 73 65 20 61 62 73 28 2b 28 6d  a))+case abs(+(m
1400: 61 78 28 31 39 29 29 29 20 7c 20 63 6f 75 6e 74  ax(19))) | count
1410: 28 64 69 73 74 69 6e 63 74 20 74 31 2e 65 29 20  (distinct t1.e) 
1420: 7c 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  | count(distinct
1430: 20 31 39 29 20 77 68 65 6e 20 63 6f 75 6e 74 28   19) when count(
1440: 2a 29 20 74 68 65 6e 20 28 6d 61 78 28 61 29 29  *) then (max(a))
1450: 20 65 6c 73 65 20 63 6f 75 6e 74 28 64 69 73 74   else count(dist
1460: 69 6e 63 74 20 64 29 20 65 6e 64 20 66 72 6f 6d  inct d) end from
1470: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
1480: 20 28 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d   (count(*)) from
1490: 20 74 31 29 20 61 6e 64 20 74 31 2e 62 3e 3d 31   t1) and t1.b>=1
14a0: 39 20 74 68 65 6e 20 64 20 77 68 65 6e 20 74 31  9 then d when t1
14b0: 2e 62 20 69 6e 20 28 73 65 6c 65 63 74 20 64 20  .b in (select d 
14c0: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
14d0: 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 29 20  lect c from t1) 
14e0: 74 68 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 61  then t1.e else a
14f0: 20 65 6e 64 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74   end)}.} {}.do_t
1500: 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 36  est randexpr-2.6
1510: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
1520: 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 63  LECT case when c
1530: 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 65 78 69  ase when not exi
1540: 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
1550: 6d 20 74 31 20 77 68 65 72 65 20 65 20 6e 6f 74  m t1 where e not
1560: 20 69 6e 20 28 7e 74 31 2e 64 2c 2b 63 61 73 65   in (~t1.d,+case
1570: 20 77 68 65 6e 20 74 31 2e 63 3c 62 20 74 68 65   when t1.c<b the
1580: 6e 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e 61  n t1.e else t1.a
1590: 20 65 6e 64 2d 31 31 20 7c 20 74 31 2e 66 2c 63   end-11 | t1.f,c
15a0: 29 20 6f 72 20 62 20 69 6e 20 28 73 65 6c 65 63  ) or b in (selec
15b0: 74 20 63 61 73 74 28 61 76 67 28 62 29 20 41 53  t cast(avg(b) AS
15c0: 20 69 6e 74 65 67 65 72 29 2a 28 7e 61 62 73 28   integer)*(~abs(
15d0: 28 63 6f 75 6e 74 28 2a 29 29 29 29 2a 20 2d 28  (count(*))))* -(
15e0: 20 2d 63 61 73 74 28 61 76 67 28 65 29 20 41 53   -cast(avg(e) AS
15f0: 20 69 6e 74 65 67 65 72 29 29 20 66 72 6f 6d 20   integer)) from 
1600: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
1610: 6d 69 6e 28 74 31 2e 63 29 20 66 72 6f 6d 20 74  min(t1.c) from t
1620: 31 29 29 20 74 68 65 6e 20 74 31 2e 66 20 77 68  1)) then t1.f wh
1630: 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  en not exists(se
1640: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
1650: 68 65 72 65 20 6e 6f 74 20 63 3c 3e 64 29 20 74  here not c<>d) t
1660: 68 65 6e 20 31 37 20 65 6c 73 65 20 74 31 2e 65  hen 17 else t1.e
1670: 20 65 6e 64 20 69 6e 20 28 61 2c 74 31 2e 65 2c   end in (a,t1.e,
1680: 31 37 29 20 6f 72 20 28 6e 6f 74 20 65 78 69 73  17) or (not exis
1690: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
16a0: 20 74 31 20 77 68 65 72 65 20 61 20 69 6e 20 28   t1 where a in (
16b0: 66 2c 74 31 2e 63 2c 74 31 2e 61 29 29 29 20 74  f,t1.c,t1.a))) t
16c0: 68 65 6e 20 31 31 20 65 6c 73 65 20 31 33 20 65  hen 11 else 13 e
16d0: 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  nd FROM t1 WHERE
16e0: 20 74 31 2e 62 3c 63 61 73 65 20 77 68 65 6e 20   t1.b<case when 
16f0: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
1700: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f  from t1 where no
1710: 74 20 20 2d 28 73 65 6c 65 63 74 20 6d 69 6e 28  t  -(select min(
1720: 74 31 2e 62 2a 62 2a 74 31 2e 61 2b 74 31 2e 64  t1.b*b*t1.a+t1.d
1730: 29 2b 61 62 73 28 63 61 73 65 20 63 6f 75 6e 74  )+abs(case count
1740: 28 2a 29 20 7c 20 28 63 61 73 74 28 61 76 67 28  (*) | (cast(avg(
1750: 63 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20  c) AS integer)) 
1760: 77 68 65 6e 20 6d 61 78 28 31 37 29 20 74 68 65  when max(17) the
1770: 6e 20 6d 69 6e 28 63 29 20 65 6c 73 65 20 28 6d  n min(c) else (m
1780: 69 6e 28 31 33 29 29 20 65 6e 64 29 2b 6d 69 6e  in(13)) end)+min
1790: 28 65 29 20 66 72 6f 6d 20 74 31 29 20 6e 6f 74  (e) from t1) not
17a0: 20 69 6e 20 28 74 31 2e 63 2c 66 2d 64 2c 31 31   in (t1.c,f-d,11
17b0: 29 20 61 6e 64 20 63 20 6e 6f 74 20 62 65 74 77  ) and c not betw
17c0: 65 65 6e 20 28 31 39 29 20 61 6e 64 20 65 29 20  een (19) and e) 
17d0: 74 68 65 6e 20 7e 31 33 2a 74 31 2e 61 20 77 68  then ~13*t1.a wh
17e0: 65 6e 20 31 33 20 6e 6f 74 20 69 6e 20 28 74 31  en 13 not in (t1
17f0: 2e 65 2c 63 2c 31 31 29 20 74 68 65 6e 20 62 20  .e,c,11) then b 
1800: 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 2a 63 2d  else t1.c end*c-
1810: 74 31 2e 64 7d 0a 7d 20 7b 31 31 7d 0a 64 6f 5f  t1.d}.} {11}.do_
1820: 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
1830: 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  7 {.  db eval {S
1840: 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20  ELECT case when 
1850: 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 65 78  case when not ex
1860: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
1870: 6f 6d 20 74 31 20 77 68 65 72 65 20 65 20 6e 6f  om t1 where e no
1880: 74 20 69 6e 20 28 7e 74 31 2e 64 2c 2b 63 61 73  t in (~t1.d,+cas
1890: 65 20 77 68 65 6e 20 74 31 2e 63 3c 62 20 74 68  e when t1.c<b th
18a0: 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e  en t1.e else t1.
18b0: 61 20 65 6e 64 2d 31 31 20 7c 20 74 31 2e 66 2c  a end-11 | t1.f,
18c0: 63 29 20 6f 72 20 62 20 69 6e 20 28 73 65 6c 65  c) or b in (sele
18d0: 63 74 20 63 61 73 74 28 61 76 67 28 62 29 20 41  ct cast(avg(b) A
18e0: 53 20 69 6e 74 65 67 65 72 29 2a 28 7e 61 62 73  S integer)*(~abs
18f0: 28 28 63 6f 75 6e 74 28 2a 29 29 29 29 2a 20 2d  ((count(*))))* -
1900: 28 20 2d 63 61 73 74 28 61 76 67 28 65 29 20 41  ( -cast(avg(e) A
1910: 53 20 69 6e 74 65 67 65 72 29 29 20 66 72 6f 6d  S integer)) from
1920: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
1930: 20 6d 69 6e 28 74 31 2e 63 29 20 66 72 6f 6d 20   min(t1.c) from 
1940: 74 31 29 29 20 74 68 65 6e 20 74 31 2e 66 20 77  t1)) then t1.f w
1950: 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73  hen not exists(s
1960: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
1970: 77 68 65 72 65 20 6e 6f 74 20 63 3c 3e 64 29 20  where not c<>d) 
1980: 74 68 65 6e 20 31 37 20 65 6c 73 65 20 74 31 2e  then 17 else t1.
1990: 65 20 65 6e 64 20 69 6e 20 28 61 2c 74 31 2e 65  e end in (a,t1.e
19a0: 2c 31 37 29 20 6f 72 20 28 6e 6f 74 20 65 78 69  ,17) or (not exi
19b0: 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
19c0: 6d 20 74 31 20 77 68 65 72 65 20 61 20 69 6e 20  m t1 where a in 
19d0: 28 66 2c 74 31 2e 63 2c 74 31 2e 61 29 29 29 20  (f,t1.c,t1.a))) 
19e0: 74 68 65 6e 20 31 31 20 65 6c 73 65 20 31 33 20  then 11 else 13 
19f0: 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  end FROM t1 WHER
1a00: 45 20 4e 4f 54 20 28 74 31 2e 62 3c 63 61 73 65  E NOT (t1.b<case
1a10: 20 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c   when exists(sel
1a20: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
1a30: 65 72 65 20 6e 6f 74 20 20 2d 28 73 65 6c 65 63  ere not  -(selec
1a40: 74 20 6d 69 6e 28 74 31 2e 62 2a 62 2a 74 31 2e  t min(t1.b*b*t1.
1a50: 61 2b 74 31 2e 64 29 2b 61 62 73 28 63 61 73 65  a+t1.d)+abs(case
1a60: 20 63 6f 75 6e 74 28 2a 29 20 7c 20 28 63 61 73   count(*) | (cas
1a70: 74 28 61 76 67 28 63 29 20 41 53 20 69 6e 74 65  t(avg(c) AS inte
1a80: 67 65 72 29 29 20 77 68 65 6e 20 6d 61 78 28 31  ger)) when max(1
1a90: 37 29 20 74 68 65 6e 20 6d 69 6e 28 63 29 20 65  7) then min(c) e
1aa0: 6c 73 65 20 28 6d 69 6e 28 31 33 29 29 20 65 6e  lse (min(13)) en
1ab0: 64 29 2b 6d 69 6e 28 65 29 20 66 72 6f 6d 20 74  d)+min(e) from t
1ac0: 31 29 20 6e 6f 74 20 69 6e 20 28 74 31 2e 63 2c  1) not in (t1.c,
1ad0: 66 2d 64 2c 31 31 29 20 61 6e 64 20 63 20 6e 6f  f-d,11) and c no
1ae0: 74 20 62 65 74 77 65 65 6e 20 28 31 39 29 20 61  t between (19) a
1af0: 6e 64 20 65 29 20 74 68 65 6e 20 7e 31 33 2a 74  nd e) then ~13*t
1b00: 31 2e 61 20 77 68 65 6e 20 31 33 20 6e 6f 74 20  1.a when 13 not 
1b10: 69 6e 20 28 74 31 2e 65 2c 63 2c 31 31 29 20 74  in (t1.e,c,11) t
1b20: 68 65 6e 20 62 20 65 6c 73 65 20 74 31 2e 63 20  hen b else t1.c 
1b30: 65 6e 64 2a 63 2d 74 31 2e 64 29 7d 0a 7d 20 7b  end*c-t1.d)}.} {
1b40: 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
1b50: 70 72 2d 32 2e 38 20 7b 0a 20 20 64 62 20 65 76  pr-2.8 {.  db ev
1b60: 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
1b70: 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 6e  when case when n
1b80: 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
1b90: 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
1ba0: 20 65 20 6e 6f 74 20 69 6e 20 28 7e 74 31 2e 64   e not in (~t1.d
1bb0: 2c 2b 63 61 73 65 20 77 68 65 6e 20 74 31 2e 63  ,+case when t1.c
1bc0: 3c 62 20 74 68 65 6e 20 74 31 2e 65 20 65 6c 73  <b then t1.e els
1bd0: 65 20 74 31 2e 61 20 65 6e 64 2d 31 31 20 26 20  e t1.a end-11 & 
1be0: 74 31 2e 66 2c 63 29 20 6f 72 20 62 20 69 6e 20  t1.f,c) or b in 
1bf0: 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67  (select cast(avg
1c00: 28 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 2a  (b) AS integer)*
1c10: 28 7e 61 62 73 28 28 63 6f 75 6e 74 28 2a 29 29  (~abs((count(*))
1c20: 29 29 2a 20 2d 28 20 2d 63 61 73 74 28 61 76 67  ))* -( -cast(avg
1c30: 28 65 29 20 41 53 20 69 6e 74 65 67 65 72 29 29  (e) AS integer))
1c40: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
1c50: 65 6c 65 63 74 20 6d 69 6e 28 74 31 2e 63 29 20  elect min(t1.c) 
1c60: 66 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20 74  from t1)) then t
1c70: 31 2e 66 20 77 68 65 6e 20 6e 6f 74 20 65 78 69  1.f when not exi
1c80: 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
1c90: 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 63  m t1 where not c
1ca0: 3c 3e 64 29 20 74 68 65 6e 20 31 37 20 65 6c 73  <>d) then 17 els
1cb0: 65 20 74 31 2e 65 20 65 6e 64 20 69 6e 20 28 61  e t1.e end in (a
1cc0: 2c 74 31 2e 65 2c 31 37 29 20 6f 72 20 28 6e 6f  ,t1.e,17) or (no
1cd0: 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
1ce0: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
1cf0: 61 20 69 6e 20 28 66 2c 74 31 2e 63 2c 74 31 2e  a in (f,t1.c,t1.
1d00: 61 29 29 29 20 74 68 65 6e 20 31 31 20 65 6c 73  a))) then 11 els
1d10: 65 20 31 33 20 65 6e 64 20 46 52 4f 4d 20 74 31  e 13 end FROM t1
1d20: 20 57 48 45 52 45 20 74 31 2e 62 3c 63 61 73 65   WHERE t1.b<case
1d30: 20 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c   when exists(sel
1d40: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
1d50: 65 72 65 20 6e 6f 74 20 20 2d 28 73 65 6c 65 63  ere not  -(selec
1d60: 74 20 6d 69 6e 28 74 31 2e 62 2a 62 2a 74 31 2e  t min(t1.b*b*t1.
1d70: 61 2b 74 31 2e 64 29 2b 61 62 73 28 63 61 73 65  a+t1.d)+abs(case
1d80: 20 63 6f 75 6e 74 28 2a 29 20 7c 20 28 63 61 73   count(*) | (cas
1d90: 74 28 61 76 67 28 63 29 20 41 53 20 69 6e 74 65  t(avg(c) AS inte
1da0: 67 65 72 29 29 20 77 68 65 6e 20 6d 61 78 28 31  ger)) when max(1
1db0: 37 29 20 74 68 65 6e 20 6d 69 6e 28 63 29 20 65  7) then min(c) e
1dc0: 6c 73 65 20 28 6d 69 6e 28 31 33 29 29 20 65 6e  lse (min(13)) en
1dd0: 64 29 2b 6d 69 6e 28 65 29 20 66 72 6f 6d 20 74  d)+min(e) from t
1de0: 31 29 20 6e 6f 74 20 69 6e 20 28 74 31 2e 63 2c  1) not in (t1.c,
1df0: 66 2d 64 2c 31 31 29 20 61 6e 64 20 63 20 6e 6f  f-d,11) and c no
1e00: 74 20 62 65 74 77 65 65 6e 20 28 31 39 29 20 61  t between (19) a
1e10: 6e 64 20 65 29 20 74 68 65 6e 20 7e 31 33 2a 74  nd e) then ~13*t
1e20: 31 2e 61 20 77 68 65 6e 20 31 33 20 6e 6f 74 20  1.a when 13 not 
1e30: 69 6e 20 28 74 31 2e 65 2c 63 2c 31 31 29 20 74  in (t1.e,c,11) t
1e40: 68 65 6e 20 62 20 65 6c 73 65 20 74 31 2e 63 20  hen b else t1.c 
1e50: 65 6e 64 2a 63 2d 74 31 2e 64 7d 0a 7d 20 7b 31  end*c-t1.d}.} {1
1e60: 31 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  1}.do_test rande
1e70: 78 70 72 2d 32 2e 39 20 7b 0a 20 20 64 62 20 65  xpr-2.9 {.  db e
1e80: 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
1e90: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
1ea0: 28 31 31 2d 20 2d 31 39 2d 66 2d 74 31 2e 62 2b  (11- -19-f-t1.b+
1eb0: 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  a) from t1 where
1ec0: 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
1ed0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
1ee0: 31 2d 7e 28 64 29 2d 63 2a 61 2a 7e 74 31 2e 61  1-~(d)-c*a*~t1.a
1ef0: 2d 74 31 2e 65 2d 74 31 2e 65 2b 63 6f 61 6c 65  -t1.e-t1.e+coale
1f00: 73 63 65 28 28 73 65 6c 65 63 74 20 63 6f 61 6c  sce((select coal
1f10: 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e  esce((select t1.
1f20: 63 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  c from t1 where 
1f30: 63 61 73 65 20 28 63 29 20 77 68 65 6e 20 64 20  case (c) when d 
1f40: 74 68 65 6e 20 65 20 65 6c 73 65 20 31 31 20 65  then e else 11 e
1f50: 6e 64 3d 74 31 2e 66 29 2c 74 31 2e 64 29 20 66  nd=t1.f),t1.d) f
1f60: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74 31  rom t1 where (t1
1f70: 2e 64 29 3e 62 29 2c 20 2d 31 31 29 20 7c 20 66  .d)>b), -11) | f
1f80: 2b 74 31 2e 66 20 6e 6f 74 20 69 6e 20 28 28 28  +t1.f not in (((
1f90: 63 29 29 2c 62 2c 31 33 29 29 29 2c 66 29 20 46  c)),b,13))),f) F
1fa0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63 61 73  ROM t1 WHERE cas
1fb0: 65 20 77 68 65 6e 20 31 39 2b 63 3e 3d 74 31 2e  e when 19+c>=t1.
1fc0: 61 20 74 68 65 6e 20 74 31 2e 63 20 77 68 65 6e  a then t1.c when
1fd0: 20 6e 6f 74 20 63 61 73 65 20 77 68 65 6e 20 6e   not case when n
1fe0: 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
1ff0: 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
2000: 20 2b 66 20 7c 20 62 2a 62 2a 31 39 2b 31 39 2a   +f | b*b*19+19*
2010: 31 33 2d 61 20 7c 20 63 61 73 65 20 77 68 65 6e  13-a | case when
2020: 20 74 31 2e 65 20 6e 6f 74 20 69 6e 20 28 74 31   t1.e not in (t1
2030: 2e 66 2c 74 31 2e 63 2c 62 29 20 74 68 65 6e 20  .f,t1.c,b) then 
2040: 31 31 20 77 68 65 6e 20 31 37 3e 74 31 2e 63 20  11 when 17>t1.c 
2050: 74 68 65 6e 20 61 20 65 6c 73 65 20 65 20 65 6e  then a else e en
2060: 64 3c 3e 65 29 20 74 68 65 6e 20 62 20 77 68 65  d<>e) then b whe
2070: 6e 20 31 37 3d 74 31 2e 65 20 74 68 65 6e 20 62  n 17=t1.e then b
2080: 20 65 6c 73 65 20 65 20 65 6e 64 3c 3e 74 31 2e   else e end<>t1.
2090: 62 20 74 68 65 6e 20 61 20 65 6c 73 65 20 64 20  b then a else d 
20a0: 65 6e 64 2d 74 31 2e 62 3d 28 31 33 29 7d 0a 7d  end-t1.b=(13)}.}
20b0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64   {}.do_test rand
20c0: 65 78 70 72 2d 32 2e 31 30 20 7b 0a 20 20 64 62  expr-2.10 {.  db
20d0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
20e0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
20f0: 61 78 28 31 31 2d 20 2d 31 39 2d 66 2d 74 31 2e  ax(11- -19-f-t1.
2100: 62 2b 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65  b+a) from t1 whe
2110: 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  re exists(select
2120: 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
2130: 20 31 31 2d 7e 28 64 29 2d 63 2a 61 2a 7e 74 31   11-~(d)-c*a*~t1
2140: 2e 61 2d 74 31 2e 65 2d 74 31 2e 65 2b 63 6f 61  .a-t1.e-t1.e+coa
2150: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 6f  lesce((select co
2160: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74  alesce((select t
2170: 31 2e 63 20 66 72 6f 6d 20 74 31 20 77 68 65 72  1.c from t1 wher
2180: 65 20 63 61 73 65 20 28 63 29 20 77 68 65 6e 20  e case (c) when 
2190: 64 20 74 68 65 6e 20 65 20 65 6c 73 65 20 31 31  d then e else 11
21a0: 20 65 6e 64 3d 74 31 2e 66 29 2c 74 31 2e 64 29   end=t1.f),t1.d)
21b0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
21c0: 74 31 2e 64 29 3e 62 29 2c 20 2d 31 31 29 20 7c  t1.d)>b), -11) |
21d0: 20 66 2b 74 31 2e 66 20 6e 6f 74 20 69 6e 20 28   f+t1.f not in (
21e0: 28 28 63 29 29 2c 62 2c 31 33 29 29 29 2c 66 29  ((c)),b,13))),f)
21f0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
2200: 4f 54 20 28 63 61 73 65 20 77 68 65 6e 20 31 39  OT (case when 19
2210: 2b 63 3e 3d 74 31 2e 61 20 74 68 65 6e 20 74 31  +c>=t1.a then t1
2220: 2e 63 20 77 68 65 6e 20 6e 6f 74 20 63 61 73 65  .c when not case
2230: 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73   when not exists
2240: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
2250: 31 20 77 68 65 72 65 20 2b 66 20 7c 20 62 2a 62  1 where +f | b*b
2260: 2a 31 39 2b 31 39 2a 31 33 2d 61 20 7c 20 63 61  *19+19*13-a | ca
2270: 73 65 20 77 68 65 6e 20 74 31 2e 65 20 6e 6f 74  se when t1.e not
2280: 20 69 6e 20 28 74 31 2e 66 2c 74 31 2e 63 2c 62   in (t1.f,t1.c,b
2290: 29 20 74 68 65 6e 20 31 31 20 77 68 65 6e 20 31  ) then 11 when 1
22a0: 37 3e 74 31 2e 63 20 74 68 65 6e 20 61 20 65 6c  7>t1.c then a el
22b0: 73 65 20 65 20 65 6e 64 3c 3e 65 29 20 74 68 65  se e end<>e) the
22c0: 6e 20 62 20 77 68 65 6e 20 31 37 3d 74 31 2e 65  n b when 17=t1.e
22d0: 20 74 68 65 6e 20 62 20 65 6c 73 65 20 65 20 65   then b else e e
22e0: 6e 64 3c 3e 74 31 2e 62 20 74 68 65 6e 20 61 20  nd<>t1.b then a 
22f0: 65 6c 73 65 20 64 20 65 6e 64 2d 74 31 2e 62 3d  else d end-t1.b=
2300: 28 31 33 29 29 7d 0a 7d 20 7b 2d 36 37 30 7d 0a  (13))}.} {-670}.
2310: 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
2320: 2d 32 2e 31 31 20 7b 0a 20 20 64 62 20 65 76 61  -2.11 {.  db eva
2330: 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73  l {SELECT coales
2340: 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31  ce((select max(1
2350: 31 2d 20 2d 31 39 2d 66 2d 74 31 2e 62 2b 61 29  1- -19-f-t1.b+a)
2360: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
2370: 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
2380: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 31 2d  rom t1 where 11-
2390: 7e 28 64 29 2d 63 2a 61 2a 7e 74 31 2e 61 2d 74  ~(d)-c*a*~t1.a-t
23a0: 31 2e 65 2d 74 31 2e 65 2b 63 6f 61 6c 65 73 63  1.e-t1.e+coalesc
23b0: 65 28 28 73 65 6c 65 63 74 20 63 6f 61 6c 65 73  e((select coales
23c0: 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 63 20  ce((select t1.c 
23d0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 61  from t1 where ca
23e0: 73 65 20 28 63 29 20 77 68 65 6e 20 64 20 74 68  se (c) when d th
23f0: 65 6e 20 65 20 65 6c 73 65 20 31 31 20 65 6e 64  en e else 11 end
2400: 3d 74 31 2e 66 29 2c 74 31 2e 64 29 20 66 72 6f  =t1.f),t1.d) fro
2410: 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e 64  m t1 where (t1.d
2420: 29 3e 62 29 2c 20 2d 31 31 29 20 26 20 66 2b 74  )>b), -11) & f+t
2430: 31 2e 66 20 6e 6f 74 20 69 6e 20 28 28 28 63 29  1.f not in (((c)
2440: 29 2c 62 2c 31 33 29 29 29 2c 66 29 20 46 52 4f  ),b,13))),f) FRO
2450: 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
2460: 63 61 73 65 20 77 68 65 6e 20 31 39 2b 63 3e 3d  case when 19+c>=
2470: 74 31 2e 61 20 74 68 65 6e 20 74 31 2e 63 20 77  t1.a then t1.c w
2480: 68 65 6e 20 6e 6f 74 20 63 61 73 65 20 77 68 65  hen not case whe
2490: 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  n not exists(sel
24a0: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
24b0: 65 72 65 20 2b 66 20 7c 20 62 2a 62 2a 31 39 2b  ere +f | b*b*19+
24c0: 31 39 2a 31 33 2d 61 20 7c 20 63 61 73 65 20 77  19*13-a | case w
24d0: 68 65 6e 20 74 31 2e 65 20 6e 6f 74 20 69 6e 20  hen t1.e not in 
24e0: 28 74 31 2e 66 2c 74 31 2e 63 2c 62 29 20 74 68  (t1.f,t1.c,b) th
24f0: 65 6e 20 31 31 20 77 68 65 6e 20 31 37 3e 74 31  en 11 when 17>t1
2500: 2e 63 20 74 68 65 6e 20 61 20 65 6c 73 65 20 65  .c then a else e
2510: 20 65 6e 64 3c 3e 65 29 20 74 68 65 6e 20 62 20   end<>e) then b 
2520: 77 68 65 6e 20 31 37 3d 74 31 2e 65 20 74 68 65  when 17=t1.e the
2530: 6e 20 62 20 65 6c 73 65 20 65 20 65 6e 64 3c 3e  n b else e end<>
2540: 74 31 2e 62 20 74 68 65 6e 20 61 20 65 6c 73 65  t1.b then a else
2550: 20 64 20 65 6e 64 2d 74 31 2e 62 3d 28 31 33 29   d end-t1.b=(13)
2560: 29 7d 0a 7d 20 7b 2d 36 37 30 7d 0a 64 6f 5f 74  )}.} {-670}.do_t
2570: 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
2580: 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  2 {.  db eval {S
2590: 45 4c 45 43 54 20 28 61 62 73 28 31 37 29 2f 61  ELECT (abs(17)/a
25a0: 62 73 28 7e 63 61 73 65 20 77 68 65 6e 20 28 61  bs(~case when (a
25b0: 62 73 28 74 31 2e 63 2a 20 2d 28 61 62 73 28 63  bs(t1.c* -(abs(c
25c0: 61 73 65 20 62 20 7c 20 63 6f 61 6c 65 73 63 65  ase b | coalesce
25d0: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 37 2a  ((select max(17*
25e0: 65 2a 63 61 73 65 20 77 68 65 6e 20 31 31 20 69  e*case when 11 i
25f0: 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 62 20 66  n (select t1.b f
2600: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
2610: 65 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31  ect t1.c from t1
2620: 29 20 74 68 65 6e 20 31 39 20 77 68 65 6e 20 64  ) then 19 when d
2630: 20 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20 74   between f and t
2640: 31 2e 65 20 74 68 65 6e 20 74 31 2e 65 20 65 6c  1.e then t1.e el
2650: 73 65 20 74 31 2e 65 20 65 6e 64 20 7c 20 62 29  se t1.e end | b)
2660: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
2670: 31 33 20 6e 6f 74 20 69 6e 20 28 31 31 2c 74 31  13 not in (11,t1
2680: 2e 64 2c 65 29 29 29 2c 65 29 2a 61 2a 64 20 77  .d,e))),e)*a*d w
2690: 68 65 6e 20 31 31 20 74 68 65 6e 20 65 20 65 6c  hen 11 then e el
26a0: 73 65 20 64 20 65 6e 64 2a 31 37 29 2f 61 62 73  se d end*17)/abs
26b0: 28 31 39 29 29 29 2f 61 62 73 28 74 31 2e 65 29  (19)))/abs(t1.e)
26c0: 29 3c 3e 65 20 74 68 65 6e 20 74 31 2e 62 20 65  )<>e then t1.b e
26d0: 6c 73 65 20 74 31 2e 64 20 65 6e 64 2a 28 31 39  lse t1.d end*(19
26e0: 29 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ))) FROM t1 WHER
26f0: 45 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  E exists(select 
2700: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
2710: 74 31 2e 64 2b 31 31 20 69 6e 20 28 63 61 73 65  t1.d+11 in (case
2720: 20 74 31 2e 62 2b 2b 63 20 77 68 65 6e 20 2b 61   t1.b++c when +a
2730: 2a 28 2b 63 61 73 65 20 28 73 65 6c 65 63 74 20  *(+case (select 
2740: 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31  count(*) from t1
2750: 29 20 77 68 65 6e 20 31 39 20 74 68 65 6e 20 74  ) when 19 then t
2760: 31 2e 63 20 65 6c 73 65 20 61 20 65 6e 64 29 20  1.c else a end) 
2770: 74 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 63  then t1.a else c
2780: 61 73 65 20 77 68 65 6e 20 28 74 31 2e 62 3e 20  ase when (t1.b> 
2790: 2d 64 29 20 61 6e 64 20 6e 6f 74 20 65 78 69 73  -d) and not exis
27a0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
27b0: 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78   t1 where not ex
27c0: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
27d0: 6f 6d 20 74 31 20 77 68 65 72 65 20 28 61 62 73  om t1 where (abs
27e0: 28 66 29 2f 61 62 73 28 20 2d 66 2a 61 2b 63 2a  (f)/abs( -f*a+c*
27f0: 31 31 29 29 3c 3e 61 29 29 20 74 68 65 6e 20 31  11))<>a)) then 1
2800: 33 20 65 6c 73 65 20 31 39 20 65 6e 64 20 65 6e  3 else 19 end en
2810: 64 2c 31 37 2c 61 29 29 20 6f 72 20 63 3d 74 31  d,17,a)) or c=t1
2820: 2e 64 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  .d}.} {}.do_test
2830: 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 33 20 7b   randexpr-2.13 {
2840: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
2850: 43 54 20 28 61 62 73 28 31 37 29 2f 61 62 73 28  CT (abs(17)/abs(
2860: 7e 63 61 73 65 20 77 68 65 6e 20 28 61 62 73 28  ~case when (abs(
2870: 74 31 2e 63 2a 20 2d 28 61 62 73 28 63 61 73 65  t1.c* -(abs(case
2880: 20 62 20 7c 20 63 6f 61 6c 65 73 63 65 28 28 73   b | coalesce((s
2890: 65 6c 65 63 74 20 6d 61 78 28 31 37 2a 65 2a 63  elect max(17*e*c
28a0: 61 73 65 20 77 68 65 6e 20 31 31 20 69 6e 20 28  ase when 11 in (
28b0: 73 65 6c 65 63 74 20 74 31 2e 62 20 66 72 6f 6d  select t1.b from
28c0: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
28d0: 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 29 20 74   t1.c from t1) t
28e0: 68 65 6e 20 31 39 20 77 68 65 6e 20 64 20 62 65  hen 19 when d be
28f0: 74 77 65 65 6e 20 66 20 61 6e 64 20 74 31 2e 65  tween f and t1.e
2900: 20 74 68 65 6e 20 74 31 2e 65 20 65 6c 73 65 20   then t1.e else 
2910: 74 31 2e 65 20 65 6e 64 20 7c 20 62 29 20 66 72  t1.e end | b) fr
2920: 6f 6d 20 74 31 20 77 68 65 72 65 20 28 31 33 20  om t1 where (13 
2930: 6e 6f 74 20 69 6e 20 28 31 31 2c 74 31 2e 64 2c  not in (11,t1.d,
2940: 65 29 29 29 2c 65 29 2a 61 2a 64 20 77 68 65 6e  e))),e)*a*d when
2950: 20 31 31 20 74 68 65 6e 20 65 20 65 6c 73 65 20   11 then e else 
2960: 64 20 65 6e 64 2a 31 37 29 2f 61 62 73 28 31 39  d end*17)/abs(19
2970: 29 29 29 2f 61 62 73 28 74 31 2e 65 29 29 3c 3e  )))/abs(t1.e))<>
2980: 65 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  e then t1.b else
2990: 20 74 31 2e 64 20 65 6e 64 2a 28 31 39 29 29 29   t1.d end*(19)))
29a0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
29b0: 4f 54 20 28 65 78 69 73 74 73 28 73 65 6c 65 63  OT (exists(selec
29c0: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
29d0: 65 20 74 31 2e 64 2b 31 31 20 69 6e 20 28 63 61  e t1.d+11 in (ca
29e0: 73 65 20 74 31 2e 62 2b 2b 63 20 77 68 65 6e 20  se t1.b++c when 
29f0: 2b 61 2a 28 2b 63 61 73 65 20 28 73 65 6c 65 63  +a*(+case (selec
2a00: 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20  t count(*) from 
2a10: 74 31 29 20 77 68 65 6e 20 31 39 20 74 68 65 6e  t1) when 19 then
2a20: 20 74 31 2e 63 20 65 6c 73 65 20 61 20 65 6e 64   t1.c else a end
2a30: 29 20 74 68 65 6e 20 74 31 2e 61 20 65 6c 73 65  ) then t1.a else
2a40: 20 63 61 73 65 20 77 68 65 6e 20 28 74 31 2e 62   case when (t1.b
2a50: 3e 20 2d 64 29 20 61 6e 64 20 6e 6f 74 20 65 78  > -d) and not ex
2a60: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
2a70: 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
2a80: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
2a90: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 61  from t1 where (a
2aa0: 62 73 28 66 29 2f 61 62 73 28 20 2d 66 2a 61 2b  bs(f)/abs( -f*a+
2ab0: 63 2a 31 31 29 29 3c 3e 61 29 29 20 74 68 65 6e  c*11))<>a)) then
2ac0: 20 31 33 20 65 6c 73 65 20 31 39 20 65 6e 64 20   13 else 19 end 
2ad0: 65 6e 64 2c 31 37 2c 61 29 29 20 6f 72 20 63 3d  end,17,a)) or c=
2ae0: 74 31 2e 64 29 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f  t1.d)}.} {0}.do_
2af0: 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
2b00: 31 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  14 {.  db eval {
2b10: 53 45 4c 45 43 54 20 28 61 62 73 28 31 37 29 2f  SELECT (abs(17)/
2b20: 61 62 73 28 7e 63 61 73 65 20 77 68 65 6e 20 28  abs(~case when (
2b30: 61 62 73 28 74 31 2e 63 2a 20 2d 28 61 62 73 28  abs(t1.c* -(abs(
2b40: 63 61 73 65 20 62 20 26 20 63 6f 61 6c 65 73 63  case b & coalesc
2b50: 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 37  e((select max(17
2b60: 2a 65 2a 63 61 73 65 20 77 68 65 6e 20 31 31 20  *e*case when 11 
2b70: 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 62 20  in (select t1.b 
2b80: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
2b90: 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74  lect t1.c from t
2ba0: 31 29 20 74 68 65 6e 20 31 39 20 77 68 65 6e 20  1) then 19 when 
2bb0: 64 20 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20  d between f and 
2bc0: 74 31 2e 65 20 74 68 65 6e 20 74 31 2e 65 20 65  t1.e then t1.e e
2bd0: 6c 73 65 20 74 31 2e 65 20 65 6e 64 20 26 20 62  lse t1.e end & b
2be0: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
2bf0: 28 31 33 20 6e 6f 74 20 69 6e 20 28 31 31 2c 74  (13 not in (11,t
2c00: 31 2e 64 2c 65 29 29 29 2c 65 29 2a 61 2a 64 20  1.d,e))),e)*a*d 
2c10: 77 68 65 6e 20 31 31 20 74 68 65 6e 20 65 20 65  when 11 then e e
2c20: 6c 73 65 20 64 20 65 6e 64 2a 31 37 29 2f 61 62  lse d end*17)/ab
2c30: 73 28 31 39 29 29 29 2f 61 62 73 28 74 31 2e 65  s(19)))/abs(t1.e
2c40: 29 29 3c 3e 65 20 74 68 65 6e 20 74 31 2e 62 20  ))<>e then t1.b 
2c50: 65 6c 73 65 20 74 31 2e 64 20 65 6e 64 2a 28 31  else t1.d end*(1
2c60: 39 29 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45  9))) FROM t1 WHE
2c70: 52 45 20 4e 4f 54 20 28 65 78 69 73 74 73 28 73  RE NOT (exists(s
2c80: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
2c90: 77 68 65 72 65 20 74 31 2e 64 2b 31 31 20 69 6e  where t1.d+11 in
2ca0: 20 28 63 61 73 65 20 74 31 2e 62 2b 2b 63 20 77   (case t1.b++c w
2cb0: 68 65 6e 20 2b 61 2a 28 2b 63 61 73 65 20 28 73  hen +a*(+case (s
2cc0: 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66  elect count(*) f
2cd0: 72 6f 6d 20 74 31 29 20 77 68 65 6e 20 31 39 20  rom t1) when 19 
2ce0: 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 61  then t1.c else a
2cf0: 20 65 6e 64 29 20 74 68 65 6e 20 74 31 2e 61 20   end) then t1.a 
2d00: 65 6c 73 65 20 63 61 73 65 20 77 68 65 6e 20 28  else case when (
2d10: 74 31 2e 62 3e 20 2d 64 29 20 61 6e 64 20 6e 6f  t1.b> -d) and no
2d20: 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
2d30: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
2d40: 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
2d50: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
2d60: 65 20 28 61 62 73 28 66 29 2f 61 62 73 28 20 2d  e (abs(f)/abs( -
2d70: 66 2a 61 2b 63 2a 31 31 29 29 3c 3e 61 29 29 20  f*a+c*11))<>a)) 
2d80: 74 68 65 6e 20 31 33 20 65 6c 73 65 20 31 39 20  then 13 else 19 
2d90: 65 6e 64 20 65 6e 64 2c 31 37 2c 61 29 29 20 6f  end end,17,a)) o
2da0: 72 20 63 3d 74 31 2e 64 29 7d 0a 7d 20 7b 30 7d  r c=t1.d)}.} {0}
2db0: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
2dc0: 72 2d 32 2e 31 35 20 7b 0a 20 20 64 62 20 65 76  r-2.15 {.  db ev
2dd0: 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65  al {SELECT coale
2de0: 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 63  sce((select t1.c
2df0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
2e00: 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 39 20   not between 19 
2e10: 61 6e 64 20 62 2a 64 20 6f 72 20 6e 6f 74 20 65  and b*d or not e
2e20: 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
2e30: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
2e40: 61 20 6e 6f 74 20 69 6e 20 28 63 61 73 65 20 77  a not in (case w
2e50: 68 65 6e 20 64 20 6e 6f 74 20 62 65 74 77 65 65  hen d not betwee
2e60: 6e 20 62 2b 7e 28 74 31 2e 64 29 2d 63 61 73 65  n b+~(t1.d)-case
2e70: 20 77 68 65 6e 20 28 28 74 31 2e 66 3c 3d 74 31   when ((t1.f<=t1
2e80: 2e 65 29 20 61 6e 64 20 20 2d 31 31 3c 66 29 20  .e) and  -11<f) 
2e90: 74 68 65 6e 20 65 2a 28 61 62 73 28 74 31 2e 61  then e*(abs(t1.a
2ea0: 29 2f 61 62 73 28 28 74 31 2e 63 29 29 29 20 65  )/abs((t1.c))) e
2eb0: 6c 73 65 20 63 20 65 6e 64 2b 62 20 61 6e 64 20  lse c end+b and 
2ec0: 74 31 2e 65 20 74 68 65 6e 20 65 20 77 68 65 6e  t1.e then e when
2ed0: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
2ee0: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
2ef0: 72 65 20 31 31 3c 31 37 29 20 74 68 65 6e 20 61  re 11<17) then a
2f00: 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 2c 28   else t1.f end,(
2f10: 63 29 2c 63 29 29 29 2c 74 31 2e 64 29 20 46 52  c),c))),t1.d) FR
2f20: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e 63  OM t1 WHERE t1.c
2f30: 2a 28 28 73 65 6c 65 63 74 20 20 2d 63 6f 75 6e  *((select  -coun
2f40: 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 61 29  t(distinct t1.a)
2f50: 20 7c 20 2b 20 2d 63 6f 75 6e 74 28 64 69 73 74   | + -count(dist
2f60: 69 6e 63 74 20 74 31 2e 62 29 2a 63 61 73 74 28  inct t1.b)*cast(
2f70: 61 76 67 28 61 29 20 41 53 20 69 6e 74 65 67 65  avg(a) AS intege
2f80: 72 29 2d 63 61 73 74 28 61 76 67 28 31 33 29 20  r)-cast(avg(13) 
2f90: 41 53 20 69 6e 74 65 67 65 72 29 20 7c 20 7e 61  AS integer) | ~a
2fa0: 62 73 28 6d 69 6e 28 31 37 29 29 20 7c 20 20 2d  bs(min(17)) |  -
2fb0: 6d 69 6e 28 63 29 2a 28 63 6f 75 6e 74 28 64 69  min(c)*(count(di
2fc0: 73 74 69 6e 63 74 20 74 31 2e 65 29 29 20 66 72  stinct t1.e)) fr
2fd0: 6f 6d 20 74 31 29 2d 20 2d 28 61 62 73 28 2b 74  om t1)- -(abs(+t
2fe0: 31 2e 62 2d 31 33 29 2f 61 62 73 28 31 31 29 29  1.b-13)/abs(11))
2ff0: 29 2b 74 31 2e 66 2d 63 6f 61 6c 65 73 63 65 28  )+t1.f-coalesce(
3000: 28 73 65 6c 65 63 74 20 6d 61 78 28 66 29 20 66  (select max(f) f
3010: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
3020: 64 20 62 65 74 77 65 65 6e 20 63 20 61 6e 64 20  d between c and 
3030: 74 31 2e 61 29 2c 31 37 29 2a 61 20 69 6e 20 28  t1.a),17)*a in (
3040: 73 65 6c 65 63 74 20 31 37 20 66 72 6f 6d 20 74  select 17 from t
3050: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20  1 union select  
3060: 2d 31 37 20 66 72 6f 6d 20 74 31 29 7d 0a 7d 20  -17 from t1)}.} 
3070: 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
3080: 78 70 72 2d 32 2e 31 36 20 7b 0a 20 20 64 62 20  xpr-2.16 {.  db 
3090: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61  eval {SELECT coa
30a0: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31  lesce((select t1
30b0: 2e 63 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  .c from t1 where
30c0: 20 65 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31   e not between 1
30d0: 39 20 61 6e 64 20 62 2a 64 20 6f 72 20 6e 6f 74  9 and b*d or not
30e0: 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
30f0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
3100: 31 2e 61 20 6e 6f 74 20 69 6e 20 28 63 61 73 65  1.a not in (case
3110: 20 77 68 65 6e 20 64 20 6e 6f 74 20 62 65 74 77   when d not betw
3120: 65 65 6e 20 62 2b 7e 28 74 31 2e 64 29 2d 63 61  een b+~(t1.d)-ca
3130: 73 65 20 77 68 65 6e 20 28 28 74 31 2e 66 3c 3d  se when ((t1.f<=
3140: 74 31 2e 65 29 20 61 6e 64 20 20 2d 31 31 3c 66  t1.e) and  -11<f
3150: 29 20 74 68 65 6e 20 65 2a 28 61 62 73 28 74 31  ) then e*(abs(t1
3160: 2e 61 29 2f 61 62 73 28 28 74 31 2e 63 29 29 29  .a)/abs((t1.c)))
3170: 20 65 6c 73 65 20 63 20 65 6e 64 2b 62 20 61 6e   else c end+b an
3180: 64 20 74 31 2e 65 20 74 68 65 6e 20 65 20 77 68  d t1.e then e wh
3190: 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  en not exists(se
31a0: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
31b0: 68 65 72 65 20 31 31 3c 31 37 29 20 74 68 65 6e  here 11<17) then
31c0: 20 61 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64   a else t1.f end
31d0: 2c 28 63 29 2c 63 29 29 29 2c 74 31 2e 64 29 20  ,(c),c))),t1.d) 
31e0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
31f0: 54 20 28 74 31 2e 63 2a 28 28 73 65 6c 65 63 74  T (t1.c*((select
3200: 20 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63    -count(distinc
3210: 74 20 74 31 2e 61 29 20 7c 20 2b 20 2d 63 6f 75  t t1.a) | + -cou
3220: 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 62  nt(distinct t1.b
3230: 29 2a 63 61 73 74 28 61 76 67 28 61 29 20 41 53  )*cast(avg(a) AS
3240: 20 69 6e 74 65 67 65 72 29 2d 63 61 73 74 28 61   integer)-cast(a
3250: 76 67 28 31 33 29 20 41 53 20 69 6e 74 65 67 65  vg(13) AS intege
3260: 72 29 20 7c 20 7e 61 62 73 28 6d 69 6e 28 31 37  r) | ~abs(min(17
3270: 29 29 20 7c 20 20 2d 6d 69 6e 28 63 29 2a 28 63  )) |  -min(c)*(c
3280: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
3290: 2e 65 29 29 20 66 72 6f 6d 20 74 31 29 2d 20 2d  .e)) from t1)- -
32a0: 28 61 62 73 28 2b 74 31 2e 62 2d 31 33 29 2f 61  (abs(+t1.b-13)/a
32b0: 62 73 28 31 31 29 29 29 2b 74 31 2e 66 2d 63 6f  bs(11)))+t1.f-co
32c0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
32d0: 61 78 28 66 29 20 66 72 6f 6d 20 74 31 20 77 68  ax(f) from t1 wh
32e0: 65 72 65 20 74 31 2e 64 20 62 65 74 77 65 65 6e  ere t1.d between
32f0: 20 63 20 61 6e 64 20 74 31 2e 61 29 2c 31 37 29   c and t1.a),17)
3300: 2a 61 20 69 6e 20 28 73 65 6c 65 63 74 20 31 37  *a in (select 17
3310: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
3320: 65 6c 65 63 74 20 20 2d 31 37 20 66 72 6f 6d 20  elect  -17 from 
3330: 74 31 29 29 7d 0a 7d 20 7b 34 30 30 7d 0a 64 6f  t1))}.} {400}.do
3340: 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
3350: 2e 31 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .17 {.  db eval 
3360: 7b 53 45 4c 45 43 54 20 2b 74 31 2e 66 2a 7e 74  {SELECT +t1.f*~t
3370: 31 2e 63 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  1.c-coalesce((se
3380: 6c 65 63 74 20 6d 61 78 28 7e 62 29 20 66 72 6f  lect max(~b) fro
3390: 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 65 2b  m t1 where t1.e+
33a0: 31 31 2d 28 61 62 73 28 65 2b 63 61 73 65 20 64  11-(abs(e+case d
33b0: 20 77 68 65 6e 20 62 20 74 68 65 6e 20 63 61 73   when b then cas
33c0: 65 20 77 68 65 6e 20 66 3d 28 31 33 29 20 74 68  e when f=(13) th
33d0: 65 6e 20 28 61 62 73 28 31 33 2b 62 2a 74 31 2e  en (abs(13+b*t1.
33e0: 66 29 2f 61 62 73 28 74 31 2e 63 29 29 20 77 68  f)/abs(t1.c)) wh
33f0: 65 6e 20 64 3c 3d 74 31 2e 65 20 74 68 65 6e 20  en d<=t1.e then 
3400: 31 33 20 65 6c 73 65 20 61 20 65 6e 64 20 65 6c  13 else a end el
3410: 73 65 20 31 39 20 65 6e 64 2a 31 33 2b 66 29 2f  se 19 end*13+f)/
3420: 61 62 73 28 28 61 29 29 29 2a 31 37 3c 3d 63 29  abs((a)))*17<=c)
3430: 2c 62 29 2d 31 33 2a 63 20 46 52 4f 4d 20 74 31  ,b)-13*c FROM t1
3440: 20 57 48 45 52 45 20 6e 6f 74 20 65 78 69 73 74   WHERE not exist
3450: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
3460: 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63  t1 where coalesc
3470: 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61  e((select max(ca
3480: 73 65 20 77 68 65 6e 20 63 61 73 65 20 77 68 65  se when case whe
3490: 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  n exists(select 
34a0: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
34b0: 7e 74 31 2e 64 2b 64 20 69 6e 20 28 73 65 6c 65  ~t1.d+d in (sele
34c0: 63 74 20 7e 63 6f 75 6e 74 28 64 69 73 74 69 6e  ct ~count(distin
34d0: 63 74 20 31 33 29 20 66 72 6f 6d 20 74 31 20 75  ct 13) from t1 u
34e0: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
34f0: 74 28 2a 29 2b 7e 61 62 73 28 2b 28 7e 6d 69 6e  t(*)+~abs(+(~min
3500: 28 74 31 2e 61 29 29 29 20 66 72 6f 6d 20 74 31  (t1.a))) from t1
3510: 29 29 20 74 68 65 6e 20 74 31 2e 65 2b 74 31 2e  )) then t1.e+t1.
3520: 63 20 65 6c 73 65 20 20 2d 28 61 62 73 28 74 31  c else  -(abs(t1
3530: 2e 64 29 2f 61 62 73 28 63 6f 61 6c 65 73 63 65  .d)/abs(coalesce
3540: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
3550: 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  d) from t1 where
3560: 20 64 20 6e 6f 74 20 69 6e 20 28 31 37 2c 66 2c   d not in (17,f,
3570: 66 29 29 2c 31 31 29 2a 74 31 2e 63 29 29 20 65  f)),11)*t1.c)) e
3580: 6e 64 3c 3d 28 31 31 29 20 74 68 65 6e 20 31 39  nd<=(11) then 19
3590: 20 65 6c 73 65 20 28 74 31 2e 65 29 20 65 6e 64   else (t1.e) end
35a0: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
35b0: 28 31 33 3d 31 31 29 29 2c 63 29 20 6e 6f 74 20  (13=11)),c) not 
35c0: 62 65 74 77 65 65 6e 20 31 33 20 61 6e 64 20 31  between 13 and 1
35d0: 39 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  9)}.} {}.do_test
35e0: 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 38 20 7b   randexpr-2.18 {
35f0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
3600: 43 54 20 2b 74 31 2e 66 2a 7e 74 31 2e 63 2d 63  CT +t1.f*~t1.c-c
3610: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
3620: 6d 61 78 28 7e 62 29 20 66 72 6f 6d 20 74 31 20  max(~b) from t1 
3630: 77 68 65 72 65 20 74 31 2e 65 2b 31 31 2d 28 61  where t1.e+11-(a
3640: 62 73 28 65 2b 63 61 73 65 20 64 20 77 68 65 6e  bs(e+case d when
3650: 20 62 20 74 68 65 6e 20 63 61 73 65 20 77 68 65   b then case whe
3660: 6e 20 66 3d 28 31 33 29 20 74 68 65 6e 20 28 61  n f=(13) then (a
3670: 62 73 28 31 33 2b 62 2a 74 31 2e 66 29 2f 61 62  bs(13+b*t1.f)/ab
3680: 73 28 74 31 2e 63 29 29 20 77 68 65 6e 20 64 3c  s(t1.c)) when d<
3690: 3d 74 31 2e 65 20 74 68 65 6e 20 31 33 20 65 6c  =t1.e then 13 el
36a0: 73 65 20 61 20 65 6e 64 20 65 6c 73 65 20 31 39  se a end else 19
36b0: 20 65 6e 64 2a 31 33 2b 66 29 2f 61 62 73 28 28   end*13+f)/abs((
36c0: 61 29 29 29 2a 31 37 3c 3d 63 29 2c 62 29 2d 31  a)))*17<=c),b)-1
36d0: 33 2a 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52  3*c FROM t1 WHER
36e0: 45 20 4e 4f 54 20 28 6e 6f 74 20 65 78 69 73 74  E NOT (not exist
36f0: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
3700: 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63  t1 where coalesc
3710: 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61  e((select max(ca
3720: 73 65 20 77 68 65 6e 20 63 61 73 65 20 77 68 65  se when case whe
3730: 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  n exists(select 
3740: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
3750: 7e 74 31 2e 64 2b 64 20 69 6e 20 28 73 65 6c 65  ~t1.d+d in (sele
3760: 63 74 20 7e 63 6f 75 6e 74 28 64 69 73 74 69 6e  ct ~count(distin
3770: 63 74 20 31 33 29 20 66 72 6f 6d 20 74 31 20 75  ct 13) from t1 u
3780: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
3790: 74 28 2a 29 2b 7e 61 62 73 28 2b 28 7e 6d 69 6e  t(*)+~abs(+(~min
37a0: 28 74 31 2e 61 29 29 29 20 66 72 6f 6d 20 74 31  (t1.a))) from t1
37b0: 29 29 20 74 68 65 6e 20 74 31 2e 65 2b 74 31 2e  )) then t1.e+t1.
37c0: 63 20 65 6c 73 65 20 20 2d 28 61 62 73 28 74 31  c else  -(abs(t1
37d0: 2e 64 29 2f 61 62 73 28 63 6f 61 6c 65 73 63 65  .d)/abs(coalesce
37e0: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
37f0: 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  d) from t1 where
3800: 20 64 20 6e 6f 74 20 69 6e 20 28 31 37 2c 66 2c   d not in (17,f,
3810: 66 29 29 2c 31 31 29 2a 74 31 2e 63 29 29 20 65  f)),11)*t1.c)) e
3820: 6e 64 3c 3d 28 31 31 29 20 74 68 65 6e 20 31 39  nd<=(11) then 19
3830: 20 65 6c 73 65 20 28 74 31 2e 65 29 20 65 6e 64   else (t1.e) end
3840: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
3850: 28 31 33 3d 31 31 29 29 2c 63 29 20 6e 6f 74 20  (13=11)),c) not 
3860: 62 65 74 77 65 65 6e 20 31 33 20 61 6e 64 20 31  between 13 and 1
3870: 39 29 29 7d 0a 7d 20 7b 2d 31 38 34 32 39 39 7d  9))}.} {-184299}
3880: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
3890: 72 2d 32 2e 31 39 20 7b 0a 20 20 64 62 20 65 76  r-2.19 {.  db ev
38a0: 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
38b0: 77 68 65 6e 20 28 61 20 6e 6f 74 20 69 6e 20 28  when (a not in (
38c0: 74 31 2e 65 2c 28 2b 63 61 73 65 20 77 68 65 6e  t1.e,(+case when
38d0: 20 74 31 2e 62 3c 3d 28 61 62 73 28 63 6f 61 6c   t1.b<=(abs(coal
38e0: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
38f0: 28 61 2b 28 73 65 6c 65 63 74 20 63 6f 75 6e 74  (a+(select count
3900: 28 64 69 73 74 69 6e 63 74 20 28 73 65 6c 65 63  (distinct (selec
3910: 74 20 6d 61 78 28 28 28 61 62 73 28 20 2d 74 31  t max(((abs( -t1
3920: 2e 64 29 2f 61 62 73 28 61 29 29 29 20 7c 20 74  .d)/abs(a))) | t
3930: 31 2e 63 29 2a 6d 69 6e 28 74 31 2e 65 29 20 66  1.c)*min(t1.e) f
3940: 72 6f 6d 20 74 31 29 29 20 66 72 6f 6d 20 74 31  rom t1)) from t1
3950: 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
3960: 20 2b 74 31 2e 66 3e 65 29 2c 31 37 29 29 2f 61   +t1.f>e),17))/a
3970: 62 73 28 20 2d 20 2d 31 37 29 29 20 74 68 65 6e  bs( - -17)) then
3980: 20 31 37 20 65 6c 73 65 20 74 31 2e 64 20 65 6e   17 else t1.d en
3990: 64 2d 74 31 2e 62 2d 64 29 20 7c 20 20 2d 66 2c  d-t1.b-d) |  -f,
39a0: 63 29 29 20 74 68 65 6e 20 31 31 2d 74 31 2e 66  c)) then 11-t1.f
39b0: 20 77 68 65 6e 20 28 20 2d 31 33 3c 65 29 20 74   when ( -13<e) t
39c0: 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20 61 20  hen t1.d else a 
39d0: 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  end FROM t1 WHER
39e0: 45 20 74 31 2e 63 20 6e 6f 74 20 62 65 74 77 65  E t1.c not betwe
39f0: 65 6e 20 7e 63 61 73 65 20 77 68 65 6e 20 63 61  en ~case when ca
3a00: 73 65 20 77 68 65 6e 20 28 73 65 6c 65 63 74 20  se when (select 
3a10: 20 2d 20 2d 61 62 73 28 20 2d 63 61 73 65 20 20   - -abs( -case  
3a20: 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
3a30: 63 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 2a 29  c) when count(*)
3a40: 20 74 68 65 6e 20 6d 61 78 28 63 29 20 65 6c 73   then max(c) els
3a50: 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  e count(distinct
3a60: 20 31 33 29 20 65 6e 64 29 20 7c 20 6d 69 6e 28   13) end) | min(
3a70: 63 29 20 66 72 6f 6d 20 74 31 29 20 69 6e 20 28  c) from t1) in (
3a80: 74 31 2e 66 2c 62 2b 31 31 2c 31 39 2a 74 31 2e  t1.f,b+11,19*t1.
3a90: 64 29 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20  d) then 19 else 
3aa0: 61 20 65 6e 64 2a 74 31 2e 62 3e 31 33 20 6f 72  a end*t1.b>13 or
3ab0: 20 74 31 2e 65 20 69 6e 20 28 73 65 6c 65 63 74   t1.e in (select
3ac0: 20 28 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d   (count(*)) from
3ad0: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
3ae0: 20 63 61 73 74 28 61 76 67 28 74 31 2e 65 29 20   cast(avg(t1.e) 
3af0: 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
3b00: 20 74 31 29 20 6f 72 20 31 39 3e 31 37 20 61 6e   t1) or 19>17 an
3b10: 64 20 31 33 20 6e 6f 74 20 62 65 74 77 65 65 6e  d 13 not between
3b20: 20 31 39 20 61 6e 64 20 31 37 20 74 68 65 6e 20   19 and 17 then 
3b30: 28 74 31 2e 66 29 20 77 68 65 6e 20 6e 6f 74 20  (t1.f) when not 
3b40: 74 31 2e 62 3c 3e 74 31 2e 66 20 6f 72 20 64 3c  t1.b<>t1.f or d<
3b50: 3e 62 20 74 68 65 6e 20 74 31 2e 65 20 65 6c 73  >b then t1.e els
3b60: 65 20 61 20 65 6e 64 20 61 6e 64 20 63 7d 0a 7d  e a end and c}.}
3b70: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64   {}.do_test rand
3b80: 65 78 70 72 2d 32 2e 32 30 20 7b 0a 20 20 64 62  expr-2.20 {.  db
3b90: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61   eval {SELECT ca
3ba0: 73 65 20 77 68 65 6e 20 28 61 20 6e 6f 74 20 69  se when (a not i
3bb0: 6e 20 28 74 31 2e 65 2c 28 2b 63 61 73 65 20 77  n (t1.e,(+case w
3bc0: 68 65 6e 20 74 31 2e 62 3c 3d 28 61 62 73 28 63  hen t1.b<=(abs(c
3bd0: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
3be0: 6d 61 78 28 61 2b 28 73 65 6c 65 63 74 20 63 6f  max(a+(select co
3bf0: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 28 73 65  unt(distinct (se
3c00: 6c 65 63 74 20 6d 61 78 28 28 28 61 62 73 28 20  lect max(((abs( 
3c10: 2d 74 31 2e 64 29 2f 61 62 73 28 61 29 29 29 20  -t1.d)/abs(a))) 
3c20: 7c 20 74 31 2e 63 29 2a 6d 69 6e 28 74 31 2e 65  | t1.c)*min(t1.e
3c30: 29 20 66 72 6f 6d 20 74 31 29 29 20 66 72 6f 6d  ) from t1)) from
3c40: 20 74 31 29 29 20 66 72 6f 6d 20 74 31 20 77 68   t1)) from t1 wh
3c50: 65 72 65 20 2b 74 31 2e 66 3e 65 29 2c 31 37 29  ere +t1.f>e),17)
3c60: 29 2f 61 62 73 28 20 2d 20 2d 31 37 29 29 20 74  )/abs( - -17)) t
3c70: 68 65 6e 20 31 37 20 65 6c 73 65 20 74 31 2e 64  hen 17 else t1.d
3c80: 20 65 6e 64 2d 74 31 2e 62 2d 64 29 20 7c 20 20   end-t1.b-d) |  
3c90: 2d 66 2c 63 29 29 20 74 68 65 6e 20 31 31 2d 74  -f,c)) then 11-t
3ca0: 31 2e 66 20 77 68 65 6e 20 28 20 2d 31 33 3c 65  1.f when ( -13<e
3cb0: 29 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65  ) then t1.d else
3cc0: 20 61 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57   a end FROM t1 W
3cd0: 48 45 52 45 20 4e 4f 54 20 28 74 31 2e 63 20 6e  HERE NOT (t1.c n
3ce0: 6f 74 20 62 65 74 77 65 65 6e 20 7e 63 61 73 65  ot between ~case
3cf0: 20 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20   when case when 
3d00: 28 73 65 6c 65 63 74 20 20 2d 20 2d 61 62 73 28  (select  - -abs(
3d10: 20 2d 63 61 73 65 20 20 2d 63 6f 75 6e 74 28 64   -case  -count(d
3d20: 69 73 74 69 6e 63 74 20 63 29 20 77 68 65 6e 20  istinct c) when 
3d30: 63 6f 75 6e 74 28 2a 29 20 74 68 65 6e 20 6d 61  count(*) then ma
3d40: 78 28 63 29 20 65 6c 73 65 20 63 6f 75 6e 74 28  x(c) else count(
3d50: 64 69 73 74 69 6e 63 74 20 31 33 29 20 65 6e 64  distinct 13) end
3d60: 29 20 7c 20 6d 69 6e 28 63 29 20 66 72 6f 6d 20  ) | min(c) from 
3d70: 74 31 29 20 69 6e 20 28 74 31 2e 66 2c 62 2b 31  t1) in (t1.f,b+1
3d80: 31 2c 31 39 2a 74 31 2e 64 29 20 74 68 65 6e 20  1,19*t1.d) then 
3d90: 31 39 20 65 6c 73 65 20 61 20 65 6e 64 2a 74 31  19 else a end*t1
3da0: 2e 62 3e 31 33 20 6f 72 20 74 31 2e 65 20 69 6e  .b>13 or t1.e in
3db0: 20 28 73 65 6c 65 63 74 20 28 63 6f 75 6e 74 28   (select (count(
3dc0: 2a 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  *)) from t1 unio
3dd0: 6e 20 73 65 6c 65 63 74 20 63 61 73 74 28 61 76  n select cast(av
3de0: 67 28 74 31 2e 65 29 20 41 53 20 69 6e 74 65 67  g(t1.e) AS integ
3df0: 65 72 29 20 66 72 6f 6d 20 74 31 29 20 6f 72 20  er) from t1) or 
3e00: 31 39 3e 31 37 20 61 6e 64 20 31 33 20 6e 6f 74  19>17 and 13 not
3e10: 20 62 65 74 77 65 65 6e 20 31 39 20 61 6e 64 20   between 19 and 
3e20: 31 37 20 74 68 65 6e 20 28 74 31 2e 66 29 20 77  17 then (t1.f) w
3e30: 68 65 6e 20 6e 6f 74 20 74 31 2e 62 3c 3e 74 31  hen not t1.b<>t1
3e40: 2e 66 20 6f 72 20 64 3c 3e 62 20 74 68 65 6e 20  .f or d<>b then 
3e50: 74 31 2e 65 20 65 6c 73 65 20 61 20 65 6e 64 20  t1.e else a end 
3e60: 61 6e 64 20 63 29 7d 0a 7d 20 7b 2d 35 38 39 7d  and c)}.} {-589}
3e70: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
3e80: 72 2d 32 2e 32 31 20 7b 0a 20 20 64 62 20 65 76  r-2.21 {.  db ev
3e90: 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
3ea0: 77 68 65 6e 20 28 61 20 6e 6f 74 20 69 6e 20 28  when (a not in (
3eb0: 74 31 2e 65 2c 28 2b 63 61 73 65 20 77 68 65 6e  t1.e,(+case when
3ec0: 20 74 31 2e 62 3c 3d 28 61 62 73 28 63 6f 61 6c   t1.b<=(abs(coal
3ed0: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
3ee0: 28 61 2b 28 73 65 6c 65 63 74 20 63 6f 75 6e 74  (a+(select count
3ef0: 28 64 69 73 74 69 6e 63 74 20 28 73 65 6c 65 63  (distinct (selec
3f00: 74 20 6d 61 78 28 28 28 61 62 73 28 20 2d 74 31  t max(((abs( -t1
3f10: 2e 64 29 2f 61 62 73 28 61 29 29 29 20 26 20 74  .d)/abs(a))) & t
3f20: 31 2e 63 29 2a 6d 69 6e 28 74 31 2e 65 29 20 66  1.c)*min(t1.e) f
3f30: 72 6f 6d 20 74 31 29 29 20 66 72 6f 6d 20 74 31  rom t1)) from t1
3f40: 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
3f50: 20 2b 74 31 2e 66 3e 65 29 2c 31 37 29 29 2f 61   +t1.f>e),17))/a
3f60: 62 73 28 20 2d 20 2d 31 37 29 29 20 74 68 65 6e  bs( - -17)) then
3f70: 20 31 37 20 65 6c 73 65 20 74 31 2e 64 20 65 6e   17 else t1.d en
3f80: 64 2d 74 31 2e 62 2d 64 29 20 26 20 20 2d 66 2c  d-t1.b-d) &  -f,
3f90: 63 29 29 20 74 68 65 6e 20 31 31 2d 74 31 2e 66  c)) then 11-t1.f
3fa0: 20 77 68 65 6e 20 28 20 2d 31 33 3c 65 29 20 74   when ( -13<e) t
3fb0: 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20 61 20  hen t1.d else a 
3fc0: 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  end FROM t1 WHER
3fd0: 45 20 4e 4f 54 20 28 74 31 2e 63 20 6e 6f 74 20  E NOT (t1.c not 
3fe0: 62 65 74 77 65 65 6e 20 7e 63 61 73 65 20 77 68  between ~case wh
3ff0: 65 6e 20 63 61 73 65 20 77 68 65 6e 20 28 73 65  en case when (se
4000: 6c 65 63 74 20 20 2d 20 2d 61 62 73 28 20 2d 63  lect  - -abs( -c
4010: 61 73 65 20 20 2d 63 6f 75 6e 74 28 64 69 73 74  ase  -count(dist
4020: 69 6e 63 74 20 63 29 20 77 68 65 6e 20 63 6f 75  inct c) when cou
4030: 6e 74 28 2a 29 20 74 68 65 6e 20 6d 61 78 28 63  nt(*) then max(c
4040: 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 64 69 73  ) else count(dis
4050: 74 69 6e 63 74 20 31 33 29 20 65 6e 64 29 20 7c  tinct 13) end) |
4060: 20 6d 69 6e 28 63 29 20 66 72 6f 6d 20 74 31 29   min(c) from t1)
4070: 20 69 6e 20 28 74 31 2e 66 2c 62 2b 31 31 2c 31   in (t1.f,b+11,1
4080: 39 2a 74 31 2e 64 29 20 74 68 65 6e 20 31 39 20  9*t1.d) then 19 
4090: 65 6c 73 65 20 61 20 65 6e 64 2a 74 31 2e 62 3e  else a end*t1.b>
40a0: 31 33 20 6f 72 20 74 31 2e 65 20 69 6e 20 28 73  13 or t1.e in (s
40b0: 65 6c 65 63 74 20 28 63 6f 75 6e 74 28 2a 29 29  elect (count(*))
40c0: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
40d0: 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 74  elect cast(avg(t
40e0: 31 2e 65 29 20 41 53 20 69 6e 74 65 67 65 72 29  1.e) AS integer)
40f0: 20 66 72 6f 6d 20 74 31 29 20 6f 72 20 31 39 3e   from t1) or 19>
4100: 31 37 20 61 6e 64 20 31 33 20 6e 6f 74 20 62 65  17 and 13 not be
4110: 74 77 65 65 6e 20 31 39 20 61 6e 64 20 31 37 20  tween 19 and 17 
4120: 74 68 65 6e 20 28 74 31 2e 66 29 20 77 68 65 6e  then (t1.f) when
4130: 20 6e 6f 74 20 74 31 2e 62 3c 3e 74 31 2e 66 20   not t1.b<>t1.f 
4140: 6f 72 20 64 3c 3e 62 20 74 68 65 6e 20 74 31 2e  or d<>b then t1.
4150: 65 20 65 6c 73 65 20 61 20 65 6e 64 20 61 6e 64  e else a end and
4160: 20 63 29 7d 0a 7d 20 7b 2d 35 38 39 7d 0a 64 6f   c)}.} {-589}.do
4170: 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
4180: 2e 32 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .22 {.  db eval 
4190: 7b 53 45 4c 45 43 54 20 74 31 2e 61 20 7c 20 63  {SELECT t1.a | c
41a0: 61 73 65 20 77 68 65 6e 20 65 20 69 6e 20 28 73  ase when e in (s
41b0: 65 6c 65 63 74 20 28 31 33 29 20 66 72 6f 6d 20  elect (13) from 
41c0: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
41d0: 64 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20  d from t1) then 
41e0: 28 31 37 29 20 77 68 65 6e 20 63 2a 7e 63 61 73  (17) when c*~cas
41f0: 65 20 28 31 37 29 20 77 68 65 6e 20 63 6f 61 6c  e (17) when coal
4200: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
4210: 28 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20  (case when case 
4220: 77 68 65 6e 20 31 39 20 69 6e 20 28 31 33 2c 74  when 19 in (13,t
4230: 31 2e 66 2c 31 31 29 20 74 68 65 6e 20 74 31 2e  1.f,11) then t1.
4240: 62 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 20  b else t1.b end 
4250: 7c 20 31 31 3e 74 31 2e 61 20 74 68 65 6e 20 31  | 11>t1.a then 1
4260: 31 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 2d  1 else t1.b end-
4270: 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  b) from t1 where
4280: 20 28 31 33 20 6e 6f 74 20 69 6e 20 28 61 2c 31   (13 not in (a,1
4290: 39 2c 62 29 29 20 61 6e 64 20 74 31 2e 61 20 6e  9,b)) and t1.a n
42a0: 6f 74 20 62 65 74 77 65 65 6e 20 20 2d 31 31 20  ot between  -11 
42b0: 61 6e 64 20 74 31 2e 66 29 2c 66 29 20 74 68 65  and t1.f),f) the
42c0: 6e 20 65 20 65 6c 73 65 20 74 31 2e 63 20 65 6e  n e else t1.c en
42d0: 64 20 7c 20 61 20 69 6e 20 28 73 65 6c 65 63 74  d | a in (select
42e0: 20 31 31 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f   11 from t1 unio
42f0: 6e 20 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72  n select t1.d fr
4300: 6f 6d 20 74 31 29 20 74 68 65 6e 20 31 37 20 65  om t1) then 17 e
4310: 6c 73 65 20 74 31 2e 61 20 65 6e 64 20 7c 20 66  lse t1.a end | f
4320: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63   FROM t1 WHERE c
4330: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
4340: 74 31 2e 61 2a 74 31 2e 61 20 66 72 6f 6d 20 74  t1.a*t1.a from t
4350: 31 20 77 68 65 72 65 20 7e 20 2d 28 61 62 73 28  1 where ~ -(abs(
4360: 28 73 65 6c 65 63 74 20 61 62 73 28 63 6f 75 6e  (select abs(coun
4370: 74 28 2a 29 29 2d 63 6f 75 6e 74 28 64 69 73 74  t(*))-count(dist
4380: 69 6e 63 74 20 74 31 2e 64 2a 31 31 29 20 66 72  inct t1.d*11) fr
4390: 6f 6d 20 74 31 29 2a 2b 62 29 2f 61 62 73 28 7e  om t1)*+b)/abs(~
43a0: 74 31 2e 63 29 29 2b 63 20 6e 6f 74 20 69 6e 20  t1.c))+c not in 
43b0: 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
43c0: 74 20 7e 31 33 2a 74 31 2e 61 20 66 72 6f 6d 20  t ~13*t1.a from 
43d0: 74 31 20 77 68 65 72 65 20 66 2b 28 61 62 73 28  t1 where f+(abs(
43e0: 64 2a 20 2d 74 31 2e 66 29 2f 61 62 73 28 74 31  d* -t1.f)/abs(t1
43f0: 2e 63 29 29 3c 3d 74 31 2e 62 20 6f 72 20 6e 6f  .c))<=t1.b or no
4400: 74 20 74 31 2e 61 3c 3d 74 31 2e 63 29 2c 74 31  t t1.a<=t1.c),t1
4410: 2e 63 29 2c 65 2c 28 74 31 2e 65 29 29 29 2c 28  .c),e,(t1.e))),(
4420: 61 29 29 2b 31 31 3c 3e 31 31 7d 0a 7d 20 7b 36  a))+11<>11}.} {6
4430: 33 36 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  36}.do_test rand
4440: 65 78 70 72 2d 32 2e 32 33 20 7b 0a 20 20 64 62  expr-2.23 {.  db
4450: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 31   eval {SELECT t1
4460: 2e 61 20 7c 20 63 61 73 65 20 77 68 65 6e 20 65  .a | case when e
4470: 20 69 6e 20 28 73 65 6c 65 63 74 20 28 31 33 29   in (select (13)
4480: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
4490: 65 6c 65 63 74 20 64 20 66 72 6f 6d 20 74 31 29  elect d from t1)
44a0: 20 74 68 65 6e 20 28 31 37 29 20 77 68 65 6e 20   then (17) when 
44b0: 63 2a 7e 63 61 73 65 20 28 31 37 29 20 77 68 65  c*~case (17) whe
44c0: 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  n coalesce((sele
44d0: 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
44e0: 20 63 61 73 65 20 77 68 65 6e 20 31 39 20 69 6e   case when 19 in
44f0: 20 28 31 33 2c 74 31 2e 66 2c 31 31 29 20 74 68   (13,t1.f,11) th
4500: 65 6e 20 74 31 2e 62 20 65 6c 73 65 20 74 31 2e  en t1.b else t1.
4510: 62 20 65 6e 64 20 7c 20 31 31 3e 74 31 2e 61 20  b end | 11>t1.a 
4520: 74 68 65 6e 20 31 31 20 65 6c 73 65 20 74 31 2e  then 11 else t1.
4530: 62 20 65 6e 64 2d 62 29 20 66 72 6f 6d 20 74 31  b end-b) from t1
4540: 20 77 68 65 72 65 20 28 31 33 20 6e 6f 74 20 69   where (13 not i
4550: 6e 20 28 61 2c 31 39 2c 62 29 29 20 61 6e 64 20  n (a,19,b)) and 
4560: 74 31 2e 61 20 6e 6f 74 20 62 65 74 77 65 65 6e  t1.a not between
4570: 20 20 2d 31 31 20 61 6e 64 20 74 31 2e 66 29 2c    -11 and t1.f),
4580: 66 29 20 74 68 65 6e 20 65 20 65 6c 73 65 20 74  f) then e else t
4590: 31 2e 63 20 65 6e 64 20 7c 20 61 20 69 6e 20 28  1.c end | a in (
45a0: 73 65 6c 65 63 74 20 31 31 20 66 72 6f 6d 20 74  select 11 from t
45b0: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74  1 union select t
45c0: 31 2e 64 20 66 72 6f 6d 20 74 31 29 20 74 68 65  1.d from t1) the
45d0: 6e 20 31 37 20 65 6c 73 65 20 74 31 2e 61 20 65  n 17 else t1.a e
45e0: 6e 64 20 7c 20 66 20 46 52 4f 4d 20 74 31 20 57  nd | f FROM t1 W
45f0: 48 45 52 45 20 4e 4f 54 20 28 63 6f 61 6c 65 73  HERE NOT (coales
4600: 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 61 2a  ce((select t1.a*
4610: 74 31 2e 61 20 66 72 6f 6d 20 74 31 20 77 68 65  t1.a from t1 whe
4620: 72 65 20 7e 20 2d 28 61 62 73 28 28 73 65 6c 65  re ~ -(abs((sele
4630: 63 74 20 61 62 73 28 63 6f 75 6e 74 28 2a 29 29  ct abs(count(*))
4640: 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
4650: 74 31 2e 64 2a 31 31 29 20 66 72 6f 6d 20 74 31  t1.d*11) from t1
4660: 29 2a 2b 62 29 2f 61 62 73 28 7e 74 31 2e 63 29  )*+b)/abs(~t1.c)
4670: 29 2b 63 20 6e 6f 74 20 69 6e 20 28 63 6f 61 6c  )+c not in (coal
4680: 65 73 63 65 28 28 73 65 6c 65 63 74 20 7e 31 33  esce((select ~13
4690: 2a 74 31 2e 61 20 66 72 6f 6d 20 74 31 20 77 68  *t1.a from t1 wh
46a0: 65 72 65 20 66 2b 28 61 62 73 28 64 2a 20 2d 74  ere f+(abs(d* -t
46b0: 31 2e 66 29 2f 61 62 73 28 74 31 2e 63 29 29 3c  1.f)/abs(t1.c))<
46c0: 3d 74 31 2e 62 20 6f 72 20 6e 6f 74 20 74 31 2e  =t1.b or not t1.
46d0: 61 3c 3d 74 31 2e 63 29 2c 74 31 2e 63 29 2c 65  a<=t1.c),t1.c),e
46e0: 2c 28 74 31 2e 65 29 29 29 2c 28 61 29 29 2b 31  ,(t1.e))),(a))+1
46f0: 31 3c 3e 31 31 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f  1<>11)}.} {}.do_
4700: 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
4710: 32 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  24 {.  db eval {
4720: 53 45 4c 45 43 54 20 74 31 2e 61 20 26 20 63 61  SELECT t1.a & ca
4730: 73 65 20 77 68 65 6e 20 65 20 69 6e 20 28 73 65  se when e in (se
4740: 6c 65 63 74 20 28 31 33 29 20 66 72 6f 6d 20 74  lect (13) from t
4750: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64  1 union select d
4760: 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 28   from t1) then (
4770: 31 37 29 20 77 68 65 6e 20 63 2a 7e 63 61 73 65  17) when c*~case
4780: 20 28 31 37 29 20 77 68 65 6e 20 63 6f 61 6c 65   (17) when coale
4790: 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
47a0: 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77  case when case w
47b0: 68 65 6e 20 31 39 20 69 6e 20 28 31 33 2c 74 31  hen 19 in (13,t1
47c0: 2e 66 2c 31 31 29 20 74 68 65 6e 20 74 31 2e 62  .f,11) then t1.b
47d0: 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 20 26   else t1.b end &
47e0: 20 31 31 3e 74 31 2e 61 20 74 68 65 6e 20 31 31   11>t1.a then 11
47f0: 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 2d 62   else t1.b end-b
4800: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
4810: 28 31 33 20 6e 6f 74 20 69 6e 20 28 61 2c 31 39  (13 not in (a,19
4820: 2c 62 29 29 20 61 6e 64 20 74 31 2e 61 20 6e 6f  ,b)) and t1.a no
4830: 74 20 62 65 74 77 65 65 6e 20 20 2d 31 31 20 61  t between  -11 a
4840: 6e 64 20 74 31 2e 66 29 2c 66 29 20 74 68 65 6e  nd t1.f),f) then
4850: 20 65 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64   e else t1.c end
4860: 20 26 20 61 20 69 6e 20 28 73 65 6c 65 63 74 20   & a in (select 
4870: 31 31 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  11 from t1 union
4880: 20 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f   select t1.d fro
4890: 6d 20 74 31 29 20 74 68 65 6e 20 31 37 20 65 6c  m t1) then 17 el
48a0: 73 65 20 74 31 2e 61 20 65 6e 64 20 26 20 66 20  se t1.a end & f 
48b0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63 6f  FROM t1 WHERE co
48c0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74  alesce((select t
48d0: 31 2e 61 2a 74 31 2e 61 20 66 72 6f 6d 20 74 31  1.a*t1.a from t1
48e0: 20 77 68 65 72 65 20 7e 20 2d 28 61 62 73 28 28   where ~ -(abs((
48f0: 73 65 6c 65 63 74 20 61 62 73 28 63 6f 75 6e 74  select abs(count
4900: 28 2a 29 29 2d 63 6f 75 6e 74 28 64 69 73 74 69  (*))-count(disti
4910: 6e 63 74 20 74 31 2e 64 2a 31 31 29 20 66 72 6f  nct t1.d*11) fro
4920: 6d 20 74 31 29 2a 2b 62 29 2f 61 62 73 28 7e 74  m t1)*+b)/abs(~t
4930: 31 2e 63 29 29 2b 63 20 6e 6f 74 20 69 6e 20 28  1.c))+c not in (
4940: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
4950: 20 7e 31 33 2a 74 31 2e 61 20 66 72 6f 6d 20 74   ~13*t1.a from t
4960: 31 20 77 68 65 72 65 20 66 2b 28 61 62 73 28 64  1 where f+(abs(d
4970: 2a 20 2d 74 31 2e 66 29 2f 61 62 73 28 74 31 2e  * -t1.f)/abs(t1.
4980: 63 29 29 3c 3d 74 31 2e 62 20 6f 72 20 6e 6f 74  c))<=t1.b or not
4990: 20 74 31 2e 61 3c 3d 74 31 2e 63 29 2c 74 31 2e   t1.a<=t1.c),t1.
49a0: 63 29 2c 65 2c 28 74 31 2e 65 29 29 29 2c 28 61  c),e,(t1.e))),(a
49b0: 29 29 2b 31 31 3c 3e 31 31 7d 0a 7d 20 7b 36 34  ))+11<>11}.} {64
49c0: 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
49d0: 70 72 2d 32 2e 32 35 20 7b 0a 20 20 64 62 20 65  pr-2.25 {.  db e
49e0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 2a 63 6f  val {SELECT c*co
49f0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 7e  alesce((select ~
4a00: 31 39 2d 65 20 66 72 6f 6d 20 74 31 20 77 68 65  19-e from t1 whe
4a10: 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
4a20: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
4a30: 68 65 72 65 20 63 61 73 65 20 77 68 65 6e 20 74  here case when t
4a40: 31 2e 62 3c 3e 28 64 29 20 74 68 65 6e 20 63 61  1.b<>(d) then ca
4a50: 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28 73  se when exists(s
4a60: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
4a70: 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73  where not exists
4a80: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
4a90: 31 20 77 68 65 72 65 20 63 61 73 65 20 74 31 2e  1 where case t1.
4aa0: 65 20 77 68 65 6e 20 65 2a 28 31 31 29 20 74 68  e when e*(11) th
4ab0: 65 6e 20 31 33 20 65 6c 73 65 20 31 31 20 65 6e  en 13 else 11 en
4ac0: 64 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e  d in (select t1.
4ad0: 61 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  a from t1 union 
4ae0: 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74  select 13 from t
4af0: 31 29 29 29 20 74 68 65 6e 20 63 6f 61 6c 65 73  1))) then coales
4b00: 63 65 28 28 73 65 6c 65 63 74 20 63 61 73 65 20  ce((select case 
4b10: 77 68 65 6e 20 66 20 69 6e 20 28 73 65 6c 65 63  when f in (selec
4b20: 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20 75  t t1.c from t1 u
4b30: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 74 31 2e  nion select (t1.
4b40: 62 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e  b) from t1) then
4b50: 20 66 20 65 6c 73 65 20 61 20 65 6e 64 20 66 72   f else a end fr
4b60: 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66  om t1 where t1.f
4b70: 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 37 20   not between 17 
4b80: 61 6e 64 20 66 29 2c 20 2d 66 29 20 65 6c 73 65  and f), -f) else
4b90: 20 31 31 20 65 6e 64 20 65 6c 73 65 20 28 61 29   11 end else (a)
4ba0: 20 65 6e 64 2a 64 20 6e 6f 74 20 69 6e 20 28 65   end*d not in (e
4bb0: 2c 74 31 2e 63 2c 74 31 2e 65 29 29 29 2c 74 31  ,t1.c,t1.e))),t1
4bc0: 2e 65 29 2d 61 20 46 52 4f 4d 20 74 31 20 57 48  .e)-a FROM t1 WH
4bd0: 45 52 45 20 31 39 2b 28 73 65 6c 65 63 74 20 63  ERE 19+(select c
4be0: 61 73 74 28 61 76 67 28 28 61 62 73 28 74 31 2e  ast(avg((abs(t1.
4bf0: 64 29 2f 61 62 73 28 63 6f 61 6c 65 73 63 65 28  d)/abs(coalesce(
4c00: 28 73 65 6c 65 63 74 20 6d 61 78 28 2b 62 2d 28  (select max(+b-(
4c10: 74 31 2e 65 2b 62 2b 20 2d 63 29 2a 31 39 29 20  t1.e+b+ -c)*19) 
4c20: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 31  from t1 where 11
4c30: 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e   not between t1.
4c40: 62 20 61 6e 64 20 66 29 2c 20 2d 31 37 29 29 29  b and f), -17)))
4c50: 2a 28 31 31 29 29 20 41 53 20 69 6e 74 65 67 65  *(11)) AS intege
4c60: 72 29 20 66 72 6f 6d 20 74 31 29 2a 66 20 69 6e  r) from t1)*f in
4c70: 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a   (select count(*
4c80: 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
4c90: 73 65 6c 65 63 74 20 63 61 73 65 20 6d 61 78 28  select case max(
4ca0: 74 31 2e 64 29 2d 28 20 2d 6d 69 6e 28 74 31 2e  t1.d)-( -min(t1.
4cb0: 64 29 2a 28 2b 6d 61 78 28 65 29 29 29 20 77 68  d)*(+max(e))) wh
4cc0: 65 6e 20 6d 61 78 28 74 31 2e 61 29 20 74 68 65  en max(t1.a) the
4cd0: 6e 20 63 61 73 74 28 61 76 67 28 74 31 2e 64 29  n cast(avg(t1.d)
4ce0: 20 41 53 20 69 6e 74 65 67 65 72 29 2d 28 63 6f   AS integer)-(co
4cf0: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
4d00: 66 29 29 2d 28 20 2d 63 61 73 74 28 61 76 67 28  f))-( -cast(avg(
4d10: 66 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20  f) AS integer)) 
4d20: 65 6c 73 65 20 6d 61 78 28 74 31 2e 65 29 20 65  else max(t1.e) e
4d30: 6e 64 20 66 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b  nd from t1)}.} {
4d40: 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
4d50: 70 72 2d 32 2e 32 36 20 7b 0a 20 20 64 62 20 65  pr-2.26 {.  db e
4d60: 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 2a 63 6f  val {SELECT c*co
4d70: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 7e  alesce((select ~
4d80: 31 39 2d 65 20 66 72 6f 6d 20 74 31 20 77 68 65  19-e from t1 whe
4d90: 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
4da0: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
4db0: 68 65 72 65 20 63 61 73 65 20 77 68 65 6e 20 74  here case when t
4dc0: 31 2e 62 3c 3e 28 64 29 20 74 68 65 6e 20 63 61  1.b<>(d) then ca
4dd0: 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28 73  se when exists(s
4de0: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
4df0: 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73  where not exists
4e00: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
4e10: 31 20 77 68 65 72 65 20 63 61 73 65 20 74 31 2e  1 where case t1.
4e20: 65 20 77 68 65 6e 20 65 2a 28 31 31 29 20 74 68  e when e*(11) th
4e30: 65 6e 20 31 33 20 65 6c 73 65 20 31 31 20 65 6e  en 13 else 11 en
4e40: 64 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e  d in (select t1.
4e50: 61 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  a from t1 union 
4e60: 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74  select 13 from t
4e70: 31 29 29 29 20 74 68 65 6e 20 63 6f 61 6c 65 73  1))) then coales
4e80: 63 65 28 28 73 65 6c 65 63 74 20 63 61 73 65 20  ce((select case 
4e90: 77 68 65 6e 20 66 20 69 6e 20 28 73 65 6c 65 63  when f in (selec
4ea0: 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20 75  t t1.c from t1 u
4eb0: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 74 31 2e  nion select (t1.
4ec0: 62 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e  b) from t1) then
4ed0: 20 66 20 65 6c 73 65 20 61 20 65 6e 64 20 66 72   f else a end fr
4ee0: 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66  om t1 where t1.f
4ef0: 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 37 20   not between 17 
4f00: 61 6e 64 20 66 29 2c 20 2d 66 29 20 65 6c 73 65  and f), -f) else
4f10: 20 31 31 20 65 6e 64 20 65 6c 73 65 20 28 61 29   11 end else (a)
4f20: 20 65 6e 64 2a 64 20 6e 6f 74 20 69 6e 20 28 65   end*d not in (e
4f30: 2c 74 31 2e 63 2c 74 31 2e 65 29 29 29 2c 74 31  ,t1.c,t1.e))),t1
4f40: 2e 65 29 2d 61 20 46 52 4f 4d 20 74 31 20 57 48  .e)-a FROM t1 WH
4f50: 45 52 45 20 4e 4f 54 20 28 31 39 2b 28 73 65 6c  ERE NOT (19+(sel
4f60: 65 63 74 20 63 61 73 74 28 61 76 67 28 28 61 62  ect cast(avg((ab
4f70: 73 28 74 31 2e 64 29 2f 61 62 73 28 63 6f 61 6c  s(t1.d)/abs(coal
4f80: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
4f90: 28 2b 62 2d 28 74 31 2e 65 2b 62 2b 20 2d 63 29  (+b-(t1.e+b+ -c)
4fa0: 2a 31 39 29 20 66 72 6f 6d 20 74 31 20 77 68 65  *19) from t1 whe
4fb0: 72 65 20 31 31 20 6e 6f 74 20 62 65 74 77 65 65  re 11 not betwee
4fc0: 6e 20 74 31 2e 62 20 61 6e 64 20 66 29 2c 20 2d  n t1.b and f), -
4fd0: 31 37 29 29 29 2a 28 31 31 29 29 20 41 53 20 69  17)))*(11)) AS i
4fe0: 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
4ff0: 2a 66 20 69 6e 20 28 73 65 6c 65 63 74 20 63 6f  *f in (select co
5000: 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 20 75  unt(*) from t1 u
5010: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 65  nion select case
5020: 20 6d 61 78 28 74 31 2e 64 29 2d 28 20 2d 6d 69   max(t1.d)-( -mi
5030: 6e 28 74 31 2e 64 29 2a 28 2b 6d 61 78 28 65 29  n(t1.d)*(+max(e)
5040: 29 29 20 77 68 65 6e 20 6d 61 78 28 74 31 2e 61  )) when max(t1.a
5050: 29 20 74 68 65 6e 20 63 61 73 74 28 61 76 67 28  ) then cast(avg(
5060: 74 31 2e 64 29 20 41 53 20 69 6e 74 65 67 65 72  t1.d) AS integer
5070: 29 2d 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  )-(count(distinc
5080: 74 20 74 31 2e 66 29 29 2d 28 20 2d 63 61 73 74  t t1.f))-( -cast
5090: 28 61 76 67 28 66 29 20 41 53 20 69 6e 74 65 67  (avg(f) AS integ
50a0: 65 72 29 29 20 65 6c 73 65 20 6d 61 78 28 74 31  er)) else max(t1
50b0: 2e 65 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29  .e) end from t1)
50c0: 29 7d 0a 7d 20 7b 31 34 39 39 30 30 7d 0a 64 6f  )}.} {149900}.do
50d0: 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
50e0: 2e 32 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .27 {.  db eval 
50f0: 7b 53 45 4c 45 43 54 20 28 61 62 73 28 28 73 65  {SELECT (abs((se
5100: 6c 65 63 74 20 28 63 61 73 65 20 61 62 73 28 6d  lect (case abs(m
5110: 69 6e 28 74 31 2e 66 29 29 20 7c 20 63 6f 75 6e  in(t1.f)) | coun
5120: 74 28 64 69 73 74 69 6e 63 74 20 65 29 20 77 68  t(distinct e) wh
5130: 65 6e 20 28 7e 2b 63 6f 75 6e 74 28 2a 29 2b 6d  en (~+count(*)+m
5140: 61 78 28 65 29 2b 2b 61 62 73 28 63 61 73 74 28  ax(e)++abs(cast(
5150: 61 76 67 28 7e 31 39 29 20 41 53 20 69 6e 74 65  avg(~19) AS inte
5160: 67 65 72 29 29 29 20 74 68 65 6e 20 2b 63 61 73  ger))) then +cas
5170: 74 28 61 76 67 28 63 29 20 41 53 20 69 6e 74 65  t(avg(c) AS inte
5180: 67 65 72 29 20 65 6c 73 65 20 7e 20 2d 6d 61 78  ger) else ~ -max
5190: 28 2b 74 31 2e 62 29 2b 7e 6d 61 78 28 31 39 29  (+t1.b)+~max(19)
51a0: 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  *count(distinct 
51b0: 61 29 2a 6d 69 6e 28 31 37 29 20 7c 20 6d 61 78  a)*min(17) | max
51c0: 28 74 31 2e 64 29 20 65 6e 64 29 20 66 72 6f 6d  (t1.d) end) from
51d0: 20 74 31 29 29 2f 61 62 73 28 7e 63 2b 28 73 65   t1))/abs(~c+(se
51e0: 6c 65 63 74 20 20 2d 28 63 6f 75 6e 74 28 64 69  lect  -(count(di
51f0: 73 74 69 6e 63 74 20 74 31 2e 65 29 29 20 66 72  stinct t1.e)) fr
5200: 6f 6d 20 74 31 29 2d 31 31 2b 74 31 2e 65 29 29  om t1)-11+t1.e))
5210: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31   FROM t1 WHERE 1
5220: 31 3e 3d 74 31 2e 66 7d 0a 7d 20 7b 7d 0a 64 6f  1>=t1.f}.} {}.do
5230: 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
5240: 2e 32 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .28 {.  db eval 
5250: 7b 53 45 4c 45 43 54 20 28 61 62 73 28 28 73 65  {SELECT (abs((se
5260: 6c 65 63 74 20 28 63 61 73 65 20 61 62 73 28 6d  lect (case abs(m
5270: 69 6e 28 74 31 2e 66 29 29 20 7c 20 63 6f 75 6e  in(t1.f)) | coun
5280: 74 28 64 69 73 74 69 6e 63 74 20 65 29 20 77 68  t(distinct e) wh
5290: 65 6e 20 28 7e 2b 63 6f 75 6e 74 28 2a 29 2b 6d  en (~+count(*)+m
52a0: 61 78 28 65 29 2b 2b 61 62 73 28 63 61 73 74 28  ax(e)++abs(cast(
52b0: 61 76 67 28 7e 31 39 29 20 41 53 20 69 6e 74 65  avg(~19) AS inte
52c0: 67 65 72 29 29 29 20 74 68 65 6e 20 2b 63 61 73  ger))) then +cas
52d0: 74 28 61 76 67 28 63 29 20 41 53 20 69 6e 74 65  t(avg(c) AS inte
52e0: 67 65 72 29 20 65 6c 73 65 20 7e 20 2d 6d 61 78  ger) else ~ -max
52f0: 28 2b 74 31 2e 62 29 2b 7e 6d 61 78 28 31 39 29  (+t1.b)+~max(19)
5300: 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  *count(distinct 
5310: 61 29 2a 6d 69 6e 28 31 37 29 20 7c 20 6d 61 78  a)*min(17) | max
5320: 28 74 31 2e 64 29 20 65 6e 64 29 20 66 72 6f 6d  (t1.d) end) from
5330: 20 74 31 29 29 2f 61 62 73 28 7e 63 2b 28 73 65   t1))/abs(~c+(se
5340: 6c 65 63 74 20 20 2d 28 63 6f 75 6e 74 28 64 69  lect  -(count(di
5350: 73 74 69 6e 63 74 20 74 31 2e 65 29 29 20 66 72  stinct t1.e)) fr
5360: 6f 6d 20 74 31 29 2d 31 31 2b 74 31 2e 65 29 29  om t1)-11+t1.e))
5370: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
5380: 4f 54 20 28 31 31 3e 3d 74 31 2e 66 29 7d 0a 7d  OT (11>=t1.f)}.}
5390: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e   {0}.do_test ran
53a0: 64 65 78 70 72 2d 32 2e 32 39 20 7b 0a 20 20 64  dexpr-2.29 {.  d
53b0: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28  b eval {SELECT (
53c0: 61 62 73 28 28 73 65 6c 65 63 74 20 28 63 61 73  abs((select (cas
53d0: 65 20 61 62 73 28 6d 69 6e 28 74 31 2e 66 29 29  e abs(min(t1.f))
53e0: 20 26 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63   & count(distinc
53f0: 74 20 65 29 20 77 68 65 6e 20 28 7e 2b 63 6f 75  t e) when (~+cou
5400: 6e 74 28 2a 29 2b 6d 61 78 28 65 29 2b 2b 61 62  nt(*)+max(e)++ab
5410: 73 28 63 61 73 74 28 61 76 67 28 7e 31 39 29 20  s(cast(avg(~19) 
5420: 41 53 20 69 6e 74 65 67 65 72 29 29 29 20 74 68  AS integer))) th
5430: 65 6e 20 2b 63 61 73 74 28 61 76 67 28 63 29 20  en +cast(avg(c) 
5440: 41 53 20 69 6e 74 65 67 65 72 29 20 65 6c 73 65  AS integer) else
5450: 20 7e 20 2d 6d 61 78 28 2b 74 31 2e 62 29 2b 7e   ~ -max(+t1.b)+~
5460: 6d 61 78 28 31 39 29 2a 63 6f 75 6e 74 28 64 69  max(19)*count(di
5470: 73 74 69 6e 63 74 20 61 29 2a 6d 69 6e 28 31 37  stinct a)*min(17
5480: 29 20 26 20 6d 61 78 28 74 31 2e 64 29 20 65 6e  ) & max(t1.d) en
5490: 64 29 20 66 72 6f 6d 20 74 31 29 29 2f 61 62 73  d) from t1))/abs
54a0: 28 7e 63 2b 28 73 65 6c 65 63 74 20 20 2d 28 63  (~c+(select  -(c
54b0: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
54c0: 2e 65 29 29 20 66 72 6f 6d 20 74 31 29 2d 31 31  .e)) from t1)-11
54d0: 2b 74 31 2e 65 29 29 20 46 52 4f 4d 20 74 31 20  +t1.e)) FROM t1 
54e0: 57 48 45 52 45 20 4e 4f 54 20 28 31 31 3e 3d 74  WHERE NOT (11>=t
54f0: 31 2e 66 29 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  1.f)}.} {1}.do_t
5500: 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 33  est randexpr-2.3
5510: 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  0 {.  db eval {S
5520: 45 4c 45 43 54 20 28 73 65 6c 65 63 74 20 2b 63  ELECT (select +c
5530: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 61  ount(distinct ca
5540: 73 65 20 77 68 65 6e 20 31 31 3d 61 20 6f 72 20  se when 11=a or 
5550: 65 3c 2b 74 31 2e 66 2b 74 31 2e 63 20 61 6e 64  e<+t1.f+t1.c and
5560: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
5570: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
5580: 72 65 20 6e 6f 74 20 74 31 2e 61 2d 74 31 2e 62  re not t1.a-t1.b
5590: 3d 7e 61 20 61 6e 64 20 66 3c 3d 63 6f 61 6c 65  =~a and f<=coale
55a0: 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
55b0: 28 65 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65  (e)) from t1 whe
55c0: 72 65 20 2b 74 31 2e 66 3e 3d 62 29 2c 74 31 2e  re +t1.f>=b),t1.
55d0: 64 29 2a 31 33 29 20 61 6e 64 20 74 31 2e 63 3e  d)*13) and t1.c>
55e0: 74 31 2e 65 20 61 6e 64 20 74 31 2e 61 3c 31 37  t1.e and t1.a<17
55f0: 20 74 68 65 6e 20 66 20 77 68 65 6e 20 61 3c 63   then f when a<c
5600: 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20   then t1.d else 
5610: 63 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 29 20  c end) from t1) 
5620: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
5630: 2e 62 3d 63 61 73 65 20 74 31 2e 65 20 7c 20 66  .b=case t1.e | f
5640: 2b 74 31 2e 64 20 77 68 65 6e 20 63 61 73 65 20  +t1.d when case 
5650: 77 68 65 6e 20 74 31 2e 66 20 7c 20 74 31 2e 65  when t1.f | t1.e
5660: 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d 2b 6d   in (select  -+m
5670: 69 6e 28 63 61 73 65 20 77 68 65 6e 20 74 31 2e  in(case when t1.
5680: 63 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e  c in (select t1.
5690: 62 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  b from t1 union 
56a0: 73 65 6c 65 63 74 20 62 2d 31 39 2a 28 61 62 73  select b-19*(abs
56b0: 28 62 29 2f 61 62 73 28 74 31 2e 62 2a 63 61 73  (b)/abs(t1.b*cas
56c0: 65 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74  e when not exist
56d0: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
56e0: 74 31 20 77 68 65 72 65 20 74 31 2e 61 20 69 6e  t1 where t1.a in
56f0: 20 28 73 65 6c 65 63 74 20 7e 63 61 73 74 28 61   (select ~cast(a
5700: 76 67 28 64 29 20 41 53 20 69 6e 74 65 67 65 72  vg(d) AS integer
5710: 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
5720: 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 66 29  select max(t1.f)
5730: 20 66 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20   from t1)) then 
5740: 7e 28 31 33 29 20 77 68 65 6e 20 20 2d 63 3d 74  ~(13) when  -c=t
5750: 31 2e 62 20 74 68 65 6e 20 74 31 2e 63 20 65 6c  1.b then t1.c el
5760: 73 65 20 66 20 65 6e 64 29 29 20 66 72 6f 6d 20  se f end)) from 
5770: 74 31 29 20 74 68 65 6e 20 65 20 65 6c 73 65 20  t1) then e else 
5780: 31 37 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20  17 end) from t1 
5790: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78  union select max
57a0: 28 28 61 29 29 20 66 72 6f 6d 20 74 31 29 20 74  ((a)) from t1) t
57b0: 68 65 6e 20 20 2d 62 20 65 6c 73 65 20 74 31 2e  hen  -b else t1.
57c0: 64 20 65 6e 64 2b 31 33 20 74 68 65 6e 20 61 20  d end+13 then a 
57d0: 65 6c 73 65 20 31 33 20 65 6e 64 7d 0a 7d 20 7b  else 13 end}.} {
57e0: 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
57f0: 70 72 2d 32 2e 33 31 20 7b 0a 20 20 64 62 20 65  pr-2.31 {.  db e
5800: 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 73 65 6c  val {SELECT (sel
5810: 65 63 74 20 2b 63 6f 75 6e 74 28 64 69 73 74 69  ect +count(disti
5820: 6e 63 74 20 63 61 73 65 20 77 68 65 6e 20 31 31  nct case when 11
5830: 3d 61 20 6f 72 20 65 3c 2b 74 31 2e 66 2b 74 31  =a or e<+t1.f+t1
5840: 2e 63 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74  .c and not exist
5850: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
5860: 74 31 20 77 68 65 72 65 20 6e 6f 74 20 74 31 2e  t1 where not t1.
5870: 61 2d 74 31 2e 62 3d 7e 61 20 61 6e 64 20 66 3c  a-t1.b=~a and f<
5880: 3d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  =coalesce((selec
5890: 74 20 6d 61 78 28 28 65 29 29 20 66 72 6f 6d 20  t max((e)) from 
58a0: 74 31 20 77 68 65 72 65 20 2b 74 31 2e 66 3e 3d  t1 where +t1.f>=
58b0: 62 29 2c 74 31 2e 64 29 2a 31 33 29 20 61 6e 64  b),t1.d)*13) and
58c0: 20 74 31 2e 63 3e 74 31 2e 65 20 61 6e 64 20 74   t1.c>t1.e and t
58d0: 31 2e 61 3c 31 37 20 74 68 65 6e 20 66 20 77 68  1.a<17 then f wh
58e0: 65 6e 20 61 3c 63 20 74 68 65 6e 20 74 31 2e 64  en a<c then t1.d
58f0: 20 65 6c 73 65 20 63 20 65 6e 64 29 20 66 72 6f   else c end) fro
5900: 6d 20 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48  m t1) FROM t1 WH
5910: 45 52 45 20 4e 4f 54 20 28 74 31 2e 62 3d 63 61  ERE NOT (t1.b=ca
5920: 73 65 20 74 31 2e 65 20 7c 20 66 2b 74 31 2e 64  se t1.e | f+t1.d
5930: 20 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20   when case when 
5940: 74 31 2e 66 20 7c 20 74 31 2e 65 20 69 6e 20 28  t1.f | t1.e in (
5950: 73 65 6c 65 63 74 20 20 2d 2b 6d 69 6e 28 63 61  select  -+min(ca
5960: 73 65 20 77 68 65 6e 20 74 31 2e 63 20 69 6e 20  se when t1.c in 
5970: 28 73 65 6c 65 63 74 20 74 31 2e 62 20 66 72 6f  (select t1.b fro
5980: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
5990: 74 20 62 2d 31 39 2a 28 61 62 73 28 62 29 2f 61  t b-19*(abs(b)/a
59a0: 62 73 28 74 31 2e 62 2a 63 61 73 65 20 77 68 65  bs(t1.b*case whe
59b0: 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  n not exists(sel
59c0: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
59d0: 65 72 65 20 74 31 2e 61 20 69 6e 20 28 73 65 6c  ere t1.a in (sel
59e0: 65 63 74 20 7e 63 61 73 74 28 61 76 67 28 64 29  ect ~cast(avg(d)
59f0: 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
5a00: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
5a10: 74 20 6d 61 78 28 74 31 2e 66 29 20 66 72 6f 6d  t max(t1.f) from
5a20: 20 74 31 29 29 20 74 68 65 6e 20 7e 28 31 33 29   t1)) then ~(13)
5a30: 20 77 68 65 6e 20 20 2d 63 3d 74 31 2e 62 20 74   when  -c=t1.b t
5a40: 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 66 20  hen t1.c else f 
5a50: 65 6e 64 29 29 20 66 72 6f 6d 20 74 31 29 20 74  end)) from t1) t
5a60: 68 65 6e 20 65 20 65 6c 73 65 20 31 37 20 65 6e  hen e else 17 en
5a70: 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  d) from t1 union
5a80: 20 73 65 6c 65 63 74 20 6d 61 78 28 28 61 29 29   select max((a))
5a90: 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 20   from t1) then  
5aa0: 2d 62 20 65 6c 73 65 20 74 31 2e 64 20 65 6e 64  -b else t1.d end
5ab0: 2b 31 33 20 74 68 65 6e 20 61 20 65 6c 73 65 20  +13 then a else 
5ac0: 31 33 20 65 6e 64 29 7d 0a 7d 20 7b 31 7d 0a 64  13 end)}.} {1}.d
5ad0: 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
5ae0: 32 2e 33 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  2.32 {.  db eval
5af0: 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63   {SELECT coalesc
5b00: 65 28 28 73 65 6c 65 63 74 20 28 73 65 6c 65 63  e((select (selec
5b10: 74 20 6d 61 78 28 74 31 2e 61 29 2a 28 6d 61 78  t max(t1.a)*(max
5b20: 28 61 29 29 2a 6d 61 78 28 74 31 2e 66 2a 7e 31  (a))*max(t1.f*~1
5b30: 31 2a 63 61 73 65 20 77 68 65 6e 20 62 20 6e 6f  1*case when b no
5b40: 74 20 69 6e 20 28 28 73 65 6c 65 63 74 20 6d 69  t in ((select mi
5b50: 6e 28 31 39 29 20 66 72 6f 6d 20 74 31 29 2c 62  n(19) from t1),b
5b60: 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  ,coalesce((selec
5b70: 74 20 6d 61 78 28 28 74 31 2e 66 29 29 20 66 72  t max((t1.f)) fr
5b80: 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 63  om t1 where t1.c
5b90: 20 69 6e 20 28 63 2c 74 31 2e 62 2c 28 74 31 2e   in (c,t1.b,(t1.
5ba0: 66 29 29 20 6f 72 20 74 31 2e 61 3c 3e 28 63 29  f)) or t1.a<>(c)
5bb0: 29 2c 62 29 2a 74 31 2e 62 2d 74 31 2e 62 29 20  ),b)*t1.b-t1.b) 
5bc0: 74 68 65 6e 20 64 20 65 6c 73 65 20 74 31 2e 65  then d else t1.e
5bd0: 20 65 6e 64 20 7c 20 66 2a 20 2d 31 33 2d 63 29   end | f* -13-c)
5be0: 20 66 72 6f 6d 20 74 31 29 20 66 72 6f 6d 20 74   from t1) from t
5bf0: 31 20 77 68 65 72 65 20 6e 6f 74 20 7e 61 3c 66  1 where not ~a<f
5c00: 29 2c 20 2d 31 39 29 2b 74 31 2e 64 2b 62 20 46  ), -19)+t1.d+b F
5c10: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31 33 2a  ROM t1 WHERE 13*
5c20: 74 31 2e 64 20 62 65 74 77 65 65 6e 20 63 6f 61  t1.d between coa
5c30: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31  lesce((select t1
5c40: 2e 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  .d from t1 where
5c50: 20 62 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31   b in (select t1
5c60: 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  .d from t1 union
5c70: 20 73 65 6c 65 63 74 20 63 61 73 65 20 62 2a 74   select case b*t
5c80: 31 2e 66 2b 74 31 2e 61 2a 2b 63 6f 61 6c 65 73  1.f+t1.a*+coales
5c90: 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 61 20  ce((select t1.a 
5ca0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 6e  from t1 where (n
5cb0: 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
5cc0: 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
5cd0: 20 62 2a 74 31 2e 63 3d 31 33 29 29 29 2c 31 31   b*t1.c=13))),11
5ce0: 29 2b 74 31 2e 65 20 77 68 65 6e 20 7e 66 20 74  )+t1.e when ~f t
5cf0: 68 65 6e 20 64 2b 63 61 73 65 20 62 20 77 68 65  hen d+case b whe
5d00: 6e 20 65 20 74 68 65 6e 20 66 20 65 6c 73 65 20  n e then f else 
5d10: 74 31 2e 65 20 65 6e 64 2a 31 33 20 65 6c 73 65  t1.e end*13 else
5d20: 20 66 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 29   f end from t1))
5d30: 2c 31 39 29 20 61 6e 64 20 74 31 2e 64 20 61 6e  ,19) and t1.d an
5d40: 64 20 31 39 20 62 65 74 77 65 65 6e 20 31 37 20  d 19 between 17 
5d50: 61 6e 64 20 65 20 61 6e 64 20 61 3e 61 7d 0a 7d  and e and a>a}.}
5d60: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64   {}.do_test rand
5d70: 65 78 70 72 2d 32 2e 33 33 20 7b 0a 20 20 64 62  expr-2.33 {.  db
5d80: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
5d90: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 28  alesce((select (
5da0: 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29  select max(t1.a)
5db0: 2a 28 6d 61 78 28 61 29 29 2a 6d 61 78 28 74 31  *(max(a))*max(t1
5dc0: 2e 66 2a 7e 31 31 2a 63 61 73 65 20 77 68 65 6e  .f*~11*case when
5dd0: 20 62 20 6e 6f 74 20 69 6e 20 28 28 73 65 6c 65   b not in ((sele
5de0: 63 74 20 6d 69 6e 28 31 39 29 20 66 72 6f 6d 20  ct min(19) from 
5df0: 74 31 29 2c 62 2c 63 6f 61 6c 65 73 63 65 28 28  t1),b,coalesce((
5e00: 73 65 6c 65 63 74 20 6d 61 78 28 28 74 31 2e 66  select max((t1.f
5e10: 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
5e20: 20 74 31 2e 63 20 69 6e 20 28 63 2c 74 31 2e 62   t1.c in (c,t1.b
5e30: 2c 28 74 31 2e 66 29 29 20 6f 72 20 74 31 2e 61  ,(t1.f)) or t1.a
5e40: 3c 3e 28 63 29 29 2c 62 29 2a 74 31 2e 62 2d 74  <>(c)),b)*t1.b-t
5e50: 31 2e 62 29 20 74 68 65 6e 20 64 20 65 6c 73 65  1.b) then d else
5e60: 20 74 31 2e 65 20 65 6e 64 20 7c 20 66 2a 20 2d   t1.e end | f* -
5e70: 31 33 2d 63 29 20 66 72 6f 6d 20 74 31 29 20 66  13-c) from t1) f
5e80: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
5e90: 20 7e 61 3c 66 29 2c 20 2d 31 39 29 2b 74 31 2e   ~a<f), -19)+t1.
5ea0: 64 2b 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52  d+b FROM t1 WHER
5eb0: 45 20 4e 4f 54 20 28 31 33 2a 74 31 2e 64 20 62  E NOT (13*t1.d b
5ec0: 65 74 77 65 65 6e 20 63 6f 61 6c 65 73 63 65 28  etween coalesce(
5ed0: 28 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f  (select t1.d fro
5ee0: 6d 20 74 31 20 77 68 65 72 65 20 62 20 69 6e 20  m t1 where b in 
5ef0: 28 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f  (select t1.d fro
5f00: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
5f10: 74 20 63 61 73 65 20 62 2a 74 31 2e 66 2b 74 31  t case b*t1.f+t1
5f20: 2e 61 2a 2b 63 6f 61 6c 65 73 63 65 28 28 73 65  .a*+coalesce((se
5f30: 6c 65 63 74 20 74 31 2e 61 20 66 72 6f 6d 20 74  lect t1.a from t
5f40: 31 20 77 68 65 72 65 20 28 6e 6f 74 20 65 78 69  1 where (not exi
5f50: 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
5f60: 6d 20 74 31 20 77 68 65 72 65 20 62 2a 74 31 2e  m t1 where b*t1.
5f70: 63 3d 31 33 29 29 29 2c 31 31 29 2b 74 31 2e 65  c=13))),11)+t1.e
5f80: 20 77 68 65 6e 20 7e 66 20 74 68 65 6e 20 64 2b   when ~f then d+
5f90: 63 61 73 65 20 62 20 77 68 65 6e 20 65 20 74 68  case b when e th
5fa0: 65 6e 20 66 20 65 6c 73 65 20 74 31 2e 65 20 65  en f else t1.e e
5fb0: 6e 64 2a 31 33 20 65 6c 73 65 20 66 20 65 6e 64  nd*13 else f end
5fc0: 20 66 72 6f 6d 20 74 31 29 29 2c 31 39 29 20 61   from t1)),19) a
5fd0: 6e 64 20 74 31 2e 64 20 61 6e 64 20 31 39 20 62  nd t1.d and 19 b
5fe0: 65 74 77 65 65 6e 20 31 37 20 61 6e 64 20 65 20  etween 17 and e 
5ff0: 61 6e 64 20 61 3e 61 29 7d 0a 7d 20 7b 35 38 31  and a>a)}.} {581
6000: 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
6010: 70 72 2d 32 2e 33 34 20 7b 0a 20 20 64 62 20 65  pr-2.34 {.  db e
6020: 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
6030: 65 73 63 65 28 28 73 65 6c 65 63 74 20 28 73 65  esce((select (se
6040: 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29 2a 28  lect max(t1.a)*(
6050: 6d 61 78 28 61 29 29 2a 6d 61 78 28 74 31 2e 66  max(a))*max(t1.f
6060: 2a 7e 31 31 2a 63 61 73 65 20 77 68 65 6e 20 62  *~11*case when b
6070: 20 6e 6f 74 20 69 6e 20 28 28 73 65 6c 65 63 74   not in ((select
6080: 20 6d 69 6e 28 31 39 29 20 66 72 6f 6d 20 74 31   min(19) from t1
6090: 29 2c 62 2c 63 6f 61 6c 65 73 63 65 28 28 73 65  ),b,coalesce((se
60a0: 6c 65 63 74 20 6d 61 78 28 28 74 31 2e 66 29 29  lect max((t1.f))
60b0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
60c0: 31 2e 63 20 69 6e 20 28 63 2c 74 31 2e 62 2c 28  1.c in (c,t1.b,(
60d0: 74 31 2e 66 29 29 20 6f 72 20 74 31 2e 61 3c 3e  t1.f)) or t1.a<>
60e0: 28 63 29 29 2c 62 29 2a 74 31 2e 62 2d 74 31 2e  (c)),b)*t1.b-t1.
60f0: 62 29 20 74 68 65 6e 20 64 20 65 6c 73 65 20 74  b) then d else t
6100: 31 2e 65 20 65 6e 64 20 26 20 66 2a 20 2d 31 33  1.e end & f* -13
6110: 2d 63 29 20 66 72 6f 6d 20 74 31 29 20 66 72 6f  -c) from t1) fro
6120: 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 7e  m t1 where not ~
6130: 61 3c 66 29 2c 20 2d 31 39 29 2b 74 31 2e 64 2b  a<f), -19)+t1.d+
6140: 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
6150: 4e 4f 54 20 28 31 33 2a 74 31 2e 64 20 62 65 74  NOT (13*t1.d bet
6160: 77 65 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73  ween coalesce((s
6170: 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f 6d 20  elect t1.d from 
6180: 74 31 20 77 68 65 72 65 20 62 20 69 6e 20 28 73  t1 where b in (s
6190: 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f 6d 20  elect t1.d from 
61a0: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
61b0: 63 61 73 65 20 62 2a 74 31 2e 66 2b 74 31 2e 61  case b*t1.f+t1.a
61c0: 2a 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  *+coalesce((sele
61d0: 63 74 20 74 31 2e 61 20 66 72 6f 6d 20 74 31 20  ct t1.a from t1 
61e0: 77 68 65 72 65 20 28 6e 6f 74 20 65 78 69 73 74  where (not exist
61f0: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
6200: 74 31 20 77 68 65 72 65 20 62 2a 74 31 2e 63 3d  t1 where b*t1.c=
6210: 31 33 29 29 29 2c 31 31 29 2b 74 31 2e 65 20 77  13))),11)+t1.e w
6220: 68 65 6e 20 7e 66 20 74 68 65 6e 20 64 2b 63 61  hen ~f then d+ca
6230: 73 65 20 62 20 77 68 65 6e 20 65 20 74 68 65 6e  se b when e then
6240: 20 66 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64   f else t1.e end
6250: 2a 31 33 20 65 6c 73 65 20 66 20 65 6e 64 20 66  *13 else f end f
6260: 72 6f 6d 20 74 31 29 29 2c 31 39 29 20 61 6e 64  rom t1)),19) and
6270: 20 74 31 2e 64 20 61 6e 64 20 31 39 20 62 65 74   t1.d and 19 bet
6280: 77 65 65 6e 20 31 37 20 61 6e 64 20 65 20 61 6e  ween 17 and e an
6290: 64 20 61 3e 61 29 7d 0a 7d 20 7b 35 38 31 7d 0a  d a>a)}.} {581}.
62a0: 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
62b0: 2d 32 2e 33 35 20 7b 0a 20 20 64 62 20 65 76 61  -2.35 {.  db eva
62c0: 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
62d0: 68 65 6e 20 74 31 2e 64 20 6e 6f 74 20 69 6e 20  hen t1.d not in 
62e0: 28 74 31 2e 64 2c 63 6f 61 6c 65 73 63 65 28 28  (t1.d,coalesce((
62f0: 73 65 6c 65 63 74 20 6d 61 78 28 31 31 29 20 66  select max(11) f
6300: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66 20 6e  rom t1 where f n
6310: 6f 74 20 62 65 74 77 65 65 6e 20 31 33 20 61 6e  ot between 13 an
6320: 64 20 63 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  d c-coalesce((se
6330: 6c 65 63 74 20 6d 61 78 28 64 29 20 66 72 6f 6d  lect max(d) from
6340: 20 74 31 20 77 68 65 72 65 20 31 39 20 6e 6f 74   t1 where 19 not
6350: 20 69 6e 20 28 28 74 31 2e 66 29 2c 66 2c 31 31   in ((t1.f),f,11
6360: 29 29 2c 74 31 2e 64 29 2a 74 31 2e 65 20 7c 20  )),t1.d)*t1.e | 
6370: 61 29 2c 31 33 29 2c 20 2d 28 74 31 2e 65 29 29  a),13), -(t1.e))
6380: 20 74 68 65 6e 20 74 31 2e 62 20 77 68 65 6e 20   then t1.b when 
6390: 74 31 2e 66 3d 74 31 2e 61 20 61 6e 64 20 65 78  t1.f=t1.a and ex
63a0: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
63b0: 6f 6d 20 74 31 20 77 68 65 72 65 20 62 20 69 6e  om t1 where b in
63c0: 20 28 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20   (select c from 
63d0: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
63e0: 31 31 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20  11 from t1) and 
63f0: 74 31 2e 63 3d 62 20 61 6e 64 20 6e 6f 74 20 20  t1.c=b and not  
6400: 2d 64 20 69 6e 20 28 74 31 2e 64 2c 74 31 2e 64  -d in (t1.d,t1.d
6410: 2c 74 31 2e 62 29 20 61 6e 64 20 64 20 62 65 74  ,t1.b) and d bet
6420: 77 65 65 6e 20 31 31 20 61 6e 64 20 63 29 20 6f  ween 11 and c) o
6430: 72 20 64 3c 3d 31 37 20 6f 72 20 61 20 6e 6f 74  r d<=17 or a not
6440: 20 69 6e 20 28 65 2c 31 39 2c 28 74 31 2e 62 29   in (e,19,(t1.b)
6450: 29 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20 31  ) then 17 else 1
6460: 31 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48  1 end FROM t1 WH
6470: 45 52 45 20 61 3c 3e 66 2b 66 7d 0a 7d 20 7b 31  ERE a<>f+f}.} {1
6480: 37 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  7}.do_test rande
6490: 78 70 72 2d 32 2e 33 36 20 7b 0a 20 20 64 62 20  xpr-2.36 {.  db 
64a0: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73  eval {SELECT cas
64b0: 65 20 77 68 65 6e 20 74 31 2e 64 20 6e 6f 74 20  e when t1.d not 
64c0: 69 6e 20 28 74 31 2e 64 2c 63 6f 61 6c 65 73 63  in (t1.d,coalesc
64d0: 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 31  e((select max(11
64e0: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
64f0: 66 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 33  f not between 13
6500: 20 61 6e 64 20 63 2d 63 6f 61 6c 65 73 63 65 28   and c-coalesce(
6510: 28 73 65 6c 65 63 74 20 6d 61 78 28 64 29 20 66  (select max(d) f
6520: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 39 20  rom t1 where 19 
6530: 6e 6f 74 20 69 6e 20 28 28 74 31 2e 66 29 2c 66  not in ((t1.f),f
6540: 2c 31 31 29 29 2c 74 31 2e 64 29 2a 74 31 2e 65  ,11)),t1.d)*t1.e
6550: 20 7c 20 61 29 2c 31 33 29 2c 20 2d 28 74 31 2e   | a),13), -(t1.
6560: 65 29 29 20 74 68 65 6e 20 74 31 2e 62 20 77 68  e)) then t1.b wh
6570: 65 6e 20 74 31 2e 66 3d 74 31 2e 61 20 61 6e 64  en t1.f=t1.a and
6580: 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
6590: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62   from t1 where b
65a0: 20 69 6e 20 28 73 65 6c 65 63 74 20 63 20 66 72   in (select c fr
65b0: 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
65c0: 63 74 20 31 31 20 66 72 6f 6d 20 74 31 29 20 61  ct 11 from t1) a
65d0: 6e 64 20 74 31 2e 63 3d 62 20 61 6e 64 20 6e 6f  nd t1.c=b and no
65e0: 74 20 20 2d 64 20 69 6e 20 28 74 31 2e 64 2c 74  t  -d in (t1.d,t
65f0: 31 2e 64 2c 74 31 2e 62 29 20 61 6e 64 20 64 20  1.d,t1.b) and d 
6600: 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20 63  between 11 and c
6610: 29 20 6f 72 20 64 3c 3d 31 37 20 6f 72 20 61 20  ) or d<=17 or a 
6620: 6e 6f 74 20 69 6e 20 28 65 2c 31 39 2c 28 74 31  not in (e,19,(t1
6630: 2e 62 29 29 20 74 68 65 6e 20 31 37 20 65 6c 73  .b)) then 17 els
6640: 65 20 31 31 20 65 6e 64 20 46 52 4f 4d 20 74 31  e 11 end FROM t1
6650: 20 57 48 45 52 45 20 4e 4f 54 20 28 61 3c 3e 66   WHERE NOT (a<>f
6660: 2b 66 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  +f)}.} {}.do_tes
6670: 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 33 37 20  t randexpr-2.37 
6680: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
6690: 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 74 31  ECT case when t1
66a0: 2e 64 20 6e 6f 74 20 69 6e 20 28 74 31 2e 64 2c  .d not in (t1.d,
66b0: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
66c0: 20 6d 61 78 28 31 31 29 20 66 72 6f 6d 20 74 31   max(11) from t1
66d0: 20 77 68 65 72 65 20 66 20 6e 6f 74 20 62 65 74   where f not bet
66e0: 77 65 65 6e 20 31 33 20 61 6e 64 20 63 2d 63 6f  ween 13 and c-co
66f0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
6700: 61 78 28 64 29 20 66 72 6f 6d 20 74 31 20 77 68  ax(d) from t1 wh
6710: 65 72 65 20 31 39 20 6e 6f 74 20 69 6e 20 28 28  ere 19 not in ((
6720: 74 31 2e 66 29 2c 66 2c 31 31 29 29 2c 74 31 2e  t1.f),f,11)),t1.
6730: 64 29 2a 74 31 2e 65 20 26 20 61 29 2c 31 33 29  d)*t1.e & a),13)
6740: 2c 20 2d 28 74 31 2e 65 29 29 20 74 68 65 6e 20  , -(t1.e)) then 
6750: 74 31 2e 62 20 77 68 65 6e 20 74 31 2e 66 3d 74  t1.b when t1.f=t
6760: 31 2e 61 20 61 6e 64 20 65 78 69 73 74 73 28 73  1.a and exists(s
6770: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
6780: 77 68 65 72 65 20 62 20 69 6e 20 28 73 65 6c 65  where b in (sele
6790: 63 74 20 63 20 66 72 6f 6d 20 74 31 20 75 6e 69  ct c from t1 uni
67a0: 6f 6e 20 73 65 6c 65 63 74 20 31 31 20 66 72 6f  on select 11 fro
67b0: 6d 20 74 31 29 20 61 6e 64 20 74 31 2e 63 3d 62  m t1) and t1.c=b
67c0: 20 61 6e 64 20 6e 6f 74 20 20 2d 64 20 69 6e 20   and not  -d in 
67d0: 28 74 31 2e 64 2c 74 31 2e 64 2c 74 31 2e 62 29  (t1.d,t1.d,t1.b)
67e0: 20 61 6e 64 20 64 20 62 65 74 77 65 65 6e 20 31   and d between 1
67f0: 31 20 61 6e 64 20 63 29 20 6f 72 20 64 3c 3d 31  1 and c) or d<=1
6800: 37 20 6f 72 20 61 20 6e 6f 74 20 69 6e 20 28 65  7 or a not in (e
6810: 2c 31 39 2c 28 74 31 2e 62 29 29 20 74 68 65 6e  ,19,(t1.b)) then
6820: 20 31 37 20 65 6c 73 65 20 31 31 20 65 6e 64 20   17 else 11 end 
6830: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3c  FROM t1 WHERE a<
6840: 3e 66 2b 66 7d 0a 7d 20 7b 31 37 7d 0a 64 6f 5f  >f+f}.} {17}.do_
6850: 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
6860: 33 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  38 {.  db eval {
6870: 53 45 4c 45 43 54 20 63 61 73 65 20 31 33 20 77  SELECT case 13 w
6880: 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65  hen coalesce((se
6890: 6c 65 63 74 20 74 31 2e 61 2a 64 2b 2b 2b 62 20  lect t1.a*d+++b 
68a0: 7c 20 62 2b 28 61 62 73 28 74 31 2e 65 29 2f 61  | b+(abs(t1.e)/a
68b0: 62 73 28 63 29 29 2b 28 73 65 6c 65 63 74 20 63  bs(c))+(select c
68c0: 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
68d0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e   from t1 where n
68e0: 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
68f0: 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
6900: 20 31 37 20 69 6e 20 28 73 65 6c 65 63 74 20 64   17 in (select d
6910: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
6920: 65 6c 65 63 74 20 74 31 2e 66 20 66 72 6f 6d 20  elect t1.f from 
6930: 74 31 29 29 29 2c 74 31 2e 62 29 20 74 68 65 6e  t1))),t1.b) then
6940: 20 7e 74 31 2e 63 2d 28 73 65 6c 65 63 74 20 63   ~t1.c-(select c
6950: 61 73 65 20 6d 69 6e 28 63 61 73 65 20 77 68 65  ase min(case whe
6960: 6e 20 31 37 20 6e 6f 74 20 69 6e 20 28 31 39 2c  n 17 not in (19,
6970: 31 39 2c 74 31 2e 63 29 20 74 68 65 6e 20 63 20  19,t1.c) then c 
6980: 77 68 65 6e 20 31 33 20 62 65 74 77 65 65 6e 20  when 13 between 
6990: 28 31 39 29 20 61 6e 64 20 74 31 2e 65 20 74 68  (19) and t1.e th
69a0: 65 6e 20 65 20 65 6c 73 65 20 31 39 20 65 6e 64  en e else 19 end
69b0: 2d 31 39 29 20 77 68 65 6e 20 63 61 73 74 28 61  -19) when cast(a
69c0: 76 67 28 20 2d 31 31 29 20 41 53 20 69 6e 74 65  vg( -11) AS inte
69d0: 67 65 72 29 20 74 68 65 6e 20 6d 61 78 28 74 31  ger) then max(t1
69e0: 2e 63 29 2a 20 2d 6d 69 6e 28 74 31 2e 64 29 20  .c)* -min(t1.d) 
69f0: 65 6c 73 65 20 28 63 6f 75 6e 74 28 64 69 73 74  else (count(dist
6a00: 69 6e 63 74 20 74 31 2e 66 29 29 20 65 6e 64 20  inct t1.f)) end 
6a10: 66 72 6f 6d 20 74 31 29 20 7c 20 2b 74 31 2e 66  from t1) | +t1.f
6a20: 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 20 46   else t1.c end F
6a30: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63 6f 61  ROM t1 WHERE coa
6a40: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
6a50: 78 28 74 31 2e 63 29 20 66 72 6f 6d 20 74 31 20  x(t1.c) from t1 
6a60: 77 68 65 72 65 20 28 61 62 73 28 74 31 2e 62 29  where (abs(t1.b)
6a70: 2f 61 62 73 28 61 29 29 3e 3d 28 65 29 29 2c 2b  /abs(a))>=(e)),+
6a80: 20 2d 63 61 73 65 20 77 68 65 6e 20 28 31 31 3c   -case when (11<
6a90: 31 37 29 20 74 68 65 6e 20 74 31 2e 61 20 77 68  17) then t1.a wh
6aa0: 65 6e 20 74 31 2e 61 2a 65 3d 31 39 2a 20 2d 31  en t1.a*e=19* -1
6ab0: 31 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74 73  1 and not exists
6ac0: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
6ad0: 31 20 77 68 65 72 65 20 20 2d 74 31 2e 64 20 6e  1 where  -t1.d n
6ae0: 6f 74 20 62 65 74 77 65 65 6e 20 63 6f 61 6c 65  ot between coale
6af0: 73 63 65 28 28 73 65 6c 65 63 74 20 61 20 66 72  sce((select a fr
6b00: 6f 6d 20 74 31 20 77 68 65 72 65 20 20 2d 74 31  om t1 where  -t1
6b10: 2e 63 3e 74 31 2e 65 29 2c 20 2d 31 39 29 20 61  .c>t1.e), -19) a
6b20: 6e 64 20 74 31 2e 64 20 61 6e 64 20 6e 6f 74 20  nd t1.d and not 
6b30: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
6b40: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74  from t1 where (t
6b50: 31 2e 65 29 20 69 6e 20 28 73 65 6c 65 63 74 20  1.e) in (select 
6b60: 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  d from t1 union 
6b70: 73 65 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d  select t1.c from
6b80: 20 74 31 29 29 29 20 74 68 65 6e 20 63 20 65 6c   t1))) then c el
6b90: 73 65 20 61 20 65 6e 64 2a 61 29 2d 74 31 2e 62  se a end*a)-t1.b
6ba0: 2a 20 2d 28 62 29 20 69 6e 20 28 65 2c 64 2c 62  * -(b) in (e,d,b
6bb0: 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  )}.} {}.do_test 
6bc0: 72 61 6e 64 65 78 70 72 2d 32 2e 33 39 20 7b 0a  randexpr-2.39 {.
6bd0: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
6be0: 54 20 63 61 73 65 20 31 33 20 77 68 65 6e 20 63  T case 13 when c
6bf0: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
6c00: 74 31 2e 61 2a 64 2b 2b 2b 62 20 7c 20 62 2b 28  t1.a*d+++b | b+(
6c10: 61 62 73 28 74 31 2e 65 29 2f 61 62 73 28 63 29  abs(t1.e)/abs(c)
6c20: 29 2b 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  )+(select count(
6c30: 2a 29 20 66 72 6f 6d 20 74 31 29 20 66 72 6f 6d  *) from t1) from
6c40: 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78   t1 where not ex
6c50: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
6c60: 6f 6d 20 74 31 20 77 68 65 72 65 20 31 37 20 69  om t1 where 17 i
6c70: 6e 20 28 73 65 6c 65 63 74 20 64 20 66 72 6f 6d  n (select d from
6c80: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
6c90: 20 74 31 2e 66 20 66 72 6f 6d 20 74 31 29 29 29   t1.f from t1)))
6ca0: 2c 74 31 2e 62 29 20 74 68 65 6e 20 7e 74 31 2e  ,t1.b) then ~t1.
6cb0: 63 2d 28 73 65 6c 65 63 74 20 63 61 73 65 20 6d  c-(select case m
6cc0: 69 6e 28 63 61 73 65 20 77 68 65 6e 20 31 37 20  in(case when 17 
6cd0: 6e 6f 74 20 69 6e 20 28 31 39 2c 31 39 2c 74 31  not in (19,19,t1
6ce0: 2e 63 29 20 74 68 65 6e 20 63 20 77 68 65 6e 20  .c) then c when 
6cf0: 31 33 20 62 65 74 77 65 65 6e 20 28 31 39 29 20  13 between (19) 
6d00: 61 6e 64 20 74 31 2e 65 20 74 68 65 6e 20 65 20  and t1.e then e 
6d10: 65 6c 73 65 20 31 39 20 65 6e 64 2d 31 39 29 20  else 19 end-19) 
6d20: 77 68 65 6e 20 63 61 73 74 28 61 76 67 28 20 2d  when cast(avg( -
6d30: 31 31 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  11) AS integer) 
6d40: 74 68 65 6e 20 6d 61 78 28 74 31 2e 63 29 2a 20  then max(t1.c)* 
6d50: 2d 6d 69 6e 28 74 31 2e 64 29 20 65 6c 73 65 20  -min(t1.d) else 
6d60: 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  (count(distinct 
6d70: 74 31 2e 66 29 29 20 65 6e 64 20 66 72 6f 6d 20  t1.f)) end from 
6d80: 74 31 29 20 7c 20 2b 74 31 2e 66 20 65 6c 73 65  t1) | +t1.f else
6d90: 20 74 31 2e 63 20 65 6e 64 20 46 52 4f 4d 20 74   t1.c end FROM t
6da0: 31 20 57 48 45 52 45 20 4e 4f 54 20 28 63 6f 61  1 WHERE NOT (coa
6db0: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
6dc0: 78 28 74 31 2e 63 29 20 66 72 6f 6d 20 74 31 20  x(t1.c) from t1 
6dd0: 77 68 65 72 65 20 28 61 62 73 28 74 31 2e 62 29  where (abs(t1.b)
6de0: 2f 61 62 73 28 61 29 29 3e 3d 28 65 29 29 2c 2b  /abs(a))>=(e)),+
6df0: 20 2d 63 61 73 65 20 77 68 65 6e 20 28 31 31 3c   -case when (11<
6e00: 31 37 29 20 74 68 65 6e 20 74 31 2e 61 20 77 68  17) then t1.a wh
6e10: 65 6e 20 74 31 2e 61 2a 65 3d 31 39 2a 20 2d 31  en t1.a*e=19* -1
6e20: 31 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74 73  1 and not exists
6e30: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
6e40: 31 20 77 68 65 72 65 20 20 2d 74 31 2e 64 20 6e  1 where  -t1.d n
6e50: 6f 74 20 62 65 74 77 65 65 6e 20 63 6f 61 6c 65  ot between coale
6e60: 73 63 65 28 28 73 65 6c 65 63 74 20 61 20 66 72  sce((select a fr
6e70: 6f 6d 20 74 31 20 77 68 65 72 65 20 20 2d 74 31  om t1 where  -t1
6e80: 2e 63 3e 74 31 2e 65 29 2c 20 2d 31 39 29 20 61  .c>t1.e), -19) a
6e90: 6e 64 20 74 31 2e 64 20 61 6e 64 20 6e 6f 74 20  nd t1.d and not 
6ea0: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
6eb0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74  from t1 where (t
6ec0: 31 2e 65 29 20 69 6e 20 28 73 65 6c 65 63 74 20  1.e) in (select 
6ed0: 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  d from t1 union 
6ee0: 73 65 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d  select t1.c from
6ef0: 20 74 31 29 29 29 20 74 68 65 6e 20 63 20 65 6c   t1))) then c el
6f00: 73 65 20 61 20 65 6e 64 2a 61 29 2d 74 31 2e 62  se a end*a)-t1.b
6f10: 2a 20 2d 28 62 29 20 69 6e 20 28 65 2c 64 2c 62  * -(b) in (e,d,b
6f20: 29 29 7d 0a 7d 20 7b 33 30 30 7d 0a 64 6f 5f 74  ))}.} {300}.do_t
6f30: 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 34  est randexpr-2.4
6f40: 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  0 {.  db eval {S
6f50: 45 4c 45 43 54 20 63 61 73 65 20 31 33 20 77 68  ELECT case 13 wh
6f60: 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
6f70: 65 63 74 20 74 31 2e 61 2a 64 2b 2b 2b 62 20 26  ect t1.a*d+++b &
6f80: 20 62 2b 28 61 62 73 28 74 31 2e 65 29 2f 61 62   b+(abs(t1.e)/ab
6f90: 73 28 63 29 29 2b 28 73 65 6c 65 63 74 20 63 6f  s(c))+(select co
6fa0: 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 20  unt(*) from t1) 
6fb0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f  from t1 where no
6fc0: 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
6fd0: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
6fe0: 31 37 20 69 6e 20 28 73 65 6c 65 63 74 20 64 20  17 in (select d 
6ff0: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
7000: 6c 65 63 74 20 74 31 2e 66 20 66 72 6f 6d 20 74  lect t1.f from t
7010: 31 29 29 29 2c 74 31 2e 62 29 20 74 68 65 6e 20  1))),t1.b) then 
7020: 7e 74 31 2e 63 2d 28 73 65 6c 65 63 74 20 63 61  ~t1.c-(select ca
7030: 73 65 20 6d 69 6e 28 63 61 73 65 20 77 68 65 6e  se min(case when
7040: 20 31 37 20 6e 6f 74 20 69 6e 20 28 31 39 2c 31   17 not in (19,1
7050: 39 2c 74 31 2e 63 29 20 74 68 65 6e 20 63 20 77  9,t1.c) then c w
7060: 68 65 6e 20 31 33 20 62 65 74 77 65 65 6e 20 28  hen 13 between (
7070: 31 39 29 20 61 6e 64 20 74 31 2e 65 20 74 68 65  19) and t1.e the
7080: 6e 20 65 20 65 6c 73 65 20 31 39 20 65 6e 64 2d  n e else 19 end-
7090: 31 39 29 20 77 68 65 6e 20 63 61 73 74 28 61 76  19) when cast(av
70a0: 67 28 20 2d 31 31 29 20 41 53 20 69 6e 74 65 67  g( -11) AS integ
70b0: 65 72 29 20 74 68 65 6e 20 6d 61 78 28 74 31 2e  er) then max(t1.
70c0: 63 29 2a 20 2d 6d 69 6e 28 74 31 2e 64 29 20 65  c)* -min(t1.d) e
70d0: 6c 73 65 20 28 63 6f 75 6e 74 28 64 69 73 74 69  lse (count(disti
70e0: 6e 63 74 20 74 31 2e 66 29 29 20 65 6e 64 20 66  nct t1.f)) end f
70f0: 72 6f 6d 20 74 31 29 20 26 20 2b 74 31 2e 66 20  rom t1) & +t1.f 
7100: 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 20 46 52  else t1.c end FR
7110: 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
7120: 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
7130: 74 20 6d 61 78 28 74 31 2e 63 29 20 66 72 6f 6d  t max(t1.c) from
7140: 20 74 31 20 77 68 65 72 65 20 28 61 62 73 28 74   t1 where (abs(t
7150: 31 2e 62 29 2f 61 62 73 28 61 29 29 3e 3d 28 65  1.b)/abs(a))>=(e
7160: 29 29 2c 2b 20 2d 63 61 73 65 20 77 68 65 6e 20  )),+ -case when 
7170: 28 31 31 3c 31 37 29 20 74 68 65 6e 20 74 31 2e  (11<17) then t1.
7180: 61 20 77 68 65 6e 20 74 31 2e 61 2a 65 3d 31 39  a when t1.a*e=19
7190: 2a 20 2d 31 31 20 61 6e 64 20 6e 6f 74 20 65 78  * -11 and not ex
71a0: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
71b0: 6f 6d 20 74 31 20 77 68 65 72 65 20 20 2d 74 31  om t1 where  -t1
71c0: 2e 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63  .d not between c
71d0: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
71e0: 61 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  a from t1 where 
71f0: 20 2d 74 31 2e 63 3e 74 31 2e 65 29 2c 20 2d 31   -t1.c>t1.e), -1
7200: 39 29 20 61 6e 64 20 74 31 2e 64 20 61 6e 64 20  9) and t1.d and 
7210: 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
7220: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
7230: 65 20 28 74 31 2e 65 29 20 69 6e 20 28 73 65 6c  e (t1.e) in (sel
7240: 65 63 74 20 64 20 66 72 6f 6d 20 74 31 20 75 6e  ect d from t1 un
7250: 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 63 20  ion select t1.c 
7260: 66 72 6f 6d 20 74 31 29 29 29 20 74 68 65 6e 20  from t1))) then 
7270: 63 20 65 6c 73 65 20 61 20 65 6e 64 2a 61 29 2d  c else a end*a)-
7280: 74 31 2e 62 2a 20 2d 28 62 29 20 69 6e 20 28 65  t1.b* -(b) in (e
7290: 2c 64 2c 62 29 29 7d 0a 7d 20 7b 33 30 30 7d 0a  ,d,b))}.} {300}.
72a0: 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
72b0: 2d 32 2e 34 31 20 7b 0a 20 20 64 62 20 65 76 61  -2.41 {.  db eva
72c0: 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
72d0: 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73  hen not exists(s
72e0: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
72f0: 77 68 65 72 65 20 28 20 2d 63 61 73 65 20 77 68  where ( -case wh
7300: 65 6e 20 62 20 69 6e 20 28 28 31 31 29 2c 63 6f  en b in ((11),co
7310: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 66  alesce((select f
7320: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
7330: 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
7340: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
7350: 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  e coalesce((sele
7360: 63 74 20 28 74 31 2e 61 29 20 66 72 6f 6d 20 74  ct (t1.a) from t
7370: 31 20 77 68 65 72 65 20 65 3c 3d 61 29 2c 31 31  1 where e<=a),11
7380: 29 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e  ) in (select t1.
7390: 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  f from t1 union 
73a0: 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74  select 13 from t
73b0: 31 29 29 20 6f 72 20 74 31 2e 61 3e 64 29 29 2c  1)) or t1.a>d)),
73c0: 74 31 2e 61 29 2c 74 31 2e 65 29 20 6f 72 20 6e  t1.a),t1.e) or n
73d0: 6f 74 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  ot not exists(se
73e0: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
73f0: 68 65 72 65 20 28 74 31 2e 66 3c 3d 28 74 31 2e  here (t1.f<=(t1.
7400: 61 29 29 29 20 74 68 65 6e 20 65 2a 74 31 2e 61  a))) then e*t1.a
7410: 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 29 3c   else t1.c end)<
7420: 3d 64 20 61 6e 64 20 6e 6f 74 20 28 74 31 2e 65  =d and not (t1.e
7430: 29 3e 3d 74 31 2e 65 29 20 74 68 65 6e 20 63 6f  )>=t1.e) then co
7440: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
7450: 61 78 28 20 2d 74 31 2e 65 29 20 66 72 6f 6d 20  ax( -t1.e) from 
7460: 74 31 20 77 68 65 72 65 20 74 31 2e 64 20 62 65  t1 where t1.d be
7470: 74 77 65 65 6e 20 74 31 2e 62 20 61 6e 64 20 74  tween t1.b and t
7480: 31 2e 63 29 2c 74 31 2e 64 29 20 65 6c 73 65 20  1.c),t1.d) else 
7490: 74 31 2e 63 20 65 6e 64 2b 31 33 2a 31 33 20 46  t1.c end+13*13 F
74a0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e  ROM t1 WHERE t1.
74b0: 62 3d 74 31 2e 66 20 7c 20 31 39 2b 63 6f 61 6c  b=t1.f | 19+coal
74c0: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
74d0: 28 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  (a) from t1 wher
74e0: 65 20 63 61 73 65 20 74 31 2e 65 20 77 68 65 6e  e case t1.e when
74f0: 20 63 61 73 65 20 77 68 65 6e 20 28 31 31 3c 3d   case when (11<=
7500: 31 31 20 7c 20 74 31 2e 66 20 61 6e 64 20 62 3e  11 | t1.f and b>
7510: 3d 62 20 6f 72 20 74 31 2e 66 3c 3d 61 29 20 74  =b or t1.f<=a) t
7520: 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 63 20  hen case when c 
7530: 62 65 74 77 65 65 6e 20 74 31 2e 65 20 61 6e 64  between t1.e and
7540: 20 62 20 74 68 65 6e 20 65 20 65 6c 73 65 20 2b   b then e else +
7550: 74 31 2e 66 20 65 6e 64 20 65 6c 73 65 20 20 2d  t1.f end else  -
7560: 74 31 2e 63 20 65 6e 64 20 74 68 65 6e 20 74 31  t1.c end then t1
7570: 2e 62 20 65 6c 73 65 20 31 33 20 65 6e 64 2a 31  .b else 13 end*1
7580: 33 20 62 65 74 77 65 65 6e 20 74 31 2e 66 20 61  3 between t1.f a
7590: 6e 64 20 63 20 61 6e 64 20 65 78 69 73 74 73 28  nd c and exists(
75a0: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
75b0: 20 77 68 65 72 65 20 28 62 20 6e 6f 74 20 62 65   where (b not be
75c0: 74 77 65 65 6e 20 31 31 20 61 6e 64 20 61 29 29  tween 11 and a))
75d0: 20 61 6e 64 20 66 3e 3d 74 31 2e 62 29 2c 20 2d   and f>=t1.b), -
75e0: 74 31 2e 62 29 2d 63 7d 0a 7d 20 7b 7d 0a 64 6f  t1.b)-c}.} {}.do
75f0: 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
7600: 2e 34 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .42 {.  db eval 
7610: 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65  {SELECT case whe
7620: 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  n not exists(sel
7630: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
7640: 65 72 65 20 28 20 2d 63 61 73 65 20 77 68 65 6e  ere ( -case when
7650: 20 62 20 69 6e 20 28 28 31 31 29 2c 63 6f 61 6c   b in ((11),coal
7660: 65 73 63 65 28 28 73 65 6c 65 63 74 20 66 20 66  esce((select f f
7670: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 6e 6f  rom t1 where (no
7680: 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
7690: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
76a0: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
76b0: 20 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 20   (t1.a) from t1 
76c0: 77 68 65 72 65 20 65 3c 3d 61 29 2c 31 31 29 20  where e<=a),11) 
76d0: 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 66 20  in (select t1.f 
76e0: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
76f0: 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31 29  lect 13 from t1)
7700: 29 20 6f 72 20 74 31 2e 61 3e 64 29 29 2c 74 31  ) or t1.a>d)),t1
7710: 2e 61 29 2c 74 31 2e 65 29 20 6f 72 20 6e 6f 74  .a),t1.e) or not
7720: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
7730: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
7740: 72 65 20 28 74 31 2e 66 3c 3d 28 74 31 2e 61 29  re (t1.f<=(t1.a)
7750: 29 29 20 74 68 65 6e 20 65 2a 74 31 2e 61 20 65  )) then e*t1.a e
7760: 6c 73 65 20 74 31 2e 63 20 65 6e 64 29 3c 3d 64  lse t1.c end)<=d
7770: 20 61 6e 64 20 6e 6f 74 20 28 74 31 2e 65 29 3e   and not (t1.e)>
7780: 3d 74 31 2e 65 29 20 74 68 65 6e 20 63 6f 61 6c  =t1.e) then coal
7790: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
77a0: 28 20 2d 74 31 2e 65 29 20 66 72 6f 6d 20 74 31  ( -t1.e) from t1
77b0: 20 77 68 65 72 65 20 74 31 2e 64 20 62 65 74 77   where t1.d betw
77c0: 65 65 6e 20 74 31 2e 62 20 61 6e 64 20 74 31 2e  een t1.b and t1.
77d0: 63 29 2c 74 31 2e 64 29 20 65 6c 73 65 20 74 31  c),t1.d) else t1
77e0: 2e 63 20 65 6e 64 2b 31 33 2a 31 33 20 46 52 4f  .c end+13*13 FRO
77f0: 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
7800: 74 31 2e 62 3d 74 31 2e 66 20 7c 20 31 39 2b 63  t1.b=t1.f | 19+c
7810: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
7820: 6d 61 78 28 61 29 20 66 72 6f 6d 20 74 31 20 77  max(a) from t1 w
7830: 68 65 72 65 20 63 61 73 65 20 74 31 2e 65 20 77  here case t1.e w
7840: 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 28 31  hen case when (1
7850: 31 3c 3d 31 31 20 7c 20 74 31 2e 66 20 61 6e 64  1<=11 | t1.f and
7860: 20 62 3e 3d 62 20 6f 72 20 74 31 2e 66 3c 3d 61   b>=b or t1.f<=a
7870: 29 20 74 68 65 6e 20 63 61 73 65 20 77 68 65 6e  ) then case when
7880: 20 63 20 62 65 74 77 65 65 6e 20 74 31 2e 65 20   c between t1.e 
7890: 61 6e 64 20 62 20 74 68 65 6e 20 65 20 65 6c 73  and b then e els
78a0: 65 20 2b 74 31 2e 66 20 65 6e 64 20 65 6c 73 65  e +t1.f end else
78b0: 20 20 2d 74 31 2e 63 20 65 6e 64 20 74 68 65 6e    -t1.c end then
78c0: 20 74 31 2e 62 20 65 6c 73 65 20 31 33 20 65 6e   t1.b else 13 en
78d0: 64 2a 31 33 20 62 65 74 77 65 65 6e 20 74 31 2e  d*13 between t1.
78e0: 66 20 61 6e 64 20 63 20 61 6e 64 20 65 78 69 73  f and c and exis
78f0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
7900: 20 74 31 20 77 68 65 72 65 20 28 62 20 6e 6f 74   t1 where (b not
7910: 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20   between 11 and 
7920: 61 29 29 20 61 6e 64 20 66 3e 3d 74 31 2e 62 29  a)) and f>=t1.b)
7930: 2c 20 2d 74 31 2e 62 29 2d 63 29 7d 0a 7d 20 7b  , -t1.b)-c)}.} {
7940: 35 36 39 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  569}.do_test ran
7950: 64 65 78 70 72 2d 32 2e 34 33 20 7b 0a 20 20 64  dexpr-2.43 {.  d
7960: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
7970: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
7980: 63 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  c from t1 where 
7990: 74 31 2e 61 3d 63 61 73 65 20 77 68 65 6e 20 61  t1.a=case when a
79a0: 3d 74 31 2e 62 2b 7e 28 73 65 6c 65 63 74 20 63  =t1.b+~(select c
79b0: 61 73 65 20 63 61 73 74 28 61 76 67 28 20 2d 62  ase cast(avg( -b
79c0: 2a 31 33 29 20 41 53 20 69 6e 74 65 67 65 72 29  *13) AS integer)
79d0: 20 77 68 65 6e 20 6d 61 78 28 66 2a 31 33 2a 20   when max(f*13* 
79e0: 2d 63 29 20 74 68 65 6e 20 28 63 61 73 74 28 61  -c) then (cast(a
79f0: 76 67 28 74 31 2e 64 29 20 41 53 20 69 6e 74 65  vg(t1.d) AS inte
7a00: 67 65 72 29 29 20 65 6c 73 65 20 63 6f 75 6e 74  ger)) else count
7a10: 28 64 69 73 74 69 6e 63 74 20 74 31 2e 65 2a 63  (distinct t1.e*c
7a20: 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 20 74  ) end from t1) t
7a30: 68 65 6e 20 74 31 2e 64 20 7c 20 74 31 2e 61 20  hen t1.d | t1.a 
7a40: 65 6c 73 65 20 63 61 73 65 20 77 68 65 6e 20 74  else case when t
7a50: 31 2e 61 2d 62 20 6e 6f 74 20 62 65 74 77 65 65  1.a-b not betwee
7a60: 6e 20 65 20 61 6e 64 20 20 2d 74 31 2e 63 2a 20  n e and  -t1.c* 
7a70: 2d 31 33 20 74 68 65 6e 20 31 39 20 65 6c 73 65  -13 then 19 else
7a80: 20 64 20 65 6e 64 20 65 6e 64 29 2c 64 29 20 7c   d end end),d) |
7a90: 20 74 31 2e 64 20 46 52 4f 4d 20 74 31 20 57 48   t1.d FROM t1 WH
7aa0: 45 52 45 20 2b 31 33 20 69 6e 20 28 66 2c 74 31  ERE +13 in (f,t1
7ab0: 2e 66 2b 74 31 2e 66 2c 20 2d 63 6f 61 6c 65 73  .f+t1.f, -coales
7ac0: 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74  ce((select max(t
7ad0: 31 2e 66 29 20 66 72 6f 6d 20 74 31 20 77 68 65  1.f) from t1 whe
7ae0: 72 65 20 28 74 31 2e 61 2d 31 33 29 3c 3d 28 63  re (t1.a-13)<=(c
7af0: 61 73 65 20 28 73 65 6c 65 63 74 20 63 6f 75 6e  ase (select coun
7b00: 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 20 77 68  t(*) from t1) wh
7b10: 65 6e 20 31 33 20 74 68 65 6e 20 20 2d 2b 74 31  en 13 then  -+t1
7b20: 2e 65 20 7c 20 20 2d 28 63 6f 61 6c 65 73 63 65  .e |  -(coalesce
7b30: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 7e 63 6f  ((select max(~co
7b40: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 28  alesce((select (
7b50: 20 2d 31 33 29 20 66 72 6f 6d 20 74 31 20 77 68   -13) from t1 wh
7b60: 65 72 65 20 20 2d 63 3c 28 31 31 29 20 6f 72 20  ere  -c<(11) or 
7b70: 31 31 20 62 65 74 77 65 65 6e 20 61 20 61 6e 64  11 between a and
7b80: 20 74 31 2e 64 29 2c 31 33 29 2a 74 31 2e 64 29   t1.d),13)*t1.d)
7b90: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 64   from t1 where d
7ba0: 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 62 20 61   not between b a
7bb0: 6e 64 20 31 33 29 2c 31 39 29 29 2a 74 31 2e 61  nd 13),19))*t1.a
7bc0: 20 65 6c 73 65 20 31 33 20 65 6e 64 2d 62 2d 63   else 13 end-b-c
7bd0: 29 29 2c 74 31 2e 65 29 2d 31 39 29 7d 0a 7d 20  )),t1.e)-19)}.} 
7be0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
7bf0: 78 70 72 2d 32 2e 34 34 20 7b 0a 20 20 64 62 20  xpr-2.44 {.  db 
7c00: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61  eval {SELECT coa
7c10: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 20  lesce((select c 
7c20: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
7c30: 2e 61 3d 63 61 73 65 20 77 68 65 6e 20 61 3d 74  .a=case when a=t
7c40: 31 2e 62 2b 7e 28 73 65 6c 65 63 74 20 63 61 73  1.b+~(select cas
7c50: 65 20 63 61 73 74 28 61 76 67 28 20 2d 62 2a 31  e cast(avg( -b*1
7c60: 33 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 77  3) AS integer) w
7c70: 68 65 6e 20 6d 61 78 28 66 2a 31 33 2a 20 2d 63  hen max(f*13* -c
7c80: 29 20 74 68 65 6e 20 28 63 61 73 74 28 61 76 67  ) then (cast(avg
7c90: 28 74 31 2e 64 29 20 41 53 20 69 6e 74 65 67 65  (t1.d) AS intege
7ca0: 72 29 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 64  r)) else count(d
7cb0: 69 73 74 69 6e 63 74 20 74 31 2e 65 2a 63 29 20  istinct t1.e*c) 
7cc0: 65 6e 64 20 66 72 6f 6d 20 74 31 29 20 74 68 65  end from t1) the
7cd0: 6e 20 74 31 2e 64 20 7c 20 74 31 2e 61 20 65 6c  n t1.d | t1.a el
7ce0: 73 65 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e  se case when t1.
7cf0: 61 2d 62 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  a-b not between 
7d00: 65 20 61 6e 64 20 20 2d 74 31 2e 63 2a 20 2d 31  e and  -t1.c* -1
7d10: 33 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20 64  3 then 19 else d
7d20: 20 65 6e 64 20 65 6e 64 29 2c 64 29 20 7c 20 74   end end),d) | t
7d30: 31 2e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  1.d FROM t1 WHER
7d40: 45 20 4e 4f 54 20 28 2b 31 33 20 69 6e 20 28 66  E NOT (+13 in (f
7d50: 2c 74 31 2e 66 2b 74 31 2e 66 2c 20 2d 63 6f 61  ,t1.f+t1.f, -coa
7d60: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
7d70: 78 28 74 31 2e 66 29 20 66 72 6f 6d 20 74 31 20  x(t1.f) from t1 
7d80: 77 68 65 72 65 20 28 74 31 2e 61 2d 31 33 29 3c  where (t1.a-13)<
7d90: 3d 28 63 61 73 65 20 28 73 65 6c 65 63 74 20 63  =(case (select c
7da0: 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
7db0: 20 77 68 65 6e 20 31 33 20 74 68 65 6e 20 20 2d   when 13 then  -
7dc0: 2b 74 31 2e 65 20 7c 20 20 2d 28 63 6f 61 6c 65  +t1.e |  -(coale
7dd0: 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
7de0: 7e 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  ~coalesce((selec
7df0: 74 20 28 20 2d 31 33 29 20 66 72 6f 6d 20 74 31  t ( -13) from t1
7e00: 20 77 68 65 72 65 20 20 2d 63 3c 28 31 31 29 20   where  -c<(11) 
7e10: 6f 72 20 31 31 20 62 65 74 77 65 65 6e 20 61 20  or 11 between a 
7e20: 61 6e 64 20 74 31 2e 64 29 2c 31 33 29 2a 74 31  and t1.d),13)*t1
7e30: 2e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .d) from t1 wher
7e40: 65 20 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  e d not between 
7e50: 62 20 61 6e 64 20 31 33 29 2c 31 39 29 29 2a 74  b and 13),19))*t
7e60: 31 2e 61 20 65 6c 73 65 20 31 33 20 65 6e 64 2d  1.a else 13 end-
7e70: 62 2d 63 29 29 2c 74 31 2e 65 29 2d 31 39 29 29  b-c)),t1.e)-19))
7e80: 7d 0a 7d 20 7b 34 30 30 7d 0a 64 6f 5f 74 65 73  }.} {400}.do_tes
7e90: 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 34 35 20  t randexpr-2.45 
7ea0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
7eb0: 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ECT coalesce((se
7ec0: 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 20 77  lect c from t1 w
7ed0: 68 65 72 65 20 74 31 2e 61 3d 63 61 73 65 20 77  here t1.a=case w
7ee0: 68 65 6e 20 61 3d 74 31 2e 62 2b 7e 28 73 65 6c  hen a=t1.b+~(sel
7ef0: 65 63 74 20 63 61 73 65 20 63 61 73 74 28 61 76  ect case cast(av
7f00: 67 28 20 2d 62 2a 31 33 29 20 41 53 20 69 6e 74  g( -b*13) AS int
7f10: 65 67 65 72 29 20 77 68 65 6e 20 6d 61 78 28 66  eger) when max(f
7f20: 2a 31 33 2a 20 2d 63 29 20 74 68 65 6e 20 28 63  *13* -c) then (c
7f30: 61 73 74 28 61 76 67 28 74 31 2e 64 29 20 41 53  ast(avg(t1.d) AS
7f40: 20 69 6e 74 65 67 65 72 29 29 20 65 6c 73 65 20   integer)) else 
7f50: 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
7f60: 31 2e 65 2a 63 29 20 65 6e 64 20 66 72 6f 6d 20  1.e*c) end from 
7f70: 74 31 29 20 74 68 65 6e 20 74 31 2e 64 20 26 20  t1) then t1.d & 
7f80: 74 31 2e 61 20 65 6c 73 65 20 63 61 73 65 20 77  t1.a else case w
7f90: 68 65 6e 20 74 31 2e 61 2d 62 20 6e 6f 74 20 62  hen t1.a-b not b
7fa0: 65 74 77 65 65 6e 20 65 20 61 6e 64 20 20 2d 74  etween e and  -t
7fb0: 31 2e 63 2a 20 2d 31 33 20 74 68 65 6e 20 31 39  1.c* -13 then 19
7fc0: 20 65 6c 73 65 20 64 20 65 6e 64 20 65 6e 64 29   else d end end)
7fd0: 2c 64 29 20 26 20 74 31 2e 64 20 46 52 4f 4d 20  ,d) & t1.d FROM 
7fe0: 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 2b 31  t1 WHERE NOT (+1
7ff0: 33 20 69 6e 20 28 66 2c 74 31 2e 66 2b 74 31 2e  3 in (f,t1.f+t1.
8000: 66 2c 20 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  f, -coalesce((se
8010: 6c 65 63 74 20 6d 61 78 28 74 31 2e 66 29 20 66  lect max(t1.f) f
8020: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74 31  rom t1 where (t1
8030: 2e 61 2d 31 33 29 3c 3d 28 63 61 73 65 20 28 73  .a-13)<=(case (s
8040: 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66  elect count(*) f
8050: 72 6f 6d 20 74 31 29 20 77 68 65 6e 20 31 33 20  rom t1) when 13 
8060: 74 68 65 6e 20 20 2d 2b 74 31 2e 65 20 7c 20 20  then  -+t1.e |  
8070: 2d 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  -(coalesce((sele
8080: 63 74 20 6d 61 78 28 7e 63 6f 61 6c 65 73 63 65  ct max(~coalesce
8090: 28 28 73 65 6c 65 63 74 20 28 20 2d 31 33 29 20  ((select ( -13) 
80a0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 20 2d  from t1 where  -
80b0: 63 3c 28 31 31 29 20 6f 72 20 31 31 20 62 65 74  c<(11) or 11 bet
80c0: 77 65 65 6e 20 61 20 61 6e 64 20 74 31 2e 64 29  ween a and t1.d)
80d0: 2c 31 33 29 2a 74 31 2e 64 29 20 66 72 6f 6d 20  ,13)*t1.d) from 
80e0: 74 31 20 77 68 65 72 65 20 64 20 6e 6f 74 20 62  t1 where d not b
80f0: 65 74 77 65 65 6e 20 62 20 61 6e 64 20 31 33 29  etween b and 13)
8100: 2c 31 39 29 29 2a 74 31 2e 61 20 65 6c 73 65 20  ,19))*t1.a else 
8110: 31 33 20 65 6e 64 2d 62 2d 63 29 29 2c 74 31 2e  13 end-b-c)),t1.
8120: 65 29 2d 31 39 29 29 7d 0a 7d 20 7b 34 30 30 7d  e)-19))}.} {400}
8130: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
8140: 72 2d 32 2e 34 36 20 7b 0a 20 20 64 62 20 65 76  r-2.46 {.  db ev
8150: 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
8160: 7e 31 31 2d 31 33 20 77 68 65 6e 20 31 31 2d 64  ~11-13 when 11-d
8170: 2d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 66 2a  -case when t1.f*
8180: 2b 61 2d 74 31 2e 61 2d 74 31 2e 66 3d 74 31 2e  +a-t1.a-t1.f=t1.
8190: 61 20 74 68 65 6e 20 61 20 77 68 65 6e 20 74 31  a then a when t1
81a0: 2e 66 20 62 65 74 77 65 65 6e 20 31 39 2d 74 31  .f between 19-t1
81b0: 2e 61 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  .a+coalesce((sel
81c0: 65 63 74 20 61 20 66 72 6f 6d 20 74 31 20 77 68  ect a from t1 wh
81d0: 65 72 65 20 65 20 69 6e 20 28 73 65 6c 65 63 74  ere e in (select
81e0: 20 63 61 73 65 20 20 2d 6d 61 78 28 74 31 2e 63   case  -max(t1.c
81f0: 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20  ) when count(*) 
8200: 74 68 65 6e 20 6d 61 78 28 74 31 2e 64 29 20 65  then max(t1.d) e
8210: 6c 73 65 20 20 2d 28 63 61 73 74 28 61 76 67 28  lse  -(cast(avg(
8220: 28 74 31 2e 65 29 29 20 41 53 20 69 6e 74 65 67  (t1.e)) AS integ
8230: 65 72 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  er)) end from t1
8240: 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 6d   union select (m
8250: 61 78 28 74 31 2e 62 29 29 20 66 72 6f 6d 20 74  ax(t1.b)) from t
8260: 31 29 29 2c 20 2d 62 29 20 61 6e 64 20 65 20 6f  1)), -b) and e o
8270: 72 20 28 28 31 31 3c 63 29 29 20 6f 72 20 65 3e  r ((11<c)) or e>
8280: 3d 74 31 2e 64 20 74 68 65 6e 20 74 31 2e 62 20  =t1.d then t1.b 
8290: 65 6c 73 65 20 61 20 65 6e 64 2b 31 33 2b 28 74  else a end+13+(t
82a0: 31 2e 63 29 20 74 68 65 6e 20 61 20 65 6c 73 65  1.c) then a else
82b0: 20 20 2d 64 20 65 6e 64 20 46 52 4f 4d 20 74 31    -d end FROM t1
82c0: 20 57 48 45 52 45 20 65 78 69 73 74 73 28 73 65   WHERE exists(se
82d0: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
82e0: 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28  here not exists(
82f0: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
8300: 20 77 68 65 72 65 20 28 6e 6f 74 20 2b 74 31 2e   where (not +t1.
8310: 62 2d 7e 61 2a 28 64 2a 74 31 2e 65 20 7c 20 2b  b-~a*(d*t1.e | +
8320: 20 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65   -coalesce((sele
8330: 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20  ct t1.c from t1 
8340: 77 68 65 72 65 20 74 31 2e 62 2a 63 61 73 65 20  where t1.b*case 
8350: 74 31 2e 62 20 77 68 65 6e 20 66 20 74 68 65 6e  t1.b when f then
8360: 20 20 2d 61 2a 62 20 65 6c 73 65 20 65 20 65 6e    -a*b else e en
8370: 64 3c 3e 61 2b 74 31 2e 61 29 2c 31 37 29 29 2b  d<>a+t1.a),17))+
8380: 65 2a 74 31 2e 65 2a 31 31 20 7c 20 74 31 2e 61  e*t1.e*11 | t1.a
8390: 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 33 20   not between 13 
83a0: 61 6e 64 20 20 2d 74 31 2e 61 20 61 6e 64 20 62  and  -t1.a and b
83b0: 20 62 65 74 77 65 65 6e 20 64 20 61 6e 64 20 20   between d and  
83c0: 2d 66 29 29 29 7d 0a 7d 20 7b 2d 34 30 30 7d 0a  -f)))}.} {-400}.
83d0: 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
83e0: 2d 32 2e 34 37 20 7b 0a 20 20 64 62 20 65 76 61  -2.47 {.  db eva
83f0: 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 7e  l {SELECT case ~
8400: 31 31 2d 31 33 20 77 68 65 6e 20 31 31 2d 64 2d  11-13 when 11-d-
8410: 63 61 73 65 20 77 68 65 6e 20 74 31 2e 66 2a 2b  case when t1.f*+
8420: 61 2d 74 31 2e 61 2d 74 31 2e 66 3d 74 31 2e 61  a-t1.a-t1.f=t1.a
8430: 20 74 68 65 6e 20 61 20 77 68 65 6e 20 74 31 2e   then a when t1.
8440: 66 20 62 65 74 77 65 65 6e 20 31 39 2d 74 31 2e  f between 19-t1.
8450: 61 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  a+coalesce((sele
8460: 63 74 20 61 20 66 72 6f 6d 20 74 31 20 77 68 65  ct a from t1 whe
8470: 72 65 20 65 20 69 6e 20 28 73 65 6c 65 63 74 20  re e in (select 
8480: 63 61 73 65 20 20 2d 6d 61 78 28 74 31 2e 63 29  case  -max(t1.c)
8490: 20 77 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20 74   when count(*) t
84a0: 68 65 6e 20 6d 61 78 28 74 31 2e 64 29 20 65 6c  hen max(t1.d) el
84b0: 73 65 20 20 2d 28 63 61 73 74 28 61 76 67 28 28  se  -(cast(avg((
84c0: 74 31 2e 65 29 29 20 41 53 20 69 6e 74 65 67 65  t1.e)) AS intege
84d0: 72 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20  r)) end from t1 
84e0: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 6d 61  union select (ma
84f0: 78 28 74 31 2e 62 29 29 20 66 72 6f 6d 20 74 31  x(t1.b)) from t1
8500: 29 29 2c 20 2d 62 29 20 61 6e 64 20 65 20 6f 72  )), -b) and e or
8510: 20 28 28 31 31 3c 63 29 29 20 6f 72 20 65 3e 3d   ((11<c)) or e>=
8520: 74 31 2e 64 20 74 68 65 6e 20 74 31 2e 62 20 65  t1.d then t1.b e
8530: 6c 73 65 20 61 20 65 6e 64 2b 31 33 2b 28 74 31  lse a end+13+(t1
8540: 2e 63 29 20 74 68 65 6e 20 61 20 65 6c 73 65 20  .c) then a else 
8550: 20 2d 64 20 65 6e 64 20 46 52 4f 4d 20 74 31 20   -d end FROM t1 
8560: 57 48 45 52 45 20 4e 4f 54 20 28 65 78 69 73 74  WHERE NOT (exist
8570: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
8580: 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69  t1 where not exi
8590: 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
85a0: 6d 20 74 31 20 77 68 65 72 65 20 28 6e 6f 74 20  m t1 where (not 
85b0: 2b 74 31 2e 62 2d 7e 61 2a 28 64 2a 74 31 2e 65  +t1.b-~a*(d*t1.e
85c0: 20 7c 20 2b 20 2d 63 6f 61 6c 65 73 63 65 28 28   | + -coalesce((
85d0: 73 65 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d  select t1.c from
85e0: 20 74 31 20 77 68 65 72 65 20 74 31 2e 62 2a 63   t1 where t1.b*c
85f0: 61 73 65 20 74 31 2e 62 20 77 68 65 6e 20 66 20  ase t1.b when f 
8600: 74 68 65 6e 20 20 2d 61 2a 62 20 65 6c 73 65 20  then  -a*b else 
8610: 65 20 65 6e 64 3c 3e 61 2b 74 31 2e 61 29 2c 31  e end<>a+t1.a),1
8620: 37 29 29 2b 65 2a 74 31 2e 65 2a 31 31 20 7c 20  7))+e*t1.e*11 | 
8630: 74 31 2e 61 20 6e 6f 74 20 62 65 74 77 65 65 6e  t1.a not between
8640: 20 31 33 20 61 6e 64 20 20 2d 74 31 2e 61 20 61   13 and  -t1.a a
8650: 6e 64 20 62 20 62 65 74 77 65 65 6e 20 64 20 61  nd b between d a
8660: 6e 64 20 20 2d 66 29 29 29 29 7d 0a 7d 20 7b 7d  nd  -f))))}.} {}
8670: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
8680: 72 2d 32 2e 34 38 20 7b 0a 20 20 64 62 20 65 76  r-2.48 {.  db ev
8690: 61 6c 20 7b 53 45 4c 45 43 54 20 31 31 2b 2b 28  al {SELECT 11++(
86a0: 63 61 73 65 20 31 39 20 77 68 65 6e 20 74 31 2e  case 19 when t1.
86b0: 63 2d 31 39 2d 63 6f 61 6c 65 73 63 65 28 28 73  c-19-coalesce((s
86c0: 65 6c 65 63 74 20 74 31 2e 62 20 66 72 6f 6d 20  elect t1.b from 
86d0: 74 31 20 77 68 65 72 65 20 65 2a 31 39 2d 74 31  t1 where e*19-t1
86e0: 2e 65 3c 3d 2b 63 61 73 65 20 77 68 65 6e 20 63  .e<=+case when c
86f0: 20 69 6e 20 28 73 65 6c 65 63 74 20 31 39 20 7c   in (select 19 |
8700: 20 31 37 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f   17 from t1 unio
8710: 6e 20 73 65 6c 65 63 74 20 31 31 20 66 72 6f 6d  n select 11 from
8720: 20 74 31 29 20 74 68 65 6e 20 28 61 62 73 28 61   t1) then (abs(a
8730: 29 2f 61 62 73 28 31 39 29 29 20 77 68 65 6e 20  )/abs(19)) when 
8740: 61 2a 74 31 2e 64 3e 31 39 20 6f 72 20 28 31 31  a*t1.d>19 or (11
8750: 29 20 6e 6f 74 20 69 6e 20 28 62 2c 74 31 2e 61  ) not in (b,t1.a
8760: 2c 74 31 2e 61 29 20 74 68 65 6e 20 62 20 65 6c  ,t1.a) then b el
8770: 73 65 20 62 20 65 6e 64 2d 31 31 29 2c 66 29 20  se b end-11),f) 
8780: 74 68 65 6e 20 31 33 20 65 6c 73 65 20 31 31 20  then 13 else 11 
8790: 65 6e 64 2d 74 31 2e 65 2a 61 29 20 46 52 4f 4d  end-t1.e*a) FROM
87a0: 20 74 31 20 57 48 45 52 45 20 66 20 69 6e 20 28   t1 WHERE f in (
87b0: 31 37 2c 74 31 2e 66 20 7c 20 63 6f 61 6c 65 73  17,t1.f | coales
87c0: 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74  ce((select max(t
87d0: 31 2e 65 29 20 66 72 6f 6d 20 74 31 20 77 68 65  1.e) from t1 whe
87e0: 72 65 20 6e 6f 74 20 31 37 20 69 6e 20 28 73 65  re not 17 in (se
87f0: 6c 65 63 74 20 66 20 66 72 6f 6d 20 74 31 20 75  lect f from t1 u
8800: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 2b 31 37 20  nion select +17 
8810: 66 72 6f 6d 20 74 31 29 29 2c 62 2b 63 6f 61 6c  from t1)),b+coal
8820: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
8830: 28 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  (b) from t1 wher
8840: 65 20 31 39 20 69 6e 20 28 73 65 6c 65 63 74 20  e 19 in (select 
8850: 63 61 73 65 20 6d 69 6e 28 74 31 2e 64 29 20 77  case min(t1.d) w
8860: 68 65 6e 20 28 63 6f 75 6e 74 28 2a 29 29 20 74  hen (count(*)) t
8870: 68 65 6e 20 6d 69 6e 28 64 29 20 65 6c 73 65 20  hen min(d) else 
8880: 20 2d 6d 69 6e 28 64 29 20 65 6e 64 20 66 72 6f   -min(d) end fro
8890: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
88a0: 74 20 6d 61 78 28 64 29 20 66 72 6f 6d 20 74 31  t max(d) from t1
88b0: 29 29 2c 66 29 2a 66 2d 31 37 2b 31 39 29 2c 62  )),f)*f-17+19),b
88c0: 29 20 6f 72 20 64 3c 3d 66 20 6f 72 20 74 31 2e  ) or d<=f or t1.
88d0: 66 3e 3d 31 31 20 6f 72 20 74 31 2e 62 3c 3d 31  f>=11 or t1.b<=1
88e0: 31 20 6f 72 20 74 31 2e 63 3c 3d 31 31 20 6f 72  1 or t1.c<=11 or
88f0: 20 74 31 2e 62 3c 3d 62 7d 0a 7d 20 7b 2d 34 39   t1.b<=b}.} {-49
8900: 39 37 38 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  978}.do_test ran
8910: 64 65 78 70 72 2d 32 2e 34 39 20 7b 0a 20 20 64  dexpr-2.49 {.  d
8920: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 31  b eval {SELECT 1
8930: 31 2b 2b 28 63 61 73 65 20 31 39 20 77 68 65 6e  1++(case 19 when
8940: 20 74 31 2e 63 2d 31 39 2d 63 6f 61 6c 65 73 63   t1.c-19-coalesc
8950: 65 28 28 73 65 6c 65 63 74 20 74 31 2e 62 20 66  e((select t1.b f
8960: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 2a 31  rom t1 where e*1
8970: 39 2d 74 31 2e 65 3c 3d 2b 63 61 73 65 20 77 68  9-t1.e<=+case wh
8980: 65 6e 20 63 20 69 6e 20 28 73 65 6c 65 63 74 20  en c in (select 
8990: 31 39 20 7c 20 31 37 20 66 72 6f 6d 20 74 31 20  19 | 17 from t1 
89a0: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 31 31 20  union select 11 
89b0: 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 28 61  from t1) then (a
89c0: 62 73 28 61 29 2f 61 62 73 28 31 39 29 29 20 77  bs(a)/abs(19)) w
89d0: 68 65 6e 20 61 2a 74 31 2e 64 3e 31 39 20 6f 72  hen a*t1.d>19 or
89e0: 20 28 31 31 29 20 6e 6f 74 20 69 6e 20 28 62 2c   (11) not in (b,
89f0: 74 31 2e 61 2c 74 31 2e 61 29 20 74 68 65 6e 20  t1.a,t1.a) then 
8a00: 62 20 65 6c 73 65 20 62 20 65 6e 64 2d 31 31 29  b else b end-11)
8a10: 2c 66 29 20 74 68 65 6e 20 31 33 20 65 6c 73 65  ,f) then 13 else
8a20: 20 31 31 20 65 6e 64 2d 74 31 2e 65 2a 61 29 20   11 end-t1.e*a) 
8a30: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
8a40: 54 20 28 66 20 69 6e 20 28 31 37 2c 74 31 2e 66  T (f in (17,t1.f
8a50: 20 7c 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c   | coalesce((sel
8a60: 65 63 74 20 6d 61 78 28 74 31 2e 65 29 20 66 72  ect max(t1.e) fr
8a70: 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
8a80: 31 37 20 69 6e 20 28 73 65 6c 65 63 74 20 66 20  17 in (select f 
8a90: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
8aa0: 6c 65 63 74 20 2b 31 37 20 66 72 6f 6d 20 74 31  lect +17 from t1
8ab0: 29 29 2c 62 2b 63 6f 61 6c 65 73 63 65 28 28 73  )),b+coalesce((s
8ac0: 65 6c 65 63 74 20 6d 61 78 28 62 29 20 66 72 6f  elect max(b) fro
8ad0: 6d 20 74 31 20 77 68 65 72 65 20 31 39 20 69 6e  m t1 where 19 in
8ae0: 20 28 73 65 6c 65 63 74 20 63 61 73 65 20 6d 69   (select case mi
8af0: 6e 28 74 31 2e 64 29 20 77 68 65 6e 20 28 63 6f  n(t1.d) when (co
8b00: 75 6e 74 28 2a 29 29 20 74 68 65 6e 20 6d 69 6e  unt(*)) then min
8b10: 28 64 29 20 65 6c 73 65 20 20 2d 6d 69 6e 28 64  (d) else  -min(d
8b20: 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75 6e  ) end from t1 un
8b30: 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78 28 64  ion select max(d
8b40: 29 20 66 72 6f 6d 20 74 31 29 29 2c 66 29 2a 66  ) from t1)),f)*f
8b50: 2d 31 37 2b 31 39 29 2c 62 29 20 6f 72 20 64 3c  -17+19),b) or d<
8b60: 3d 66 20 6f 72 20 74 31 2e 66 3e 3d 31 31 20 6f  =f or t1.f>=11 o
8b70: 72 20 74 31 2e 62 3c 3d 31 31 20 6f 72 20 74 31  r t1.b<=11 or t1
8b80: 2e 63 3c 3d 31 31 20 6f 72 20 74 31 2e 62 3c 3d  .c<=11 or t1.b<=
8b90: 62 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  b)}.} {}.do_test
8ba0: 20 72 61 6e 64 65 78 70 72 2d 32 2e 35 30 20 7b   randexpr-2.50 {
8bb0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
8bc0: 43 54 20 31 31 2b 2b 28 63 61 73 65 20 31 39 20  CT 11++(case 19 
8bd0: 77 68 65 6e 20 74 31 2e 63 2d 31 39 2d 63 6f 61  when t1.c-19-coa
8be0: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31  lesce((select t1
8bf0: 2e 62 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  .b from t1 where
8c00: 20 65 2a 31 39 2d 74 31 2e 65 3c 3d 2b 63 61 73   e*19-t1.e<=+cas
8c10: 65 20 77 68 65 6e 20 63 20 69 6e 20 28 73 65 6c  e when c in (sel
8c20: 65 63 74 20 31 39 20 26 20 31 37 20 66 72 6f 6d  ect 19 & 17 from
8c30: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
8c40: 20 31 31 20 66 72 6f 6d 20 74 31 29 20 74 68 65   11 from t1) the
8c50: 6e 20 28 61 62 73 28 61 29 2f 61 62 73 28 31 39  n (abs(a)/abs(19
8c60: 29 29 20 77 68 65 6e 20 61 2a 74 31 2e 64 3e 31  )) when a*t1.d>1
8c70: 39 20 6f 72 20 28 31 31 29 20 6e 6f 74 20 69 6e  9 or (11) not in
8c80: 20 28 62 2c 74 31 2e 61 2c 74 31 2e 61 29 20 74   (b,t1.a,t1.a) t
8c90: 68 65 6e 20 62 20 65 6c 73 65 20 62 20 65 6e 64  hen b else b end
8ca0: 2d 31 31 29 2c 66 29 20 74 68 65 6e 20 31 33 20  -11),f) then 13 
8cb0: 65 6c 73 65 20 31 31 20 65 6e 64 2d 74 31 2e 65  else 11 end-t1.e
8cc0: 2a 61 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  *a) FROM t1 WHER
8cd0: 45 20 66 20 69 6e 20 28 31 37 2c 74 31 2e 66 20  E f in (17,t1.f 
8ce0: 7c 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  | coalesce((sele
8cf0: 63 74 20 6d 61 78 28 74 31 2e 65 29 20 66 72 6f  ct max(t1.e) fro
8d00: 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 31  m t1 where not 1
8d10: 37 20 69 6e 20 28 73 65 6c 65 63 74 20 66 20 66  7 in (select f f
8d20: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
8d30: 65 63 74 20 2b 31 37 20 66 72 6f 6d 20 74 31 29  ect +17 from t1)
8d40: 29 2c 62 2b 63 6f 61 6c 65 73 63 65 28 28 73 65  ),b+coalesce((se
8d50: 6c 65 63 74 20 6d 61 78 28 62 29 20 66 72 6f 6d  lect max(b) from
8d60: 20 74 31 20 77 68 65 72 65 20 31 39 20 69 6e 20   t1 where 19 in 
8d70: 28 73 65 6c 65 63 74 20 63 61 73 65 20 6d 69 6e  (select case min
8d80: 28 74 31 2e 64 29 20 77 68 65 6e 20 28 63 6f 75  (t1.d) when (cou
8d90: 6e 74 28 2a 29 29 20 74 68 65 6e 20 6d 69 6e 28  nt(*)) then min(
8da0: 64 29 20 65 6c 73 65 20 20 2d 6d 69 6e 28 64 29  d) else  -min(d)
8db0: 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75 6e 69   end from t1 uni
8dc0: 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78 28 64 29  on select max(d)
8dd0: 20 66 72 6f 6d 20 74 31 29 29 2c 66 29 2a 66 2d   from t1)),f)*f-
8de0: 31 37 2b 31 39 29 2c 62 29 20 6f 72 20 64 3c 3d  17+19),b) or d<=
8df0: 66 20 6f 72 20 74 31 2e 66 3e 3d 31 31 20 6f 72  f or t1.f>=11 or
8e00: 20 74 31 2e 62 3c 3d 31 31 20 6f 72 20 74 31 2e   t1.b<=11 or t1.
8e10: 63 3c 3d 31 31 20 6f 72 20 74 31 2e 62 3c 3d 62  c<=11 or t1.b<=b
8e20: 7d 0a 7d 20 7b 2d 34 39 39 37 38 7d 0a 64 6f 5f  }.} {-49978}.do_
8e30: 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
8e40: 35 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  51 {.  db eval {
8e50: 53 45 4c 45 43 54 20 20 2d 63 2d 63 6f 61 6c 65  SELECT  -c-coale
8e60: 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
8e70: 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.a) from t1 wh
8e80: 65 72 65 20 28 61 3e 31 37 2d 74 31 2e 61 29 20  ere (a>17-t1.a) 
8e90: 61 6e 64 20 28 73 65 6c 65 63 74 20 61 62 73 28  and (select abs(
8ea0: 6d 69 6e 28 74 31 2e 61 29 29 2a 63 61 73 65 20  min(t1.a))*case 
8eb0: 61 62 73 28 63 61 73 65 20 28 28 28 6d 69 6e 28  abs(case (((min(
8ec0: 28 74 31 2e 63 29 29 29 29 2b 6d 69 6e 28 61 29  (t1.c))))+min(a)
8ed0: 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 64 69 73  ) when count(dis
8ee0: 74 69 6e 63 74 20 66 29 20 74 68 65 6e 20 6d 69  tinct f) then mi
8ef0: 6e 28 31 31 29 20 65 6c 73 65 20 63 6f 75 6e 74  n(11) else count
8f00: 28 64 69 73 74 69 6e 63 74 20 62 29 20 65 6e 64  (distinct b) end
8f10: 29 20 77 68 65 6e 20 6d 69 6e 28 74 31 2e 66 29  ) when min(t1.f)
8f20: 20 74 68 65 6e 20 28 63 6f 75 6e 74 28 64 69 73   then (count(dis
8f30: 74 69 6e 63 74 20 74 31 2e 62 29 29 20 65 6c 73  tinct t1.b)) els
8f40: 65 20 20 2d 63 6f 75 6e 74 28 2a 29 20 65 6e 64  e  -count(*) end
8f50: 20 66 72 6f 6d 20 74 31 29 3c 3e 63 61 73 65 20   from t1)<>case 
8f60: 64 20 77 68 65 6e 20 2b 28 73 65 6c 65 63 74 20  d when +(select 
8f70: 28 28 6d 69 6e 28 74 31 2e 61 29 29 29 20 66 72  ((min(t1.a))) fr
8f80: 6f 6d 20 74 31 29 2d 28 61 62 73 28 63 29 2f 61  om t1)-(abs(c)/a
8f90: 62 73 28 66 29 29 20 74 68 65 6e 20 62 20 65 6c  bs(f)) then b el
8fa0: 73 65 20 31 37 20 65 6e 64 2b 74 31 2e 63 29 2c  se 17 end+t1.c),
8fb0: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
8fc0: 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 77 68   t1.d from t1 wh
8fd0: 65 72 65 20 64 3e 31 39 29 2c 74 31 2e 61 29 29  ere d>19),t1.a))
8fe0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
8ff0: 2b 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  +(coalesce((sele
9000: 63 74 20 6d 61 78 28 61 29 20 66 72 6f 6d 20 74  ct max(a) from t
9010: 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73  1 where exists(s
9020: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
9030: 77 68 65 72 65 20 74 31 2e 62 3c 3d 63 2d 28 73  where t1.b<=c-(s
9040: 65 6c 65 63 74 20 7e 7e 6d 61 78 28 28 61 62 73  elect ~~max((abs
9050: 28 65 29 2f 61 62 73 28 31 33 20 7c 20 28 74 31  (e)/abs(13 | (t1
9060: 2e 65 29 2d 63 2d 31 39 29 29 29 20 66 72 6f 6d  .e)-c-19))) from
9070: 20 74 31 29 20 6f 72 20 64 20 69 6e 20 28 73 65   t1) or d in (se
9080: 6c 65 63 74 20 74 31 2e 62 20 66 72 6f 6d 20 74  lect t1.b from t
9090: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64  1 union select d
90a0: 20 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 31 33   from t1)) or 13
90b0: 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73 74   in (select cast
90c0: 28 61 76 67 28 31 39 29 20 41 53 20 69 6e 74 65  (avg(19) AS inte
90d0: 67 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  ger) from t1 uni
90e0: 6f 6e 20 73 65 6c 65 63 74 20 28 20 2d 63 61 73  on select ( -cas
90f0: 74 28 61 76 67 28 31 39 29 20 41 53 20 69 6e 74  t(avg(19) AS int
9100: 65 67 65 72 29 20 7c 20 63 6f 75 6e 74 28 2a 29  eger) | count(*)
9110: 2a 6d 69 6e 28 31 39 29 29 20 66 72 6f 6d 20 74  *min(19)) from t
9120: 31 29 20 6f 72 20 31 39 3c 3d 31 31 29 2c 74 31  1) or 19<=11),t1
9130: 2e 63 29 29 2d 74 31 2e 64 2d 63 3e 66 7d 0a 7d  .c))-t1.d-c>f}.}
9140: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64   {}.do_test rand
9150: 65 78 70 72 2d 32 2e 35 32 20 7b 0a 20 20 64 62  expr-2.52 {.  db
9160: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d   eval {SELECT  -
9170: 63 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  c-coalesce((sele
9180: 63 74 20 6d 61 78 28 74 31 2e 61 29 20 66 72 6f  ct max(t1.a) fro
9190: 6d 20 74 31 20 77 68 65 72 65 20 28 61 3e 31 37  m t1 where (a>17
91a0: 2d 74 31 2e 61 29 20 61 6e 64 20 28 73 65 6c 65  -t1.a) and (sele
91b0: 63 74 20 61 62 73 28 6d 69 6e 28 74 31 2e 61 29  ct abs(min(t1.a)
91c0: 29 2a 63 61 73 65 20 61 62 73 28 63 61 73 65 20  )*case abs(case 
91d0: 28 28 28 6d 69 6e 28 28 74 31 2e 63 29 29 29 29  (((min((t1.c))))
91e0: 2b 6d 69 6e 28 61 29 29 20 77 68 65 6e 20 63 6f  +min(a)) when co
91f0: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 66 29 20  unt(distinct f) 
9200: 74 68 65 6e 20 6d 69 6e 28 31 31 29 20 65 6c 73  then min(11) els
9210: 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  e count(distinct
9220: 20 62 29 20 65 6e 64 29 20 77 68 65 6e 20 6d 69   b) end) when mi
9230: 6e 28 74 31 2e 66 29 20 74 68 65 6e 20 28 63 6f  n(t1.f) then (co
9240: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
9250: 62 29 29 20 65 6c 73 65 20 20 2d 63 6f 75 6e 74  b)) else  -count
9260: 28 2a 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29  (*) end from t1)
9270: 3c 3e 63 61 73 65 20 64 20 77 68 65 6e 20 2b 28  <>case d when +(
9280: 73 65 6c 65 63 74 20 28 28 6d 69 6e 28 74 31 2e  select ((min(t1.
9290: 61 29 29 29 20 66 72 6f 6d 20 74 31 29 2d 28 61  a))) from t1)-(a
92a0: 62 73 28 63 29 2f 61 62 73 28 66 29 29 20 74 68  bs(c)/abs(f)) th
92b0: 65 6e 20 62 20 65 6c 73 65 20 31 37 20 65 6e 64  en b else 17 end
92c0: 2b 74 31 2e 63 29 2c 63 6f 61 6c 65 73 63 65 28  +t1.c),coalesce(
92d0: 28 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f  (select t1.d fro
92e0: 6d 20 74 31 20 77 68 65 72 65 20 64 3e 31 39 29  m t1 where d>19)
92f0: 2c 74 31 2e 61 29 29 20 46 52 4f 4d 20 74 31 20  ,t1.a)) FROM t1 
9300: 57 48 45 52 45 20 4e 4f 54 20 28 62 2b 28 63 6f  WHERE NOT (b+(co
9310: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
9320: 61 78 28 61 29 20 66 72 6f 6d 20 74 31 20 77 68  ax(a) from t1 wh
9330: 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
9340: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
9350: 65 20 74 31 2e 62 3c 3d 63 2d 28 73 65 6c 65 63  e t1.b<=c-(selec
9360: 74 20 7e 7e 6d 61 78 28 28 61 62 73 28 65 29 2f  t ~~max((abs(e)/
9370: 61 62 73 28 31 33 20 7c 20 28 74 31 2e 65 29 2d  abs(13 | (t1.e)-
9380: 63 2d 31 39 29 29 29 20 66 72 6f 6d 20 74 31 29  c-19))) from t1)
9390: 20 6f 72 20 64 20 69 6e 20 28 73 65 6c 65 63 74   or d in (select
93a0: 20 74 31 2e 62 20 66 72 6f 6d 20 74 31 20 75 6e   t1.b from t1 un
93b0: 69 6f 6e 20 73 65 6c 65 63 74 20 64 20 66 72 6f  ion select d fro
93c0: 6d 20 74 31 29 29 20 6f 72 20 31 33 20 69 6e 20  m t1)) or 13 in 
93d0: 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67  (select cast(avg
93e0: 28 31 39 29 20 41 53 20 69 6e 74 65 67 65 72 29  (19) AS integer)
93f0: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
9400: 65 6c 65 63 74 20 28 20 2d 63 61 73 74 28 61 76  elect ( -cast(av
9410: 67 28 31 39 29 20 41 53 20 69 6e 74 65 67 65 72  g(19) AS integer
9420: 29 20 7c 20 63 6f 75 6e 74 28 2a 29 2a 6d 69 6e  ) | count(*)*min
9430: 28 31 39 29 29 20 66 72 6f 6d 20 74 31 29 20 6f  (19)) from t1) o
9440: 72 20 31 39 3c 3d 31 31 29 2c 74 31 2e 63 29 29  r 19<=11),t1.c))
9450: 2d 74 31 2e 64 2d 63 3e 66 29 7d 0a 7d 20 7b 2d  -t1.d-c>f)}.} {-
9460: 34 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  400}.do_test ran
9470: 64 65 78 70 72 2d 32 2e 35 33 20 7b 0a 20 20 64  dexpr-2.53 {.  d
9480: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
9490: 61 73 65 20 77 68 65 6e 20 74 31 2e 62 2b 63 6f  ase when t1.b+co
94a0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
94b0: 61 78 28 61 29 20 66 72 6f 6d 20 74 31 20 77 68  ax(a) from t1 wh
94c0: 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
94d0: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
94e0: 65 20 6e 6f 74 20 6e 6f 74 20 74 31 2e 64 3e 31  e not not t1.d>1
94f0: 39 29 29 2c 31 33 29 20 7c 20 63 61 73 65 20 77  9)),13) | case w
9500: 68 65 6e 20 66 20 69 6e 20 28 73 65 6c 65 63 74  hen f in (select
9510: 20 61 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e   a from t1 union
9520: 20 73 65 6c 65 63 74 20 63 61 73 65 20 77 68 65   select case whe
9530: 6e 20 28 61 29 3c 3e 74 31 2e 63 20 74 68 65 6e  n (a)<>t1.c then
9540: 20 63 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73   c when not exis
9550: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
9560: 20 74 31 20 77 68 65 72 65 20 74 31 2e 63 20 6e   t1 where t1.c n
9570: 6f 74 20 62 65 74 77 65 65 6e 20 31 37 20 61 6e  ot between 17 an
9580: 64 20 20 2d 28 74 31 2e 64 29 29 20 74 68 65 6e  d  -(t1.d)) then
9590: 20 66 20 65 6c 73 65 20 28 31 31 29 20 65 6e 64   f else (11) end
95a0: 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 74   from t1) then t
95b0: 31 2e 63 20 77 68 65 6e 20 28 6e 6f 74 20 65 78  1.c when (not ex
95c0: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
95d0: 6f 6d 20 74 31 20 77 68 65 72 65 20 31 37 20 6e  om t1 where 17 n
95e0: 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e 66 20  ot between t1.f 
95f0: 61 6e 64 20 61 29 29 20 61 6e 64 20 64 3d 62 20  and a)) and d=b 
9600: 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 64  then t1.c else d
9610: 20 65 6e 64 3c 3d 31 39 20 61 6e 64 20 28 74 31   end<=19 and (t1
9620: 2e 63 3c 3e 63 20 61 6e 64 20 28 31 33 29 20 6e  .c<>c and (13) n
9630: 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e 64 20  ot between t1.d 
9640: 61 6e 64 20 74 31 2e 63 29 20 61 6e 64 20 61 3e  and t1.c) and a>
9650: 3d 20 2d 62 20 6f 72 20 31 31 3e 31 33 20 61 6e  = -b or 11>13 an
9660: 64 20 63 3c 3e 31 33 20 74 68 65 6e 20 20 2d 66  d c<>13 then  -f
9670: 20 65 6c 73 65 20 64 20 65 6e 64 20 46 52 4f 4d   else d end FROM
9680: 20 74 31 20 57 48 45 52 45 20 28 63 61 73 65 20   t1 WHERE (case 
9690: 77 68 65 6e 20 28 31 37 20 6e 6f 74 20 69 6e 20  when (17 not in 
96a0: 28 66 2a 31 31 2c 2b 63 6f 61 6c 65 73 63 65 28  (f*11,+coalesce(
96b0: 28 73 65 6c 65 63 74 20 6d 61 78 28 62 2d 62 29  (select max(b-b)
96c0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
96d0: 31 2e 63 2b 66 20 6e 6f 74 20 62 65 74 77 65 65  1.c+f not betwee
96e0: 6e 20 31 31 20 61 6e 64 20 74 31 2e 64 29 2c 31  n 11 and t1.d),1
96f0: 33 29 2c 63 29 29 20 6f 72 20 28 74 31 2e 65 20  3),c)) or (t1.e 
9700: 69 6e 20 28 73 65 6c 65 63 74 20 7e 6d 69 6e 28  in (select ~min(
9710: 74 31 2e 66 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.f) from t1 un
9720: 69 6f 6e 20 73 65 6c 65 63 74 20 7e 63 6f 75 6e  ion select ~coun
9730: 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 20 61 6e  t(*) from t1) an
9740: 64 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  d exists(select 
9750: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
9760: 28 6e 6f 74 20 66 3e 3d 31 39 20 61 6e 64 20 31  (not f>=19 and 1
9770: 37 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 61 20  7 not between a 
9780: 61 6e 64 20 74 31 2e 65 29 29 20 6f 72 20 28 65  and t1.e)) or (e
9790: 29 20 6e 6f 74 20 69 6e 20 28 65 2c 64 2c 31 33  ) not in (e,d,13
97a0: 29 20 6f 72 20 74 31 2e 64 3e 3d 66 29 20 74 68  ) or t1.d>=f) th
97b0: 65 6e 20 65 20 77 68 65 6e 20 31 37 20 62 65 74  en e when 17 bet
97c0: 77 65 65 6e 20 74 31 2e 63 20 61 6e 64 20 31 33  ween t1.c and 13
97d0: 20 74 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20   then case when 
97e0: 31 31 3c 3e 31 39 20 74 68 65 6e 20 74 31 2e 64  11<>19 then t1.d
97f0: 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 20 65   else t1.a end e
9800: 6c 73 65 20 62 20 65 6e 64 20 69 6e 20 28 73 65  lse b end in (se
9810: 6c 65 63 74 20 20 2d 74 31 2e 61 20 66 72 6f 6d  lect  -t1.a from
9820: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
9830: 20 61 20 66 72 6f 6d 20 74 31 29 29 7d 0a 7d 20   a from t1))}.} 
9840: 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
9850: 78 70 72 2d 32 2e 35 34 20 7b 0a 20 20 64 62 20  xpr-2.54 {.  db 
9860: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73  eval {SELECT cas
9870: 65 20 77 68 65 6e 20 74 31 2e 62 2b 63 6f 61 6c  e when t1.b+coal
9880: 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
9890: 28 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  (a) from t1 wher
98a0: 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
98b0: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
98c0: 6e 6f 74 20 6e 6f 74 20 74 31 2e 64 3e 31 39 29  not not t1.d>19)
98d0: 29 2c 31 33 29 20 7c 20 63 61 73 65 20 77 68 65  ),13) | case whe
98e0: 6e 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20 61  n f in (select a
98f0: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
9900: 65 6c 65 63 74 20 63 61 73 65 20 77 68 65 6e 20  elect case when 
9910: 28 61 29 3c 3e 74 31 2e 63 20 74 68 65 6e 20 63  (a)<>t1.c then c
9920: 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73   when not exists
9930: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
9940: 31 20 77 68 65 72 65 20 74 31 2e 63 20 6e 6f 74  1 where t1.c not
9950: 20 62 65 74 77 65 65 6e 20 31 37 20 61 6e 64 20   between 17 and 
9960: 20 2d 28 74 31 2e 64 29 29 20 74 68 65 6e 20 66   -(t1.d)) then f
9970: 20 65 6c 73 65 20 28 31 31 29 20 65 6e 64 20 66   else (11) end f
9980: 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 74 31 2e  rom t1) then t1.
9990: 63 20 77 68 65 6e 20 28 6e 6f 74 20 65 78 69 73  c when (not exis
99a0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
99b0: 20 74 31 20 77 68 65 72 65 20 31 37 20 6e 6f 74   t1 where 17 not
99c0: 20 62 65 74 77 65 65 6e 20 74 31 2e 66 20 61 6e   between t1.f an
99d0: 64 20 61 29 29 20 61 6e 64 20 64 3d 62 20 74 68  d a)) and d=b th
99e0: 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 64 20 65  en t1.c else d e
99f0: 6e 64 3c 3d 31 39 20 61 6e 64 20 28 74 31 2e 63  nd<=19 and (t1.c
9a00: 3c 3e 63 20 61 6e 64 20 28 31 33 29 20 6e 6f 74  <>c and (13) not
9a10: 20 62 65 74 77 65 65 6e 20 74 31 2e 64 20 61 6e   between t1.d an
9a20: 64 20 74 31 2e 63 29 20 61 6e 64 20 61 3e 3d 20  d t1.c) and a>= 
9a30: 2d 62 20 6f 72 20 31 31 3e 31 33 20 61 6e 64 20  -b or 11>13 and 
9a40: 63 3c 3e 31 33 20 74 68 65 6e 20 20 2d 66 20 65  c<>13 then  -f e
9a50: 6c 73 65 20 64 20 65 6e 64 20 46 52 4f 4d 20 74  lse d end FROM t
9a60: 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28 63 61  1 WHERE NOT ((ca
9a70: 73 65 20 77 68 65 6e 20 28 31 37 20 6e 6f 74 20  se when (17 not 
9a80: 69 6e 20 28 66 2a 31 31 2c 2b 63 6f 61 6c 65 73  in (f*11,+coales
9a90: 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 62  ce((select max(b
9aa0: 2d 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  -b) from t1 wher
9ab0: 65 20 74 31 2e 63 2b 66 20 6e 6f 74 20 62 65 74  e t1.c+f not bet
9ac0: 77 65 65 6e 20 31 31 20 61 6e 64 20 74 31 2e 64  ween 11 and t1.d
9ad0: 29 2c 31 33 29 2c 63 29 29 20 6f 72 20 28 74 31  ),13),c)) or (t1
9ae0: 2e 65 20 69 6e 20 28 73 65 6c 65 63 74 20 7e 6d  .e in (select ~m
9af0: 69 6e 28 74 31 2e 66 29 20 66 72 6f 6d 20 74 31  in(t1.f) from t1
9b00: 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 7e 63   union select ~c
9b10: 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
9b20: 20 61 6e 64 20 65 78 69 73 74 73 28 73 65 6c 65   and exists(sele
9b30: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
9b40: 72 65 20 28 6e 6f 74 20 66 3e 3d 31 39 20 61 6e  re (not f>=19 an
9b50: 64 20 31 37 20 6e 6f 74 20 62 65 74 77 65 65 6e  d 17 not between
9b60: 20 61 20 61 6e 64 20 74 31 2e 65 29 29 20 6f 72   a and t1.e)) or
9b70: 20 28 65 29 20 6e 6f 74 20 69 6e 20 28 65 2c 64   (e) not in (e,d
9b80: 2c 31 33 29 20 6f 72 20 74 31 2e 64 3e 3d 66 29  ,13) or t1.d>=f)
9b90: 20 74 68 65 6e 20 65 20 77 68 65 6e 20 31 37 20   then e when 17 
9ba0: 62 65 74 77 65 65 6e 20 74 31 2e 63 20 61 6e 64  between t1.c and
9bb0: 20 31 33 20 74 68 65 6e 20 63 61 73 65 20 77 68   13 then case wh
9bc0: 65 6e 20 31 31 3c 3e 31 39 20 74 68 65 6e 20 74  en 11<>19 then t
9bd0: 31 2e 64 20 65 6c 73 65 20 74 31 2e 61 20 65 6e  1.d else t1.a en
9be0: 64 20 65 6c 73 65 20 62 20 65 6e 64 20 69 6e 20  d else b end in 
9bf0: 28 73 65 6c 65 63 74 20 20 2d 74 31 2e 61 20 66  (select  -t1.a f
9c00: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
9c10: 65 63 74 20 61 20 66 72 6f 6d 20 74 31 29 29 29  ect a from t1)))
9c20: 7d 0a 7d 20 7b 34 30 30 7d 0a 64 6f 5f 74 65 73  }.} {400}.do_tes
9c30: 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 35 35 20  t randexpr-2.55 
9c40: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
9c50: 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 74 31  ECT case when t1
9c60: 2e 62 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  .b+coalesce((sel
9c70: 65 63 74 20 6d 61 78 28 61 29 20 66 72 6f 6d 20  ect max(a) from 
9c80: 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
9c90: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
9ca0: 20 77 68 65 72 65 20 6e 6f 74 20 6e 6f 74 20 74   where not not t
9cb0: 31 2e 64 3e 31 39 29 29 2c 31 33 29 20 26 20 63  1.d>19)),13) & c
9cc0: 61 73 65 20 77 68 65 6e 20 66 20 69 6e 20 28 73  ase when f in (s
9cd0: 65 6c 65 63 74 20 61 20 66 72 6f 6d 20 74 31 20  elect a from t1 
9ce0: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73  union select cas
9cf0: 65 20 77 68 65 6e 20 28 61 29 3c 3e 74 31 2e 63  e when (a)<>t1.c
9d00: 20 74 68 65 6e 20 63 20 77 68 65 6e 20 6e 6f 74   then c when not
9d10: 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
9d20: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
9d30: 31 2e 63 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  1.c not between 
9d40: 31 37 20 61 6e 64 20 20 2d 28 74 31 2e 64 29 29  17 and  -(t1.d))
9d50: 20 74 68 65 6e 20 66 20 65 6c 73 65 20 28 31 31   then f else (11
9d60: 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 20 74  ) end from t1) t
9d70: 68 65 6e 20 74 31 2e 63 20 77 68 65 6e 20 28 6e  hen t1.c when (n
9d80: 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
9d90: 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
9da0: 20 31 37 20 6e 6f 74 20 62 65 74 77 65 65 6e 20   17 not between 
9db0: 74 31 2e 66 20 61 6e 64 20 61 29 29 20 61 6e 64  t1.f and a)) and
9dc0: 20 64 3d 62 20 74 68 65 6e 20 74 31 2e 63 20 65   d=b then t1.c e
9dd0: 6c 73 65 20 64 20 65 6e 64 3c 3d 31 39 20 61 6e  lse d end<=19 an
9de0: 64 20 28 74 31 2e 63 3c 3e 63 20 61 6e 64 20 28  d (t1.c<>c and (
9df0: 31 33 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  13) not between 
9e00: 74 31 2e 64 20 61 6e 64 20 74 31 2e 63 29 20 61  t1.d and t1.c) a
9e10: 6e 64 20 61 3e 3d 20 2d 62 20 6f 72 20 31 31 3e  nd a>= -b or 11>
9e20: 31 33 20 61 6e 64 20 63 3c 3e 31 33 20 74 68 65  13 and c<>13 the
9e30: 6e 20 20 2d 66 20 65 6c 73 65 20 64 20 65 6e 64  n  -f else d end
9e40: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
9e50: 4f 54 20 28 28 63 61 73 65 20 77 68 65 6e 20 28  OT ((case when (
9e60: 31 37 20 6e 6f 74 20 69 6e 20 28 66 2a 31 31 2c  17 not in (f*11,
9e70: 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  +coalesce((selec
9e80: 74 20 6d 61 78 28 62 2d 62 29 20 66 72 6f 6d 20  t max(b-b) from 
9e90: 74 31 20 77 68 65 72 65 20 74 31 2e 63 2b 66 20  t1 where t1.c+f 
9ea0: 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 31 20 61  not between 11 a
9eb0: 6e 64 20 74 31 2e 64 29 2c 31 33 29 2c 63 29 29  nd t1.d),13),c))
9ec0: 20 6f 72 20 28 74 31 2e 65 20 69 6e 20 28 73 65   or (t1.e in (se
9ed0: 6c 65 63 74 20 7e 6d 69 6e 28 74 31 2e 66 29 20  lect ~min(t1.f) 
9ee0: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
9ef0: 6c 65 63 74 20 7e 63 6f 75 6e 74 28 2a 29 20 66  lect ~count(*) f
9f00: 72 6f 6d 20 74 31 29 20 61 6e 64 20 65 78 69 73  rom t1) and exis
9f10: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
9f20: 20 74 31 20 77 68 65 72 65 20 28 6e 6f 74 20 66   t1 where (not f
9f30: 3e 3d 31 39 20 61 6e 64 20 31 37 20 6e 6f 74 20  >=19 and 17 not 
9f40: 62 65 74 77 65 65 6e 20 61 20 61 6e 64 20 74 31  between a and t1
9f50: 2e 65 29 29 20 6f 72 20 28 65 29 20 6e 6f 74 20  .e)) or (e) not 
9f60: 69 6e 20 28 65 2c 64 2c 31 33 29 20 6f 72 20 74  in (e,d,13) or t
9f70: 31 2e 64 3e 3d 66 29 20 74 68 65 6e 20 65 20 77  1.d>=f) then e w
9f80: 68 65 6e 20 31 37 20 62 65 74 77 65 65 6e 20 74  hen 17 between t
9f90: 31 2e 63 20 61 6e 64 20 31 33 20 74 68 65 6e 20  1.c and 13 then 
9fa0: 63 61 73 65 20 77 68 65 6e 20 31 31 3c 3e 31 39  case when 11<>19
9fb0: 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20   then t1.d else 
9fc0: 74 31 2e 61 20 65 6e 64 20 65 6c 73 65 20 62 20  t1.a end else b 
9fd0: 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 20  end in (select  
9fe0: 2d 74 31 2e 61 20 66 72 6f 6d 20 74 31 20 75 6e  -t1.a from t1 un
9ff0: 69 6f 6e 20 73 65 6c 65 63 74 20 61 20 66 72 6f  ion select a fro
a000: 6d 20 74 31 29 29 29 7d 0a 7d 20 7b 34 30 30 7d  m t1)))}.} {400}
a010: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
a020: 72 2d 32 2e 35 36 20 7b 0a 20 20 64 62 20 65 76  r-2.56 {.  db ev
a030: 61 6c 20 7b 53 45 4c 45 43 54 20 74 31 2e 65 2b  al {SELECT t1.e+
a040: 63 61 73 65 20 77 68 65 6e 20 64 20 6e 6f 74 20  case when d not 
a050: 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20 63 61  between f and ca
a060: 73 65 20 77 68 65 6e 20 61 20 69 6e 20 28 73 65  se when a in (se
a070: 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74  lect t1.c from t
a080: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74  1 union select t
a090: 31 2e 65 20 66 72 6f 6d 20 74 31 29 20 6f 72 20  1.e from t1) or 
a0a0: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
a0b0: 20 31 39 20 66 72 6f 6d 20 74 31 20 77 68 65 72   19 from t1 wher
a0c0: 65 20 31 37 3c 3d 74 31 2e 64 20 6f 72 20 31 39  e 17<=t1.d or 19
a0d0: 2a 74 31 2e 66 2a 74 31 2e 62 3c 3e 74 31 2e 64  *t1.f*t1.b<>t1.d
a0e0: 20 7c 20 74 31 2e 64 20 7c 20 74 31 2e 61 29 2c   | t1.d | t1.a),
a0f0: 74 31 2e 62 29 2a 63 61 73 65 20 77 68 65 6e 20  t1.b)*case when 
a100: 28 74 31 2e 61 29 20 69 6e 20 28 74 31 2e 64 2c  (t1.a) in (t1.d,
a110: 74 31 2e 61 2c 61 29 20 74 68 65 6e 20 20 2d 63  t1.a,a) then  -c
a120: 20 77 68 65 6e 20 31 37 3c 31 33 20 74 68 65 6e   when 17<13 then
a130: 20 74 31 2e 66 20 65 6c 73 65 20 31 37 20 65 6e   t1.f else 17 en
a140: 64 2d 74 31 2e 66 2a 65 20 6e 6f 74 20 69 6e 20  d-t1.f*e not in 
a150: 28 31 39 2c 74 31 2e 64 2c 31 37 29 20 74 68 65  (19,t1.d,17) the
a160: 6e 20 31 39 20 65 6c 73 65 20 74 31 2e 65 20 65  n 19 else t1.e e
a170: 6e 64 20 74 68 65 6e 20 20 2d 62 20 65 6c 73 65  nd then  -b else
a180: 20 74 31 2e 62 20 65 6e 64 20 46 52 4f 4d 20 74   t1.b end FROM t
a190: 31 20 57 48 45 52 45 20 28 63 6f 61 6c 65 73 63  1 WHERE (coalesc
a1a0: 65 28 28 73 65 6c 65 63 74 20 74 31 2e 64 2d 63  e((select t1.d-c
a1b0: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
a1c0: 6d 61 78 28 63 6f 61 6c 65 73 63 65 28 28 73 65  max(coalesce((se
a1d0: 6c 65 63 74 20 6d 61 78 28 63 2b 31 33 29 20 66  lect max(c+13) f
a1e0: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 7e 31 33  rom t1 where ~13
a1f0: 2a 74 31 2e 62 20 69 6e 20 28 73 65 6c 65 63 74  *t1.b in (select
a200: 20 61 62 73 28 61 62 73 28 61 62 73 28 28 63 61   abs(abs(abs((ca
a210: 73 74 28 61 76 67 28 20 2d 65 29 20 41 53 20 69  st(avg( -e) AS i
a220: 6e 74 65 67 65 72 29 29 29 29 29 2d 20 2d 63 6f  nteger)))))- -co
a230: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 28 31 33  unt(distinct (13
a240: 29 29 2a 6d 61 78 28 31 33 29 20 66 72 6f 6d 20  ))*max(13) from 
a250: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
a260: 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31  count(distinct 1
a270: 39 29 20 66 72 6f 6d 20 74 31 29 29 2c 20 2d 74  9) from t1)), -t
a280: 31 2e 66 29 29 20 66 72 6f 6d 20 74 31 20 77 68  1.f)) from t1 wh
a290: 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
a2a0: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
a2b0: 65 20 31 37 20 69 6e 20 28 74 31 2e 62 2c 31 33  e 17 in (t1.b,13
a2c0: 2c 62 29 29 29 2c 62 29 2b 64 2b 74 31 2e 61 20  ,b))),b)+d+t1.a 
a2d0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 64 20  from t1 where d 
a2e0: 6e 6f 74 20 69 6e 20 28 31 33 2c 74 31 2e 62 2c  not in (13,t1.b,
a2f0: 62 29 29 2c 31 37 29 20 6e 6f 74 20 62 65 74 77  b)),17) not betw
a300: 65 65 6e 20 31 31 20 61 6e 64 20 65 20 6f 72 20  een 11 and e or 
a310: 6e 6f 74 20 31 37 20 62 65 74 77 65 65 6e 20 64  not 17 between d
a320: 20 61 6e 64 20 64 29 7d 0a 7d 20 7b 33 30 30 7d   and d)}.} {300}
a330: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
a340: 72 2d 32 2e 35 37 20 7b 0a 20 20 64 62 20 65 76  r-2.57 {.  db ev
a350: 61 6c 20 7b 53 45 4c 45 43 54 20 74 31 2e 65 2b  al {SELECT t1.e+
a360: 63 61 73 65 20 77 68 65 6e 20 64 20 6e 6f 74 20  case when d not 
a370: 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20 63 61  between f and ca
a380: 73 65 20 77 68 65 6e 20 61 20 69 6e 20 28 73 65  se when a in (se
a390: 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74  lect t1.c from t
a3a0: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74  1 union select t
a3b0: 31 2e 65 20 66 72 6f 6d 20 74 31 29 20 6f 72 20  1.e from t1) or 
a3c0: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
a3d0: 20 31 39 20 66 72 6f 6d 20 74 31 20 77 68 65 72   19 from t1 wher
a3e0: 65 20 31 37 3c 3d 74 31 2e 64 20 6f 72 20 31 39  e 17<=t1.d or 19
a3f0: 2a 74 31 2e 66 2a 74 31 2e 62 3c 3e 74 31 2e 64  *t1.f*t1.b<>t1.d
a400: 20 7c 20 74 31 2e 64 20 7c 20 74 31 2e 61 29 2c   | t1.d | t1.a),
a410: 74 31 2e 62 29 2a 63 61 73 65 20 77 68 65 6e 20  t1.b)*case when 
a420: 28 74 31 2e 61 29 20 69 6e 20 28 74 31 2e 64 2c  (t1.a) in (t1.d,
a430: 74 31 2e 61 2c 61 29 20 74 68 65 6e 20 20 2d 63  t1.a,a) then  -c
a440: 20 77 68 65 6e 20 31 37 3c 31 33 20 74 68 65 6e   when 17<13 then
a450: 20 74 31 2e 66 20 65 6c 73 65 20 31 37 20 65 6e   t1.f else 17 en
a460: 64 2d 74 31 2e 66 2a 65 20 6e 6f 74 20 69 6e 20  d-t1.f*e not in 
a470: 28 31 39 2c 74 31 2e 64 2c 31 37 29 20 74 68 65  (19,t1.d,17) the
a480: 6e 20 31 39 20 65 6c 73 65 20 74 31 2e 65 20 65  n 19 else t1.e e
a490: 6e 64 20 74 68 65 6e 20 20 2d 62 20 65 6c 73 65  nd then  -b else
a4a0: 20 74 31 2e 62 20 65 6e 64 20 46 52 4f 4d 20 74   t1.b end FROM t
a4b0: 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28 63 6f  1 WHERE NOT ((co
a4c0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74  alesce((select t
a4d0: 31 2e 64 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  1.d-coalesce((se
a4e0: 6c 65 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63  lect max(coalesc
a4f0: 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 2b  e((select max(c+
a500: 31 33 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  13) from t1 wher
a510: 65 20 7e 31 33 2a 74 31 2e 62 20 69 6e 20 28 73  e ~13*t1.b in (s
a520: 65 6c 65 63 74 20 61 62 73 28 61 62 73 28 61 62  elect abs(abs(ab
a530: 73 28 28 63 61 73 74 28 61 76 67 28 20 2d 65 29  s((cast(avg( -e)
a540: 20 41 53 20 69 6e 74 65 67 65 72 29 29 29 29 29   AS integer)))))
a550: 2d 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  - -count(distinc
a560: 74 20 28 31 33 29 29 2a 6d 61 78 28 31 33 29 20  t (13))*max(13) 
a570: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
a580: 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69  lect count(disti
a590: 6e 63 74 20 31 39 29 20 66 72 6f 6d 20 74 31 29  nct 19) from t1)
a5a0: 29 2c 20 2d 74 31 2e 66 29 29 20 66 72 6f 6d 20  ), -t1.f)) from 
a5b0: 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
a5c0: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
a5d0: 20 77 68 65 72 65 20 31 37 20 69 6e 20 28 74 31   where 17 in (t1
a5e0: 2e 62 2c 31 33 2c 62 29 29 29 2c 62 29 2b 64 2b  .b,13,b))),b)+d+
a5f0: 74 31 2e 61 20 66 72 6f 6d 20 74 31 20 77 68 65  t1.a from t1 whe
a600: 72 65 20 64 20 6e 6f 74 20 69 6e 20 28 31 33 2c  re d not in (13,
a610: 74 31 2e 62 2c 62 29 29 2c 31 37 29 20 6e 6f 74  t1.b,b)),17) not
a620: 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20   between 11 and 
a630: 65 20 6f 72 20 6e 6f 74 20 31 37 20 62 65 74 77  e or not 17 betw
a640: 65 65 6e 20 64 20 61 6e 64 20 64 29 29 7d 0a 7d  een d and d))}.}
a650: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64   {}.do_test rand
a660: 65 78 70 72 2d 32 2e 35 38 20 7b 0a 20 20 64 62  expr-2.58 {.  db
a670: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 31   eval {SELECT t1
a680: 2e 65 2b 63 61 73 65 20 77 68 65 6e 20 64 20 6e  .e+case when d n
a690: 6f 74 20 62 65 74 77 65 65 6e 20 66 20 61 6e 64  ot between f and
a6a0: 20 63 61 73 65 20 77 68 65 6e 20 61 20 69 6e 20   case when a in 
a6b0: 28 73 65 6c 65 63 74 20 74 31 2e 63 20 66 72 6f  (select t1.c fro
a6c0: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
a6d0: 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 29 20  t t1.e from t1) 
a6e0: 6f 72 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  or coalesce((sel
a6f0: 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20 77  ect 19 from t1 w
a700: 68 65 72 65 20 31 37 3c 3d 74 31 2e 64 20 6f 72  here 17<=t1.d or
a710: 20 31 39 2a 74 31 2e 66 2a 74 31 2e 62 3c 3e 74   19*t1.f*t1.b<>t
a720: 31 2e 64 20 26 20 74 31 2e 64 20 26 20 74 31 2e  1.d & t1.d & t1.
a730: 61 29 2c 74 31 2e 62 29 2a 63 61 73 65 20 77 68  a),t1.b)*case wh
a740: 65 6e 20 28 74 31 2e 61 29 20 69 6e 20 28 74 31  en (t1.a) in (t1
a750: 2e 64 2c 74 31 2e 61 2c 61 29 20 74 68 65 6e 20  .d,t1.a,a) then 
a760: 20 2d 63 20 77 68 65 6e 20 31 37 3c 31 33 20 74   -c when 17<13 t
a770: 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 31 37  hen t1.f else 17
a780: 20 65 6e 64 2d 74 31 2e 66 2a 65 20 6e 6f 74 20   end-t1.f*e not 
a790: 69 6e 20 28 31 39 2c 74 31 2e 64 2c 31 37 29 20  in (19,t1.d,17) 
a7a0: 74 68 65 6e 20 31 39 20 65 6c 73 65 20 74 31 2e  then 19 else t1.
a7b0: 65 20 65 6e 64 20 74 68 65 6e 20 20 2d 62 20 65  e end then  -b e
a7c0: 6c 73 65 20 74 31 2e 62 20 65 6e 64 20 46 52 4f  lse t1.b end FRO
a7d0: 4d 20 74 31 20 57 48 45 52 45 20 28 63 6f 61 6c  M t1 WHERE (coal
a7e0: 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e  esce((select t1.
a7f0: 64 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  d-coalesce((sele
a800: 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63 65 28  ct max(coalesce(
a810: 28 73 65 6c 65 63 74 20 6d 61 78 28 63 2b 31 33  (select max(c+13
a820: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
a830: 7e 31 33 2a 74 31 2e 62 20 69 6e 20 28 73 65 6c  ~13*t1.b in (sel
a840: 65 63 74 20 61 62 73 28 61 62 73 28 61 62 73 28  ect abs(abs(abs(
a850: 28 63 61 73 74 28 61 76 67 28 20 2d 65 29 20 41  (cast(avg( -e) A
a860: 53 20 69 6e 74 65 67 65 72 29 29 29 29 29 2d 20  S integer)))))- 
a870: 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
a880: 28 31 33 29 29 2a 6d 61 78 28 31 33 29 20 66 72  (13))*max(13) fr
a890: 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
a8a0: 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  ct count(distinc
a8b0: 74 20 31 39 29 20 66 72 6f 6d 20 74 31 29 29 2c  t 19) from t1)),
a8c0: 20 2d 74 31 2e 66 29 29 20 66 72 6f 6d 20 74 31   -t1.f)) from t1
a8d0: 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73 65   where exists(se
a8e0: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
a8f0: 68 65 72 65 20 31 37 20 69 6e 20 28 74 31 2e 62  here 17 in (t1.b
a900: 2c 31 33 2c 62 29 29 29 2c 62 29 2b 64 2b 74 31  ,13,b))),b)+d+t1
a910: 2e 61 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  .a from t1 where
a920: 20 64 20 6e 6f 74 20 69 6e 20 28 31 33 2c 74 31   d not in (13,t1
a930: 2e 62 2c 62 29 29 2c 31 37 29 20 6e 6f 74 20 62  .b,b)),17) not b
a940: 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20 65 20  etween 11 and e 
a950: 6f 72 20 6e 6f 74 20 31 37 20 62 65 74 77 65 65  or not 17 betwee
a960: 6e 20 64 20 61 6e 64 20 64 29 7d 0a 7d 20 7b 33  n d and d)}.} {3
a970: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  00}.do_test rand
a980: 65 78 70 72 2d 32 2e 35 39 20 7b 0a 20 20 64 62  expr-2.59 {.  db
a990: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
a9a0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
a9b0: 61 78 28 74 31 2e 66 2a 63 61 73 65 20 77 68 65  ax(t1.f*case whe
a9c0: 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  n not exists(sel
a9d0: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
a9e0: 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
a9f0: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
aa00: 65 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  e (select count(
aa10: 64 69 73 74 69 6e 63 74 20 31 31 29 20 66 72 6f  distinct 11) fro
aa20: 6d 20 74 31 29 20 62 65 74 77 65 65 6e 20 63 6f  m t1) between co
aa30: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
aa40: 61 78 28 63 29 20 66 72 6f 6d 20 74 31 20 77 68  ax(c) from t1 wh
aa50: 65 72 65 20 74 31 2e 65 3d 74 31 2e 61 2b 31 37  ere t1.e=t1.a+17
aa60: 29 2c 61 29 20 61 6e 64 20 74 31 2e 62 29 20 6f  ),a) and t1.b) o
aa70: 72 20 63 20 6e 6f 74 20 69 6e 20 28 74 31 2e 65  r c not in (t1.e
aa80: 2c 31 39 2c 74 31 2e 65 29 29 20 74 68 65 6e 20  ,19,t1.e)) then 
aa90: 31 33 20 77 68 65 6e 20 65 78 69 73 74 73 28 73  13 when exists(s
aaa0: 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
aab0: 77 68 65 72 65 20 74 31 2e 61 20 62 65 74 77 65  where t1.a betwe
aac0: 65 6e 20 31 39 20 61 6e 64 20 20 2d 63 29 20 74  en 19 and  -c) t
aad0: 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65  hen coalesce((se
aae0: 6c 65 63 74 20 63 6f 61 6c 65 73 63 65 28 28 73  lect coalesce((s
aaf0: 65 6c 65 63 74 20 6d 61 78 28 28 28 20 2d 64 29  elect max((( -d)
ab00: 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
ab10: 20 31 37 20 6e 6f 74 20 69 6e 20 28 74 31 2e 64   17 not in (t1.d
ab20: 2c 65 2c 74 31 2e 65 29 29 2c 65 29 20 66 72 6f  ,e,t1.e)),e) fro
ab30: 6d 20 74 31 20 77 68 65 72 65 20 63 3d 20 2d 66  m t1 where c= -f
ab40: 29 2c 28 20 2d 63 29 29 20 65 6c 73 65 20 74 31  ),( -c)) else t1
ab50: 2e 66 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20  .f end) from t1 
ab60: 77 68 65 72 65 20 6e 6f 74 20 28 31 31 20 62 65  where not (11 be
ab70: 74 77 65 65 6e 20 61 20 61 6e 64 20 74 31 2e 65  tween a and t1.e
ab80: 29 29 2c 31 39 29 20 46 52 4f 4d 20 74 31 20 57  )),19) FROM t1 W
ab90: 48 45 52 45 20 63 61 73 65 20 63 20 77 68 65 6e  HERE case c when
aba0: 20 63 61 73 65 20 77 68 65 6e 20 28 65 78 69 73   case when (exis
abb0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
abc0: 20 74 31 20 77 68 65 72 65 20 74 31 2e 64 3c 3e   t1 where t1.d<>
abd0: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
abe0: 20 31 33 20 66 72 6f 6d 20 74 31 20 77 68 65 72   13 from t1 wher
abf0: 65 20 28 74 31 2e 62 3e 2b 65 29 29 2c 28 31 37  e (t1.b>+e)),(17
ac00: 29 29 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  ))+coalesce((sel
ac10: 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31 20 77  ect 13 from t1 w
ac20: 68 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65  here exists(sele
ac30: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
ac40: 72 65 20 31 33 20 69 6e 20 28 74 31 2e 62 2b 63  re 13 in (t1.b+c
ac50: 2c 63 61 73 65 20 77 68 65 6e 20 66 20 62 65 74  ,case when f bet
ac60: 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 62 20  ween t1.f and b 
ac70: 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20 66  then t1.b else f
ac80: 20 65 6e 64 2c 28 31 31 29 29 29 29 2c 66 29 2d   end,(11)))),f)-
ac90: 31 37 2d 31 37 29 29 20 74 68 65 6e 20 20 2d 63  17-17)) then  -c
aca0: 2d 28 63 29 20 77 68 65 6e 20 31 31 20 69 6e 20  -(c) when 11 in 
acb0: 28 62 2c 66 2c 28 74 31 2e 64 29 29 20 74 68 65  (b,f,(t1.d)) the
acc0: 6e 20 74 31 2e 63 20 65 6c 73 65 20 74 31 2e 62  n t1.c else t1.b
acd0: 20 65 6e 64 20 74 68 65 6e 20 74 31 2e 64 20 65   end then t1.d e
ace0: 6c 73 65 20 31 31 20 65 6e 64 20 69 6e 20 28 73  lse 11 end in (s
acf0: 65 6c 65 63 74 20 20 2d 63 6f 75 6e 74 28 2a 29  elect  -count(*)
ad00: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
ad10: 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66  elect count(*) f
ad20: 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b 7d 0a 64 6f  rom t1)}.} {}.do
ad30: 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
ad40: 2e 36 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .60 {.  db eval 
ad50: 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65  {SELECT coalesce
ad60: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
ad70: 66 2a 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20  f*case when not 
ad80: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
ad90: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78  from t1 where ex
ada0: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
adb0: 6f 6d 20 74 31 20 77 68 65 72 65 20 28 73 65 6c  om t1 where (sel
adc0: 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ect count(distin
add0: 63 74 20 31 31 29 20 66 72 6f 6d 20 74 31 29 20  ct 11) from t1) 
ade0: 62 65 74 77 65 65 6e 20 63 6f 61 6c 65 73 63 65  between coalesce
adf0: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 29 20  ((select max(c) 
ae00: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
ae10: 2e 65 3d 74 31 2e 61 2b 31 37 29 2c 61 29 20 61  .e=t1.a+17),a) a
ae20: 6e 64 20 74 31 2e 62 29 20 6f 72 20 63 20 6e 6f  nd t1.b) or c no
ae30: 74 20 69 6e 20 28 74 31 2e 65 2c 31 39 2c 74 31  t in (t1.e,19,t1
ae40: 2e 65 29 29 20 74 68 65 6e 20 31 33 20 77 68 65  .e)) then 13 whe
ae50: 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  n exists(select 
ae60: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
ae70: 74 31 2e 61 20 62 65 74 77 65 65 6e 20 31 39 20  t1.a between 19 
ae80: 61 6e 64 20 20 2d 63 29 20 74 68 65 6e 20 63 6f  and  -c) then co
ae90: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63  alesce((select c
aea0: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
aeb0: 6d 61 78 28 28 28 20 2d 64 29 29 29 20 66 72 6f  max((( -d))) fro
aec0: 6d 20 74 31 20 77 68 65 72 65 20 31 37 20 6e 6f  m t1 where 17 no
aed0: 74 20 69 6e 20 28 74 31 2e 64 2c 65 2c 74 31 2e  t in (t1.d,e,t1.
aee0: 65 29 29 2c 65 29 20 66 72 6f 6d 20 74 31 20 77  e)),e) from t1 w
aef0: 68 65 72 65 20 63 3d 20 2d 66 29 2c 28 20 2d 63  here c= -f),( -c
af00: 29 29 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64  )) else t1.f end
af10: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
af20: 6e 6f 74 20 28 31 31 20 62 65 74 77 65 65 6e 20  not (11 between 
af30: 61 20 61 6e 64 20 74 31 2e 65 29 29 2c 31 39 29  a and t1.e)),19)
af40: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
af50: 4f 54 20 28 63 61 73 65 20 63 20 77 68 65 6e 20  OT (case c when 
af60: 63 61 73 65 20 77 68 65 6e 20 28 65 78 69 73 74  case when (exist
af70: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
af80: 74 31 20 77 68 65 72 65 20 74 31 2e 64 3c 3e 63  t1 where t1.d<>c
af90: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
afa0: 31 33 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  13 from t1 where
afb0: 20 28 74 31 2e 62 3e 2b 65 29 29 2c 28 31 37 29   (t1.b>+e)),(17)
afc0: 29 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  )+coalesce((sele
afd0: 63 74 20 31 33 20 66 72 6f 6d 20 74 31 20 77 68  ct 13 from t1 wh
afe0: 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
aff0: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
b000: 65 20 31 33 20 69 6e 20 28 74 31 2e 62 2b 63 2c  e 13 in (t1.b+c,
b010: 63 61 73 65 20 77 68 65 6e 20 66 20 62 65 74 77  case when f betw
b020: 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 62 20 74  een t1.f and b t
b030: 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20 66 20  hen t1.b else f 
b040: 65 6e 64 2c 28 31 31 29 29 29 29 2c 66 29 2d 31  end,(11)))),f)-1
b050: 37 2d 31 37 29 29 20 74 68 65 6e 20 20 2d 63 2d  7-17)) then  -c-
b060: 28 63 29 20 77 68 65 6e 20 31 31 20 69 6e 20 28  (c) when 11 in (
b070: 62 2c 66 2c 28 74 31 2e 64 29 29 20 74 68 65 6e  b,f,(t1.d)) then
b080: 20 74 31 2e 63 20 65 6c 73 65 20 74 31 2e 62 20   t1.c else t1.b 
b090: 65 6e 64 20 74 68 65 6e 20 74 31 2e 64 20 65 6c  end then t1.d el
b0a0: 73 65 20 31 31 20 65 6e 64 20 69 6e 20 28 73 65  se 11 end in (se
b0b0: 6c 65 63 74 20 20 2d 63 6f 75 6e 74 28 2a 29 20  lect  -count(*) 
b0c0: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
b0d0: 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72  lect count(*) fr
b0e0: 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 33 36 30 30  om t1))}.} {3600
b0f0: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  00}.do_test rand
b100: 65 78 70 72 2d 32 2e 36 31 20 7b 0a 20 20 64 62  expr-2.61 {.  db
b110: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61   eval {SELECT ca
b120: 73 65 20 77 68 65 6e 20 74 31 2e 61 2d 63 6f 61  se when t1.a-coa
b130: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31  lesce((select t1
b140: 2e 62 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  .b from t1 where
b150: 20 28 64 3c 3d 7e 61 29 29 2c 74 31 2e 62 2b 74   (d<=~a)),t1.b+t
b160: 31 2e 64 20 7c 20 31 39 2b 31 33 29 2d 74 31 2e  1.d | 19+13)-t1.
b170: 61 20 7c 20 7e 63 6f 61 6c 65 73 63 65 28 28 73  a | ~coalesce((s
b180: 65 6c 65 63 74 20 7e 31 37 20 66 72 6f 6d 20 74  elect ~17 from t
b190: 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73  1 where not exis
b1a0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
b1b0: 20 74 31 20 77 68 65 72 65 20 7e 63 61 73 65 20   t1 where ~case 
b1c0: 77 68 65 6e 20 31 33 20 69 6e 20 28 73 65 6c 65  when 13 in (sele
b1d0: 63 74 20 2b 28 63 61 73 74 28 61 76 67 28 62 29  ct +(cast(avg(b)
b1e0: 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 66 72   AS integer)) fr
b1f0: 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
b200: 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d  ct count(*) from
b210: 20 74 31 29 20 74 68 65 6e 20 31 37 20 77 68 65   t1) then 17 whe
b220: 6e 20 31 31 20 6e 6f 74 20 69 6e 20 28 63 2c 74  n 11 not in (c,t
b230: 31 2e 61 2c 74 31 2e 61 29 20 74 68 65 6e 20 65  1.a,t1.a) then e
b240: 20 65 6c 73 65 20 65 20 65 6e 64 2a 61 20 6e 6f   else e end*a no
b250: 74 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64  t between 11 and
b260: 20 63 29 29 2c 74 31 2e 63 29 20 69 6e 20 28 31   c)),t1.c) in (1
b270: 31 2c 74 31 2e 61 2c 65 29 20 74 68 65 6e 20 74  1,t1.a,e) then t
b280: 31 2e 66 20 77 68 65 6e 20 31 39 20 69 6e 20 28  1.f when 19 in (
b290: 73 65 6c 65 63 74 20 7e 63 6f 75 6e 74 28 64 69  select ~count(di
b2a0: 73 74 69 6e 63 74 20 64 29 20 66 72 6f 6d 20 74  stinct d) from t
b2b0: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63  1 union select c
b2c0: 61 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69  ast(avg(19) AS i
b2d0: 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
b2e0: 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20   then t1.d else 
b2f0: 31 39 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57  19 end FROM t1 W
b300: 48 45 52 45 20 6e 6f 74 20 65 78 69 73 74 73 28  HERE not exists(
b310: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
b320: 20 77 68 65 72 65 20 28 73 65 6c 65 63 74 20 63   where (select c
b330: 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
b340: 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  +coalesce((selec
b350: 74 20 6d 61 78 28 61 29 20 66 72 6f 6d 20 74 31  t max(a) from t1
b360: 20 77 68 65 72 65 20 74 31 2e 61 20 62 65 74 77   where t1.a betw
b370: 65 65 6e 20 28 61 62 73 28 63 61 73 65 20 77 68  een (abs(case wh
b380: 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  en exists(select
b390: 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
b3a0: 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e 65 3d   case when t1.e=
b3b0: 63 61 73 65 20 77 68 65 6e 20 31 39 20 62 65 74  case when 19 bet
b3c0: 77 65 65 6e 20 31 31 20 61 6e 64 20 65 20 74 68  ween 11 and e th
b3d0: 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 61 20 65  en t1.f else a e
b3e0: 6e 64 20 74 68 65 6e 20 74 31 2e 65 20 65 6c 73  nd then t1.e els
b3f0: 65 20 74 31 2e 62 20 65 6e 64 20 69 6e 20 28 73  e t1.b end in (s
b400: 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
b410: 69 6e 63 74 20 64 29 20 7c 20 6d 61 78 28 31 31  inct d) | max(11
b420: 29 2a 61 62 73 28 63 61 73 65 20 63 6f 75 6e 74  )*abs(case count
b430: 28 2a 29 20 77 68 65 6e 20 6d 61 78 28 66 29 20  (*) when max(f) 
b440: 74 68 65 6e 20 63 61 73 74 28 61 76 67 28 65 29  then cast(avg(e)
b450: 20 41 53 20 69 6e 74 65 67 65 72 29 20 65 6c 73   AS integer) els
b460: 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  e count(distinct
b470: 20 74 31 2e 65 29 20 65 6e 64 29 20 66 72 6f 6d   t1.e) end) from
b480: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
b490: 20 20 2d 63 61 73 74 28 61 76 67 28 63 29 20 41    -cast(avg(c) A
b4a0: 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
b4b0: 74 31 29 29 20 74 68 65 6e 20 28 73 65 6c 65 63  t1)) then (selec
b4c0: 74 20 20 2d 6d 69 6e 28 65 29 20 66 72 6f 6d 20  t  -min(e) from 
b4d0: 74 31 29 20 77 68 65 6e 20 28 63 3e 65 29 20 74  t1) when (c>e) t
b4e0: 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20 66 20  hen t1.d else f 
b4f0: 65 6e 64 29 2f 61 62 73 28 62 29 29 20 61 6e 64  end)/abs(b)) and
b500: 20 28 31 37 29 29 2c 65 29 20 6e 6f 74 20 62 65   (17)),e) not be
b510: 74 77 65 65 6e 20 74 31 2e 61 20 61 6e 64 20 64  tween t1.a and d
b520: 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  )}.} {}.do_test 
b530: 72 61 6e 64 65 78 70 72 2d 32 2e 36 32 20 7b 0a  randexpr-2.62 {.
b540: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
b550: 54 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61  T case when t1.a
b560: 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  -coalesce((selec
b570: 74 20 74 31 2e 62 20 66 72 6f 6d 20 74 31 20 77  t t1.b from t1 w
b580: 68 65 72 65 20 28 64 3c 3d 7e 61 29 29 2c 74 31  here (d<=~a)),t1
b590: 2e 62 2b 74 31 2e 64 20 7c 20 31 39 2b 31 33 29  .b+t1.d | 19+13)
b5a0: 2d 74 31 2e 61 20 7c 20 7e 63 6f 61 6c 65 73 63  -t1.a | ~coalesc
b5b0: 65 28 28 73 65 6c 65 63 74 20 7e 31 37 20 66 72  e((select ~17 fr
b5c0: 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
b5d0: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
b5e0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 7e 63  from t1 where ~c
b5f0: 61 73 65 20 77 68 65 6e 20 31 33 20 69 6e 20 28  ase when 13 in (
b600: 73 65 6c 65 63 74 20 2b 28 63 61 73 74 28 61 76  select +(cast(av
b610: 67 28 62 29 20 41 53 20 69 6e 74 65 67 65 72 29  g(b) AS integer)
b620: 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
b630: 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20  select count(*) 
b640: 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 31 37  from t1) then 17
b650: 20 77 68 65 6e 20 31 31 20 6e 6f 74 20 69 6e 20   when 11 not in 
b660: 28 63 2c 74 31 2e 61 2c 74 31 2e 61 29 20 74 68  (c,t1.a,t1.a) th
b670: 65 6e 20 65 20 65 6c 73 65 20 65 20 65 6e 64 2a  en e else e end*
b680: 61 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 31  a not between 11
b690: 20 61 6e 64 20 63 29 29 2c 74 31 2e 63 29 20 69   and c)),t1.c) i
b6a0: 6e 20 28 31 31 2c 74 31 2e 61 2c 65 29 20 74 68  n (11,t1.a,e) th
b6b0: 65 6e 20 74 31 2e 66 20 77 68 65 6e 20 31 39 20  en t1.f when 19 
b6c0: 69 6e 20 28 73 65 6c 65 63 74 20 7e 63 6f 75 6e  in (select ~coun
b6d0: 74 28 64 69 73 74 69 6e 63 74 20 64 29 20 66 72  t(distinct d) fr
b6e0: 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
b6f0: 63 74 20 63 61 73 74 28 61 76 67 28 31 39 29 20  ct cast(avg(19) 
b700: 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
b710: 20 74 31 29 20 74 68 65 6e 20 74 31 2e 64 20 65   t1) then t1.d e
b720: 6c 73 65 20 31 39 20 65 6e 64 20 46 52 4f 4d 20  lse 19 end FROM 
b730: 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 6e 6f  t1 WHERE NOT (no
b740: 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
b750: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
b760: 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29  (select count(*)
b770: 20 66 72 6f 6d 20 74 31 29 2b 63 6f 61 6c 65 73   from t1)+coales
b780: 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 61  ce((select max(a
b790: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
b7a0: 74 31 2e 61 20 62 65 74 77 65 65 6e 20 28 61 62  t1.a between (ab
b7b0: 73 28 63 61 73 65 20 77 68 65 6e 20 65 78 69 73  s(case when exis
b7c0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
b7d0: 20 74 31 20 77 68 65 72 65 20 63 61 73 65 20 77   t1 where case w
b7e0: 68 65 6e 20 74 31 2e 65 3d 63 61 73 65 20 77 68  hen t1.e=case wh
b7f0: 65 6e 20 31 39 20 62 65 74 77 65 65 6e 20 31 31  en 19 between 11
b800: 20 61 6e 64 20 65 20 74 68 65 6e 20 74 31 2e 66   and e then t1.f
b810: 20 65 6c 73 65 20 61 20 65 6e 64 20 74 68 65 6e   else a end then
b820: 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e 62 20   t1.e else t1.b 
b830: 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 63  end in (select c
b840: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 64 29  ount(distinct d)
b850: 20 7c 20 6d 61 78 28 31 31 29 2a 61 62 73 28 63   | max(11)*abs(c
b860: 61 73 65 20 63 6f 75 6e 74 28 2a 29 20 77 68 65  ase count(*) whe
b870: 6e 20 6d 61 78 28 66 29 20 74 68 65 6e 20 63 61  n max(f) then ca
b880: 73 74 28 61 76 67 28 65 29 20 41 53 20 69 6e 74  st(avg(e) AS int
b890: 65 67 65 72 29 20 65 6c 73 65 20 63 6f 75 6e 74  eger) else count
b8a0: 28 64 69 73 74 69 6e 63 74 20 74 31 2e 65 29 20  (distinct t1.e) 
b8b0: 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  end) from t1 uni
b8c0: 6f 6e 20 73 65 6c 65 63 74 20 20 2d 63 61 73 74  on select  -cast
b8d0: 28 61 76 67 28 63 29 20 41 53 20 69 6e 74 65 67  (avg(c) AS integ
b8e0: 65 72 29 20 66 72 6f 6d 20 74 31 29 29 20 74 68  er) from t1)) th
b8f0: 65 6e 20 28 73 65 6c 65 63 74 20 20 2d 6d 69 6e  en (select  -min
b900: 28 65 29 20 66 72 6f 6d 20 74 31 29 20 77 68 65  (e) from t1) whe
b910: 6e 20 28 63 3e 65 29 20 74 68 65 6e 20 74 31 2e  n (c>e) then t1.
b920: 64 20 65 6c 73 65 20 66 20 65 6e 64 29 2f 61 62  d else f end)/ab
b930: 73 28 62 29 29 20 61 6e 64 20 28 31 37 29 29 2c  s(b)) and (17)),
b940: 65 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74  e) not between t
b950: 31 2e 61 20 61 6e 64 20 64 29 29 7d 0a 7d 20 7b  1.a and d))}.} {
b960: 34 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  400}.do_test ran
b970: 64 65 78 70 72 2d 32 2e 36 33 20 7b 0a 20 20 64  dexpr-2.63 {.  d
b980: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
b990: 61 73 65 20 77 68 65 6e 20 74 31 2e 61 2d 63 6f  ase when t1.a-co
b9a0: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74  alesce((select t
b9b0: 31 2e 62 20 66 72 6f 6d 20 74 31 20 77 68 65 72  1.b from t1 wher
b9c0: 65 20 28 64 3c 3d 7e 61 29 29 2c 74 31 2e 62 2b  e (d<=~a)),t1.b+
b9d0: 74 31 2e 64 20 26 20 31 39 2b 31 33 29 2d 74 31  t1.d & 19+13)-t1
b9e0: 2e 61 20 26 20 7e 63 6f 61 6c 65 73 63 65 28 28  .a & ~coalesce((
b9f0: 73 65 6c 65 63 74 20 7e 31 37 20 66 72 6f 6d 20  select ~17 from 
ba00: 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69  t1 where not exi
ba10: 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
ba20: 6d 20 74 31 20 77 68 65 72 65 20 7e 63 61 73 65  m t1 where ~case
ba30: 20 77 68 65 6e 20 31 33 20 69 6e 20 28 73 65 6c   when 13 in (sel
ba40: 65 63 74 20 2b 28 63 61 73 74 28 61 76 67 28 62  ect +(cast(avg(b
ba50: 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 66  ) AS integer)) f
ba60: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
ba70: 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f  ect count(*) fro
ba80: 6d 20 74 31 29 20 74 68 65 6e 20 31 37 20 77 68  m t1) then 17 wh
ba90: 65 6e 20 31 31 20 6e 6f 74 20 69 6e 20 28 63 2c  en 11 not in (c,
baa0: 74 31 2e 61 2c 74 31 2e 61 29 20 74 68 65 6e 20  t1.a,t1.a) then 
bab0: 65 20 65 6c 73 65 20 65 20 65 6e 64 2a 61 20 6e  e else e end*a n
bac0: 6f 74 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e  ot between 11 an
bad0: 64 20 63 29 29 2c 74 31 2e 63 29 20 69 6e 20 28  d c)),t1.c) in (
bae0: 31 31 2c 74 31 2e 61 2c 65 29 20 74 68 65 6e 20  11,t1.a,e) then 
baf0: 74 31 2e 66 20 77 68 65 6e 20 31 39 20 69 6e 20  t1.f when 19 in 
bb00: 28 73 65 6c 65 63 74 20 7e 63 6f 75 6e 74 28 64  (select ~count(d
bb10: 69 73 74 69 6e 63 74 20 64 29 20 66 72 6f 6d 20  istinct d) from 
bb20: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
bb30: 63 61 73 74 28 61 76 67 28 31 39 29 20 41 53 20  cast(avg(19) AS 
bb40: 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31  integer) from t1
bb50: 29 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65  ) then t1.d else
bb60: 20 31 39 20 65 6e 64 20 46 52 4f 4d 20 74 31 20   19 end FROM t1 
bb70: 57 48 45 52 45 20 4e 4f 54 20 28 6e 6f 74 20 65  WHERE NOT (not e
bb80: 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
bb90: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 73 65  rom t1 where (se
bba0: 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72  lect count(*) fr
bbb0: 6f 6d 20 74 31 29 2b 63 6f 61 6c 65 73 63 65 28  om t1)+coalesce(
bbc0: 28 73 65 6c 65 63 74 20 6d 61 78 28 61 29 20 66  (select max(a) f
bbd0: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
bbe0: 61 20 62 65 74 77 65 65 6e 20 28 61 62 73 28 63  a between (abs(c
bbf0: 61 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28  ase when exists(
bc00: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
bc10: 20 77 68 65 72 65 20 63 61 73 65 20 77 68 65 6e   where case when
bc20: 20 74 31 2e 65 3d 63 61 73 65 20 77 68 65 6e 20   t1.e=case when 
bc30: 31 39 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e  19 between 11 an
bc40: 64 20 65 20 74 68 65 6e 20 74 31 2e 66 20 65 6c  d e then t1.f el
bc50: 73 65 20 61 20 65 6e 64 20 74 68 65 6e 20 74 31  se a end then t1
bc60: 2e 65 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64  .e else t1.b end
bc70: 20 69 6e 20 28 73 65 6c 65 63 74 20 63 6f 75 6e   in (select coun
bc80: 74 28 64 69 73 74 69 6e 63 74 20 64 29 20 7c 20  t(distinct d) | 
bc90: 6d 61 78 28 31 31 29 2a 61 62 73 28 63 61 73 65  max(11)*abs(case
bca0: 20 63 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 6d   count(*) when m
bcb0: 61 78 28 66 29 20 74 68 65 6e 20 63 61 73 74 28  ax(f) then cast(
bcc0: 61 76 67 28 65 29 20 41 53 20 69 6e 74 65 67 65  avg(e) AS intege
bcd0: 72 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 64 69  r) else count(di
bce0: 73 74 69 6e 63 74 20 74 31 2e 65 29 20 65 6e 64  stinct t1.e) end
bcf0: 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
bd00: 73 65 6c 65 63 74 20 20 2d 63 61 73 74 28 61 76  select  -cast(av
bd10: 67 28 63 29 20 41 53 20 69 6e 74 65 67 65 72 29  g(c) AS integer)
bd20: 20 66 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20   from t1)) then 
bd30: 28 73 65 6c 65 63 74 20 20 2d 6d 69 6e 28 65 29  (select  -min(e)
bd40: 20 66 72 6f 6d 20 74 31 29 20 77 68 65 6e 20 28   from t1) when (
bd50: 63 3e 65 29 20 74 68 65 6e 20 74 31 2e 64 20 65  c>e) then t1.d e
bd60: 6c 73 65 20 66 20 65 6e 64 29 2f 61 62 73 28 62  lse f end)/abs(b
bd70: 29 29 20 61 6e 64 20 28 31 37 29 29 2c 65 29 20  )) and (17)),e) 
bd80: 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e 61  not between t1.a
bd90: 20 61 6e 64 20 64 29 29 7d 0a 7d 20 7b 34 30 30   and d))}.} {400
bda0: 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
bdb0: 70 72 2d 32 2e 36 34 20 7b 0a 20 20 64 62 20 65  pr-2.64 {.  db e
bdc0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
bdd0: 20 77 68 65 6e 20 31 31 20 69 6e 20 28 73 65 6c   when 11 in (sel
bde0: 65 63 74 20 6d 61 78 28 66 29 20 66 72 6f 6d 20  ect max(f) from 
bdf0: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
be00: 6d 69 6e 28 31 39 2b 2b 31 33 29 20 7c 20 6d 69  min(19++13) | mi
be10: 6e 28 74 31 2e 63 29 20 66 72 6f 6d 20 74 31 29  n(t1.c) from t1)
be20: 20 61 6e 64 20 28 65 20 69 6e 20 28 73 65 6c 65   and (e in (sele
be30: 63 74 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20  ct t1.d from t1 
be40: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e  union select t1.
be50: 61 20 7c 20 31 37 2a 63 61 73 65 20 65 20 77 68  a | 17*case e wh
be60: 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
be70: 65 63 74 20 6d 61 78 28 61 29 20 66 72 6f 6d 20  ect max(a) from 
be80: 74 31 20 77 68 65 72 65 20 62 20 6e 6f 74 20 69  t1 where b not i
be90: 6e 20 28 62 2c 66 2c 64 29 20 6f 72 20 74 31 2e  n (b,f,d) or t1.
bea0: 61 3c 3d 66 29 2c 31 31 29 20 74 68 65 6e 20 74  a<=f),11) then t
beb0: 31 2e 61 20 65 6c 73 65 20 74 31 2e 62 20 65 6e  1.a else t1.b en
bec0: 64 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 20  d from t1) and  
bed0: 2d 61 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 62  -a not between b
bee0: 20 61 6e 64 20 64 29 20 74 68 65 6e 20 64 20 77   and d) then d w
bef0: 68 65 6e 20 20 2d 74 31 2e 66 3d 62 20 6f 72 20  hen  -t1.f=b or 
bf00: 74 31 2e 62 20 62 65 74 77 65 65 6e 20 20 2d 66  t1.b between  -f
bf10: 20 61 6e 64 20 20 2d 64 20 74 68 65 6e 20 31 39   and  -d then 19
bf20: 20 65 6c 73 65 20 64 20 65 6e 64 2b 64 20 46 52   else d end+d FR
bf30: 4f 4d 20 74 31 20 57 48 45 52 45 20 63 61 73 65  OM t1 WHERE case
bf40: 20 77 68 65 6e 20 28 63 6f 61 6c 65 73 63 65 28   when (coalesce(
bf50: 28 73 65 6c 65 63 74 20 63 61 73 65 20 28 73 65  (select case (se
bf60: 6c 65 63 74 20 6d 61 78 28 74 31 2e 62 29 20 66  lect max(t1.b) f
bf70: 72 6f 6d 20 74 31 29 20 77 68 65 6e 20 28 62 2a  rom t1) when (b*
bf80: 20 2d 74 31 2e 65 2b 65 2a 65 2d 74 31 2e 61 29   -t1.e+e*e-t1.a)
bf90: 20 74 68 65 6e 20 63 20 65 6c 73 65 20 61 20 65   then c else a e
bfa0: 6e 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  nd from t1 where
bfb0: 20 31 37 20 69 6e 20 28 73 65 6c 65 63 74 20 6d   17 in (select m
bfc0: 69 6e 28 74 31 2e 64 29 2d 61 62 73 28 63 6f 75  in(t1.d)-abs(cou
bfd0: 6e 74 28 2a 29 29 20 66 72 6f 6d 20 74 31 20 75  nt(*)) from t1 u
bfe0: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
bff0: 74 28 64 69 73 74 69 6e 63 74 20 63 29 20 66 72  t(distinct c) fr
c000: 6f 6d 20 74 31 29 29 2c 74 31 2e 64 29 3d 28 74  om t1)),t1.d)=(t
c010: 31 2e 64 29 29 20 61 6e 64 20 65 20 69 6e 20 28  1.d)) and e in (
c020: 73 65 6c 65 63 74 20 20 2d 6d 69 6e 28 74 31 2e  select  -min(t1.
c030: 62 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  b) from t1 union
c040: 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69   select count(di
c050: 73 74 69 6e 63 74 20 31 31 29 20 66 72 6f 6d 20  stinct 11) from 
c060: 74 31 29 20 61 6e 64 20 61 3c 20 2d 20 2d 31 37  t1) and a< - -17
c070: 20 74 68 65 6e 20 74 31 2e 64 20 7c 20 31 31 20   then t1.d | 11 
c080: 65 6c 73 65 20 31 39 20 65 6e 64 20 69 6e 20 28  else 19 end in (
c090: 73 65 6c 65 63 74 20 31 37 20 66 72 6f 6d 20 74  select 17 from t
c0a0: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64  1 union select d
c0b0: 20 66 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b 7d 0a   from t1)}.} {}.
c0c0: 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
c0d0: 2d 32 2e 36 35 20 7b 0a 20 20 64 62 20 65 76 61  -2.65 {.  db eva
c0e0: 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
c0f0: 68 65 6e 20 31 31 20 69 6e 20 28 73 65 6c 65 63  hen 11 in (selec
c100: 74 20 6d 61 78 28 66 29 20 66 72 6f 6d 20 74 31  t max(f) from t1
c110: 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 69   union select mi
c120: 6e 28 31 39 2b 2b 31 33 29 20 7c 20 6d 69 6e 28  n(19++13) | min(
c130: 74 31 2e 63 29 20 66 72 6f 6d 20 74 31 29 20 61  t1.c) from t1) a
c140: 6e 64 20 28 65 20 69 6e 20 28 73 65 6c 65 63 74  nd (e in (select
c150: 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e   t1.d from t1 un
c160: 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 61 20  ion select t1.a 
c170: 7c 20 31 37 2a 63 61 73 65 20 65 20 77 68 65 6e  | 17*case e when
c180: 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
c190: 74 20 6d 61 78 28 61 29 20 66 72 6f 6d 20 74 31  t max(a) from t1
c1a0: 20 77 68 65 72 65 20 62 20 6e 6f 74 20 69 6e 20   where b not in 
c1b0: 28 62 2c 66 2c 64 29 20 6f 72 20 74 31 2e 61 3c  (b,f,d) or t1.a<
c1c0: 3d 66 29 2c 31 31 29 20 74 68 65 6e 20 74 31 2e  =f),11) then t1.
c1d0: 61 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 20  a else t1.b end 
c1e0: 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 20 2d 61  from t1) and  -a
c1f0: 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 62 20 61   not between b a
c200: 6e 64 20 64 29 20 74 68 65 6e 20 64 20 77 68 65  nd d) then d whe
c210: 6e 20 20 2d 74 31 2e 66 3d 62 20 6f 72 20 74 31  n  -t1.f=b or t1
c220: 2e 62 20 62 65 74 77 65 65 6e 20 20 2d 66 20 61  .b between  -f a
c230: 6e 64 20 20 2d 64 20 74 68 65 6e 20 31 39 20 65  nd  -d then 19 e
c240: 6c 73 65 20 64 20 65 6e 64 2b 64 20 46 52 4f 4d  lse d end+d FROM
c250: 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 63   t1 WHERE NOT (c
c260: 61 73 65 20 77 68 65 6e 20 28 63 6f 61 6c 65 73  ase when (coales
c270: 63 65 28 28 73 65 6c 65 63 74 20 63 61 73 65 20  ce((select case 
c280: 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 62  (select max(t1.b
c290: 29 20 66 72 6f 6d 20 74 31 29 20 77 68 65 6e 20  ) from t1) when 
c2a0: 28 62 2a 20 2d 74 31 2e 65 2b 65 2a 65 2d 74 31  (b* -t1.e+e*e-t1
c2b0: 2e 61 29 20 74 68 65 6e 20 63 20 65 6c 73 65 20  .a) then c else 
c2c0: 61 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 77 68  a end from t1 wh
c2d0: 65 72 65 20 31 37 20 69 6e 20 28 73 65 6c 65 63  ere 17 in (selec
c2e0: 74 20 6d 69 6e 28 74 31 2e 64 29 2d 61 62 73 28  t min(t1.d)-abs(
c2f0: 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d 20 74  count(*)) from t
c300: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63  1 union select c
c310: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29  ount(distinct c)
c320: 20 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 64 29   from t1)),t1.d)
c330: 3d 28 74 31 2e 64 29 29 20 61 6e 64 20 65 20 69  =(t1.d)) and e i
c340: 6e 20 28 73 65 6c 65 63 74 20 20 2d 6d 69 6e 28  n (select  -min(
c350: 74 31 2e 62 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.b) from t1 un
c360: 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e 74  ion select count
c370: 28 64 69 73 74 69 6e 63 74 20 31 31 29 20 66 72  (distinct 11) fr
c380: 6f 6d 20 74 31 29 20 61 6e 64 20 61 3c 20 2d 20  om t1) and a< - 
c390: 2d 31 37 20 74 68 65 6e 20 74 31 2e 64 20 7c 20  -17 then t1.d | 
c3a0: 31 31 20 65 6c 73 65 20 31 39 20 65 6e 64 20 69  11 else 19 end i
c3b0: 6e 20 28 73 65 6c 65 63 74 20 31 37 20 66 72 6f  n (select 17 fro
c3c0: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
c3d0: 74 20 64 20 66 72 6f 6d 20 74 31 29 29 7d 0a 7d  t d from t1))}.}
c3e0: 20 7b 38 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72   {800}.do_test r
c3f0: 61 6e 64 65 78 70 72 2d 32 2e 36 36 20 7b 0a 20  andexpr-2.66 {. 
c400: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
c410: 20 63 61 73 65 20 77 68 65 6e 20 31 31 20 69 6e   case when 11 in
c420: 20 28 73 65 6c 65 63 74 20 6d 61 78 28 66 29 20   (select max(f) 
c430: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
c440: 6c 65 63 74 20 6d 69 6e 28 31 39 2b 2b 31 33 29  lect min(19++13)
c450: 20 26 20 6d 69 6e 28 74 31 2e 63 29 20 66 72 6f   & min(t1.c) fro
c460: 6d 20 74 31 29 20 61 6e 64 20 28 65 20 69 6e 20  m t1) and (e in 
c470: 28 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f  (select t1.d fro
c480: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
c490: 74 20 74 31 2e 61 20 26 20 31 37 2a 63 61 73 65  t t1.a & 17*case
c4a0: 20 65 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65   e when coalesce
c4b0: 28 28 73 65 6c 65 63 74 20 6d 61 78 28 61 29 20  ((select max(a) 
c4c0: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62 20  from t1 where b 
c4d0: 6e 6f 74 20 69 6e 20 28 62 2c 66 2c 64 29 20 6f  not in (b,f,d) o
c4e0: 72 20 74 31 2e 61 3c 3d 66 29 2c 31 31 29 20 74  r t1.a<=f),11) t
c4f0: 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 74 31  hen t1.a else t1
c500: 2e 62 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 20  .b end from t1) 
c510: 61 6e 64 20 20 2d 61 20 6e 6f 74 20 62 65 74 77  and  -a not betw
c520: 65 65 6e 20 62 20 61 6e 64 20 64 29 20 74 68 65  een b and d) the
c530: 6e 20 64 20 77 68 65 6e 20 20 2d 74 31 2e 66 3d  n d when  -t1.f=
c540: 62 20 6f 72 20 74 31 2e 62 20 62 65 74 77 65 65  b or t1.b betwee
c550: 6e 20 20 2d 66 20 61 6e 64 20 20 2d 64 20 74 68  n  -f and  -d th
c560: 65 6e 20 31 39 20 65 6c 73 65 20 64 20 65 6e 64  en 19 else d end
c570: 2b 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  +d FROM t1 WHERE
c580: 20 4e 4f 54 20 28 63 61 73 65 20 77 68 65 6e 20   NOT (case when 
c590: 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
c5a0: 74 20 63 61 73 65 20 28 73 65 6c 65 63 74 20 6d  t case (select m
c5b0: 61 78 28 74 31 2e 62 29 20 66 72 6f 6d 20 74 31  ax(t1.b) from t1
c5c0: 29 20 77 68 65 6e 20 28 62 2a 20 2d 74 31 2e 65  ) when (b* -t1.e
c5d0: 2b 65 2a 65 2d 74 31 2e 61 29 20 74 68 65 6e 20  +e*e-t1.a) then 
c5e0: 63 20 65 6c 73 65 20 61 20 65 6e 64 20 66 72 6f  c else a end fro
c5f0: 6d 20 74 31 20 77 68 65 72 65 20 31 37 20 69 6e  m t1 where 17 in
c600: 20 28 73 65 6c 65 63 74 20 6d 69 6e 28 74 31 2e   (select min(t1.
c610: 64 29 2d 61 62 73 28 63 6f 75 6e 74 28 2a 29 29  d)-abs(count(*))
c620: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
c630: 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
c640: 69 6e 63 74 20 63 29 20 66 72 6f 6d 20 74 31 29  inct c) from t1)
c650: 29 2c 74 31 2e 64 29 3d 28 74 31 2e 64 29 29 20  ),t1.d)=(t1.d)) 
c660: 61 6e 64 20 65 20 69 6e 20 28 73 65 6c 65 63 74  and e in (select
c670: 20 20 2d 6d 69 6e 28 74 31 2e 62 29 20 66 72 6f    -min(t1.b) fro
c680: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
c690: 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  t count(distinct
c6a0: 20 31 31 29 20 66 72 6f 6d 20 74 31 29 20 61 6e   11) from t1) an
c6b0: 64 20 61 3c 20 2d 20 2d 31 37 20 74 68 65 6e 20  d a< - -17 then 
c6c0: 74 31 2e 64 20 7c 20 31 31 20 65 6c 73 65 20 31  t1.d | 11 else 1
c6d0: 39 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74  9 end in (select
c6e0: 20 31 37 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f   17 from t1 unio
c6f0: 6e 20 73 65 6c 65 63 74 20 64 20 66 72 6f 6d 20  n select d from 
c700: 74 31 29 29 7d 0a 7d 20 7b 38 30 30 7d 0a 64 6f  t1))}.} {800}.do
c710: 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
c720: 2e 36 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .67 {.  db eval 
c730: 7b 53 45 4c 45 43 54 20 28 61 62 73 28 28 73 65  {SELECT (abs((se
c740: 6c 65 63 74 20 6d 69 6e 28 31 33 29 20 66 72 6f  lect min(13) fro
c750: 6d 20 74 31 29 29 2f 61 62 73 28 63 6f 61 6c 65  m t1))/abs(coale
c760: 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 65  sce((select t1.e
c770: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63   from t1 where c
c780: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
c790: 74 31 2e 66 20 66 72 6f 6d 20 74 31 20 77 68 65  t1.f from t1 whe
c7a0: 72 65 20 20 2d 31 31 3c 3d 62 2d 74 31 2e 63 2a  re  -11<=b-t1.c*
c7b0: 63 61 73 65 20 77 68 65 6e 20 28 64 29 2d 74 31  case when (d)-t1
c7c0: 2e 66 2b 74 31 2e 65 2d 31 33 3c 3e 74 31 2e 62  .f+t1.e-13<>t1.b
c7d0: 20 74 68 65 6e 20 31 31 20 77 68 65 6e 20 65 78   then 11 when ex
c7e0: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
c7f0: 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 64  om t1 where t1.d
c800: 3c 3e 28 28 74 31 2e 62 29 29 20 6f 72 20 74 31  <>((t1.b)) or t1
c810: 2e 61 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 64  .a not between d
c820: 20 61 6e 64 20 31 33 29 20 6f 72 20 74 31 2e 62   and 13) or t1.b
c830: 3c 3e 74 31 2e 63 20 74 68 65 6e 20 74 31 2e 65  <>t1.c then t1.e
c840: 20 65 6c 73 65 20 20 2d 74 31 2e 64 20 65 6e 64   else  -t1.d end
c850: 2b 74 31 2e 61 20 6f 72 20 74 31 2e 63 20 6e 6f  +t1.a or t1.c no
c860: 74 20 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20  t between f and 
c870: 64 29 2c 65 29 3c 3e 65 29 2c 20 2d 66 29 29 29  d),e)<>e), -f)))
c880: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
c890: 31 2e 63 3c 3e 28 73 65 6c 65 63 74 20 6d 69 6e  1.c<>(select min
c8a0: 28 28 61 62 73 28 28 20 2d 31 39 2d 74 31 2e 62  ((abs(( -19-t1.b
c8b0: 2a 31 33 2d 20 2d 2b 2b 7e 74 31 2e 66 2a 64 2d  *13- -++~t1.f*d-
c8c0: 31 37 2a 31 39 2a 31 31 29 29 2f 61 62 73 28 31  17*19*11))/abs(1
c8d0: 37 29 29 29 20 66 72 6f 6d 20 74 31 29 7d 0a 7d  7))) from t1)}.}
c8e0: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e   {0}.do_test ran
c8f0: 64 65 78 70 72 2d 32 2e 36 38 20 7b 0a 20 20 64  dexpr-2.68 {.  d
c900: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28  b eval {SELECT (
c910: 61 62 73 28 28 73 65 6c 65 63 74 20 6d 69 6e 28  abs((select min(
c920: 31 33 29 20 66 72 6f 6d 20 74 31 29 29 2f 61 62  13) from t1))/ab
c930: 73 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  s(coalesce((sele
c940: 63 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 20  ct t1.e from t1 
c950: 77 68 65 72 65 20 63 6f 61 6c 65 73 63 65 28 28  where coalesce((
c960: 73 65 6c 65 63 74 20 74 31 2e 66 20 66 72 6f 6d  select t1.f from
c970: 20 74 31 20 77 68 65 72 65 20 20 2d 31 31 3c 3d   t1 where  -11<=
c980: 62 2d 74 31 2e 63 2a 63 61 73 65 20 77 68 65 6e  b-t1.c*case when
c990: 20 28 64 29 2d 74 31 2e 66 2b 74 31 2e 65 2d 31   (d)-t1.f+t1.e-1
c9a0: 33 3c 3e 74 31 2e 62 20 74 68 65 6e 20 31 31 20  3<>t1.b then 11 
c9b0: 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65  when exists(sele
c9c0: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
c9d0: 72 65 20 74 31 2e 64 3c 3e 28 28 74 31 2e 62 29  re t1.d<>((t1.b)
c9e0: 29 20 6f 72 20 74 31 2e 61 20 6e 6f 74 20 62 65  ) or t1.a not be
c9f0: 74 77 65 65 6e 20 64 20 61 6e 64 20 31 33 29 20  tween d and 13) 
ca00: 6f 72 20 74 31 2e 62 3c 3e 74 31 2e 63 20 74 68  or t1.b<>t1.c th
ca10: 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 20 2d 74  en t1.e else  -t
ca20: 31 2e 64 20 65 6e 64 2b 74 31 2e 61 20 6f 72 20  1.d end+t1.a or 
ca30: 74 31 2e 63 20 6e 6f 74 20 62 65 74 77 65 65 6e  t1.c not between
ca40: 20 66 20 61 6e 64 20 64 29 2c 65 29 3c 3e 65 29   f and d),e)<>e)
ca50: 2c 20 2d 66 29 29 29 20 46 52 4f 4d 20 74 31 20  , -f))) FROM t1 
ca60: 57 48 45 52 45 20 4e 4f 54 20 28 74 31 2e 63 3c  WHERE NOT (t1.c<
ca70: 3e 28 73 65 6c 65 63 74 20 6d 69 6e 28 28 61 62  >(select min((ab
ca80: 73 28 28 20 2d 31 39 2d 74 31 2e 62 2a 31 33 2d  s(( -19-t1.b*13-
ca90: 20 2d 2b 2b 7e 74 31 2e 66 2a 64 2d 31 37 2a 31   -++~t1.f*d-17*1
caa0: 39 2a 31 31 29 29 2f 61 62 73 28 31 37 29 29 29  9*11))/abs(17)))
cab0: 20 66 72 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 7d   from t1))}.} {}
cac0: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
cad0: 72 2d 32 2e 36 39 20 7b 0a 20 20 64 62 20 65 76  r-2.69 {.  db ev
cae0: 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
caf0: 64 2d 63 61 73 65 20 77 68 65 6e 20 63 3c 20 2d  d-case when c< -
cb00: 63 61 73 65 20 77 68 65 6e 20 62 3c 3d 66 20 6f  case when b<=f o
cb10: 72 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  r coalesce((sele
cb20: 63 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 20  ct t1.e from t1 
cb30: 77 68 65 72 65 20 31 31 3c 63 6f 61 6c 65 73 63  where 11<coalesc
cb40: 65 28 28 73 65 6c 65 63 74 20 62 2b 28 74 31 2e  e((select b+(t1.
cb50: 66 29 2b 74 31 2e 65 2d 64 20 66 72 6f 6d 20 74  f)+t1.e-d from t
cb60: 31 20 77 68 65 72 65 20 28 74 31 2e 63 3c 66 29  1 where (t1.c<f)
cb70: 29 2c 74 31 2e 64 29 29 2c 74 31 2e 65 29 3e 65  ),t1.d)),t1.e)>e
cb80: 20 74 68 65 6e 20 31 39 20 77 68 65 6e 20 6e 6f   then 19 when no
cb90: 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
cba0: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
cbb0: 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
cbc0: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
cbd0: 65 20 74 31 2e 64 3e 3d 64 29 29 20 74 68 65 6e  e t1.d>=d)) then
cbe0: 20 74 31 2e 66 20 65 6c 73 65 20 31 37 20 65 6e   t1.f else 17 en
cbf0: 64 20 74 68 65 6e 20 65 20 77 68 65 6e 20 6e 6f  d then e when no
cc00: 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
cc10: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
cc20: 64 3d 62 29 20 74 68 65 6e 20 74 31 2e 63 20 65  d=b) then t1.c e
cc30: 6c 73 65 20 66 20 65 6e 64 20 77 68 65 6e 20 31  lse f end when 1
cc40: 37 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20 74  7 then 19 else t
cc50: 31 2e 66 20 65 6e 64 20 46 52 4f 4d 20 74 31 20  1.f end FROM t1 
cc60: 57 48 45 52 45 20 63 6f 61 6c 65 73 63 65 28 28  WHERE coalesce((
cc70: 73 65 6c 65 63 74 20 6d 61 78 28 2b 74 31 2e 64  select max(+t1.d
cc80: 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
cc90: 65 3c 3e 65 20 6f 72 20 6e 6f 74 20 65 78 69 73  e<>e or not exis
cca0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
ccb0: 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78   t1 where not ex
ccc0: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
ccd0: 6f 6d 20 74 31 20 77 68 65 72 65 20 28 61 62 73  om t1 where (abs
cce0: 28 66 29 2f 61 62 73 28 66 29 29 2b 2b 74 31 2e  (f)/abs(f))++t1.
ccf0: 62 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73  b in (select cas
cd00: 65 20 61 62 73 28 63 61 73 74 28 61 76 67 28 65  e abs(cast(avg(e
cd10: 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 77  ) AS integer)) w
cd20: 68 65 6e 20 63 61 73 74 28 61 76 67 28 31 37 29  hen cast(avg(17)
cd30: 20 41 53 20 69 6e 74 65 67 65 72 29 20 7c 20 6d   AS integer) | m
cd40: 61 78 28 64 29 20 7c 20 63 61 73 74 28 61 76 67  ax(d) | cast(avg
cd50: 28 74 31 2e 65 29 20 41 53 20 69 6e 74 65 67 65  (t1.e) AS intege
cd60: 72 29 20 7c 20 6d 69 6e 28 74 31 2e 65 29 20 74  r) | min(t1.e) t
cd70: 68 65 6e 20 28 63 61 73 74 28 61 76 67 28 31 39  hen (cast(avg(19
cd80: 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 65  ) AS integer)) e
cd90: 6c 73 65 20 63 61 73 74 28 61 76 67 28 63 29 20  lse cast(avg(c) 
cda0: 41 53 20 69 6e 74 65 67 65 72 29 20 65 6e 64 20  AS integer) end 
cdb0: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
cdc0: 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 74 31  lect cast(avg(t1
cdd0: 2e 66 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .f) AS integer) 
cde0: 66 72 6f 6d 20 74 31 29 29 29 20 61 6e 64 20 74  from t1))) and t
cdf0: 31 2e 61 20 62 65 74 77 65 65 6e 20 74 31 2e 66  1.a between t1.f
ce00: 20 61 6e 64 20 62 20 6f 72 20 6e 6f 74 20 31 37   and b or not 17
ce10: 3c 31 33 20 6f 72 20 20 2d 31 31 3d 20 2d 74 31  <13 or  -11= -t1
ce20: 2e 66 20 6f 72 20 74 31 2e 66 20 62 65 74 77 65  .f or t1.f betwe
ce30: 65 6e 20 63 20 61 6e 64 20 31 39 29 2c 64 29 2b  en c and 19),d)+
ce40: 28 74 31 2e 64 29 20 6e 6f 74 20 62 65 74 77 65  (t1.d) not betwe
ce50: 65 6e 20 62 20 61 6e 64 20 65 7d 0a 7d 20 7b 36  en b and e}.} {6
ce60: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  00}.do_test rand
ce70: 65 78 70 72 2d 32 2e 37 30 20 7b 0a 20 20 64 62  expr-2.70 {.  db
ce80: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61   eval {SELECT ca
ce90: 73 65 20 64 2d 63 61 73 65 20 77 68 65 6e 20 63  se d-case when c
cea0: 3c 20 2d 63 61 73 65 20 77 68 65 6e 20 62 3c 3d  < -case when b<=
ceb0: 66 20 6f 72 20 63 6f 61 6c 65 73 63 65 28 28 73  f or coalesce((s
cec0: 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f 6d 20  elect t1.e from 
ced0: 74 31 20 77 68 65 72 65 20 31 31 3c 63 6f 61 6c  t1 where 11<coal
cee0: 65 73 63 65 28 28 73 65 6c 65 63 74 20 62 2b 28  esce((select b+(
cef0: 74 31 2e 66 29 2b 74 31 2e 65 2d 64 20 66 72 6f  t1.f)+t1.e-d fro
cf00: 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e 63  m t1 where (t1.c
cf10: 3c 66 29 29 2c 74 31 2e 64 29 29 2c 74 31 2e 65  <f)),t1.d)),t1.e
cf20: 29 3e 65 20 74 68 65 6e 20 31 39 20 77 68 65 6e  )>e then 19 when
cf30: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
cf40: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
cf50: 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
cf60: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
cf70: 68 65 72 65 20 74 31 2e 64 3e 3d 64 29 29 20 74  here t1.d>=d)) t
cf80: 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 31 37  hen t1.f else 17
cf90: 20 65 6e 64 20 74 68 65 6e 20 65 20 77 68 65 6e   end then e when
cfa0: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
cfb0: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
cfc0: 72 65 20 64 3d 62 29 20 74 68 65 6e 20 74 31 2e  re d=b) then t1.
cfd0: 63 20 65 6c 73 65 20 66 20 65 6e 64 20 77 68 65  c else f end whe
cfe0: 6e 20 31 37 20 74 68 65 6e 20 31 39 20 65 6c 73  n 17 then 19 els
cff0: 65 20 74 31 2e 66 20 65 6e 64 20 46 52 4f 4d 20  e t1.f end FROM 
d000: 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 63 6f  t1 WHERE NOT (co
d010: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
d020: 61 78 28 2b 74 31 2e 64 29 20 66 72 6f 6d 20 74  ax(+t1.d) from t
d030: 31 20 77 68 65 72 65 20 65 3c 3e 65 20 6f 72 20  1 where e<>e or 
d040: 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
d050: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
d060: 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  e not exists(sel
d070: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
d080: 65 72 65 20 28 61 62 73 28 66 29 2f 61 62 73 28  ere (abs(f)/abs(
d090: 66 29 29 2b 2b 74 31 2e 62 20 69 6e 20 28 73 65  f))++t1.b in (se
d0a0: 6c 65 63 74 20 63 61 73 65 20 61 62 73 28 63 61  lect case abs(ca
d0b0: 73 74 28 61 76 67 28 65 29 20 41 53 20 69 6e 74  st(avg(e) AS int
d0c0: 65 67 65 72 29 29 20 77 68 65 6e 20 63 61 73 74  eger)) when cast
d0d0: 28 61 76 67 28 31 37 29 20 41 53 20 69 6e 74 65  (avg(17) AS inte
d0e0: 67 65 72 29 20 7c 20 6d 61 78 28 64 29 20 7c 20  ger) | max(d) | 
d0f0: 63 61 73 74 28 61 76 67 28 74 31 2e 65 29 20 41  cast(avg(t1.e) A
d100: 53 20 69 6e 74 65 67 65 72 29 20 7c 20 6d 69 6e  S integer) | min
d110: 28 74 31 2e 65 29 20 74 68 65 6e 20 28 63 61 73  (t1.e) then (cas
d120: 74 28 61 76 67 28 31 39 29 20 41 53 20 69 6e 74  t(avg(19) AS int
d130: 65 67 65 72 29 29 20 65 6c 73 65 20 63 61 73 74  eger)) else cast
d140: 28 61 76 67 28 63 29 20 41 53 20 69 6e 74 65 67  (avg(c) AS integ
d150: 65 72 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20  er) end from t1 
d160: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73  union select cas
d170: 74 28 61 76 67 28 74 31 2e 66 29 20 41 53 20 69  t(avg(t1.f) AS i
d180: 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
d190: 29 29 20 61 6e 64 20 74 31 2e 61 20 62 65 74 77  )) and t1.a betw
d1a0: 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 62 20 6f  een t1.f and b o
d1b0: 72 20 6e 6f 74 20 31 37 3c 31 33 20 6f 72 20 20  r not 17<13 or  
d1c0: 2d 31 31 3d 20 2d 74 31 2e 66 20 6f 72 20 74 31  -11= -t1.f or t1
d1d0: 2e 66 20 62 65 74 77 65 65 6e 20 63 20 61 6e 64  .f between c and
d1e0: 20 31 39 29 2c 64 29 2b 28 74 31 2e 64 29 20 6e   19),d)+(t1.d) n
d1f0: 6f 74 20 62 65 74 77 65 65 6e 20 62 20 61 6e 64  ot between b and
d200: 20 65 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73   e)}.} {}.do_tes
d210: 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 37 31 20  t randexpr-2.71 
d220: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
d230: 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 74 31  ECT case when t1
d240: 2e 65 20 69 6e 20 28 73 65 6c 65 63 74 20 61 62  .e in (select ab
d250: 73 28 6d 61 78 28 63 61 73 65 20 61 2b 63 61 73  s(max(case a+cas
d260: 65 20 77 68 65 6e 20 74 31 2e 61 3e 3d 65 2b 20  e when t1.a>=e+ 
d270: 2d 63 20 74 68 65 6e 20 61 20 65 6c 73 65 20 74  -c then a else t
d280: 31 2e 62 20 65 6e 64 2b 74 31 2e 61 20 77 68 65  1.b end+t1.a whe
d290: 6e 20 74 31 2e 66 20 74 68 65 6e 20 31 39 20 65  n t1.f then 19 e
d2a0: 6c 73 65 20 20 2d 31 39 20 65 6e 64 29 2b 61 62  lse  -19 end)+ab
d2b0: 73 28 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e  s( -count(distin
d2c0: 63 74 20 74 31 2e 63 29 29 2b 7e 28 63 6f 75 6e  ct t1.c))+~(coun
d2d0: 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 62 29  t(distinct t1.b)
d2e0: 29 29 2d 6d 69 6e 28 62 29 20 66 72 6f 6d 20 74  ))-min(b) from t
d2f0: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d  1 union select m
d300: 61 78 28 66 29 20 66 72 6f 6d 20 74 31 29 20 61  ax(f) from t1) a
d310: 6e 64 20 63 61 73 65 20 74 31 2e 65 20 77 68 65  nd case t1.e whe
d320: 6e 20 20 2d 74 31 2e 63 20 74 68 65 6e 20 31 39  n  -t1.c then 19
d330: 20 65 6c 73 65 20 62 20 65 6e 64 3c 74 31 2e 64   else b end<t1.d
d340: 20 74 68 65 6e 20 65 2b 28 64 29 20 77 68 65 6e   then e+(d) when
d350: 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
d360: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
d370: 39 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31  9 not between t1
d380: 2e 65 20 61 6e 64 20 28 31 39 29 29 20 74 68 65  .e and (19)) the
d390: 6e 20 20 2d 31 39 20 65 6c 73 65 20 74 31 2e 63  n  -19 else t1.c
d3a0: 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45   end FROM t1 WHE
d3b0: 52 45 20 28 65 78 69 73 74 73 28 73 65 6c 65 63  RE (exists(selec
d3c0: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
d3d0: 65 20 74 31 2e 65 20 62 65 74 77 65 65 6e 20 74  e t1.e between t
d3e0: 31 2e 63 2d 74 31 2e 64 20 61 6e 64 20 28 74 31  1.c-t1.d and (t1
d3f0: 2e 61 29 29 20 61 6e 64 20 28 28 6e 6f 74 20 63  .a)) and ((not c
d400: 61 73 65 20 31 39 20 77 68 65 6e 20 31 31 20 74  ase 19 when 11 t
d410: 68 65 6e 20 65 20 65 6c 73 65 20 7e 64 20 7c 20  hen e else ~d | 
d420: 74 31 2e 61 2a 31 39 20 65 6e 64 2a 28 28 62 29  t1.a*19 end*((b)
d430: 29 3e 3d 74 31 2e 65 29 29 29 20 6f 72 20 63 20  )>=t1.e))) or c 
d440: 69 6e 20 28 73 65 6c 65 63 74 20 66 20 66 72 6f  in (select f fro
d450: 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
d460: 74 20 31 33 20 66 72 6f 6d 20 74 31 29 20 61 6e  t 13 from t1) an
d470: 64 20 28 62 29 3c 20 2d 74 31 2e 63 20 61 6e 64  d (b)< -t1.c and
d480: 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 61   f in (select ma
d490: 78 28 31 33 29 20 66 72 6f 6d 20 74 31 20 75 6e  x(13) from t1 un
d4a0: 69 6f 6e 20 73 65 6c 65 63 74 20 7e 2b 61 62 73  ion select ~+abs
d4b0: 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  (count(distinct 
d4c0: 65 29 2a 61 62 73 28 28 28 63 6f 75 6e 74 28 2a  e)*abs(((count(*
d4d0: 29 29 29 2a 28 28 6d 61 78 28 66 29 29 29 29 29  )))*((max(f)))))
d4e0: 20 66 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b 7d 0a   from t1)}.} {}.
d4f0: 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
d500: 2d 32 2e 37 32 20 7b 0a 20 20 64 62 20 65 76 61  -2.72 {.  db eva
d510: 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
d520: 68 65 6e 20 74 31 2e 65 20 69 6e 20 28 73 65 6c  hen t1.e in (sel
d530: 65 63 74 20 61 62 73 28 6d 61 78 28 63 61 73 65  ect abs(max(case
d540: 20 61 2b 63 61 73 65 20 77 68 65 6e 20 74 31 2e   a+case when t1.
d550: 61 3e 3d 65 2b 20 2d 63 20 74 68 65 6e 20 61 20  a>=e+ -c then a 
d560: 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 2b 74 31  else t1.b end+t1
d570: 2e 61 20 77 68 65 6e 20 74 31 2e 66 20 74 68 65  .a when t1.f the
d580: 6e 20 31 39 20 65 6c 73 65 20 20 2d 31 39 20 65  n 19 else  -19 e
d590: 6e 64 29 2b 61 62 73 28 20 2d 63 6f 75 6e 74 28  nd)+abs( -count(
d5a0: 64 69 73 74 69 6e 63 74 20 74 31 2e 63 29 29 2b  distinct t1.c))+
d5b0: 7e 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  ~(count(distinct
d5c0: 20 74 31 2e 62 29 29 29 2d 6d 69 6e 28 62 29 20   t1.b)))-min(b) 
d5d0: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
d5e0: 6c 65 63 74 20 6d 61 78 28 66 29 20 66 72 6f 6d  lect max(f) from
d5f0: 20 74 31 29 20 61 6e 64 20 63 61 73 65 20 74 31   t1) and case t1
d600: 2e 65 20 77 68 65 6e 20 20 2d 74 31 2e 63 20 74  .e when  -t1.c t
d610: 68 65 6e 20 31 39 20 65 6c 73 65 20 62 20 65 6e  hen 19 else b en
d620: 64 3c 74 31 2e 64 20 74 68 65 6e 20 65 2b 28 64  d<t1.d then e+(d
d630: 29 20 77 68 65 6e 20 65 78 69 73 74 73 28 73 65  ) when exists(se
d640: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
d650: 68 65 72 65 20 31 39 20 6e 6f 74 20 62 65 74 77  here 19 not betw
d660: 65 65 6e 20 74 31 2e 65 20 61 6e 64 20 28 31 39  een t1.e and (19
d670: 29 29 20 74 68 65 6e 20 20 2d 31 39 20 65 6c 73  )) then  -19 els
d680: 65 20 74 31 2e 63 20 65 6e 64 20 46 52 4f 4d 20  e t1.c end FROM 
d690: 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28 65  t1 WHERE NOT ((e
d6a0: 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
d6b0: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
d6c0: 65 20 62 65 74 77 65 65 6e 20 74 31 2e 63 2d 74  e between t1.c-t
d6d0: 31 2e 64 20 61 6e 64 20 28 74 31 2e 61 29 29 20  1.d and (t1.a)) 
d6e0: 61 6e 64 20 28 28 6e 6f 74 20 63 61 73 65 20 31  and ((not case 1
d6f0: 39 20 77 68 65 6e 20 31 31 20 74 68 65 6e 20 65  9 when 11 then e
d700: 20 65 6c 73 65 20 7e 64 20 7c 20 74 31 2e 61 2a   else ~d | t1.a*
d710: 31 39 20 65 6e 64 2a 28 28 62 29 29 3e 3d 74 31  19 end*((b))>=t1
d720: 2e 65 29 29 29 20 6f 72 20 63 20 69 6e 20 28 73  .e))) or c in (s
d730: 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74 31 20  elect f from t1 
d740: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 31 33 20  union select 13 
d750: 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 28 62 29  from t1) and (b)
d760: 3c 20 2d 74 31 2e 63 20 61 6e 64 20 66 20 69 6e  < -t1.c and f in
d770: 20 28 73 65 6c 65 63 74 20 6d 61 78 28 31 33 29   (select max(13)
d780: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
d790: 65 6c 65 63 74 20 7e 2b 61 62 73 28 63 6f 75 6e  elect ~+abs(coun
d7a0: 74 28 64 69 73 74 69 6e 63 74 20 65 29 2a 61 62  t(distinct e)*ab
d7b0: 73 28 28 28 63 6f 75 6e 74 28 2a 29 29 29 2a 28  s(((count(*)))*(
d7c0: 28 6d 61 78 28 66 29 29 29 29 29 20 66 72 6f 6d  (max(f))))) from
d7d0: 20 74 31 29 29 7d 0a 7d 20 7b 2d 31 39 7d 0a 64   t1))}.} {-19}.d
d7e0: 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
d7f0: 32 2e 37 33 20 7b 0a 20 20 64 62 20 65 76 61 6c  2.73 {.  db eval
d800: 20 7b 53 45 4c 45 43 54 20 63 2a 63 61 73 65 20   {SELECT c*case 
d810: 77 68 65 6e 20 74 31 2e 61 20 69 6e 20 28 73 65  when t1.a in (se
d820: 6c 65 63 74 20 7e 63 6f 75 6e 74 28 2a 29 20 66  lect ~count(*) f
d830: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
d840: 65 63 74 20 20 2d 63 6f 75 6e 74 28 64 69 73 74  ect  -count(dist
d850: 69 6e 63 74 20 7e 63 61 73 65 20 28 61 62 73 28  inct ~case (abs(
d860: 31 31 29 2f 61 62 73 28 62 2d 28 63 6f 61 6c 65  11)/abs(b-(coale
d870: 73 63 65 28 28 73 65 6c 65 63 74 20 31 37 2d 74  sce((select 17-t
d880: 31 2e 61 20 66 72 6f 6d 20 74 31 20 77 68 65 72  1.a from t1 wher
d890: 65 20 6e 6f 74 20 74 31 2e 64 3d 74 31 2e 64 29  e not t1.d=t1.d)
d8a0: 2c 28 61 62 73 28 31 31 29 2f 61 62 73 28 61 29  ,(abs(11)/abs(a)
d8b0: 29 29 29 29 29 20 77 68 65 6e 20 63 61 73 65 20  ))))) when case 
d8c0: 77 68 65 6e 20 74 31 2e 64 20 62 65 74 77 65 65  when t1.d betwee
d8d0: 6e 20 31 39 20 61 6e 64 20 63 20 61 6e 64 20 74  n 19 and c and t
d8e0: 31 2e 62 20 62 65 74 77 65 65 6e 20 31 31 20 61  1.b between 11 a
d8f0: 6e 64 20 74 31 2e 61 20 74 68 65 6e 20 31 33 20  nd t1.a then 13 
d900: 65 6c 73 65 20 28 31 33 29 20 65 6e 64 20 74 68  else (13) end th
d910: 65 6e 20 28 31 33 29 20 65 6c 73 65 20 31 39 20  en (13) else 19 
d920: 65 6e 64 2d 31 39 2a 31 33 2b 31 31 29 20 66 72  end-19*13+11) fr
d930: 6f 6d 20 74 31 29 20 74 68 65 6e 20 74 31 2e 61  om t1) then t1.a
d940: 20 77 68 65 6e 20 74 31 2e 66 3c 3d 74 31 2e 65   when t1.f<=t1.e
d950: 20 74 68 65 6e 20 66 20 65 6c 73 65 20 62 20 65   then f else b e
d960: 6e 64 2d 31 39 2d 63 2b 66 20 46 52 4f 4d 20 74  nd-19-c+f FROM t
d970: 31 20 57 48 45 52 45 20 74 31 2e 62 3e 3d 63 2b  1 WHERE t1.b>=c+
d980: 63 61 73 65 20 77 68 65 6e 20 65 78 69 73 74 73  case when exists
d990: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
d9a0: 31 20 77 68 65 72 65 20 61 3e 3d 2b 66 2d 20 2d  1 where a>=+f- -
d9b0: 63 2a 65 2b 63 6f 61 6c 65 73 63 65 28 28 73 65  c*e+coalesce((se
d9c0: 6c 65 63 74 20 6d 61 78 28 62 29 20 66 72 6f 6d  lect max(b) from
d9d0: 20 74 31 20 77 68 65 72 65 20 28 62 20 6e 6f 74   t1 where (b not
d9e0: 20 62 65 74 77 65 65 6e 20 28 74 31 2e 62 29 20   between (t1.b) 
d9f0: 61 6e 64 20 31 39 29 20 6f 72 20 74 31 2e 66 3c  and 19) or t1.f<
da00: 31 31 29 2c 64 29 2a 66 20 7c 20 74 31 2e 65 2b  11),d)*f | t1.e+
da10: 74 31 2e 62 29 20 74 68 65 6e 20 28 20 2d 74 31  t1.b) then ( -t1
da20: 2e 65 29 2d 31 39 20 77 68 65 6e 20 28 28 74 31  .e)-19 when ((t1
da30: 2e 61 20 69 6e 20 28 73 65 6c 65 63 74 20 31 39  .a in (select 19
da40: 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
da50: 65 6c 65 63 74 20 74 31 2e 66 20 66 72 6f 6d 20  elect t1.f from 
da60: 74 31 29 20 6f 72 20 62 3c 63 20 61 6e 64 20 62  t1) or b<c and b
da70: 3e 20 2d 31 37 29 29 20 74 68 65 6e 20 66 20 65  > -17)) then f e
da80: 6c 73 65 20 66 20 65 6e 64 20 7c 20 64 7d 0a 7d  lse f end | d}.}
da90: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64   {}.do_test rand
daa0: 65 78 70 72 2d 32 2e 37 34 20 7b 0a 20 20 64 62  expr-2.74 {.  db
dab0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 2a   eval {SELECT c*
dac0: 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61 20 69  case when t1.a i
dad0: 6e 20 28 73 65 6c 65 63 74 20 7e 63 6f 75 6e 74  n (select ~count
dae0: 28 2a 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  (*) from t1 unio
daf0: 6e 20 73 65 6c 65 63 74 20 20 2d 63 6f 75 6e 74  n select  -count
db00: 28 64 69 73 74 69 6e 63 74 20 7e 63 61 73 65 20  (distinct ~case 
db10: 28 61 62 73 28 31 31 29 2f 61 62 73 28 62 2d 28  (abs(11)/abs(b-(
db20: 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
db30: 20 31 37 2d 74 31 2e 61 20 66 72 6f 6d 20 74 31   17-t1.a from t1
db40: 20 77 68 65 72 65 20 6e 6f 74 20 74 31 2e 64 3d   where not t1.d=
db50: 74 31 2e 64 29 2c 28 61 62 73 28 31 31 29 2f 61  t1.d),(abs(11)/a
db60: 62 73 28 61 29 29 29 29 29 29 20 77 68 65 6e 20  bs(a)))))) when 
db70: 63 61 73 65 20 77 68 65 6e 20 74 31 2e 64 20 62  case when t1.d b
db80: 65 74 77 65 65 6e 20 31 39 20 61 6e 64 20 63 20  etween 19 and c 
db90: 61 6e 64 20 74 31 2e 62 20 62 65 74 77 65 65 6e  and t1.b between
dba0: 20 31 31 20 61 6e 64 20 74 31 2e 61 20 74 68 65   11 and t1.a the
dbb0: 6e 20 31 33 20 65 6c 73 65 20 28 31 33 29 20 65  n 13 else (13) e
dbc0: 6e 64 20 74 68 65 6e 20 28 31 33 29 20 65 6c 73  nd then (13) els
dbd0: 65 20 31 39 20 65 6e 64 2d 31 39 2a 31 33 2b 31  e 19 end-19*13+1
dbe0: 31 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e  1) from t1) then
dbf0: 20 74 31 2e 61 20 77 68 65 6e 20 74 31 2e 66 3c   t1.a when t1.f<
dc00: 3d 74 31 2e 65 20 74 68 65 6e 20 66 20 65 6c 73  =t1.e then f els
dc10: 65 20 62 20 65 6e 64 2d 31 39 2d 63 2b 66 20 46  e b end-19-c+f F
dc20: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
dc30: 20 28 74 31 2e 62 3e 3d 63 2b 63 61 73 65 20 77   (t1.b>=c+case w
dc40: 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63  hen exists(selec
dc50: 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
dc60: 65 20 61 3e 3d 2b 66 2d 20 2d 63 2a 65 2b 63 6f  e a>=+f- -c*e+co
dc70: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
dc80: 61 78 28 62 29 20 66 72 6f 6d 20 74 31 20 77 68  ax(b) from t1 wh
dc90: 65 72 65 20 28 62 20 6e 6f 74 20 62 65 74 77 65  ere (b not betwe
dca0: 65 6e 20 28 74 31 2e 62 29 20 61 6e 64 20 31 39  en (t1.b) and 19
dcb0: 29 20 6f 72 20 74 31 2e 66 3c 31 31 29 2c 64 29  ) or t1.f<11),d)
dcc0: 2a 66 20 7c 20 74 31 2e 65 2b 74 31 2e 62 29 20  *f | t1.e+t1.b) 
dcd0: 74 68 65 6e 20 28 20 2d 74 31 2e 65 29 2d 31 39  then ( -t1.e)-19
dce0: 20 77 68 65 6e 20 28 28 74 31 2e 61 20 69 6e 20   when ((t1.a in 
dcf0: 28 73 65 6c 65 63 74 20 31 39 20 66 72 6f 6d 20  (select 19 from 
dd00: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
dd10: 74 31 2e 66 20 66 72 6f 6d 20 74 31 29 20 6f 72  t1.f from t1) or
dd20: 20 62 3c 63 20 61 6e 64 20 62 3e 20 2d 31 37 29   b<c and b> -17)
dd30: 29 20 74 68 65 6e 20 66 20 65 6c 73 65 20 66 20  ) then f else f 
dd40: 65 6e 64 20 7c 20 64 29 7d 0a 7d 20 7b 36 30 32  end | d)}.} {602
dd50: 38 31 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  81}.do_test rand
dd60: 65 78 70 72 2d 32 2e 37 35 20 7b 0a 20 20 64 62  expr-2.75 {.  db
dd70: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 61   eval {SELECT (a
dd80: 62 73 28 63 61 73 65 20 77 68 65 6e 20 61 3e 3d  bs(case when a>=
dd90: 62 20 74 68 65 6e 20 74 31 2e 63 2d 63 61 73 65  b then t1.c-case
dda0: 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73   when not exists
ddb0: 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
ddc0: 31 20 77 68 65 72 65 20 63 61 73 65 20 64 20 77  1 where case d w
ddd0: 68 65 6e 20 2b 31 37 20 74 68 65 6e 20 31 39 2b  hen +17 then 19+
dde0: 63 20 65 6c 73 65 20 31 31 20 65 6e 64 2d 28 61  c else 11 end-(a
ddf0: 62 73 28 28 73 65 6c 65 63 74 20 20 2d 20 2d 63  bs((select  - -c
de00: 61 73 74 28 61 76 67 28 63 61 73 65 20 77 68 65  ast(avg(case whe
de10: 6e 20 28 31 31 2d 20 2d 28 61 62 73 28 65 29 2f  n (11- -(abs(e)/
de20: 61 62 73 28 31 33 29 29 2d 74 31 2e 66 3c 74 31  abs(13))-t1.f<t1
de30: 2e 65 29 20 74 68 65 6e 20 74 31 2e 63 2b 64 20  .e) then t1.c+d 
de40: 65 6c 73 65 20 61 20 65 6e 64 2d 74 31 2e 63 29  else a end-t1.c)
de50: 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
de60: 6d 20 74 31 29 29 2f 61 62 73 28 74 31 2e 61 29  m t1))/abs(t1.a)
de70: 29 3c 3d 62 29 20 74 68 65 6e 20 20 2d 65 2b 64  )<=b) then  -e+d
de80: 20 65 6c 73 65 20 28 74 31 2e 63 29 20 65 6e 64   else (t1.c) end
de90: 20 65 6c 73 65 20 31 39 20 65 6e 64 29 2f 61 62   else 19 end)/ab
dea0: 73 28 63 29 29 20 46 52 4f 4d 20 74 31 20 57 48  s(c)) FROM t1 WH
deb0: 45 52 45 20 66 3c 3e 31 31 7d 0a 7d 20 7b 30 7d  ERE f<>11}.} {0}
dec0: 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
ded0: 72 2d 32 2e 37 36 20 7b 0a 20 20 64 62 20 65 76  r-2.76 {.  db ev
dee0: 61 6c 20 7b 53 45 4c 45 43 54 20 28 61 62 73 28  al {SELECT (abs(
def0: 63 61 73 65 20 77 68 65 6e 20 61 3e 3d 62 20 74  case when a>=b t
df00: 68 65 6e 20 74 31 2e 63 2d 63 61 73 65 20 77 68  hen t1.c-case wh
df10: 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  en not exists(se
df20: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
df30: 68 65 72 65 20 63 61 73 65 20 64 20 77 68 65 6e  here case d when
df40: 20 2b 31 37 20 74 68 65 6e 20 31 39 2b 63 20 65   +17 then 19+c e
df50: 6c 73 65 20 31 31 20 65 6e 64 2d 28 61 62 73 28  lse 11 end-(abs(
df60: 28 73 65 6c 65 63 74 20 20 2d 20 2d 63 61 73 74  (select  - -cast
df70: 28 61 76 67 28 63 61 73 65 20 77 68 65 6e 20 28  (avg(case when (
df80: 31 31 2d 20 2d 28 61 62 73 28 65 29 2f 61 62 73  11- -(abs(e)/abs
df90: 28 31 33 29 29 2d 74 31 2e 66 3c 74 31 2e 65 29  (13))-t1.f<t1.e)
dfa0: 20 74 68 65 6e 20 74 31 2e 63 2b 64 20 65 6c 73   then t1.c+d els
dfb0: 65 20 61 20 65 6e 64 2d 74 31 2e 63 29 20 41 53  e a end-t1.c) AS
dfc0: 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74   integer) from t
dfd0: 31 29 29 2f 61 62 73 28 74 31 2e 61 29 29 3c 3d  1))/abs(t1.a))<=
dfe0: 62 29 20 74 68 65 6e 20 20 2d 65 2b 64 20 65 6c  b) then  -e+d el
dff0: 73 65 20 28 74 31 2e 63 29 20 65 6e 64 20 65 6c  se (t1.c) end el
e000: 73 65 20 31 39 20 65 6e 64 29 2f 61 62 73 28 63  se 19 end)/abs(c
e010: 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  )) FROM t1 WHERE
e020: 20 4e 4f 54 20 28 66 3c 3e 31 31 29 7d 0a 7d 20   NOT (f<>11)}.} 
e030: 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
e040: 78 70 72 2d 32 2e 37 37 20 7b 0a 20 20 64 62 20  xpr-2.77 {.  db 
e050: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 63  eval {SELECT  -c
e060: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
e070: 6d 61 78 28 65 2d 74 31 2e 62 29 20 66 72 6f 6d  max(e-t1.b) from
e080: 20 74 31 20 77 68 65 72 65 20 74 31 2e 65 3c 31   t1 where t1.e<1
e090: 31 20 61 6e 64 20 74 31 2e 62 20 7c 20 65 20 69  1 and t1.b | e i
e0a0: 6e 20 28 28 61 62 73 28 31 33 29 2f 61 62 73 28  n ((abs(13)/abs(
e0b0: 74 31 2e 62 29 29 2c 28 61 62 73 28 28 2b 31 37  t1.b)),(abs((+17
e0c0: 2d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 63 20  -case when t1.c 
e0d0: 7c 20 31 33 2a 28 64 29 20 7c 20 62 3c 3e 61 20  | 13*(d) | b<>a 
e0e0: 6f 72 20 28 28 74 31 2e 65 29 3e 3d 61 29 20 74  or ((t1.e)>=a) t
e0f0: 68 65 6e 20 74 31 2e 62 2d 74 31 2e 65 20 77 68  hen t1.b-t1.e wh
e100: 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  en not exists(se
e110: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
e120: 68 65 72 65 20 31 37 3c 31 33 29 20 74 68 65 6e  here 17<13) then
e130: 20 20 2d 28 31 33 29 20 65 6c 73 65 20 31 37 20    -(13) else 17 
e140: 65 6e 64 2a 31 33 29 29 2f 61 62 73 28 31 33 29  end*13))/abs(13)
e150: 29 2c 74 31 2e 63 29 29 2c 74 31 2e 65 29 20 7c  ),t1.c)),t1.e) |
e160: 20 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   c FROM t1 WHERE
e170: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
e180: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
e190: 72 65 20 31 37 3c 3d 28 73 65 6c 65 63 74 20 28  re 17<=(select (
e1a0: 63 61 73 65 20 28 7e 2b 61 62 73 28 63 61 73 74  case (~+abs(cast
e1b0: 28 61 76 67 28 28 74 31 2e 65 29 2d 31 37 20 7c  (avg((t1.e)-17 |
e1c0: 20 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 29   b) AS integer))
e1d0: 2d 28 28 63 61 73 65 20 20 2d 63 61 73 74 28 61  -((case  -cast(a
e1e0: 76 67 28 63 61 73 65 20 77 68 65 6e 20 7e 74 31  vg(case when ~t1
e1f0: 2e 62 20 69 6e 20 28 73 65 6c 65 63 74 20 64 20  .b in (select d 
e200: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
e210: 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 29  lect 19 from t1)
e220: 20 74 68 65 6e 20 62 20 77 68 65 6e 20 31 33 20   then b when 13 
e230: 69 6e 20 28 74 31 2e 66 2c 63 2c 74 31 2e 62 29  in (t1.f,c,t1.b)
e240: 20 74 68 65 6e 20 63 20 65 6c 73 65 20 66 20 65   then c else f e
e250: 6e 64 29 20 41 53 20 69 6e 74 65 67 65 72 29 2b  nd) AS integer)+
e260: 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
e270: 31 2e 66 29 2b 63 6f 75 6e 74 28 64 69 73 74 69  1.f)+count(disti
e280: 6e 63 74 20 74 31 2e 64 29 20 77 68 65 6e 20 63  nct t1.d) when c
e290: 6f 75 6e 74 28 2a 29 20 74 68 65 6e 20 28 28 6d  ount(*) then ((m
e2a0: 61 78 28 63 29 29 29 20 65 6c 73 65 20 63 6f 75  ax(c))) else cou
e2b0: 6e 74 28 2a 29 20 65 6e 64 29 2a 63 61 73 74 28  nt(*) end)*cast(
e2c0: 61 76 67 28 74 31 2e 65 29 20 41 53 20 69 6e 74  avg(t1.e) AS int
e2d0: 65 67 65 72 29 29 29 20 77 68 65 6e 20 28 28 63  eger))) when ((c
e2e0: 61 73 74 28 61 76 67 28 61 29 20 41 53 20 69 6e  ast(avg(a) AS in
e2f0: 74 65 67 65 72 29 29 29 20 74 68 65 6e 20 20 2d  teger))) then  -
e300: 6d 61 78 28 64 29 20 65 6c 73 65 20 28 28 63 6f  max(d) else ((co
e310: 75 6e 74 28 2a 29 29 29 20 65 6e 64 29 20 66 72  unt(*))) end) fr
e320: 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 2d 32 31 32  om t1))}.} {-212
e330: 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
e340: 70 72 2d 32 2e 37 38 20 7b 0a 20 20 64 62 20 65  pr-2.78 {.  db e
e350: 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 63 6f  val {SELECT  -co
e360: 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
e370: 61 78 28 65 2d 74 31 2e 62 29 20 66 72 6f 6d 20  ax(e-t1.b) from 
e380: 74 31 20 77 68 65 72 65 20 74 31 2e 65 3c 31 31  t1 where t1.e<11
e390: 20 61 6e 64 20 74 31 2e 62 20 7c 20 65 20 69 6e   and t1.b | e in
e3a0: 20 28 28 61 62 73 28 31 33 29 2f 61 62 73 28 74   ((abs(13)/abs(t
e3b0: 31 2e 62 29 29 2c 28 61 62 73 28 28 2b 31 37 2d  1.b)),(abs((+17-
e3c0: 63 61 73 65 20 77 68 65 6e 20 74 31 2e 63 20 7c  case when t1.c |
e3d0: 20 31 33 2a 28 64 29 20 7c 20 62 3c 3e 61 20 6f   13*(d) | b<>a o
e3e0: 72 20 28 28 74 31 2e 65 29 3e 3d 61 29 20 74 68  r ((t1.e)>=a) th
e3f0: 65 6e 20 74 31 2e 62 2d 74 31 2e 65 20 77 68 65  en t1.b-t1.e whe
e400: 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  n not exists(sel
e410: 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
e420: 65 72 65 20 31 37 3c 31 33 29 20 74 68 65 6e 20  ere 17<13) then 
e430: 20 2d 28 31 33 29 20 65 6c 73 65 20 31 37 20 65   -(13) else 17 e
e440: 6e 64 2a 31 33 29 29 2f 61 62 73 28 31 33 29 29  nd*13))/abs(13))
e450: 2c 74 31 2e 63 29 29 2c 74 31 2e 65 29 20 7c 20  ,t1.c)),t1.e) | 
e460: 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  c FROM t1 WHERE 
e470: 4e 4f 54 20 28 6e 6f 74 20 65 78 69 73 74 73 28  NOT (not exists(
e480: 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
e490: 20 77 68 65 72 65 20 31 37 3c 3d 28 73 65 6c 65   where 17<=(sele
e4a0: 63 74 20 28 63 61 73 65 20 28 7e 2b 61 62 73 28  ct (case (~+abs(
e4b0: 63 61 73 74 28 61 76 67 28 28 74 31 2e 65 29 2d  cast(avg((t1.e)-
e4c0: 31 37 20 7c 20 62 29 20 41 53 20 69 6e 74 65 67  17 | b) AS integ
e4d0: 65 72 29 29 2d 28 28 63 61 73 65 20 20 2d 63 61  er))-((case  -ca
e4e0: 73 74 28 61 76 67 28 63 61 73 65 20 77 68 65 6e  st(avg(case when
e4f0: 20 7e 74 31 2e 62 20 69 6e 20 28 73 65 6c 65 63   ~t1.b in (selec
e500: 74 20 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  t d from t1 unio
e510: 6e 20 73 65 6c 65 63 74 20 31 39 20 66 72 6f 6d  n select 19 from
e520: 20 74 31 29 20 74 68 65 6e 20 62 20 77 68 65 6e   t1) then b when
e530: 20 31 33 20 69 6e 20 28 74 31 2e 66 2c 63 2c 74   13 in (t1.f,c,t
e540: 31 2e 62 29 20 74 68 65 6e 20 63 20 65 6c 73 65  1.b) then c else
e550: 20 66 20 65 6e 64 29 20 41 53 20 69 6e 74 65 67   f end) AS integ
e560: 65 72 29 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e  er)+count(distin
e570: 63 74 20 74 31 2e 66 29 2b 63 6f 75 6e 74 28 64  ct t1.f)+count(d
e580: 69 73 74 69 6e 63 74 20 74 31 2e 64 29 20 77 68  istinct t1.d) wh
e590: 65 6e 20 63 6f 75 6e 74 28 2a 29 20 74 68 65 6e  en count(*) then
e5a0: 20 28 28 6d 61 78 28 63 29 29 29 20 65 6c 73 65   ((max(c))) else
e5b0: 20 63 6f 75 6e 74 28 2a 29 20 65 6e 64 29 2a 63   count(*) end)*c
e5c0: 61 73 74 28 61 76 67 28 74 31 2e 65 29 20 41 53  ast(avg(t1.e) AS
e5d0: 20 69 6e 74 65 67 65 72 29 29 29 20 77 68 65 6e   integer))) when
e5e0: 20 28 28 63 61 73 74 28 61 76 67 28 61 29 20 41   ((cast(avg(a) A
e5f0: 53 20 69 6e 74 65 67 65 72 29 29 29 20 74 68 65  S integer))) the
e600: 6e 20 20 2d 6d 61 78 28 64 29 20 65 6c 73 65 20  n  -max(d) else 
e610: 28 28 63 6f 75 6e 74 28 2a 29 29 29 20 65 6e 64  ((count(*))) end
e620: 29 20 66 72 6f 6d 20 74 31 29 29 29 7d 0a 7d 20  ) from t1)))}.} 
e630: 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
e640: 78 70 72 2d 32 2e 37 39 20 7b 0a 20 20 64 62 20  xpr-2.79 {.  db 
e650: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 63  eval {SELECT  -c
e660: 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
e670: 6d 61 78 28 65 2d 74 31 2e 62 29 20 66 72 6f 6d  max(e-t1.b) from
e680: 20 74 31 20 77 68 65 72 65 20 74 31 2e 65 3c 31   t1 where t1.e<1
e690: 31 20 61 6e 64 20 74 31 2e 62 20 26 20 65 20 69  1 and t1.b & e i
e6a0: 6e 20 28 28 61 62 73 28 31 33 29 2f 61 62 73 28  n ((abs(13)/abs(
e6b0: 74 31 2e 62 29 29 2c 28 61 62 73 28 28 2b 31 37  t1.b)),(abs((+17
e6c0: 2d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 63 20  -case when t1.c 
e6d0: 26 20 31 33 2a 28 64 29 20 26 20 62 3c 3e 61 20  & 13*(d) & b<>a 
e6e0: 6f 72 20 28 28 74 31 2e 65 29 3e 3d 61 29 20 74  or ((t1.e)>=a) t
e6f0: 68 65 6e 20 74 31 2e 62 2d 74 31 2e 65 20 77 68  hen t1.b-t1.e wh
e700: 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  en not exists(se
e710: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
e720: 68 65 72 65 20 31 37 3c 31 33 29 20 74 68 65 6e  here 17<13) then
e730: 20 20 2d 28 31 33 29 20 65 6c 73 65 20 31 37 20    -(13) else 17 
e740: 65 6e 64 2a 31 33 29 29 2f 61 62 73 28 31 33 29  end*13))/abs(13)
e750: 29 2c 74 31 2e 63 29 29 2c 74 31 2e 65 29 20 26  ),t1.c)),t1.e) &
e760: 20 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   c FROM t1 WHERE
e770: 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
e780: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
e790: 72 65 20 31 37 3c 3d 28 73 65 6c 65 63 74 20 28  re 17<=(select (
e7a0: 63 61 73 65 20 28 7e 2b 61 62 73 28 63 61 73 74  case (~+abs(cast
e7b0: 28 61 76 67 28 28 74 31 2e 65 29 2d 31 37 20 7c  (avg((t1.e)-17 |
e7c0: 20 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 29   b) AS integer))
e7d0: 2d 28 28 63 61 73 65 20 20 2d 63 61 73 74 28 61  -((case  -cast(a
e7e0: 76 67 28 63 61 73 65 20 77 68 65 6e 20 7e 74 31  vg(case when ~t1
e7f0: 2e 62 20 69 6e 20 28 73 65 6c 65 63 74 20 64 20  .b in (select d 
e800: 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
e810: 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 29  lect 19 from t1)
e820: 20 74 68 65 6e 20 62 20 77 68 65 6e 20 31 33 20   then b when 13 
e830: 69 6e 20 28 74 31 2e 66 2c 63 2c 74 31 2e 62 29  in (t1.f,c,t1.b)
e840: 20 74 68 65 6e 20 63 20 65 6c 73 65 20 66 20 65   then c else f e
e850: 6e 64 29 20 41 53 20 69 6e 74 65 67 65 72 29 2b  nd) AS integer)+
e860: 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
e870: 31 2e 66 29 2b 63 6f 75 6e 74 28 64 69 73 74 69  1.f)+count(disti
e880: 6e 63 74 20 74 31 2e 64 29 20 77 68 65 6e 20 63  nct t1.d) when c
e890: 6f 75 6e 74 28 2a 29 20 74 68 65 6e 20 28 28 6d  ount(*) then ((m
e8a0: 61 78 28 63 29 29 29 20 65 6c 73 65 20 63 6f 75  ax(c))) else cou
e8b0: 6e 74 28 2a 29 20 65 6e 64 29 2a 63 61 73 74 28  nt(*) end)*cast(
e8c0: 61 76 67 28 74 31 2e 65 29 20 41 53 20 69 6e 74  avg(t1.e) AS int
e8d0: 65 67 65 72 29 29 29 20 77 68 65 6e 20 28 28 63  eger))) when ((c
e8e0: 61 73 74 28 61 76 67 28 61 29 20 41 53 20 69 6e  ast(avg(a) AS in
e8f0: 74 65 67 65 72 29 29 29 20 74 68 65 6e 20 20 2d  teger))) then  -
e900: 6d 61 78 28 64 29 20 65 6c 73 65 20 28 28 63 6f  max(d) else ((co
e910: 75 6e 74 28 2a 29 29 29 20 65 6e 64 29 20 66 72  unt(*))) end) fr
e920: 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 31 32 7d 0a  om t1))}.} {12}.
e930: 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
e940: 2d 32 2e 38 30 20 7b 0a 20 20 64 62 20 65 76 61  -2.80 {.  db eva
e950: 6c 20 7b 53 45 4c 45 43 54 20 31 37 2d 63 6f 61  l {SELECT 17-coa
e960: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 2b  lesce((select c+
e970: 74 31 2e 66 20 66 72 6f 6d 20 74 31 20 77 68 65  t1.f from t1 whe
e980: 72 65 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74  re (select count
e990: 28 64 69 73 74 69 6e 63 74 20 64 29 2d 61 62 73  (distinct d)-abs
e9a0: 28 6d 69 6e 28 28 73 65 6c 65 63 74 20 63 61 73  (min((select cas
e9b0: 65 20 20 2d 20 2d 63 6f 75 6e 74 28 2a 29 20 77  e  - -count(*) w
e9c0: 68 65 6e 20 20 2d 6d 61 78 28 31 39 29 20 74 68  hen  -max(19) th
e9d0: 65 6e 20 20 2d 63 6f 75 6e 74 28 2a 29 20 65 6c  en  -count(*) el
e9e0: 73 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e 64 20  se count(*) end 
e9f0: 66 72 6f 6d 20 74 31 29 29 2d 63 6f 75 6e 74 28  from t1))-count(
ea00: 2a 29 29 20 66 72 6f 6d 20 74 31 29 2d 74 31 2e  *)) from t1)-t1.
ea10: 61 2b 63 61 73 65 20 77 68 65 6e 20 28 61 62 73  a+case when (abs
ea20: 28 74 31 2e 65 29 2f 61 62 73 28 74 31 2e 65 29  (t1.e)/abs(t1.e)
ea30: 29 20 6e 6f 74 20 69 6e 20 28 61 2c 74 31 2e 61  ) not in (a,t1.a
ea40: 2c 31 39 29 20 61 6e 64 20 28 62 20 62 65 74 77  ,19) and (b betw
ea50: 65 65 6e 20 31 39 20 61 6e 64 20 20 2d 74 31 2e  een 19 and  -t1.
ea60: 63 29 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20  c) then 17 else 
ea70: 63 20 65 6e 64 2d 31 39 2b 74 31 2e 65 2a 31 33  c end-19+t1.e*13
ea80: 3c 3d 20 2d 28 74 31 2e 61 29 29 2c 31 31 29 2d  <= -(t1.a)),11)-
ea90: 74 31 2e 64 2d 63 20 46 52 4f 4d 20 74 31 20 57  t1.d-c FROM t1 W
eaa0: 48 45 52 45 20 28 28 74 31 2e 64 20 69 6e 20 28  HERE ((t1.d in (
eab0: 28 73 65 6c 65 63 74 20 2b 63 61 73 74 28 61 76  (select +cast(av
eac0: 67 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  g(coalesce((sele
ead0: 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63 65 28  ct max(coalesce(
eae0: 28 73 65 6c 65 63 74 20 6d 61 78 28 61 29 20 66  (select max(a) f
eaf0: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
eb00: 20 61 20 69 6e 20 28 62 2c 7e 28 73 65 6c 65 63   a in (b,~(selec
eb10: 74 20 7e 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d  t ~count(*) from
eb20: 20 74 31 29 2c 63 61 73 65 20 28 73 65 6c 65 63   t1),case (selec
eb30: 74 20 2b 6d 61 78 28 31 31 29 20 7c 20 20 2d 63  t +max(11) |  -c
eb40: 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
eb50: 20 77 68 65 6e 20 31 37 2a 74 31 2e 66 2a 31 37   when 17*t1.f*17
eb60: 20 74 68 65 6e 20 62 20 65 6c 73 65 20 28 74 31   then b else (t1
eb70: 2e 62 29 20 65 6e 64 2b 66 20 7c 20 31 37 29 29  .b) end+f | 17))
eb80: 2c 65 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65  ,e)) from t1 whe
eb90: 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
eba0: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
ebb0: 68 65 72 65 20 31 37 20 62 65 74 77 65 65 6e 20  here 17 between 
ebc0: 61 20 61 6e 64 20 61 29 29 2c 28 31 39 29 29 29  a and a)),(19)))
ebd0: 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
ebe0: 6d 20 74 31 29 2c 63 6f 61 6c 65 73 63 65 28 28  m t1),coalesce((
ebf0: 73 65 6c 65 63 74 20 6d 61 78 28 65 29 20 66 72  select max(e) fr
ec00: 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 65  om t1 where t1.e
ec10: 3c 3e 31 31 29 2c 62 29 2c 74 31 2e 64 29 29 29  <>11),b),t1.d)))
ec20: 7d 0a 7d 20 7b 2d 36 39 34 7d 0a 64 6f 5f 74 65  }.} {-694}.do_te
ec30: 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 38 31  st randexpr-2.81
ec40: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
ec50: 4c 45 43 54 20 31 37 2d 63 6f 61 6c 65 73 63 65  LECT 17-coalesce
ec60: 28 28 73 65 6c 65 63 74 20 63 2b 74 31 2e 66 20  ((select c+t1.f 
ec70: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 73  from t1 where (s
ec80: 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
ec90: 69 6e 63 74 20 64 29 2d 61 62 73 28 6d 69 6e 28  inct d)-abs(min(
eca0: 28 73 65 6c 65 63 74 20 63 61 73 65 20 20 2d 20  (select case  - 
ecb0: 2d 63 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 20  -count(*) when  
ecc0: 2d 6d 61 78 28 31 39 29 20 74 68 65 6e 20 20 2d  -max(19) then  -
ecd0: 63 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20 63 6f  count(*) else co
ece0: 75 6e 74 28 2a 29 20 65 6e 64 20 66 72 6f 6d 20  unt(*) end from 
ecf0: 74 31 29 29 2d 63 6f 75 6e 74 28 2a 29 29 20 66  t1))-count(*)) f
ed00: 72 6f 6d 20 74 31 29 2d 74 31 2e 61 2b 63 61 73  rom t1)-t1.a+cas
ed10: 65 20 77 68 65 6e 20 28 61 62 73 28 74 31 2e 65  e when (abs(t1.e
ed20: 29 2f 61 62 73 28 74 31 2e 65 29 29 20 6e 6f 74  )/abs(t1.e)) not
ed30: 20 69 6e 20 28 61 2c 74 31 2e 61 2c 31 39 29 20   in (a,t1.a,19) 
ed40: 61 6e 64 20 28 62 20 62 65 74 77 65 65 6e 20 31  and (b between 1
ed50: 39 20 61 6e 64 20 20 2d 74 31 2e 63 29 20 74 68  9 and  -t1.c) th
ed60: 65 6e 20 31 37 20 65 6c 73 65 20 63 20 65 6e 64  en 17 else c end
ed70: 2d 31 39 2b 74 31 2e 65 2a 31 33 3c 3d 20 2d 28  -19+t1.e*13<= -(
ed80: 74 31 2e 61 29 29 2c 31 31 29 2d 74 31 2e 64 2d  t1.a)),11)-t1.d-
ed90: 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  c FROM t1 WHERE 
eda0: 4e 4f 54 20 28 28 28 74 31 2e 64 20 69 6e 20 28  NOT (((t1.d in (
edb0: 28 73 65 6c 65 63 74 20 2b 63 61 73 74 28 61 76  (select +cast(av
edc0: 67 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  g(coalesce((sele
edd0: 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63 65 28  ct max(coalesce(
ede0: 28 73 65 6c 65 63 74 20 6d 61 78 28 61 29 20 66  (select max(a) f
edf0: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
ee00: 20 61 20 69 6e 20 28 62 2c 7e 28 73 65 6c 65 63   a in (b,~(selec
ee10: 74 20 7e 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d  t ~count(*) from
ee20: 20 74 31 29 2c 63 61 73 65 20 28 73 65 6c 65 63   t1),case (selec
ee30: 74 20 2b 6d 61 78 28 31 31 29 20 7c 20 20 2d 63  t +max(11) |  -c
ee40: 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
ee50: 20 77 68 65 6e 20 31 37 2a 74 31 2e 66 2a 31 37   when 17*t1.f*17
ee60: 20 74 68 65 6e 20 62 20 65 6c 73 65 20 28 74 31   then b else (t1
ee70: 2e 62 29 20 65 6e 64 2b 66 20 7c 20 31 37 29 29  .b) end+f | 17))
ee80: 2c 65 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65  ,e)) from t1 whe
ee90: 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
eea0: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
eeb0: 68 65 72 65 20 31 37 20 62 65 74 77 65 65 6e 20  here 17 between 
eec0: 61 20 61 6e 64 20 61 29 29 2c 28 31 39 29 29 29  a and a)),(19)))
eed0: 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
eee0: 6d 20 74 31 29 2c 63 6f 61 6c 65 73 63 65 28 28  m t1),coalesce((
eef0: 73 65 6c 65 63 74 20 6d 61 78 28 65 29 20 66 72  select max(e) fr
ef00: 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 65  om t1 where t1.e
ef10: 3c 3e 31 31 29 2c 62 29 2c 74 31 2e 64 29 29 29  <>11),b),t1.d)))
ef20: 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  )}.} {}.do_test 
ef30: 72 61 6e 64 65 78 70 72 2d 32 2e 38 32 20 7b 0a  randexpr-2.82 {.
ef40: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
ef50: 54 20 63 61 73 65 20 28 74 31 2e 61 29 20 77 68  T case (t1.a) wh
ef60: 65 6e 20 65 20 74 68 65 6e 20 74 31 2e 61 20 65  en e then t1.a e
ef70: 6c 73 65 20 74 31 2e 64 20 65 6e 64 2b 28 62 29  lse t1.d end+(b)
ef80: 2a 74 31 2e 63 20 7c 20 28 73 65 6c 65 63 74 20  *t1.c | (select 
ef90: 7e 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  ~count(distinct 
efa0: 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69  (select count(di
efb0: 73 74 69 6e 63 74 20 74 31 2e 66 29 20 66 72 6f  stinct t1.f) fro
efc0: 6d 20 74 31 29 29 20 66 72 6f 6d 20 74 31 29 2a  m t1)) from t1)*
efd0: 20 2d 63 61 73 65 20 63 2a 74 31 2e 62 20 77 68   -case c*t1.b wh
efe0: 65 6e 20 31 39 20 74 68 65 6e 20 74 31 2e 64 20  en 19 then t1.d 
eff0: 65 6c 73 65 20 28 74 31 2e 62 29 20 7c 20 63 61  else (t1.b) | ca
f000: 73 65 20 77 68 65 6e 20 6e 6f 74 20 28 65 29 2a  se when not (e)*
f010: 66 20 69 6e 20 28 73 65 6c 65 63 74 20 63 6f 75  f in (select cou
f020: 6e 74 28 64 69 73 74 69 6e 63 74 20 61 29 2d 63  nt(distinct a)-c
f030: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29  ount(distinct c)
f040: 20 7c 20 6d 69 6e 28 61 29 20 66 72 6f 6d 20 74   | min(a) from t
f050: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20  1 union select  
f060: 2d 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74  -count(*) from t
f070: 31 29 20 61 6e 64 20 28 74 31 2e 66 20 69 6e 20  1) and (t1.f in 
f080: 28 64 2c 20 2d 74 31 2e 63 2c 66 29 29 20 74 68  (d, -t1.c,f)) th
f090: 65 6e 20 65 20 77 68 65 6e 20 74 31 2e 63 20 6e  en e when t1.c n
f0a0: 6f 74 20 69 6e 20 28 74 31 2e 62 2c 74 31 2e 65  ot in (t1.b,t1.e
f0b0: 2c 62 29 20 74 68 65 6e 20 74 31 2e 65 20 65 6c  ,b) then t1.e el
f0c0: 73 65 20 66 20 65 6e 64 20 65 6e 64 20 46 52 4f  se f end end FRO
f0d0: 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e 64 3c  M t1 WHERE t1.d<
f0e0: 3e 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  >coalesce((selec
f0f0: 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20  t max(case when 
f100: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
f110: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66 3c  from t1 where f<
f120: 3d 65 20 7c 20 62 29 20 74 68 65 6e 20 28 73 65  =e | b) then (se
f130: 6c 65 63 74 20 6d 69 6e 28 2b 74 31 2e 66 29 20  lect min(+t1.f) 
f140: 66 72 6f 6d 20 74 31 29 20 65 6c 73 65 20 31 31  from t1) else 11
f150: 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68   end) from t1 wh
f160: 65 72 65 20 2b 63 61 73 65 20 77 68 65 6e 20 74  ere +case when t
f170: 31 2e 65 3d 63 20 74 68 65 6e 20 20 2d 74 31 2e  1.e=c then  -t1.
f180: 63 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 2d  c else t1.a end-
f190: 74 31 2e 61 2d 31 31 2d 66 20 69 6e 20 28 73 65  t1.a-11-f in (se
f1a0: 6c 65 63 74 20 28 63 61 73 65 20 20 2d 6d 69 6e  lect (case  -min
f1b0: 28 61 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 2a  (a) when count(*
f1c0: 29 2a 28 28 20 2d 2b 61 62 73 28 63 61 73 74 28  )*(( -+abs(cast(
f1d0: 61 76 67 28 61 29 20 41 53 20 69 6e 74 65 67 65  avg(a) AS intege
f1e0: 72 29 29 2a 6d 61 78 28 28 31 37 29 29 29 20 7c  r))*max((17))) |
f1f0: 20 6d 61 78 28 31 39 29 29 20 74 68 65 6e 20 6d   max(19)) then m
f200: 69 6e 28 31 31 29 20 65 6c 73 65 20 6d 69 6e 28  in(11) else min(
f210: 61 29 20 65 6e 64 20 7c 20 63 6f 75 6e 74 28 64  a) end | count(d
f220: 69 73 74 69 6e 63 74 20 20 2d 64 29 29 20 66 72  istinct  -d)) fr
f230: 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
f240: 63 74 20 6d 69 6e 28 74 31 2e 65 29 20 66 72 6f  ct min(t1.e) fro
f250: 6d 20 74 31 29 29 2c 74 31 2e 63 29 7d 0a 7d 20  m t1)),t1.c)}.} 
f260: 7b 36 30 34 30 38 7d 0a 64 6f 5f 74 65 73 74 20  {60408}.do_test 
f270: 72 61 6e 64 65 78 70 72 2d 32 2e 38 33 20 7b 0a  randexpr-2.83 {.
f280: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
f290: 54 20 63 61 73 65 20 28 74 31 2e 61 29 20 77 68  T case (t1.a) wh
f2a0: 65 6e 20 65 20 74 68 65 6e 20 74 31 2e 61 20 65  en e then t1.a e
f2b0: 6c 73 65 20 74 31 2e 64 20 65 6e 64 2b 28 62 29  lse t1.d end+(b)
f2c0: 2a 74 31 2e 63 20 7c 20 28 73 65 6c 65 63 74 20  *t1.c | (select 
f2d0: 7e 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  ~count(distinct 
f2e0: 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69  (select count(di
f2f0: 73 74 69 6e 63 74 20 74 31 2e 66 29 20 66 72 6f  stinct t1.f) fro
f300: 6d 20 74 31 29 29 20 66 72 6f 6d 20 74 31 29 2a  m t1)) from t1)*
f310: 20 2d 63 61 73 65 20 63 2a 74 31 2e 62 20 77 68   -case c*t1.b wh
f320: 65 6e 20 31 39 20 74 68 65 6e 20 74 31 2e 64 20  en 19 then t1.d 
f330: 65 6c 73 65 20 28 74 31 2e 62 29 20 7c 20 63 61  else (t1.b) | ca
f340: 73 65 20 77 68 65 6e 20 6e 6f 74 20 28 65 29 2a  se when not (e)*
f350: 66 20 69 6e 20 28 73 65 6c 65 63 74 20 63 6f 75  f in (select cou
f360: 6e 74 28 64 69 73 74 69 6e 63 74 20 61 29 2d 63  nt(distinct a)-c
f370: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29  ount(distinct c)
f380: 20 7c 20 6d 69 6e 28 61 29 20 66 72 6f 6d 20 74   | min(a) from t
f390: 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20  1 union select  
f3a0: 2d 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74  -count(*) from t
f3b0: 31 29 20 61 6e 64 20 28 74 31 2e 66 20 69 6e 20  1) and (t1.f in 
f3c0: 28 64 2c 20 2d 74 31 2e 63 2c 66 29 29 20 74 68  (d, -t1.c,f)) th
f3d0: 65 6e 20 65 20 77 68 65 6e 20 74 31 2e 63 20 6e  en e when t1.c n
f3e0: 6f 74 20 69 6e 20 28 74 31 2e 62 2c 74 31 2e 65  ot in (t1.b,t1.e
f3f0: 2c 62 29 20 74 68 65 6e 20 74 31 2e 65 20 65 6c  ,b) then t1.e el
f400: 73 65 20 66 20 65 6e 64 20 65 6e 64 20 46 52 4f  se f end end FRO
f410: 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
f420: 74 31 2e 64 3c 3e 63 6f 61 6c 65 73 63 65 28 28  t1.d<>coalesce((
f430: 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20  select max(case 
f440: 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65  when exists(sele
f450: 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
f460: 72 65 20 66 3c 3d 65 20 7c 20 62 29 20 74 68 65  re f<=e | b) the
f470: 6e 20 28 73 65 6c 65 63 74 20 6d 69 6e 28 2b 74  n (select min(+t
f480: 31 2e 66 29 20 66 72 6f 6d 20 74 31 29 20 65 6c  1.f) from t1) el
f490: 73 65 20 31 31 20 65 6e 64 29 20 66 72 6f 6d 20  se 11 end) from 
f4a0: 74 31 20 77 68 65 72 65 20 2b 63 61 73 65 20 77  t1 where +case w
f4b0: 68 65 6e 20 74 31 2e 65 3d 63 20 74 68 65 6e 20  hen t1.e=c then 
f4c0: 20 2d 74 31 2e 63 20 65 6c 73 65 20 74 31 2e 61   -t1.c else t1.a
f4d0: 20 65 6e 64 2d 74 31 2e 61 2d 31 31 2d 66 20 69   end-t1.a-11-f i
f4e0: 6e 20 28 73 65 6c 65 63 74 20 28 63 61 73 65 20  n (select (case 
f4f0: 20 2d 6d 69 6e 28 61 29 20 77 68 65 6e 20 63 6f   -min(a) when co
f500: 75 6e 74 28 2a 29 2a 28 28 20 2d 2b 61 62 73 28  unt(*)*(( -+abs(
f510: 63 61 73 74 28 61 76 67 28 61 29 20 41 53 20 69  cast(avg(a) AS i
f520: 6e 74 65 67 65 72 29 29 2a 6d 61 78 28 28 31 37  nteger))*max((17
f530: 29 29 29 20 7c 20 6d 61 78 28 31 39 29 29 20 74  ))) | max(19)) t
f540: 68 65 6e 20 6d 69 6e 28 31 31 29 20 65 6c 73 65  hen min(11) else
f550: 20 6d 69 6e 28 61 29 20 65 6e 64 20 7c 20 63 6f   min(a) end | co
f560: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 20 2d 64  unt(distinct  -d
f570: 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  )) from t1 union
f580: 20 73 65 6c 65 63 74 20 6d 69 6e 28 74 31 2e 65   select min(t1.e
f590: 29 20 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 63  ) from t1)),t1.c
f5a0: 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  ))}.} {}.do_test
f5b0: 20 72 61 6e 64 65 78 70 72 2d 32 2e 38 34 20 7b   randexpr-2.84 {
f5c0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
f5d0: 43 54 20 63 61 73 65 20 28 74 31 2e 61 29 20 77  CT case (t1.a) w
f5e0: 68 65 6e 20 65 20 74 68 65 6e 20 74 31 2e 61 20  hen e then t1.a 
f5f0: 65 6c 73 65 20 74 31 2e 64 20 65 6e 64 2b 28 62  else t1.d end+(b
f600: 29 2a 74 31 2e 63 20 26 20 28 73 65 6c 65 63 74  )*t1.c & (select
f610: 20 7e 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   ~count(distinct
f620: 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64   (select count(d
f630: 69 73 74 69 6e 63 74 20 74 31 2e 66 29 20 66 72  istinct t1.f) fr
f640: 6f 6d 20 74 31 29 29 20 66 72 6f 6d 20 74 31 29  om t1)) from t1)
f650: 2a 20 2d 63 61 73 65 20 63 2a 74 31 2e 62 20 77  * -case c*t1.b w
f660: 68 65 6e 20 31 39 20 74 68 65 6e 20 74 31 2e 64  hen 19 then t1.d
f670: 20 65 6c 73 65 20 28 74 31 2e 62 29 20 26 20 63   else (t1.b) & c
f680: 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 28 65 29  ase when not (e)
f690: 2a 66 20 69 6e 20 28 73 65 6c 65 63 74 20 63 6f  *f in (select co
f6a0: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 61 29 2d  unt(distinct a)-
f6b0: 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63  count(distinct c
f6c0: 29 20 26 20 6d 69 6e 28 61 29 20 66 72 6f 6d 20  ) & min(a) from 
f6d0: 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
f6e0: 20 2d 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20   -count(*) from 
f6f0: 74 31 29 20 61 6e 64 20 28 74 31 2e 66 20 69 6e  t1) and (t1.f in
f700: 20 28 64 2c 20 2d 74 31 2e 63 2c 66 29 29 20 74   (d, -t1.c,f)) t
f710: 68 65 6e 20 65 20 77 68 65 6e 20 74 31 2e 63 20  hen e when t1.c 
f720: 6e 6f 74 20 69 6e 20 28 74 31 2e 62 2c 74 31 2e  not in (t1.b,t1.
f730: 65 2c 62 29 20 74 68 65 6e 20 74 31 2e 65 20 65  e,b) then t1.e e
f740: 6c 73 65 20 66 20 65 6e 64 20 65 6e 64 20 46 52  lse f end end FR
f750: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e 64  OM t1 WHERE t1.d
f760: 3c 3e 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  <>coalesce((sele
f770: 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
f780: 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
f790: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66   from t1 where f
f7a0: 3c 3d 65 20 7c 20 62 29 20 74 68 65 6e 20 28 73  <=e | b) then (s
f7b0: 65 6c 65 63 74 20 6d 69 6e 28 2b 74 31 2e 66 29  elect min(+t1.f)
f7c0: 20 66 72 6f 6d 20 74 31 29 20 65 6c 73 65 20 31   from t1) else 1
f7d0: 31 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77  1 end) from t1 w
f7e0: 68 65 72 65 20 2b 63 61 73 65 20 77 68 65 6e 20  here +case when 
f7f0: 74 31 2e 65 3d 63 20 74 68 65 6e 20 20 2d 74 31  t1.e=c then  -t1
f800: 2e 63 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64  .c else t1.a end
f810: 2d 74 31 2e 61 2d 31 31 2d 66 20 69 6e 20 28 73  -t1.a-11-f in (s
f820: 65 6c 65 63 74 20 28 63 61 73 65 20 20 2d 6d 69  elect (case  -mi
f830: 6e 28 61 29 20 77 68 65 6e 20 63 6f 75 6e 74 28  n(a) when count(
f840: 2a 29 2a 28 28 20 2d 2b 61 62 73 28 63 61 73 74  *)*(( -+abs(cast
f850: 28 61 76 67 28 61 29 20 41 53 20 69 6e 74 65 67  (avg(a) AS integ
f860: 65 72 29 29 2a 6d 61 78 28 28 31 37 29 29 29 20  er))*max((17))) 
f870: 7c 20 6d 61 78 28 31 39 29 29 20 74 68 65 6e 20  | max(19)) then 
f880: 6d 69 6e 28 31 31 29 20 65 6c 73 65 20 6d 69 6e  min(11) else min
f890: 28 61 29 20 65 6e 64 20 7c 20 63 6f 75 6e 74 28  (a) end | count(
f8a0: 64 69 73 74 69 6e 63 74 20 20 2d 64 29 29 20 66  distinct  -d)) f
f8b0: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
f8c0: 65 63 74 20 6d 69 6e 28 74 31 2e 65 29 20 66 72  ect min(t1.e) fr
f8d0: 6f 6d 20 74 31 29 29 2c 74 31 2e 63 29 7d 0a 7d  om t1)),t1.c)}.}
f8e0: 20 7b 33 38 34 7d 0a 64 6f 5f 74 65 73 74 20 72   {384}.do_test r
f8f0: 61 6e 64 65 78 70 72 2d 32 2e 38 35 20 7b 0a 20  andexpr-2.85 {. 
f900: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
f910: 20 28 73 65 6c 65 63 74 20 61 62 73 28 6d 61 78   (select abs(max
f920: 28 28 73 65 6c 65 63 74 20 28 63 61 73 65 20 63  ((select (case c
f930: 61 73 74 28 61 76 67 28 74 31 2e 61 29 20 41 53  ast(avg(t1.a) AS
f940: 20 69 6e 74 65 67 65 72 29 20 77 68 65 6e 20 2b   integer) when +
f950: 7e 61 62 73 28 63 61 73 74 28 61 76 67 28 20 2d  ~abs(cast(avg( -
f960: 31 37 2b 63 61 73 65 20 77 68 65 6e 20 74 31 2e  17+case when t1.
f970: 61 20 69 6e 20 28 63 2c 28 65 29 2c 74 31 2e 66  a in (c,(e),t1.f
f980: 29 20 61 6e 64 20 66 20 69 6e 20 28 63 2c 74 31  ) and f in (c,t1
f990: 2e 64 2c 74 31 2e 61 29 20 74 68 65 6e 20 64 20  .d,t1.a) then d 
f9a0: 77 68 65 6e 20 64 20 62 65 74 77 65 65 6e 20 63  when d between c
f9b0: 20 61 6e 64 20 74 31 2e 64 20 74 68 65 6e 20 66   and t1.d then f
f9c0: 20 65 6c 73 65 20 65 20 65 6e 64 29 20 41 53 20   else e end) AS 
f9d0: 69 6e 74 65 67 65 72 29 29 2d 28 61 62 73 28 7e  integer))-(abs(~
f9e0: 6d 61 78 28 28 62 29 29 29 2d 6d 69 6e 28 74 31  max((b)))-min(t1
f9f0: 2e 66 29 29 20 74 68 65 6e 20 63 61 73 74 28 61  .f)) then cast(a
fa00: 76 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65  vg(t1.f) AS inte
fa10: 67 65 72 29 20 65 6c 73 65 20 63 6f 75 6e 74 28  ger) else count(
fa20: 2a 29 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 29  *) end) from t1)
fa30: 2b 63 61 73 65 20 77 68 65 6e 20 28 65 78 69 73  +case when (exis
fa40: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
fa50: 20 74 31 20 77 68 65 72 65 20 74 31 2e 61 20 69   t1 where t1.a i
fa60: 6e 20 28 73 65 6c 65 63 74 20 20 2d 6d 61 78 28  n (select  -max(
fa70: 65 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  e) from t1 union
fa80: 20 73 65 6c 65 63 74 20 20 2d 63 6f 75 6e 74 28   select  -count(
fa90: 2a 29 20 66 72 6f 6d 20 74 31 29 29 20 6f 72 20  *) from t1)) or 
faa0: 65 20 69 6e 20 28 74 31 2e 62 2a 64 2c 61 2c 20  e in (t1.b*d,a, 
fab0: 2d 20 2d 64 29 29 20 74 68 65 6e 20 31 37 2a 74  - -d)) then 17*t
fac0: 31 2e 63 20 65 6c 73 65 20 63 20 65 6e 64 29 29  1.c else c end))
fad0: 20 66 72 6f 6d 20 74 31 29 20 46 52 4f 4d 20 74   from t1) FROM t
fae0: 31 20 57 48 45 52 45 20 7e 74 31 2e 65 3e 63 61  1 WHERE ~t1.e>ca
faf0: 73 65 20 31 33 20 77 68 65 6e 20 65 20 74 68 65  se 13 when e the
fb00: 6e 20 61 20 65 6c 73 65 20 63 6f 61 6c 65 73 63  n a else coalesc
fb10: 65 28 28 73 65 6c 65 63 74 20 7e 74 31 2e 64 20  e((select ~t1.d 
fb20: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78  from t1 where ex
fb30: 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
fb40: 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66  om t1 where t1.f
fb50: 20 62 65 74 77 65 65 6e 20 63 6f 61 6c 65 73 63   between coalesc
fb60: 65 28 28 73 65 6c 65 63 74 20 74 31 2e 61 20 66  e((select t1.a f
fb70: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28 73  rom t1 where ((s
fb80: 65 6c 65 63 74 20 6d 69 6e 28 64 2d 64 2d 20 2d  elect min(d-d- -
fb90: 74 31 2e 64 2b 61 29 20 66 72 6f 6d 20 74 31 29  t1.d+a) from t1)
fba0: 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 66 20  ) not between f 
fbb0: 61 6e 64 20 74 31 2e 63 20 6f 72 20 65 78 69 73  and t1.c or exis
fbc0: 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
fbd0: 20 74 31 20 77 68 65 72 65 20 62 3c 3e 31 37 29   t1 where b<>17)
fbe0: 29 2c 28 61 29 29 20 61 6e 64 20 20 2d 64 29 20  ),(a)) and  -d) 
fbf0: 6f 72 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  or not exists(se
fc00: 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
fc10: 68 65 72 65 20 65 20 69 6e 20 28 73 65 6c 65 63  here e in (selec
fc20: 74 20 6d 69 6e 28 31 39 29 2a 28 63 6f 75 6e 74  t min(19)*(count
fc30: 28 2a 29 29 2a 63 61 73 74 28 61 76 67 28 31 31  (*))*cast(avg(11
fc40: 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 7c 20  ) AS integer) | 
fc50: 6d 69 6e 28 62 29 20 66 72 6f 6d 20 74 31 20 75  min(b) from t1 u
fc60: 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 63 61 73  nion select (cas
fc70: 74 28 61 76 67 28 74 31 2e 65 29 20 41 53 20 69  t(avg(t1.e) AS i
fc80: 6e 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31  nteger)) from t1
fc90: 29 29 29 2c 63 29 20 65 6e 64 2d 74 31 2e 63 7d  ))),c) end-t1.c}
fca0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61  .} {}.do_test ra
fcb0: 6e 64 65 78 70 72 2d 32 2e 38 36 20 7b 0a 20 20  ndexpr-2.86 {.  
fcc0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
fcd0: 28 73 65 6c 65 63 74 20 61 62 73 28 6d 61 78 28  (select abs(max(
fce0: 28 73 65 6c 65 63 74 20 28 63 61 73 65 20 63 61  (select (case ca
fcf0: 73 74 28 61 76 67 28 74 31 2e 61 29 20 41 53 20  st(avg(t1.a) AS 
fd00: 69 6e 74 65 67 65 72 29 20 77 68 65 6e 20 2b 7e  integer) when +~
fd10: 61 62 73 28 63 61 73 74 28 61 76 67 28 20 2d 31  abs(cast(avg( -1
fd20: 37 2b 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61  7+case when t1.a
fd30: 20 69 6e 20 28 63 2c 28 65 29 2c 74 31 2e 66 29   in (c,(e),t1.f)
fd40: 20 61 6e 64 20 66 20 69 6e 20 28 63 2c 74 31 2e   and f in (c,t1.
fd50: 64 2c 74 31 2e 61 29 20 74 68 65 6e 20 64 20 77  d,t1.a) then d w
fd60: 68 65 6e 20 64 20 62 65 74 77 65 65 6e 20 63 20  hen d between c 
fd70: 61 6e 64 20 74 31 2e 64 20 74 68 65 6e 20 66 20  and t1.d then f 
fd80: 65 6c 73 65 20 65 20 65 6e 64 29 20 41 53 20 69  else e end) AS i
fd90: 6e 74 65 67 65 72 29 29 2d 28 61 62 73 28 7e 6d  nteger))-(abs(~m
fda0: 61 78 28 28 62 29 29 29 2d 6d 69 6e 28 74 31 2e  ax((b)))-min(t1.
fdb0: 66 29 29 20 74 68 65 6e 20 63 61 73 74 28 61 76  f)) then cast(av
fdc0: 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65 67  g(t1.f) AS integ
fdd0: 65 72 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a  er) else count(*
fde0: 29 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 29 2b  ) end) from t1)+
fdf0: 63 61 73 65 20 77 68 65 6e 20 28 65 78 69 73 74  case when (exist
fe00: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
fe10: 74 31 20 77 68 65 72 65 20 74 31 2e 61 20 69 6e  t1 where t1.a in
fe20: 20 28 73 65 6c 65 63 74 20 20 2d 6d 61 78 28 65   (select  -max(e
fe30: 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
fe40: 73 65 6c 65 63 74 20 20 2d 63 6f 75 6e 74 28 2a  select  -count(*
fe50: 29 20 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 65  ) from t1)) or e
fe60: 20 69 6e 20 28 74 31 2e 62 2a 64 2c 61 2c 20 2d   in (t1.b*d,a, -
fe70: 20 2d 64 29 29 20 74 68 65 6e 20 31 37 2a 74 31   -d)) then 17*t1
fe80: 2e 63 20 65 6c 73 65 20 63 20 65 6e 64 29 29 20  .c else c end)) 
fe90: 66 72 6f 6d 20 74 31 29 20 46 52 4f 4d 20 74 31  from t1) FROM t1
fea0: 20 57 48 45 52 45 20 4e 4f 54 20 28 7e 74 31 2e   WHERE NOT (~t1.
feb0: 65 3e 63 61 73 65 20 31 33 20 77 68 65 6e 20 65  e>case 13 when e
fec0: 20 74 68 65 6e 20 61 20 65 6c 73 65 20 63 6f 61   then a else coa
fed0: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 7e 74  lesce((select ~t
fee0: 31 2e 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72  1.d from t1 wher
fef0: 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
ff00: 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
ff10: 74 31 2e 66 20 62 65 74 77 65 65 6e 20 63 6f 61  t1.f between coa
ff20: 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31  lesce((select t1
ff30: 2e 61 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  .a from t1 where
ff40: 20 28 28 73 65 6c 65 63 74 20 6d 69 6e 28 64 2d   ((select min(d-
ff50: 64 2d 20 2d 74 31 2e 64 2b 61 29 20 66 72 6f 6d  d- -t1.d+a) from
ff60: 20 74 31 29 29 20 6e 6f 74 20 62 65 74 77 65 65   t1)) not betwee
ff70: 6e 20 66 20 61 6e 64 20 74 31 2e 63 20 6f 72 20  n f and t1.c or 
ff80: 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
ff90: 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62 3c  from t1 where b<
ffa0: 3e 31 37 29 29 2c 28 61 29 29 20 61 6e 64 20 20  >17)),(a)) and  
ffb0: 2d 64 29 20 6f 72 20 6e 6f 74 20 65 78 69 73 74  -d) or not exist
ffc0: 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
ffd0: 74 31 20 77 68 65 72 65 20 65 20 69 6e 20 28 73  t1 where e in (s
ffe0: 65 6c 65 63 74 20 6d 69 6e 28 31 39 29 2a 28 63  elect min(19)*(c
fff0: 6f 75 6e 74 28 2a 29 29 2a 63 61 73 74 28 61 76  ount(*))*cast(av
10000 67 28 31 31 29 20 41 53 20 69 6e 74 65 67 65 72  g(11) AS integer
10010 29 20 7c 20 6d 69 6e 28 62 29 20 66 72 6f 6d 20  ) | min(b) from 
10020 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
10030 28 63 61 73 74 28 61 76 67 28 74 31 2e 65 29 20  (cast(avg(t1.e) 
10040 41 53 20 69 6e 74 65 67 65 72 29 29 20 66 72 6f  AS integer)) fro
10050 6d 20 74 31 29 29 29 2c 63 29 20 65 6e 64 2d 74  m t1))),c) end-t
10060 31 2e 63 29 7d 0a 7d 20 7b 33 30 31 7d 0a 64 6f  1.c)}.} {301}.do
10070 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
10080 2e 38 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .87 {.  db eval 
10090 7b 53 45 4c 45 43 54 20 74 31 2e 63 2b 28 61 62  {SELECT t1.c+(ab
100a0 73 28 74 31 2e 62 2a 74 31 2e 62 29 2f 61 62 73  s(t1.b*t1.b)/abs
100b0 28 2b 2b 74 31 2e 61 2d 74 31 2e 65 2d 28 61 62  (++t1.a-t1.e-(ab
100c0 73 28 74 31 2e 62 29 2f 61 62 73 28 64 29 29 2a  s(t1.b)/abs(d))*
100d0 31 31 2a 74 31 2e 66 29 29 20 7c 20 31 39 2d 62  11*t1.f)) | 19-b
100e0 2d 74 31 2e 65 20 7c 20 74 31 2e 65 2d 2b 7e 74  -t1.e | t1.e-+~t
100f0 31 2e 64 2a 31 33 2b 61 2b 63 61 73 65 20 63 61  1.d*13+a+case ca
10100 73 65 20 77 68 65 6e 20 28 64 29 2b 31 37 2d 63  se when (d)+17-c
10110 3d 64 20 74 68 65 6e 20 61 20 65 6c 73 65 20 74  =d then a else t
10120 31 2e 62 20 65 6e 64 20 77 68 65 6e 20 65 20 74  1.b end when e t
10130 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 31 39  hen t1.a else 19
10140 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45   end FROM t1 WHE
10150 52 45 20 6e 6f 74 20 63 6f 61 6c 65 73 63 65 28  RE not coalesce(
10160 28 73 65 6c 65 63 74 20 28 61 62 73 28 63 61 73  (select (abs(cas
10170 65 20 74 31 2e 62 20 77 68 65 6e 20 63 6f 61 6c  e t1.b when coal
10180 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 61 73  esce((select cas
10190 65 20 77 68 65 6e 20 65 78 69 73 74 73 28 73 65  e when exists(se
101a0 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
101b0 68 65 72 65 20 66 20 62 65 74 77 65 65 6e 20 31  here f between 1
101c0 37 20 61 6e 64 20 66 29 20 74 68 65 6e 20 31 31  7 and f) then 11
101d0 20 65 6c 73 65 20 66 20 65 6e 64 20 66 72 6f 6d   else f end from
101e0 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78   t1 where not ex
101f0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
10200 6f 6d 20 74 31 20 77 68 65 72 65 20 63 3e 3d 74  om t1 where c>=t
10210 31 2e 64 29 29 2c 31 37 29 2a 74 31 2e 61 20 74  1.d)),17)*t1.a t
10220 68 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 31 33  hen t1.e else 13
10230 20 65 6e 64 29 2f 61 62 73 28 31 37 29 29 20 66   end)/abs(17)) f
10240 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28 31  rom t1 where ((1
10250 33 20 69 6e 20 28 73 65 6c 65 63 74 20 61 62 73  3 in (select abs
10260 28 7e 6d 69 6e 28 64 29 2a 63 6f 75 6e 74 28 64  (~min(d)*count(d
10270 69 73 74 69 6e 63 74 20 20 2d 28 66 29 29 20 7c  istinct  -(f)) |
10280 20 63 6f 75 6e 74 28 2a 29 2a 63 61 73 74 28 61   count(*)*cast(a
10290 76 67 28 31 31 29 20 41 53 20 69 6e 74 65 67 65  vg(11) AS intege
102a0 72 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  r)) from t1 unio
102b0 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a  n select count(*
102c0 29 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 61  ) from t1) and a
102d0 3c 3d 31 33 29 20 61 6e 64 20 63 3c 3e 20 2d 28  <=13) and c<> -(
102e0 74 31 2e 63 29 29 29 2c 20 2d 74 31 2e 61 29 2a  t1.c))), -t1.a)*
102f0 74 31 2e 65 2a 66 2b 64 20 6e 6f 74 20 69 6e 20  t1.e*f+d not in 
10300 28 31 31 2c 64 2c 74 31 2e 63 29 7d 0a 7d 20 7b  (11,d,t1.c)}.} {
10310 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
10320 70 72 2d 32 2e 38 38 20 7b 0a 20 20 64 62 20 65  pr-2.88 {.  db e
10330 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 31 2e 63  val {SELECT t1.c
10340 2b 28 61 62 73 28 74 31 2e 62 2a 74 31 2e 62 29  +(abs(t1.b*t1.b)
10350 2f 61 62 73 28 2b 2b 74 31 2e 61 2d 74 31 2e 65  /abs(++t1.a-t1.e
10360 2d 28 61 62 73 28 74 31 2e 62 29 2f 61 62 73 28  -(abs(t1.b)/abs(
10370 64 29 29 2a 31 31 2a 74 31 2e 66 29 29 20 7c 20  d))*11*t1.f)) | 
10380 31 39 2d 62 2d 74 31 2e 65 20 7c 20 74 31 2e 65  19-b-t1.e | t1.e
10390 2d 2b 7e 74 31 2e 64 2a 31 33 2b 61 2b 63 61 73  -+~t1.d*13+a+cas
103a0 65 20 63 61 73 65 20 77 68 65 6e 20 28 64 29 2b  e case when (d)+
103b0 31 37 2d 63 3d 64 20 74 68 65 6e 20 61 20 65 6c  17-c=d then a el
103c0 73 65 20 74 31 2e 62 20 65 6e 64 20 77 68 65 6e  se t1.b end when
103d0 20 65 20 74 68 65 6e 20 74 31 2e 61 20 65 6c 73   e then t1.a els
103e0 65 20 31 39 20 65 6e 64 20 46 52 4f 4d 20 74 31  e 19 end FROM t1
103f0 20 57 48 45 52 45 20 4e 4f 54 20 28 6e 6f 74 20   WHERE NOT (not 
10400 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
10410 20 28 61 62 73 28 63 61 73 65 20 74 31 2e 62 20   (abs(case t1.b 
10420 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73  when coalesce((s
10430 65 6c 65 63 74 20 63 61 73 65 20 77 68 65 6e 20  elect case when 
10440 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
10450 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66 20  from t1 where f 
10460 62 65 74 77 65 65 6e 20 31 37 20 61 6e 64 20 66  between 17 and f
10470 29 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20 66  ) then 11 else f
10480 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 77 68 65   end from t1 whe
10490 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
104a0 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
104b0 68 65 72 65 20 63 3e 3d 74 31 2e 64 29 29 2c 31  here c>=t1.d)),1
104c0 37 29 2a 74 31 2e 61 20 74 68 65 6e 20 74 31 2e  7)*t1.a then t1.
104d0 65 20 65 6c 73 65 20 31 33 20 65 6e 64 29 2f 61  e else 13 end)/a
104e0 62 73 28 31 37 29 29 20 66 72 6f 6d 20 74 31 20  bs(17)) from t1 
104f0 77 68 65 72 65 20 28 28 31 33 20 69 6e 20 28 73  where ((13 in (s
10500 65 6c 65 63 74 20 61 62 73 28 7e 6d 69 6e 28 64  elect abs(~min(d
10510 29 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  )*count(distinct
10520 20 20 2d 28 66 29 29 20 7c 20 63 6f 75 6e 74 28    -(f)) | count(
10530 2a 29 2a 63 61 73 74 28 61 76 67 28 31 31 29 20  *)*cast(avg(11) 
10540 41 53 20 69 6e 74 65 67 65 72 29 29 20 66 72 6f  AS integer)) fro
10550 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
10560 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20  t count(*) from 
10570 74 31 29 20 61 6e 64 20 61 3c 3d 31 33 29 20 61  t1) and a<=13) a
10580 6e 64 20 63 3c 3e 20 2d 28 74 31 2e 63 29 29 29  nd c<> -(t1.c)))
10590 2c 20 2d 74 31 2e 61 29 2a 74 31 2e 65 2a 66 2b  , -t1.a)*t1.e*f+
105a0 64 20 6e 6f 74 20 69 6e 20 28 31 31 2c 64 2c 74  d not in (11,d,t
105b0 31 2e 63 29 29 7d 0a 7d 20 7b 2d 33 33 7d 0a 64  1.c))}.} {-33}.d
105c0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
105d0 32 2e 38 39 20 7b 0a 20 20 64 62 20 65 76 61 6c  2.89 {.  db eval
105e0 20 7b 53 45 4c 45 43 54 20 74 31 2e 63 2b 28 61   {SELECT t1.c+(a
105f0 62 73 28 74 31 2e 62 2a 74 31 2e 62 29 2f 61 62  bs(t1.b*t1.b)/ab
10600 73 28 2b 2b 74 31 2e 61 2d 74 31 2e 65 2d 28 61  s(++t1.a-t1.e-(a
10610 62 73 28 74 31 2e 62 29 2f 61 62 73 28 64 29 29  bs(t1.b)/abs(d))
10620 2a 31 31 2a 74 31 2e 66 29 29 20 26 20 31 39 2d  *11*t1.f)) & 19-
10630 62 2d 74 31 2e 65 20 26 20 74 31 2e 65 2d 2b 7e  b-t1.e & t1.e-+~
10640 74 31 2e 64 2a 31 33 2b 61 2b 63 61 73 65 20 63  t1.d*13+a+case c
10650 61 73 65 20 77 68 65 6e 20 28 64 29 2b 31 37 2d  ase when (d)+17-
10660 63 3d 64 20 74 68 65 6e 20 61 20 65 6c 73 65 20  c=d then a else 
10670 74 31 2e 62 20 65 6e 64 20 77 68 65 6e 20 65 20  t1.b end when e 
10680 74 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 31  then t1.a else 1
10690 39 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48  9 end FROM t1 WH
106a0 45 52 45 20 4e 4f 54 20 28 6e 6f 74 20 63 6f 61  ERE NOT (not coa
106b0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 28 61  lesce((select (a
106c0 62 73 28 63 61 73 65 20 74 31 2e 62 20 77 68 65  bs(case t1.b whe
106d0 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  n coalesce((sele
106e0 63 74 20 63 61 73 65 20 77 68 65 6e 20 65 78 69  ct case when exi
106f0 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
10700 6d 20 74 31 20 77 68 65 72 65 20 66 20 62 65 74  m t1 where f bet
10710 77 65 65 6e 20 31 37 20 61 6e 64 20 66 29 20 74  ween 17 and f) t
10720 68 65 6e 20 31 31 20 65 6c 73 65 20 66 20 65 6e  hen 11 else f en
10730 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  d from t1 where 
10740 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
10750 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
10760 65 20 63 3e 3d 74 31 2e 64 29 29 2c 31 37 29 2a  e c>=t1.d)),17)*
10770 74 31 2e 61 20 74 68 65 6e 20 74 31 2e 65 20 65  t1.a then t1.e e
10780 6c 73 65 20 31 33 20 65 6e 64 29 2f 61 62 73 28  lse 13 end)/abs(
10790 31 37 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65  17)) from t1 whe
107a0 72 65 20 28 28 31 33 20 69 6e 20 28 73 65 6c 65  re ((13 in (sele
107b0 63 74 20 61 62 73 28 7e 6d 69 6e 28 64 29 2a 63  ct abs(~min(d)*c
107c0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 20 2d  ount(distinct  -
107d0 28 66 29 29 20 7c 20 63 6f 75 6e 74 28 2a 29 2a  (f)) | count(*)*
107e0 63 61 73 74 28 61 76 67 28 31 31 29 20 41 53 20  cast(avg(11) AS 
107f0 69 6e 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74  integer)) from t
10800 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63  1 union select c
10810 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
10820 20 61 6e 64 20 61 3c 3d 31 33 29 20 61 6e 64 20   and a<=13) and 
10830 63 3c 3e 20 2d 28 74 31 2e 63 29 29 29 2c 20 2d  c<> -(t1.c))), -
10840 74 31 2e 61 29 2a 74 31 2e 65 2a 66 2b 64 20 6e  t1.a)*t1.e*f+d n
10850 6f 74 20 69 6e 20 28 31 31 2c 64 2c 74 31 2e 63  ot in (11,d,t1.c
10860 29 29 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73  ))}.} {0}.do_tes
10870 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 39 30 20  t randexpr-2.90 
10880 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
10890 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 74 31  ECT case when t1
108a0 2e 66 3e 74 31 2e 64 20 74 68 65 6e 20 28 73 65  .f>t1.d then (se
108b0 6c 65 63 74 20 61 62 73 28 2b 63 6f 75 6e 74 28  lect abs(+count(
108c0 64 69 73 74 69 6e 63 74 20 63 29 2b 28 61 62 73  distinct c)+(abs
108d0 28 6d 69 6e 28 28 61 62 73 28 2b 31 31 29 2f 61  (min((abs(+11)/a
108e0 62 73 28 62 29 29 29 2a 20 2d 63 6f 75 6e 74 28  bs(b)))* -count(
108f0 2a 29 29 29 29 20 66 72 6f 6d 20 74 31 29 2d 74  *)))) from t1)-t
10900 31 2e 61 20 77 68 65 6e 20 64 2b 63 61 73 65 20  1.a when d+case 
10910 77 68 65 6e 20 28 73 65 6c 65 63 74 20 63 61 73  when (select cas
10920 74 28 61 76 67 28 74 31 2e 66 29 20 41 53 20 69  t(avg(t1.f) AS i
10930 6e 74 65 67 65 72 29 2d 63 6f 75 6e 74 28 64 69  nteger)-count(di
10940 73 74 69 6e 63 74 20 31 39 29 20 66 72 6f 6d 20  stinct 19) from 
10950 74 31 29 3c 3e 31 37 20 74 68 65 6e 20 63 20 77  t1)<>17 then c w
10960 68 65 6e 20 74 31 2e 65 20 69 6e 20 28 73 65 6c  hen t1.e in (sel
10970 65 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e  ect cast(avg(t1.
10980 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  a) AS integer) f
10990 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
109a0 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ect count(distin
109b0 63 74 20 66 29 20 66 72 6f 6d 20 74 31 29 20 61  ct f) from t1) a
109c0 6e 64 20 64 3e 74 31 2e 63 20 61 6e 64 20 74 31  nd d>t1.c and t1
109d0 2e 66 20 6e 6f 74 20 69 6e 20 28 31 31 2c 31 39  .f not in (11,19
109e0 2c 74 31 2e 62 29 20 74 68 65 6e 20 61 20 65 6c  ,t1.b) then a el
109f0 73 65 20 28 63 29 20 65 6e 64 2b 28 31 37 29 3d  se (c) end+(17)=
10a00 63 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65  c then t1.d else
10a10 20 74 31 2e 63 20 65 6e 64 2d 63 20 46 52 4f 4d   t1.c end-c FROM
10a20 20 74 31 20 57 48 45 52 45 20 31 33 20 6e 6f 74   t1 WHERE 13 not
10a30 20 69 6e 20 28 65 2c 74 31 2e 62 2c 2b 63 6f 61   in (e,t1.b,+coa
10a40 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
10a50 78 28 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65  x(b) from t1 whe
10a60 72 65 20 31 33 2a 62 2d 74 31 2e 64 2d 63 61 73  re 13*b-t1.d-cas
10a70 65 20 77 68 65 6e 20 31 31 3e 3d 61 20 74 68 65  e when 11>=a the
10a80 6e 20 74 31 2e 61 2d 74 31 2e 64 20 65 6c 73 65  n t1.a-t1.d else
10a90 20 28 74 31 2e 64 29 2a 65 2b 31 39 20 65 6e 64   (t1.d)*e+19 end
10aa0 2a 74 31 2e 61 2b 31 39 2b 28 31 31 29 20 7c 20  *t1.a+19+(11) | 
10ab0 74 31 2e 63 2a 74 31 2e 61 2d 31 37 3c 74 31 2e  t1.c*t1.a-17<t1.
10ac0 65 29 2c 62 29 2d 61 2b 31 37 2a 31 37 2a 63 29  e),b)-a+17*17*c)
10ad0 7d 0a 7d 20 7b 2d 33 39 39 7d 0a 64 6f 5f 74 65  }.} {-399}.do_te
10ae0 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 39 31  st randexpr-2.91
10af0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
10b00 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 74  LECT case when t
10b10 31 2e 66 3e 74 31 2e 64 20 74 68 65 6e 20 28 73  1.f>t1.d then (s
10b20 65 6c 65 63 74 20 61 62 73 28 2b 63 6f 75 6e 74  elect abs(+count
10b30 28 64 69 73 74 69 6e 63 74 20 63 29 2b 28 61 62  (distinct c)+(ab
10b40 73 28 6d 69 6e 28 28 61 62 73 28 2b 31 31 29 2f  s(min((abs(+11)/
10b50 61 62 73 28 62 29 29 29 2a 20 2d 63 6f 75 6e 74  abs(b)))* -count
10b60 28 2a 29 29 29 29 20 66 72 6f 6d 20 74 31 29 2d  (*)))) from t1)-
10b70 74 31 2e 61 20 77 68 65 6e 20 64 2b 63 61 73 65  t1.a when d+case
10b80 20 77 68 65 6e 20 28 73 65 6c 65 63 74 20 63 61   when (select ca
10b90 73 74 28 61 76 67 28 74 31 2e 66 29 20 41 53 20  st(avg(t1.f) AS 
10ba0 69 6e 74 65 67 65 72 29 2d 63 6f 75 6e 74 28 64  integer)-count(d
10bb0 69 73 74 69 6e 63 74 20 31 39 29 20 66 72 6f 6d  istinct 19) from
10bc0 20 74 31 29 3c 3e 31 37 20 74 68 65 6e 20 63 20   t1)<>17 then c 
10bd0 77 68 65 6e 20 74 31 2e 65 20 69 6e 20 28 73 65  when t1.e in (se
10be0 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 74 31  lect cast(avg(t1
10bf0 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .a) AS integer) 
10c00 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
10c10 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69  lect count(disti
10c20 6e 63 74 20 66 29 20 66 72 6f 6d 20 74 31 29 20  nct f) from t1) 
10c30 61 6e 64 20 64 3e 74 31 2e 63 20 61 6e 64 20 74  and d>t1.c and t
10c40 31 2e 66 20 6e 6f 74 20 69 6e 20 28 31 31 2c 31  1.f not in (11,1
10c50 39 2c 74 31 2e 62 29 20 74 68 65 6e 20 61 20 65  9,t1.b) then a e
10c60 6c 73 65 20 28 63 29 20 65 6e 64 2b 28 31 37 29  lse (c) end+(17)
10c70 3d 63 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73  =c then t1.d els
10c80 65 20 74 31 2e 63 20 65 6e 64 2d 63 20 46 52 4f  e t1.c end-c FRO
10c90 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
10ca0 31 33 20 6e 6f 74 20 69 6e 20 28 65 2c 74 31 2e  13 not in (e,t1.
10cb0 62 2c 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  b,+coalesce((sel
10cc0 65 63 74 20 6d 61 78 28 62 29 20 66 72 6f 6d 20  ect max(b) from 
10cd0 74 31 20 77 68 65 72 65 20 31 33 2a 62 2d 74 31  t1 where 13*b-t1
10ce0 2e 64 2d 63 61 73 65 20 77 68 65 6e 20 31 31 3e  .d-case when 11>
10cf0 3d 61 20 74 68 65 6e 20 74 31 2e 61 2d 74 31 2e  =a then t1.a-t1.
10d00 64 20 65 6c 73 65 20 28 74 31 2e 64 29 2a 65 2b  d else (t1.d)*e+
10d10 31 39 20 65 6e 64 2a 74 31 2e 61 2b 31 39 2b 28  19 end*t1.a+19+(
10d20 31 31 29 20 7c 20 74 31 2e 63 2a 74 31 2e 61 2d  11) | t1.c*t1.a-
10d30 31 37 3c 74 31 2e 65 29 2c 62 29 2d 61 2b 31 37  17<t1.e),b)-a+17
10d40 2a 31 37 2a 63 29 29 7d 0a 7d 20 7b 7d 0a 64 6f  *17*c))}.} {}.do
10d50 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
10d60 2e 39 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .92 {.  db eval 
10d70 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65  {SELECT coalesce
10d80 28 28 73 65 6c 65 63 74 20 2b 31 39 20 66 72 6f  ((select +19 fro
10d90 6d 20 74 31 20 77 68 65 72 65 20 31 39 2d 63 2b  m t1 where 19-c+
10da0 74 31 2e 63 2d 66 20 6e 6f 74 20 69 6e 20 28 63  t1.c-f not in (c
10db0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
10dc0 31 39 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  19 from t1 where
10dd0 20 28 74 31 2e 62 20 62 65 74 77 65 65 6e 20 74   (t1.b between t
10de0 31 2e 63 2a 74 31 2e 61 2a 74 31 2e 62 20 7c 20  1.c*t1.a*t1.b | 
10df0 61 2d 65 20 7c 20 31 33 2d 28 61 62 73 28 31 39  a-e | 13-(abs(19
10e00 29 2f 61 62 73 28 28 73 65 6c 65 63 74 20 6d 61  )/abs((select ma
10e10 78 28 74 31 2e 64 20 7c 20 63 6f 61 6c 65 73 63  x(t1.d | coalesc
10e20 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 20 2d  e((select max( -
10e30 74 31 2e 63 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.c) from t1 wh
10e40 65 72 65 20 62 20 69 6e 20 28 73 65 6c 65 63 74  ere b in (select
10e50 20 65 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e   e from t1 union
10e60 20 73 65 6c 65 63 74 20 28 66 29 20 66 72 6f 6d   select (f) from
10e70 20 74 31 29 29 2c 74 31 2e 64 29 2b 28 65 29 29   t1)),t1.d)+(e))
10e80 20 66 72 6f 6d 20 74 31 29 2b 63 29 29 20 61 6e   from t1)+c)) an
10e90 64 20 66 29 29 2c 31 31 29 2c 66 2c 31 37 29 29  d f)),11),f,17))
10ea0 2c 66 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ,f) FROM t1 WHER
10eb0 45 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  E (select count(
10ec0 64 69 73 74 69 6e 63 74 20 31 31 29 2b 6d 69 6e  distinct 11)+min
10ed0 28 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  ((coalesce((sele
10ee0 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
10ef0 20 74 31 2e 64 3c 3e 28 61 62 73 28 74 31 2e 61   t1.d<>(abs(t1.a
10f00 29 2f 61 62 73 28 65 29 29 20 74 68 65 6e 20 64  )/abs(e)) then d
10f10 20 65 6c 73 65 20 7e 28 74 31 2e 65 29 2d 65 2b   else ~(t1.e)-e+
10f20 64 2b 31 33 2d 74 31 2e 62 2b 62 2a 31 39 20 65  d+13-t1.b+b*19 e
10f30 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  nd) from t1 wher
10f40 65 20 28 73 65 6c 65 63 74 20 6d 61 78 28 31 39  e (select max(19
10f50 29 2d 63 61 73 74 28 61 76 67 28 61 29 20 41 53  )-cast(avg(a) AS
10f60 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74   integer) from t
10f70 31 29 3e 20 2d 74 31 2e 65 29 2c 31 37 29 2b 65  1)> -t1.e),17)+e
10f80 2b 74 31 2e 65 2d 74 31 2e 63 2b 28 63 29 29 2a  +t1.e-t1.c+(c))*
10f90 31 37 29 20 66 72 6f 6d 20 74 31 29 20 62 65 74  17) from t1) bet
10fa0 77 65 65 6e 20 20 2d 31 37 20 61 6e 64 20 74 31  ween  -17 and t1
10fb0 2e 63 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  .c}.} {}.do_test
10fc0 20 72 61 6e 64 65 78 70 72 2d 32 2e 39 33 20 7b   randexpr-2.93 {
10fd0 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
10fe0 43 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  CT coalesce((sel
10ff0 65 63 74 20 2b 31 39 20 66 72 6f 6d 20 74 31 20  ect +19 from t1 
11000 77 68 65 72 65 20 31 39 2d 63 2b 74 31 2e 63 2d  where 19-c+t1.c-
11010 66 20 6e 6f 74 20 69 6e 20 28 63 6f 61 6c 65 73  f not in (coales
11020 63 65 28 28 73 65 6c 65 63 74 20 31 39 20 66 72  ce((select 19 fr
11030 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e  om t1 where (t1.
11040 62 20 62 65 74 77 65 65 6e 20 74 31 2e 63 2a 74  b between t1.c*t
11050 31 2e 61 2a 74 31 2e 62 20 7c 20 61 2d 65 20 7c  1.a*t1.b | a-e |
11060 20 31 33 2d 28 61 62 73 28 31 39 29 2f 61 62 73   13-(abs(19)/abs
11070 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
11080 64 20 7c 20 63 6f 61 6c 65 73 63 65 28 28 73 65  d | coalesce((se
11090 6c 65 63 74 20 6d 61 78 28 20 2d 74 31 2e 63 29  lect max( -t1.c)
110a0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62   from t1 where b
110b0 20 69 6e 20 28 73 65 6c 65 63 74 20 65 20 66 72   in (select e fr
110c0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
110d0 63 74 20 28 66 29 20 66 72 6f 6d 20 74 31 29 29  ct (f) from t1))
110e0 2c 74 31 2e 64 29 2b 28 65 29 29 20 66 72 6f 6d  ,t1.d)+(e)) from
110f0 20 74 31 29 2b 63 29 29 20 61 6e 64 20 66 29 29   t1)+c)) and f))
11100 2c 31 31 29 2c 66 2c 31 37 29 29 2c 66 29 20 46  ,11),f,17)),f) F
11110 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
11120 20 28 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28   ((select count(
11130 64 69 73 74 69 6e 63 74 20 31 31 29 2b 6d 69 6e  distinct 11)+min
11140 28 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  ((coalesce((sele
11150 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
11160 20 74 31 2e 64 3c 3e 28 61 62 73 28 74 31 2e 61   t1.d<>(abs(t1.a
11170 29 2f 61 62 73 28 65 29 29 20 74 68 65 6e 20 64  )/abs(e)) then d
11180 20 65 6c 73 65 20 7e 28 74 31 2e 65 29 2d 65 2b   else ~(t1.e)-e+
11190 64 2b 31 33 2d 74 31 2e 62 2b 62 2a 31 39 20 65  d+13-t1.b+b*19 e
111a0 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  nd) from t1 wher
111b0 65 20 28 73 65 6c 65 63 74 20 6d 61 78 28 31 39  e (select max(19
111c0 29 2d 63 61 73 74 28 61 76 67 28 61 29 20 41 53  )-cast(avg(a) AS
111d0 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74   integer) from t
111e0 31 29 3e 20 2d 74 31 2e 65 29 2c 31 37 29 2b 65  1)> -t1.e),17)+e
111f0 2b 74 31 2e 65 2d 74 31 2e 63 2b 28 63 29 29 2a  +t1.e-t1.c+(c))*
11200 31 37 29 20 66 72 6f 6d 20 74 31 29 20 62 65 74  17) from t1) bet
11210 77 65 65 6e 20 20 2d 31 37 20 61 6e 64 20 74 31  ween  -17 and t1
11220 2e 63 29 7d 0a 7d 20 7b 31 39 7d 0a 64 6f 5f 74  .c)}.} {19}.do_t
11230 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 39  est randexpr-2.9
11240 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  4 {.  db eval {S
11250 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28  ELECT coalesce((
11260 73 65 6c 65 63 74 20 2b 31 39 20 66 72 6f 6d 20  select +19 from 
11270 74 31 20 77 68 65 72 65 20 31 39 2d 63 2b 74 31  t1 where 19-c+t1
11280 2e 63 2d 66 20 6e 6f 74 20 69 6e 20 28 63 6f 61  .c-f not in (coa
11290 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 31 39  lesce((select 19
112a0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
112b0 74 31 2e 62 20 62 65 74 77 65 65 6e 20 74 31 2e  t1.b between t1.
112c0 63 2a 74 31 2e 61 2a 74 31 2e 62 20 26 20 61 2d  c*t1.a*t1.b & a-
112d0 65 20 26 20 31 33 2d 28 61 62 73 28 31 39 29 2f  e & 13-(abs(19)/
112e0 61 62 73 28 28 73 65 6c 65 63 74 20 6d 61 78 28  abs((select max(
112f0 74 31 2e 64 20 26 20 63 6f 61 6c 65 73 63 65 28  t1.d & coalesce(
11300 28 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 74 31  (select max( -t1
11310 2e 63 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .c) from t1 wher
11320 65 20 62 20 69 6e 20 28 73 65 6c 65 63 74 20 65  e b in (select e
11330 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
11340 65 6c 65 63 74 20 28 66 29 20 66 72 6f 6d 20 74  elect (f) from t
11350 31 29 29 2c 74 31 2e 64 29 2b 28 65 29 29 20 66  1)),t1.d)+(e)) f
11360 72 6f 6d 20 74 31 29 2b 63 29 29 20 61 6e 64 20  rom t1)+c)) and 
11370 66 29 29 2c 31 31 29 2c 66 2c 31 37 29 29 2c 66  f)),11),f,17)),f
11380 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
11390 4e 4f 54 20 28 28 73 65 6c 65 63 74 20 63 6f 75  NOT ((select cou
113a0 6e 74 28 64 69 73 74 69 6e 63 74 20 31 31 29 2b  nt(distinct 11)+
113b0 6d 69 6e 28 28 63 6f 61 6c 65 73 63 65 28 28 73  min((coalesce((s
113c0 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20 77  elect max(case w
113d0 68 65 6e 20 74 31 2e 64 3c 3e 28 61 62 73 28 74  hen t1.d<>(abs(t
113e0 31 2e 61 29 2f 61 62 73 28 65 29 29 20 74 68 65  1.a)/abs(e)) the
113f0 6e 20 64 20 65 6c 73 65 20 7e 28 74 31 2e 65 29  n d else ~(t1.e)
11400 2d 65 2b 64 2b 31 33 2d 74 31 2e 62 2b 62 2a 31  -e+d+13-t1.b+b*1
11410 39 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77  9 end) from t1 w
11420 68 65 72 65 20 28 73 65 6c 65 63 74 20 6d 61 78  here (select max
11430 28 31 39 29 2d 63 61 73 74 28 61 76 67 28 61 29  (19)-cast(avg(a)
11440 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
11450 6d 20 74 31 29 3e 20 2d 74 31 2e 65 29 2c 31 37  m t1)> -t1.e),17
11460 29 2b 65 2b 74 31 2e 65 2d 74 31 2e 63 2b 28 63  )+e+t1.e-t1.c+(c
11470 29 29 2a 31 37 29 20 66 72 6f 6d 20 74 31 29 20  ))*17) from t1) 
11480 62 65 74 77 65 65 6e 20 20 2d 31 37 20 61 6e 64  between  -17 and
11490 20 74 31 2e 63 29 7d 0a 7d 20 7b 31 39 7d 0a 64   t1.c)}.} {19}.d
114a0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
114b0 32 2e 39 35 20 7b 0a 20 20 64 62 20 65 76 61 6c  2.95 {.  db eval
114c0 20 7b 53 45 4c 45 43 54 20 28 63 61 73 65 20 74   {SELECT (case t
114d0 31 2e 61 20 77 68 65 6e 20 28 73 65 6c 65 63 74  1.a when (select
114e0 20 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   (count(distinct
114f0 20 74 31 2e 66 29 29 20 66 72 6f 6d 20 74 31 29   t1.f)) from t1)
11500 2d 65 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20  -e then 11 else 
11510 74 31 2e 63 2b 31 37 2d 66 2a 7e 66 20 7c 20 66  t1.c+17-f*~f | f
11520 2b 7e 65 2d 61 2a 74 31 2e 62 2b 31 33 20 65 6e  +~e-a*t1.b+13 en
11530 64 20 7c 20 31 33 29 20 46 52 4f 4d 20 74 31 20  d | 13) FROM t1 
11540 57 48 45 52 45 20 28 63 6f 61 6c 65 73 63 65 28  WHERE (coalesce(
11550 28 73 65 6c 65 63 74 20 6d 61 78 28 66 29 20 66  (select max(f) f
11560 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 63 2b  rom t1 where (c+
11570 74 31 2e 66 20 7c 20 28 73 65 6c 65 63 74 20 63  t1.f | (select c
11580 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
11590 2e 64 29 20 66 72 6f 6d 20 74 31 29 3e 3d 63 6f  .d) from t1)>=co
115a0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 62  alesce((select b
115b0 2b 28 61 62 73 28 63 61 73 65 20 77 68 65 6e 20  +(abs(case when 
115c0 74 31 2e 66 3e 3d 28 73 65 6c 65 63 74 20 63 61  t1.f>=(select ca
115d0 73 65 20 6d 61 78 28 66 29 20 77 68 65 6e 20 6d  se max(f) when m
115e0 61 78 28 31 39 29 20 74 68 65 6e 20 63 61 73 74  ax(19) then cast
115f0 28 61 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e  (avg(t1.a) AS in
11600 74 65 67 65 72 29 20 65 6c 73 65 20 63 6f 75 6e  teger) else coun
11610 74 28 64 69 73 74 69 6e 63 74 20 31 33 29 20 65  t(distinct 13) e
11620 6e 64 20 66 72 6f 6d 20 74 31 29 20 7c 20 74 31  nd from t1) | t1
11630 2e 62 20 61 6e 64 20 28 61 20 69 6e 20 28 73 65  .b and (a in (se
11640 6c 65 63 74 20 28 62 29 20 66 72 6f 6d 20 74 31  lect (b) from t1
11650 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31   union select t1
11660 2e 62 20 66 72 6f 6d 20 74 31 29 29 20 74 68 65  .b from t1)) the
11670 6e 20 28 61 29 2d 62 20 77 68 65 6e 20 6e 6f 74  n (a)-b when not
11680 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
11690 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63   from t1 where c
116a0 20 62 65 74 77 65 65 6e 20 74 31 2e 63 20 61 6e   between t1.c an
116b0 64 20 74 31 2e 61 29 20 74 68 65 6e 20 61 20 65  d t1.a) then a e
116c0 6c 73 65 20 74 31 2e 61 20 65 6e 64 29 2f 61 62  lse t1.a end)/ab
116d0 73 28 74 31 2e 62 29 29 2d 20 2d 66 20 66 72 6f  s(t1.b))- -f fro
116e0 6d 20 74 31 20 77 68 65 72 65 20 62 20 6e 6f 74  m t1 where b not
116f0 20 69 6e 20 28 74 31 2e 62 2c 74 31 2e 66 2c 63   in (t1.b,t1.f,c
11700 29 29 2c 74 31 2e 64 29 2d 74 31 2e 64 29 29 2c  )),t1.d)-t1.d)),
11710 20 2d 31 37 29 20 62 65 74 77 65 65 6e 20 31 33   -17) between 13
11720 20 61 6e 64 20 74 31 2e 66 29 7d 0a 7d 20 7b 2d   and t1.f)}.} {-
11730 31 39 34 39 31 7d 0a 64 6f 5f 74 65 73 74 20 72  19491}.do_test r
11740 61 6e 64 65 78 70 72 2d 32 2e 39 36 20 7b 0a 20  andexpr-2.96 {. 
11750 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
11760 20 28 63 61 73 65 20 74 31 2e 61 20 77 68 65 6e   (case t1.a when
11770 20 28 73 65 6c 65 63 74 20 28 63 6f 75 6e 74 28   (select (count(
11780 64 69 73 74 69 6e 63 74 20 74 31 2e 66 29 29 20  distinct t1.f)) 
11790 66 72 6f 6d 20 74 31 29 2d 65 20 74 68 65 6e 20  from t1)-e then 
117a0 31 31 20 65 6c 73 65 20 74 31 2e 63 2b 31 37 2d  11 else t1.c+17-
117b0 66 2a 7e 66 20 7c 20 66 2b 7e 65 2d 61 2a 74 31  f*~f | f+~e-a*t1
117c0 2e 62 2b 31 33 20 65 6e 64 20 7c 20 31 33 29 20  .b+13 end | 13) 
117d0 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
117e0 54 20 28 28 63 6f 61 6c 65 73 63 65 28 28 73 65  T ((coalesce((se
117f0 6c 65 63 74 20 6d 61 78 28 66 29 20 66 72 6f 6d  lect max(f) from
11800 20 74 31 20 77 68 65 72 65 20 28 63 2b 74 31 2e   t1 where (c+t1.
11810 66 20 7c 20 28 73 65 6c 65 63 74 20 63 6f 75 6e  f | (select coun
11820 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 64 29  t(distinct t1.d)
11830 20 66 72 6f 6d 20 74 31 29 3e 3d 63 6f 61 6c 65   from t1)>=coale
11840 73 63 65 28 28 73 65 6c 65 63 74 20 62 2b 28 61  sce((select b+(a
11850 62 73 28 63 61 73 65 20 77 68 65 6e 20 74 31 2e  bs(case when t1.
11860 66 3e 3d 28 73 65 6c 65 63 74 20 63 61 73 65 20  f>=(select case 
11870 6d 61 78 28 66 29 20 77 68 65 6e 20 6d 61 78 28  max(f) when max(
11880 31 39 29 20 74 68 65 6e 20 63 61 73 74 28 61 76  19) then cast(av
11890 67 28 74 31 2e 61 29 20 41 53 20 69 6e 74 65 67  g(t1.a) AS integ
118a0 65 72 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 64  er) else count(d
118b0 69 73 74 69 6e 63 74 20 31 33 29 20 65 6e 64 20  istinct 13) end 
118c0 66 72 6f 6d 20 74 31 29 20 7c 20 74 31 2e 62 20  from t1) | t1.b 
118d0 61 6e 64 20 28 61 20 69 6e 20 28 73 65 6c 65 63  and (a in (selec
118e0 74 20 28 62 29 20 66 72 6f 6d 20 74 31 20 75 6e  t (b) from t1 un
118f0 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 62 20  ion select t1.b 
11900 66 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20 28  from t1)) then (
11910 61 29 2d 62 20 77 68 65 6e 20 6e 6f 74 20 65 78  a)-b when not ex
11920 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
11930 6f 6d 20 74 31 20 77 68 65 72 65 20 63 20 62 65  om t1 where c be
11940 74 77 65 65 6e 20 74 31 2e 63 20 61 6e 64 20 74  tween t1.c and t
11950 31 2e 61 29 20 74 68 65 6e 20 61 20 65 6c 73 65  1.a) then a else
11960 20 74 31 2e 61 20 65 6e 64 29 2f 61 62 73 28 74   t1.a end)/abs(t
11970 31 2e 62 29 29 2d 20 2d 66 20 66 72 6f 6d 20 74  1.b))- -f from t
11980 31 20 77 68 65 72 65 20 62 20 6e 6f 74 20 69 6e  1 where b not in
11990 20 28 74 31 2e 62 2c 74 31 2e 66 2c 63 29 29 2c   (t1.b,t1.f,c)),
119a0 74 31 2e 64 29 2d 74 31 2e 64 29 29 2c 20 2d 31  t1.d)-t1.d)), -1
119b0 37 29 20 62 65 74 77 65 65 6e 20 31 33 20 61 6e  7) between 13 an
119c0 64 20 74 31 2e 66 29 29 7d 0a 7d 20 7b 7d 0a 64  d t1.f))}.} {}.d
119d0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
119e0 32 2e 39 37 20 7b 0a 20 20 64 62 20 65 76 61 6c  2.97 {.  db eval
119f0 20 7b 53 45 4c 45 43 54 20 28 63 61 73 65 20 74   {SELECT (case t
11a00 31 2e 61 20 77 68 65 6e 20 28 73 65 6c 65 63 74  1.a when (select
11a10 20 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   (count(distinct
11a20 20 74 31 2e 66 29 29 20 66 72 6f 6d 20 74 31 29   t1.f)) from t1)
11a30 2d 65 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20  -e then 11 else 
11a40 74 31 2e 63 2b 31 37 2d 66 2a 7e 66 20 26 20 66  t1.c+17-f*~f & f
11a50 2b 7e 65 2d 61 2a 74 31 2e 62 2b 31 33 20 65 6e  +~e-a*t1.b+13 en
11a60 64 20 26 20 31 33 29 20 46 52 4f 4d 20 74 31 20  d & 13) FROM t1 
11a70 57 48 45 52 45 20 28 63 6f 61 6c 65 73 63 65 28  WHERE (coalesce(
11a80 28 73 65 6c 65 63 74 20 6d 61 78 28 66 29 20 66  (select max(f) f
11a90 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 63 2b  rom t1 where (c+
11aa0 74 31 2e 66 20 7c 20 28 73 65 6c 65 63 74 20 63  t1.f | (select c
11ab0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
11ac0 2e 64 29 20 66 72 6f 6d 20 74 31 29 3e 3d 63 6f  .d) from t1)>=co
11ad0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 62  alesce((select b
11ae0 2b 28 61 62 73 28 63 61 73 65 20 77 68 65 6e 20  +(abs(case when 
11af0 74 31 2e 66 3e 3d 28 73 65 6c 65 63 74 20 63 61  t1.f>=(select ca
11b00 73 65 20 6d 61 78 28 66 29 20 77 68 65 6e 20 6d  se max(f) when m
11b10 61 78 28 31 39 29 20 74 68 65 6e 20 63 61 73 74  ax(19) then cast
11b20 28 61 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e  (avg(t1.a) AS in
11b30 74 65 67 65 72 29 20 65 6c 73 65 20 63 6f 75 6e  teger) else coun
11b40 74 28 64 69 73 74 69 6e 63 74 20 31 33 29 20 65  t(distinct 13) e
11b50 6e 64 20 66 72 6f 6d 20 74 31 29 20 7c 20 74 31  nd from t1) | t1
11b60 2e 62 20 61 6e 64 20 28 61 20 69 6e 20 28 73 65  .b and (a in (se
11b70 6c 65 63 74 20 28 62 29 20 66 72 6f 6d 20 74 31  lect (b) from t1
11b80 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31   union select t1
11b90 2e 62 20 66 72 6f 6d 20 74 31 29 29 20 74 68 65  .b from t1)) the
11ba0 6e 20 28 61 29 2d 62 20 77 68 65 6e 20 6e 6f 74  n (a)-b when not
11bb0 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
11bc0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63   from t1 where c
11bd0 20 62 65 74 77 65 65 6e 20 74 31 2e 63 20 61 6e   between t1.c an
11be0 64 20 74 31 2e 61 29 20 74 68 65 6e 20 61 20 65  d t1.a) then a e
11bf0 6c 73 65 20 74 31 2e 61 20 65 6e 64 29 2f 61 62  lse t1.a end)/ab
11c00 73 28 74 31 2e 62 29 29 2d 20 2d 66 20 66 72 6f  s(t1.b))- -f fro
11c10 6d 20 74 31 20 77 68 65 72 65 20 62 20 6e 6f 74  m t1 where b not
11c20 20 69 6e 20 28 74 31 2e 62 2c 74 31 2e 66 2c 63   in (t1.b,t1.f,c
11c30 29 29 2c 74 31 2e 64 29 2d 74 31 2e 64 29 29 2c  )),t1.d)-t1.d)),
11c40 20 2d 31 37 29 20 62 65 74 77 65 65 6e 20 31 33   -17) between 13
11c50 20 61 6e 64 20 74 31 2e 66 29 7d 0a 7d 20 7b 30   and t1.f)}.} {0
11c60 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
11c70 70 72 2d 32 2e 39 38 20 7b 0a 20 20 64 62 20 65  pr-2.98 {.  db e
11c80 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
11c90 20 77 68 65 6e 20 28 28 73 65 6c 65 63 74 20 20   when ((select  
11ca0 2d 61 62 73 28 6d 69 6e 28 63 6f 61 6c 65 73 63  -abs(min(coalesc
11cb0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 31  e((select max(11
11cc0 20 7c 20 74 31 2e 66 29 20 66 72 6f 6d 20 74 31   | t1.f) from t1
11cd0 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63 65 28   where coalesce(
11ce0 28 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74  (select f from t
11cf0 31 20 77 68 65 72 65 20 65 2b 63 20 69 6e 20 28  1 where e+c in (
11d00 73 65 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74  select 19 from t
11d10 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 66  1 union select f
11d20 20 66 72 6f 6d 20 74 31 29 29 2c 62 29 20 6e 6f   from t1)),b) no
11d30 74 20 69 6e 20 28 74 31 2e 61 2c 2b 63 61 73 65  t in (t1.a,+case
11d40 20 77 68 65 6e 20 31 33 3e 3d 74 31 2e 65 20 74   when 13>=t1.e t
11d50 68 65 6e 20 74 31 2e 61 20 77 68 65 6e 20 31 37  hen t1.a when 17
11d60 20 6e 6f 74 20 69 6e 20 28 74 31 2e 64 2c 62 2c   not in (t1.d,b,
11d70 74 31 2e 65 29 20 74 68 65 6e 20 31 33 20 65 6c  t1.e) then 13 el
11d80 73 65 20 74 31 2e 62 20 65 6e 64 2d 74 31 2e 65  se t1.b end-t1.e
11d90 2c 74 31 2e 66 29 29 2c 74 31 2e 66 29 29 2a 63  ,t1.f)),t1.f))*c
11da0 6f 75 6e 74 28 2a 29 2a 6d 69 6e 28 74 31 2e 63  ount(*)*min(t1.c
11db0 29 29 20 66 72 6f 6d 20 74 31 29 3c 31 37 29 20  )) from t1)<17) 
11dc0 61 6e 64 20 31 33 2a 20 2d 66 2b 61 20 6e 6f 74  and 13* -f+a not
11dd0 20 62 65 74 77 65 65 6e 20 28 61 29 20 61 6e 64   between (a) and
11de0 20 66 20 74 68 65 6e 20 63 2d 31 31 2b 62 20 65   f then c-11+b e
11df0 6c 73 65 20 31 39 20 65 6e 64 20 46 52 4f 4d 20  lse 19 end FROM 
11e00 74 31 20 57 48 45 52 45 20 65 2b 63 61 73 65 20  t1 WHERE e+case 
11e10 63 61 73 65 20 77 68 65 6e 20 61 3c 3e 63 20 74  case when a<>c t
11e20 68 65 6e 20 28 61 62 73 28 63 61 73 65 20 77 68  hen (abs(case wh
11e30 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
11e40 65 63 74 20 28 61 62 73 28 20 2d 31 39 2b 31 31  ect (abs( -19+11
11e50 29 2f 61 62 73 28 74 31 2e 63 29 29 20 66 72 6f  )/abs(t1.c)) fro
11e60 6d 20 74 31 20 77 68 65 72 65 20 28 31 37 29 20  m t1 where (17) 
11e70 69 6e 20 28 61 2c 31 33 2c 31 31 29 20 61 6e 64  in (a,13,11) and
11e80 20 31 37 20 69 6e 20 28 73 65 6c 65 63 74 20 31   17 in (select 1
11e90 31 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  1 from t1 union 
11ea0 73 65 6c 65 63 74 20 74 31 2e 66 20 66 72 6f 6d  select t1.f from
11eb0 20 74 31 29 29 2c 74 31 2e 61 29 20 62 65 74 77   t1)),t1.a) betw
11ec0 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 63 20 74  een t1.f and c t
11ed0 68 65 6e 20 74 31 2e 64 20 77 68 65 6e 20 6e 6f  hen t1.d when no
11ee0 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
11ef0 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
11f00 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
11f10 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
11f20 65 20 31 39 3d 66 29 29 20 74 68 65 6e 20 66 20  e 19=f)) then f 
11f30 65 6c 73 65 20 28 62 29 20 65 6e 64 2d 31 39 29  else (b) end-19)
11f40 2f 61 62 73 28 65 29 29 20 65 6c 73 65 20 31 31  /abs(e)) else 11
11f50 20 65 6e 64 20 77 68 65 6e 20 31 37 20 74 68 65   end when 17 the
11f60 6e 20 61 20 65 6c 73 65 20 74 31 2e 66 20 65 6e  n a else t1.f en
11f70 64 2d 31 33 20 7c 20 65 20 62 65 74 77 65 65 6e  d-13 | e between
11f80 20 20 2d 74 31 2e 65 20 61 6e 64 20 31 33 7d 0a    -t1.e and 13}.
11f90 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  } {}.do_test ran
11fa0 64 65 78 70 72 2d 32 2e 39 39 20 7b 0a 20 20 64  dexpr-2.99 {.  d
11fb0 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
11fc0 61 73 65 20 77 68 65 6e 20 28 28 73 65 6c 65 63  ase when ((selec
11fd0 74 20 20 2d 61 62 73 28 6d 69 6e 28 63 6f 61 6c  t  -abs(min(coal
11fe0 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
11ff0 28 31 31 20 7c 20 74 31 2e 66 29 20 66 72 6f 6d  (11 | t1.f) from
12000 20 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73   t1 where coales
12010 63 65 28 28 73 65 6c 65 63 74 20 66 20 66 72 6f  ce((select f fro
12020 6d 20 74 31 20 77 68 65 72 65 20 65 2b 63 20 69  m t1 where e+c i
12030 6e 20 28 73 65 6c 65 63 74 20 31 39 20 66 72 6f  n (select 19 fro
12040 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
12050 74 20 66 20 66 72 6f 6d 20 74 31 29 29 2c 62 29  t f from t1)),b)
12060 20 6e 6f 74 20 69 6e 20 28 74 31 2e 61 2c 2b 63   not in (t1.a,+c
12070 61 73 65 20 77 68 65 6e 20 31 33 3e 3d 74 31 2e  ase when 13>=t1.
12080 65 20 74 68 65 6e 20 74 31 2e 61 20 77 68 65 6e  e then t1.a when
12090 20 31 37 20 6e 6f 74 20 69 6e 20 28 74 31 2e 64   17 not in (t1.d
120a0 2c 62 2c 74 31 2e 65 29 20 74 68 65 6e 20 31 33  ,b,t1.e) then 13
120b0 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 2d 74   else t1.b end-t
120c0 31 2e 65 2c 74 31 2e 66 29 29 2c 74 31 2e 66 29  1.e,t1.f)),t1.f)
120d0 29 2a 63 6f 75 6e 74 28 2a 29 2a 6d 69 6e 28 74  )*count(*)*min(t
120e0 31 2e 63 29 29 20 66 72 6f 6d 20 74 31 29 3c 31  1.c)) from t1)<1
120f0 37 29 20 61 6e 64 20 31 33 2a 20 2d 66 2b 61 20  7) and 13* -f+a 
12100 6e 6f 74 20 62 65 74 77 65 65 6e 20 28 61 29 20  not between (a) 
12110 61 6e 64 20 66 20 74 68 65 6e 20 63 2d 31 31 2b  and f then c-11+
12120 62 20 65 6c 73 65 20 31 39 20 65 6e 64 20 46 52  b else 19 end FR
12130 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
12140 28 65 2b 63 61 73 65 20 63 61 73 65 20 77 68 65  (e+case case whe
12150 6e 20 61 3c 3e 63 20 74 68 65 6e 20 28 61 62 73  n a<>c then (abs
12160 28 63 61 73 65 20 77 68 65 6e 20 63 6f 61 6c 65  (case when coale
12170 73 63 65 28 28 73 65 6c 65 63 74 20 28 61 62 73  sce((select (abs
12180 28 20 2d 31 39 2b 31 31 29 2f 61 62 73 28 74 31  ( -19+11)/abs(t1
12190 2e 63 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65  .c)) from t1 whe
121a0 72 65 20 28 31 37 29 20 69 6e 20 28 61 2c 31 33  re (17) in (a,13
121b0 2c 31 31 29 20 61 6e 64 20 31 37 20 69 6e 20 28  ,11) and 17 in (
121c0 73 65 6c 65 63 74 20 31 31 20 66 72 6f 6d 20 74  select 11 from t
121d0 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74  1 union select t
121e0 31 2e 66 20 66 72 6f 6d 20 74 31 29 29 2c 74 31  1.f from t1)),t1
121f0 2e 61 29 20 62 65 74 77 65 65 6e 20 74 31 2e 66  .a) between t1.f
12200 20 61 6e 64 20 63 20 74 68 65 6e 20 74 31 2e 64   and c then t1.d
12210 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73   when not exists
12220 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
12230 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73  1 where not exis
12240 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
12250 20 74 31 20 77 68 65 72 65 20 31 39 3d 66 29 29   t1 where 19=f))
12260 20 74 68 65 6e 20 66 20 65 6c 73 65 20 28 62 29   then f else (b)
12270 20 65 6e 64 2d 31 39 29 2f 61 62 73 28 65 29 29   end-19)/abs(e))
12280 20 65 6c 73 65 20 31 31 20 65 6e 64 20 77 68 65   else 11 end whe
12290 6e 20 31 37 20 74 68 65 6e 20 61 20 65 6c 73 65  n 17 then a else
122a0 20 74 31 2e 66 20 65 6e 64 2d 31 33 20 7c 20 65   t1.f end-13 | e
122b0 20 62 65 74 77 65 65 6e 20 20 2d 74 31 2e 65 20   between  -t1.e 
122c0 61 6e 64 20 31 33 29 7d 0a 7d 20 7b 34 38 39 7d  and 13)}.} {489}
122d0 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
122e0 72 2d 32 2e 31 30 30 20 7b 0a 20 20 64 62 20 65  r-2.100 {.  db e
122f0 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
12300 20 77 68 65 6e 20 28 28 73 65 6c 65 63 74 20 20   when ((select  
12310 2d 61 62 73 28 6d 69 6e 28 63 6f 61 6c 65 73 63  -abs(min(coalesc
12320 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 31  e((select max(11
12330 20 26 20 74 31 2e 66 29 20 66 72 6f 6d 20 74 31   & t1.f) from t1
12340 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63 65 28   where coalesce(
12350 28 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74  (select f from t
12360 31 20 77 68 65 72 65 20 65 2b 63 20 69 6e 20 28  1 where e+c in (
12370 73 65 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74  select 19 from t
12380 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 66  1 union select f
12390 20 66 72 6f 6d 20 74 31 29 29 2c 62 29 20 6e 6f   from t1)),b) no
123a0 74 20 69 6e 20 28 74 31 2e 61 2c 2b 63 61 73 65  t in (t1.a,+case
123b0 20 77 68 65 6e 20 31 33 3e 3d 74 31 2e 65 20 74   when 13>=t1.e t
123c0 68 65 6e 20 74 31 2e 61 20 77 68 65 6e 20 31 37  hen t1.a when 17
123d0 20 6e 6f 74 20 69 6e 20 28 74 31 2e 64 2c 62 2c   not in (t1.d,b,
123e0 74 31 2e 65 29 20 74 68 65 6e 20 31 33 20 65 6c  t1.e) then 13 el
123f0 73 65 20 74 31 2e 62 20 65 6e 64 2d 74 31 2e 65  se t1.b end-t1.e
12400 2c 74 31 2e 66 29 29 2c 74 31 2e 66 29 29 2a 63  ,t1.f)),t1.f))*c
12410 6f 75 6e 74 28 2a 29 2a 6d 69 6e 28 74 31 2e 63  ount(*)*min(t1.c
12420 29 29 20 66 72 6f 6d 20 74 31 29 3c 31 37 29 20  )) from t1)<17) 
12430 61 6e 64 20 31 33 2a 20 2d 66 2b 61 20 6e 6f 74  and 13* -f+a not
12440 20 62 65 74 77 65 65 6e 20 28 61 29 20 61 6e 64   between (a) and
12450 20 66 20 74 68 65 6e 20 63 2d 31 31 2b 62 20 65   f then c-11+b e
12460 6c 73 65 20 31 39 20 65 6e 64 20 46 52 4f 4d 20  lse 19 end FROM 
12470 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 65 2b  t1 WHERE NOT (e+
12480 63 61 73 65 20 63 61 73 65 20 77 68 65 6e 20 61  case case when a
12490 3c 3e 63 20 74 68 65 6e 20 28 61 62 73 28 63 61  <>c then (abs(ca
124a0 73 65 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65  se when coalesce
124b0 28 28 73 65 6c 65 63 74 20 28 61 62 73 28 20 2d  ((select (abs( -
124c0 31 39 2b 31 31 29 2f 61 62 73 28 74 31 2e 63 29  19+11)/abs(t1.c)
124d0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
124e0 28 31 37 29 20 69 6e 20 28 61 2c 31 33 2c 31 31  (17) in (a,13,11
124f0 29 20 61 6e 64 20 31 37 20 69 6e 20 28 73 65 6c  ) and 17 in (sel
12500 65 63 74 20 31 31 20 66 72 6f 6d 20 74 31 20 75  ect 11 from t1 u
12510 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 66  nion select t1.f
12520 20 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 61 29   from t1)),t1.a)
12530 20 62 65 74 77 65 65 6e 20 74 31 2e 66 20 61 6e   between t1.f an
12540 64 20 63 20 74 68 65 6e 20 74 31 2e 64 20 77 68  d c then t1.d wh
12550 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  en not exists(se
12560 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
12570 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28  here not exists(
12580 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
12590 20 77 68 65 72 65 20 31 39 3d 66 29 29 20 74 68   where 19=f)) th
125a0 65 6e 20 66 20 65 6c 73 65 20 28 62 29 20 65 6e  en f else (b) en
125b0 64 2d 31 39 29 2f 61 62 73 28 65 29 29 20 65 6c  d-19)/abs(e)) el
125c0 73 65 20 31 31 20 65 6e 64 20 77 68 65 6e 20 31  se 11 end when 1
125d0 37 20 74 68 65 6e 20 61 20 65 6c 73 65 20 74 31  7 then a else t1
125e0 2e 66 20 65 6e 64 2d 31 33 20 7c 20 65 20 62 65  .f end-13 | e be
125f0 74 77 65 65 6e 20 20 2d 74 31 2e 65 20 61 6e 64  tween  -t1.e and
12600 20 31 33 29 7d 0a 7d 20 7b 34 38 39 7d 0a 64 6f   13)}.} {489}.do
12610 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
12620 2e 31 30 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  .101 {.  db eval
12630 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68   {SELECT case wh
12640 65 6e 20 74 31 2e 62 2d 74 31 2e 65 2a 63 3c 3e  en t1.b-t1.e*c<>
12650 63 20 74 68 65 6e 20 63 6f 61 6c 65 73 63 65 28  c then coalesce(
12660 28 73 65 6c 65 63 74 20 20 2d 31 37 20 66 72 6f  (select  -17 fro
12670 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e 66  m t1 where (t1.f
12680 2b 28 28 73 65 6c 65 63 74 20 63 61 73 65 20 63  +((select case c
12690 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 20 2d 63  ount(*) when  -c
126a0 61 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69  ast(avg(19) AS i
126b0 6e 74 65 67 65 72 29 2b 63 6f 75 6e 74 28 64 69  nteger)+count(di
126c0 73 74 69 6e 63 74 20 28 74 31 2e 63 29 29 20 7c  stinct (t1.c)) |
126d0 20 28 63 61 73 74 28 61 76 67 28 31 39 29 20 41   (cast(avg(19) A
126e0 53 20 69 6e 74 65 67 65 72 29 29 2a 6d 61 78 28  S integer))*max(
126f0 74 31 2e 63 29 2a 63 6f 75 6e 74 28 2a 29 2d 28  t1.c)*count(*)-(
12700 28 63 6f 75 6e 74 28 2a 29 29 29 20 74 68 65 6e  (count(*))) then
12710 20 63 61 73 74 28 61 76 67 28 62 29 20 41 53 20   cast(avg(b) AS 
12720 69 6e 74 65 67 65 72 29 20 65 6c 73 65 20 28 63  integer) else (c
12730 6f 75 6e 74 28 2a 29 29 20 65 6e 64 2d 6d 69 6e  ount(*)) end-min
12740 28 61 29 20 66 72 6f 6d 20 74 31 29 29 20 7c 20  (a) from t1)) | 
12750 63 61 73 65 20 77 68 65 6e 20 74 31 2e 62 20 7c  case when t1.b |
12760 20 61 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31   a in (select t1
12770 2e 61 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  .a from t1 union
12780 20 73 65 6c 65 63 74 20 28 73 65 6c 65 63 74 20   select (select 
12790 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 65  count(distinct e
127a0 29 20 66 72 6f 6d 20 74 31 29 20 66 72 6f 6d 20  ) from t1) from 
127b0 74 31 29 20 74 68 65 6e 20 74 31 2e 65 20 65 6c  t1) then t1.e el
127c0 73 65 20 62 20 65 6e 64 2b 74 31 2e 61 29 3c 65  se b end+t1.a)<e
127d0 29 2c 31 37 29 20 65 6c 73 65 20 31 39 20 65 6e  ),17) else 19 en
127e0 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
127f0 63 61 73 65 20 20 2d 63 6f 61 6c 65 73 63 65 28  case  -coalesce(
12800 28 73 65 6c 65 63 74 20 64 2d 2b 74 31 2e 64 2d  (select d-+t1.d-
12810 31 33 2d 62 20 66 72 6f 6d 20 74 31 20 77 68 65  13-b from t1 whe
12820 72 65 20 63 61 73 65 20 77 68 65 6e 20 6e 6f 74  re case when not
12830 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
12840 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
12850 74 31 2e 61 2d 74 31 2e 66 20 69 6e 20 28 73 65  t1.a-t1.f in (se
12860 6c 65 63 74 20 74 31 2e 65 20 66 72 6f 6d 20 74  lect t1.e from t
12870 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 31  1 union select 1
12880 37 20 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 31  7 from t1)) or 1
12890 39 3c 3d 74 31 2e 61 29 20 74 68 65 6e 20 74 31  9<=t1.a) then t1
128a0 2e 63 2d 62 20 65 6c 73 65 20 62 20 65 6e 64 20  .c-b else b end 
128b0 69 6e 20 28 73 65 6c 65 63 74 20 20 2d 6d 61 78  in (select  -max
128c0 28 31 33 29 2b 2b 61 62 73 28 6d 61 78 28 74 31  (13)++abs(max(t1
128d0 2e 63 29 29 2a 2b 6d 61 78 28 74 31 2e 64 29 20  .c))*+max(t1.d) 
128e0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
128f0 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 74 31  lect cast(avg(t1
12900 2e 65 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .e) AS integer) 
12910 66 72 6f 6d 20 74 31 29 29 2c 31 33 29 20 7c 20  from t1)),13) | 
12920 74 31 2e 64 20 77 68 65 6e 20 28 74 31 2e 66 29  t1.d when (t1.f)
12930 20 74 68 65 6e 20 66 20 65 6c 73 65 20 61 20 65   then f else a e
12940 6e 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31  nd not between 1
12950 31 20 61 6e 64 20 62 7d 0a 7d 20 7b 7d 0a 64 6f  1 and b}.} {}.do
12960 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
12970 2e 31 30 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  .102 {.  db eval
12980 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68   {SELECT case wh
12990 65 6e 20 74 31 2e 62 2d 74 31 2e 65 2a 63 3c 3e  en t1.b-t1.e*c<>
129a0 63 20 74 68 65 6e 20 63 6f 61 6c 65 73 63 65 28  c then coalesce(
129b0 28 73 65 6c 65 63 74 20 20 2d 31 37 20 66 72 6f  (select  -17 fro
129c0 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e 66  m t1 where (t1.f
129d0 2b 28 28 73 65 6c 65 63 74 20 63 61 73 65 20 63  +((select case c
129e0 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 20 2d 63  ount(*) when  -c
129f0 61 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69  ast(avg(19) AS i
12a00 6e 74 65 67 65 72 29 2b 63 6f 75 6e 74 28 64 69  nteger)+count(di
12a10 73 74 69 6e 63 74 20 28 74 31 2e 63 29 29 20 7c  stinct (t1.c)) |
12a20 20 28 63 61 73 74 28 61 76 67 28 31 39 29 20 41   (cast(avg(19) A
12a30 53 20 69 6e 74 65 67 65 72 29 29 2a 6d 61 78 28  S integer))*max(
12a40 74 31 2e 63 29 2a 63 6f 75 6e 74 28 2a 29 2d 28  t1.c)*count(*)-(
12a50 28 63 6f 75 6e 74 28 2a 29 29 29 20 74 68 65 6e  (count(*))) then
12a60 20 63 61 73 74 28 61 76 67 28 62 29 20 41 53 20   cast(avg(b) AS 
12a70 69 6e 74 65 67 65 72 29 20 65 6c 73 65 20 28 63  integer) else (c
12a80 6f 75 6e 74 28 2a 29 29 20 65 6e 64 2d 6d 69 6e  ount(*)) end-min
12a90 28 61 29 20 66 72 6f 6d 20 74 31 29 29 20 7c 20  (a) from t1)) | 
12aa0 63 61 73 65 20 77 68 65 6e 20 74 31 2e 62 20 7c  case when t1.b |
12ab0 20 61 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31   a in (select t1
12ac0 2e 61 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  .a from t1 union
12ad0 20 73 65 6c 65 63 74 20 28 73 65 6c 65 63 74 20   select (select 
12ae0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 65  count(distinct e
12af0 29 20 66 72 6f 6d 20 74 31 29 20 66 72 6f 6d 20  ) from t1) from 
12b00 74 31 29 20 74 68 65 6e 20 74 31 2e 65 20 65 6c  t1) then t1.e el
12b10 73 65 20 62 20 65 6e 64 2b 74 31 2e 61 29 3c 65  se b end+t1.a)<e
12b20 29 2c 31 37 29 20 65 6c 73 65 20 31 39 20 65 6e  ),17) else 19 en
12b30 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
12b40 4e 4f 54 20 28 63 61 73 65 20 20 2d 63 6f 61 6c  NOT (case  -coal
12b50 65 73 63 65 28 28 73 65 6c 65 63 74 20 64 2d 2b  esce((select d-+
12b60 74 31 2e 64 2d 31 33 2d 62 20 66 72 6f 6d 20 74  t1.d-13-b from t
12b70 31 20 77 68 65 72 65 20 63 61 73 65 20 77 68 65  1 where case whe
12b80 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  n not exists(sel
12b90 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
12ba0 65 72 65 20 28 74 31 2e 61 2d 74 31 2e 66 20 69  ere (t1.a-t1.f i
12bb0 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 65 20 66  n (select t1.e f
12bc0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
12bd0 65 63 74 20 31 37 20 66 72 6f 6d 20 74 31 29 29  ect 17 from t1))
12be0 20 6f 72 20 31 39 3c 3d 74 31 2e 61 29 20 74 68   or 19<=t1.a) th
12bf0 65 6e 20 74 31 2e 63 2d 62 20 65 6c 73 65 20 62  en t1.c-b else b
12c00 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20   end in (select 
12c10 20 2d 6d 61 78 28 31 33 29 2b 2b 61 62 73 28 6d   -max(13)++abs(m
12c20 61 78 28 74 31 2e 63 29 29 2a 2b 6d 61 78 28 74  ax(t1.c))*+max(t
12c30 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  1.d) from t1 uni
12c40 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 74 28 61  on select cast(a
12c50 76 67 28 74 31 2e 65 29 20 41 53 20 69 6e 74 65  vg(t1.e) AS inte
12c60 67 65 72 29 20 66 72 6f 6d 20 74 31 29 29 2c 31  ger) from t1)),1
12c70 33 29 20 7c 20 74 31 2e 64 20 77 68 65 6e 20 28  3) | t1.d when (
12c80 74 31 2e 66 29 20 74 68 65 6e 20 66 20 65 6c 73  t1.f) then f els
12c90 65 20 61 20 65 6e 64 20 6e 6f 74 20 62 65 74 77  e a end not betw
12ca0 65 65 6e 20 31 31 20 61 6e 64 20 62 29 7d 0a 7d  een 11 and b)}.}
12cb0 20 7b 31 37 7d 0a 64 6f 5f 74 65 73 74 20 72 61   {17}.do_test ra
12cc0 6e 64 65 78 70 72 2d 32 2e 31 30 33 20 7b 0a 20  ndexpr-2.103 {. 
12cd0 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
12ce0 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e 62 2d   case when t1.b-
12cf0 74 31 2e 65 2a 63 3c 3e 63 20 74 68 65 6e 20 63  t1.e*c<>c then c
12d00 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
12d10 20 2d 31 37 20 66 72 6f 6d 20 74 31 20 77 68 65   -17 from t1 whe
12d20 72 65 20 28 74 31 2e 66 2b 28 28 73 65 6c 65 63  re (t1.f+((selec
12d30 74 20 63 61 73 65 20 63 6f 75 6e 74 28 2a 29 20  t case count(*) 
12d40 77 68 65 6e 20 20 2d 63 61 73 74 28 61 76 67 28  when  -cast(avg(
12d50 31 39 29 20 41 53 20 69 6e 74 65 67 65 72 29 2b  19) AS integer)+
12d60 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 28  count(distinct (
12d70 74 31 2e 63 29 29 20 26 20 28 63 61 73 74 28 61  t1.c)) & (cast(a
12d80 76 67 28 31 39 29 20 41 53 20 69 6e 74 65 67 65  vg(19) AS intege
12d90 72 29 29 2a 6d 61 78 28 74 31 2e 63 29 2a 63 6f  r))*max(t1.c)*co
12da0 75 6e 74 28 2a 29 2d 28 28 63 6f 75 6e 74 28 2a  unt(*)-((count(*
12db0 29 29 29 20 74 68 65 6e 20 63 61 73 74 28 61 76  ))) then cast(av
12dc0 67 28 62 29 20 41 53 20 69 6e 74 65 67 65 72 29  g(b) AS integer)
12dd0 20 65 6c 73 65 20 28 63 6f 75 6e 74 28 2a 29 29   else (count(*))
12de0 20 65 6e 64 2d 6d 69 6e 28 61 29 20 66 72 6f 6d   end-min(a) from
12df0 20 74 31 29 29 20 26 20 63 61 73 65 20 77 68 65   t1)) & case whe
12e00 6e 20 74 31 2e 62 20 26 20 61 20 69 6e 20 28 73  n t1.b & a in (s
12e10 65 6c 65 63 74 20 74 31 2e 61 20 66 72 6f 6d 20  elect t1.a from 
12e20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
12e30 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69  (select count(di
12e40 73 74 69 6e 63 74 20 65 29 20 66 72 6f 6d 20 74  stinct e) from t
12e50 31 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e  1) from t1) then
12e60 20 74 31 2e 65 20 65 6c 73 65 20 62 20 65 6e 64   t1.e else b end
12e70 2b 74 31 2e 61 29 3c 65 29 2c 31 37 29 20 65 6c  +t1.a)<e),17) el
12e80 73 65 20 31 39 20 65 6e 64 20 46 52 4f 4d 20 74  se 19 end FROM t
12e90 31 20 57 48 45 52 45 20 4e 4f 54 20 28 63 61 73  1 WHERE NOT (cas
12ea0 65 20 20 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  e  -coalesce((se
12eb0 6c 65 63 74 20 64 2d 2b 74 31 2e 64 2d 31 33 2d  lect d-+t1.d-13-
12ec0 62 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  b from t1 where 
12ed0 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 65 78  case when not ex
12ee0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
12ef0 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e  om t1 where (t1.
12f00 61 2d 74 31 2e 66 20 69 6e 20 28 73 65 6c 65 63  a-t1.f in (selec
12f10 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 20 75  t t1.e from t1 u
12f20 6e 69 6f 6e 20 73 65 6c 65 63 74 20 31 37 20 66  nion select 17 f
12f30 72 6f 6d 20 74 31 29 29 20 6f 72 20 31 39 3c 3d  rom t1)) or 19<=
12f40 74 31 2e 61 29 20 74 68 65 6e 20 74 31 2e 63 2d  t1.a) then t1.c-
12f50 62 20 65 6c 73 65 20 62 20 65 6e 64 20 69 6e 20  b else b end in 
12f60 28 73 65 6c 65 63 74 20 20 2d 6d 61 78 28 31 33  (select  -max(13
12f70 29 2b 2b 61 62 73 28 6d 61 78 28 74 31 2e 63 29  )++abs(max(t1.c)
12f80 29 2a 2b 6d 61 78 28 74 31 2e 64 29 20 66 72 6f  )*+max(t1.d) fro
12f90 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
12fa0 74 20 63 61 73 74 28 61 76 67 28 74 31 2e 65 29  t cast(avg(t1.e)
12fb0 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
12fc0 6d 20 74 31 29 29 2c 31 33 29 20 7c 20 74 31 2e  m t1)),13) | t1.
12fd0 64 20 77 68 65 6e 20 28 74 31 2e 66 29 20 74 68  d when (t1.f) th
12fe0 65 6e 20 66 20 65 6c 73 65 20 61 20 65 6e 64 20  en f else a end 
12ff0 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 31 20 61  not between 11 a
13000 6e 64 20 62 29 7d 0a 7d 20 7b 2d 31 37 7d 0a 64  nd b)}.} {-17}.d
13010 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
13020 32 2e 31 30 34 20 7b 0a 20 20 64 62 20 65 76 61  2.104 {.  db eva
13030 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73  l {SELECT coales
13040 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63  ce((select max(c
13050 61 73 65 20 77 68 65 6e 20 28 73 65 6c 65 63 74  ase when (select
13060 20 7e 63 61 73 74 28 61 76 67 28 61 29 20 41 53   ~cast(avg(a) AS
13070 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74   integer) from t
13080 31 29 3e 7e 74 31 2e 61 20 74 68 65 6e 20 66 20  1)>~t1.a then f 
13090 65 6c 73 65 20 2b 7e 31 31 20 65 6e 64 29 20 66  else +~11 end) f
130a0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28 73  rom t1 where ((s
130b0 65 6c 65 63 74 20 63 61 73 65 20 7e 61 62 73 28  elect case ~abs(
130c0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
130d0 31 2e 65 29 2b 28 63 6f 75 6e 74 28 2a 29 2b 63  1.e)+(count(*)+c
130e0 6f 75 6e 74 28 2a 29 2b 28 61 62 73 28 20 2d 7e  ount(*)+(abs( -~
130f0 63 6f 75 6e 74 28 2a 29 20 7c 20 6d 61 78 28 28  count(*) | max((
13100 74 31 2e 62 29 29 29 29 29 29 2a 28 63 61 73 74  t1.b))))))*(cast
13110 28 61 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e  (avg(t1.a) AS in
13120 74 65 67 65 72 29 29 20 77 68 65 6e 20 28 63 6f  teger)) when (co
13130 75 6e 74 28 2a 29 29 20 74 68 65 6e 20 6d 69 6e  unt(*)) then min
13140 28 31 39 29 20 65 6c 73 65 20 20 2d 28 6d 69 6e  (19) else  -(min
13150 28 62 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  (b)) end from t1
13160 29 29 2b 31 31 3c 3e 74 31 2e 66 29 2c 20 2d 63  ))+11<>t1.f), -c
13170 2d 66 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  -f) FROM t1 WHER
13180 45 20 7e 65 3e 63 6f 61 6c 65 73 63 65 28 28 73  E ~e>coalesce((s
13190 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20 63  elect max(case c
131a0 61 73 65 20 63 61 73 65 20 63 6f 61 6c 65 73 63  ase case coalesc
131b0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 6f  e((select max(co
131c0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63  alesce((select c
131d0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
131e0 31 2e 61 2d 74 31 2e 63 3e 31 33 29 2c 31 33 29  1.a-t1.c>13),13)
131f0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
13200 20 2d 62 20 6e 6f 74 20 69 6e 20 28 63 61 73 65   -b not in (case
13210 20 64 20 77 68 65 6e 20 7e 74 31 2e 66 20 7c 20   d when ~t1.f | 
13220 74 31 2e 63 20 74 68 65 6e 20 31 33 20 65 6c 73  t1.c then 13 els
13230 65 20 31 31 20 65 6e 64 2c 31 39 2c 31 39 29 29  e 11 end,19,19))
13240 2c 74 31 2e 64 29 20 77 68 65 6e 20 63 20 74 68  ,t1.d) when c th
13250 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 74 31 2e  en t1.a else t1.
13260 62 20 65 6e 64 2b 66 2d 65 2a 62 20 77 68 65 6e  b end+f-e*b when
13270 20 66 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20   f then 19 else 
13280 20 2d 74 31 2e 62 20 65 6e 64 20 77 68 65 6e 20   -t1.b end when 
13290 74 31 2e 62 20 74 68 65 6e 20 31 31 20 65 6c 73  t1.b then 11 els
132a0 65 20 31 33 20 65 6e 64 29 20 66 72 6f 6d 20 74  e 13 end) from t
132b0 31 20 77 68 65 72 65 20 63 20 69 6e 20 28 73 65  1 where c in (se
132c0 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20  lect 19 from t1 
132d0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 65 20 66  union select e f
132e0 72 6f 6d 20 74 31 29 29 2c 74 31 2e 64 29 7d 0a  rom t1)),t1.d)}.
132f0 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  } {}.do_test ran
13300 64 65 78 70 72 2d 32 2e 31 30 35 20 7b 0a 20 20  dexpr-2.105 {.  
13310 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
13320 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
13330 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20 28   max(case when (
13340 73 65 6c 65 63 74 20 7e 63 61 73 74 28 61 76 67  select ~cast(avg
13350 28 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  (a) AS integer) 
13360 66 72 6f 6d 20 74 31 29 3e 7e 74 31 2e 61 20 74  from t1)>~t1.a t
13370 68 65 6e 20 66 20 65 6c 73 65 20 2b 7e 31 31 20  hen f else +~11 
13380 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65  end) from t1 whe
13390 72 65 20 28 28 73 65 6c 65 63 74 20 63 61 73 65  re ((select case
133a0 20 7e 61 62 73 28 63 6f 75 6e 74 28 64 69 73 74   ~abs(count(dist
133b0 69 6e 63 74 20 74 31 2e 65 29 2b 28 63 6f 75 6e  inct t1.e)+(coun
133c0 74 28 2a 29 2b 63 6f 75 6e 74 28 2a 29 2b 28 61  t(*)+count(*)+(a
133d0 62 73 28 20 2d 7e 63 6f 75 6e 74 28 2a 29 20 7c  bs( -~count(*) |
133e0 20 6d 61 78 28 28 74 31 2e 62 29 29 29 29 29 29   max((t1.b))))))
133f0 2a 28 63 61 73 74 28 61 76 67 28 74 31 2e 61 29  *(cast(avg(t1.a)
13400 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 77 68   AS integer)) wh
13410 65 6e 20 28 63 6f 75 6e 74 28 2a 29 29 20 74 68  en (count(*)) th
13420 65 6e 20 6d 69 6e 28 31 39 29 20 65 6c 73 65 20  en min(19) else 
13430 20 2d 28 6d 69 6e 28 62 29 29 20 65 6e 64 20 66   -(min(b)) end f
13440 72 6f 6d 20 74 31 29 29 2b 31 31 3c 3e 74 31 2e  rom t1))+11<>t1.
13450 66 29 2c 20 2d 63 2d 66 29 20 46 52 4f 4d 20 74  f), -c-f) FROM t
13460 31 20 57 48 45 52 45 20 4e 4f 54 20 28 7e 65 3e  1 WHERE NOT (~e>
13470 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
13480 20 6d 61 78 28 63 61 73 65 20 63 61 73 65 20 63   max(case case c
13490 61 73 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ase coalesce((se
134a0 6c 65 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63  lect max(coalesc
134b0 65 28 28 73 65 6c 65 63 74 20 63 20 66 72 6f 6d  e((select c from
134c0 20 74 31 20 77 68 65 72 65 20 74 31 2e 61 2d 74   t1 where t1.a-t
134d0 31 2e 63 3e 31 33 29 2c 31 33 29 29 20 66 72 6f  1.c>13),13)) fro
134e0 6d 20 74 31 20 77 68 65 72 65 20 20 2d 62 20 6e  m t1 where  -b n
134f0 6f 74 20 69 6e 20 28 63 61 73 65 20 64 20 77 68  ot in (case d wh
13500 65 6e 20 7e 74 31 2e 66 20 7c 20 74 31 2e 63 20  en ~t1.f | t1.c 
13510 74 68 65 6e 20 31 33 20 65 6c 73 65 20 31 31 20  then 13 else 11 
13520 65 6e 64 2c 31 39 2c 31 39 29 29 2c 74 31 2e 64  end,19,19)),t1.d
13530 29 20 77 68 65 6e 20 63 20 74 68 65 6e 20 74 31  ) when c then t1
13540 2e 61 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64  .a else t1.b end
13550 2b 66 2d 65 2a 62 20 77 68 65 6e 20 66 20 74 68  +f-e*b when f th
13560 65 6e 20 31 39 20 65 6c 73 65 20 20 2d 74 31 2e  en 19 else  -t1.
13570 62 20 65 6e 64 20 77 68 65 6e 20 74 31 2e 62 20  b end when t1.b 
13580 74 68 65 6e 20 31 31 20 65 6c 73 65 20 31 33 20  then 11 else 13 
13590 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65  end) from t1 whe
135a0 72 65 20 63 20 69 6e 20 28 73 65 6c 65 63 74 20  re c in (select 
135b0 31 39 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  19 from t1 union
135c0 20 73 65 6c 65 63 74 20 65 20 66 72 6f 6d 20 74   select e from t
135d0 31 29 29 2c 74 31 2e 64 29 29 7d 0a 7d 20 7b 2d  1)),t1.d))}.} {-
135e0 31 32 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  12}.do_test rand
135f0 65 78 70 72 2d 32 2e 31 30 36 20 7b 0a 20 20 64  expr-2.106 {.  d
13600 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
13610 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
13620 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20 28 73  max(case when (s
13630 65 6c 65 63 74 20 7e 63 61 73 74 28 61 76 67 28  elect ~cast(avg(
13640 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  a) AS integer) f
13650 72 6f 6d 20 74 31 29 3e 7e 74 31 2e 61 20 74 68  rom t1)>~t1.a th
13660 65 6e 20 66 20 65 6c 73 65 20 2b 7e 31 31 20 65  en f else +~11 e
13670 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  nd) from t1 wher
13680 65 20 28 28 73 65 6c 65 63 74 20 63 61 73 65 20  e ((select case 
13690 7e 61 62 73 28 63 6f 75 6e 74 28 64 69 73 74 69  ~abs(count(disti
136a0 6e 63 74 20 74 31 2e 65 29 2b 28 63 6f 75 6e 74  nct t1.e)+(count
136b0 28 2a 29 2b 63 6f 75 6e 74 28 2a 29 2b 28 61 62  (*)+count(*)+(ab
136c0 73 28 20 2d 7e 63 6f 75 6e 74 28 2a 29 20 26 20  s( -~count(*) & 
136d0 6d 61 78 28 28 74 31 2e 62 29 29 29 29 29 29 2a  max((t1.b))))))*
136e0 28 63 61 73 74 28 61 76 67 28 74 31 2e 61 29 20  (cast(avg(t1.a) 
136f0 41 53 20 69 6e 74 65 67 65 72 29 29 20 77 68 65  AS integer)) whe
13700 6e 20 28 63 6f 75 6e 74 28 2a 29 29 20 74 68 65  n (count(*)) the
13710 6e 20 6d 69 6e 28 31 39 29 20 65 6c 73 65 20 20  n min(19) else  
13720 2d 28 6d 69 6e 28 62 29 29 20 65 6e 64 20 66 72  -(min(b)) end fr
13730 6f 6d 20 74 31 29 29 2b 31 31 3c 3e 74 31 2e 66  om t1))+11<>t1.f
13740 29 2c 20 2d 63 2d 66 29 20 46 52 4f 4d 20 74 31  ), -c-f) FROM t1
13750 20 57 48 45 52 45 20 4e 4f 54 20 28 7e 65 3e 63   WHERE NOT (~e>c
13760 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
13770 6d 61 78 28 63 61 73 65 20 63 61 73 65 20 63 61  max(case case ca
13780 73 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  se coalesce((sel
13790 65 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63 65  ect max(coalesce
137a0 28 28 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20  ((select c from 
137b0 74 31 20 77 68 65 72 65 20 74 31 2e 61 2d 74 31  t1 where t1.a-t1
137c0 2e 63 3e 31 33 29 2c 31 33 29 29 20 66 72 6f 6d  .c>13),13)) from
137d0 20 74 31 20 77 68 65 72 65 20 20 2d 62 20 6e 6f   t1 where  -b no
137e0 74 20 69 6e 20 28 63 61 73 65 20 64 20 77 68 65  t in (case d whe
137f0 6e 20 7e 74 31 2e 66 20 7c 20 74 31 2e 63 20 74  n ~t1.f | t1.c t
13800 68 65 6e 20 31 33 20 65 6c 73 65 20 31 31 20 65  hen 13 else 11 e
13810 6e 64 2c 31 39 2c 31 39 29 29 2c 74 31 2e 64 29  nd,19,19)),t1.d)
13820 20 77 68 65 6e 20 63 20 74 68 65 6e 20 74 31 2e   when c then t1.
13830 61 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 2b  a else t1.b end+
13840 66 2d 65 2a 62 20 77 68 65 6e 20 66 20 74 68 65  f-e*b when f the
13850 6e 20 31 39 20 65 6c 73 65 20 20 2d 74 31 2e 62  n 19 else  -t1.b
13860 20 65 6e 64 20 77 68 65 6e 20 74 31 2e 62 20 74   end when t1.b t
13870 68 65 6e 20 31 31 20 65 6c 73 65 20 31 33 20 65  hen 11 else 13 e
13880 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  nd) from t1 wher
13890 65 20 63 20 69 6e 20 28 73 65 6c 65 63 74 20 31  e c in (select 1
138a0 39 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  9 from t1 union 
138b0 73 65 6c 65 63 74 20 65 20 66 72 6f 6d 20 74 31  select e from t1
138c0 29 29 2c 74 31 2e 64 29 29 7d 0a 7d 20 7b 2d 31  )),t1.d))}.} {-1
138d0 32 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  2}.do_test rande
138e0 78 70 72 2d 32 2e 31 30 37 20 7b 0a 20 20 64 62  xpr-2.107 {.  db
138f0 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
13900 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 61  alesce((select a
13910 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62   from t1 where b
13920 3e 3d 7e 31 31 2d 63 6f 61 6c 65 73 63 65 28 28  >=~11-coalesce((
13930 73 65 6c 65 63 74 20 6d 61 78 28 28 61 62 73 28  select max((abs(
13940 31 39 29 2f 61 62 73 28 74 31 2e 65 29 29 2b 31  19)/abs(t1.e))+1
13950 39 2b 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20  9+t1.d) from t1 
13960 77 68 65 72 65 20 28 73 65 6c 65 63 74 20 61 62  where (select ab
13970 73 28 63 6f 75 6e 74 28 2a 29 20 7c 20 63 6f 75  s(count(*) | cou
13980 6e 74 28 2a 29 20 7c 20 63 61 73 65 20 63 6f 75  nt(*) | case cou
13990 6e 74 28 2a 29 20 77 68 65 6e 20 63 61 73 74 28  nt(*) when cast(
139a0 61 76 67 28 31 37 29 20 41 53 20 69 6e 74 65 67  avg(17) AS integ
139b0 65 72 29 20 74 68 65 6e 20 20 2d 63 61 73 74 28  er) then  -cast(
139c0 61 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65  avg(b) AS intege
139d0 72 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29  r) else count(*)
139e0 20 65 6e 64 2a 6d 69 6e 28 62 29 29 2a 28 6d 69   end*min(b))*(mi
139f0 6e 28 74 31 2e 65 29 29 20 66 72 6f 6d 20 74 31  n(t1.e)) from t1
13a00 29 20 69 6e 20 28 31 31 2a 28 73 65 6c 65 63 74  ) in (11*(select
13a10 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74   count(*) from t
13a20 31 29 2a 31 37 2a 74 31 2e 65 2d 65 2a 74 31 2e  1)*17*t1.e-e*t1.
13a30 62 2c 74 31 2e 65 2c 74 31 2e 66 29 29 2c 61 29  b,t1.e,t1.f)),a)
13a40 2a 74 31 2e 64 29 2c 31 33 29 2d 66 20 46 52 4f  *t1.d),13)-f FRO
13a50 4d 20 74 31 20 57 48 45 52 45 20 7e 28 28 63 61  M t1 WHERE ~((ca
13a60 73 65 20 77 68 65 6e 20 6e 6f 74 20 31 33 2d 2b  se when not 13-+
13a70 74 31 2e 63 3e 3d 31 37 20 74 68 65 6e 20 20 2d  t1.c>=17 then  -
13a80 7e 20 2d 62 2b 74 31 2e 66 2b 63 61 73 65 20 77  ~ -b+t1.f+case w
13a90 68 65 6e 20 74 31 2e 63 3c 74 31 2e 62 20 74 68  hen t1.c<t1.b th
13aa0 65 6e 20 74 31 2e 62 20 77 68 65 6e 20 65 2a 74  en t1.b when e*t
13ab0 31 2e 62 20 69 6e 20 28 63 2c 66 2c 31 39 29 20  1.b in (c,f,19) 
13ac0 74 68 65 6e 20 28 61 62 73 28 61 29 2f 61 62 73  then (abs(a)/abs
13ad0 28 63 61 73 65 20 77 68 65 6e 20 31 33 3d 65 20  (case when 13=e 
13ae0 74 68 65 6e 20 74 31 2e 65 20 77 68 65 6e 20 20  then t1.e when  
13af0 2d 61 3c 3e 74 31 2e 64 20 74 68 65 6e 20 31 31  -a<>t1.d then 11
13b00 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 29 29   else t1.e end))
13b10 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 20 77   else t1.b end w
13b20 68 65 6e 20 64 3e 61 20 74 68 65 6e 20 28 61 29  hen d>a then (a)
13b30 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 29 29   else t1.b end))
13b40 2b 74 31 2e 63 20 69 6e 20 28 31 33 2c 74 31 2e  +t1.c in (13,t1.
13b50 61 2c 31 33 29 20 6f 72 20 74 31 2e 65 3e 63 7d  a,13) or t1.e>c}
13b60 0a 7d 20 7b 2d 35 30 30 7d 0a 64 6f 5f 74 65 73  .} {-500}.do_tes
13b70 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 30 38  t randexpr-2.108
13b80 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
13b90 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28 73  LECT coalesce((s
13ba0 65 6c 65 63 74 20 61 20 66 72 6f 6d 20 74 31 20  elect a from t1 
13bb0 77 68 65 72 65 20 62 3e 3d 7e 31 31 2d 63 6f 61  where b>=~11-coa
13bc0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
13bd0 78 28 28 61 62 73 28 31 39 29 2f 61 62 73 28 74  x((abs(19)/abs(t
13be0 31 2e 65 29 29 2b 31 39 2b 74 31 2e 64 29 20 66  1.e))+19+t1.d) f
13bf0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 73 65  rom t1 where (se
13c00 6c 65 63 74 20 61 62 73 28 63 6f 75 6e 74 28 2a  lect abs(count(*
13c10 29 20 7c 20 63 6f 75 6e 74 28 2a 29 20 7c 20 63  ) | count(*) | c
13c20 61 73 65 20 63 6f 75 6e 74 28 2a 29 20 77 68 65  ase count(*) whe
13c30 6e 20 63 61 73 74 28 61 76 67 28 31 37 29 20 41  n cast(avg(17) A
13c40 53 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20  S integer) then 
13c50 20 2d 63 61 73 74 28 61 76 67 28 62 29 20 41 53   -cast(avg(b) AS
13c60 20 69 6e 74 65 67 65 72 29 20 65 6c 73 65 20 63   integer) else c
13c70 6f 75 6e 74 28 2a 29 20 65 6e 64 2a 6d 69 6e 28  ount(*) end*min(
13c80 62 29 29 2a 28 6d 69 6e 28 74 31 2e 65 29 29 20  b))*(min(t1.e)) 
13c90 66 72 6f 6d 20 74 31 29 20 69 6e 20 28 31 31 2a  from t1) in (11*
13ca0 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29  (select count(*)
13cb0 20 66 72 6f 6d 20 74 31 29 2a 31 37 2a 74 31 2e   from t1)*17*t1.
13cc0 65 2d 65 2a 74 31 2e 62 2c 74 31 2e 65 2c 74 31  e-e*t1.b,t1.e,t1
13cd0 2e 66 29 29 2c 61 29 2a 74 31 2e 64 29 2c 31 33  .f)),a)*t1.d),13
13ce0 29 2d 66 20 46 52 4f 4d 20 74 31 20 57 48 45 52  )-f FROM t1 WHER
13cf0 45 20 4e 4f 54 20 28 7e 28 28 63 61 73 65 20 77  E NOT (~((case w
13d00 68 65 6e 20 6e 6f 74 20 31 33 2d 2b 74 31 2e 63  hen not 13-+t1.c
13d10 3e 3d 31 37 20 74 68 65 6e 20 20 2d 7e 20 2d 62  >=17 then  -~ -b
13d20 2b 74 31 2e 66 2b 63 61 73 65 20 77 68 65 6e 20  +t1.f+case when 
13d30 74 31 2e 63 3c 74 31 2e 62 20 74 68 65 6e 20 74  t1.c<t1.b then t
13d40 31 2e 62 20 77 68 65 6e 20 65 2a 74 31 2e 62 20  1.b when e*t1.b 
13d50 69 6e 20 28 63 2c 66 2c 31 39 29 20 74 68 65 6e  in (c,f,19) then
13d60 20 28 61 62 73 28 61 29 2f 61 62 73 28 63 61 73   (abs(a)/abs(cas
13d70 65 20 77 68 65 6e 20 31 33 3d 65 20 74 68 65 6e  e when 13=e then
13d80 20 74 31 2e 65 20 77 68 65 6e 20 20 2d 61 3c 3e   t1.e when  -a<>
13d90 74 31 2e 64 20 74 68 65 6e 20 31 31 20 65 6c 73  t1.d then 11 els
13da0 65 20 74 31 2e 65 20 65 6e 64 29 29 20 65 6c 73  e t1.e end)) els
13db0 65 20 74 31 2e 62 20 65 6e 64 20 77 68 65 6e 20  e t1.b end when 
13dc0 64 3e 61 20 74 68 65 6e 20 28 61 29 20 65 6c 73  d>a then (a) els
13dd0 65 20 74 31 2e 62 20 65 6e 64 29 29 2b 74 31 2e  e t1.b end))+t1.
13de0 63 20 69 6e 20 28 31 33 2c 74 31 2e 61 2c 31 33  c in (13,t1.a,13
13df0 29 20 6f 72 20 74 31 2e 65 3e 63 29 7d 0a 7d 20  ) or t1.e>c)}.} 
13e00 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
13e10 78 70 72 2d 32 2e 31 30 39 20 7b 0a 20 20 64 62  xpr-2.109 {.  db
13e20 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
13e30 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 61  alesce((select a
13e40 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62   from t1 where b
13e50 3e 3d 7e 31 31 2d 63 6f 61 6c 65 73 63 65 28 28  >=~11-coalesce((
13e60 73 65 6c 65 63 74 20 6d 61 78 28 28 61 62 73 28  select max((abs(
13e70 31 39 29 2f 61 62 73 28 74 31 2e 65 29 29 2b 31  19)/abs(t1.e))+1
13e80 39 2b 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20  9+t1.d) from t1 
13e90 77 68 65 72 65 20 28 73 65 6c 65 63 74 20 61 62  where (select ab
13ea0 73 28 63 6f 75 6e 74 28 2a 29 20 26 20 63 6f 75  s(count(*) & cou
13eb0 6e 74 28 2a 29 20 26 20 63 61 73 65 20 63 6f 75  nt(*) & case cou
13ec0 6e 74 28 2a 29 20 77 68 65 6e 20 63 61 73 74 28  nt(*) when cast(
13ed0 61 76 67 28 31 37 29 20 41 53 20 69 6e 74 65 67  avg(17) AS integ
13ee0 65 72 29 20 74 68 65 6e 20 20 2d 63 61 73 74 28  er) then  -cast(
13ef0 61 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65  avg(b) AS intege
13f00 72 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29  r) else count(*)
13f10 20 65 6e 64 2a 6d 69 6e 28 62 29 29 2a 28 6d 69   end*min(b))*(mi
13f20 6e 28 74 31 2e 65 29 29 20 66 72 6f 6d 20 74 31  n(t1.e)) from t1
13f30 29 20 69 6e 20 28 31 31 2a 28 73 65 6c 65 63 74  ) in (11*(select
13f40 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74   count(*) from t
13f50 31 29 2a 31 37 2a 74 31 2e 65 2d 65 2a 74 31 2e  1)*17*t1.e-e*t1.
13f60 62 2c 74 31 2e 65 2c 74 31 2e 66 29 29 2c 61 29  b,t1.e,t1.f)),a)
13f70 2a 74 31 2e 64 29 2c 31 33 29 2d 66 20 46 52 4f  *t1.d),13)-f FRO
13f80 4d 20 74 31 20 57 48 45 52 45 20 7e 28 28 63 61  M t1 WHERE ~((ca
13f90 73 65 20 77 68 65 6e 20 6e 6f 74 20 31 33 2d 2b  se when not 13-+
13fa0 74 31 2e 63 3e 3d 31 37 20 74 68 65 6e 20 20 2d  t1.c>=17 then  -
13fb0 7e 20 2d 62 2b 74 31 2e 66 2b 63 61 73 65 20 77  ~ -b+t1.f+case w
13fc0 68 65 6e 20 74 31 2e 63 3c 74 31 2e 62 20 74 68  hen t1.c<t1.b th
13fd0 65 6e 20 74 31 2e 62 20 77 68 65 6e 20 65 2a 74  en t1.b when e*t
13fe0 31 2e 62 20 69 6e 20 28 63 2c 66 2c 31 39 29 20  1.b in (c,f,19) 
13ff0 74 68 65 6e 20 28 61 62 73 28 61 29 2f 61 62 73  then (abs(a)/abs
14000 28 63 61 73 65 20 77 68 65 6e 20 31 33 3d 65 20  (case when 13=e 
14010 74 68 65 6e 20 74 31 2e 65 20 77 68 65 6e 20 20  then t1.e when  
14020 2d 61 3c 3e 74 31 2e 64 20 74 68 65 6e 20 31 31  -a<>t1.d then 11
14030 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 29 29   else t1.e end))
14040 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 20 77   else t1.b end w
14050 68 65 6e 20 64 3e 61 20 74 68 65 6e 20 28 61 29  hen d>a then (a)
14060 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 29 29   else t1.b end))
14070 2b 74 31 2e 63 20 69 6e 20 28 31 33 2c 74 31 2e  +t1.c in (13,t1.
14080 61 2c 31 33 29 20 6f 72 20 74 31 2e 65 3e 63 7d  a,13) or t1.e>c}
14090 0a 7d 20 7b 2d 35 30 30 7d 0a 64 6f 5f 74 65 73  .} {-500}.do_tes
140a0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 31 30  t randexpr-2.110
140b0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
140c0 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 31  LECT case when 1
140d0 33 3e 3d 7e 74 31 2e 61 20 6f 72 20 28 65 78 69  3>=~t1.a or (exi
140e0 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
140f0 6d 20 74 31 20 77 68 65 72 65 20 31 31 20 6e 6f  m t1 where 11 no
14100 74 20 69 6e 20 28 31 37 2c 74 31 2e 66 2c 31 37  t in (17,t1.f,17
14110 29 29 29 20 74 68 65 6e 20 66 20 77 68 65 6e 20  ))) then f when 
14120 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
14130 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
14140 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
14150 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
14160 31 33 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 65  13 not between e
14170 20 61 6e 64 20 7e 2b 63 61 73 65 20 62 20 77 68   and ~+case b wh
14180 65 6e 20 74 31 2e 66 20 74 68 65 6e 20 63 61 73  en t1.f then cas
14190 65 20 20 2d 63 61 73 65 20 66 20 77 68 65 6e 20  e  -case f when 
141a0 31 31 20 74 68 65 6e 20 20 2d 31 37 20 65 6c 73  11 then  -17 els
141b0 65 20 31 39 20 65 6e 64 2b 31 37 20 77 68 65 6e  e 19 end+17 when
141c0 20 62 20 74 68 65 6e 20 62 20 65 6c 73 65 20 31   b then b else 1
141d0 33 20 65 6e 64 20 65 6c 73 65 20 31 33 20 65 6e  3 end else 13 en
141e0 64 2d 20 2d 74 31 2e 61 20 61 6e 64 20 74 31 2e  d- -t1.a and t1.
141f0 63 20 6e 6f 74 20 69 6e 20 28 74 31 2e 66 2c 61  c not in (t1.f,a
14200 2c 63 29 20 6f 72 20 74 31 2e 66 3c 31 31 29 29  ,c) or t1.f<11))
14210 20 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20   then t1.c else 
14220 31 31 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57  11 end FROM t1 W
14230 48 45 52 45 20 2b 74 31 2e 65 20 69 6e 20 28 73  HERE +t1.e in (s
14240 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 74  elect cast(avg(t
14250 31 2e 63 2a 74 31 2e 61 2a 28 61 62 73 28 31 33  1.c*t1.a*(abs(13
14260 29 2f 61 62 73 28 74 31 2e 65 29 29 29 20 41 53  )/abs(t1.e))) AS
14270 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74   integer) from t
14280 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d  1 union select m
14290 69 6e 28 63 2b 31 33 29 20 66 72 6f 6d 20 74 31  in(c+13) from t1
142a0 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  )}.} {}.do_test 
142b0 72 61 6e 64 65 78 70 72 2d 32 2e 31 31 31 20 7b  randexpr-2.111 {
142c0 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
142d0 43 54 20 63 61 73 65 20 77 68 65 6e 20 31 33 3e  CT case when 13>
142e0 3d 7e 74 31 2e 61 20 6f 72 20 28 65 78 69 73 74  =~t1.a or (exist
142f0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
14300 74 31 20 77 68 65 72 65 20 31 31 20 6e 6f 74 20  t1 where 11 not 
14310 69 6e 20 28 31 37 2c 74 31 2e 66 2c 31 37 29 29  in (17,t1.f,17))
14320 29 20 74 68 65 6e 20 66 20 77 68 65 6e 20 6e 6f  ) then f when no
14330 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
14340 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
14350 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
14360 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 33  from t1 where 13
14370 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 65 20 61   not between e a
14380 6e 64 20 7e 2b 63 61 73 65 20 62 20 77 68 65 6e  nd ~+case b when
14390 20 74 31 2e 66 20 74 68 65 6e 20 63 61 73 65 20   t1.f then case 
143a0 20 2d 63 61 73 65 20 66 20 77 68 65 6e 20 31 31   -case f when 11
143b0 20 74 68 65 6e 20 20 2d 31 37 20 65 6c 73 65 20   then  -17 else 
143c0 31 39 20 65 6e 64 2b 31 37 20 77 68 65 6e 20 62  19 end+17 when b
143d0 20 74 68 65 6e 20 62 20 65 6c 73 65 20 31 33 20   then b else 13 
143e0 65 6e 64 20 65 6c 73 65 20 31 33 20 65 6e 64 2d  end else 13 end-
143f0 20 2d 74 31 2e 61 20 61 6e 64 20 74 31 2e 63 20   -t1.a and t1.c 
14400 6e 6f 74 20 69 6e 20 28 74 31 2e 66 2c 61 2c 63  not in (t1.f,a,c
14410 29 20 6f 72 20 74 31 2e 66 3c 31 31 29 29 20 74  ) or t1.f<11)) t
14420 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 31 31  hen t1.c else 11
14430 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45   end FROM t1 WHE
14440 52 45 20 4e 4f 54 20 28 2b 74 31 2e 65 20 69 6e  RE NOT (+t1.e in
14450 20 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76   (select cast(av
14460 67 28 74 31 2e 63 2a 74 31 2e 61 2a 28 61 62 73  g(t1.c*t1.a*(abs
14470 28 31 33 29 2f 61 62 73 28 74 31 2e 65 29 29 29  (13)/abs(t1.e)))
14480 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
14490 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
144a0 74 20 6d 69 6e 28 63 2b 31 33 29 20 66 72 6f 6d  t min(c+13) from
144b0 20 74 31 29 29 7d 0a 7d 20 7b 36 30 30 7d 0a 64   t1))}.} {600}.d
144c0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
144d0 32 2e 31 31 32 20 7b 0a 20 20 64 62 20 65 76 61  2.112 {.  db eva
144e0 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
144f0 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65  hen coalesce((se
14500 6c 65 63 74 20 6d 61 78 28 31 33 29 20 66 72 6f  lect max(13) fro
14510 6d 20 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65  m t1 where coale
14520 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
14530 63 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  c) from t1 where
14540 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
14550 74 20 6d 61 78 28 31 37 29 20 66 72 6f 6d 20 74  t max(17) from t
14560 31 20 77 68 65 72 65 20 31 31 20 69 6e 20 28 73  1 where 11 in (s
14570 65 6c 65 63 74 20 7e 64 20 7c 20 63 61 73 65 20  elect ~d | case 
14580 77 68 65 6e 20 74 31 2e 61 3e 2b 31 39 20 74 68  when t1.a>+19 th
14590 65 6e 20 31 31 20 77 68 65 6e 20 74 31 2e 64 20  en 11 when t1.d 
145a0 6e 6f 74 20 69 6e 20 28 20 2d 65 2c 65 2c 63 29  not in ( -e,e,c)
145b0 20 6f 72 20 31 33 3c 74 31 2e 63 20 74 68 65 6e   or 13<t1.c then
145c0 20 74 31 2e 62 20 65 6c 73 65 20 64 20 65 6e 64   t1.b else d end
145d0 2d 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e  -t1.d from t1 un
145e0 69 6f 6e 20 73 65 6c 65 63 74 20 65 20 66 72 6f  ion select e fro
145f0 6d 20 74 31 29 29 2c 74 31 2e 62 29 20 69 6e 20  m t1)),t1.b) in 
14600 28 73 65 6c 65 63 74 20 65 20 66 72 6f 6d 20 74  (select e from t
14610 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63  1 union select c
14620 20 66 72 6f 6d 20 74 31 29 29 2c 64 29 3c 3e 64   from t1)),d)<>d
14630 20 6f 72 20 74 31 2e 65 3c 3e 62 29 2c 74 31 2e   or t1.e<>b),t1.
14640 62 29 2a 31 33 3c 3d 66 20 74 68 65 6e 20 20 2d  b)*13<=f then  -
14650 74 31 2e 65 20 77 68 65 6e 20 31 39 20 62 65 74  t1.e when 19 bet
14660 77 65 65 6e 20 20 2d 74 31 2e 66 20 61 6e 64 20  ween  -t1.f and 
14670 74 31 2e 61 20 74 68 65 6e 20 20 2d 74 31 2e 62  t1.a then  -t1.b
14680 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 20 46   else t1.f end F
14690 52 4f 4d 20 74 31 20 57 48 45 52 45 20 65 78 69  ROM t1 WHERE exi
146a0 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
146b0 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66 20  m t1 where t1.f 
146c0 62 65 74 77 65 65 6e 20 61 20 61 6e 64 20 63 6f  between a and co
146d0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
146e0 61 78 28 74 31 2e 66 29 20 66 72 6f 6d 20 74 31  ax(t1.f) from t1
146f0 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73 65   where exists(se
14700 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
14710 68 65 72 65 20 63 6f 61 6c 65 73 63 65 28 28 73  here coalesce((s
14720 65 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31  elect 19 from t1
14730 20 77 68 65 72 65 20 74 31 2e 63 3d 62 29 2c 61   where t1.c=b),a
14740 29 3d 20 2d 74 31 2e 62 20 61 6e 64 20 6e 6f 74  )= -t1.b and not
14750 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
14760 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62   from t1 where b
14770 20 62 65 74 77 65 65 6e 20 65 20 61 6e 64 20 62   between e and b
14780 29 20 61 6e 64 20 61 3c 3d 20 2d 31 37 20 6f 72  ) and a<= -17 or
14790 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
147a0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
147b0 37 3c 3d 66 29 29 20 6f 72 20 74 31 2e 61 3e 3d  7<=f)) or t1.a>=
147c0 74 31 2e 63 29 2c 31 33 29 2a 7e 31 33 2a 74 31  t1.c),13)*~13*t1
147d0 2e 63 2a 31 33 20 6f 72 20 74 31 2e 64 3e 31 33  .c*13 or t1.d>13
147e0 20 61 6e 64 20 31 31 3e 3d 74 31 2e 64 20 61 6e   and 11>=t1.d an
147f0 64 20 31 31 20 6e 6f 74 20 62 65 74 77 65 65 6e  d 11 not between
14800 20 63 20 61 6e 64 20 63 20 61 6e 64 20 74 31 2e   c and c and t1.
14810 66 3e 3d 31 37 20 61 6e 64 20 28 64 29 3d 66 29  f>=17 and (d)=f)
14820 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72  }.} {}.do_test r
14830 61 6e 64 65 78 70 72 2d 32 2e 31 31 33 20 7b 0a  andexpr-2.113 {.
14840 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
14850 54 20 63 61 73 65 20 77 68 65 6e 20 63 6f 61 6c  T case when coal
14860 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
14870 28 31 33 29 20 66 72 6f 6d 20 74 31 20 77 68 65  (13) from t1 whe
14880 72 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  re coalesce((sel
14890 65 63 74 20 6d 61 78 28 63 29 20 66 72 6f 6d 20  ect max(c) from 
148a0 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63  t1 where coalesc
148b0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 37  e((select max(17
148c0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
148d0 31 31 20 69 6e 20 28 73 65 6c 65 63 74 20 7e 64  11 in (select ~d
148e0 20 7c 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e   | case when t1.
148f0 61 3e 2b 31 39 20 74 68 65 6e 20 31 31 20 77 68  a>+19 then 11 wh
14900 65 6e 20 74 31 2e 64 20 6e 6f 74 20 69 6e 20 28  en t1.d not in (
14910 20 2d 65 2c 65 2c 63 29 20 6f 72 20 31 33 3c 74   -e,e,c) or 13<t
14920 31 2e 63 20 74 68 65 6e 20 74 31 2e 62 20 65 6c  1.c then t1.b el
14930 73 65 20 64 20 65 6e 64 2d 74 31 2e 64 20 66 72  se d end-t1.d fr
14940 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
14950 63 74 20 65 20 66 72 6f 6d 20 74 31 29 29 2c 74  ct e from t1)),t
14960 31 2e 62 29 20 69 6e 20 28 73 65 6c 65 63 74 20  1.b) in (select 
14970 65 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  e from t1 union 
14980 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31  select c from t1
14990 29 29 2c 64 29 3c 3e 64 20 6f 72 20 74 31 2e 65  )),d)<>d or t1.e
149a0 3c 3e 62 29 2c 74 31 2e 62 29 2a 31 33 3c 3d 66  <>b),t1.b)*13<=f
149b0 20 74 68 65 6e 20 20 2d 74 31 2e 65 20 77 68 65   then  -t1.e whe
149c0 6e 20 31 39 20 62 65 74 77 65 65 6e 20 20 2d 74  n 19 between  -t
149d0 31 2e 66 20 61 6e 64 20 74 31 2e 61 20 74 68 65  1.f and t1.a the
149e0 6e 20 20 2d 74 31 2e 62 20 65 6c 73 65 20 74 31  n  -t1.b else t1
149f0 2e 66 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57  .f end FROM t1 W
14a00 48 45 52 45 20 4e 4f 54 20 28 65 78 69 73 74 73  HERE NOT (exists
14a10 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
14a20 31 20 77 68 65 72 65 20 74 31 2e 66 20 62 65 74  1 where t1.f bet
14a30 77 65 65 6e 20 61 20 61 6e 64 20 63 6f 61 6c 65  ween a and coale
14a40 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
14a50 74 31 2e 66 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.f) from t1 wh
14a60 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
14a70 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
14a80 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  e coalesce((sele
14a90 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20 77 68  ct 19 from t1 wh
14aa0 65 72 65 20 74 31 2e 63 3d 62 29 2c 61 29 3d 20  ere t1.c=b),a)= 
14ab0 2d 74 31 2e 62 20 61 6e 64 20 6e 6f 74 20 65 78  -t1.b and not ex
14ac0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
14ad0 6f 6d 20 74 31 20 77 68 65 72 65 20 62 20 62 65  om t1 where b be
14ae0 74 77 65 65 6e 20 65 20 61 6e 64 20 62 29 20 61  tween e and b) a
14af0 6e 64 20 61 3c 3d 20 2d 31 37 20 6f 72 20 65 78  nd a<= -17 or ex
14b00 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
14b10 6f 6d 20 74 31 20 77 68 65 72 65 20 31 37 3c 3d  om t1 where 17<=
14b20 66 29 29 20 6f 72 20 74 31 2e 61 3e 3d 74 31 2e  f)) or t1.a>=t1.
14b30 63 29 2c 31 33 29 2a 7e 31 33 2a 74 31 2e 63 2a  c),13)*~13*t1.c*
14b40 31 33 20 6f 72 20 74 31 2e 64 3e 31 33 20 61 6e  13 or t1.d>13 an
14b50 64 20 31 31 3e 3d 74 31 2e 64 20 61 6e 64 20 31  d 11>=t1.d and 1
14b60 31 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 20  1 not between c 
14b70 61 6e 64 20 63 20 61 6e 64 20 74 31 2e 66 3e 3d  and c and t1.f>=
14b80 31 37 20 61 6e 64 20 28 64 29 3d 66 29 29 7d 0a  17 and (d)=f))}.
14b90 7d 20 7b 2d 35 30 30 7d 0a 64 6f 5f 74 65 73 74  } {-500}.do_test
14ba0 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 31 34 20   randexpr-2.114 
14bb0 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
14bc0 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 63 6f  ECT case when co
14bd0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
14be0 61 78 28 31 33 29 20 66 72 6f 6d 20 74 31 20 77  ax(13) from t1 w
14bf0 68 65 72 65 20 63 6f 61 6c 65 73 63 65 28 28 73  here coalesce((s
14c00 65 6c 65 63 74 20 6d 61 78 28 63 29 20 66 72 6f  elect max(c) fro
14c10 6d 20 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65  m t1 where coale
14c20 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
14c30 31 37 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  17) from t1 wher
14c40 65 20 31 31 20 69 6e 20 28 73 65 6c 65 63 74 20  e 11 in (select 
14c50 7e 64 20 26 20 63 61 73 65 20 77 68 65 6e 20 74  ~d & case when t
14c60 31 2e 61 3e 2b 31 39 20 74 68 65 6e 20 31 31 20  1.a>+19 then 11 
14c70 77 68 65 6e 20 74 31 2e 64 20 6e 6f 74 20 69 6e  when t1.d not in
14c80 20 28 20 2d 65 2c 65 2c 63 29 20 6f 72 20 31 33   ( -e,e,c) or 13
14c90 3c 74 31 2e 63 20 74 68 65 6e 20 74 31 2e 62 20  <t1.c then t1.b 
14ca0 65 6c 73 65 20 64 20 65 6e 64 2d 74 31 2e 64 20  else d end-t1.d 
14cb0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
14cc0 6c 65 63 74 20 65 20 66 72 6f 6d 20 74 31 29 29  lect e from t1))
14cd0 2c 74 31 2e 62 29 20 69 6e 20 28 73 65 6c 65 63  ,t1.b) in (selec
14ce0 74 20 65 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  t e from t1 unio
14cf0 6e 20 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20  n select c from 
14d00 74 31 29 29 2c 64 29 3c 3e 64 20 6f 72 20 74 31  t1)),d)<>d or t1
14d10 2e 65 3c 3e 62 29 2c 74 31 2e 62 29 2a 31 33 3c  .e<>b),t1.b)*13<
14d20 3d 66 20 74 68 65 6e 20 20 2d 74 31 2e 65 20 77  =f then  -t1.e w
14d30 68 65 6e 20 31 39 20 62 65 74 77 65 65 6e 20 20  hen 19 between  
14d40 2d 74 31 2e 66 20 61 6e 64 20 74 31 2e 61 20 74  -t1.f and t1.a t
14d50 68 65 6e 20 20 2d 74 31 2e 62 20 65 6c 73 65 20  hen  -t1.b else 
14d60 74 31 2e 66 20 65 6e 64 20 46 52 4f 4d 20 74 31  t1.f end FROM t1
14d70 20 57 48 45 52 45 20 4e 4f 54 20 28 65 78 69 73   WHERE NOT (exis
14d80 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
14d90 20 74 31 20 77 68 65 72 65 20 74 31 2e 66 20 62   t1 where t1.f b
14da0 65 74 77 65 65 6e 20 61 20 61 6e 64 20 63 6f 61  etween a and coa
14db0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
14dc0 78 28 74 31 2e 66 29 20 66 72 6f 6d 20 74 31 20  x(t1.f) from t1 
14dd0 77 68 65 72 65 20 65 78 69 73 74 73 28 73 65 6c  where exists(sel
14de0 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
14df0 65 72 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ere coalesce((se
14e00 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20  lect 19 from t1 
14e10 77 68 65 72 65 20 74 31 2e 63 3d 62 29 2c 61 29  where t1.c=b),a)
14e20 3d 20 2d 74 31 2e 62 20 61 6e 64 20 6e 6f 74 20  = -t1.b and not 
14e30 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
14e40 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62 20  from t1 where b 
14e50 62 65 74 77 65 65 6e 20 65 20 61 6e 64 20 62 29  between e and b)
14e60 20 61 6e 64 20 61 3c 3d 20 2d 31 37 20 6f 72 20   and a<= -17 or 
14e70 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
14e80 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 37  from t1 where 17
14e90 3c 3d 66 29 29 20 6f 72 20 74 31 2e 61 3e 3d 74  <=f)) or t1.a>=t
14ea0 31 2e 63 29 2c 31 33 29 2a 7e 31 33 2a 74 31 2e  1.c),13)*~13*t1.
14eb0 63 2a 31 33 20 6f 72 20 74 31 2e 64 3e 31 33 20  c*13 or t1.d>13 
14ec0 61 6e 64 20 31 31 3e 3d 74 31 2e 64 20 61 6e 64  and 11>=t1.d and
14ed0 20 31 31 20 6e 6f 74 20 62 65 74 77 65 65 6e 20   11 not between 
14ee0 63 20 61 6e 64 20 63 20 61 6e 64 20 74 31 2e 66  c and c and t1.f
14ef0 3e 3d 31 37 20 61 6e 64 20 28 64 29 3d 66 29 29  >=17 and (d)=f))
14f00 7d 0a 7d 20 7b 2d 35 30 30 7d 0a 64 6f 5f 74 65  }.} {-500}.do_te
14f10 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 31  st randexpr-2.11
14f20 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  5 {.  db eval {S
14f30 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20  ELECT case when 
14f40 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
14f50 20 2b 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20   +case when not 
14f60 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
14f70 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 39  from t1 where 19
14f80 2a 74 31 2e 65 3c 20 2d 7e 31 31 2a 61 20 6f 72  *t1.e< -~11*a or
14f90 20 74 31 2e 62 3e 3d 74 31 2e 63 20 61 6e 64 20   t1.b>=t1.c and 
14fa0 74 31 2e 61 3c 3e 65 29 20 74 68 65 6e 20 63 6f  t1.a<>e) then co
14fb0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
14fc0 61 78 28 31 33 29 20 66 72 6f 6d 20 74 31 20 77  ax(13) from t1 w
14fd0 68 65 72 65 20 31 31 3e 31 31 29 2c 20 2d 28 65  here 11>11), -(e
14fe0 29 29 20 7c 20 74 31 2e 61 20 77 68 65 6e 20 28  )) | t1.a when (
14ff0 74 31 2e 64 29 20 69 6e 20 28 73 65 6c 65 63 74  t1.d) in (select
15000 20 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e   f from t1 union
15010 20 73 65 6c 65 63 74 20 62 20 66 72 6f 6d 20 74   select b from t
15020 31 29 20 74 68 65 6e 20 61 20 65 6c 73 65 20 65  1) then a else e
15030 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 77 68 65   end from t1 whe
15040 72 65 20 74 31 2e 66 3c 3e 20 2d 74 31 2e 64 29  re t1.f<> -t1.d)
15050 2c 74 31 2e 62 29 20 6e 6f 74 20 69 6e 20 28 64  ,t1.b) not in (d
15060 2c 74 31 2e 64 2c 74 31 2e 63 29 20 74 68 65 6e  ,t1.d,t1.c) then
15070 20 31 39 20 77 68 65 6e 20 28 74 31 2e 62 3c 3e   19 when (t1.b<>
15080 74 31 2e 65 20 6f 72 20 20 2d 74 31 2e 62 3e 3d  t1.e or  -t1.b>=
15090 74 31 2e 62 29 20 74 68 65 6e 20 28 66 29 20 65  t1.b) then (f) e
150a0 6c 73 65 20 64 20 65 6e 64 20 46 52 4f 4d 20 74  lse d end FROM t
150b0 31 20 57 48 45 52 45 20 74 31 2e 65 3d 61 20 61  1 WHERE t1.e=a a
150c0 6e 64 20 62 3e 3d 28 61 62 73 28 63 61 73 65 20  nd b>=(abs(case 
150d0 77 68 65 6e 20 31 39 20 6e 6f 74 20 62 65 74 77  when 19 not betw
150e0 65 65 6e 20 7e 2b 31 37 20 61 6e 64 20 2b 63 61  een ~+17 and +ca
150f0 73 65 20 77 68 65 6e 20 28 28 62 2b 65 2d 66 3d  se when ((b+e-f=
15100 74 31 2e 64 20 6f 72 20 62 20 6e 6f 74 20 69 6e  t1.d or b not in
15110 20 28 74 31 2e 61 2c 74 31 2e 66 2c 74 31 2e 62   (t1.a,t1.f,t1.b
15120 29 20 6f 72 20 74 31 2e 61 20 6e 6f 74 20 62 65  ) or t1.a not be
15130 74 77 65 65 6e 20 31 39 20 61 6e 64 20 65 20 6f  tween 19 and e o
15140 72 20 62 3e 3d 28 74 31 2e 64 29 20 6f 72 20 74  r b>=(t1.d) or t
15150 31 2e 62 20 6e 6f 74 20 69 6e 20 28 64 2c 74 31  1.b not in (d,t1
15160 2e 61 2c 74 31 2e 62 29 29 29 20 74 68 65 6e 20  .a,t1.b))) then 
15170 65 2d 66 20 65 6c 73 65 20 74 31 2e 65 2a 74 31  e-f else t1.e*t1
15180 2e 66 20 65 6e 64 20 7c 20 66 20 74 68 65 6e 20  .f end | f then 
15190 64 20 65 6c 73 65 20 20 2d 64 20 65 6e 64 29 2f  d else  -d end)/
151a0 61 62 73 28 31 31 29 29 7d 0a 7d 20 7b 7d 0a 64  abs(11))}.} {}.d
151b0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
151c0 32 2e 31 31 36 20 7b 0a 20 20 64 62 20 65 76 61  2.116 {.  db eva
151d0 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
151e0 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65  hen coalesce((se
151f0 6c 65 63 74 20 2b 63 61 73 65 20 77 68 65 6e 20  lect +case when 
15200 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
15210 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
15220 65 20 31 39 2a 74 31 2e 65 3c 20 2d 7e 31 31 2a  e 19*t1.e< -~11*
15230 61 20 6f 72 20 74 31 2e 62 3e 3d 74 31 2e 63 20  a or t1.b>=t1.c 
15240 61 6e 64 20 74 31 2e 61 3c 3e 65 29 20 74 68 65  and t1.a<>e) the
15250 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  n coalesce((sele
15260 63 74 20 6d 61 78 28 31 33 29 20 66 72 6f 6d 20  ct max(13) from 
15270 74 31 20 77 68 65 72 65 20 31 31 3e 31 31 29 2c  t1 where 11>11),
15280 20 2d 28 65 29 29 20 7c 20 74 31 2e 61 20 77 68   -(e)) | t1.a wh
15290 65 6e 20 28 74 31 2e 64 29 20 69 6e 20 28 73 65  en (t1.d) in (se
152a0 6c 65 63 74 20 66 20 66 72 6f 6d 20 74 31 20 75  lect f from t1 u
152b0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 62 20 66 72  nion select b fr
152c0 6f 6d 20 74 31 29 20 74 68 65 6e 20 61 20 65 6c  om t1) then a el
152d0 73 65 20 65 20 65 6e 64 20 66 72 6f 6d 20 74 31  se e end from t1
152e0 20 77 68 65 72 65 20 74 31 2e 66 3c 3e 20 2d 74   where t1.f<> -t
152f0 31 2e 64 29 2c 74 31 2e 62 29 20 6e 6f 74 20 69  1.d),t1.b) not i
15300 6e 20 28 64 2c 74 31 2e 64 2c 74 31 2e 63 29 20  n (d,t1.d,t1.c) 
15310 74 68 65 6e 20 31 39 20 77 68 65 6e 20 28 74 31  then 19 when (t1
15320 2e 62 3c 3e 74 31 2e 65 20 6f 72 20 20 2d 74 31  .b<>t1.e or  -t1
15330 2e 62 3e 3d 74 31 2e 62 29 20 74 68 65 6e 20 28  .b>=t1.b) then (
15340 66 29 20 65 6c 73 65 20 64 20 65 6e 64 20 46 52  f) else d end FR
15350 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
15360 28 74 31 2e 65 3d 61 20 61 6e 64 20 62 3e 3d 28  (t1.e=a and b>=(
15370 61 62 73 28 63 61 73 65 20 77 68 65 6e 20 31 39  abs(case when 19
15380 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 7e 2b 31   not between ~+1
15390 37 20 61 6e 64 20 2b 63 61 73 65 20 77 68 65 6e  7 and +case when
153a0 20 28 28 62 2b 65 2d 66 3d 74 31 2e 64 20 6f 72   ((b+e-f=t1.d or
153b0 20 62 20 6e 6f 74 20 69 6e 20 28 74 31 2e 61 2c   b not in (t1.a,
153c0 74 31 2e 66 2c 74 31 2e 62 29 20 6f 72 20 74 31  t1.f,t1.b) or t1
153d0 2e 61 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31  .a not between 1
153e0 39 20 61 6e 64 20 65 20 6f 72 20 62 3e 3d 28 74  9 and e or b>=(t
153f0 31 2e 64 29 20 6f 72 20 74 31 2e 62 20 6e 6f 74  1.d) or t1.b not
15400 20 69 6e 20 28 64 2c 74 31 2e 61 2c 74 31 2e 62   in (d,t1.a,t1.b
15410 29 29 29 20 74 68 65 6e 20 65 2d 66 20 65 6c 73  ))) then e-f els
15420 65 20 74 31 2e 65 2a 74 31 2e 66 20 65 6e 64 20  e t1.e*t1.f end 
15430 7c 20 66 20 74 68 65 6e 20 64 20 65 6c 73 65 20  | f then d else 
15440 20 2d 64 20 65 6e 64 29 2f 61 62 73 28 31 31 29   -d end)/abs(11)
15450 29 29 7d 0a 7d 20 7b 31 39 7d 0a 64 6f 5f 74 65  ))}.} {19}.do_te
15460 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 31  st randexpr-2.11
15470 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  7 {.  db eval {S
15480 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20  ELECT case when 
15490 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
154a0 20 2b 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20   +case when not 
154b0 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
154c0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 39  from t1 where 19
154d0 2a 74 31 2e 65 3c 20 2d 7e 31 31 2a 61 20 6f 72  *t1.e< -~11*a or
154e0 20 74 31 2e 62 3e 3d 74 31 2e 63 20 61 6e 64 20   t1.b>=t1.c and 
154f0 74 31 2e 61 3c 3e 65 29 20 74 68 65 6e 20 63 6f  t1.a<>e) then co
15500 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
15510 61 78 28 31 33 29 20 66 72 6f 6d 20 74 31 20 77  ax(13) from t1 w
15520 68 65 72 65 20 31 31 3e 31 31 29 2c 20 2d 28 65  here 11>11), -(e
15530 29 29 20 26 20 74 31 2e 61 20 77 68 65 6e 20 28  )) & t1.a when (
15540 74 31 2e 64 29 20 69 6e 20 28 73 65 6c 65 63 74  t1.d) in (select
15550 20 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e   f from t1 union
15560 20 73 65 6c 65 63 74 20 62 20 66 72 6f 6d 20 74   select b from t
15570 31 29 20 74 68 65 6e 20 61 20 65 6c 73 65 20 65  1) then a else e
15580 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 77 68 65   end from t1 whe
15590 72 65 20 74 31 2e 66 3c 3e 20 2d 74 31 2e 64 29  re t1.f<> -t1.d)
155a0 2c 74 31 2e 62 29 20 6e 6f 74 20 69 6e 20 28 64  ,t1.b) not in (d
155b0 2c 74 31 2e 64 2c 74 31 2e 63 29 20 74 68 65 6e  ,t1.d,t1.c) then
155c0 20 31 39 20 77 68 65 6e 20 28 74 31 2e 62 3c 3e   19 when (t1.b<>
155d0 74 31 2e 65 20 6f 72 20 20 2d 74 31 2e 62 3e 3d  t1.e or  -t1.b>=
155e0 74 31 2e 62 29 20 74 68 65 6e 20 28 66 29 20 65  t1.b) then (f) e
155f0 6c 73 65 20 64 20 65 6e 64 20 46 52 4f 4d 20 74  lse d end FROM t
15600 31 20 57 48 45 52 45 20 4e 4f 54 20 28 74 31 2e  1 WHERE NOT (t1.
15610 65 3d 61 20 61 6e 64 20 62 3e 3d 28 61 62 73 28  e=a and b>=(abs(
15620 63 61 73 65 20 77 68 65 6e 20 31 39 20 6e 6f 74  case when 19 not
15630 20 62 65 74 77 65 65 6e 20 7e 2b 31 37 20 61 6e   between ~+17 an
15640 64 20 2b 63 61 73 65 20 77 68 65 6e 20 28 28 62  d +case when ((b
15650 2b 65 2d 66 3d 74 31 2e 64 20 6f 72 20 62 20 6e  +e-f=t1.d or b n
15660 6f 74 20 69 6e 20 28 74 31 2e 61 2c 74 31 2e 66  ot in (t1.a,t1.f
15670 2c 74 31 2e 62 29 20 6f 72 20 74 31 2e 61 20 6e  ,t1.b) or t1.a n
15680 6f 74 20 62 65 74 77 65 65 6e 20 31 39 20 61 6e  ot between 19 an
15690 64 20 65 20 6f 72 20 62 3e 3d 28 74 31 2e 64 29  d e or b>=(t1.d)
156a0 20 6f 72 20 74 31 2e 62 20 6e 6f 74 20 69 6e 20   or t1.b not in 
156b0 28 64 2c 74 31 2e 61 2c 74 31 2e 62 29 29 29 20  (d,t1.a,t1.b))) 
156c0 74 68 65 6e 20 65 2d 66 20 65 6c 73 65 20 74 31  then e-f else t1
156d0 2e 65 2a 74 31 2e 66 20 65 6e 64 20 7c 20 66 20  .e*t1.f end | f 
156e0 74 68 65 6e 20 64 20 65 6c 73 65 20 20 2d 64 20  then d else  -d 
156f0 65 6e 64 29 2f 61 62 73 28 31 31 29 29 29 7d 0a  end)/abs(11)))}.
15700 7d 20 7b 31 39 7d 0a 64 6f 5f 74 65 73 74 20 72  } {19}.do_test r
15710 61 6e 64 65 78 70 72 2d 32 2e 31 31 38 20 7b 0a  andexpr-2.118 {.
15720 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
15730 54 20 28 73 65 6c 65 63 74 20 28 63 61 73 74 28  T (select (cast(
15740 61 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65  avg(b) AS intege
15750 72 29 20 7c 20 63 6f 75 6e 74 28 64 69 73 74 69  r) | count(disti
15760 6e 63 74 20 63 61 73 65 20 77 68 65 6e 20 63 6f  nct case when co
15770 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 31  alesce((select 1
15780 33 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  3 from t1 where 
15790 28 2b 28 61 62 73 28 65 29 2f 61 62 73 28 74 31  (+(abs(e)/abs(t1
157a0 2e 62 29 29 29 20 69 6e 20 28 20 2d 62 2c 20 2d  .b))) in ( -b, -
157b0 28 61 29 2c 31 33 29 29 2c 74 31 2e 65 29 3e 3d  (a),13)),t1.e)>=
157c0 62 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20 20  b then 11 else  
157d0 2d 20 2d 31 39 20 65 6e 64 2d 31 37 2b 31 39 29  - -19 end-17+19)
157e0 20 7c 20 61 62 73 28 7e 63 61 73 65 20 63 6f 75   | abs(~case cou
157f0 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 62  nt(distinct t1.b
15800 29 20 77 68 65 6e 20 2b 6d 69 6e 28 65 29 20 74  ) when +min(e) t
15810 68 65 6e 20 2b 61 62 73 28 7e 20 2d 20 2d 63 6f  hen +abs(~ - -co
15820 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31 31 29  unt(distinct 11)
15830 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
15840 74 31 2e 62 29 29 2d 63 6f 75 6e 74 28 64 69 73  t1.b))-count(dis
15850 74 69 6e 63 74 20 61 29 20 65 6c 73 65 20 20 2d  tinct a) else  -
15860 6d 69 6e 28 62 29 20 65 6e 64 29 2a 63 6f 75 6e  min(b) end)*coun
15870 74 28 64 69 73 74 69 6e 63 74 20 31 39 29 2d 63  t(distinct 19)-c
15880 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
15890 2e 62 29 29 20 66 72 6f 6d 20 74 31 29 20 46 52  .b)) from t1) FR
158a0 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31 3c 3d  OM t1 WHERE 11<=
158b0 74 31 2e 61 2d 74 31 2e 66 2d 31 39 2a 74 31 2e  t1.a-t1.f-19*t1.
158c0 62 2b 31 39 2b 63 6f 61 6c 65 73 63 65 28 28 73  b+19+coalesce((s
158d0 65 6c 65 63 74 20 65 20 66 72 6f 6d 20 74 31 20  elect e from t1 
158e0 77 68 65 72 65 20 64 20 6e 6f 74 20 62 65 74 77  where d not betw
158f0 65 65 6e 20 28 73 65 6c 65 63 74 20 63 6f 75 6e  een (select coun
15900 74 28 64 69 73 74 69 6e 63 74 20 63 6f 61 6c 65  t(distinct coale
15910 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 61  sce((select t1.a
15920 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
15930 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
15940 74 31 2e 65 29 20 41 53 20 69 6e 74 65 67 65 72  t1.e) AS integer
15950 29 2d 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  )-+count(distinc
15960 74 20 63 29 2b 6d 61 78 28 28 61 62 73 28 74 31  t c)+max((abs(t1
15970 2e 63 29 2f 61 62 73 28 74 31 2e 66 29 29 2d 61  .c)/abs(t1.f))-a
15980 29 2d 28 63 6f 75 6e 74 28 2a 29 2d 63 61 73 74  )-(count(*)-cast
15990 28 61 76 67 28 28 31 37 29 29 20 41 53 20 69 6e  (avg((17)) AS in
159a0 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31 29  teger)) from t1)
159b0 20 69 6e 20 28 74 31 2e 65 2c 20 2d 65 20 7c 20   in (t1.e, -e | 
159c0 64 2c 62 29 29 2c 63 29 29 20 66 72 6f 6d 20 74  d,b)),c)) from t
159d0 31 29 20 61 6e 64 20 74 31 2e 61 29 2c 74 31 2e  1) and t1.a),t1.
159e0 64 29 2d 74 31 2e 64 7d 0a 7d 20 7b 7d 0a 64 6f  d)-t1.d}.} {}.do
159f0 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
15a00 2e 31 31 39 20 7b 0a 20 20 64 62 20 65 76 61 6c  .119 {.  db eval
15a10 20 7b 53 45 4c 45 43 54 20 28 73 65 6c 65 63 74   {SELECT (select
15a20 20 28 63 61 73 74 28 61 76 67 28 62 29 20 41 53   (cast(avg(b) AS
15a30 20 69 6e 74 65 67 65 72 29 20 7c 20 63 6f 75 6e   integer) | coun
15a40 74 28 64 69 73 74 69 6e 63 74 20 63 61 73 65 20  t(distinct case 
15a50 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73  when coalesce((s
15a60 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31  elect 13 from t1
15a70 20 77 68 65 72 65 20 28 2b 28 61 62 73 28 65 29   where (+(abs(e)
15a80 2f 61 62 73 28 74 31 2e 62 29 29 29 20 69 6e 20  /abs(t1.b))) in 
15a90 28 20 2d 62 2c 20 2d 28 61 29 2c 31 33 29 29 2c  ( -b, -(a),13)),
15aa0 74 31 2e 65 29 3e 3d 62 20 74 68 65 6e 20 31 31  t1.e)>=b then 11
15ab0 20 65 6c 73 65 20 20 2d 20 2d 31 39 20 65 6e 64   else  - -19 end
15ac0 2d 31 37 2b 31 39 29 20 7c 20 61 62 73 28 7e 63  -17+19) | abs(~c
15ad0 61 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ase count(distin
15ae0 63 74 20 74 31 2e 62 29 20 77 68 65 6e 20 2b 6d  ct t1.b) when +m
15af0 69 6e 28 65 29 20 74 68 65 6e 20 2b 61 62 73 28  in(e) then +abs(
15b00 7e 20 2d 20 2d 63 6f 75 6e 74 28 64 69 73 74 69  ~ - -count(disti
15b10 6e 63 74 20 31 31 29 2d 63 6f 75 6e 74 28 64 69  nct 11)-count(di
15b20 73 74 69 6e 63 74 20 74 31 2e 62 29 29 2d 63 6f  stinct t1.b))-co
15b30 75 6e 74 28 64 69 73 74 69 6e 63 74 20 61 29 20  unt(distinct a) 
15b40 65 6c 73 65 20 20 2d 6d 69 6e 28 62 29 20 65 6e  else  -min(b) en
15b50 64 29 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  d)*count(distinc
15b60 74 20 31 39 29 2d 63 6f 75 6e 74 28 64 69 73 74  t 19)-count(dist
15b70 69 6e 63 74 20 74 31 2e 62 29 29 20 66 72 6f 6d  inct t1.b)) from
15b80 20 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45   t1) FROM t1 WHE
15b90 52 45 20 4e 4f 54 20 28 31 31 3c 3d 74 31 2e 61  RE NOT (11<=t1.a
15ba0 2d 74 31 2e 66 2d 31 39 2a 74 31 2e 62 2b 31 39  -t1.f-19*t1.b+19
15bb0 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  +coalesce((selec
15bc0 74 20 65 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t e from t1 wher
15bd0 65 20 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  e d not between 
15be0 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69  (select count(di
15bf0 73 74 69 6e 63 74 20 63 6f 61 6c 65 73 63 65 28  stinct coalesce(
15c00 28 73 65 6c 65 63 74 20 74 31 2e 61 20 66 72 6f  (select t1.a fro
15c10 6d 20 74 31 20 77 68 65 72 65 20 28 73 65 6c 65  m t1 where (sele
15c20 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e 65  ct cast(avg(t1.e
15c30 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d 2b 63  ) AS integer)-+c
15c40 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29  ount(distinct c)
15c50 2b 6d 61 78 28 28 61 62 73 28 74 31 2e 63 29 2f  +max((abs(t1.c)/
15c60 61 62 73 28 74 31 2e 66 29 29 2d 61 29 2d 28 63  abs(t1.f))-a)-(c
15c70 6f 75 6e 74 28 2a 29 2d 63 61 73 74 28 61 76 67  ount(*)-cast(avg
15c80 28 28 31 37 29 29 20 41 53 20 69 6e 74 65 67 65  ((17)) AS intege
15c90 72 29 29 20 66 72 6f 6d 20 74 31 29 20 69 6e 20  r)) from t1) in 
15ca0 28 74 31 2e 65 2c 20 2d 65 20 7c 20 64 2c 62 29  (t1.e, -e | d,b)
15cb0 29 2c 63 29 29 20 66 72 6f 6d 20 74 31 29 20 61  ),c)) from t1) a
15cc0 6e 64 20 74 31 2e 61 29 2c 74 31 2e 64 29 2d 74  nd t1.a),t1.d)-t
15cd0 31 2e 64 29 7d 0a 7d 20 7b 32 30 37 7d 0a 64 6f  1.d)}.} {207}.do
15ce0 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
15cf0 2e 31 32 30 20 7b 0a 20 20 64 62 20 65 76 61 6c  .120 {.  db eval
15d00 20 7b 53 45 4c 45 43 54 20 28 73 65 6c 65 63 74   {SELECT (select
15d10 20 28 63 61 73 74 28 61 76 67 28 62 29 20 41 53   (cast(avg(b) AS
15d20 20 69 6e 74 65 67 65 72 29 20 26 20 63 6f 75 6e   integer) & coun
15d30 74 28 64 69 73 74 69 6e 63 74 20 63 61 73 65 20  t(distinct case 
15d40 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73  when coalesce((s
15d50 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31  elect 13 from t1
15d60 20 77 68 65 72 65 20 28 2b 28 61 62 73 28 65 29   where (+(abs(e)
15d70 2f 61 62 73 28 74 31 2e 62 29 29 29 20 69 6e 20  /abs(t1.b))) in 
15d80 28 20 2d 62 2c 20 2d 28 61 29 2c 31 33 29 29 2c  ( -b, -(a),13)),
15d90 74 31 2e 65 29 3e 3d 62 20 74 68 65 6e 20 31 31  t1.e)>=b then 11
15da0 20 65 6c 73 65 20 20 2d 20 2d 31 39 20 65 6e 64   else  - -19 end
15db0 2d 31 37 2b 31 39 29 20 26 20 61 62 73 28 7e 63  -17+19) & abs(~c
15dc0 61 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ase count(distin
15dd0 63 74 20 74 31 2e 62 29 20 77 68 65 6e 20 2b 6d  ct t1.b) when +m
15de0 69 6e 28 65 29 20 74 68 65 6e 20 2b 61 62 73 28  in(e) then +abs(
15df0 7e 20 2d 20 2d 63 6f 75 6e 74 28 64 69 73 74 69  ~ - -count(disti
15e00 6e 63 74 20 31 31 29 2d 63 6f 75 6e 74 28 64 69  nct 11)-count(di
15e10 73 74 69 6e 63 74 20 74 31 2e 62 29 29 2d 63 6f  stinct t1.b))-co
15e20 75 6e 74 28 64 69 73 74 69 6e 63 74 20 61 29 20  unt(distinct a) 
15e30 65 6c 73 65 20 20 2d 6d 69 6e 28 62 29 20 65 6e  else  -min(b) en
15e40 64 29 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  d)*count(distinc
15e50 74 20 31 39 29 2d 63 6f 75 6e 74 28 64 69 73 74  t 19)-count(dist
15e60 69 6e 63 74 20 74 31 2e 62 29 29 20 66 72 6f 6d  inct t1.b)) from
15e70 20 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45   t1) FROM t1 WHE
15e80 52 45 20 4e 4f 54 20 28 31 31 3c 3d 74 31 2e 61  RE NOT (11<=t1.a
15e90 2d 74 31 2e 66 2d 31 39 2a 74 31 2e 62 2b 31 39  -t1.f-19*t1.b+19
15ea0 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  +coalesce((selec
15eb0 74 20 65 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t e from t1 wher
15ec0 65 20 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  e d not between 
15ed0 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69  (select count(di
15ee0 73 74 69 6e 63 74 20 63 6f 61 6c 65 73 63 65 28  stinct coalesce(
15ef0 28 73 65 6c 65 63 74 20 74 31 2e 61 20 66 72 6f  (select t1.a fro
15f00 6d 20 74 31 20 77 68 65 72 65 20 28 73 65 6c 65  m t1 where (sele
15f10 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e 65  ct cast(avg(t1.e
15f20 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d 2b 63  ) AS integer)-+c
15f30 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29  ount(distinct c)
15f40 2b 6d 61 78 28 28 61 62 73 28 74 31 2e 63 29 2f  +max((abs(t1.c)/
15f50 61 62 73 28 74 31 2e 66 29 29 2d 61 29 2d 28 63  abs(t1.f))-a)-(c
15f60 6f 75 6e 74 28 2a 29 2d 63 61 73 74 28 61 76 67  ount(*)-cast(avg
15f70 28 28 31 37 29 29 20 41 53 20 69 6e 74 65 67 65  ((17)) AS intege
15f80 72 29 29 20 66 72 6f 6d 20 74 31 29 20 69 6e 20  r)) from t1) in 
15f90 28 74 31 2e 65 2c 20 2d 65 20 7c 20 64 2c 62 29  (t1.e, -e | d,b)
15fa0 29 2c 63 29 29 20 66 72 6f 6d 20 74 31 29 20 61  ),c)) from t1) a
15fb0 6e 64 20 74 31 2e 61 29 2c 74 31 2e 64 29 2d 74  nd t1.a),t1.d)-t
15fc0 31 2e 64 29 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  1.d)}.} {0}.do_t
15fd0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
15fe0 32 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  21 {.  db eval {
15ff0 53 45 4c 45 43 54 20 31 31 2b 61 2a 63 61 73 65  SELECT 11+a*case
16000 20 74 31 2e 61 2a 74 31 2e 65 20 77 68 65 6e 20   t1.a*t1.e when 
16010 31 37 20 74 68 65 6e 20 63 6f 61 6c 65 73 63 65  17 then coalesce
16020 28 28 73 65 6c 65 63 74 20 2b 74 31 2e 62 20 66  ((select +t1.b f
16030 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
16040 63 3c 3e 74 31 2e 63 20 61 6e 64 20 65 20 62 65  c<>t1.c and e be
16050 74 77 65 65 6e 20 2b 28 61 62 73 28 63 61 73 65  tween +(abs(case
16060 20 62 2b 66 2a 63 6f 61 6c 65 73 63 65 28 28 73   b+f*coalesce((s
16070 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 20  elect c from t1 
16080 77 68 65 72 65 20 74 31 2e 64 3e 31 37 29 2c 20  where t1.d>17), 
16090 2d 74 31 2e 63 29 2b 28 31 39 29 20 77 68 65 6e  -t1.c)+(19) when
160a0 20 62 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73   b then t1.f els
160b0 65 20 74 31 2e 64 20 65 6e 64 29 2f 61 62 73 28  e t1.d end)/abs(
160c0 74 31 2e 64 29 29 20 61 6e 64 20 74 31 2e 63 20  t1.d)) and t1.c 
160d0 61 6e 64 20 74 31 2e 61 3e 62 20 6f 72 20 74 31  and t1.a>b or t1
160e0 2e 66 3c 74 31 2e 61 29 2c 74 31 2e 63 29 2a 31  .f<t1.a),t1.c)*1
160f0 37 20 65 6c 73 65 20 20 2d 74 31 2e 64 20 65 6e  7 else  -t1.d en
16100 64 2a 74 31 2e 62 20 46 52 4f 4d 20 74 31 20 57  d*t1.b FROM t1 W
16110 48 45 52 45 20 20 2d 31 39 2d 7e 74 31 2e 62 3c  HERE  -19-~t1.b<
16120 28 73 65 6c 65 63 74 20 7e 63 6f 75 6e 74 28 2a  (select ~count(*
16130 29 20 66 72 6f 6d 20 74 31 29 2b 28 61 62 73 28  ) from t1)+(abs(
16140 2b 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  ++coalesce((sele
16150 63 74 20 6d 61 78 28 74 31 2e 61 2d 63 29 20 66  ct max(t1.a-c) f
16160 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
16170 61 3d 31 31 29 2c 31 31 29 29 2f 61 62 73 28 63  a=11),11))/abs(c
16180 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 6e 6f 74  ase when not not
16190 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
161a0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
161b0 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
161c0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
161d0 61 3e 63 20 6f 72 20 74 31 2e 64 20 7c 20 31 31  a>c or t1.d | 11
161e0 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 65   in (select t1.e
161f0 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
16200 65 6c 65 63 74 20 64 20 66 72 6f 6d 20 74 31 29  elect d from t1)
16210 29 29 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20  )) then 17 else 
16220 28 61 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73  (abs(coalesce((s
16230 65 6c 65 63 74 20 6d 61 78 28 66 29 20 66 72 6f  elect max(f) fro
16240 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 28  m t1 where not (
16250 63 29 3c 74 31 2e 61 29 2c 74 31 2e 62 29 29 2f  c)<t1.a),t1.b))/
16260 61 62 73 28 64 29 29 2b 66 20 65 6e 64 2d 74 31  abs(d))+f end-t1
16270 2e 63 29 29 2d 74 31 2e 65 2d 74 31 2e 65 7d 0a  .c))-t1.e-t1.e}.
16280 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  } {}.do_test ran
16290 64 65 78 70 72 2d 32 2e 31 32 32 20 7b 0a 20 20  dexpr-2.122 {.  
162a0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
162b0 31 31 2b 61 2a 63 61 73 65 20 74 31 2e 61 2a 74  11+a*case t1.a*t
162c0 31 2e 65 20 77 68 65 6e 20 31 37 20 74 68 65 6e  1.e when 17 then
162d0 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
162e0 74 20 2b 74 31 2e 62 20 66 72 6f 6d 20 74 31 20  t +t1.b from t1 
162f0 77 68 65 72 65 20 74 31 2e 63 3c 3e 74 31 2e 63  where t1.c<>t1.c
16300 20 61 6e 64 20 65 20 62 65 74 77 65 65 6e 20 2b   and e between +
16310 28 61 62 73 28 63 61 73 65 20 62 2b 66 2a 63 6f  (abs(case b+f*co
16320 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63  alesce((select c
16330 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
16340 31 2e 64 3e 31 37 29 2c 20 2d 74 31 2e 63 29 2b  1.d>17), -t1.c)+
16350 28 31 39 29 20 77 68 65 6e 20 62 20 74 68 65 6e  (19) when b then
16360 20 74 31 2e 66 20 65 6c 73 65 20 74 31 2e 64 20   t1.f else t1.d 
16370 65 6e 64 29 2f 61 62 73 28 74 31 2e 64 29 29 20  end)/abs(t1.d)) 
16380 61 6e 64 20 74 31 2e 63 20 61 6e 64 20 74 31 2e  and t1.c and t1.
16390 61 3e 62 20 6f 72 20 74 31 2e 66 3c 74 31 2e 61  a>b or t1.f<t1.a
163a0 29 2c 74 31 2e 63 29 2a 31 37 20 65 6c 73 65 20  ),t1.c)*17 else 
163b0 20 2d 74 31 2e 64 20 65 6e 64 2a 74 31 2e 62 20   -t1.d end*t1.b 
163c0 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
163d0 54 20 28 20 2d 31 39 2d 7e 74 31 2e 62 3c 28 73  T ( -19-~t1.b<(s
163e0 65 6c 65 63 74 20 7e 63 6f 75 6e 74 28 2a 29 20  elect ~count(*) 
163f0 66 72 6f 6d 20 74 31 29 2b 28 61 62 73 28 2b 2b  from t1)+(abs(++
16400 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
16410 20 6d 61 78 28 74 31 2e 61 2d 63 29 20 66 72 6f   max(t1.a-c) fro
16420 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 61 3d  m t1 where t1.a=
16430 31 31 29 2c 31 31 29 29 2f 61 62 73 28 63 61 73  11),11))/abs(cas
16440 65 20 77 68 65 6e 20 6e 6f 74 20 6e 6f 74 20 65  e when not not e
16450 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
16460 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69  rom t1 where exi
16470 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
16480 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 61 3e  m t1 where t1.a>
16490 63 20 6f 72 20 74 31 2e 64 20 7c 20 31 31 20 69  c or t1.d | 11 i
164a0 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 65 20 66  n (select t1.e f
164b0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
164c0 65 63 74 20 64 20 66 72 6f 6d 20 74 31 29 29 29  ect d from t1)))
164d0 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20 28 61   then 17 else (a
164e0 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  bs(coalesce((sel
164f0 65 63 74 20 6d 61 78 28 66 29 20 66 72 6f 6d 20  ect max(f) from 
16500 74 31 20 77 68 65 72 65 20 6e 6f 74 20 28 63 29  t1 where not (c)
16510 3c 74 31 2e 61 29 2c 74 31 2e 62 29 29 2f 61 62  <t1.a),t1.b))/ab
16520 73 28 64 29 29 2b 66 20 65 6e 64 2d 74 31 2e 63  s(d))+f end-t1.c
16530 29 29 2d 74 31 2e 65 2d 74 31 2e 65 29 7d 0a 7d  ))-t1.e-t1.e)}.}
16540 20 7b 2d 37 39 39 39 39 38 39 7d 0a 64 6f 5f 74   {-7999989}.do_t
16550 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
16560 32 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  23 {.  db eval {
16570 53 45 4c 45 43 54 20 28 65 29 2b 63 61 73 65 20  SELECT (e)+case 
16580 77 68 65 6e 20 74 31 2e 61 3e 65 20 74 68 65 6e  when t1.a>e then
16590 20 74 31 2e 66 20 65 6c 73 65 20 74 31 2e 62 2b   t1.f else t1.b+
165a0 63 61 73 65 20 77 68 65 6e 20 62 20 62 65 74 77  case when b betw
165b0 65 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65  een coalesce((se
165c0 6c 65 63 74 20 6d 61 78 28 74 31 2e 64 2d 7e 28  lect max(t1.d-~(
165d0 61 62 73 28 61 29 2f 61 62 73 28 63 29 29 2b 74  abs(a)/abs(c))+t
165e0 31 2e 63 29 20 66 72 6f 6d 20 74 31 20 77 68 65  1.c) from t1 whe
165f0 72 65 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20  re f in (select 
16600 20 2d 6d 69 6e 28 74 31 2e 66 29 2d 2b 63 61 73   -min(t1.f)-+cas
16610 74 28 61 76 67 28 65 29 20 41 53 20 69 6e 74 65  t(avg(e) AS inte
16620 67 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  ger) from t1 uni
16630 6f 6e 20 73 65 6c 65 63 74 20 20 2d 28 63 61 73  on select  -(cas
16640 74 28 61 76 67 28 31 33 29 20 41 53 20 69 6e 74  t(avg(13) AS int
16650 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31 29 20  eger)) from t1) 
16660 61 6e 64 20 66 3c 3d 61 20 61 6e 64 20 6e 6f 74  and f<=a and not
16670 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
16680 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66   from t1 where f
16690 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e   not between t1.
166a0 64 20 61 6e 64 20 74 31 2e 64 20 6f 72 20 28 66  d and t1.d or (f
166b0 29 3c 3d 61 29 20 61 6e 64 20 28 74 31 2e 66 29  )<=a) and (t1.f)
166c0 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20   between 11 and 
166d0 64 29 2c 74 31 2e 61 29 20 61 6e 64 20 74 31 2e  d),t1.a) and t1.
166e0 66 20 74 68 65 6e 20 65 20 77 68 65 6e 20 28 31  f then e when (1
166f0 31 3c 64 29 20 74 68 65 6e 20 31 31 20 65 6c 73  1<d) then 11 els
16700 65 20 64 20 65 6e 64 20 65 6e 64 20 7c 20 74 31  e d end end | t1
16710 2e 65 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  .e FROM t1 WHERE
16720 20 28 61 62 73 28 31 33 29 2f 61 62 73 28 61 29   (abs(13)/abs(a)
16730 29 20 69 6e 20 28 2b 63 6f 61 6c 65 73 63 65 28  ) in (+coalesce(
16740 28 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20  (select 13 from 
16750 74 31 20 77 68 65 72 65 20 28 74 31 2e 65 20 69  t1 where (t1.e i
16760 6e 20 28 73 65 6c 65 63 74 20 63 61 73 74 28 61  n (select cast(a
16770 76 67 28 74 31 2e 63 29 20 41 53 20 69 6e 74 65  vg(t1.c) AS inte
16780 67 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  ger) from t1 uni
16790 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 65 20 2b  on select case +
167a0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
167b0 31 2e 63 29 20 77 68 65 6e 20 2b 63 6f 75 6e 74  1.c) when +count
167c0 28 2a 29 20 74 68 65 6e 20 28 20 2d 6d 69 6e 28  (*) then ( -min(
167d0 20 2d 62 29 29 20 65 6c 73 65 20 63 6f 75 6e 74   -b)) else count
167e0 28 2a 29 20 65 6e 64 2a 6d 61 78 28 65 29 20 66  (*) end*max(e) f
167f0 72 6f 6d 20 74 31 29 29 20 61 6e 64 20 2b 63 61  rom t1)) and +ca
16800 73 65 20 77 68 65 6e 20 63 20 69 6e 20 28 73 65  se when c in (se
16810 6c 65 63 74 20 28 31 31 29 20 66 72 6f 6d 20 74  lect (11) from t
16820 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20  1 union select  
16830 2d 74 31 2e 63 20 66 72 6f 6d 20 74 31 29 20 74  -t1.c from t1) t
16840 68 65 6e 20 31 37 20 77 68 65 6e 20 31 37 20 69  hen 17 when 17 i
16850 6e 20 28 73 65 6c 65 63 74 20 31 37 20 66 72 6f  n (select 17 fro
16860 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
16870 74 20 64 20 66 72 6f 6d 20 74 31 29 20 74 68 65  t d from t1) the
16880 6e 20 63 20 65 6c 73 65 20 74 31 2e 61 20 65 6e  n c else t1.a en
16890 64 3e 31 33 29 2c 63 61 73 65 20 77 68 65 6e 20  d>13),case when 
168a0 63 3c 3d 31 31 20 74 68 65 6e 20 74 31 2e 65 20  c<=11 then t1.e 
168b0 77 68 65 6e 20 74 31 2e 65 3c 3d 62 20 74 68 65  when t1.e<=b the
168c0 6e 20 74 31 2e 64 20 65 6c 73 65 20 74 31 2e 65  n t1.d else t1.e
168d0 20 65 6e 64 29 2d 31 31 2c 31 31 2c 31 37 29 7d   end)-11,11,17)}
168e0 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61  .} {}.do_test ra
168f0 6e 64 65 78 70 72 2d 32 2e 31 32 34 20 7b 0a 20  ndexpr-2.124 {. 
16900 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
16910 20 28 65 29 2b 63 61 73 65 20 77 68 65 6e 20 74   (e)+case when t
16920 31 2e 61 3e 65 20 74 68 65 6e 20 74 31 2e 66 20  1.a>e then t1.f 
16930 65 6c 73 65 20 74 31 2e 62 2b 63 61 73 65 20 77  else t1.b+case w
16940 68 65 6e 20 62 20 62 65 74 77 65 65 6e 20 63 6f  hen b between co
16950 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
16960 61 78 28 74 31 2e 64 2d 7e 28 61 62 73 28 61 29  ax(t1.d-~(abs(a)
16970 2f 61 62 73 28 63 29 29 2b 74 31 2e 63 29 20 66  /abs(c))+t1.c) f
16980 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66 20 69  rom t1 where f i
16990 6e 20 28 73 65 6c 65 63 74 20 20 2d 6d 69 6e 28  n (select  -min(
169a0 74 31 2e 66 29 2d 2b 63 61 73 74 28 61 76 67 28  t1.f)-+cast(avg(
169b0 65 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  e) AS integer) f
169c0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
169d0 65 63 74 20 20 2d 28 63 61 73 74 28 61 76 67 28  ect  -(cast(avg(
169e0 31 33 29 20 41 53 20 69 6e 74 65 67 65 72 29 29  13) AS integer))
169f0 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 66 3c   from t1) and f<
16a00 3d 61 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74  =a and not exist
16a10 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
16a20 74 31 20 77 68 65 72 65 20 66 20 6e 6f 74 20 62  t1 where f not b
16a30 65 74 77 65 65 6e 20 74 31 2e 64 20 61 6e 64 20  etween t1.d and 
16a40 74 31 2e 64 20 6f 72 20 28 66 29 3c 3d 61 29 20  t1.d or (f)<=a) 
16a50 61 6e 64 20 28 74 31 2e 66 29 20 62 65 74 77 65  and (t1.f) betwe
16a60 65 6e 20 31 31 20 61 6e 64 20 64 29 2c 74 31 2e  en 11 and d),t1.
16a70 61 29 20 61 6e 64 20 74 31 2e 66 20 74 68 65 6e  a) and t1.f then
16a80 20 65 20 77 68 65 6e 20 28 31 31 3c 64 29 20 74   e when (11<d) t
16a90 68 65 6e 20 31 31 20 65 6c 73 65 20 64 20 65 6e  hen 11 else d en
16aa0 64 20 65 6e 64 20 7c 20 74 31 2e 65 20 46 52 4f  d end | t1.e FRO
16ab0 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
16ac0 28 61 62 73 28 31 33 29 2f 61 62 73 28 61 29 29  (abs(13)/abs(a))
16ad0 20 69 6e 20 28 2b 63 6f 61 6c 65 73 63 65 28 28   in (+coalesce((
16ae0 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74  select 13 from t
16af0 31 20 77 68 65 72 65 20 28 74 31 2e 65 20 69 6e  1 where (t1.e in
16b00 20 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76   (select cast(av
16b10 67 28 74 31 2e 63 29 20 41 53 20 69 6e 74 65 67  g(t1.c) AS integ
16b20 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  er) from t1 unio
16b30 6e 20 73 65 6c 65 63 74 20 63 61 73 65 20 2b 63  n select case +c
16b40 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
16b50 2e 63 29 20 77 68 65 6e 20 2b 63 6f 75 6e 74 28  .c) when +count(
16b60 2a 29 20 74 68 65 6e 20 28 20 2d 6d 69 6e 28 20  *) then ( -min( 
16b70 2d 62 29 29 20 65 6c 73 65 20 63 6f 75 6e 74 28  -b)) else count(
16b80 2a 29 20 65 6e 64 2a 6d 61 78 28 65 29 20 66 72  *) end*max(e) fr
16b90 6f 6d 20 74 31 29 29 20 61 6e 64 20 2b 63 61 73  om t1)) and +cas
16ba0 65 20 77 68 65 6e 20 63 20 69 6e 20 28 73 65 6c  e when c in (sel
16bb0 65 63 74 20 28 31 31 29 20 66 72 6f 6d 20 74 31  ect (11) from t1
16bc0 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20 2d   union select  -
16bd0 74 31 2e 63 20 66 72 6f 6d 20 74 31 29 20 74 68  t1.c from t1) th
16be0 65 6e 20 31 37 20 77 68 65 6e 20 31 37 20 69 6e  en 17 when 17 in
16bf0 20 28 73 65 6c 65 63 74 20 31 37 20 66 72 6f 6d   (select 17 from
16c00 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
16c10 20 64 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e   d from t1) then
16c20 20 63 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64   c else t1.a end
16c30 3e 31 33 29 2c 63 61 73 65 20 77 68 65 6e 20 63  >13),case when c
16c40 3c 3d 31 31 20 74 68 65 6e 20 74 31 2e 65 20 77  <=11 then t1.e w
16c50 68 65 6e 20 74 31 2e 65 3c 3d 62 20 74 68 65 6e  hen t1.e<=b then
16c60 20 74 31 2e 64 20 65 6c 73 65 20 74 31 2e 65 20   t1.d else t1.e 
16c70 65 6e 64 29 2d 31 31 2c 31 31 2c 31 37 29 29 7d  end)-11,11,17))}
16c80 0a 7d 20 7b 31 35 32 34 7d 0a 64 6f 5f 74 65 73  .} {1524}.do_tes
16c90 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 32 35  t randexpr-2.125
16ca0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
16cb0 4c 45 43 54 20 28 65 29 2b 63 61 73 65 20 77 68  LECT (e)+case wh
16cc0 65 6e 20 74 31 2e 61 3e 65 20 74 68 65 6e 20 74  en t1.a>e then t
16cd0 31 2e 66 20 65 6c 73 65 20 74 31 2e 62 2b 63 61  1.f else t1.b+ca
16ce0 73 65 20 77 68 65 6e 20 62 20 62 65 74 77 65 65  se when b betwee
16cf0 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  n coalesce((sele
16d00 63 74 20 6d 61 78 28 74 31 2e 64 2d 7e 28 61 62  ct max(t1.d-~(ab
16d10 73 28 61 29 2f 61 62 73 28 63 29 29 2b 74 31 2e  s(a)/abs(c))+t1.
16d20 63 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  c) from t1 where
16d30 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d   f in (select  -
16d40 6d 69 6e 28 74 31 2e 66 29 2d 2b 63 61 73 74 28  min(t1.f)-+cast(
16d50 61 76 67 28 65 29 20 41 53 20 69 6e 74 65 67 65  avg(e) AS intege
16d60 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  r) from t1 union
16d70 20 73 65 6c 65 63 74 20 20 2d 28 63 61 73 74 28   select  -(cast(
16d80 61 76 67 28 31 33 29 20 41 53 20 69 6e 74 65 67  avg(13) AS integ
16d90 65 72 29 29 20 66 72 6f 6d 20 74 31 29 20 61 6e  er)) from t1) an
16da0 64 20 66 3c 3d 61 20 61 6e 64 20 6e 6f 74 20 65  d f<=a and not e
16db0 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
16dc0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66 20 6e  rom t1 where f n
16dd0 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e 64 20  ot between t1.d 
16de0 61 6e 64 20 74 31 2e 64 20 6f 72 20 28 66 29 3c  and t1.d or (f)<
16df0 3d 61 29 20 61 6e 64 20 28 74 31 2e 66 29 20 62  =a) and (t1.f) b
16e00 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20 64 29  etween 11 and d)
16e10 2c 74 31 2e 61 29 20 61 6e 64 20 74 31 2e 66 20  ,t1.a) and t1.f 
16e20 74 68 65 6e 20 65 20 77 68 65 6e 20 28 31 31 3c  then e when (11<
16e30 64 29 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20  d) then 11 else 
16e40 64 20 65 6e 64 20 65 6e 64 20 26 20 74 31 2e 65  d end end & t1.e
16e50 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
16e60 4f 54 20 28 28 61 62 73 28 31 33 29 2f 61 62 73  OT ((abs(13)/abs
16e70 28 61 29 29 20 69 6e 20 28 2b 63 6f 61 6c 65 73  (a)) in (+coales
16e80 63 65 28 28 73 65 6c 65 63 74 20 31 33 20 66 72  ce((select 13 fr
16e90 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e  om t1 where (t1.
16ea0 65 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73  e in (select cas
16eb0 74 28 61 76 67 28 74 31 2e 63 29 20 41 53 20 69  t(avg(t1.c) AS i
16ec0 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 20  nteger) from t1 
16ed0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73  union select cas
16ee0 65 20 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  e +count(distinc
16ef0 74 20 74 31 2e 63 29 20 77 68 65 6e 20 2b 63 6f  t t1.c) when +co
16f00 75 6e 74 28 2a 29 20 74 68 65 6e 20 28 20 2d 6d  unt(*) then ( -m
16f10 69 6e 28 20 2d 62 29 29 20 65 6c 73 65 20 63 6f  in( -b)) else co
16f20 75 6e 74 28 2a 29 20 65 6e 64 2a 6d 61 78 28 65  unt(*) end*max(e
16f30 29 20 66 72 6f 6d 20 74 31 29 29 20 61 6e 64 20  ) from t1)) and 
16f40 2b 63 61 73 65 20 77 68 65 6e 20 63 20 69 6e 20  +case when c in 
16f50 28 73 65 6c 65 63 74 20 28 31 31 29 20 66 72 6f  (select (11) fro
16f60 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
16f70 74 20 20 2d 74 31 2e 63 20 66 72 6f 6d 20 74 31  t  -t1.c from t1
16f80 29 20 74 68 65 6e 20 31 37 20 77 68 65 6e 20 31  ) then 17 when 1
16f90 37 20 69 6e 20 28 73 65 6c 65 63 74 20 31 37 20  7 in (select 17 
16fa0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
16fb0 6c 65 63 74 20 64 20 66 72 6f 6d 20 74 31 29 20  lect d from t1) 
16fc0 74 68 65 6e 20 63 20 65 6c 73 65 20 74 31 2e 61  then c else t1.a
16fd0 20 65 6e 64 3e 31 33 29 2c 63 61 73 65 20 77 68   end>13),case wh
16fe0 65 6e 20 63 3c 3d 31 31 20 74 68 65 6e 20 74 31  en c<=11 then t1
16ff0 2e 65 20 77 68 65 6e 20 74 31 2e 65 3c 3d 62 20  .e when t1.e<=b 
17000 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20 74  then t1.d else t
17010 31 2e 65 20 65 6e 64 29 2d 31 31 2c 31 31 2c 31  1.e end)-11,11,1
17020 37 29 29 7d 0a 7d 20 7b 31 37 36 7d 0a 64 6f 5f  7))}.} {176}.do_
17030 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
17040 31 32 36 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  126 {.  db eval 
17050 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65  {SELECT coalesce
17060 28 28 73 65 6c 65 63 74 20 6d 61 78 28 7e 64 2d  ((select max(~d-
17070 74 31 2e 66 2b 62 2d 31 33 29 20 66 72 6f 6d 20  t1.f+b-13) from 
17080 74 31 20 77 68 65 72 65 20 74 31 2e 63 20 6e 6f  t1 where t1.c no
17090 74 20 62 65 74 77 65 65 6e 20 63 61 73 65 20 77  t between case w
170a0 68 65 6e 20 2b 66 3d 74 31 2e 62 20 74 68 65 6e  hen +f=t1.b then
170b0 20 31 33 20 77 68 65 6e 20 7e 66 20 6e 6f 74 20   13 when ~f not 
170c0 69 6e 20 28 7e 74 31 2e 61 2c 63 6f 61 6c 65 73  in (~t1.a,coales
170d0 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74  ce((select max(t
170e0 31 2e 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65  1.b) from t1 whe
170f0 72 65 20 62 20 62 65 74 77 65 65 6e 20 63 2d 74  re b between c-t
17100 31 2e 63 2b 65 20 61 6e 64 20 28 74 31 2e 62 29  1.c+e and (t1.b)
17110 29 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  ),coalesce((sele
17120 63 74 20 6d 61 78 28 74 31 2e 64 29 20 66 72 6f  ct max(t1.d) fro
17130 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65  m t1 where not e
17140 20 69 6e 20 28 73 65 6c 65 63 74 20 31 37 20 66   in (select 17 f
17150 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
17160 65 63 74 20 74 31 2e 63 2b 65 20 7c 20 61 20 66  ect t1.c+e | a f
17170 72 6f 6d 20 74 31 29 29 2c 62 29 29 2c 74 31 2e  rom t1)),b)),t1.
17180 65 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73  e) then t1.b els
17190 65 20 61 20 65 6e 64 20 61 6e 64 20 63 29 2c 74  e a end and c),t
171a0 31 2e 61 29 20 46 52 4f 4d 20 74 31 20 57 48 45  1.a) FROM t1 WHE
171b0 52 45 20 28 73 65 6c 65 63 74 20 28 2b 2b 20 2d  RE (select (++ -
171c0 63 6f 75 6e 74 28 2a 29 20 7c 20 63 61 73 74 28  count(*) | cast(
171d0 61 76 67 28 74 31 2e 62 29 20 41 53 20 69 6e 74  avg(t1.b) AS int
171e0 65 67 65 72 29 20 7c 20 2b 2b 28 6d 61 78 28 74  eger) | ++(max(t
171f0 31 2e 64 29 29 2b 63 6f 75 6e 74 28 2a 29 2b 6d  1.d))+count(*)+m
17200 61 78 28 74 31 2e 62 29 2d 63 6f 75 6e 74 28 64  ax(t1.b)-count(d
17210 69 73 74 69 6e 63 74 20 74 31 2e 65 29 2d 2b 61  istinct t1.e)-+a
17220 62 73 28 20 2d 2b 7e 6d 61 78 28 28 61 62 73 28  bs( -+~max((abs(
17230 74 31 2e 63 29 2f 61 62 73 28 28 73 65 6c 65 63  t1.c)/abs((selec
17240 74 20 6d 69 6e 28 61 29 20 66 72 6f 6d 20 74 31  t min(a) from t1
17250 29 29 29 29 29 2b 63 6f 75 6e 74 28 64 69 73 74  )))))+count(dist
17260 69 6e 63 74 20 74 31 2e 61 2d 74 31 2e 62 29 29  inct t1.a-t1.b))
17270 20 66 72 6f 6d 20 74 31 29 20 62 65 74 77 65 65   from t1) betwee
17280 6e 20 65 20 61 6e 64 20 63 7d 0a 7d 20 7b 7d 0a  n e and c}.} {}.
17290 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
172a0 2d 32 2e 31 32 37 20 7b 0a 20 20 64 62 20 65 76  -2.127 {.  db ev
172b0 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65  al {SELECT coale
172c0 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
172d0 7e 64 2d 74 31 2e 66 2b 62 2d 31 33 29 20 66 72  ~d-t1.f+b-13) fr
172e0 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 63  om t1 where t1.c
172f0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 61 73   not between cas
17300 65 20 77 68 65 6e 20 2b 66 3d 74 31 2e 62 20 74  e when +f=t1.b t
17310 68 65 6e 20 31 33 20 77 68 65 6e 20 7e 66 20 6e  hen 13 when ~f n
17320 6f 74 20 69 6e 20 28 7e 74 31 2e 61 2c 63 6f 61  ot in (~t1.a,coa
17330 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
17340 78 28 74 31 2e 62 29 20 66 72 6f 6d 20 74 31 20  x(t1.b) from t1 
17350 77 68 65 72 65 20 62 20 62 65 74 77 65 65 6e 20  where b between 
17360 63 2d 74 31 2e 63 2b 65 20 61 6e 64 20 28 74 31  c-t1.c+e and (t1
17370 2e 62 29 29 2c 63 6f 61 6c 65 73 63 65 28 28 73  .b)),coalesce((s
17380 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 64 29 20  elect max(t1.d) 
17390 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f  from t1 where no
173a0 74 20 65 20 69 6e 20 28 73 65 6c 65 63 74 20 31  t e in (select 1
173b0 37 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  7 from t1 union 
173c0 73 65 6c 65 63 74 20 74 31 2e 63 2b 65 20 7c 20  select t1.c+e | 
173d0 61 20 66 72 6f 6d 20 74 31 29 29 2c 62 29 29 2c  a from t1)),b)),
173e0 74 31 2e 65 29 20 74 68 65 6e 20 74 31 2e 62 20  t1.e) then t1.b 
173f0 65 6c 73 65 20 61 20 65 6e 64 20 61 6e 64 20 63  else a end and c
17400 29 2c 74 31 2e 61 29 20 46 52 4f 4d 20 74 31 20  ),t1.a) FROM t1 
17410 57 48 45 52 45 20 4e 4f 54 20 28 28 73 65 6c 65  WHERE NOT ((sele
17420 63 74 20 28 2b 2b 20 2d 63 6f 75 6e 74 28 2a 29  ct (++ -count(*)
17430 20 7c 20 63 61 73 74 28 61 76 67 28 74 31 2e 62   | cast(avg(t1.b
17440 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 7c 20  ) AS integer) | 
17450 2b 2b 28 6d 61 78 28 74 31 2e 64 29 29 2b 63 6f  ++(max(t1.d))+co
17460 75 6e 74 28 2a 29 2b 6d 61 78 28 74 31 2e 62 29  unt(*)+max(t1.b)
17470 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
17480 74 31 2e 65 29 2d 2b 61 62 73 28 20 2d 2b 7e 6d  t1.e)-+abs( -+~m
17490 61 78 28 28 61 62 73 28 74 31 2e 63 29 2f 61 62  ax((abs(t1.c)/ab
174a0 73 28 28 73 65 6c 65 63 74 20 6d 69 6e 28 61 29  s((select min(a)
174b0 20 66 72 6f 6d 20 74 31 29 29 29 29 29 2b 63 6f   from t1)))))+co
174c0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
174d0 61 2d 74 31 2e 62 29 29 20 66 72 6f 6d 20 74 31  a-t1.b)) from t1
174e0 29 20 62 65 74 77 65 65 6e 20 65 20 61 6e 64 20  ) between e and 
174f0 63 29 7d 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f 74  c)}.} {100}.do_t
17500 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
17510 32 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  28 {.  db eval {
17520 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28  SELECT coalesce(
17530 28 73 65 6c 65 63 74 20 6d 61 78 28 7e 64 2d 74  (select max(~d-t
17540 31 2e 66 2b 62 2d 31 33 29 20 66 72 6f 6d 20 74  1.f+b-13) from t
17550 31 20 77 68 65 72 65 20 74 31 2e 63 20 6e 6f 74  1 where t1.c not
17560 20 62 65 74 77 65 65 6e 20 63 61 73 65 20 77 68   between case wh
17570 65 6e 20 2b 66 3d 74 31 2e 62 20 74 68 65 6e 20  en +f=t1.b then 
17580 31 33 20 77 68 65 6e 20 7e 66 20 6e 6f 74 20 69  13 when ~f not i
17590 6e 20 28 7e 74 31 2e 61 2c 63 6f 61 6c 65 73 63  n (~t1.a,coalesc
175a0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31  e((select max(t1
175b0 2e 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .b) from t1 wher
175c0 65 20 62 20 62 65 74 77 65 65 6e 20 63 2d 74 31  e b between c-t1
175d0 2e 63 2b 65 20 61 6e 64 20 28 74 31 2e 62 29 29  .c+e and (t1.b))
175e0 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  ,coalesce((selec
175f0 74 20 6d 61 78 28 74 31 2e 64 29 20 66 72 6f 6d  t max(t1.d) from
17600 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 20   t1 where not e 
17610 69 6e 20 28 73 65 6c 65 63 74 20 31 37 20 66 72  in (select 17 fr
17620 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
17630 63 74 20 74 31 2e 63 2b 65 20 26 20 61 20 66 72  ct t1.c+e & a fr
17640 6f 6d 20 74 31 29 29 2c 62 29 29 2c 74 31 2e 65  om t1)),b)),t1.e
17650 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  ) then t1.b else
17660 20 61 20 65 6e 64 20 61 6e 64 20 63 29 2c 74 31   a end and c),t1
17670 2e 61 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  .a) FROM t1 WHER
17680 45 20 4e 4f 54 20 28 28 73 65 6c 65 63 74 20 28  E NOT ((select (
17690 2b 2b 20 2d 63 6f 75 6e 74 28 2a 29 20 7c 20 63  ++ -count(*) | c
176a0 61 73 74 28 61 76 67 28 74 31 2e 62 29 20 41 53  ast(avg(t1.b) AS
176b0 20 69 6e 74 65 67 65 72 29 20 7c 20 2b 2b 28 6d   integer) | ++(m
176c0 61 78 28 74 31 2e 64 29 29 2b 63 6f 75 6e 74 28  ax(t1.d))+count(
176d0 2a 29 2b 6d 61 78 28 74 31 2e 62 29 2d 63 6f 75  *)+max(t1.b)-cou
176e0 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 65  nt(distinct t1.e
176f0 29 2d 2b 61 62 73 28 20 2d 2b 7e 6d 61 78 28 28  )-+abs( -+~max((
17700 61 62 73 28 74 31 2e 63 29 2f 61 62 73 28 28 73  abs(t1.c)/abs((s
17710 65 6c 65 63 74 20 6d 69 6e 28 61 29 20 66 72 6f  elect min(a) fro
17720 6d 20 74 31 29 29 29 29 29 2b 63 6f 75 6e 74 28  m t1)))))+count(
17730 64 69 73 74 69 6e 63 74 20 74 31 2e 61 2d 74 31  distinct t1.a-t1
17740 2e 62 29 29 20 66 72 6f 6d 20 74 31 29 20 62 65  .b)) from t1) be
17750 74 77 65 65 6e 20 65 20 61 6e 64 20 63 29 7d 0a  tween e and c)}.
17760 7d 20 7b 31 30 30 7d 0a 64 6f 5f 74 65 73 74 20  } {100}.do_test 
17770 72 61 6e 64 65 78 70 72 2d 32 2e 31 32 39 20 7b  randexpr-2.129 {
17780 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
17790 43 54 20 61 2b 63 61 73 65 20 77 68 65 6e 20 65  CT a+case when e
177a0 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
177b0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 39 3e  rom t1 where 19>
177c0 3d 65 29 20 74 68 65 6e 20 62 2a 62 2b 63 6f 61  =e) then b*b+coa
177d0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
177e0 78 28 20 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  x( -coalesce((se
177f0 6c 65 63 74 20 6d 61 78 28 31 39 20 7c 20 74 31  lect max(19 | t1
17800 2e 65 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .e) from t1 wher
17810 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
17820 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
17830 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
17840 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 2b 63  from t1 where +c
17850 61 73 65 20 74 31 2e 61 20 77 68 65 6e 20 61 20  ase t1.a when a 
17860 74 68 65 6e 20 61 20 65 6c 73 65 20 28 31 37 29  then a else (17)
17870 20 65 6e 64 2a 31 39 20 69 6e 20 28 73 65 6c 65   end*19 in (sele
17880 63 74 20 6d 61 78 28 64 29 20 66 72 6f 6d 20 74  ct max(d) from t
17890 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d  1 union select m
178a0 61 78 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31  ax(t1.a) from t1
178b0 29 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74 73  ) and not exists
178c0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
178d0 31 20 77 68 65 72 65 20 74 31 2e 61 3c 3d 31 31  1 where t1.a<=11
178e0 29 29 20 6f 72 20 31 31 3e 28 31 39 29 29 29 2c  )) or 11>(19))),
178f0 31 31 2a 20 2d 61 29 29 20 66 72 6f 6d 20 74 31  11* -a)) from t1
17900 20 77 68 65 72 65 20 74 31 2e 65 3c 3e 31 37 29   where t1.e<>17)
17910 2c 66 29 20 65 6c 73 65 20 74 31 2e 65 20 65 6e  ,f) else t1.e en
17920 64 2d 31 31 20 46 52 4f 4d 20 74 31 20 57 48 45  d-11 FROM t1 WHE
17930 52 45 20 28 74 31 2e 61 3e 3d 28 61 62 73 28 63  RE (t1.a>=(abs(c
17940 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
17950 2b 31 33 2a 74 31 2e 61 20 7c 20 63 20 66 72 6f  +13*t1.a | c fro
17960 6d 20 74 31 20 77 68 65 72 65 20 31 31 2b 63 61  m t1 where 11+ca
17970 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28 73  se when exists(s
17980 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
17990 77 68 65 72 65 20 63 61 73 65 20 77 68 65 6e 20  where case when 
179a0 2b 74 31 2e 64 20 69 6e 20 28 73 65 6c 65 63 74  +t1.d in (select
179b0 20 63 61 73 65 20 2b 63 6f 75 6e 74 28 2a 29 20   case +count(*) 
179c0 77 68 65 6e 20 63 6f 75 6e 74 28 64 69 73 74 69  when count(disti
179d0 6e 63 74 20 31 31 29 20 74 68 65 6e 20 63 6f 75  nct 11) then cou
179e0 6e 74 28 2a 29 20 65 6c 73 65 20 28 6d 69 6e 28  nt(*) else (min(
179f0 31 31 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  11)) end from t1
17a00 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61   union select ma
17a10 78 28 20 2d 31 31 29 20 66 72 6f 6d 20 74 31 29  x( -11) from t1)
17a20 20 6f 72 20 31 31 3c 3e 20 2d 74 31 2e 66 20 74   or 11<> -t1.f t
17a30 68 65 6e 20 74 31 2e 64 20 77 68 65 6e 20 74 31  hen t1.d when t1
17a40 2e 62 20 69 6e 20 28 31 33 2c 61 2c 64 29 20 74  .b in (13,a,d) t
17a50 68 65 6e 20 63 20 65 6c 73 65 20 63 20 65 6e 64  hen c else c end
17a60 2b 74 31 2e 62 3d 62 29 20 74 68 65 6e 20 65 2d  +t1.b=b) then e-
17a70 63 20 65 6c 73 65 20 28 74 31 2e 64 29 20 65 6e  c else (t1.d) en
17a80 64 3e 74 31 2e 64 29 2c 64 29 29 2f 61 62 73 28  d>t1.d),d))/abs(
17a90 74 31 2e 66 29 29 20 61 6e 64 20 31 31 20 69 6e  t1.f)) and 11 in
17aa0 20 28 73 65 6c 65 63 74 20 20 2d 74 31 2e 61 20   (select  -t1.a 
17ab0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
17ac0 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31 29  lect 13 from t1)
17ad0 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  )}.} {}.do_test 
17ae0 72 61 6e 64 65 78 70 72 2d 32 2e 31 33 30 20 7b  randexpr-2.130 {
17af0 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
17b00 43 54 20 61 2b 63 61 73 65 20 77 68 65 6e 20 65  CT a+case when e
17b10 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
17b20 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 39 3e  rom t1 where 19>
17b30 3d 65 29 20 74 68 65 6e 20 62 2a 62 2b 63 6f 61  =e) then b*b+coa
17b40 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
17b50 78 28 20 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  x( -coalesce((se
17b60 6c 65 63 74 20 6d 61 78 28 31 39 20 7c 20 74 31  lect max(19 | t1
17b70 2e 65 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .e) from t1 wher
17b80 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
17b90 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
17ba0 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
17bb0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 2b 63  from t1 where +c
17bc0 61 73 65 20 74 31 2e 61 20 77 68 65 6e 20 61 20  ase t1.a when a 
17bd0 74 68 65 6e 20 61 20 65 6c 73 65 20 28 31 37 29  then a else (17)
17be0 20 65 6e 64 2a 31 39 20 69 6e 20 28 73 65 6c 65   end*19 in (sele
17bf0 63 74 20 6d 61 78 28 64 29 20 66 72 6f 6d 20 74  ct max(d) from t
17c00 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d  1 union select m
17c10 61 78 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31  ax(t1.a) from t1
17c20 29 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74 73  ) and not exists
17c30 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
17c40 31 20 77 68 65 72 65 20 74 31 2e 61 3c 3d 31 31  1 where t1.a<=11
17c50 29 29 20 6f 72 20 31 31 3e 28 31 39 29 29 29 2c  )) or 11>(19))),
17c60 31 31 2a 20 2d 61 29 29 20 66 72 6f 6d 20 74 31  11* -a)) from t1
17c70 20 77 68 65 72 65 20 74 31 2e 65 3c 3e 31 37 29   where t1.e<>17)
17c80 2c 66 29 20 65 6c 73 65 20 74 31 2e 65 20 65 6e  ,f) else t1.e en
17c90 64 2d 31 31 20 46 52 4f 4d 20 74 31 20 57 48 45  d-11 FROM t1 WHE
17ca0 52 45 20 4e 4f 54 20 28 28 74 31 2e 61 3e 3d 28  RE NOT ((t1.a>=(
17cb0 61 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73 65  abs(coalesce((se
17cc0 6c 65 63 74 20 2b 31 33 2a 74 31 2e 61 20 7c 20  lect +13*t1.a | 
17cd0 63 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  c from t1 where 
17ce0 31 31 2b 63 61 73 65 20 77 68 65 6e 20 65 78 69  11+case when exi
17cf0 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
17d00 6d 20 74 31 20 77 68 65 72 65 20 63 61 73 65 20  m t1 where case 
17d10 77 68 65 6e 20 2b 74 31 2e 64 20 69 6e 20 28 73  when +t1.d in (s
17d20 65 6c 65 63 74 20 63 61 73 65 20 2b 63 6f 75 6e  elect case +coun
17d30 74 28 2a 29 20 77 68 65 6e 20 63 6f 75 6e 74 28  t(*) when count(
17d40 64 69 73 74 69 6e 63 74 20 31 31 29 20 74 68 65  distinct 11) the
17d50 6e 20 63 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20  n count(*) else 
17d60 28 6d 69 6e 28 31 31 29 29 20 65 6e 64 20 66 72  (min(11)) end fr
17d70 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
17d80 63 74 20 6d 61 78 28 20 2d 31 31 29 20 66 72 6f  ct max( -11) fro
17d90 6d 20 74 31 29 20 6f 72 20 31 31 3c 3e 20 2d 74  m t1) or 11<> -t
17da0 31 2e 66 20 74 68 65 6e 20 74 31 2e 64 20 77 68  1.f then t1.d wh
17db0 65 6e 20 74 31 2e 62 20 69 6e 20 28 31 33 2c 61  en t1.b in (13,a
17dc0 2c 64 29 20 74 68 65 6e 20 63 20 65 6c 73 65 20  ,d) then c else 
17dd0 63 20 65 6e 64 2b 74 31 2e 62 3d 62 29 20 74 68  c end+t1.b=b) th
17de0 65 6e 20 65 2d 63 20 65 6c 73 65 20 28 74 31 2e  en e-c else (t1.
17df0 64 29 20 65 6e 64 3e 74 31 2e 64 29 2c 64 29 29  d) end>t1.d),d))
17e00 2f 61 62 73 28 74 31 2e 66 29 29 20 61 6e 64 20  /abs(t1.f)) and 
17e10 31 31 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d  11 in (select  -
17e20 74 31 2e 61 20 66 72 6f 6d 20 74 31 20 75 6e 69  t1.a from t1 uni
17e30 6f 6e 20 73 65 6c 65 63 74 20 31 33 20 66 72 6f  on select 13 fro
17e40 6d 20 74 31 29 29 29 7d 0a 7d 20 7b 35 38 39 7d  m t1)))}.} {589}
17e50 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
17e60 72 2d 32 2e 31 33 31 20 7b 0a 20 20 64 62 20 65  r-2.131 {.  db e
17e70 76 61 6c 20 7b 53 45 4c 45 43 54 20 61 2b 63 61  val {SELECT a+ca
17e80 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28 73  se when exists(s
17e90 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
17ea0 77 68 65 72 65 20 31 39 3e 3d 65 29 20 74 68 65  where 19>=e) the
17eb0 6e 20 62 2a 62 2b 63 6f 61 6c 65 73 63 65 28 28  n b*b+coalesce((
17ec0 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 63 6f 61  select max( -coa
17ed0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
17ee0 78 28 31 39 20 26 20 74 31 2e 65 29 20 66 72 6f  x(19 & t1.e) fro
17ef0 6d 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74  m t1 where exist
17f00 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
17f10 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
17f20 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
17f30 20 77 68 65 72 65 20 2b 63 61 73 65 20 74 31 2e   where +case t1.
17f40 61 20 77 68 65 6e 20 61 20 74 68 65 6e 20 61 20  a when a then a 
17f50 65 6c 73 65 20 28 31 37 29 20 65 6e 64 2a 31 39  else (17) end*19
17f60 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 61 78 28   in (select max(
17f70 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  d) from t1 union
17f80 20 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61   select max(t1.a
17f90 29 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 6e  ) from t1) and n
17fa0 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
17fb0 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
17fc0 20 74 31 2e 61 3c 3d 31 31 29 29 20 6f 72 20 31   t1.a<=11)) or 1
17fd0 31 3e 28 31 39 29 29 29 2c 31 31 2a 20 2d 61 29  1>(19))),11* -a)
17fe0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
17ff0 74 31 2e 65 3c 3e 31 37 29 2c 66 29 20 65 6c 73  t1.e<>17),f) els
18000 65 20 74 31 2e 65 20 65 6e 64 2d 31 31 20 46 52  e t1.e end-11 FR
18010 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
18020 28 28 74 31 2e 61 3e 3d 28 61 62 73 28 63 6f 61  ((t1.a>=(abs(coa
18030 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 2b 31  lesce((select +1
18040 33 2a 74 31 2e 61 20 7c 20 63 20 66 72 6f 6d 20  3*t1.a | c from 
18050 74 31 20 77 68 65 72 65 20 31 31 2b 63 61 73 65  t1 where 11+case
18060 20 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c   when exists(sel
18070 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
18080 65 72 65 20 63 61 73 65 20 77 68 65 6e 20 2b 74  ere case when +t
18090 31 2e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 63  1.d in (select c
180a0 61 73 65 20 2b 63 6f 75 6e 74 28 2a 29 20 77 68  ase +count(*) wh
180b0 65 6e 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  en count(distinc
180c0 74 20 31 31 29 20 74 68 65 6e 20 63 6f 75 6e 74  t 11) then count
180d0 28 2a 29 20 65 6c 73 65 20 28 6d 69 6e 28 31 31  (*) else (min(11
180e0 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75  )) end from t1 u
180f0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78 28  nion select max(
18100 20 2d 31 31 29 20 66 72 6f 6d 20 74 31 29 20 6f   -11) from t1) o
18110 72 20 31 31 3c 3e 20 2d 74 31 2e 66 20 74 68 65  r 11<> -t1.f the
18120 6e 20 74 31 2e 64 20 77 68 65 6e 20 74 31 2e 62  n t1.d when t1.b
18130 20 69 6e 20 28 31 33 2c 61 2c 64 29 20 74 68 65   in (13,a,d) the
18140 6e 20 63 20 65 6c 73 65 20 63 20 65 6e 64 2b 74  n c else c end+t
18150 31 2e 62 3d 62 29 20 74 68 65 6e 20 65 2d 63 20  1.b=b) then e-c 
18160 65 6c 73 65 20 28 74 31 2e 64 29 20 65 6e 64 3e  else (t1.d) end>
18170 74 31 2e 64 29 2c 64 29 29 2f 61 62 73 28 74 31  t1.d),d))/abs(t1
18180 2e 66 29 29 20 61 6e 64 20 31 31 20 69 6e 20 28  .f)) and 11 in (
18190 73 65 6c 65 63 74 20 20 2d 74 31 2e 61 20 66 72  select  -t1.a fr
181a0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
181b0 63 74 20 31 33 20 66 72 6f 6d 20 74 31 29 29 29  ct 13 from t1)))
181c0 7d 0a 7d 20 7b 35 38 39 7d 0a 64 6f 5f 74 65 73  }.} {589}.do_tes
181d0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 33 32  t randexpr-2.132
181e0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
181f0 4c 45 43 54 20 63 61 73 65 20 7e 31 33 20 77 68  LECT case ~13 wh
18200 65 6e 20 74 31 2e 65 20 74 68 65 6e 20 65 20 65  en t1.e then e e
18210 6c 73 65 20 28 73 65 6c 65 63 74 20 63 61 73 65  lse (select case
18220 20 63 61 73 65 20 28 61 62 73 28 63 6f 75 6e 74   case (abs(count
18230 28 2a 29 29 2d 7e 63 6f 75 6e 74 28 2a 29 2b 63  (*))-~count(*)+c
18240 6f 75 6e 74 28 2a 29 20 7c 20 63 6f 75 6e 74 28  ount(*) | count(
18250 2a 29 2d 63 6f 75 6e 74 28 2a 29 2b 6d 61 78 28  *)-count(*)+max(
18260 74 31 2e 62 29 2a 20 2d 28 63 61 73 74 28 61 76  t1.b)* -(cast(av
18270 67 28 31 33 29 20 41 53 20 69 6e 74 65 67 65 72  g(13) AS integer
18280 29 29 20 7c 20 20 2d 28 63 6f 75 6e 74 28 64 69  )) |  -(count(di
18290 73 74 69 6e 63 74 20 74 31 2e 63 29 29 29 20 77  stinct t1.c))) w
182a0 68 65 6e 20 6d 69 6e 28 65 29 20 74 68 65 6e 20  hen min(e) then 
182b0 28 6d 69 6e 28 31 33 29 29 20 65 6c 73 65 20 63  (min(13)) else c
182c0 6f 75 6e 74 28 2a 29 20 65 6e 64 2a 63 6f 75 6e  ount(*) end*coun
182d0 74 28 2a 29 20 77 68 65 6e 20 6d 61 78 28 65 29  t(*) when max(e)
182e0 20 74 68 65 6e 20 63 6f 75 6e 74 28 64 69 73 74   then count(dist
182f0 69 6e 63 74 20 20 2d 64 29 20 65 6c 73 65 20 63  inct  -d) else c
18300 6f 75 6e 74 28 2a 29 20 65 6e 64 20 66 72 6f 6d  ount(*) end from
18310 20 74 31 29 20 65 6e 64 2d 74 31 2e 64 2a 63 61   t1) end-t1.d*ca
18320 73 65 20 28 61 62 73 28 65 20 7c 20 74 31 2e 62  se (abs(e | t1.b
18330 29 2f 61 62 73 28 28 73 65 6c 65 63 74 20 63 61  )/abs((select ca
18340 73 74 28 61 76 67 28 74 31 2e 63 29 20 41 53 20  st(avg(t1.c) AS 
18350 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31  integer) from t1
18360 29 29 29 20 77 68 65 6e 20 28 73 65 6c 65 63 74  ))) when (select
18370 20 63 61 73 74 28 61 76 67 28 61 29 20 41 53 20   cast(avg(a) AS 
18380 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31  integer) from t1
18390 29 20 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65  ) then t1.c else
183a0 20 66 2b 31 33 20 65 6e 64 20 46 52 4f 4d 20 74   f+13 end FROM t
183b0 31 20 57 48 45 52 45 20 6e 6f 74 20 65 78 69 73  1 WHERE not exis
183c0 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
183d0 20 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73   t1 where coales
183e0 63 65 28 28 73 65 6c 65 63 74 20 63 61 73 65 20  ce((select case 
183f0 77 68 65 6e 20 74 31 2e 61 3e 74 31 2e 66 2d 7e  when t1.a>t1.f-~
18400 63 61 73 65 20 77 68 65 6e 20 7e 74 31 2e 64 2b  case when ~t1.d+
18410 63 2b 74 31 2e 66 3e 31 31 20 74 68 65 6e 20 74  c+t1.f>11 then t
18420 31 2e 61 20 77 68 65 6e 20 28 66 20 62 65 74 77  1.a when (f betw
18430 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 74 31 2e  een t1.f and t1.
18440 63 29 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73  c) then t1.f els
18450 65 20 31 33 20 65 6e 64 2a 74 31 2e 61 20 74 68  e 13 end*t1.a th
18460 65 6e 20 74 31 2e 64 20 77 68 65 6e 20 63 3c 74  en t1.d when c<t
18470 31 2e 65 20 6f 72 20 65 3e 31 39 20 74 68 65 6e  1.e or e>19 then
18480 20 63 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64   c else t1.e end
18490 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
184a0 3c 3e 61 20 61 6e 64 20 31 39 3c 3e 74 31 2e 66  <>a and 19<>t1.f
184b0 29 2c 74 31 2e 62 29 2b 74 31 2e 66 2d 74 31 2e  ),t1.b)+t1.f-t1.
184c0 65 3c 64 29 7d 0a 7d 20 7b 2d 32 34 35 31 39 39  e<d)}.} {-245199
184d0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
184e0 70 72 2d 32 2e 31 33 33 20 7b 0a 20 20 64 62 20  pr-2.133 {.  db 
184f0 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73  eval {SELECT cas
18500 65 20 7e 31 33 20 77 68 65 6e 20 74 31 2e 65 20  e ~13 when t1.e 
18510 74 68 65 6e 20 65 20 65 6c 73 65 20 28 73 65 6c  then e else (sel
18520 65 63 74 20 63 61 73 65 20 63 61 73 65 20 28 61  ect case case (a
18530 62 73 28 63 6f 75 6e 74 28 2a 29 29 2d 7e 63 6f  bs(count(*))-~co
18540 75 6e 74 28 2a 29 2b 63 6f 75 6e 74 28 2a 29 20  unt(*)+count(*) 
18550 7c 20 63 6f 75 6e 74 28 2a 29 2d 63 6f 75 6e 74  | count(*)-count
18560 28 2a 29 2b 6d 61 78 28 74 31 2e 62 29 2a 20 2d  (*)+max(t1.b)* -
18570 28 63 61 73 74 28 61 76 67 28 31 33 29 20 41 53  (cast(avg(13) AS
18580 20 69 6e 74 65 67 65 72 29 29 20 7c 20 20 2d 28   integer)) |  -(
18590 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
185a0 31 2e 63 29 29 29 20 77 68 65 6e 20 6d 69 6e 28  1.c))) when min(
185b0 65 29 20 74 68 65 6e 20 28 6d 69 6e 28 31 33 29  e) then (min(13)
185c0 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20  ) else count(*) 
185d0 65 6e 64 2a 63 6f 75 6e 74 28 2a 29 20 77 68 65  end*count(*) whe
185e0 6e 20 6d 61 78 28 65 29 20 74 68 65 6e 20 63 6f  n max(e) then co
185f0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 20 2d 64  unt(distinct  -d
18600 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20  ) else count(*) 
18610 65 6e 64 20 66 72 6f 6d 20 74 31 29 20 65 6e 64  end from t1) end
18620 2d 74 31 2e 64 2a 63 61 73 65 20 28 61 62 73 28  -t1.d*case (abs(
18630 65 20 7c 20 74 31 2e 62 29 2f 61 62 73 28 28 73  e | t1.b)/abs((s
18640 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 74  elect cast(avg(t
18650 31 2e 63 29 20 41 53 20 69 6e 74 65 67 65 72 29  1.c) AS integer)
18660 20 66 72 6f 6d 20 74 31 29 29 29 20 77 68 65 6e   from t1))) when
18670 20 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76   (select cast(av
18680 67 28 61 29 20 41 53 20 69 6e 74 65 67 65 72 29  g(a) AS integer)
18690 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 74   from t1) then t
186a0 31 2e 63 20 65 6c 73 65 20 66 2b 31 33 20 65 6e  1.c else f+13 en
186b0 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
186c0 4e 4f 54 20 28 6e 6f 74 20 65 78 69 73 74 73 28  NOT (not exists(
186d0 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
186e0 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63 65 28   where coalesce(
186f0 28 73 65 6c 65 63 74 20 63 61 73 65 20 77 68 65  (select case whe
18700 6e 20 74 31 2e 61 3e 74 31 2e 66 2d 7e 63 61 73  n t1.a>t1.f-~cas
18710 65 20 77 68 65 6e 20 7e 74 31 2e 64 2b 63 2b 74  e when ~t1.d+c+t
18720 31 2e 66 3e 31 31 20 74 68 65 6e 20 74 31 2e 61  1.f>11 then t1.a
18730 20 77 68 65 6e 20 28 66 20 62 65 74 77 65 65 6e   when (f between
18740 20 74 31 2e 66 20 61 6e 64 20 74 31 2e 63 29 20   t1.f and t1.c) 
18750 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 31  then t1.f else 1
18760 33 20 65 6e 64 2a 74 31 2e 61 20 74 68 65 6e 20  3 end*t1.a then 
18770 74 31 2e 64 20 77 68 65 6e 20 63 3c 74 31 2e 65  t1.d when c<t1.e
18780 20 6f 72 20 65 3e 31 39 20 74 68 65 6e 20 63 20   or e>19 then c 
18790 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 20 66 72  else t1.e end fr
187a0 6f 6d 20 74 31 20 77 68 65 72 65 20 65 3c 3e 61  om t1 where e<>a
187b0 20 61 6e 64 20 31 39 3c 3e 74 31 2e 66 29 2c 74   and 19<>t1.f),t
187c0 31 2e 62 29 2b 74 31 2e 66 2d 74 31 2e 65 3c 64  1.b)+t1.f-t1.e<d
187d0 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  ))}.} {}.do_test
187e0 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 33 34 20   randexpr-2.134 
187f0 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
18800 45 43 54 20 63 61 73 65 20 7e 31 33 20 77 68 65  ECT case ~13 whe
18810 6e 20 74 31 2e 65 20 74 68 65 6e 20 65 20 65 6c  n t1.e then e el
18820 73 65 20 28 73 65 6c 65 63 74 20 63 61 73 65 20  se (select case 
18830 63 61 73 65 20 28 61 62 73 28 63 6f 75 6e 74 28  case (abs(count(
18840 2a 29 29 2d 7e 63 6f 75 6e 74 28 2a 29 2b 63 6f  *))-~count(*)+co
18850 75 6e 74 28 2a 29 20 26 20 63 6f 75 6e 74 28 2a  unt(*) & count(*
18860 29 2d 63 6f 75 6e 74 28 2a 29 2b 6d 61 78 28 74  )-count(*)+max(t
18870 31 2e 62 29 2a 20 2d 28 63 61 73 74 28 61 76 67  1.b)* -(cast(avg
18880 28 31 33 29 20 41 53 20 69 6e 74 65 67 65 72 29  (13) AS integer)
18890 29 20 26 20 20 2d 28 63 6f 75 6e 74 28 64 69 73  ) &  -(count(dis
188a0 74 69 6e 63 74 20 74 31 2e 63 29 29 29 20 77 68  tinct t1.c))) wh
188b0 65 6e 20 6d 69 6e 28 65 29 20 74 68 65 6e 20 28  en min(e) then (
188c0 6d 69 6e 28 31 33 29 29 20 65 6c 73 65 20 63 6f  min(13)) else co
188d0 75 6e 74 28 2a 29 20 65 6e 64 2a 63 6f 75 6e 74  unt(*) end*count
188e0 28 2a 29 20 77 68 65 6e 20 6d 61 78 28 65 29 20  (*) when max(e) 
188f0 74 68 65 6e 20 63 6f 75 6e 74 28 64 69 73 74 69  then count(disti
18900 6e 63 74 20 20 2d 64 29 20 65 6c 73 65 20 63 6f  nct  -d) else co
18910 75 6e 74 28 2a 29 20 65 6e 64 20 66 72 6f 6d 20  unt(*) end from 
18920 74 31 29 20 65 6e 64 2d 74 31 2e 64 2a 63 61 73  t1) end-t1.d*cas
18930 65 20 28 61 62 73 28 65 20 26 20 74 31 2e 62 29  e (abs(e & t1.b)
18940 2f 61 62 73 28 28 73 65 6c 65 63 74 20 63 61 73  /abs((select cas
18950 74 28 61 76 67 28 74 31 2e 63 29 20 41 53 20 69  t(avg(t1.c) AS i
18960 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
18970 29 29 20 77 68 65 6e 20 28 73 65 6c 65 63 74 20  )) when (select 
18980 63 61 73 74 28 61 76 67 28 61 29 20 41 53 20 69  cast(avg(a) AS i
18990 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
189a0 20 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20   then t1.c else 
189b0 66 2b 31 33 20 65 6e 64 20 46 52 4f 4d 20 74 31  f+13 end FROM t1
189c0 20 57 48 45 52 45 20 6e 6f 74 20 65 78 69 73 74   WHERE not exist
189d0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
189e0 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63  t1 where coalesc
189f0 65 28 28 73 65 6c 65 63 74 20 63 61 73 65 20 77  e((select case w
18a00 68 65 6e 20 74 31 2e 61 3e 74 31 2e 66 2d 7e 63  hen t1.a>t1.f-~c
18a10 61 73 65 20 77 68 65 6e 20 7e 74 31 2e 64 2b 63  ase when ~t1.d+c
18a20 2b 74 31 2e 66 3e 31 31 20 74 68 65 6e 20 74 31  +t1.f>11 then t1
18a30 2e 61 20 77 68 65 6e 20 28 66 20 62 65 74 77 65  .a when (f betwe
18a40 65 6e 20 74 31 2e 66 20 61 6e 64 20 74 31 2e 63  en t1.f and t1.c
18a50 29 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65  ) then t1.f else
18a60 20 31 33 20 65 6e 64 2a 74 31 2e 61 20 74 68 65   13 end*t1.a the
18a70 6e 20 74 31 2e 64 20 77 68 65 6e 20 63 3c 74 31  n t1.d when c<t1
18a80 2e 65 20 6f 72 20 65 3e 31 39 20 74 68 65 6e 20  .e or e>19 then 
18a90 63 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 20  c else t1.e end 
18aa0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 3c  from t1 where e<
18ab0 3e 61 20 61 6e 64 20 31 39 3c 3e 74 31 2e 66 29  >a and 19<>t1.f)
18ac0 2c 74 31 2e 62 29 2b 74 31 2e 66 2d 74 31 2e 65  ,t1.b)+t1.f-t1.e
18ad0 3c 64 29 7d 0a 7d 20 7b 2d 32 34 35 31 39 39 7d  <d)}.} {-245199}
18ae0 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
18af0 72 2d 32 2e 31 33 35 20 7b 0a 20 20 64 62 20 65  r-2.135 {.  db e
18b00 76 61 6c 20 7b 53 45 4c 45 43 54 20 31 31 2d 63  val {SELECT 11-c
18b10 61 73 65 20 77 68 65 6e 20 31 37 3c 3d 63 20 61  ase when 17<=c a
18b20 6e 64 20 28 73 65 6c 65 63 74 20 28 20 2d 61 62  nd (select ( -ab
18b30 73 28 63 61 73 65 20 63 6f 75 6e 74 28 2a 29 2b  s(case count(*)+
18b40 7e 63 61 73 65 20 20 2d 6d 69 6e 28 65 29 20 77  ~case  -min(e) w
18b50 68 65 6e 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  hen count(distin
18b60 63 74 20 74 31 2e 61 29 20 74 68 65 6e 20 20 2d  ct t1.a) then  -
18b70 63 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20 6d 69  count(*) else mi
18b80 6e 28 61 29 20 65 6e 64 2b 6d 61 78 28 74 31 2e  n(a) end+max(t1.
18b90 63 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 2a 29  c) when count(*)
18ba0 20 74 68 65 6e 20 6d 61 78 28 62 29 20 65 6c 73   then max(b) els
18bb0 65 20 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e  e  -count(distin
18bc0 63 74 20 31 39 29 20 65 6e 64 29 2a 63 61 73 74  ct 19) end)*cast
18bd0 28 61 76 67 28 31 37 29 20 41 53 20 69 6e 74 65  (avg(17) AS inte
18be0 67 65 72 29 29 20 66 72 6f 6d 20 74 31 29 20 6e  ger)) from t1) n
18bf0 6f 74 20 69 6e 20 28 63 61 73 65 20 66 20 77 68  ot in (case f wh
18c00 65 6e 20 65 20 74 68 65 6e 20 31 39 20 7c 20 31  en e then 19 | 1
18c10 31 20 65 6c 73 65 20 28 74 31 2e 64 29 20 65 6e  1 else (t1.d) en
18c20 64 2c 64 2c 20 2d 74 31 2e 62 29 20 74 68 65 6e  d,d, -t1.b) then
18c30 20 2b 74 31 2e 63 20 77 68 65 6e 20 74 31 2e 64   +t1.c when t1.d
18c40 20 6e 6f 74 20 69 6e 20 28 31 31 2c 63 2c 74 31   not in (11,c,t1
18c50 2e 61 29 20 74 68 65 6e 20 31 33 20 65 6c 73 65  .a) then 13 else
18c60 20 61 20 65 6e 64 2d 74 31 2e 64 2a 74 31 2e 64   a end-t1.d*t1.d
18c70 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28   FROM t1 WHERE (
18c80 28 61 62 73 28 28 61 62 73 28 63 6f 61 6c 65 73  (abs((abs(coales
18c90 63 65 28 28 73 65 6c 65 63 74 20 61 20 66 72 6f  ce((select a fro
18ca0 6d 20 74 31 20 77 68 65 72 65 20 28 73 65 6c 65  m t1 where (sele
18cb0 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
18cc0 20 74 31 2e 66 3d 62 20 74 68 65 6e 20 65 20 77   t1.f=b then e w
18cd0 68 65 6e 20 31 31 3e 74 31 2e 63 20 61 6e 64 20  hen 11>t1.c and 
18ce0 31 31 3c 3e 65 20 74 68 65 6e 20 31 33 20 65 6c  11<>e then 13 el
18cf0 73 65 20 61 20 65 6e 64 2d 28 61 29 29 2d 6d 61  se a end-(a))-ma
18d00 78 28 74 31 2e 65 29 2a 63 6f 75 6e 74 28 64 69  x(t1.e)*count(di
18d10 73 74 69 6e 63 74 20 74 31 2e 66 29 20 7c 20 63  stinct t1.f) | c
18d20 61 73 65 20 6d 61 78 28 28 66 29 29 20 77 68 65  ase max((f)) whe
18d30 6e 20 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  n (count(distinc
18d40 74 20 66 29 29 20 74 68 65 6e 20 63 6f 75 6e 74  t f)) then count
18d50 28 2a 29 20 65 6c 73 65 20 6d 69 6e 28 74 31 2e  (*) else min(t1.
18d60 63 29 20 65 6e 64 2b 6d 69 6e 28 31 39 29 20 66  c) end+min(19) f
18d70 72 6f 6d 20 74 31 29 20 6e 6f 74 20 69 6e 20 28  rom t1) not in (
18d80 31 31 2c 31 39 2c 74 31 2e 65 29 29 2c 74 31 2e  11,19,t1.e)),t1.
18d90 66 2a 31 37 29 29 2f 61 62 73 28 61 29 29 29 2f  f*17))/abs(a)))/
18da0 61 62 73 28 63 29 29 20 69 6e 20 28 73 65 6c 65  abs(c)) in (sele
18db0 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20  ct t1.c from t1 
18dc0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e  union select t1.
18dd0 61 20 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 28  a from t1)) or (
18de0 20 2d 74 31 2e 66 3d 65 29 7d 0a 7d 20 7b 7d 0a   -t1.f=e)}.} {}.
18df0 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
18e00 2d 32 2e 31 33 36 20 7b 0a 20 20 64 62 20 65 76  -2.136 {.  db ev
18e10 61 6c 20 7b 53 45 4c 45 43 54 20 31 31 2d 63 61  al {SELECT 11-ca
18e20 73 65 20 77 68 65 6e 20 31 37 3c 3d 63 20 61 6e  se when 17<=c an
18e30 64 20 28 73 65 6c 65 63 74 20 28 20 2d 61 62 73  d (select ( -abs
18e40 28 63 61 73 65 20 63 6f 75 6e 74 28 2a 29 2b 7e  (case count(*)+~
18e50 63 61 73 65 20 20 2d 6d 69 6e 28 65 29 20 77 68  case  -min(e) wh
18e60 65 6e 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  en count(distinc
18e70 74 20 74 31 2e 61 29 20 74 68 65 6e 20 20 2d 63  t t1.a) then  -c
18e80 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20 6d 69 6e  ount(*) else min
18e90 28 61 29 20 65 6e 64 2b 6d 61 78 28 74 31 2e 63  (a) end+max(t1.c
18ea0 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20  ) when count(*) 
18eb0 74 68 65 6e 20 6d 61 78 28 62 29 20 65 6c 73 65  then max(b) else
18ec0 20 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63    -count(distinc
18ed0 74 20 31 39 29 20 65 6e 64 29 2a 63 61 73 74 28  t 19) end)*cast(
18ee0 61 76 67 28 31 37 29 20 41 53 20 69 6e 74 65 67  avg(17) AS integ
18ef0 65 72 29 29 20 66 72 6f 6d 20 74 31 29 20 6e 6f  er)) from t1) no
18f00 74 20 69 6e 20 28 63 61 73 65 20 66 20 77 68 65  t in (case f whe
18f10 6e 20 65 20 74 68 65 6e 20 31 39 20 7c 20 31 31  n e then 19 | 11
18f20 20 65 6c 73 65 20 28 74 31 2e 64 29 20 65 6e 64   else (t1.d) end
18f30 2c 64 2c 20 2d 74 31 2e 62 29 20 74 68 65 6e 20  ,d, -t1.b) then 
18f40 2b 74 31 2e 63 20 77 68 65 6e 20 74 31 2e 64 20  +t1.c when t1.d 
18f50 6e 6f 74 20 69 6e 20 28 31 31 2c 63 2c 74 31 2e  not in (11,c,t1.
18f60 61 29 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20  a) then 13 else 
18f70 61 20 65 6e 64 2d 74 31 2e 64 2a 74 31 2e 64 20  a end-t1.d*t1.d 
18f80 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
18f90 54 20 28 28 28 61 62 73 28 28 61 62 73 28 63 6f  T (((abs((abs(co
18fa0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 61  alesce((select a
18fb0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
18fc0 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20  select max(case 
18fd0 77 68 65 6e 20 74 31 2e 66 3d 62 20 74 68 65 6e  when t1.f=b then
18fe0 20 65 20 77 68 65 6e 20 31 31 3e 74 31 2e 63 20   e when 11>t1.c 
18ff0 61 6e 64 20 31 31 3c 3e 65 20 74 68 65 6e 20 31  and 11<>e then 1
19000 33 20 65 6c 73 65 20 61 20 65 6e 64 2d 28 61 29  3 else a end-(a)
19010 29 2d 6d 61 78 28 74 31 2e 65 29 2a 63 6f 75 6e  )-max(t1.e)*coun
19020 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 66 29  t(distinct t1.f)
19030 20 7c 20 63 61 73 65 20 6d 61 78 28 28 66 29 29   | case max((f))
19040 20 77 68 65 6e 20 28 63 6f 75 6e 74 28 64 69 73   when (count(dis
19050 74 69 6e 63 74 20 66 29 29 20 74 68 65 6e 20 63  tinct f)) then c
19060 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20 6d 69 6e  ount(*) else min
19070 28 74 31 2e 63 29 20 65 6e 64 2b 6d 69 6e 28 31  (t1.c) end+min(1
19080 39 29 20 66 72 6f 6d 20 74 31 29 20 6e 6f 74 20  9) from t1) not 
19090 69 6e 20 28 31 31 2c 31 39 2c 74 31 2e 65 29 29  in (11,19,t1.e))
190a0 2c 74 31 2e 66 2a 31 37 29 29 2f 61 62 73 28 61  ,t1.f*17))/abs(a
190b0 29 29 29 2f 61 62 73 28 63 29 29 20 69 6e 20 28  )))/abs(c)) in (
190c0 73 65 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d  select t1.c from
190d0 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
190e0 20 74 31 2e 61 20 66 72 6f 6d 20 74 31 29 29 20   t1.a from t1)) 
190f0 6f 72 20 28 20 2d 74 31 2e 66 3d 65 29 29 7d 0a  or ( -t1.f=e))}.
19100 7d 20 7b 2d 31 36 30 32 38 39 7d 0a 64 6f 5f 74  } {-160289}.do_t
19110 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
19120 33 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  37 {.  db eval {
19130 53 45 4c 45 43 54 20 31 31 2d 63 61 73 65 20 77  SELECT 11-case w
19140 68 65 6e 20 31 37 3c 3d 63 20 61 6e 64 20 28 73  hen 17<=c and (s
19150 65 6c 65 63 74 20 28 20 2d 61 62 73 28 63 61 73  elect ( -abs(cas
19160 65 20 63 6f 75 6e 74 28 2a 29 2b 7e 63 61 73 65  e count(*)+~case
19170 20 20 2d 6d 69 6e 28 65 29 20 77 68 65 6e 20 63    -min(e) when c
19180 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
19190 2e 61 29 20 74 68 65 6e 20 20 2d 63 6f 75 6e 74  .a) then  -count
191a0 28 2a 29 20 65 6c 73 65 20 6d 69 6e 28 61 29 20  (*) else min(a) 
191b0 65 6e 64 2b 6d 61 78 28 74 31 2e 63 29 20 77 68  end+max(t1.c) wh
191c0 65 6e 20 63 6f 75 6e 74 28 2a 29 20 74 68 65 6e  en count(*) then
191d0 20 6d 61 78 28 62 29 20 65 6c 73 65 20 20 2d 63   max(b) else  -c
191e0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31 39  ount(distinct 19
191f0 29 20 65 6e 64 29 2a 63 61 73 74 28 61 76 67 28  ) end)*cast(avg(
19200 31 37 29 20 41 53 20 69 6e 74 65 67 65 72 29 29  17) AS integer))
19210 20 66 72 6f 6d 20 74 31 29 20 6e 6f 74 20 69 6e   from t1) not in
19220 20 28 63 61 73 65 20 66 20 77 68 65 6e 20 65 20   (case f when e 
19230 74 68 65 6e 20 31 39 20 26 20 31 31 20 65 6c 73  then 19 & 11 els
19240 65 20 28 74 31 2e 64 29 20 65 6e 64 2c 64 2c 20  e (t1.d) end,d, 
19250 2d 74 31 2e 62 29 20 74 68 65 6e 20 2b 74 31 2e  -t1.b) then +t1.
19260 63 20 77 68 65 6e 20 74 31 2e 64 20 6e 6f 74 20  c when t1.d not 
19270 69 6e 20 28 31 31 2c 63 2c 74 31 2e 61 29 20 74  in (11,c,t1.a) t
19280 68 65 6e 20 31 33 20 65 6c 73 65 20 61 20 65 6e  hen 13 else a en
19290 64 2d 74 31 2e 64 2a 74 31 2e 64 20 46 52 4f 4d  d-t1.d*t1.d FROM
192a0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28   t1 WHERE NOT ((
192b0 28 61 62 73 28 28 61 62 73 28 63 6f 61 6c 65 73  (abs((abs(coales
192c0 63 65 28 28 73 65 6c 65 63 74 20 61 20 66 72 6f  ce((select a fro
192d0 6d 20 74 31 20 77 68 65 72 65 20 28 73 65 6c 65  m t1 where (sele
192e0 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
192f0 20 74 31 2e 66 3d 62 20 74 68 65 6e 20 65 20 77   t1.f=b then e w
19300 68 65 6e 20 31 31 3e 74 31 2e 63 20 61 6e 64 20  hen 11>t1.c and 
19310 31 31 3c 3e 65 20 74 68 65 6e 20 31 33 20 65 6c  11<>e then 13 el
19320 73 65 20 61 20 65 6e 64 2d 28 61 29 29 2d 6d 61  se a end-(a))-ma
19330 78 28 74 31 2e 65 29 2a 63 6f 75 6e 74 28 64 69  x(t1.e)*count(di
19340 73 74 69 6e 63 74 20 74 31 2e 66 29 20 7c 20 63  stinct t1.f) | c
19350 61 73 65 20 6d 61 78 28 28 66 29 29 20 77 68 65  ase max((f)) whe
19360 6e 20 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  n (count(distinc
19370 74 20 66 29 29 20 74 68 65 6e 20 63 6f 75 6e 74  t f)) then count
19380 28 2a 29 20 65 6c 73 65 20 6d 69 6e 28 74 31 2e  (*) else min(t1.
19390 63 29 20 65 6e 64 2b 6d 69 6e 28 31 39 29 20 66  c) end+min(19) f
193a0 72 6f 6d 20 74 31 29 20 6e 6f 74 20 69 6e 20 28  rom t1) not in (
193b0 31 31 2c 31 39 2c 74 31 2e 65 29 29 2c 74 31 2e  11,19,t1.e)),t1.
193c0 66 2a 31 37 29 29 2f 61 62 73 28 61 29 29 29 2f  f*17))/abs(a)))/
193d0 61 62 73 28 63 29 29 20 69 6e 20 28 73 65 6c 65  abs(c)) in (sele
193e0 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20  ct t1.c from t1 
193f0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e  union select t1.
19400 61 20 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 28  a from t1)) or (
19410 20 2d 74 31 2e 66 3d 65 29 29 7d 0a 7d 20 7b 2d   -t1.f=e))}.} {-
19420 31 36 30 32 38 39 7d 0a 64 6f 5f 74 65 73 74 20  160289}.do_test 
19430 72 61 6e 64 65 78 70 72 2d 32 2e 31 33 38 20 7b  randexpr-2.138 {
19440 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
19450 43 54 20 28 66 2b 63 61 73 65 20 2b 74 31 2e 65  CT (f+case +t1.e
19460 20 77 68 65 6e 20 74 31 2e 64 20 74 68 65 6e 20   when t1.d then 
19470 31 37 20 65 6c 73 65 20 66 2a 31 39 20 65 6e 64  17 else f*19 end
19480 20 7c 20 20 2d 28 61 62 73 28 20 2d 63 6f 61 6c   |  -(abs( -coal
19490 65 73 63 65 28 28 73 65 6c 65 63 74 20 31 37 2a  esce((select 17*
194a0 20 2d 63 2b 31 39 20 66 72 6f 6d 20 74 31 20 77   -c+19 from t1 w
194b0 68 65 72 65 20 28 61 62 73 28 63 61 73 65 20 31  here (abs(case 1
194c0 39 2a 65 2a 64 20 77 68 65 6e 20 28 73 65 6c 65  9*e*d when (sele
194d0 63 74 20 2b 28 63 61 73 74 28 61 76 67 28 20 2d  ct +(cast(avg( -
194e0 31 31 29 20 41 53 20 69 6e 74 65 67 65 72 29 29  11) AS integer))
194f0 20 7c 20 20 2d 63 6f 75 6e 74 28 2a 29 2a 6d 61   |  -count(*)*ma
19500 78 28 20 2d 31 33 29 20 66 72 6f 6d 20 74 31 29  x( -13) from t1)
19510 20 74 68 65 6e 20 31 31 20 7c 20 63 61 73 65 20   then 11 | case 
19520 74 31 2e 62 20 77 68 65 6e 20 61 20 74 68 65 6e  t1.b when a then
19530 20 61 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64   a else t1.f end
19540 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 29 2f   else t1.a end)/
19550 61 62 73 28 61 29 29 20 69 6e 20 28 73 65 6c 65  abs(a)) in (sele
19560 63 74 20 74 31 2e 62 20 66 72 6f 6d 20 74 31 20  ct t1.b from t1 
19570 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 61 29  union select (a)
19580 20 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 62 29   from t1)),t1.b)
19590 29 2f 61 62 73 28 20 2d 31 33 29 29 29 20 46 52  )/abs( -13))) FR
195a0 4f 4d 20 74 31 20 57 48 45 52 45 20 2b 62 20 69  OM t1 WHERE +b i
195b0 6e 20 28 73 65 6c 65 63 74 20 63 61 73 65 20 63  n (select case c
195c0 61 73 65 20 63 61 73 65 20 77 68 65 6e 20 6e 6f  ase case when no
195d0 74 20 28 28 7e 63 6f 61 6c 65 73 63 65 28 28 73  t ((~coalesce((s
195e0 65 6c 65 63 74 20 74 31 2e 65 2b 64 20 66 72 6f  elect t1.e+d fro
195f0 6d 20 74 31 20 77 68 65 72 65 20 28 31 39 20 62  m t1 where (19 b
19600 65 74 77 65 65 6e 20 66 20 61 6e 64 20 74 31 2e  etween f and t1.
19610 62 29 29 2c 28 73 65 6c 65 63 74 20 63 61 73 74  b)),(select cast
19620 28 61 76 67 28 63 2b 74 31 2e 62 29 20 41 53 20  (avg(c+t1.b) AS 
19630 69 6e 74 65 67 65 72 29 2b 2b 63 61 73 74 28 61  integer)++cast(a
19640 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65 72  vg(b) AS integer
19650 29 20 66 72 6f 6d 20 74 31 29 29 29 20 6e 6f 74  ) from t1))) not
19660 20 69 6e 20 28 74 31 2e 63 2b 63 2c 62 2c 65 29   in (t1.c+c,b,e)
19670 29 20 6f 72 20 28 31 33 20 6e 6f 74 20 62 65 74  ) or (13 not bet
19680 77 65 65 6e 20 64 20 61 6e 64 20 74 31 2e 64 29  ween d and t1.d)
19690 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20 62 20   then 13 else b 
196a0 65 6e 64 20 77 68 65 6e 20 20 2d 31 31 20 74 68  end when  -11 th
196b0 65 6e 20 31 33 20 65 6c 73 65 20 31 39 20 65 6e  en 13 else 19 en
196c0 64 2a 74 31 2e 65 20 77 68 65 6e 20 28 66 29 20  d*t1.e when (f) 
196d0 74 68 65 6e 20 31 39 20 65 6c 73 65 20 31 39 20  then 19 else 19 
196e0 65 6e 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  end from t1 unio
196f0 6e 20 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20  n select f from 
19700 74 31 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  t1)}.} {}.do_tes
19710 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 33 39  t randexpr-2.139
19720 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
19730 4c 45 43 54 20 28 66 2b 63 61 73 65 20 2b 74 31  LECT (f+case +t1
19740 2e 65 20 77 68 65 6e 20 74 31 2e 64 20 74 68 65  .e when t1.d the
19750 6e 20 31 37 20 65 6c 73 65 20 66 2a 31 39 20 65  n 17 else f*19 e
19760 6e 64 20 7c 20 20 2d 28 61 62 73 28 20 2d 63 6f  nd |  -(abs( -co
19770 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 31  alesce((select 1
19780 37 2a 20 2d 63 2b 31 39 20 66 72 6f 6d 20 74 31  7* -c+19 from t1
19790 20 77 68 65 72 65 20 28 61 62 73 28 63 61 73 65   where (abs(case
197a0 20 31 39 2a 65 2a 64 20 77 68 65 6e 20 28 73 65   19*e*d when (se
197b0 6c 65 63 74 20 2b 28 63 61 73 74 28 61 76 67 28  lect +(cast(avg(
197c0 20 2d 31 31 29 20 41 53 20 69 6e 74 65 67 65 72   -11) AS integer
197d0 29 29 20 7c 20 20 2d 63 6f 75 6e 74 28 2a 29 2a  )) |  -count(*)*
197e0 6d 61 78 28 20 2d 31 33 29 20 66 72 6f 6d 20 74  max( -13) from t
197f0 31 29 20 74 68 65 6e 20 31 31 20 7c 20 63 61 73  1) then 11 | cas
19800 65 20 74 31 2e 62 20 77 68 65 6e 20 61 20 74 68  e t1.b when a th
19810 65 6e 20 61 20 65 6c 73 65 20 74 31 2e 66 20 65  en a else t1.f e
19820 6e 64 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64  nd else t1.a end
19830 29 2f 61 62 73 28 61 29 29 20 69 6e 20 28 73 65  )/abs(a)) in (se
19840 6c 65 63 74 20 74 31 2e 62 20 66 72 6f 6d 20 74  lect t1.b from t
19850 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28  1 union select (
19860 61 29 20 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e  a) from t1)),t1.
19870 62 29 29 2f 61 62 73 28 20 2d 31 33 29 29 29 20  b))/abs( -13))) 
19880 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
19890 54 20 28 2b 62 20 69 6e 20 28 73 65 6c 65 63 74  T (+b in (select
198a0 20 63 61 73 65 20 63 61 73 65 20 63 61 73 65 20   case case case 
198b0 77 68 65 6e 20 6e 6f 74 20 28 28 7e 63 6f 61 6c  when not ((~coal
198c0 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e  esce((select t1.
198d0 65 2b 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72  e+d from t1 wher
198e0 65 20 28 31 39 20 62 65 74 77 65 65 6e 20 66 20  e (19 between f 
198f0 61 6e 64 20 74 31 2e 62 29 29 2c 28 73 65 6c 65  and t1.b)),(sele
19900 63 74 20 63 61 73 74 28 61 76 67 28 63 2b 74 31  ct cast(avg(c+t1
19910 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 2b  .b) AS integer)+
19920 2b 63 61 73 74 28 61 76 67 28 62 29 20 41 53 20  +cast(avg(b) AS 
19930 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31  integer) from t1
19940 29 29 29 20 6e 6f 74 20 69 6e 20 28 74 31 2e 63  ))) not in (t1.c
19950 2b 63 2c 62 2c 65 29 29 20 6f 72 20 28 31 33 20  +c,b,e)) or (13 
19960 6e 6f 74 20 62 65 74 77 65 65 6e 20 64 20 61 6e  not between d an
19970 64 20 74 31 2e 64 29 20 74 68 65 6e 20 31 33 20  d t1.d) then 13 
19980 65 6c 73 65 20 62 20 65 6e 64 20 77 68 65 6e 20  else b end when 
19990 20 2d 31 31 20 74 68 65 6e 20 31 33 20 65 6c 73   -11 then 13 els
199a0 65 20 31 39 20 65 6e 64 2a 74 31 2e 65 20 77 68  e 19 end*t1.e wh
199b0 65 6e 20 28 66 29 20 74 68 65 6e 20 31 39 20 65  en (f) then 19 e
199c0 6c 73 65 20 31 39 20 65 6e 64 20 66 72 6f 6d 20  lse 19 end from 
199d0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
199e0 66 20 66 72 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b  f from t1))}.} {
199f0 2d 31 35 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  -15}.do_test ran
19a00 64 65 78 70 72 2d 32 2e 31 34 30 20 7b 0a 20 20  dexpr-2.140 {.  
19a10 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
19a20 28 66 2b 63 61 73 65 20 2b 74 31 2e 65 20 77 68  (f+case +t1.e wh
19a30 65 6e 20 74 31 2e 64 20 74 68 65 6e 20 31 37 20  en t1.d then 17 
19a40 65 6c 73 65 20 66 2a 31 39 20 65 6e 64 20 26 20  else f*19 end & 
19a50 20 2d 28 61 62 73 28 20 2d 63 6f 61 6c 65 73 63   -(abs( -coalesc
19a60 65 28 28 73 65 6c 65 63 74 20 31 37 2a 20 2d 63  e((select 17* -c
19a70 2b 31 39 20 66 72 6f 6d 20 74 31 20 77 68 65 72  +19 from t1 wher
19a80 65 20 28 61 62 73 28 63 61 73 65 20 31 39 2a 65  e (abs(case 19*e
19a90 2a 64 20 77 68 65 6e 20 28 73 65 6c 65 63 74 20  *d when (select 
19aa0 2b 28 63 61 73 74 28 61 76 67 28 20 2d 31 31 29  +(cast(avg( -11)
19ab0 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 26 20   AS integer)) & 
19ac0 20 2d 63 6f 75 6e 74 28 2a 29 2a 6d 61 78 28 20   -count(*)*max( 
19ad0 2d 31 33 29 20 66 72 6f 6d 20 74 31 29 20 74 68  -13) from t1) th
19ae0 65 6e 20 31 31 20 26 20 63 61 73 65 20 74 31 2e  en 11 & case t1.
19af0 62 20 77 68 65 6e 20 61 20 74 68 65 6e 20 61 20  b when a then a 
19b00 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 20 65 6c  else t1.f end el
19b10 73 65 20 74 31 2e 61 20 65 6e 64 29 2f 61 62 73  se t1.a end)/abs
19b20 28 61 29 29 20 69 6e 20 28 73 65 6c 65 63 74 20  (a)) in (select 
19b30 74 31 2e 62 20 66 72 6f 6d 20 74 31 20 75 6e 69  t1.b from t1 uni
19b40 6f 6e 20 73 65 6c 65 63 74 20 28 61 29 20 66 72  on select (a) fr
19b50 6f 6d 20 74 31 29 29 2c 74 31 2e 62 29 29 2f 61  om t1)),t1.b))/a
19b60 62 73 28 20 2d 31 33 29 29 29 20 46 52 4f 4d 20  bs( -13))) FROM 
19b70 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 2b 62  t1 WHERE NOT (+b
19b80 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73 65   in (select case
19b90 20 63 61 73 65 20 63 61 73 65 20 77 68 65 6e 20   case case when 
19ba0 6e 6f 74 20 28 28 7e 63 6f 61 6c 65 73 63 65 28  not ((~coalesce(
19bb0 28 73 65 6c 65 63 74 20 74 31 2e 65 2b 64 20 66  (select t1.e+d f
19bc0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 31 39  rom t1 where (19
19bd0 20 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20 74   between f and t
19be0 31 2e 62 29 29 2c 28 73 65 6c 65 63 74 20 63 61  1.b)),(select ca
19bf0 73 74 28 61 76 67 28 63 2b 74 31 2e 62 29 20 41  st(avg(c+t1.b) A
19c00 53 20 69 6e 74 65 67 65 72 29 2b 2b 63 61 73 74  S integer)++cast
19c10 28 61 76 67 28 62 29 20 41 53 20 69 6e 74 65 67  (avg(b) AS integ
19c20 65 72 29 20 66 72 6f 6d 20 74 31 29 29 29 20 6e  er) from t1))) n
19c30 6f 74 20 69 6e 20 28 74 31 2e 63 2b 63 2c 62 2c  ot in (t1.c+c,b,
19c40 65 29 29 20 6f 72 20 28 31 33 20 6e 6f 74 20 62  e)) or (13 not b
19c50 65 74 77 65 65 6e 20 64 20 61 6e 64 20 74 31 2e  etween d and t1.
19c60 64 29 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20  d) then 13 else 
19c70 62 20 65 6e 64 20 77 68 65 6e 20 20 2d 31 31 20  b end when  -11 
19c80 74 68 65 6e 20 31 33 20 65 6c 73 65 20 31 39 20  then 13 else 19 
19c90 65 6e 64 2a 74 31 2e 65 20 77 68 65 6e 20 28 66  end*t1.e when (f
19ca0 29 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20 31  ) then 19 else 1
19cb0 39 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75 6e  9 end from t1 un
19cc0 69 6f 6e 20 73 65 6c 65 63 74 20 66 20 66 72 6f  ion select f fro
19cd0 6d 20 74 31 29 29 7d 0a 7d 20 7b 31 32 30 30 30  m t1))}.} {12000
19ce0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
19cf0 70 72 2d 32 2e 31 34 31 20 7b 0a 20 20 64 62 20  pr-2.141 {.  db 
19d00 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 31 31 2a  eval {SELECT 11*
19d10 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
19d20 20 6d 61 78 28 74 31 2e 66 29 20 66 72 6f 6d 20   max(t1.f) from 
19d30 74 31 20 77 68 65 72 65 20 61 2d 63 61 73 65 20  t1 where a-case 
19d40 74 31 2e 63 20 77 68 65 6e 20 2b 63 6f 61 6c 65  t1.c when +coale
19d50 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 61  sce((select t1.a
19d60 2d 74 31 2e 62 20 66 72 6f 6d 20 74 31 20 77 68  -t1.b from t1 wh
19d70 65 72 65 20 28 61 62 73 28 31 39 29 2f 61 62 73  ere (abs(19)/abs
19d80 28 62 29 29 20 69 6e 20 28 31 37 2d 63 61 73 65  (b)) in (17-case
19d90 20 77 68 65 6e 20 61 3c 74 31 2e 62 20 74 68 65   when a<t1.b the
19da0 6e 20 74 31 2e 61 20 77 68 65 6e 20 63 20 6e 6f  n t1.a when c no
19db0 74 20 62 65 74 77 65 65 6e 20 31 39 20 61 6e 64  t between 19 and
19dc0 20 74 31 2e 64 20 74 68 65 6e 20 65 20 65 6c 73   t1.d then e els
19dd0 65 20 28 74 31 2e 62 29 20 65 6e 64 2c 20 2d 74  e (t1.b) end, -t
19de0 31 2e 62 2c 66 29 20 6f 72 20 31 39 20 69 6e 20  1.b,f) or 19 in 
19df0 28 73 65 6c 65 63 74 20 74 31 2e 62 20 66 72 6f  (select t1.b fro
19e00 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
19e10 74 20 74 31 2e 61 20 66 72 6f 6d 20 74 31 29 29  t t1.a from t1))
19e20 2c 65 29 2b 74 31 2e 66 2a 74 31 2e 62 20 74 68  ,e)+t1.f*t1.b th
19e30 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 31 33 20  en t1.c else 13 
19e40 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 74  end in (select t
19e50 31 2e 62 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  1.b from t1 unio
19e60 6e 20 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20  n select f from 
19e70 74 31 29 20 6f 72 20 65 3c 3e 31 37 29 2c 64 29  t1) or e<>17),d)
19e80 2a 28 74 31 2e 65 29 20 46 52 4f 4d 20 74 31 20  *(t1.e) FROM t1 
19e90 57 48 45 52 45 20 28 63 6f 61 6c 65 73 63 65 28  WHERE (coalesce(
19ea0 28 73 65 6c 65 63 74 20 6d 61 78 28 7e 74 31 2e  (select max(~t1.
19eb0 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  b) from t1 where
19ec0 20 74 31 2e 63 20 69 6e 20 28 73 65 6c 65 63 74   t1.c in (select
19ed0 20 7e 2b 63 61 73 65 20 63 6f 75 6e 74 28 64 69   ~+case count(di
19ee0 73 74 69 6e 63 74 20 61 29 20 77 68 65 6e 20 28  stinct a) when (
19ef0 6d 61 78 28 74 31 2e 61 29 29 20 74 68 65 6e 20  max(t1.a)) then 
19f00 28 63 6f 75 6e 74 28 2a 29 29 20 65 6c 73 65 20  (count(*)) else 
19f10 7e 2b 61 62 73 28 63 61 73 74 28 61 76 67 28 64  ~+abs(cast(avg(d
19f20 20 7c 20 74 31 2e 61 29 20 41 53 20 69 6e 74 65   | t1.a) AS inte
19f30 67 65 72 29 2b 63 61 73 65 20 28 63 61 73 74 28  ger)+case (cast(
19f40 61 76 67 28 31 33 29 20 41 53 20 69 6e 74 65 67  avg(13) AS integ
19f50 65 72 29 29 20 77 68 65 6e 20 63 61 73 74 28 61  er)) when cast(a
19f60 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65 72  vg(b) AS integer
19f70 29 20 74 68 65 6e 20 63 61 73 74 28 61 76 67 28  ) then cast(avg(
19f80 74 31 2e 66 29 20 41 53 20 69 6e 74 65 67 65 72  t1.f) AS integer
19f90 29 20 65 6c 73 65 20 6d 69 6e 28 74 31 2e 61 29  ) else min(t1.a)
19fa0 20 65 6e 64 29 20 7c 20 63 6f 75 6e 74 28 64 69   end) | count(di
19fb0 73 74 69 6e 63 74 20 63 29 2a 28 20 2d 28 20 2d  stinct c)*( -( -
19fc0 6d 61 78 28 74 31 2e 66 29 29 29 2a 63 6f 75 6e  max(t1.f)))*coun
19fd0 74 28 2a 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  t(*) end from t1
19fe0 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f   union select co
19ff0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 20 2d 65  unt(distinct  -e
1a000 29 20 66 72 6f 6d 20 74 31 29 29 2c 7e 61 2d 31  ) from t1)),~a-1
1a010 31 29 3c 31 39 20 6f 72 20 74 31 2e 61 2a 31 33  1)<19 or t1.a*13
1a020 3c 3e 74 31 2e 64 20 61 6e 64 20 6e 6f 74 20 65  <>t1.d and not e
1a030 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
1a040 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
1a050 65 3d 65 29 29 7d 0a 7d 20 7b 33 33 30 30 30 30  e=e))}.} {330000
1a060 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  0}.do_test rande
1a070 78 70 72 2d 32 2e 31 34 32 20 7b 0a 20 20 64 62  xpr-2.142 {.  db
1a080 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 31 31   eval {SELECT 11
1a090 2a 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  *coalesce((selec
1a0a0 74 20 6d 61 78 28 74 31 2e 66 29 20 66 72 6f 6d  t max(t1.f) from
1a0b0 20 74 31 20 77 68 65 72 65 20 61 2d 63 61 73 65   t1 where a-case
1a0c0 20 74 31 2e 63 20 77 68 65 6e 20 2b 63 6f 61 6c   t1.c when +coal
1a0d0 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e  esce((select t1.
1a0e0 61 2d 74 31 2e 62 20 66 72 6f 6d 20 74 31 20 77  a-t1.b from t1 w
1a0f0 68 65 72 65 20 28 61 62 73 28 31 39 29 2f 61 62  here (abs(19)/ab
1a100 73 28 62 29 29 20 69 6e 20 28 31 37 2d 63 61 73  s(b)) in (17-cas
1a110 65 20 77 68 65 6e 20 61 3c 74 31 2e 62 20 74 68  e when a<t1.b th
1a120 65 6e 20 74 31 2e 61 20 77 68 65 6e 20 63 20 6e  en t1.a when c n
1a130 6f 74 20 62 65 74 77 65 65 6e 20 31 39 20 61 6e  ot between 19 an
1a140 64 20 74 31 2e 64 20 74 68 65 6e 20 65 20 65 6c  d t1.d then e el
1a150 73 65 20 28 74 31 2e 62 29 20 65 6e 64 2c 20 2d  se (t1.b) end, -
1a160 74 31 2e 62 2c 66 29 20 6f 72 20 31 39 20 69 6e  t1.b,f) or 19 in
1a170 20 28 73 65 6c 65 63 74 20 74 31 2e 62 20 66 72   (select t1.b fr
1a180 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
1a190 63 74 20 74 31 2e 61 20 66 72 6f 6d 20 74 31 29  ct t1.a from t1)
1a1a0 29 2c 65 29 2b 74 31 2e 66 2a 74 31 2e 62 20 74  ),e)+t1.f*t1.b t
1a1b0 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 31 33  hen t1.c else 13
1a1c0 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20   end in (select 
1a1d0 74 31 2e 62 20 66 72 6f 6d 20 74 31 20 75 6e 69  t1.b from t1 uni
1a1e0 6f 6e 20 73 65 6c 65 63 74 20 66 20 66 72 6f 6d  on select f from
1a1f0 20 74 31 29 20 6f 72 20 65 3c 3e 31 37 29 2c 64   t1) or e<>17),d
1a200 29 2a 28 74 31 2e 65 29 20 46 52 4f 4d 20 74 31  )*(t1.e) FROM t1
1a210 20 57 48 45 52 45 20 4e 4f 54 20 28 28 63 6f 61   WHERE NOT ((coa
1a220 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
1a230 78 28 7e 74 31 2e 62 29 20 66 72 6f 6d 20 74 31  x(~t1.b) from t1
1a240 20 77 68 65 72 65 20 74 31 2e 63 20 69 6e 20 28   where t1.c in (
1a250 73 65 6c 65 63 74 20 7e 2b 63 61 73 65 20 63 6f  select ~+case co
1a260 75 6e 74 28 64 69 73 74 69 6e 63 74 20 61 29 20  unt(distinct a) 
1a270 77 68 65 6e 20 28 6d 61 78 28 74 31 2e 61 29 29  when (max(t1.a))
1a280 20 74 68 65 6e 20 28 63 6f 75 6e 74 28 2a 29 29   then (count(*))
1a290 20 65 6c 73 65 20 7e 2b 61 62 73 28 63 61 73 74   else ~+abs(cast
1a2a0 28 61 76 67 28 64 20 7c 20 74 31 2e 61 29 20 41  (avg(d | t1.a) A
1a2b0 53 20 69 6e 74 65 67 65 72 29 2b 63 61 73 65 20  S integer)+case 
1a2c0 28 63 61 73 74 28 61 76 67 28 31 33 29 20 41 53  (cast(avg(13) AS
1a2d0 20 69 6e 74 65 67 65 72 29 29 20 77 68 65 6e 20   integer)) when 
1a2e0 63 61 73 74 28 61 76 67 28 62 29 20 41 53 20 69  cast(avg(b) AS i
1a2f0 6e 74 65 67 65 72 29 20 74 68 65 6e 20 63 61 73  nteger) then cas
1a300 74 28 61 76 67 28 74 31 2e 66 29 20 41 53 20 69  t(avg(t1.f) AS i
1a310 6e 74 65 67 65 72 29 20 65 6c 73 65 20 6d 69 6e  nteger) else min
1a320 28 74 31 2e 61 29 20 65 6e 64 29 20 7c 20 63 6f  (t1.a) end) | co
1a330 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29 2a  unt(distinct c)*
1a340 28 20 2d 28 20 2d 6d 61 78 28 74 31 2e 66 29 29  ( -( -max(t1.f))
1a350 29 2a 63 6f 75 6e 74 28 2a 29 20 65 6e 64 20 66  )*count(*) end f
1a360 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1a370 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ect count(distin
1a380 63 74 20 20 2d 65 29 20 66 72 6f 6d 20 74 31 29  ct  -e) from t1)
1a390 29 2c 7e 61 2d 31 31 29 3c 31 39 20 6f 72 20 74  ),~a-11)<19 or t
1a3a0 31 2e 61 2a 31 33 3c 3e 74 31 2e 64 20 61 6e 64  1.a*13<>t1.d and
1a3b0 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
1a3c0 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
1a3d0 72 65 20 74 31 2e 65 3d 65 29 29 29 7d 0a 7d 20  re t1.e=e)))}.} 
1a3e0 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
1a3f0 78 70 72 2d 32 2e 31 34 33 20 7b 0a 20 20 64 62  xpr-2.143 {.  db
1a400 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 31 31   eval {SELECT 11
1a410 2b 74 31 2e 62 2b 31 37 2b 63 61 73 65 20 77 68  +t1.b+17+case wh
1a420 65 6e 20 31 33 20 6e 6f 74 20 62 65 74 77 65 65  en 13 not betwee
1a430 6e 20 74 31 2e 64 2a 28 31 37 29 2b 64 2d 74 31  n t1.d*(17)+d-t1
1a440 2e 66 20 61 6e 64 20 31 33 20 74 68 65 6e 20 74  .f and 13 then t
1a450 31 2e 64 20 77 68 65 6e 20 63 61 73 65 20 77 68  1.d when case wh
1a460 65 6e 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e  en case when t1.
1a470 66 20 6e 6f 74 20 69 6e 20 28 74 31 2e 62 2c 63  f not in (t1.b,c
1a480 2c 74 31 2e 66 29 20 61 6e 64 20 20 2d 64 20 62  ,t1.f) and  -d b
1a490 65 74 77 65 65 6e 20 64 20 61 6e 64 20 31 31 20  etween d and 11 
1a4a0 74 68 65 6e 20 64 20 65 6c 73 65 20 31 39 20 65  then d else 19 e
1a4b0 6e 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 61  nd not between a
1a4c0 20 61 6e 64 20 65 20 74 68 65 6e 20 74 31 2e 62   and e then t1.b
1a4d0 20 77 68 65 6e 20 74 31 2e 64 20 69 6e 20 28 31   when t1.d in (1
1a4e0 37 2c 31 33 2c 31 31 29 20 74 68 65 6e 20 31 39  7,13,11) then 19
1a4f0 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 2a 61   else t1.e end*a
1a500 3e 65 20 74 68 65 6e 20 74 31 2e 61 20 65 6c 73  >e then t1.a els
1a510 65 20 74 31 2e 64 20 65 6e 64 2a 66 2a 65 20 46  e t1.d end*f*e F
1a520 52 4f 4d 20 74 31 20 57 48 45 52 45 20 6e 6f 74  ROM t1 WHERE not
1a530 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
1a540 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
1a550 74 31 2e 66 29 20 69 6e 20 28 62 2d 62 2c 28 73  t1.f) in (b-b,(s
1a560 65 6c 65 63 74 20 2b 28 6d 61 78 28 20 2d 31 33  elect +(max( -13
1a570 2a 74 31 2e 63 2a 63 2b 74 31 2e 65 2b 63 61 73  *t1.c*c+t1.e+cas
1a580 65 20 74 31 2e 61 20 77 68 65 6e 20 2b 74 31 2e  e t1.a when +t1.
1a590 64 2d 28 63 29 20 74 68 65 6e 20 20 2d 74 31 2e  d-(c) then  -t1.
1a5a0 61 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 20  a else t1.c end 
1a5b0 7c 20 31 39 2a 20 2d 31 37 29 2a 63 6f 75 6e 74  | 19* -17)*count
1a5c0 28 64 69 73 74 69 6e 63 74 20 61 29 20 7c 20 28  (distinct a) | (
1a5d0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
1a5e0 31 2e 66 29 29 29 2b 2b 63 61 73 74 28 61 76 67  1.f)))++cast(avg
1a5f0 28 66 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d  (f) AS integer)-
1a600 6d 61 78 28 31 33 29 20 7c 20 63 61 73 74 28 61  max(13) | cast(a
1a610 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65 72  vg(b) AS integer
1a620 29 20 66 72 6f 6d 20 74 31 29 2c 74 31 2e 66 29  ) from t1),t1.f)
1a630 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  )}.} {}.do_test 
1a640 72 61 6e 64 65 78 70 72 2d 32 2e 31 34 34 20 7b  randexpr-2.144 {
1a650 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
1a660 43 54 20 31 31 2b 74 31 2e 62 2b 31 37 2b 63 61  CT 11+t1.b+17+ca
1a670 73 65 20 77 68 65 6e 20 31 33 20 6e 6f 74 20 62  se when 13 not b
1a680 65 74 77 65 65 6e 20 74 31 2e 64 2a 28 31 37 29  etween t1.d*(17)
1a690 2b 64 2d 74 31 2e 66 20 61 6e 64 20 31 33 20 74  +d-t1.f and 13 t
1a6a0 68 65 6e 20 74 31 2e 64 20 77 68 65 6e 20 63 61  hen t1.d when ca
1a6b0 73 65 20 77 68 65 6e 20 63 61 73 65 20 77 68 65  se when case whe
1a6c0 6e 20 74 31 2e 66 20 6e 6f 74 20 69 6e 20 28 74  n t1.f not in (t
1a6d0 31 2e 62 2c 63 2c 74 31 2e 66 29 20 61 6e 64 20  1.b,c,t1.f) and 
1a6e0 20 2d 64 20 62 65 74 77 65 65 6e 20 64 20 61 6e   -d between d an
1a6f0 64 20 31 31 20 74 68 65 6e 20 64 20 65 6c 73 65  d 11 then d else
1a700 20 31 39 20 65 6e 64 20 6e 6f 74 20 62 65 74 77   19 end not betw
1a710 65 65 6e 20 61 20 61 6e 64 20 65 20 74 68 65 6e  een a and e then
1a720 20 74 31 2e 62 20 77 68 65 6e 20 74 31 2e 64 20   t1.b when t1.d 
1a730 69 6e 20 28 31 37 2c 31 33 2c 31 31 29 20 74 68  in (17,13,11) th
1a740 65 6e 20 31 39 20 65 6c 73 65 20 74 31 2e 65 20  en 19 else t1.e 
1a750 65 6e 64 2a 61 3e 65 20 74 68 65 6e 20 74 31 2e  end*a>e then t1.
1a760 61 20 65 6c 73 65 20 74 31 2e 64 20 65 6e 64 2a  a else t1.d end*
1a770 66 2a 65 20 46 52 4f 4d 20 74 31 20 57 48 45 52  f*e FROM t1 WHER
1a780 45 20 4e 4f 54 20 28 6e 6f 74 20 65 78 69 73 74  E NOT (not exist
1a790 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
1a7a0 74 31 20 77 68 65 72 65 20 28 74 31 2e 66 29 20  t1 where (t1.f) 
1a7b0 69 6e 20 28 62 2d 62 2c 28 73 65 6c 65 63 74 20  in (b-b,(select 
1a7c0 2b 28 6d 61 78 28 20 2d 31 33 2a 74 31 2e 63 2a  +(max( -13*t1.c*
1a7d0 63 2b 74 31 2e 65 2b 63 61 73 65 20 74 31 2e 61  c+t1.e+case t1.a
1a7e0 20 77 68 65 6e 20 2b 74 31 2e 64 2d 28 63 29 20   when +t1.d-(c) 
1a7f0 74 68 65 6e 20 20 2d 74 31 2e 61 20 65 6c 73 65  then  -t1.a else
1a800 20 74 31 2e 63 20 65 6e 64 20 7c 20 31 39 2a 20   t1.c end | 19* 
1a810 2d 31 37 29 2a 63 6f 75 6e 74 28 64 69 73 74 69  -17)*count(disti
1a820 6e 63 74 20 61 29 20 7c 20 28 63 6f 75 6e 74 28  nct a) | (count(
1a830 64 69 73 74 69 6e 63 74 20 74 31 2e 66 29 29 29  distinct t1.f)))
1a840 2b 2b 63 61 73 74 28 61 76 67 28 66 29 20 41 53  ++cast(avg(f) AS
1a850 20 69 6e 74 65 67 65 72 29 2d 6d 61 78 28 31 33   integer)-max(13
1a860 29 20 7c 20 63 61 73 74 28 61 76 67 28 62 29 20  ) | cast(avg(b) 
1a870 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
1a880 20 74 31 29 2c 74 31 2e 66 29 29 29 7d 0a 7d 20   t1),t1.f)))}.} 
1a890 7b 31 32 30 30 30 30 32 32 38 7d 0a 64 6f 5f 74  {120000228}.do_t
1a8a0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
1a8b0 34 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  45 {.  db eval {
1a8c0 53 45 4c 45 43 54 20 28 28 61 62 73 28 2b 28 28  SELECT ((abs(+((
1a8d0 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 2a  select count(*)*
1a8e0 61 62 73 28 6d 69 6e 28 28 61 62 73 28 63 61 73  abs(min((abs(cas
1a8f0 65 20 28 61 62 73 28 63 29 2f 61 62 73 28 66 29  e (abs(c)/abs(f)
1a900 29 20 7c 20 65 20 77 68 65 6e 20 63 61 73 65 20  ) | e when case 
1a910 77 68 65 6e 20 31 39 3e 3d 64 20 74 68 65 6e 20  when 19>=d then 
1a920 31 33 20 77 68 65 6e 20 61 3d 66 20 74 68 65 6e  13 when a=f then
1a930 20 31 33 20 65 6c 73 65 20 66 20 65 6e 64 20 74   13 else f end t
1a940 68 65 6e 20 62 20 65 6c 73 65 20 61 20 65 6e 64  hen b else a end
1a950 2b 74 31 2e 61 29 2f 61 62 73 28 31 31 29 29 2a  +t1.a)/abs(11))*
1a960 74 31 2e 63 2a 31 37 29 29 2d 63 61 73 74 28 61  t1.c*17))-cast(a
1a970 76 67 28 65 29 20 41 53 20 69 6e 74 65 67 65 72  vg(e) AS integer
1a980 29 2a 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20  )*count(*) from 
1a990 74 31 29 29 29 2f 61 62 73 28 63 6f 61 6c 65 73  t1)))/abs(coales
1a9a0 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63  ce((select max(c
1a9b0 61 73 65 20 77 68 65 6e 20 74 31 2e 61 20 69 6e  ase when t1.a in
1a9c0 20 28 73 65 6c 65 63 74 20 74 31 2e 63 20 66 72   (select t1.c fr
1a9d0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
1a9e0 63 74 20 31 39 20 66 72 6f 6d 20 74 31 29 20 74  ct 19 from t1) t
1a9f0 68 65 6e 20 65 20 65 6c 73 65 20 74 31 2e 65 20  hen e else t1.e 
1aa00 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65  end) from t1 whe
1aa10 72 65 20 28 74 31 2e 61 3c 3d 20 2d 74 31 2e 65  re (t1.a<= -t1.e
1aa20 29 29 2c 31 37 29 2b 63 2a 31 33 29 29 29 20 46  )),17)+c*13))) F
1aa30 52 4f 4d 20 74 31 20 57 48 45 52 45 20 65 78 69  ROM t1 WHERE exi
1aa40 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
1aa50 6d 20 74 31 20 77 68 65 72 65 20 7e 63 6f 61 6c  m t1 where ~coal
1aa60 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
1aa70 28 63 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  (c) from t1 wher
1aa80 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
1aa90 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
1aaa0 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 63 61  case when not ca
1aab0 73 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  se coalesce((sel
1aac0 65 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63 65  ect max(coalesce
1aad0 28 28 73 65 6c 65 63 74 20 64 20 66 72 6f 6d 20  ((select d from 
1aae0 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
1aaf0 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
1ab00 20 77 68 65 72 65 20 61 3c 28 74 31 2e 63 29 29   where a<(t1.c))
1ab10 29 2c 31 39 29 29 20 66 72 6f 6d 20 74 31 20 77  ),19)) from t1 w
1ab20 68 65 72 65 20 65 3d 74 31 2e 65 29 2c 31 33 29  here e=t1.e),13)
1ab30 20 77 68 65 6e 20 74 31 2e 65 20 74 68 65 6e 20   when t1.e then 
1ab40 74 31 2e 62 20 65 6c 73 65 20 66 20 65 6e 64 20  t1.b else f end 
1ab50 69 6e 20 28 73 65 6c 65 63 74 20 61 62 73 28 28  in (select abs((
1ab60 6d 69 6e 28 65 29 29 2a 28 6d 61 78 28 74 31 2e  min(e))*(max(t1.
1ab70 64 29 29 2b 6d 69 6e 28 74 31 2e 65 29 2a 28 28  d))+min(t1.e)*((
1ab80 20 2d 28 28 6d 61 78 28 74 31 2e 61 29 29 29 29   -((max(t1.a))))
1ab90 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  )) from t1 union
1aba0 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69   select count(di
1abb0 73 74 69 6e 63 74 20 74 31 2e 61 29 20 66 72 6f  stinct t1.a) fro
1abc0 6d 20 74 31 29 20 74 68 65 6e 20 63 6f 61 6c 65  m t1) then coale
1abd0 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 63  sce((select t1.c
1abe0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
1abf0 31 2e 61 3c 20 2d 74 31 2e 63 20 61 6e 64 20 61  1.a< -t1.c and a
1ac00 20 69 6e 20 28 74 31 2e 62 2c 74 31 2e 66 2c 74   in (t1.b,t1.f,t
1ac10 31 2e 63 29 29 2c 31 37 29 20 65 6c 73 65 20 31  1.c)),17) else 1
1ac20 37 20 65 6e 64 3e 3d 74 31 2e 66 29 29 2c 74 31  7 end>=t1.f)),t1
1ac30 2e 66 29 2b 74 31 2e 61 2a 62 20 69 6e 20 28 73  .f)+t1.a*b in (s
1ac40 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 20  elect c from t1 
1ac50 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 31 39 20  union select 19 
1ac60 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 65 78 69  from t1)) or exi
1ac70 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
1ac80 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 74  m t1 where not t
1ac90 31 2e 66 20 6e 6f 74 20 69 6e 20 28 74 31 2e 66  1.f not in (t1.f
1aca0 2c 31 31 2c 74 31 2e 64 29 20 61 6e 64 20 31 39  ,11,t1.d) and 19
1acb0 3c 3d 31 39 29 7d 0a 7d 20 7b 32 33 7d 0a 64 6f  <=19)}.} {23}.do
1acc0 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
1acd0 2e 31 34 36 20 7b 0a 20 20 64 62 20 65 76 61 6c  .146 {.  db eval
1ace0 20 7b 53 45 4c 45 43 54 20 28 28 61 62 73 28 2b   {SELECT ((abs(+
1acf0 28 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a  ((select count(*
1ad00 29 2a 61 62 73 28 6d 69 6e 28 28 61 62 73 28 63  )*abs(min((abs(c
1ad10 61 73 65 20 28 61 62 73 28 63 29 2f 61 62 73 28  ase (abs(c)/abs(
1ad20 66 29 29 20 7c 20 65 20 77 68 65 6e 20 63 61 73  f)) | e when cas
1ad30 65 20 77 68 65 6e 20 31 39 3e 3d 64 20 74 68 65  e when 19>=d the
1ad40 6e 20 31 33 20 77 68 65 6e 20 61 3d 66 20 74 68  n 13 when a=f th
1ad50 65 6e 20 31 33 20 65 6c 73 65 20 66 20 65 6e 64  en 13 else f end
1ad60 20 74 68 65 6e 20 62 20 65 6c 73 65 20 61 20 65   then b else a e
1ad70 6e 64 2b 74 31 2e 61 29 2f 61 62 73 28 31 31 29  nd+t1.a)/abs(11)
1ad80 29 2a 74 31 2e 63 2a 31 37 29 29 2d 63 61 73 74  )*t1.c*17))-cast
1ad90 28 61 76 67 28 65 29 20 41 53 20 69 6e 74 65 67  (avg(e) AS integ
1ada0 65 72 29 2a 63 6f 75 6e 74 28 2a 29 20 66 72 6f  er)*count(*) fro
1adb0 6d 20 74 31 29 29 29 2f 61 62 73 28 63 6f 61 6c  m t1)))/abs(coal
1adc0 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
1add0 28 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61 20  (case when t1.a 
1ade0 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 63 20  in (select t1.c 
1adf0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
1ae00 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 29  lect 19 from t1)
1ae10 20 74 68 65 6e 20 65 20 65 6c 73 65 20 74 31 2e   then e else t1.
1ae20 65 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77  e end) from t1 w
1ae30 68 65 72 65 20 28 74 31 2e 61 3c 3d 20 2d 74 31  here (t1.a<= -t1
1ae40 2e 65 29 29 2c 31 37 29 2b 63 2a 31 33 29 29 29  .e)),17)+c*13)))
1ae50 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
1ae60 4f 54 20 28 65 78 69 73 74 73 28 73 65 6c 65 63  OT (exists(selec
1ae70 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
1ae80 65 20 7e 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  e ~coalesce((sel
1ae90 65 63 74 20 6d 61 78 28 63 29 20 66 72 6f 6d 20  ect max(c) from 
1aea0 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
1aeb0 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
1aec0 20 77 68 65 72 65 20 63 61 73 65 20 77 68 65 6e   where case when
1aed0 20 6e 6f 74 20 63 61 73 65 20 63 6f 61 6c 65 73   not case coales
1aee0 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63  ce((select max(c
1aef0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
1af00 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  d from t1 where 
1af10 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
1af20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 61 3c  from t1 where a<
1af30 28 74 31 2e 63 29 29 29 2c 31 39 29 29 20 66 72  (t1.c))),19)) fr
1af40 6f 6d 20 74 31 20 77 68 65 72 65 20 65 3d 74 31  om t1 where e=t1
1af50 2e 65 29 2c 31 33 29 20 77 68 65 6e 20 74 31 2e  .e),13) when t1.
1af60 65 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  e then t1.b else
1af70 20 66 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63   f end in (selec
1af80 74 20 61 62 73 28 28 6d 69 6e 28 65 29 29 2a 28  t abs((min(e))*(
1af90 6d 61 78 28 74 31 2e 64 29 29 2b 6d 69 6e 28 74  max(t1.d))+min(t
1afa0 31 2e 65 29 2a 28 28 20 2d 28 28 6d 61 78 28 74  1.e)*(( -((max(t
1afb0 31 2e 61 29 29 29 29 29 29 20 66 72 6f 6d 20 74  1.a)))))) from t
1afc0 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63  1 union select c
1afd0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
1afe0 2e 61 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65  .a) from t1) the
1aff0 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  n coalesce((sele
1b000 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20  ct t1.c from t1 
1b010 77 68 65 72 65 20 74 31 2e 61 3c 20 2d 74 31 2e  where t1.a< -t1.
1b020 63 20 61 6e 64 20 61 20 69 6e 20 28 74 31 2e 62  c and a in (t1.b
1b030 2c 74 31 2e 66 2c 74 31 2e 63 29 29 2c 31 37 29  ,t1.f,t1.c)),17)
1b040 20 65 6c 73 65 20 31 37 20 65 6e 64 3e 3d 74 31   else 17 end>=t1
1b050 2e 66 29 29 2c 74 31 2e 66 29 2b 74 31 2e 61 2a  .f)),t1.f)+t1.a*
1b060 62 20 69 6e 20 28 73 65 6c 65 63 74 20 63 20 66  b in (select c f
1b070 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1b080 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 29 29  ect 19 from t1))
1b090 20 6f 72 20 65 78 69 73 74 73 28 73 65 6c 65 63   or exists(selec
1b0a0 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
1b0b0 65 20 6e 6f 74 20 74 31 2e 66 20 6e 6f 74 20 69  e not t1.f not i
1b0c0 6e 20 28 74 31 2e 66 2c 31 31 2c 74 31 2e 64 29  n (t1.f,11,t1.d)
1b0d0 20 61 6e 64 20 31 39 3c 3d 31 39 29 29 7d 0a 7d   and 19<=19))}.}
1b0e0 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64   {}.do_test rand
1b0f0 65 78 70 72 2d 32 2e 31 34 37 20 7b 0a 20 20 64  expr-2.147 {.  d
1b100 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28  b eval {SELECT (
1b110 28 61 62 73 28 2b 28 28 73 65 6c 65 63 74 20 63  (abs(+((select c
1b120 6f 75 6e 74 28 2a 29 2a 61 62 73 28 6d 69 6e 28  ount(*)*abs(min(
1b130 28 61 62 73 28 63 61 73 65 20 28 61 62 73 28 63  (abs(case (abs(c
1b140 29 2f 61 62 73 28 66 29 29 20 26 20 65 20 77 68  )/abs(f)) & e wh
1b150 65 6e 20 63 61 73 65 20 77 68 65 6e 20 31 39 3e  en case when 19>
1b160 3d 64 20 74 68 65 6e 20 31 33 20 77 68 65 6e 20  =d then 13 when 
1b170 61 3d 66 20 74 68 65 6e 20 31 33 20 65 6c 73 65  a=f then 13 else
1b180 20 66 20 65 6e 64 20 74 68 65 6e 20 62 20 65 6c   f end then b el
1b190 73 65 20 61 20 65 6e 64 2b 74 31 2e 61 29 2f 61  se a end+t1.a)/a
1b1a0 62 73 28 31 31 29 29 2a 74 31 2e 63 2a 31 37 29  bs(11))*t1.c*17)
1b1b0 29 2d 63 61 73 74 28 61 76 67 28 65 29 20 41 53  )-cast(avg(e) AS
1b1c0 20 69 6e 74 65 67 65 72 29 2a 63 6f 75 6e 74 28   integer)*count(
1b1d0 2a 29 20 66 72 6f 6d 20 74 31 29 29 29 2f 61 62  *) from t1)))/ab
1b1e0 73 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  s(coalesce((sele
1b1f0 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
1b200 20 74 31 2e 61 20 69 6e 20 28 73 65 6c 65 63 74   t1.a in (select
1b210 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20 75 6e   t1.c from t1 un
1b220 69 6f 6e 20 73 65 6c 65 63 74 20 31 39 20 66 72  ion select 19 fr
1b230 6f 6d 20 74 31 29 20 74 68 65 6e 20 65 20 65 6c  om t1) then e el
1b240 73 65 20 74 31 2e 65 20 65 6e 64 29 20 66 72 6f  se t1.e end) fro
1b250 6d 20 74 31 20 77 68 65 72 65 20 28 74 31 2e 61  m t1 where (t1.a
1b260 3c 3d 20 2d 74 31 2e 65 29 29 2c 31 37 29 2b 63  <= -t1.e)),17)+c
1b270 2a 31 33 29 29 29 20 46 52 4f 4d 20 74 31 20 57  *13))) FROM t1 W
1b280 48 45 52 45 20 65 78 69 73 74 73 28 73 65 6c 65  HERE exists(sele
1b290 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
1b2a0 72 65 20 7e 63 6f 61 6c 65 73 63 65 28 28 73 65  re ~coalesce((se
1b2b0 6c 65 63 74 20 6d 61 78 28 63 29 20 66 72 6f 6d  lect max(c) from
1b2c0 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73   t1 where exists
1b2d0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
1b2e0 31 20 77 68 65 72 65 20 63 61 73 65 20 77 68 65  1 where case whe
1b2f0 6e 20 6e 6f 74 20 63 61 73 65 20 63 6f 61 6c 65  n not case coale
1b300 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
1b310 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1b320 20 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   d from t1 where
1b330 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
1b340 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 61   from t1 where a
1b350 3c 28 74 31 2e 63 29 29 29 2c 31 39 29 29 20 66  <(t1.c))),19)) f
1b360 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 3d 74  rom t1 where e=t
1b370 31 2e 65 29 2c 31 33 29 20 77 68 65 6e 20 74 31  1.e),13) when t1
1b380 2e 65 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73  .e then t1.b els
1b390 65 20 66 20 65 6e 64 20 69 6e 20 28 73 65 6c 65  e f end in (sele
1b3a0 63 74 20 61 62 73 28 28 6d 69 6e 28 65 29 29 2a  ct abs((min(e))*
1b3b0 28 6d 61 78 28 74 31 2e 64 29 29 2b 6d 69 6e 28  (max(t1.d))+min(
1b3c0 74 31 2e 65 29 2a 28 28 20 2d 28 28 6d 61 78 28  t1.e)*(( -((max(
1b3d0 74 31 2e 61 29 29 29 29 29 29 20 66 72 6f 6d 20  t1.a)))))) from 
1b3e0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
1b3f0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
1b400 31 2e 61 29 20 66 72 6f 6d 20 74 31 29 20 74 68  1.a) from t1) th
1b410 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
1b420 65 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31  ect t1.c from t1
1b430 20 77 68 65 72 65 20 74 31 2e 61 3c 20 2d 74 31   where t1.a< -t1
1b440 2e 63 20 61 6e 64 20 61 20 69 6e 20 28 74 31 2e  .c and a in (t1.
1b450 62 2c 74 31 2e 66 2c 74 31 2e 63 29 29 2c 31 37  b,t1.f,t1.c)),17
1b460 29 20 65 6c 73 65 20 31 37 20 65 6e 64 3e 3d 74  ) else 17 end>=t
1b470 31 2e 66 29 29 2c 74 31 2e 66 29 2b 74 31 2e 61  1.f)),t1.f)+t1.a
1b480 2a 62 20 69 6e 20 28 73 65 6c 65 63 74 20 63 20  *b in (select c 
1b490 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
1b4a0 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 29  lect 19 from t1)
1b4b0 29 20 6f 72 20 65 78 69 73 74 73 28 73 65 6c 65  ) or exists(sele
1b4c0 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
1b4d0 72 65 20 6e 6f 74 20 74 31 2e 66 20 6e 6f 74 20  re not t1.f not 
1b4e0 69 6e 20 28 74 31 2e 66 2c 31 31 2c 74 31 2e 64  in (t1.f,11,t1.d
1b4f0 29 20 61 6e 64 20 31 39 3c 3d 31 39 29 7d 0a 7d  ) and 19<=19)}.}
1b500 20 7b 32 33 7d 0a 64 6f 5f 74 65 73 74 20 72 61   {23}.do_test ra
1b510 6e 64 65 78 70 72 2d 32 2e 31 34 38 20 7b 0a 20  ndexpr-2.148 {. 
1b520 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
1b530 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
1b540 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20  t max(case when 
1b550 74 31 2e 66 20 62 65 74 77 65 65 6e 20 31 37 20  t1.f between 17 
1b560 61 6e 64 20 31 31 2b 63 61 73 65 20 77 68 65 6e  and 11+case when
1b570 20 6e 6f 74 20 63 6f 61 6c 65 73 63 65 28 28 73   not coalesce((s
1b580 65 6c 65 63 74 20 6d 61 78 28 31 31 29 20 66 72  elect max(11) fr
1b590 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66  om t1 where t1.f
1b5a0 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 61 78 28   in (select max(
1b5b0 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.d) from t1 un
1b5c0 69 6f 6e 20 73 65 6c 65 63 74 20 20 2d 63 6f 75  ion select  -cou
1b5d0 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 20 6f  nt(*) from t1) o
1b5e0 72 20 31 37 3d 28 31 33 29 20 6f 72 20 66 20 69  r 17=(13) or f i
1b5f0 6e 20 28 28 20 2d 74 31 2e 62 29 2c 31 33 2c 61  n (( -t1.b),13,a
1b600 29 29 2c 63 61 73 65 20 77 68 65 6e 20 64 3e 31  )),case when d>1
1b610 33 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20 31  3 then 13 else 1
1b620 31 20 65 6e 64 29 20 62 65 74 77 65 65 6e 20 31  1 end) between 1
1b630 39 20 61 6e 64 20 31 39 20 74 68 65 6e 20 31 39  9 and 19 then 19
1b640 20 77 68 65 6e 20 74 31 2e 63 3d 64 20 74 68 65   when t1.c=d the
1b650 6e 20 65 20 65 6c 73 65 20 31 37 20 65 6e 64 20  n e else 17 end 
1b660 74 68 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 74  then t1.e else t
1b670 31 2e 64 20 65 6e 64 29 20 66 72 6f 6d 20 74 31  1.d end) from t1
1b680 20 77 68 65 72 65 20 65 20 69 6e 20 28 73 65 6c   where e in (sel
1b690 65 63 74 20 20 2d 28 2b 6d 61 78 28 31 31 29 2d  ect  -(+max(11)-
1b6a0 6d 61 78 28 28 74 31 2e 61 29 29 2b 20 2d 63 6f  max((t1.a))+ -co
1b6b0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 64 29 20  unt(distinct d) 
1b6c0 7c 20 63 61 73 74 28 61 76 67 28 74 31 2e 61 29  | cast(avg(t1.a)
1b6d0 20 41 53 20 69 6e 74 65 67 65 72 29 2a 63 6f 75   AS integer)*cou
1b6e0 6e 74 28 64 69 73 74 69 6e 63 74 20 62 29 29 2d  nt(distinct b))-
1b6f0 63 6f 75 6e 74 28 2a 29 2a 20 2d 63 6f 75 6e 74  count(*)* -count
1b700 28 64 69 73 74 69 6e 63 74 20 74 31 2e 65 29 20  (distinct t1.e) 
1b710 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
1b720 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 64 29  lect cast(avg(d)
1b730 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
1b740 6d 20 74 31 29 29 2c 64 29 2b 62 20 46 52 4f 4d  m t1)),d)+b FROM
1b750 20 74 31 20 57 48 45 52 45 20 28 73 65 6c 65 63   t1 WHERE (selec
1b760 74 20 2b 7e 61 62 73 28 20 2d 6d 69 6e 28 74 31  t +~abs( -min(t1
1b770 2e 61 29 2d 61 62 73 28 63 6f 75 6e 74 28 2a 29  .a)-abs(count(*)
1b780 29 29 2b 20 2d 61 62 73 28 2b 20 2d 2b 63 61 73  ))+ -abs(+ -+cas
1b790 65 20 28 63 61 73 74 28 61 76 67 28 61 29 20 41  e (cast(avg(a) A
1b7a0 53 20 69 6e 74 65 67 65 72 29 29 20 77 68 65 6e  S integer)) when
1b7b0 20 6d 69 6e 28 65 2b 74 31 2e 64 29 20 74 68 65   min(e+t1.d) the
1b7c0 6e 20 2b 63 61 73 65 20 63 61 73 74 28 61 76 67  n +case cast(avg
1b7d0 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
1b7e0 74 20 6d 61 78 28 74 31 2e 66 2b 20 2d 74 31 2e  t max(t1.f+ -t1.
1b7f0 65 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  e) from t1 where
1b800 20 74 31 2e 63 20 62 65 74 77 65 65 6e 20 31 33   t1.c between 13
1b810 20 61 6e 64 20 74 31 2e 62 29 2c 31 39 29 29 20   and t1.b),19)) 
1b820 41 53 20 69 6e 74 65 67 65 72 29 20 77 68 65 6e  AS integer) when
1b830 20 7e 7e 6d 69 6e 28 74 31 2e 66 29 20 74 68 65   ~~min(t1.f) the
1b840 6e 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  n count(distinct
1b850 20 31 33 29 20 65 6c 73 65 20 63 61 73 74 28 61   13) else cast(a
1b860 76 67 28 74 31 2e 62 29 20 41 53 20 69 6e 74 65  vg(t1.b) AS inte
1b870 67 65 72 29 20 65 6e 64 2b 63 6f 75 6e 74 28 64  ger) end+count(d
1b880 69 73 74 69 6e 63 74 20 74 31 2e 65 29 20 65 6c  istinct t1.e) el
1b890 73 65 20 20 2d 63 6f 75 6e 74 28 2a 29 20 65 6e  se  -count(*) en
1b8a0 64 20 7c 20 6d 61 78 28 61 29 2b 6d 61 78 28 74  d | max(a)+max(t
1b8b0 31 2e 65 29 29 20 66 72 6f 6d 20 74 31 29 2b 65  1.e)) from t1)+e
1b8c0 3c 61 7d 0a 7d 20 7b 36 30 30 7d 0a 64 6f 5f 74  <a}.} {600}.do_t
1b8d0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
1b8e0 34 39 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  49 {.  db eval {
1b8f0 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28  SELECT coalesce(
1b900 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65  (select max(case
1b910 20 77 68 65 6e 20 74 31 2e 66 20 62 65 74 77 65   when t1.f betwe
1b920 65 6e 20 31 37 20 61 6e 64 20 31 31 2b 63 61 73  en 17 and 11+cas
1b930 65 20 77 68 65 6e 20 6e 6f 74 20 63 6f 61 6c 65  e when not coale
1b940 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
1b950 31 31 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  11) from t1 wher
1b960 65 20 74 31 2e 66 20 69 6e 20 28 73 65 6c 65 63  e t1.f in (selec
1b970 74 20 6d 61 78 28 74 31 2e 64 29 20 66 72 6f 6d  t max(t1.d) from
1b980 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
1b990 20 20 2d 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d    -count(*) from
1b9a0 20 74 31 29 20 6f 72 20 31 37 3d 28 31 33 29 20   t1) or 17=(13) 
1b9b0 6f 72 20 66 20 69 6e 20 28 28 20 2d 74 31 2e 62  or f in (( -t1.b
1b9c0 29 2c 31 33 2c 61 29 29 2c 63 61 73 65 20 77 68  ),13,a)),case wh
1b9d0 65 6e 20 64 3e 31 33 20 74 68 65 6e 20 31 33 20  en d>13 then 13 
1b9e0 65 6c 73 65 20 31 31 20 65 6e 64 29 20 62 65 74  else 11 end) bet
1b9f0 77 65 65 6e 20 31 39 20 61 6e 64 20 31 39 20 74  ween 19 and 19 t
1ba00 68 65 6e 20 31 39 20 77 68 65 6e 20 74 31 2e 63  hen 19 when t1.c
1ba10 3d 64 20 74 68 65 6e 20 65 20 65 6c 73 65 20 31  =d then e else 1
1ba20 37 20 65 6e 64 20 74 68 65 6e 20 74 31 2e 65 20  7 end then t1.e 
1ba30 65 6c 73 65 20 74 31 2e 64 20 65 6e 64 29 20 66  else t1.d end) f
1ba40 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 20 69  rom t1 where e i
1ba50 6e 20 28 73 65 6c 65 63 74 20 20 2d 28 2b 6d 61  n (select  -(+ma
1ba60 78 28 31 31 29 2d 6d 61 78 28 28 74 31 2e 61 29  x(11)-max((t1.a)
1ba70 29 2b 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e  )+ -count(distin
1ba80 63 74 20 64 29 20 7c 20 63 61 73 74 28 61 76 67  ct d) | cast(avg
1ba90 28 74 31 2e 61 29 20 41 53 20 69 6e 74 65 67 65  (t1.a) AS intege
1baa0 72 29 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  r)*count(distinc
1bab0 74 20 62 29 29 2d 63 6f 75 6e 74 28 2a 29 2a 20  t b))-count(*)* 
1bac0 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
1bad0 74 31 2e 65 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.e) from t1 un
1bae0 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 74 28  ion select cast(
1baf0 61 76 67 28 64 29 20 41 53 20 69 6e 74 65 67 65  avg(d) AS intege
1bb00 72 29 20 66 72 6f 6d 20 74 31 29 29 2c 64 29 2b  r) from t1)),d)+
1bb10 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
1bb20 4e 4f 54 20 28 28 73 65 6c 65 63 74 20 2b 7e 61  NOT ((select +~a
1bb30 62 73 28 20 2d 6d 69 6e 28 74 31 2e 61 29 2d 61  bs( -min(t1.a)-a
1bb40 62 73 28 63 6f 75 6e 74 28 2a 29 29 29 2b 20 2d  bs(count(*)))+ -
1bb50 61 62 73 28 2b 20 2d 2b 63 61 73 65 20 28 63 61  abs(+ -+case (ca
1bb60 73 74 28 61 76 67 28 61 29 20 41 53 20 69 6e 74  st(avg(a) AS int
1bb70 65 67 65 72 29 29 20 77 68 65 6e 20 6d 69 6e 28  eger)) when min(
1bb80 65 2b 74 31 2e 64 29 20 74 68 65 6e 20 2b 63 61  e+t1.d) then +ca
1bb90 73 65 20 63 61 73 74 28 61 76 67 28 63 6f 61 6c  se cast(avg(coal
1bba0 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
1bbb0 28 74 31 2e 66 2b 20 2d 74 31 2e 65 29 20 66 72  (t1.f+ -t1.e) fr
1bbc0 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 63  om t1 where t1.c
1bbd0 20 62 65 74 77 65 65 6e 20 31 33 20 61 6e 64 20   between 13 and 
1bbe0 74 31 2e 62 29 2c 31 39 29 29 20 41 53 20 69 6e  t1.b),19)) AS in
1bbf0 74 65 67 65 72 29 20 77 68 65 6e 20 7e 7e 6d 69  teger) when ~~mi
1bc00 6e 28 74 31 2e 66 29 20 74 68 65 6e 20 63 6f 75  n(t1.f) then cou
1bc10 6e 74 28 64 69 73 74 69 6e 63 74 20 31 33 29 20  nt(distinct 13) 
1bc20 65 6c 73 65 20 63 61 73 74 28 61 76 67 28 74 31  else cast(avg(t1
1bc30 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .b) AS integer) 
1bc40 65 6e 64 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e  end+count(distin
1bc50 63 74 20 74 31 2e 65 29 20 65 6c 73 65 20 20 2d  ct t1.e) else  -
1bc60 63 6f 75 6e 74 28 2a 29 20 65 6e 64 20 7c 20 6d  count(*) end | m
1bc70 61 78 28 61 29 2b 6d 61 78 28 74 31 2e 65 29 29  ax(a)+max(t1.e))
1bc80 20 66 72 6f 6d 20 74 31 29 2b 65 3c 61 29 7d 0a   from t1)+e<a)}.
1bc90 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  } {}.do_test ran
1bca0 64 65 78 70 72 2d 32 2e 31 35 30 20 7b 0a 20 20  dexpr-2.150 {.  
1bcb0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
1bcc0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1bcd0 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20 74   max(case when t
1bce0 31 2e 66 20 62 65 74 77 65 65 6e 20 31 37 20 61  1.f between 17 a
1bcf0 6e 64 20 31 31 2b 63 61 73 65 20 77 68 65 6e 20  nd 11+case when 
1bd00 6e 6f 74 20 63 6f 61 6c 65 73 63 65 28 28 73 65  not coalesce((se
1bd10 6c 65 63 74 20 6d 61 78 28 31 31 29 20 66 72 6f  lect max(11) fro
1bd20 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66 20  m t1 where t1.f 
1bd30 69 6e 20 28 73 65 6c 65 63 74 20 6d 61 78 28 74  in (select max(t
1bd40 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  1.d) from t1 uni
1bd50 6f 6e 20 73 65 6c 65 63 74 20 20 2d 63 6f 75 6e  on select  -coun
1bd60 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 20 6f 72  t(*) from t1) or
1bd70 20 31 37 3d 28 31 33 29 20 6f 72 20 66 20 69 6e   17=(13) or f in
1bd80 20 28 28 20 2d 74 31 2e 62 29 2c 31 33 2c 61 29   (( -t1.b),13,a)
1bd90 29 2c 63 61 73 65 20 77 68 65 6e 20 64 3e 31 33  ),case when d>13
1bda0 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20 31 31   then 13 else 11
1bdb0 20 65 6e 64 29 20 62 65 74 77 65 65 6e 20 31 39   end) between 19
1bdc0 20 61 6e 64 20 31 39 20 74 68 65 6e 20 31 39 20   and 19 then 19 
1bdd0 77 68 65 6e 20 74 31 2e 63 3d 64 20 74 68 65 6e  when t1.c=d then
1bde0 20 65 20 65 6c 73 65 20 31 37 20 65 6e 64 20 74   e else 17 end t
1bdf0 68 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 74 31  hen t1.e else t1
1be00 2e 64 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20  .d end) from t1 
1be10 77 68 65 72 65 20 65 20 69 6e 20 28 73 65 6c 65  where e in (sele
1be20 63 74 20 20 2d 28 2b 6d 61 78 28 31 31 29 2d 6d  ct  -(+max(11)-m
1be30 61 78 28 28 74 31 2e 61 29 29 2b 20 2d 63 6f 75  ax((t1.a))+ -cou
1be40 6e 74 28 64 69 73 74 69 6e 63 74 20 64 29 20 26  nt(distinct d) &
1be50 20 63 61 73 74 28 61 76 67 28 74 31 2e 61 29 20   cast(avg(t1.a) 
1be60 41 53 20 69 6e 74 65 67 65 72 29 2a 63 6f 75 6e  AS integer)*coun
1be70 74 28 64 69 73 74 69 6e 63 74 20 62 29 29 2d 63  t(distinct b))-c
1be80 6f 75 6e 74 28 2a 29 2a 20 2d 63 6f 75 6e 74 28  ount(*)* -count(
1be90 64 69 73 74 69 6e 63 74 20 74 31 2e 65 29 20 66  distinct t1.e) f
1bea0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1beb0 65 63 74 20 63 61 73 74 28 61 76 67 28 64 29 20  ect cast(avg(d) 
1bec0 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
1bed0 20 74 31 29 29 2c 64 29 2b 62 20 46 52 4f 4d 20   t1)),d)+b FROM 
1bee0 74 31 20 57 48 45 52 45 20 28 73 65 6c 65 63 74  t1 WHERE (select
1bef0 20 2b 7e 61 62 73 28 20 2d 6d 69 6e 28 74 31 2e   +~abs( -min(t1.
1bf00 61 29 2d 61 62 73 28 63 6f 75 6e 74 28 2a 29 29  a)-abs(count(*))
1bf10 29 2b 20 2d 61 62 73 28 2b 20 2d 2b 63 61 73 65  )+ -abs(+ -+case
1bf20 20 28 63 61 73 74 28 61 76 67 28 61 29 20 41 53   (cast(avg(a) AS
1bf30 20 69 6e 74 65 67 65 72 29 29 20 77 68 65 6e 20   integer)) when 
1bf40 6d 69 6e 28 65 2b 74 31 2e 64 29 20 74 68 65 6e  min(e+t1.d) then
1bf50 20 2b 63 61 73 65 20 63 61 73 74 28 61 76 67 28   +case cast(avg(
1bf60 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1bf70 20 6d 61 78 28 74 31 2e 66 2b 20 2d 74 31 2e 65   max(t1.f+ -t1.e
1bf80 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
1bf90 74 31 2e 63 20 62 65 74 77 65 65 6e 20 31 33 20  t1.c between 13 
1bfa0 61 6e 64 20 74 31 2e 62 29 2c 31 39 29 29 20 41  and t1.b),19)) A
1bfb0 53 20 69 6e 74 65 67 65 72 29 20 77 68 65 6e 20  S integer) when 
1bfc0 7e 7e 6d 69 6e 28 74 31 2e 66 29 20 74 68 65 6e  ~~min(t1.f) then
1bfd0 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
1bfe0 31 33 29 20 65 6c 73 65 20 63 61 73 74 28 61 76  13) else cast(av
1bff0 67 28 74 31 2e 62 29 20 41 53 20 69 6e 74 65 67  g(t1.b) AS integ
1c000 65 72 29 20 65 6e 64 2b 63 6f 75 6e 74 28 64 69  er) end+count(di
1c010 73 74 69 6e 63 74 20 74 31 2e 65 29 20 65 6c 73  stinct t1.e) els
1c020 65 20 20 2d 63 6f 75 6e 74 28 2a 29 20 65 6e 64  e  -count(*) end
1c030 20 7c 20 6d 61 78 28 61 29 2b 6d 61 78 28 74 31   | max(a)+max(t1
1c040 2e 65 29 29 20 66 72 6f 6d 20 74 31 29 2b 65 3c  .e)) from t1)+e<
1c050 61 7d 0a 7d 20 7b 36 30 30 7d 0a 64 6f 5f 74 65  a}.} {600}.do_te
1c060 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 35  st randexpr-2.15
1c070 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  1 {.  db eval {S
1c080 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20  ELECT case when 
1c090 28 28 2b 62 20 69 6e 20 28 73 65 6c 65 63 74 20  ((+b in (select 
1c0a0 6d 69 6e 28 63 6f 61 6c 65 73 63 65 28 28 73 65  min(coalesce((se
1c0b0 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 20 77  lect c from t1 w
1c0c0 68 65 72 65 20 74 31 2e 62 2d 74 31 2e 63 2b 63  here t1.b-t1.c+c
1c0d0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
1c0e0 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20 31 33  max(case when 13
1c0f0 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d 63 6f   in (select  -co
1c100 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62 29 2a  unt(distinct b)*
1c110 6d 61 78 28 63 29 20 66 72 6f 6d 20 74 31 20 75  max(c) from t1 u
1c120 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 28 20 2d  nion select (( -
1c130 20 2d 63 61 73 74 28 61 76 67 28 64 29 20 41 53   -cast(avg(d) AS
1c140 20 69 6e 74 65 67 65 72 29 29 29 20 66 72 6f 6d   integer))) from
1c150 20 74 31 29 20 74 68 65 6e 20 62 20 65 6c 73 65   t1) then b else
1c160 20 74 31 2e 66 20 65 6e 64 29 20 66 72 6f 6d 20   t1.f end) from 
1c170 74 31 20 77 68 65 72 65 20 74 31 2e 66 3c 74 31  t1 where t1.f<t1
1c180 2e 65 29 2c 31 33 29 20 62 65 74 77 65 65 6e 20  .e),13) between 
1c190 28 62 29 20 61 6e 64 20 20 2d 74 31 2e 62 29 2c  (b) and  -t1.b),
1c1a0 20 2d 65 29 29 20 66 72 6f 6d 20 74 31 20 75 6e   -e)) from t1 un
1c1b0 69 6f 6e 20 73 65 6c 65 63 74 20 2b 28 20 2d 63  ion select +( -c
1c1c0 61 73 65 20 20 2d 61 62 73 28 28 20 2d 63 6f 75  ase  -abs(( -cou
1c1d0 6e 74 28 2a 29 29 29 20 7c 20 63 6f 75 6e 74 28  nt(*))) | count(
1c1e0 64 69 73 74 69 6e 63 74 20 64 29 20 77 68 65 6e  distinct d) when
1c1f0 20 6d 61 78 28 31 37 29 20 74 68 65 6e 20 6d 61   max(17) then ma
1c200 78 28 31 33 29 20 65 6c 73 65 20 20 2d 28 6d 69  x(13) else  -(mi
1c210 6e 28 31 33 29 29 20 65 6e 64 29 20 7c 20 28 63  n(13)) end) | (c
1c220 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
1c230 2e 61 29 29 20 66 72 6f 6d 20 74 31 29 29 29 20  .a)) from t1))) 
1c240 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 63  then t1.f else c
1c250 61 73 65 20 63 20 77 68 65 6e 20 74 31 2e 64 20  ase c when t1.d 
1c260 74 68 65 6e 20 65 20 65 6c 73 65 20 31 31 20 65  then e else 11 e
1c270 6e 64 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57  nd end FROM t1 W
1c280 48 45 52 45 20 74 31 2e 61 2b 63 61 73 65 20 74  HERE t1.a+case t
1c290 31 2e 63 20 77 68 65 6e 20 63 61 73 65 20 63 20  1.c when case c 
1c2a0 77 68 65 6e 20 31 33 20 74 68 65 6e 20 74 31 2e  when 13 then t1.
1c2b0 66 2a 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  f*(select count(
1c2c0 2a 29 20 7c 20 63 61 73 74 28 61 76 67 28 61 29  *) | cast(avg(a)
1c2d0 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
1c2e0 6d 20 74 31 29 2b 31 33 2a 74 31 2e 61 20 65 6c  m t1)+13*t1.a el
1c2f0 73 65 20 28 73 65 6c 65 63 74 20 61 62 73 28 20  se (select abs( 
1c300 2d 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d 20  -count(*)) from 
1c310 74 31 29 20 65 6e 64 20 74 68 65 6e 20 62 20 65  t1) end then b e
1c320 6c 73 65 20 74 31 2e 63 20 65 6e 64 20 69 6e 20  lse t1.c end in 
1c330 28 74 31 2e 61 2c 64 2c 31 37 29 20 6f 72 20 20  (t1.a,d,17) or  
1c340 2d 28 73 65 6c 65 63 74 20 7e 20 2d 6d 61 78 28  -(select ~ -max(
1c350 63 29 20 66 72 6f 6d 20 74 31 29 2b 31 37 3c 3e  c) from t1)+17<>
1c360 64 20 6f 72 20 74 31 2e 61 20 6e 6f 74 20 62 65  d or t1.a not be
1c370 74 77 65 65 6e 20 62 20 61 6e 64 20 31 33 20 6f  tween b and 13 o
1c380 72 20 66 3c 3e 20 2d 31 39 20 61 6e 64 20 74 31  r f<> -19 and t1
1c390 2e 62 3e 61 7d 0a 7d 20 7b 31 31 7d 0a 64 6f 5f  .b>a}.} {11}.do_
1c3a0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
1c3b0 31 35 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  152 {.  db eval 
1c3c0 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65  {SELECT case whe
1c3d0 6e 20 28 28 2b 62 20 69 6e 20 28 73 65 6c 65 63  n ((+b in (selec
1c3e0 74 20 6d 69 6e 28 63 6f 61 6c 65 73 63 65 28 28  t min(coalesce((
1c3f0 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31  select c from t1
1c400 20 77 68 65 72 65 20 74 31 2e 62 2d 74 31 2e 63   where t1.b-t1.c
1c410 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  +coalesce((selec
1c420 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20  t max(case when 
1c430 31 33 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d  13 in (select  -
1c440 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62  count(distinct b
1c450 29 2a 6d 61 78 28 63 29 20 66 72 6f 6d 20 74 31  )*max(c) from t1
1c460 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 28   union select ((
1c470 20 2d 20 2d 63 61 73 74 28 61 76 67 28 64 29 20   - -cast(avg(d) 
1c480 41 53 20 69 6e 74 65 67 65 72 29 29 29 20 66 72  AS integer))) fr
1c490 6f 6d 20 74 31 29 20 74 68 65 6e 20 62 20 65 6c  om t1) then b el
1c4a0 73 65 20 74 31 2e 66 20 65 6e 64 29 20 66 72 6f  se t1.f end) fro
1c4b0 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66 3c  m t1 where t1.f<
1c4c0 74 31 2e 65 29 2c 31 33 29 20 62 65 74 77 65 65  t1.e),13) betwee
1c4d0 6e 20 28 62 29 20 61 6e 64 20 20 2d 74 31 2e 62  n (b) and  -t1.b
1c4e0 29 2c 20 2d 65 29 29 20 66 72 6f 6d 20 74 31 20  ), -e)) from t1 
1c4f0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 2b 28 20  union select +( 
1c500 2d 63 61 73 65 20 20 2d 61 62 73 28 28 20 2d 63  -case  -abs(( -c
1c510 6f 75 6e 74 28 2a 29 29 29 20 7c 20 63 6f 75 6e  ount(*))) | coun
1c520 74 28 64 69 73 74 69 6e 63 74 20 64 29 20 77 68  t(distinct d) wh
1c530 65 6e 20 6d 61 78 28 31 37 29 20 74 68 65 6e 20  en max(17) then 
1c540 6d 61 78 28 31 33 29 20 65 6c 73 65 20 20 2d 28  max(13) else  -(
1c550 6d 69 6e 28 31 33 29 29 20 65 6e 64 29 20 7c 20  min(13)) end) | 
1c560 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  (count(distinct 
1c570 74 31 2e 61 29 29 20 66 72 6f 6d 20 74 31 29 29  t1.a)) from t1))
1c580 29 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65  ) then t1.f else
1c590 20 63 61 73 65 20 63 20 77 68 65 6e 20 74 31 2e   case c when t1.
1c5a0 64 20 74 68 65 6e 20 65 20 65 6c 73 65 20 31 31  d then e else 11
1c5b0 20 65 6e 64 20 65 6e 64 20 46 52 4f 4d 20 74 31   end end FROM t1
1c5c0 20 57 48 45 52 45 20 4e 4f 54 20 28 74 31 2e 61   WHERE NOT (t1.a
1c5d0 2b 63 61 73 65 20 74 31 2e 63 20 77 68 65 6e 20  +case t1.c when 
1c5e0 63 61 73 65 20 63 20 77 68 65 6e 20 31 33 20 74  case c when 13 t
1c5f0 68 65 6e 20 74 31 2e 66 2a 28 73 65 6c 65 63 74  hen t1.f*(select
1c600 20 63 6f 75 6e 74 28 2a 29 20 7c 20 63 61 73 74   count(*) | cast
1c610 28 61 76 67 28 61 29 20 41 53 20 69 6e 74 65 67  (avg(a) AS integ
1c620 65 72 29 20 66 72 6f 6d 20 74 31 29 2b 31 33 2a  er) from t1)+13*
1c630 74 31 2e 61 20 65 6c 73 65 20 28 73 65 6c 65 63  t1.a else (selec
1c640 74 20 61 62 73 28 20 2d 63 6f 75 6e 74 28 2a 29  t abs( -count(*)
1c650 29 20 66 72 6f 6d 20 74 31 29 20 65 6e 64 20 74  ) from t1) end t
1c660 68 65 6e 20 62 20 65 6c 73 65 20 74 31 2e 63 20  hen b else t1.c 
1c670 65 6e 64 20 69 6e 20 28 74 31 2e 61 2c 64 2c 31  end in (t1.a,d,1
1c680 37 29 20 6f 72 20 20 2d 28 73 65 6c 65 63 74 20  7) or  -(select 
1c690 7e 20 2d 6d 61 78 28 63 29 20 66 72 6f 6d 20 74  ~ -max(c) from t
1c6a0 31 29 2b 31 37 3c 3e 64 20 6f 72 20 74 31 2e 61  1)+17<>d or t1.a
1c6b0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 62 20 61   not between b a
1c6c0 6e 64 20 31 33 20 6f 72 20 66 3c 3e 20 2d 31 39  nd 13 or f<> -19
1c6d0 20 61 6e 64 20 74 31 2e 62 3e 61 29 7d 0a 7d 20   and t1.b>a)}.} 
1c6e0 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
1c6f0 78 70 72 2d 32 2e 31 35 33 20 7b 0a 20 20 64 62  xpr-2.153 {.  db
1c700 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61   eval {SELECT ca
1c710 73 65 20 77 68 65 6e 20 28 28 2b 62 20 69 6e 20  se when ((+b in 
1c720 28 73 65 6c 65 63 74 20 6d 69 6e 28 63 6f 61 6c  (select min(coal
1c730 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 20 66  esce((select c f
1c740 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
1c750 62 2d 74 31 2e 63 2b 63 6f 61 6c 65 73 63 65 28  b-t1.c+coalesce(
1c760 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65  (select max(case
1c770 20 77 68 65 6e 20 31 33 20 69 6e 20 28 73 65 6c   when 13 in (sel
1c780 65 63 74 20 20 2d 63 6f 75 6e 74 28 64 69 73 74  ect  -count(dist
1c790 69 6e 63 74 20 62 29 2a 6d 61 78 28 63 29 20 66  inct b)*max(c) f
1c7a0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1c7b0 65 63 74 20 28 28 20 2d 20 2d 63 61 73 74 28 61  ect (( - -cast(a
1c7c0 76 67 28 64 29 20 41 53 20 69 6e 74 65 67 65 72  vg(d) AS integer
1c7d0 29 29 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65  ))) from t1) the
1c7e0 6e 20 62 20 65 6c 73 65 20 74 31 2e 66 20 65 6e  n b else t1.f en
1c7f0 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  d) from t1 where
1c800 20 74 31 2e 66 3c 74 31 2e 65 29 2c 31 33 29 20   t1.f<t1.e),13) 
1c810 62 65 74 77 65 65 6e 20 28 62 29 20 61 6e 64 20  between (b) and 
1c820 20 2d 74 31 2e 62 29 2c 20 2d 65 29 29 20 66 72   -t1.b), -e)) fr
1c830 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
1c840 63 74 20 2b 28 20 2d 63 61 73 65 20 20 2d 61 62  ct +( -case  -ab
1c850 73 28 28 20 2d 63 6f 75 6e 74 28 2a 29 29 29 20  s(( -count(*))) 
1c860 26 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  & count(distinct
1c870 20 64 29 20 77 68 65 6e 20 6d 61 78 28 31 37 29   d) when max(17)
1c880 20 74 68 65 6e 20 6d 61 78 28 31 33 29 20 65 6c   then max(13) el
1c890 73 65 20 20 2d 28 6d 69 6e 28 31 33 29 29 20 65  se  -(min(13)) e
1c8a0 6e 64 29 20 26 20 28 63 6f 75 6e 74 28 64 69 73  nd) & (count(dis
1c8b0 74 69 6e 63 74 20 74 31 2e 61 29 29 20 66 72 6f  tinct t1.a)) fro
1c8c0 6d 20 74 31 29 29 29 20 74 68 65 6e 20 74 31 2e  m t1))) then t1.
1c8d0 66 20 65 6c 73 65 20 63 61 73 65 20 63 20 77 68  f else case c wh
1c8e0 65 6e 20 74 31 2e 64 20 74 68 65 6e 20 65 20 65  en t1.d then e e
1c8f0 6c 73 65 20 31 31 20 65 6e 64 20 65 6e 64 20 46  lse 11 end end F
1c900 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e  ROM t1 WHERE t1.
1c910 61 2b 63 61 73 65 20 74 31 2e 63 20 77 68 65 6e  a+case t1.c when
1c920 20 63 61 73 65 20 63 20 77 68 65 6e 20 31 33 20   case c when 13 
1c930 74 68 65 6e 20 74 31 2e 66 2a 28 73 65 6c 65 63  then t1.f*(selec
1c940 74 20 63 6f 75 6e 74 28 2a 29 20 7c 20 63 61 73  t count(*) | cas
1c950 74 28 61 76 67 28 61 29 20 41 53 20 69 6e 74 65  t(avg(a) AS inte
1c960 67 65 72 29 20 66 72 6f 6d 20 74 31 29 2b 31 33  ger) from t1)+13
1c970 2a 74 31 2e 61 20 65 6c 73 65 20 28 73 65 6c 65  *t1.a else (sele
1c980 63 74 20 61 62 73 28 20 2d 63 6f 75 6e 74 28 2a  ct abs( -count(*
1c990 29 29 20 66 72 6f 6d 20 74 31 29 20 65 6e 64 20  )) from t1) end 
1c9a0 74 68 65 6e 20 62 20 65 6c 73 65 20 74 31 2e 63  then b else t1.c
1c9b0 20 65 6e 64 20 69 6e 20 28 74 31 2e 61 2c 64 2c   end in (t1.a,d,
1c9c0 31 37 29 20 6f 72 20 20 2d 28 73 65 6c 65 63 74  17) or  -(select
1c9d0 20 7e 20 2d 6d 61 78 28 63 29 20 66 72 6f 6d 20   ~ -max(c) from 
1c9e0 74 31 29 2b 31 37 3c 3e 64 20 6f 72 20 74 31 2e  t1)+17<>d or t1.
1c9f0 61 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 62 20  a not between b 
1ca00 61 6e 64 20 31 33 20 6f 72 20 66 3c 3e 20 2d 31  and 13 or f<> -1
1ca10 39 20 61 6e 64 20 74 31 2e 62 3e 61 7d 0a 7d 20  9 and t1.b>a}.} 
1ca20 7b 31 31 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  {11}.do_test ran
1ca30 64 65 78 70 72 2d 32 2e 31 35 34 20 7b 0a 20 20  dexpr-2.154 {.  
1ca40 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
1ca50 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61 20 7c  case when t1.a |
1ca60 20 28 61 62 73 28 63 61 73 65 20 77 68 65 6e 20   (abs(case when 
1ca70 20 2d 74 31 2e 65 20 69 6e 20 28 31 37 2c 31 31   -t1.e in (17,11
1ca80 2c 28 61 62 73 28 74 31 2e 62 29 2f 61 62 73 28  ,(abs(t1.b)/abs(
1ca90 62 2b 63 61 73 65 20 77 68 65 6e 20 28 31 37 20  b+case when (17 
1caa0 69 6e 20 28 73 65 6c 65 63 74 20 66 2d 63 20 66  in (select f-c f
1cab0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1cac0 65 63 74 20 20 2d 61 20 66 72 6f 6d 20 74 31 29  ect  -a from t1)
1cad0 29 20 6f 72 20 74 31 2e 62 3c 3d 61 20 74 68 65  ) or t1.b<=a the
1cae0 6e 20 64 20 77 68 65 6e 20 74 31 2e 65 20 69 6e  n d when t1.e in
1caf0 20 28 73 65 6c 65 63 74 20 20 2d 28 63 6f 75 6e   (select  -(coun
1cb00 74 28 2a 29 29 20 66 72 6f 6d 20 74 31 20 75 6e  t(*)) from t1 un
1cb10 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78 28 74  ion select max(t
1cb20 31 2e 62 29 20 66 72 6f 6d 20 74 31 29 20 74 68  1.b) from t1) th
1cb30 65 6e 20 63 20 65 6c 73 65 20 63 20 65 6e 64 2a  en c else c end*
1cb40 61 2d 74 31 2e 66 29 29 29 20 74 68 65 6e 20 74  a-t1.f))) then t
1cb50 31 2e 62 20 65 6c 73 65 20 74 31 2e 65 20 65 6e  1.b else t1.e en
1cb60 64 29 2f 61 62 73 28 74 31 2e 66 29 29 3e 3d 31  d)/abs(t1.f))>=1
1cb70 31 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74 73  1 and not exists
1cb80 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
1cb90 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73  1 where exists(s
1cba0 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
1cbb0 77 68 65 72 65 20 74 31 2e 64 20 69 6e 20 28 73  where t1.d in (s
1cbc0 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f 6d 20  elect t1.d from 
1cbd0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
1cbe0 31 37 20 66 72 6f 6d 20 74 31 29 29 29 20 74 68  17 from t1))) th
1cbf0 65 6e 20 63 20 65 6c 73 65 20 74 31 2e 63 20 65  en c else t1.c e
1cc00 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  nd FROM t1 WHERE
1cc10 20 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65   (coalesce((sele
1cc20 63 74 20 66 20 66 72 6f 6d 20 74 31 20 77 68 65  ct f from t1 whe
1cc30 72 65 20 63 61 73 65 20 61 2d 65 2b 61 20 77 68  re case a-e+a wh
1cc40 65 6e 20 28 61 62 73 28 74 31 2e 64 29 2f 61 62  en (abs(t1.d)/ab
1cc50 73 28 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  s((coalesce((sel
1cc60 65 63 74 20 7e 74 31 2e 65 2a 2b 74 31 2e 61 2b  ect ~t1.e*+t1.a+
1cc70 62 2a 61 2a 28 61 62 73 28 31 39 29 2f 61 62 73  b*a*(abs(19)/abs
1cc80 28 61 29 29 2a 61 2b 65 20 66 72 6f 6d 20 74 31  (a))*a+e from t1
1cc90 20 77 68 65 72 65 20 31 33 3c 74 31 2e 65 29 2c   where 13<t1.e),
1cca0 61 29 29 29 29 2b 31 31 20 74 68 65 6e 20 31 31  a))))+11 then 11
1ccb0 20 65 6c 73 65 20 64 20 65 6e 64 3e 3d 31 33 20   else d end>=13 
1ccc0 6f 72 20 74 31 2e 62 3c 3d 20 2d 31 39 29 2c 74  or t1.b<= -19),t
1ccd0 31 2e 66 29 2b 31 37 2a 20 2d 74 31 2e 63 3c 74  1.f)+17* -t1.c<t
1cce0 31 2e 63 29 7d 0a 7d 20 7b 33 30 30 7d 0a 64 6f  1.c)}.} {300}.do
1ccf0 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
1cd00 2e 31 35 35 20 7b 0a 20 20 64 62 20 65 76 61 6c  .155 {.  db eval
1cd10 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68   {SELECT case wh
1cd20 65 6e 20 74 31 2e 61 20 7c 20 28 61 62 73 28 63  en t1.a | (abs(c
1cd30 61 73 65 20 77 68 65 6e 20 20 2d 74 31 2e 65 20  ase when  -t1.e 
1cd40 69 6e 20 28 31 37 2c 31 31 2c 28 61 62 73 28 74  in (17,11,(abs(t
1cd50 31 2e 62 29 2f 61 62 73 28 62 2b 63 61 73 65 20  1.b)/abs(b+case 
1cd60 77 68 65 6e 20 28 31 37 20 69 6e 20 28 73 65 6c  when (17 in (sel
1cd70 65 63 74 20 66 2d 63 20 66 72 6f 6d 20 74 31 20  ect f-c from t1 
1cd80 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20 2d 61  union select  -a
1cd90 20 66 72 6f 6d 20 74 31 29 29 20 6f 72 20 74 31   from t1)) or t1
1cda0 2e 62 3c 3d 61 20 74 68 65 6e 20 64 20 77 68 65  .b<=a then d whe
1cdb0 6e 20 74 31 2e 65 20 69 6e 20 28 73 65 6c 65 63  n t1.e in (selec
1cdc0 74 20 20 2d 28 63 6f 75 6e 74 28 2a 29 29 20 66  t  -(count(*)) f
1cdd0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1cde0 65 63 74 20 6d 61 78 28 74 31 2e 62 29 20 66 72  ect max(t1.b) fr
1cdf0 6f 6d 20 74 31 29 20 74 68 65 6e 20 63 20 65 6c  om t1) then c el
1ce00 73 65 20 63 20 65 6e 64 2a 61 2d 74 31 2e 66 29  se c end*a-t1.f)
1ce10 29 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73  )) then t1.b els
1ce20 65 20 74 31 2e 65 20 65 6e 64 29 2f 61 62 73 28  e t1.e end)/abs(
1ce30 74 31 2e 66 29 29 3e 3d 31 31 20 61 6e 64 20 6e  t1.f))>=11 and n
1ce40 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
1ce50 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
1ce60 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
1ce70 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
1ce80 31 2e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 74  1.d in (select t
1ce90 31 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  1.d from t1 unio
1cea0 6e 20 73 65 6c 65 63 74 20 31 37 20 66 72 6f 6d  n select 17 from
1ceb0 20 74 31 29 29 29 20 74 68 65 6e 20 63 20 65 6c   t1))) then c el
1cec0 73 65 20 74 31 2e 63 20 65 6e 64 20 46 52 4f 4d  se t1.c end FROM
1ced0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28   t1 WHERE NOT ((
1cee0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1cef0 20 66 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   f from t1 where
1cf00 20 63 61 73 65 20 61 2d 65 2b 61 20 77 68 65 6e   case a-e+a when
1cf10 20 28 61 62 73 28 74 31 2e 64 29 2f 61 62 73 28   (abs(t1.d)/abs(
1cf20 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
1cf30 74 20 7e 74 31 2e 65 2a 2b 74 31 2e 61 2b 62 2a  t ~t1.e*+t1.a+b*
1cf40 61 2a 28 61 62 73 28 31 39 29 2f 61 62 73 28 61  a*(abs(19)/abs(a
1cf50 29 29 2a 61 2b 65 20 66 72 6f 6d 20 74 31 20 77  ))*a+e from t1 w
1cf60 68 65 72 65 20 31 33 3c 74 31 2e 65 29 2c 61 29  here 13<t1.e),a)
1cf70 29 29 29 2b 31 31 20 74 68 65 6e 20 31 31 20 65  )))+11 then 11 e
1cf80 6c 73 65 20 64 20 65 6e 64 3e 3d 31 33 20 6f 72  lse d end>=13 or
1cf90 20 74 31 2e 62 3c 3d 20 2d 31 39 29 2c 74 31 2e   t1.b<= -19),t1.
1cfa0 66 29 2b 31 37 2a 20 2d 74 31 2e 63 3c 74 31 2e  f)+17* -t1.c<t1.
1cfb0 63 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  c))}.} {}.do_tes
1cfc0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 35 36  t randexpr-2.156
1cfd0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
1cfe0 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 74  LECT case when t
1cff0 31 2e 61 20 26 20 28 61 62 73 28 63 61 73 65 20  1.a & (abs(case 
1d000 77 68 65 6e 20 20 2d 74 31 2e 65 20 69 6e 20 28  when  -t1.e in (
1d010 31 37 2c 31 31 2c 28 61 62 73 28 74 31 2e 62 29  17,11,(abs(t1.b)
1d020 2f 61 62 73 28 62 2b 63 61 73 65 20 77 68 65 6e  /abs(b+case when
1d030 20 28 31 37 20 69 6e 20 28 73 65 6c 65 63 74 20   (17 in (select 
1d040 66 2d 63 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  f-c from t1 unio
1d050 6e 20 73 65 6c 65 63 74 20 20 2d 61 20 66 72 6f  n select  -a fro
1d060 6d 20 74 31 29 29 20 6f 72 20 74 31 2e 62 3c 3d  m t1)) or t1.b<=
1d070 61 20 74 68 65 6e 20 64 20 77 68 65 6e 20 74 31  a then d when t1
1d080 2e 65 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d  .e in (select  -
1d090 28 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d 20  (count(*)) from 
1d0a0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
1d0b0 6d 61 78 28 74 31 2e 62 29 20 66 72 6f 6d 20 74  max(t1.b) from t
1d0c0 31 29 20 74 68 65 6e 20 63 20 65 6c 73 65 20 63  1) then c else c
1d0d0 20 65 6e 64 2a 61 2d 74 31 2e 66 29 29 29 20 74   end*a-t1.f))) t
1d0e0 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20 74 31  hen t1.b else t1
1d0f0 2e 65 20 65 6e 64 29 2f 61 62 73 28 74 31 2e 66  .e end)/abs(t1.f
1d100 29 29 3e 3d 31 31 20 61 6e 64 20 6e 6f 74 20 65  ))>=11 and not e
1d110 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
1d120 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69  rom t1 where exi
1d130 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
1d140 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 64 20  m t1 where t1.d 
1d150 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 64 20  in (select t1.d 
1d160 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
1d170 6c 65 63 74 20 31 37 20 66 72 6f 6d 20 74 31 29  lect 17 from t1)
1d180 29 29 20 74 68 65 6e 20 63 20 65 6c 73 65 20 74  )) then c else t
1d190 31 2e 63 20 65 6e 64 20 46 52 4f 4d 20 74 31 20  1.c end FROM t1 
1d1a0 57 48 45 52 45 20 28 63 6f 61 6c 65 73 63 65 28  WHERE (coalesce(
1d1b0 28 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74  (select f from t
1d1c0 31 20 77 68 65 72 65 20 63 61 73 65 20 61 2d 65  1 where case a-e
1d1d0 2b 61 20 77 68 65 6e 20 28 61 62 73 28 74 31 2e  +a when (abs(t1.
1d1e0 64 29 2f 61 62 73 28 28 63 6f 61 6c 65 73 63 65  d)/abs((coalesce
1d1f0 28 28 73 65 6c 65 63 74 20 7e 74 31 2e 65 2a 2b  ((select ~t1.e*+
1d200 74 31 2e 61 2b 62 2a 61 2a 28 61 62 73 28 31 39  t1.a+b*a*(abs(19
1d210 29 2f 61 62 73 28 61 29 29 2a 61 2b 65 20 66 72  )/abs(a))*a+e fr
1d220 6f 6d 20 74 31 20 77 68 65 72 65 20 31 33 3c 74  om t1 where 13<t
1d230 31 2e 65 29 2c 61 29 29 29 29 2b 31 31 20 74 68  1.e),a))))+11 th
1d240 65 6e 20 31 31 20 65 6c 73 65 20 64 20 65 6e 64  en 11 else d end
1d250 3e 3d 31 33 20 6f 72 20 74 31 2e 62 3c 3d 20 2d  >=13 or t1.b<= -
1d260 31 39 29 2c 74 31 2e 66 29 2b 31 37 2a 20 2d 74  19),t1.f)+17* -t
1d270 31 2e 63 3c 74 31 2e 63 29 7d 0a 7d 20 7b 33 30  1.c<t1.c)}.} {30
1d280 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  0}.do_test rande
1d290 78 70 72 2d 32 2e 31 35 37 20 7b 0a 20 20 64 62  xpr-2.157 {.  db
1d2a0 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
1d2b0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
1d2c0 61 78 28 7e 74 31 2e 62 29 20 66 72 6f 6d 20 74  ax(~t1.b) from t
1d2d0 31 20 77 68 65 72 65 20 62 20 69 6e 20 28 73 65  1 where b in (se
1d2e0 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69  lect count(disti
1d2f0 6e 63 74 20 62 29 20 66 72 6f 6d 20 74 31 20 75  nct b) from t1 u
1d300 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78 28  nion select max(
1d310 63 61 73 65 20 63 6f 61 6c 65 73 63 65 28 28 73  case coalesce((s
1d320 65 6c 65 63 74 20 6d 61 78 28 62 29 20 66 72 6f  elect max(b) fro
1d330 6d 20 74 31 20 77 68 65 72 65 20 64 20 69 6e 20  m t1 where d in 
1d340 28 73 65 6c 65 63 74 20 74 31 2e 66 20 66 72 6f  (select t1.f fro
1d350 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
1d360 74 20 64 20 66 72 6f 6d 20 74 31 29 20 61 6e 64  t d from t1) and
1d370 20 74 31 2e 61 3d 64 29 2c 74 31 2e 61 29 20 77   t1.a=d),t1.a) w
1d380 68 65 6e 20 20 2d 74 31 2e 61 20 74 68 65 6e 20  hen  -t1.a then 
1d390 64 2a 74 31 2e 65 2b 74 31 2e 63 2d 31 31 2b 62  d*t1.e+t1.c-11+b
1d3a0 20 7c 20 65 2d 74 31 2e 61 2b 65 2b 74 31 2e 66   | e-t1.a+e+t1.f
1d3b0 20 65 6c 73 65 20 63 20 65 6e 64 29 20 66 72 6f   else c end) fro
1d3c0 6d 20 74 31 29 29 2c 74 31 2e 61 29 20 46 52 4f  m t1)),t1.a) FRO
1d3d0 4d 20 74 31 20 57 48 45 52 45 20 28 65 3c 74 31  M t1 WHERE (e<t1
1d3e0 2e 66 2a 63 61 73 65 20 31 37 20 77 68 65 6e 20  .f*case 17 when 
1d3f0 74 31 2e 61 20 74 68 65 6e 20 74 31 2e 64 20 65  t1.a then t1.d e
1d400 6c 73 65 20 2b 63 6f 61 6c 65 73 63 65 28 28 73  lse +coalesce((s
1d410 65 6c 65 63 74 20 6d 61 78 28 31 37 29 20 66 72  elect max(17) fr
1d420 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
1d430 31 33 3c 3e 7e 61 2d 31 31 29 2c 74 31 2e 66 29  13<>~a-11),t1.f)
1d440 20 65 6e 64 29 7d 0a 7d 20 7b 31 30 30 7d 0a 64   end)}.} {100}.d
1d450 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
1d460 32 2e 31 35 38 20 7b 0a 20 20 64 62 20 65 76 61  2.158 {.  db eva
1d470 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73  l {SELECT coales
1d480 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 7e  ce((select max(~
1d490 74 31 2e 62 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.b) from t1 wh
1d4a0 65 72 65 20 62 20 69 6e 20 28 73 65 6c 65 63 74  ere b in (select
1d4b0 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
1d4c0 62 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  b) from t1 union
1d4d0 20 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65   select max(case
1d4e0 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
1d4f0 74 20 6d 61 78 28 62 29 20 66 72 6f 6d 20 74 31  t max(b) from t1
1d500 20 77 68 65 72 65 20 64 20 69 6e 20 28 73 65 6c   where d in (sel
1d510 65 63 74 20 74 31 2e 66 20 66 72 6f 6d 20 74 31  ect t1.f from t1
1d520 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64 20   union select d 
1d530 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 74 31 2e  from t1) and t1.
1d540 61 3d 64 29 2c 74 31 2e 61 29 20 77 68 65 6e 20  a=d),t1.a) when 
1d550 20 2d 74 31 2e 61 20 74 68 65 6e 20 64 2a 74 31   -t1.a then d*t1
1d560 2e 65 2b 74 31 2e 63 2d 31 31 2b 62 20 7c 20 65  .e+t1.c-11+b | e
1d570 2d 74 31 2e 61 2b 65 2b 74 31 2e 66 20 65 6c 73  -t1.a+e+t1.f els
1d580 65 20 63 20 65 6e 64 29 20 66 72 6f 6d 20 74 31  e c end) from t1
1d590 29 29 2c 74 31 2e 61 29 20 46 52 4f 4d 20 74 31  )),t1.a) FROM t1
1d5a0 20 57 48 45 52 45 20 4e 4f 54 20 28 28 65 3c 74   WHERE NOT ((e<t
1d5b0 31 2e 66 2a 63 61 73 65 20 31 37 20 77 68 65 6e  1.f*case 17 when
1d5c0 20 74 31 2e 61 20 74 68 65 6e 20 74 31 2e 64 20   t1.a then t1.d 
1d5d0 65 6c 73 65 20 2b 63 6f 61 6c 65 73 63 65 28 28  else +coalesce((
1d5e0 73 65 6c 65 63 74 20 6d 61 78 28 31 37 29 20 66  select max(17) f
1d5f0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
1d600 20 31 33 3c 3e 7e 61 2d 31 31 29 2c 74 31 2e 66   13<>~a-11),t1.f
1d610 29 20 65 6e 64 29 29 7d 0a 7d 20 7b 7d 0a 64 6f  ) end))}.} {}.do
1d620 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
1d630 2e 31 35 39 20 7b 0a 20 20 64 62 20 65 76 61 6c  .159 {.  db eval
1d640 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63   {SELECT coalesc
1d650 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 7e 74  e((select max(~t
1d660 31 2e 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65  1.b) from t1 whe
1d670 72 65 20 62 20 69 6e 20 28 73 65 6c 65 63 74 20  re b in (select 
1d680 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62  count(distinct b
1d690 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
1d6a0 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20  select max(case 
1d6b0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1d6c0 20 6d 61 78 28 62 29 20 66 72 6f 6d 20 74 31 20   max(b) from t1 
1d6d0 77 68 65 72 65 20 64 20 69 6e 20 28 73 65 6c 65  where d in (sele
1d6e0 63 74 20 74 31 2e 66 20 66 72 6f 6d 20 74 31 20  ct t1.f from t1 
1d6f0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64 20 66  union select d f
1d700 72 6f 6d 20 74 31 29 20 61 6e 64 20 74 31 2e 61  rom t1) and t1.a
1d710 3d 64 29 2c 74 31 2e 61 29 20 77 68 65 6e 20 20  =d),t1.a) when  
1d720 2d 74 31 2e 61 20 74 68 65 6e 20 64 2a 74 31 2e  -t1.a then d*t1.
1d730 65 2b 74 31 2e 63 2d 31 31 2b 62 20 26 20 65 2d  e+t1.c-11+b & e-
1d740 74 31 2e 61 2b 65 2b 74 31 2e 66 20 65 6c 73 65  t1.a+e+t1.f else
1d750 20 63 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 29   c end) from t1)
1d760 29 2c 74 31 2e 61 29 20 46 52 4f 4d 20 74 31 20  ),t1.a) FROM t1 
1d770 57 48 45 52 45 20 28 65 3c 74 31 2e 66 2a 63 61  WHERE (e<t1.f*ca
1d780 73 65 20 31 37 20 77 68 65 6e 20 74 31 2e 61 20  se 17 when t1.a 
1d790 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20 2b  then t1.d else +
1d7a0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1d7b0 20 6d 61 78 28 31 37 29 20 66 72 6f 6d 20 74 31   max(17) from t1
1d7c0 20 77 68 65 72 65 20 6e 6f 74 20 31 33 3c 3e 7e   where not 13<>~
1d7d0 61 2d 31 31 29 2c 74 31 2e 66 29 20 65 6e 64 29  a-11),t1.f) end)
1d7e0 7d 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f 74 65 73  }.} {100}.do_tes
1d7f0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 36 30  t randexpr-2.160
1d800 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
1d810 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 6e  LECT case when n
1d820 6f 74 20 74 31 2e 63 20 6e 6f 74 20 69 6e 20 28  ot t1.c not in (
1d830 31 33 2c 64 2c 7e 63 61 73 65 20 77 68 65 6e 20  13,d,~case when 
1d840 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
1d850 20 6d 61 78 28 28 61 62 73 28 74 31 2e 63 29 2f   max((abs(t1.c)/
1d860 61 62 73 28 74 31 2e 65 29 29 29 20 66 72 6f 6d  abs(t1.e))) from
1d870 20 74 31 20 77 68 65 72 65 20 62 2d 74 31 2e 64   t1 where b-t1.d
1d880 2b 62 2b 74 31 2e 66 3e 61 29 2c 74 31 2e 61 29  +b+t1.f>a),t1.a)
1d890 20 69 6e 20 28 73 65 6c 65 63 74 20 31 39 20 66   in (select 19 f
1d8a0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
1d8b0 65 63 74 20 74 31 2e 61 20 66 72 6f 6d 20 74 31  ect t1.a from t1
1d8c0 29 20 74 68 65 6e 20 20 2d 62 20 65 6c 73 65 20  ) then  -b else 
1d8d0 61 20 65 6e 64 2a 62 20 7c 20 64 29 20 61 6e 64  a end*b | d) and
1d8e0 20 20 2d 28 74 31 2e 62 29 3e 3d 65 20 61 6e 64    -(t1.b)>=e and
1d8f0 20 31 31 3c 64 20 6f 72 20 28 28 31 39 29 29 3c   11<d or ((19))<
1d900 3e 20 2d 74 31 2e 63 20 74 68 65 6e 20 74 31 2e  > -t1.c then t1.
1d910 66 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 2b  f else t1.f end+
1d920 28 74 31 2e 62 29 2b 61 20 46 52 4f 4d 20 74 31  (t1.b)+a FROM t1
1d930 20 57 48 45 52 45 20 65 3e 65 7d 0a 7d 20 7b 7d   WHERE e>e}.} {}
1d940 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
1d950 72 2d 32 2e 31 36 31 20 7b 0a 20 20 64 62 20 65  r-2.161 {.  db e
1d960 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
1d970 20 77 68 65 6e 20 6e 6f 74 20 74 31 2e 63 20 6e   when not t1.c n
1d980 6f 74 20 69 6e 20 28 31 33 2c 64 2c 7e 63 61 73  ot in (13,d,~cas
1d990 65 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28  e when coalesce(
1d9a0 28 73 65 6c 65 63 74 20 6d 61 78 28 28 61 62 73  (select max((abs
1d9b0 28 74 31 2e 63 29 2f 61 62 73 28 74 31 2e 65 29  (t1.c)/abs(t1.e)
1d9c0 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
1d9d0 20 62 2d 74 31 2e 64 2b 62 2b 74 31 2e 66 3e 61   b-t1.d+b+t1.f>a
1d9e0 29 2c 74 31 2e 61 29 20 69 6e 20 28 73 65 6c 65  ),t1.a) in (sele
1d9f0 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20 75 6e  ct 19 from t1 un
1da00 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 61 20  ion select t1.a 
1da10 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 20 2d  from t1) then  -
1da20 62 20 65 6c 73 65 20 61 20 65 6e 64 2a 62 20 7c  b else a end*b |
1da30 20 64 29 20 61 6e 64 20 20 2d 28 74 31 2e 62 29   d) and  -(t1.b)
1da40 3e 3d 65 20 61 6e 64 20 31 31 3c 64 20 6f 72 20  >=e and 11<d or 
1da50 28 28 31 39 29 29 3c 3e 20 2d 74 31 2e 63 20 74  ((19))<> -t1.c t
1da60 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 74 31  hen t1.f else t1
1da70 2e 66 20 65 6e 64 2b 28 74 31 2e 62 29 2b 61 20  .f end+(t1.b)+a 
1da80 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
1da90 54 20 28 65 3e 65 29 7d 0a 7d 20 7b 39 30 30 7d  T (e>e)}.} {900}
1daa0 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
1dab0 72 2d 32 2e 31 36 32 20 7b 0a 20 20 64 62 20 65  r-2.162 {.  db e
1dac0 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
1dad0 20 77 68 65 6e 20 6e 6f 74 20 74 31 2e 63 20 6e   when not t1.c n
1dae0 6f 74 20 69 6e 20 28 31 33 2c 64 2c 7e 63 61 73  ot in (13,d,~cas
1daf0 65 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28  e when coalesce(
1db00 28 73 65 6c 65 63 74 20 6d 61 78 28 28 61 62 73  (select max((abs
1db10 28 74 31 2e 63 29 2f 61 62 73 28 74 31 2e 65 29  (t1.c)/abs(t1.e)
1db20 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
1db30 20 62 2d 74 31 2e 64 2b 62 2b 74 31 2e 66 3e 61   b-t1.d+b+t1.f>a
1db40 29 2c 74 31 2e 61 29 20 69 6e 20 28 73 65 6c 65  ),t1.a) in (sele
1db50 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20 75 6e  ct 19 from t1 un
1db60 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 61 20  ion select t1.a 
1db70 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 20 2d  from t1) then  -
1db80 62 20 65 6c 73 65 20 61 20 65 6e 64 2a 62 20 26  b else a end*b &
1db90 20 64 29 20 61 6e 64 20 20 2d 28 74 31 2e 62 29   d) and  -(t1.b)
1dba0 3e 3d 65 20 61 6e 64 20 31 31 3c 64 20 6f 72 20  >=e and 11<d or 
1dbb0 28 28 31 39 29 29 3c 3e 20 2d 74 31 2e 63 20 74  ((19))<> -t1.c t
1dbc0 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 74 31  hen t1.f else t1
1dbd0 2e 66 20 65 6e 64 2b 28 74 31 2e 62 29 2b 61 20  .f end+(t1.b)+a 
1dbe0 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
1dbf0 54 20 28 65 3e 65 29 7d 0a 7d 20 7b 39 30 30 7d  T (e>e)}.} {900}
1dc00 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
1dc10 72 2d 32 2e 31 36 33 20 7b 0a 20 20 64 62 20 65  r-2.163 {.  db e
1dc20 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
1dc30 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e  esce((select t1.
1dc40 63 2a 63 20 66 72 6f 6d 20 74 31 20 77 68 65 72  c*c from t1 wher
1dc50 65 20 28 73 65 6c 65 63 74 20 28 61 62 73 28 63  e (select (abs(c
1dc60 61 73 74 28 61 76 67 28 62 2a 31 33 29 20 41 53  ast(avg(b*13) AS
1dc70 20 69 6e 74 65 67 65 72 29 29 29 20 66 72 6f 6d   integer))) from
1dc80 20 74 31 29 20 69 6e 20 28 73 65 6c 65 63 74 20   t1) in (select 
1dc90 31 31 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  11 from t1 union
1dca0 20 73 65 6c 65 63 74 20 65 20 7c 20 61 2d 31 37   select e | a-17
1dcb0 20 66 72 6f 6d 20 74 31 29 29 2c 20 2d 63 61 73   from t1)), -cas
1dcc0 65 20 74 31 2e 63 20 77 68 65 6e 20 74 31 2e 62  e t1.c when t1.b
1dcd0 2b 2b 28 73 65 6c 65 63 74 20 63 61 73 74 28 61  ++(select cast(a
1dce0 76 67 28 65 29 20 41 53 20 69 6e 74 65 67 65 72  vg(e) AS integer
1dcf0 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20  ) from t1) then 
1dd00 31 37 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64  17 else t1.b end
1dd10 29 2d 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  )-d FROM t1 WHER
1dd20 45 20 62 3c 3d 74 31 2e 64 7d 0a 7d 20 7b 2d 36  E b<=t1.d}.} {-6
1dd30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  00}.do_test rand
1dd40 65 78 70 72 2d 32 2e 31 36 34 20 7b 0a 20 20 64  expr-2.164 {.  d
1dd50 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
1dd60 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
1dd70 74 31 2e 63 2a 63 20 66 72 6f 6d 20 74 31 20 77  t1.c*c from t1 w
1dd80 68 65 72 65 20 28 73 65 6c 65 63 74 20 28 61 62  here (select (ab
1dd90 73 28 63 61 73 74 28 61 76 67 28 62 2a 31 33 29  s(cast(avg(b*13)
1dda0 20 41 53 20 69 6e 74 65 67 65 72 29 29 29 20 66   AS integer))) f
1ddb0 72 6f 6d 20 74 31 29 20 69 6e 20 28 73 65 6c 65  rom t1) in (sele
1ddc0 63 74 20 31 31 20 66 72 6f 6d 20 74 31 20 75 6e  ct 11 from t1 un
1ddd0 69 6f 6e 20 73 65 6c 65 63 74 20 65 20 7c 20 61  ion select e | a
1dde0 2d 31 37 20 66 72 6f 6d 20 74 31 29 29 2c 20 2d  -17 from t1)), -
1ddf0 63 61 73 65 20 74 31 2e 63 20 77 68 65 6e 20 74  case t1.c when t
1de00 31 2e 62 2b 2b 28 73 65 6c 65 63 74 20 63 61 73  1.b++(select cas
1de10 74 28 61 76 67 28 65 29 20 41 53 20 69 6e 74 65  t(avg(e) AS inte
1de20 67 65 72 29 20 66 72 6f 6d 20 74 31 29 20 74 68  ger) from t1) th
1de30 65 6e 20 31 37 20 65 6c 73 65 20 74 31 2e 62 20  en 17 else t1.b 
1de40 65 6e 64 29 2d 64 20 46 52 4f 4d 20 74 31 20 57  end)-d FROM t1 W
1de50 48 45 52 45 20 4e 4f 54 20 28 62 3c 3d 74 31 2e  HERE NOT (b<=t1.
1de60 64 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  d)}.} {}.do_test
1de70 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 36 35 20   randexpr-2.165 
1de80 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
1de90 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ECT coalesce((se
1dea0 6c 65 63 74 20 74 31 2e 63 2a 63 20 66 72 6f 6d  lect t1.c*c from
1deb0 20 74 31 20 77 68 65 72 65 20 28 73 65 6c 65 63   t1 where (selec
1dec0 74 20 28 61 62 73 28 63 61 73 74 28 61 76 67 28  t (abs(cast(avg(
1ded0 62 2a 31 33 29 20 41 53 20 69 6e 74 65 67 65 72  b*13) AS integer
1dee0 29 29 29 20 66 72 6f 6d 20 74 31 29 20 69 6e 20  ))) from t1) in 
1def0 28 73 65 6c 65 63 74 20 31 31 20 66 72 6f 6d 20  (select 11 from 
1df00 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
1df10 65 20 26 20 61 2d 31 37 20 66 72 6f 6d 20 74 31  e & a-17 from t1
1df20 29 29 2c 20 2d 63 61 73 65 20 74 31 2e 63 20 77  )), -case t1.c w
1df30 68 65 6e 20 74 31 2e 62 2b 2b 28 73 65 6c 65 63  hen t1.b++(selec
1df40 74 20 63 61 73 74 28 61 76 67 28 65 29 20 41 53  t cast(avg(e) AS
1df50 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74   integer) from t
1df60 31 29 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20  1) then 17 else 
1df70 74 31 2e 62 20 65 6e 64 29 2d 64 20 46 52 4f 4d  t1.b end)-d FROM
1df80 20 74 31 20 57 48 45 52 45 20 62 3c 3d 74 31 2e   t1 WHERE b<=t1.
1df90 64 7d 0a 7d 20 7b 2d 36 30 30 7d 0a 64 6f 5f 74  d}.} {-600}.do_t
1dfa0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
1dfb0 36 36 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  66 {.  db eval {
1dfc0 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28  SELECT coalesce(
1dfd0 28 73 65 6c 65 63 74 20 6d 61 78 28 28 63 61 73  (select max((cas
1dfe0 65 20 28 61 62 73 28 74 31 2e 62 29 2f 61 62 73  e (abs(t1.b)/abs
1dff0 28 65 29 29 20 77 68 65 6e 20 31 33 20 74 68 65  (e)) when 13 the
1e000 6e 20 28 28 73 65 6c 65 63 74 20 2b 63 61 73 65  n ((select +case
1e010 20 63 6f 75 6e 74 28 2a 29 2a 63 6f 75 6e 74 28   count(*)*count(
1e020 64 69 73 74 69 6e 63 74 20 63 6f 61 6c 65 73 63  distinct coalesc
1e030 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 28 31  e((select max((1
1e040 31 29 2b 62 29 20 66 72 6f 6d 20 74 31 20 77 68  1)+b) from t1 wh
1e050 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
1e060 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
1e070 65 20 74 31 2e 65 3d 28 74 31 2e 62 29 29 29 2c  e t1.e=(t1.b))),
1e080 20 2d 31 33 29 29 20 77 68 65 6e 20 63 6f 75 6e   -13)) when coun
1e090 74 28 64 69 73 74 69 6e 63 74 20 20 2d 63 29 20  t(distinct  -c) 
1e0a0 74 68 65 6e 20 63 6f 75 6e 74 28 2a 29 2a 6d 61  then count(*)*ma
1e0b0 78 28 20 2d 64 29 20 65 6c 73 65 20 6d 61 78 28  x( -d) else max(
1e0c0 28 61 29 29 20 65 6e 64 2b 6d 69 6e 28 63 29 20  (a)) end+min(c) 
1e0d0 66 72 6f 6d 20 74 31 29 29 20 65 6c 73 65 20 74  from t1)) else t
1e0e0 31 2e 61 20 65 6e 64 2d 28 61 62 73 28 63 61 73  1.a end-(abs(cas
1e0f0 65 20 77 68 65 6e 20 61 3d 31 37 20 61 6e 64 20  e when a=17 and 
1e100 65 3c 3d 62 20 74 68 65 6e 20 61 20 77 68 65 6e  e<=b then a when
1e110 20 61 3e 3d 65 20 74 68 65 6e 20 74 31 2e 63 20   a>=e then t1.c 
1e120 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 2b 31 33  else t1.c end+13
1e130 29 2f 61 62 73 28 65 29 29 2a 28 65 29 29 29 20  )/abs(e))*(e))) 
1e140 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
1e150 2e 61 20 69 6e 20 28 73 65 6c 65 63 74 20 64 20  .a in (select d 
1e160 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
1e170 6c 65 63 74 20 20 2d 74 31 2e 65 20 66 72 6f 6d  lect  -t1.e from
1e180 20 74 31 29 29 2c 31 33 29 20 46 52 4f 4d 20 74   t1)),13) FROM t
1e190 31 20 57 48 45 52 45 20 6e 6f 74 20 63 6f 61 6c  1 WHERE not coal
1e1a0 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
1e1b0 28 63 61 73 65 20 77 68 65 6e 20 66 3c 3d 64 20  (case when f<=d 
1e1c0 7c 20 62 20 7c 20 63 61 73 65 20 77 68 65 6e 20  | b | case when 
1e1d0 63 61 73 65 20 77 68 65 6e 20 28 74 31 2e 63 20  case when (t1.c 
1e1e0 69 6e 20 28 66 2c 31 39 2c 63 29 29 20 74 68 65  in (f,19,c)) the
1e1f0 6e 20 74 31 2e 66 20 77 68 65 6e 20 64 3e 74 31  n t1.f when d>t1
1e200 2e 62 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73  .b then t1.f els
1e210 65 20 74 31 2e 66 20 65 6e 64 3c 3d 63 20 74 68  e t1.f end<=c th
1e220 65 6e 20 31 31 20 65 6c 73 65 20 63 20 65 6e 64  en 11 else c end
1e230 2d 20 2d 74 31 2e 63 2d 31 33 20 61 6e 64 20 74  - -t1.c-13 and t
1e240 31 2e 63 20 69 6e 20 28 73 65 6c 65 63 74 20 62  1.c in (select b
1e250 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
1e260 65 6c 65 63 74 20 20 2d 31 37 20 66 72 6f 6d 20  elect  -17 from 
1e270 74 31 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c  t1) then t1.b el
1e280 73 65 20 61 20 65 6e 64 29 20 66 72 6f 6d 20 74  se a end) from t
1e290 31 20 77 68 65 72 65 20 31 31 20 62 65 74 77 65  1 where 11 betwe
1e2a0 65 6e 20 64 20 61 6e 64 20 61 29 2c 20 2d 31 37  en d and a), -17
1e2b0 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31  ) not between t1
1e2c0 2e 66 20 61 6e 64 20 74 31 2e 66 20 61 6e 64 20  .f and t1.f and 
1e2d0 74 31 2e 66 3e 31 31 20 6f 72 20 28 6e 6f 74 20  t1.f>11 or (not 
1e2e0 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
1e2f0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
1e300 2e 62 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 69  .b in (select mi
1e310 6e 28 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20  n(t1.d) from t1 
1e320 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 69 6e  union select min
1e330 28 63 29 20 66 72 6f 6d 20 74 31 29 29 29 7d 0a  (c) from t1)))}.
1e340 7d 20 7b 31 33 7d 0a 64 6f 5f 74 65 73 74 20 72  } {13}.do_test r
1e350 61 6e 64 65 78 70 72 2d 32 2e 31 36 37 20 7b 0a  andexpr-2.167 {.
1e360 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
1e370 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  T coalesce((sele
1e380 63 74 20 6d 61 78 28 28 63 61 73 65 20 28 61 62  ct max((case (ab
1e390 73 28 74 31 2e 62 29 2f 61 62 73 28 65 29 29 20  s(t1.b)/abs(e)) 
1e3a0 77 68 65 6e 20 31 33 20 74 68 65 6e 20 28 28 73  when 13 then ((s
1e3b0 65 6c 65 63 74 20 2b 63 61 73 65 20 63 6f 75 6e  elect +case coun
1e3c0 74 28 2a 29 2a 63 6f 75 6e 74 28 64 69 73 74 69  t(*)*count(disti
1e3d0 6e 63 74 20 63 6f 61 6c 65 73 63 65 28 28 73 65  nct coalesce((se
1e3e0 6c 65 63 74 20 6d 61 78 28 28 31 31 29 2b 62 29  lect max((11)+b)
1e3f0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
1e400 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
1e410 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
1e420 65 3d 28 74 31 2e 62 29 29 29 2c 20 2d 31 33 29  e=(t1.b))), -13)
1e430 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 64 69 73  ) when count(dis
1e440 74 69 6e 63 74 20 20 2d 63 29 20 74 68 65 6e 20  tinct  -c) then 
1e450 63 6f 75 6e 74 28 2a 29 2a 6d 61 78 28 20 2d 64  count(*)*max( -d
1e460 29 20 65 6c 73 65 20 6d 61 78 28 28 61 29 29 20  ) else max((a)) 
1e470 65 6e 64 2b 6d 69 6e 28 63 29 20 66 72 6f 6d 20  end+min(c) from 
1e480 74 31 29 29 20 65 6c 73 65 20 74 31 2e 61 20 65  t1)) else t1.a e
1e490 6e 64 2d 28 61 62 73 28 63 61 73 65 20 77 68 65  nd-(abs(case whe
1e4a0 6e 20 61 3d 31 37 20 61 6e 64 20 65 3c 3d 62 20  n a=17 and e<=b 
1e4b0 74 68 65 6e 20 61 20 77 68 65 6e 20 61 3e 3d 65  then a when a>=e
1e4c0 20 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20   then t1.c else 
1e4d0 74 31 2e 63 20 65 6e 64 2b 31 33 29 2f 61 62 73  t1.c end+13)/abs
1e4e0 28 65 29 29 2a 28 65 29 29 29 20 66 72 6f 6d 20  (e))*(e))) from 
1e4f0 74 31 20 77 68 65 72 65 20 74 31 2e 61 20 69 6e  t1 where t1.a in
1e500 20 28 73 65 6c 65 63 74 20 64 20 66 72 6f 6d 20   (select d from 
1e510 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
1e520 20 2d 74 31 2e 65 20 66 72 6f 6d 20 74 31 29 29   -t1.e from t1))
1e530 2c 31 33 29 20 46 52 4f 4d 20 74 31 20 57 48 45  ,13) FROM t1 WHE
1e540 52 45 20 4e 4f 54 20 28 6e 6f 74 20 63 6f 61 6c  RE NOT (not coal
1e550 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
1e560 28 63 61 73 65 20 77 68 65 6e 20 66 3c 3d 64 20  (case when f<=d 
1e570 7c 20 62 20 7c 20 63 61 73 65 20 77 68 65 6e 20  | b | case when 
1e580 63 61 73 65 20 77 68 65 6e 20 28 74 31 2e 63 20  case when (t1.c 
1e590 69 6e 20 28 66 2c 31 39 2c 63 29 29 20 74 68 65  in (f,19,c)) the
1e5a0 6e 20 74 31 2e 66 20 77 68 65 6e 20 64 3e 74 31  n t1.f when d>t1
1e5b0 2e 62 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73  .b then t1.f els
1e5c0 65 20 74 31 2e 66 20 65 6e 64 3c 3d 63 20 74 68  e t1.f end<=c th
1e5d0 65 6e 20 31 31 20 65 6c 73 65 20 63 20 65 6e 64  en 11 else c end
1e5e0 2d 20 2d 74 31 2e 63 2d 31 33 20 61 6e 64 20 74  - -t1.c-13 and t
1e5f0 31 2e 63 20 69 6e 20 28 73 65 6c 65 63 74 20 62  1.c in (select b
1e600 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
1e610 65 6c 65 63 74 20 20 2d 31 37 20 66 72 6f 6d 20  elect  -17 from 
1e620 74 31 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c  t1) then t1.b el
1e630 73 65 20 61 20 65 6e 64 29 20 66 72 6f 6d 20 74  se a end) from t
1e640 31 20 77 68 65 72 65 20 31 31 20 62 65 74 77 65  1 where 11 betwe
1e650 65 6e 20 64 20 61 6e 64 20 61 29 2c 20 2d 31 37  en d and a), -17
1e660 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31  ) not between t1
1e670 2e 66 20 61 6e 64 20 74 31 2e 66 20 61 6e 64 20  .f and t1.f and 
1e680 74 31 2e 66 3e 31 31 20 6f 72 20 28 6e 6f 74 20  t1.f>11 or (not 
1e690 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
1e6a0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
1e6b0 2e 62 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 69  .b in (select mi
1e6c0 6e 28 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20  n(t1.d) from t1 
1e6d0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 69 6e  union select min
1e6e0 28 63 29 20 66 72 6f 6d 20 74 31 29 29 29 29 7d  (c) from t1))))}
1e6f0 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61  .} {}.do_test ra
1e700 6e 64 65 78 70 72 2d 32 2e 31 36 38 20 7b 0a 20  ndexpr-2.168 {. 
1e710 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
1e720 20 63 61 73 65 20 77 68 65 6e 20 28 28 74 31 2e   case when ((t1.
1e730 65 20 7c 20 28 73 65 6c 65 63 74 20 6d 69 6e 28  e | (select min(
1e740 20 2d 74 31 2e 66 29 20 66 72 6f 6d 20 74 31 29   -t1.f) from t1)
1e750 2a 28 28 61 62 73 28 62 29 2f 61 62 73 28 31 39  *((abs(b)/abs(19
1e760 29 29 29 2d 62 3c 3d 74 31 2e 62 20 61 6e 64 20  )))-b<=t1.b and 
1e770 6e 6f 74 20 65 3e 31 33 20 6f 72 20 20 2d 66 20  not e>13 or  -f 
1e780 69 6e 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74  in (select count
1e790 28 64 69 73 74 69 6e 63 74 20 65 29 2d 6d 69 6e  (distinct e)-min
1e7a0 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 20 75  (t1.a) from t1 u
1e7b0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
1e7c0 74 28 64 69 73 74 69 6e 63 74 20 66 29 20 66 72  t(distinct f) fr
1e7d0 6f 6d 20 74 31 29 29 29 20 74 68 65 6e 20 31 33  om t1))) then 13
1e7e0 20 77 68 65 6e 20 31 37 20 62 65 74 77 65 65 6e   when 17 between
1e7f0 20 66 20 61 6e 64 20 31 39 20 6f 72 20 31 31 20   f and 19 or 11 
1e800 62 65 74 77 65 65 6e 20 62 20 61 6e 64 20 31 39  between b and 19
1e810 20 6f 72 20 6e 6f 74 20 74 31 2e 66 3e 65 20 74   or not t1.f>e t
1e820 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20 64 20  hen t1.d else d 
1e830 7c 20 66 20 65 6e 64 20 46 52 4f 4d 20 74 31 20  | f end FROM t1 
1e840 57 48 45 52 45 20 6e 6f 74 20 63 61 73 65 20 77  WHERE not case w
1e850 68 65 6e 20 74 31 2e 61 3d 74 31 2e 61 20 74 68  hen t1.a=t1.a th
1e860 65 6e 20 63 20 77 68 65 6e 20 7e 63 61 73 65 20  en c when ~case 
1e870 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 74  when case when t
1e880 31 2e 65 20 69 6e 20 28 73 65 6c 65 63 74 20 2b  1.e in (select +
1e890 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   -count(distinct
1e8a0 20 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 75   t1.d) from t1 u
1e8b0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 74  nion select cast
1e8c0 28 61 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e  (avg(t1.a) AS in
1e8d0 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 20  teger) from t1) 
1e8e0 74 68 65 6e 20 28 74 31 2e 65 29 20 77 68 65 6e  then (t1.e) when
1e8f0 20 31 37 20 69 6e 20 28 31 33 2c 20 2d 66 2c 61   17 in (13, -f,a
1e900 29 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65  ) then t1.d else
1e910 20 64 20 65 6e 64 3c 31 37 20 74 68 65 6e 20 65   d end<17 then e
1e920 20 65 6c 73 65 20 66 20 65 6e 64 2b 31 37 2b 61   else f end+17+a
1e930 2a 20 2d 65 2b 62 2b 62 3e 74 31 2e 65 20 74 68  * -e+b+b>t1.e th
1e940 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e  en t1.e else t1.
1e950 61 20 65 6e 64 3c 63 20 61 6e 64 20 61 20 69 6e  a end<c and a in
1e960 20 28 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 74   (select max( -t
1e970 31 2e 66 29 20 7c 20 63 6f 75 6e 74 28 64 69 73  1.f) | count(dis
1e980 74 69 6e 63 74 20 74 31 2e 62 29 2b 7e 7e 63 6f  tinct t1.b)+~~co
1e990 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
1e9a0 62 29 2d 6d 61 78 28 65 29 2d 20 2d 6d 61 78 28  b)-max(e)- -max(
1e9b0 61 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  a) from t1 union
1e9c0 20 73 65 6c 65 63 74 20 6d 69 6e 28 31 31 29 20   select min(11) 
1e9d0 66 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b 7d 0a 64  from t1)}.} {}.d
1e9e0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
1e9f0 32 2e 31 36 39 20 7b 0a 20 20 64 62 20 65 76 61  2.169 {.  db eva
1ea00 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
1ea10 68 65 6e 20 28 28 74 31 2e 65 20 7c 20 28 73 65  hen ((t1.e | (se
1ea20 6c 65 63 74 20 6d 69 6e 28 20 2d 74 31 2e 66 29  lect min( -t1.f)
1ea30 20 66 72 6f 6d 20 74 31 29 2a 28 28 61 62 73 28   from t1)*((abs(
1ea40 62 29 2f 61 62 73 28 31 39 29 29 29 2d 62 3c 3d  b)/abs(19)))-b<=
1ea50 74 31 2e 62 20 61 6e 64 20 6e 6f 74 20 65 3e 31  t1.b and not e>1
1ea60 33 20 6f 72 20 20 2d 66 20 69 6e 20 28 73 65 6c  3 or  -f in (sel
1ea70 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ect count(distin
1ea80 63 74 20 65 29 2d 6d 69 6e 28 74 31 2e 61 29 20  ct e)-min(t1.a) 
1ea90 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
1eaa0 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69  lect count(disti
1eab0 6e 63 74 20 66 29 20 66 72 6f 6d 20 74 31 29 29  nct f) from t1))
1eac0 29 20 74 68 65 6e 20 31 33 20 77 68 65 6e 20 31  ) then 13 when 1
1ead0 37 20 62 65 74 77 65 65 6e 20 66 20 61 6e 64 20  7 between f and 
1eae0 31 39 20 6f 72 20 31 31 20 62 65 74 77 65 65 6e  19 or 11 between
1eaf0 20 62 20 61 6e 64 20 31 39 20 6f 72 20 6e 6f 74   b and 19 or not
1eb00 20 74 31 2e 66 3e 65 20 74 68 65 6e 20 74 31 2e   t1.f>e then t1.
1eb10 64 20 65 6c 73 65 20 64 20 7c 20 66 20 65 6e 64  d else d | f end
1eb20 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
1eb30 4f 54 20 28 6e 6f 74 20 63 61 73 65 20 77 68 65  OT (not case whe
1eb40 6e 20 74 31 2e 61 3d 74 31 2e 61 20 74 68 65 6e  n t1.a=t1.a then
1eb50 20 63 20 77 68 65 6e 20 7e 63 61 73 65 20 77 68   c when ~case wh
1eb60 65 6e 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e  en case when t1.
1eb70 65 20 69 6e 20 28 73 65 6c 65 63 74 20 2b 20 2d  e in (select + -
1eb80 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
1eb90 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  1.d) from t1 uni
1eba0 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 74 28 61  on select cast(a
1ebb0 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e 74 65  vg(t1.a) AS inte
1ebc0 67 65 72 29 20 66 72 6f 6d 20 74 31 29 20 74 68  ger) from t1) th
1ebd0 65 6e 20 28 74 31 2e 65 29 20 77 68 65 6e 20 31  en (t1.e) when 1
1ebe0 37 20 69 6e 20 28 31 33 2c 20 2d 66 2c 61 29 20  7 in (13, -f,a) 
1ebf0 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20 64  then t1.d else d
1ec00 20 65 6e 64 3c 31 37 20 74 68 65 6e 20 65 20 65   end<17 then e e
1ec10 6c 73 65 20 66 20 65 6e 64 2b 31 37 2b 61 2a 20  lse f end+17+a* 
1ec20 2d 65 2b 62 2b 62 3e 74 31 2e 65 20 74 68 65 6e  -e+b+b>t1.e then
1ec30 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e 61 20   t1.e else t1.a 
1ec40 65 6e 64 3c 63 20 61 6e 64 20 61 20 69 6e 20 28  end<c and a in (
1ec50 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 74 31 2e  select max( -t1.
1ec60 66 29 20 7c 20 63 6f 75 6e 74 28 64 69 73 74 69  f) | count(disti
1ec70 6e 63 74 20 74 31 2e 62 29 2b 7e 7e 63 6f 75 6e  nct t1.b)+~~coun
1ec80 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 62 29  t(distinct t1.b)
1ec90 2d 6d 61 78 28 65 29 2d 20 2d 6d 61 78 28 61 29  -max(e)- -max(a)
1eca0 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
1ecb0 65 6c 65 63 74 20 6d 69 6e 28 31 31 29 20 66 72  elect min(11) fr
1ecc0 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 39 38 34 7d  om t1))}.} {984}
1ecd0 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
1ece0 72 2d 32 2e 31 37 30 20 7b 0a 20 20 64 62 20 65  r-2.170 {.  db e
1ecf0 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
1ed00 20 77 68 65 6e 20 28 28 74 31 2e 65 20 26 20 28   when ((t1.e & (
1ed10 73 65 6c 65 63 74 20 6d 69 6e 28 20 2d 74 31 2e  select min( -t1.
1ed20 66 29 20 66 72 6f 6d 20 74 31 29 2a 28 28 61 62  f) from t1)*((ab
1ed30 73 28 62 29 2f 61 62 73 28 31 39 29 29 29 2d 62  s(b)/abs(19)))-b
1ed40 3c 3d 74 31 2e 62 20 61 6e 64 20 6e 6f 74 20 65  <=t1.b and not e
1ed50 3e 31 33 20 6f 72 20 20 2d 66 20 69 6e 20 28 73  >13 or  -f in (s
1ed60 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
1ed70 69 6e 63 74 20 65 29 2d 6d 69 6e 28 74 31 2e 61  inct e)-min(t1.a
1ed80 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
1ed90 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73  select count(dis
1eda0 74 69 6e 63 74 20 66 29 20 66 72 6f 6d 20 74 31  tinct f) from t1
1edb0 29 29 29 20 74 68 65 6e 20 31 33 20 77 68 65 6e  ))) then 13 when
1edc0 20 31 37 20 62 65 74 77 65 65 6e 20 66 20 61 6e   17 between f an
1edd0 64 20 31 39 20 6f 72 20 31 31 20 62 65 74 77 65  d 19 or 11 betwe
1ede0 65 6e 20 62 20 61 6e 64 20 31 39 20 6f 72 20 6e  en b and 19 or n
1edf0 6f 74 20 74 31 2e 66 3e 65 20 74 68 65 6e 20 74  ot t1.f>e then t
1ee00 31 2e 64 20 65 6c 73 65 20 64 20 26 20 66 20 65  1.d else d & f e
1ee10 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  nd FROM t1 WHERE
1ee20 20 4e 4f 54 20 28 6e 6f 74 20 63 61 73 65 20 77   NOT (not case w
1ee30 68 65 6e 20 74 31 2e 61 3d 74 31 2e 61 20 74 68  hen t1.a=t1.a th
1ee40 65 6e 20 63 20 77 68 65 6e 20 7e 63 61 73 65 20  en c when ~case 
1ee50 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 74  when case when t
1ee60 31 2e 65 20 69 6e 20 28 73 65 6c 65 63 74 20 2b  1.e in (select +
1ee70 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   -count(distinct
1ee80 20 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 75   t1.d) from t1 u
1ee90 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 74  nion select cast
1eea0 28 61 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e  (avg(t1.a) AS in
1eeb0 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 20  teger) from t1) 
1eec0 74 68 65 6e 20 28 74 31 2e 65 29 20 77 68 65 6e  then (t1.e) when
1eed0 20 31 37 20 69 6e 20 28 31 33 2c 20 2d 66 2c 61   17 in (13, -f,a
1eee0 29 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65  ) then t1.d else
1eef0 20 64 20 65 6e 64 3c 31 37 20 74 68 65 6e 20 65   d end<17 then e
1ef00 20 65 6c 73 65 20 66 20 65 6e 64 2b 31 37 2b 61   else f end+17+a
1ef10 2a 20 2d 65 2b 62 2b 62 3e 74 31 2e 65 20 74 68  * -e+b+b>t1.e th
1ef20 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e  en t1.e else t1.
1ef30 61 20 65 6e 64 3c 63 20 61 6e 64 20 61 20 69 6e  a end<c and a in
1ef40 20 28 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 74   (select max( -t
1ef50 31 2e 66 29 20 7c 20 63 6f 75 6e 74 28 64 69 73  1.f) | count(dis
1ef60 74 69 6e 63 74 20 74 31 2e 62 29 2b 7e 7e 63 6f  tinct t1.b)+~~co
1ef70 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
1ef80 62 29 2d 6d 61 78 28 65 29 2d 20 2d 6d 61 78 28  b)-max(e)- -max(
1ef90 61 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  a) from t1 union
1efa0 20 73 65 6c 65 63 74 20 6d 69 6e 28 31 31 29 20   select min(11) 
1efb0 66 72 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 31 36  from t1))}.} {16
1efc0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
1efd0 70 72 2d 32 2e 31 37 31 20 7b 0a 20 20 64 62 20  pr-2.171 {.  db 
1efe0 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61  eval {SELECT coa
1eff0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 28 73  lesce((select (s
1f000 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 7e  elect cast(avg(~
1f010 31 33 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d  13) AS integer)-
1f020 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 7e  count(distinct ~
1f030 31 39 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  19-coalesce((sel
1f040 65 63 74 20 64 2d 31 37 20 66 72 6f 6d 20 74 31  ect d-17 from t1
1f050 20 77 68 65 72 65 20 63 61 73 65 20 77 68 65 6e   where case when
1f060 20 28 63 61 73 65 20 31 37 20 77 68 65 6e 20 62   (case 17 when b
1f070 20 74 68 65 6e 20 64 20 65 6c 73 65 20 28 73 65   then d else (se
1f080 6c 65 63 74 20 6d 69 6e 28 31 31 29 20 7c 20 6d  lect min(11) | m
1f090 69 6e 28 31 37 29 20 66 72 6f 6d 20 74 31 29 2b  in(17) from t1)+
1f0a0 2b 74 31 2e 61 20 65 6e 64 20 69 6e 20 28 64 2c  +t1.a end in (d,
1f0b0 20 2d 63 2c 74 31 2e 64 29 29 20 74 68 65 6e 20   -c,t1.d)) then 
1f0c0 62 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 20  b else t1.c end 
1f0d0 62 65 74 77 65 65 6e 20 74 31 2e 61 20 61 6e 64  between t1.a and
1f0e0 20 28 74 31 2e 65 29 29 2c 31 39 29 2d 74 31 2e   (t1.e)),19)-t1.
1f0f0 66 29 20 66 72 6f 6d 20 74 31 29 20 7c 20 28 61  f) from t1) | (a
1f100 62 73 28 74 31 2e 65 29 2f 61 62 73 28 74 31 2e  bs(t1.e)/abs(t1.
1f110 65 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  e)) from t1 wher
1f120 65 20 28 74 31 2e 63 20 6e 6f 74 20 69 6e 20 28  e (t1.c not in (
1f130 28 20 2d 74 31 2e 64 29 2c 28 74 31 2e 62 29 2c  ( -t1.d),(t1.b),
1f140 28 64 29 29 29 29 2c 74 31 2e 65 29 20 46 52 4f  (d)))),t1.e) FRO
1f150 4d 20 74 31 20 57 48 45 52 45 20 31 33 20 62 65  M t1 WHERE 13 be
1f160 74 77 65 65 6e 20 31 39 20 61 6e 64 20 7e 20 2d  tween 19 and ~ -
1f170 28 61 62 73 28 20 2d 74 31 2e 64 20 7c 20 63 6f  (abs( -t1.d | co
1f180 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74  alesce((select t
1f190 31 2e 66 20 66 72 6f 6d 20 74 31 20 77 68 65 72  1.f from t1 wher
1f1a0 65 20 31 39 20 6e 6f 74 20 62 65 74 77 65 65 6e  e 19 not between
1f1b0 20 2b 20 2d 63 61 73 65 20 77 68 65 6e 20 7e 7e   + -case when ~~
1f1c0 62 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  b+coalesce((sele
1f1d0 63 74 20 6d 61 78 28 74 31 2e 64 29 20 66 72 6f  ct max(t1.d) fro
1f1e0 6d 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74  m t1 where exist
1f1f0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
1f200 74 31 20 77 68 65 72 65 20 28 73 65 6c 65 63 74  t1 where (select
1f210 20 63 61 73 74 28 61 76 67 28 31 39 29 20 41 53   cast(avg(19) AS
1f220 20 69 6e 74 65 67 65 72 29 2d 63 61 73 74 28 61   integer)-cast(a
1f230 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65 72  vg(b) AS integer
1f240 29 20 66 72 6f 6d 20 74 31 29 3c 3e 61 20 61 6e  ) from t1)<>a an
1f250 64 20 31 39 20 62 65 74 77 65 65 6e 20 31 31 20  d 19 between 11 
1f260 61 6e 64 20 62 20 61 6e 64 20 31 31 20 62 65 74  and b and 11 bet
1f270 77 65 65 6e 20 61 20 61 6e 64 20 62 29 29 2c 74  ween a and b)),t
1f280 31 2e 66 29 20 7c 20 63 20 69 6e 20 28 20 2d 74  1.f) | c in ( -t
1f290 31 2e 63 2c 31 33 2c 62 29 20 74 68 65 6e 20 31  1.c,13,b) then 1
1f2a0 31 20 77 68 65 6e 20 66 20 69 6e 20 28 73 65 6c  1 when f in (sel
1f2b0 65 63 74 20 6d 69 6e 28 74 31 2e 64 29 20 66 72  ect min(t1.d) fr
1f2c0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
1f2d0 63 74 20 63 61 73 74 28 61 76 67 28 66 29 20 41  ct cast(avg(f) A
1f2e0 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
1f2f0 74 31 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c  t1) then t1.b el
1f300 73 65 20 61 20 65 6e 64 20 61 6e 64 20 74 31 2e  se a end and t1.
1f310 61 29 2c 74 31 2e 63 29 29 2f 61 62 73 28 31 31  a),t1.c))/abs(11
1f320 29 29 2b 20 2d 66 7d 0a 7d 20 7b 7d 0a 64 6f 5f  ))+ -f}.} {}.do_
1f330 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
1f340 31 37 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  172 {.  db eval 
1f350 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65  {SELECT coalesce
1f360 28 28 73 65 6c 65 63 74 20 28 73 65 6c 65 63 74  ((select (select
1f370 20 63 61 73 74 28 61 76 67 28 7e 31 33 29 20 41   cast(avg(~13) A
1f380 53 20 69 6e 74 65 67 65 72 29 2d 63 6f 75 6e 74  S integer)-count
1f390 28 64 69 73 74 69 6e 63 74 20 7e 31 39 2d 63 6f  (distinct ~19-co
1f3a0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 64  alesce((select d
1f3b0 2d 31 37 20 66 72 6f 6d 20 74 31 20 77 68 65 72  -17 from t1 wher
1f3c0 65 20 63 61 73 65 20 77 68 65 6e 20 28 63 61 73  e case when (cas
1f3d0 65 20 31 37 20 77 68 65 6e 20 62 20 74 68 65 6e  e 17 when b then
1f3e0 20 64 20 65 6c 73 65 20 28 73 65 6c 65 63 74 20   d else (select 
1f3f0 6d 69 6e 28 31 31 29 20 7c 20 6d 69 6e 28 31 37  min(11) | min(17
1f400 29 20 66 72 6f 6d 20 74 31 29 2b 2b 74 31 2e 61  ) from t1)++t1.a
1f410 20 65 6e 64 20 69 6e 20 28 64 2c 20 2d 63 2c 74   end in (d, -c,t
1f420 31 2e 64 29 29 20 74 68 65 6e 20 62 20 65 6c 73  1.d)) then b els
1f430 65 20 74 31 2e 63 20 65 6e 64 20 62 65 74 77 65  e t1.c end betwe
1f440 65 6e 20 74 31 2e 61 20 61 6e 64 20 28 74 31 2e  en t1.a and (t1.
1f450 65 29 29 2c 31 39 29 2d 74 31 2e 66 29 20 66 72  e)),19)-t1.f) fr
1f460 6f 6d 20 74 31 29 20 7c 20 28 61 62 73 28 74 31  om t1) | (abs(t1
1f470 2e 65 29 2f 61 62 73 28 74 31 2e 65 29 29 20 66  .e)/abs(t1.e)) f
1f480 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74 31  rom t1 where (t1
1f490 2e 63 20 6e 6f 74 20 69 6e 20 28 28 20 2d 74 31  .c not in (( -t1
1f4a0 2e 64 29 2c 28 74 31 2e 62 29 2c 28 64 29 29 29  .d),(t1.b),(d)))
1f4b0 29 2c 74 31 2e 65 29 20 46 52 4f 4d 20 74 31 20  ),t1.e) FROM t1 
1f4c0 57 48 45 52 45 20 4e 4f 54 20 28 31 33 20 62 65  WHERE NOT (13 be
1f4d0 74 77 65 65 6e 20 31 39 20 61 6e 64 20 7e 20 2d  tween 19 and ~ -
1f4e0 28 61 62 73 28 20 2d 74 31 2e 64 20 7c 20 63 6f  (abs( -t1.d | co
1f4f0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74  alesce((select t
1f500 31 2e 66 20 66 72 6f 6d 20 74 31 20 77 68 65 72  1.f from t1 wher
1f510 65 20 31 39 20 6e 6f 74 20 62 65 74 77 65 65 6e  e 19 not between
1f520 20 2b 20 2d 63 61 73 65 20 77 68 65 6e 20 7e 7e   + -case when ~~
1f530 62 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  b+coalesce((sele
1f540 63 74 20 6d 61 78 28 74 31 2e 64 29 20 66 72 6f  ct max(t1.d) fro
1f550 6d 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74  m t1 where exist
1f560 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
1f570 74 31 20 77 68 65 72 65 20 28 73 65 6c 65 63 74  t1 where (select
1f580 20 63 61 73 74 28 61 76 67 28 31 39 29 20 41 53   cast(avg(19) AS
1f590 20 69 6e 74 65 67 65 72 29 2d 63 61 73 74 28 61   integer)-cast(a
1f5a0 76 67 28 62 29 20 41 53 20 69 6e 74 65 67 65 72  vg(b) AS integer
1f5b0 29 20 66 72 6f 6d 20 74 31 29 3c 3e 61 20 61 6e  ) from t1)<>a an
1f5c0 64 20 31 39 20 62 65 74 77 65 65 6e 20 31 31 20  d 19 between 11 
1f5d0 61 6e 64 20 62 20 61 6e 64 20 31 31 20 62 65 74  and b and 11 bet
1f5e0 77 65 65 6e 20 61 20 61 6e 64 20 62 29 29 2c 74  ween a and b)),t
1f5f0 31 2e 66 29 20 7c 20 63 20 69 6e 20 28 20 2d 74  1.f) | c in ( -t
1f600 31 2e 63 2c 31 33 2c 62 29 20 74 68 65 6e 20 31  1.c,13,b) then 1
1f610 31 20 77 68 65 6e 20 66 20 69 6e 20 28 73 65 6c  1 when f in (sel
1f620 65 63 74 20 6d 69 6e 28 74 31 2e 64 29 20 66 72  ect min(t1.d) fr
1f630 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
1f640 63 74 20 63 61 73 74 28 61 76 67 28 66 29 20 41  ct cast(avg(f) A
1f650 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
1f660 74 31 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c  t1) then t1.b el
1f670 73 65 20 61 20 65 6e 64 20 61 6e 64 20 74 31 2e  se a end and t1.
1f680 61 29 2c 74 31 2e 63 29 29 2f 61 62 73 28 31 31  a),t1.c))/abs(11
1f690 29 29 2b 20 2d 66 29 7d 0a 7d 20 7b 2d 31 35 7d  ))+ -f)}.} {-15}
1f6a0 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
1f6b0 72 2d 32 2e 31 37 33 20 7b 0a 20 20 64 62 20 65  r-2.173 {.  db e
1f6c0 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
1f6d0 65 73 63 65 28 28 73 65 6c 65 63 74 20 28 73 65  esce((select (se
1f6e0 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 7e 31  lect cast(avg(~1
1f6f0 33 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d 63  3) AS integer)-c
1f700 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 7e 31  ount(distinct ~1
1f710 39 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  9-coalesce((sele
1f720 63 74 20 64 2d 31 37 20 66 72 6f 6d 20 74 31 20  ct d-17 from t1 
1f730 77 68 65 72 65 20 63 61 73 65 20 77 68 65 6e 20  where case when 
1f740 28 63 61 73 65 20 31 37 20 77 68 65 6e 20 62 20  (case 17 when b 
1f750 74 68 65 6e 20 64 20 65 6c 73 65 20 28 73 65 6c  then d else (sel
1f760 65 63 74 20 6d 69 6e 28 31 31 29 20 26 20 6d 69  ect min(11) & mi
1f770 6e 28 31 37 29 20 66 72 6f 6d 20 74 31 29 2b 2b  n(17) from t1)++
1f780 74 31 2e 61 20 65 6e 64 20 69 6e 20 28 64 2c 20  t1.a end in (d, 
1f790 2d 63 2c 74 31 2e 64 29 29 20 74 68 65 6e 20 62  -c,t1.d)) then b
1f7a0 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 20 62   else t1.c end b
1f7b0 65 74 77 65 65 6e 20 74 31 2e 61 20 61 6e 64 20  etween t1.a and 
1f7c0 28 74 31 2e 65 29 29 2c 31 39 29 2d 74 31 2e 66  (t1.e)),19)-t1.f
1f7d0 29 20 66 72 6f 6d 20 74 31 29 20 26 20 28 61 62  ) from t1) & (ab
1f7e0 73 28 74 31 2e 65 29 2f 61 62 73 28 74 31 2e 65  s(t1.e)/abs(t1.e
1f7f0 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
1f800 20 28 74 31 2e 63 20 6e 6f 74 20 69 6e 20 28 28   (t1.c not in ((
1f810 20 2d 74 31 2e 64 29 2c 28 74 31 2e 62 29 2c 28   -t1.d),(t1.b),(
1f820 64 29 29 29 29 2c 74 31 2e 65 29 20 46 52 4f 4d  d)))),t1.e) FROM
1f830 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 31   t1 WHERE NOT (1
1f840 33 20 62 65 74 77 65 65 6e 20 31 39 20 61 6e 64  3 between 19 and
1f850 20 7e 20 2d 28 61 62 73 28 20 2d 74 31 2e 64 20   ~ -(abs( -t1.d 
1f860 7c 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  | coalesce((sele
1f870 63 74 20 74 31 2e 66 20 66 72 6f 6d 20 74 31 20  ct t1.f from t1 
1f880 77 68 65 72 65 20 31 39 20 6e 6f 74 20 62 65 74  where 19 not bet
1f890 77 65 65 6e 20 2b 20 2d 63 61 73 65 20 77 68 65  ween + -case whe
1f8a0 6e 20 7e 7e 62 2b 63 6f 61 6c 65 73 63 65 28 28  n ~~b+coalesce((
1f8b0 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 64 29  select max(t1.d)
1f8c0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
1f8d0 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
1f8e0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 73 65  rom t1 where (se
1f8f0 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 31 39  lect cast(avg(19
1f900 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d 63 61  ) AS integer)-ca
1f910 73 74 28 61 76 67 28 62 29 20 41 53 20 69 6e 74  st(avg(b) AS int
1f920 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 3c 3e  eger) from t1)<>
1f930 61 20 61 6e 64 20 31 39 20 62 65 74 77 65 65 6e  a and 19 between
1f940 20 31 31 20 61 6e 64 20 62 20 61 6e 64 20 31 31   11 and b and 11
1f950 20 62 65 74 77 65 65 6e 20 61 20 61 6e 64 20 62   between a and b
1f960 29 29 2c 74 31 2e 66 29 20 7c 20 63 20 69 6e 20  )),t1.f) | c in 
1f970 28 20 2d 74 31 2e 63 2c 31 33 2c 62 29 20 74 68  ( -t1.c,13,b) th
1f980 65 6e 20 31 31 20 77 68 65 6e 20 66 20 69 6e 20  en 11 when f in 
1f990 28 73 65 6c 65 63 74 20 6d 69 6e 28 74 31 2e 64  (select min(t1.d
1f9a0 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
1f9b0 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
1f9c0 66 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  f) AS integer) f
1f9d0 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 74 31 2e  rom t1) then t1.
1f9e0 62 20 65 6c 73 65 20 61 20 65 6e 64 20 61 6e 64  b else a end and
1f9f0 20 74 31 2e 61 29 2c 74 31 2e 63 29 29 2f 61 62   t1.a),t1.c))/ab
1fa00 73 28 31 31 29 29 2b 20 2d 66 29 7d 0a 7d 20 7b  s(11))+ -f)}.} {
1fa10 31 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  1}.do_test rande
1fa20 78 70 72 2d 32 2e 31 37 34 20 7b 0a 20 20 64 62  xpr-2.174 {.  db
1fa30 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
1fa40 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
1fa50 61 78 28 2b 28 64 2b 61 29 2a 62 29 20 66 72 6f  ax(+(d+a)*b) fro
1fa60 6d 20 74 31 20 77 68 65 72 65 20 28 63 61 73 65  m t1 where (case
1fa70 20 65 2d 74 31 2e 62 20 77 68 65 6e 20 31 37 2b   e-t1.b when 17+
1fa80 31 31 2a 31 33 20 74 68 65 6e 20 74 31 2e 61 20  11*13 then t1.a 
1fa90 65 6c 73 65 20 31 37 20 65 6e 64 2d 28 31 37 29  else 17 end-(17)
1faa0 3c 3e 28 73 65 6c 65 63 74 20 63 61 73 74 28 61  <>(select cast(a
1fab0 76 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65  vg(t1.f) AS inte
1fac0 67 65 72 29 20 66 72 6f 6d 20 74 31 29 29 29 2c  ger) from t1))),
1fad0 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77  case when case w
1fae0 68 65 6e 20 31 31 2b 31 33 3c 3e 31 39 20 74 68  hen 11+13<>19 th
1faf0 65 6e 20 31 33 20 65 6c 73 65 20 74 31 2e 66 20  en 13 else t1.f 
1fb00 65 6e 64 2a 65 20 69 6e 20 28 61 2c 74 31 2e 66  end*e in (a,t1.f
1fb10 2c 74 31 2e 63 29 20 61 6e 64 20 6e 6f 74 20 65  ,t1.c) and not e
1fb20 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
1fb30 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
1fb40 62 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d 20  b in (select  - 
1fb50 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
1fb60 74 31 2e 62 29 2a 28 20 2d 63 6f 75 6e 74 28 2a  t1.b)*( -count(*
1fb70 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  )) from t1 union
1fb80 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69   select count(di
1fb90 73 74 69 6e 63 74 20 74 31 2e 65 29 20 66 72 6f  stinct t1.e) fro
1fba0 6d 20 74 31 29 29 20 74 68 65 6e 20 74 31 2e 63  m t1)) then t1.c
1fbb0 20 65 6c 73 65 20 61 20 65 6e 64 29 20 46 52 4f   else a end) FRO
1fbc0 4d 20 74 31 20 57 48 45 52 45 20 63 61 73 65 20  M t1 WHERE case 
1fbd0 77 68 65 6e 20 74 31 2e 64 20 69 6e 20 28 73 65  when t1.d in (se
1fbe0 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 2d 63 6f  lect count(*)-co
1fbf0 75 6e 74 28 2a 29 2b 20 2d 6d 69 6e 28 63 61 73  unt(*)+ -min(cas
1fc00 65 20 64 20 77 68 65 6e 20 74 31 2e 63 20 74 68  e d when t1.c th
1fc10 65 6e 20 31 39 20 65 6c 73 65 20 31 31 20 65 6e  en 19 else 11 en
1fc20 64 29 2a 63 6f 75 6e 74 28 2a 29 20 7c 20 6d 69  d)*count(*) | mi
1fc30 6e 28 31 39 29 2d 28 6d 61 78 28 28 65 29 29 29  n(19)-(max((e)))
1fc40 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
1fc50 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66  elect count(*) f
1fc60 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 63 20 77  rom t1) then c w
1fc70 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63  hen exists(selec
1fc80 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
1fc90 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
1fca0 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
1fcb0 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
1fcc0 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
1fcd0 65 20 28 61 62 73 28 62 29 2f 61 62 73 28 74 31  e (abs(b)/abs(t1
1fce0 2e 63 29 29 3e 63 6f 61 6c 65 73 63 65 28 28 73  .c))>coalesce((s
1fcf0 65 6c 65 63 74 20 6d 61 78 28 66 29 20 66 72 6f  elect max(f) fro
1fd00 6d 20 74 31 20 77 68 65 72 65 20 66 3c 3d 74 31  m t1 where f<=t1
1fd10 2e 61 29 2c 74 31 2e 64 29 29 29 29 20 74 68 65  .a),t1.d)))) the
1fd20 6e 20 66 2a 74 31 2e 63 2b 31 31 20 65 6c 73 65  n f*t1.c+11 else
1fd30 20 74 31 2e 66 20 65 6e 64 2b 65 2d 65 2a 74 31   t1.f end+e-e*t1
1fd40 2e 66 3c 3d 31 37 7d 0a 7d 20 7b 31 30 30 30 30  .f<=17}.} {10000
1fd50 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  0}.do_test rande
1fd60 78 70 72 2d 32 2e 31 37 35 20 7b 0a 20 20 64 62  xpr-2.175 {.  db
1fd70 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
1fd80 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
1fd90 61 78 28 2b 28 64 2b 61 29 2a 62 29 20 66 72 6f  ax(+(d+a)*b) fro
1fda0 6d 20 74 31 20 77 68 65 72 65 20 28 63 61 73 65  m t1 where (case
1fdb0 20 65 2d 74 31 2e 62 20 77 68 65 6e 20 31 37 2b   e-t1.b when 17+
1fdc0 31 31 2a 31 33 20 74 68 65 6e 20 74 31 2e 61 20  11*13 then t1.a 
1fdd0 65 6c 73 65 20 31 37 20 65 6e 64 2d 28 31 37 29  else 17 end-(17)
1fde0 3c 3e 28 73 65 6c 65 63 74 20 63 61 73 74 28 61  <>(select cast(a
1fdf0 76 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65  vg(t1.f) AS inte
1fe00 67 65 72 29 20 66 72 6f 6d 20 74 31 29 29 29 2c  ger) from t1))),
1fe10 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77  case when case w
1fe20 68 65 6e 20 31 31 2b 31 33 3c 3e 31 39 20 74 68  hen 11+13<>19 th
1fe30 65 6e 20 31 33 20 65 6c 73 65 20 74 31 2e 66 20  en 13 else t1.f 
1fe40 65 6e 64 2a 65 20 69 6e 20 28 61 2c 74 31 2e 66  end*e in (a,t1.f
1fe50 2c 74 31 2e 63 29 20 61 6e 64 20 6e 6f 74 20 65  ,t1.c) and not e
1fe60 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
1fe70 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
1fe80 62 20 69 6e 20 28 73 65 6c 65 63 74 20 20 2d 20  b in (select  - 
1fe90 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
1fea0 74 31 2e 62 29 2a 28 20 2d 63 6f 75 6e 74 28 2a  t1.b)*( -count(*
1feb0 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  )) from t1 union
1fec0 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69   select count(di
1fed0 73 74 69 6e 63 74 20 74 31 2e 65 29 20 66 72 6f  stinct t1.e) fro
1fee0 6d 20 74 31 29 29 20 74 68 65 6e 20 74 31 2e 63  m t1)) then t1.c
1fef0 20 65 6c 73 65 20 61 20 65 6e 64 29 20 46 52 4f   else a end) FRO
1ff00 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
1ff10 63 61 73 65 20 77 68 65 6e 20 74 31 2e 64 20 69  case when t1.d i
1ff20 6e 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  n (select count(
1ff30 2a 29 2d 63 6f 75 6e 74 28 2a 29 2b 20 2d 6d 69  *)-count(*)+ -mi
1ff40 6e 28 63 61 73 65 20 64 20 77 68 65 6e 20 74 31  n(case d when t1
1ff50 2e 63 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20  .c then 19 else 
1ff60 31 31 20 65 6e 64 29 2a 63 6f 75 6e 74 28 2a 29  11 end)*count(*)
1ff70 20 7c 20 6d 69 6e 28 31 39 29 2d 28 6d 61 78 28   | min(19)-(max(
1ff80 28 65 29 29 29 20 66 72 6f 6d 20 74 31 20 75 6e  (e))) from t1 un
1ff90 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e 74  ion select count
1ffa0 28 2a 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65  (*) from t1) the
1ffb0 6e 20 63 20 77 68 65 6e 20 65 78 69 73 74 73 28  n c when exists(
1ffc0 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
1ffd0 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73 65   where exists(se
1ffe0 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
1fff0 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28  here not exists(
20000 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
20010 20 77 68 65 72 65 20 28 61 62 73 28 62 29 2f 61   where (abs(b)/a
20020 62 73 28 74 31 2e 63 29 29 3e 63 6f 61 6c 65 73  bs(t1.c))>coales
20030 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 66  ce((select max(f
20040 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
20050 66 3c 3d 74 31 2e 61 29 2c 74 31 2e 64 29 29 29  f<=t1.a),t1.d)))
20060 29 20 74 68 65 6e 20 66 2a 74 31 2e 63 2b 31 31  ) then f*t1.c+11
20070 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 2b 65   else t1.f end+e
20080 2d 65 2a 74 31 2e 66 3c 3d 31 37 29 7d 0a 7d 20  -e*t1.f<=17)}.} 
20090 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
200a0 78 70 72 2d 32 2e 31 37 36 20 7b 0a 20 20 64 62  xpr-2.176 {.  db
200b0 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 31   eval {SELECT t1
200c0 2e 63 2a 63 61 73 65 20 77 68 65 6e 20 74 31 2e  .c*case when t1.
200d0 65 3e 28 73 65 6c 65 63 74 20 2b 63 61 73 74 28  e>(select +cast(
200e0 61 76 67 28 31 33 29 20 41 53 20 69 6e 74 65 67  avg(13) AS integ
200f0 65 72 29 2a 6d 69 6e 28 28 31 31 29 2a 20 2d 20  er)*min((11)* - 
20100 2d 64 20 7c 20 20 2d 20 2d 63 6f 61 6c 65 73 63  -d |  - -coalesc
20110 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 62 29  e((select max(b)
20120 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
20130 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
20140 28 61 62 73 28 61 29 2f 61 62 73 28 62 2d 28 65  (abs(a)/abs(b-(e
20150 29 29 29 29 20 41 53 20 69 6e 74 65 67 65 72 29  )))) AS integer)
20160 20 66 72 6f 6d 20 74 31 29 2b 31 31 2a 63 3c 74   from t1)+11*c<t
20170 31 2e 64 29 2c 65 29 2d 74 31 2e 66 2d 74 31 2e  1.d),e)-t1.f-t1.
20180 62 2b 28 74 31 2e 61 29 29 20 66 72 6f 6d 20 74  b+(t1.a)) from t
20190 31 29 20 74 68 65 6e 20 74 31 2e 63 20 77 68 65  1) then t1.c whe
201a0 6e 20 2b 62 20 69 6e 20 28 31 37 2c 61 2c 62 29  n +b in (17,a,b)
201b0 20 74 68 65 6e 20 64 20 65 6c 73 65 20 66 20 65   then d else f e
201c0 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  nd FROM t1 WHERE
201d0 20 28 28 6e 6f 74 20 65 78 69 73 74 73 28 73 65   ((not exists(se
201e0 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
201f0 68 65 72 65 20 6e 6f 74 20 28 65 78 69 73 74 73  here not (exists
20200 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
20210 31 20 77 68 65 72 65 20 28 74 31 2e 63 20 69 6e  1 where (t1.c in
20220 20 28 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72   (select t1.d fr
20230 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
20240 63 74 20 20 2d 63 20 66 72 6f 6d 20 74 31 29 29  ct  -c from t1))
20250 20 6f 72 20 28 73 65 6c 65 63 74 20 63 61 73 74   or (select cast
20260 28 61 76 67 28 7e 28 65 29 29 20 41 53 20 69 6e  (avg(~(e)) AS in
20270 74 65 67 65 72 29 20 7c 20 6d 69 6e 28 63 61 73  teger) | min(cas
20280 65 20 77 68 65 6e 20 66 3d 74 31 2e 65 20 61 6e  e when f=t1.e an
20290 64 20 74 31 2e 65 20 69 6e 20 28 74 31 2e 62 2c  d t1.e in (t1.b,
202a0 74 31 2e 66 2c 74 31 2e 61 29 20 74 68 65 6e 20  t1.f,t1.a) then 
202b0 74 31 2e 66 20 77 68 65 6e 20 74 31 2e 64 3e 3d  t1.f when t1.d>=
202c0 61 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  a then t1.b else
202d0 20 74 31 2e 62 20 65 6e 64 20 7c 20 31 39 2b 61   t1.b end | 19+a
202e0 2d 63 29 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e  -c)*count(distin
202f0 63 74 20 74 31 2e 64 29 2d 2b 63 6f 75 6e 74 28  ct t1.d)-+count(
20300 64 69 73 74 69 6e 63 74 20 74 31 2e 64 29 20 66  distinct t1.d) f
20310 72 6f 6d 20 74 31 29 20 6e 6f 74 20 69 6e 20 28  rom t1) not in (
20320 31 39 2c 64 2c 62 29 20 61 6e 64 20 74 31 2e 66  19,d,b) and t1.f
20330 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 62 20 61   not between b a
20340 6e 64 20 74 31 2e 66 29 29 29 29 29 7d 0a 7d 20  nd t1.f)))))}.} 
20350 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
20360 78 70 72 2d 32 2e 31 37 37 20 7b 0a 20 20 64 62  xpr-2.177 {.  db
20370 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 31   eval {SELECT t1
20380 2e 63 2a 63 61 73 65 20 77 68 65 6e 20 74 31 2e  .c*case when t1.
20390 65 3e 28 73 65 6c 65 63 74 20 2b 63 61 73 74 28  e>(select +cast(
203a0 61 76 67 28 31 33 29 20 41 53 20 69 6e 74 65 67  avg(13) AS integ
203b0 65 72 29 2a 6d 69 6e 28 28 31 31 29 2a 20 2d 20  er)*min((11)* - 
203c0 2d 64 20 7c 20 20 2d 20 2d 63 6f 61 6c 65 73 63  -d |  - -coalesc
203d0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 62 29  e((select max(b)
203e0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
203f0 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
20400 28 61 62 73 28 61 29 2f 61 62 73 28 62 2d 28 65  (abs(a)/abs(b-(e
20410 29 29 29 29 20 41 53 20 69 6e 74 65 67 65 72 29  )))) AS integer)
20420 20 66 72 6f 6d 20 74 31 29 2b 31 31 2a 63 3c 74   from t1)+11*c<t
20430 31 2e 64 29 2c 65 29 2d 74 31 2e 66 2d 74 31 2e  1.d),e)-t1.f-t1.
20440 62 2b 28 74 31 2e 61 29 29 20 66 72 6f 6d 20 74  b+(t1.a)) from t
20450 31 29 20 74 68 65 6e 20 74 31 2e 63 20 77 68 65  1) then t1.c whe
20460 6e 20 2b 62 20 69 6e 20 28 31 37 2c 61 2c 62 29  n +b in (17,a,b)
20470 20 74 68 65 6e 20 64 20 65 6c 73 65 20 66 20 65   then d else f e
20480 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  nd FROM t1 WHERE
20490 20 4e 4f 54 20 28 28 28 6e 6f 74 20 65 78 69 73   NOT (((not exis
204a0 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
204b0 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 28 65   t1 where not (e
204c0 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
204d0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74 31  rom t1 where (t1
204e0 2e 63 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31  .c in (select t1
204f0 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  .d from t1 union
20500 20 73 65 6c 65 63 74 20 20 2d 63 20 66 72 6f 6d   select  -c from
20510 20 74 31 29 29 20 6f 72 20 28 73 65 6c 65 63 74   t1)) or (select
20520 20 63 61 73 74 28 61 76 67 28 7e 28 65 29 29 20   cast(avg(~(e)) 
20530 41 53 20 69 6e 74 65 67 65 72 29 20 7c 20 6d 69  AS integer) | mi
20540 6e 28 63 61 73 65 20 77 68 65 6e 20 66 3d 74 31  n(case when f=t1
20550 2e 65 20 61 6e 64 20 74 31 2e 65 20 69 6e 20 28  .e and t1.e in (
20560 74 31 2e 62 2c 74 31 2e 66 2c 74 31 2e 61 29 20  t1.b,t1.f,t1.a) 
20570 74 68 65 6e 20 74 31 2e 66 20 77 68 65 6e 20 74  then t1.f when t
20580 31 2e 64 3e 3d 61 20 74 68 65 6e 20 74 31 2e 62  1.d>=a then t1.b
20590 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 20 7c   else t1.b end |
205a0 20 31 39 2b 61 2d 63 29 2a 63 6f 75 6e 74 28 64   19+a-c)*count(d
205b0 69 73 74 69 6e 63 74 20 74 31 2e 64 29 2d 2b 63  istinct t1.d)-+c
205c0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
205d0 2e 64 29 20 66 72 6f 6d 20 74 31 29 20 6e 6f 74  .d) from t1) not
205e0 20 69 6e 20 28 31 39 2c 64 2c 62 29 20 61 6e 64   in (19,d,b) and
205f0 20 74 31 2e 66 20 6e 6f 74 20 62 65 74 77 65 65   t1.f not betwee
20600 6e 20 62 20 61 6e 64 20 74 31 2e 66 29 29 29 29  n b and t1.f))))
20610 29 29 7d 0a 7d 20 7b 39 30 30 30 30 7d 0a 64 6f  ))}.} {90000}.do
20620 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
20630 2e 31 37 38 20 7b 0a 20 20 64 62 20 65 76 61 6c  .178 {.  db eval
20640 20 7b 53 45 4c 45 43 54 20 74 31 2e 63 2a 63 61   {SELECT t1.c*ca
20650 73 65 20 77 68 65 6e 20 74 31 2e 65 3e 28 73 65  se when t1.e>(se
20660 6c 65 63 74 20 2b 63 61 73 74 28 61 76 67 28 31  lect +cast(avg(1
20670 33 29 20 41 53 20 69 6e 74 65 67 65 72 29 2a 6d  3) AS integer)*m
20680 69 6e 28 28 31 31 29 2a 20 2d 20 2d 64 20 26 20  in((11)* - -d & 
20690 20 2d 20 2d 63 6f 61 6c 65 73 63 65 28 28 73 65   - -coalesce((se
206a0 6c 65 63 74 20 6d 61 78 28 62 29 20 66 72 6f 6d  lect max(b) from
206b0 20 74 31 20 77 68 65 72 65 20 28 73 65 6c 65 63   t1 where (selec
206c0 74 20 63 61 73 74 28 61 76 67 28 28 61 62 73 28  t cast(avg((abs(
206d0 61 29 2f 61 62 73 28 62 2d 28 65 29 29 29 29 20  a)/abs(b-(e)))) 
206e0 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
206f0 20 74 31 29 2b 31 31 2a 63 3c 74 31 2e 64 29 2c   t1)+11*c<t1.d),
20700 65 29 2d 74 31 2e 66 2d 74 31 2e 62 2b 28 74 31  e)-t1.f-t1.b+(t1
20710 2e 61 29 29 20 66 72 6f 6d 20 74 31 29 20 74 68  .a)) from t1) th
20720 65 6e 20 74 31 2e 63 20 77 68 65 6e 20 2b 62 20  en t1.c when +b 
20730 69 6e 20 28 31 37 2c 61 2c 62 29 20 74 68 65 6e  in (17,a,b) then
20740 20 64 20 65 6c 73 65 20 66 20 65 6e 64 20 46 52   d else f end FR
20750 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
20760 28 28 28 6e 6f 74 20 65 78 69 73 74 73 28 73 65  (((not exists(se
20770 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
20780 68 65 72 65 20 6e 6f 74 20 28 65 78 69 73 74 73  here not (exists
20790 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
207a0 31 20 77 68 65 72 65 20 28 74 31 2e 63 20 69 6e  1 where (t1.c in
207b0 20 28 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72   (select t1.d fr
207c0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
207d0 63 74 20 20 2d 63 20 66 72 6f 6d 20 74 31 29 29  ct  -c from t1))
207e0 20 6f 72 20 28 73 65 6c 65 63 74 20 63 61 73 74   or (select cast
207f0 28 61 76 67 28 7e 28 65 29 29 20 41 53 20 69 6e  (avg(~(e)) AS in
20800 74 65 67 65 72 29 20 7c 20 6d 69 6e 28 63 61 73  teger) | min(cas
20810 65 20 77 68 65 6e 20 66 3d 74 31 2e 65 20 61 6e  e when f=t1.e an
20820 64 20 74 31 2e 65 20 69 6e 20 28 74 31 2e 62 2c  d t1.e in (t1.b,
20830 74 31 2e 66 2c 74 31 2e 61 29 20 74 68 65 6e 20  t1.f,t1.a) then 
20840 74 31 2e 66 20 77 68 65 6e 20 74 31 2e 64 3e 3d  t1.f when t1.d>=
20850 61 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  a then t1.b else
20860 20 74 31 2e 62 20 65 6e 64 20 7c 20 31 39 2b 61   t1.b end | 19+a
20870 2d 63 29 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e  -c)*count(distin
20880 63 74 20 74 31 2e 64 29 2d 2b 63 6f 75 6e 74 28  ct t1.d)-+count(
20890 64 69 73 74 69 6e 63 74 20 74 31 2e 64 29 20 66  distinct t1.d) f
208a0 72 6f 6d 20 74 31 29 20 6e 6f 74 20 69 6e 20 28  rom t1) not in (
208b0 31 39 2c 64 2c 62 29 20 61 6e 64 20 74 31 2e 66  19,d,b) and t1.f
208c0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 62 20 61   not between b a
208d0 6e 64 20 74 31 2e 66 29 29 29 29 29 29 7d 0a 7d  nd t1.f))))))}.}
208e0 20 7b 31 32 30 30 30 30 7d 0a 64 6f 5f 74 65 73   {120000}.do_tes
208f0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 37 39  t randexpr-2.179
20900 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
20910 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 6e  LECT case when n
20920 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
20930 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
20940 20 28 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c   (not exists(sel
20950 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
20960 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73  ere not exists(s
20970 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
20980 77 68 65 72 65 20 6e 6f 74 20 64 2a 31 39 3d 62  where not d*19=b
20990 29 29 29 20 6f 72 20 74 31 2e 61 2d 61 2d 74 31  ))) or t1.a-a-t1
209a0 2e 64 2a 74 31 2e 66 20 69 6e 20 28 73 65 6c 65  .d*t1.f in (sele
209b0 63 74 20 7e 63 61 73 65 20 63 61 73 74 28 61 76  ct ~case cast(av
209c0 67 28 74 31 2e 64 29 20 41 53 20 69 6e 74 65 67  g(t1.d) AS integ
209d0 65 72 29 20 7c 20 63 6f 75 6e 74 28 2a 29 2b 6d  er) | count(*)+m
209e0 61 78 28 74 31 2e 63 29 20 77 68 65 6e 20 6d 61  ax(t1.c) when ma
209f0 78 28 31 37 29 20 74 68 65 6e 20 63 61 73 74 28  x(17) then cast(
20a00 61 76 67 28 20 2d 66 29 20 41 53 20 69 6e 74 65  avg( -f) AS inte
20a10 67 65 72 29 20 65 6c 73 65 20 20 2d 6d 69 6e 28  ger) else  -min(
20a20 65 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75  e) end from t1 u
20a30 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78 28  nion select max(
20a40 20 2d 31 33 29 20 66 72 6f 6d 20 74 31 29 29 20   -13) from t1)) 
20a50 74 68 65 6e 20 28 73 65 6c 65 63 74 20 61 62 73  then (select abs
20a60 28 28 2b 20 2d 6d 69 6e 28 61 29 29 20 7c 20 6d  ((+ -min(a)) | m
20a70 69 6e 28 74 31 2e 61 29 2d 63 61 73 74 28 61 76  in(t1.a)-cast(av
20a80 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65 67  g(t1.f) AS integ
20a90 65 72 29 29 20 7c 20 6d 61 78 28 65 29 20 66 72  er)) | max(e) fr
20aa0 6f 6d 20 74 31 29 20 65 6c 73 65 20 31 31 20 65  om t1) else 11 e
20ab0 6e 64 2a 61 20 7c 20 74 31 2e 61 2a 66 20 46 52  nd*a | t1.a*f FR
20ac0 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e 63  OM t1 WHERE t1.c
20ad0 20 69 6e 20 28 63 2c 74 31 2e 62 2c 7e 65 29 20   in (c,t1.b,~e) 
20ae0 61 6e 64 20 31 33 2b 31 39 2d 74 31 2e 62 20 7c  and 13+19-t1.b |
20af0 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
20b00 74 20 6d 61 78 28 63 61 73 65 20 64 20 77 68 65  t max(case d whe
20b10 6e 20 2b 74 31 2e 65 2b 31 33 2a 31 33 20 74 68  n +t1.e+13*13 th
20b20 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
20b30 65 63 74 20 63 61 73 65 20 77 68 65 6e 20 66 3c  ect case when f<
20b40 74 31 2e 66 20 74 68 65 6e 20 7e 64 20 65 6c 73  t1.f then ~d els
20b50 65 20 31 39 20 65 6e 64 20 66 72 6f 6d 20 74 31  e 19 end from t1
20b60 20 77 68 65 72 65 20 6e 6f 74 20 64 3e 3d 65 20   where not d>=e 
20b70 6f 72 20 20 2d 66 3c 3d 65 20 61 6e 64 20 74 31  or  -f<=e and t1
20b80 2e 64 3c 3e 31 39 29 2c 64 29 20 65 6c 73 65 20  .d<>19),d) else 
20b90 64 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77  d end) from t1 w
20ba0 68 65 72 65 20 74 31 2e 64 3c 62 29 2c 74 31 2e  here t1.d<b),t1.
20bb0 61 29 2a 64 2a 28 61 29 3c 3d 74 31 2e 64 7d 0a  a)*d*(a)<=t1.d}.
20bc0 7d 20 7b 36 31 30 33 36 7d 0a 64 6f 5f 74 65 73  } {61036}.do_tes
20bd0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 38 30  t randexpr-2.180
20be0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
20bf0 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 6e  LECT case when n
20c00 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
20c10 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
20c20 20 28 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c   (not exists(sel
20c30 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
20c40 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73  ere not exists(s
20c50 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
20c60 77 68 65 72 65 20 6e 6f 74 20 64 2a 31 39 3d 62  where not d*19=b
20c70 29 29 29 20 6f 72 20 74 31 2e 61 2d 61 2d 74 31  ))) or t1.a-a-t1
20c80 2e 64 2a 74 31 2e 66 20 69 6e 20 28 73 65 6c 65  .d*t1.f in (sele
20c90 63 74 20 7e 63 61 73 65 20 63 61 73 74 28 61 76  ct ~case cast(av
20ca0 67 28 74 31 2e 64 29 20 41 53 20 69 6e 74 65 67  g(t1.d) AS integ
20cb0 65 72 29 20 7c 20 63 6f 75 6e 74 28 2a 29 2b 6d  er) | count(*)+m
20cc0 61 78 28 74 31 2e 63 29 20 77 68 65 6e 20 6d 61  ax(t1.c) when ma
20cd0 78 28 31 37 29 20 74 68 65 6e 20 63 61 73 74 28  x(17) then cast(
20ce0 61 76 67 28 20 2d 66 29 20 41 53 20 69 6e 74 65  avg( -f) AS inte
20cf0 67 65 72 29 20 65 6c 73 65 20 20 2d 6d 69 6e 28  ger) else  -min(
20d00 65 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75  e) end from t1 u
20d10 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78 28  nion select max(
20d20 20 2d 31 33 29 20 66 72 6f 6d 20 74 31 29 29 20   -13) from t1)) 
20d30 74 68 65 6e 20 28 73 65 6c 65 63 74 20 61 62 73  then (select abs
20d40 28 28 2b 20 2d 6d 69 6e 28 61 29 29 20 7c 20 6d  ((+ -min(a)) | m
20d50 69 6e 28 74 31 2e 61 29 2d 63 61 73 74 28 61 76  in(t1.a)-cast(av
20d60 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65 67  g(t1.f) AS integ
20d70 65 72 29 29 20 7c 20 6d 61 78 28 65 29 20 66 72  er)) | max(e) fr
20d80 6f 6d 20 74 31 29 20 65 6c 73 65 20 31 31 20 65  om t1) else 11 e
20d90 6e 64 2a 61 20 7c 20 74 31 2e 61 2a 66 20 46 52  nd*a | t1.a*f FR
20da0 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
20db0 28 74 31 2e 63 20 69 6e 20 28 63 2c 74 31 2e 62  (t1.c in (c,t1.b
20dc0 2c 7e 65 29 20 61 6e 64 20 31 33 2b 31 39 2d 74  ,~e) and 13+19-t
20dd0 31 2e 62 20 7c 20 63 6f 61 6c 65 73 63 65 28 28  1.b | coalesce((
20de0 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20  select max(case 
20df0 64 20 77 68 65 6e 20 2b 74 31 2e 65 2b 31 33 2a  d when +t1.e+13*
20e00 31 33 20 74 68 65 6e 20 63 6f 61 6c 65 73 63 65  13 then coalesce
20e10 28 28 73 65 6c 65 63 74 20 63 61 73 65 20 77 68  ((select case wh
20e20 65 6e 20 66 3c 74 31 2e 66 20 74 68 65 6e 20 7e  en f<t1.f then ~
20e30 64 20 65 6c 73 65 20 31 39 20 65 6e 64 20 66 72  d else 19 end fr
20e40 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
20e50 64 3e 3d 65 20 6f 72 20 20 2d 66 3c 3d 65 20 61  d>=e or  -f<=e a
20e60 6e 64 20 74 31 2e 64 3c 3e 31 39 29 2c 64 29 20  nd t1.d<>19),d) 
20e70 65 6c 73 65 20 64 20 65 6e 64 29 20 66 72 6f 6d  else d end) from
20e80 20 74 31 20 77 68 65 72 65 20 74 31 2e 64 3c 62   t1 where t1.d<b
20e90 29 2c 74 31 2e 61 29 2a 64 2a 28 61 29 3c 3d 74  ),t1.a)*d*(a)<=t
20ea0 31 2e 64 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  1.d)}.} {}.do_te
20eb0 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 38  st randexpr-2.18
20ec0 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  1 {.  db eval {S
20ed0 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20  ELECT case when 
20ee0 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
20ef0 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
20f00 65 20 28 6e 6f 74 20 65 78 69 73 74 73 28 73 65  e (not exists(se
20f10 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
20f20 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28  here not exists(
20f30 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
20f40 20 77 68 65 72 65 20 6e 6f 74 20 64 2a 31 39 3d   where not d*19=
20f50 62 29 29 29 20 6f 72 20 74 31 2e 61 2d 61 2d 74  b))) or t1.a-a-t
20f60 31 2e 64 2a 74 31 2e 66 20 69 6e 20 28 73 65 6c  1.d*t1.f in (sel
20f70 65 63 74 20 7e 63 61 73 65 20 63 61 73 74 28 61  ect ~case cast(a
20f80 76 67 28 74 31 2e 64 29 20 41 53 20 69 6e 74 65  vg(t1.d) AS inte
20f90 67 65 72 29 20 26 20 63 6f 75 6e 74 28 2a 29 2b  ger) & count(*)+
20fa0 6d 61 78 28 74 31 2e 63 29 20 77 68 65 6e 20 6d  max(t1.c) when m
20fb0 61 78 28 31 37 29 20 74 68 65 6e 20 63 61 73 74  ax(17) then cast
20fc0 28 61 76 67 28 20 2d 66 29 20 41 53 20 69 6e 74  (avg( -f) AS int
20fd0 65 67 65 72 29 20 65 6c 73 65 20 20 2d 6d 69 6e  eger) else  -min
20fe0 28 65 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20  (e) end from t1 
20ff0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 61 78  union select max
21000 28 20 2d 31 33 29 20 66 72 6f 6d 20 74 31 29 29  ( -13) from t1))
21010 20 74 68 65 6e 20 28 73 65 6c 65 63 74 20 61 62   then (select ab
21020 73 28 28 2b 20 2d 6d 69 6e 28 61 29 29 20 26 20  s((+ -min(a)) & 
21030 6d 69 6e 28 74 31 2e 61 29 2d 63 61 73 74 28 61  min(t1.a)-cast(a
21040 76 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65  vg(t1.f) AS inte
21050 67 65 72 29 29 20 26 20 6d 61 78 28 65 29 20 66  ger)) & max(e) f
21060 72 6f 6d 20 74 31 29 20 65 6c 73 65 20 31 31 20  rom t1) else 11 
21070 65 6e 64 2a 61 20 26 20 74 31 2e 61 2a 66 20 46  end*a & t1.a*f F
21080 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e  ROM t1 WHERE t1.
21090 63 20 69 6e 20 28 63 2c 74 31 2e 62 2c 7e 65 29  c in (c,t1.b,~e)
210a0 20 61 6e 64 20 31 33 2b 31 39 2d 74 31 2e 62 20   and 13+19-t1.b 
210b0 7c 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  | coalesce((sele
210c0 63 74 20 6d 61 78 28 63 61 73 65 20 64 20 77 68  ct max(case d wh
210d0 65 6e 20 2b 74 31 2e 65 2b 31 33 2a 31 33 20 74  en +t1.e+13*13 t
210e0 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65  hen coalesce((se
210f0 6c 65 63 74 20 63 61 73 65 20 77 68 65 6e 20 66  lect case when f
21100 3c 74 31 2e 66 20 74 68 65 6e 20 7e 64 20 65 6c  <t1.f then ~d el
21110 73 65 20 31 39 20 65 6e 64 20 66 72 6f 6d 20 74  se 19 end from t
21120 31 20 77 68 65 72 65 20 6e 6f 74 20 64 3e 3d 65  1 where not d>=e
21130 20 6f 72 20 20 2d 66 3c 3d 65 20 61 6e 64 20 74   or  -f<=e and t
21140 31 2e 64 3c 3e 31 39 29 2c 64 29 20 65 6c 73 65  1.d<>19),d) else
21150 20 64 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20   d end) from t1 
21160 77 68 65 72 65 20 74 31 2e 64 3c 62 29 2c 74 31  where t1.d<b),t1
21170 2e 61 29 2a 64 2a 28 61 29 3c 3d 74 31 2e 64 7d  .a)*d*(a)<=t1.d}
21180 0a 7d 20 7b 36 34 7d 0a 64 6f 5f 74 65 73 74 20  .} {64}.do_test 
21190 72 61 6e 64 65 78 70 72 2d 32 2e 31 38 32 20 7b  randexpr-2.182 {
211a0 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
211b0 43 54 20 28 61 62 73 28 74 31 2e 66 2d 28 61 62  CT (abs(t1.f-(ab
211c0 73 28 63 61 73 65 20 63 20 77 68 65 6e 20 74 31  s(case c when t1
211d0 2e 61 2b 28 73 65 6c 65 63 74 20 6d 61 78 28 31  .a+(select max(1
211e0 37 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  7-coalesce((sele
211f0 63 74 20 2b 65 2d 74 31 2e 61 2b 31 31 2d 31 33  ct +e-t1.a+11-13
21200 2b 64 2b 31 31 2d 74 31 2e 61 20 66 72 6f 6d 20  +d+11-t1.a from 
21210 74 31 20 77 68 65 72 65 20 74 31 2e 65 20 69 6e  t1 where t1.e in
21220 20 28 73 65 6c 65 63 74 20 7e 63 6f 61 6c 65 73   (select ~coales
21230 63 65 28 28 73 65 6c 65 63 74 20 61 20 66 72 6f  ce((select a fro
21240 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 63 2d  m t1 where t1.c-
21250 61 3d 62 29 2c 74 31 2e 63 29 2b 31 37 20 66 72  a=b),t1.c)+17 fr
21260 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
21270 63 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 29  ct t1.e from t1)
21280 29 2c 63 29 2d 64 29 20 66 72 6f 6d 20 74 31 29  ),c)-d) from t1)
21290 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20 20 2d   then 17 else  -
212a0 74 31 2e 65 20 65 6e 64 29 2f 61 62 73 28 64 29  t1.e end)/abs(d)
212b0 29 2d 31 37 29 2f 61 62 73 28 74 31 2e 62 29 29  )-17)/abs(t1.b))
212c0 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
212d0 20 69 6e 20 28 73 65 6c 65 63 74 20 2b 63 6f 75   in (select +cou
212e0 6e 74 28 64 69 73 74 69 6e 63 74 20 28 31 39 29  nt(distinct (19)
212f0 2d 31 31 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  -11) from t1 uni
21300 6f 6e 20 73 65 6c 65 63 74 20 63 61 73 65 20 63  on select case c
21310 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 20 2d 63  ount(*) when  -c
21320 61 73 65 20 6d 69 6e 28 28 61 62 73 28 74 31 2e  ase min((abs(t1.
21330 63 2a 28 74 31 2e 63 29 2b 31 31 29 2f 61 62 73  c*(t1.c)+11)/abs
21340 28 31 39 29 29 2a 7e 64 2a 66 29 20 77 68 65 6e  (19))*~d*f) when
21350 20 61 62 73 28 63 6f 75 6e 74 28 2a 29 2b 63 6f   abs(count(*)+co
21360 75 6e 74 28 2a 29 29 20 74 68 65 6e 20 28 2b 28  unt(*)) then (+(
21370 6d 69 6e 28 65 29 2a 20 2d 63 61 73 74 28 61 76  min(e)* -cast(av
21380 67 28 31 37 29 20 41 53 20 69 6e 74 65 67 65 72  g(17) AS integer
21390 29 2a 20 2d 63 61 73 74 28 61 76 67 28 64 29 20  )* -cast(avg(d) 
213a0 41 53 20 69 6e 74 65 67 65 72 29 2b 6d 61 78 28  AS integer)+max(
213b0 74 31 2e 66 29 29 29 20 65 6c 73 65 20 28 63 6f  t1.f))) else (co
213c0 75 6e 74 28 2a 29 29 20 65 6e 64 20 7c 20 28 6d  unt(*)) end | (m
213d0 69 6e 28 20 2d 28 28 74 31 2e 62 29 29 29 29 20  in( -((t1.b)))) 
213e0 74 68 65 6e 20 28 6d 61 78 28 74 31 2e 63 29 29  then (max(t1.c))
213f0 20 65 6c 73 65 20 20 2d 63 6f 75 6e 74 28 64 69   else  -count(di
21400 73 74 69 6e 63 74 20 74 31 2e 64 29 20 65 6e 64  stinct t1.d) end
21410 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 6e 6f   from t1) and no
21420 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
21430 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
21440 64 3c 66 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  d<f)}.} {}.do_te
21450 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 38  st randexpr-2.18
21460 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  3 {.  db eval {S
21470 45 4c 45 43 54 20 28 61 62 73 28 74 31 2e 66 2d  ELECT (abs(t1.f-
21480 28 61 62 73 28 63 61 73 65 20 63 20 77 68 65 6e  (abs(case c when
21490 20 74 31 2e 61 2b 28 73 65 6c 65 63 74 20 6d 61   t1.a+(select ma
214a0 78 28 31 37 2d 63 6f 61 6c 65 73 63 65 28 28 73  x(17-coalesce((s
214b0 65 6c 65 63 74 20 2b 65 2d 74 31 2e 61 2b 31 31  elect +e-t1.a+11
214c0 2d 31 33 2b 64 2b 31 31 2d 74 31 2e 61 20 66 72  -13+d+11-t1.a fr
214d0 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 65  om t1 where t1.e
214e0 20 69 6e 20 28 73 65 6c 65 63 74 20 7e 63 6f 61   in (select ~coa
214f0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 61 20  lesce((select a 
21500 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
21510 2e 63 2d 61 3d 62 29 2c 74 31 2e 63 29 2b 31 37  .c-a=b),t1.c)+17
21520 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
21530 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f 6d 20  elect t1.e from 
21540 74 31 29 29 2c 63 29 2d 64 29 20 66 72 6f 6d 20  t1)),c)-d) from 
21550 74 31 29 20 74 68 65 6e 20 31 37 20 65 6c 73 65  t1) then 17 else
21560 20 20 2d 74 31 2e 65 20 65 6e 64 29 2f 61 62 73    -t1.e end)/abs
21570 28 64 29 29 2d 31 37 29 2f 61 62 73 28 74 31 2e  (d))-17)/abs(t1.
21580 62 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  b)) FROM t1 WHER
21590 45 20 4e 4f 54 20 28 62 20 69 6e 20 28 73 65 6c  E NOT (b in (sel
215a0 65 63 74 20 2b 63 6f 75 6e 74 28 64 69 73 74 69  ect +count(disti
215b0 6e 63 74 20 28 31 39 29 2d 31 31 29 20 66 72 6f  nct (19)-11) fro
215c0 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
215d0 74 20 63 61 73 65 20 63 6f 75 6e 74 28 2a 29 20  t case count(*) 
215e0 77 68 65 6e 20 20 2d 63 61 73 65 20 6d 69 6e 28  when  -case min(
215f0 28 61 62 73 28 74 31 2e 63 2a 28 74 31 2e 63 29  (abs(t1.c*(t1.c)
21600 2b 31 31 29 2f 61 62 73 28 31 39 29 29 2a 7e 64  +11)/abs(19))*~d
21610 2a 66 29 20 77 68 65 6e 20 61 62 73 28 63 6f 75  *f) when abs(cou
21620 6e 74 28 2a 29 2b 63 6f 75 6e 74 28 2a 29 29 20  nt(*)+count(*)) 
21630 74 68 65 6e 20 28 2b 28 6d 69 6e 28 65 29 2a 20  then (+(min(e)* 
21640 2d 63 61 73 74 28 61 76 67 28 31 37 29 20 41 53  -cast(avg(17) AS
21650 20 69 6e 74 65 67 65 72 29 2a 20 2d 63 61 73 74   integer)* -cast
21660 28 61 76 67 28 64 29 20 41 53 20 69 6e 74 65 67  (avg(d) AS integ
21670 65 72 29 2b 6d 61 78 28 74 31 2e 66 29 29 29 20  er)+max(t1.f))) 
21680 65 6c 73 65 20 28 63 6f 75 6e 74 28 2a 29 29 20  else (count(*)) 
21690 65 6e 64 20 7c 20 28 6d 69 6e 28 20 2d 28 28 74  end | (min( -((t
216a0 31 2e 62 29 29 29 29 20 74 68 65 6e 20 28 6d 61  1.b)))) then (ma
216b0 78 28 74 31 2e 63 29 29 20 65 6c 73 65 20 20 2d  x(t1.c)) else  -
216c0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
216d0 31 2e 64 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  1.d) end from t1
216e0 29 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74 73  ) and not exists
216f0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
21700 31 20 77 68 65 72 65 20 64 3c 66 29 29 7d 0a 7d  1 where d<f))}.}
21710 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e   {2}.do_test ran
21720 64 65 78 70 72 2d 32 2e 31 38 34 20 7b 0a 20 20  dexpr-2.184 {.  
21730 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
21740 7e 63 61 73 65 20 2b 7e 63 2b 28 63 61 73 65 20  ~case +~c+(case 
21750 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28  when not exists(
21760 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
21770 20 77 68 65 72 65 20 74 31 2e 64 20 69 6e 20 28   where t1.d in (
21780 73 65 6c 65 63 74 20 61 62 73 28 20 2d 61 62 73  select abs( -abs
21790 28 6d 61 78 28 74 31 2e 66 29 2d 63 6f 75 6e 74  (max(t1.f)-count
217a0 28 64 69 73 74 69 6e 63 74 20 65 29 2a 20 2d 63  (distinct e)* -c
217b0 61 73 74 28 61 76 67 28 31 31 29 20 41 53 20 69  ast(avg(11) AS i
217c0 6e 74 65 67 65 72 29 20 7c 20 63 6f 75 6e 74 28  nteger) | count(
217d0 2a 29 29 2b 6d 69 6e 28 66 29 2a 6d 69 6e 28 20  *))+min(f)*min( 
217e0 2d 31 37 29 2a 63 61 73 74 28 61 76 67 28 31 39  -17)*cast(avg(19
217f0 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 66  ) AS integer)) f
21800 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
21810 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f  ect count(*) fro
21820 6d 20 74 31 29 29 20 6f 72 20 28 74 31 2e 66 29  m t1)) or (t1.f)
21830 3c 3e 74 31 2e 62 20 74 68 65 6e 20 64 2a 74 31  <>t1.b then d*t1
21840 2e 66 2a 31 37 20 65 6c 73 65 20 28 62 29 20 65  .f*17 else (b) e
21850 6e 64 29 2b 74 31 2e 66 2a 31 33 20 77 68 65 6e  nd)+t1.f*13 when
21860 20 63 20 74 68 65 6e 20 74 31 2e 61 20 65 6c 73   c then t1.a els
21870 65 20 74 31 2e 65 20 65 6e 64 2d 20 2d 74 31 2e  e t1.e end- -t1.
21880 66 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  f FROM t1 WHERE 
21890 62 2d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 62  b-case when t1.b
218a0 3d 74 31 2e 62 20 61 6e 64 20 28 63 6f 61 6c 65  =t1.b and (coale
218b0 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
218c0 74 31 2e 65 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.e) from t1 wh
218d0 65 72 65 20 74 31 2e 62 20 69 6e 20 28 73 65 6c  ere t1.b in (sel
218e0 65 63 74 20 7e 63 61 73 74 28 61 76 67 28 31 39  ect ~cast(avg(19
218f0 29 20 41 53 20 69 6e 74 65 67 65 72 29 2b 6d 61  ) AS integer)+ma
21900 78 28 74 31 2e 62 29 2b 6d 69 6e 28 74 31 2e 65  x(t1.b)+min(t1.e
21910 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
21920 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29  select max(t1.a)
21930 20 66 72 6f 6d 20 74 31 29 20 6f 72 20 65 78 69   from t1) or exi
21940 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
21950 6d 20 74 31 20 77 68 65 72 65 20 31 31 20 69 6e  m t1 where 11 in
21960 20 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e   (select max(t1.
21970 65 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  e) from t1 union
21980 20 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 66   select max(t1.f
21990 29 20 66 72 6f 6d 20 74 31 29 29 29 2c 28 61 62  ) from t1))),(ab
219a0 73 28 31 37 29 2f 61 62 73 28 31 37 29 29 29 29  s(17)/abs(17))))
219b0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 20 61   not between c a
219c0 6e 64 20 74 31 2e 61 20 74 68 65 6e 20 31 33 20  nd t1.a then 13 
219d0 65 6c 73 65 20 31 33 20 65 6e 64 20 7c 20 74 31  else 13 end | t1
219e0 2e 63 20 69 6e 20 28 73 65 6c 65 63 74 20 2b 2b  .c in (select ++
219f0 63 61 73 74 28 61 76 67 28 66 29 20 41 53 20 69  cast(avg(f) AS i
21a00 6e 74 65 67 65 72 29 2d 28 2b 28 63 6f 75 6e 74  nteger)-(+(count
21a10 28 64 69 73 74 69 6e 63 74 20 31 33 29 20 7c 20  (distinct 13) | 
21a20 6d 61 78 28 31 39 29 29 2d 63 6f 75 6e 74 28 2a  max(19))-count(*
21a30 29 20 7c 20 20 2d 6d 61 78 28 74 31 2e 65 29 29  ) |  -max(t1.e))
21a40 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
21a50 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66  elect count(*) f
21a60 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b 7d 0a 64 6f  rom t1)}.} {}.do
21a70 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
21a80 2e 31 38 35 20 7b 0a 20 20 64 62 20 65 76 61 6c  .185 {.  db eval
21a90 20 7b 53 45 4c 45 43 54 20 7e 63 61 73 65 20 2b   {SELECT ~case +
21aa0 7e 63 2b 28 63 61 73 65 20 77 68 65 6e 20 6e 6f  ~c+(case when no
21ab0 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
21ac0 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
21ad0 74 31 2e 64 20 69 6e 20 28 73 65 6c 65 63 74 20  t1.d in (select 
21ae0 61 62 73 28 20 2d 61 62 73 28 6d 61 78 28 74 31  abs( -abs(max(t1
21af0 2e 66 29 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e  .f)-count(distin
21b00 63 74 20 65 29 2a 20 2d 63 61 73 74 28 61 76 67  ct e)* -cast(avg
21b10 28 31 31 29 20 41 53 20 69 6e 74 65 67 65 72 29  (11) AS integer)
21b20 20 7c 20 63 6f 75 6e 74 28 2a 29 29 2b 6d 69 6e   | count(*))+min
21b30 28 66 29 2a 6d 69 6e 28 20 2d 31 37 29 2a 63 61  (f)*min( -17)*ca
21b40 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69 6e  st(avg(19) AS in
21b50 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31 20  teger)) from t1 
21b60 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75  union select cou
21b70 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 29 20  nt(*) from t1)) 
21b80 6f 72 20 28 74 31 2e 66 29 3c 3e 74 31 2e 62 20  or (t1.f)<>t1.b 
21b90 74 68 65 6e 20 64 2a 74 31 2e 66 2a 31 37 20 65  then d*t1.f*17 e
21ba0 6c 73 65 20 28 62 29 20 65 6e 64 29 2b 74 31 2e  lse (b) end)+t1.
21bb0 66 2a 31 33 20 77 68 65 6e 20 63 20 74 68 65 6e  f*13 when c then
21bc0 20 74 31 2e 61 20 65 6c 73 65 20 74 31 2e 65 20   t1.a else t1.e 
21bd0 65 6e 64 2d 20 2d 74 31 2e 66 20 46 52 4f 4d 20  end- -t1.f FROM 
21be0 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 62 2d  t1 WHERE NOT (b-
21bf0 63 61 73 65 20 77 68 65 6e 20 74 31 2e 62 3d 74  case when t1.b=t
21c00 31 2e 62 20 61 6e 64 20 28 63 6f 61 6c 65 73 63  1.b and (coalesc
21c10 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31  e((select max(t1
21c20 2e 65 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .e) from t1 wher
21c30 65 20 74 31 2e 62 20 69 6e 20 28 73 65 6c 65 63  e t1.b in (selec
21c40 74 20 7e 63 61 73 74 28 61 76 67 28 31 39 29 20  t ~cast(avg(19) 
21c50 41 53 20 69 6e 74 65 67 65 72 29 2b 6d 61 78 28  AS integer)+max(
21c60 74 31 2e 62 29 2b 6d 69 6e 28 74 31 2e 65 29 20  t1.b)+min(t1.e) 
21c70 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
21c80 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29 20 66  lect max(t1.a) f
21c90 72 6f 6d 20 74 31 29 20 6f 72 20 65 78 69 73 74  rom t1) or exist
21ca0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
21cb0 74 31 20 77 68 65 72 65 20 31 31 20 69 6e 20 28  t1 where 11 in (
21cc0 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 65 29  select max(t1.e)
21cd0 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
21ce0 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 66 29 20  elect max(t1.f) 
21cf0 66 72 6f 6d 20 74 31 29 29 29 2c 28 61 62 73 28  from t1))),(abs(
21d00 31 37 29 2f 61 62 73 28 31 37 29 29 29 29 20 6e  17)/abs(17)))) n
21d10 6f 74 20 62 65 74 77 65 65 6e 20 63 20 61 6e 64  ot between c and
21d20 20 74 31 2e 61 20 74 68 65 6e 20 31 33 20 65 6c   t1.a then 13 el
21d30 73 65 20 31 33 20 65 6e 64 20 7c 20 74 31 2e 63  se 13 end | t1.c
21d40 20 69 6e 20 28 73 65 6c 65 63 74 20 2b 2b 63 61   in (select ++ca
21d50 73 74 28 61 76 67 28 66 29 20 41 53 20 69 6e 74  st(avg(f) AS int
21d60 65 67 65 72 29 2d 28 2b 28 63 6f 75 6e 74 28 64  eger)-(+(count(d
21d70 69 73 74 69 6e 63 74 20 31 33 29 20 7c 20 6d 61  istinct 13) | ma
21d80 78 28 31 39 29 29 2d 63 6f 75 6e 74 28 2a 29 20  x(19))-count(*) 
21d90 7c 20 20 2d 6d 61 78 28 74 31 2e 65 29 29 20 66  |  -max(t1.e)) f
21da0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
21db0 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f  ect count(*) fro
21dc0 6d 20 74 31 29 29 7d 0a 7d 20 7b 39 39 7d 0a 64  m t1))}.} {99}.d
21dd0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
21de0 32 2e 31 38 36 20 7b 0a 20 20 64 62 20 65 76 61  2.186 {.  db eva
21df0 6c 20 7b 53 45 4c 45 43 54 20 7e 63 61 73 65 20  l {SELECT ~case 
21e00 2b 7e 63 2b 28 63 61 73 65 20 77 68 65 6e 20 6e  +~c+(case when n
21e10 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
21e20 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
21e30 20 74 31 2e 64 20 69 6e 20 28 73 65 6c 65 63 74   t1.d in (select
21e40 20 61 62 73 28 20 2d 61 62 73 28 6d 61 78 28 74   abs( -abs(max(t
21e50 31 2e 66 29 2d 63 6f 75 6e 74 28 64 69 73 74 69  1.f)-count(disti
21e60 6e 63 74 20 65 29 2a 20 2d 63 61 73 74 28 61 76  nct e)* -cast(av
21e70 67 28 31 31 29 20 41 53 20 69 6e 74 65 67 65 72  g(11) AS integer
21e80 29 20 26 20 63 6f 75 6e 74 28 2a 29 29 2b 6d 69  ) & count(*))+mi
21e90 6e 28 66 29 2a 6d 69 6e 28 20 2d 31 37 29 2a 63  n(f)*min( -17)*c
21ea0 61 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69  ast(avg(19) AS i
21eb0 6e 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31  nteger)) from t1
21ec0 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f   union select co
21ed0 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 29  unt(*) from t1))
21ee0 20 6f 72 20 28 74 31 2e 66 29 3c 3e 74 31 2e 62   or (t1.f)<>t1.b
21ef0 20 74 68 65 6e 20 64 2a 74 31 2e 66 2a 31 37 20   then d*t1.f*17 
21f00 65 6c 73 65 20 28 62 29 20 65 6e 64 29 2b 74 31  else (b) end)+t1
21f10 2e 66 2a 31 33 20 77 68 65 6e 20 63 20 74 68 65  .f*13 when c the
21f20 6e 20 74 31 2e 61 20 65 6c 73 65 20 74 31 2e 65  n t1.a else t1.e
21f30 20 65 6e 64 2d 20 2d 74 31 2e 66 20 46 52 4f 4d   end- -t1.f FROM
21f40 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 62   t1 WHERE NOT (b
21f50 2d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 62 3d  -case when t1.b=
21f60 74 31 2e 62 20 61 6e 64 20 28 63 6f 61 6c 65 73  t1.b and (coales
21f70 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74  ce((select max(t
21f80 31 2e 65 29 20 66 72 6f 6d 20 74 31 20 77 68 65  1.e) from t1 whe
21f90 72 65 20 74 31 2e 62 20 69 6e 20 28 73 65 6c 65  re t1.b in (sele
21fa0 63 74 20 7e 63 61 73 74 28 61 76 67 28 31 39 29  ct ~cast(avg(19)
21fb0 20 41 53 20 69 6e 74 65 67 65 72 29 2b 6d 61 78   AS integer)+max
21fc0 28 74 31 2e 62 29 2b 6d 69 6e 28 74 31 2e 65 29  (t1.b)+min(t1.e)
21fd0 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
21fe0 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29 20  elect max(t1.a) 
21ff0 66 72 6f 6d 20 74 31 29 20 6f 72 20 65 78 69 73  from t1) or exis
22000 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
22010 20 74 31 20 77 68 65 72 65 20 31 31 20 69 6e 20   t1 where 11 in 
22020 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 65  (select max(t1.e
22030 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
22040 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 66 29  select max(t1.f)
22050 20 66 72 6f 6d 20 74 31 29 29 29 2c 28 61 62 73   from t1))),(abs
22060 28 31 37 29 2f 61 62 73 28 31 37 29 29 29 29 20  (17)/abs(17)))) 
22070 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 20 61 6e  not between c an
22080 64 20 74 31 2e 61 20 74 68 65 6e 20 31 33 20 65  d t1.a then 13 e
22090 6c 73 65 20 31 33 20 65 6e 64 20 7c 20 74 31 2e  lse 13 end | t1.
220a0 63 20 69 6e 20 28 73 65 6c 65 63 74 20 2b 2b 63  c in (select ++c
220b0 61 73 74 28 61 76 67 28 66 29 20 41 53 20 69 6e  ast(avg(f) AS in
220c0 74 65 67 65 72 29 2d 28 2b 28 63 6f 75 6e 74 28  teger)-(+(count(
220d0 64 69 73 74 69 6e 63 74 20 31 33 29 20 7c 20 6d  distinct 13) | m
220e0 61 78 28 31 39 29 29 2d 63 6f 75 6e 74 28 2a 29  ax(19))-count(*)
220f0 20 7c 20 20 2d 6d 61 78 28 74 31 2e 65 29 29 20   |  -max(t1.e)) 
22100 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
22110 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72  lect count(*) fr
22120 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 39 39 7d 0a  om t1))}.} {99}.
22130 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
22140 2d 32 2e 31 38 37 20 7b 0a 20 20 64 62 20 65 76  -2.187 {.  db ev
22150 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
22160 77 68 65 6e 20 74 31 2e 63 20 69 6e 20 28 73 65  when t1.c in (se
22170 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 20 75  lect c from t1 u
22180 6e 69 6f 6e 20 73 65 6c 65 63 74 20 61 20 66 72  nion select a fr
22190 6f 6d 20 74 31 29 20 74 68 65 6e 20 31 31 20 77  om t1) then 11 w
221a0 68 65 6e 20 28 28 73 65 6c 65 63 74 20 6d 61 78  hen ((select max
221b0 28 31 39 29 20 66 72 6f 6d 20 74 31 29 20 7c 20  (19) from t1) | 
221c0 74 31 2e 61 2b 65 20 6e 6f 74 20 62 65 74 77 65  t1.a+e not betwe
221d0 65 6e 20 28 63 61 73 65 20 20 2d 31 39 20 77 68  en (case  -19 wh
221e0 65 6e 20 62 2a 65 2d 62 2d 63 61 73 65 20 77 68  en b*e-b-case wh
221f0 65 6e 20 62 3c 3e 7e 64 2a 74 31 2e 64 2b 74 31  en b<>~d*t1.d+t1
22200 2e 63 2a 64 20 74 68 65 6e 20 74 31 2e 64 20 77  .c*d then t1.d w
22210 68 65 6e 20 74 31 2e 63 3d 31 39 20 74 68 65 6e  hen t1.c=19 then
22220 20 66 20 65 6c 73 65 20 64 20 65 6e 64 2d 66 2a   f else d end-f*
22230 74 31 2e 64 20 74 68 65 6e 20 74 31 2e 64 20 65  t1.d then t1.d e
22240 6c 73 65 20 31 33 20 65 6e 64 29 20 61 6e 64 20  lse 13 end) and 
22250 31 33 29 20 74 68 65 6e 20 31 31 20 65 6c 73 65  13) then 11 else
22260 20 74 31 2e 62 20 65 6e 64 20 46 52 4f 4d 20 74   t1.b end FROM t
22270 31 20 57 48 45 52 45 20 74 31 2e 62 2a 63 6f 61  1 WHERE t1.b*coa
22280 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
22290 78 28 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20  x(t1.d) from t1 
222a0 77 68 65 72 65 20 20 2d 66 3c 3d 28 73 65 6c 65  where  -f<=(sele
222b0 63 74 20 6d 61 78 28 74 31 2e 65 29 20 66 72 6f  ct max(t1.e) fro
222c0 6d 20 74 31 29 2a 65 29 2c 63 61 73 65 20 77 68  m t1)*e),case wh
222d0 65 6e 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e  en case when t1.
222e0 65 2d 20 2d 31 33 3e 74 31 2e 62 2b 74 31 2e 66  e- -13>t1.b+t1.f
222f0 2b 63 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20  +c then 13 else 
22300 20 2d 64 20 65 6e 64 20 69 6e 20 28 73 65 6c 65   -d end in (sele
22310 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20 75 6e  ct 19 from t1 un
22320 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 66 20  ion select t1.f 
22330 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 65 20  from t1) then e 
22340 77 68 65 6e 20 74 31 2e 62 20 69 6e 20 28 73 65  when t1.b in (se
22350 6c 65 63 74 20 7e 63 6f 75 6e 74 28 64 69 73 74  lect ~count(dist
22360 69 6e 63 74 20 74 31 2e 61 29 2b 63 6f 75 6e 74  inct t1.a)+count
22370 28 2a 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  (*) from t1 unio
22380 6e 20 73 65 6c 65 63 74 20 61 62 73 28 20 2d 20  n select abs( - 
22390 2d 28 28 63 61 73 74 28 61 76 67 28 63 29 20 41  -((cast(avg(c) A
223a0 53 20 69 6e 74 65 67 65 72 29 29 29 2a 28 63 61  S integer)))*(ca
223b0 73 74 28 61 76 67 28 74 31 2e 62 29 20 41 53 20  st(avg(t1.b) AS 
223c0 69 6e 74 65 67 65 72 29 29 29 20 66 72 6f 6d 20  integer))) from 
223d0 74 31 29 20 74 68 65 6e 20 31 37 20 65 6c 73 65  t1) then 17 else
223e0 20 64 20 65 6e 64 29 2b 20 2d 31 37 20 7c 20 74   d end)+ -17 | t
223f0 31 2e 61 2d 74 31 2e 64 20 69 6e 20 28 74 31 2e  1.a-t1.d in (t1.
22400 65 2c 66 2c 66 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f  e,f,f)}.} {}.do_
22410 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
22420 31 38 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  188 {.  db eval 
22430 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65  {SELECT case whe
22440 6e 20 74 31 2e 63 20 69 6e 20 28 73 65 6c 65 63  n t1.c in (selec
22450 74 20 63 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  t c from t1 unio
22460 6e 20 73 65 6c 65 63 74 20 61 20 66 72 6f 6d 20  n select a from 
22470 74 31 29 20 74 68 65 6e 20 31 31 20 77 68 65 6e  t1) then 11 when
22480 20 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 39   ((select max(19
22490 29 20 66 72 6f 6d 20 74 31 29 20 7c 20 74 31 2e  ) from t1) | t1.
224a0 61 2b 65 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  a+e not between 
224b0 28 63 61 73 65 20 20 2d 31 39 20 77 68 65 6e 20  (case  -19 when 
224c0 62 2a 65 2d 62 2d 63 61 73 65 20 77 68 65 6e 20  b*e-b-case when 
224d0 62 3c 3e 7e 64 2a 74 31 2e 64 2b 74 31 2e 63 2a  b<>~d*t1.d+t1.c*
224e0 64 20 74 68 65 6e 20 74 31 2e 64 20 77 68 65 6e  d then t1.d when
224f0 20 74 31 2e 63 3d 31 39 20 74 68 65 6e 20 66 20   t1.c=19 then f 
22500 65 6c 73 65 20 64 20 65 6e 64 2d 66 2a 74 31 2e  else d end-f*t1.
22510 64 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65  d then t1.d else
22520 20 31 33 20 65 6e 64 29 20 61 6e 64 20 31 33 29   13 end) and 13)
22530 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20 74 31   then 11 else t1
22540 2e 62 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57  .b end FROM t1 W
22550 48 45 52 45 20 4e 4f 54 20 28 74 31 2e 62 2a 63  HERE NOT (t1.b*c
22560 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
22570 6d 61 78 28 74 31 2e 64 29 20 66 72 6f 6d 20 74  max(t1.d) from t
22580 31 20 77 68 65 72 65 20 20 2d 66 3c 3d 28 73 65  1 where  -f<=(se
22590 6c 65 63 74 20 6d 61 78 28 74 31 2e 65 29 20 66  lect max(t1.e) f
225a0 72 6f 6d 20 74 31 29 2a 65 29 2c 63 61 73 65 20  rom t1)*e),case 
225b0 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 74  when case when t
225c0 31 2e 65 2d 20 2d 31 33 3e 74 31 2e 62 2b 74 31  1.e- -13>t1.b+t1
225d0 2e 66 2b 63 20 74 68 65 6e 20 31 33 20 65 6c 73  .f+c then 13 els
225e0 65 20 20 2d 64 20 65 6e 64 20 69 6e 20 28 73 65  e  -d end in (se
225f0 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20  lect 19 from t1 
22600 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e  union select t1.
22610 66 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20  f from t1) then 
22620 65 20 77 68 65 6e 20 74 31 2e 62 20 69 6e 20 28  e when t1.b in (
22630 73 65 6c 65 63 74 20 7e 63 6f 75 6e 74 28 64 69  select ~count(di
22640 73 74 69 6e 63 74 20 74 31 2e 61 29 2b 63 6f 75  stinct t1.a)+cou
22650 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 20 75 6e  nt(*) from t1 un
22660 69 6f 6e 20 73 65 6c 65 63 74 20 61 62 73 28 20  ion select abs( 
22670 2d 20 2d 28 28 63 61 73 74 28 61 76 67 28 63 29  - -((cast(avg(c)
22680 20 41 53 20 69 6e 74 65 67 65 72 29 29 29 2a 28   AS integer)))*(
22690 63 61 73 74 28 61 76 67 28 74 31 2e 62 29 20 41  cast(avg(t1.b) A
226a0 53 20 69 6e 74 65 67 65 72 29 29 29 20 66 72 6f  S integer))) fro
226b0 6d 20 74 31 29 20 74 68 65 6e 20 31 37 20 65 6c  m t1) then 17 el
226c0 73 65 20 64 20 65 6e 64 29 2b 20 2d 31 37 20 7c  se d end)+ -17 |
226d0 20 74 31 2e 61 2d 74 31 2e 64 20 69 6e 20 28 74   t1.a-t1.d in (t
226e0 31 2e 65 2c 66 2c 66 29 29 7d 0a 7d 20 7b 31 31  1.e,f,f))}.} {11
226f0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
22700 70 72 2d 32 2e 31 38 39 20 7b 0a 20 20 64 62 20  pr-2.189 {.  db 
22710 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73  eval {SELECT cas
22720 65 20 77 68 65 6e 20 74 31 2e 63 20 69 6e 20 28  e when t1.c in (
22730 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31  select c from t1
22740 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 61 20   union select a 
22750 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 31 31  from t1) then 11
22760 20 77 68 65 6e 20 28 28 73 65 6c 65 63 74 20 6d   when ((select m
22770 61 78 28 31 39 29 20 66 72 6f 6d 20 74 31 29 20  ax(19) from t1) 
22780 26 20 74 31 2e 61 2b 65 20 6e 6f 74 20 62 65 74  & t1.a+e not bet
22790 77 65 65 6e 20 28 63 61 73 65 20 20 2d 31 39 20  ween (case  -19 
227a0 77 68 65 6e 20 62 2a 65 2d 62 2d 63 61 73 65 20  when b*e-b-case 
227b0 77 68 65 6e 20 62 3c 3e 7e 64 2a 74 31 2e 64 2b  when b<>~d*t1.d+
227c0 74 31 2e 63 2a 64 20 74 68 65 6e 20 74 31 2e 64  t1.c*d then t1.d
227d0 20 77 68 65 6e 20 74 31 2e 63 3d 31 39 20 74 68   when t1.c=19 th
227e0 65 6e 20 66 20 65 6c 73 65 20 64 20 65 6e 64 2d  en f else d end-
227f0 66 2a 74 31 2e 64 20 74 68 65 6e 20 74 31 2e 64  f*t1.d then t1.d
22800 20 65 6c 73 65 20 31 33 20 65 6e 64 29 20 61 6e   else 13 end) an
22810 64 20 31 33 29 20 74 68 65 6e 20 31 31 20 65 6c  d 13) then 11 el
22820 73 65 20 74 31 2e 62 20 65 6e 64 20 46 52 4f 4d  se t1.b end FROM
22830 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 74   t1 WHERE NOT (t
22840 31 2e 62 2a 63 6f 61 6c 65 73 63 65 28 28 73 65  1.b*coalesce((se
22850 6c 65 63 74 20 6d 61 78 28 74 31 2e 64 29 20 66  lect max(t1.d) f
22860 72 6f 6d 20 74 31 20 77 68 65 72 65 20 20 2d 66  rom t1 where  -f
22870 3c 3d 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31  <=(select max(t1
22880 2e 65 29 20 66 72 6f 6d 20 74 31 29 2a 65 29 2c  .e) from t1)*e),
22890 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77  case when case w
228a0 68 65 6e 20 74 31 2e 65 2d 20 2d 31 33 3e 74 31  hen t1.e- -13>t1
228b0 2e 62 2b 74 31 2e 66 2b 63 20 74 68 65 6e 20 31  .b+t1.f+c then 1
228c0 33 20 65 6c 73 65 20 20 2d 64 20 65 6e 64 20 69  3 else  -d end i
228d0 6e 20 28 73 65 6c 65 63 74 20 31 39 20 66 72 6f  n (select 19 fro
228e0 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
228f0 74 20 74 31 2e 66 20 66 72 6f 6d 20 74 31 29 20  t t1.f from t1) 
22900 74 68 65 6e 20 65 20 77 68 65 6e 20 74 31 2e 62  then e when t1.b
22910 20 69 6e 20 28 73 65 6c 65 63 74 20 7e 63 6f 75   in (select ~cou
22920 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 61  nt(distinct t1.a
22930 29 2b 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20  )+count(*) from 
22940 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
22950 61 62 73 28 20 2d 20 2d 28 28 63 61 73 74 28 61  abs( - -((cast(a
22960 76 67 28 63 29 20 41 53 20 69 6e 74 65 67 65 72  vg(c) AS integer
22970 29 29 29 2a 28 63 61 73 74 28 61 76 67 28 74 31  )))*(cast(avg(t1
22980 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 29  .b) AS integer))
22990 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20  ) from t1) then 
229a0 31 37 20 65 6c 73 65 20 64 20 65 6e 64 29 2b 20  17 else d end)+ 
229b0 2d 31 37 20 7c 20 74 31 2e 61 2d 74 31 2e 64 20  -17 | t1.a-t1.d 
229c0 69 6e 20 28 74 31 2e 65 2c 66 2c 66 29 29 7d 0a  in (t1.e,f,f))}.
229d0 7d 20 7b 31 31 7d 0a 64 6f 5f 74 65 73 74 20 72  } {11}.do_test r
229e0 61 6e 64 65 78 70 72 2d 32 2e 31 39 30 20 7b 0a  andexpr-2.190 {.
229f0 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
22a00 54 20 7e 28 64 29 2d 28 73 65 6c 65 63 74 20 63  T ~(d)-(select c
22a10 61 73 65 20 63 61 73 65 20 63 61 73 74 28 61 76  ase case cast(av
22a20 67 28 74 31 2e 62 2d 20 2d 7e 62 29 20 41 53 20  g(t1.b- -~b) AS 
22a30 69 6e 74 65 67 65 72 29 20 77 68 65 6e 20 6d 61  integer) when ma
22a40 78 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  x(coalesce((sele
22a50 63 74 20 65 20 66 72 6f 6d 20 74 31 20 77 68 65  ct e from t1 whe
22a60 72 65 20 31 31 3c 3e 65 29 2c 63 6f 61 6c 65 73  re 11<>e),coales
22a70 63 65 28 28 73 65 6c 65 63 74 20 63 20 66 72 6f  ce((select c fro
22a80 6d 20 74 31 20 77 68 65 72 65 20 63 20 6e 6f 74  m t1 where c not
22a90 20 69 6e 20 28 74 31 2e 65 2c 61 2c 28 31 37 29   in (t1.e,a,(17)
22aa0 29 20 6f 72 20 74 31 2e 62 20 69 6e 20 28 28 62  ) or t1.b in ((b
22ab0 29 2c 74 31 2e 63 2c 74 31 2e 66 29 29 2c 31 33  ),t1.c,t1.f)),13
22ac0 29 29 29 20 74 68 65 6e 20 2b 63 61 73 74 28 61  ))) then +cast(a
22ad0 76 67 28 64 29 20 41 53 20 69 6e 74 65 67 65 72  vg(d) AS integer
22ae0 29 20 7c 20 63 61 73 65 20 6d 61 78 28 74 31 2e  ) | case max(t1.
22af0 63 29 20 77 68 65 6e 20 6d 69 6e 28 28 65 29 29  c) when min((e))
22b00 20 74 68 65 6e 20 6d 61 78 28 65 29 2b 63 61 73   then max(e)+cas
22b10 74 28 61 76 67 28 74 31 2e 64 29 20 41 53 20 69  t(avg(t1.d) AS i
22b20 6e 74 65 67 65 72 29 20 65 6c 73 65 20 6d 69 6e  nteger) else min
22b30 28 74 31 2e 66 29 20 65 6e 64 2b 6d 61 78 28 64  (t1.f) end+max(d
22b40 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20  ) else count(*) 
22b50 65 6e 64 20 7c 20 20 2d 63 61 73 74 28 61 76 67  end |  -cast(avg
22b60 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65 67 65  (t1.f) AS intege
22b70 72 29 20 7c 20 20 2d 20 2d 63 6f 75 6e 74 28 64  r) |  - -count(d
22b80 69 73 74 69 6e 63 74 20 63 29 2a 6d 61 78 28 62  istinct c)*max(b
22b90 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 64 69 73  ) when count(dis
22ba0 74 69 6e 63 74 20 74 31 2e 64 29 20 74 68 65 6e  tinct t1.d) then
22bb0 20 20 2d 20 2d 6d 69 6e 28 61 29 20 65 6c 73 65    - -min(a) else
22bc0 20 63 6f 75 6e 74 28 2a 29 20 65 6e 64 20 66 72   count(*) end fr
22bd0 6f 6d 20 74 31 29 20 46 52 4f 4d 20 74 31 20 57  om t1) FROM t1 W
22be0 48 45 52 45 20 74 31 2e 63 2b 61 3d 74 31 2e 65  HERE t1.c+a=t1.e
22bf0 2b 74 31 2e 63 2a 74 31 2e 65 20 7c 20 63 61 73  +t1.c*t1.e | cas
22c00 65 20 74 31 2e 64 20 77 68 65 6e 20 63 61 73 65  e t1.d when case
22c10 20 77 68 65 6e 20 31 33 20 69 6e 20 28 73 65 6c   when 13 in (sel
22c20 65 63 74 20 6d 69 6e 28 63 29 20 66 72 6f 6d 20  ect min(c) from 
22c30 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
22c40 6d 61 78 28 64 29 20 66 72 6f 6d 20 74 31 29 20  max(d) from t1) 
22c50 6f 72 20 74 31 2e 66 3e 3d 31 33 20 74 68 65 6e  or t1.f>=13 then
22c60 20 31 39 20 77 68 65 6e 20 74 31 2e 63 3c 3d 31   19 when t1.c<=1
22c70 31 20 74 68 65 6e 20 20 2d 74 31 2e 62 20 65 6c  1 then  -t1.b el
22c80 73 65 20 31 33 20 65 6e 64 20 74 68 65 6e 20 31  se 13 end then 1
22c90 33 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 20  3 else t1.e end 
22ca0 6f 72 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20  or f in (select 
22cb0 74 31 2e 61 20 66 72 6f 6d 20 74 31 20 75 6e 69  t1.a from t1 uni
22cc0 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 66 20 66  on select t1.f f
22cd0 72 6f 6d 20 74 31 29 20 6f 72 20 28 74 31 2e 61  rom t1) or (t1.a
22ce0 3c 74 31 2e 62 29 20 61 6e 64 20 65 3e 74 31 2e  <t1.b) and e>t1.
22cf0 62 20 61 6e 64 20 28 28 28 74 31 2e 64 20 6e 6f  b and (((t1.d no
22d00 74 20 62 65 74 77 65 65 6e 20 20 2d 61 20 61 6e  t between  -a an
22d10 64 20 74 31 2e 66 29 29 29 20 6f 72 20 74 31 2e  d t1.f))) or t1.
22d20 61 20 6e 6f 74 20 69 6e 20 28 20 2d 74 31 2e 64  a not in ( -t1.d
22d30 2c 31 33 2c 61 29 20 61 6e 64 20 64 3c 63 20 6f  ,13,a) and d<c o
22d40 72 20 64 3d 74 31 2e 64 20 6f 72 20 65 3c 64 7d  r d=t1.d or e<d}
22d50 0a 7d 20 7b 2d 34 30 32 7d 0a 64 6f 5f 74 65 73  .} {-402}.do_tes
22d60 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31 39 31  t randexpr-2.191
22d70 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
22d80 4c 45 43 54 20 7e 28 64 29 2d 28 73 65 6c 65 63  LECT ~(d)-(selec
22d90 74 20 63 61 73 65 20 63 61 73 65 20 63 61 73 74  t case case cast
22da0 28 61 76 67 28 74 31 2e 62 2d 20 2d 7e 62 29 20  (avg(t1.b- -~b) 
22db0 41 53 20 69 6e 74 65 67 65 72 29 20 77 68 65 6e  AS integer) when
22dc0 20 6d 61 78 28 63 6f 61 6c 65 73 63 65 28 28 73   max(coalesce((s
22dd0 65 6c 65 63 74 20 65 20 66 72 6f 6d 20 74 31 20  elect e from t1 
22de0 77 68 65 72 65 20 31 31 3c 3e 65 29 2c 63 6f 61  where 11<>e),coa
22df0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 20  lesce((select c 
22e00 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 20  from t1 where c 
22e10 6e 6f 74 20 69 6e 20 28 74 31 2e 65 2c 61 2c 28  not in (t1.e,a,(
22e20 31 37 29 29 20 6f 72 20 74 31 2e 62 20 69 6e 20  17)) or t1.b in 
22e30 28 28 62 29 2c 74 31 2e 63 2c 74 31 2e 66 29 29  ((b),t1.c,t1.f))
22e40 2c 31 33 29 29 29 20 74 68 65 6e 20 2b 63 61 73  ,13))) then +cas
22e50 74 28 61 76 67 28 64 29 20 41 53 20 69 6e 74 65  t(avg(d) AS inte
22e60 67 65 72 29 20 7c 20 63 61 73 65 20 6d 61 78 28  ger) | case max(
22e70 74 31 2e 63 29 20 77 68 65 6e 20 6d 69 6e 28 28  t1.c) when min((
22e80 65 29 29 20 74 68 65 6e 20 6d 61 78 28 65 29 2b  e)) then max(e)+
22e90 63 61 73 74 28 61 76 67 28 74 31 2e 64 29 20 41  cast(avg(t1.d) A
22ea0 53 20 69 6e 74 65 67 65 72 29 20 65 6c 73 65 20  S integer) else 
22eb0 6d 69 6e 28 74 31 2e 66 29 20 65 6e 64 2b 6d 61  min(t1.f) end+ma
22ec0 78 28 64 29 20 65 6c 73 65 20 63 6f 75 6e 74 28  x(d) else count(
22ed0 2a 29 20 65 6e 64 20 7c 20 20 2d 63 61 73 74 28  *) end |  -cast(
22ee0 61 76 67 28 74 31 2e 66 29 20 41 53 20 69 6e 74  avg(t1.f) AS int
22ef0 65 67 65 72 29 20 7c 20 20 2d 20 2d 63 6f 75 6e  eger) |  - -coun
22f00 74 28 64 69 73 74 69 6e 63 74 20 63 29 2a 6d 61  t(distinct c)*ma
22f10 78 28 62 29 20 77 68 65 6e 20 63 6f 75 6e 74 28  x(b) when count(
22f20 64 69 73 74 69 6e 63 74 20 74 31 2e 64 29 20 74  distinct t1.d) t
22f30 68 65 6e 20 20 2d 20 2d 6d 69 6e 28 61 29 20 65  hen  - -min(a) e
22f40 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e 64  lse count(*) end
22f50 20 66 72 6f 6d 20 74 31 29 20 46 52 4f 4d 20 74   from t1) FROM t
22f60 31 20 57 48 45 52 45 20 4e 4f 54 20 28 74 31 2e  1 WHERE NOT (t1.
22f70 63 2b 61 3d 74 31 2e 65 2b 74 31 2e 63 2a 74 31  c+a=t1.e+t1.c*t1
22f80 2e 65 20 7c 20 63 61 73 65 20 74 31 2e 64 20 77  .e | case t1.d w
22f90 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 31 33  hen case when 13
22fa0 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 69 6e 28   in (select min(
22fb0 63 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  c) from t1 union
22fc0 20 73 65 6c 65 63 74 20 6d 61 78 28 64 29 20 66   select max(d) f
22fd0 72 6f 6d 20 74 31 29 20 6f 72 20 74 31 2e 66 3e  rom t1) or t1.f>
22fe0 3d 31 33 20 74 68 65 6e 20 31 39 20 77 68 65 6e  =13 then 19 when
22ff0 20 74 31 2e 63 3c 3d 31 31 20 74 68 65 6e 20 20   t1.c<=11 then  
23000 2d 74 31 2e 62 20 65 6c 73 65 20 31 33 20 65 6e  -t1.b else 13 en
23010 64 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20 74  d then 13 else t
23020 31 2e 65 20 65 6e 64 20 6f 72 20 66 20 69 6e 20  1.e end or f in 
23030 28 73 65 6c 65 63 74 20 74 31 2e 61 20 66 72 6f  (select t1.a fro
23040 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
23050 74 20 74 31 2e 66 20 66 72 6f 6d 20 74 31 29 20  t t1.f from t1) 
23060 6f 72 20 28 74 31 2e 61 3c 74 31 2e 62 29 20 61  or (t1.a<t1.b) a
23070 6e 64 20 65 3e 74 31 2e 62 20 61 6e 64 20 28 28  nd e>t1.b and ((
23080 28 74 31 2e 64 20 6e 6f 74 20 62 65 74 77 65 65  (t1.d not betwee
23090 6e 20 20 2d 61 20 61 6e 64 20 74 31 2e 66 29 29  n  -a and t1.f))
230a0 29 20 6f 72 20 74 31 2e 61 20 6e 6f 74 20 69 6e  ) or t1.a not in
230b0 20 28 20 2d 74 31 2e 64 2c 31 33 2c 61 29 20 61   ( -t1.d,13,a) a
230c0 6e 64 20 64 3c 63 20 6f 72 20 64 3d 74 31 2e 64  nd d<c or d=t1.d
230d0 20 6f 72 20 65 3c 64 29 7d 0a 7d 20 7b 7d 0a 64   or e<d)}.} {}.d
230e0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
230f0 32 2e 31 39 32 20 7b 0a 20 20 64 62 20 65 76 61  2.192 {.  db eva
23100 6c 20 7b 53 45 4c 45 43 54 20 7e 28 64 29 2d 28  l {SELECT ~(d)-(
23110 73 65 6c 65 63 74 20 63 61 73 65 20 63 61 73 65  select case case
23120 20 63 61 73 74 28 61 76 67 28 74 31 2e 62 2d 20   cast(avg(t1.b- 
23130 2d 7e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29  -~b) AS integer)
23140 20 77 68 65 6e 20 6d 61 78 28 63 6f 61 6c 65 73   when max(coales
23150 63 65 28 28 73 65 6c 65 63 74 20 65 20 66 72 6f  ce((select e fro
23160 6d 20 74 31 20 77 68 65 72 65 20 31 31 3c 3e 65  m t1 where 11<>e
23170 29 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  ),coalesce((sele
23180 63 74 20 63 20 66 72 6f 6d 20 74 31 20 77 68 65  ct c from t1 whe
23190 72 65 20 63 20 6e 6f 74 20 69 6e 20 28 74 31 2e  re c not in (t1.
231a0 65 2c 61 2c 28 31 37 29 29 20 6f 72 20 74 31 2e  e,a,(17)) or t1.
231b0 62 20 69 6e 20 28 28 62 29 2c 74 31 2e 63 2c 74  b in ((b),t1.c,t
231c0 31 2e 66 29 29 2c 31 33 29 29 29 20 74 68 65 6e  1.f)),13))) then
231d0 20 2b 63 61 73 74 28 61 76 67 28 64 29 20 41 53   +cast(avg(d) AS
231e0 20 69 6e 74 65 67 65 72 29 20 26 20 63 61 73 65   integer) & case
231f0 20 6d 61 78 28 74 31 2e 63 29 20 77 68 65 6e 20   max(t1.c) when 
23200 6d 69 6e 28 28 65 29 29 20 74 68 65 6e 20 6d 61  min((e)) then ma
23210 78 28 65 29 2b 63 61 73 74 28 61 76 67 28 74 31  x(e)+cast(avg(t1
23220 2e 64 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .d) AS integer) 
23230 65 6c 73 65 20 6d 69 6e 28 74 31 2e 66 29 20 65  else min(t1.f) e
23240 6e 64 2b 6d 61 78 28 64 29 20 65 6c 73 65 20 63  nd+max(d) else c
23250 6f 75 6e 74 28 2a 29 20 65 6e 64 20 26 20 20 2d  ount(*) end &  -
23260 63 61 73 74 28 61 76 67 28 74 31 2e 66 29 20 41  cast(avg(t1.f) A
23270 53 20 69 6e 74 65 67 65 72 29 20 26 20 20 2d 20  S integer) &  - 
23280 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
23290 63 29 2a 6d 61 78 28 62 29 20 77 68 65 6e 20 63  c)*max(b) when c
232a0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
232b0 2e 64 29 20 74 68 65 6e 20 20 2d 20 2d 6d 69 6e  .d) then  - -min
232c0 28 61 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a  (a) else count(*
232d0 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 20 46  ) end from t1) F
232e0 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e  ROM t1 WHERE t1.
232f0 63 2b 61 3d 74 31 2e 65 2b 74 31 2e 63 2a 74 31  c+a=t1.e+t1.c*t1
23300 2e 65 20 7c 20 63 61 73 65 20 74 31 2e 64 20 77  .e | case t1.d w
23310 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 31 33  hen case when 13
23320 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 69 6e 28   in (select min(
23330 63 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  c) from t1 union
23340 20 73 65 6c 65 63 74 20 6d 61 78 28 64 29 20 66   select max(d) f
23350 72 6f 6d 20 74 31 29 20 6f 72 20 74 31 2e 66 3e  rom t1) or t1.f>
23360 3d 31 33 20 74 68 65 6e 20 31 39 20 77 68 65 6e  =13 then 19 when
23370 20 74 31 2e 63 3c 3d 31 31 20 74 68 65 6e 20 20   t1.c<=11 then  
23380 2d 74 31 2e 62 20 65 6c 73 65 20 31 33 20 65 6e  -t1.b else 13 en
23390 64 20 74 68 65 6e 20 31 33 20 65 6c 73 65 20 74  d then 13 else t
233a0 31 2e 65 20 65 6e 64 20 6f 72 20 66 20 69 6e 20  1.e end or f in 
233b0 28 73 65 6c 65 63 74 20 74 31 2e 61 20 66 72 6f  (select t1.a fro
233c0 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
233d0 74 20 74 31 2e 66 20 66 72 6f 6d 20 74 31 29 20  t t1.f from t1) 
233e0 6f 72 20 28 74 31 2e 61 3c 74 31 2e 62 29 20 61  or (t1.a<t1.b) a
233f0 6e 64 20 65 3e 74 31 2e 62 20 61 6e 64 20 28 28  nd e>t1.b and ((
23400 28 74 31 2e 64 20 6e 6f 74 20 62 65 74 77 65 65  (t1.d not betwee
23410 6e 20 20 2d 61 20 61 6e 64 20 74 31 2e 66 29 29  n  -a and t1.f))
23420 29 20 6f 72 20 74 31 2e 61 20 6e 6f 74 20 69 6e  ) or t1.a not in
23430 20 28 20 2d 74 31 2e 64 2c 31 33 2c 61 29 20 61   ( -t1.d,13,a) a
23440 6e 64 20 64 3c 63 20 6f 72 20 64 3d 74 31 2e 64  nd d<c or d=t1.d
23450 20 6f 72 20 65 3c 64 7d 0a 7d 20 7b 2d 34 30 32   or e<d}.} {-402
23460 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
23470 70 72 2d 32 2e 31 39 33 20 7b 0a 20 20 64 62 20  pr-2.193 {.  db 
23480 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 61 62  eval {SELECT (ab
23490 73 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  s(coalesce((sele
234a0 63 74 20 6d 61 78 28 61 29 20 66 72 6f 6d 20 74  ct max(a) from t
234b0 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73  1 where exists(s
234c0 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
234d0 77 68 65 72 65 20 74 31 2e 66 3c 31 39 20 61 6e  where t1.f<19 an
234e0 64 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  d coalesce((sele
234f0 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
23500 20 74 31 2e 61 2b 65 20 69 6e 20 28 73 65 6c 65   t1.a+e in (sele
23510 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20  ct t1.c from t1 
23520 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 66 20 66  union select f f
23530 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 66 20 65  rom t1) then f e
23540 6c 73 65 20 28 31 37 29 20 65 6e 64 29 20 66 72  lse (17) end) fr
23550 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 65  om t1 where t1.e
23560 20 69 6e 20 28 66 2c 63 6f 61 6c 65 73 63 65 28   in (f,coalesce(
23570 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 66  (select max(t1.f
23580 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
23590 31 37 3c 3d 28 28 61 62 73 28 74 31 2e 64 20 7c  17<=((abs(t1.d |
235a0 20 28 74 31 2e 61 29 29 2f 61 62 73 28 31 33 29   (t1.a))/abs(13)
235b0 29 2a 28 61 29 29 2d 64 29 2c 31 37 29 2c 65 29  )*(a))-d),17),e)
235c0 29 2c 74 31 2e 63 29 20 6e 6f 74 20 62 65 74 77  ),t1.c) not betw
235d0 65 65 6e 20 74 31 2e 62 20 61 6e 64 20 31 31 20  een t1.b and 11 
235e0 61 6e 64 20 31 33 3c 74 31 2e 66 29 29 2c 66 2b  and 13<t1.f)),f+
235f0 74 31 2e 64 29 29 2f 61 62 73 28 31 39 29 29 20  t1.d))/abs(19)) 
23600 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31  FROM t1 WHERE 11
23610 2a 63 2b 31 37 2d 66 20 69 6e 20 28 73 65 6c 65  *c+17-f in (sele
23620 63 74 20 6d 69 6e 28 74 31 2e 65 2a 31 31 2a 63  ct min(t1.e*11*c
23630 61 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28  ase when exists(
23640 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
23650 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74   where not exist
23660 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
23670 74 31 20 77 68 65 72 65 20 2b 20 2d 31 37 3c 61  t1 where + -17<a
23680 29 29 20 74 68 65 6e 20 28 61 62 73 28 28 64 29  )) then (abs((d)
23690 29 2f 61 62 73 28 31 33 29 29 20 77 68 65 6e 20  )/abs(13)) when 
236a0 31 31 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61  11 in (select ca
236b0 73 65 20 63 6f 75 6e 74 28 2a 29 20 77 68 65 6e  se count(*) when
236c0 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
236d0 74 31 2e 66 29 20 74 68 65 6e 20 63 6f 75 6e 74  t1.f) then count
236e0 28 64 69 73 74 69 6e 63 74 20 31 37 29 20 65 6c  (distinct 17) el
236f0 73 65 20 63 61 73 74 28 61 76 67 28 28 31 31 29  se cast(avg((11)
23700 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 65 6e  ) AS integer) en
23710 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  d from t1 union 
23720 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
23730 74 31 2e 63 29 20 41 53 20 69 6e 74 65 67 65 72  t1.c) AS integer
23740 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20  ) from t1) then 
23750 62 20 65 6c 73 65 20 65 20 65 6e 64 29 20 66 72  b else e end) fr
23760 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
23770 63 74 20 63 61 73 65 20 63 6f 75 6e 74 28 2a 29  ct case count(*)
23780 20 77 68 65 6e 20 20 2d 63 6f 75 6e 74 28 64 69   when  -count(di
23790 73 74 69 6e 63 74 20 74 31 2e 64 29 20 74 68 65  stinct t1.d) the
237a0 6e 20 6d 61 78 28 61 29 20 65 6c 73 65 20 28 63  n max(a) else (c
237b0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31  ount(distinct t1
237c0 2e 63 29 29 2d 6d 61 78 28 28 62 29 29 20 7c 20  .c))-max((b)) | 
237d0 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  (count(distinct 
237e0 74 31 2e 65 29 29 2a 63 6f 75 6e 74 28 64 69 73  t1.e))*count(dis
237f0 74 69 6e 63 74 20 28 31 33 29 29 2d 63 6f 75 6e  tinct (13))-coun
23800 74 28 64 69 73 74 69 6e 63 74 20 65 29 20 65 6e  t(distinct e) en
23810 64 2d 63 6f 75 6e 74 28 2a 29 2d 63 6f 75 6e 74  d-count(*)-count
23820 28 2a 29 20 66 72 6f 6d 20 74 31 29 7d 0a 7d 20  (*) from t1)}.} 
23830 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
23840 78 70 72 2d 32 2e 31 39 34 20 7b 0a 20 20 64 62  xpr-2.194 {.  db
23850 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 61   eval {SELECT (a
23860 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  bs(coalesce((sel
23870 65 63 74 20 6d 61 78 28 61 29 20 66 72 6f 6d 20  ect max(a) from 
23880 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
23890 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
238a0 20 77 68 65 72 65 20 74 31 2e 66 3c 31 39 20 61   where t1.f<19 a
238b0 6e 64 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  nd coalesce((sel
238c0 65 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65  ect max(case whe
238d0 6e 20 74 31 2e 61 2b 65 20 69 6e 20 28 73 65 6c  n t1.a+e in (sel
238e0 65 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31  ect t1.c from t1
238f0 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 66 20   union select f 
23900 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 66 20  from t1) then f 
23910 65 6c 73 65 20 28 31 37 29 20 65 6e 64 29 20 66  else (17) end) f
23920 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
23930 65 20 69 6e 20 28 66 2c 63 6f 61 6c 65 73 63 65  e in (f,coalesce
23940 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
23950 66 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  f) from t1 where
23960 20 31 37 3c 3d 28 28 61 62 73 28 74 31 2e 64 20   17<=((abs(t1.d 
23970 7c 20 28 74 31 2e 61 29 29 2f 61 62 73 28 31 33  | (t1.a))/abs(13
23980 29 29 2a 28 61 29 29 2d 64 29 2c 31 37 29 2c 65  ))*(a))-d),17),e
23990 29 29 2c 74 31 2e 63 29 20 6e 6f 74 20 62 65 74  )),t1.c) not bet
239a0 77 65 65 6e 20 74 31 2e 62 20 61 6e 64 20 31 31  ween t1.b and 11
239b0 20 61 6e 64 20 31 33 3c 74 31 2e 66 29 29 2c 66   and 13<t1.f)),f
239c0 2b 74 31 2e 64 29 29 2f 61 62 73 28 31 39 29 29  +t1.d))/abs(19))
239d0 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
239e0 4f 54 20 28 31 31 2a 63 2b 31 37 2d 66 20 69 6e  OT (11*c+17-f in
239f0 20 28 73 65 6c 65 63 74 20 6d 69 6e 28 74 31 2e   (select min(t1.
23a00 65 2a 31 31 2a 63 61 73 65 20 77 68 65 6e 20 65  e*11*case when e
23a10 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
23a20 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
23a30 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
23a40 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 2b   from t1 where +
23a50 20 2d 31 37 3c 61 29 29 20 74 68 65 6e 20 28 61   -17<a)) then (a
23a60 62 73 28 28 64 29 29 2f 61 62 73 28 31 33 29 29  bs((d))/abs(13))
23a70 20 77 68 65 6e 20 31 31 20 69 6e 20 28 73 65 6c   when 11 in (sel
23a80 65 63 74 20 63 61 73 65 20 63 6f 75 6e 74 28 2a  ect case count(*
23a90 29 20 77 68 65 6e 20 63 6f 75 6e 74 28 64 69 73  ) when count(dis
23aa0 74 69 6e 63 74 20 74 31 2e 66 29 20 74 68 65 6e  tinct t1.f) then
23ab0 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
23ac0 31 37 29 20 65 6c 73 65 20 63 61 73 74 28 61 76  17) else cast(av
23ad0 67 28 28 31 31 29 29 20 41 53 20 69 6e 74 65 67  g((11)) AS integ
23ae0 65 72 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20  er) end from t1 
23af0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73  union select cas
23b00 74 28 61 76 67 28 74 31 2e 63 29 20 41 53 20 69  t(avg(t1.c) AS i
23b10 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
23b20 20 74 68 65 6e 20 62 20 65 6c 73 65 20 65 20 65   then b else e e
23b30 6e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  nd) from t1 unio
23b40 6e 20 73 65 6c 65 63 74 20 63 61 73 65 20 63 6f  n select case co
23b50 75 6e 74 28 2a 29 20 77 68 65 6e 20 20 2d 63 6f  unt(*) when  -co
23b60 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
23b70 64 29 20 74 68 65 6e 20 6d 61 78 28 61 29 20 65  d) then max(a) e
23b80 6c 73 65 20 28 63 6f 75 6e 74 28 64 69 73 74 69  lse (count(disti
23b90 6e 63 74 20 74 31 2e 63 29 29 2d 6d 61 78 28 28  nct t1.c))-max((
23ba0 62 29 29 20 7c 20 28 63 6f 75 6e 74 28 64 69 73  b)) | (count(dis
23bb0 74 69 6e 63 74 20 74 31 2e 65 29 29 2a 63 6f 75  tinct t1.e))*cou
23bc0 6e 74 28 64 69 73 74 69 6e 63 74 20 28 31 33 29  nt(distinct (13)
23bd0 29 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  )-count(distinct
23be0 20 65 29 20 65 6e 64 2d 63 6f 75 6e 74 28 2a 29   e) end-count(*)
23bf0 2d 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74  -count(*) from t
23c00 31 29 29 7d 0a 7d 20 7b 35 32 7d 0a 64 6f 5f 74  1))}.} {52}.do_t
23c10 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
23c20 39 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  95 {.  db eval {
23c30 53 45 4c 45 43 54 20 28 61 62 73 28 63 6f 61 6c  SELECT (abs(coal
23c40 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
23c50 28 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  (a) from t1 wher
23c60 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
23c70 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
23c80 74 31 2e 66 3c 31 39 20 61 6e 64 20 63 6f 61 6c  t1.f<19 and coal
23c90 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
23ca0 28 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61 2b  (case when t1.a+
23cb0 65 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e  e in (select t1.
23cc0 63 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  c from t1 union 
23cd0 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74 31  select f from t1
23ce0 29 20 74 68 65 6e 20 66 20 65 6c 73 65 20 28 31  ) then f else (1
23cf0 37 29 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20  7) end) from t1 
23d00 77 68 65 72 65 20 74 31 2e 65 20 69 6e 20 28 66  where t1.e in (f
23d10 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  ,coalesce((selec
23d20 74 20 6d 61 78 28 74 31 2e 66 29 20 66 72 6f 6d  t max(t1.f) from
23d30 20 74 31 20 77 68 65 72 65 20 31 37 3c 3d 28 28   t1 where 17<=((
23d40 61 62 73 28 74 31 2e 64 20 26 20 28 74 31 2e 61  abs(t1.d & (t1.a
23d50 29 29 2f 61 62 73 28 31 33 29 29 2a 28 61 29 29  ))/abs(13))*(a))
23d60 2d 64 29 2c 31 37 29 2c 65 29 29 2c 74 31 2e 63  -d),17),e)),t1.c
23d70 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31  ) not between t1
23d80 2e 62 20 61 6e 64 20 31 31 20 61 6e 64 20 31 33  .b and 11 and 13
23d90 3c 74 31 2e 66 29 29 2c 66 2b 74 31 2e 64 29 29  <t1.f)),f+t1.d))
23da0 2f 61 62 73 28 31 39 29 29 20 46 52 4f 4d 20 74  /abs(19)) FROM t
23db0 31 20 57 48 45 52 45 20 4e 4f 54 20 28 31 31 2a  1 WHERE NOT (11*
23dc0 63 2b 31 37 2d 66 20 69 6e 20 28 73 65 6c 65 63  c+17-f in (selec
23dd0 74 20 6d 69 6e 28 74 31 2e 65 2a 31 31 2a 63 61  t min(t1.e*11*ca
23de0 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28 73  se when exists(s
23df0 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
23e00 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73  where not exists
23e10 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
23e20 31 20 77 68 65 72 65 20 2b 20 2d 31 37 3c 61 29  1 where + -17<a)
23e30 29 20 74 68 65 6e 20 28 61 62 73 28 28 64 29 29  ) then (abs((d))
23e40 2f 61 62 73 28 31 33 29 29 20 77 68 65 6e 20 31  /abs(13)) when 1
23e50 31 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73  1 in (select cas
23e60 65 20 63 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20  e count(*) when 
23e70 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
23e80 31 2e 66 29 20 74 68 65 6e 20 63 6f 75 6e 74 28  1.f) then count(
23e90 64 69 73 74 69 6e 63 74 20 31 37 29 20 65 6c 73  distinct 17) els
23ea0 65 20 63 61 73 74 28 61 76 67 28 28 31 31 29 29  e cast(avg((11))
23eb0 20 41 53 20 69 6e 74 65 67 65 72 29 20 65 6e 64   AS integer) end
23ec0 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
23ed0 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 74  elect cast(avg(t
23ee0 31 2e 63 29 20 41 53 20 69 6e 74 65 67 65 72 29  1.c) AS integer)
23ef0 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 62   from t1) then b
23f00 20 65 6c 73 65 20 65 20 65 6e 64 29 20 66 72 6f   else e end) fro
23f10 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
23f20 74 20 63 61 73 65 20 63 6f 75 6e 74 28 2a 29 20  t case count(*) 
23f30 77 68 65 6e 20 20 2d 63 6f 75 6e 74 28 64 69 73  when  -count(dis
23f40 74 69 6e 63 74 20 74 31 2e 64 29 20 74 68 65 6e  tinct t1.d) then
23f50 20 6d 61 78 28 61 29 20 65 6c 73 65 20 28 63 6f   max(a) else (co
23f60 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
23f70 63 29 29 2d 6d 61 78 28 28 62 29 29 20 7c 20 28  c))-max((b)) | (
23f80 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
23f90 31 2e 65 29 29 2a 63 6f 75 6e 74 28 64 69 73 74  1.e))*count(dist
23fa0 69 6e 63 74 20 28 31 33 29 29 2d 63 6f 75 6e 74  inct (13))-count
23fb0 28 64 69 73 74 69 6e 63 74 20 65 29 20 65 6e 64  (distinct e) end
23fc0 2d 63 6f 75 6e 74 28 2a 29 2d 63 6f 75 6e 74 28  -count(*)-count(
23fd0 2a 29 20 66 72 6f 6d 20 74 31 29 29 7d 0a 7d 20  *) from t1))}.} 
23fe0 7b 35 32 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  {52}.do_test ran
23ff0 64 65 78 70 72 2d 32 2e 31 39 36 20 7b 0a 20 20  dexpr-2.196 {.  
24000 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
24010 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
24020 20 6d 61 78 28 7e 74 31 2e 64 29 20 66 72 6f 6d   max(~t1.d) from
24030 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78   t1 where not ex
24040 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
24050 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69 73  om t1 where exis
24060 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
24070 20 74 31 20 77 68 65 72 65 20 63 3e 74 31 2e 63   t1 where c>t1.c
24080 20 6f 72 20 28 28 74 31 2e 66 3e 65 29 29 20 61   or ((t1.f>e)) a
24090 6e 64 20 74 31 2e 65 2d 31 39 2b 63 2b 20 2d 64  nd t1.e-19+c+ -d
240a0 2a 74 31 2e 64 2b 31 31 3c 3e 31 37 2b 63 6f 61  *t1.d+11<>17+coa
240b0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
240c0 78 28 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20  x(t1.d) from t1 
240d0 77 68 65 72 65 20 31 37 2b 74 31 2e 63 3c 74 31  where 17+t1.c<t1
240e0 2e 64 29 2c 74 31 2e 62 29 20 6f 72 20 66 3c 3e  .d),t1.b) or f<>
240f0 31 31 29 29 29 2c 31 31 29 20 7c 20 63 61 73 65  11))),11) | case
24100 20 65 20 77 68 65 6e 20 63 20 74 68 65 6e 20 61   e when c then a
24110 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 2b 61   else t1.b end+a
24120 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63   FROM t1 WHERE c
24130 61 73 65 20 77 68 65 6e 20 64 20 6e 6f 74 20 69  ase when d not i
24140 6e 20 28 61 2c 31 31 2c 28 31 33 29 29 20 74 68  n (a,11,(13)) th
24150 65 6e 20 61 20 77 68 65 6e 20 65 78 69 73 74 73  en a when exists
24160 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
24170 31 20 77 68 65 72 65 20 63 61 73 65 20 77 68 65  1 where case whe
24180 6e 20 63 61 73 65 20 77 68 65 6e 20 63 61 73 65  n case when case
24190 20 77 68 65 6e 20 28 74 31 2e 63 29 20 69 6e 20   when (t1.c) in 
241a0 28 63 2c 65 2c 62 29 20 74 68 65 6e 20 66 20 65  (c,e,b) then f e
241b0 6c 73 65 20 28 31 39 29 20 65 6e 64 2d 74 31 2e  lse (19) end-t1.
241c0 66 3c 74 31 2e 64 20 74 68 65 6e 20 31 31 20 65  f<t1.d then 11 e
241d0 6c 73 65 20 61 20 65 6e 64 3e 3d 74 31 2e 61 20  lse a end>=t1.a 
241e0 74 68 65 6e 20 31 31 20 65 6c 73 65 20 74 31 2e  then 11 else t1.
241f0 63 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74  c end in (select
24200 20 61 62 73 28 7e 7e 6d 61 78 28 74 31 2e 63 29   abs(~~max(t1.c)
24210 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
24220 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
24230 63 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  c) AS integer) f
24240 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20 31 31  rom t1)) then 11
24250 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 20 69   else t1.f end i
24260 6e 20 28 73 65 6c 65 63 74 20 28 7e 7e 63 6f 75  n (select (~~cou
24270 6e 74 28 2a 29 2a 63 61 73 74 28 61 76 67 28 31  nt(*)*cast(avg(1
24280 39 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20  9) AS integer)) 
24290 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
242a0 6c 65 63 74 20 6d 69 6e 28 74 31 2e 64 29 2b 20  lect min(t1.d)+ 
242b0 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
242c0 66 29 20 66 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b  f) from t1)}.} {
242d0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
242e0 70 72 2d 32 2e 31 39 37 20 7b 0a 20 20 64 62 20  pr-2.197 {.  db 
242f0 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61  eval {SELECT coa
24300 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
24310 78 28 7e 74 31 2e 64 29 20 66 72 6f 6d 20 74 31  x(~t1.d) from t1
24320 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74   where not exist
24330 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
24340 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28  t1 where exists(
24350 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
24360 20 77 68 65 72 65 20 63 3e 74 31 2e 63 20 6f 72   where c>t1.c or
24370 20 28 28 74 31 2e 66 3e 65 29 29 20 61 6e 64 20   ((t1.f>e)) and 
24380 74 31 2e 65 2d 31 39 2b 63 2b 20 2d 64 2a 74 31  t1.e-19+c+ -d*t1
24390 2e 64 2b 31 31 3c 3e 31 37 2b 63 6f 61 6c 65 73  .d+11<>17+coales
243a0 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74  ce((select max(t
243b0 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65  1.d) from t1 whe
243c0 72 65 20 31 37 2b 74 31 2e 63 3c 74 31 2e 64 29  re 17+t1.c<t1.d)
243d0 2c 74 31 2e 62 29 20 6f 72 20 66 3c 3e 31 31 29  ,t1.b) or f<>11)
243e0 29 29 2c 31 31 29 20 7c 20 63 61 73 65 20 65 20  )),11) | case e 
243f0 77 68 65 6e 20 63 20 74 68 65 6e 20 61 20 65 6c  when c then a el
24400 73 65 20 74 31 2e 62 20 65 6e 64 2b 61 20 46 52  se t1.b end+a FR
24410 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
24420 28 63 61 73 65 20 77 68 65 6e 20 64 20 6e 6f 74  (case when d not
24430 20 69 6e 20 28 61 2c 31 31 2c 28 31 33 29 29 20   in (a,11,(13)) 
24440 74 68 65 6e 20 61 20 77 68 65 6e 20 65 78 69 73  then a when exis
24450 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
24460 20 74 31 20 77 68 65 72 65 20 63 61 73 65 20 77   t1 where case w
24470 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 63 61  hen case when ca
24480 73 65 20 77 68 65 6e 20 28 74 31 2e 63 29 20 69  se when (t1.c) i
24490 6e 20 28 63 2c 65 2c 62 29 20 74 68 65 6e 20 66  n (c,e,b) then f
244a0 20 65 6c 73 65 20 28 31 39 29 20 65 6e 64 2d 74   else (19) end-t
244b0 31 2e 66 3c 74 31 2e 64 20 74 68 65 6e 20 31 31  1.f<t1.d then 11
244c0 20 65 6c 73 65 20 61 20 65 6e 64 3e 3d 74 31 2e   else a end>=t1.
244d0 61 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20 74  a then 11 else t
244e0 31 2e 63 20 65 6e 64 20 69 6e 20 28 73 65 6c 65  1.c end in (sele
244f0 63 74 20 61 62 73 28 7e 7e 6d 61 78 28 74 31 2e  ct abs(~~max(t1.
24500 63 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  c)) from t1 unio
24510 6e 20 73 65 6c 65 63 74 20 63 61 73 74 28 61 76  n select cast(av
24520 67 28 63 29 20 41 53 20 69 6e 74 65 67 65 72 29  g(c) AS integer)
24530 20 66 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20   from t1)) then 
24540 31 31 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64  11 else t1.f end
24550 20 69 6e 20 28 73 65 6c 65 63 74 20 28 7e 7e 63   in (select (~~c
24560 6f 75 6e 74 28 2a 29 2a 63 61 73 74 28 61 76 67  ount(*)*cast(avg
24570 28 31 39 29 20 41 53 20 69 6e 74 65 67 65 72 29  (19) AS integer)
24580 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
24590 73 65 6c 65 63 74 20 6d 69 6e 28 74 31 2e 64 29  select min(t1.d)
245a0 2b 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  + -count(distinc
245b0 74 20 66 29 20 66 72 6f 6d 20 74 31 29 29 7d 0a  t f) from t1))}.
245c0 7d 20 7b 33 30 33 7d 0a 64 6f 5f 74 65 73 74 20  } {303}.do_test 
245d0 72 61 6e 64 65 78 70 72 2d 32 2e 31 39 38 20 7b  randexpr-2.198 {
245e0 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
245f0 43 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  CT coalesce((sel
24600 65 63 74 20 6d 61 78 28 7e 74 31 2e 64 29 20 66  ect max(~t1.d) f
24610 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
24620 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
24630 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
24640 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
24650 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 3e 74  rom t1 where c>t
24660 31 2e 63 20 6f 72 20 28 28 74 31 2e 66 3e 65 29  1.c or ((t1.f>e)
24670 29 20 61 6e 64 20 74 31 2e 65 2d 31 39 2b 63 2b  ) and t1.e-19+c+
24680 20 2d 64 2a 74 31 2e 64 2b 31 31 3c 3e 31 37 2b   -d*t1.d+11<>17+
24690 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
246a0 20 6d 61 78 28 74 31 2e 64 29 20 66 72 6f 6d 20   max(t1.d) from 
246b0 74 31 20 77 68 65 72 65 20 31 37 2b 74 31 2e 63  t1 where 17+t1.c
246c0 3c 74 31 2e 64 29 2c 74 31 2e 62 29 20 6f 72 20  <t1.d),t1.b) or 
246d0 66 3c 3e 31 31 29 29 29 2c 31 31 29 20 26 20 63  f<>11))),11) & c
246e0 61 73 65 20 65 20 77 68 65 6e 20 63 20 74 68 65  ase e when c the
246f0 6e 20 61 20 65 6c 73 65 20 74 31 2e 62 20 65 6e  n a else t1.b en
24700 64 2b 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  d+a FROM t1 WHER
24710 45 20 4e 4f 54 20 28 63 61 73 65 20 77 68 65 6e  E NOT (case when
24720 20 64 20 6e 6f 74 20 69 6e 20 28 61 2c 31 31 2c   d not in (a,11,
24730 28 31 33 29 29 20 74 68 65 6e 20 61 20 77 68 65  (13)) then a whe
24740 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  n exists(select 
24750 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
24760 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77  case when case w
24770 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 28 74  hen case when (t
24780 31 2e 63 29 20 69 6e 20 28 63 2c 65 2c 62 29 20  1.c) in (c,e,b) 
24790 74 68 65 6e 20 66 20 65 6c 73 65 20 28 31 39 29  then f else (19)
247a0 20 65 6e 64 2d 74 31 2e 66 3c 74 31 2e 64 20 74   end-t1.f<t1.d t
247b0 68 65 6e 20 31 31 20 65 6c 73 65 20 61 20 65 6e  hen 11 else a en
247c0 64 3e 3d 74 31 2e 61 20 74 68 65 6e 20 31 31 20  d>=t1.a then 11 
247d0 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 20 69 6e  else t1.c end in
247e0 20 28 73 65 6c 65 63 74 20 61 62 73 28 7e 7e 6d   (select abs(~~m
247f0 61 78 28 74 31 2e 63 29 29 20 66 72 6f 6d 20 74  ax(t1.c)) from t
24800 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63  1 union select c
24810 61 73 74 28 61 76 67 28 63 29 20 41 53 20 69 6e  ast(avg(c) AS in
24820 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 29  teger) from t1))
24830 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20 74 31   then 11 else t1
24840 2e 66 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63  .f end in (selec
24850 74 20 28 7e 7e 63 6f 75 6e 74 28 2a 29 2a 63 61  t (~~count(*)*ca
24860 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69 6e  st(avg(19) AS in
24870 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31 20  teger)) from t1 
24880 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 69 6e  union select min
24890 28 74 31 2e 64 29 2b 20 2d 63 6f 75 6e 74 28 64  (t1.d)+ -count(d
248a0 69 73 74 69 6e 63 74 20 66 29 20 66 72 6f 6d 20  istinct f) from 
248b0 74 31 29 29 7d 0a 7d 20 7b 38 7d 0a 64 6f 5f 74  t1))}.} {8}.do_t
248c0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 31  est randexpr-2.1
248d0 39 39 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  99 {.  db eval {
248e0 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e  SELECT case when
248f0 20 74 31 2e 65 2a 74 31 2e 62 3c 3e 65 20 74 68   t1.e*t1.b<>e th
24900 65 6e 20 31 39 20 65 6c 73 65 20 20 2d 31 31 2d  en 19 else  -11-
24910 62 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  b+coalesce((sele
24920 63 74 20 6d 61 78 28 74 31 2e 65 2b 74 31 2e 66  ct max(t1.e+t1.f
24930 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
24940 31 31 2b 66 2a 74 31 2e 63 3c 3e 74 31 2e 61 2a  11+f*t1.c<>t1.a*
24950 28 7e 66 2b 63 61 73 65 20 77 68 65 6e 20 74 31  (~f+case when t1
24960 2e 66 20 69 6e 20 28 74 31 2e 66 2c 20 2d 28 28  .f in (t1.f, -((
24970 31 33 29 29 2c 31 39 29 20 74 68 65 6e 20 74 31  13)),19) then t1
24980 2e 61 20 77 68 65 6e 20 74 31 2e 65 3e 31 37 20  .a when t1.e>17 
24990 74 68 65 6e 20 61 20 65 6c 73 65 20 61 20 65 6e  then a else a en
249a0 64 2b 62 2d 74 31 2e 65 2d 28 66 29 29 29 2c 31  d+b-t1.e-(f))),1
249b0 33 29 2b 64 20 65 6e 64 2b 74 31 2e 62 2a 20 2d  3)+d end+t1.b* -
249c0 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  c FROM t1 WHERE 
249d0 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
249e0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 6f  from t1 where co
249f0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
24a00 61 78 28 74 31 2e 61 2a 74 31 2e 65 2b 31 33 29  ax(t1.a*t1.e+13)
24a10 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
24a20 33 20 69 6e 20 28 28 61 62 73 28 65 29 2f 61 62  3 in ((abs(e)/ab
24a30 73 28 74 31 2e 61 29 29 2c 61 2b 74 31 2e 63 2c  s(t1.a)),a+t1.c,
24a40 31 37 2a 74 31 2e 63 29 29 2c 28 73 65 6c 65 63  17*t1.c)),(selec
24a50 74 20 20 2d 63 61 73 65 20 6d 61 78 28 63 29 20  t  -case max(c) 
24a60 7c 20 63 61 73 74 28 61 76 67 28 65 29 20 41 53  | cast(avg(e) AS
24a70 20 69 6e 74 65 67 65 72 29 20 77 68 65 6e 20 7e   integer) when ~
24a80 2b 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  + -count(distinc
24a90 74 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  t coalesce((sele
24aa0 63 74 20 64 20 66 72 6f 6d 20 74 31 20 77 68 65  ct d from t1 whe
24ab0 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  re exists(select
24ac0 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
24ad0 20 20 2d 31 37 3c 65 29 29 2c 28 20 2d 74 31 2e    -17<e)),( -t1.
24ae0 65 29 29 29 20 7c 20 63 61 73 65 20 6d 61 78 28  e))) | case max(
24af0 31 31 29 20 77 68 65 6e 20 63 61 73 74 28 61 76  11) when cast(av
24b00 67 28 61 29 20 41 53 20 69 6e 74 65 67 65 72 29  g(a) AS integer)
24b10 20 74 68 65 6e 20 6d 61 78 28 20 2d 74 31 2e 66   then max( -t1.f
24b20 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 64 69 73  ) else count(dis
24b30 74 69 6e 63 74 20 20 2d 31 31 29 20 65 6e 64 20  tinct  -11) end 
24b40 74 68 65 6e 20 63 61 73 74 28 61 76 67 28 74 31  then cast(avg(t1
24b50 2e 64 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .d) AS integer) 
24b60 65 6c 73 65 20 6d 61 78 28 28 64 29 29 20 65 6e  else max((d)) en
24b70 64 2a 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  d*count(distinct
24b80 20 74 31 2e 62 29 20 66 72 6f 6d 20 74 31 29 20   t1.b) from t1) 
24b90 7c 20 74 31 2e 62 2d 74 31 2e 64 2a 74 31 2e 63  | t1.b-t1.d*t1.c
24ba0 2b 31 31 29 3c 3d 62 29 7d 0a 7d 20 7b 2d 35 39  +11)<=b)}.} {-59
24bb0 39 38 31 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  981}.do_test ran
24bc0 64 65 78 70 72 2d 32 2e 32 30 30 20 7b 0a 20 20  dexpr-2.200 {.  
24bd0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
24be0 63 61 73 65 20 77 68 65 6e 20 74 31 2e 65 2a 74  case when t1.e*t
24bf0 31 2e 62 3c 3e 65 20 74 68 65 6e 20 31 39 20 65  1.b<>e then 19 e
24c00 6c 73 65 20 20 2d 31 31 2d 62 2b 63 6f 61 6c 65  lse  -11-b+coale
24c10 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
24c20 74 31 2e 65 2b 74 31 2e 66 29 20 66 72 6f 6d 20  t1.e+t1.f) from 
24c30 74 31 20 77 68 65 72 65 20 31 31 2b 66 2a 74 31  t1 where 11+f*t1
24c40 2e 63 3c 3e 74 31 2e 61 2a 28 7e 66 2b 63 61 73  .c<>t1.a*(~f+cas
24c50 65 20 77 68 65 6e 20 74 31 2e 66 20 69 6e 20 28  e when t1.f in (
24c60 74 31 2e 66 2c 20 2d 28 28 31 33 29 29 2c 31 39  t1.f, -((13)),19
24c70 29 20 74 68 65 6e 20 74 31 2e 61 20 77 68 65 6e  ) then t1.a when
24c80 20 74 31 2e 65 3e 31 37 20 74 68 65 6e 20 61 20   t1.e>17 then a 
24c90 65 6c 73 65 20 61 20 65 6e 64 2b 62 2d 74 31 2e  else a end+b-t1.
24ca0 65 2d 28 66 29 29 29 2c 31 33 29 2b 64 20 65 6e  e-(f))),13)+d en
24cb0 64 2b 74 31 2e 62 2a 20 2d 63 20 46 52 4f 4d 20  d+t1.b* -c FROM 
24cc0 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 65 78  t1 WHERE NOT (ex
24cd0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
24ce0 6f 6d 20 74 31 20 77 68 65 72 65 20 63 6f 61 6c  om t1 where coal
24cf0 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
24d00 28 74 31 2e 61 2a 74 31 2e 65 2b 31 33 29 20 66  (t1.a*t1.e+13) f
24d10 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 33 20  rom t1 where 13 
24d20 69 6e 20 28 28 61 62 73 28 65 29 2f 61 62 73 28  in ((abs(e)/abs(
24d30 74 31 2e 61 29 29 2c 61 2b 74 31 2e 63 2c 31 37  t1.a)),a+t1.c,17
24d40 2a 74 31 2e 63 29 29 2c 28 73 65 6c 65 63 74 20  *t1.c)),(select 
24d50 20 2d 63 61 73 65 20 6d 61 78 28 63 29 20 7c 20   -case max(c) | 
24d60 63 61 73 74 28 61 76 67 28 65 29 20 41 53 20 69  cast(avg(e) AS i
24d70 6e 74 65 67 65 72 29 20 77 68 65 6e 20 7e 2b 20  nteger) when ~+ 
24d80 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
24d90 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
24da0 20 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   d from t1 where
24db0 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
24dc0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 20   from t1 where  
24dd0 2d 31 37 3c 65 29 29 2c 28 20 2d 74 31 2e 65 29  -17<e)),( -t1.e)
24de0 29 29 20 7c 20 63 61 73 65 20 6d 61 78 28 31 31  )) | case max(11
24df0 29 20 77 68 65 6e 20 63 61 73 74 28 61 76 67 28  ) when cast(avg(
24e00 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 74  a) AS integer) t
24e10 68 65 6e 20 6d 61 78 28 20 2d 74 31 2e 66 29 20  hen max( -t1.f) 
24e20 65 6c 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69  else count(disti
24e30 6e 63 74 20 20 2d 31 31 29 20 65 6e 64 20 74 68  nct  -11) end th
24e40 65 6e 20 63 61 73 74 28 61 76 67 28 74 31 2e 64  en cast(avg(t1.d
24e50 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 65 6c  ) AS integer) el
24e60 73 65 20 6d 61 78 28 28 64 29 29 20 65 6e 64 2a  se max((d)) end*
24e70 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
24e80 31 2e 62 29 20 66 72 6f 6d 20 74 31 29 20 7c 20  1.b) from t1) | 
24e90 74 31 2e 62 2d 74 31 2e 64 2a 74 31 2e 63 2b 31  t1.b-t1.d*t1.c+1
24ea0 31 29 3c 3d 62 29 29 7d 0a 7d 20 7b 7d 0a 64 6f  1)<=b))}.} {}.do
24eb0 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
24ec0 2e 32 30 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  .201 {.  db eval
24ed0 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63   {SELECT coalesc
24ee0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 6f  e((select max(co
24ef0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 31  alesce((select 1
24f00 39 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  9 from t1 where 
24f10 28 63 61 73 65 20 77 68 65 6e 20 28 28 61 62 73  (case when ((abs
24f20 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
24f30 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20  t max(case when 
24f40 74 31 2e 61 20 62 65 74 77 65 65 6e 20 28 74 31  t1.a between (t1
24f50 2e 63 29 2b 20 2d 62 20 61 6e 64 20 64 20 74 68  .c)+ -b and d th
24f60 65 6e 20 65 20 65 6c 73 65 20 64 20 65 6e 64 29  en e else d end)
24f70 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
24f80 31 2e 65 20 69 6e 20 28 73 65 6c 65 63 74 20 28  1.e in (select (
24f90 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d 20 74  count(*)) from t
24fa0 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d  1 union select m
24fb0 61 78 28 20 2d 61 29 2d 63 6f 75 6e 74 28 64 69  ax( -a)-count(di
24fc0 73 74 69 6e 63 74 20 74 31 2e 63 29 2d 28 28 6d  stinct t1.c)-((m
24fd0 69 6e 28 31 33 29 29 29 20 7c 20 6d 61 78 28 28  in(13))) | max((
24fe0 74 31 2e 66 29 29 20 66 72 6f 6d 20 74 31 29 29  t1.f)) from t1))
24ff0 2c 31 31 29 29 2f 61 62 73 28 31 39 29 29 29 2b  ,11))/abs(19)))+
25000 64 3e 63 20 74 68 65 6e 20 74 31 2e 62 20 77 68  d>c then t1.b wh
25010 65 6e 20 31 37 20 6e 6f 74 20 62 65 74 77 65 65  en 17 not betwee
25020 6e 20 74 31 2e 65 20 61 6e 64 20 63 20 74 68 65  n t1.e and c the
25030 6e 20 31 31 20 65 6c 73 65 20 66 20 65 6e 64 20  n 11 else f end 
25040 69 6e 20 28 73 65 6c 65 63 74 20 61 20 66 72 6f  in (select a fro
25050 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
25060 74 20 31 33 20 66 72 6f 6d 20 74 31 29 29 29 2c  t 13 from t1))),
25070 31 31 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65  11)) from t1 whe
25080 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
25090 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
250a0 68 65 72 65 20 66 3d 31 37 29 29 2c 65 29 20 46  here f=17)),e) F
250b0 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28 20 2d  ROM t1 WHERE ( -
250c0 31 33 20 69 6e 20 28 31 33 2c 62 2c 63 61 73 65  13 in (13,b,case
250d0 20 77 68 65 6e 20 31 39 3d 31 31 20 74 68 65 6e   when 19=11 then
250e0 20 74 31 2e 64 20 65 6c 73 65 20 63 61 73 65 20   t1.d else case 
250f0 77 68 65 6e 20 28 64 20 7c 20 62 2d 63 61 73 65  when (d | b-case
25100 20 77 68 65 6e 20 74 31 2e 66 2d 28 73 65 6c 65   when t1.f-(sele
25110 63 74 20 2b 61 62 73 28 63 61 73 74 28 61 76 67  ct +abs(cast(avg
25120 28 20 2d 31 37 2a 20 2d 31 37 29 20 41 53 20 69  ( -17* -17) AS i
25130 6e 74 65 67 65 72 29 2a 63 6f 75 6e 74 28 2a 29  nteger)*count(*)
25140 2b 6d 61 78 28 74 31 2e 65 29 29 20 66 72 6f 6d  +max(t1.e)) from
25150 20 74 31 29 2a 74 31 2e 66 20 6e 6f 74 20 69 6e   t1)*t1.f not in
25160 20 28 66 2c 61 2c 63 29 20 74 68 65 6e 20 74 31   (f,a,c) then t1
25170 2e 61 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64  .a else t1.b end
25180 20 62 65 74 77 65 65 6e 20 31 39 20 61 6e 64 20   between 19 and 
25190 65 29 20 74 68 65 6e 20 61 20 65 6c 73 65 20 31  e) then a else 1
251a0 33 20 65 6e 64 20 65 6e 64 2d 74 31 2e 61 29 20  3 end end-t1.a) 
251b0 6f 72 20 74 31 2e 63 3c 31 39 29 7d 0a 7d 20 7b  or t1.c<19)}.} {
251c0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
251d0 70 72 2d 32 2e 32 30 32 20 7b 0a 20 20 64 62 20  pr-2.202 {.  db 
251e0 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61  eval {SELECT coa
251f0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
25200 78 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  x(coalesce((sele
25210 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20 77 68  ct 19 from t1 wh
25220 65 72 65 20 28 63 61 73 65 20 77 68 65 6e 20 28  ere (case when (
25230 28 61 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73  (abs(coalesce((s
25240 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20 77  elect max(case w
25250 68 65 6e 20 74 31 2e 61 20 62 65 74 77 65 65 6e  hen t1.a between
25260 20 28 74 31 2e 63 29 2b 20 2d 62 20 61 6e 64 20   (t1.c)+ -b and 
25270 64 20 74 68 65 6e 20 65 20 65 6c 73 65 20 64 20  d then e else d 
25280 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65  end) from t1 whe
25290 72 65 20 74 31 2e 65 20 69 6e 20 28 73 65 6c 65  re t1.e in (sele
252a0 63 74 20 28 63 6f 75 6e 74 28 2a 29 29 20 66 72  ct (count(*)) fr
252b0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
252c0 63 74 20 6d 61 78 28 20 2d 61 29 2d 63 6f 75 6e  ct max( -a)-coun
252d0 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 63 29  t(distinct t1.c)
252e0 2d 28 28 6d 69 6e 28 31 33 29 29 29 20 7c 20 6d  -((min(13))) | m
252f0 61 78 28 28 74 31 2e 66 29 29 20 66 72 6f 6d 20  ax((t1.f)) from 
25300 74 31 29 29 2c 31 31 29 29 2f 61 62 73 28 31 39  t1)),11))/abs(19
25310 29 29 29 2b 64 3e 63 20 74 68 65 6e 20 74 31 2e  )))+d>c then t1.
25320 62 20 77 68 65 6e 20 31 37 20 6e 6f 74 20 62 65  b when 17 not be
25330 74 77 65 65 6e 20 74 31 2e 65 20 61 6e 64 20 63  tween t1.e and c
25340 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20 66 20   then 11 else f 
25350 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 61  end in (select a
25360 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
25370 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31  elect 13 from t1
25380 29 29 29 2c 31 31 29 29 20 66 72 6f 6d 20 74 31  ))),11)) from t1
25390 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74   where not exist
253a0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
253b0 74 31 20 77 68 65 72 65 20 66 3d 31 37 29 29 2c  t1 where f=17)),
253c0 65 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  e) FROM t1 WHERE
253d0 20 4e 4f 54 20 28 28 20 2d 31 33 20 69 6e 20 28   NOT (( -13 in (
253e0 31 33 2c 62 2c 63 61 73 65 20 77 68 65 6e 20 31  13,b,case when 1
253f0 39 3d 31 31 20 74 68 65 6e 20 74 31 2e 64 20 65  9=11 then t1.d e
25400 6c 73 65 20 63 61 73 65 20 77 68 65 6e 20 28 64  lse case when (d
25410 20 7c 20 62 2d 63 61 73 65 20 77 68 65 6e 20 74   | b-case when t
25420 31 2e 66 2d 28 73 65 6c 65 63 74 20 2b 61 62 73  1.f-(select +abs
25430 28 63 61 73 74 28 61 76 67 28 20 2d 31 37 2a 20  (cast(avg( -17* 
25440 2d 31 37 29 20 41 53 20 69 6e 74 65 67 65 72 29  -17) AS integer)
25450 2a 63 6f 75 6e 74 28 2a 29 2b 6d 61 78 28 74 31  *count(*)+max(t1
25460 2e 65 29 29 20 66 72 6f 6d 20 74 31 29 2a 74 31  .e)) from t1)*t1
25470 2e 66 20 6e 6f 74 20 69 6e 20 28 66 2c 61 2c 63  .f not in (f,a,c
25480 29 20 74 68 65 6e 20 74 31 2e 61 20 65 6c 73 65  ) then t1.a else
25490 20 74 31 2e 62 20 65 6e 64 20 62 65 74 77 65 65   t1.b end betwee
254a0 6e 20 31 39 20 61 6e 64 20 65 29 20 74 68 65 6e  n 19 and e) then
254b0 20 61 20 65 6c 73 65 20 31 33 20 65 6e 64 20 65   a else 13 end e
254c0 6e 64 2d 74 31 2e 61 29 20 6f 72 20 74 31 2e 63  nd-t1.a) or t1.c
254d0 3c 31 39 29 29 7d 0a 7d 20 7b 31 31 7d 0a 64 6f  <19))}.} {11}.do
254e0 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
254f0 2e 32 30 33 20 7b 0a 20 20 64 62 20 65 76 61 6c  .203 {.  db eval
25500 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63   {SELECT coalesc
25510 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 6f  e((select max(co
25520 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 31  alesce((select 1
25530 39 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  9 from t1 where 
25540 28 63 61 73 65 20 77 68 65 6e 20 28 28 61 62 73  (case when ((abs
25550 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
25560 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20  t max(case when 
25570 74 31 2e 61 20 62 65 74 77 65 65 6e 20 28 74 31  t1.a between (t1
25580 2e 63 29 2b 20 2d 62 20 61 6e 64 20 64 20 74 68  .c)+ -b and d th
25590 65 6e 20 65 20 65 6c 73 65 20 64 20 65 6e 64 29  en e else d end)
255a0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
255b0 31 2e 65 20 69 6e 20 28 73 65 6c 65 63 74 20 28  1.e in (select (
255c0 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d 20 74  count(*)) from t
255d0 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d  1 union select m
255e0 61 78 28 20 2d 61 29 2d 63 6f 75 6e 74 28 64 69  ax( -a)-count(di
255f0 73 74 69 6e 63 74 20 74 31 2e 63 29 2d 28 28 6d  stinct t1.c)-((m
25600 69 6e 28 31 33 29 29 29 20 26 20 6d 61 78 28 28  in(13))) & max((
25610 74 31 2e 66 29 29 20 66 72 6f 6d 20 74 31 29 29  t1.f)) from t1))
25620 2c 31 31 29 29 2f 61 62 73 28 31 39 29 29 29 2b  ,11))/abs(19)))+
25630 64 3e 63 20 74 68 65 6e 20 74 31 2e 62 20 77 68  d>c then t1.b wh
25640 65 6e 20 31 37 20 6e 6f 74 20 62 65 74 77 65 65  en 17 not betwee
25650 6e 20 74 31 2e 65 20 61 6e 64 20 63 20 74 68 65  n t1.e and c the
25660 6e 20 31 31 20 65 6c 73 65 20 66 20 65 6e 64 20  n 11 else f end 
25670 69 6e 20 28 73 65 6c 65 63 74 20 61 20 66 72 6f  in (select a fro
25680 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
25690 74 20 31 33 20 66 72 6f 6d 20 74 31 29 29 29 2c  t 13 from t1))),
256a0 31 31 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65  11)) from t1 whe
256b0 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  re not exists(se
256c0 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
256d0 68 65 72 65 20 66 3d 31 37 29 29 2c 65 29 20 46  here f=17)),e) F
256e0 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
256f0 20 28 28 20 2d 31 33 20 69 6e 20 28 31 33 2c 62   (( -13 in (13,b
25700 2c 63 61 73 65 20 77 68 65 6e 20 31 39 3d 31 31  ,case when 19=11
25710 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20   then t1.d else 
25720 63 61 73 65 20 77 68 65 6e 20 28 64 20 7c 20 62  case when (d | b
25730 2d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 66 2d  -case when t1.f-
25740 28 73 65 6c 65 63 74 20 2b 61 62 73 28 63 61 73  (select +abs(cas
25750 74 28 61 76 67 28 20 2d 31 37 2a 20 2d 31 37 29  t(avg( -17* -17)
25760 20 41 53 20 69 6e 74 65 67 65 72 29 2a 63 6f 75   AS integer)*cou
25770 6e 74 28 2a 29 2b 6d 61 78 28 74 31 2e 65 29 29  nt(*)+max(t1.e))
25780 20 66 72 6f 6d 20 74 31 29 2a 74 31 2e 66 20 6e   from t1)*t1.f n
25790 6f 74 20 69 6e 20 28 66 2c 61 2c 63 29 20 74 68  ot in (f,a,c) th
257a0 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 74 31 2e  en t1.a else t1.
257b0 62 20 65 6e 64 20 62 65 74 77 65 65 6e 20 31 39  b end between 19
257c0 20 61 6e 64 20 65 29 20 74 68 65 6e 20 61 20 65   and e) then a e
257d0 6c 73 65 20 31 33 20 65 6e 64 20 65 6e 64 2d 74  lse 13 end end-t
257e0 31 2e 61 29 20 6f 72 20 74 31 2e 63 3c 31 39 29  1.a) or t1.c<19)
257f0 29 7d 0a 7d 20 7b 31 31 7d 0a 64 6f 5f 74 65 73  )}.} {11}.do_tes
25800 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 30 34  t randexpr-2.204
25810 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
25820 4c 45 43 54 20 20 2d 7e 64 2a 31 39 2d 61 2d 63  LECT  -~d*19-a-c
25830 20 7c 20 74 31 2e 63 2b 28 61 62 73 28 63 61 73   | t1.c+(abs(cas
25840 65 20 20 2d 31 39 20 7c 20 7e 63 61 73 65 20 74  e  -19 | ~case t
25850 31 2e 64 20 77 68 65 6e 20 63 20 74 68 65 6e 20  1.d when c then 
25860 74 31 2e 66 20 65 6c 73 65 20 63 20 65 6e 64 20  t1.f else c end 
25870 77 68 65 6e 20 2b 74 31 2e 64 20 74 68 65 6e 20  when +t1.d then 
25880 31 37 20 65 6c 73 65 20 63 61 73 65 20 63 61 73  17 else case cas
25890 65 20 77 68 65 6e 20 62 3e 63 61 73 65 20 63 61  e when b>case ca
258a0 73 65 20 77 68 65 6e 20 74 31 2e 63 3d 64 20 6f  se when t1.c=d o
258b0 72 20 20 2d 74 31 2e 61 3d 31 37 20 74 68 65 6e  r  -t1.a=17 then
258c0 20 28 28 61 29 29 20 77 68 65 6e 20 74 31 2e 61   ((a)) when t1.a
258d0 3c 3e 64 20 74 68 65 6e 20 28 74 31 2e 63 29 20  <>d then (t1.c) 
258e0 65 6c 73 65 20 61 20 65 6e 64 2b 31 39 2b 31 31  else a end+19+11
258f0 20 77 68 65 6e 20 31 39 20 74 68 65 6e 20 74 31   when 19 then t1
25900 2e 61 20 65 6c 73 65 20 62 20 65 6e 64 2d 28 74  .a else b end-(t
25910 31 2e 65 29 20 74 68 65 6e 20 66 20 65 6c 73 65  1.e) then f else
25920 20 74 31 2e 63 20 65 6e 64 20 77 68 65 6e 20 31   t1.c end when 1
25930 37 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  7 then t1.b else
25940 20 61 20 65 6e 64 20 65 6e 64 29 2f 61 62 73 28   a end end)/abs(
25950 64 29 29 2b 74 31 2e 62 20 46 52 4f 4d 20 74 31  d))+t1.b FROM t1
25960 20 57 48 45 52 45 20 74 31 2e 66 2b 31 33 3c 3e   WHERE t1.f+13<>
25970 31 39 7d 0a 7d 20 7b 37 36 37 31 7d 0a 64 6f 5f  19}.} {7671}.do_
25980 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
25990 32 30 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  205 {.  db eval 
259a0 7b 53 45 4c 45 43 54 20 20 2d 7e 64 2a 31 39 2d  {SELECT  -~d*19-
259b0 61 2d 63 20 7c 20 74 31 2e 63 2b 28 61 62 73 28  a-c | t1.c+(abs(
259c0 63 61 73 65 20 20 2d 31 39 20 7c 20 7e 63 61 73  case  -19 | ~cas
259d0 65 20 74 31 2e 64 20 77 68 65 6e 20 63 20 74 68  e t1.d when c th
259e0 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 63 20 65  en t1.f else c e
259f0 6e 64 20 77 68 65 6e 20 2b 74 31 2e 64 20 74 68  nd when +t1.d th
25a00 65 6e 20 31 37 20 65 6c 73 65 20 63 61 73 65 20  en 17 else case 
25a10 63 61 73 65 20 77 68 65 6e 20 62 3e 63 61 73 65  case when b>case
25a20 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e 63 3d   case when t1.c=
25a30 64 20 6f 72 20 20 2d 74 31 2e 61 3d 31 37 20 74  d or  -t1.a=17 t
25a40 68 65 6e 20 28 28 61 29 29 20 77 68 65 6e 20 74  hen ((a)) when t
25a50 31 2e 61 3c 3e 64 20 74 68 65 6e 20 28 74 31 2e  1.a<>d then (t1.
25a60 63 29 20 65 6c 73 65 20 61 20 65 6e 64 2b 31 39  c) else a end+19
25a70 2b 31 31 20 77 68 65 6e 20 31 39 20 74 68 65 6e  +11 when 19 then
25a80 20 74 31 2e 61 20 65 6c 73 65 20 62 20 65 6e 64   t1.a else b end
25a90 2d 28 74 31 2e 65 29 20 74 68 65 6e 20 66 20 65  -(t1.e) then f e
25aa0 6c 73 65 20 74 31 2e 63 20 65 6e 64 20 77 68 65  lse t1.c end whe
25ab0 6e 20 31 37 20 74 68 65 6e 20 74 31 2e 62 20 65  n 17 then t1.b e
25ac0 6c 73 65 20 61 20 65 6e 64 20 65 6e 64 29 2f 61  lse a end end)/a
25ad0 62 73 28 64 29 29 2b 74 31 2e 62 20 46 52 4f 4d  bs(d))+t1.b FROM
25ae0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 74   t1 WHERE NOT (t
25af0 31 2e 66 2b 31 33 3c 3e 31 39 29 7d 0a 7d 20 7b  1.f+13<>19)}.} {
25b00 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
25b10 70 72 2d 32 2e 32 30 36 20 7b 0a 20 20 64 62 20  pr-2.206 {.  db 
25b20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 7e  eval {SELECT  -~
25b30 64 2a 31 39 2d 61 2d 63 20 26 20 74 31 2e 63 2b  d*19-a-c & t1.c+
25b40 28 61 62 73 28 63 61 73 65 20 20 2d 31 39 20 26  (abs(case  -19 &
25b50 20 7e 63 61 73 65 20 74 31 2e 64 20 77 68 65 6e   ~case t1.d when
25b60 20 63 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73   c then t1.f els
25b70 65 20 63 20 65 6e 64 20 77 68 65 6e 20 2b 74 31  e c end when +t1
25b80 2e 64 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20  .d then 17 else 
25b90 63 61 73 65 20 63 61 73 65 20 77 68 65 6e 20 62  case case when b
25ba0 3e 63 61 73 65 20 63 61 73 65 20 77 68 65 6e 20  >case case when 
25bb0 74 31 2e 63 3d 64 20 6f 72 20 20 2d 74 31 2e 61  t1.c=d or  -t1.a
25bc0 3d 31 37 20 74 68 65 6e 20 28 28 61 29 29 20 77  =17 then ((a)) w
25bd0 68 65 6e 20 74 31 2e 61 3c 3e 64 20 74 68 65 6e  hen t1.a<>d then
25be0 20 28 74 31 2e 63 29 20 65 6c 73 65 20 61 20 65   (t1.c) else a e
25bf0 6e 64 2b 31 39 2b 31 31 20 77 68 65 6e 20 31 39  nd+19+11 when 19
25c00 20 74 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20   then t1.a else 
25c10 62 20 65 6e 64 2d 28 74 31 2e 65 29 20 74 68 65  b end-(t1.e) the
25c20 6e 20 66 20 65 6c 73 65 20 74 31 2e 63 20 65 6e  n f else t1.c en
25c30 64 20 77 68 65 6e 20 31 37 20 74 68 65 6e 20 74  d when 17 then t
25c40 31 2e 62 20 65 6c 73 65 20 61 20 65 6e 64 20 65  1.b else a end e
25c50 6e 64 29 2f 61 62 73 28 64 29 29 2b 74 31 2e 62  nd)/abs(d))+t1.b
25c60 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
25c70 31 2e 66 2b 31 33 3c 3e 31 39 7d 0a 7d 20 7b 34  1.f+13<>19}.} {4
25c80 38 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  8}.do_test rande
25c90 78 70 72 2d 32 2e 32 30 37 20 7b 0a 20 20 64 62  xpr-2.207 {.  db
25ca0 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 61   eval {SELECT (a
25cb0 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  bs(coalesce((sel
25cc0 65 63 74 20 62 20 66 72 6f 6d 20 74 31 20 77 68  ect b from t1 wh
25cd0 65 72 65 20 74 31 2e 61 3e 28 61 62 73 28 74 31  ere t1.a>(abs(t1
25ce0 2e 66 29 2f 61 62 73 28 63 6f 61 6c 65 73 63 65  .f)/abs(coalesce
25cf0 28 28 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d  ((select 13 from
25d00 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 63 6f   t1 where not co
25d10 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 28  alesce((select (
25d20 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
25d30 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77  case when case w
25d40 68 65 6e 20 74 31 2e 65 20 6e 6f 74 20 62 65 74  hen t1.e not bet
25d50 77 65 65 6e 20 74 31 2e 63 20 61 6e 64 20 31 39  ween t1.c and 19
25d60 20 74 68 65 6e 20 74 31 2e 64 20 77 68 65 6e 20   then t1.d when 
25d70 64 20 69 6e 20 28 31 31 2c 74 31 2e 62 2c 31 33  d in (11,t1.b,13
25d80 29 20 74 68 65 6e 20 65 20 65 6c 73 65 20 31 37  ) then e else 17
25d90 20 65 6e 64 2a 62 20 62 65 74 77 65 65 6e 20 31   end*b between 1
25da0 33 20 61 6e 64 20 28 74 31 2e 62 29 20 74 68 65  3 and (t1.b) the
25db0 6e 20 74 31 2e 66 20 77 68 65 6e 20 61 3c 3e 31  n t1.f when a<>1
25dc0 39 20 61 6e 64 20 74 31 2e 63 20 6e 6f 74 20 69  9 and t1.c not i
25dd0 6e 20 28 61 2c 74 31 2e 66 2c 62 29 20 74 68 65  n (a,t1.f,b) the
25de0 6e 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e 66  n t1.e else t1.f
25df0 20 65 6e 64 29 20 41 53 20 69 6e 74 65 67 65 72   end) AS integer
25e00 29 20 66 72 6f 6d 20 74 31 29 2b 74 31 2e 63 2d  ) from t1)+t1.c-
25e10 62 2a 20 2d 61 2a 66 20 66 72 6f 6d 20 74 31 20  b* -a*f from t1 
25e20 77 68 65 72 65 20 28 74 31 2e 64 20 69 6e 20 28  where (t1.d in (
25e30 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31  select c from t1
25e40 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31   union select t1
25e50 2e 62 20 66 72 6f 6d 20 74 31 29 29 29 2c 74 31  .b from t1))),t1
25e60 2e 65 29 2d 63 3c 3e 63 29 2c 74 31 2e 63 29 29  .e)-c<>c),t1.c))
25e70 29 29 2c 65 29 29 2f 61 62 73 28 74 31 2e 65 29  )),e))/abs(t1.e)
25e80 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
25e90 28 74 31 2e 61 2d 74 31 2e 63 2d 63 61 73 65 20  (t1.a-t1.c-case 
25ea0 77 68 65 6e 20 65 3c 63 2a 31 37 20 74 68 65 6e  when e<c*17 then
25eb0 20 74 31 2e 65 20 77 68 65 6e 20 63 61 73 65 20   t1.e when case 
25ec0 63 61 73 65 20 74 31 2e 62 20 77 68 65 6e 20 74  case t1.b when t
25ed0 31 2e 63 20 74 68 65 6e 20 63 6f 61 6c 65 73 63  1.c then coalesc
25ee0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31  e((select max(t1
25ef0 2e 63 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .c) from t1 wher
25f00 65 20 74 31 2e 63 20 69 6e 20 28 73 65 6c 65 63  e t1.c in (selec
25f10 74 20 7e 63 61 73 74 28 61 76 67 28 63 61 73 65  t ~cast(avg(case
25f20 20 77 68 65 6e 20 31 37 20 69 6e 20 28 74 31 2e   when 17 in (t1.
25f30 66 2c 74 31 2e 66 2c 74 31 2e 61 29 20 74 68 65  f,t1.f,t1.a) the
25f40 6e 20 63 20 77 68 65 6e 20 31 33 3c 3e 62 20 74  n c when 13<>b t
25f50 68 65 6e 20 66 20 65 6c 73 65 20 64 20 65 6e 64  hen f else d end
25f60 20 7c 20 74 31 2e 64 29 20 41 53 20 69 6e 74 65   | t1.d) AS inte
25f70 67 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  ger) from t1 uni
25f80 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  on select count(
25f90 64 69 73 74 69 6e 63 74 20 31 31 29 20 66 72 6f  distinct 11) fro
25fa0 6d 20 74 31 29 29 2c 63 29 20 65 6c 73 65 20 74  m t1)),c) else t
25fb0 31 2e 66 20 65 6e 64 20 77 68 65 6e 20 66 20 74  1.f end when f t
25fc0 68 65 6e 20 31 39 20 65 6c 73 65 20 74 31 2e 62  hen 19 else t1.b
25fd0 20 65 6e 64 3c 74 31 2e 66 20 74 68 65 6e 20 74   end<t1.f then t
25fe0 31 2e 62 20 65 6c 73 65 20 74 31 2e 65 20 65 6e  1.b else t1.e en
25ff0 64 2d 31 31 20 6e 6f 74 20 62 65 74 77 65 65 6e  d-11 not between
26000 20 31 31 20 61 6e 64 20 74 31 2e 64 29 7d 0a 7d   11 and t1.d)}.}
26010 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e   {0}.do_test ran
26020 64 65 78 70 72 2d 32 2e 32 30 38 20 7b 0a 20 20  dexpr-2.208 {.  
26030 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
26040 28 61 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73  (abs(coalesce((s
26050 65 6c 65 63 74 20 62 20 66 72 6f 6d 20 74 31 20  elect b from t1 
26060 77 68 65 72 65 20 74 31 2e 61 3e 28 61 62 73 28  where t1.a>(abs(
26070 74 31 2e 66 29 2f 61 62 73 28 63 6f 61 6c 65 73  t1.f)/abs(coales
26080 63 65 28 28 73 65 6c 65 63 74 20 31 33 20 66 72  ce((select 13 fr
26090 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
260a0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
260b0 20 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76   (select cast(av
260c0 67 28 63 61 73 65 20 77 68 65 6e 20 63 61 73 65  g(case when case
260d0 20 77 68 65 6e 20 74 31 2e 65 20 6e 6f 74 20 62   when t1.e not b
260e0 65 74 77 65 65 6e 20 74 31 2e 63 20 61 6e 64 20  etween t1.c and 
260f0 31 39 20 74 68 65 6e 20 74 31 2e 64 20 77 68 65  19 then t1.d whe
26100 6e 20 64 20 69 6e 20 28 31 31 2c 74 31 2e 62 2c  n d in (11,t1.b,
26110 31 33 29 20 74 68 65 6e 20 65 20 65 6c 73 65 20  13) then e else 
26120 31 37 20 65 6e 64 2a 62 20 62 65 74 77 65 65 6e  17 end*b between
26130 20 31 33 20 61 6e 64 20 28 74 31 2e 62 29 20 74   13 and (t1.b) t
26140 68 65 6e 20 74 31 2e 66 20 77 68 65 6e 20 61 3c  hen t1.f when a<
26150 3e 31 39 20 61 6e 64 20 74 31 2e 63 20 6e 6f 74  >19 and t1.c not
26160 20 69 6e 20 28 61 2c 74 31 2e 66 2c 62 29 20 74   in (a,t1.f,b) t
26170 68 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 74 31  hen t1.e else t1
26180 2e 66 20 65 6e 64 29 20 41 53 20 69 6e 74 65 67  .f end) AS integ
26190 65 72 29 20 66 72 6f 6d 20 74 31 29 2b 74 31 2e  er) from t1)+t1.
261a0 63 2d 62 2a 20 2d 61 2a 66 20 66 72 6f 6d 20 74  c-b* -a*f from t
261b0 31 20 77 68 65 72 65 20 28 74 31 2e 64 20 69 6e  1 where (t1.d in
261c0 20 28 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20   (select c from 
261d0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
261e0 74 31 2e 62 20 66 72 6f 6d 20 74 31 29 29 29 2c  t1.b from t1))),
261f0 74 31 2e 65 29 2d 63 3c 3e 63 29 2c 74 31 2e 63  t1.e)-c<>c),t1.c
26200 29 29 29 29 2c 65 29 29 2f 61 62 73 28 74 31 2e  )))),e))/abs(t1.
26210 65 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  e)) FROM t1 WHER
26220 45 20 4e 4f 54 20 28 28 74 31 2e 61 2d 74 31 2e  E NOT ((t1.a-t1.
26230 63 2d 63 61 73 65 20 77 68 65 6e 20 65 3c 63 2a  c-case when e<c*
26240 31 37 20 74 68 65 6e 20 74 31 2e 65 20 77 68 65  17 then t1.e whe
26250 6e 20 63 61 73 65 20 63 61 73 65 20 74 31 2e 62  n case case t1.b
26260 20 77 68 65 6e 20 74 31 2e 63 20 74 68 65 6e 20   when t1.c then 
26270 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
26280 20 6d 61 78 28 74 31 2e 63 29 20 66 72 6f 6d 20   max(t1.c) from 
26290 74 31 20 77 68 65 72 65 20 74 31 2e 63 20 69 6e  t1 where t1.c in
262a0 20 28 73 65 6c 65 63 74 20 7e 63 61 73 74 28 61   (select ~cast(a
262b0 76 67 28 63 61 73 65 20 77 68 65 6e 20 31 37 20  vg(case when 17 
262c0 69 6e 20 28 74 31 2e 66 2c 74 31 2e 66 2c 74 31  in (t1.f,t1.f,t1
262d0 2e 61 29 20 74 68 65 6e 20 63 20 77 68 65 6e 20  .a) then c when 
262e0 31 33 3c 3e 62 20 74 68 65 6e 20 66 20 65 6c 73  13<>b then f els
262f0 65 20 64 20 65 6e 64 20 7c 20 74 31 2e 64 29 20  e d end | t1.d) 
26300 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
26310 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
26320 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
26330 31 31 29 20 66 72 6f 6d 20 74 31 29 29 2c 63 29  11) from t1)),c)
26340 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 20 77   else t1.f end w
26350 68 65 6e 20 66 20 74 68 65 6e 20 31 39 20 65 6c  hen f then 19 el
26360 73 65 20 74 31 2e 62 20 65 6e 64 3c 74 31 2e 66  se t1.b end<t1.f
26370 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20   then t1.b else 
26380 74 31 2e 65 20 65 6e 64 2d 31 31 20 6e 6f 74 20  t1.e end-11 not 
26390 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20 74  between 11 and t
263a0 31 2e 64 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  1.d))}.} {}.do_t
263b0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
263c0 30 39 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  09 {.  db eval {
263d0 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e  SELECT case when
263e0 20 74 31 2e 64 3c 3e 64 20 74 68 65 6e 20 63 61   t1.d<>d then ca
263f0 73 65 20 31 31 20 77 68 65 6e 20 7e 2b 63 61 73  se 11 when ~+cas
26400 65 20 74 31 2e 61 20 77 68 65 6e 20 28 61 62 73  e t1.a when (abs
26410 28 74 31 2e 61 29 2f 61 62 73 28 20 2d 63 29 29  (t1.a)/abs( -c))
26420 2a 74 31 2e 63 2b 20 2d 61 2b 63 6f 61 6c 65 73  *t1.c+ -a+coales
26430 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 63 20  ce((select t1.c 
26440 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28  from t1 where ((
26450 61 62 73 28 65 29 2f 61 62 73 28 28 63 61 73 65  abs(e)/abs((case
26460 20 77 68 65 6e 20 28 31 31 3e 3d 65 29 20 74 68   when (11>=e) th
26470 65 6e 20 20 2d 31 37 20 77 68 65 6e 20 28 31 31  en  -17 when (11
26480 29 3c 3d 61 20 74 68 65 6e 20 65 20 65 6c 73 65  )<=a then e else
26490 20 62 20 65 6e 64 29 2b 74 31 2e 66 29 29 3e 31   b end)+t1.f))>1
264a0 39 29 29 2c 62 29 2d 64 20 74 68 65 6e 20 63 20  9)),b)-d then c 
264b0 65 6c 73 65 20 31 37 20 65 6e 64 2b 20 2d 62 20  else 17 end+ -b 
264c0 74 68 65 6e 20 28 20 2d 74 31 2e 61 29 20 65 6c  then ( -t1.a) el
264d0 73 65 20 63 20 65 6e 64 20 77 68 65 6e 20 31 31  se c end when 11
264e0 3c 3d 74 31 2e 66 20 74 68 65 6e 20 31 31 20 65  <=t1.f then 11 e
264f0 6c 73 65 20 31 37 20 65 6e 64 20 46 52 4f 4d 20  lse 17 end FROM 
26500 74 31 20 57 48 45 52 45 20 28 63 6f 61 6c 65 73  t1 WHERE (coales
26510 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31  ce((select max(1
26520 37 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  7) from t1 where
26530 20 7e 63 61 73 65 20 28 28 73 65 6c 65 63 74 20   ~case ((select 
26540 6d 69 6e 28 20 2d 65 2d 61 29 2a 2b 63 61 73 74  min( -e-a)*+cast
26550 28 61 76 67 28 31 31 29 20 41 53 20 69 6e 74 65  (avg(11) AS inte
26560 67 65 72 29 2a 63 6f 75 6e 74 28 2a 29 2d 28 63  ger)*count(*)-(c
26570 6f 75 6e 74 28 2a 29 29 2a 6d 61 78 28 62 29 2a  ount(*))*max(b)*
26580 6d 69 6e 28 20 2d 31 33 29 2b 63 6f 75 6e 74 28  min( -13)+count(
26590 2a 29 2d 6d 69 6e 28 20 2d 31 33 29 20 66 72 6f  *)-min( -13) fro
265a0 6d 20 74 31 29 2b 31 39 29 2b 61 20 77 68 65 6e  m t1)+19)+a when
265b0 20 65 20 74 68 65 6e 20 28 73 65 6c 65 63 74 20   e then (select 
265c0 6d 69 6e 28 66 29 20 66 72 6f 6d 20 74 31 29 20  min(f) from t1) 
265d0 65 6c 73 65 20 63 6f 61 6c 65 73 63 65 28 28 73  else coalesce((s
265e0 65 6c 65 63 74 20 74 31 2e 66 20 66 72 6f 6d 20  elect t1.f from 
265f0 74 31 20 77 68 65 72 65 20 31 37 3e 74 31 2e 63  t1 where 17>t1.c
26600 29 2c 31 39 29 20 65 6e 64 3d 31 31 20 61 6e 64  ),19) end=11 and
26610 20 66 3d 74 31 2e 62 29 2c 31 39 29 20 6e 6f 74   f=t1.b),19) not
26620 20 62 65 74 77 65 65 6e 20 20 2d 61 20 61 6e 64   between  -a and
26630 20 74 31 2e 61 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f   t1.a)}.} {}.do_
26640 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
26650 32 31 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  210 {.  db eval 
26660 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65  {SELECT case whe
26670 6e 20 74 31 2e 64 3c 3e 64 20 74 68 65 6e 20 63  n t1.d<>d then c
26680 61 73 65 20 31 31 20 77 68 65 6e 20 7e 2b 63 61  ase 11 when ~+ca
26690 73 65 20 74 31 2e 61 20 77 68 65 6e 20 28 61 62  se t1.a when (ab
266a0 73 28 74 31 2e 61 29 2f 61 62 73 28 20 2d 63 29  s(t1.a)/abs( -c)
266b0 29 2a 74 31 2e 63 2b 20 2d 61 2b 63 6f 61 6c 65  )*t1.c+ -a+coale
266c0 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 63  sce((select t1.c
266d0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
266e0 28 61 62 73 28 65 29 2f 61 62 73 28 28 63 61 73  (abs(e)/abs((cas
266f0 65 20 77 68 65 6e 20 28 31 31 3e 3d 65 29 20 74  e when (11>=e) t
26700 68 65 6e 20 20 2d 31 37 20 77 68 65 6e 20 28 31  hen  -17 when (1
26710 31 29 3c 3d 61 20 74 68 65 6e 20 65 20 65 6c 73  1)<=a then e els
26720 65 20 62 20 65 6e 64 29 2b 74 31 2e 66 29 29 3e  e b end)+t1.f))>
26730 31 39 29 29 2c 62 29 2d 64 20 74 68 65 6e 20 63  19)),b)-d then c
26740 20 65 6c 73 65 20 31 37 20 65 6e 64 2b 20 2d 62   else 17 end+ -b
26750 20 74 68 65 6e 20 28 20 2d 74 31 2e 61 29 20 65   then ( -t1.a) e
26760 6c 73 65 20 63 20 65 6e 64 20 77 68 65 6e 20 31  lse c end when 1
26770 31 3c 3d 74 31 2e 66 20 74 68 65 6e 20 31 31 20  1<=t1.f then 11 
26780 65 6c 73 65 20 31 37 20 65 6e 64 20 46 52 4f 4d  else 17 end FROM
26790 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28   t1 WHERE NOT ((
267a0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
267b0 20 6d 61 78 28 31 37 29 20 66 72 6f 6d 20 74 31   max(17) from t1
267c0 20 77 68 65 72 65 20 7e 63 61 73 65 20 28 28 73   where ~case ((s
267d0 65 6c 65 63 74 20 6d 69 6e 28 20 2d 65 2d 61 29  elect min( -e-a)
267e0 2a 2b 63 61 73 74 28 61 76 67 28 31 31 29 20 41  *+cast(avg(11) A
267f0 53 20 69 6e 74 65 67 65 72 29 2a 63 6f 75 6e 74  S integer)*count
26800 28 2a 29 2d 28 63 6f 75 6e 74 28 2a 29 29 2a 6d  (*)-(count(*))*m
26810 61 78 28 62 29 2a 6d 69 6e 28 20 2d 31 33 29 2b  ax(b)*min( -13)+
26820 63 6f 75 6e 74 28 2a 29 2d 6d 69 6e 28 20 2d 31  count(*)-min( -1
26830 33 29 20 66 72 6f 6d 20 74 31 29 2b 31 39 29 2b  3) from t1)+19)+
26840 61 20 77 68 65 6e 20 65 20 74 68 65 6e 20 28 73  a when e then (s
26850 65 6c 65 63 74 20 6d 69 6e 28 66 29 20 66 72 6f  elect min(f) fro
26860 6d 20 74 31 29 20 65 6c 73 65 20 63 6f 61 6c 65  m t1) else coale
26870 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 66  sce((select t1.f
26880 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
26890 37 3e 74 31 2e 63 29 2c 31 39 29 20 65 6e 64 3d  7>t1.c),19) end=
268a0 31 31 20 61 6e 64 20 66 3d 74 31 2e 62 29 2c 31  11 and f=t1.b),1
268b0 39 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 20  9) not between  
268c0 2d 61 20 61 6e 64 20 74 31 2e 61 29 29 7d 0a 7d  -a and t1.a))}.}
268d0 20 7b 31 31 7d 0a 64 6f 5f 74 65 73 74 20 72 61   {11}.do_test ra
268e0 6e 64 65 78 70 72 2d 32 2e 32 31 31 20 7b 0a 20  ndexpr-2.211 {. 
268f0 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
26900 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
26910 74 20 6d 61 78 28 74 31 2e 65 29 20 66 72 6f 6d  t max(t1.e) from
26920 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 64 20   t1 where not d 
26930 69 6e 20 28 73 65 6c 65 63 74 20 28 61 62 73 28  in (select (abs(
26940 74 31 2e 66 29 2f 61 62 73 28 7e 63 61 73 65 20  t1.f)/abs(~case 
26950 77 68 65 6e 20 28 61 62 73 28 74 31 2e 65 29 2f  when (abs(t1.e)/
26960 61 62 73 28 20 2d 74 31 2e 61 29 29 2b 74 31 2e  abs( -t1.a))+t1.
26970 62 2d 74 31 2e 65 2a 74 31 2e 61 2d 74 31 2e 63  b-t1.e*t1.a-t1.c
26980 20 62 65 74 77 65 65 6e 20 62 20 61 6e 64 20 74   between b and t
26990 31 2e 65 20 74 68 65 6e 20 66 20 65 6c 73 65 20  1.e then f else 
269a0 61 20 65 6e 64 2b 31 39 29 29 20 66 72 6f 6d 20  a end+19)) from 
269b0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
269c0 31 33 20 66 72 6f 6d 20 74 31 29 20 6f 72 20 28  13 from t1) or (
269d0 74 31 2e 65 3d 28 61 29 29 20 61 6e 64 20 20 2d  t1.e=(a)) and  -
269e0 31 31 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31  11 in (select t1
269f0 2e 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  .f from t1 union
26a00 20 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74   select c from t
26a10 31 29 29 2c 61 29 2a 63 6f 61 6c 65 73 63 65 28  1)),a)*coalesce(
26a20 28 73 65 6c 65 63 74 20 6d 61 78 28 66 29 20 66  (select max(f) f
26a30 72 6f 6d 20 74 31 20 77 68 65 72 65 20 64 3d 66  rom t1 where d=f
26a40 29 2c 66 29 2a 63 2b 28 74 31 2e 63 29 20 46 52  ),f)*c+(t1.c) FR
26a50 4f 4d 20 74 31 20 57 48 45 52 45 20 63 61 73 65  OM t1 WHERE case
26a60 20 77 68 65 6e 20 2b 28 61 62 73 28 31 39 29 2f   when +(abs(19)/
26a70 61 62 73 28 31 33 2a 74 31 2e 65 29 29 3c 3e 31  abs(13*t1.e))<>1
26a80 31 20 74 68 65 6e 20 31 39 20 77 68 65 6e 20 63  1 then 19 when c
26a90 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
26aa0 6d 61 78 28 63 29 20 66 72 6f 6d 20 74 31 20 77  max(c) from t1 w
26ab0 68 65 72 65 20 74 31 2e 65 2b 74 31 2e 61 20 62  here t1.e+t1.a b
26ac0 65 74 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20  etween t1.f and 
26ad0 66 29 2c 74 31 2e 61 29 3d 28 61 29 20 74 68 65  f),t1.a)=(a) the
26ae0 6e 20 64 20 65 6c 73 65 20 20 2d 31 39 20 65 6e  n d else  -19 en
26af0 64 3c 3d 66 20 6f 72 20 28 28 28 65 20 69 6e 20  d<=f or (((e in 
26b00 28 62 2c 74 31 2e 62 2c 31 33 29 29 29 29 20 6f  (b,t1.b,13)))) o
26b10 72 20 62 3c 28 66 29 20 61 6e 64 20 74 31 2e 61  r b<(f) and t1.a
26b20 3c 3e 31 31 20 6f 72 20 65 78 69 73 74 73 28 73  <>11 or exists(s
26b30 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
26b40 77 68 65 72 65 20 74 31 2e 64 3d 64 29 20 6f 72  where t1.d=d) or
26b50 20 28 74 31 2e 61 29 3c 3e 61 20 6f 72 20 74 31   (t1.a)<>a or t1
26b60 2e 61 3c 3e 65 7d 0a 7d 20 7b 39 30 30 30 30 33  .a<>e}.} {900003
26b70 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  00}.do_test rand
26b80 65 78 70 72 2d 32 2e 32 31 32 20 7b 0a 20 20 64  expr-2.212 {.  d
26b90 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
26ba0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
26bb0 6d 61 78 28 74 31 2e 65 29 20 66 72 6f 6d 20 74  max(t1.e) from t
26bc0 31 20 77 68 65 72 65 20 6e 6f 74 20 64 20 69 6e  1 where not d in
26bd0 20 28 73 65 6c 65 63 74 20 28 61 62 73 28 74 31   (select (abs(t1
26be0 2e 66 29 2f 61 62 73 28 7e 63 61 73 65 20 77 68  .f)/abs(~case wh
26bf0 65 6e 20 28 61 62 73 28 74 31 2e 65 29 2f 61 62  en (abs(t1.e)/ab
26c00 73 28 20 2d 74 31 2e 61 29 29 2b 74 31 2e 62 2d  s( -t1.a))+t1.b-
26c10 74 31 2e 65 2a 74 31 2e 61 2d 74 31 2e 63 20 62  t1.e*t1.a-t1.c b
26c20 65 74 77 65 65 6e 20 62 20 61 6e 64 20 74 31 2e  etween b and t1.
26c30 65 20 74 68 65 6e 20 66 20 65 6c 73 65 20 61 20  e then f else a 
26c40 65 6e 64 2b 31 39 29 29 20 66 72 6f 6d 20 74 31  end+19)) from t1
26c50 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 31 33   union select 13
26c60 20 66 72 6f 6d 20 74 31 29 20 6f 72 20 28 74 31   from t1) or (t1
26c70 2e 65 3d 28 61 29 29 20 61 6e 64 20 20 2d 31 31  .e=(a)) and  -11
26c80 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 66   in (select t1.f
26c90 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
26ca0 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 29  elect c from t1)
26cb0 29 2c 61 29 2a 63 6f 61 6c 65 73 63 65 28 28 73  ),a)*coalesce((s
26cc0 65 6c 65 63 74 20 6d 61 78 28 66 29 20 66 72 6f  elect max(f) fro
26cd0 6d 20 74 31 20 77 68 65 72 65 20 64 3d 66 29 2c  m t1 where d=f),
26ce0 66 29 2a 63 2b 28 74 31 2e 63 29 20 46 52 4f 4d  f)*c+(t1.c) FROM
26cf0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 63   t1 WHERE NOT (c
26d00 61 73 65 20 77 68 65 6e 20 2b 28 61 62 73 28 31  ase when +(abs(1
26d10 39 29 2f 61 62 73 28 31 33 2a 74 31 2e 65 29 29  9)/abs(13*t1.e))
26d20 3c 3e 31 31 20 74 68 65 6e 20 31 39 20 77 68 65  <>11 then 19 whe
26d30 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  n coalesce((sele
26d40 63 74 20 6d 61 78 28 63 29 20 66 72 6f 6d 20 74  ct max(c) from t
26d50 31 20 77 68 65 72 65 20 74 31 2e 65 2b 74 31 2e  1 where t1.e+t1.
26d60 61 20 62 65 74 77 65 65 6e 20 74 31 2e 66 20 61  a between t1.f a
26d70 6e 64 20 66 29 2c 74 31 2e 61 29 3d 28 61 29 20  nd f),t1.a)=(a) 
26d80 74 68 65 6e 20 64 20 65 6c 73 65 20 20 2d 31 39  then d else  -19
26d90 20 65 6e 64 3c 3d 66 20 6f 72 20 28 28 28 65 20   end<=f or (((e 
26da0 69 6e 20 28 62 2c 74 31 2e 62 2c 31 33 29 29 29  in (b,t1.b,13)))
26db0 29 20 6f 72 20 62 3c 28 66 29 20 61 6e 64 20 74  ) or b<(f) and t
26dc0 31 2e 61 3c 3e 31 31 20 6f 72 20 65 78 69 73 74  1.a<>11 or exist
26dd0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
26de0 74 31 20 77 68 65 72 65 20 74 31 2e 64 3d 64 29  t1 where t1.d=d)
26df0 20 6f 72 20 28 74 31 2e 61 29 3c 3e 61 20 6f 72   or (t1.a)<>a or
26e00 20 74 31 2e 61 3c 3e 65 29 7d 0a 7d 20 7b 7d 0a   t1.a<>e)}.} {}.
26e10 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
26e20 2d 32 2e 32 31 33 20 7b 0a 20 20 64 62 20 65 76  -2.213 {.  db ev
26e30 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
26e40 28 73 65 6c 65 63 74 20 61 62 73 28 63 6f 75 6e  (select abs(coun
26e50 74 28 64 69 73 74 69 6e 63 74 20 20 2d 31 37 2b  t(distinct  -17+
26e60 28 61 62 73 28 63 29 2f 61 62 73 28 63 61 73 65  (abs(c)/abs(case
26e70 20 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c   when exists(sel
26e80 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
26e90 65 72 65 20 28 31 37 3c 3e 28 66 29 29 29 20 74  ere (17<>(f))) t
26ea0 68 65 6e 20 65 20 77 68 65 6e 20 74 31 2e 63 20  hen e when t1.c 
26eb0 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 31 20 61  not between 11 a
26ec0 6e 64 20 74 31 2e 64 20 74 68 65 6e 20 2b 31 31  nd t1.d then +11
26ed0 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 20 7c   else t1.e end |
26ee0 20 62 29 29 2b 64 29 2a 2b 20 2d 28 6d 69 6e 28   b))+d)*+ -(min(
26ef0 66 29 2a 6d 61 78 28 74 31 2e 65 29 29 2a 2b 63  f)*max(t1.e))*+c
26f00 61 73 74 28 61 76 67 28 74 31 2e 66 29 20 41 53  ast(avg(t1.f) AS
26f10 20 69 6e 74 65 67 65 72 29 20 7c 20 63 6f 75 6e   integer) | coun
26f20 74 28 64 69 73 74 69 6e 63 74 20 28 66 29 29 2d  t(distinct (f))-
26f30 20 2d 20 2d 63 6f 75 6e 74 28 2a 29 2d 63 61 73   - -count(*)-cas
26f40 74 28 61 76 67 28 28 65 29 29 20 41 53 20 69 6e  t(avg((e)) AS in
26f50 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31 29  teger)) from t1)
26f60 20 77 68 65 6e 20 28 61 62 73 28 31 31 29 2f 61   when (abs(11)/a
26f70 62 73 28 74 31 2e 65 29 29 20 74 68 65 6e 20 31  bs(t1.e)) then 1
26f80 33 20 65 6c 73 65 20 62 20 65 6e 64 20 46 52 4f  3 else b end FRO
26f90 4d 20 74 31 20 57 48 45 52 45 20 63 61 73 65 20  M t1 WHERE case 
26fa0 77 68 65 6e 20 74 31 2e 65 20 6e 6f 74 20 62 65  when t1.e not be
26fb0 74 77 65 65 6e 20 63 6f 61 6c 65 73 63 65 28 28  tween coalesce((
26fc0 73 65 6c 65 63 74 20 28 73 65 6c 65 63 74 20 63  select (select c
26fd0 6f 75 6e 74 28 2a 29 2b 63 61 73 65 20 6d 61 78  ount(*)+case max
26fe0 28 31 37 29 20 77 68 65 6e 20 63 6f 75 6e 74 28  (17) when count(
26ff0 64 69 73 74 69 6e 63 74 20 31 39 2d 74 31 2e 63  distinct 19-t1.c
27000 2a 74 31 2e 63 2d 65 29 20 74 68 65 6e 20 20 2d  *t1.c-e) then  -
27010 6d 69 6e 28 62 29 2d 63 61 73 74 28 61 76 67 28  min(b)-cast(avg(
27020 28 31 33 29 29 20 41 53 20 69 6e 74 65 67 65 72  (13)) AS integer
27030 29 2a 63 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20  )*count(*) else 
27040 6d 69 6e 28 31 39 29 20 65 6e 64 20 66 72 6f 6d  min(19) end from
27050 20 74 31 29 2a 61 2a 74 31 2e 64 2d 31 37 2a 61   t1)*a*t1.d-17*a
27060 2b 31 37 20 66 72 6f 6d 20 74 31 20 77 68 65 72  +17 from t1 wher
27070 65 20 74 31 2e 64 20 6e 6f 74 20 69 6e 20 28 31  e t1.d not in (1
27080 33 2c 74 31 2e 66 2c 20 2d 63 29 29 2c 74 31 2e  3,t1.f, -c)),t1.
27090 63 29 20 61 6e 64 20 65 20 74 68 65 6e 20 28 20  c) and e then ( 
270a0 2d 62 29 20 77 68 65 6e 20 28 31 33 29 3e 3d 28  -b) when (13)>=(
270b0 65 29 20 74 68 65 6e 20 74 31 2e 63 20 65 6c 73  e) then t1.c els
270c0 65 20 65 20 65 6e 64 20 69 6e 20 28 74 31 2e 64  e e end in (t1.d
270d0 2c 74 31 2e 63 2c 20 2d 31 31 29 7d 0a 7d 20 7b  ,t1.c, -11)}.} {
270e0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
270f0 70 72 2d 32 2e 32 31 34 20 7b 0a 20 20 64 62 20  pr-2.214 {.  db 
27100 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73  eval {SELECT cas
27110 65 20 28 73 65 6c 65 63 74 20 61 62 73 28 63 6f  e (select abs(co
27120 75 6e 74 28 64 69 73 74 69 6e 63 74 20 20 2d 31  unt(distinct  -1
27130 37 2b 28 61 62 73 28 63 29 2f 61 62 73 28 63 61  7+(abs(c)/abs(ca
27140 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28 73  se when exists(s
27150 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
27160 77 68 65 72 65 20 28 31 37 3c 3e 28 66 29 29 29  where (17<>(f)))
27170 20 74 68 65 6e 20 65 20 77 68 65 6e 20 74 31 2e   then e when t1.
27180 63 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 31  c not between 11
27190 20 61 6e 64 20 74 31 2e 64 20 74 68 65 6e 20 2b   and t1.d then +
271a0 31 31 20 65 6c 73 65 20 74 31 2e 65 20 65 6e 64  11 else t1.e end
271b0 20 7c 20 62 29 29 2b 64 29 2a 2b 20 2d 28 6d 69   | b))+d)*+ -(mi
271c0 6e 28 66 29 2a 6d 61 78 28 74 31 2e 65 29 29 2a  n(f)*max(t1.e))*
271d0 2b 63 61 73 74 28 61 76 67 28 74 31 2e 66 29 20  +cast(avg(t1.f) 
271e0 41 53 20 69 6e 74 65 67 65 72 29 20 7c 20 63 6f  AS integer) | co
271f0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 28 66 29  unt(distinct (f)
27200 29 2d 20 2d 20 2d 63 6f 75 6e 74 28 2a 29 2d 63  )- - -count(*)-c
27210 61 73 74 28 61 76 67 28 28 65 29 29 20 41 53 20  ast(avg((e)) AS 
27220 69 6e 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74  integer)) from t
27230 31 29 20 77 68 65 6e 20 28 61 62 73 28 31 31 29  1) when (abs(11)
27240 2f 61 62 73 28 74 31 2e 65 29 29 20 74 68 65 6e  /abs(t1.e)) then
27250 20 31 33 20 65 6c 73 65 20 62 20 65 6e 64 20 46   13 else b end F
27260 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
27270 20 28 63 61 73 65 20 77 68 65 6e 20 74 31 2e 65   (case when t1.e
27280 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 6f 61   not between coa
27290 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 28 73  lesce((select (s
272a0 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 2b 63  elect count(*)+c
272b0 61 73 65 20 6d 61 78 28 31 37 29 20 77 68 65 6e  ase max(17) when
272c0 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
272d0 31 39 2d 74 31 2e 63 2a 74 31 2e 63 2d 65 29 20  19-t1.c*t1.c-e) 
272e0 74 68 65 6e 20 20 2d 6d 69 6e 28 62 29 2d 63 61  then  -min(b)-ca
272f0 73 74 28 61 76 67 28 28 31 33 29 29 20 41 53 20  st(avg((13)) AS 
27300 69 6e 74 65 67 65 72 29 2a 63 6f 75 6e 74 28 2a  integer)*count(*
27310 29 20 65 6c 73 65 20 6d 69 6e 28 31 39 29 20 65  ) else min(19) e
27320 6e 64 20 66 72 6f 6d 20 74 31 29 2a 61 2a 74 31  nd from t1)*a*t1
27330 2e 64 2d 31 37 2a 61 2b 31 37 20 66 72 6f 6d 20  .d-17*a+17 from 
27340 74 31 20 77 68 65 72 65 20 74 31 2e 64 20 6e 6f  t1 where t1.d no
27350 74 20 69 6e 20 28 31 33 2c 74 31 2e 66 2c 20 2d  t in (13,t1.f, -
27360 63 29 29 2c 74 31 2e 63 29 20 61 6e 64 20 65 20  c)),t1.c) and e 
27370 74 68 65 6e 20 28 20 2d 62 29 20 77 68 65 6e 20  then ( -b) when 
27380 28 31 33 29 3e 3d 28 65 29 20 74 68 65 6e 20 74  (13)>=(e) then t
27390 31 2e 63 20 65 6c 73 65 20 65 20 65 6e 64 20 69  1.c else e end i
273a0 6e 20 28 74 31 2e 64 2c 74 31 2e 63 2c 20 2d 31  n (t1.d,t1.c, -1
273b0 31 29 29 7d 0a 7d 20 7b 32 30 30 7d 0a 64 6f 5f  1))}.} {200}.do_
273c0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
273d0 32 31 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  215 {.  db eval 
273e0 7b 53 45 4c 45 43 54 20 63 61 73 65 20 28 73 65  {SELECT case (se
273f0 6c 65 63 74 20 61 62 73 28 63 6f 75 6e 74 28 64  lect abs(count(d
27400 69 73 74 69 6e 63 74 20 20 2d 31 37 2b 28 61 62  istinct  -17+(ab
27410 73 28 63 29 2f 61 62 73 28 63 61 73 65 20 77 68  s(c)/abs(case wh
27420 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  en exists(select
27430 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
27440 20 28 31 37 3c 3e 28 66 29 29 29 20 74 68 65 6e   (17<>(f))) then
27450 20 65 20 77 68 65 6e 20 74 31 2e 63 20 6e 6f 74   e when t1.c not
27460 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20   between 11 and 
27470 74 31 2e 64 20 74 68 65 6e 20 2b 31 31 20 65 6c  t1.d then +11 el
27480 73 65 20 74 31 2e 65 20 65 6e 64 20 26 20 62 29  se t1.e end & b)
27490 29 2b 64 29 2a 2b 20 2d 28 6d 69 6e 28 66 29 2a  )+d)*+ -(min(f)*
274a0 6d 61 78 28 74 31 2e 65 29 29 2a 2b 63 61 73 74  max(t1.e))*+cast
274b0 28 61 76 67 28 74 31 2e 66 29 20 41 53 20 69 6e  (avg(t1.f) AS in
274c0 74 65 67 65 72 29 20 26 20 63 6f 75 6e 74 28 64  teger) & count(d
274d0 69 73 74 69 6e 63 74 20 28 66 29 29 2d 20 2d 20  istinct (f))- - 
274e0 2d 63 6f 75 6e 74 28 2a 29 2d 63 61 73 74 28 61  -count(*)-cast(a
274f0 76 67 28 28 65 29 29 20 41 53 20 69 6e 74 65 67  vg((e)) AS integ
27500 65 72 29 29 20 66 72 6f 6d 20 74 31 29 20 77 68  er)) from t1) wh
27510 65 6e 20 28 61 62 73 28 31 31 29 2f 61 62 73 28  en (abs(11)/abs(
27520 74 31 2e 65 29 29 20 74 68 65 6e 20 31 33 20 65  t1.e)) then 13 e
27530 6c 73 65 20 62 20 65 6e 64 20 46 52 4f 4d 20 74  lse b end FROM t
27540 31 20 57 48 45 52 45 20 4e 4f 54 20 28 63 61 73  1 WHERE NOT (cas
27550 65 20 77 68 65 6e 20 74 31 2e 65 20 6e 6f 74 20  e when t1.e not 
27560 62 65 74 77 65 65 6e 20 63 6f 61 6c 65 73 63 65  between coalesce
27570 28 28 73 65 6c 65 63 74 20 28 73 65 6c 65 63 74  ((select (select
27580 20 63 6f 75 6e 74 28 2a 29 2b 63 61 73 65 20 6d   count(*)+case m
27590 61 78 28 31 37 29 20 77 68 65 6e 20 63 6f 75 6e  ax(17) when coun
275a0 74 28 64 69 73 74 69 6e 63 74 20 31 39 2d 74 31  t(distinct 19-t1
275b0 2e 63 2a 74 31 2e 63 2d 65 29 20 74 68 65 6e 20  .c*t1.c-e) then 
275c0 20 2d 6d 69 6e 28 62 29 2d 63 61 73 74 28 61 76   -min(b)-cast(av
275d0 67 28 28 31 33 29 29 20 41 53 20 69 6e 74 65 67  g((13)) AS integ
275e0 65 72 29 2a 63 6f 75 6e 74 28 2a 29 20 65 6c 73  er)*count(*) els
275f0 65 20 6d 69 6e 28 31 39 29 20 65 6e 64 20 66 72  e min(19) end fr
27600 6f 6d 20 74 31 29 2a 61 2a 74 31 2e 64 2d 31 37  om t1)*a*t1.d-17
27610 2a 61 2b 31 37 20 66 72 6f 6d 20 74 31 20 77 68  *a+17 from t1 wh
27620 65 72 65 20 74 31 2e 64 20 6e 6f 74 20 69 6e 20  ere t1.d not in 
27630 28 31 33 2c 74 31 2e 66 2c 20 2d 63 29 29 2c 74  (13,t1.f, -c)),t
27640 31 2e 63 29 20 61 6e 64 20 65 20 74 68 65 6e 20  1.c) and e then 
27650 28 20 2d 62 29 20 77 68 65 6e 20 28 31 33 29 3e  ( -b) when (13)>
27660 3d 28 65 29 20 74 68 65 6e 20 74 31 2e 63 20 65  =(e) then t1.c e
27670 6c 73 65 20 65 20 65 6e 64 20 69 6e 20 28 74 31  lse e end in (t1
27680 2e 64 2c 74 31 2e 63 2c 20 2d 31 31 29 29 7d 0a  .d,t1.c, -11))}.
27690 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73 74 20  } {200}.do_test 
276a0 72 61 6e 64 65 78 70 72 2d 32 2e 32 31 36 20 7b  randexpr-2.216 {
276b0 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
276c0 43 54 20 20 2d 63 61 73 65 20 77 68 65 6e 20 64  CT  -case when d
276d0 3c 64 20 6f 72 20 6e 6f 74 20 65 78 69 73 74 73  <d or not exists
276e0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
276f0 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73  1 where not exis
27700 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
27710 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 6e 6f   t1 where not no
27720 74 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  t not exists(sel
27730 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
27740 65 72 65 20 6e 6f 74 20 65 2b 7e 74 31 2e 63 20  ere not e+~t1.c 
27750 62 65 74 77 65 65 6e 20 74 31 2e 65 20 61 6e 64  between t1.e and
27760 20 74 31 2e 63 20 61 6e 64 20 74 31 2e 63 3e 74   t1.c and t1.c>t
27770 31 2e 64 29 29 29 20 74 68 65 6e 20 63 61 73 65  1.d))) then case
27780 20 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65   +coalesce((sele
27790 63 74 20 63 61 73 65 20 77 68 65 6e 20 31 33 3e  ct case when 13>
277a0 74 31 2e 62 20 74 68 65 6e 20 31 37 2b 74 31 2e  t1.b then 17+t1.
277b0 64 2b 64 20 77 68 65 6e 20 31 37 20 69 6e 20 28  d+d when 17 in (
277c0 74 31 2e 62 2c 62 2c 62 29 20 61 6e 64 20 31 37  t1.b,b,b) and 17
277d0 3c 3d 74 31 2e 65 20 74 68 65 6e 20 28 63 29 20  <=t1.e then (c) 
277e0 65 6c 73 65 20 74 31 2e 64 20 65 6e 64 20 66 72  else t1.d end fr
277f0 6f 6d 20 74 31 20 77 68 65 72 65 20 31 37 3c 61  om t1 where 17<a
27800 29 2c 31 31 29 20 77 68 65 6e 20 66 20 74 68 65  ),11) when f the
27810 6e 20 74 31 2e 63 20 65 6c 73 65 20 62 20 65 6e  n t1.c else b en
27820 64 20 77 68 65 6e 20 31 39 20 62 65 74 77 65 65  d when 19 betwee
27830 6e 20 31 31 20 61 6e 64 20 74 31 2e 65 20 74 68  n 11 and t1.e th
27840 65 6e 20 66 20 65 6c 73 65 20 61 20 65 6e 64 2d  en f else a end-
27850 31 39 2a 31 33 20 46 52 4f 4d 20 74 31 20 57 48  19*13 FROM t1 WH
27860 45 52 45 20 65 78 69 73 74 73 28 73 65 6c 65 63  ERE exists(selec
27870 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
27880 65 20 2b 31 33 20 69 6e 20 28 73 65 6c 65 63 74  e +13 in (select
27890 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
278a0 31 33 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  13) from t1 unio
278b0 6e 20 73 65 6c 65 63 74 20 63 61 73 65 20 63 6f  n select case co
278c0 75 6e 74 28 2a 29 2b 20 2d 28 6d 61 78 28 74 31  unt(*)+ -(max(t1
278d0 2e 63 29 29 20 77 68 65 6e 20 63 6f 75 6e 74 28  .c)) when count(
278e0 2a 29 20 7c 20 7e 28 20 2d 63 6f 75 6e 74 28 2a  *) | ~( -count(*
278f0 29 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  )-count(distinct
27900 20 20 2d 66 29 29 2b 6d 69 6e 28 61 29 2d 6d 61    -f))+min(a)-ma
27910 78 28 74 31 2e 62 29 20 74 68 65 6e 20 20 2d 20  x(t1.b) then  - 
27920 2d 6d 61 78 28 31 33 29 20 65 6c 73 65 20 6d 61  -max(13) else ma
27930 78 28 65 29 20 65 6e 64 2b 63 6f 75 6e 74 28 64  x(e) end+count(d
27940 69 73 74 69 6e 63 74 20 31 37 29 20 66 72 6f 6d  istinct 17) from
27950 20 74 31 29 20 61 6e 64 20 64 2a 74 31 2e 62 3e   t1) and d*t1.b>
27960 62 2b 74 31 2e 61 2a 74 31 2e 61 2d 63 6f 61 6c  b+t1.a*t1.a-coal
27970 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
27980 28 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  (d) from t1 wher
27990 65 20 28 31 37 20 62 65 74 77 65 65 6e 20 28 74  e (17 between (t
279a0 31 2e 64 29 20 61 6e 64 20 28 66 29 29 29 2c 74  1.d) and (f))),t
279b0 31 2e 65 29 2d 74 31 2e 63 20 61 6e 64 20 74 31  1.e)-t1.c and t1
279c0 2e 64 3e 31 31 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f  .d>11)}.} {}.do_
279d0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
279e0 32 31 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  217 {.  db eval 
279f0 7b 53 45 4c 45 43 54 20 20 2d 63 61 73 65 20 77  {SELECT  -case w
27a00 68 65 6e 20 64 3c 64 20 6f 72 20 6e 6f 74 20 65  hen d<d or not e
27a10 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
27a20 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
27a30 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
27a40 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e   from t1 where n
27a50 6f 74 20 6e 6f 74 20 6e 6f 74 20 65 78 69 73 74  ot not not exist
27a60 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
27a70 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 2b 7e  t1 where not e+~
27a80 74 31 2e 63 20 62 65 74 77 65 65 6e 20 74 31 2e  t1.c between t1.
27a90 65 20 61 6e 64 20 74 31 2e 63 20 61 6e 64 20 74  e and t1.c and t
27aa0 31 2e 63 3e 74 31 2e 64 29 29 29 20 74 68 65 6e  1.c>t1.d))) then
27ab0 20 63 61 73 65 20 2b 63 6f 61 6c 65 73 63 65 28   case +coalesce(
27ac0 28 73 65 6c 65 63 74 20 63 61 73 65 20 77 68 65  (select case whe
27ad0 6e 20 31 33 3e 74 31 2e 62 20 74 68 65 6e 20 31  n 13>t1.b then 1
27ae0 37 2b 74 31 2e 64 2b 64 20 77 68 65 6e 20 31 37  7+t1.d+d when 17
27af0 20 69 6e 20 28 74 31 2e 62 2c 62 2c 62 29 20 61   in (t1.b,b,b) a
27b00 6e 64 20 31 37 3c 3d 74 31 2e 65 20 74 68 65 6e  nd 17<=t1.e then
27b10 20 28 63 29 20 65 6c 73 65 20 74 31 2e 64 20 65   (c) else t1.d e
27b20 6e 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  nd from t1 where
27b30 20 31 37 3c 61 29 2c 31 31 29 20 77 68 65 6e 20   17<a),11) when 
27b40 66 20 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65  f then t1.c else
27b50 20 62 20 65 6e 64 20 77 68 65 6e 20 31 39 20 62   b end when 19 b
27b60 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20 74 31  etween 11 and t1
27b70 2e 65 20 74 68 65 6e 20 66 20 65 6c 73 65 20 61  .e then f else a
27b80 20 65 6e 64 2d 31 39 2a 31 33 20 46 52 4f 4d 20   end-19*13 FROM 
27b90 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 65 78  t1 WHERE NOT (ex
27ba0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
27bb0 6f 6d 20 74 31 20 77 68 65 72 65 20 2b 31 33 20  om t1 where +13 
27bc0 69 6e 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74  in (select count
27bd0 28 64 69 73 74 69 6e 63 74 20 31 33 29 20 66 72  (distinct 13) fr
27be0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
27bf0 63 74 20 63 61 73 65 20 63 6f 75 6e 74 28 2a 29  ct case count(*)
27c00 2b 20 2d 28 6d 61 78 28 74 31 2e 63 29 29 20 77  + -(max(t1.c)) w
27c10 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20 7c 20 7e  hen count(*) | ~
27c20 28 20 2d 63 6f 75 6e 74 28 2a 29 2d 63 6f 75 6e  ( -count(*)-coun
27c30 74 28 64 69 73 74 69 6e 63 74 20 20 2d 66 29 29  t(distinct  -f))
27c40 2b 6d 69 6e 28 61 29 2d 6d 61 78 28 74 31 2e 62  +min(a)-max(t1.b
27c50 29 20 74 68 65 6e 20 20 2d 20 2d 6d 61 78 28 31  ) then  - -max(1
27c60 33 29 20 65 6c 73 65 20 6d 61 78 28 65 29 20 65  3) else max(e) e
27c70 6e 64 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  nd+count(distinc
27c80 74 20 31 37 29 20 66 72 6f 6d 20 74 31 29 20 61  t 17) from t1) a
27c90 6e 64 20 64 2a 74 31 2e 62 3e 62 2b 74 31 2e 61  nd d*t1.b>b+t1.a
27ca0 2a 74 31 2e 61 2d 63 6f 61 6c 65 73 63 65 28 28  *t1.a-coalesce((
27cb0 73 65 6c 65 63 74 20 6d 61 78 28 64 29 20 66 72  select max(d) fr
27cc0 6f 6d 20 74 31 20 77 68 65 72 65 20 28 31 37 20  om t1 where (17 
27cd0 62 65 74 77 65 65 6e 20 28 74 31 2e 64 29 20 61  between (t1.d) a
27ce0 6e 64 20 28 66 29 29 29 2c 74 31 2e 65 29 2d 74  nd (f))),t1.e)-t
27cf0 31 2e 63 20 61 6e 64 20 74 31 2e 64 3e 31 31 29  1.c and t1.d>11)
27d00 29 7d 0a 7d 20 7b 2d 34 34 37 7d 0a 64 6f 5f 74  )}.} {-447}.do_t
27d10 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
27d20 31 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  18 {.  db eval {
27d30 53 45 4c 45 43 54 20 28 73 65 6c 65 63 74 20 2b  SELECT (select +
27d40 20 2d 6d 61 78 28 74 31 2e 63 29 2a 61 62 73 28   -max(t1.c)*abs(
27d50 6d 69 6e 28 74 31 2e 62 29 20 7c 20 63 61 73 65  min(t1.b) | case
27d60 20 28 61 62 73 28 6d 69 6e 28 31 33 29 29 29 2b   (abs(min(13)))+
27d70 63 6f 75 6e 74 28 2a 29 2d 6d 61 78 28 74 31 2e  count(*)-max(t1.
27d80 61 29 20 77 68 65 6e 20 6d 61 78 28 7e 31 33 29  a) when max(~13)
27d90 20 74 68 65 6e 20 61 62 73 28 20 2d 7e 6d 69 6e   then abs( -~min
27da0 28 74 31 2e 62 29 2b 61 62 73 28 63 6f 75 6e 74  (t1.b)+abs(count
27db0 28 64 69 73 74 69 6e 63 74 20 28 73 65 6c 65 63  (distinct (selec
27dc0 74 20 2b 2b 2b 63 61 73 74 28 61 76 67 28 74 31  t +++cast(avg(t1
27dd0 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d  .b) AS integer)-
27de0 63 61 73 65 20 20 2d 63 6f 75 6e 74 28 2a 29 20  case  -count(*) 
27df0 77 68 65 6e 20 20 2d 63 6f 75 6e 74 28 2a 29 20  when  -count(*) 
27e00 74 68 65 6e 20 20 2d 63 6f 75 6e 74 28 64 69 73  then  -count(dis
27e10 74 69 6e 63 74 20 62 29 20 65 6c 73 65 20 63 6f  tinct b) else co
27e20 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29 20  unt(distinct c) 
27e30 65 6e 64 20 66 72 6f 6d 20 74 31 29 29 29 29 20  end from t1)))) 
27e40 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e  else count(*) en
27e50 64 2d 6d 61 78 28 28 65 29 29 29 20 7c 20 20 2d  d-max((e))) |  -
27e60 63 61 73 74 28 61 76 67 28 74 31 2e 65 29 20 41  cast(avg(t1.e) A
27e70 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
27e80 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  t1) FROM t1 WHER
27e90 45 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  E exists(select 
27ea0 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
27eb0 20 2d 66 2d 64 2a 74 31 2e 66 2d 63 2d 63 6f 61   -f-d*t1.f-c-coa
27ec0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
27ed0 78 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 20  x(t1.a) from t1 
27ee0 77 68 65 72 65 20 31 31 20 6e 6f 74 20 69 6e 20  where 11 not in 
27ef0 28 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a  ((select count(*
27f00 29 20 66 72 6f 6d 20 74 31 29 2c 63 6f 61 6c 65  ) from t1),coale
27f10 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
27f20 74 31 2e 66 2b 65 29 20 66 72 6f 6d 20 74 31 20  t1.f+e) from t1 
27f30 77 68 65 72 65 20 74 31 2e 62 20 69 6e 20 28 73  where t1.b in (s
27f40 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
27f50 69 6e 63 74 20 74 31 2e 63 29 20 66 72 6f 6d 20  inct t1.c) from 
27f60 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
27f70 20 2d 63 61 73 65 20 61 62 73 28 61 62 73 28 63   -case abs(abs(c
27f80 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31 33  ount(distinct 13
27f90 29 29 29 20 77 68 65 6e 20 6d 61 78 28 74 31 2e  ))) when max(t1.
27fa0 62 29 20 74 68 65 6e 20 61 62 73 28 63 61 73 74  b) then abs(cast
27fb0 28 61 76 67 28 31 31 29 20 41 53 20 69 6e 74 65  (avg(11) AS inte
27fc0 67 65 72 29 29 20 65 6c 73 65 20 20 2d 63 61 73  ger)) else  -cas
27fd0 74 28 61 76 67 28 31 37 29 20 41 53 20 69 6e 74  t(avg(17) AS int
27fe0 65 67 65 72 29 20 65 6e 64 20 66 72 6f 6d 20 74  eger) end from t
27ff0 31 29 29 2c 63 61 73 65 20 74 31 2e 66 20 77 68  1)),case t1.f wh
28000 65 6e 20 20 2d 62 20 74 68 65 6e 20 31 37 20 65  en  -b then 17 e
28010 6c 73 65 20 31 37 20 65 6e 64 29 2d 20 2d 74 31  lse 17 end)- -t1
28020 2e 66 2c 62 29 29 2c 61 29 2b 66 2b 63 2d 74 31  .f,b)),a)+f+c-t1
28030 2e 63 3c 74 31 2e 62 29 7d 0a 7d 20 7b 2d 34 35  .c<t1.b)}.} {-45
28040 32 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  2}.do_test rande
28050 78 70 72 2d 32 2e 32 31 39 20 7b 0a 20 20 64 62  xpr-2.219 {.  db
28060 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 73   eval {SELECT (s
28070 65 6c 65 63 74 20 2b 20 2d 6d 61 78 28 74 31 2e  elect + -max(t1.
28080 63 29 2a 61 62 73 28 6d 69 6e 28 74 31 2e 62 29  c)*abs(min(t1.b)
28090 20 7c 20 63 61 73 65 20 28 61 62 73 28 6d 69 6e   | case (abs(min
280a0 28 31 33 29 29 29 2b 63 6f 75 6e 74 28 2a 29 2d  (13)))+count(*)-
280b0 6d 61 78 28 74 31 2e 61 29 20 77 68 65 6e 20 6d  max(t1.a) when m
280c0 61 78 28 7e 31 33 29 20 74 68 65 6e 20 61 62 73  ax(~13) then abs
280d0 28 20 2d 7e 6d 69 6e 28 74 31 2e 62 29 2b 61 62  ( -~min(t1.b)+ab
280e0 73 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  s(count(distinct
280f0 20 28 73 65 6c 65 63 74 20 2b 2b 2b 63 61 73 74   (select +++cast
28100 28 61 76 67 28 74 31 2e 62 29 20 41 53 20 69 6e  (avg(t1.b) AS in
28110 74 65 67 65 72 29 2d 63 61 73 65 20 20 2d 63 6f  teger)-case  -co
28120 75 6e 74 28 2a 29 20 77 68 65 6e 20 20 2d 63 6f  unt(*) when  -co
28130 75 6e 74 28 2a 29 20 74 68 65 6e 20 20 2d 63 6f  unt(*) then  -co
28140 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62 29 20  unt(distinct b) 
28150 65 6c 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69  else count(disti
28160 6e 63 74 20 63 29 20 65 6e 64 20 66 72 6f 6d 20  nct c) end from 
28170 74 31 29 29 29 29 20 65 6c 73 65 20 63 6f 75 6e  t1)))) else coun
28180 74 28 2a 29 20 65 6e 64 2d 6d 61 78 28 28 65 29  t(*) end-max((e)
28190 29 29 20 7c 20 20 2d 63 61 73 74 28 61 76 67 28  )) |  -cast(avg(
281a0 74 31 2e 65 29 20 41 53 20 69 6e 74 65 67 65 72  t1.e) AS integer
281b0 29 20 66 72 6f 6d 20 74 31 29 20 46 52 4f 4d 20  ) from t1) FROM 
281c0 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 65 78  t1 WHERE NOT (ex
281d0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
281e0 6f 6d 20 74 31 20 77 68 65 72 65 20 20 2d 66 2d  om t1 where  -f-
281f0 64 2a 74 31 2e 66 2d 63 2d 63 6f 61 6c 65 73 63  d*t1.f-c-coalesc
28200 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31  e((select max(t1
28210 2e 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .a) from t1 wher
28220 65 20 31 31 20 6e 6f 74 20 69 6e 20 28 28 73 65  e 11 not in ((se
28230 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72  lect count(*) fr
28240 6f 6d 20 74 31 29 2c 63 6f 61 6c 65 73 63 65 28  om t1),coalesce(
28250 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 66  (select max(t1.f
28260 2b 65 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  +e) from t1 wher
28270 65 20 74 31 2e 62 20 69 6e 20 28 73 65 6c 65 63  e t1.b in (selec
28280 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  t count(distinct
28290 20 74 31 2e 63 29 20 66 72 6f 6d 20 74 31 20 75   t1.c) from t1 u
282a0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20 2d 63 61  nion select  -ca
282b0 73 65 20 61 62 73 28 61 62 73 28 63 6f 75 6e 74  se abs(abs(count
282c0 28 64 69 73 74 69 6e 63 74 20 31 33 29 29 29 20  (distinct 13))) 
282d0 77 68 65 6e 20 6d 61 78 28 74 31 2e 62 29 20 74  when max(t1.b) t
282e0 68 65 6e 20 61 62 73 28 63 61 73 74 28 61 76 67  hen abs(cast(avg
282f0 28 31 31 29 20 41 53 20 69 6e 74 65 67 65 72 29  (11) AS integer)
28300 29 20 65 6c 73 65 20 20 2d 63 61 73 74 28 61 76  ) else  -cast(av
28310 67 28 31 37 29 20 41 53 20 69 6e 74 65 67 65 72  g(17) AS integer
28320 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 29 2c  ) end from t1)),
28330 63 61 73 65 20 74 31 2e 66 20 77 68 65 6e 20 20  case t1.f when  
28340 2d 62 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20  -b then 17 else 
28350 31 37 20 65 6e 64 29 2d 20 2d 74 31 2e 66 2c 62  17 end)- -t1.f,b
28360 29 29 2c 61 29 2b 66 2b 63 2d 74 31 2e 63 3c 74  )),a)+f+c-t1.c<t
28370 31 2e 62 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  1.b))}.} {}.do_t
28380 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
28390 32 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  20 {.  db eval {
283a0 53 45 4c 45 43 54 20 28 73 65 6c 65 63 74 20 2b  SELECT (select +
283b0 20 2d 6d 61 78 28 74 31 2e 63 29 2a 61 62 73 28   -max(t1.c)*abs(
283c0 6d 69 6e 28 74 31 2e 62 29 20 26 20 63 61 73 65  min(t1.b) & case
283d0 20 28 61 62 73 28 6d 69 6e 28 31 33 29 29 29 2b   (abs(min(13)))+
283e0 63 6f 75 6e 74 28 2a 29 2d 6d 61 78 28 74 31 2e  count(*)-max(t1.
283f0 61 29 20 77 68 65 6e 20 6d 61 78 28 7e 31 33 29  a) when max(~13)
28400 20 74 68 65 6e 20 61 62 73 28 20 2d 7e 6d 69 6e   then abs( -~min
28410 28 74 31 2e 62 29 2b 61 62 73 28 63 6f 75 6e 74  (t1.b)+abs(count
28420 28 64 69 73 74 69 6e 63 74 20 28 73 65 6c 65 63  (distinct (selec
28430 74 20 2b 2b 2b 63 61 73 74 28 61 76 67 28 74 31  t +++cast(avg(t1
28440 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d  .b) AS integer)-
28450 63 61 73 65 20 20 2d 63 6f 75 6e 74 28 2a 29 20  case  -count(*) 
28460 77 68 65 6e 20 20 2d 63 6f 75 6e 74 28 2a 29 20  when  -count(*) 
28470 74 68 65 6e 20 20 2d 63 6f 75 6e 74 28 64 69 73  then  -count(dis
28480 74 69 6e 63 74 20 62 29 20 65 6c 73 65 20 63 6f  tinct b) else co
28490 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29 20  unt(distinct c) 
284a0 65 6e 64 20 66 72 6f 6d 20 74 31 29 29 29 29 20  end from t1)))) 
284b0 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e  else count(*) en
284c0 64 2d 6d 61 78 28 28 65 29 29 29 20 26 20 20 2d  d-max((e))) &  -
284d0 63 61 73 74 28 61 76 67 28 74 31 2e 65 29 20 41  cast(avg(t1.e) A
284e0 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
284f0 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  t1) FROM t1 WHER
28500 45 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  E exists(select 
28510 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
28520 20 2d 66 2d 64 2a 74 31 2e 66 2d 63 2d 63 6f 61   -f-d*t1.f-c-coa
28530 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
28540 78 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 20  x(t1.a) from t1 
28550 77 68 65 72 65 20 31 31 20 6e 6f 74 20 69 6e 20  where 11 not in 
28560 28 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a  ((select count(*
28570 29 20 66 72 6f 6d 20 74 31 29 2c 63 6f 61 6c 65  ) from t1),coale
28580 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
28590 74 31 2e 66 2b 65 29 20 66 72 6f 6d 20 74 31 20  t1.f+e) from t1 
285a0 77 68 65 72 65 20 74 31 2e 62 20 69 6e 20 28 73  where t1.b in (s
285b0 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
285c0 69 6e 63 74 20 74 31 2e 63 29 20 66 72 6f 6d 20  inct t1.c) from 
285d0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
285e0 20 2d 63 61 73 65 20 61 62 73 28 61 62 73 28 63   -case abs(abs(c
285f0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31 33  ount(distinct 13
28600 29 29 29 20 77 68 65 6e 20 6d 61 78 28 74 31 2e  ))) when max(t1.
28610 62 29 20 74 68 65 6e 20 61 62 73 28 63 61 73 74  b) then abs(cast
28620 28 61 76 67 28 31 31 29 20 41 53 20 69 6e 74 65  (avg(11) AS inte
28630 67 65 72 29 29 20 65 6c 73 65 20 20 2d 63 61 73  ger)) else  -cas
28640 74 28 61 76 67 28 31 37 29 20 41 53 20 69 6e 74  t(avg(17) AS int
28650 65 67 65 72 29 20 65 6e 64 20 66 72 6f 6d 20 74  eger) end from t
28660 31 29 29 2c 63 61 73 65 20 74 31 2e 66 20 77 68  1)),case t1.f wh
28670 65 6e 20 20 2d 62 20 74 68 65 6e 20 31 37 20 65  en  -b then 17 e
28680 6c 73 65 20 31 37 20 65 6e 64 29 2d 20 2d 74 31  lse 17 end)- -t1
28690 2e 66 2c 62 29 29 2c 61 29 2b 66 2b 63 2d 74 31  .f,b)),a)+f+c-t1
286a0 2e 63 3c 74 31 2e 62 29 7d 0a 7d 20 7b 2d 32 35  .c<t1.b)}.} {-25
286b0 36 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  60}.do_test rand
286c0 65 78 70 72 2d 32 2e 32 32 31 20 7b 0a 20 20 64  expr-2.221 {.  d
286d0 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 20  b eval {SELECT  
286e0 2d 2b 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  -+(select count(
286f0 64 69 73 74 69 6e 63 74 20 63 61 73 65 20 77 68  distinct case wh
28700 65 6e 20 28 63 61 73 65 20 7e 63 20 7c 20 63 6f  en (case ~c | co
28710 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
28720 61 78 28 74 31 2e 65 2d 66 2b 74 31 2e 64 29 20  ax(t1.e-f+t1.d) 
28730 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62 2d  from t1 where b-
28740 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
28750 20 6d 61 78 28 62 29 20 66 72 6f 6d 20 74 31 20   max(b) from t1 
28760 77 68 65 72 65 20 74 31 2e 63 20 69 6e 20 28 73  where t1.c in (s
28770 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 64 29 20  elect max(t1.d) 
28780 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
28790 6c 65 63 74 20 6d 69 6e 28 61 29 20 66 72 6f 6d  lect min(a) from
287a0 20 74 31 29 29 2c 74 31 2e 66 29 20 69 6e 20 28   t1)),t1.f) in (
287b0 73 65 6c 65 63 74 20 74 31 2e 61 20 66 72 6f 6d  select t1.a from
287c0 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
287d0 20 65 20 66 72 6f 6d 20 74 31 29 29 2c 63 29 20   e from t1)),c) 
287e0 77 68 65 6e 20 65 20 74 68 65 6e 20 20 2d 63 20  when e then  -c 
287f0 65 6c 73 65 20 20 2d 74 31 2e 62 20 65 6e 64 20  else  -t1.b end 
28800 69 6e 20 28 20 2d 31 39 2c 20 2d 64 2c 62 29 29  in ( -19, -d,b))
28810 20 74 68 65 6e 20 64 20 77 68 65 6e 20 74 31 2e   then d when t1.
28820 65 20 69 6e 20 28 31 39 2c 64 2c 31 39 29 20 61  e in (19,d,19) a
28830 6e 64 20 28 74 31 2e 62 20 62 65 74 77 65 65 6e  nd (t1.b between
28840 20 63 20 61 6e 64 20 74 31 2e 61 29 20 74 68 65   c and t1.a) the
28850 6e 20 74 31 2e 64 20 65 6c 73 65 20 31 37 20 65  n t1.d else 17 e
28860 6e 64 2d 64 29 20 66 72 6f 6d 20 74 31 29 20 46  nd-d) from t1) F
28870 52 4f 4d 20 74 31 20 57 48 45 52 45 20 66 3c 3d  ROM t1 WHERE f<=
28880 20 2d 62 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73   -b}.} {}.do_tes
28890 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 32 32  t randexpr-2.222
288a0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
288b0 4c 45 43 54 20 20 2d 2b 28 73 65 6c 65 63 74 20  LECT  -+(select 
288c0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63  count(distinct c
288d0 61 73 65 20 77 68 65 6e 20 28 63 61 73 65 20 7e  ase when (case ~
288e0 63 20 7c 20 63 6f 61 6c 65 73 63 65 28 28 73 65  c | coalesce((se
288f0 6c 65 63 74 20 6d 61 78 28 74 31 2e 65 2d 66 2b  lect max(t1.e-f+
28900 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.d) from t1 wh
28910 65 72 65 20 62 2d 63 6f 61 6c 65 73 63 65 28 28  ere b-coalesce((
28920 73 65 6c 65 63 74 20 6d 61 78 28 62 29 20 66 72  select max(b) fr
28930 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 63  om t1 where t1.c
28940 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 61 78 28   in (select max(
28950 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.d) from t1 un
28960 69 6f 6e 20 73 65 6c 65 63 74 20 6d 69 6e 28 61  ion select min(a
28970 29 20 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 66  ) from t1)),t1.f
28980 29 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e  ) in (select t1.
28990 61 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  a from t1 union 
289a0 73 65 6c 65 63 74 20 65 20 66 72 6f 6d 20 74 31  select e from t1
289b0 29 29 2c 63 29 20 77 68 65 6e 20 65 20 74 68 65  )),c) when e the
289c0 6e 20 20 2d 63 20 65 6c 73 65 20 20 2d 74 31 2e  n  -c else  -t1.
289d0 62 20 65 6e 64 20 69 6e 20 28 20 2d 31 39 2c 20  b end in ( -19, 
289e0 2d 64 2c 62 29 29 20 74 68 65 6e 20 64 20 77 68  -d,b)) then d wh
289f0 65 6e 20 74 31 2e 65 20 69 6e 20 28 31 39 2c 64  en t1.e in (19,d
28a00 2c 31 39 29 20 61 6e 64 20 28 74 31 2e 62 20 62  ,19) and (t1.b b
28a10 65 74 77 65 65 6e 20 63 20 61 6e 64 20 74 31 2e  etween c and t1.
28a20 61 29 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73  a) then t1.d els
28a30 65 20 31 37 20 65 6e 64 2d 64 29 20 66 72 6f 6d  e 17 end-d) from
28a40 20 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45   t1) FROM t1 WHE
28a50 52 45 20 4e 4f 54 20 28 66 3c 3d 20 2d 62 29 7d  RE NOT (f<= -b)}
28a60 0a 7d 20 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20  .} {-1}.do_test 
28a70 72 61 6e 64 65 78 70 72 2d 32 2e 32 32 33 20 7b  randexpr-2.223 {
28a80 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
28a90 43 54 20 20 2d 2b 28 73 65 6c 65 63 74 20 63 6f  CT  -+(select co
28aa0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 61 73  unt(distinct cas
28ab0 65 20 77 68 65 6e 20 28 63 61 73 65 20 7e 63 20  e when (case ~c 
28ac0 26 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  & coalesce((sele
28ad0 63 74 20 6d 61 78 28 74 31 2e 65 2d 66 2b 74 31  ct max(t1.e-f+t1
28ae0 2e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .d) from t1 wher
28af0 65 20 62 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  e b-coalesce((se
28b00 6c 65 63 74 20 6d 61 78 28 62 29 20 66 72 6f 6d  lect max(b) from
28b10 20 74 31 20 77 68 65 72 65 20 74 31 2e 63 20 69   t1 where t1.c i
28b20 6e 20 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31  n (select max(t1
28b30 2e 64 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  .d) from t1 unio
28b40 6e 20 73 65 6c 65 63 74 20 6d 69 6e 28 61 29 20  n select min(a) 
28b50 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 66 29 20  from t1)),t1.f) 
28b60 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 61 20  in (select t1.a 
28b70 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
28b80 6c 65 63 74 20 65 20 66 72 6f 6d 20 74 31 29 29  lect e from t1))
28b90 2c 63 29 20 77 68 65 6e 20 65 20 74 68 65 6e 20  ,c) when e then 
28ba0 20 2d 63 20 65 6c 73 65 20 20 2d 74 31 2e 62 20   -c else  -t1.b 
28bb0 65 6e 64 20 69 6e 20 28 20 2d 31 39 2c 20 2d 64  end in ( -19, -d
28bc0 2c 62 29 29 20 74 68 65 6e 20 64 20 77 68 65 6e  ,b)) then d when
28bd0 20 74 31 2e 65 20 69 6e 20 28 31 39 2c 64 2c 31   t1.e in (19,d,1
28be0 39 29 20 61 6e 64 20 28 74 31 2e 62 20 62 65 74  9) and (t1.b bet
28bf0 77 65 65 6e 20 63 20 61 6e 64 20 74 31 2e 61 29  ween c and t1.a)
28c00 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65 20   then t1.d else 
28c10 31 37 20 65 6e 64 2d 64 29 20 66 72 6f 6d 20 74  17 end-d) from t
28c20 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  1) FROM t1 WHERE
28c30 20 4e 4f 54 20 28 66 3c 3d 20 2d 62 29 7d 0a 7d   NOT (f<= -b)}.}
28c40 20 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20 72 61   {-1}.do_test ra
28c50 6e 64 65 78 70 72 2d 32 2e 32 32 34 20 7b 0a 20  ndexpr-2.224 {. 
28c60 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
28c70 20 28 61 62 73 28 7e 28 2b 74 31 2e 62 29 29 2f   (abs(~(+t1.b))/
28c80 61 62 73 28 7e 63 6f 61 6c 65 73 63 65 28 28 73  abs(~coalesce((s
28c90 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29 20  elect max(t1.a) 
28ca0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
28cb0 2e 66 3c 2b 63 61 73 65 20 77 68 65 6e 20 6e 6f  .f<+case when no
28cc0 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
28cd0 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
28ce0 6e 6f 74 20 63 2b 31 31 3d 63 61 73 65 20 63 20  not c+11=case c 
28cf0 77 68 65 6e 20 74 31 2e 65 20 74 68 65 6e 20 31  when t1.e then 1
28d00 33 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 2b  3 else t1.f end+
28d10 74 31 2e 65 29 20 61 6e 64 20 74 31 2e 66 20 69  t1.e) and t1.f i
28d20 6e 20 28 73 65 6c 65 63 74 20 31 31 20 66 72 6f  n (select 11 fro
28d30 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
28d40 74 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 29 20  t t1.d from t1) 
28d50 61 6e 64 20 63 20 6e 6f 74 20 69 6e 20 28 74 31  and c not in (t1
28d60 2e 66 2c 31 37 2c 61 29 20 74 68 65 6e 20 63 61  .f,17,a) then ca
28d70 73 65 20 77 68 65 6e 20 61 3d 31 37 20 6f 72 20  se when a=17 or 
28d80 74 31 2e 63 20 62 65 74 77 65 65 6e 20 74 31 2e  t1.c between t1.
28d90 65 20 61 6e 64 20 31 39 20 6f 72 20 74 31 2e 61  e and 19 or t1.a
28da0 3c 3e 65 20 74 68 65 6e 20 31 39 20 65 6c 73 65  <>e then 19 else
28db0 20 74 31 2e 63 2d 74 31 2e 64 20 65 6e 64 20 65   t1.c-t1.d end e
28dc0 6c 73 65 20 62 20 65 6e 64 29 2c 28 65 29 29 2d  lse b end),(e))-
28dd0 74 31 2e 61 2b 28 31 33 29 2d 31 39 29 29 20 46  t1.a+(13)-19)) F
28de0 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28 6e 6f  ROM t1 WHERE (no
28df0 74 20 74 31 2e 65 20 6e 6f 74 20 69 6e 20 28 63  t t1.e not in (c
28e00 61 73 65 20 77 68 65 6e 20 65 78 69 73 74 73 28  ase when exists(
28e10 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
28e20 20 77 68 65 72 65 20 31 37 3c 3d 74 31 2e 66 2a   where 17<=t1.f*
28e30 31 37 2a 74 31 2e 62 29 20 74 68 65 6e 20 66 2b  17*t1.b) then f+
28e40 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
28e50 20 6d 61 78 28 74 31 2e 62 2d 63 2d 31 31 2b 74   max(t1.b-c-11+t
28e60 31 2e 63 2d 61 29 20 66 72 6f 6d 20 74 31 20 77  1.c-a) from t1 w
28e70 68 65 72 65 20 31 33 20 69 6e 20 28 73 65 6c 65  here 13 in (sele
28e80 63 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 20  ct t1.e from t1 
28e90 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61 73  union select cas
28ea0 65 20 77 68 65 6e 20 61 20 6e 6f 74 20 62 65 74  e when a not bet
28eb0 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 64 20  ween t1.f and d 
28ec0 6f 72 20 66 3c 74 31 2e 66 20 74 68 65 6e 20 64  or f<t1.f then d
28ed0 20 77 68 65 6e 20 74 31 2e 66 3c 3d 65 20 74 68   when t1.f<=e th
28ee0 65 6e 20 64 20 65 6c 73 65 20 65 20 65 6e 64 2b  en d else e end+
28ef0 31 37 2d 20 2d 31 37 20 66 72 6f 6d 20 74 31 29  17- -17 from t1)
28f00 29 2c 74 31 2e 63 29 20 65 6c 73 65 20 74 31 2e  ),t1.c) else t1.
28f10 66 20 65 6e 64 2c 65 2c 74 31 2e 61 29 20 6f 72  f end,e,t1.a) or
28f20 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
28f30 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
28f40 31 2e 61 20 6e 6f 74 20 69 6e 20 28 74 31 2e 63  1.a not in (t1.c
28f50 2c 28 74 31 2e 64 29 2c 28 74 31 2e 63 29 29 29  ,(t1.d),(t1.c)))
28f60 29 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74  )}.} {0}.do_test
28f70 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 32 35 20   randexpr-2.225 
28f80 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
28f90 45 43 54 20 28 61 62 73 28 7e 28 2b 74 31 2e 62  ECT (abs(~(+t1.b
28fa0 29 29 2f 61 62 73 28 7e 63 6f 61 6c 65 73 63 65  ))/abs(~coalesce
28fb0 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
28fc0 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  a) from t1 where
28fd0 20 74 31 2e 66 3c 2b 63 61 73 65 20 77 68 65 6e   t1.f<+case when
28fe0 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
28ff0 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
29000 72 65 20 6e 6f 74 20 63 2b 31 31 3d 63 61 73 65  re not c+11=case
29010 20 63 20 77 68 65 6e 20 74 31 2e 65 20 74 68 65   c when t1.e the
29020 6e 20 31 33 20 65 6c 73 65 20 74 31 2e 66 20 65  n 13 else t1.f e
29030 6e 64 2b 74 31 2e 65 29 20 61 6e 64 20 74 31 2e  nd+t1.e) and t1.
29040 66 20 69 6e 20 28 73 65 6c 65 63 74 20 31 31 20  f in (select 11 
29050 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
29060 6c 65 63 74 20 74 31 2e 64 20 66 72 6f 6d 20 74  lect t1.d from t
29070 31 29 20 61 6e 64 20 63 20 6e 6f 74 20 69 6e 20  1) and c not in 
29080 28 74 31 2e 66 2c 31 37 2c 61 29 20 74 68 65 6e  (t1.f,17,a) then
29090 20 63 61 73 65 20 77 68 65 6e 20 61 3d 31 37 20   case when a=17 
290a0 6f 72 20 74 31 2e 63 20 62 65 74 77 65 65 6e 20  or t1.c between 
290b0 74 31 2e 65 20 61 6e 64 20 31 39 20 6f 72 20 74  t1.e and 19 or t
290c0 31 2e 61 3c 3e 65 20 74 68 65 6e 20 31 39 20 65  1.a<>e then 19 e
290d0 6c 73 65 20 74 31 2e 63 2d 74 31 2e 64 20 65 6e  lse t1.c-t1.d en
290e0 64 20 65 6c 73 65 20 62 20 65 6e 64 29 2c 28 65  d else b end),(e
290f0 29 29 2d 74 31 2e 61 2b 28 31 33 29 2d 31 39 29  ))-t1.a+(13)-19)
29100 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
29110 4e 4f 54 20 28 28 6e 6f 74 20 74 31 2e 65 20 6e  NOT ((not t1.e n
29120 6f 74 20 69 6e 20 28 63 61 73 65 20 77 68 65 6e  ot in (case when
29130 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
29140 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
29150 37 3c 3d 74 31 2e 66 2a 31 37 2a 74 31 2e 62 29  7<=t1.f*17*t1.b)
29160 20 74 68 65 6e 20 66 2b 63 6f 61 6c 65 73 63 65   then f+coalesce
29170 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
29180 62 2d 63 2d 31 31 2b 74 31 2e 63 2d 61 29 20 66  b-c-11+t1.c-a) f
29190 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 33 20  rom t1 where 13 
291a0 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 65 20  in (select t1.e 
291b0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
291c0 6c 65 63 74 20 63 61 73 65 20 77 68 65 6e 20 61  lect case when a
291d0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e   not between t1.
291e0 66 20 61 6e 64 20 64 20 6f 72 20 66 3c 74 31 2e  f and d or f<t1.
291f0 66 20 74 68 65 6e 20 64 20 77 68 65 6e 20 74 31  f then d when t1
29200 2e 66 3c 3d 65 20 74 68 65 6e 20 64 20 65 6c 73  .f<=e then d els
29210 65 20 65 20 65 6e 64 2b 31 37 2d 20 2d 31 37 20  e e end+17- -17 
29220 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 63 29 20  from t1)),t1.c) 
29230 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 2c 65 2c  else t1.f end,e,
29240 74 31 2e 61 29 20 6f 72 20 65 78 69 73 74 73 28  t1.a) or exists(
29250 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
29260 20 77 68 65 72 65 20 74 31 2e 61 20 6e 6f 74 20   where t1.a not 
29270 69 6e 20 28 74 31 2e 63 2c 28 74 31 2e 64 29 2c  in (t1.c,(t1.d),
29280 28 74 31 2e 63 29 29 29 29 29 7d 0a 7d 20 7b 7d  (t1.c)))))}.} {}
29290 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
292a0 72 2d 32 2e 32 32 36 20 7b 0a 20 20 64 62 20 65  r-2.226 {.  db e
292b0 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 73 65 6c  val {SELECT (sel
292c0 65 63 74 20 6d 69 6e 28 62 29 20 7c 20 63 61 73  ect min(b) | cas
292d0 65 20 63 61 73 65 20 63 61 73 74 28 61 76 67 28  e case cast(avg(
292e0 63 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 77  c) AS integer) w
292f0 68 65 6e 20 7e 2b 7e 63 6f 75 6e 74 28 64 69 73  hen ~+~count(dis
29300 74 69 6e 63 74 20 20 2d 31 39 2a 66 2a 66 29 20  tinct  -19*f*f) 
29310 74 68 65 6e 20 63 6f 75 6e 74 28 64 69 73 74 69  then count(disti
29320 6e 63 74 20 28 73 65 6c 65 63 74 20 63 61 73 74  nct (select cast
29330 28 61 76 67 28 64 2d 63 61 73 65 20 77 68 65 6e  (avg(d-case when
29340 20 74 31 2e 61 3c 3d 31 39 20 74 68 65 6e 20 31   t1.a<=19 then 1
29350 39 20 65 6c 73 65 20 31 31 20 65 6e 64 2b 66 2b  9 else 11 end+f+
29360 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  a) AS integer) f
29370 72 6f 6d 20 74 31 29 29 2b 63 6f 75 6e 74 28 64  rom t1))+count(d
29380 69 73 74 69 6e 63 74 20 74 31 2e 63 29 2b 20 2d  istinct t1.c)+ -
29390 2b 20 2d 63 6f 75 6e 74 28 2a 29 20 7c 20 20 2d  + -count(*) |  -
293a0 20 2d 6d 61 78 28 28 31 37 29 29 2a 6d 69 6e 28   -max((17))*min(
293b0 74 31 2e 62 29 2a 6d 69 6e 28 28 65 29 29 20 65  t1.b)*min((e)) e
293c0 6c 73 65 20 6d 61 78 28 74 31 2e 63 29 20 65 6e  lse max(t1.c) en
293d0 64 20 77 68 65 6e 20 28 20 2d 20 2d 20 2d 6d 69  d when ( - - -mi
293e0 6e 28 61 29 29 20 74 68 65 6e 20 28 20 2d 6d 69  n(a)) then ( -mi
293f0 6e 28 63 29 29 20 65 6c 73 65 20 6d 61 78 28 28  n(c)) else max((
29400 31 31 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31  11)) end from t1
29410 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
29420 63 61 73 65 20 77 68 65 6e 20 28 28 28 65 78 69  case when (((exi
29430 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
29440 6d 20 74 31 20 77 68 65 72 65 20 7e 74 31 2e 64  m t1 where ~t1.d
29450 2d 74 31 2e 66 20 62 65 74 77 65 65 6e 20 20 2d  -t1.f between  -
29460 2b 74 31 2e 66 2a 63 20 61 6e 64 20 66 20 61 6e  +t1.f*c and f an
29470 64 20 6e 6f 74 20 74 31 2e 65 20 69 6e 20 28 31  d not t1.e in (1
29480 39 2c 61 2c 31 33 29 29 29 20 6f 72 20 20 2d 65  9,a,13))) or  -e
29490 3e 3d 74 31 2e 62 29 20 61 6e 64 20 28 74 31 2e  >=t1.b) and (t1.
294a0 65 3c 3e 28 20 2d 74 31 2e 64 29 29 20 61 6e 64  e<>( -t1.d)) and
294b0 20 28 74 31 2e 63 3c 3d 31 33 29 29 20 74 68 65   (t1.c<=13)) the
294c0 6e 20 63 20 65 6c 73 65 20 64 2b 31 31 20 65 6e  n c else d+11 en
294d0 64 3c 3d 63 61 73 65 20 77 68 65 6e 20 28 74 31  d<=case when (t1
294e0 2e 63 29 3e 3d 31 39 20 74 68 65 6e 20 28 74 31  .c)>=19 then (t1
294f0 2e 65 29 20 77 68 65 6e 20 28 66 29 20 6e 6f 74  .e) when (f) not
29500 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20   between 11 and 
29510 66 20 74 68 65 6e 20 63 6f 61 6c 65 73 63 65 28  f then coalesce(
29520 28 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20  (select 13 from 
29530 74 31 20 77 68 65 72 65 20 20 2d 74 31 2e 62 3e  t1 where  -t1.b>
29540 3d 64 29 2c 31 33 29 20 65 6c 73 65 20 62 20 65  =d),13) else b e
29550 6e 64 7d 0a 7d 20 7b 32 30 33 7d 0a 64 6f 5f 74  nd}.} {203}.do_t
29560 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
29570 32 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  27 {.  db eval {
29580 53 45 4c 45 43 54 20 28 73 65 6c 65 63 74 20 6d  SELECT (select m
29590 69 6e 28 62 29 20 7c 20 63 61 73 65 20 63 61 73  in(b) | case cas
295a0 65 20 63 61 73 74 28 61 76 67 28 63 29 20 41 53  e cast(avg(c) AS
295b0 20 69 6e 74 65 67 65 72 29 20 77 68 65 6e 20 7e   integer) when ~
295c0 2b 7e 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  +~count(distinct
295d0 20 20 2d 31 39 2a 66 2a 66 29 20 74 68 65 6e 20    -19*f*f) then 
295e0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 28  count(distinct (
295f0 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
29600 64 2d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61  d-case when t1.a
29610 3c 3d 31 39 20 74 68 65 6e 20 31 39 20 65 6c 73  <=19 then 19 els
29620 65 20 31 31 20 65 6e 64 2b 66 2b 61 29 20 41 53  e 11 end+f+a) AS
29630 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74   integer) from t
29640 31 29 29 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e  1))+count(distin
29650 63 74 20 74 31 2e 63 29 2b 20 2d 2b 20 2d 63 6f  ct t1.c)+ -+ -co
29660 75 6e 74 28 2a 29 20 7c 20 20 2d 20 2d 6d 61 78  unt(*) |  - -max
29670 28 28 31 37 29 29 2a 6d 69 6e 28 74 31 2e 62 29  ((17))*min(t1.b)
29680 2a 6d 69 6e 28 28 65 29 29 20 65 6c 73 65 20 6d  *min((e)) else m
29690 61 78 28 74 31 2e 63 29 20 65 6e 64 20 77 68 65  ax(t1.c) end whe
296a0 6e 20 28 20 2d 20 2d 20 2d 6d 69 6e 28 61 29 29  n ( - - -min(a))
296b0 20 74 68 65 6e 20 28 20 2d 6d 69 6e 28 63 29 29   then ( -min(c))
296c0 20 65 6c 73 65 20 6d 61 78 28 28 31 31 29 29 20   else max((11)) 
296d0 65 6e 64 20 66 72 6f 6d 20 74 31 29 20 46 52 4f  end from t1) FRO
296e0 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
296f0 63 61 73 65 20 77 68 65 6e 20 28 28 28 65 78 69  case when (((exi
29700 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
29710 6d 20 74 31 20 77 68 65 72 65 20 7e 74 31 2e 64  m t1 where ~t1.d
29720 2d 74 31 2e 66 20 62 65 74 77 65 65 6e 20 20 2d  -t1.f between  -
29730 2b 74 31 2e 66 2a 63 20 61 6e 64 20 66 20 61 6e  +t1.f*c and f an
29740 64 20 6e 6f 74 20 74 31 2e 65 20 69 6e 20 28 31  d not t1.e in (1
29750 39 2c 61 2c 31 33 29 29 29 20 6f 72 20 20 2d 65  9,a,13))) or  -e
29760 3e 3d 74 31 2e 62 29 20 61 6e 64 20 28 74 31 2e  >=t1.b) and (t1.
29770 65 3c 3e 28 20 2d 74 31 2e 64 29 29 20 61 6e 64  e<>( -t1.d)) and
29780 20 28 74 31 2e 63 3c 3d 31 33 29 29 20 74 68 65   (t1.c<=13)) the
29790 6e 20 63 20 65 6c 73 65 20 64 2b 31 31 20 65 6e  n c else d+11 en
297a0 64 3c 3d 63 61 73 65 20 77 68 65 6e 20 28 74 31  d<=case when (t1
297b0 2e 63 29 3e 3d 31 39 20 74 68 65 6e 20 28 74 31  .c)>=19 then (t1
297c0 2e 65 29 20 77 68 65 6e 20 28 66 29 20 6e 6f 74  .e) when (f) not
297d0 20 62 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20   between 11 and 
297e0 66 20 74 68 65 6e 20 63 6f 61 6c 65 73 63 65 28  f then coalesce(
297f0 28 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20  (select 13 from 
29800 74 31 20 77 68 65 72 65 20 20 2d 74 31 2e 62 3e  t1 where  -t1.b>
29810 3d 64 29 2c 31 33 29 20 65 6c 73 65 20 62 20 65  =d),13) else b e
29820 6e 64 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  nd)}.} {}.do_tes
29830 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 32 38  t randexpr-2.228
29840 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
29850 4c 45 43 54 20 28 73 65 6c 65 63 74 20 6d 69 6e  LECT (select min
29860 28 62 29 20 26 20 63 61 73 65 20 63 61 73 65 20  (b) & case case 
29870 63 61 73 74 28 61 76 67 28 63 29 20 41 53 20 69  cast(avg(c) AS i
29880 6e 74 65 67 65 72 29 20 77 68 65 6e 20 7e 2b 7e  nteger) when ~+~
29890 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 20  count(distinct  
298a0 2d 31 39 2a 66 2a 66 29 20 74 68 65 6e 20 63 6f  -19*f*f) then co
298b0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 28 73 65  unt(distinct (se
298c0 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 64 2d  lect cast(avg(d-
298d0 63 61 73 65 20 77 68 65 6e 20 74 31 2e 61 3c 3d  case when t1.a<=
298e0 31 39 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20  19 then 19 else 
298f0 31 31 20 65 6e 64 2b 66 2b 61 29 20 41 53 20 69  11 end+f+a) AS i
29900 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
29910 29 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  )+count(distinct
29920 20 74 31 2e 63 29 2b 20 2d 2b 20 2d 63 6f 75 6e   t1.c)+ -+ -coun
29930 74 28 2a 29 20 26 20 20 2d 20 2d 6d 61 78 28 28  t(*) &  - -max((
29940 31 37 29 29 2a 6d 69 6e 28 74 31 2e 62 29 2a 6d  17))*min(t1.b)*m
29950 69 6e 28 28 65 29 29 20 65 6c 73 65 20 6d 61 78  in((e)) else max
29960 28 74 31 2e 63 29 20 65 6e 64 20 77 68 65 6e 20  (t1.c) end when 
29970 28 20 2d 20 2d 20 2d 6d 69 6e 28 61 29 29 20 74  ( - - -min(a)) t
29980 68 65 6e 20 28 20 2d 6d 69 6e 28 63 29 29 20 65  hen ( -min(c)) e
29990 6c 73 65 20 6d 61 78 28 28 31 31 29 29 20 65 6e  lse max((11)) en
299a0 64 20 66 72 6f 6d 20 74 31 29 20 46 52 4f 4d 20  d from t1) FROM 
299b0 74 31 20 57 48 45 52 45 20 63 61 73 65 20 77 68  t1 WHERE case wh
299c0 65 6e 20 28 28 28 65 78 69 73 74 73 28 73 65 6c  en (((exists(sel
299d0 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
299e0 65 72 65 20 7e 74 31 2e 64 2d 74 31 2e 66 20 62  ere ~t1.d-t1.f b
299f0 65 74 77 65 65 6e 20 20 2d 2b 74 31 2e 66 2a 63  etween  -+t1.f*c
29a00 20 61 6e 64 20 66 20 61 6e 64 20 6e 6f 74 20 74   and f and not t
29a10 31 2e 65 20 69 6e 20 28 31 39 2c 61 2c 31 33 29  1.e in (19,a,13)
29a20 29 29 20 6f 72 20 20 2d 65 3e 3d 74 31 2e 62 29  )) or  -e>=t1.b)
29a30 20 61 6e 64 20 28 74 31 2e 65 3c 3e 28 20 2d 74   and (t1.e<>( -t
29a40 31 2e 64 29 29 20 61 6e 64 20 28 74 31 2e 63 3c  1.d)) and (t1.c<
29a50 3d 31 33 29 29 20 74 68 65 6e 20 63 20 65 6c 73  =13)) then c els
29a60 65 20 64 2b 31 31 20 65 6e 64 3c 3d 63 61 73 65  e d+11 end<=case
29a70 20 77 68 65 6e 20 28 74 31 2e 63 29 3e 3d 31 39   when (t1.c)>=19
29a80 20 74 68 65 6e 20 28 74 31 2e 65 29 20 77 68 65   then (t1.e) whe
29a90 6e 20 28 66 29 20 6e 6f 74 20 62 65 74 77 65 65  n (f) not betwee
29aa0 6e 20 31 31 20 61 6e 64 20 66 20 74 68 65 6e 20  n 11 and f then 
29ab0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
29ac0 20 31 33 20 66 72 6f 6d 20 74 31 20 77 68 65 72   13 from t1 wher
29ad0 65 20 20 2d 74 31 2e 62 3e 3d 64 29 2c 31 33 29  e  -t1.b>=d),13)
29ae0 20 65 6c 73 65 20 62 20 65 6e 64 7d 0a 7d 20 7b   else b end}.} {
29af0 38 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  8}.do_test rande
29b00 78 70 72 2d 32 2e 32 32 39 20 7b 0a 20 20 64 62  xpr-2.229 {.  db
29b10 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61   eval {SELECT ca
29b20 73 65 20 77 68 65 6e 20 31 39 2d 62 20 69 6e 20  se when 19-b in 
29b30 28 73 65 6c 65 63 74 20 28 6d 69 6e 28 63 61 73  (select (min(cas
29b40 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  e coalesce((sele
29b50 63 74 20 65 20 66 72 6f 6d 20 74 31 20 77 68 65  ct e from t1 whe
29b60 72 65 20 28 63 20 6e 6f 74 20 62 65 74 77 65 65  re (c not betwee
29b70 6e 20 63 20 61 6e 64 20 65 29 29 2c 28 73 65 6c  n c and e)),(sel
29b80 65 63 74 20 61 62 73 28 63 6f 75 6e 74 28 64 69  ect abs(count(di
29b90 73 74 69 6e 63 74 20 63 6f 61 6c 65 73 63 65 28  stinct coalesce(
29ba0 28 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 63 6f  (select max( -co
29bb0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
29bc0 61 78 28 31 37 29 20 66 72 6f 6d 20 74 31 20 77  ax(17) from t1 w
29bd0 68 65 72 65 20 28 64 29 3e 31 37 20 61 6e 64 20  here (d)>17 and 
29be0 63 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 64 20  c not between d 
29bf0 61 6e 64 20 62 29 2c 31 31 29 2d 64 29 20 66 72  and b),11)-d) fr
29c00 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28 31 31  om t1 where ((11
29c10 29 29 20 6e 6f 74 20 69 6e 20 28 64 2c 64 2c 65  )) not in (d,d,e
29c20 29 29 2c 20 2d 20 2d 65 29 29 29 20 66 72 6f 6d  )), - -e))) from
29c30 20 74 31 29 2b 74 31 2e 65 2b 74 31 2e 61 29 20   t1)+t1.e+t1.a) 
29c40 77 68 65 6e 20 66 20 74 68 65 6e 20 74 31 2e 65  when f then t1.e
29c50 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 29 29   else t1.a end))
29c60 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
29c70 65 6c 65 63 74 20 6d 61 78 28 31 31 29 20 66 72  elect max(11) fr
29c80 6f 6d 20 74 31 29 20 74 68 65 6e 20 63 20 65 6c  om t1) then c el
29c90 73 65 20 66 20 65 6e 64 2b 74 31 2e 65 20 46 52  se f end+t1.e FR
29ca0 4f 4d 20 74 31 20 57 48 45 52 45 20 63 6f 61 6c  OM t1 WHERE coal
29cb0 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
29cc0 28 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  (d) from t1 wher
29cd0 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  e coalesce((sele
29ce0 63 74 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e  ct max(case when
29cf0 20 28 61 2b 2b 31 39 3d 63 61 73 65 20 74 31 2e   (a++19=case t1.
29d00 64 20 77 68 65 6e 20 74 31 2e 65 20 74 68 65 6e  d when t1.e then
29d10 20 74 31 2e 62 20 65 6c 73 65 20 74 31 2e 61 20   t1.b else t1.a 
29d20 65 6e 64 2a 66 29 20 61 6e 64 20 20 2d 31 33 3d  end*f) and  -13=
29d30 61 20 74 68 65 6e 20 63 61 73 65 20 74 31 2e 64  a then case t1.d
29d40 2b 31 33 20 77 68 65 6e 20 74 31 2e 66 20 74 68  +13 when t1.f th
29d50 65 6e 20 31 37 20 65 6c 73 65 20 74 31 2e 66 20  en 17 else t1.f 
29d60 65 6e 64 20 77 68 65 6e 20 28 31 31 20 6e 6f 74  end when (11 not
29d70 20 69 6e 20 28 64 2c 31 37 2c 74 31 2e 66 29 29   in (d,17,t1.f))
29d80 20 74 68 65 6e 20 65 20 65 6c 73 65 20 31 31 20   then e else 11 
29d90 65 6e 64 2b 62 2a 74 31 2e 62 29 20 66 72 6f 6d  end+b*t1.b) from
29da0 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73   t1 where exists
29db0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
29dc0 31 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73  1 where exists(s
29dd0 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
29de0 77 68 65 72 65 20 74 31 2e 66 20 69 6e 20 28 73  where t1.f in (s
29df0 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f 6d 20  elect t1.e from 
29e00 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
29e10 62 20 66 72 6f 6d 20 74 31 29 29 29 29 2c 28 64  b from t1)))),(d
29e20 29 29 3c 3d 63 29 2c 61 29 20 62 65 74 77 65 65  ))<=c),a) betwee
29e30 6e 20 74 31 2e 66 20 61 6e 64 20 64 7d 0a 7d 20  n t1.f and d}.} 
29e40 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
29e50 78 70 72 2d 32 2e 32 33 30 20 7b 0a 20 20 64 62  xpr-2.230 {.  db
29e60 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61   eval {SELECT ca
29e70 73 65 20 77 68 65 6e 20 31 39 2d 62 20 69 6e 20  se when 19-b in 
29e80 28 73 65 6c 65 63 74 20 28 6d 69 6e 28 63 61 73  (select (min(cas
29e90 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  e coalesce((sele
29ea0 63 74 20 65 20 66 72 6f 6d 20 74 31 20 77 68 65  ct e from t1 whe
29eb0 72 65 20 28 63 20 6e 6f 74 20 62 65 74 77 65 65  re (c not betwee
29ec0 6e 20 63 20 61 6e 64 20 65 29 29 2c 28 73 65 6c  n c and e)),(sel
29ed0 65 63 74 20 61 62 73 28 63 6f 75 6e 74 28 64 69  ect abs(count(di
29ee0 73 74 69 6e 63 74 20 63 6f 61 6c 65 73 63 65 28  stinct coalesce(
29ef0 28 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 63 6f  (select max( -co
29f00 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
29f10 61 78 28 31 37 29 20 66 72 6f 6d 20 74 31 20 77  ax(17) from t1 w
29f20 68 65 72 65 20 28 64 29 3e 31 37 20 61 6e 64 20  here (d)>17 and 
29f30 63 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 64 20  c not between d 
29f40 61 6e 64 20 62 29 2c 31 31 29 2d 64 29 20 66 72  and b),11)-d) fr
29f50 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28 31 31  om t1 where ((11
29f60 29 29 20 6e 6f 74 20 69 6e 20 28 64 2c 64 2c 65  )) not in (d,d,e
29f70 29 29 2c 20 2d 20 2d 65 29 29 29 20 66 72 6f 6d  )), - -e))) from
29f80 20 74 31 29 2b 74 31 2e 65 2b 74 31 2e 61 29 20   t1)+t1.e+t1.a) 
29f90 77 68 65 6e 20 66 20 74 68 65 6e 20 74 31 2e 65  when f then t1.e
29fa0 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 29 29   else t1.a end))
29fb0 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
29fc0 65 6c 65 63 74 20 6d 61 78 28 31 31 29 20 66 72  elect max(11) fr
29fd0 6f 6d 20 74 31 29 20 74 68 65 6e 20 63 20 65 6c  om t1) then c el
29fe0 73 65 20 66 20 65 6e 64 2b 74 31 2e 65 20 46 52  se f end+t1.e FR
29ff0 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
2a000 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
2a010 74 20 6d 61 78 28 64 29 20 66 72 6f 6d 20 74 31  t max(d) from t1
2a020 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63 65 28   where coalesce(
2a030 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65  (select max(case
2a040 20 77 68 65 6e 20 28 61 2b 2b 31 39 3d 63 61 73   when (a++19=cas
2a050 65 20 74 31 2e 64 20 77 68 65 6e 20 74 31 2e 65  e t1.d when t1.e
2a060 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20   then t1.b else 
2a070 74 31 2e 61 20 65 6e 64 2a 66 29 20 61 6e 64 20  t1.a end*f) and 
2a080 20 2d 31 33 3d 61 20 74 68 65 6e 20 63 61 73 65   -13=a then case
2a090 20 74 31 2e 64 2b 31 33 20 77 68 65 6e 20 74 31   t1.d+13 when t1
2a0a0 2e 66 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20  .f then 17 else 
2a0b0 74 31 2e 66 20 65 6e 64 20 77 68 65 6e 20 28 31  t1.f end when (1
2a0c0 31 20 6e 6f 74 20 69 6e 20 28 64 2c 31 37 2c 74  1 not in (d,17,t
2a0d0 31 2e 66 29 29 20 74 68 65 6e 20 65 20 65 6c 73  1.f)) then e els
2a0e0 65 20 31 31 20 65 6e 64 2b 62 2a 74 31 2e 62 29  e 11 end+b*t1.b)
2a0f0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
2a100 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
2a110 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69  rom t1 where exi
2a120 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
2a130 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66 20  m t1 where t1.f 
2a140 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 65 20  in (select t1.e 
2a150 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
2a160 6c 65 63 74 20 62 20 66 72 6f 6d 20 74 31 29 29  lect b from t1))
2a170 29 29 2c 28 64 29 29 3c 3d 63 29 2c 61 29 20 62  )),(d))<=c),a) b
2a180 65 74 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20  etween t1.f and 
2a190 64 29 7d 0a 7d 20 7b 31 31 30 30 7d 0a 64 6f 5f  d)}.} {1100}.do_
2a1a0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
2a1b0 32 33 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  231 {.  db eval 
2a1c0 7b 53 45 4c 45 43 54 20 20 2d 74 31 2e 65 2a 63  {SELECT  -t1.e*c
2a1d0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
2a1e0 6d 61 78 28 31 37 29 20 66 72 6f 6d 20 74 31 20  max(17) from t1 
2a1f0 77 68 65 72 65 20 28 31 31 2a 28 73 65 6c 65 63  where (11*(selec
2a200 74 20 63 61 73 65 20 20 2d 61 62 73 28 20 2d 2b  t case  -abs( -+
2a210 63 6f 75 6e 74 28 2a 29 29 20 77 68 65 6e 20 20  count(*)) when  
2a220 2d 63 61 73 65 20 2b 28 63 61 73 74 28 61 76 67  -case +(cast(avg
2a230 28 20 2d 66 29 20 41 53 20 69 6e 74 65 67 65 72  ( -f) AS integer
2a240 29 29 20 7c 20 28 61 62 73 28 63 61 73 74 28 61  )) | (abs(cast(a
2a250 76 67 28 63 29 20 41 53 20 69 6e 74 65 67 65 72  vg(c) AS integer
2a260 29 29 29 20 77 68 65 6e 20 6d 69 6e 28 64 29 20  ))) when min(d) 
2a270 74 68 65 6e 20 20 2d 6d 61 78 28 74 31 2e 66 29  then  -max(t1.f)
2a280 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20 65   else count(*) e
2a290 6e 64 20 74 68 65 6e 20 63 61 73 74 28 61 76 67  nd then cast(avg
2a2a0 28 20 2d 74 31 2e 66 29 20 41 53 20 69 6e 74 65  ( -t1.f) AS inte
2a2b0 67 65 72 29 20 65 6c 73 65 20 6d 61 78 28 62 29  ger) else max(b)
2a2c0 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 2a 7e 74   end from t1)*~t
2a2d0 31 2e 65 2a 63 61 73 65 20 28 73 65 6c 65 63 74  1.e*case (select
2a2e0 20 6d 69 6e 28 65 29 20 66 72 6f 6d 20 74 31 29   min(e) from t1)
2a2f0 20 77 68 65 6e 20 31 37 2d 74 31 2e 62 20 74 68   when 17-t1.b th
2a300 65 6e 20 28 65 29 20 65 6c 73 65 20 74 31 2e 66  en (e) else t1.f
2a310 2b 74 31 2e 66 20 65 6e 64 29 20 69 6e 20 28 73  +t1.f end) in (s
2a320 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f 6d 20  elect t1.d from 
2a330 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
2a340 31 39 20 66 72 6f 6d 20 74 31 29 29 2c 20 2d 74  19 from t1)), -t
2a350 31 2e 61 29 20 46 52 4f 4d 20 74 31 20 57 48 45  1.a) FROM t1 WHE
2a360 52 45 20 28 73 65 6c 65 63 74 20 6d 69 6e 28 31  RE (select min(1
2a370 39 29 20 66 72 6f 6d 20 74 31 29 20 69 6e 20 28  9) from t1) in (
2a380 73 65 6c 65 63 74 20 31 37 20 66 72 6f 6d 20 74  select 17 from t
2a390 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20  1 union select  
2a3a0 2d 31 31 2b 74 31 2e 64 2b 74 31 2e 63 20 66 72  -11+t1.d+t1.c fr
2a3b0 6f 6d 20 74 31 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f  om t1)}.} {}.do_
2a3c0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
2a3d0 32 33 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  232 {.  db eval 
2a3e0 7b 53 45 4c 45 43 54 20 20 2d 74 31 2e 65 2a 63  {SELECT  -t1.e*c
2a3f0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
2a400 6d 61 78 28 31 37 29 20 66 72 6f 6d 20 74 31 20  max(17) from t1 
2a410 77 68 65 72 65 20 28 31 31 2a 28 73 65 6c 65 63  where (11*(selec
2a420 74 20 63 61 73 65 20 20 2d 61 62 73 28 20 2d 2b  t case  -abs( -+
2a430 63 6f 75 6e 74 28 2a 29 29 20 77 68 65 6e 20 20  count(*)) when  
2a440 2d 63 61 73 65 20 2b 28 63 61 73 74 28 61 76 67  -case +(cast(avg
2a450 28 20 2d 66 29 20 41 53 20 69 6e 74 65 67 65 72  ( -f) AS integer
2a460 29 29 20 7c 20 28 61 62 73 28 63 61 73 74 28 61  )) | (abs(cast(a
2a470 76 67 28 63 29 20 41 53 20 69 6e 74 65 67 65 72  vg(c) AS integer
2a480 29 29 29 20 77 68 65 6e 20 6d 69 6e 28 64 29 20  ))) when min(d) 
2a490 74 68 65 6e 20 20 2d 6d 61 78 28 74 31 2e 66 29  then  -max(t1.f)
2a4a0 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20 65   else count(*) e
2a4b0 6e 64 20 74 68 65 6e 20 63 61 73 74 28 61 76 67  nd then cast(avg
2a4c0 28 20 2d 74 31 2e 66 29 20 41 53 20 69 6e 74 65  ( -t1.f) AS inte
2a4d0 67 65 72 29 20 65 6c 73 65 20 6d 61 78 28 62 29  ger) else max(b)
2a4e0 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 2a 7e 74   end from t1)*~t
2a4f0 31 2e 65 2a 63 61 73 65 20 28 73 65 6c 65 63 74  1.e*case (select
2a500 20 6d 69 6e 28 65 29 20 66 72 6f 6d 20 74 31 29   min(e) from t1)
2a510 20 77 68 65 6e 20 31 37 2d 74 31 2e 62 20 74 68   when 17-t1.b th
2a520 65 6e 20 28 65 29 20 65 6c 73 65 20 74 31 2e 66  en (e) else t1.f
2a530 2b 74 31 2e 66 20 65 6e 64 29 20 69 6e 20 28 73  +t1.f end) in (s
2a540 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f 6d 20  elect t1.d from 
2a550 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
2a560 31 39 20 66 72 6f 6d 20 74 31 29 29 2c 20 2d 74  19 from t1)), -t
2a570 31 2e 61 29 20 46 52 4f 4d 20 74 31 20 57 48 45  1.a) FROM t1 WHE
2a580 52 45 20 4e 4f 54 20 28 28 73 65 6c 65 63 74 20  RE NOT ((select 
2a590 6d 69 6e 28 31 39 29 20 66 72 6f 6d 20 74 31 29  min(19) from t1)
2a5a0 20 69 6e 20 28 73 65 6c 65 63 74 20 31 37 20 66   in (select 17 f
2a5b0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
2a5c0 65 63 74 20 20 2d 31 31 2b 74 31 2e 64 2b 74 31  ect  -11+t1.d+t1
2a5d0 2e 63 20 66 72 6f 6d 20 74 31 29 29 7d 0a 7d 20  .c from t1))}.} 
2a5e0 7b 35 30 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20  {50000}.do_test 
2a5f0 72 61 6e 64 65 78 70 72 2d 32 2e 32 33 33 20 7b  randexpr-2.233 {
2a600 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
2a610 43 54 20 20 2d 74 31 2e 65 2a 63 6f 61 6c 65 73  CT  -t1.e*coales
2a620 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31  ce((select max(1
2a630 37 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  7) from t1 where
2a640 20 28 31 31 2a 28 73 65 6c 65 63 74 20 63 61 73   (11*(select cas
2a650 65 20 20 2d 61 62 73 28 20 2d 2b 63 6f 75 6e 74  e  -abs( -+count
2a660 28 2a 29 29 20 77 68 65 6e 20 20 2d 63 61 73 65  (*)) when  -case
2a670 20 2b 28 63 61 73 74 28 61 76 67 28 20 2d 66 29   +(cast(avg( -f)
2a680 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 26 20   AS integer)) & 
2a690 28 61 62 73 28 63 61 73 74 28 61 76 67 28 63 29  (abs(cast(avg(c)
2a6a0 20 41 53 20 69 6e 74 65 67 65 72 29 29 29 20 77   AS integer))) w
2a6b0 68 65 6e 20 6d 69 6e 28 64 29 20 74 68 65 6e 20  hen min(d) then 
2a6c0 20 2d 6d 61 78 28 74 31 2e 66 29 20 65 6c 73 65   -max(t1.f) else
2a6d0 20 63 6f 75 6e 74 28 2a 29 20 65 6e 64 20 74 68   count(*) end th
2a6e0 65 6e 20 63 61 73 74 28 61 76 67 28 20 2d 74 31  en cast(avg( -t1
2a6f0 2e 66 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .f) AS integer) 
2a700 65 6c 73 65 20 6d 61 78 28 62 29 20 65 6e 64 20  else max(b) end 
2a710 66 72 6f 6d 20 74 31 29 2a 7e 74 31 2e 65 2a 63  from t1)*~t1.e*c
2a720 61 73 65 20 28 73 65 6c 65 63 74 20 6d 69 6e 28  ase (select min(
2a730 65 29 20 66 72 6f 6d 20 74 31 29 20 77 68 65 6e  e) from t1) when
2a740 20 31 37 2d 74 31 2e 62 20 74 68 65 6e 20 28 65   17-t1.b then (e
2a750 29 20 65 6c 73 65 20 74 31 2e 66 2b 74 31 2e 66  ) else t1.f+t1.f
2a760 20 65 6e 64 29 20 69 6e 20 28 73 65 6c 65 63 74   end) in (select
2a770 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e   t1.d from t1 un
2a780 69 6f 6e 20 73 65 6c 65 63 74 20 31 39 20 66 72  ion select 19 fr
2a790 6f 6d 20 74 31 29 29 2c 20 2d 74 31 2e 61 29 20  om t1)), -t1.a) 
2a7a0 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
2a7b0 54 20 28 28 73 65 6c 65 63 74 20 6d 69 6e 28 31  T ((select min(1
2a7c0 39 29 20 66 72 6f 6d 20 74 31 29 20 69 6e 20 28  9) from t1) in (
2a7d0 73 65 6c 65 63 74 20 31 37 20 66 72 6f 6d 20 74  select 17 from t
2a7e0 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20  1 union select  
2a7f0 2d 31 31 2b 74 31 2e 64 2b 74 31 2e 63 20 66 72  -11+t1.d+t1.c fr
2a800 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 35 30 30 30  om t1))}.} {5000
2a810 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  0}.do_test rande
2a820 78 70 72 2d 32 2e 32 33 34 20 7b 0a 20 20 64 62  xpr-2.234 {.  db
2a830 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 63   eval {SELECT (c
2a840 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
2a850 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20 74 31  max(case when t1
2a860 2e 65 3e 3d 20 2d 65 20 7c 20 31 33 2d 31 39 2a  .e>= -e | 13-19*
2a870 64 20 74 68 65 6e 20 63 61 73 65 20 77 68 65 6e  d then case when
2a880 20 63 20 6e 6f 74 20 69 6e 20 28 2b 28 73 65 6c   c not in (+(sel
2a890 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f  ect count(*) fro
2a8a0 6d 20 74 31 29 2c 63 6f 61 6c 65 73 63 65 28 28  m t1),coalesce((
2a8b0 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29  select max(t1.a)
2a8c0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
2a8d0 33 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73  3 in (select cas
2a8e0 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  e count(distinct
2a8f0 20 74 31 2e 61 29 20 7c 20 63 6f 75 6e 74 28 2a   t1.a) | count(*
2a900 29 20 77 68 65 6e 20 63 61 73 74 28 61 76 67 28  ) when cast(avg(
2a910 74 31 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72  t1.b) AS integer
2a920 29 20 74 68 65 6e 20 63 6f 75 6e 74 28 64 69 73  ) then count(dis
2a930 74 69 6e 63 74 20 61 29 20 65 6c 73 65 20 6d 69  tinct a) else mi
2a940 6e 28 31 31 29 20 65 6e 64 20 66 72 6f 6d 20 74  n(11) end from t
2a950 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63  1 union select c
2a960 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
2a970 29 2c 31 39 29 2c 74 31 2e 61 29 20 74 68 65 6e  ),19),t1.a) then
2a980 20 74 31 2e 63 20 65 6c 73 65 20 63 20 65 6e 64   t1.c else c end
2a990 20 77 68 65 6e 20 74 31 2e 66 20 69 6e 20 28 73   when t1.f in (s
2a9a0 65 6c 65 63 74 20 74 31 2e 66 20 66 72 6f 6d 20  elect t1.f from 
2a9b0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
2a9c0 74 31 2e 65 20 66 72 6f 6d 20 74 31 29 20 74 68  t1.e from t1) th
2a9d0 65 6e 20 74 31 2e 65 20 65 6c 73 65 20 20 2d 74  en t1.e else  -t
2a9e0 31 2e 65 20 65 6e 64 29 20 66 72 6f 6d 20 74 31  1.e end) from t1
2a9f0 20 77 68 65 72 65 20 28 31 37 20 69 6e 20 28 65   where (17 in (e
2aa00 2c 64 2c 61 29 29 29 2c 74 31 2e 64 29 2a 20 2d  ,d,a))),t1.d)* -
2aa10 31 39 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  19) FROM t1 WHER
2aa20 45 20 28 28 28 61 62 73 28 74 31 2e 66 29 2f 61  E (((abs(t1.f)/a
2aa30 62 73 28 64 29 29 20 69 6e 20 28 73 65 6c 65 63  bs(d)) in (selec
2aa40 74 20 63 61 73 65 20 28 63 61 73 65 20 6d 61 78  t case (case max
2aa50 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
2aa60 74 20 6d 61 78 28 65 2a 28 74 31 2e 64 2a 31 33  t max(e*(t1.d*13
2aa70 2b 74 31 2e 62 29 2d 74 31 2e 62 29 20 66 72 6f  +t1.b)-t1.b) fro
2aa80 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 61 3d  m t1 where t1.a=
2aa90 31 33 29 2c 28 74 31 2e 63 29 29 29 20 77 68 65  13),(t1.c))) whe
2aaa0 6e 20 28 63 61 73 65 20 6d 61 78 28 74 31 2e 61  n (case max(t1.a
2aab0 29 20 77 68 65 6e 20 20 2d 61 62 73 28 6d 61 78  ) when  -abs(max
2aac0 28 31 37 29 29 2d 63 6f 75 6e 74 28 64 69 73 74  (17))-count(dist
2aad0 69 6e 63 74 20 31 39 29 20 74 68 65 6e 20 63 61  inct 19) then ca
2aae0 73 74 28 61 76 67 28 74 31 2e 64 29 20 41 53 20  st(avg(t1.d) AS 
2aaf0 69 6e 74 65 67 65 72 29 20 65 6c 73 65 20 6d 61  integer) else ma
2ab00 78 28 31 33 29 20 65 6e 64 29 2a 63 6f 75 6e 74  x(13) end)*count
2ab10 28 64 69 73 74 69 6e 63 74 20 74 31 2e 63 29 20  (distinct t1.c) 
2ab20 74 68 65 6e 20 28 6d 61 78 28 28 74 31 2e 62 29  then (max((t1.b)
2ab30 29 29 20 65 6c 73 65 20 6d 69 6e 28 31 39 29 20  )) else min(19) 
2ab40 65 6e 64 29 20 77 68 65 6e 20 6d 61 78 28 66 29  end) when max(f)
2ab50 20 74 68 65 6e 20 20 2d 28 63 6f 75 6e 74 28 64   then  -(count(d
2ab60 69 73 74 69 6e 63 74 20 74 31 2e 66 29 29 20 65  istinct t1.f)) e
2ab70 6c 73 65 20 6d 69 6e 28 74 31 2e 62 29 20 65 6e  lse min(t1.b) en
2ab80 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  d from t1 union 
2ab90 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
2aba0 31 33 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  13) AS integer) 
2abb0 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 28 31 33  from t1) and (13
2abc0 20 69 6e 20 28 73 65 6c 65 63 74 20 28 28 6d 69   in (select ((mi
2abd0 6e 28 62 29 29 29 20 66 72 6f 6d 20 74 31 20 75  n(b))) from t1 u
2abe0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20 2d 20 2d  nion select  - -
2abf0 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31  count(*) from t1
2ac00 29 29 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ))))}.} {}.do_te
2ac10 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 33  st randexpr-2.23
2ac20 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  5 {.  db eval {S
2ac30 45 4c 45 43 54 20 28 63 6f 61 6c 65 73 63 65 28  ELECT (coalesce(
2ac40 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65  (select max(case
2ac50 20 77 68 65 6e 20 74 31 2e 65 3e 3d 20 2d 65 20   when t1.e>= -e 
2ac60 7c 20 31 33 2d 31 39 2a 64 20 74 68 65 6e 20 63  | 13-19*d then c
2ac70 61 73 65 20 77 68 65 6e 20 63 20 6e 6f 74 20 69  ase when c not i
2ac80 6e 20 28 2b 28 73 65 6c 65 63 74 20 63 6f 75 6e  n (+(select coun
2ac90 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 2c 63 6f  t(*) from t1),co
2aca0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
2acb0 61 78 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31  ax(t1.a) from t1
2acc0 20 77 68 65 72 65 20 31 33 20 69 6e 20 28 73 65   where 13 in (se
2acd0 6c 65 63 74 20 63 61 73 65 20 63 6f 75 6e 74 28  lect case count(
2ace0 64 69 73 74 69 6e 63 74 20 74 31 2e 61 29 20 7c  distinct t1.a) |
2acf0 20 63 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 63   count(*) when c
2ad00 61 73 74 28 61 76 67 28 74 31 2e 62 29 20 41 53  ast(avg(t1.b) AS
2ad10 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20 63   integer) then c
2ad20 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 61 29  ount(distinct a)
2ad30 20 65 6c 73 65 20 6d 69 6e 28 31 31 29 20 65 6e   else min(11) en
2ad40 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  d from t1 union 
2ad50 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20  select count(*) 
2ad60 66 72 6f 6d 20 74 31 29 29 2c 31 39 29 2c 74 31  from t1)),19),t1
2ad70 2e 61 29 20 74 68 65 6e 20 74 31 2e 63 20 65 6c  .a) then t1.c el
2ad80 73 65 20 63 20 65 6e 64 20 77 68 65 6e 20 74 31  se c end when t1
2ad90 2e 66 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31  .f in (select t1
2ada0 2e 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  .f from t1 union
2adb0 20 73 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f   select t1.e fro
2adc0 6d 20 74 31 29 20 74 68 65 6e 20 74 31 2e 65 20  m t1) then t1.e 
2add0 65 6c 73 65 20 20 2d 74 31 2e 65 20 65 6e 64 29  else  -t1.e end)
2ade0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
2adf0 31 37 20 69 6e 20 28 65 2c 64 2c 61 29 29 29 2c  17 in (e,d,a))),
2ae00 74 31 2e 64 29 2a 20 2d 31 39 29 20 46 52 4f 4d  t1.d)* -19) FROM
2ae10 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28   t1 WHERE NOT ((
2ae20 28 28 61 62 73 28 74 31 2e 66 29 2f 61 62 73 28  ((abs(t1.f)/abs(
2ae30 64 29 29 20 69 6e 20 28 73 65 6c 65 63 74 20 63  d)) in (select c
2ae40 61 73 65 20 28 63 61 73 65 20 6d 61 78 28 63 6f  ase (case max(co
2ae50 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
2ae60 61 78 28 65 2a 28 74 31 2e 64 2a 31 33 2b 74 31  ax(e*(t1.d*13+t1
2ae70 2e 62 29 2d 74 31 2e 62 29 20 66 72 6f 6d 20 74  .b)-t1.b) from t
2ae80 31 20 77 68 65 72 65 20 74 31 2e 61 3d 31 33 29  1 where t1.a=13)
2ae90 2c 28 74 31 2e 63 29 29 29 20 77 68 65 6e 20 28  ,(t1.c))) when (
2aea0 63 61 73 65 20 6d 61 78 28 74 31 2e 61 29 20 77  case max(t1.a) w
2aeb0 68 65 6e 20 20 2d 61 62 73 28 6d 61 78 28 31 37  hen  -abs(max(17
2aec0 29 29 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  ))-count(distinc
2aed0 74 20 31 39 29 20 74 68 65 6e 20 63 61 73 74 28  t 19) then cast(
2aee0 61 76 67 28 74 31 2e 64 29 20 41 53 20 69 6e 74  avg(t1.d) AS int
2aef0 65 67 65 72 29 20 65 6c 73 65 20 6d 61 78 28 31  eger) else max(1
2af00 33 29 20 65 6e 64 29 2a 63 6f 75 6e 74 28 64 69  3) end)*count(di
2af10 73 74 69 6e 63 74 20 74 31 2e 63 29 20 74 68 65  stinct t1.c) the
2af20 6e 20 28 6d 61 78 28 28 74 31 2e 62 29 29 29 20  n (max((t1.b))) 
2af30 65 6c 73 65 20 6d 69 6e 28 31 39 29 20 65 6e 64  else min(19) end
2af40 29 20 77 68 65 6e 20 6d 61 78 28 66 29 20 74 68  ) when max(f) th
2af50 65 6e 20 20 2d 28 63 6f 75 6e 74 28 64 69 73 74  en  -(count(dist
2af60 69 6e 63 74 20 74 31 2e 66 29 29 20 65 6c 73 65  inct t1.f)) else
2af70 20 6d 69 6e 28 74 31 2e 62 29 20 65 6e 64 20 66   min(t1.b) end f
2af80 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
2af90 65 63 74 20 63 61 73 74 28 61 76 67 28 31 33 29  ect cast(avg(13)
2afa0 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
2afb0 6d 20 74 31 29 20 61 6e 64 20 28 31 33 20 69 6e  m t1) and (13 in
2afc0 20 28 73 65 6c 65 63 74 20 28 28 6d 69 6e 28 62   (select ((min(b
2afd0 29 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  ))) from t1 unio
2afe0 6e 20 73 65 6c 65 63 74 20 20 2d 20 2d 63 6f 75  n select  - -cou
2aff0 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 29 29  nt(*) from t1)))
2b000 29 29 7d 0a 7d 20 7b 2d 37 36 30 30 7d 0a 64 6f  ))}.} {-7600}.do
2b010 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
2b020 2e 32 33 36 20 7b 0a 20 20 64 62 20 65 76 61 6c  .236 {.  db eval
2b030 20 7b 53 45 4c 45 43 54 20 28 63 6f 61 6c 65 73   {SELECT (coales
2b040 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63  ce((select max(c
2b050 61 73 65 20 77 68 65 6e 20 74 31 2e 65 3e 3d 20  ase when t1.e>= 
2b060 2d 65 20 26 20 31 33 2d 31 39 2a 64 20 74 68 65  -e & 13-19*d the
2b070 6e 20 63 61 73 65 20 77 68 65 6e 20 63 20 6e 6f  n case when c no
2b080 74 20 69 6e 20 28 2b 28 73 65 6c 65 63 74 20 63  t in (+(select c
2b090 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
2b0a0 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  ,coalesce((selec
2b0b0 74 20 6d 61 78 28 74 31 2e 61 29 20 66 72 6f 6d  t max(t1.a) from
2b0c0 20 74 31 20 77 68 65 72 65 20 31 33 20 69 6e 20   t1 where 13 in 
2b0d0 28 73 65 6c 65 63 74 20 63 61 73 65 20 63 6f 75  (select case cou
2b0e0 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 61  nt(distinct t1.a
2b0f0 29 20 26 20 63 6f 75 6e 74 28 2a 29 20 77 68 65  ) & count(*) whe
2b100 6e 20 63 61 73 74 28 61 76 67 28 74 31 2e 62 29  n cast(avg(t1.b)
2b110 20 41 53 20 69 6e 74 65 67 65 72 29 20 74 68 65   AS integer) the
2b120 6e 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  n count(distinct
2b130 20 61 29 20 65 6c 73 65 20 6d 69 6e 28 31 31 29   a) else min(11)
2b140 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 75 6e 69   end from t1 uni
2b150 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  on select count(
2b160 2a 29 20 66 72 6f 6d 20 74 31 29 29 2c 31 39 29  *) from t1)),19)
2b170 2c 74 31 2e 61 29 20 74 68 65 6e 20 74 31 2e 63  ,t1.a) then t1.c
2b180 20 65 6c 73 65 20 63 20 65 6e 64 20 77 68 65 6e   else c end when
2b190 20 74 31 2e 66 20 69 6e 20 28 73 65 6c 65 63 74   t1.f in (select
2b1a0 20 74 31 2e 66 20 66 72 6f 6d 20 74 31 20 75 6e   t1.f from t1 un
2b1b0 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 65 20  ion select t1.e 
2b1c0 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 74 31  from t1) then t1
2b1d0 2e 65 20 65 6c 73 65 20 20 2d 74 31 2e 65 20 65  .e else  -t1.e e
2b1e0 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  nd) from t1 wher
2b1f0 65 20 28 31 37 20 69 6e 20 28 65 2c 64 2c 61 29  e (17 in (e,d,a)
2b200 29 29 2c 74 31 2e 64 29 2a 20 2d 31 39 29 20 46  )),t1.d)* -19) F
2b210 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
2b220 20 28 28 28 28 61 62 73 28 74 31 2e 66 29 2f 61   ((((abs(t1.f)/a
2b230 62 73 28 64 29 29 20 69 6e 20 28 73 65 6c 65 63  bs(d)) in (selec
2b240 74 20 63 61 73 65 20 28 63 61 73 65 20 6d 61 78  t case (case max
2b250 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
2b260 74 20 6d 61 78 28 65 2a 28 74 31 2e 64 2a 31 33  t max(e*(t1.d*13
2b270 2b 74 31 2e 62 29 2d 74 31 2e 62 29 20 66 72 6f  +t1.b)-t1.b) fro
2b280 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 61 3d  m t1 where t1.a=
2b290 31 33 29 2c 28 74 31 2e 63 29 29 29 20 77 68 65  13),(t1.c))) whe
2b2a0 6e 20 28 63 61 73 65 20 6d 61 78 28 74 31 2e 61  n (case max(t1.a
2b2b0 29 20 77 68 65 6e 20 20 2d 61 62 73 28 6d 61 78  ) when  -abs(max
2b2c0 28 31 37 29 29 2d 63 6f 75 6e 74 28 64 69 73 74  (17))-count(dist
2b2d0 69 6e 63 74 20 31 39 29 20 74 68 65 6e 20 63 61  inct 19) then ca
2b2e0 73 74 28 61 76 67 28 74 31 2e 64 29 20 41 53 20  st(avg(t1.d) AS 
2b2f0 69 6e 74 65 67 65 72 29 20 65 6c 73 65 20 6d 61  integer) else ma
2b300 78 28 31 33 29 20 65 6e 64 29 2a 63 6f 75 6e 74  x(13) end)*count
2b310 28 64 69 73 74 69 6e 63 74 20 74 31 2e 63 29 20  (distinct t1.c) 
2b320 74 68 65 6e 20 28 6d 61 78 28 28 74 31 2e 62 29  then (max((t1.b)
2b330 29 29 20 65 6c 73 65 20 6d 69 6e 28 31 39 29 20  )) else min(19) 
2b340 65 6e 64 29 20 77 68 65 6e 20 6d 61 78 28 66 29  end) when max(f)
2b350 20 74 68 65 6e 20 20 2d 28 63 6f 75 6e 74 28 64   then  -(count(d
2b360 69 73 74 69 6e 63 74 20 74 31 2e 66 29 29 20 65  istinct t1.f)) e
2b370 6c 73 65 20 6d 69 6e 28 74 31 2e 62 29 20 65 6e  lse min(t1.b) en
2b380 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  d from t1 union 
2b390 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
2b3a0 31 33 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  13) AS integer) 
2b3b0 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 28 31 33  from t1) and (13
2b3c0 20 69 6e 20 28 73 65 6c 65 63 74 20 28 28 6d 69   in (select ((mi
2b3d0 6e 28 62 29 29 29 20 66 72 6f 6d 20 74 31 20 75  n(b))) from t1 u
2b3e0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20 2d 20 2d  nion select  - -
2b3f0 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31  count(*) from t1
2b400 29 29 29 29 29 7d 0a 7d 20 7b 2d 37 36 30 30 7d  )))))}.} {-7600}
2b410 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
2b420 72 2d 32 2e 32 33 37 20 7b 0a 20 20 64 62 20 65  r-2.237 {.  db e
2b430 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
2b440 20 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20   when case when 
2b450 62 20 69 6e 20 28 73 65 6c 65 63 74 20 61 62 73  b in (select abs
2b460 28 61 62 73 28 20 2d 6d 61 78 28 63 61 73 65 20  (abs( -max(case 
2b470 63 2b 64 20 77 68 65 6e 20 66 20 74 68 65 6e 20  c+d when f then 
2b480 66 20 65 6c 73 65 20 31 39 20 65 6e 64 20 7c 20  f else 19 end | 
2b490 63 29 2d 28 20 2d 63 61 73 65 20 6d 69 6e 28 63  c)-( -case min(c
2b4a0 29 20 77 68 65 6e 20 20 2d 28 63 61 73 74 28 61  ) when  -(cast(a
2b4b0 76 67 28 28 74 31 2e 66 29 29 20 41 53 20 69 6e  vg((t1.f)) AS in
2b4c0 74 65 67 65 72 29 29 20 74 68 65 6e 20 63 6f 75  teger)) then cou
2b4d0 6e 74 28 2a 29 20 65 6c 73 65 20 28 28 63 61 73  nt(*) else ((cas
2b4e0 74 28 61 76 67 28 74 31 2e 62 29 20 41 53 20 69  t(avg(t1.b) AS i
2b4f0 6e 74 65 67 65 72 29 29 29 20 65 6e 64 29 29 2b  nteger))) end))+
2b500 63 6f 75 6e 74 28 2a 29 2b 28 6d 61 78 28 31 37  count(*)+(max(17
2b510 29 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  ))) from t1 unio
2b520 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a  n select count(*
2b530 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20  ) from t1) then 
2b540 74 31 2e 61 20 77 68 65 6e 20 7e 31 33 2a 74 31  t1.a when ~13*t1
2b550 2e 61 2d 20 2d 63 20 6e 6f 74 20 69 6e 20 28 62  .a- -c not in (b
2b560 2c 65 2c 31 39 29 20 74 68 65 6e 20 74 31 2e 63  ,e,19) then t1.c
2b570 20 65 6c 73 65 20 28 74 31 2e 64 29 20 65 6e 64   else (t1.d) end
2b580 3c 3d 28 62 29 20 61 6e 64 20 31 33 20 62 65 74  <=(b) and 13 bet
2b590 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 31 31  ween t1.f and 11
2b5a0 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20   then t1.f else 
2b5b0 20 2d 31 39 20 65 6e 64 20 46 52 4f 4d 20 74 31   -19 end FROM t1
2b5c0 20 57 48 45 52 45 20 64 3e 3d 63 61 73 65 20 77   WHERE d>=case w
2b5d0 68 65 6e 20 74 31 2e 64 2b 63 61 73 65 20 77 68  hen t1.d+case wh
2b5e0 65 6e 20 28 20 2d 31 37 29 2d 63 3e 31 31 20 6f  en ( -17)-c>11 o
2b5f0 72 20 62 20 69 6e 20 28 28 73 65 6c 65 63 74 20  r b in ((select 
2b600 6d 69 6e 28 31 33 29 2b 20 2d 63 61 73 74 28 61  min(13)+ -cast(a
2b610 76 67 28 31 31 29 20 41 53 20 69 6e 74 65 67 65  vg(11) AS intege
2b620 72 29 20 66 72 6f 6d 20 74 31 29 2b 7e 74 31 2e  r) from t1)+~t1.
2b630 66 2c 20 2d 63 2c 28 31 33 29 29 20 61 6e 64 20  f, -c,(13)) and 
2b640 65 20 69 6e 20 28 73 65 6c 65 63 74 20 28 64 29  e in (select (d)
2b650 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
2b660 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74 31 29  elect f from t1)
2b670 20 74 68 65 6e 20 74 31 2e 61 20 77 68 65 6e 20   then t1.a when 
2b680 64 3d 20 2d 74 31 2e 64 20 74 68 65 6e 20 61 2d  d= -t1.d then a-
2b690 20 2d 31 37 20 65 6c 73 65 20 31 37 20 65 6e 64   -17 else 17 end
2b6a0 2d 74 31 2e 63 3e 64 20 74 68 65 6e 20 31 31 20  -t1.c>d then 11 
2b6b0 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65  when exists(sele
2b6c0 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
2b6d0 72 65 20 31 37 20 6e 6f 74 20 62 65 74 77 65 65  re 17 not betwee
2b6e0 6e 20 74 31 2e 62 20 61 6e 64 20 74 31 2e 62 29  n t1.b and t1.b)
2b6f0 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20   then t1.b else 
2b700 28 74 31 2e 61 29 20 65 6e 64 7d 0a 7d 20 7b 2d  (t1.a) end}.} {-
2b710 31 39 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  19}.do_test rand
2b720 65 78 70 72 2d 32 2e 32 33 38 20 7b 0a 20 20 64  expr-2.238 {.  d
2b730 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
2b740 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77 68  ase when case wh
2b750 65 6e 20 62 20 69 6e 20 28 73 65 6c 65 63 74 20  en b in (select 
2b760 61 62 73 28 61 62 73 28 20 2d 6d 61 78 28 63 61  abs(abs( -max(ca
2b770 73 65 20 63 2b 64 20 77 68 65 6e 20 66 20 74 68  se c+d when f th
2b780 65 6e 20 66 20 65 6c 73 65 20 31 39 20 65 6e 64  en f else 19 end
2b790 20 7c 20 63 29 2d 28 20 2d 63 61 73 65 20 6d 69   | c)-( -case mi
2b7a0 6e 28 63 29 20 77 68 65 6e 20 20 2d 28 63 61 73  n(c) when  -(cas
2b7b0 74 28 61 76 67 28 28 74 31 2e 66 29 29 20 41 53  t(avg((t1.f)) AS
2b7c0 20 69 6e 74 65 67 65 72 29 29 20 74 68 65 6e 20   integer)) then 
2b7d0 63 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20 28 28  count(*) else ((
2b7e0 63 61 73 74 28 61 76 67 28 74 31 2e 62 29 20 41  cast(avg(t1.b) A
2b7f0 53 20 69 6e 74 65 67 65 72 29 29 29 20 65 6e 64  S integer))) end
2b800 29 29 2b 63 6f 75 6e 74 28 2a 29 2b 28 6d 61 78  ))+count(*)+(max
2b810 28 31 37 29 29 29 20 66 72 6f 6d 20 74 31 20 75  (17))) from t1 u
2b820 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
2b830 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 20 74 68  t(*) from t1) th
2b840 65 6e 20 74 31 2e 61 20 77 68 65 6e 20 7e 31 33  en t1.a when ~13
2b850 2a 74 31 2e 61 2d 20 2d 63 20 6e 6f 74 20 69 6e  *t1.a- -c not in
2b860 20 28 62 2c 65 2c 31 39 29 20 74 68 65 6e 20 74   (b,e,19) then t
2b870 31 2e 63 20 65 6c 73 65 20 28 74 31 2e 64 29 20  1.c else (t1.d) 
2b880 65 6e 64 3c 3d 28 62 29 20 61 6e 64 20 31 33 20  end<=(b) and 13 
2b890 62 65 74 77 65 65 6e 20 74 31 2e 66 20 61 6e 64  between t1.f and
2b8a0 20 31 31 20 74 68 65 6e 20 74 31 2e 66 20 65 6c   11 then t1.f el
2b8b0 73 65 20 20 2d 31 39 20 65 6e 64 20 46 52 4f 4d  se  -19 end FROM
2b8c0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 64   t1 WHERE NOT (d
2b8d0 3e 3d 63 61 73 65 20 77 68 65 6e 20 74 31 2e 64  >=case when t1.d
2b8e0 2b 63 61 73 65 20 77 68 65 6e 20 28 20 2d 31 37  +case when ( -17
2b8f0 29 2d 63 3e 31 31 20 6f 72 20 62 20 69 6e 20 28  )-c>11 or b in (
2b900 28 73 65 6c 65 63 74 20 6d 69 6e 28 31 33 29 2b  (select min(13)+
2b910 20 2d 63 61 73 74 28 61 76 67 28 31 31 29 20 41   -cast(avg(11) A
2b920 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
2b930 74 31 29 2b 7e 74 31 2e 66 2c 20 2d 63 2c 28 31  t1)+~t1.f, -c,(1
2b940 33 29 29 20 61 6e 64 20 65 20 69 6e 20 28 73 65  3)) and e in (se
2b950 6c 65 63 74 20 28 64 29 20 66 72 6f 6d 20 74 31  lect (d) from t1
2b960 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 66 20   union select f 
2b970 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 74 31  from t1) then t1
2b980 2e 61 20 77 68 65 6e 20 64 3d 20 2d 74 31 2e 64  .a when d= -t1.d
2b990 20 74 68 65 6e 20 61 2d 20 2d 31 37 20 65 6c 73   then a- -17 els
2b9a0 65 20 31 37 20 65 6e 64 2d 74 31 2e 63 3e 64 20  e 17 end-t1.c>d 
2b9b0 74 68 65 6e 20 31 31 20 77 68 65 6e 20 65 78 69  then 11 when exi
2b9c0 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
2b9d0 6d 20 74 31 20 77 68 65 72 65 20 31 37 20 6e 6f  m t1 where 17 no
2b9e0 74 20 62 65 74 77 65 65 6e 20 74 31 2e 62 20 61  t between t1.b a
2b9f0 6e 64 20 74 31 2e 62 29 20 74 68 65 6e 20 74 31  nd t1.b) then t1
2ba00 2e 62 20 65 6c 73 65 20 28 74 31 2e 61 29 20 65  .b else (t1.a) e
2ba10 6e 64 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  nd)}.} {}.do_tes
2ba20 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 33 39  t randexpr-2.239
2ba30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
2ba40 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 63  LECT case when c
2ba50 61 73 65 20 77 68 65 6e 20 62 20 69 6e 20 28 73  ase when b in (s
2ba60 65 6c 65 63 74 20 61 62 73 28 61 62 73 28 20 2d  elect abs(abs( -
2ba70 6d 61 78 28 63 61 73 65 20 63 2b 64 20 77 68 65  max(case c+d whe
2ba80 6e 20 66 20 74 68 65 6e 20 66 20 65 6c 73 65 20  n f then f else 
2ba90 31 39 20 65 6e 64 20 26 20 63 29 2d 28 20 2d 63  19 end & c)-( -c
2baa0 61 73 65 20 6d 69 6e 28 63 29 20 77 68 65 6e 20  ase min(c) when 
2bab0 20 2d 28 63 61 73 74 28 61 76 67 28 28 74 31 2e   -(cast(avg((t1.
2bac0 66 29 29 20 41 53 20 69 6e 74 65 67 65 72 29 29  f)) AS integer))
2bad0 20 74 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20 65   then count(*) e
2bae0 6c 73 65 20 28 28 63 61 73 74 28 61 76 67 28 74  lse ((cast(avg(t
2baf0 31 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29  1.b) AS integer)
2bb00 29 29 20 65 6e 64 29 29 2b 63 6f 75 6e 74 28 2a  )) end))+count(*
2bb10 29 2b 28 6d 61 78 28 31 37 29 29 29 20 66 72 6f  )+(max(17))) fro
2bb20 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
2bb30 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20  t count(*) from 
2bb40 74 31 29 20 74 68 65 6e 20 74 31 2e 61 20 77 68  t1) then t1.a wh
2bb50 65 6e 20 7e 31 33 2a 74 31 2e 61 2d 20 2d 63 20  en ~13*t1.a- -c 
2bb60 6e 6f 74 20 69 6e 20 28 62 2c 65 2c 31 39 29 20  not in (b,e,19) 
2bb70 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 28  then t1.c else (
2bb80 74 31 2e 64 29 20 65 6e 64 3c 3d 28 62 29 20 61  t1.d) end<=(b) a
2bb90 6e 64 20 31 33 20 62 65 74 77 65 65 6e 20 74 31  nd 13 between t1
2bba0 2e 66 20 61 6e 64 20 31 31 20 74 68 65 6e 20 74  .f and 11 then t
2bbb0 31 2e 66 20 65 6c 73 65 20 20 2d 31 39 20 65 6e  1.f else  -19 en
2bbc0 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
2bbd0 64 3e 3d 63 61 73 65 20 77 68 65 6e 20 74 31 2e  d>=case when t1.
2bbe0 64 2b 63 61 73 65 20 77 68 65 6e 20 28 20 2d 31  d+case when ( -1
2bbf0 37 29 2d 63 3e 31 31 20 6f 72 20 62 20 69 6e 20  7)-c>11 or b in 
2bc00 28 28 73 65 6c 65 63 74 20 6d 69 6e 28 31 33 29  ((select min(13)
2bc10 2b 20 2d 63 61 73 74 28 61 76 67 28 31 31 29 20  + -cast(avg(11) 
2bc20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
2bc30 20 74 31 29 2b 7e 74 31 2e 66 2c 20 2d 63 2c 28   t1)+~t1.f, -c,(
2bc40 31 33 29 29 20 61 6e 64 20 65 20 69 6e 20 28 73  13)) and e in (s
2bc50 65 6c 65 63 74 20 28 64 29 20 66 72 6f 6d 20 74  elect (d) from t
2bc60 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 66  1 union select f
2bc70 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 74   from t1) then t
2bc80 31 2e 61 20 77 68 65 6e 20 64 3d 20 2d 74 31 2e  1.a when d= -t1.
2bc90 64 20 74 68 65 6e 20 61 2d 20 2d 31 37 20 65 6c  d then a- -17 el
2bca0 73 65 20 31 37 20 65 6e 64 2d 74 31 2e 63 3e 64  se 17 end-t1.c>d
2bcb0 20 74 68 65 6e 20 31 31 20 77 68 65 6e 20 65 78   then 11 when ex
2bcc0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
2bcd0 6f 6d 20 74 31 20 77 68 65 72 65 20 31 37 20 6e  om t1 where 17 n
2bce0 6f 74 20 62 65 74 77 65 65 6e 20 74 31 2e 62 20  ot between t1.b 
2bcf0 61 6e 64 20 74 31 2e 62 29 20 74 68 65 6e 20 74  and t1.b) then t
2bd00 31 2e 62 20 65 6c 73 65 20 28 74 31 2e 61 29 20  1.b else (t1.a) 
2bd10 65 6e 64 7d 0a 7d 20 7b 2d 31 39 7d 0a 64 6f 5f  end}.} {-19}.do_
2bd20 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
2bd30 32 34 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  240 {.  db eval 
2bd40 7b 53 45 4c 45 43 54 20 65 2d 63 6f 61 6c 65 73  {SELECT e-coales
2bd50 63 65 28 28 73 65 6c 65 63 74 20 63 6f 61 6c 65  ce((select coale
2bd60 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
2bd70 31 39 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  19) from t1 wher
2bd80 65 20 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  e (coalesce((sel
2bd90 65 63 74 20 6d 61 78 28 63 61 73 65 20 31 31 20  ect max(case 11 
2bda0 77 68 65 6e 20 62 20 74 68 65 6e 20 31 33 20 65  when b then 13 e
2bdb0 6c 73 65 20 74 31 2e 61 20 65 6e 64 29 20 66 72  lse t1.a end) fr
2bdc0 6f 6d 20 74 31 20 77 68 65 72 65 20 31 39 20 6e  om t1 where 19 n
2bdd0 6f 74 20 69 6e 20 28 63 2c 74 31 2e 66 2c 62 29  ot in (c,t1.f,b)
2bde0 29 2c 74 31 2e 61 29 2b 74 31 2e 64 20 69 6e 20  ),t1.a)+t1.d in 
2bdf0 28 73 65 6c 65 63 74 20 31 37 20 66 72 6f 6d 20  (select 17 from 
2be00 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
2be10 31 39 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20  19 from t1) and 
2be20 31 31 20 69 6e 20 28 31 33 2c 74 31 2e 63 2c 31  11 in (13,t1.c,1
2be30 37 29 20 6f 72 20 31 39 20 6e 6f 74 20 69 6e 20  7) or 19 not in 
2be40 28 74 31 2e 66 2c 61 2c 31 37 29 20 6f 72 20 74  (t1.f,a,17) or t
2be50 31 2e 65 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  1.e not between 
2be60 31 33 20 61 6e 64 20 66 20 61 6e 64 20 61 3e 3d  13 and f and a>=
2be70 64 29 29 2c 28 61 29 2d 31 37 2b 74 31 2e 66 29  d)),(a)-17+t1.f)
2be80 2b 74 31 2e 61 2b 31 37 20 66 72 6f 6d 20 74 31  +t1.a+17 from t1
2be90 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74   where not exist
2bea0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
2beb0 74 31 20 77 68 65 72 65 20 61 3e 74 31 2e 66 29  t1 where a>t1.f)
2bec0 29 2c 74 31 2e 62 29 20 46 52 4f 4d 20 74 31 20  ),t1.b) FROM t1 
2bed0 57 48 45 52 45 20 74 31 2e 61 2d 31 37 20 69 6e  WHERE t1.a-17 in
2bee0 20 28 73 65 6c 65 63 74 20 28 61 62 73 28 63 6f   (select (abs(co
2bef0 75 6e 74 28 2a 29 29 29 2d 63 61 73 65 20 63 61  unt(*)))-case ca
2bf00 73 65 20 63 61 73 65 20 61 62 73 28 61 62 73 28  se case abs(abs(
2bf10 63 6f 75 6e 74 28 2a 29 29 29 20 77 68 65 6e 20  count(*))) when 
2bf20 6d 69 6e 28 74 31 2e 66 29 20 74 68 65 6e 20 63  min(t1.f) then c
2bf30 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20 63 61 73  ount(*) else cas
2bf40 74 28 61 76 67 28 2b 74 31 2e 61 2b 28 65 29 20  t(avg(+t1.a+(e) 
2bf50 7c 20 31 39 2a 65 2b 74 31 2e 66 29 20 41 53 20  | 19*e+t1.f) AS 
2bf60 69 6e 74 65 67 65 72 29 20 65 6e 64 20 77 68 65  integer) end whe
2bf70 6e 20 61 62 73 28 2b 63 61 73 74 28 61 76 67 28  n abs(+cast(avg(
2bf80 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 7c  b) AS integer) |
2bf90 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
2bfa0 28 31 33 29 29 2a 2b 7e 20 2d 28 6d 69 6e 28 65  (13))*+~ -(min(e
2bfb0 29 29 20 7c 20 63 61 73 74 28 61 76 67 28 31 39  )) | cast(avg(19
2bfc0 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 20 74  ) AS integer)) t
2bfd0 68 65 6e 20 63 61 73 74 28 61 76 67 28 31 39 29  hen cast(avg(19)
2bfe0 20 41 53 20 69 6e 74 65 67 65 72 29 20 65 6c 73   AS integer) els
2bff0 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  e count(distinct
2c000 20 74 31 2e 63 29 20 65 6e 64 20 7c 20 6d 69 6e   t1.c) end | min
2c010 28 74 31 2e 64 29 20 77 68 65 6e 20 63 6f 75 6e  (t1.d) when coun
2c020 74 28 2a 29 20 74 68 65 6e 20 28 63 6f 75 6e 74  t(*) then (count
2c030 28 64 69 73 74 69 6e 63 74 20 64 29 29 20 65 6c  (distinct d)) el
2c040 73 65 20 28 6d 69 6e 28 31 31 29 29 20 65 6e 64  se (min(11)) end
2c050 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
2c060 65 6c 65 63 74 20 28 63 61 73 74 28 61 76 67 28  elect (cast(avg(
2c070 74 31 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72  t1.a) AS integer
2c080 29 29 20 66 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b  )) from t1)}.} {
2c090 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
2c0a0 70 72 2d 32 2e 32 34 31 20 7b 0a 20 20 64 62 20  pr-2.241 {.  db 
2c0b0 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 65 2d 63  eval {SELECT e-c
2c0c0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
2c0d0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
2c0e0 20 6d 61 78 28 31 39 29 20 66 72 6f 6d 20 74 31   max(19) from t1
2c0f0 20 77 68 65 72 65 20 28 63 6f 61 6c 65 73 63 65   where (coalesce
2c100 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73  ((select max(cas
2c110 65 20 31 31 20 77 68 65 6e 20 62 20 74 68 65 6e  e 11 when b then
2c120 20 31 33 20 65 6c 73 65 20 74 31 2e 61 20 65 6e   13 else t1.a en
2c130 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  d) from t1 where
2c140 20 31 39 20 6e 6f 74 20 69 6e 20 28 63 2c 74 31   19 not in (c,t1
2c150 2e 66 2c 62 29 29 2c 74 31 2e 61 29 2b 74 31 2e  .f,b)),t1.a)+t1.
2c160 64 20 69 6e 20 28 73 65 6c 65 63 74 20 31 37 20  d in (select 17 
2c170 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
2c180 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 29  lect 19 from t1)
2c190 20 61 6e 64 20 31 31 20 69 6e 20 28 31 33 2c 74   and 11 in (13,t
2c1a0 31 2e 63 2c 31 37 29 20 6f 72 20 31 39 20 6e 6f  1.c,17) or 19 no
2c1b0 74 20 69 6e 20 28 74 31 2e 66 2c 61 2c 31 37 29  t in (t1.f,a,17)
2c1c0 20 6f 72 20 74 31 2e 65 20 6e 6f 74 20 62 65 74   or t1.e not bet
2c1d0 77 65 65 6e 20 31 33 20 61 6e 64 20 66 20 61 6e  ween 13 and f an
2c1e0 64 20 61 3e 3d 64 29 29 2c 28 61 29 2d 31 37 2b  d a>=d)),(a)-17+
2c1f0 74 31 2e 66 29 2b 74 31 2e 61 2b 31 37 20 66 72  t1.f)+t1.a+17 fr
2c200 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
2c210 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20  exists(select 1 
2c220 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 61 3e  from t1 where a>
2c230 74 31 2e 66 29 29 2c 74 31 2e 62 29 20 46 52 4f  t1.f)),t1.b) FRO
2c240 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
2c250 74 31 2e 61 2d 31 37 20 69 6e 20 28 73 65 6c 65  t1.a-17 in (sele
2c260 63 74 20 28 61 62 73 28 63 6f 75 6e 74 28 2a 29  ct (abs(count(*)
2c270 29 29 2d 63 61 73 65 20 63 61 73 65 20 63 61 73  ))-case case cas
2c280 65 20 61 62 73 28 61 62 73 28 63 6f 75 6e 74 28  e abs(abs(count(
2c290 2a 29 29 29 20 77 68 65 6e 20 6d 69 6e 28 74 31  *))) when min(t1
2c2a0 2e 66 29 20 74 68 65 6e 20 63 6f 75 6e 74 28 2a  .f) then count(*
2c2b0 29 20 65 6c 73 65 20 63 61 73 74 28 61 76 67 28  ) else cast(avg(
2c2c0 2b 74 31 2e 61 2b 28 65 29 20 7c 20 31 39 2a 65  +t1.a+(e) | 19*e
2c2d0 2b 74 31 2e 66 29 20 41 53 20 69 6e 74 65 67 65  +t1.f) AS intege
2c2e0 72 29 20 65 6e 64 20 77 68 65 6e 20 61 62 73 28  r) end when abs(
2c2f0 2b 63 61 73 74 28 61 76 67 28 62 29 20 41 53 20  +cast(avg(b) AS 
2c300 69 6e 74 65 67 65 72 29 20 7c 20 63 6f 75 6e 74  integer) | count
2c310 28 64 69 73 74 69 6e 63 74 20 28 31 33 29 29 2a  (distinct (13))*
2c320 2b 7e 20 2d 28 6d 69 6e 28 65 29 29 20 7c 20 63  +~ -(min(e)) | c
2c330 61 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69  ast(avg(19) AS i
2c340 6e 74 65 67 65 72 29 29 20 74 68 65 6e 20 63 61  nteger)) then ca
2c350 73 74 28 61 76 67 28 31 39 29 20 41 53 20 69 6e  st(avg(19) AS in
2c360 74 65 67 65 72 29 20 65 6c 73 65 20 63 6f 75 6e  teger) else coun
2c370 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e 63 29  t(distinct t1.c)
2c380 20 65 6e 64 20 7c 20 6d 69 6e 28 74 31 2e 64 29   end | min(t1.d)
2c390 20 77 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20 74   when count(*) t
2c3a0 68 65 6e 20 28 63 6f 75 6e 74 28 64 69 73 74 69  hen (count(disti
2c3b0 6e 63 74 20 64 29 29 20 65 6c 73 65 20 28 6d 69  nct d)) else (mi
2c3c0 6e 28 31 31 29 29 20 65 6e 64 20 66 72 6f 6d 20  n(11)) end from 
2c3d0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
2c3e0 28 63 61 73 74 28 61 76 67 28 74 31 2e 61 29 20  (cast(avg(t1.a) 
2c3f0 41 53 20 69 6e 74 65 67 65 72 29 29 20 66 72 6f  AS integer)) fro
2c400 6d 20 74 31 29 29 7d 0a 7d 20 7b 33 36 34 7d 0a  m t1))}.} {364}.
2c410 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
2c420 2d 32 2e 32 34 32 20 7b 0a 20 20 64 62 20 65 76  -2.242 {.  db ev
2c430 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 63 6f 61  al {SELECT  -coa
2c440 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 61  lesce((select ca
2c450 73 65 20 77 68 65 6e 20 62 3e 31 39 20 7c 20 66  se when b>19 | f
2c460 2d 28 73 65 6c 65 63 74 20 61 62 73 28 6d 61 78  -(select abs(max
2c470 28 74 31 2e 62 2b 63 61 73 65 20 77 68 65 6e 20  (t1.b+case when 
2c480 65 3e 31 37 20 74 68 65 6e 20 31 31 20 65 6c 73  e>17 then 11 els
2c490 65 20 66 20 65 6e 64 29 2b 63 6f 75 6e 74 28 2a  e f end)+count(*
2c4a0 29 29 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20  )) from t1) and 
2c4b0 63 61 73 65 20 77 68 65 6e 20 28 31 39 3c 31 31  case when (19<11
2c4c0 2a 74 31 2e 64 2a 74 31 2e 62 29 20 74 68 65 6e  *t1.d*t1.b) then
2c4d0 20 31 33 20 65 6c 73 65 20 74 31 2e 65 20 65 6e   13 else t1.e en
2c4e0 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 20  d not between c 
2c4f0 61 6e 64 20 62 20 74 68 65 6e 20 64 2b 31 37 20  and b then d+17 
2c500 65 6c 73 65 20 63 20 65 6e 64 2d 66 20 66 72 6f  else c end-f fro
2c510 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 62 3e  m t1 where t1.b>
2c520 3d 66 29 2c 74 31 2e 63 29 2b 31 37 2d 61 20 46  =f),t1.c)+17-a F
2c530 52 4f 4d 20 74 31 20 57 48 45 52 45 20 2b 63 20  ROM t1 WHERE +c 
2c540 69 6e 20 28 2b 7e 61 2b 63 61 73 65 20 77 68 65  in (+~a+case whe
2c550 6e 20 28 28 63 61 73 65 20 74 31 2e 64 20 77 68  n ((case t1.d wh
2c560 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
2c570 65 63 74 20 66 20 66 72 6f 6d 20 74 31 20 77 68  ect f from t1 wh
2c580 65 72 65 20 65 20 69 6e 20 28 73 65 6c 65 63 74  ere e in (select
2c590 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
2c5a0 74 31 2e 65 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.e) from t1 un
2c5b0 69 6f 6e 20 73 65 6c 65 63 74 20 6d 69 6e 28 28  ion select min((
2c5c0 61 62 73 28 74 31 2e 63 29 2f 61 62 73 28 65 20  abs(t1.c)/abs(e 
2c5d0 7c 20 62 29 29 20 7c 20 64 2a 20 2d 74 31 2e 64  | b)) | d* -t1.d
2c5e0 29 20 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 65  ) from t1)),t1.e
2c5f0 29 2b 61 20 74 68 65 6e 20 63 20 65 6c 73 65 20  )+a then c else 
2c600 62 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74  b end in (select
2c610 20 20 2d 63 61 73 74 28 61 76 67 28 74 31 2e 63    -cast(avg(t1.c
2c620 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d 7e 63  ) AS integer)-~c
2c630 61 73 74 28 61 76 67 28 31 31 29 20 41 53 20 69  ast(avg(11) AS i
2c640 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 20  nteger) from t1 
2c650 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 20 2d 63  union select  -c
2c660 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31 39  ount(distinct 19
2c670 29 20 66 72 6f 6d 20 74 31 29 29 29 20 74 68 65  ) from t1))) the
2c680 6e 20 20 2d 65 2a 31 39 20 65 6c 73 65 20 31 33  n  -e*19 else 13
2c690 20 65 6e 64 2c 74 31 2e 61 2c 64 29 7d 0a 7d 20   end,t1.a,d)}.} 
2c6a0 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
2c6b0 78 70 72 2d 32 2e 32 34 33 20 7b 0a 20 20 64 62  xpr-2.243 {.  db
2c6c0 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d   eval {SELECT  -
2c6d0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
2c6e0 20 63 61 73 65 20 77 68 65 6e 20 62 3e 31 39 20   case when b>19 
2c6f0 7c 20 66 2d 28 73 65 6c 65 63 74 20 61 62 73 28  | f-(select abs(
2c700 6d 61 78 28 74 31 2e 62 2b 63 61 73 65 20 77 68  max(t1.b+case wh
2c710 65 6e 20 65 3e 31 37 20 74 68 65 6e 20 31 31 20  en e>17 then 11 
2c720 65 6c 73 65 20 66 20 65 6e 64 29 2b 63 6f 75 6e  else f end)+coun
2c730 74 28 2a 29 29 20 66 72 6f 6d 20 74 31 29 20 61  t(*)) from t1) a
2c740 6e 64 20 63 61 73 65 20 77 68 65 6e 20 28 31 39  nd case when (19
2c750 3c 31 31 2a 74 31 2e 64 2a 74 31 2e 62 29 20 74  <11*t1.d*t1.b) t
2c760 68 65 6e 20 31 33 20 65 6c 73 65 20 74 31 2e 65  hen 13 else t1.e
2c770 20 65 6e 64 20 6e 6f 74 20 62 65 74 77 65 65 6e   end not between
2c780 20 63 20 61 6e 64 20 62 20 74 68 65 6e 20 64 2b   c and b then d+
2c790 31 37 20 65 6c 73 65 20 63 20 65 6e 64 2d 66 20  17 else c end-f 
2c7a0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
2c7b0 2e 62 3e 3d 66 29 2c 74 31 2e 63 29 2b 31 37 2d  .b>=f),t1.c)+17-
2c7c0 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
2c7d0 4e 4f 54 20 28 2b 63 20 69 6e 20 28 2b 7e 61 2b  NOT (+c in (+~a+
2c7e0 63 61 73 65 20 77 68 65 6e 20 28 28 63 61 73 65  case when ((case
2c7f0 20 74 31 2e 64 20 77 68 65 6e 20 63 6f 61 6c 65   t1.d when coale
2c800 73 63 65 28 28 73 65 6c 65 63 74 20 66 20 66 72  sce((select f fr
2c810 6f 6d 20 74 31 20 77 68 65 72 65 20 65 20 69 6e  om t1 where e in
2c820 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64   (select count(d
2c830 69 73 74 69 6e 63 74 20 74 31 2e 65 29 20 66 72  istinct t1.e) fr
2c840 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
2c850 63 74 20 6d 69 6e 28 28 61 62 73 28 74 31 2e 63  ct min((abs(t1.c
2c860 29 2f 61 62 73 28 65 20 7c 20 62 29 29 20 7c 20  )/abs(e | b)) | 
2c870 64 2a 20 2d 74 31 2e 64 29 20 66 72 6f 6d 20 74  d* -t1.d) from t
2c880 31 29 29 2c 74 31 2e 65 29 2b 61 20 74 68 65 6e  1)),t1.e)+a then
2c890 20 63 20 65 6c 73 65 20 62 20 65 6e 64 20 69 6e   c else b end in
2c8a0 20 28 73 65 6c 65 63 74 20 20 2d 63 61 73 74 28   (select  -cast(
2c8b0 61 76 67 28 74 31 2e 63 29 20 41 53 20 69 6e 74  avg(t1.c) AS int
2c8c0 65 67 65 72 29 2d 7e 63 61 73 74 28 61 76 67 28  eger)-~cast(avg(
2c8d0 31 31 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  11) AS integer) 
2c8e0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
2c8f0 6c 65 63 74 20 20 2d 63 6f 75 6e 74 28 64 69 73  lect  -count(dis
2c900 74 69 6e 63 74 20 31 39 29 20 66 72 6f 6d 20 74  tinct 19) from t
2c910 31 29 29 29 20 74 68 65 6e 20 20 2d 65 2a 31 39  1))) then  -e*19
2c920 20 65 6c 73 65 20 31 33 20 65 6e 64 2c 74 31 2e   else 13 end,t1.
2c930 61 2c 64 29 29 7d 0a 7d 20 7b 2d 33 38 33 7d 0a  a,d))}.} {-383}.
2c940 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
2c950 2d 32 2e 32 34 34 20 7b 0a 20 20 64 62 20 65 76  -2.244 {.  db ev
2c960 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 63 6f 61  al {SELECT  -coa
2c970 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 61  lesce((select ca
2c980 73 65 20 77 68 65 6e 20 62 3e 31 39 20 26 20 66  se when b>19 & f
2c990 2d 28 73 65 6c 65 63 74 20 61 62 73 28 6d 61 78  -(select abs(max
2c9a0 28 74 31 2e 62 2b 63 61 73 65 20 77 68 65 6e 20  (t1.b+case when 
2c9b0 65 3e 31 37 20 74 68 65 6e 20 31 31 20 65 6c 73  e>17 then 11 els
2c9c0 65 20 66 20 65 6e 64 29 2b 63 6f 75 6e 74 28 2a  e f end)+count(*
2c9d0 29 29 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20  )) from t1) and 
2c9e0 63 61 73 65 20 77 68 65 6e 20 28 31 39 3c 31 31  case when (19<11
2c9f0 2a 74 31 2e 64 2a 74 31 2e 62 29 20 74 68 65 6e  *t1.d*t1.b) then
2ca00 20 31 33 20 65 6c 73 65 20 74 31 2e 65 20 65 6e   13 else t1.e en
2ca10 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 20  d not between c 
2ca20 61 6e 64 20 62 20 74 68 65 6e 20 64 2b 31 37 20  and b then d+17 
2ca30 65 6c 73 65 20 63 20 65 6e 64 2d 66 20 66 72 6f  else c end-f fro
2ca40 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 62 3e  m t1 where t1.b>
2ca50 3d 66 29 2c 74 31 2e 63 29 2b 31 37 2d 61 20 46  =f),t1.c)+17-a F
2ca60 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
2ca70 20 28 2b 63 20 69 6e 20 28 2b 7e 61 2b 63 61 73   (+c in (+~a+cas
2ca80 65 20 77 68 65 6e 20 28 28 63 61 73 65 20 74 31  e when ((case t1
2ca90 2e 64 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65  .d when coalesce
2caa0 28 28 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20  ((select f from 
2cab0 74 31 20 77 68 65 72 65 20 65 20 69 6e 20 28 73  t1 where e in (s
2cac0 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
2cad0 69 6e 63 74 20 74 31 2e 65 29 20 66 72 6f 6d 20  inct t1.e) from 
2cae0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
2caf0 6d 69 6e 28 28 61 62 73 28 74 31 2e 63 29 2f 61  min((abs(t1.c)/a
2cb00 62 73 28 65 20 7c 20 62 29 29 20 7c 20 64 2a 20  bs(e | b)) | d* 
2cb10 2d 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 29 29  -t1.d) from t1))
2cb20 2c 74 31 2e 65 29 2b 61 20 74 68 65 6e 20 63 20  ,t1.e)+a then c 
2cb30 65 6c 73 65 20 62 20 65 6e 64 20 69 6e 20 28 73  else b end in (s
2cb40 65 6c 65 63 74 20 20 2d 63 61 73 74 28 61 76 67  elect  -cast(avg
2cb50 28 74 31 2e 63 29 20 41 53 20 69 6e 74 65 67 65  (t1.c) AS intege
2cb60 72 29 2d 7e 63 61 73 74 28 61 76 67 28 31 31 29  r)-~cast(avg(11)
2cb70 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
2cb80 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
2cb90 74 20 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e  t  -count(distin
2cba0 63 74 20 31 39 29 20 66 72 6f 6d 20 74 31 29 29  ct 19) from t1))
2cbb0 29 20 74 68 65 6e 20 20 2d 65 2a 31 39 20 65 6c  ) then  -e*19 el
2cbc0 73 65 20 31 33 20 65 6e 64 2c 74 31 2e 61 2c 64  se 13 end,t1.a,d
2cbd0 29 29 7d 0a 7d 20 7b 2d 33 38 33 7d 0a 64 6f 5f  ))}.} {-383}.do_
2cbe0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
2cbf0 32 34 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  245 {.  db eval 
2cc00 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65  {SELECT case whe
2cc10 6e 20 74 31 2e 62 3e 3d 2b 28 61 62 73 28 74 31  n t1.b>=+(abs(t1
2cc20 2e 65 29 2f 61 62 73 28 63 6f 61 6c 65 73 63 65  .e)/abs(coalesce
2cc30 28 28 73 65 6c 65 63 74 20 63 20 66 72 6f 6d 20  ((select c from 
2cc40 74 31 20 77 68 65 72 65 20 31 37 3c 3d 2b 28 65  t1 where 17<=+(e
2cc50 29 29 2c 28 65 29 2d 2b 7e 31 31 2a 31 37 2b 74  )),(e)-+~11*17+t
2cc60 31 2e 64 2d 65 20 7c 20 2b 63 6f 61 6c 65 73 63  1.d-e | +coalesc
2cc70 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31  e((select max(t1
2cc80 2e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  .d) from t1 wher
2cc90 65 20 66 3e 65 29 2c 74 31 2e 61 29 2a 62 20 7c  e f>e),t1.a)*b |
2cca0 20 28 65 29 29 29 29 2d 74 31 2e 61 20 61 6e 64   (e))))-t1.a and
2ccb0 20 63 3e 3d 74 31 2e 64 20 6f 72 20 28 31 37 20   c>=t1.d or (17 
2ccc0 6e 6f 74 20 62 65 74 77 65 65 6e 20 65 20 61 6e  not between e an
2ccd0 64 20 62 29 20 74 68 65 6e 20 74 31 2e 65 20 65  d b) then t1.e e
2cce0 6c 73 65 20 64 20 65 6e 64 20 46 52 4f 4d 20 74  lse d end FROM t
2ccf0 31 20 57 48 45 52 45 20 65 78 69 73 74 73 28 73  1 WHERE exists(s
2cd00 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
2cd10 77 68 65 72 65 20 28 31 39 2d 28 28 31 37 29 29  where (19-((17))
2cd20 2b 28 62 29 20 69 6e 20 28 73 65 6c 65 63 74 20  +(b) in (select 
2cd30 64 2a 65 2a 61 20 66 72 6f 6d 20 74 31 20 75 6e  d*e*a from t1 un
2cd40 69 6f 6e 20 73 65 6c 65 63 74 20 7e 31 39 20 66  ion select ~19 f
2cd50 72 6f 6d 20 74 31 29 29 20 61 6e 64 20 63 61 73  rom t1)) and cas
2cd60 65 20 62 2d 28 61 62 73 28 63 61 73 65 20 61 20  e b-(abs(case a 
2cd70 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73  when coalesce((s
2cd80 65 6c 65 63 74 20 6d 61 78 28 31 39 29 20 66 72  elect max(19) fr
2cd90 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69 73  om t1 where exis
2cda0 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
2cdb0 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73   t1 where exists
2cdc0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
2cdd0 31 20 77 68 65 72 65 20 62 20 6e 6f 74 20 62 65  1 where b not be
2cde0 74 77 65 65 6e 20 65 20 61 6e 64 20 28 74 31 2e  tween e and (t1.
2cdf0 66 29 20 6f 72 20 61 20 6e 6f 74 20 69 6e 20 28  f) or a not in (
2ce00 74 31 2e 63 2c 31 37 2c 74 31 2e 64 29 29 29 29  t1.c,17,t1.d))))
2ce10 2c 63 61 73 65 20 74 31 2e 62 20 77 68 65 6e 20  ,case t1.b when 
2ce20 20 2d 64 20 74 68 65 6e 20 31 33 20 65 6c 73 65   -d then 13 else
2ce30 20 31 33 20 65 6e 64 29 2a 61 2b 74 31 2e 63 20   13 end)*a+t1.c 
2ce40 74 68 65 6e 20 65 20 65 6c 73 65 20 61 20 65 6e  then e else a en
2ce50 64 29 2f 61 62 73 28 74 31 2e 64 29 29 2a 74 31  d)/abs(t1.d))*t1
2ce60 2e 65 20 77 68 65 6e 20 20 2d 31 33 20 74 68 65  .e when  -13 the
2ce70 6e 20 74 31 2e 63 20 65 6c 73 65 20 31 39 20 65  n t1.c else 19 e
2ce80 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 2b 63  nd in (select +c
2ce90 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 65 29  ount(distinct e)
2cea0 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
2ceb0 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66  elect count(*) f
2cec0 72 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 7d 0a 64  rom t1))}.} {}.d
2ced0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
2cee0 32 2e 32 34 36 20 7b 0a 20 20 64 62 20 65 76 61  2.246 {.  db eva
2cef0 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77  l {SELECT case w
2cf00 68 65 6e 20 74 31 2e 62 3e 3d 2b 28 61 62 73 28  hen t1.b>=+(abs(
2cf10 74 31 2e 65 29 2f 61 62 73 28 63 6f 61 6c 65 73  t1.e)/abs(coales
2cf20 63 65 28 28 73 65 6c 65 63 74 20 63 20 66 72 6f  ce((select c fro
2cf30 6d 20 74 31 20 77 68 65 72 65 20 31 37 3c 3d 2b  m t1 where 17<=+
2cf40 28 65 29 29 2c 28 65 29 2d 2b 7e 31 31 2a 31 37  (e)),(e)-+~11*17
2cf50 2b 74 31 2e 64 2d 65 20 7c 20 2b 63 6f 61 6c 65  +t1.d-e | +coale
2cf60 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
2cf70 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.d) from t1 wh
2cf80 65 72 65 20 66 3e 65 29 2c 74 31 2e 61 29 2a 62  ere f>e),t1.a)*b
2cf90 20 7c 20 28 65 29 29 29 29 2d 74 31 2e 61 20 61   | (e))))-t1.a a
2cfa0 6e 64 20 63 3e 3d 74 31 2e 64 20 6f 72 20 28 31  nd c>=t1.d or (1
2cfb0 37 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 65 20  7 not between e 
2cfc0 61 6e 64 20 62 29 20 74 68 65 6e 20 74 31 2e 65  and b) then t1.e
2cfd0 20 65 6c 73 65 20 64 20 65 6e 64 20 46 52 4f 4d   else d end FROM
2cfe0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 65   t1 WHERE NOT (e
2cff0 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
2d000 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 31 39  rom t1 where (19
2d010 2d 28 28 31 37 29 29 2b 28 62 29 20 69 6e 20 28  -((17))+(b) in (
2d020 73 65 6c 65 63 74 20 64 2a 65 2a 61 20 66 72 6f  select d*e*a fro
2d030 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
2d040 74 20 7e 31 39 20 66 72 6f 6d 20 74 31 29 29 20  t ~19 from t1)) 
2d050 61 6e 64 20 63 61 73 65 20 62 2d 28 61 62 73 28  and case b-(abs(
2d060 63 61 73 65 20 61 20 77 68 65 6e 20 63 6f 61 6c  case a when coal
2d070 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
2d080 28 31 39 29 20 66 72 6f 6d 20 74 31 20 77 68 65  (19) from t1 whe
2d090 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  re exists(select
2d0a0 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
2d0b0 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
2d0c0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62   from t1 where b
2d0d0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 65 20 61   not between e a
2d0e0 6e 64 20 28 74 31 2e 66 29 20 6f 72 20 61 20 6e  nd (t1.f) or a n
2d0f0 6f 74 20 69 6e 20 28 74 31 2e 63 2c 31 37 2c 74  ot in (t1.c,17,t
2d100 31 2e 64 29 29 29 29 2c 63 61 73 65 20 74 31 2e  1.d)))),case t1.
2d110 62 20 77 68 65 6e 20 20 2d 64 20 74 68 65 6e 20  b when  -d then 
2d120 31 33 20 65 6c 73 65 20 31 33 20 65 6e 64 29 2a  13 else 13 end)*
2d130 61 2b 74 31 2e 63 20 74 68 65 6e 20 65 20 65 6c  a+t1.c then e el
2d140 73 65 20 61 20 65 6e 64 29 2f 61 62 73 28 74 31  se a end)/abs(t1
2d150 2e 64 29 29 2a 74 31 2e 65 20 77 68 65 6e 20 20  .d))*t1.e when  
2d160 2d 31 33 20 74 68 65 6e 20 74 31 2e 63 20 65 6c  -13 then t1.c el
2d170 73 65 20 31 39 20 65 6e 64 20 69 6e 20 28 73 65  se 19 end in (se
2d180 6c 65 63 74 20 2b 63 6f 75 6e 74 28 64 69 73 74  lect +count(dist
2d190 69 6e 63 74 20 65 29 20 66 72 6f 6d 20 74 31 20  inct e) from t1 
2d1a0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75  union select cou
2d1b0 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 29 29  nt(*) from t1)))
2d1c0 7d 0a 7d 20 7b 35 30 30 7d 0a 64 6f 5f 74 65 73  }.} {500}.do_tes
2d1d0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 34 37  t randexpr-2.247
2d1e0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
2d1f0 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 74  LECT case when t
2d200 31 2e 62 3e 3d 2b 28 61 62 73 28 74 31 2e 65 29  1.b>=+(abs(t1.e)
2d210 2f 61 62 73 28 63 6f 61 6c 65 73 63 65 28 28 73  /abs(coalesce((s
2d220 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 20  elect c from t1 
2d230 77 68 65 72 65 20 31 37 3c 3d 2b 28 65 29 29 2c  where 17<=+(e)),
2d240 28 65 29 2d 2b 7e 31 31 2a 31 37 2b 74 31 2e 64  (e)-+~11*17+t1.d
2d250 2d 65 20 26 20 2b 63 6f 61 6c 65 73 63 65 28 28  -e & +coalesce((
2d260 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 64 29  select max(t1.d)
2d270 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66   from t1 where f
2d280 3e 65 29 2c 74 31 2e 61 29 2a 62 20 26 20 28 65  >e),t1.a)*b & (e
2d290 29 29 29 29 2d 74 31 2e 61 20 61 6e 64 20 63 3e  ))))-t1.a and c>
2d2a0 3d 74 31 2e 64 20 6f 72 20 28 31 37 20 6e 6f 74  =t1.d or (17 not
2d2b0 20 62 65 74 77 65 65 6e 20 65 20 61 6e 64 20 62   between e and b
2d2c0 29 20 74 68 65 6e 20 74 31 2e 65 20 65 6c 73 65  ) then t1.e else
2d2d0 20 64 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57   d end FROM t1 W
2d2e0 48 45 52 45 20 4e 4f 54 20 28 65 78 69 73 74 73  HERE NOT (exists
2d2f0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
2d300 31 20 77 68 65 72 65 20 28 31 39 2d 28 28 31 37  1 where (19-((17
2d310 29 29 2b 28 62 29 20 69 6e 20 28 73 65 6c 65 63  ))+(b) in (selec
2d320 74 20 64 2a 65 2a 61 20 66 72 6f 6d 20 74 31 20  t d*e*a from t1 
2d330 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 7e 31 39  union select ~19
2d340 20 66 72 6f 6d 20 74 31 29 29 20 61 6e 64 20 63   from t1)) and c
2d350 61 73 65 20 62 2d 28 61 62 73 28 63 61 73 65 20  ase b-(abs(case 
2d360 61 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28  a when coalesce(
2d370 28 73 65 6c 65 63 74 20 6d 61 78 28 31 39 29 20  (select max(19) 
2d380 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78  from t1 where ex
2d390 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
2d3a0 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69 73  om t1 where exis
2d3b0 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
2d3c0 20 74 31 20 77 68 65 72 65 20 62 20 6e 6f 74 20   t1 where b not 
2d3d0 62 65 74 77 65 65 6e 20 65 20 61 6e 64 20 28 74  between e and (t
2d3e0 31 2e 66 29 20 6f 72 20 61 20 6e 6f 74 20 69 6e  1.f) or a not in
2d3f0 20 28 74 31 2e 63 2c 31 37 2c 74 31 2e 64 29 29   (t1.c,17,t1.d))
2d400 29 29 2c 63 61 73 65 20 74 31 2e 62 20 77 68 65  )),case t1.b whe
2d410 6e 20 20 2d 64 20 74 68 65 6e 20 31 33 20 65 6c  n  -d then 13 el
2d420 73 65 20 31 33 20 65 6e 64 29 2a 61 2b 74 31 2e  se 13 end)*a+t1.
2d430 63 20 74 68 65 6e 20 65 20 65 6c 73 65 20 61 20  c then e else a 
2d440 65 6e 64 29 2f 61 62 73 28 74 31 2e 64 29 29 2a  end)/abs(t1.d))*
2d450 74 31 2e 65 20 77 68 65 6e 20 20 2d 31 33 20 74  t1.e when  -13 t
2d460 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 31 39  hen t1.c else 19
2d470 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20   end in (select 
2d480 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  +count(distinct 
2d490 65 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  e) from t1 union
2d4a0 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29   select count(*)
2d4b0 20 66 72 6f 6d 20 74 31 29 29 29 7d 0a 7d 20 7b   from t1)))}.} {
2d4c0 35 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  500}.do_test ran
2d4d0 64 65 78 70 72 2d 32 2e 32 34 38 20 7b 0a 20 20  dexpr-2.248 {.  
2d4e0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
2d4f0 63 61 73 65 20 77 68 65 6e 20 31 31 20 69 6e 20  case when 11 in 
2d500 28 73 65 6c 65 63 74 20 6d 69 6e 28 2b 74 31 2e  (select min(+t1.
2d510 65 29 2a 20 2d 6d 61 78 28 61 29 2b 63 6f 75 6e  e)* -max(a)+coun
2d520 74 28 64 69 73 74 69 6e 63 74 20 64 2a 31 31 2a  t(distinct d*11*
2d530 63 29 2a 28 63 6f 75 6e 74 28 64 69 73 74 69 6e  c)*(count(distin
2d540 63 74 20 28 65 29 29 29 20 7c 20 28 20 2d 6d 69  ct (e))) | ( -mi
2d550 6e 28 74 31 2e 62 29 29 20 7c 20 63 6f 75 6e 74  n(t1.b)) | count
2d560 28 64 69 73 74 69 6e 63 74 20 31 39 29 20 7c 20  (distinct 19) | 
2d570 28 6d 61 78 28 74 31 2e 66 29 29 2d 6d 61 78 28  (max(t1.f))-max(
2d580 74 31 2e 62 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.b) from t1 un
2d590 69 6f 6e 20 73 65 6c 65 63 74 20 28 6d 69 6e 28  ion select (min(
2d5a0 31 39 29 29 20 66 72 6f 6d 20 74 31 29 20 74 68  19)) from t1) th
2d5b0 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
2d5c0 65 63 74 20 6d 61 78 28 31 37 29 20 66 72 6f 6d  ect max(17) from
2d5d0 20 74 31 20 77 68 65 72 65 20 20 2d 31 37 3d 31   t1 where  -17=1
2d5e0 33 20 6f 72 20 63 20 69 6e 20 28 73 65 6c 65 63  3 or c in (selec
2d5f0 74 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 75  t t1.d from t1 u
2d600 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64 20 66 72  nion select d fr
2d610 6f 6d 20 74 31 29 29 2c 62 29 2a 74 31 2e 62 2d  om t1)),b)*t1.b-
2d620 61 2b 31 39 20 77 68 65 6e 20 74 31 2e 64 3c 28  a+19 when t1.d<(
2d630 64 29 20 74 68 65 6e 20 28 64 29 20 65 6c 73 65  d) then (d) else
2d640 20 31 39 20 65 6e 64 20 46 52 4f 4d 20 74 31 20   19 end FROM t1 
2d650 57 48 45 52 45 20 63 61 73 65 20 77 68 65 6e 20  WHERE case when 
2d660 63 61 73 65 20 77 68 65 6e 20 74 31 2e 63 20 6e  case when t1.c n
2d670 6f 74 20 69 6e 20 28 66 2c 31 39 2c 62 29 20 74  ot in (f,19,b) t
2d680 68 65 6e 20 74 31 2e 64 2d 74 31 2e 63 2d 63 61  hen t1.d-t1.c-ca
2d690 73 65 20 77 68 65 6e 20 31 37 3c 3e 74 31 2e 61  se when 17<>t1.a
2d6a0 20 74 68 65 6e 20 20 2d 28 61 62 73 28 28 73 65   then  -(abs((se
2d6b0 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 62 29  lect cast(avg(b)
2d6c0 20 41 53 20 69 6e 74 65 67 65 72 29 2d 20 2d 6d   AS integer)- -m
2d6d0 61 78 28 74 31 2e 63 29 20 66 72 6f 6d 20 74 31  ax(t1.c) from t1
2d6e0 29 29 2f 61 62 73 28 74 31 2e 63 29 29 20 65 6c  ))/abs(t1.c)) el
2d6f0 73 65 20 74 31 2e 66 20 65 6e 64 2d 31 37 20 7c  se t1.f end-17 |
2d700 20 31 39 20 77 68 65 6e 20 65 78 69 73 74 73 28   19 when exists(
2d710 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
2d720 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73 65   where exists(se
2d730 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
2d740 68 65 72 65 20 28 65 20 62 65 74 77 65 65 6e 20  here (e between 
2d750 31 33 20 61 6e 64 20 28 74 31 2e 61 29 29 29 20  13 and (t1.a))) 
2d760 61 6e 64 20 65 3c 3d 74 31 2e 63 29 20 74 68 65  and e<=t1.c) the
2d770 6e 20 66 20 65 6c 73 65 20 74 31 2e 61 20 65 6e  n f else t1.a en
2d780 64 3e 3d 31 31 20 74 68 65 6e 20 63 20 77 68 65  d>=11 then c whe
2d790 6e 20 66 3c 61 20 74 68 65 6e 20 74 31 2e 62 20  n f<a then t1.b 
2d7a0 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 3d 74 31  else t1.e end=t1
2d7b0 2e 63 7d 0a 7d 20 7b 31 39 7d 0a 64 6f 5f 74 65  .c}.} {19}.do_te
2d7c0 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 34  st randexpr-2.24
2d7d0 39 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  9 {.  db eval {S
2d7e0 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20  ELECT case when 
2d7f0 31 31 20 69 6e 20 28 73 65 6c 65 63 74 20 6d 69  11 in (select mi
2d800 6e 28 2b 74 31 2e 65 29 2a 20 2d 6d 61 78 28 61  n(+t1.e)* -max(a
2d810 29 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  )+count(distinct
2d820 20 64 2a 31 31 2a 63 29 2a 28 63 6f 75 6e 74 28   d*11*c)*(count(
2d830 64 69 73 74 69 6e 63 74 20 28 65 29 29 29 20 7c  distinct (e))) |
2d840 20 28 20 2d 6d 69 6e 28 74 31 2e 62 29 29 20 7c   ( -min(t1.b)) |
2d850 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
2d860 31 39 29 20 7c 20 28 6d 61 78 28 74 31 2e 66 29  19) | (max(t1.f)
2d870 29 2d 6d 61 78 28 74 31 2e 62 29 20 66 72 6f 6d  )-max(t1.b) from
2d880 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
2d890 20 28 6d 69 6e 28 31 39 29 29 20 66 72 6f 6d 20   (min(19)) from 
2d8a0 74 31 29 20 74 68 65 6e 20 63 6f 61 6c 65 73 63  t1) then coalesc
2d8b0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31 37  e((select max(17
2d8c0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
2d8d0 20 2d 31 37 3d 31 33 20 6f 72 20 63 20 69 6e 20   -17=13 or c in 
2d8e0 28 73 65 6c 65 63 74 20 74 31 2e 64 20 66 72 6f  (select t1.d fro
2d8f0 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
2d900 74 20 64 20 66 72 6f 6d 20 74 31 29 29 2c 62 29  t d from t1)),b)
2d910 2a 74 31 2e 62 2d 61 2b 31 39 20 77 68 65 6e 20  *t1.b-a+19 when 
2d920 74 31 2e 64 3c 28 64 29 20 74 68 65 6e 20 28 64  t1.d<(d) then (d
2d930 29 20 65 6c 73 65 20 31 39 20 65 6e 64 20 46 52  ) else 19 end FR
2d940 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
2d950 28 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20  (case when case 
2d960 77 68 65 6e 20 74 31 2e 63 20 6e 6f 74 20 69 6e  when t1.c not in
2d970 20 28 66 2c 31 39 2c 62 29 20 74 68 65 6e 20 74   (f,19,b) then t
2d980 31 2e 64 2d 74 31 2e 63 2d 63 61 73 65 20 77 68  1.d-t1.c-case wh
2d990 65 6e 20 31 37 3c 3e 74 31 2e 61 20 74 68 65 6e  en 17<>t1.a then
2d9a0 20 20 2d 28 61 62 73 28 28 73 65 6c 65 63 74 20    -(abs((select 
2d9b0 63 61 73 74 28 61 76 67 28 62 29 20 41 53 20 69  cast(avg(b) AS i
2d9c0 6e 74 65 67 65 72 29 2d 20 2d 6d 61 78 28 74 31  nteger)- -max(t1
2d9d0 2e 63 29 20 66 72 6f 6d 20 74 31 29 29 2f 61 62  .c) from t1))/ab
2d9e0 73 28 74 31 2e 63 29 29 20 65 6c 73 65 20 74 31  s(t1.c)) else t1
2d9f0 2e 66 20 65 6e 64 2d 31 37 20 7c 20 31 39 20 77  .f end-17 | 19 w
2da00 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c 65 63  hen exists(selec
2da10 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
2da20 65 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  e exists(select 
2da30 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
2da40 28 65 20 62 65 74 77 65 65 6e 20 31 33 20 61 6e  (e between 13 an
2da50 64 20 28 74 31 2e 61 29 29 29 20 61 6e 64 20 65  d (t1.a))) and e
2da60 3c 3d 74 31 2e 63 29 20 74 68 65 6e 20 66 20 65  <=t1.c) then f e
2da70 6c 73 65 20 74 31 2e 61 20 65 6e 64 3e 3d 31 31  lse t1.a end>=11
2da80 20 74 68 65 6e 20 63 20 77 68 65 6e 20 66 3c 61   then c when f<a
2da90 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20   then t1.b else 
2daa0 74 31 2e 65 20 65 6e 64 3d 74 31 2e 63 29 7d 0a  t1.e end=t1.c)}.
2dab0 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  } {}.do_test ran
2dac0 64 65 78 70 72 2d 32 2e 32 35 30 20 7b 0a 20 20  dexpr-2.250 {.  
2dad0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
2dae0 63 61 73 65 20 77 68 65 6e 20 31 31 20 69 6e 20  case when 11 in 
2daf0 28 73 65 6c 65 63 74 20 6d 69 6e 28 2b 74 31 2e  (select min(+t1.
2db00 65 29 2a 20 2d 6d 61 78 28 61 29 2b 63 6f 75 6e  e)* -max(a)+coun
2db10 74 28 64 69 73 74 69 6e 63 74 20 64 2a 31 31 2a  t(distinct d*11*
2db20 63 29 2a 28 63 6f 75 6e 74 28 64 69 73 74 69 6e  c)*(count(distin
2db30 63 74 20 28 65 29 29 29 20 26 20 28 20 2d 6d 69  ct (e))) & ( -mi
2db40 6e 28 74 31 2e 62 29 29 20 26 20 63 6f 75 6e 74  n(t1.b)) & count
2db50 28 64 69 73 74 69 6e 63 74 20 31 39 29 20 26 20  (distinct 19) & 
2db60 28 6d 61 78 28 74 31 2e 66 29 29 2d 6d 61 78 28  (max(t1.f))-max(
2db70 74 31 2e 62 29 20 66 72 6f 6d 20 74 31 20 75 6e  t1.b) from t1 un
2db80 69 6f 6e 20 73 65 6c 65 63 74 20 28 6d 69 6e 28  ion select (min(
2db90 31 39 29 29 20 66 72 6f 6d 20 74 31 29 20 74 68  19)) from t1) th
2dba0 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
2dbb0 65 63 74 20 6d 61 78 28 31 37 29 20 66 72 6f 6d  ect max(17) from
2dbc0 20 74 31 20 77 68 65 72 65 20 20 2d 31 37 3d 31   t1 where  -17=1
2dbd0 33 20 6f 72 20 63 20 69 6e 20 28 73 65 6c 65 63  3 or c in (selec
2dbe0 74 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 75  t t1.d from t1 u
2dbf0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64 20 66 72  nion select d fr
2dc00 6f 6d 20 74 31 29 29 2c 62 29 2a 74 31 2e 62 2d  om t1)),b)*t1.b-
2dc10 61 2b 31 39 20 77 68 65 6e 20 74 31 2e 64 3c 28  a+19 when t1.d<(
2dc20 64 29 20 74 68 65 6e 20 28 64 29 20 65 6c 73 65  d) then (d) else
2dc30 20 31 39 20 65 6e 64 20 46 52 4f 4d 20 74 31 20   19 end FROM t1 
2dc40 57 48 45 52 45 20 63 61 73 65 20 77 68 65 6e 20  WHERE case when 
2dc50 63 61 73 65 20 77 68 65 6e 20 74 31 2e 63 20 6e  case when t1.c n
2dc60 6f 74 20 69 6e 20 28 66 2c 31 39 2c 62 29 20 74  ot in (f,19,b) t
2dc70 68 65 6e 20 74 31 2e 64 2d 74 31 2e 63 2d 63 61  hen t1.d-t1.c-ca
2dc80 73 65 20 77 68 65 6e 20 31 37 3c 3e 74 31 2e 61  se when 17<>t1.a
2dc90 20 74 68 65 6e 20 20 2d 28 61 62 73 28 28 73 65   then  -(abs((se
2dca0 6c 65 63 74 20 63 61 73 74 28 61 76 67 28 62 29  lect cast(avg(b)
2dcb0 20 41 53 20 69 6e 74 65 67 65 72 29 2d 20 2d 6d   AS integer)- -m
2dcc0 61 78 28 74 31 2e 63 29 20 66 72 6f 6d 20 74 31  ax(t1.c) from t1
2dcd0 29 29 2f 61 62 73 28 74 31 2e 63 29 29 20 65 6c  ))/abs(t1.c)) el
2dce0 73 65 20 74 31 2e 66 20 65 6e 64 2d 31 37 20 7c  se t1.f end-17 |
2dcf0 20 31 39 20 77 68 65 6e 20 65 78 69 73 74 73 28   19 when exists(
2dd00 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
2dd10 20 77 68 65 72 65 20 65 78 69 73 74 73 28 73 65   where exists(se
2dd20 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
2dd30 68 65 72 65 20 28 65 20 62 65 74 77 65 65 6e 20  here (e between 
2dd40 31 33 20 61 6e 64 20 28 74 31 2e 61 29 29 29 20  13 and (t1.a))) 
2dd50 61 6e 64 20 65 3c 3d 74 31 2e 63 29 20 74 68 65  and e<=t1.c) the
2dd60 6e 20 66 20 65 6c 73 65 20 74 31 2e 61 20 65 6e  n f else t1.a en
2dd70 64 3e 3d 31 31 20 74 68 65 6e 20 63 20 77 68 65  d>=11 then c whe
2dd80 6e 20 66 3c 61 20 74 68 65 6e 20 74 31 2e 62 20  n f<a then t1.b 
2dd90 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 3d 74 31  else t1.e end=t1
2dda0 2e 63 7d 0a 7d 20 7b 31 39 7d 0a 64 6f 5f 74 65  .c}.} {19}.do_te
2ddb0 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 35  st randexpr-2.25
2ddc0 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  1 {.  db eval {S
2ddd0 45 4c 45 43 54 20 63 2a 7e 31 37 2b 7e 63 61 73  ELECT c*~17+~cas
2dde0 65 20 77 68 65 6e 20 28 65 78 69 73 74 73 28 73  e when (exists(s
2ddf0 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
2de00 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73  where not exists
2de10 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
2de20 31 20 77 68 65 72 65 20 28 61 62 73 28 65 29 2f  1 where (abs(e)/
2de30 61 62 73 28 63 29 29 3d 63 61 73 65 20 77 68 65  abs(c))=case whe
2de40 6e 20 74 31 2e 63 20 6e 6f 74 20 69 6e 20 28 61  n t1.c not in (a
2de50 2c 31 33 2c 31 31 29 20 61 6e 64 20 74 31 2e 62  ,13,11) and t1.b
2de60 3e 3d 63 20 74 68 65 6e 20 74 31 2e 62 20 65 6c  >=c then t1.b el
2de70 73 65 20 74 31 2e 66 20 65 6e 64 29 29 20 61 6e  se t1.f end)) an
2de80 64 20 31 37 3c 3e 66 29 20 74 68 65 6e 20 63 61  d 17<>f) then ca
2de90 73 65 20 77 68 65 6e 20 28 65 29 20 6e 6f 74 20  se when (e) not 
2dea0 69 6e 20 28 74 31 2e 61 2c 74 31 2e 66 2c 65 29  in (t1.a,t1.f,e)
2deb0 20 74 68 65 6e 20 63 61 73 65 20 63 61 73 65 20   then case case 
2dec0 74 31 2e 63 20 77 68 65 6e 20 31 33 20 74 68 65  t1.c when 13 the
2ded0 6e 20 31 39 20 65 6c 73 65 20 74 31 2e 64 20 65  n 19 else t1.d e
2dee0 6e 64 2d 31 39 20 77 68 65 6e 20 74 31 2e 64 20  nd-19 when t1.d 
2def0 74 68 65 6e 20 20 2d 74 31 2e 62 20 65 6c 73 65  then  -t1.b else
2df00 20 74 31 2e 66 20 65 6e 64 20 77 68 65 6e 20 74   t1.f end when t
2df10 31 2e 64 20 6e 6f 74 20 69 6e 20 28 31 37 2c 74  1.d not in (17,t
2df20 31 2e 61 2c 74 31 2e 64 29 20 6f 72 20 63 20 69  1.a,t1.d) or c i
2df30 6e 20 28 64 2c 28 31 39 29 2c 74 31 2e 62 29 20  n (d,(19),t1.b) 
2df40 74 68 65 6e 20 20 2d 74 31 2e 62 20 65 6c 73 65  then  -t1.b else
2df50 20 63 20 65 6e 64 20 65 6c 73 65 20 31 39 20 65   c end else 19 e
2df60 6e 64 2b 74 31 2e 62 2d 66 2b 74 31 2e 65 20 46  nd+t1.b-f+t1.e F
2df70 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 2e  ROM t1 WHERE t1.
2df80 66 2d 63 61 73 65 20 77 68 65 6e 20 28 63 6f 61  f-case when (coa
2df90 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 31 33  lesce((select 13
2dfa0 2a 28 61 62 73 28 7e 31 31 29 2f 61 62 73 28 74  *(abs(~11)/abs(t
2dfb0 31 2e 62 29 29 20 66 72 6f 6d 20 74 31 20 77 68  1.b)) from t1 wh
2dfc0 65 72 65 20 7e 61 20 62 65 74 77 65 65 6e 20 2b  ere ~a between +
2dfd0 66 2b 7e 2b 31 37 20 61 6e 64 20 74 31 2e 65 29  f+~+17 and t1.e)
2dfe0 2c 65 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  ,e) not between 
2dff0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
2e000 20 31 39 2d 28 61 62 73 28 31 31 29 2f 61 62 73   19-(abs(11)/abs
2e010 28 74 31 2e 62 29 29 20 66 72 6f 6d 20 74 31 20  (t1.b)) from t1 
2e020 77 68 65 72 65 20 66 3c 3e 63 29 2c 74 31 2e 62  where f<>c),t1.b
2e030 29 20 61 6e 64 20 74 31 2e 66 20 6f 72 20 74 31  ) and t1.f or t1
2e040 2e 64 20 62 65 74 77 65 65 6e 20 28 73 65 6c 65  .d between (sele
2e050 63 74 20 63 61 73 65 20 6d 69 6e 28 61 29 20 77  ct case min(a) w
2e060 68 65 6e 20 63 61 73 74 28 61 76 67 28 65 29 20  hen cast(avg(e) 
2e070 41 53 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e  AS integer) then
2e080 20 20 2d 28 28 63 6f 75 6e 74 28 2a 29 29 29 20    -((count(*))) 
2e090 65 6c 73 65 20 63 61 73 74 28 61 76 67 28 74 31  else cast(avg(t1
2e0a0 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .a) AS integer) 
2e0b0 65 6e 64 20 7c 20 63 6f 75 6e 74 28 2a 29 20 66  end | count(*) f
2e0c0 72 6f 6d 20 74 31 29 20 61 6e 64 20 28 74 31 2e  rom t1) and (t1.
2e0d0 61 29 29 20 74 68 65 6e 20 31 39 20 65 6c 73 65  a)) then 19 else
2e0e0 20 66 20 65 6e 64 3d 66 7d 0a 7d 20 7b 7d 0a 64   f end=f}.} {}.d
2e0f0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
2e100 32 2e 32 35 32 20 7b 0a 20 20 64 62 20 65 76 61  2.252 {.  db eva
2e110 6c 20 7b 53 45 4c 45 43 54 20 63 2a 7e 31 37 2b  l {SELECT c*~17+
2e120 7e 63 61 73 65 20 77 68 65 6e 20 28 65 78 69 73  ~case when (exis
2e130 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
2e140 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78   t1 where not ex
2e150 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
2e160 6f 6d 20 74 31 20 77 68 65 72 65 20 28 61 62 73  om t1 where (abs
2e170 28 65 29 2f 61 62 73 28 63 29 29 3d 63 61 73 65  (e)/abs(c))=case
2e180 20 77 68 65 6e 20 74 31 2e 63 20 6e 6f 74 20 69   when t1.c not i
2e190 6e 20 28 61 2c 31 33 2c 31 31 29 20 61 6e 64 20  n (a,13,11) and 
2e1a0 74 31 2e 62 3e 3d 63 20 74 68 65 6e 20 74 31 2e  t1.b>=c then t1.
2e1b0 62 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 29  b else t1.f end)
2e1c0 29 20 61 6e 64 20 31 37 3c 3e 66 29 20 74 68 65  ) and 17<>f) the
2e1d0 6e 20 63 61 73 65 20 77 68 65 6e 20 28 65 29 20  n case when (e) 
2e1e0 6e 6f 74 20 69 6e 20 28 74 31 2e 61 2c 74 31 2e  not in (t1.a,t1.
2e1f0 66 2c 65 29 20 74 68 65 6e 20 63 61 73 65 20 63  f,e) then case c
2e200 61 73 65 20 74 31 2e 63 20 77 68 65 6e 20 31 33  ase t1.c when 13
2e210 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20 74 31   then 19 else t1
2e220 2e 64 20 65 6e 64 2d 31 39 20 77 68 65 6e 20 74  .d end-19 when t
2e230 31 2e 64 20 74 68 65 6e 20 20 2d 74 31 2e 62 20  1.d then  -t1.b 
2e240 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 20 77 68  else t1.f end wh
2e250 65 6e 20 74 31 2e 64 20 6e 6f 74 20 69 6e 20 28  en t1.d not in (
2e260 31 37 2c 74 31 2e 61 2c 74 31 2e 64 29 20 6f 72  17,t1.a,t1.d) or
2e270 20 63 20 69 6e 20 28 64 2c 28 31 39 29 2c 74 31   c in (d,(19),t1
2e280 2e 62 29 20 74 68 65 6e 20 20 2d 74 31 2e 62 20  .b) then  -t1.b 
2e290 65 6c 73 65 20 63 20 65 6e 64 20 65 6c 73 65 20  else c end else 
2e2a0 31 39 20 65 6e 64 2b 74 31 2e 62 2d 66 2b 74 31  19 end+t1.b-f+t1
2e2b0 2e 65 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  .e FROM t1 WHERE
2e2c0 20 4e 4f 54 20 28 74 31 2e 66 2d 63 61 73 65 20   NOT (t1.f-case 
2e2d0 77 68 65 6e 20 28 63 6f 61 6c 65 73 63 65 28 28  when (coalesce((
2e2e0 73 65 6c 65 63 74 20 31 33 2a 28 61 62 73 28 7e  select 13*(abs(~
2e2f0 31 31 29 2f 61 62 73 28 74 31 2e 62 29 29 20 66  11)/abs(t1.b)) f
2e300 72 6f 6d 20 74 31 20 77 68 65 72 65 20 7e 61 20  rom t1 where ~a 
2e310 62 65 74 77 65 65 6e 20 2b 66 2b 7e 2b 31 37 20  between +f+~+17 
2e320 61 6e 64 20 74 31 2e 65 29 2c 65 29 20 6e 6f 74  and t1.e),e) not
2e330 20 62 65 74 77 65 65 6e 20 63 6f 61 6c 65 73 63   between coalesc
2e340 65 28 28 73 65 6c 65 63 74 20 31 39 2d 28 61 62  e((select 19-(ab
2e350 73 28 31 31 29 2f 61 62 73 28 74 31 2e 62 29 29  s(11)/abs(t1.b))
2e360 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 66   from t1 where f
2e370 3c 3e 63 29 2c 74 31 2e 62 29 20 61 6e 64 20 74  <>c),t1.b) and t
2e380 31 2e 66 20 6f 72 20 74 31 2e 64 20 62 65 74 77  1.f or t1.d betw
2e390 65 65 6e 20 28 73 65 6c 65 63 74 20 63 61 73 65  een (select case
2e3a0 20 6d 69 6e 28 61 29 20 77 68 65 6e 20 63 61 73   min(a) when cas
2e3b0 74 28 61 76 67 28 65 29 20 41 53 20 69 6e 74 65  t(avg(e) AS inte
2e3c0 67 65 72 29 20 74 68 65 6e 20 20 2d 28 28 63 6f  ger) then  -((co
2e3d0 75 6e 74 28 2a 29 29 29 20 65 6c 73 65 20 63 61  unt(*))) else ca
2e3e0 73 74 28 61 76 67 28 74 31 2e 61 29 20 41 53 20  st(avg(t1.a) AS 
2e3f0 69 6e 74 65 67 65 72 29 20 65 6e 64 20 7c 20 63  integer) end | c
2e400 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29  ount(*) from t1)
2e410 20 61 6e 64 20 28 74 31 2e 61 29 29 20 74 68 65   and (t1.a)) the
2e420 6e 20 31 39 20 65 6c 73 65 20 66 20 65 6e 64 3d  n 19 else f end=
2e430 66 29 7d 0a 7d 20 7b 2d 35 36 30 31 7d 0a 64 6f  f)}.} {-5601}.do
2e440 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
2e450 2e 32 35 33 20 7b 0a 20 20 64 62 20 65 76 61 6c  .253 {.  db eval
2e460 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63   {SELECT coalesc
2e470 65 28 28 73 65 6c 65 63 74 20 63 2d 74 31 2e 61  e((select c-t1.a
2e480 20 7c 20 31 37 20 7c 20 62 2d 7e 74 31 2e 65 2d   | 17 | b-~t1.e-
2e490 31 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  11 from t1 where
2e4a0 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
2e4b0 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
2e4c0 72 65 20 74 31 2e 63 3c 3d 74 31 2e 62 29 29 2c  re t1.c<=t1.b)),
2e4d0 31 37 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  17) FROM t1 WHER
2e4e0 45 20 28 28 28 63 6f 61 6c 65 73 63 65 28 28 73  E (((coalesce((s
2e4f0 65 6c 65 63 74 20 6d 61 78 28 28 61 62 73 28 62  elect max((abs(b
2e500 2d 74 31 2e 64 2d 31 39 2a 74 31 2e 61 2a 65 2b  -t1.d-19*t1.a*e+
2e510 7e 63 61 73 65 20 77 68 65 6e 20 74 31 2e 65 3d  ~case when t1.e=
2e520 74 31 2e 66 2d 65 20 74 68 65 6e 20 28 73 65 6c  t1.f-e then (sel
2e530 65 63 74 20 61 62 73 28 61 62 73 28 63 61 73 74  ect abs(abs(cast
2e540 28 61 76 67 28 28 66 29 29 20 41 53 20 69 6e 74  (avg((f)) AS int
2e550 65 67 65 72 29 29 29 20 66 72 6f 6d 20 74 31 29  eger))) from t1)
2e560 20 65 6c 73 65 20 28 28 61 62 73 28 74 31 2e 62   else ((abs(t1.b
2e570 29 2f 61 62 73 28 74 31 2e 61 29 29 29 20 65 6e  )/abs(t1.a))) en
2e580 64 2d 74 31 2e 62 2d 74 31 2e 63 29 2f 61 62 73  d-t1.b-t1.c)/abs
2e590 28 74 31 2e 62 29 29 29 20 66 72 6f 6d 20 74 31  (t1.b))) from t1
2e5a0 20 77 68 65 72 65 20 6e 6f 74 20 74 31 2e 63 20   where not t1.c 
2e5b0 69 6e 20 28 73 65 6c 65 63 74 20 63 6f 75 6e 74  in (select count
2e5c0 28 64 69 73 74 69 6e 63 74 20 63 29 20 66 72 6f  (distinct c) fro
2e5d0 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
2e5e0 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20  t count(*) from 
2e5f0 74 31 29 20 61 6e 64 20 31 37 3c 20 2d 74 31 2e  t1) and 17< -t1.
2e600 65 29 2c 28 63 29 29 20 7c 20 20 2d 28 63 29 29  e),(c)) |  -(c))
2e610 3c 3e 65 29 29 7d 0a 7d 20 7b 37 36 33 7d 0a 64  <>e))}.} {763}.d
2e620 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
2e630 32 2e 32 35 34 20 7b 0a 20 20 64 62 20 65 76 61  2.254 {.  db eva
2e640 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73  l {SELECT coales
2e650 63 65 28 28 73 65 6c 65 63 74 20 63 2d 74 31 2e  ce((select c-t1.
2e660 61 20 7c 20 31 37 20 7c 20 62 2d 7e 74 31 2e 65  a | 17 | b-~t1.e
2e670 2d 31 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  -11 from t1 wher
2e680 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  e not exists(sel
2e690 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
2e6a0 65 72 65 20 74 31 2e 63 3c 3d 74 31 2e 62 29 29  ere t1.c<=t1.b))
2e6b0 2c 31 37 29 20 46 52 4f 4d 20 74 31 20 57 48 45  ,17) FROM t1 WHE
2e6c0 52 45 20 4e 4f 54 20 28 28 28 28 63 6f 61 6c 65  RE NOT ((((coale
2e6d0 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
2e6e0 28 61 62 73 28 62 2d 74 31 2e 64 2d 31 39 2a 74  (abs(b-t1.d-19*t
2e6f0 31 2e 61 2a 65 2b 7e 63 61 73 65 20 77 68 65 6e  1.a*e+~case when
2e700 20 74 31 2e 65 3d 74 31 2e 66 2d 65 20 74 68 65   t1.e=t1.f-e the
2e710 6e 20 28 73 65 6c 65 63 74 20 61 62 73 28 61 62  n (select abs(ab
2e720 73 28 63 61 73 74 28 61 76 67 28 28 66 29 29 20  s(cast(avg((f)) 
2e730 41 53 20 69 6e 74 65 67 65 72 29 29 29 20 66 72  AS integer))) fr
2e740 6f 6d 20 74 31 29 20 65 6c 73 65 20 28 28 61 62  om t1) else ((ab
2e750 73 28 74 31 2e 62 29 2f 61 62 73 28 74 31 2e 61  s(t1.b)/abs(t1.a
2e760 29 29 29 20 65 6e 64 2d 74 31 2e 62 2d 74 31 2e  ))) end-t1.b-t1.
2e770 63 29 2f 61 62 73 28 74 31 2e 62 29 29 29 20 66  c)/abs(t1.b))) f
2e780 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
2e790 20 74 31 2e 63 20 69 6e 20 28 73 65 6c 65 63 74   t1.c in (select
2e7a0 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
2e7b0 63 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  c) from t1 union
2e7c0 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29   select count(*)
2e7d0 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 31 37   from t1) and 17
2e7e0 3c 20 2d 74 31 2e 65 29 2c 28 63 29 29 20 7c 20  < -t1.e),(c)) | 
2e7f0 20 2d 28 63 29 29 3c 3e 65 29 29 29 7d 0a 7d 20   -(c))<>e)))}.} 
2e800 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
2e810 78 70 72 2d 32 2e 32 35 35 20 7b 0a 20 20 64 62  xpr-2.255 {.  db
2e820 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
2e830 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63  alesce((select c
2e840 2d 74 31 2e 61 20 26 20 31 37 20 26 20 62 2d 7e  -t1.a & 17 & b-~
2e850 74 31 2e 65 2d 31 31 20 66 72 6f 6d 20 74 31 20  t1.e-11 from t1 
2e860 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73  where not exists
2e870 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
2e880 31 20 77 68 65 72 65 20 74 31 2e 63 3c 3d 74 31  1 where t1.c<=t1
2e890 2e 62 29 29 2c 31 37 29 20 46 52 4f 4d 20 74 31  .b)),17) FROM t1
2e8a0 20 57 48 45 52 45 20 28 28 28 63 6f 61 6c 65 73   WHERE (((coales
2e8b0 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 28  ce((select max((
2e8c0 61 62 73 28 62 2d 74 31 2e 64 2d 31 39 2a 74 31  abs(b-t1.d-19*t1
2e8d0 2e 61 2a 65 2b 7e 63 61 73 65 20 77 68 65 6e 20  .a*e+~case when 
2e8e0 74 31 2e 65 3d 74 31 2e 66 2d 65 20 74 68 65 6e  t1.e=t1.f-e then
2e8f0 20 28 73 65 6c 65 63 74 20 61 62 73 28 61 62 73   (select abs(abs
2e900 28 63 61 73 74 28 61 76 67 28 28 66 29 29 20 41  (cast(avg((f)) A
2e910 53 20 69 6e 74 65 67 65 72 29 29 29 20 66 72 6f  S integer))) fro
2e920 6d 20 74 31 29 20 65 6c 73 65 20 28 28 61 62 73  m t1) else ((abs
2e930 28 74 31 2e 62 29 2f 61 62 73 28 74 31 2e 61 29  (t1.b)/abs(t1.a)
2e940 29 29 20 65 6e 64 2d 74 31 2e 62 2d 74 31 2e 63  )) end-t1.b-t1.c
2e950 29 2f 61 62 73 28 74 31 2e 62 29 29 29 20 66 72  )/abs(t1.b))) fr
2e960 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
2e970 74 31 2e 63 20 69 6e 20 28 73 65 6c 65 63 74 20  t1.c in (select 
2e980 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63  count(distinct c
2e990 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  ) from t1 union 
2e9a0 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20  select count(*) 
2e9b0 66 72 6f 6d 20 74 31 29 20 61 6e 64 20 31 37 3c  from t1) and 17<
2e9c0 20 2d 74 31 2e 65 29 2c 28 63 29 29 20 7c 20 20   -t1.e),(c)) |  
2e9d0 2d 28 63 29 29 3c 3e 65 29 29 7d 0a 7d 20 7b 30  -(c))<>e))}.} {0
2e9e0 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
2e9f0 70 72 2d 32 2e 32 35 36 20 7b 0a 20 20 64 62 20  pr-2.256 {.  db 
2ea00 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73  eval {SELECT cas
2ea10 65 20 63 61 73 65 20 2b 28 73 65 6c 65 63 74 20  e case +(select 
2ea20 63 61 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69  case count(disti
2ea30 6e 63 74 20 63 61 73 65 20 77 68 65 6e 20 63 61  nct case when ca
2ea40 73 65 20 77 68 65 6e 20 28 61 62 73 28 66 20 7c  se when (abs(f |
2ea50 20 74 31 2e 64 29 2f 61 62 73 28 31 33 29 29 3c   t1.d)/abs(13))<
2ea60 3d 20 2d 63 20 74 68 65 6e 20 74 31 2e 61 20 65  = -c then t1.a e
2ea70 6c 73 65 20 74 31 2e 62 20 65 6e 64 2b 74 31 2e  lse t1.b end+t1.
2ea80 62 3c 3d 31 39 20 74 68 65 6e 20 63 20 77 68 65  b<=19 then c whe
2ea90 6e 20 31 39 3d 61 20 74 68 65 6e 20 31 37 20 65  n 19=a then 17 e
2eaa0 6c 73 65 20 31 31 20 65 6e 64 2b 31 33 29 20 77  lse 11 end+13) w
2eab0 68 65 6e 20 7e 2b 63 61 73 65 20 28 63 61 73 74  hen ~+case (cast
2eac0 28 61 76 67 28 74 31 2e 62 29 20 41 53 20 69 6e  (avg(t1.b) AS in
2ead0 74 65 67 65 72 29 20 7c 20 28 28 63 6f 75 6e 74  teger) | ((count
2eae0 28 2a 29 29 29 2d 6d 61 78 28 74 31 2e 64 29 29  (*)))-max(t1.d))
2eaf0 20 77 68 65 6e 20 63 6f 75 6e 74 28 64 69 73 74   when count(dist
2eb00 69 6e 63 74 20 64 29 20 74 68 65 6e 20 63 6f 75  inct d) then cou
2eb10 6e 74 28 2a 29 20 65 6c 73 65 20 63 61 73 74 28  nt(*) else cast(
2eb20 61 76 67 28 74 31 2e 63 29 20 41 53 20 69 6e 74  avg(t1.c) AS int
2eb30 65 67 65 72 29 20 65 6e 64 20 74 68 65 6e 20 63  eger) end then c
2eb40 6f 75 6e 74 28 2a 29 20 65 6c 73 65 20 63 6f 75  ount(*) else cou
2eb50 6e 74 28 2a 29 20 65 6e 64 20 66 72 6f 6d 20 74  nt(*) end from t
2eb60 31 29 20 77 68 65 6e 20 63 2a 74 31 2e 61 20 74  1) when c*t1.a t
2eb70 68 65 6e 20 31 33 20 65 6c 73 65 20 74 31 2e 61  hen 13 else t1.a
2eb80 20 65 6e 64 20 77 68 65 6e 20 61 20 74 68 65 6e   end when a then
2eb90 20 20 2d 66 20 65 6c 73 65 20 74 31 2e 61 20 65    -f else t1.a e
2eba0 6e 64 2b 64 20 46 52 4f 4d 20 74 31 20 57 48 45  nd+d FROM t1 WHE
2ebb0 52 45 20 63 61 73 65 20 77 68 65 6e 20 63 6f 61  RE case when coa
2ebc0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31  lesce((select t1
2ebd0 2e 63 20 7c 20 63 2a 74 31 2e 65 2d 31 31 20 66  .c | c*t1.e-11 f
2ebe0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69  rom t1 where exi
2ebf0 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
2ec00 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 64 2d  m t1 where t1.d-
2ec10 74 31 2e 64 2a 64 20 62 65 74 77 65 65 6e 20 20  t1.d*d between  
2ec20 2d 20 2d 74 31 2e 65 20 61 6e 64 20 61 29 29 2c  - -t1.e and a)),
2ec30 20 2d 31 33 29 3c 3d 65 20 61 6e 64 20 31 31 20   -13)<=e and 11 
2ec40 6e 6f 74 20 69 6e 20 28 64 2c 74 31 2e 61 2c 66  not in (d,t1.a,f
2ec50 29 20 61 6e 64 20 74 31 2e 61 20 6e 6f 74 20 62  ) and t1.a not b
2ec60 65 74 77 65 65 6e 20 31 31 20 61 6e 64 20 31 39  etween 11 and 19
2ec70 20 6f 72 20 74 31 2e 65 3c 3e 74 31 2e 65 20 61   or t1.e<>t1.e a
2ec80 6e 64 20 74 31 2e 65 3c 63 20 6f 72 20 61 20 62  nd t1.e<c or a b
2ec90 65 74 77 65 65 6e 20 74 31 2e 63 20 61 6e 64 20  etween t1.c and 
2eca0 63 20 61 6e 64 20 64 3e 3d 74 31 2e 61 20 6f 72  c and d>=t1.a or
2ecb0 20 20 2d 74 31 2e 65 3e 3d 62 20 74 68 65 6e 20    -t1.e>=b then 
2ecc0 62 20 77 68 65 6e 20 31 37 20 6e 6f 74 20 62 65  b when 17 not be
2ecd0 74 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 74  tween t1.f and t
2ece0 31 2e 62 20 74 68 65 6e 20 61 20 65 6c 73 65 20  1.b then a else 
2ecf0 62 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74  b end in (select
2ed00 20 31 31 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f   11 from t1 unio
2ed10 6e 20 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20  n select f from 
2ed20 74 31 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  t1)}.} {}.do_tes
2ed30 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 35 37  t randexpr-2.257
2ed40 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
2ed50 4c 45 43 54 20 63 61 73 65 20 63 61 73 65 20 2b  LECT case case +
2ed60 28 73 65 6c 65 63 74 20 63 61 73 65 20 63 6f 75  (select case cou
2ed70 6e 74 28 64 69 73 74 69 6e 63 74 20 63 61 73 65  nt(distinct case
2ed80 20 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20   when case when 
2ed90 28 61 62 73 28 66 20 7c 20 74 31 2e 64 29 2f 61  (abs(f | t1.d)/a
2eda0 62 73 28 31 33 29 29 3c 3d 20 2d 63 20 74 68 65  bs(13))<= -c the
2edb0 6e 20 74 31 2e 61 20 65 6c 73 65 20 74 31 2e 62  n t1.a else t1.b
2edc0 20 65 6e 64 2b 74 31 2e 62 3c 3d 31 39 20 74 68   end+t1.b<=19 th
2edd0 65 6e 20 63 20 77 68 65 6e 20 31 39 3d 61 20 74  en c when 19=a t
2ede0 68 65 6e 20 31 37 20 65 6c 73 65 20 31 31 20 65  hen 17 else 11 e
2edf0 6e 64 2b 31 33 29 20 77 68 65 6e 20 7e 2b 63 61  nd+13) when ~+ca
2ee00 73 65 20 28 63 61 73 74 28 61 76 67 28 74 31 2e  se (cast(avg(t1.
2ee10 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 7c  b) AS integer) |
2ee20 20 28 28 63 6f 75 6e 74 28 2a 29 29 29 2d 6d 61   ((count(*)))-ma
2ee30 78 28 74 31 2e 64 29 29 20 77 68 65 6e 20 63 6f  x(t1.d)) when co
2ee40 75 6e 74 28 64 69 73 74 69 6e 63 74 20 64 29 20  unt(distinct d) 
2ee50 74 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20 65 6c  then count(*) el
2ee60 73 65 20 63 61 73 74 28 61 76 67 28 74 31 2e 63  se cast(avg(t1.c
2ee70 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 65 6e  ) AS integer) en
2ee80 64 20 74 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20  d then count(*) 
2ee90 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e  else count(*) en
2eea0 64 20 66 72 6f 6d 20 74 31 29 20 77 68 65 6e 20  d from t1) when 
2eeb0 63 2a 74 31 2e 61 20 74 68 65 6e 20 31 33 20 65  c*t1.a then 13 e
2eec0 6c 73 65 20 74 31 2e 61 20 65 6e 64 20 77 68 65  lse t1.a end whe
2eed0 6e 20 61 20 74 68 65 6e 20 20 2d 66 20 65 6c 73  n a then  -f els
2eee0 65 20 74 31 2e 61 20 65 6e 64 2b 64 20 46 52 4f  e t1.a end+d FRO
2eef0 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
2ef00 63 61 73 65 20 77 68 65 6e 20 63 6f 61 6c 65 73  case when coales
2ef10 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 63 20  ce((select t1.c 
2ef20 7c 20 63 2a 74 31 2e 65 2d 31 31 20 66 72 6f 6d  | c*t1.e-11 from
2ef30 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73   t1 where exists
2ef40 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
2ef50 31 20 77 68 65 72 65 20 74 31 2e 64 2d 74 31 2e  1 where t1.d-t1.
2ef60 64 2a 64 20 62 65 74 77 65 65 6e 20 20 2d 20 2d  d*d between  - -
2ef70 74 31 2e 65 20 61 6e 64 20 61 29 29 2c 20 2d 31  t1.e and a)), -1
2ef80 33 29 3c 3d 65 20 61 6e 64 20 31 31 20 6e 6f 74  3)<=e and 11 not
2ef90 20 69 6e 20 28 64 2c 74 31 2e 61 2c 66 29 20 61   in (d,t1.a,f) a
2efa0 6e 64 20 74 31 2e 61 20 6e 6f 74 20 62 65 74 77  nd t1.a not betw
2efb0 65 65 6e 20 31 31 20 61 6e 64 20 31 39 20 6f 72  een 11 and 19 or
2efc0 20 74 31 2e 65 3c 3e 74 31 2e 65 20 61 6e 64 20   t1.e<>t1.e and 
2efd0 74 31 2e 65 3c 63 20 6f 72 20 61 20 62 65 74 77  t1.e<c or a betw
2efe0 65 65 6e 20 74 31 2e 63 20 61 6e 64 20 63 20 61  een t1.c and c a
2eff0 6e 64 20 64 3e 3d 74 31 2e 61 20 6f 72 20 20 2d  nd d>=t1.a or  -
2f000 74 31 2e 65 3e 3d 62 20 74 68 65 6e 20 62 20 77  t1.e>=b then b w
2f010 68 65 6e 20 31 37 20 6e 6f 74 20 62 65 74 77 65  hen 17 not betwe
2f020 65 6e 20 74 31 2e 66 20 61 6e 64 20 74 31 2e 62  en t1.f and t1.b
2f030 20 74 68 65 6e 20 61 20 65 6c 73 65 20 62 20 65   then a else b e
2f040 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20 31 31  nd in (select 11
2f050 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
2f060 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74 31 29  elect f from t1)
2f070 29 7d 0a 7d 20 7b 2d 32 30 30 7d 0a 64 6f 5f 74  )}.} {-200}.do_t
2f080 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
2f090 35 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  58 {.  db eval {
2f0a0 53 45 4c 45 43 54 20 63 61 73 65 20 63 61 73 65  SELECT case case
2f0b0 20 2b 28 73 65 6c 65 63 74 20 63 61 73 65 20 63   +(select case c
2f0c0 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 61  ount(distinct ca
2f0d0 73 65 20 77 68 65 6e 20 63 61 73 65 20 77 68 65  se when case whe
2f0e0 6e 20 28 61 62 73 28 66 20 26 20 74 31 2e 64 29  n (abs(f & t1.d)
2f0f0 2f 61 62 73 28 31 33 29 29 3c 3d 20 2d 63 20 74  /abs(13))<= -c t
2f100 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 74 31  hen t1.a else t1
2f110 2e 62 20 65 6e 64 2b 74 31 2e 62 3c 3d 31 39 20  .b end+t1.b<=19 
2f120 74 68 65 6e 20 63 20 77 68 65 6e 20 31 39 3d 61  then c when 19=a
2f130 20 74 68 65 6e 20 31 37 20 65 6c 73 65 20 31 31   then 17 else 11
2f140 20 65 6e 64 2b 31 33 29 20 77 68 65 6e 20 7e 2b   end+13) when ~+
2f150 63 61 73 65 20 28 63 61 73 74 28 61 76 67 28 74  case (cast(avg(t
2f160 31 2e 62 29 20 41 53 20 69 6e 74 65 67 65 72 29  1.b) AS integer)
2f170 20 26 20 28 28 63 6f 75 6e 74 28 2a 29 29 29 2d   & ((count(*)))-
2f180 6d 61 78 28 74 31 2e 64 29 29 20 77 68 65 6e 20  max(t1.d)) when 
2f190 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 64  count(distinct d
2f1a0 29 20 74 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20  ) then count(*) 
2f1b0 65 6c 73 65 20 63 61 73 74 28 61 76 67 28 74 31  else cast(avg(t1
2f1c0 2e 63 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .c) AS integer) 
2f1d0 65 6e 64 20 74 68 65 6e 20 63 6f 75 6e 74 28 2a  end then count(*
2f1e0 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20  ) else count(*) 
2f1f0 65 6e 64 20 66 72 6f 6d 20 74 31 29 20 77 68 65  end from t1) whe
2f200 6e 20 63 2a 74 31 2e 61 20 74 68 65 6e 20 31 33  n c*t1.a then 13
2f210 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 20 77   else t1.a end w
2f220 68 65 6e 20 61 20 74 68 65 6e 20 20 2d 66 20 65  hen a then  -f e
2f230 6c 73 65 20 74 31 2e 61 20 65 6e 64 2b 64 20 46  lse t1.a end+d F
2f240 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54  ROM t1 WHERE NOT
2f250 20 28 63 61 73 65 20 77 68 65 6e 20 63 6f 61 6c   (case when coal
2f260 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e  esce((select t1.
2f270 63 20 7c 20 63 2a 74 31 2e 65 2d 31 31 20 66 72  c | c*t1.e-11 fr
2f280 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78 69 73  om t1 where exis
2f290 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
2f2a0 20 74 31 20 77 68 65 72 65 20 74 31 2e 64 2d 74   t1 where t1.d-t
2f2b0 31 2e 64 2a 64 20 62 65 74 77 65 65 6e 20 20 2d  1.d*d between  -
2f2c0 20 2d 74 31 2e 65 20 61 6e 64 20 61 29 29 2c 20   -t1.e and a)), 
2f2d0 2d 31 33 29 3c 3d 65 20 61 6e 64 20 31 31 20 6e  -13)<=e and 11 n
2f2e0 6f 74 20 69 6e 20 28 64 2c 74 31 2e 61 2c 66 29  ot in (d,t1.a,f)
2f2f0 20 61 6e 64 20 74 31 2e 61 20 6e 6f 74 20 62 65   and t1.a not be
2f300 74 77 65 65 6e 20 31 31 20 61 6e 64 20 31 39 20  tween 11 and 19 
2f310 6f 72 20 74 31 2e 65 3c 3e 74 31 2e 65 20 61 6e  or t1.e<>t1.e an
2f320 64 20 74 31 2e 65 3c 63 20 6f 72 20 61 20 62 65  d t1.e<c or a be
2f330 74 77 65 65 6e 20 74 31 2e 63 20 61 6e 64 20 63  tween t1.c and c
2f340 20 61 6e 64 20 64 3e 3d 74 31 2e 61 20 6f 72 20   and d>=t1.a or 
2f350 20 2d 74 31 2e 65 3e 3d 62 20 74 68 65 6e 20 62   -t1.e>=b then b
2f360 20 77 68 65 6e 20 31 37 20 6e 6f 74 20 62 65 74   when 17 not bet
2f370 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20 74 31  ween t1.f and t1
2f380 2e 62 20 74 68 65 6e 20 61 20 65 6c 73 65 20 62  .b then a else b
2f390 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20   end in (select 
2f3a0 31 31 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  11 from t1 union
2f3b0 20 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74   select f from t
2f3c0 31 29 29 7d 0a 7d 20 7b 2d 32 30 30 7d 0a 64 6f  1))}.} {-200}.do
2f3d0 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
2f3e0 2e 32 35 39 20 7b 0a 20 20 64 62 20 65 76 61 6c  .259 {.  db eval
2f3f0 20 7b 53 45 4c 45 43 54 20 66 2a 63 6f 61 6c 65   {SELECT f*coale
2f400 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
2f410 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29  (select count(*)
2f420 20 66 72 6f 6d 20 74 31 29 29 20 66 72 6f 6d 20   from t1)) from 
2f430 74 31 20 77 68 65 72 65 20 7e 63 61 73 65 20 77  t1 where ~case w
2f440 68 65 6e 20 74 31 2e 65 3c 3d 63 61 73 65 20 77  hen t1.e<=case w
2f450 68 65 6e 20 31 37 3e 3d 2b 63 61 73 65 20 77 68  hen 17>=+case wh
2f460 65 6e 20 63 2a 61 20 69 6e 20 28 63 2c 74 31 2e  en c*a in (c,t1.
2f470 62 2c 31 33 29 20 74 68 65 6e 20 74 31 2e 65 20  b,13) then t1.e 
2f480 77 68 65 6e 20 61 3e 74 31 2e 62 20 61 6e 64 20  when a>t1.b and 
2f490 61 3c 3d 31 39 20 74 68 65 6e 20 63 20 65 6c 73  a<=19 then c els
2f4a0 65 20 74 31 2e 65 20 65 6e 64 20 74 68 65 6e 20  e t1.e end then 
2f4b0 74 31 2e 63 20 65 6c 73 65 20 31 37 20 65 6e 64  t1.c else 17 end
2f4c0 2d 66 2a 31 37 20 6f 72 20 61 20 62 65 74 77 65  -f*17 or a betwe
2f4d0 65 6e 20 62 20 61 6e 64 20 31 39 20 74 68 65 6e  en b and 19 then
2f4e0 20 74 31 2e 63 20 77 68 65 6e 20 20 2d 66 3c 3d   t1.c when  -f<=
2f4f0 31 31 20 74 68 65 6e 20 63 20 65 6c 73 65 20 20  11 then c else  
2f500 2d 31 31 20 65 6e 64 2a 74 31 2e 63 2b 64 3e 3d  -11 end*t1.c+d>=
2f510 65 29 2c 31 37 29 20 46 52 4f 4d 20 74 31 20 57  e),17) FROM t1 W
2f520 48 45 52 45 20 28 31 39 20 6e 6f 74 20 62 65 74  HERE (19 not bet
2f530 77 65 65 6e 20 74 31 2e 62 20 61 6e 64 20 7e 65  ween t1.b and ~e
2f540 29 7d 0a 7d 20 7b 31 30 32 30 30 7d 0a 64 6f 5f  )}.} {10200}.do_
2f550 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
2f560 32 36 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  260 {.  db eval 
2f570 7b 53 45 4c 45 43 54 20 66 2a 63 6f 61 6c 65 73  {SELECT f*coales
2f580 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 28  ce((select max((
2f590 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20  select count(*) 
2f5a0 66 72 6f 6d 20 74 31 29 29 20 66 72 6f 6d 20 74  from t1)) from t
2f5b0 31 20 77 68 65 72 65 20 7e 63 61 73 65 20 77 68  1 where ~case wh
2f5c0 65 6e 20 74 31 2e 65 3c 3d 63 61 73 65 20 77 68  en t1.e<=case wh
2f5d0 65 6e 20 31 37 3e 3d 2b 63 61 73 65 20 77 68 65  en 17>=+case whe
2f5e0 6e 20 63 2a 61 20 69 6e 20 28 63 2c 74 31 2e 62  n c*a in (c,t1.b
2f5f0 2c 31 33 29 20 74 68 65 6e 20 74 31 2e 65 20 77  ,13) then t1.e w
2f600 68 65 6e 20 61 3e 74 31 2e 62 20 61 6e 64 20 61  hen a>t1.b and a
2f610 3c 3d 31 39 20 74 68 65 6e 20 63 20 65 6c 73 65  <=19 then c else
2f620 20 74 31 2e 65 20 65 6e 64 20 74 68 65 6e 20 74   t1.e end then t
2f630 31 2e 63 20 65 6c 73 65 20 31 37 20 65 6e 64 2d  1.c else 17 end-
2f640 66 2a 31 37 20 6f 72 20 61 20 62 65 74 77 65 65  f*17 or a betwee
2f650 6e 20 62 20 61 6e 64 20 31 39 20 74 68 65 6e 20  n b and 19 then 
2f660 74 31 2e 63 20 77 68 65 6e 20 20 2d 66 3c 3d 31  t1.c when  -f<=1
2f670 31 20 74 68 65 6e 20 63 20 65 6c 73 65 20 20 2d  1 then c else  -
2f680 31 31 20 65 6e 64 2a 74 31 2e 63 2b 64 3e 3d 65  11 end*t1.c+d>=e
2f690 29 2c 31 37 29 20 46 52 4f 4d 20 74 31 20 57 48  ),17) FROM t1 WH
2f6a0 45 52 45 20 4e 4f 54 20 28 28 31 39 20 6e 6f 74  ERE NOT ((19 not
2f6b0 20 62 65 74 77 65 65 6e 20 74 31 2e 62 20 61 6e   between t1.b an
2f6c0 64 20 7e 65 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f  d ~e))}.} {}.do_
2f6d0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
2f6e0 32 36 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  261 {.  db eval 
2f6f0 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65  {SELECT coalesce
2f700 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
2f710 63 2d 20 2d 63 61 73 65 20 77 68 65 6e 20 28 7e  c- -case when (~
2f720 28 73 65 6c 65 63 74 20 6d 61 78 28 62 2a 74 31  (select max(b*t1
2f730 2e 61 29 2a 7e 28 28 6d 69 6e 28 74 31 2e 65 29  .a)*~((min(t1.e)
2f740 29 2d 6d 69 6e 28 28 61 29 29 29 20 7c 20 20 2d  )-min((a))) |  -
2f750 63 61 73 74 28 61 76 67 28 74 31 2e 65 2b 74 31  cast(avg(t1.e+t1
2f760 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .a) AS integer) 
2f770 66 72 6f 6d 20 74 31 29 29 3c 64 20 74 68 65 6e  from t1))<d then
2f780 20 63 20 65 6c 73 65 20 28 61 62 73 28 20 2d 7e   c else (abs( -~
2f790 31 39 29 2f 61 62 73 28 63 29 29 20 65 6e 64 2d  19)/abs(c)) end-
2f7a0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
2f7b0 20 6d 61 78 28 74 31 2e 65 2b 61 29 20 66 72 6f   max(t1.e+a) fro
2f7c0 6d 20 74 31 20 77 68 65 72 65 20 31 31 3c 3e 63  m t1 where 11<>c
2f7d0 20 6f 72 20 28 74 31 2e 62 29 3e 20 2d 28 31 31   or (t1.b)> -(11
2f7e0 29 29 2c 31 31 29 29 20 66 72 6f 6d 20 74 31 20  )),11)) from t1 
2f7f0 77 68 65 72 65 20 20 2d 31 31 20 69 6e 20 28 28  where  -11 in ((
2f800 64 29 2c 66 2c 74 31 2e 64 29 29 2c 74 31 2e 61  d),f,t1.d)),t1.a
2f810 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
2f820 63 3c 3e 65 2b 74 31 2e 63 7d 0a 7d 20 7b 31 30  c<>e+t1.c}.} {10
2f830 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  0}.do_test rande
2f840 78 70 72 2d 32 2e 32 36 32 20 7b 0a 20 20 64 62  xpr-2.262 {.  db
2f850 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
2f860 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d  alesce((select m
2f870 61 78 28 74 31 2e 63 2d 20 2d 63 61 73 65 20 77  ax(t1.c- -case w
2f880 68 65 6e 20 28 7e 28 73 65 6c 65 63 74 20 6d 61  hen (~(select ma
2f890 78 28 62 2a 74 31 2e 61 29 2a 7e 28 28 6d 69 6e  x(b*t1.a)*~((min
2f8a0 28 74 31 2e 65 29 29 2d 6d 69 6e 28 28 61 29 29  (t1.e))-min((a))
2f8b0 29 20 7c 20 20 2d 63 61 73 74 28 61 76 67 28 74  ) |  -cast(avg(t
2f8c0 31 2e 65 2b 74 31 2e 61 29 20 41 53 20 69 6e 74  1.e+t1.a) AS int
2f8d0 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 29 3c  eger) from t1))<
2f8e0 64 20 74 68 65 6e 20 63 20 65 6c 73 65 20 28 61  d then c else (a
2f8f0 62 73 28 20 2d 7e 31 39 29 2f 61 62 73 28 63 29  bs( -~19)/abs(c)
2f900 29 20 65 6e 64 2d 63 6f 61 6c 65 73 63 65 28 28  ) end-coalesce((
2f910 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 65 2b  select max(t1.e+
2f920 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  a) from t1 where
2f930 20 31 31 3c 3e 63 20 6f 72 20 28 74 31 2e 62 29   11<>c or (t1.b)
2f940 3e 20 2d 28 31 31 29 29 2c 31 31 29 29 20 66 72  > -(11)),11)) fr
2f950 6f 6d 20 74 31 20 77 68 65 72 65 20 20 2d 31 31  om t1 where  -11
2f960 20 69 6e 20 28 28 64 29 2c 66 2c 74 31 2e 64 29   in ((d),f,t1.d)
2f970 29 2c 74 31 2e 61 29 20 46 52 4f 4d 20 74 31 20  ),t1.a) FROM t1 
2f980 57 48 45 52 45 20 4e 4f 54 20 28 63 3c 3e 65 2b  WHERE NOT (c<>e+
2f990 74 31 2e 63 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  t1.c)}.} {}.do_t
2f9a0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
2f9b0 36 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  63 {.  db eval {
2f9c0 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28  SELECT coalesce(
2f9d0 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 63  (select max(t1.c
2f9e0 2d 20 2d 63 61 73 65 20 77 68 65 6e 20 28 7e 28  - -case when (~(
2f9f0 73 65 6c 65 63 74 20 6d 61 78 28 62 2a 74 31 2e  select max(b*t1.
2fa00 61 29 2a 7e 28 28 6d 69 6e 28 74 31 2e 65 29 29  a)*~((min(t1.e))
2fa10 2d 6d 69 6e 28 28 61 29 29 29 20 26 20 20 2d 63  -min((a))) &  -c
2fa20 61 73 74 28 61 76 67 28 74 31 2e 65 2b 74 31 2e  ast(avg(t1.e+t1.
2fa30 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  a) AS integer) f
2fa40 72 6f 6d 20 74 31 29 29 3c 64 20 74 68 65 6e 20  rom t1))<d then 
2fa50 63 20 65 6c 73 65 20 28 61 62 73 28 20 2d 7e 31  c else (abs( -~1
2fa60 39 29 2f 61 62 73 28 63 29 29 20 65 6e 64 2d 63  9)/abs(c)) end-c
2fa70 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
2fa80 6d 61 78 28 74 31 2e 65 2b 61 29 20 66 72 6f 6d  max(t1.e+a) from
2fa90 20 74 31 20 77 68 65 72 65 20 31 31 3c 3e 63 20   t1 where 11<>c 
2faa0 6f 72 20 28 74 31 2e 62 29 3e 20 2d 28 31 31 29  or (t1.b)> -(11)
2fab0 29 2c 31 31 29 29 20 66 72 6f 6d 20 74 31 20 77  ),11)) from t1 w
2fac0 68 65 72 65 20 20 2d 31 31 20 69 6e 20 28 28 64  here  -11 in ((d
2fad0 29 2c 66 2c 74 31 2e 64 29 29 2c 74 31 2e 61 29  ),f,t1.d)),t1.a)
2fae0 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63   FROM t1 WHERE c
2faf0 3c 3e 65 2b 74 31 2e 63 7d 0a 7d 20 7b 31 30 30  <>e+t1.c}.} {100
2fb00 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
2fb10 70 72 2d 32 2e 32 36 34 20 7b 0a 20 20 64 62 20  pr-2.264 {.  db 
2fb20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 63  eval {SELECT  -c
2fb30 61 73 65 20 77 68 65 6e 20 28 6e 6f 74 20 65 78  ase when (not ex
2fb40 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
2fb50 6f 6d 20 74 31 20 77 68 65 72 65 20 65 2a 64 2a  om t1 where e*d*
2fb60 63 61 73 65 20 31 37 20 77 68 65 6e 20 63 61 73  case 17 when cas
2fb70 65 20 74 31 2e 63 2d 74 31 2e 66 20 77 68 65 6e  e t1.c-t1.f when
2fb80 20 74 31 2e 61 20 74 68 65 6e 20 74 31 2e 61 20   t1.a then t1.a 
2fb90 65 6c 73 65 20 31 31 20 65 6e 64 20 74 68 65 6e  else 11 end then
2fba0 20 74 31 2e 63 20 65 6c 73 65 20 74 31 2e 62 20   t1.c else t1.b 
2fbb0 65 6e 64 2d 65 2b 28 74 31 2e 61 29 2d 65 20 6e  end-e+(t1.a)-e n
2fbc0 6f 74 20 69 6e 20 28 65 2c 65 2c 74 31 2e 61 29  ot in (e,e,t1.a)
2fbd0 20 61 6e 64 20 28 74 31 2e 66 20 6e 6f 74 20 62   and (t1.f not b
2fbe0 65 74 77 65 65 6e 20 31 39 20 61 6e 64 20 74 31  etween 19 and t1
2fbf0 2e 65 29 29 29 20 61 6e 64 20 74 31 2e 62 3c 74  .e))) and t1.b<t
2fc00 31 2e 61 20 74 68 65 6e 20 66 2d 64 2d 63 2b 62  1.a then f-d-c+b
2fc10 20 77 68 65 6e 20 31 37 3d 31 37 20 74 68 65 6e   when 17=17 then
2fc20 20 31 39 20 65 6c 73 65 20 64 20 65 6e 64 20 46   19 else d end F
2fc30 52 4f 4d 20 74 31 20 57 48 45 52 45 20 66 2a 74  ROM t1 WHERE f*t
2fc40 31 2e 61 20 6e 6f 74 20 62 65 74 77 65 65 6e 20  1.a not between 
2fc50 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
2fc60 20 74 31 2e 62 20 66 72 6f 6d 20 74 31 20 77 68   t1.b from t1 wh
2fc70 65 72 65 20 31 37 3d 31 33 29 2c 31 37 2a 65 29  ere 17=13),17*e)
2fc80 20 61 6e 64 20 65 7d 0a 7d 20 7b 2d 31 39 7d 0a   and e}.} {-19}.
2fc90 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
2fca0 2d 32 2e 32 36 35 20 7b 0a 20 20 64 62 20 65 76  -2.265 {.  db ev
2fcb0 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 63 61 73  al {SELECT  -cas
2fcc0 65 20 77 68 65 6e 20 28 6e 6f 74 20 65 78 69 73  e when (not exis
2fcd0 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
2fce0 20 74 31 20 77 68 65 72 65 20 65 2a 64 2a 63 61   t1 where e*d*ca
2fcf0 73 65 20 31 37 20 77 68 65 6e 20 63 61 73 65 20  se 17 when case 
2fd00 74 31 2e 63 2d 74 31 2e 66 20 77 68 65 6e 20 74  t1.c-t1.f when t
2fd10 31 2e 61 20 74 68 65 6e 20 74 31 2e 61 20 65 6c  1.a then t1.a el
2fd20 73 65 20 31 31 20 65 6e 64 20 74 68 65 6e 20 74  se 11 end then t
2fd30 31 2e 63 20 65 6c 73 65 20 74 31 2e 62 20 65 6e  1.c else t1.b en
2fd40 64 2d 65 2b 28 74 31 2e 61 29 2d 65 20 6e 6f 74  d-e+(t1.a)-e not
2fd50 20 69 6e 20 28 65 2c 65 2c 74 31 2e 61 29 20 61   in (e,e,t1.a) a
2fd60 6e 64 20 28 74 31 2e 66 20 6e 6f 74 20 62 65 74  nd (t1.f not bet
2fd70 77 65 65 6e 20 31 39 20 61 6e 64 20 74 31 2e 65  ween 19 and t1.e
2fd80 29 29 29 20 61 6e 64 20 74 31 2e 62 3c 74 31 2e  ))) and t1.b<t1.
2fd90 61 20 74 68 65 6e 20 66 2d 64 2d 63 2b 62 20 77  a then f-d-c+b w
2fda0 68 65 6e 20 31 37 3d 31 37 20 74 68 65 6e 20 31  hen 17=17 then 1
2fdb0 39 20 65 6c 73 65 20 64 20 65 6e 64 20 46 52 4f  9 else d end FRO
2fdc0 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28  M t1 WHERE NOT (
2fdd0 66 2a 74 31 2e 61 20 6e 6f 74 20 62 65 74 77 65  f*t1.a not betwe
2fde0 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  en coalesce((sel
2fdf0 65 63 74 20 74 31 2e 62 20 66 72 6f 6d 20 74 31  ect t1.b from t1
2fe00 20 77 68 65 72 65 20 31 37 3d 31 33 29 2c 31 37   where 17=13),17
2fe10 2a 65 29 20 61 6e 64 20 65 29 7d 0a 7d 20 7b 7d  *e) and e)}.} {}
2fe20 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
2fe30 72 2d 32 2e 32 36 36 20 7b 0a 20 20 64 62 20 65  r-2.266 {.  db e
2fe40 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
2fe50 65 73 63 65 28 28 73 65 6c 65 63 74 20 31 37 2b  esce((select 17+
2fe60 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
2fe70 20 6d 61 78 28 63 61 73 65 20 77 68 65 6e 20 20   max(case when  
2fe80 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  -coalesce((selec
2fe90 74 20 6d 61 78 28 28 61 62 73 28 20 2d 28 61 62  t max((abs( -(ab
2fea0 73 28 74 31 2e 61 29 2f 61 62 73 28 74 31 2e 64  s(t1.a)/abs(t1.d
2feb0 29 29 2b 31 31 29 2f 61 62 73 28 65 29 29 2d 62  ))+11)/abs(e))-b
2fec0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
2fed0 74 31 2e 62 20 6e 6f 74 20 62 65 74 77 65 65 6e  t1.b not between
2fee0 20 66 20 61 6e 64 20 74 31 2e 63 20 61 6e 64 20   f and t1.c and 
2fef0 74 31 2e 66 3c 3e 65 29 2c 63 29 20 62 65 74 77  t1.f<>e),c) betw
2ff00 65 65 6e 20 74 31 2e 65 20 61 6e 64 20 66 20 74  een t1.e and f t
2ff10 68 65 6e 20 74 31 2e 65 20 77 68 65 6e 20 20 2d  hen t1.e when  -
2ff20 66 3e 20 2d 20 2d 62 20 74 68 65 6e 20 63 20 65  f> - -b then c e
2ff30 6c 73 65 20 74 31 2e 63 20 65 6e 64 29 20 66 72  lse t1.c end) fr
2ff40 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
2ff50 31 31 20 69 6e 20 28 73 65 6c 65 63 74 20 66 20  11 in (select f 
2ff60 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
2ff70 6c 65 63 74 20 61 20 66 72 6f 6d 20 74 31 29 29  lect a from t1))
2ff80 2c 74 31 2e 64 29 2d 74 31 2e 61 2d 31 33 20 66  ,t1.d)-t1.a-13 f
2ff90 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
2ffa0 64 20 62 65 74 77 65 65 6e 20 20 2d 74 31 2e 65  d between  -t1.e
2ffb0 20 61 6e 64 20 74 31 2e 61 29 2c 66 29 20 46 52   and t1.a),f) FR
2ffc0 4f 4d 20 74 31 20 57 48 45 52 45 20 65 78 69 73  OM t1 WHERE exis
2ffd0 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
2ffe0 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78   t1 where not ex
2fff0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
30000 6f 6d 20 74 31 20 77 68 65 72 65 20 63 20 69 6e  om t1 where c in
30010 20 28 73 65 6c 65 63 74 20 28 61 62 73 28 66 29   (select (abs(f)
30020 2f 61 62 73 28 31 33 29 29 20 66 72 6f 6d 20 74  /abs(13)) from t
30030 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74  1 union select t
30040 31 2e 61 2b 62 20 66 72 6f 6d 20 74 31 29 29 29  1.a+b from t1)))
30050 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72  }.} {}.do_test r
30060 61 6e 64 65 78 70 72 2d 32 2e 32 36 37 20 7b 0a  andexpr-2.267 {.
30070 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
30080 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  T coalesce((sele
30090 63 74 20 31 37 2b 63 6f 61 6c 65 73 63 65 28 28  ct 17+coalesce((
300a0 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20  select max(case 
300b0 77 68 65 6e 20 20 2d 63 6f 61 6c 65 73 63 65 28  when  -coalesce(
300c0 28 73 65 6c 65 63 74 20 6d 61 78 28 28 61 62 73  (select max((abs
300d0 28 20 2d 28 61 62 73 28 74 31 2e 61 29 2f 61 62  ( -(abs(t1.a)/ab
300e0 73 28 74 31 2e 64 29 29 2b 31 31 29 2f 61 62 73  s(t1.d))+11)/abs
300f0 28 65 29 29 2d 62 29 20 66 72 6f 6d 20 74 31 20  (e))-b) from t1 
30100 77 68 65 72 65 20 74 31 2e 62 20 6e 6f 74 20 62  where t1.b not b
30110 65 74 77 65 65 6e 20 66 20 61 6e 64 20 74 31 2e  etween f and t1.
30120 63 20 61 6e 64 20 74 31 2e 66 3c 3e 65 29 2c 63  c and t1.f<>e),c
30130 29 20 62 65 74 77 65 65 6e 20 74 31 2e 65 20 61  ) between t1.e a
30140 6e 64 20 66 20 74 68 65 6e 20 74 31 2e 65 20 77  nd f then t1.e w
30150 68 65 6e 20 20 2d 66 3e 20 2d 20 2d 62 20 74 68  hen  -f> - -b th
30160 65 6e 20 63 20 65 6c 73 65 20 74 31 2e 63 20 65  en c else t1.c e
30170 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  nd) from t1 wher
30180 65 20 6e 6f 74 20 31 31 20 69 6e 20 28 73 65 6c  e not 11 in (sel
30190 65 63 74 20 66 20 66 72 6f 6d 20 74 31 20 75 6e  ect f from t1 un
301a0 69 6f 6e 20 73 65 6c 65 63 74 20 61 20 66 72 6f  ion select a fro
301b0 6d 20 74 31 29 29 2c 74 31 2e 64 29 2d 74 31 2e  m t1)),t1.d)-t1.
301c0 61 2d 31 33 20 66 72 6f 6d 20 74 31 20 77 68 65  a-13 from t1 whe
301d0 72 65 20 74 31 2e 64 20 62 65 74 77 65 65 6e 20  re t1.d between 
301e0 20 2d 74 31 2e 65 20 61 6e 64 20 74 31 2e 61 29   -t1.e and t1.a)
301f0 2c 66 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ,f) FROM t1 WHER
30200 45 20 4e 4f 54 20 28 65 78 69 73 74 73 28 73 65  E NOT (exists(se
30210 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
30220 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28  here not exists(
30230 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
30240 20 77 68 65 72 65 20 63 20 69 6e 20 28 73 65 6c   where c in (sel
30250 65 63 74 20 28 61 62 73 28 66 29 2f 61 62 73 28  ect (abs(f)/abs(
30260 31 33 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  13)) from t1 uni
30270 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 61 2b 62  on select t1.a+b
30280 20 66 72 6f 6d 20 74 31 29 29 29 29 7d 0a 7d 20   from t1))))}.} 
30290 7b 36 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61  {600}.do_test ra
302a0 6e 64 65 78 70 72 2d 32 2e 32 36 38 20 7b 0a 20  ndexpr-2.268 {. 
302b0 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
302c0 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
302d0 74 20 6d 61 78 28 74 31 2e 64 29 20 66 72 6f 6d  t max(t1.d) from
302e0 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73   t1 where exists
302f0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
30300 31 20 77 68 65 72 65 20 74 31 2e 64 20 69 6e 20  1 where t1.d in 
30310 28 73 65 6c 65 63 74 20 63 61 73 65 20 28 61 62  (select case (ab
30320 73 28 28 28 63 6f 75 6e 74 28 64 69 73 74 69 6e  s(((count(distin
30330 63 74 20 74 31 2e 64 2d 63 29 29 2a 20 2d 63 61  ct t1.d-c))* -ca
30340 73 74 28 61 76 67 28 31 31 29 20 41 53 20 69 6e  st(avg(11) AS in
30350 74 65 67 65 72 29 2b 6d 61 78 28 74 31 2e 63 29  teger)+max(t1.c)
30360 29 29 29 20 77 68 65 6e 20 28 63 61 73 74 28 61  ))) when (cast(a
30370 76 67 28 74 31 2e 63 2b 61 29 20 41 53 20 69 6e  vg(t1.c+a) AS in
30380 74 65 67 65 72 29 2a 2b 6d 69 6e 28 61 29 2a 6d  teger)*+min(a)*m
30390 61 78 28 63 29 2d 6d 61 78 28 74 31 2e 61 29 2b  ax(c)-max(t1.a)+
303a0 63 61 73 74 28 61 76 67 28 66 29 20 41 53 20 69  cast(avg(f) AS i
303b0 6e 74 65 67 65 72 29 29 2b 63 61 73 74 28 61 76  nteger))+cast(av
303c0 67 28 74 31 2e 65 29 20 41 53 20 69 6e 74 65 67  g(t1.e) AS integ
303d0 65 72 29 20 74 68 65 6e 20 6d 69 6e 28 31 31 29  er) then min(11)
303e0 20 65 6c 73 65 20 28 28 28 6d 69 6e 28 31 31 29   else (((min(11)
303f0 29 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 20  ))) end from t1 
30400 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75  union select cou
30410 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31 29 29 29  nt(*) from t1)))
30420 2c 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  ,coalesce((selec
30430 74 20 6d 61 78 28 62 2b 31 33 29 20 66 72 6f 6d  t max(b+13) from
30440 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73   t1 where exists
30450 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
30460 31 20 77 68 65 72 65 20 66 20 69 6e 20 28 73 65  1 where f in (se
30470 6c 65 63 74 20 31 31 20 66 72 6f 6d 20 74 31 20  lect 11 from t1 
30480 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e  union select t1.
30490 62 20 66 72 6f 6d 20 74 31 29 29 29 2c 74 31 2e  b from t1))),t1.
304a0 65 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  e)) FROM t1 WHER
304b0 45 20 62 3e 31 31 7d 0a 7d 20 7b 35 30 30 7d 0a  E b>11}.} {500}.
304c0 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
304d0 2d 32 2e 32 36 39 20 7b 0a 20 20 64 62 20 65 76  -2.269 {.  db ev
304e0 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65  al {SELECT coale
304f0 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
30500 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 20 77 68  t1.d) from t1 wh
30510 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
30520 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
30530 65 20 74 31 2e 64 20 69 6e 20 28 73 65 6c 65 63  e t1.d in (selec
30540 74 20 63 61 73 65 20 28 61 62 73 28 28 28 63 6f  t case (abs(((co
30550 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74 31 2e  unt(distinct t1.
30560 64 2d 63 29 29 2a 20 2d 63 61 73 74 28 61 76 67  d-c))* -cast(avg
30570 28 31 31 29 20 41 53 20 69 6e 74 65 67 65 72 29  (11) AS integer)
30580 2b 6d 61 78 28 74 31 2e 63 29 29 29 29 20 77 68  +max(t1.c)))) wh
30590 65 6e 20 28 63 61 73 74 28 61 76 67 28 74 31 2e  en (cast(avg(t1.
305a0 63 2b 61 29 20 41 53 20 69 6e 74 65 67 65 72 29  c+a) AS integer)
305b0 2a 2b 6d 69 6e 28 61 29 2a 6d 61 78 28 63 29 2d  *+min(a)*max(c)-
305c0 6d 61 78 28 74 31 2e 61 29 2b 63 61 73 74 28 61  max(t1.a)+cast(a
305d0 76 67 28 66 29 20 41 53 20 69 6e 74 65 67 65 72  vg(f) AS integer
305e0 29 29 2b 63 61 73 74 28 61 76 67 28 74 31 2e 65  ))+cast(avg(t1.e
305f0 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 74 68  ) AS integer) th
30600 65 6e 20 6d 69 6e 28 31 31 29 20 65 6c 73 65 20  en min(11) else 
30610 28 28 28 6d 69 6e 28 31 31 29 29 29 29 20 65 6e  (((min(11)))) en
30620 64 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  d from t1 union 
30630 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 20  select count(*) 
30640 66 72 6f 6d 20 74 31 29 29 29 2c 63 6f 61 6c 65  from t1))),coale
30650 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
30660 62 2b 31 33 29 20 66 72 6f 6d 20 74 31 20 77 68  b+13) from t1 wh
30670 65 72 65 20 65 78 69 73 74 73 28 73 65 6c 65 63  ere exists(selec
30680 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
30690 65 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20 31  e f in (select 1
306a0 31 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  1 from t1 union 
306b0 73 65 6c 65 63 74 20 74 31 2e 62 20 66 72 6f 6d  select t1.b from
306c0 20 74 31 29 29 29 2c 74 31 2e 65 29 29 20 46 52   t1))),t1.e)) FR
306d0 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20  OM t1 WHERE NOT 
306e0 28 62 3e 31 31 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f  (b>11)}.} {}.do_
306f0 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
30700 32 37 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  270 {.  db eval 
30710 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65  {SELECT coalesce
30720 28 28 73 65 6c 65 63 74 20 6d 61 78 28 20 2d 28  ((select max( -(
30730 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a 29 2d  select count(*)-
30740 63 61 73 65 20 6d 69 6e 28 31 39 29 2d 61 62 73  case min(19)-abs
30750 28 63 6f 75 6e 74 28 2a 29 29 2b 28 6d 61 78 28  (count(*))+(max(
30760 20 2d 62 29 2d 2b 63 6f 75 6e 74 28 64 69 73 74   -b)-+count(dist
30770 69 6e 63 74 20 28 74 31 2e 65 29 29 29 20 77 68  inct (t1.e))) wh
30780 65 6e 20 6d 61 78 28 61 29 20 74 68 65 6e 20 28  en max(a) then (
30790 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31  count(distinct 1
307a0 39 29 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a  9)) else count(*
307b0 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 29 20  ) end from t1)) 
307c0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 78  from t1 where ex
307d0 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
307e0 6f 6d 20 74 31 20 77 68 65 72 65 20 61 3c 28 61  om t1 where a<(a
307f0 62 73 28 63 61 73 65 20 77 68 65 6e 20 61 2d 74  bs(case when a-t
30800 31 2e 63 2b 20 2d 31 39 2b 74 31 2e 64 20 62 65  1.c+ -19+t1.d be
30810 74 77 65 65 6e 20 31 31 20 61 6e 64 20 66 20 74  tween 11 and f t
30820 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 64 20  hen t1.f else d 
30830 65 6e 64 2b 74 31 2e 61 2b 64 29 2f 61 62 73 28  end+t1.a+d)/abs(
30840 63 29 29 29 20 6f 72 20 74 31 2e 63 3e 74 31 2e  c))) or t1.c>t1.
30850 63 29 2c 31 37 29 2a 66 20 46 52 4f 4d 20 74 31  c),17)*f FROM t1
30860 20 57 48 45 52 45 20 6e 6f 74 20 66 3c 3e 74 31   WHERE not f<>t1
30870 2e 62 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  .b}.} {}.do_test
30880 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 37 31 20   randexpr-2.271 
30890 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
308a0 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ECT coalesce((se
308b0 6c 65 63 74 20 6d 61 78 28 20 2d 28 73 65 6c 65  lect max( -(sele
308c0 63 74 20 63 6f 75 6e 74 28 2a 29 2d 63 61 73 65  ct count(*)-case
308d0 20 6d 69 6e 28 31 39 29 2d 61 62 73 28 63 6f 75   min(19)-abs(cou
308e0 6e 74 28 2a 29 29 2b 28 6d 61 78 28 20 2d 62 29  nt(*))+(max( -b)
308f0 2d 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  -+count(distinct
30900 20 28 74 31 2e 65 29 29 29 20 77 68 65 6e 20 6d   (t1.e))) when m
30910 61 78 28 61 29 20 74 68 65 6e 20 28 63 6f 75 6e  ax(a) then (coun
30920 74 28 64 69 73 74 69 6e 63 74 20 31 39 29 29 20  t(distinct 19)) 
30930 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e  else count(*) en
30940 64 20 66 72 6f 6d 20 74 31 29 29 20 66 72 6f 6d  d from t1)) from
30950 20 74 31 20 77 68 65 72 65 20 65 78 69 73 74 73   t1 where exists
30960 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
30970 31 20 77 68 65 72 65 20 61 3c 28 61 62 73 28 63  1 where a<(abs(c
30980 61 73 65 20 77 68 65 6e 20 61 2d 74 31 2e 63 2b  ase when a-t1.c+
30990 20 2d 31 39 2b 74 31 2e 64 20 62 65 74 77 65 65   -19+t1.d betwee
309a0 6e 20 31 31 20 61 6e 64 20 66 20 74 68 65 6e 20  n 11 and f then 
309b0 74 31 2e 66 20 65 6c 73 65 20 64 20 65 6e 64 2b  t1.f else d end+
309c0 74 31 2e 61 2b 64 29 2f 61 62 73 28 63 29 29 29  t1.a+d)/abs(c)))
309d0 20 6f 72 20 74 31 2e 63 3e 74 31 2e 63 29 2c 31   or t1.c>t1.c),1
309e0 37 29 2a 66 20 46 52 4f 4d 20 74 31 20 57 48 45  7)*f FROM t1 WHE
309f0 52 45 20 4e 4f 54 20 28 6e 6f 74 20 66 3c 3e 74  RE NOT (not f<>t
30a00 31 2e 62 29 7d 0a 7d 20 7b 31 30 32 30 30 7d 0a  1.b)}.} {10200}.
30a10 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
30a20 2d 32 2e 32 37 32 20 7b 0a 20 20 64 62 20 65 76  -2.272 {.  db ev
30a30 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
30a40 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73  when coalesce((s
30a50 65 6c 65 63 74 20 66 2d 63 6f 61 6c 65 73 63 65  elect f-coalesce
30a60 28 28 73 65 6c 65 63 74 20 2b 63 6f 61 6c 65 73  ((select +coales
30a70 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 63 20  ce((select t1.c 
30a80 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 74  from t1 where (t
30a90 31 2e 63 3d 28 61 62 73 28 74 31 2e 65 29 2f 61  1.c=(abs(t1.e)/a
30aa0 62 73 28 2b 74 31 2e 63 2b 66 2b 28 66 29 29 29  bs(+t1.c+f+(f)))
30ab0 29 29 2c 31 33 2b 31 37 29 2b 74 31 2e 62 20 7c  )),13+17)+t1.b |
30ac0 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20 77 68   t1.c from t1 wh
30ad0 65 72 65 20 63 61 73 65 20 77 68 65 6e 20 74 31  ere case when t1
30ae0 2e 61 20 6e 6f 74 20 69 6e 20 28 64 2c 31 37 2c  .a not in (d,17,
30af0 74 31 2e 63 29 20 74 68 65 6e 20 66 20 65 6c 73  t1.c) then f els
30b00 65 20 66 20 65 6e 64 20 7c 20 20 2d 31 33 20 69  e f end |  -13 i
30b10 6e 20 28 73 65 6c 65 63 74 20 63 61 73 74 28 61  n (select cast(a
30b20 76 67 28 74 31 2e 65 29 20 41 53 20 69 6e 74 65  vg(t1.e) AS inte
30b30 67 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  ger) from t1 uni
30b40 6f 6e 20 73 65 6c 65 63 74 20 6d 69 6e 28 74 31  on select min(t1
30b50 2e 61 29 20 66 72 6f 6d 20 74 31 29 29 2c 63 29  .a) from t1)),c)
30b60 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
30b70 37 3e 63 29 2c 20 2d 74 31 2e 62 29 3e 74 31 2e  7>c), -t1.b)>t1.
30b80 63 20 74 68 65 6e 20 31 37 20 77 68 65 6e 20 74  c then 17 when t
30b90 31 2e 62 3c 3e 31 31 20 74 68 65 6e 20 65 20 65  1.b<>11 then e e
30ba0 6c 73 65 20 74 31 2e 66 20 65 6e 64 20 46 52 4f  lse t1.f end FRO
30bb0 4d 20 74 31 20 57 48 45 52 45 20 63 61 73 65 20  M t1 WHERE case 
30bc0 77 68 65 6e 20 74 31 2e 66 20 69 6e 20 28 74 31  when t1.f in (t1
30bd0 2e 61 2b 28 61 62 73 28 31 37 29 2f 61 62 73 28  .a+(abs(17)/abs(
30be0 28 74 31 2e 64 29 29 29 2c 63 6f 61 6c 65 73 63  (t1.d))),coalesc
30bf0 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 29  e((select max(c)
30c00 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
30c10 6e 6f 74 20 28 64 2d 20 2d 63 61 73 65 20 66 20  not (d- -case f 
30c20 77 68 65 6e 20 31 37 20 74 68 65 6e 20 64 20 65  when 17 then d e
30c30 6c 73 65 20 28 31 37 29 20 65 6e 64 2b 65 2a 74  lse (17) end+e*t
30c40 31 2e 64 29 20 6e 6f 74 20 69 6e 20 28 28 74 31  1.d) not in ((t1
30c50 2e 64 29 2c 74 31 2e 66 2c 66 29 29 29 2c 63 6f  .d),t1.f,f))),co
30c60 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63  alesce((select c
30c70 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
30c80 33 20 6e 6f 74 20 69 6e 20 28 31 39 2c 64 2c 62  3 not in (19,d,b
30c90 29 29 2c 66 29 29 2c 31 37 29 20 74 68 65 6e 20  )),f)),17) then 
30ca0 74 31 2e 62 20 77 68 65 6e 20 65 3c 3d 66 20 74  t1.b when e<=f t
30cb0 68 65 6e 20 31 37 20 65 6c 73 65 20 63 20 65 6e  hen 17 else c en
30cc0 64 3c 64 20 6f 72 20 74 31 2e 64 3e 20 2d 31 39  d<d or t1.d> -19
30cd0 7d 0a 7d 20 7b 35 30 30 7d 0a 64 6f 5f 74 65 73  }.} {500}.do_tes
30ce0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 37 33  t randexpr-2.273
30cf0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
30d00 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 63  LECT case when c
30d10 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
30d20 66 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  f-coalesce((sele
30d30 63 74 20 2b 63 6f 61 6c 65 73 63 65 28 28 73 65  ct +coalesce((se
30d40 6c 65 63 74 20 74 31 2e 63 20 66 72 6f 6d 20 74  lect t1.c from t
30d50 31 20 77 68 65 72 65 20 28 74 31 2e 63 3d 28 61  1 where (t1.c=(a
30d60 62 73 28 74 31 2e 65 29 2f 61 62 73 28 2b 74 31  bs(t1.e)/abs(+t1
30d70 2e 63 2b 66 2b 28 66 29 29 29 29 29 2c 31 33 2b  .c+f+(f))))),13+
30d80 31 37 29 2b 74 31 2e 62 20 7c 20 74 31 2e 63 20  17)+t1.b | t1.c 
30d90 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 61  from t1 where ca
30da0 73 65 20 77 68 65 6e 20 74 31 2e 61 20 6e 6f 74  se when t1.a not
30db0 20 69 6e 20 28 64 2c 31 37 2c 74 31 2e 63 29 20   in (d,17,t1.c) 
30dc0 74 68 65 6e 20 66 20 65 6c 73 65 20 66 20 65 6e  then f else f en
30dd0 64 20 7c 20 20 2d 31 33 20 69 6e 20 28 73 65 6c  d |  -13 in (sel
30de0 65 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e  ect cast(avg(t1.
30df0 65 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  e) AS integer) f
30e00 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
30e10 65 63 74 20 6d 69 6e 28 74 31 2e 61 29 20 66 72  ect min(t1.a) fr
30e20 6f 6d 20 74 31 29 29 2c 63 29 20 66 72 6f 6d 20  om t1)),c) from 
30e30 74 31 20 77 68 65 72 65 20 31 37 3e 63 29 2c 20  t1 where 17>c), 
30e40 2d 74 31 2e 62 29 3e 74 31 2e 63 20 74 68 65 6e  -t1.b)>t1.c then
30e50 20 31 37 20 77 68 65 6e 20 74 31 2e 62 3c 3e 31   17 when t1.b<>1
30e60 31 20 74 68 65 6e 20 65 20 65 6c 73 65 20 74 31  1 then e else t1
30e70 2e 66 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57  .f end FROM t1 W
30e80 48 45 52 45 20 4e 4f 54 20 28 63 61 73 65 20 77  HERE NOT (case w
30e90 68 65 6e 20 74 31 2e 66 20 69 6e 20 28 74 31 2e  hen t1.f in (t1.
30ea0 61 2b 28 61 62 73 28 31 37 29 2f 61 62 73 28 28  a+(abs(17)/abs((
30eb0 74 31 2e 64 29 29 29 2c 63 6f 61 6c 65 73 63 65  t1.d))),coalesce
30ec0 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 29 20  ((select max(c) 
30ed0 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 6e  from t1 where (n
30ee0 6f 74 20 28 64 2d 20 2d 63 61 73 65 20 66 20 77  ot (d- -case f w
30ef0 68 65 6e 20 31 37 20 74 68 65 6e 20 64 20 65 6c  hen 17 then d el
30f00 73 65 20 28 31 37 29 20 65 6e 64 2b 65 2a 74 31  se (17) end+e*t1
30f10 2e 64 29 20 6e 6f 74 20 69 6e 20 28 28 74 31 2e  .d) not in ((t1.
30f20 64 29 2c 74 31 2e 66 2c 66 29 29 29 2c 63 6f 61  d),t1.f,f))),coa
30f30 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 63 20  lesce((select c 
30f40 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 33  from t1 where 13
30f50 20 6e 6f 74 20 69 6e 20 28 31 39 2c 64 2c 62 29   not in (19,d,b)
30f60 29 2c 66 29 29 2c 31 37 29 20 74 68 65 6e 20 74  ),f)),17) then t
30f70 31 2e 62 20 77 68 65 6e 20 65 3c 3d 66 20 74 68  1.b when e<=f th
30f80 65 6e 20 31 37 20 65 6c 73 65 20 63 20 65 6e 64  en 17 else c end
30f90 3c 64 20 6f 72 20 74 31 2e 64 3e 20 2d 31 39 29  <d or t1.d> -19)
30fa0 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72  }.} {}.do_test r
30fb0 61 6e 64 65 78 70 72 2d 32 2e 32 37 34 20 7b 0a  andexpr-2.274 {.
30fc0 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
30fd0 54 20 63 61 73 65 20 77 68 65 6e 20 63 6f 61 6c  T case when coal
30fe0 65 73 63 65 28 28 73 65 6c 65 63 74 20 66 2d 63  esce((select f-c
30ff0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
31000 2b 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  +coalesce((selec
31010 74 20 74 31 2e 63 20 66 72 6f 6d 20 74 31 20 77  t t1.c from t1 w
31020 68 65 72 65 20 28 74 31 2e 63 3d 28 61 62 73 28  here (t1.c=(abs(
31030 74 31 2e 65 29 2f 61 62 73 28 2b 74 31 2e 63 2b  t1.e)/abs(+t1.c+
31040 66 2b 28 66 29 29 29 29 29 2c 31 33 2b 31 37 29  f+(f))))),13+17)
31050 2b 74 31 2e 62 20 26 20 74 31 2e 63 20 66 72 6f  +t1.b & t1.c fro
31060 6d 20 74 31 20 77 68 65 72 65 20 63 61 73 65 20  m t1 where case 
31070 77 68 65 6e 20 74 31 2e 61 20 6e 6f 74 20 69 6e  when t1.a not in
31080 20 28 64 2c 31 37 2c 74 31 2e 63 29 20 74 68 65   (d,17,t1.c) the
31090 6e 20 66 20 65 6c 73 65 20 66 20 65 6e 64 20 26  n f else f end &
310a0 20 20 2d 31 33 20 69 6e 20 28 73 65 6c 65 63 74    -13 in (select
310b0 20 63 61 73 74 28 61 76 67 28 74 31 2e 65 29 20   cast(avg(t1.e) 
310c0 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
310d0 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
310e0 20 6d 69 6e 28 74 31 2e 61 29 20 66 72 6f 6d 20   min(t1.a) from 
310f0 74 31 29 29 2c 63 29 20 66 72 6f 6d 20 74 31 20  t1)),c) from t1 
31100 77 68 65 72 65 20 31 37 3e 63 29 2c 20 2d 74 31  where 17>c), -t1
31110 2e 62 29 3e 74 31 2e 63 20 74 68 65 6e 20 31 37  .b)>t1.c then 17
31120 20 77 68 65 6e 20 74 31 2e 62 3c 3e 31 31 20 74   when t1.b<>11 t
31130 68 65 6e 20 65 20 65 6c 73 65 20 74 31 2e 66 20  hen e else t1.f 
31140 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  end FROM t1 WHER
31150 45 20 63 61 73 65 20 77 68 65 6e 20 74 31 2e 66  E case when t1.f
31160 20 69 6e 20 28 74 31 2e 61 2b 28 61 62 73 28 31   in (t1.a+(abs(1
31170 37 29 2f 61 62 73 28 28 74 31 2e 64 29 29 29 2c  7)/abs((t1.d))),
31180 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
31190 20 6d 61 78 28 63 29 20 66 72 6f 6d 20 74 31 20   max(c) from t1 
311a0 77 68 65 72 65 20 28 6e 6f 74 20 28 64 2d 20 2d  where (not (d- -
311b0 63 61 73 65 20 66 20 77 68 65 6e 20 31 37 20 74  case f when 17 t
311c0 68 65 6e 20 64 20 65 6c 73 65 20 28 31 37 29 20  hen d else (17) 
311d0 65 6e 64 2b 65 2a 74 31 2e 64 29 20 6e 6f 74 20  end+e*t1.d) not 
311e0 69 6e 20 28 28 74 31 2e 64 29 2c 74 31 2e 66 2c  in ((t1.d),t1.f,
311f0 66 29 29 29 2c 63 6f 61 6c 65 73 63 65 28 28 73  f))),coalesce((s
31200 65 6c 65 63 74 20 63 20 66 72 6f 6d 20 74 31 20  elect c from t1 
31210 77 68 65 72 65 20 31 33 20 6e 6f 74 20 69 6e 20  where 13 not in 
31220 28 31 39 2c 64 2c 62 29 29 2c 66 29 29 2c 31 37  (19,d,b)),f)),17
31230 29 20 74 68 65 6e 20 74 31 2e 62 20 77 68 65 6e  ) then t1.b when
31240 20 65 3c 3d 66 20 74 68 65 6e 20 31 37 20 65 6c   e<=f then 17 el
31250 73 65 20 63 20 65 6e 64 3c 64 20 6f 72 20 74 31  se c end<d or t1
31260 2e 64 3e 20 2d 31 39 7d 0a 7d 20 7b 35 30 30 7d  .d> -19}.} {500}
31270 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
31280 72 2d 32 2e 32 37 35 20 7b 0a 20 20 64 62 20 65  r-2.275 {.  db e
31290 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
312a0 20 77 68 65 6e 20 64 2a 74 31 2e 63 2a 61 3c 3e   when d*t1.c*a<>
312b0 74 31 2e 62 2a 7e 74 31 2e 62 2a 74 31 2e 66 2d  t1.b*~t1.b*t1.f-
312c0 62 20 74 68 65 6e 20 65 20 65 6c 73 65 20 31 37  b then e else 17
312d0 20 65 6e 64 2a 74 31 2e 65 2b 63 61 73 65 20 77   end*t1.e+case w
312e0 68 65 6e 20 61 20 6e 6f 74 20 62 65 74 77 65 65  hen a not betwee
312f0 6e 20 74 31 2e 61 20 61 6e 64 20 74 31 2e 64 20  n t1.a and t1.d 
31300 6f 72 20 28 73 65 6c 65 63 74 20 20 2d 20 2d 63  or (select  - -c
31310 61 73 74 28 61 76 67 28 63 29 20 41 53 20 69 6e  ast(avg(c) AS in
31320 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 3c  teger) from t1)<
31330 3e 31 37 2b 63 20 74 68 65 6e 20 63 61 73 65 20  >17+c then case 
31340 31 31 20 77 68 65 6e 20 74 31 2e 66 20 74 68 65  11 when t1.f the
31350 6e 20 20 2d 74 31 2e 62 20 65 6c 73 65 20 74 31  n  -t1.b else t1
31360 2e 62 20 65 6e 64 20 77 68 65 6e 20 31 33 20 6e  .b end when 13 n
31370 6f 74 20 69 6e 20 28 63 2c 74 31 2e 66 2c 31 39  ot in (c,t1.f,19
31380 29 20 6f 72 20 6e 6f 74 20 65 78 69 73 74 73 28  ) or not exists(
31390 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
313a0 20 77 68 65 72 65 20 31 33 3d 74 31 2e 64 20 6f   where 13=t1.d o
313b0 72 20 74 31 2e 65 3c 3e 61 29 20 74 68 65 6e 20  r t1.e<>a) then 
313c0 28 31 37 29 20 65 6c 73 65 20 20 2d 74 31 2e 66  (17) else  -t1.f
313d0 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45   end FROM t1 WHE
313e0 52 45 20 28 6e 6f 74 20 28 63 61 73 65 20 65 20  RE (not (case e 
313f0 77 68 65 6e 20 65 20 74 68 65 6e 20 2b 63 61 73  when e then +cas
31400 65 20 77 68 65 6e 20 65 3e 3d 61 20 61 6e 64 20  e when e>=a and 
31410 31 33 3c 3e 65 2a 74 31 2e 65 20 6f 72 20 74 31  13<>e*t1.e or t1
31420 2e 64 3c 3e 31 31 20 74 68 65 6e 20 74 31 2e 63  .d<>11 then t1.c
31430 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 20 65   else t1.b end e
31440 6c 73 65 20 31 37 20 65 6e 64 29 20 69 6e 20 28  lse 17 end) in (
31450 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
31460 20 2d 74 31 2e 63 29 20 41 53 20 69 6e 74 65 67   -t1.c) AS integ
31470 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  er) from t1 unio
31480 6e 20 73 65 6c 65 63 74 20 63 61 73 65 20 6d 69  n select case mi
31490 6e 28 31 33 29 20 77 68 65 6e 20 20 2d 2b 63 6f  n(13) when  -+co
314a0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31 33 29  unt(distinct 13)
314b0 20 74 68 65 6e 20 63 61 73 65 20 28 2b 28 63 61   then case (+(ca
314c0 73 74 28 61 76 67 28 65 29 20 41 53 20 69 6e 74  st(avg(e) AS int
314d0 65 67 65 72 29 29 2b 28 28 63 61 73 74 28 61 76  eger))+((cast(av
314e0 67 28 31 33 29 20 41 53 20 69 6e 74 65 67 65 72  g(13) AS integer
314f0 29 29 29 2a 20 2d 20 2d 63 6f 75 6e 74 28 64 69  )))* - -count(di
31500 73 74 69 6e 63 74 20 63 29 2a 63 6f 75 6e 74 28  stinct c)*count(
31510 2a 29 29 20 7c 20 63 6f 75 6e 74 28 2a 29 20 77  *)) | count(*) w
31520 68 65 6e 20 6d 69 6e 28 74 31 2e 63 29 20 74 68  hen min(t1.c) th
31530 65 6e 20 28 6d 69 6e 28 31 31 29 29 20 65 6c 73  en (min(11)) els
31540 65 20 6d 61 78 28 66 29 20 65 6e 64 20 65 6c 73  e max(f) end els
31550 65 20 63 61 73 74 28 61 76 67 28 31 37 29 20 41  e cast(avg(17) A
31560 53 20 69 6e 74 65 67 65 72 29 20 65 6e 64 20 66  S integer) end f
31570 72 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 32 35 30  rom t1))}.} {250
31580 32 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  200}.do_test ran
31590 64 65 78 70 72 2d 32 2e 32 37 36 20 7b 0a 20 20  dexpr-2.276 {.  
315a0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
315b0 63 61 73 65 20 77 68 65 6e 20 64 2a 74 31 2e 63  case when d*t1.c
315c0 2a 61 3c 3e 74 31 2e 62 2a 7e 74 31 2e 62 2a 74  *a<>t1.b*~t1.b*t
315d0 31 2e 66 2d 62 20 74 68 65 6e 20 65 20 65 6c 73  1.f-b then e els
315e0 65 20 31 37 20 65 6e 64 2a 74 31 2e 65 2b 63 61  e 17 end*t1.e+ca
315f0 73 65 20 77 68 65 6e 20 61 20 6e 6f 74 20 62 65  se when a not be
31600 74 77 65 65 6e 20 74 31 2e 61 20 61 6e 64 20 74  tween t1.a and t
31610 31 2e 64 20 6f 72 20 28 73 65 6c 65 63 74 20 20  1.d or (select  
31620 2d 20 2d 63 61 73 74 28 61 76 67 28 63 29 20 41  - -cast(avg(c) A
31630 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
31640 74 31 29 3c 3e 31 37 2b 63 20 74 68 65 6e 20 63  t1)<>17+c then c
31650 61 73 65 20 31 31 20 77 68 65 6e 20 74 31 2e 66  ase 11 when t1.f
31660 20 74 68 65 6e 20 20 2d 74 31 2e 62 20 65 6c 73   then  -t1.b els
31670 65 20 74 31 2e 62 20 65 6e 64 20 77 68 65 6e 20  e t1.b end when 
31680 31 33 20 6e 6f 74 20 69 6e 20 28 63 2c 74 31 2e  13 not in (c,t1.
31690 66 2c 31 39 29 20 6f 72 20 6e 6f 74 20 65 78 69  f,19) or not exi
316a0 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
316b0 6d 20 74 31 20 77 68 65 72 65 20 31 33 3d 74 31  m t1 where 13=t1
316c0 2e 64 20 6f 72 20 74 31 2e 65 3c 3e 61 29 20 74  .d or t1.e<>a) t
316d0 68 65 6e 20 28 31 37 29 20 65 6c 73 65 20 20 2d  hen (17) else  -
316e0 74 31 2e 66 20 65 6e 64 20 46 52 4f 4d 20 74 31  t1.f end FROM t1
316f0 20 57 48 45 52 45 20 4e 4f 54 20 28 28 6e 6f 74   WHERE NOT ((not
31700 20 28 63 61 73 65 20 65 20 77 68 65 6e 20 65 20   (case e when e 
31710 74 68 65 6e 20 2b 63 61 73 65 20 77 68 65 6e 20  then +case when 
31720 65 3e 3d 61 20 61 6e 64 20 31 33 3c 3e 65 2a 74  e>=a and 13<>e*t
31730 31 2e 65 20 6f 72 20 74 31 2e 64 3c 3e 31 31 20  1.e or t1.d<>11 
31740 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20 74  then t1.c else t
31750 31 2e 62 20 65 6e 64 20 65 6c 73 65 20 31 37 20  1.b end else 17 
31760 65 6e 64 29 20 69 6e 20 28 73 65 6c 65 63 74 20  end) in (select 
31770 63 61 73 74 28 61 76 67 28 20 2d 74 31 2e 63 29  cast(avg( -t1.c)
31780 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f   AS integer) fro
31790 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
317a0 74 20 63 61 73 65 20 6d 69 6e 28 31 33 29 20 77  t case min(13) w
317b0 68 65 6e 20 20 2d 2b 63 6f 75 6e 74 28 64 69 73  hen  -+count(dis
317c0 74 69 6e 63 74 20 31 33 29 20 74 68 65 6e 20 63  tinct 13) then c
317d0 61 73 65 20 28 2b 28 63 61 73 74 28 61 76 67 28  ase (+(cast(avg(
317e0 65 29 20 41 53 20 69 6e 74 65 67 65 72 29 29 2b  e) AS integer))+
317f0 28 28 63 61 73 74 28 61 76 67 28 31 33 29 20 41  ((cast(avg(13) A
31800 53 20 69 6e 74 65 67 65 72 29 29 29 2a 20 2d 20  S integer)))* - 
31810 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  -count(distinct 
31820 63 29 2a 63 6f 75 6e 74 28 2a 29 29 20 7c 20 63  c)*count(*)) | c
31830 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 6d 69 6e  ount(*) when min
31840 28 74 31 2e 63 29 20 74 68 65 6e 20 28 6d 69 6e  (t1.c) then (min
31850 28 31 31 29 29 20 65 6c 73 65 20 6d 61 78 28 66  (11)) else max(f
31860 29 20 65 6e 64 20 65 6c 73 65 20 63 61 73 74 28  ) end else cast(
31870 61 76 67 28 31 37 29 20 41 53 20 69 6e 74 65 67  avg(17) AS integ
31880 65 72 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29  er) end from t1)
31890 29 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  ))}.} {}.do_test
318a0 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 37 37 20   randexpr-2.277 
318b0 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
318c0 45 43 54 20 28 73 65 6c 65 63 74 20 6d 61 78 28  ECT (select max(
318d0 74 31 2e 61 29 2a 61 62 73 28 63 6f 75 6e 74 28  t1.a)*abs(count(
318e0 64 69 73 74 69 6e 63 74 20 66 2d 74 31 2e 61 2d  distinct f-t1.a-
318f0 28 61 62 73 28 74 31 2e 61 29 2f 61 62 73 28 63  (abs(t1.a)/abs(c
31900 61 73 65 20 65 20 77 68 65 6e 20 63 61 73 65 20  ase e when case 
31910 74 31 2e 66 20 77 68 65 6e 20 65 2a 28 62 29 2d  t1.f when e*(b)-
31920 31 39 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20  19 then 11 else 
31930 74 31 2e 64 20 65 6e 64 20 74 68 65 6e 20 74 31  t1.d end then t1
31940 2e 66 20 65 6c 73 65 20 31 31 20 65 6e 64 29 29  .f else 11 end))
31950 29 29 20 7c 20 63 61 73 65 20 2b 7e 63 61 73 74  )) | case +~cast
31960 28 61 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e  (avg(t1.a) AS in
31970 74 65 67 65 72 29 2d 2b 61 62 73 28 63 6f 75 6e  teger)-+abs(coun
31980 74 28 64 69 73 74 69 6e 63 74 20 31 37 29 29 20  t(distinct 17)) 
31990 77 68 65 6e 20 63 61 73 65 20 63 6f 75 6e 74 28  when case count(
319a0 64 69 73 74 69 6e 63 74 20 74 31 2e 62 29 2a 63  distinct t1.b)*c
319b0 61 73 74 28 61 76 67 28 74 31 2e 61 29 20 41 53  ast(avg(t1.a) AS
319c0 20 69 6e 74 65 67 65 72 29 2b 63 6f 75 6e 74 28   integer)+count(
319d0 64 69 73 74 69 6e 63 74 20 74 31 2e 63 29 20 77  distinct t1.c) w
319e0 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20 74 68 65  hen count(*) the
319f0 6e 20 6d 69 6e 28 74 31 2e 66 29 20 65 6c 73 65  n min(t1.f) else
31a00 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
31a10 65 29 20 65 6e 64 20 74 68 65 6e 20 6d 61 78 28  e) end then max(
31a20 28 74 31 2e 65 29 29 20 65 6c 73 65 20 6d 61 78  (t1.e)) else max
31a30 28 64 29 20 65 6e 64 2d 63 6f 75 6e 74 28 2a 29  (d) end-count(*)
31a40 20 66 72 6f 6d 20 74 31 29 20 46 52 4f 4d 20 74   from t1) FROM t
31a50 31 20 57 48 45 52 45 20 65 20 6e 6f 74 20 62 65  1 WHERE e not be
31a60 74 77 65 65 6e 20 28 73 65 6c 65 63 74 20 6d 69  tween (select mi
31a70 6e 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 29  n(t1.a) from t1)
31a80 20 61 6e 64 20 64 2b 74 31 2e 64 7d 0a 7d 20 7b   and d+t1.d}.} {
31a90 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
31aa0 70 72 2d 32 2e 32 37 38 20 7b 0a 20 20 64 62 20  pr-2.278 {.  db 
31ab0 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28 73 65  eval {SELECT (se
31ac0 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29 2a 61  lect max(t1.a)*a
31ad0 62 73 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  bs(count(distinc
31ae0 74 20 66 2d 74 31 2e 61 2d 28 61 62 73 28 74 31  t f-t1.a-(abs(t1
31af0 2e 61 29 2f 61 62 73 28 63 61 73 65 20 65 20 77  .a)/abs(case e w
31b00 68 65 6e 20 63 61 73 65 20 74 31 2e 66 20 77 68  hen case t1.f wh
31b10 65 6e 20 65 2a 28 62 29 2d 31 39 20 74 68 65 6e  en e*(b)-19 then
31b20 20 31 31 20 65 6c 73 65 20 74 31 2e 64 20 65 6e   11 else t1.d en
31b30 64 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65  d then t1.f else
31b40 20 31 31 20 65 6e 64 29 29 29 29 20 7c 20 63 61   11 end)))) | ca
31b50 73 65 20 2b 7e 63 61 73 74 28 61 76 67 28 74 31  se +~cast(avg(t1
31b60 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 2d  .a) AS integer)-
31b70 2b 61 62 73 28 63 6f 75 6e 74 28 64 69 73 74 69  +abs(count(disti
31b80 6e 63 74 20 31 37 29 29 20 77 68 65 6e 20 63 61  nct 17)) when ca
31b90 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  se count(distinc
31ba0 74 20 74 31 2e 62 29 2a 63 61 73 74 28 61 76 67  t t1.b)*cast(avg
31bb0 28 74 31 2e 61 29 20 41 53 20 69 6e 74 65 67 65  (t1.a) AS intege
31bc0 72 29 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  r)+count(distinc
31bd0 74 20 74 31 2e 63 29 20 77 68 65 6e 20 63 6f 75  t t1.c) when cou
31be0 6e 74 28 2a 29 20 74 68 65 6e 20 6d 69 6e 28 74  nt(*) then min(t
31bf0 31 2e 66 29 20 65 6c 73 65 20 63 6f 75 6e 74 28  1.f) else count(
31c00 64 69 73 74 69 6e 63 74 20 65 29 20 65 6e 64 20  distinct e) end 
31c10 74 68 65 6e 20 6d 61 78 28 28 74 31 2e 65 29 29  then max((t1.e))
31c20 20 65 6c 73 65 20 6d 61 78 28 64 29 20 65 6e 64   else max(d) end
31c30 2d 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74  -count(*) from t
31c40 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  1) FROM t1 WHERE
31c50 20 4e 4f 54 20 28 65 20 6e 6f 74 20 62 65 74 77   NOT (e not betw
31c60 65 65 6e 20 28 73 65 6c 65 63 74 20 6d 69 6e 28  een (select min(
31c70 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 29 20 61  t1.a) from t1) a
31c80 6e 64 20 64 2b 74 31 2e 64 29 7d 0a 7d 20 7b 34  nd d+t1.d)}.} {4
31c90 39 35 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  95}.do_test rand
31ca0 65 78 70 72 2d 32 2e 32 37 39 20 7b 0a 20 20 64  expr-2.279 {.  d
31cb0 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 28  b eval {SELECT (
31cc0 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29  select max(t1.a)
31cd0 2a 61 62 73 28 63 6f 75 6e 74 28 64 69 73 74 69  *abs(count(disti
31ce0 6e 63 74 20 66 2d 74 31 2e 61 2d 28 61 62 73 28  nct f-t1.a-(abs(
31cf0 74 31 2e 61 29 2f 61 62 73 28 63 61 73 65 20 65  t1.a)/abs(case e
31d00 20 77 68 65 6e 20 63 61 73 65 20 74 31 2e 66 20   when case t1.f 
31d10 77 68 65 6e 20 65 2a 28 62 29 2d 31 39 20 74 68  when e*(b)-19 th
31d20 65 6e 20 31 31 20 65 6c 73 65 20 74 31 2e 64 20  en 11 else t1.d 
31d30 65 6e 64 20 74 68 65 6e 20 74 31 2e 66 20 65 6c  end then t1.f el
31d40 73 65 20 31 31 20 65 6e 64 29 29 29 29 20 26 20  se 11 end)))) & 
31d50 63 61 73 65 20 2b 7e 63 61 73 74 28 61 76 67 28  case +~cast(avg(
31d60 74 31 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72  t1.a) AS integer
31d70 29 2d 2b 61 62 73 28 63 6f 75 6e 74 28 64 69 73  )-+abs(count(dis
31d80 74 69 6e 63 74 20 31 37 29 29 20 77 68 65 6e 20  tinct 17)) when 
31d90 63 61 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69  case count(disti
31da0 6e 63 74 20 74 31 2e 62 29 2a 63 61 73 74 28 61  nct t1.b)*cast(a
31db0 76 67 28 74 31 2e 61 29 20 41 53 20 69 6e 74 65  vg(t1.a) AS inte
31dc0 67 65 72 29 2b 63 6f 75 6e 74 28 64 69 73 74 69  ger)+count(disti
31dd0 6e 63 74 20 74 31 2e 63 29 20 77 68 65 6e 20 63  nct t1.c) when c
31de0 6f 75 6e 74 28 2a 29 20 74 68 65 6e 20 6d 69 6e  ount(*) then min
31df0 28 74 31 2e 66 29 20 65 6c 73 65 20 63 6f 75 6e  (t1.f) else coun
31e00 74 28 64 69 73 74 69 6e 63 74 20 65 29 20 65 6e  t(distinct e) en
31e10 64 20 74 68 65 6e 20 6d 61 78 28 28 74 31 2e 65  d then max((t1.e
31e20 29 29 20 65 6c 73 65 20 6d 61 78 28 64 29 20 65  )) else max(d) e
31e30 6e 64 2d 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d  nd-count(*) from
31e40 20 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45   t1) FROM t1 WHE
31e50 52 45 20 4e 4f 54 20 28 65 20 6e 6f 74 20 62 65  RE NOT (e not be
31e60 74 77 65 65 6e 20 28 73 65 6c 65 63 74 20 6d 69  tween (select mi
31e70 6e 28 74 31 2e 61 29 20 66 72 6f 6d 20 74 31 29  n(t1.a) from t1)
31e80 20 61 6e 64 20 64 2b 74 31 2e 64 29 7d 0a 7d 20   and d+t1.d)}.} 
31e90 7b 34 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64  {4}.do_test rand
31ea0 65 78 70 72 2d 32 2e 32 38 30 20 7b 0a 20 20 64  expr-2.280 {.  d
31eb0 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 65  b eval {SELECT e
31ec0 2a 63 2d 74 31 2e 65 2a 74 31 2e 63 2b 2b 28 73  *c-t1.e*t1.c++(s
31ed0 65 6c 65 63 74 20 61 62 73 28 63 61 73 65 20 61  elect abs(case a
31ee0 62 73 28 6d 61 78 28 63 6f 61 6c 65 73 63 65 28  bs(max(coalesce(
31ef0 28 73 65 6c 65 63 74 20 66 20 66 72 6f 6d 20 74  (select f from t
31f00 31 20 77 68 65 72 65 20 28 62 2a 63 6f 61 6c 65  1 where (b*coale
31f10 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
31f20 62 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  b) from t1 where
31f30 20 31 37 3e 66 29 2c 74 31 2e 65 29 20 6e 6f 74   17>f),t1.e) not
31f40 20 62 65 74 77 65 65 6e 20 63 20 61 6e 64 20 66   between c and f
31f50 20 6f 72 20 74 31 2e 61 3e 64 20 61 6e 64 20 74   or t1.a>d and t
31f60 31 2e 61 3c 31 31 20 6f 72 20 61 3c 3e 20 2d 66  1.a<11 or a<> -f
31f70 29 29 2c 28 74 31 2e 61 29 29 29 29 20 77 68 65  )),(t1.a)))) whe
31f80 6e 20 20 2d 2b 63 6f 75 6e 74 28 64 69 73 74 69  n  -+count(disti
31f90 6e 63 74 20 65 29 20 74 68 65 6e 20 20 2d 2b 28  nct e) then  -+(
31fa0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 31  count(distinct 1
31fb0 39 29 29 2b 6d 69 6e 28 74 31 2e 63 29 20 65 6c  9))+min(t1.c) el
31fc0 73 65 20 20 2d 6d 69 6e 28 74 31 2e 66 29 20 65  se  -min(t1.f) e
31fd0 6e 64 29 20 66 72 6f 6d 20 74 31 29 2b 74 31 2e  nd) from t1)+t1.
31fe0 62 2d 31 39 20 46 52 4f 4d 20 74 31 20 57 48 45  b-19 FROM t1 WHE
31ff0 52 45 20 64 2d 63 6f 61 6c 65 73 63 65 28 28 73  RE d-coalesce((s
32000 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 64 2a 63  elect max(t1.d*c
32010 2b 63 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  +c) from t1 wher
32020 65 20 74 31 2e 66 20 62 65 74 77 65 65 6e 20 28  e t1.f between (
32030 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73  select count(dis
32040 74 69 6e 63 74 20 74 31 2e 62 2d 65 29 2b 61 62  tinct t1.b-e)+ab
32050 73 28 7e 63 61 73 65 20 63 61 73 65 20 7e 63 61  s(~case case ~ca
32060 73 74 28 61 76 67 28 74 31 2e 66 29 20 41 53 20  st(avg(t1.f) AS 
32070 69 6e 74 65 67 65 72 29 2d 63 6f 75 6e 74 28 64  integer)-count(d
32080 69 73 74 69 6e 63 74 20 74 31 2e 61 29 20 77 68  istinct t1.a) wh
32090 65 6e 20 63 6f 75 6e 74 28 2a 29 20 74 68 65 6e  en count(*) then
320a0 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
320b0 65 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 2a 29  e) else count(*)
320c0 20 65 6e 64 20 77 68 65 6e 20 6d 69 6e 28 65 29   end when min(e)
320d0 20 74 68 65 6e 20 6d 69 6e 28 20 2d 74 31 2e 63   then min( -t1.c
320e0 29 20 65 6c 73 65 20 6d 61 78 28 61 29 20 65 6e  ) else max(a) en
320f0 64 29 20 66 72 6f 6d 20 74 31 29 2b 31 37 20 61  d) from t1)+17 a
32100 6e 64 20 20 2d 63 61 73 65 20 77 68 65 6e 20 64  nd  -case when d
32110 3e 3d 64 2d 31 31 20 74 68 65 6e 20 74 31 2e 63  >=d-11 then t1.c
32120 20 65 6c 73 65 20 74 31 2e 61 20 65 6e 64 29 2c   else t1.a end),
32130 74 31 2e 61 29 2a 74 31 2e 61 20 6e 6f 74 20 69  t1.a)*t1.a not i
32140 6e 20 28 74 31 2e 66 2c 74 31 2e 66 2c 64 29 7d  n (t1.f,t1.f,d)}
32150 0a 7d 20 7b 37 38 31 7d 0a 64 6f 5f 74 65 73 74  .} {781}.do_test
32160 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 38 31 20   randexpr-2.281 
32170 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
32180 45 43 54 20 65 2a 63 2d 74 31 2e 65 2a 74 31 2e  ECT e*c-t1.e*t1.
32190 63 2b 2b 28 73 65 6c 65 63 74 20 61 62 73 28 63  c++(select abs(c
321a0 61 73 65 20 61 62 73 28 6d 61 78 28 63 6f 61 6c  ase abs(max(coal
321b0 65 73 63 65 28 28 73 65 6c 65 63 74 20 66 20 66  esce((select f f
321c0 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 62 2a  rom t1 where (b*
321d0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
321e0 20 6d 61 78 28 62 29 20 66 72 6f 6d 20 74 31 20   max(b) from t1 
321f0 77 68 65 72 65 20 31 37 3e 66 29 2c 74 31 2e 65  where 17>f),t1.e
32200 29 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 63 20  ) not between c 
32210 61 6e 64 20 66 20 6f 72 20 74 31 2e 61 3e 64 20  and f or t1.a>d 
32220 61 6e 64 20 74 31 2e 61 3c 31 31 20 6f 72 20 61  and t1.a<11 or a
32230 3c 3e 20 2d 66 29 29 2c 28 74 31 2e 61 29 29 29  <> -f)),(t1.a)))
32240 29 20 77 68 65 6e 20 20 2d 2b 63 6f 75 6e 74 28  ) when  -+count(
32250 64 69 73 74 69 6e 63 74 20 65 29 20 74 68 65 6e  distinct e) then
32260 20 20 2d 2b 28 63 6f 75 6e 74 28 64 69 73 74 69    -+(count(disti
32270 6e 63 74 20 31 39 29 29 2b 6d 69 6e 28 74 31 2e  nct 19))+min(t1.
32280 63 29 20 65 6c 73 65 20 20 2d 6d 69 6e 28 74 31  c) else  -min(t1
32290 2e 66 29 20 65 6e 64 29 20 66 72 6f 6d 20 74 31  .f) end) from t1
322a0 29 2b 74 31 2e 62 2d 31 39 20 46 52 4f 4d 20 74  )+t1.b-19 FROM t
322b0 31 20 57 48 45 52 45 20 4e 4f 54 20 28 64 2d 63  1 WHERE NOT (d-c
322c0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
322d0 6d 61 78 28 74 31 2e 64 2a 63 2b 63 29 20 66 72  max(t1.d*c+c) fr
322e0 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 66  om t1 where t1.f
322f0 20 62 65 74 77 65 65 6e 20 28 73 65 6c 65 63 74   between (select
32300 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
32310 74 31 2e 62 2d 65 29 2b 61 62 73 28 7e 63 61 73  t1.b-e)+abs(~cas
32320 65 20 63 61 73 65 20 7e 63 61 73 74 28 61 76 67  e case ~cast(avg
32330 28 74 31 2e 66 29 20 41 53 20 69 6e 74 65 67 65  (t1.f) AS intege
32340 72 29 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  r)-count(distinc
32350 74 20 74 31 2e 61 29 20 77 68 65 6e 20 63 6f 75  t t1.a) when cou
32360 6e 74 28 2a 29 20 74 68 65 6e 20 63 6f 75 6e 74  nt(*) then count
32370 28 64 69 73 74 69 6e 63 74 20 65 29 20 65 6c 73  (distinct e) els
32380 65 20 63 6f 75 6e 74 28 2a 29 20 65 6e 64 20 77  e count(*) end w
32390 68 65 6e 20 6d 69 6e 28 65 29 20 74 68 65 6e 20  hen min(e) then 
323a0 6d 69 6e 28 20 2d 74 31 2e 63 29 20 65 6c 73 65  min( -t1.c) else
323b0 20 6d 61 78 28 61 29 20 65 6e 64 29 20 66 72 6f   max(a) end) fro
323c0 6d 20 74 31 29 2b 31 37 20 61 6e 64 20 20 2d 63  m t1)+17 and  -c
323d0 61 73 65 20 77 68 65 6e 20 64 3e 3d 64 2d 31 31  ase when d>=d-11
323e0 20 74 68 65 6e 20 74 31 2e 63 20 65 6c 73 65 20   then t1.c else 
323f0 74 31 2e 61 20 65 6e 64 29 2c 74 31 2e 61 29 2a  t1.a end),t1.a)*
32400 74 31 2e 61 20 6e 6f 74 20 69 6e 20 28 74 31 2e  t1.a not in (t1.
32410 66 2c 74 31 2e 66 2c 64 29 29 7d 0a 7d 20 7b 7d  f,t1.f,d))}.} {}
32420 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
32430 72 2d 32 2e 32 38 32 20 7b 0a 20 20 64 62 20 65  r-2.282 {.  db e
32440 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
32450 65 73 63 65 28 28 73 65 6c 65 63 74 20 61 20 66  esce((select a f
32460 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 65 78  rom t1 where (ex
32470 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
32480 6f 6d 20 74 31 20 77 68 65 72 65 20 31 31 2d 63  om t1 where 11-c
32490 61 73 65 20 77 68 65 6e 20 28 28 73 65 6c 65 63  ase when ((selec
324a0 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  t count(distinct
324b0 20 74 31 2e 65 2b 64 29 20 66 72 6f 6d 20 74 31   t1.e+d) from t1
324c0 29 29 3c 3e 74 31 2e 64 2a 66 20 74 68 65 6e 20  ))<>t1.d*f then 
324d0 20 2d 31 33 20 77 68 65 6e 20 74 31 2e 62 20 69   -13 when t1.b i
324e0 6e 20 28 73 65 6c 65 63 74 20 61 62 73 28 63 61  n (select abs(ca
324f0 73 74 28 61 76 67 28 63 29 20 41 53 20 69 6e 74  st(avg(c) AS int
32500 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31 20 75  eger)) from t1 u
32510 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
32520 74 28 64 69 73 74 69 6e 63 74 20 65 29 2a 63 6f  t(distinct e)*co
32530 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29 2d  unt(distinct c)-
32540 63 61 73 74 28 61 76 67 28 65 29 20 41 53 20 69  cast(avg(e) AS i
32550 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
32560 20 6f 72 20 63 20 69 6e 20 28 73 65 6c 65 63 74   or c in (select
32570 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e   t1.d from t1 un
32580 69 6f 6e 20 73 65 6c 65 63 74 20 31 37 20 66 72  ion select 17 fr
32590 6f 6d 20 74 31 29 20 74 68 65 6e 20 61 20 65 6c  om t1) then a el
325a0 73 65 20 74 31 2e 62 20 65 6e 64 3e 3d 74 31 2e  se t1.b end>=t1.
325b0 63 29 20 61 6e 64 20 66 3e 3d 64 20 61 6e 64 20  c) and f>=d and 
325c0 64 3e 3d 74 31 2e 66 29 29 2c 63 61 73 65 20 77  d>=t1.f)),case w
325d0 68 65 6e 20 31 31 3d 31 39 20 61 6e 64 20 74 31  hen 11=19 and t1
325e0 2e 61 20 62 65 74 77 65 65 6e 20 74 31 2e 64 20  .a between t1.d 
325f0 61 6e 64 20 65 20 74 68 65 6e 20 74 31 2e 64 2d  and e then t1.d-
32600 62 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 29  b else t1.b end)
32610 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31   FROM t1 WHERE 1
32620 39 20 6e 6f 74 20 69 6e 20 28 20 2d 74 31 2e 66  9 not in ( -t1.f
32630 2c 2b 31 39 2c 74 31 2e 62 29 7d 0a 7d 20 7b 7d  ,+19,t1.b)}.} {}
32640 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
32650 72 2d 32 2e 32 38 33 20 7b 0a 20 20 64 62 20 65  r-2.283 {.  db e
32660 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
32670 65 73 63 65 28 28 73 65 6c 65 63 74 20 61 20 66  esce((select a f
32680 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 65 78  rom t1 where (ex
32690 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
326a0 6f 6d 20 74 31 20 77 68 65 72 65 20 31 31 2d 63  om t1 where 11-c
326b0 61 73 65 20 77 68 65 6e 20 28 28 73 65 6c 65 63  ase when ((selec
326c0 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  t count(distinct
326d0 20 74 31 2e 65 2b 64 29 20 66 72 6f 6d 20 74 31   t1.e+d) from t1
326e0 29 29 3c 3e 74 31 2e 64 2a 66 20 74 68 65 6e 20  ))<>t1.d*f then 
326f0 20 2d 31 33 20 77 68 65 6e 20 74 31 2e 62 20 69   -13 when t1.b i
32700 6e 20 28 73 65 6c 65 63 74 20 61 62 73 28 63 61  n (select abs(ca
32710 73 74 28 61 76 67 28 63 29 20 41 53 20 69 6e 74  st(avg(c) AS int
32720 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31 20 75  eger)) from t1 u
32730 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
32740 74 28 64 69 73 74 69 6e 63 74 20 65 29 2a 63 6f  t(distinct e)*co
32750 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29 2d  unt(distinct c)-
32760 63 61 73 74 28 61 76 67 28 65 29 20 41 53 20 69  cast(avg(e) AS i
32770 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
32780 20 6f 72 20 63 20 69 6e 20 28 73 65 6c 65 63 74   or c in (select
32790 20 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 75 6e   t1.d from t1 un
327a0 69 6f 6e 20 73 65 6c 65 63 74 20 31 37 20 66 72  ion select 17 fr
327b0 6f 6d 20 74 31 29 20 74 68 65 6e 20 61 20 65 6c  om t1) then a el
327c0 73 65 20 74 31 2e 62 20 65 6e 64 3e 3d 74 31 2e  se t1.b end>=t1.
327d0 63 29 20 61 6e 64 20 66 3e 3d 64 20 61 6e 64 20  c) and f>=d and 
327e0 64 3e 3d 74 31 2e 66 29 29 2c 63 61 73 65 20 77  d>=t1.f)),case w
327f0 68 65 6e 20 31 31 3d 31 39 20 61 6e 64 20 74 31  hen 11=19 and t1
32800 2e 61 20 62 65 74 77 65 65 6e 20 74 31 2e 64 20  .a between t1.d 
32810 61 6e 64 20 65 20 74 68 65 6e 20 74 31 2e 64 2d  and e then t1.d-
32820 62 20 65 6c 73 65 20 74 31 2e 62 20 65 6e 64 29  b else t1.b end)
32830 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
32840 4f 54 20 28 31 39 20 6e 6f 74 20 69 6e 20 28 20  OT (19 not in ( 
32850 2d 74 31 2e 66 2c 2b 31 39 2c 74 31 2e 62 29 29  -t1.f,+19,t1.b))
32860 7d 0a 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73  }.} {200}.do_tes
32870 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 38 34  t randexpr-2.284
32880 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
32890 4c 45 43 54 20 28 7e 63 61 73 65 20 77 68 65 6e  LECT (~case when
328a0 20 74 31 2e 66 3e 28 61 62 73 28 74 31 2e 63 29   t1.f>(abs(t1.c)
328b0 2f 61 62 73 28 31 33 2d 63 6f 61 6c 65 73 63 65  /abs(13-coalesce
328c0 28 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e  ((select max(t1.
328d0 61 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  a) from t1 where
328e0 20 63 61 73 65 20 77 68 65 6e 20 65 20 6e 6f 74   case when e not
328f0 20 69 6e 20 28 63 2c 74 31 2e 61 2c 7e 31 31 29   in (c,t1.a,~11)
32900 20 74 68 65 6e 20 31 39 2b 28 20 2d 63 29 20 65   then 19+( -c) e
32910 6c 73 65 20 61 20 65 6e 64 20 69 6e 20 28 73 65  lse a end in (se
32920 6c 65 63 74 20 28 31 39 29 20 66 72 6f 6d 20 74  lect (19) from t
32930 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74  1 union select t
32940 31 2e 63 20 66 72 6f 6d 20 74 31 29 29 2c 74 31  1.c from t1)),t1
32950 2e 62 29 2b 61 29 29 20 61 6e 64 20 65 3e 64 20  .b)+a)) and e>d 
32960 61 6e 64 20 28 74 31 2e 61 29 3d 65 20 74 68 65  and (t1.a)=e the
32970 6e 20 74 31 2e 65 20 77 68 65 6e 20 28 6e 6f 74  n t1.e when (not
32980 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
32990 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 20   from t1 where  
329a0 2d 74 31 2e 64 3d 65 29 20 61 6e 64 20 20 2d 64  -t1.d=e) and  -d
329b0 20 69 6e 20 28 73 65 6c 65 63 74 20 64 20 66 72   in (select d fr
329c0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
329d0 63 74 20 65 20 66 72 6f 6d 20 74 31 29 29 20 74  ct e from t1)) t
329e0 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20 61 20  hen t1.b else a 
329f0 65 6e 64 29 20 46 52 4f 4d 20 74 31 20 57 48 45  end) FROM t1 WHE
32a00 52 45 20 28 74 31 2e 66 20 69 6e 20 28 73 65 6c  RE (t1.f in (sel
32a10 65 63 74 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ect coalesce((se
32a20 6c 65 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63  lect max(coalesc
32a30 65 28 28 73 65 6c 65 63 74 20 63 20 66 72 6f 6d  e((select c from
32a40 20 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73   t1 where coales
32a50 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63  ce((select max(c
32a60 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
32a70 6d 61 78 28 2b 2b 31 33 2a 74 31 2e 64 29 20 66  max(++13*t1.d) f
32a80 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 61 73  rom t1 where cas
32a90 65 20 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e  e when case when
32aa0 20 65 3c 3e 31 33 20 6f 72 20 62 3c 3d 20 2d 74   e<>13 or b<= -t
32ab0 31 2e 61 20 74 68 65 6e 20 74 31 2e 63 20 77 68  1.a then t1.c wh
32ac0 65 6e 20 74 31 2e 61 20 6e 6f 74 20 69 6e 20 28  en t1.a not in (
32ad0 20 2d 20 2d 31 33 2c 74 31 2e 61 2c 31 33 29 20   - -13,t1.a,13) 
32ae0 74 68 65 6e 20 61 20 65 6c 73 65 20 63 20 65 6e  then a else c en
32af0 64 20 6e 6f 74 20 69 6e 20 28 20 2d 65 2c 64 2c  d not in ( -e,d,
32b00 28 31 31 29 29 20 6f 72 20 74 31 2e 64 3c 74 31  (11)) or t1.d<t1
32b10 2e 61 20 74 68 65 6e 20 74 31 2e 62 20 77 68 65  .a then t1.b whe
32b20 6e 20 74 31 2e 61 3c 3e 20 2d 62 20 74 68 65 6e  n t1.a<> -b then
32b30 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e 64 20   t1.e else t1.d 
32b40 65 6e 64 3c 61 29 2c 74 31 2e 64 29 29 20 66 72  end<a),t1.d)) fr
32b50 6f 6d 20 74 31 20 77 68 65 72 65 20 65 3c 3e 74  om t1 where e<>t
32b60 31 2e 62 29 2c 63 29 20 6e 6f 74 20 69 6e 20 28  1.b),c) not in (
32b70 74 31 2e 65 2c 63 2c 62 29 29 2c 31 33 29 29 20  t1.e,c,b)),13)) 
32b80 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28  from t1 where ((
32b90 74 31 2e 66 29 20 69 6e 20 28 73 65 6c 65 63 74  t1.f) in (select
32ba0 20 6d 61 78 28 61 29 20 66 72 6f 6d 20 74 31 20   max(a) from t1 
32bb0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 61 62 73  union select abs
32bc0 28 61 62 73 28 6d 69 6e 28 31 33 29 29 29 20 66  (abs(min(13))) f
32bd0 72 6f 6d 20 74 31 29 29 29 2c 31 31 29 20 66 72  rom t1))),11) fr
32be0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
32bf0 63 74 20 62 20 66 72 6f 6d 20 74 31 29 29 7d 0a  ct b from t1))}.
32c00 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  } {}.do_test ran
32c10 64 65 78 70 72 2d 32 2e 32 38 35 20 7b 0a 20 20  dexpr-2.285 {.  
32c20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
32c30 28 7e 63 61 73 65 20 77 68 65 6e 20 74 31 2e 66  (~case when t1.f
32c40 3e 28 61 62 73 28 74 31 2e 63 29 2f 61 62 73 28  >(abs(t1.c)/abs(
32c50 31 33 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  13-coalesce((sel
32c60 65 63 74 20 6d 61 78 28 74 31 2e 61 29 20 66 72  ect max(t1.a) fr
32c70 6f 6d 20 74 31 20 77 68 65 72 65 20 63 61 73 65  om t1 where case
32c80 20 77 68 65 6e 20 65 20 6e 6f 74 20 69 6e 20 28   when e not in (
32c90 63 2c 74 31 2e 61 2c 7e 31 31 29 20 74 68 65 6e  c,t1.a,~11) then
32ca0 20 31 39 2b 28 20 2d 63 29 20 65 6c 73 65 20 61   19+( -c) else a
32cb0 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20   end in (select 
32cc0 28 31 39 29 20 66 72 6f 6d 20 74 31 20 75 6e 69  (19) from t1 uni
32cd0 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e 63 20 66  on select t1.c f
32ce0 72 6f 6d 20 74 31 29 29 2c 74 31 2e 62 29 2b 61  rom t1)),t1.b)+a
32cf0 29 29 20 61 6e 64 20 65 3e 64 20 61 6e 64 20 28  )) and e>d and (
32d00 74 31 2e 61 29 3d 65 20 74 68 65 6e 20 74 31 2e  t1.a)=e then t1.
32d10 65 20 77 68 65 6e 20 28 6e 6f 74 20 65 78 69 73  e when (not exis
32d20 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
32d30 20 74 31 20 77 68 65 72 65 20 20 2d 74 31 2e 64   t1 where  -t1.d
32d40 3d 65 29 20 61 6e 64 20 20 2d 64 20 69 6e 20 28  =e) and  -d in (
32d50 73 65 6c 65 63 74 20 64 20 66 72 6f 6d 20 74 31  select d from t1
32d60 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 65 20   union select e 
32d70 66 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20 74  from t1)) then t
32d80 31 2e 62 20 65 6c 73 65 20 61 20 65 6e 64 29 20  1.b else a end) 
32d90 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e 4f  FROM t1 WHERE NO
32da0 54 20 28 28 74 31 2e 66 20 69 6e 20 28 73 65 6c  T ((t1.f in (sel
32db0 65 63 74 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ect coalesce((se
32dc0 6c 65 63 74 20 6d 61 78 28 63 6f 61 6c 65 73 63  lect max(coalesc
32dd0 65 28 28 73 65 6c 65 63 74 20 63 20 66 72 6f 6d  e((select c from
32de0 20 74 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73   t1 where coales
32df0 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63  ce((select max(c
32e00 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
32e10 6d 61 78 28 2b 2b 31 33 2a 74 31 2e 64 29 20 66  max(++13*t1.d) f
32e20 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 61 73  rom t1 where cas
32e30 65 20 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e  e when case when
32e40 20 65 3c 3e 31 33 20 6f 72 20 62 3c 3d 20 2d 74   e<>13 or b<= -t
32e50 31 2e 61 20 74 68 65 6e 20 74 31 2e 63 20 77 68  1.a then t1.c wh
32e60 65 6e 20 74 31 2e 61 20 6e 6f 74 20 69 6e 20 28  en t1.a not in (
32e70 20 2d 20 2d 31 33 2c 74 31 2e 61 2c 31 33 29 20   - -13,t1.a,13) 
32e80 74 68 65 6e 20 61 20 65 6c 73 65 20 63 20 65 6e  then a else c en
32e90 64 20 6e 6f 74 20 69 6e 20 28 20 2d 65 2c 64 2c  d not in ( -e,d,
32ea0 28 31 31 29 29 20 6f 72 20 74 31 2e 64 3c 74 31  (11)) or t1.d<t1
32eb0 2e 61 20 74 68 65 6e 20 74 31 2e 62 20 77 68 65  .a then t1.b whe
32ec0 6e 20 74 31 2e 61 3c 3e 20 2d 62 20 74 68 65 6e  n t1.a<> -b then
32ed0 20 74 31 2e 65 20 65 6c 73 65 20 74 31 2e 64 20   t1.e else t1.d 
32ee0 65 6e 64 3c 61 29 2c 74 31 2e 64 29 29 20 66 72  end<a),t1.d)) fr
32ef0 6f 6d 20 74 31 20 77 68 65 72 65 20 65 3c 3e 74  om t1 where e<>t
32f00 31 2e 62 29 2c 63 29 20 6e 6f 74 20 69 6e 20 28  1.b),c) not in (
32f10 74 31 2e 65 2c 63 2c 62 29 29 2c 31 33 29 29 20  t1.e,c,b)),13)) 
32f20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 28  from t1 where ((
32f30 74 31 2e 66 29 20 69 6e 20 28 73 65 6c 65 63 74  t1.f) in (select
32f40 20 6d 61 78 28 61 29 20 66 72 6f 6d 20 74 31 20   max(a) from t1 
32f50 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 61 62 73  union select abs
32f60 28 61 62 73 28 6d 69 6e 28 31 33 29 29 29 20 66  (abs(min(13))) f
32f70 72 6f 6d 20 74 31 29 29 29 2c 31 31 29 20 66 72  rom t1))),11) fr
32f80 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
32f90 63 74 20 62 20 66 72 6f 6d 20 74 31 29 29 29 7d  ct b from t1)))}
32fa0 0a 7d 20 7b 2d 31 30 31 7d 0a 64 6f 5f 74 65 73  .} {-101}.do_tes
32fb0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 38 36  t randexpr-2.286
32fc0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
32fd0 4c 45 43 54 20 28 73 65 6c 65 63 74 20 63 6f 75  LECT (select cou
32fe0 6e 74 28 64 69 73 74 69 6e 63 74 20 63 61 73 65  nt(distinct case
32ff0 20 62 20 77 68 65 6e 20 31 33 20 74 68 65 6e 20   b when 13 then 
33000 28 73 65 6c 65 63 74 20 28 2b 28 63 61 73 74 28  (select (+(cast(
33010 61 76 67 28 2b 28 64 29 2a 63 61 73 65 20 74 31  avg(+(d)*case t1
33020 2e 66 2d 63 2a 28 61 62 73 28 63 61 73 65 20 77  .f-c*(abs(case w
33030 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 6e 6f  hen case when no
33040 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
33050 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
33060 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
33070 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
33080 65 20 28 64 3c 3d 74 31 2e 65 29 20 6f 72 20 64  e (d<=t1.e) or d
33090 20 62 65 74 77 65 65 6e 20 63 20 61 6e 64 20 74   between c and t
330a0 31 2e 62 29 29 20 74 68 65 6e 20 31 31 20 65 6c  1.b)) then 11 el
330b0 73 65 20 31 39 20 65 6e 64 20 69 6e 20 28 28 74  se 19 end in ((t
330c0 31 2e 64 29 2c 74 31 2e 61 2c 74 31 2e 66 29 20  1.d),t1.a,t1.f) 
330d0 74 68 65 6e 20 74 31 2e 66 20 77 68 65 6e 20 63  then t1.f when c
330e0 3c 3d 74 31 2e 65 20 74 68 65 6e 20 74 31 2e 63  <=t1.e then t1.c
330f0 20 65 6c 73 65 20 62 20 65 6e 64 20 7c 20 61 29   else b end | a)
33100 2f 61 62 73 28 63 29 29 2b 74 31 2e 62 20 77 68  /abs(c))+t1.b wh
33110 65 6e 20 74 31 2e 63 20 74 68 65 6e 20 61 20 65  en t1.c then a e
33120 6c 73 65 20 64 20 65 6e 64 29 20 41 53 20 69 6e  lse d end) AS in
33130 74 65 67 65 72 29 29 29 20 66 72 6f 6d 20 74 31  teger))) from t1
33140 29 20 65 6c 73 65 20 74 31 2e 62 2a 28 65 29 20  ) else t1.b*(e) 
33150 65 6e 64 29 20 66 72 6f 6d 20 74 31 29 20 46 52  end) from t1) FR
33160 4f 4d 20 74 31 20 57 48 45 52 45 20 6e 6f 74 20  OM t1 WHERE not 
33170 74 31 2e 61 2b 74 31 2e 62 20 7c 20 74 31 2e 66  t1.a+t1.b | t1.f
33180 2d 31 31 2a 28 73 65 6c 65 63 74 20 6d 61 78 28  -11*(select max(
33190 2b 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20  +case when case 
331a0 7e 65 2d 28 61 62 73 28 64 2a 74 31 2e 64 2b 74  ~e-(abs(d*t1.d+t
331b0 31 2e 64 29 2f 61 62 73 28 20 2d 66 29 29 20 77  1.d)/abs( -f)) w
331c0 68 65 6e 20 74 31 2e 61 20 74 68 65 6e 20 74 31  hen t1.a then t1
331d0 2e 65 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64  .e else t1.c end
331e0 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73 74   in (select cast
331f0 28 61 76 67 28 28 66 29 29 20 41 53 20 69 6e 74  (avg((f)) AS int
33200 65 67 65 72 29 20 66 72 6f 6d 20 74 31 20 75 6e  eger) from t1 un
33210 69 6f 6e 20 73 65 6c 65 63 74 20 2b 7e 28 6d 69  ion select +~(mi
33220 6e 28 74 31 2e 64 29 29 20 66 72 6f 6d 20 74 31  n(t1.d)) from t1
33230 29 20 74 68 65 6e 20 28 74 31 2e 64 29 20 77 68  ) then (t1.d) wh
33240 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65  en not exists(se
33250 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77  lect 1 from t1 w
33260 68 65 72 65 20 61 20 6e 6f 74 20 69 6e 20 28 31  here a not in (1
33270 37 2c 61 2c 64 29 29 20 74 68 65 6e 20 31 39 20  7,a,d)) then 19 
33280 65 6c 73 65 20 20 2d 74 31 2e 61 20 65 6e 64 2a  else  -t1.a end*
33290 20 2d 74 31 2e 64 29 20 66 72 6f 6d 20 74 31 29   -t1.d) from t1)
332a0 2a 20 2d 31 37 3e 31 33 7d 0a 7d 20 7b 31 7d 0a  * -17>13}.} {1}.
332b0 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
332c0 2d 32 2e 32 38 37 20 7b 0a 20 20 64 62 20 65 76  -2.287 {.  db ev
332d0 61 6c 20 7b 53 45 4c 45 43 54 20 28 73 65 6c 65  al {SELECT (sele
332e0 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  ct count(distinc
332f0 74 20 63 61 73 65 20 62 20 77 68 65 6e 20 31 33  t case b when 13
33300 20 74 68 65 6e 20 28 73 65 6c 65 63 74 20 28 2b   then (select (+
33310 28 63 61 73 74 28 61 76 67 28 2b 28 64 29 2a 63  (cast(avg(+(d)*c
33320 61 73 65 20 74 31 2e 66 2d 63 2a 28 61 62 73 28  ase t1.f-c*(abs(
33330 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20 77  case when case w
33340 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73  hen not exists(s
33350 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
33360 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73  where not exists
33370 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
33380 31 20 77 68 65 72 65 20 28 64 3c 3d 74 31 2e 65  1 where (d<=t1.e
33390 29 20 6f 72 20 64 20 62 65 74 77 65 65 6e 20 63  ) or d between c
333a0 20 61 6e 64 20 74 31 2e 62 29 29 20 74 68 65 6e   and t1.b)) then
333b0 20 31 31 20 65 6c 73 65 20 31 39 20 65 6e 64 20   11 else 19 end 
333c0 69 6e 20 28 28 74 31 2e 64 29 2c 74 31 2e 61 2c  in ((t1.d),t1.a,
333d0 74 31 2e 66 29 20 74 68 65 6e 20 74 31 2e 66 20  t1.f) then t1.f 
333e0 77 68 65 6e 20 63 3c 3d 74 31 2e 65 20 74 68 65  when c<=t1.e the
333f0 6e 20 74 31 2e 63 20 65 6c 73 65 20 62 20 65 6e  n t1.c else b en
33400 64 20 7c 20 61 29 2f 61 62 73 28 63 29 29 2b 74  d | a)/abs(c))+t
33410 31 2e 62 20 77 68 65 6e 20 74 31 2e 63 20 74 68  1.b when t1.c th
33420 65 6e 20 61 20 65 6c 73 65 20 64 20 65 6e 64 29  en a else d end)
33430 20 41 53 20 69 6e 74 65 67 65 72 29 29 29 20 66   AS integer))) f
33440 72 6f 6d 20 74 31 29 20 65 6c 73 65 20 74 31 2e  rom t1) else t1.
33450 62 2a 28 65 29 20 65 6e 64 29 20 66 72 6f 6d 20  b*(e) end) from 
33460 74 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  t1) FROM t1 WHER
33470 45 20 4e 4f 54 20 28 6e 6f 74 20 74 31 2e 61 2b  E NOT (not t1.a+
33480 74 31 2e 62 20 7c 20 74 31 2e 66 2d 31 31 2a 28  t1.b | t1.f-11*(
33490 73 65 6c 65 63 74 20 6d 61 78 28 2b 63 61 73 65  select max(+case
334a0 20 77 68 65 6e 20 63 61 73 65 20 7e 65 2d 28 61   when case ~e-(a
334b0 62 73 28 64 2a 74 31 2e 64 2b 74 31 2e 64 29 2f  bs(d*t1.d+t1.d)/
334c0 61 62 73 28 20 2d 66 29 29 20 77 68 65 6e 20 74  abs( -f)) when t
334d0 31 2e 61 20 74 68 65 6e 20 74 31 2e 65 20 65 6c  1.a then t1.e el
334e0 73 65 20 74 31 2e 63 20 65 6e 64 20 69 6e 20 28  se t1.c end in (
334f0 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67 28  select cast(avg(
33500 28 66 29 29 20 41 53 20 69 6e 74 65 67 65 72 29  (f)) AS integer)
33510 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
33520 65 6c 65 63 74 20 2b 7e 28 6d 69 6e 28 74 31 2e  elect +~(min(t1.
33530 64 29 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65  d)) from t1) the
33540 6e 20 28 74 31 2e 64 29 20 77 68 65 6e 20 6e 6f  n (t1.d) when no
33550 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20  t exists(select 
33560 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  1 from t1 where 
33570 61 20 6e 6f 74 20 69 6e 20 28 31 37 2c 61 2c 64  a not in (17,a,d
33580 29 29 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20  )) then 19 else 
33590 20 2d 74 31 2e 61 20 65 6e 64 2a 20 2d 74 31 2e   -t1.a end* -t1.
335a0 64 29 20 66 72 6f 6d 20 74 31 29 2a 20 2d 31 37  d) from t1)* -17
335b0 3e 31 33 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  >13)}.} {}.do_te
335c0 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 38  st randexpr-2.28
335d0 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  8 {.  db eval {S
335e0 45 4c 45 43 54 20 28 73 65 6c 65 63 74 20 63 6f  ELECT (select co
335f0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 61 73  unt(distinct cas
33600 65 20 62 20 77 68 65 6e 20 31 33 20 74 68 65 6e  e b when 13 then
33610 20 28 73 65 6c 65 63 74 20 28 2b 28 63 61 73 74   (select (+(cast
33620 28 61 76 67 28 2b 28 64 29 2a 63 61 73 65 20 74  (avg(+(d)*case t
33630 31 2e 66 2d 63 2a 28 61 62 73 28 63 61 73 65 20  1.f-c*(abs(case 
33640 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 6e  when case when n
33650 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63 74  ot exists(select
33660 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   1 from t1 where
33670 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
33680 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
33690 72 65 20 28 64 3c 3d 74 31 2e 65 29 20 6f 72 20  re (d<=t1.e) or 
336a0 64 20 62 65 74 77 65 65 6e 20 63 20 61 6e 64 20  d between c and 
336b0 74 31 2e 62 29 29 20 74 68 65 6e 20 31 31 20 65  t1.b)) then 11 e
336c0 6c 73 65 20 31 39 20 65 6e 64 20 69 6e 20 28 28  lse 19 end in ((
336d0 74 31 2e 64 29 2c 74 31 2e 61 2c 74 31 2e 66 29  t1.d),t1.a,t1.f)
336e0 20 74 68 65 6e 20 74 31 2e 66 20 77 68 65 6e 20   then t1.f when 
336f0 63 3c 3d 74 31 2e 65 20 74 68 65 6e 20 74 31 2e  c<=t1.e then t1.
33700 63 20 65 6c 73 65 20 62 20 65 6e 64 20 26 20 61  c else b end & a
33710 29 2f 61 62 73 28 63 29 29 2b 74 31 2e 62 20 77  )/abs(c))+t1.b w
33720 68 65 6e 20 74 31 2e 63 20 74 68 65 6e 20 61 20  hen t1.c then a 
33730 65 6c 73 65 20 64 20 65 6e 64 29 20 41 53 20 69  else d end) AS i
33740 6e 74 65 67 65 72 29 29 29 20 66 72 6f 6d 20 74  nteger))) from t
33750 31 29 20 65 6c 73 65 20 74 31 2e 62 2a 28 65 29  1) else t1.b*(e)
33760 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 29 20 46   end) from t1) F
33770 52 4f 4d 20 74 31 20 57 48 45 52 45 20 6e 6f 74  ROM t1 WHERE not
33780 20 74 31 2e 61 2b 74 31 2e 62 20 7c 20 74 31 2e   t1.a+t1.b | t1.
33790 66 2d 31 31 2a 28 73 65 6c 65 63 74 20 6d 61 78  f-11*(select max
337a0 28 2b 63 61 73 65 20 77 68 65 6e 20 63 61 73 65  (+case when case
337b0 20 7e 65 2d 28 61 62 73 28 64 2a 74 31 2e 64 2b   ~e-(abs(d*t1.d+
337c0 74 31 2e 64 29 2f 61 62 73 28 20 2d 66 29 29 20  t1.d)/abs( -f)) 
337d0 77 68 65 6e 20 74 31 2e 61 20 74 68 65 6e 20 74  when t1.a then t
337e0 31 2e 65 20 65 6c 73 65 20 74 31 2e 63 20 65 6e  1.e else t1.c en
337f0 64 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61 73  d in (select cas
33800 74 28 61 76 67 28 28 66 29 29 20 41 53 20 69 6e  t(avg((f)) AS in
33810 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 20 75  teger) from t1 u
33820 6e 69 6f 6e 20 73 65 6c 65 63 74 20 2b 7e 28 6d  nion select +~(m
33830 69 6e 28 74 31 2e 64 29 29 20 66 72 6f 6d 20 74  in(t1.d)) from t
33840 31 29 20 74 68 65 6e 20 28 74 31 2e 64 29 20 77  1) then (t1.d) w
33850 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28 73  hen not exists(s
33860 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
33870 77 68 65 72 65 20 61 20 6e 6f 74 20 69 6e 20 28  where a not in (
33880 31 37 2c 61 2c 64 29 29 20 74 68 65 6e 20 31 39  17,a,d)) then 19
33890 20 65 6c 73 65 20 20 2d 74 31 2e 61 20 65 6e 64   else  -t1.a end
338a0 2a 20 2d 74 31 2e 64 29 20 66 72 6f 6d 20 74 31  * -t1.d) from t1
338b0 29 2a 20 2d 31 37 3e 31 33 7d 0a 7d 20 7b 31 7d  )* -17>13}.} {1}
338c0 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
338d0 72 2d 32 2e 32 38 39 20 7b 0a 20 20 64 62 20 65  r-2.289 {.  db e
338e0 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c  val {SELECT coal
338f0 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78  esce((select max
33900 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
33910 74 20 6d 61 78 28 31 33 29 20 66 72 6f 6d 20 74  t max(13) from t
33920 31 20 77 68 65 72 65 20 28 28 7e 74 31 2e 66 29  1 where ((~t1.f)
33930 20 62 65 74 77 65 65 6e 20 62 20 61 6e 64 20 28   between b and (
33940 61 62 73 28 65 29 2f 61 62 73 28 66 29 29 29 29  abs(e)/abs(f))))
33950 2c 31 33 2b 28 73 65 6c 65 63 74 20 63 61 73 65  ,13+(select case
33960 20 61 62 73 28 28 2b 63 6f 75 6e 74 28 2a 29 2a   abs((+count(*)*
33970 6d 61 78 28 31 39 29 29 29 20 77 68 65 6e 20 28  max(19))) when (
33980 7e 6d 69 6e 28 62 29 29 20 74 68 65 6e 20 20 2d  ~min(b)) then  -
33990 6d 69 6e 28 61 29 20 7c 20 6d 69 6e 28 20 2d 61  min(a) | min( -a
339a0 29 20 65 6c 73 65 20 28 6d 61 78 28 74 31 2e 63  ) else (max(t1.c
339b0 29 29 20 65 6e 64 20 66 72 6f 6d 20 74 31 29 2b  )) end from t1)+
339c0 31 37 2a 66 2b 31 31 29 29 20 66 72 6f 6d 20 74  17*f+11)) from t
339d0 31 20 77 68 65 72 65 20 6e 6f 74 20 31 39 3c 3d  1 where not 19<=
339e0 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
339f0 20 65 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65   e from t1 where
33a00 20 74 31 2e 64 2d 64 20 6e 6f 74 20 62 65 74 77   t1.d-d not betw
33a10 65 65 6e 20 31 39 20 61 6e 64 20 31 39 29 2c 31  een 19 and 19),1
33a20 31 29 29 2c 31 33 29 20 46 52 4f 4d 20 74 31 20  1)),13) FROM t1 
33a30 57 48 45 52 45 20 74 31 2e 66 2b 74 31 2e 64 3d  WHERE t1.f+t1.d=
33a40 74 31 2e 66 2b 31 37 2d 63 61 73 65 20 77 68 65  t1.f+17-case whe
33a50 6e 20 28 61 62 73 28 74 31 2e 61 2a 28 63 61 73  n (abs(t1.a*(cas
33a60 65 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74  e when not exist
33a70 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
33a80 74 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69  t1 where not exi
33a90 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f  sts(select 1 fro
33aa0 6d 20 74 31 20 77 68 65 72 65 20 28 62 29 20 62  m t1 where (b) b
33ab0 65 74 77 65 65 6e 20 64 20 61 6e 64 20 74 31 2e  etween d and t1.
33ac0 66 29 29 20 74 68 65 6e 20 28 74 31 2e 62 20 7c  f)) then (t1.b |
33ad0 20 20 2d 28 74 31 2e 63 29 29 20 7c 20 31 39 20    -(t1.c)) | 19 
33ae0 77 68 65 6e 20 64 3d 74 31 2e 61 20 74 68 65 6e  when d=t1.a then
33af0 20 31 33 20 65 6c 73 65 20 64 20 65 6e 64 29 2b   13 else d end)+
33b00 20 2d 74 31 2e 64 29 2f 61 62 73 28 64 29 29 20   -t1.d)/abs(d)) 
33b10 6e 6f 74 20 69 6e 20 28 64 2c 65 2c 74 31 2e 64  not in (d,e,t1.d
33b20 29 20 74 68 65 6e 20 74 31 2e 66 20 77 68 65 6e  ) then t1.f when
33b30 20 31 39 20 69 6e 20 28 73 65 6c 65 63 74 20 74   19 in (select t
33b40 31 2e 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  1.f from t1 unio
33b50 6e 20 73 65 6c 65 63 74 20 74 31 2e 65 20 66 72  n select t1.e fr
33b60 6f 6d 20 74 31 29 20 74 68 65 6e 20 65 20 65 6c  om t1) then e el
33b70 73 65 20 20 2d 74 31 2e 61 20 65 6e 64 2d 20 2d  se  -t1.a end- -
33b80 20 2d 74 31 2e 65 2a 31 37 2d 74 31 2e 64 2d 74   -t1.e*17-t1.d-t
33b90 31 2e 64 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  1.d}.} {}.do_tes
33ba0 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 39 30  t randexpr-2.290
33bb0 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
33bc0 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28 73  LECT coalesce((s
33bd0 65 6c 65 63 74 20 6d 61 78 28 63 6f 61 6c 65 73  elect max(coales
33be0 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 31  ce((select max(1
33bf0 33 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  3) from t1 where
33c00 20 28 28 7e 74 31 2e 66 29 20 62 65 74 77 65 65   ((~t1.f) betwee
33c10 6e 20 62 20 61 6e 64 20 28 61 62 73 28 65 29 2f  n b and (abs(e)/
33c20 61 62 73 28 66 29 29 29 29 2c 31 33 2b 28 73 65  abs(f)))),13+(se
33c30 6c 65 63 74 20 63 61 73 65 20 61 62 73 28 28 2b  lect case abs((+
33c40 63 6f 75 6e 74 28 2a 29 2a 6d 61 78 28 31 39 29  count(*)*max(19)
33c50 29 29 20 77 68 65 6e 20 28 7e 6d 69 6e 28 62 29  )) when (~min(b)
33c60 29 20 74 68 65 6e 20 20 2d 6d 69 6e 28 61 29 20  ) then  -min(a) 
33c70 7c 20 6d 69 6e 28 20 2d 61 29 20 65 6c 73 65 20  | min( -a) else 
33c80 28 6d 61 78 28 74 31 2e 63 29 29 20 65 6e 64 20  (max(t1.c)) end 
33c90 66 72 6f 6d 20 74 31 29 2b 31 37 2a 66 2b 31 31  from t1)+17*f+11
33ca0 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  )) from t1 where
33cb0 20 6e 6f 74 20 31 39 3c 3d 63 6f 61 6c 65 73 63   not 19<=coalesc
33cc0 65 28 28 73 65 6c 65 63 74 20 65 20 66 72 6f 6d  e((select e from
33cd0 20 74 31 20 77 68 65 72 65 20 74 31 2e 64 2d 64   t1 where t1.d-d
33ce0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 39 20   not between 19 
33cf0 61 6e 64 20 31 39 29 2c 31 31 29 29 2c 31 33 29  and 19),11)),13)
33d00 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
33d10 4f 54 20 28 74 31 2e 66 2b 74 31 2e 64 3d 74 31  OT (t1.f+t1.d=t1
33d20 2e 66 2b 31 37 2d 63 61 73 65 20 77 68 65 6e 20  .f+17-case when 
33d30 28 61 62 73 28 74 31 2e 61 2a 28 63 61 73 65 20  (abs(t1.a*(case 
33d40 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73 28  when not exists(
33d50 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
33d60 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73 74   where not exist
33d70 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
33d80 74 31 20 77 68 65 72 65 20 28 62 29 20 62 65 74  t1 where (b) bet
33d90 77 65 65 6e 20 64 20 61 6e 64 20 74 31 2e 66 29  ween d and t1.f)
33da0 29 20 74 68 65 6e 20 28 74 31 2e 62 20 7c 20 20  ) then (t1.b |  
33db0 2d 28 74 31 2e 63 29 29 20 7c 20 31 39 20 77 68  -(t1.c)) | 19 wh
33dc0 65 6e 20 64 3d 74 31 2e 61 20 74 68 65 6e 20 31  en d=t1.a then 1
33dd0 33 20 65 6c 73 65 20 64 20 65 6e 64 29 2b 20 2d  3 else d end)+ -
33de0 74 31 2e 64 29 2f 61 62 73 28 64 29 29 20 6e 6f  t1.d)/abs(d)) no
33df0 74 20 69 6e 20 28 64 2c 65 2c 74 31 2e 64 29 20  t in (d,e,t1.d) 
33e00 74 68 65 6e 20 74 31 2e 66 20 77 68 65 6e 20 31  then t1.f when 1
33e10 39 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e  9 in (select t1.
33e20 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  f from t1 union 
33e30 73 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f 6d  select t1.e from
33e40 20 74 31 29 20 74 68 65 6e 20 65 20 65 6c 73 65   t1) then e else
33e50 20 20 2d 74 31 2e 61 20 65 6e 64 2d 20 2d 20 2d    -t1.a end- - -
33e60 74 31 2e 65 2a 31 37 2d 74 31 2e 64 2d 74 31 2e  t1.e*17-t1.d-t1.
33e70 64 29 7d 0a 7d 20 7b 31 33 7d 0a 64 6f 5f 74 65  d)}.} {13}.do_te
33e80 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 39  st randexpr-2.29
33e90 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  1 {.  db eval {S
33ea0 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28  ELECT coalesce((
33eb0 73 65 6c 65 63 74 20 6d 61 78 28 63 6f 61 6c 65  select max(coale
33ec0 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28  sce((select max(
33ed0 31 33 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  13) from t1 wher
33ee0 65 20 28 28 7e 74 31 2e 66 29 20 62 65 74 77 65  e ((~t1.f) betwe
33ef0 65 6e 20 62 20 61 6e 64 20 28 61 62 73 28 65 29  en b and (abs(e)
33f00 2f 61 62 73 28 66 29 29 29 29 2c 31 33 2b 28 73  /abs(f)))),13+(s
33f10 65 6c 65 63 74 20 63 61 73 65 20 61 62 73 28 28  elect case abs((
33f20 2b 63 6f 75 6e 74 28 2a 29 2a 6d 61 78 28 31 39  +count(*)*max(19
33f30 29 29 29 20 77 68 65 6e 20 28 7e 6d 69 6e 28 62  ))) when (~min(b
33f40 29 29 20 74 68 65 6e 20 20 2d 6d 69 6e 28 61 29  )) then  -min(a)
33f50 20 26 20 6d 69 6e 28 20 2d 61 29 20 65 6c 73 65   & min( -a) else
33f60 20 28 6d 61 78 28 74 31 2e 63 29 29 20 65 6e 64   (max(t1.c)) end
33f70 20 66 72 6f 6d 20 74 31 29 2b 31 37 2a 66 2b 31   from t1)+17*f+1
33f80 31 29 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72  1)) from t1 wher
33f90 65 20 6e 6f 74 20 31 39 3c 3d 63 6f 61 6c 65 73  e not 19<=coales
33fa0 63 65 28 28 73 65 6c 65 63 74 20 65 20 66 72 6f  ce((select e fro
33fb0 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 64 2d  m t1 where t1.d-
33fc0 64 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 39  d not between 19
33fd0 20 61 6e 64 20 31 39 29 2c 31 31 29 29 2c 31 33   and 19),11)),13
33fe0 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
33ff0 4e 4f 54 20 28 74 31 2e 66 2b 74 31 2e 64 3d 74  NOT (t1.f+t1.d=t
34000 31 2e 66 2b 31 37 2d 63 61 73 65 20 77 68 65 6e  1.f+17-case when
34010 20 28 61 62 73 28 74 31 2e 61 2a 28 63 61 73 65   (abs(t1.a*(case
34020 20 77 68 65 6e 20 6e 6f 74 20 65 78 69 73 74 73   when not exists
34030 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
34040 31 20 77 68 65 72 65 20 6e 6f 74 20 65 78 69 73  1 where not exis
34050 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
34060 20 74 31 20 77 68 65 72 65 20 28 62 29 20 62 65   t1 where (b) be
34070 74 77 65 65 6e 20 64 20 61 6e 64 20 74 31 2e 66  tween d and t1.f
34080 29 29 20 74 68 65 6e 20 28 74 31 2e 62 20 7c 20  )) then (t1.b | 
34090 20 2d 28 74 31 2e 63 29 29 20 7c 20 31 39 20 77   -(t1.c)) | 19 w
340a0 68 65 6e 20 64 3d 74 31 2e 61 20 74 68 65 6e 20  hen d=t1.a then 
340b0 31 33 20 65 6c 73 65 20 64 20 65 6e 64 29 2b 20  13 else d end)+ 
340c0 2d 74 31 2e 64 29 2f 61 62 73 28 64 29 29 20 6e  -t1.d)/abs(d)) n
340d0 6f 74 20 69 6e 20 28 64 2c 65 2c 74 31 2e 64 29  ot in (d,e,t1.d)
340e0 20 74 68 65 6e 20 74 31 2e 66 20 77 68 65 6e 20   then t1.f when 
340f0 31 39 20 69 6e 20 28 73 65 6c 65 63 74 20 74 31  19 in (select t1
34100 2e 66 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  .f from t1 union
34110 20 73 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f   select t1.e fro
34120 6d 20 74 31 29 20 74 68 65 6e 20 65 20 65 6c 73  m t1) then e els
34130 65 20 20 2d 74 31 2e 61 20 65 6e 64 2d 20 2d 20  e  -t1.a end- - 
34140 2d 74 31 2e 65 2a 31 37 2d 74 31 2e 64 2d 74 31  -t1.e*17-t1.d-t1
34150 2e 64 29 7d 0a 7d 20 7b 31 33 7d 0a 64 6f 5f 74  .d)}.} {13}.do_t
34160 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
34170 39 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  92 {.  db eval {
34180 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e  SELECT case when
34190 20 20 2d 74 31 2e 62 3d 63 20 61 6e 64 20 28 28    -t1.b=c and ((
341a0 74 31 2e 63 3e 74 31 2e 62 29 29 20 61 6e 64 20  t1.c>t1.b)) and 
341b0 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65 63  not exists(selec
341c0 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65 72  t 1 from t1 wher
341d0 65 20 28 61 62 73 28 28 73 65 6c 65 63 74 20 6d  e (abs((select m
341e0 61 78 28 74 31 2e 64 29 20 66 72 6f 6d 20 74 31  ax(t1.d) from t1
341f0 29 29 2f 61 62 73 28 28 61 62 73 28 63 2b 74 31  ))/abs((abs(c+t1
34200 2e 62 29 2f 61 62 73 28 74 31 2e 64 29 29 2d 74  .b)/abs(t1.d))-t
34210 31 2e 65 29 29 2b 63 20 69 6e 20 28 73 65 6c 65  1.e))+c in (sele
34220 63 74 20 63 61 73 74 28 61 76 67 28 28 74 31 2e  ct cast(avg((t1.
34230 61 29 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  a)) AS integer) 
34240 7c 20 61 62 73 28 63 6f 75 6e 74 28 64 69 73 74  | abs(count(dist
34250 69 6e 63 74 20 74 31 2e 64 29 29 2b 63 6f 75 6e  inct t1.d))+coun
34260 74 28 2a 29 20 7c 20 63 6f 75 6e 74 28 2a 29 2b  t(*) | count(*)+
34270 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74 31  count(*) from t1
34280 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 6d   union select (m
34290 69 6e 28 74 31 2e 64 29 29 20 66 72 6f 6d 20 74  in(t1.d)) from t
342a0 31 29 29 20 74 68 65 6e 20 28 61 62 73 28 74 31  1)) then (abs(t1
342b0 2e 62 29 2f 61 62 73 28 74 31 2e 66 29 29 20 77  .b)/abs(t1.f)) w
342c0 68 65 6e 20 74 31 2e 62 20 6e 6f 74 20 69 6e 20  hen t1.b not in 
342d0 28 61 2c 74 31 2e 66 2c 28 61 29 29 20 74 68 65  (a,t1.f,(a)) the
342e0 6e 20 74 31 2e 62 20 65 6c 73 65 20 74 31 2e 64  n t1.b else t1.d
342f0 20 65 6e 64 2d 31 31 20 46 52 4f 4d 20 74 31 20   end-11 FROM t1 
34300 57 48 45 52 45 20 63 61 73 65 20 77 68 65 6e 20  WHERE case when 
34310 7e 65 20 69 6e 20 28 63 6f 61 6c 65 73 63 65 28  ~e in (coalesce(
34320 28 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20  (select 13 from 
34330 74 31 20 77 68 65 72 65 20 31 37 20 62 65 74 77  t1 where 17 betw
34340 65 65 6e 20 74 31 2e 61 20 61 6e 64 20 62 20 6f  een t1.a and b o
34350 72 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c  r not exists(sel
34360 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
34370 65 72 65 20 28 63 20 69 6e 20 28 31 31 2c 65 2c  ere (c in (11,e,
34380 61 29 29 29 29 2c 74 31 2e 65 29 2c 63 2c 65 29  a)))),t1.e),c,e)
34390 20 74 68 65 6e 20 65 20 65 6c 73 65 20 74 31 2e   then e else t1.
343a0 66 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74  f end in (select
343b0 20 2b 2b 61 62 73 28 63 61 73 65 20 63 61 73 65   ++abs(case case
343c0 20 63 6f 75 6e 74 28 2a 29 20 77 68 65 6e 20 28   count(*) when (
343d0 6d 61 78 28 74 31 2e 64 29 29 20 74 68 65 6e 20  max(t1.d)) then 
343e0 63 61 73 74 28 61 76 67 28 74 31 2e 63 29 20 41  cast(avg(t1.c) A
343f0 53 20 69 6e 74 65 67 65 72 29 20 65 6c 73 65 20  S integer) else 
34400 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62  count(distinct b
34410 29 20 65 6e 64 20 7c 20 63 6f 75 6e 74 28 2a 29  ) end | count(*)
34420 20 77 68 65 6e 20 6d 61 78 28 65 29 20 74 68 65   when max(e) the
34430 6e 20 6d 69 6e 28 63 29 20 65 6c 73 65 20 6d 61  n min(c) else ma
34440 78 28 31 33 29 20 65 6e 64 20 7c 20 63 6f 75 6e  x(13) end | coun
34450 74 28 2a 29 2a 63 6f 75 6e 74 28 2a 29 29 20 7c  t(*)*count(*)) |
34460 20 6d 61 78 28 74 31 2e 61 29 20 66 72 6f 6d 20   max(t1.a) from 
34470 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
34480 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 74  count(distinct t
34490 31 2e 63 29 20 66 72 6f 6d 20 74 31 29 20 6f 72  1.c) from t1) or
344a0 20 62 20 69 6e 20 28 73 65 6c 65 63 74 20 63 61   b in (select ca
344b0 73 74 28 61 76 67 28 74 31 2e 62 29 20 41 53 20  st(avg(t1.b) AS 
344c0 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31  integer) from t1
344d0 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 61   union select ca
344e0 73 74 28 61 76 67 28 20 2d 74 31 2e 61 29 20 41  st(avg( -t1.a) A
344f0 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d 20  S integer) from 
34500 74 31 29 7d 0a 7d 20 7b 31 38 39 7d 0a 64 6f 5f  t1)}.} {189}.do_
34510 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
34520 32 39 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  293 {.  db eval 
34530 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65  {SELECT case whe
34540 6e 20 20 2d 74 31 2e 62 3d 63 20 61 6e 64 20 28  n  -t1.b=c and (
34550 28 74 31 2e 63 3e 74 31 2e 62 29 29 20 61 6e 64  (t1.c>t1.b)) and
34560 20 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c 65   not exists(sele
34570 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68 65  ct 1 from t1 whe
34580 72 65 20 28 61 62 73 28 28 73 65 6c 65 63 74 20  re (abs((select 
34590 6d 61 78 28 74 31 2e 64 29 20 66 72 6f 6d 20 74  max(t1.d) from t
345a0 31 29 29 2f 61 62 73 28 28 61 62 73 28 63 2b 74  1))/abs((abs(c+t
345b0 31 2e 62 29 2f 61 62 73 28 74 31 2e 64 29 29 2d  1.b)/abs(t1.d))-
345c0 74 31 2e 65 29 29 2b 63 20 69 6e 20 28 73 65 6c  t1.e))+c in (sel
345d0 65 63 74 20 63 61 73 74 28 61 76 67 28 28 74 31  ect cast(avg((t1
345e0 2e 61 29 29 20 41 53 20 69 6e 74 65 67 65 72 29  .a)) AS integer)
345f0 20 7c 20 61 62 73 28 63 6f 75 6e 74 28 64 69 73   | abs(count(dis
34600 74 69 6e 63 74 20 74 31 2e 64 29 29 2b 63 6f 75  tinct t1.d))+cou
34610 6e 74 28 2a 29 20 7c 20 63 6f 75 6e 74 28 2a 29  nt(*) | count(*)
34620 2b 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74  +count(*) from t
34630 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28  1 union select (
34640 6d 69 6e 28 74 31 2e 64 29 29 20 66 72 6f 6d 20  min(t1.d)) from 
34650 74 31 29 29 20 74 68 65 6e 20 28 61 62 73 28 74  t1)) then (abs(t
34660 31 2e 62 29 2f 61 62 73 28 74 31 2e 66 29 29 20  1.b)/abs(t1.f)) 
34670 77 68 65 6e 20 74 31 2e 62 20 6e 6f 74 20 69 6e  when t1.b not in
34680 20 28 61 2c 74 31 2e 66 2c 28 61 29 29 20 74 68   (a,t1.f,(a)) th
34690 65 6e 20 74 31 2e 62 20 65 6c 73 65 20 74 31 2e  en t1.b else t1.
346a0 64 20 65 6e 64 2d 31 31 20 46 52 4f 4d 20 74 31  d end-11 FROM t1
346b0 20 57 48 45 52 45 20 4e 4f 54 20 28 63 61 73 65   WHERE NOT (case
346c0 20 77 68 65 6e 20 7e 65 20 69 6e 20 28 63 6f 61   when ~e in (coa
346d0 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 31 33  lesce((select 13
346e0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31   from t1 where 1
346f0 37 20 62 65 74 77 65 65 6e 20 74 31 2e 61 20 61  7 between t1.a a
34700 6e 64 20 62 20 6f 72 20 6e 6f 74 20 65 78 69 73  nd b or not exis
34710 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
34720 20 74 31 20 77 68 65 72 65 20 28 63 20 69 6e 20   t1 where (c in 
34730 28 31 31 2c 65 2c 61 29 29 29 29 2c 74 31 2e 65  (11,e,a)))),t1.e
34740 29 2c 63 2c 65 29 20 74 68 65 6e 20 65 20 65 6c  ),c,e) then e el
34750 73 65 20 74 31 2e 66 20 65 6e 64 20 69 6e 20 28  se t1.f end in (
34760 73 65 6c 65 63 74 20 2b 2b 61 62 73 28 63 61 73  select ++abs(cas
34770 65 20 63 61 73 65 20 63 6f 75 6e 74 28 2a 29 20  e case count(*) 
34780 77 68 65 6e 20 28 6d 61 78 28 74 31 2e 64 29 29  when (max(t1.d))
34790 20 74 68 65 6e 20 63 61 73 74 28 61 76 67 28 74   then cast(avg(t
347a0 31 2e 63 29 20 41 53 20 69 6e 74 65 67 65 72 29  1.c) AS integer)
347b0 20 65 6c 73 65 20 63 6f 75 6e 74 28 64 69 73 74   else count(dist
347c0 69 6e 63 74 20 62 29 20 65 6e 64 20 7c 20 63 6f  inct b) end | co
347d0 75 6e 74 28 2a 29 20 77 68 65 6e 20 6d 61 78 28  unt(*) when max(
347e0 65 29 20 74 68 65 6e 20 6d 69 6e 28 63 29 20 65  e) then min(c) e
347f0 6c 73 65 20 6d 61 78 28 31 33 29 20 65 6e 64 20  lse max(13) end 
34800 7c 20 63 6f 75 6e 74 28 2a 29 2a 63 6f 75 6e 74  | count(*)*count
34810 28 2a 29 29 20 7c 20 6d 61 78 28 74 31 2e 61 29  (*)) | max(t1.a)
34820 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
34830 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
34840 69 6e 63 74 20 74 31 2e 63 29 20 66 72 6f 6d 20  inct t1.c) from 
34850 74 31 29 20 6f 72 20 62 20 69 6e 20 28 73 65 6c  t1) or b in (sel
34860 65 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e  ect cast(avg(t1.
34870 62 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66  b) AS integer) f
34880 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
34890 65 63 74 20 63 61 73 74 28 61 76 67 28 20 2d 74  ect cast(avg( -t
348a0 31 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72 29  1.a) AS integer)
348b0 20 66 72 6f 6d 20 74 31 29 29 7d 0a 7d 20 7b 7d   from t1))}.} {}
348c0 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
348d0 72 2d 32 2e 32 39 34 20 7b 0a 20 20 64 62 20 65  r-2.294 {.  db e
348e0 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65  val {SELECT case
348f0 20 77 68 65 6e 20 20 2d 74 31 2e 62 3d 63 20 61   when  -t1.b=c a
34900 6e 64 20 28 28 74 31 2e 63 3e 74 31 2e 62 29 29  nd ((t1.c>t1.b))
34910 20 61 6e 64 20 6e 6f 74 20 65 78 69 73 74 73 28   and not exists(
34920 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31  select 1 from t1
34930 20 77 68 65 72 65 20 28 61 62 73 28 28 73 65 6c   where (abs((sel
34940 65 63 74 20 6d 61 78 28 74 31 2e 64 29 20 66 72  ect max(t1.d) fr
34950 6f 6d 20 74 31 29 29 2f 61 62 73 28 28 61 62 73  om t1))/abs((abs
34960 28 63 2b 74 31 2e 62 29 2f 61 62 73 28 74 31 2e  (c+t1.b)/abs(t1.
34970 64 29 29 2d 74 31 2e 65 29 29 2b 63 20 69 6e 20  d))-t1.e))+c in 
34980 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67  (select cast(avg
34990 28 28 74 31 2e 61 29 29 20 41 53 20 69 6e 74 65  ((t1.a)) AS inte
349a0 67 65 72 29 20 26 20 61 62 73 28 63 6f 75 6e 74  ger) & abs(count
349b0 28 64 69 73 74 69 6e 63 74 20 74 31 2e 64 29 29  (distinct t1.d))
349c0 2b 63 6f 75 6e 74 28 2a 29 20 26 20 63 6f 75 6e  +count(*) & coun
349d0 74 28 2a 29 2b 63 6f 75 6e 74 28 2a 29 20 66 72  t(*)+count(*) fr
349e0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
349f0 63 74 20 28 6d 69 6e 28 74 31 2e 64 29 29 20 66  ct (min(t1.d)) f
34a00 72 6f 6d 20 74 31 29 29 20 74 68 65 6e 20 28 61  rom t1)) then (a
34a10 62 73 28 74 31 2e 62 29 2f 61 62 73 28 74 31 2e  bs(t1.b)/abs(t1.
34a20 66 29 29 20 77 68 65 6e 20 74 31 2e 62 20 6e 6f  f)) when t1.b no
34a30 74 20 69 6e 20 28 61 2c 74 31 2e 66 2c 28 61 29  t in (a,t1.f,(a)
34a40 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  ) then t1.b else
34a50 20 74 31 2e 64 20 65 6e 64 2d 31 31 20 46 52 4f   t1.d end-11 FRO
34a60 4d 20 74 31 20 57 48 45 52 45 20 63 61 73 65 20  M t1 WHERE case 
34a70 77 68 65 6e 20 7e 65 20 69 6e 20 28 63 6f 61 6c  when ~e in (coal
34a80 65 73 63 65 28 28 73 65 6c 65 63 74 20 31 33 20  esce((select 13 
34a90 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 31 37  from t1 where 17
34aa0 20 62 65 74 77 65 65 6e 20 74 31 2e 61 20 61 6e   between t1.a an
34ab0 64 20 62 20 6f 72 20 6e 6f 74 20 65 78 69 73 74  d b or not exist
34ac0 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
34ad0 74 31 20 77 68 65 72 65 20 28 63 20 69 6e 20 28  t1 where (c in (
34ae0 31 31 2c 65 2c 61 29 29 29 29 2c 74 31 2e 65 29  11,e,a)))),t1.e)
34af0 2c 63 2c 65 29 20 74 68 65 6e 20 65 20 65 6c 73  ,c,e) then e els
34b00 65 20 74 31 2e 66 20 65 6e 64 20 69 6e 20 28 73  e t1.f end in (s
34b10 65 6c 65 63 74 20 2b 2b 61 62 73 28 63 61 73 65  elect ++abs(case
34b20 20 63 61 73 65 20 63 6f 75 6e 74 28 2a 29 20 77   case count(*) w
34b30 68 65 6e 20 28 6d 61 78 28 74 31 2e 64 29 29 20  hen (max(t1.d)) 
34b40 74 68 65 6e 20 63 61 73 74 28 61 76 67 28 74 31  then cast(avg(t1
34b50 2e 63 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .c) AS integer) 
34b60 65 6c 73 65 20 63 6f 75 6e 74 28 64 69 73 74 69  else count(disti
34b70 6e 63 74 20 62 29 20 65 6e 64 20 7c 20 63 6f 75  nct b) end | cou
34b80 6e 74 28 2a 29 20 77 68 65 6e 20 6d 61 78 28 65  nt(*) when max(e
34b90 29 20 74 68 65 6e 20 6d 69 6e 28 63 29 20 65 6c  ) then min(c) el
34ba0 73 65 20 6d 61 78 28 31 33 29 20 65 6e 64 20 7c  se max(13) end |
34bb0 20 63 6f 75 6e 74 28 2a 29 2a 63 6f 75 6e 74 28   count(*)*count(
34bc0 2a 29 29 20 7c 20 6d 61 78 28 74 31 2e 61 29 20  *)) | max(t1.a) 
34bd0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
34be0 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69  lect count(disti
34bf0 6e 63 74 20 74 31 2e 63 29 20 66 72 6f 6d 20 74  nct t1.c) from t
34c00 31 29 20 6f 72 20 62 20 69 6e 20 28 73 65 6c 65  1) or b in (sele
34c10 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e 62  ct cast(avg(t1.b
34c20 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72  ) AS integer) fr
34c30 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
34c40 63 74 20 63 61 73 74 28 61 76 67 28 20 2d 74 31  ct cast(avg( -t1
34c50 2e 61 29 20 41 53 20 69 6e 74 65 67 65 72 29 20  .a) AS integer) 
34c60 66 72 6f 6d 20 74 31 29 7d 0a 7d 20 7b 31 38 39  from t1)}.} {189
34c70 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78  }.do_test randex
34c80 70 72 2d 32 2e 32 39 35 20 7b 0a 20 20 64 62 20  pr-2.295 {.  db 
34c90 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73  eval {SELECT cas
34ca0 65 20 77 68 65 6e 20 28 28 28 61 62 73 28 31 31  e when (((abs(11
34cb0 20 7c 20 65 29 2f 61 62 73 28 31 37 2d 64 29 29   | e)/abs(17-d))
34cc0 2b 74 31 2e 62 20 7c 20 61 3c 3e 31 31 29 29 20  +t1.b | a<>11)) 
34cd0 61 6e 64 20 74 31 2e 64 20 69 6e 20 28 31 33 2c  and t1.d in (13,
34ce0 74 31 2e 63 2c 31 31 29 20 6f 72 20 31 37 20 62  t1.c,11) or 17 b
34cf0 65 74 77 65 65 6e 20 74 31 2e 66 20 61 6e 64 20  etween t1.f and 
34d00 62 20 6f 72 20 6e 6f 74 20 66 20 69 6e 20 28 73  b or not f in (s
34d10 65 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31  elect 19 from t1
34d20 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31   union select t1
34d30 2e 65 20 66 72 6f 6d 20 74 31 29 20 61 6e 64 20  .e from t1) and 
34d40 62 3c 3e 31 39 20 6f 72 20 65 20 62 65 74 77 65  b<>19 or e betwe
34d50 65 6e 20 31 39 20 61 6e 64 20 74 31 2e 64 20 6f  en 19 and t1.d o
34d60 72 20 62 3c 3d 64 20 6f 72 20 64 3c 31 37 20 6f  r b<=d or d<17 o
34d70 72 20 74 31 2e 61 3c 3e 74 31 2e 66 20 74 68 65  r t1.a<>t1.f the
34d80 6e 20 31 37 20 77 68 65 6e 20 74 31 2e 65 3d 74  n 17 when t1.e=t
34d90 31 2e 62 20 74 68 65 6e 20 31 31 20 65 6c 73 65  1.b then 11 else
34da0 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
34db0 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 20 77  t t1.e from t1 w
34dc0 68 65 72 65 20 28 62 29 20 62 65 74 77 65 65 6e  here (b) between
34dd0 20 20 2d 20 2d 64 20 61 6e 64 20 65 29 2c 74 31    - -d and e),t1
34de0 2e 62 29 20 65 6e 64 20 46 52 4f 4d 20 74 31 20  .b) end FROM t1 
34df0 57 48 45 52 45 20 74 31 2e 61 20 62 65 74 77 65  WHERE t1.a betwe
34e00 65 6e 20 64 20 61 6e 64 20 2b 31 37 2d 31 37 2a  en d and +17-17*
34e10 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74  coalesce((select
34e20 20 7e 20 2d 31 39 2d 31 33 2d 31 39 20 66 72 6f   ~ -19-13-19 fro
34e30 6d 20 74 31 20 77 68 65 72 65 20 31 39 3e 28 73  m t1 where 19>(s
34e40 65 6c 65 63 74 20 61 62 73 28 63 6f 75 6e 74 28  elect abs(count(
34e50 64 69 73 74 69 6e 63 74 20 74 31 2e 64 2d 31 37  distinct t1.d-17
34e60 29 29 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  ))+count(distinc
34e70 74 20 63 61 73 65 20 77 68 65 6e 20 31 39 3e 31  t case when 19>1
34e80 37 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65  7 then t1.f else
34e90 20 74 31 2e 65 20 65 6e 64 2b 62 29 20 7c 20 6d   t1.e end+b) | m
34ea0 61 78 28 74 31 2e 62 29 2b 63 6f 75 6e 74 28 64  ax(t1.b)+count(d
34eb0 69 73 74 69 6e 63 74 20 31 33 29 20 66 72 6f 6d  istinct 13) from
34ec0 20 74 31 29 2d 63 6f 61 6c 65 73 63 65 28 28 73   t1)-coalesce((s
34ed0 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31  elect 13 from t1
34ee0 20 77 68 65 72 65 20 74 31 2e 65 20 6e 6f 74 20   where t1.e not 
34ef0 69 6e 20 28 31 39 2c 31 37 2c 65 29 20 61 6e 64  in (19,17,e) and
34f00 20 31 31 3c 3d 74 31 2e 64 29 2c 63 29 29 2c 74   11<=t1.d),c)),t
34f10 31 2e 66 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  1.f)}.} {}.do_te
34f20 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32 39  st randexpr-2.29
34f30 36 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  6 {.  db eval {S
34f40 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e 20  ELECT case when 
34f50 28 28 28 61 62 73 28 31 31 20 7c 20 65 29 2f 61  (((abs(11 | e)/a
34f60 62 73 28 31 37 2d 64 29 29 2b 74 31 2e 62 20 7c  bs(17-d))+t1.b |
34f70 20 61 3c 3e 31 31 29 29 20 61 6e 64 20 74 31 2e   a<>11)) and t1.
34f80 64 20 69 6e 20 28 31 33 2c 74 31 2e 63 2c 31 31  d in (13,t1.c,11
34f90 29 20 6f 72 20 31 37 20 62 65 74 77 65 65 6e 20  ) or 17 between 
34fa0 74 31 2e 66 20 61 6e 64 20 62 20 6f 72 20 6e 6f  t1.f and b or no
34fb0 74 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20 31  t f in (select 1
34fc0 39 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  9 from t1 union 
34fd0 73 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f 6d  select t1.e from
34fe0 20 74 31 29 20 61 6e 64 20 62 3c 3e 31 39 20 6f   t1) and b<>19 o
34ff0 72 20 65 20 62 65 74 77 65 65 6e 20 31 39 20 61  r e between 19 a
35000 6e 64 20 74 31 2e 64 20 6f 72 20 62 3c 3d 64 20  nd t1.d or b<=d 
35010 6f 72 20 64 3c 31 37 20 6f 72 20 74 31 2e 61 3c  or d<17 or t1.a<
35020 3e 74 31 2e 66 20 74 68 65 6e 20 31 37 20 77 68  >t1.f then 17 wh
35030 65 6e 20 74 31 2e 65 3d 74 31 2e 62 20 74 68 65  en t1.e=t1.b the
35040 6e 20 31 31 20 65 6c 73 65 20 63 6f 61 6c 65 73  n 11 else coales
35050 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 65 20  ce((select t1.e 
35060 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 62  from t1 where (b
35070 29 20 62 65 74 77 65 65 6e 20 20 2d 20 2d 64 20  ) between  - -d 
35080 61 6e 64 20 65 29 2c 74 31 2e 62 29 20 65 6e 64  and e),t1.b) end
35090 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
350a0 4f 54 20 28 74 31 2e 61 20 62 65 74 77 65 65 6e  OT (t1.a between
350b0 20 64 20 61 6e 64 20 2b 31 37 2d 31 37 2a 63 6f   d and +17-17*co
350c0 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 7e  alesce((select ~
350d0 20 2d 31 39 2d 31 33 2d 31 39 20 66 72 6f 6d 20   -19-13-19 from 
350e0 74 31 20 77 68 65 72 65 20 31 39 3e 28 73 65 6c  t1 where 19>(sel
350f0 65 63 74 20 61 62 73 28 63 6f 75 6e 74 28 64 69  ect abs(count(di
35100 73 74 69 6e 63 74 20 74 31 2e 64 2d 31 37 29 29  stinct t1.d-17))
35110 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  +count(distinct 
35120 63 61 73 65 20 77 68 65 6e 20 31 39 3e 31 37 20  case when 19>17 
35130 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20 74  then t1.f else t
35140 31 2e 65 20 65 6e 64 2b 62 29 20 7c 20 6d 61 78  1.e end+b) | max
35150 28 74 31 2e 62 29 2b 63 6f 75 6e 74 28 64 69 73  (t1.b)+count(dis
35160 74 69 6e 63 74 20 31 33 29 20 66 72 6f 6d 20 74  tinct 13) from t
35170 31 29 2d 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  1)-coalesce((sel
35180 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31 20 77  ect 13 from t1 w
35190 68 65 72 65 20 74 31 2e 65 20 6e 6f 74 20 69 6e  here t1.e not in
351a0 20 28 31 39 2c 31 37 2c 65 29 20 61 6e 64 20 31   (19,17,e) and 1
351b0 31 3c 3d 74 31 2e 64 29 2c 63 29 29 2c 74 31 2e  1<=t1.d),c)),t1.
351c0 66 29 29 7d 0a 7d 20 7b 31 37 7d 0a 64 6f 5f 74  f))}.} {17}.do_t
351d0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 32  est randexpr-2.2
351e0 39 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  97 {.  db eval {
351f0 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e  SELECT case when
35200 20 28 28 28 61 62 73 28 31 31 20 26 20 65 29 2f   (((abs(11 & e)/
35210 61 62 73 28 31 37 2d 64 29 29 2b 74 31 2e 62 20  abs(17-d))+t1.b 
35220 26 20 61 3c 3e 31 31 29 29 20 61 6e 64 20 74 31  & a<>11)) and t1
35230 2e 64 20 69 6e 20 28 31 33 2c 74 31 2e 63 2c 31  .d in (13,t1.c,1
35240 31 29 20 6f 72 20 31 37 20 62 65 74 77 65 65 6e  1) or 17 between
35250 20 74 31 2e 66 20 61 6e 64 20 62 20 6f 72 20 6e   t1.f and b or n
35260 6f 74 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20  ot f in (select 
35270 31 39 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  19 from t1 union
35280 20 73 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f   select t1.e fro
35290 6d 20 74 31 29 20 61 6e 64 20 62 3c 3e 31 39 20  m t1) and b<>19 
352a0 6f 72 20 65 20 62 65 74 77 65 65 6e 20 31 39 20  or e between 19 
352b0 61 6e 64 20 74 31 2e 64 20 6f 72 20 62 3c 3d 64  and t1.d or b<=d
352c0 20 6f 72 20 64 3c 31 37 20 6f 72 20 74 31 2e 61   or d<17 or t1.a
352d0 3c 3e 74 31 2e 66 20 74 68 65 6e 20 31 37 20 77  <>t1.f then 17 w
352e0 68 65 6e 20 74 31 2e 65 3d 74 31 2e 62 20 74 68  hen t1.e=t1.b th
352f0 65 6e 20 31 31 20 65 6c 73 65 20 63 6f 61 6c 65  en 11 else coale
35300 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 65  sce((select t1.e
35310 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
35320 62 29 20 62 65 74 77 65 65 6e 20 20 2d 20 2d 64  b) between  - -d
35330 20 61 6e 64 20 65 29 2c 74 31 2e 62 29 20 65 6e   and e),t1.b) en
35340 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
35350 4e 4f 54 20 28 74 31 2e 61 20 62 65 74 77 65 65  NOT (t1.a betwee
35360 6e 20 64 20 61 6e 64 20 2b 31 37 2d 31 37 2a 63  n d and +17-17*c
35370 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
35380 7e 20 2d 31 39 2d 31 33 2d 31 39 20 66 72 6f 6d  ~ -19-13-19 from
35390 20 74 31 20 77 68 65 72 65 20 31 39 3e 28 73 65   t1 where 19>(se
353a0 6c 65 63 74 20 61 62 73 28 63 6f 75 6e 74 28 64  lect abs(count(d
353b0 69 73 74 69 6e 63 74 20 74 31 2e 64 2d 31 37 29  istinct t1.d-17)
353c0 29 2b 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  )+count(distinct
353d0 20 63 61 73 65 20 77 68 65 6e 20 31 39 3e 31 37   case when 19>17
353e0 20 74 68 65 6e 20 74 31 2e 66 20 65 6c 73 65 20   then t1.f else 
353f0 74 31 2e 65 20 65 6e 64 2b 62 29 20 7c 20 6d 61  t1.e end+b) | ma
35400 78 28 74 31 2e 62 29 2b 63 6f 75 6e 74 28 64 69  x(t1.b)+count(di
35410 73 74 69 6e 63 74 20 31 33 29 20 66 72 6f 6d 20  stinct 13) from 
35420 74 31 29 2d 63 6f 61 6c 65 73 63 65 28 28 73 65  t1)-coalesce((se
35430 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31 20  lect 13 from t1 
35440 77 68 65 72 65 20 74 31 2e 65 20 6e 6f 74 20 69  where t1.e not i
35450 6e 20 28 31 39 2c 31 37 2c 65 29 20 61 6e 64 20  n (19,17,e) and 
35460 31 31 3c 3d 74 31 2e 64 29 2c 63 29 29 2c 74 31  11<=t1.d),c)),t1
35470 2e 66 29 29 7d 0a 7d 20 7b 31 37 7d 0a 64 6f 5f  .f))}.} {17}.do_
35480 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
35490 32 39 38 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  298 {.  db eval 
354a0 7b 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65  {SELECT case whe
354b0 6e 20 31 39 3d 31 33 20 6f 72 20 31 33 2b 61 20  n 19=13 or 13+a 
354c0 7c 20 31 39 2a 31 31 2b 62 3c 3e 62 20 61 6e 64  | 19*11+b<>b and
354d0 20 28 28 31 39 3c 3d 62 2b 28 73 65 6c 65 63 74   ((19<=b+(select
354e0 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d 20 74   count(*) from t
354f0 31 29 29 29 20 74 68 65 6e 20 74 31 2e 64 20 77  1))) then t1.d w
35500 68 65 6e 20 74 31 2e 65 3c 3d 20 2d 31 39 20 74  hen t1.e<= -19 t
35510 68 65 6e 20 64 2d 74 31 2e 65 2b 28 73 65 6c 65  hen d-t1.e+(sele
35520 63 74 20 7e 6d 61 78 28 31 39 29 2a 2b 28 63 6f  ct ~max(19)*+(co
35530 75 6e 74 28 64 69 73 74 69 6e 63 74 20 62 29 29  unt(distinct b))
35540 20 66 72 6f 6d 20 74 31 29 2b 74 31 2e 64 2a 74   from t1)+t1.d*t
35550 31 2e 64 2b 66 20 65 6c 73 65 20 74 31 2e 63 20  1.d+f else t1.c 
35560 65 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  end FROM t1 WHER
35570 45 20 28 31 33 2a 63 61 73 65 20 77 68 65 6e 20  E (13*case when 
35580 31 39 2a 63 61 73 65 20 77 68 65 6e 20 31 39 20  19*case when 19 
35590 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 37 20 61  not between 17 a
355a0 6e 64 20 74 31 2e 65 20 74 68 65 6e 20 74 31 2e  nd t1.e then t1.
355b0 65 20 77 68 65 6e 20 28 28 63 61 73 65 20 77 68  e when ((case wh
355c0 65 6e 20 63 61 73 65 20 63 61 73 65 20 77 68 65  en case case whe
355d0 6e 20 65 3c 3e 31 31 20 6f 72 20 74 31 2e 62 20  n e<>11 or t1.b 
355e0 6e 6f 74 20 69 6e 20 28 74 31 2e 61 2c 20 2d 63  not in (t1.a, -c
355f0 2c 31 37 29 20 74 68 65 6e 20 62 20 65 6c 73 65  ,17) then b else
35600 20 61 20 65 6e 64 20 77 68 65 6e 20 20 2d 65 20   a end when  -e 
35610 74 68 65 6e 20 62 20 65 6c 73 65 20 61 20 65 6e  then b else a en
35620 64 2a 61 20 69 6e 20 28 73 65 6c 65 63 74 20 31  d*a in (select 1
35630 39 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  9 from t1 union 
35640 73 65 6c 65 63 74 20 31 33 20 66 72 6f 6d 20 74  select 13 from t
35650 31 29 20 74 68 65 6e 20 65 20 65 6c 73 65 20 74  1) then e else t
35660 31 2e 63 20 65 6e 64 20 69 6e 20 28 73 65 6c 65  1.c end in (sele
35670 63 74 20 20 2d 61 62 73 28 2b 63 6f 75 6e 74 28  ct  -abs(+count(
35680 2a 29 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  *)) from t1 unio
35690 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64  n select count(d
356a0 69 73 74 69 6e 63 74 20 66 29 20 66 72 6f 6d 20  istinct f) from 
356b0 74 31 29 29 29 20 74 68 65 6e 20 31 39 20 65 6c  t1))) then 19 el
356c0 73 65 20 64 20 65 6e 64 3e 3d 66 20 74 68 65 6e  se d end>=f then
356d0 20 74 31 2e 61 20 77 68 65 6e 20 74 31 2e 65 3e   t1.a when t1.e>
356e0 3d 62 20 74 68 65 6e 20 61 20 65 6c 73 65 20 63  =b then a else c
356f0 20 65 6e 64 3e 3d 74 31 2e 64 29 7d 0a 7d 20 7b   end>=t1.d)}.} {
35700 34 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  400}.do_test ran
35710 64 65 78 70 72 2d 32 2e 32 39 39 20 7b 0a 20 20  dexpr-2.299 {.  
35720 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
35730 63 61 73 65 20 77 68 65 6e 20 31 39 3d 31 33 20  case when 19=13 
35740 6f 72 20 31 33 2b 61 20 7c 20 31 39 2a 31 31 2b  or 13+a | 19*11+
35750 62 3c 3e 62 20 61 6e 64 20 28 28 31 39 3c 3d 62  b<>b and ((19<=b
35760 2b 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 2a  +(select count(*
35770 29 20 66 72 6f 6d 20 74 31 29 29 29 20 74 68 65  ) from t1))) the
35780 6e 20 74 31 2e 64 20 77 68 65 6e 20 74 31 2e 65  n t1.d when t1.e
35790 3c 3d 20 2d 31 39 20 74 68 65 6e 20 64 2d 74 31  <= -19 then d-t1
357a0 2e 65 2b 28 73 65 6c 65 63 74 20 7e 6d 61 78 28  .e+(select ~max(
357b0 31 39 29 2a 2b 28 63 6f 75 6e 74 28 64 69 73 74  19)*+(count(dist
357c0 69 6e 63 74 20 62 29 29 20 66 72 6f 6d 20 74 31  inct b)) from t1
357d0 29 2b 74 31 2e 64 2a 74 31 2e 64 2b 66 20 65 6c  )+t1.d*t1.d+f el
357e0 73 65 20 74 31 2e 63 20 65 6e 64 20 46 52 4f 4d  se t1.c end FROM
357f0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 28   t1 WHERE NOT ((
35800 31 33 2a 63 61 73 65 20 77 68 65 6e 20 31 39 2a  13*case when 19*
35810 63 61 73 65 20 77 68 65 6e 20 31 39 20 6e 6f 74  case when 19 not
35820 20 62 65 74 77 65 65 6e 20 31 37 20 61 6e 64 20   between 17 and 
35830 74 31 2e 65 20 74 68 65 6e 20 74 31 2e 65 20 77  t1.e then t1.e w
35840 68 65 6e 20 28 28 63 61 73 65 20 77 68 65 6e 20  hen ((case when 
35850 63 61 73 65 20 63 61 73 65 20 77 68 65 6e 20 65  case case when e
35860 3c 3e 31 31 20 6f 72 20 74 31 2e 62 20 6e 6f 74  <>11 or t1.b not
35870 20 69 6e 20 28 74 31 2e 61 2c 20 2d 63 2c 31 37   in (t1.a, -c,17
35880 29 20 74 68 65 6e 20 62 20 65 6c 73 65 20 61 20  ) then b else a 
35890 65 6e 64 20 77 68 65 6e 20 20 2d 65 20 74 68 65  end when  -e the
358a0 6e 20 62 20 65 6c 73 65 20 61 20 65 6e 64 2a 61  n b else a end*a
358b0 20 69 6e 20 28 73 65 6c 65 63 74 20 31 39 20 66   in (select 19 f
358c0 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
358d0 65 63 74 20 31 33 20 66 72 6f 6d 20 74 31 29 20  ect 13 from t1) 
358e0 74 68 65 6e 20 65 20 65 6c 73 65 20 74 31 2e 63  then e else t1.c
358f0 20 65 6e 64 20 69 6e 20 28 73 65 6c 65 63 74 20   end in (select 
35900 20 2d 61 62 73 28 2b 63 6f 75 6e 74 28 2a 29 29   -abs(+count(*))
35910 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
35920 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74  elect count(dist
35930 69 6e 63 74 20 66 29 20 66 72 6f 6d 20 74 31 29  inct f) from t1)
35940 29 29 20 74 68 65 6e 20 31 39 20 65 6c 73 65 20  )) then 19 else 
35950 64 20 65 6e 64 3e 3d 66 20 74 68 65 6e 20 74 31  d end>=f then t1
35960 2e 61 20 77 68 65 6e 20 74 31 2e 65 3e 3d 62 20  .a when t1.e>=b 
35970 74 68 65 6e 20 61 20 65 6c 73 65 20 63 20 65 6e  then a else c en
35980 64 3e 3d 74 31 2e 64 29 29 7d 0a 7d 20 7b 7d 0a  d>=t1.d))}.} {}.
35990 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72  do_test randexpr
359a0 2d 32 2e 33 30 30 20 7b 0a 20 20 64 62 20 65 76  -2.300 {.  db ev
359b0 61 6c 20 7b 53 45 4c 45 43 54 20 63 61 73 65 20  al {SELECT case 
359c0 77 68 65 6e 20 31 39 3d 31 33 20 6f 72 20 31 33  when 19=13 or 13
359d0 2b 61 20 26 20 31 39 2a 31 31 2b 62 3c 3e 62 20  +a & 19*11+b<>b 
359e0 61 6e 64 20 28 28 31 39 3c 3d 62 2b 28 73 65 6c  and ((19<=b+(sel
359f0 65 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f  ect count(*) fro
35a00 6d 20 74 31 29 29 29 20 74 68 65 6e 20 74 31 2e  m t1))) then t1.
35a10 64 20 77 68 65 6e 20 74 31 2e 65 3c 3d 20 2d 31  d when t1.e<= -1
35a20 39 20 74 68 65 6e 20 64 2d 74 31 2e 65 2b 28 73  9 then d-t1.e+(s
35a30 65 6c 65 63 74 20 7e 6d 61 78 28 31 39 29 2a 2b  elect ~max(19)*+
35a40 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  (count(distinct 
35a50 62 29 29 20 66 72 6f 6d 20 74 31 29 2b 74 31 2e  b)) from t1)+t1.
35a60 64 2a 74 31 2e 64 2b 66 20 65 6c 73 65 20 74 31  d*t1.d+f else t1
35a70 2e 63 20 65 6e 64 20 46 52 4f 4d 20 74 31 20 57  .c end FROM t1 W
35a80 48 45 52 45 20 28 31 33 2a 63 61 73 65 20 77 68  HERE (13*case wh
35a90 65 6e 20 31 39 2a 63 61 73 65 20 77 68 65 6e 20  en 19*case when 
35aa0 31 39 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31  19 not between 1
35ab0 37 20 61 6e 64 20 74 31 2e 65 20 74 68 65 6e 20  7 and t1.e then 
35ac0 74 31 2e 65 20 77 68 65 6e 20 28 28 63 61 73 65  t1.e when ((case
35ad0 20 77 68 65 6e 20 63 61 73 65 20 63 61 73 65 20   when case case 
35ae0 77 68 65 6e 20 65 3c 3e 31 31 20 6f 72 20 74 31  when e<>11 or t1
35af0 2e 62 20 6e 6f 74 20 69 6e 20 28 74 31 2e 61 2c  .b not in (t1.a,
35b00 20 2d 63 2c 31 37 29 20 74 68 65 6e 20 62 20 65   -c,17) then b e
35b10 6c 73 65 20 61 20 65 6e 64 20 77 68 65 6e 20 20  lse a end when  
35b20 2d 65 20 74 68 65 6e 20 62 20 65 6c 73 65 20 61  -e then b else a
35b30 20 65 6e 64 2a 61 20 69 6e 20 28 73 65 6c 65 63   end*a in (selec
35b40 74 20 31 39 20 66 72 6f 6d 20 74 31 20 75 6e 69  t 19 from t1 uni
35b50 6f 6e 20 73 65 6c 65 63 74 20 31 33 20 66 72 6f  on select 13 fro
35b60 6d 20 74 31 29 20 74 68 65 6e 20 65 20 65 6c 73  m t1) then e els
35b70 65 20 74 31 2e 63 20 65 6e 64 20 69 6e 20 28 73  e t1.c end in (s
35b80 65 6c 65 63 74 20 20 2d 61 62 73 28 2b 63 6f 75  elect  -abs(+cou
35b90 6e 74 28 2a 29 29 20 66 72 6f 6d 20 74 31 20 75  nt(*)) from t1 u
35ba0 6e 69 6f 6e 20 73 65 6c 65 63 74 20 63 6f 75 6e  nion select coun
35bb0 74 28 64 69 73 74 69 6e 63 74 20 66 29 20 66 72  t(distinct f) fr
35bc0 6f 6d 20 74 31 29 29 29 20 74 68 65 6e 20 31 39  om t1))) then 19
35bd0 20 65 6c 73 65 20 64 20 65 6e 64 3e 3d 66 20 74   else d end>=f t
35be0 68 65 6e 20 74 31 2e 61 20 77 68 65 6e 20 74 31  hen t1.a when t1
35bf0 2e 65 3e 3d 62 20 74 68 65 6e 20 61 20 65 6c 73  .e>=b then a els
35c00 65 20 63 20 65 6e 64 3e 3d 74 31 2e 64 29 7d 0a  e c end>=t1.d)}.
35c10 7d 20 7b 34 30 30 7d 0a 64 6f 5f 74 65 73 74 20  } {400}.do_test 
35c20 72 61 6e 64 65 78 70 72 2d 32 2e 33 30 31 20 7b  randexpr-2.301 {
35c30 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
35c40 43 54 20 2b 63 6f 61 6c 65 73 63 65 28 28 73 65  CT +coalesce((se
35c50 6c 65 63 74 20 74 31 2e 64 20 66 72 6f 6d 20 74  lect t1.d from t
35c60 31 20 77 68 65 72 65 20 63 6f 61 6c 65 73 63 65  1 where coalesce
35c70 28 28 73 65 6c 65 63 74 20 74 31 2e 63 2b 74 31  ((select t1.c+t1
35c80 2e 62 2d 63 61 73 65 20 28 31 39 29 20 77 68 65  .b-case (19) whe
35c90 6e 20 74 31 2e 63 20 74 68 65 6e 20 31 33 2b 31  n t1.c then 13+1
35ca0 33 2b 31 37 20 65 6c 73 65 20 74 31 2e 65 20 65  3+17 else t1.e e
35cb0 6e 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  nd from t1 where
35cc0 20 28 6e 6f 74 20 65 78 69 73 74 73 28 73 65 6c   (not exists(sel
35cd0 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
35ce0 65 72 65 20 74 31 2e 66 3c 31 33 29 29 20 61 6e  ere t1.f<13)) an
35cf0 64 20 64 20 6e 6f 74 20 69 6e 20 28 74 31 2e 65  d d not in (t1.e
35d00 2c 31 31 2c 31 39 29 20 61 6e 64 20 6e 6f 74 20  ,11,19) and not 
35d10 31 39 3e 3d 74 31 2e 66 20 6f 72 20 65 20 69 6e  19>=t1.f or e in
35d20 20 28 73 65 6c 65 63 74 20 6d 69 6e 28 74 31 2e   (select min(t1.
35d30 63 29 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e  c) from t1 union
35d40 20 73 65 6c 65 63 74 20 63 61 73 74 28 61 76 67   select cast(avg
35d50 28 74 31 2e 63 29 20 41 53 20 69 6e 74 65 67 65  (t1.c) AS intege
35d60 72 29 20 66 72 6f 6d 20 74 31 29 29 2c 20 2d 61  r) from t1)), -a
35d70 29 2d 62 2a 28 31 33 29 3c 74 31 2e 62 29 2c 28  )-b*(13)<t1.b),(
35d80 74 31 2e 63 29 29 20 7c 20 74 31 2e 65 20 46 52  t1.c)) | t1.e FR
35d90 4f 4d 20 74 31 20 57 48 45 52 45 20 6e 6f 74 20  OM t1 WHERE not 
35da0 28 31 31 3e 28 2b 62 29 29 7d 0a 7d 20 7b 35 30  (11>(+b))}.} {50
35db0 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  0}.do_test rande
35dc0 78 70 72 2d 32 2e 33 30 32 20 7b 0a 20 20 64 62  xpr-2.302 {.  db
35dd0 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2b 63   eval {SELECT +c
35de0 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20  oalesce((select 
35df0 74 31 2e 64 20 66 72 6f 6d 20 74 31 20 77 68 65  t1.d from t1 whe
35e00 72 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  re coalesce((sel
35e10 65 63 74 20 74 31 2e 63 2b 74 31 2e 62 2d 63 61  ect t1.c+t1.b-ca
35e20 73 65 20 28 31 39 29 20 77 68 65 6e 20 74 31 2e  se (19) when t1.
35e30 63 20 74 68 65 6e 20 31 33 2b 31 33 2b 31 37 20  c then 13+13+17 
35e40 65 6c 73 65 20 74 31 2e 65 20 65 6e 64 20 66 72  else t1.e end fr
35e50 6f 6d 20 74 31 20 77 68 65 72 65 20 28 6e 6f 74  om t1 where (not
35e60 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
35e70 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
35e80 31 2e 66 3c 31 33 29 29 20 61 6e 64 20 64 20 6e  1.f<13)) and d n
35e90 6f 74 20 69 6e 20 28 74 31 2e 65 2c 31 31 2c 31  ot in (t1.e,11,1
35ea0 39 29 20 61 6e 64 20 6e 6f 74 20 31 39 3e 3d 74  9) and not 19>=t
35eb0 31 2e 66 20 6f 72 20 65 20 69 6e 20 28 73 65 6c  1.f or e in (sel
35ec0 65 63 74 20 6d 69 6e 28 74 31 2e 63 29 20 66 72  ect min(t1.c) fr
35ed0 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65  om t1 union sele
35ee0 63 74 20 63 61 73 74 28 61 76 67 28 74 31 2e 63  ct cast(avg(t1.c
35ef0 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72  ) AS integer) fr
35f00 6f 6d 20 74 31 29 29 2c 20 2d 61 29 2d 62 2a 28  om t1)), -a)-b*(
35f10 31 33 29 3c 74 31 2e 62 29 2c 28 74 31 2e 63 29  13)<t1.b),(t1.c)
35f20 29 20 7c 20 74 31 2e 65 20 46 52 4f 4d 20 74 31  ) | t1.e FROM t1
35f30 20 57 48 45 52 45 20 4e 4f 54 20 28 6e 6f 74 20   WHERE NOT (not 
35f40 28 31 31 3e 28 2b 62 29 29 29 7d 0a 7d 20 7b 7d  (11>(+b)))}.} {}
35f50 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
35f60 72 2d 32 2e 33 30 33 20 7b 0a 20 20 64 62 20 65  r-2.303 {.  db e
35f70 76 61 6c 20 7b 53 45 4c 45 43 54 20 2b 63 6f 61  val {SELECT +coa
35f80 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 74 31  lesce((select t1
35f90 2e 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  .d from t1 where
35fa0 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
35fb0 74 20 74 31 2e 63 2b 74 31 2e 62 2d 63 61 73 65  t t1.c+t1.b-case
35fc0 20 28 31 39 29 20 77 68 65 6e 20 74 31 2e 63 20   (19) when t1.c 
35fd0 74 68 65 6e 20 31 33 2b 31 33 2b 31 37 20 65 6c  then 13+13+17 el
35fe0 73 65 20 74 31 2e 65 20 65 6e 64 20 66 72 6f 6d  se t1.e end from
35ff0 20 74 31 20 77 68 65 72 65 20 28 6e 6f 74 20 65   t1 where (not e
36000 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
36010 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e  rom t1 where t1.
36020 66 3c 31 33 29 29 20 61 6e 64 20 64 20 6e 6f 74  f<13)) and d not
36030 20 69 6e 20 28 74 31 2e 65 2c 31 31 2c 31 39 29   in (t1.e,11,19)
36040 20 61 6e 64 20 6e 6f 74 20 31 39 3e 3d 74 31 2e   and not 19>=t1.
36050 66 20 6f 72 20 65 20 69 6e 20 28 73 65 6c 65 63  f or e in (selec
36060 74 20 6d 69 6e 28 74 31 2e 63 29 20 66 72 6f 6d  t min(t1.c) from
36070 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
36080 20 63 61 73 74 28 61 76 67 28 74 31 2e 63 29 20   cast(avg(t1.c) 
36090 41 53 20 69 6e 74 65 67 65 72 29 20 66 72 6f 6d  AS integer) from
360a0 20 74 31 29 29 2c 20 2d 61 29 2d 62 2a 28 31 33   t1)), -a)-b*(13
360b0 29 3c 74 31 2e 62 29 2c 28 74 31 2e 63 29 29 20  )<t1.b),(t1.c)) 
360c0 26 20 74 31 2e 65 20 46 52 4f 4d 20 74 31 20 57  & t1.e FROM t1 W
360d0 48 45 52 45 20 6e 6f 74 20 28 31 31 3e 28 2b 62  HERE not (11>(+b
360e0 29 29 7d 0a 7d 20 7b 34 30 30 7d 0a 64 6f 5f 74  ))}.} {400}.do_t
360f0 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 33  est randexpr-2.3
36100 30 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  04 {.  db eval {
36110 53 45 4c 45 43 54 20 63 61 73 65 20 77 68 65 6e  SELECT case when
36120 20 28 28 28 74 31 2e 63 29 3c 3d 61 2d 31 31 2a   (((t1.c)<=a-11*
36130 74 31 2e 65 29 29 20 74 68 65 6e 20 74 31 2e 62  t1.e)) then t1.b
36140 20 65 6c 73 65 20 61 20 65 6e 64 20 7c 20 28 28   else a end | ((
36150 61 62 73 28 62 2a 28 61 62 73 28 74 31 2e 65 20  abs(b*(abs(t1.e 
36160 7c 20 2b 63 29 2f 61 62 73 28 31 31 29 29 29 2f  | +c)/abs(11)))/
36170 61 62 73 28 74 31 2e 61 29 29 29 20 46 52 4f 4d  abs(t1.a))) FROM
36180 20 74 31 20 57 48 45 52 45 20 63 61 73 65 20 77   t1 WHERE case w
36190 68 65 6e 20 74 31 2e 65 20 69 6e 20 28 73 65 6c  hen t1.e in (sel
361a0 65 63 74 20 74 31 2e 61 2d 65 20 66 72 6f 6d 20  ect t1.a-e from 
361b0 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
361c0 74 31 2e 65 20 66 72 6f 6d 20 74 31 29 20 74 68  t1.e from t1) th
361d0 65 6e 20 31 39 2a 63 6f 61 6c 65 73 63 65 28 28  en 19*coalesce((
361e0 73 65 6c 65 63 74 20 61 2a 74 31 2e 63 2d 31 39  select a*t1.c-19
361f0 2b 66 2b 74 31 2e 64 2d 63 61 73 65 20 63 61 73  +f+t1.d-case cas
36200 65 20 77 68 65 6e 20 31 31 3e 3d 64 20 74 68 65  e when 11>=d the
36210 6e 20 66 20 77 68 65 6e 20 6e 6f 74 20 66 3c 3e  n f when not f<>
36220 31 37 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73  17 then t1.d els
36230 65 20 74 31 2e 66 20 65 6e 64 2b 74 31 2e 65 2d  e t1.f end+t1.e-
36240 74 31 2e 63 20 77 68 65 6e 20 64 20 74 68 65 6e  t1.c when d then
36250 20 62 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64   b else t1.f end
36260 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74   from t1 where t
36270 31 2e 66 3e 61 29 2c 20 2d 74 31 2e 61 29 2d 20  1.f>a), -t1.a)- 
36280 2d 28 74 31 2e 63 29 2d 74 31 2e 65 2b 62 20 65  -(t1.c)-t1.e+b e
36290 6c 73 65 20 31 31 20 65 6e 64 3c 74 31 2e 66 7d  lse 11 end<t1.f}
362a0 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61  .} {}.do_test ra
362b0 6e 64 65 78 70 72 2d 32 2e 33 30 35 20 7b 0a 20  ndexpr-2.305 {. 
362c0 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
362d0 20 63 61 73 65 20 77 68 65 6e 20 28 28 28 74 31   case when (((t1
362e0 2e 63 29 3c 3d 61 2d 31 31 2a 74 31 2e 65 29 29  .c)<=a-11*t1.e))
362f0 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65 20   then t1.b else 
36300 61 20 65 6e 64 20 7c 20 28 28 61 62 73 28 62 2a  a end | ((abs(b*
36310 28 61 62 73 28 74 31 2e 65 20 7c 20 2b 63 29 2f  (abs(t1.e | +c)/
36320 61 62 73 28 31 31 29 29 29 2f 61 62 73 28 74 31  abs(11)))/abs(t1
36330 2e 61 29 29 29 20 46 52 4f 4d 20 74 31 20 57 48  .a))) FROM t1 WH
36340 45 52 45 20 4e 4f 54 20 28 63 61 73 65 20 77 68  ERE NOT (case wh
36350 65 6e 20 74 31 2e 65 20 69 6e 20 28 73 65 6c 65  en t1.e in (sele
36360 63 74 20 74 31 2e 61 2d 65 20 66 72 6f 6d 20 74  ct t1.a-e from t
36370 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74  1 union select t
36380 31 2e 65 20 66 72 6f 6d 20 74 31 29 20 74 68 65  1.e from t1) the
36390 6e 20 31 39 2a 63 6f 61 6c 65 73 63 65 28 28 73  n 19*coalesce((s
363a0 65 6c 65 63 74 20 61 2a 74 31 2e 63 2d 31 39 2b  elect a*t1.c-19+
363b0 66 2b 74 31 2e 64 2d 63 61 73 65 20 63 61 73 65  f+t1.d-case case
363c0 20 77 68 65 6e 20 31 31 3e 3d 64 20 74 68 65 6e   when 11>=d then
363d0 20 66 20 77 68 65 6e 20 6e 6f 74 20 66 3c 3e 31   f when not f<>1
363e0 37 20 74 68 65 6e 20 74 31 2e 64 20 65 6c 73 65  7 then t1.d else
363f0 20 74 31 2e 66 20 65 6e 64 2b 74 31 2e 65 2d 74   t1.f end+t1.e-t
36400 31 2e 63 20 77 68 65 6e 20 64 20 74 68 65 6e 20  1.c when d then 
36410 62 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64 20  b else t1.f end 
36420 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31  from t1 where t1
36430 2e 66 3e 61 29 2c 20 2d 74 31 2e 61 29 2d 20 2d  .f>a), -t1.a)- -
36440 28 74 31 2e 63 29 2d 74 31 2e 65 2b 62 20 65 6c  (t1.c)-t1.e+b el
36450 73 65 20 31 31 20 65 6e 64 3c 74 31 2e 66 29 7d  se 11 end<t1.f)}
36460 0a 7d 20 7b 31 32 34 7d 0a 64 6f 5f 74 65 73 74  .} {124}.do_test
36470 20 72 61 6e 64 65 78 70 72 2d 32 2e 33 30 36 20   randexpr-2.306 
36480 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
36490 45 43 54 20 63 61 73 65 20 77 68 65 6e 20 28 28  ECT case when ((
364a0 28 74 31 2e 63 29 3c 3d 61 2d 31 31 2a 74 31 2e  (t1.c)<=a-11*t1.
364b0 65 29 29 20 74 68 65 6e 20 74 31 2e 62 20 65 6c  e)) then t1.b el
364c0 73 65 20 61 20 65 6e 64 20 26 20 28 28 61 62 73  se a end & ((abs
364d0 28 62 2a 28 61 62 73 28 74 31 2e 65 20 26 20 2b  (b*(abs(t1.e & +
364e0 63 29 2f 61 62 73 28 31 31 29 29 29 2f 61 62 73  c)/abs(11)))/abs
364f0 28 74 31 2e 61 29 29 29 20 46 52 4f 4d 20 74 31  (t1.a))) FROM t1
36500 20 57 48 45 52 45 20 4e 4f 54 20 28 63 61 73 65   WHERE NOT (case
36510 20 77 68 65 6e 20 74 31 2e 65 20 69 6e 20 28 73   when t1.e in (s
36520 65 6c 65 63 74 20 74 31 2e 61 2d 65 20 66 72 6f  elect t1.a-e fro
36530 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63  m t1 union selec
36540 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31 29 20  t t1.e from t1) 
36550 74 68 65 6e 20 31 39 2a 63 6f 61 6c 65 73 63 65  then 19*coalesce
36560 28 28 73 65 6c 65 63 74 20 61 2a 74 31 2e 63 2d  ((select a*t1.c-
36570 31 39 2b 66 2b 74 31 2e 64 2d 63 61 73 65 20 63  19+f+t1.d-case c
36580 61 73 65 20 77 68 65 6e 20 31 31 3e 3d 64 20 74  ase when 11>=d t
36590 68 65 6e 20 66 20 77 68 65 6e 20 6e 6f 74 20 66  hen f when not f
365a0 3c 3e 31 37 20 74 68 65 6e 20 74 31 2e 64 20 65  <>17 then t1.d e
365b0 6c 73 65 20 74 31 2e 66 20 65 6e 64 2b 74 31 2e  lse t1.f end+t1.
365c0 65 2d 74 31 2e 63 20 77 68 65 6e 20 64 20 74 68  e-t1.c when d th
365d0 65 6e 20 62 20 65 6c 73 65 20 74 31 2e 66 20 65  en b else t1.f e
365e0 6e 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  nd from t1 where
365f0 20 74 31 2e 66 3e 61 29 2c 20 2d 74 31 2e 61 29   t1.f>a), -t1.a)
36600 2d 20 2d 28 74 31 2e 63 29 2d 74 31 2e 65 2b 62  - -(t1.c)-t1.e+b
36610 20 65 6c 73 65 20 31 31 20 65 6e 64 3c 74 31 2e   else 11 end<t1.
36620 66 29 7d 0a 7d 20 7b 33 36 7d 0a 64 6f 5f 74 65  f)}.} {36}.do_te
36630 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e 33 30  st randexpr-2.30
36640 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  7 {.  db eval {S
36650 45 4c 45 43 54 20 31 37 2a 63 61 73 65 20 77 68  ELECT 17*case wh
36660 65 6e 20 63 61 73 65 20 74 31 2e 65 20 77 68 65  en case t1.e whe
36670 6e 20 31 33 2d 63 2b 66 20 74 68 65 6e 20 64 20  n 13-c+f then d 
36680 65 6c 73 65 20 28 73 65 6c 65 63 74 20 2b 20 2d  else (select + -
36690 63 61 73 65 20 63 61 73 74 28 61 76 67 28 62 29  case cast(avg(b)
366a0 20 41 53 20 69 6e 74 65 67 65 72 29 2a 63 6f 75   AS integer)*cou
366b0 6e 74 28 2a 29 20 77 68 65 6e 20 28 63 6f 75 6e  nt(*) when (coun
366c0 74 28 64 69 73 74 69 6e 63 74 20 31 37 29 2b 63  t(distinct 17)+c
366d0 61 73 65 20 61 62 73 28 28 63 6f 75 6e 74 28 64  ase abs((count(d
366e0 69 73 74 69 6e 63 74 20 74 31 2e 65 29 29 29 20  istinct t1.e))) 
366f0 77 68 65 6e 20 63 6f 75 6e 74 28 2a 29 20 74 68  when count(*) th
36700 65 6e 20 63 6f 75 6e 74 28 2a 29 20 65 6c 73 65  en count(*) else
36710 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20   count(distinct 
36720 63 29 20 65 6e 64 29 20 7c 20 63 6f 75 6e 74 28  c) end) | count(
36730 2a 29 20 74 68 65 6e 20 20 2d 63 6f 75 6e 74 28  *) then  -count(
36740 64 69 73 74 69 6e 63 74 20 62 29 20 65 6c 73 65  distinct b) else
36750 20 20 2d 20 2d 6d 69 6e 28 65 29 20 65 6e 64 2a    - -min(e) end*
36760 6d 69 6e 28 66 29 2d 6d 69 6e 28 74 31 2e 65 29  min(f)-min(t1.e)
36770 20 66 72 6f 6d 20 74 31 29 20 65 6e 64 2d 28 73   from t1) end-(s
36780 65 6c 65 63 74 20 28 63 6f 75 6e 74 28 2a 29 29  elect (count(*))
36790 20 66 72 6f 6d 20 74 31 29 20 69 6e 20 28 73 65   from t1) in (se
367a0 6c 65 63 74 20 31 39 20 66 72 6f 6d 20 74 31 20  lect 19 from t1 
367b0 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 74 31 2e  union select t1.
367c0 61 2d 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  a-(select count(
367d0 64 69 73 74 69 6e 63 74 20 74 31 2e 63 29 20 66  distinct t1.c) f
367e0 72 6f 6d 20 74 31 29 20 66 72 6f 6d 20 74 31 29  rom t1) from t1)
367f0 20 74 68 65 6e 20 61 2d 31 33 20 65 6c 73 65 20   then a-13 else 
36800 74 31 2e 64 20 65 6e 64 20 46 52 4f 4d 20 74 31  t1.d end FROM t1
36810 20 57 48 45 52 45 20 6e 6f 74 20 65 78 69 73 74   WHERE not exist
36820 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20  s(select 1 from 
36830 74 31 20 77 68 65 72 65 20 28 63 61 73 65 20 20  t1 where (case  
36840 2d 31 37 20 77 68 65 6e 20 63 20 74 68 65 6e 20  -17 when c then 
36850 28 61 62 73 28 74 31 2e 64 29 2f 61 62 73 28 63  (abs(t1.d)/abs(c
36860 2d 28 61 62 73 28 63 61 73 65 20 77 68 65 6e 20  -(abs(case when 
36870 74 31 2e 65 20 69 6e 20 28 31 37 2c 74 31 2e 61  t1.e in (17,t1.a
36880 2c 28 61 62 73 28 65 29 2f 61 62 73 28 74 31 2e  ,(abs(e)/abs(t1.
36890 64 29 29 29 20 74 68 65 6e 20 2b 64 2d 31 37 2a  d))) then +d-17*
368a0 74 31 2e 62 20 77 68 65 6e 20 28 73 65 6c 65 63  t1.b when (selec
368b0 74 20 2b 63 61 73 74 28 61 76 67 28 74 31 2e 61  t +cast(avg(t1.a
368c0 2a 74 31 2e 65 2b 65 2d 31 39 29 20 41 53 20 69  *t1.e+e-19) AS i
368d0 6e 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29  nteger) from t1)
368e0 20 69 6e 20 28 73 65 6c 65 63 74 20 28 61 62 73   in (select (abs
368f0 28 62 29 2f 61 62 73 28 66 29 29 20 66 72 6f 6d  (b)/abs(f)) from
36900 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
36910 20 28 31 39 29 20 66 72 6f 6d 20 74 31 29 20 74   (19) from t1) t
36920 68 65 6e 20 62 20 65 6c 73 65 20 74 31 2e 66 20  hen b else t1.f 
36930 65 6e 64 29 2f 61 62 73 28 65 29 29 2a 65 29 29  end)/abs(e))*e))
36940 2b 28 63 29 20 65 6c 73 65 20 20 2d 74 31 2e 63  +(c) else  -t1.c
36950 20 65 6e 64 3c 3d 28 31 31 29 29 29 7d 0a 7d 20   end<=(11)))}.} 
36960 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65  {}.do_test rande
36970 78 70 72 2d 32 2e 33 30 38 20 7b 0a 20 20 64 62  xpr-2.308 {.  db
36980 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 31 37   eval {SELECT 17
36990 2a 63 61 73 65 20 77 68 65 6e 20 63 61 73 65 20  *case when case 
369a0 74 31 2e 65 20 77 68 65 6e 20 31 33 2d 63 2b 66  t1.e when 13-c+f
369b0 20 74 68 65 6e 20 64 20 65 6c 73 65 20 28 73 65   then d else (se
369c0 6c 65 63 74 20 2b 20 2d 63 61 73 65 20 63 61 73  lect + -case cas
369d0 74 28 61 76 67 28 62 29 20 41 53 20 69 6e 74 65  t(avg(b) AS inte
369e0 67 65 72 29 2a 63 6f 75 6e 74 28 2a 29 20 77 68  ger)*count(*) wh
369f0 65 6e 20 28 63 6f 75 6e 74 28 64 69 73 74 69 6e  en (count(distin
36a00 63 74 20 31 37 29 2b 63 61 73 65 20 61 62 73 28  ct 17)+case abs(
36a10 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  (count(distinct 
36a20 74 31 2e 65 29 29 29 20 77 68 65 6e 20 63 6f 75  t1.e))) when cou
36a30 6e 74 28 2a 29 20 74 68 65 6e 20 63 6f 75 6e 74  nt(*) then count
36a40 28 2a 29 20 65 6c 73 65 20 63 6f 75 6e 74 28 64  (*) else count(d
36a50 69 73 74 69 6e 63 74 20 63 29 20 65 6e 64 29 20  istinct c) end) 
36a60 7c 20 63 6f 75 6e 74 28 2a 29 20 74 68 65 6e 20  | count(*) then 
36a70 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   -count(distinct
36a80 20 62 29 20 65 6c 73 65 20 20 2d 20 2d 6d 69 6e   b) else  - -min
36a90 28 65 29 20 65 6e 64 2a 6d 69 6e 28 66 29 2d 6d  (e) end*min(f)-m
36aa0 69 6e 28 74 31 2e 65 29 20 66 72 6f 6d 20 74 31  in(t1.e) from t1
36ab0 29 20 65 6e 64 2d 28 73 65 6c 65 63 74 20 28 63  ) end-(select (c
36ac0 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d 20 74 31  ount(*)) from t1
36ad0 29 20 69 6e 20 28 73 65 6c 65 63 74 20 31 39 20  ) in (select 19 
36ae0 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
36af0 6c 65 63 74 20 74 31 2e 61 2d 28 73 65 6c 65 63  lect t1.a-(selec
36b00 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74  t count(distinct
36b10 20 74 31 2e 63 29 20 66 72 6f 6d 20 74 31 29 20   t1.c) from t1) 
36b20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20 61 2d  from t1) then a-
36b30 31 33 20 65 6c 73 65 20 74 31 2e 64 20 65 6e 64  13 else t1.d end
36b40 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4e   FROM t1 WHERE N
36b50 4f 54 20 28 6e 6f 74 20 65 78 69 73 74 73 28 73  OT (not exists(s
36b60 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
36b70 77 68 65 72 65 20 28 63 61 73 65 20 20 2d 31 37  where (case  -17
36b80 20 77 68 65 6e 20 63 20 74 68 65 6e 20 28 61 62   when c then (ab
36b90 73 28 74 31 2e 64 29 2f 61 62 73 28 63 2d 28 61  s(t1.d)/abs(c-(a
36ba0 62 73 28 63 61 73 65 20 77 68 65 6e 20 74 31 2e  bs(case when t1.
36bb0 65 20 69 6e 20 28 31 37 2c 74 31 2e 61 2c 28 61  e in (17,t1.a,(a
36bc0 62 73 28 65 29 2f 61 62 73 28 74 31 2e 64 29 29  bs(e)/abs(t1.d))
36bd0 29 20 74 68 65 6e 20 2b 64 2d 31 37 2a 74 31 2e  ) then +d-17*t1.
36be0 62 20 77 68 65 6e 20 28 73 65 6c 65 63 74 20 2b  b when (select +
36bf0 63 61 73 74 28 61 76 67 28 74 31 2e 61 2a 74 31  cast(avg(t1.a*t1
36c00 2e 65 2b 65 2d 31 39 29 20 41 53 20 69 6e 74 65  .e+e-19) AS inte
36c10 67 65 72 29 20 66 72 6f 6d 20 74 31 29 20 69 6e  ger) from t1) in
36c20 20 28 73 65 6c 65 63 74 20 28 61 62 73 28 62 29   (select (abs(b)
36c30 2f 61 62 73 28 66 29 29 20 66 72 6f 6d 20 74 31  /abs(f)) from t1
36c40 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 28 31   union select (1
36c50 39 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e  9) from t1) then
36c60 20 62 20 65 6c 73 65 20 74 31 2e 66 20 65 6e 64   b else t1.f end
36c70 29 2f 61 62 73 28 65 29 29 2a 65 29 29 2b 28 63  )/abs(e))*e))+(c
36c80 29 20 65 6c 73 65 20 20 2d 74 31 2e 63 20 65 6e  ) else  -t1.c en
36c90 64 3c 3d 28 31 31 29 29 29 29 7d 0a 7d 20 7b 36  d<=(11))))}.} {6
36ca0 38 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  800}.do_test ran
36cb0 64 65 78 70 72 2d 32 2e 33 30 39 20 7b 0a 20 20  dexpr-2.309 {.  
36cc0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
36cd0 31 37 2a 63 61 73 65 20 77 68 65 6e 20 63 61 73  17*case when cas
36ce0 65 20 74 31 2e 65 20 77 68 65 6e 20 31 33 2d 63  e t1.e when 13-c
36cf0 2b 66 20 74 68 65 6e 20 64 20 65 6c 73 65 20 28  +f then d else (
36d00 73 65 6c 65 63 74 20 2b 20 2d 63 61 73 65 20 63  select + -case c
36d10 61 73 74 28 61 76 67 28 62 29 20 41 53 20 69 6e  ast(avg(b) AS in
36d20 74 65 67 65 72 29 2a 63 6f 75 6e 74 28 2a 29 20  teger)*count(*) 
36d30 77 68 65 6e 20 28 63 6f 75 6e 74 28 64 69 73 74  when (count(dist
36d40 69 6e 63 74 20 31 37 29 2b 63 61 73 65 20 61 62  inct 17)+case ab
36d50 73 28 28 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  s((count(distinc
36d60 74 20 74 31 2e 65 29 29 29 20 77 68 65 6e 20 63  t t1.e))) when c
36d70 6f 75 6e 74 28 2a 29 20 74 68 65 6e 20 63 6f 75  ount(*) then cou
36d80 6e 74 28 2a 29 20 65 6c 73 65 20 63 6f 75 6e 74  nt(*) else count
36d90 28 64 69 73 74 69 6e 63 74 20 63 29 20 65 6e 64  (distinct c) end
36da0 29 20 26 20 63 6f 75 6e 74 28 2a 29 20 74 68 65  ) & count(*) the
36db0 6e 20 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e  n  -count(distin
36dc0 63 74 20 62 29 20 65 6c 73 65 20 20 2d 20 2d 6d  ct b) else  - -m
36dd0 69 6e 28 65 29 20 65 6e 64 2a 6d 69 6e 28 66 29  in(e) end*min(f)
36de0 2d 6d 69 6e 28 74 31 2e 65 29 20 66 72 6f 6d 20  -min(t1.e) from 
36df0 74 31 29 20 65 6e 64 2d 28 73 65 6c 65 63 74 20  t1) end-(select 
36e00 28 63 6f 75 6e 74 28 2a 29 29 20 66 72 6f 6d 20  (count(*)) from 
36e10 74 31 29 20 69 6e 20 28 73 65 6c 65 63 74 20 31  t1) in (select 1
36e20 39 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20  9 from t1 union 
36e30 73 65 6c 65 63 74 20 74 31 2e 61 2d 28 73 65 6c  select t1.a-(sel
36e40 65 63 74 20 63 6f 75 6e 74 28 64 69 73 74 69 6e  ect count(distin
36e50 63 74 20 74 31 2e 63 29 20 66 72 6f 6d 20 74 31  ct t1.c) from t1
36e60 29 20 66 72 6f 6d 20 74 31 29 20 74 68 65 6e 20  ) from t1) then 
36e70 61 2d 31 33 20 65 6c 73 65 20 74 31 2e 64 20 65  a-13 else t1.d e
36e80 6e 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  nd FROM t1 WHERE
36e90 20 4e 4f 54 20 28 6e 6f 74 20 65 78 69 73 74 73   NOT (not exists
36ea0 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74  (select 1 from t
36eb0 31 20 77 68 65 72 65 20 28 63 61 73 65 20 20 2d  1 where (case  -
36ec0 31 37 20 77 68 65 6e 20 63 20 74 68 65 6e 20 28  17 when c then (
36ed0 61 62 73 28 74 31 2e 64 29 2f 61 62 73 28 63 2d  abs(t1.d)/abs(c-
36ee0 28 61 62 73 28 63 61 73 65 20 77 68 65 6e 20 74  (abs(case when t
36ef0 31 2e 65 20 69 6e 20 28 31 37 2c 74 31 2e 61 2c  1.e in (17,t1.a,
36f00 28 61 62 73 28 65 29 2f 61 62 73 28 74 31 2e 64  (abs(e)/abs(t1.d
36f10 29 29 29 20 74 68 65 6e 20 2b 64 2d 31 37 2a 74  ))) then +d-17*t
36f20 31 2e 62 20 77 68 65 6e 20 28 73 65 6c 65 63 74  1.b when (select
36f30 20 2b 63 61 73 74 28 61 76 67 28 74 31 2e 61 2a   +cast(avg(t1.a*
36f40 74 31 2e 65 2b 65 2d 31 39 29 20 41 53 20 69 6e  t1.e+e-19) AS in
36f50 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 20  teger) from t1) 
36f60 69 6e 20 28 73 65 6c 65 63 74 20 28 61 62 73 28  in (select (abs(
36f70 62 29 2f 61 62 73 28 66 29 29 20 66 72 6f 6d 20  b)/abs(f)) from 
36f80 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
36f90 28 31 39 29 20 66 72 6f 6d 20 74 31 29 20 74 68  (19) from t1) th
36fa0 65 6e 20 62 20 65 6c 73 65 20 74 31 2e 66 20 65  en b else t1.f e
36fb0 6e 64 29 2f 61 62 73 28 65 29 29 2a 65 29 29 2b  nd)/abs(e))*e))+
36fc0 28 63 29 20 65 6c 73 65 20 20 2d 74 31 2e 63 20  (c) else  -t1.c 
36fd0 65 6e 64 3c 3d 28 31 31 29 29 29 29 7d 0a 7d 20  end<=(11))))}.} 
36fe0 7b 36 38 30 30 7d 0a 64 6f 5f 74 65 73 74 20 72  {6800}.do_test r
36ff0 61 6e 64 65 78 70 72 2d 32 2e 33 31 30 20 7b 0a  andexpr-2.310 {.
37000 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
37010 54 20 74 31 2e 66 2b 63 6f 61 6c 65 73 63 65 28  T t1.f+coalesce(
37020 28 73 65 6c 65 63 74 20 74 31 2e 62 2d 31 33 2d  (select t1.b-13-
37030 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63  (coalesce((selec
37040 74 20 31 37 20 66 72 6f 6d 20 74 31 20 77 68 65  t 17 from t1 whe
37050 72 65 20 62 3e 61 29 2c 31 33 29 2a 31 31 29 2d  re b>a),13)*11)-
37060 74 31 2e 63 20 66 72 6f 6d 20 74 31 20 77 68 65  t1.c from t1 whe
37070 72 65 20 31 31 20 62 65 74 77 65 65 6e 20 74 31  re 11 between t1
37080 2e 61 20 61 6e 64 20 20 2d 31 33 2b 74 31 2e 66  .a and  -13+t1.f
37090 2a 7e 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  *~coalesce((sele
370a0 63 74 20 6d 61 78 28 62 2d 66 29 20 66 72 6f 6d  ct max(b-f) from
370b0 20 74 31 20 77 68 65 72 65 20 74 31 2e 61 3c 3d   t1 where t1.a<=
370c0 31 33 20 6f 72 20 61 20 6e 6f 74 20 69 6e 20 28  13 or a not in (
370d0 31 33 2c 66 2c 31 37 29 29 2c 62 29 20 6f 72 20  13,f,17)),b) or 
370e0 28 74 31 2e 64 3c 31 39 20 6f 72 20 62 3e 20 2d  (t1.d<19 or b> -
370f0 74 31 2e 63 29 29 2c 62 29 20 46 52 4f 4d 20 74  t1.c)),b) FROM t
37100 31 20 57 48 45 52 45 20 31 31 20 6e 6f 74 20 62  1 WHERE 11 not b
37110 65 74 77 65 65 6e 20 64 20 61 6e 64 20 63 6f 61  etween d and coa
37120 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 20 2d  lesce((select  -
37130 28 73 65 6c 65 63 74 20 28 63 61 73 74 28 61 76  (select (cast(av
37140 67 28 64 29 20 41 53 20 69 6e 74 65 67 65 72 29  g(d) AS integer)
37150 29 20 66 72 6f 6d 20 74 31 29 20 66 72 6f 6d 20  ) from t1) from 
37160 74 31 20 77 68 65 72 65 20 63 61 73 65 20 77 68  t1 where case wh
37170 65 6e 20 31 37 3c 74 31 2e 61 20 74 68 65 6e 20  en 17<t1.a then 
37180 74 31 2e 62 20 65 6c 73 65 20 63 6f 61 6c 65 73  t1.b else coales
37190 63 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 66  ce((select max(f
371a0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
371b0 74 31 2e 64 2d 2b 63 61 73 65 20 77 68 65 6e 20  t1.d-+case when 
371c0 28 64 3c 3d 74 31 2e 66 29 20 61 6e 64 20 74 31  (d<=t1.f) and t1
371d0 2e 65 20 6e 6f 74 20 69 6e 20 28 31 37 2c 74 31  .e not in (17,t1
371e0 2e 64 2c 74 31 2e 61 29 20 61 6e 64 20 31 31 20  .d,t1.a) and 11 
371f0 69 6e 20 28 31 33 2c 74 31 2e 65 2c 20 2d 74 31  in (13,t1.e, -t1
37200 2e 61 29 20 61 6e 64 20 74 31 2e 63 3c 31 33 20  .a) and t1.c<13 
37210 74 68 65 6e 20 20 2d 62 20 65 6c 73 65 20 63 61  then  -b else ca
37220 73 65 20 77 68 65 6e 20 61 3e 31 33 20 74 68 65  se when a>13 the
37230 6e 20 65 20 77 68 65 6e 20 31 39 20 62 65 74 77  n e when 19 betw
37240 65 65 6e 20 74 31 2e 61 20 61 6e 64 20 74 31 2e  een t1.a and t1.
37250 62 20 74 68 65 6e 20 62 20 65 6c 73 65 20 62 20  b then b else b 
37260 65 6e 64 20 65 6e 64 2a 31 33 3c 3d 63 29 2c 74  end end*13<=c),t
37270 31 2e 63 29 20 65 6e 64 20 69 6e 20 28 73 65 6c  1.c) end in (sel
37280 65 63 74 20 74 31 2e 65 20 66 72 6f 6d 20 74 31  ect t1.e from t1
37290 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 64 20   union select d 
372a0 66 72 6f 6d 20 74 31 29 29 2c 74 31 2e 62 29 7d  from t1)),t1.b)}
372b0 0a 7d 20 7b 33 30 30 7d 0a 64 6f 5f 74 65 73 74  .} {300}.do_test
372c0 20 72 61 6e 64 65 78 70 72 2d 32 2e 33 31 31 20   randexpr-2.311 
372d0 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  {.  db eval {SEL
372e0 45 43 54 20 74 31 2e 66 2b 63 6f 61 6c 65 73 63  ECT t1.f+coalesc
372f0 65 28 28 73 65 6c 65 63 74 20 74 31 2e 62 2d 31  e((select t1.b-1
37300 33 2d 28 63 6f 61 6c 65 73 63 65 28 28 73 65 6c  3-(coalesce((sel
37310 65 63 74 20 31 37 20 66 72 6f 6d 20 74 31 20 77  ect 17 from t1 w
37320 68 65 72 65 20 62 3e 61 29 2c 31 33 29 2a 31 31  here b>a),13)*11
37330 29 2d 74 31 2e 63 20 66 72 6f 6d 20 74 31 20 77  )-t1.c from t1 w
37340 68 65 72 65 20 31 31 20 62 65 74 77 65 65 6e 20  here 11 between 
37350 74 31 2e 61 20 61 6e 64 20 20 2d 31 33 2b 74 31  t1.a and  -13+t1
37360 2e 66 2a 7e 63 6f 61 6c 65 73 63 65 28 28 73 65  .f*~coalesce((se
37370 6c 65 63 74 20 6d 61 78 28 62 2d 66 29 20 66 72  lect max(b-f) fr
37380 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 61  om t1 where t1.a
37390 3c 3d 31 33 20 6f 72 20 61 20 6e 6f 74 20 69 6e  <=13 or a not in
373a0 20 28 31 33 2c 66 2c 31 37 29 29 2c 62 29 20 6f   (13,f,17)),b) o
373b0 72 20 28 74 31 2e 64 3c 31 39 20 6f 72 20 62 3e  r (t1.d<19 or b>
373c0 20 2d 74 31 2e 63 29 29 2c 62 29 20 46 52 4f 4d   -t1.c)),b) FROM
373d0 20 74 31 20 57 48 45 52 45 20 4e 4f 54 20 28 31   t1 WHERE NOT (1
373e0 31 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 64 20  1 not between d 
373f0 61 6e 64 20 63 6f 61 6c 65 73 63 65 28 28 73 65  and coalesce((se
37400 6c 65 63 74 20 20 2d 28 73 65 6c 65 63 74 20 28  lect  -(select (
37410 63 61 73 74 28 61 76 67 28 64 29 20 41 53 20 69  cast(avg(d) AS i
37420 6e 74 65 67 65 72 29 29 20 66 72 6f 6d 20 74 31  nteger)) from t1
37430 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
37440 63 61 73 65 20 77 68 65 6e 20 31 37 3c 74 31 2e  case when 17<t1.
37450 61 20 74 68 65 6e 20 74 31 2e 62 20 65 6c 73 65  a then t1.b else
37460 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65 63   coalesce((selec
37470 74 20 6d 61 78 28 66 29 20 66 72 6f 6d 20 74 31  t max(f) from t1
37480 20 77 68 65 72 65 20 74 31 2e 64 2d 2b 63 61 73   where t1.d-+cas
37490 65 20 77 68 65 6e 20 28 64 3c 3d 74 31 2e 66 29  e when (d<=t1.f)
374a0 20 61 6e 64 20 74 31 2e 65 20 6e 6f 74 20 69 6e   and t1.e not in
374b0 20 28 31 37 2c 74 31 2e 64 2c 74 31 2e 61 29 20   (17,t1.d,t1.a) 
374c0 61 6e 64 20 31 31 20 69 6e 20 28 31 33 2c 74 31  and 11 in (13,t1
374d0 2e 65 2c 20 2d 74 31 2e 61 29 20 61 6e 64 20 74  .e, -t1.a) and t
374e0 31 2e 63 3c 31 33 20 74 68 65 6e 20 20 2d 62 20  1.c<13 then  -b 
374f0 65 6c 73 65 20 63 61 73 65 20 77 68 65 6e 20 61  else case when a
37500 3e 31 33 20 74 68 65 6e 20 65 20 77 68 65 6e 20  >13 then e when 
37510 31 39 20 62 65 74 77 65 65 6e 20 74 31 2e 61 20  19 between t1.a 
37520 61 6e 64 20 74 31 2e 62 20 74 68 65 6e 20 62 20  and t1.b then b 
37530 65 6c 73 65 20 62 20 65 6e 64 20 65 6e 64 2a 31  else b end end*1
37540 33 3c 3d 63 29 2c 74 31 2e 63 29 20 65 6e 64 20  3<=c),t1.c) end 
37550 69 6e 20 28 73 65 6c 65 63 74 20 74 31 2e 65 20  in (select t1.e 
37560 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65  from t1 union se
37570 6c 65 63 74 20 64 20 66 72 6f 6d 20 74 31 29 29  lect d from t1))
37580 2c 74 31 2e 62 29 29 7d 0a 7d 20 7b 7d 0a 64 6f  ,t1.b))}.} {}.do
37590 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32  _test randexpr-2
375a0 2e 33 31 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  .312 {.  db eval
375b0 20 7b 53 45 4c 45 43 54 20 28 61 62 73 28 31 33   {SELECT (abs(13
375c0 29 2f 61 62 73 28 28 73 65 6c 65 63 74 20 6d 69  )/abs((select mi
375d0 6e 28 63 61 73 65 20 77 68 65 6e 20 63 61 73 65  n(case when case
375e0 20 77 68 65 6e 20 65 78 69 73 74 73 28 73 65 6c   when exists(sel
375f0 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20 77 68  ect 1 from t1 wh
37600 65 72 65 20 6e 6f 74 20 65 78 69 73 74 73 28 73  ere not exists(s
37610 65 6c 65 63 74 20 31 20 66 72 6f 6d 20 74 31 20  elect 1 from t1 
37620 77 68 65 72 65 20 28 73 65 6c 65 63 74 20 63 6f  where (select co
37630 75 6e 74 28 64 69 73 74 69 6e 63 74 20 28 74 31  unt(distinct (t1
37640 2e 65 29 29 20 66 72 6f 6d 20 74 31 29 2b 74 31  .e)) from t1)+t1
37650 2e 66 3e 74 31 2e 65 29 20 61 6e 64 20 74 31 2e  .f>t1.e) and t1.
37660 61 3e 3d 31 33 20 6f 72 20 66 20 69 6e 20 28 73  a>=13 or f in (s
37670 65 6c 65 63 74 20 74 31 2e 65 20 66 72 6f 6d 20  elect t1.e from 
37680 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
37690 74 31 2e 65 20 66 72 6f 6d 20 74 31 29 29 20 74  t1.e from t1)) t
376a0 68 65 6e 20 62 20 77 68 65 6e 20 66 20 6e 6f 74  hen b when f not
376b0 20 69 6e 20 28 31 33 2c 31 33 2c 31 33 29 20 74   in (13,13,13) t
376c0 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28 73 65  hen coalesce((se
376d0 6c 65 63 74 20 6d 61 78 28 64 2a 66 29 20 66 72  lect max(d*f) fr
376e0 6f 6d 20 74 31 20 77 68 65 72 65 20 74 31 2e 65  om t1 where t1.e
376f0 20 69 6e 20 28 74 31 2e 64 2c 74 31 2e 65 2c 28   in (t1.d,t1.e,(
37700 65 29 29 29 2c 74 31 2e 65 29 20 65 6c 73 65 20  e))),t1.e) else 
37710 61 20 65 6e 64 3e 3d 74 31 2e 66 20 74 68 65 6e  a end>=t1.f then
37720 20 62 20 77 68 65 6e 20 74 31 2e 63 20 69 6e 20   b when t1.c in 
37730 28 65 2c 66 2c 74 31 2e 65 29 20 74 68 65 6e 20  (e,f,t1.e) then 
37740 62 20 65 6c 73 65 20 74 31 2e 63 20 65 6e 64 29  b else t1.c end)
37750 2a 61 62 73 28 63 6f 75 6e 74 28 2a 29 29 2d 61  *abs(count(*))-a
37760 62 73 28 7e 63 6f 75 6e 74 28 2a 29 2d 6d 69 6e  bs(~count(*)-min
37770 28 65 29 29 2d 63 61 73 74 28 61 76 67 28 31 37  (e))-cast(avg(17
37780 29 20 41 53 20 69 6e 74 65 67 65 72 29 20 66 72  ) AS integer) fr
37790 6f 6d 20 74 31 29 29 29 20 46 52 4f 4d 20 74 31  om t1))) FROM t1
377a0 20 57 48 45 52 45 20 74 31 2e 62 20 6e 6f 74 20   WHERE t1.b not 
377b0 69 6e 20 28 61 2a 31 37 2d 31 37 2d 63 61 73 65  in (a*17-17-case
377c0 20 77 68 65 6e 20 20 2d 31 37 2d 74 31 2e 66 20   when  -17-t1.f 
377d0 69 6e 20 28 73 65 6c 65 63 74 20 63 6f 61 6c 65  in (select coale
377e0 73 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 61  sce((select t1.a
377f0 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
37800 64 29 3d 74 31 2e 61 29 2c 64 29 20 66 72 6f 6d  d)=t1.a),d) from
37810 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
37820 20 31 39 20 66 72 6f 6d 20 74 31 29 20 6f 72 20   19 from t1) or 
37830 31 33 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31  13 not between 1
37840 37 20 61 6e 64 20 31 33 20 61 6e 64 20 28 31 39  7 and 13 and (19
37850 20 62 65 74 77 65 65 6e 20 28 74 31 2e 65 29 20   between (t1.e) 
37860 61 6e 64 20 74 31 2e 66 29 20 6f 72 20 28 20 2d  and t1.f) or ( -
37870 74 31 2e 65 29 3e 3d 31 37 20 74 68 65 6e 20 62  t1.e)>=17 then b
37880 20 77 68 65 6e 20 74 31 2e 64 20 6e 6f 74 20 69   when t1.d not i
37890 6e 20 28 31 39 2c 66 2c 74 31 2e 66 29 20 74 68  n (19,f,t1.f) th
378a0 65 6e 20 61 20 65 6c 73 65 20 63 61 73 65 20 77  en a else case w
378b0 68 65 6e 20 74 31 2e 61 3d 74 31 2e 64 20 74 68  hen t1.a=t1.d th
378c0 65 6e 20 65 20 77 68 65 6e 20 31 37 20 69 6e 20  en e when 17 in 
378d0 28 74 31 2e 65 2c 74 31 2e 62 2c 74 31 2e 64 29  (t1.e,t1.b,t1.d)
378e0 20 74 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20   then t1.a else 
378f0 61 20 65 6e 64 20 65 6e 64 2c 65 2c 31 31 29 7d  a end end,e,11)}
37900 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 72  .} {0}.do_test r
37910 61 6e 64 65 78 70 72 2d 32 2e 33 31 33 20 7b 0a  andexpr-2.313 {.
37920 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
37930 54 20 28 61 62 73 28 31 33 29 2f 61 62 73 28 28  T (abs(13)/abs((
37940 73 65 6c 65 63 74 20 6d 69 6e 28 63 61 73 65 20  select min(case 
37950 77 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 65  when case when e
37960 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
37970 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
37980 20 65 78 69 73 74 73 28 73 65 6c 65 63 74 20 31   exists(select 1
37990 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28   from t1 where (
379a0 73 65 6c 65 63 74 20 63 6f 75 6e 74 28 64 69 73  select count(dis
379b0 74 69 6e 63 74 20 28 74 31 2e 65 29 29 20 66 72  tinct (t1.e)) fr
379c0 6f 6d 20 74 31 29 2b 74 31 2e 66 3e 74 31 2e 65  om t1)+t1.f>t1.e
379d0 29 20 61 6e 64 20 74 31 2e 61 3e 3d 31 33 20 6f  ) and t1.a>=13 o
379e0 72 20 66 20 69 6e 20 28 73 65 6c 65 63 74 20 74  r f in (select t
379f0 31 2e 65 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f  1.e from t1 unio
37a00 6e 20 73 65 6c 65 63 74 20 74 31 2e 65 20 66 72  n select t1.e fr
37a10 6f 6d 20 74 31 29 29 20 74 68 65 6e 20 62 20 77  om t1)) then b w
37a20 68 65 6e 20 66 20 6e 6f 74 20 69 6e 20 28 31 33  hen f not in (13
37a30 2c 31 33 2c 31 33 29 20 74 68 65 6e 20 63 6f 61  ,13,13) then coa
37a40 6c 65 73 63 65 28 28 73 65 6c 65 63 74 20 6d 61  lesce((select ma
37a50 78 28 64 2a 66 29 20 66 72 6f 6d 20 74 31 20 77  x(d*f) from t1 w
37a60 68 65 72 65 20 74 31 2e 65 20 69 6e 20 28 74 31  here t1.e in (t1
37a70 2e 64 2c 74 31 2e 65 2c 28 65 29 29 29 2c 74 31  .d,t1.e,(e))),t1
37a80 2e 65 29 20 65 6c 73 65 20 61 20 65 6e 64 3e 3d  .e) else a end>=
37a90 74 31 2e 66 20 74 68 65 6e 20 62 20 77 68 65 6e  t1.f then b when
37aa0 20 74 31 2e 63 20 69 6e 20 28 65 2c 66 2c 74 31   t1.c in (e,f,t1
37ab0 2e 65 29 20 74 68 65 6e 20 62 20 65 6c 73 65 20  .e) then b else 
37ac0 74 31 2e 63 20 65 6e 64 29 2a 61 62 73 28 63 6f  t1.c end)*abs(co
37ad0 75 6e 74 28 2a 29 29 2d 61 62 73 28 7e 63 6f 75  unt(*))-abs(~cou
37ae0 6e 74 28 2a 29 2d 6d 69 6e 28 65 29 29 2d 63 61  nt(*)-min(e))-ca
37af0 73 74 28 61 76 67 28 31 37 29 20 41 53 20 69 6e  st(avg(17) AS in
37b00 74 65 67 65 72 29 20 66 72 6f 6d 20 74 31 29 29  teger) from t1))
37b10 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
37b20 4e 4f 54 20 28 74 31 2e 62 20 6e 6f 74 20 69 6e  NOT (t1.b not in
37b30 20 28 61 2a 31 37 2d 31 37 2d 63 61 73 65 20 77   (a*17-17-case w
37b40 68 65 6e 20 20 2d 31 37 2d 74 31 2e 66 20 69 6e  hen  -17-t1.f in
37b50 20 28 73 65 6c 65 63 74 20 63 6f 61 6c 65 73 63   (select coalesc
37b60 65 28 28 73 65 6c 65 63 74 20 74 31 2e 61 20 66  e((select t1.a f
37b70 72 6f 6d 20 74 31 20 77 68 65 72 65 20 28 64 29  rom t1 where (d)
37b80 3d 74 31 2e 61 29 2c 64 29 20 66 72 6f 6d 20 74  =t1.a),d) from t
37b90 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 31  1 union select 1
37ba0 39 20 66 72 6f 6d 20 74 31 29 20 6f 72 20 31 33  9 from t1) or 13
37bb0 20 6e 6f 74 20 62 65 74 77 65 65 6e 20 31 37 20   not between 17 
37bc0 61 6e 64 20 31 33 20 61 6e 64 20 28 31 39 20 62  and 13 and (19 b
37bd0 65 74 77 65 65 6e 20 28 74 31 2e 65 29 20 61 6e  etween (t1.e) an
37be0 64 20 74 31 2e 66 29 20 6f 72 20 28 20 2d 74 31  d t1.f) or ( -t1
37bf0 2e 65 29 3e 3d 31 37 20 74 68 65 6e 20 62 20 77  .e)>=17 then b w
37c00 68 65 6e 20 74 31 2e 64 20 6e 6f 74 20 69 6e 20  hen t1.d not in 
37c10 28 31 39 2c 66 2c 74 31 2e 66 29 20 74 68 65 6e  (19,f,t1.f) then
37c20 20 61 20 65 6c 73 65 20 63 61 73 65 20 77 68 65   a else case whe
37c30 6e 20 74 31 2e 61 3d 74 31 2e 64 20 74 68 65 6e  n t1.a=t1.d then
37c40 20 65 20 77 68 65 6e 20 31 37 20 69 6e 20 28 74   e when 17 in (t
37c50 31 2e 65 2c 74 31 2e 62 2c 74 31 2e 64 29 20 74  1.e,t1.b,t1.d) t
37c60 68 65 6e 20 74 31 2e 61 20 65 6c 73 65 20 61 20  hen t1.a else a 
37c70 65 6e 64 20 65 6e 64 2c 65 2c 31 31 29 29 7d 0a  end end,e,11))}.
37c80 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 61 6e  } {}.do_test ran
37c90 64 65 78 70 72 2d 32 2e 33 31 34 20 7b 0a 20 20  dexpr-2.314 {.  
37ca0 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
37cb0 28 61 62 73 28 63 61 73 65 20 63 6f 61 6c 65 73  (abs(case coales
37cc0 63 65 28 28 73 65 6c 65 63 74 20 74 31 2e 64 2a  ce((select t1.d*
37cd0 20 2d 63 61 73 65 20 77 68 65 6e 20 64 20 69 6e   -case when d in
37ce0 20 28 73 65 6c 65 63 74 20 63 61 73 74 28 61 76   (select cast(av
37cf0 67 28 31 33 29 20 41 53 20 69 6e 74 65 67 65 72  g(13) AS integer
37d00 29 2a 61 62 73 28 28 28 63 61 73 74 28 61 76 67  )*abs(((cast(avg
37d10 28 64 29 20 41 53 20 69 6e 74 65 67 65 72 29 29  (d) AS integer))
37d20 29 2b 20 2d 63 6f 75 6e 74 28 64 69 73 74 69 6e  )+ -count(distin
37d30 63 74 20 63 29 29 2d 6d 61 78 28 74 31 2e 63 29  ct c))-max(t1.c)
37d40 20 66 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73   from t1 union s
37d50 65 6c 65 63 74 20 6d 69 6e 28 65 29 20 66 72 6f  elect min(e) fro
37d60 6d 20 74 31 29 20 74 68 65 6e 20 28 61 62 73 28  m t1) then (abs(
37d70 31 39 29 2f 61 62 73 28 63 61 73 65 20 77 68 65  19)/abs(case whe
37d80 6e 20 62 20 6e 6f 74 20 69 6e 20 28 31 39 2c 64  n b not in (19,d
37d90 2c 31 33 29 20 6f 72 20 74 31 2e 62 20 6e 6f 74  ,13) or t1.b not
37da0 20 69 6e 20 28 62 2c 31 37 2c 31 37 29 20 74 68   in (b,17,17) th
37db0 65 6e 20 65 20 65 6c 73 65 20 62 20 65 6e 64 29  en e else b end)
37dc0 29 20 65 6c 73 65 20 31 39 20 65 6e 64 20 66 72  ) else 19 end fr
37dd0 6f 6d 20 74 31 20 77 68 65 72 65 20 61 3e 3d 74  om t1 where a>=t
37de0 31 2e 63 20 61 6e 64 20 31 37 20 6e 6f 74 20 69  1.c and 17 not i
37df0 6e 20 28 74 31 2e 63 2c 31 37 2c 74 31 2e 66 29  n (t1.c,17,t1.f)
37e00 29 2c 31 33 29 2a 74 31 2e 66 20 77 68 65 6e 20  ),13)*t1.f when 
37e10 65 20 74 68 65 6e 20 28 31 31 29 20 65 6c 73 65  e then (11) else
37e20 20 31 37 20 65 6e 64 2b 31 39 20 7c 20 62 29 2f   17 end+19 | b)/
37e30 61 62 73 28 66 29 29 2d 74 31 2e 65 20 46 52 4f  abs(f))-t1.e FRO
37e40 4d 20 74 31 20 57 48 45 52 45 20 6e 6f 74 20 65  M t1 WHERE not e
37e50 78 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66  xists(select 1 f
37e60 72 6f 6d 20 74 31 20 77 68 65 72 65 20 63 61 73  rom t1 where cas
37e70 65 20 61 20 77 68 65 6e 20 63 6f 61 6c 65 73 63  e a when coalesc
37e80 65 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61  e((select max(ca
37e90 73 65 20 31 39 20 77 68 65 6e 20 31 37 20 74 68  se 19 when 17 th
37ea0 65 6e 20 62 2d 64 20 65 6c 73 65 20 74 31 2e 65  en b-d else t1.e
37eb0 20 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68   end) from t1 wh
37ec0 65 72 65 20 28 20 2d 63 6f 61 6c 65 73 63 65 28  ere ( -coalesce(
37ed0 28 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61  (select max(t1.a
37ee0 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  ) from t1 where 
37ef0 65 20 62 65 74 77 65 65 6e 20 74 31 2e 62 20 61  e between t1.b a
37f00 6e 64 20 28 61 62 73 28 65 29 2f 61 62 73 28 31  nd (abs(e)/abs(1
37f10 37 29 29 29 2c 28 61 62 73 28 63 61 73 65 20 77  7))),(abs(case w
37f20 68 65 6e 20 63 61 73 65 20 77 68 65 6e 20 31 33  hen case when 13
37f30 20 62 65 74 77 65 65 6e 20 65 20 61 6e 64 20 28   between e and (
37f40 74 31 2e 62 29 20 61 6e 64 20 31 31 20 6e 6f 74  t1.b) and 11 not
37f50 20 69 6e 20 28 74 31 2e 66 2c 74 31 2e 65 2c 63   in (t1.f,t1.e,c
37f60 29 20 74 68 65 6e 20 28 74 31 2e 64 29 20 65 6c  ) then (t1.d) el
37f70 73 65 20 20 2d 63 20 65 6e 64 3c 20 2d 65 20 74  se  -c end< -e t
37f80 68 65 6e 20 31 31 20 77 68 65 6e 20 31 33 3e 74  hen 11 when 13>t
37f90 31 2e 62 20 74 68 65 6e 20 31 31 20 65 6c 73 65  1.b then 11 else
37fa0 20 74 31 2e 61 20 65 6e 64 2a 31 33 29 2f 61 62   t1.a end*13)/ab
37fb0 73 28 28 66 29 29 29 2d 74 31 2e 61 29 20 6e 6f  s((f)))-t1.a) no
37fc0 74 20 69 6e 20 28 65 2c 28 62 29 2c 74 31 2e 63  t in (e,(b),t1.c
37fd0 29 29 29 2c 31 39 29 20 74 68 65 6e 20 74 31 2e  ))),19) then t1.
37fe0 62 20 65 6c 73 65 20 31 33 20 65 6e 64 20 6e 6f  b else 13 end no
37ff0 74 20 62 65 74 77 65 65 6e 20 74 31 2e 62 20 61  t between t1.b a
38000 6e 64 20 31 31 29 7d 0a 7d 20 7b 7d 0a 64 6f 5f  nd 11)}.} {}.do_
38010 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d 32 2e  test randexpr-2.
38020 33 31 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  315 {.  db eval 
38030 7b 53 45 4c 45 43 54 20 28 61 62 73 28 63 61 73  {SELECT (abs(cas
38040 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65 6c 65  e coalesce((sele
38050 63 74 20 74 31 2e 64 2a 20 2d 63 61 73 65 20 77  ct t1.d* -case w
38060 68 65 6e 20 64 20 69 6e 20 28 73 65 6c 65 63 74  hen d in (select
38070 20 63 61 73 74 28 61 76 67 28 31 33 29 20 41 53   cast(avg(13) AS
38080 20 69 6e 74 65 67 65 72 29 2a 61 62 73 28 28 28   integer)*abs(((
38090 63 61 73 74 28 61 76 67 28 64 29 20 41 53 20 69  cast(avg(d) AS i
380a0 6e 74 65 67 65 72 29 29 29 2b 20 2d 63 6f 75 6e  nteger)))+ -coun
380b0 74 28 64 69 73 74 69 6e 63 74 20 63 29 29 2d 6d  t(distinct c))-m
380c0 61 78 28 74 31 2e 63 29 20 66 72 6f 6d 20 74 31  ax(t1.c) from t1
380d0 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 6d 69   union select mi
380e0 6e 28 65 29 20 66 72 6f 6d 20 74 31 29 20 74 68  n(e) from t1) th
380f0 65 6e 20 28 61 62 73 28 31 39 29 2f 61 62 73 28  en (abs(19)/abs(
38100 63 61 73 65 20 77 68 65 6e 20 62 20 6e 6f 74 20  case when b not 
38110 69 6e 20 28 31 39 2c 64 2c 31 33 29 20 6f 72 20  in (19,d,13) or 
38120 74 31 2e 62 20 6e 6f 74 20 69 6e 20 28 62 2c 31  t1.b not in (b,1
38130 37 2c 31 37 29 20 74 68 65 6e 20 65 20 65 6c 73  7,17) then e els
38140 65 20 62 20 65 6e 64 29 29 20 65 6c 73 65 20 31  e b end)) else 1
38150 39 20 65 6e 64 20 66 72 6f 6d 20 74 31 20 77 68  9 end from t1 wh
38160 65 72 65 20 61 3e 3d 74 31 2e 63 20 61 6e 64 20  ere a>=t1.c and 
38170 31 37 20 6e 6f 74 20 69 6e 20 28 74 31 2e 63 2c  17 not in (t1.c,
38180 31 37 2c 74 31 2e 66 29 29 2c 31 33 29 2a 74 31  17,t1.f)),13)*t1
38190 2e 66 20 77 68 65 6e 20 65 20 74 68 65 6e 20 28  .f when e then (
381a0 31 31 29 20 65 6c 73 65 20 31 37 20 65 6e 64 2b  11) else 17 end+
381b0 31 39 20 7c 20 62 29 2f 61 62 73 28 66 29 29 2d  19 | b)/abs(f))-
381c0 74 31 2e 65 20 46 52 4f 4d 20 74 31 20 57 48 45  t1.e FROM t1 WHE
381d0 52 45 20 4e 4f 54 20 28 6e 6f 74 20 65 78 69 73  RE NOT (not exis
381e0 74 73 28 73 65 6c 65 63 74 20 31 20 66 72 6f 6d  ts(select 1 from
381f0 20 74 31 20 77 68 65 72 65 20 63 61 73 65 20 61   t1 where case a
38200 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65 28 28   when coalesce((
38210 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73 65 20  select max(case 
38220 31 39 20 77 68 65 6e 20 31 37 20 74 68 65 6e 20  19 when 17 then 
38230 62 2d 64 20 65 6c 73 65 20 74 31 2e 65 20 65 6e  b-d else t1.e en
38240 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  d) from t1 where
38250 20 28 20 2d 63 6f 61 6c 65 73 63 65 28 28 73 65   ( -coalesce((se
38260 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29 20 66  lect max(t1.a) f
38270 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65 20 62  rom t1 where e b
38280 65 74 77 65 65 6e 20 74 31 2e 62 20 61 6e 64 20  etween t1.b and 
38290 28 61 62 73 28 65 29 2f 61 62 73 28 31 37 29 29  (abs(e)/abs(17))
382a0 29 2c 28 61 62 73 28 63 61 73 65 20 77 68 65 6e  ),(abs(case when
382b0 20 63 61 73 65 20 77 68 65 6e 20 31 33 20 62 65   case when 13 be
382c0 74 77 65 65 6e 20 65 20 61 6e 64 20 28 74 31 2e  tween e and (t1.
382d0 62 29 20 61 6e 64 20 31 31 20 6e 6f 74 20 69 6e  b) and 11 not in
382e0 20 28 74 31 2e 66 2c 74 31 2e 65 2c 63 29 20 74   (t1.f,t1.e,c) t
382f0 68 65 6e 20 28 74 31 2e 64 29 20 65 6c 73 65 20  hen (t1.d) else 
38300 20 2d 63 20 65 6e 64 3c 20 2d 65 20 74 68 65 6e   -c end< -e then
38310 20 31 31 20 77 68 65 6e 20 31 33 3e 74 31 2e 62   11 when 13>t1.b
38320 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20 74 31   then 11 else t1
38330 2e 61 20 65 6e 64 2a 31 33 29 2f 61 62 73 28 28  .a end*13)/abs((
38340 66 29 29 29 2d 74 31 2e 61 29 20 6e 6f 74 20 69  f)))-t1.a) not i
38350 6e 20 28 65 2c 28 62 29 2c 74 31 2e 63 29 29 29  n (e,(b),t1.c)))
38360 2c 31 39 29 20 74 68 65 6e 20 74 31 2e 62 20 65  ,19) then t1.b e
38370 6c 73 65 20 31 33 20 65 6e 64 20 6e 6f 74 20 62  lse 13 end not b
38380 65 74 77 65 65 6e 20 74 31 2e 62 20 61 6e 64 20  etween t1.b and 
38390 31 31 29 29 7d 0a 7d 20 7b 2d 35 30 30 7d 0a 64  11))}.} {-500}.d
383a0 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70 72 2d  o_test randexpr-
383b0 32 2e 33 31 36 20 7b 0a 20 20 64 62 20 65 76 61  2.316 {.  db eva
383c0 6c 20 7b 53 45 4c 45 43 54 20 28 61 62 73 28 63  l {SELECT (abs(c
383d0 61 73 65 20 63 6f 61 6c 65 73 63 65 28 28 73 65  ase coalesce((se
383e0 6c 65 63 74 20 74 31 2e 64 2a 20 2d 63 61 73 65  lect t1.d* -case
383f0 20 77 68 65 6e 20 64 20 69 6e 20 28 73 65 6c 65   when d in (sele
38400 63 74 20 63 61 73 74 28 61 76 67 28 31 33 29 20  ct cast(avg(13) 
38410 41 53 20 69 6e 74 65 67 65 72 29 2a 61 62 73 28  AS integer)*abs(
38420 28 28 63 61 73 74 28 61 76 67 28 64 29 20 41 53  ((cast(avg(d) AS
38430 20 69 6e 74 65 67 65 72 29 29 29 2b 20 2d 63 6f   integer)))+ -co
38440 75 6e 74 28 64 69 73 74 69 6e 63 74 20 63 29 29  unt(distinct c))
38450 2d 6d 61 78 28 74 31 2e 63 29 20 66 72 6f 6d 20  -max(t1.c) from 
38460 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20  t1 union select 
38470 6d 69 6e 28 65 29 20 66 72 6f 6d 20 74 31 29 20  min(e) from t1) 
38480 74 68 65 6e 20 28 61 62 73 28 31 39 29 2f 61 62  then (abs(19)/ab
38490 73 28 63 61 73 65 20 77 68 65 6e 20 62 20 6e 6f  s(case when b no
384a0 74 20 69 6e 20 28 31 39 2c 64 2c 31 33 29 20 6f  t in (19,d,13) o
384b0 72 20 74 31 2e 62 20 6e 6f 74 20 69 6e 20 28 62  r t1.b not in (b
384c0 2c 31 37 2c 31 37 29 20 74 68 65 6e 20 65 20 65  ,17,17) then e e
384d0 6c 73 65 20 62 20 65 6e 64 29 29 20 65 6c 73 65  lse b end)) else
384e0 20 31 39 20 65 6e 64 20 66 72 6f 6d 20 74 31 20   19 end from t1 
384f0 77 68 65 72 65 20 61 3e 3d 74 31 2e 63 20 61 6e  where a>=t1.c an
38500 64 20 31 37 20 6e 6f 74 20 69 6e 20 28 74 31 2e  d 17 not in (t1.
38510 63 2c 31 37 2c 74 31 2e 66 29 29 2c 31 33 29 2a  c,17,t1.f)),13)*
38520 74 31 2e 66 20 77 68 65 6e 20 65 20 74 68 65 6e  t1.f when e then
38530 20 28 31 31 29 20 65 6c 73 65 20 31 37 20 65 6e   (11) else 17 en
38540 64 2b 31 39 20 26 20 62 29 2f 61 62 73 28 66 29  d+19 & b)/abs(f)
38550 29 2d 74 31 2e 65 20 46 52 4f 4d 20 74 31 20 57  )-t1.e FROM t1 W
38560 48 45 52 45 20 4e 4f 54 20 28 6e 6f 74 20 65 78  HERE NOT (not ex
38570 69 73 74 73 28 73 65 6c 65 63 74 20 31 20 66 72  ists(select 1 fr
38580 6f 6d 20 74 31 20 77 68 65 72 65 20 63 61 73 65  om t1 where case
38590 20 61 20 77 68 65 6e 20 63 6f 61 6c 65 73 63 65   a when coalesce
385a0 28 28 73 65 6c 65 63 74 20 6d 61 78 28 63 61 73  ((select max(cas
385b0 65 20 31 39 20 77 68 65 6e 20 31 37 20 74 68 65  e 19 when 17 the
385c0 6e 20 62 2d 64 20 65 6c 73 65 20 74 31 2e 65 20  n b-d else t1.e 
385d0 65 6e 64 29 20 66 72 6f 6d 20 74 31 20 77 68 65  end) from t1 whe
385e0 72 65 20 28 20 2d 63 6f 61 6c 65 73 63 65 28 28  re ( -coalesce((
385f0 73 65 6c 65 63 74 20 6d 61 78 28 74 31 2e 61 29  select max(t1.a)
38600 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 65   from t1 where e
38610 20 62 65 74 77 65 65 6e 20 74 31 2e 62 20 61 6e   between t1.b an
38620 64 20 28 61 62 73 28 65 29 2f 61 62 73 28 31 37  d (abs(e)/abs(17
38630 29 29 29 2c 28 61 62 73 28 63 61 73 65 20 77 68  ))),(abs(case wh
38640 65 6e 20 63 61 73 65 20 77 68 65 6e 20 31 33 20  en case when 13 
38650 62 65 74 77 65 65 6e 20 65 20 61 6e 64 20 28 74  between e and (t
38660 31 2e 62 29 20 61 6e 64 20 31 31 20 6e 6f 74 20  1.b) and 11 not 
38670 69 6e 20 28 74 31 2e 66 2c 74 31 2e 65 2c 63 29  in (t1.f,t1.e,c)
38680 20 74 68 65 6e 20 28 74 31 2e 64 29 20 65 6c 73   then (t1.d) els
38690 65 20 20 2d 63 20 65 6e 64 3c 20 2d 65 20 74 68  e  -c end< -e th
386a0 65 6e 20 31 31 20 77 68 65 6e 20 31 33 3e 74 31  en 11 when 13>t1
386b0 2e 62 20 74 68 65 6e 20 31 31 20 65 6c 73 65 20  .b then 11 else 
386c0 74 31 2e 61 20 65 6e 64 2a 31 33 29 2f 61 62 73  t1.a end*13)/abs
386d0 28 28 66 29 29 29 2d 74 31 2e 61 29 20 6e 6f 74  ((f)))-t1.a) not
386e0 20 69 6e 20 28 65 2c 28 62 29 2c 74 31 2e 63 29   in (e,(b),t1.c)
386f0 29 29 2c 31 39 29 20 74 68 65 6e 20 74 31 2e 62  )),19) then t1.b
38700 20 65 6c 73 65 20 31 33 20 65 6e 64 20 6e 6f 74   else 13 end not
38710 20 62 65 74 77 65 65 6e 20 74 31 2e 62 20 61 6e   between t1.b an
38720 64 20 31 31 29 29 7d 0a 7d 20 7b 2d 35 30 30 7d  d 11))}.} {-500}
38730 0a 64 6f 5f 74 65 73 74 20 72 61 6e 64 65 78 70  .do_test randexp
38740 72 2d 32 2e 33 31 37 20 7b 0a 20 20 64 62 20 65  r-2.317 {.  db e
38750 76 61 6c 20 7b 53 45 4c 45 43 54 20 20 2d 28 2b  val {SELECT  -(+
38760 63 61 73 65 20 77 68 65 6e 20 7e 74 31 2e 64 2d  case when ~t1.d-
38770 66 2d 63 61 73 65 20 63 6f 61 6c 65 73 63 65 28  f-case coalesce(
38780 28 73 65 6c 65 63 74 20 6d 61 78 28 28 73 65 6c  (select max((sel
38790 65 63 74 20 28 6d 69 6e 28 28 61 62 73 28 74 31  ect (min((abs(t1
387a0 2e 66 29 2f 61 62 73 28 74 31 2e 62 29 29 2d 31  .f)/abs(t1.b))-1
387b0 37 29 29 20 66 72 6f 6d 20 74 31 29 29 20 66 72  7)) from t1)) fr
387c0 6f 6d 20 74 31 20 77 68 65 72 65 20 65 3c 3d 31  om t1 where e<=1
387d0 37 29 2c 66 29 20 77 68 65 6e 20 74 31 2e 66 20  7),f) when t1.f 
387e0 74 68 65 6e 20 28 73 65 6c 65 63