Adding support for MySQL REPLACE operator
1. 3 months ago
- ivanscm
- Member

- Registered: 2012-03-06
- Posts: 16
Adding support for MySQL REPLACE operator
In one of the projects on the Nette Framework I needed support for MySQL REPLACE operator level framework.
For this, I added the following:
“Nette\Database\Table\Selection.php”
public function replace($data)
{
if ($data instanceof Selection) {
$data = $data->getSql();
} elseif ($data instanceof \Traversable) {
$data = iterator_to_array($data);
}
$return = $this->connection->query($this->sqlBuilder->buildReplaceQuery(), $data);
$this->checkReferenced = TRUE;
if (!is_array($data)) {
return $return->rowCount();
}
if (!is_array($this->primary) && !isset($data[$this->primary]) && ($id = $this->connection->lastInsertId($this->getPrimarySequence()))) {
$data[$this->primary] = $id;
}
$row = $this->createRow($data);
if ($signature = $row->getSignature(FALSE)) {
$this->rows[$signature] = $row;
}
return $row;
}
“Nette\Database\Table\SqlBuilder.php”
public function buildReplaceQuery()
{
return "REPLACE INTO {$this->delimitedTable}";
}
I want to say this is not a complete solution. It can be simplified and improved. Later publish a good option.
Last edited by ivanscm (2013-02-18 10:33)
2. 3 months ago
- hrach
- Member

- Registered: 2007-03-11
- Posts: 1089
Re: Adding support for MySQL REPLACE operator
Well, Nette\Database must be driver(database) independent so using replace is not the right way. However, we are planning other way to do it. But not yet done.