<?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
);
}
}
?>
|