Example #1
0
 protected function __construct($options = array(), $type = null)
 {
     static::$_handlers = array(static::RAW => function ($options) {
         return $options[0];
     }, static::PARAMS => function ($options) {
         if (!empty($options[1]) && !is_array($options[1])) {
             $options[1] = array($options[1]);
         }
         return Query::insertParams($options[0], $options[1], isset($options[2]) ? $options[2] : true);
     }, static::SPRINTF => function ($options) {
         return call_user_func_array('sprintf', $options);
     }, static::GRAVES => function ($options) {
         return Query::graves($options[0]);
     }, static::VALUES => function ($options) {
         return 'VALUES(' . Query::graves($options[0]) . ')';
     }, static::LIKE => function ($options) {
         if (count($options) >= 2) {
             return Query::graves($options[0]) . " LIKE '%" . Query::like($options[1]) . "%'";
         }
         return "'%" . Query::like($options[0]) . "%'";
     }, static::ENDS_LIKE => function ($options) {
         if (count($options) >= 2) {
             return Query::graves($options[0]) . " LIKE '%" . Query::like($options[1]) . "'";
         }
         return "'%" . Query::like($options[0]) . "'";
     }, static::STARTS_LIKE => function ($options) {
         if (count($options) >= 2) {
             return Query::graves($options[0]) . " LIKE '" . Query::like($options[1]) . "%'";
         }
         return "'" . Query::like($options[0]) . "%'";
     }, static::CALLBACK => function ($options, $query) {
         if (!$query || empty($options[0]) || !is_callable($options[0])) {
             return '';
         }
         return call_user_func($options[0], $query);
     });
     $type = $type ?: static::RAW;
     if (!isset(static::$_handlers[$type])) {
         throw new \Exception('Unknown expression type `$type`');
     }
     $this->_type = $type;
     $this->_options = $options;
 }