protected function loadRow(Gpf_DbEngine_Row $row) { $selectBuilder = new Gpf_SqlBuilder_SelectBuilder(); $selectBuilder->from->add($row->getTable()->name()); $selectBuilder->select->addAll($row->getTable()); foreach ($this->uniqueColumnNames as $columnName=>$value) { if ($value === false) { $selectBuilder->where->add($columnName,'=',$row->get($columnName)); continue; } $selectBuilder->where->add($columnName,'=',$value); } return $selectBuilder->getOneRow(); }
/** * Validate Db_Row * * @param Gpf_DbEngine_Row $row * @throws Gpf_DbEngine_Row_ConstraintException */ public function validate(Gpf_DbEngine_Row $row) { $select = new Gpf_SqlBuilder_SelectBuilder(); $select->select->add('COUNT(*)', 'cnt'); $select->from->add($row->getTable()->name()); foreach ($row->getPrimaryColumns() as $primaryColumn) { $select->where->add($primaryColumn->getName(), '<>', $row->get($primaryColumn->getName())); } $conditionNotEqalColumns = new Gpf_SqlBuilder_CompoundWhereCondition(); foreach ($this->columnsNotEqualNames as $columnNotEqualName) { $conditionNotEqalColumns->add($columnNotEqualName, '=', $row->get($this->columnName), 'OR'); } $select->where->addCondition($conditionNotEqalColumns); $select->limit->set(0, 1); if ($select->getOneRow()->get('cnt') > 0) { $this->throwException(); } }