예제 #1
0
 private function _createSqlFromCriterion(Criterion $aCriterion)
 {
     //var_dump( $aCriterion );
     //$this->_hidden_criterion->getTable()
     //		echo $aCriterion->getColumn();
     //		echo $aCriterion->getValue();
     //		echo $aCriterion->getComparison();
     //		var_dump( $aCriterion->getAllTables() );
     //		var_dump( $aCriterion->getAttachedCriterion() );
     //		var_dump( $aCriterion->getTable() );
     $table = $aCriterion->getTable() ? $aCriterion->getTable() . '.' : '';
     $value = $aCriterion->getValue();
     if (is_array($value)) {
         foreach ($value as $key => $val) {
             $value[$key] = "'" . chks($val) . "'";
         }
         if (count($value)) {
             $value = '(' . implode(',', $value) . ')';
         } else {
             $value = '( NULL )';
         }
     } else {
         if (!is_null($value) && !is_numeric($value)) {
             $value = "'" . chks($value) . "'";
         }
     }
     if (is_null($value)) {
         if (self::EQUAL == $aCriterion->getComparison() || self::ISNULL == $aCriterion->getComparison() || self::IN == $aCriterion->getComparison()) {
             $partWhere = trim($table . $aCriterion->getColumn(), '.') . " IS NULL";
         } else {
             $partWhere = trim($table . $aCriterion->getColumn(), '.') . " IS NOT NULL";
         }
     } else {
         $partWhere = trim($table . $aCriterion->getColumn(), '.') . $aCriterion->getComparison() . $value;
     }
     $clauses = $aCriterion->getClauses();
     if (is_array($clauses) && count($clauses)) {
         $conjunctions = $aCriterion->getConjunctions();
         for ($i = 0; $i < count($clauses); $i++) {
             $partWhere = '(' . $partWhere . ')' . $conjunctions[$i] . $this->_createSqlFromCriterion($clauses[$i]);
         }
     }
     return $partWhere;
 }