/** * Constructs where statement for retrieving row(s). * * @param bool $useDirty * @return array */ protected function _getWhereQuery($useDirty = true) { $where = array(); $db = $this->_getTable()->getAdapter(); $primaryKey = $this->_getPrimaryKeyValues($useDirty); $info = $this->_getTable()->info(); $metadata = $info[Kwf_Db_Table::METADATA]; // retrieve recently updated row using primary keys $where = array(); foreach ($primaryKey as $column => $value) { $tableName = $db->quoteIdentifier($this->_table->getTableName(), true); $type = $metadata[$column]['DATA_TYPE']; $columnName = $db->quoteIdentifier($column, true); $where[] = $db->quoteInto("{$tableName}.{$columnName} = ?", $value, $type); } return $where; }
/** * Performs a validation on the select query before passing back to the parent class. * Ensures that only columns from the primary Kwf_Db_Table are returned in the result. * * @return string|null This object as a SELECT string (or null if a string cannot be produced) */ public function assemble() { $fields = $this->getPart(Kwf_Db_Table_Select::COLUMNS); $primary = $this->_table->getTableName(); $schema = $this->_table->getSchemaName(); if (count($this->_parts[self::UNION]) == 0) { // If no fields are specified we assume all fields from primary table if (!count($fields)) { $this->from($primary, self::SQL_WILDCARD, $schema); $fields = $this->getPart(Kwf_Db_Table_Select::COLUMNS); } $from = $this->getPart(Kwf_Db_Table_Select::FROM); if ($this->_integrityCheck !== false) { foreach ($fields as $columnEntry) { list($table, $column) = $columnEntry; // Check each column to ensure it only references the primary table if ($column) { if (!isset($from[$table]) || $from[$table]['tableName'] != $primary) { throw new Kwf_Exception('Select query cannot join with another table'); } } } } } return parent::assemble(); }