Skip to content

Commit 44129e5

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 6aa862e + 62073e8 commit 44129e5

File tree

13 files changed

+136
-45
lines changed

13 files changed

+136
-45
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
}
1616
},
1717
"autoload-dev": {
18-
"psr-0": {
18+
"psr-4": {
1919
"Kir\\MySQL\\": ["src/", "tests/"]
2020
}
2121
}

src/Builder/Delete.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
<?php
22
namespace Kir\MySQL\Builder;
33

4-
use Exception;
5-
64
class Delete extends Statement {
75
/**
86
* @var string

src/Builder/Exception.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
namespace Kir\MySQL\Builder;
3+
4+
class Exception extends \Exception {
5+
}

src/Builder/Insert.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace Kir\MySQL\Builder;
33

4-
use Exception;
54
use UnexpectedValueException;
65

76
class Insert extends InsertUpdateStatement {

src/Builder/RunnableSelect.php

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
<?php
22
namespace Kir\MySQL\Builder;
33

4-
use Closure;
5-
use PDO;
6-
use PDOStatement;
7-
84
/**
95
*/
106
class RunnableSelect extends Select {
@@ -60,12 +56,12 @@ public function setPreserveTypes($preserveTypes = true) {
6056
}
6157

6258
/**
63-
* @param Closure $callback
59+
* @param \Closure $callback
6460
* @return array[]
6561
*/
66-
public function fetchRows(Closure $callback = null) {
62+
public function fetchRows(\Closure $callback = null) {
6763
$statement = $this->createStatement();
68-
$data = $statement->fetchAll(PDO::FETCH_ASSOC);
64+
$data = $statement->fetchAll(\PDO::FETCH_ASSOC);
6965
if($callback !== null) {
7066
$data = array_map($callback, $data);
7167
}
@@ -84,7 +80,7 @@ public function fetchRows(Closure $callback = null) {
8480
*/
8581
public function fetchRow() {
8682
$statement = $this->createStatement();
87-
$row = $statement->fetch(PDO::FETCH_ASSOC);
83+
$row = $statement->fetch(\PDO::FETCH_ASSOC);
8884
if(!is_array($row)) {
8985
return array();
9086
}
@@ -144,7 +140,7 @@ public function fetchArray() {
144140
*/
145141
public function fetchValue($default = null) {
146142
$statement = $this->createStatement();
147-
$row = $statement->fetch(PDO::FETCH_ASSOC);
143+
$row = $statement->fetch(\PDO::FETCH_ASSOC);
148144
if(!is_array($row)) {
149145
return $default;
150146
}
@@ -163,11 +159,11 @@ public function getFoundRows() {
163159
}
164160

165161
/**
166-
* @return PDOStatement
162+
* @return \PDOStatement
167163
*/
168164
private function createStatement() {
169165
$db = $this->db();
170-
$statement = $db->query($this->__toString());
166+
$statement = $db->prepare($this->__toString());
171167
$statement->execute($this->values);
172168
if($this->getCalcFoundRows()) {
173169
$this->foundRows = $db->query('SELECT FOUND_ROWS()')->fetchColumn();
@@ -176,7 +172,7 @@ private function createStatement() {
176172
}
177173

178174
/**
179-
* @param PDOStatement $statement
175+
* @param \PDOStatement $statement
180176
* @return array
181177
*/
182178
private function getFieldTypes($statement) {

src/Builder/Select.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,16 @@ private function buildForUpdate($query) {
418418
* @return string
419419
*/
420420
private function buildTableName($alias, $name) {
421-
return "{$name} {$alias}";
421+
if(is_object($name)) {
422+
$name = (string) $name;
423+
$lines = explode("\n", $name);
424+
foreach($lines as &$line) {
425+
$line = "\t{$line}";
426+
}
427+
$name = join("\n", $lines);
428+
$name = '(' . trim(rtrim(trim($name), ';')) . ')';
429+
}
430+
return sprintf("%s %s", $name, $alias);
422431
}
423432

424433
/**

src/Builder/Statement.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,9 @@ public function cloneStatement() {
4545
protected function db() {
4646
return $this->db;
4747
}
48+
49+
/**
50+
* @return string
51+
*/
52+
abstract public function __toString();
4853
}

src/Builder/Update.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
<?php
22
namespace Kir\MySQL\Builder;
33

4-
use Exception;
5-
use UnexpectedValueException;
6-
74
class Update extends InsertUpdateStatement {
85
/**
96
* @var array
@@ -37,7 +34,7 @@ public function table($name) {
3734
/**
3835
* @param string $field
3936
* @param string $value
40-
* @throws UnexpectedValueException
37+
* @throws \UnexpectedValueException
4138
* @return $this
4239
*/
4340
public function set($field, $value) {

src/Database.php

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
<?php
22
namespace Kir\MySQL;
33

4-
use PDOStatement;
4+
use Kir\MySQL\Builder\Exception;
5+
use Kir\MySQL\Builder\RunnableSelect;
56

67
interface Database {
78
/**
89
* @param string $query
9-
* @return PDOStatement
10+
* @throws Exception
11+
* @return \PDOStatement
1012
*/
1113
public function query($query);
1214

1315
/**
1416
* @param string $query
15-
* @return PDOStatement
17+
* @throws Exception
18+
* @return \PDOStatement
1619
*/
1720
public function prepare($query);
1821

1922
/**
2023
* @param string $query
24+
* @param array $params
2125
* @return int
2226
*/
23-
public function exec($query);
27+
public function exec($query, array $params = array());
2428

2529
/**
2630
* @return int
@@ -54,7 +58,7 @@ public function quoteField($field);
5458

5559
/**
5660
* @param array $fields
57-
* @return Builder\RunnableSelect
61+
* @return RunnableSelect
5862
*/
5963
public function select(array $fields = array());
6064

@@ -73,4 +77,25 @@ public function update();
7377
*/
7478
public function delete();
7579

80+
/**
81+
* @return $this
82+
*/
83+
public function transactionStart();
84+
85+
/**
86+
* @return $this
87+
*/
88+
public function transactionCommit();
89+
90+
/**
91+
* @return $this
92+
*/
93+
public function transactionRollback();
94+
95+
/**
96+
* @param callable $callback
97+
* @throws \Exception
98+
* @return $this
99+
*/
100+
public function transaction($callback);
76101
}

src/Databases/MySQL.php

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
<?php
22
namespace Kir\MySQL\Databases;
33

4-
use PDO;
5-
use Exception;
6-
use PDOStatement;
74
use Kir\MySQL\Builder;
5+
use Kir\MySQL\Builder\Exception;
86
use Kir\MySQL\Database;
97
use UnexpectedValueException;
108
use Kir\MySQL\Builder\RunnableSelect;
@@ -16,21 +14,21 @@ class MySQL implements Database {
1614
private static $tableFields = array();
1715

1816
/**
19-
* @var PDO
17+
* @var \PDO
2018
*/
2119
private $pdo;
2220

2321
/**
24-
* @param PDO $pdo
22+
* @param \PDO $pdo
2523
*/
26-
public function __construct(PDO $pdo) {
24+
public function __construct(\PDO $pdo) {
2725
$this->pdo = $pdo;
2826
}
2927

3028
/**
3129
* @param string $query
3230
* @throws Exception
33-
* @return PDOStatement
31+
* @return \PDOStatement
3432
*/
3533
public function query($query) {
3634
$stmt = $this->pdo->query($query);
@@ -43,7 +41,7 @@ public function query($query) {
4341
/**
4442
* @param string $query
4543
* @throws Exception
46-
* @return PDOStatement
44+
* @return \PDOStatement
4745
*/
4846
public function prepare($query) {
4947
$stmt = $this->pdo->prepare($query);
@@ -55,10 +53,15 @@ public function prepare($query) {
5553

5654
/**
5755
* @param string $query
56+
* @param array $params
5857
* @return int
5958
*/
60-
public function exec($query) {
61-
return $this->pdo->exec($query);
59+
public function exec($query, array $params = array()) {
60+
$stmt = $this->pdo->prepare($query);
61+
$stmt->execute($params);
62+
$result = $stmt->rowCount();
63+
$stmt->closeCursor();
64+
return $result;
6265
}
6366

6467
/**
@@ -78,7 +81,7 @@ public function getTableFields($table) {
7881
}
7982
$stmt = $this->pdo->query("DESCRIBE {$table}");
8083
$stmt->execute();
81-
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
84+
$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
8285
self::$tableFields[$table] = array_map(function ($row) { return $row['Field']; }, $rows);
8386
$stmt->closeCursor();
8487
return self::$tableFields[$table];
@@ -192,4 +195,21 @@ public function transactionRollback() {
192195
$this->pdo->rollBack();
193196
return $this;
194197
}
198+
199+
/**
200+
* @param callable $callback
201+
* @throws \Exception
202+
* @return $this
203+
*/
204+
public function transaction($callback) {
205+
try {
206+
$this->pdo->beginTransaction();
207+
call_user_func($callback, $this);
208+
$this->pdo->commit();
209+
} catch (\Exception $e) {
210+
$this->pdo->rollBack();
211+
throw $e;
212+
}
213+
return $this;
214+
}
195215
}

0 commit comments

Comments
 (0)