Skip to content

Commit 2810595

Browse files
authored
Merge pull request #7277 from kenjis/fix-QB-like-RawSql-countAllResults
fix: [QueryBuilder] RawSql causes error when using like() and countAllResults()
2 parents f1caaee + 0d8c914 commit 2810595

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

system/Database/BaseBuilder.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3082,6 +3082,10 @@ protected function compileWhereHaving(string $qbKey): string
30823082
continue;
30833083
}
30843084

3085+
if ($qbkey instanceof RawSql) {
3086+
continue;
3087+
}
3088+
30853089
if ($qbkey['condition'] instanceof RawSql) {
30863090
$qbkey = $qbkey['condition'];
30873091

tests/system/Database/Live/LikeTest.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace CodeIgniter\Database\Live;
1313

14+
use CodeIgniter\Database\RawSql;
1415
use CodeIgniter\Test\CIUnitTestCase;
1516
use CodeIgniter\Test\DatabaseTestTrait;
1617
use Tests\Support\Database\Seeds\CITestSeeder;
@@ -121,4 +122,46 @@ public function testLikeSpacesOrTabs()
121122
$this->assertCount(1, $spaces);
122123
$this->assertCount(1, $tabs);
123124
}
125+
126+
/**
127+
* @see https://github.com/codeigniter4/CodeIgniter4/issues/7268
128+
*/
129+
public function testLikeRawSqlAndCountAllResultsAndGet()
130+
{
131+
$builder = $this->db->table('job');
132+
133+
if ($this->db->DBDriver === 'OCI8') {
134+
$key = new RawSql('"name"');
135+
} else {
136+
$key = new RawSql('name');
137+
}
138+
139+
$builder->like($key, 'Developer');
140+
$count = $builder->countAllResults(false);
141+
$results = $builder->get()->getResult();
142+
143+
$this->assertSame(1, $count);
144+
$this->assertSame('Developer', $results[0]->name);
145+
}
146+
147+
/**
148+
* @see https://github.com/codeigniter4/CodeIgniter4/issues/7268
149+
*/
150+
public function testLikeRawSqlAndGetAndCountAllResults()
151+
{
152+
$builder = $this->db->table('job');
153+
154+
if ($this->db->DBDriver === 'OCI8') {
155+
$key = new RawSql('"name"');
156+
} else {
157+
$key = new RawSql('name');
158+
}
159+
160+
$builder->like($key, 'Developer');
161+
$results = $builder->get(null, 0, false)->getResult();
162+
$count = $builder->countAllResults();
163+
164+
$this->assertSame(1, $count);
165+
$this->assertSame('Developer', $results[0]->name);
166+
}
124167
}

0 commit comments

Comments
 (0)