Skip to content

Commit 9eb33a5

Browse files
committed
feature: improve queryBuilder DX
1 parent 4926122 commit 9eb33a5

2 files changed

Lines changed: 66 additions & 2 deletions

File tree

CHANGELOG

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
3.13.0 (unreleased):
2+
* Deprecate getQueryBuilder and add 4 dedicated getter for Select, Update, Delete & Insert
3+
14
3.12.0 (2025-04-17):
25
* add __debuginfo() in NotifyInterface to reduce context when dumping an entity
36
* Driver now supports reconnect, useful in forked processes

src/Ting/Repository/Repository.php

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525

2626
namespace CCMBenchmark\Ting\Repository;
2727

28+
use Aura\SqlQuery\Common\DeleteInterface;
29+
use Aura\SqlQuery\Common\InsertInterface;
30+
use Aura\SqlQuery\Common\SelectInterface;
31+
use Aura\SqlQuery\Common\UpdateInterface;
2832
use Aura\SqlQuery\QueryFactory as AuraQueryFactory;
2933
use Aura\SqlQuery\QueryInterface;
3034
use CCMBenchmark\Ting\Connection;
@@ -201,14 +205,14 @@ public function getCachedPreparedQuery($sql)
201205

202206

203207
/**
208+
* @deprecated Use get{Select,Update,Delete,Insert}QueryBuilder instead
204209
* @param string $type One of the QUERY_ constant
205210
* @return QueryInterface
206211
* @throws DriverException
207212
*/
208213
public function getQueryBuilder($type)
209214
{
210-
$driver = $this->connectionPool->getDriverClass($this->metadata->getConnectionName());
211-
$driver = ltrim($driver, '\\');
215+
$driver = $this->getDriverForConnection();
212216

213217
switch ($driver) {
214218
case Pgsql\Driver::class:
@@ -233,6 +237,39 @@ public function getQueryBuilder($type)
233237
return $queryBuilder;
234238
}
235239

240+
public function getSelectQueryBuilder(): SelectInterface
241+
{
242+
$driver = $this->getDriverForConnection();
243+
$queryFactory = $this->getQueryFactoryForDriver($driver);
244+
245+
return $queryFactory->newSelect();
246+
}
247+
248+
249+
public function getUpdateQueryBuilder(): UpdateInterface
250+
{
251+
$driver = $this->getDriverForConnection();
252+
$queryFactory = $this->getQueryFactoryForDriver($driver);
253+
254+
return $queryFactory->newUpdate();
255+
}
256+
257+
public function getDeleteQueryBuilder(): DeleteInterface
258+
{
259+
$driver = $this->getDriverForConnection();
260+
$queryFactory = $this->getQueryFactoryForDriver($driver);
261+
262+
return $queryFactory->newDelete();
263+
}
264+
265+
public function getInsertQueryBuilder(): InsertInterface
266+
{
267+
$driver = $this->getDriverForConnection();
268+
$queryFactory = $this->getQueryFactoryForDriver($driver);
269+
270+
return $queryFactory->newInsert();
271+
}
272+
236273
/**
237274
* Retrieve one object from database
238275
*
@@ -403,4 +440,28 @@ public function getMetadata()
403440
{
404441
return $this->metadata;
405442
}
443+
444+
private function getDriverForConnection(): string
445+
{
446+
$driver = $this->connectionPool->getDriverClass($this->metadata->getConnectionName());
447+
return ltrim($driver, '\\');
448+
}
449+
450+
private function getQueryFactoryForDriver(string $driver): AuraQueryFactory
451+
{
452+
switch ($driver) {
453+
case Pgsql\Driver::class:
454+
$queryFactory = new AuraQueryFactory('pgsql');
455+
break;
456+
case SphinxQL\Driver::class:
457+
// SphinxQL and Mysqli are sharing the same driver
458+
case Mysqli\Driver::class:
459+
$queryFactory = new AuraQueryFactory('mysql');
460+
break;
461+
default:
462+
throw new DriverException('Driver ' . $driver . ' is unknown to build QueryBuilder');
463+
}
464+
465+
return $queryFactory;
466+
}
406467
}

0 commit comments

Comments
 (0)