/** * Retorna uma query SQL para a operação UPDATE. Utiliza para isso os * atributos da instância CoreExt_Entity, usando o atributo identidade * para especificar qual registro atualizar na tabela. * * Uma query gerada por esse método segue a forma: * <code> * UPDATE [schema.]table SET column='value' WHERE id = 'idValue'; * </code> * * @param CoreExt_Entity $instance * @return string */ protected function _getUpdateStatment(CoreExt_Entity $instance) { $sql = 'UPDATE %s SET %s WHERE %s'; $data = $this->_getDbAdapter()->formatValues($instance->toDataArray()); // Remove o campo identidade e campos não-persistentes $data = $this->_cleanData($data); // Trata os valores NULL diferentemente dos outros, para evitar erro // de execução query $columns = array(); foreach ($data as $key => $value) { $columnName = $this->_getTableColumn($key); if (is_null($value)) { $value = "NULL"; $replaceString = "%s = %s"; } else { $replaceString = "%s = '%s'"; } $columns[] = sprintf($replaceString, $columnName, $value); } $where = array(); foreach ($this->_primaryKey as $pk) { $whereName = $this->_getTableColumn($pk); $where[] = sprintf("%s = '%d'", $whereName, $instance->get($pk)); } return sprintf($sql, $this->_getTableName(), implode(', ', $columns), implode(' AND ', $where)); }