<?php
 
/**
 
 * @package DATA_MySQL5
 
 */
 
 
/**
 
 * Strategy for mapping array offsets to primary key values.
 
 */
 
class DATA_MySQL5_PrimaryKeyIndexingStrategy implements DATA_AssociativeIndexingStrategy {
 
    /**
 
     * Stores table name on construction for future operations.
 
     * @var string
 
     */
 
    protected $table;
 
    
 
    /**
 
     * Constructor.
 
     * 
 
     * @param string $table The table name.
 
     */
 
    public function __construct($table) {
 
        $this->table = $table;
 
    }
 
    
 
    public function isSingleRowIndexing() {
 
        return true;
 
    }
 
    
 
    protected function getIndexField() {
 
        $keys = DATA_MySQL5_Schema::getPrimaryKey($this->table);
 
        return $keys[0];
 
    }
 
    
 
    public function inboxRowOffset($row) {
 
        $indexField = $this->getIndexField();
 
        try {
 
            return DATA_MySQL5_Schema::getSQLTypeFactory($this->table, $indexField)->inbox($row);
 
        } catch (DATA_SQLTypeConstraintFailed $exception) {
 
            $exception->setTable($this->table);
 
            $exception->setField($indexField);
 
            throw $exception;
 
        }
 
    }
 
    
 
    public function buildWhereConditions($row) {
 
        $indexField = $this->getIndexField();
 
        return "`{$indexField}` = " . DATA_MySQL5_Access::prepareData($row);
 
    }
 
    
 
    public function getAdditionalInsertFields($row) {
 
        return array(
 
            $this->getIndexField() => $row
 
        );
 
    }
 
}
 
?>
 
 
 |