protected function setup_where_clause()
 {
     /** @var wpdb $wpdb */
     global $wpdb;
     $clauses = array();
     $values = array_map('intval', $this->currentValue);
     $values = implode(',', $values);
     $eod_cutoff = tribe_get_option('multiDayCutoff', '00:00');
     if ($eod_cutoff != '00:00') {
         $eod_time_difference = Tribe__Date_Utils::time_between('1/1/2014 00:00:00', "1/1/2014 {$eod_cutoff}:00");
         $start_date = "DATE_SUB({$wpdb->postmeta}.meta_value, INTERVAL {$eod_time_difference} SECOND)";
         $end_date = "DATE_SUB(tribe_event_end_date.meta_value, INTERVAL {$eod_time_difference} SECOND)";
     } else {
         $start_date = "{$wpdb->postmeta}.meta_value";
         $end_date = 'tribe_event_end_date.meta_value';
     }
     $clauses[] = "(DAYOFWEEK({$start_date}) IN ({$values}))";
     // is it on at least 7 days (first day is 0)
     $clauses[] = "(DATEDIFF({$end_date}, {$start_date}) >=6)";
     // determine if the start of the nearest matching day is between the start and end dates
     $distance_to_day = array();
     foreach ($this->currentValue as $day_of_week_index) {
         $day_of_week_index = (int) $day_of_week_index;
         $distance_to_day[] = "MOD( 7 + {$day_of_week_index} - DAYOFWEEK({$start_date}), 7 )";
     }
     if (count($distance_to_day) > 1) {
         $distance_to_next_matching_day = 'LEAST(' . implode(',', $distance_to_day) . ')';
     } else {
         $distance_to_next_matching_day = reset($distance_to_day);
     }
     $clauses[] = "(DATE(DATE_ADD({$start_date}, INTERVAL {$distance_to_next_matching_day} DAY)) < {$end_date})";
     $this->whereClause = ' AND (' . implode(' OR ', $clauses) . ')';
 }