protected function __sql_conditions()
 {
     $first = true;
     foreach ($this->conditions as $kv) {
         if ($first) {
             $this->sql .= " WHERE ";
         } else {
             $this->sql .= " AND ";
         }
         if ($kv["type"] == self::CONDITION_MATCH_AGAINST) {
             $this->__sql_field_match_against($kv);
         } else {
             $this->sql .= "`" . $kv["field"] . "`";
             if ($kv["inner_statement"]) {
                 $this->sql .= " IN ";
             } else {
                 if ($kv["type"] == self::CONDITION_CONTAINS || $kv["type"] == self::CONDITION_BEGIN_WITH || $kv["type"] == self::CONDITION_END_WITH) {
                     if ($kv["not"]) {
                         $this->sql .= " NOT";
                     }
                     $this->sql .= " LIKE ";
                 }
                 if ($kv["type"] == self::CONDITION_REGEXP) {
                     if ($kv["not"]) {
                         $this->sql .= " NOT";
                     }
                     $this->sql .= " REGEXP ";
                     if ($kv["binary"]) {
                         $this->sql .= "BINARY ";
                     }
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_EQUALS) {
                     $this->sql .= " = ";
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_NOT_EQUALS) {
                     $this->sql .= " != ";
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_GREATER_THAN) {
                     $this->sql .= " > ";
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_GREATER_THAN_OR_EQUAL) {
                     $this->sql .= " >= ";
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_LESS_THAN) {
                     $this->sql .= " < ";
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_LESS_THAN_OR_EQUAL) {
                     $this->sql .= " <= ";
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_IN) {
                     $this->sql .= " IN ";
                 }
                 if ($kv["type"] == self::CONDITION_TYPE_NOT_IN) {
                     $this->sql .= " NOT IN ";
                 }
             }
             if ($kv["inner_statement"]) {
                 $this->sql .= "(";
             }
             if ($kv["quote"]) {
                 $this->sql .= "'";
             }
             if ($kv["type"] == self::CONDITION_TYPE_IN || $kv["type"] == self::CONDITION_TYPE_NOT_IN) {
                 $this->sql .= " (" . ArrayUtils::join($kv["values"], ",") . ")";
             } else {
                 if ($kv["type"] == self::CONDITION_BEGIN_WITH || $kv["type"] == self::CONDITION_CONTAINS) {
                     $this->sql .= "%";
                 }
                 $this->sql .= $kv["value"];
                 if ($kv["type"] == self::CONDITION_CONTAINS || $kv["type"] == self::CONDITION_END_WITH) {
                     $this->sql .= "%";
                 }
             }
             if ($kv["quote"]) {
                 $this->sql .= "'";
             }
             if ($kv["inner_statement"]) {
                 $this->sql .= ")";
             }
         }
         $first = false;
     }
 }