text: drop table if exists test54378;
  create table test54378 (part_date Date, pk_date Date, date Date) Engine=MergeTree(part_date, pk_date, 8192);
  insert into test54378 values ('2018-04-19', '2018-04-19', '2018-04-19');
  
  select 111 from test54378 where part_date = '2018-04-19';
  select 112 from test54378 where part_date in ('2018-04-19');
  select 113 from test54378 where pk_date in ('2018-04-19');
  select 114 from test54378 where date in ('2018-04-19');
  SELECT '-';
  select 121 from test54378 where part_date = toDate('2018-04-19');
  select 122 from test54378 where part_date in (toDate('2018-04-19'));
  select 123 from test54378 where pk_date in (toDate('2018-04-19'));
  select 124 from test54378 where date in (toDate('2018-04-19'));
  SELECT '-';
  select 131 from test54378 where part_date = (SELECT toDate('2018-04-19'));
  select 132 from test54378 where part_date in (SELECT toDate('2018-04-19'));
  select 133 from test54378 where pk_date in (SELECT toDate('2018-04-19'));
  select 134 from test54378 where date in (SELECT toDate('2018-04-19'));
  
  SELECT '---';
  
  select 211 from test54378 prewhere part_date = '2018-04-19';
  select 212 from test54378 prewhere part_date in ('2018-04-19');
  select 213 from test54378 prewhere pk_date in ('2018-04-19');
  select 214 from test54378 prewhere date in ('2018-04-19');
  SELECT '-';
  select 221 from test54378 prewhere part_date = toDate('2018-04-19');
  select 222 from test54378 prewhere part_date in (toDate('2018-04-19'));
  select 223 from test54378 prewhere pk_date in (toDate('2018-04-19'));
  select 224 from test54378 prewhere date in (toDate('2018-04-19'));
  SELECT '-';
  select 231 from test54378 prewhere part_date = (SELECT toDate('2018-04-19'));
  select 232 from test54378 prewhere part_date in (SELECT toDate('2018-04-19'));
  select 233 from test54378 prewhere pk_date in (SELECT toDate('2018-04-19'));
  select 234 from test54378 prewhere date in (SELECT toDate('2018-04-19'));
  
  SELECT '---';
  
  SET optimize_move_to_prewhere = 0;
  
  select 311 from test54378 where part_date = '2018-04-19';
  select 312 from test54378 where part_date in ('2018-04-19');
  select 313 from test54378 where pk_date in ('2018-04-19');
  select 314 from test54378 where date in ('2018-04-19');
  SELECT '-';
  select 321 from test54378 where part_date = toDate('2018-04-19');
  select 322 from test54378 where part_date in (toDate('2018-04-19'));
  select 323 from test54378 where pk_date in (toDate('2018-04-19'));
  select 324 from test54378 where date in (toDate('2018-04-19'));
  SELECT '-';
  select 331 from test54378 where part_date = (SELECT toDate('2018-04-19'));
  select 332 from test54378 where part_date in (SELECT toDate('2018-04-19'));
  select 333 from test54378 where pk_date in (SELECT toDate('2018-04-19'));
  select 334 from test54378 where date in (SELECT toDate('2018-04-19'));
  
  SELECT '---';
  
  SET optimize_move_to_prewhere = 1;
  
  select 411 from test54378 where part_date = '2018-04-19';
  select 412 from test54378 where part_date in ('2018-04-19');
  select 413 from test54378 where pk_date in ('2018-04-19');
  select 414 from test54378 where date in ('2018-04-19');
  SELECT '-';
  select 421 from test54378 where part_date = toDate('2018-04-19');
  select 422 from test54378 where part_date in (toDate('2018-04-19'));
  select 423 from test54378 where pk_date in (toDate('2018-04-19'));
  select 424 from test54378 where date in (toDate('2018-04-19'));
  SELECT '-';
  select 431 from test54378 where part_date = (SELECT toDate('2018-04-19'));
  select 432 from test54378 where part_date in (SELECT toDate('2018-04-19'));
  select 433 from test54378 where pk_date in (SELECT toDate('2018-04-19'));
  select 434 from test54378 where date in (SELECT toDate('2018-04-19'));
  
  drop table test54378;
  