Skip to content

Commit 9201f01

Browse files
authored
Merge pull request #4089 from najdanovicivan/nosql/db-connection-auto-query-class
BaseConnection - Added automatic handling of query class for 3rd party drivers
2 parents b8ca07c + 3545ca9 commit 9201f01

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

system/Database/BaseConnection.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,13 @@ abstract class BaseConnection implements ConnectionInterface
289289
*/
290290
protected $aliasedTables = [];
291291

292+
/**
293+
* Query Class
294+
*
295+
* @var string
296+
*/
297+
protected $queryClass = 'CodeIgniter\\Database\\Query';
298+
292299
//--------------------------------------------------------------------
293300

294301
/**
@@ -302,6 +309,13 @@ public function __construct(array $params)
302309
{
303310
$this->$key = $value;
304311
}
312+
313+
$queryClass = str_replace('Connection', 'Query', static::class);
314+
315+
if (class_exists($queryClass))
316+
{
317+
$this->queryClass = $queryClass;
318+
}
305319
}
306320

307321
//--------------------------------------------------------------------
@@ -594,9 +608,13 @@ abstract protected function execute(string $sql);
594608
* @param string $queryClass
595609
*
596610
* @return BaseResult|Query|false
611+
*
612+
* @todo BC set $queryClass default as null in 4.1
597613
*/
598-
public function query(string $sql, $binds = null, bool $setEscapeFlags = true, string $queryClass = 'CodeIgniter\\Database\\Query')
614+
public function query(string $sql, $binds = null, bool $setEscapeFlags = true, string $queryClass = '')
599615
{
616+
$queryClass = $queryClass ?: $this->queryClass;
617+
600618
if (empty($this->connID))
601619
{
602620
$this->initialize();

system/Test/Mock/MockConnection.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,12 @@ public function shouldReturn(string $method, $return)
4949
* @param string $queryClass
5050
*
5151
* @return BaseResult|Query|false
52+
*
53+
* @todo BC set $queryClass default as null in 4.1
5254
*/
53-
public function query(string $sql, $binds = null, bool $setEscapeFlags = true, string $queryClass = 'CodeIgniter\\Database\\Query')
55+
public function query(string $sql, $binds = null, bool $setEscapeFlags = true, string $queryClass = '')
5456
{
55-
$queryClass = str_replace('Connection', 'Query', get_class($this));
57+
$queryClass = str_replace('Connection', 'Query', static::class);
5658

5759
$query = new $queryClass($this);
5860

0 commit comments

Comments
 (0)