33
44use Kir \MySQL \Builder ;
55use Kir \MySQL \Builder \Exception ;
6+ use Kir \MySQL \Builder \QueryStatement ;
7+ use Kir \MySQL \Builder \Statement ;
68use Kir \MySQL \Database ;
9+ use Kir \MySQL \QueryLogger \QueryLoggers ;
710use Kir \MySQL \Tools \AliasRegistry ;
11+ use Kir \MySQL \Tools \PDOStatementInterceptor ;
12+ use PDO ;
13+ use PDOStatement ;
814use UnexpectedValueException ;
915use Kir \MySQL \Builder \RunnableSelect ;
1016
1117/**
1218 */
1319class MySQL implements Database {
14- /**
15- * @var array
16- */
20+ /** @var array */
1721 private static $ tableFields = array ();
18- /**
19- * @var PDO
20- */
22+ /** @var PDO */
2123 private $ pdo ;
22- /**
23- * @var AliasRegistry
24- */
24+ /** @var AliasRegistry */
2525 private $ aliasRegistry ;
26- /**
27- * @var int
28- */
26+ /** @var int */
2927 private $ transactionLevel = 0 ;
28+ /** @var QueryLoggers */
29+ private $ queryLoggers = 0 ;
3030
3131 /**
32- * @param \ PDO $pdo
32+ * @param PDO $pdo
3333 */
34- public function __construct (\ PDO $ pdo ) {
34+ public function __construct (PDO $ pdo ) {
3535 $ this ->pdo = $ pdo ;
3636 $ this ->aliasRegistry = new AliasRegistry ();
37+ $ this ->queryLoggers = new QueryLoggers ();
38+ }
39+
40+ /**
41+ * @return QueryLoggers
42+ */
43+ public function getQueryLoggers () {
44+ return $ this ->queryLoggers ;
3745 }
3846
3947 /**
@@ -46,27 +54,29 @@ public function getAliasRegistry() {
4654 /**
4755 * @param string $query
4856 * @throws Exception
49- * @return \PDOStatement
57+ * @return QueryStatement
5058 */
5159 public function query ($ query ) {
5260 $ stmt = $ this ->pdo ->query ($ query );
5361 if (!$ stmt ) {
5462 throw new Exception ("Could not execute statement: \n{$ query }" );
5563 }
56- return $ stmt ;
64+ $ stmtWrapper = new QueryStatement ($ stmt , $ query , $ this ->queryLoggers );
65+ return $ stmtWrapper ;
5766 }
5867
5968 /**
6069 * @param string $query
6170 * @throws Exception
62- * @return \PDOStatement
71+ * @return QueryStatement
6372 */
6473 public function prepare ($ query ) {
6574 $ stmt = $ this ->pdo ->prepare ($ query );
6675 if (!$ stmt ) {
6776 throw new Exception ("Could not execute statement: \n{$ query }" );
6877 }
69- return $ stmt ;
78+ $ stmtWrapper = new QueryStatement ($ stmt , $ query , $ this ->queryLoggers );
79+ return $ stmtWrapper ;
7080 }
7181
7282 /**
@@ -76,7 +86,9 @@ public function prepare($query) {
7686 */
7787 public function exec ($ query , array $ params = array ()) {
7888 $ stmt = $ this ->pdo ->prepare ($ query );
89+ $ timer = microtime (true );
7990 $ stmt ->execute ($ params );
91+ $ this ->queryLoggers ->log ($ query , microtime (true ) - $ timer );
8092 $ result = $ stmt ->rowCount ();
8193 $ stmt ->closeCursor ();
8294 return $ result ;
0 commit comments