From e2035a576182e07f274a8ffa5e257c5316e82583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Tue, 12 Apr 2016 11:48:41 +0200 Subject: [PATCH 1/2] [TASK] Added support for nested query-builder --- src/Pixie/QueryBuilder/QueryBuilderHandler.php | 8 +++++++- src/Pixie/QueryBuilder/QueryObject.php | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Pixie/QueryBuilder/QueryBuilderHandler.php b/src/Pixie/QueryBuilder/QueryBuilderHandler.php index 134fba0..8d18a9a 100644 --- a/src/Pixie/QueryBuilder/QueryBuilderHandler.php +++ b/src/Pixie/QueryBuilder/QueryBuilderHandler.php @@ -141,8 +141,14 @@ public function query($sql, $bindings = array()) public function statement($sql, $bindings = array()) { $start = microtime(true); + $pdoStatement = $this->pdo->prepare($sql); foreach ($bindings as $key => $value) { + + if($value instanceof self) { + $value = $value->getQuery()->getRawSql(); + } + $pdoStatement->bindValue( is_int($key) ? $key + 1 : $key, $value, @@ -1061,4 +1067,4 @@ public function getStatements() { return $this->statements; } -} +} \ No newline at end of file diff --git a/src/Pixie/QueryBuilder/QueryObject.php b/src/Pixie/QueryBuilder/QueryObject.php index 106070c..6d7b40b 100644 --- a/src/Pixie/QueryBuilder/QueryObject.php +++ b/src/Pixie/QueryBuilder/QueryObject.php @@ -70,6 +70,13 @@ protected function interpolateQuery($query, $params) # build a regular expression for each parameter foreach ($params as $key => $value) { + + if($value instanceof QueryBuilderHandler) { + $keys[] = '/[?]/'; + $values[$key] = '(' . $value->getQuery()->getRawSql() . ')'; + continue; + } + if (is_string($key)) { $keys[] = '/:' . $key . '/'; } else { @@ -93,4 +100,4 @@ protected function interpolateQuery($query, $params) return $query; } -} +} \ No newline at end of file From f51daa96f8d99cafd6a3a40f91d41fa8a0a8b00c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Tue, 12 Apr 2016 13:21:06 +0200 Subject: [PATCH 2/2] [FIX] Only support nested QueryBuilder on select statements. --- src/Pixie/QueryBuilder/QueryBuilderHandler.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Pixie/QueryBuilder/QueryBuilderHandler.php b/src/Pixie/QueryBuilder/QueryBuilderHandler.php index 8d18a9a..5183624 100644 --- a/src/Pixie/QueryBuilder/QueryBuilderHandler.php +++ b/src/Pixie/QueryBuilder/QueryBuilderHandler.php @@ -144,11 +144,6 @@ public function statement($sql, $bindings = array()) $pdoStatement = $this->pdo->prepare($sql); foreach ($bindings as $key => $value) { - - if($value instanceof self) { - $value = $value->getQuery()->getRawSql(); - } - $pdoStatement->bindValue( is_int($key) ? $key + 1 : $key, $value, @@ -175,8 +170,7 @@ public function get() if (is_null($this->pdoStatement)) { $queryObject = $this->getQuery('select'); list($this->pdoStatement, $executionTime) = $this->statement( - $queryObject->getSql(), - $queryObject->getBindings() + $queryObject->getRawSql() ); }