3
3
4
4
use Kir \MySQL \Builder ;
5
5
use Kir \MySQL \Builder \Exception ;
6
+ use Kir \MySQL \Builder \QueryStatement ;
7
+ use Kir \MySQL \Builder \Statement ;
6
8
use Kir \MySQL \Database ;
9
+ use Kir \MySQL \QueryLogger \QueryLoggers ;
7
10
use Kir \MySQL \Tools \AliasRegistry ;
11
+ use Kir \MySQL \Tools \PDOStatementInterceptor ;
12
+ use PDO ;
13
+ use PDOStatement ;
8
14
use UnexpectedValueException ;
9
15
use Kir \MySQL \Builder \RunnableSelect ;
10
16
11
17
/**
12
18
*/
13
19
class MySQL implements Database {
14
- /**
15
- * @var array
16
- */
20
+ /** @var array */
17
21
private static $ tableFields = array ();
18
- /**
19
- * @var PDO
20
- */
22
+ /** @var PDO */
21
23
private $ pdo ;
22
- /**
23
- * @var AliasRegistry
24
- */
24
+ /** @var AliasRegistry */
25
25
private $ aliasRegistry ;
26
- /**
27
- * @var int
28
- */
26
+ /** @var int */
29
27
private $ transactionLevel = 0 ;
28
+ /** @var QueryLoggers */
29
+ private $ queryLoggers = 0 ;
30
30
31
31
/**
32
- * @param \ PDO $pdo
32
+ * @param PDO $pdo
33
33
*/
34
- public function __construct (\ PDO $ pdo ) {
34
+ public function __construct (PDO $ pdo ) {
35
35
$ this ->pdo = $ pdo ;
36
36
$ this ->aliasRegistry = new AliasRegistry ();
37
+ $ this ->queryLoggers = new QueryLoggers ();
38
+ }
39
+
40
+ /**
41
+ * @return QueryLoggers
42
+ */
43
+ public function getQueryLoggers () {
44
+ return $ this ->queryLoggers ;
37
45
}
38
46
39
47
/**
@@ -46,27 +54,29 @@ public function getAliasRegistry() {
46
54
/**
47
55
* @param string $query
48
56
* @throws Exception
49
- * @return \PDOStatement
57
+ * @return QueryStatement
50
58
*/
51
59
public function query ($ query ) {
52
60
$ stmt = $ this ->pdo ->query ($ query );
53
61
if (!$ stmt ) {
54
62
throw new Exception ("Could not execute statement: \n{$ query }" );
55
63
}
56
- return $ stmt ;
64
+ $ stmtWrapper = new QueryStatement ($ stmt , $ query , $ this ->queryLoggers );
65
+ return $ stmtWrapper ;
57
66
}
58
67
59
68
/**
60
69
* @param string $query
61
70
* @throws Exception
62
- * @return \PDOStatement
71
+ * @return QueryStatement
63
72
*/
64
73
public function prepare ($ query ) {
65
74
$ stmt = $ this ->pdo ->prepare ($ query );
66
75
if (!$ stmt ) {
67
76
throw new Exception ("Could not execute statement: \n{$ query }" );
68
77
}
69
- return $ stmt ;
78
+ $ stmtWrapper = new QueryStatement ($ stmt , $ query , $ this ->queryLoggers );
79
+ return $ stmtWrapper ;
70
80
}
71
81
72
82
/**
@@ -76,7 +86,9 @@ public function prepare($query) {
76
86
*/
77
87
public function exec ($ query , array $ params = array ()) {
78
88
$ stmt = $ this ->pdo ->prepare ($ query );
89
+ $ timer = microtime (true );
79
90
$ stmt ->execute ($ params );
91
+ $ this ->queryLoggers ->log ($ query , microtime (true ) - $ timer );
80
92
$ result = $ stmt ->rowCount ();
81
93
$ stmt ->closeCursor ();
82
94
return $ result ;
0 commit comments