Skip to content

Commit

Permalink
Replace connection code with Query instances.
Browse files Browse the repository at this point in the history
Remove duplicated code, and replace with the query builder.
  • Loading branch information
markstory committed Mar 8, 2013
1 parent 87ce275 commit bc5e3a5
Showing 1 changed file with 19 additions and 44 deletions.
63 changes: 19 additions & 44 deletions lib/Cake/Model/Datasource/Database/Connection.php
Expand Up @@ -20,10 +20,10 @@
use Cake\Model\Datasource\Database\Exception\MissingConnectionException;
use Cake\Model\Datasource\Database\Exception\MissingDriverException;
use Cake\Model\Datasource\Database\Exception\MissingExtensionException;
use Cake\Model\Datasource\Database\Query;

/**
* Represents a connection with a database server
*
*/
class Connection {

Expand Down Expand Up @@ -116,7 +116,7 @@ public function driver($driver = null) {
* Connects to the configured database
*
* @throws MissingConnectionException if credentials are invalid
* @return boolean true on success or false if already connected
* @return boolean true on success or false if already connected.
*/
public function connect() {
if ($this->_connected) {
Expand Down Expand Up @@ -203,16 +203,12 @@ public function query($sql) {
*/
public function insert($table, array $data, array $types = []) {
$this->connect();
$keys = array_keys($data);
$sql = 'INSERT INTO %s (%s) VALUES (%s)';
$sql = sprintf(
$sql,
$table,
implode(',', $keys),
implode(',', array_fill(0, count($data), '?'))
);
$types = $this->matchTypes($keys, $types);
return $this->execute($sql, array_values($data), $types);

$columns = array_keys($data);
$query = new Query($this);

This comment has been minimized.

Copy link
@lorenzo

lorenzo Mar 8, 2013

Member

Can we add a getter in this class to construct a new Query instance?

This comment has been minimized.

Copy link
@markstory

markstory Mar 8, 2013

Author Member

That's a great idea.

This comment has been minimized.

Copy link
@markstory

markstory Mar 8, 2013

Author Member

Done in 99ea23a

return $query->insert($table, $columns, $types)
->values($data)
->execute();
}

/**
Expand All @@ -226,26 +222,13 @@ public function insert($table, array $data, array $types = []) {
*/
public function update($table, array $data, array $conditions = [], $types = []) {
$this->connect();
$keys = array_keys($data);
$conditionsKeys = array_keys($conditions);
$sql = 'UPDATE %s SET %s %s';
list($conditions, $params) = $this->_parseConditions($conditions);
$sql = sprintf(
$sql,
$table,
implode(', ', array_map(function($k) {return $k . ' = ?';}, $keys)),
$conditions
);
if (!empty($types)) {
$originalTypes = $types;
$types = $this->matchTypes($keys, $types);
$paramTypes = $this->matchTypes($conditionsKeys, $originalTypes);
$total = count($types);
foreach ($paramTypes as $i => $t) {
$types[$total + $i + 1] = $t;
}
}
return $this->execute($sql, array_merge(array_values($data), $params), $types);
$columns = array_keys($data);

$query = new Query($this);
return $query->update($table)
->set($data, $types)
->where($conditions, $types)
->execute();
}

/**
Expand All @@ -258,18 +241,10 @@ public function update($table, array $data, array $conditions = [], $types = [])
*/
public function delete($table, $conditions = [], $types = []) {
$this->connect();
$conditionsKeys = array_keys($conditions);
$sql = 'DELETE FROM %s %s';
list($conditions, $params) = $this->_parseConditions($conditions);
$sql = sprintf(
$sql,
$table,
$conditions
);
if (!empty($types)) {
$types = $this->matchTypes($conditionsKeys, $types);
}
return $this->execute($sql, $params, $types);
$query = new Query($this);
return $query->delete($table)
->where($conditions, $types)
->execute();
}

/**
Expand Down

0 comments on commit bc5e3a5

Please sign in to comment.