From fc2535a3a3c44bf227cf389e630e75e65a869a2a Mon Sep 17 00:00:00 2001 From: jamesread Date: Tue, 5 Sep 2023 23:22:34 +0100 Subject: [PATCH] qb fixes --- src/main/php/libAllure/QueryBuilder.php | 23 ++++++++++++++++++----- src/test/php/QueryBuilderTest.php | 12 +++++++++++- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/php/libAllure/QueryBuilder.php b/src/main/php/libAllure/QueryBuilder.php index 5d3b73a..d010cec 100644 --- a/src/main/php/libAllure/QueryBuilder.php +++ b/src/main/php/libAllure/QueryBuilder.php @@ -78,19 +78,27 @@ public function fields(string|array ...$fields) return $this; } - protected function addFieldPrefix($field) + protected function addFieldPrefix($field, $alias = null) { + /* if (strpos($field, '!') !== false) { return str_replace('!', '', $field); } + */ - if (strpos($field, '.') === false) { - $alias = $this->lastAliasUsed . '.'; + if ($alias == null) { + if (strpos($field, '.') !== false) { + $prefix = ''; // field already has a dot + } else { + $prefix = $this->lastAliasUsed . '.'; + } } else { - $alias = ''; + if (strpos($field, '.') === false) { + $prefix = $alias . '.'; // add the dot + } } - return $alias . $field; + return $prefix . $field; } public function where($field, $operator, $value) @@ -231,6 +239,11 @@ public function onEq($field, $value) return $this->on($field, '=', $value); } + public function onFromFieldsEq($fromField, $joinedField) + { + return $this->onEq($this->addFieldPrefix($fromField, $this->from['alias']), $this->addFieldPrefix($joinedField)); + } + public function onGt($field, $value) { return $this->on($field, '>', $value); diff --git a/src/test/php/QueryBuilderTest.php b/src/test/php/QueryBuilderTest.php index a91c638..7baded7 100644 --- a/src/test/php/QueryBuilderTest.php +++ b/src/test/php/QueryBuilderTest.php @@ -98,7 +98,7 @@ public function testSubquery() { public function testGroup() { $qb = new QueryBuilder(); $qb->fields('p.id', 'p.forename')->from('people'); - $qb->groupBy('p.forename'); + $qb->groupBy('forename'); $this->assertEquals('SELECT p.id, p.forename FROM people p GROUP BY p.forename ORDER BY p.id', $qb->build()); } @@ -123,6 +123,16 @@ public function testAutoAlias() { $sql = 'SELECT f.username, o.password FROM foo f LEFT JOIN fffoobar o ON f.username = o.id ORDER BY f.username'; $this->assertEquals($sql, $qb->build()); } + + public function testJoinOnWhenDontKnowTableAliases() { + $qb = new QueryBuilder(); + $qb->from('foo')->fields('username'); + $qb->join('fffoobar')->onFromFieldsEq('username', 'id')->fields('password'); + + $sql = 'SELECT f.username, o.password FROM foo f LEFT JOIN fffoobar o ON f.username = o.id ORDER BY f.username'; + $this->assertEquals($sql, $qb->build()); + + } }