Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
3.13.0 (unreleased):
* Deprecate getQueryBuilder and add 4 dedicated getter for Select, Update, Delete & Insert

3.12.1 (2025-12-16):
* Fix Hydrator: disable identity map now prevent storing entities

Expand Down
65 changes: 63 additions & 2 deletions src/Ting/Repository/Repository.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@

namespace CCMBenchmark\Ting\Repository;

use Aura\SqlQuery\Common\DeleteInterface;
use Aura\SqlQuery\Common\InsertInterface;
use Aura\SqlQuery\Common\SelectInterface;
use Aura\SqlQuery\Common\UpdateInterface;
use Aura\SqlQuery\QueryFactory as AuraQueryFactory;
use Aura\SqlQuery\QueryInterface;
use CCMBenchmark\Ting\Connection;
Expand Down Expand Up @@ -201,14 +205,14 @@ public function getCachedPreparedQuery($sql)


/**
* @deprecated Use get{Select,Update,Delete,Insert}QueryBuilder instead
* @param string $type One of the QUERY_ constant
* @return QueryInterface
* @throws DriverException
*/
public function getQueryBuilder($type)
{
$driver = $this->connectionPool->getDriverClass($this->metadata->getConnectionName());
$driver = ltrim($driver, '\\');
$driver = $this->getDriverForConnection();

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

public function getSelectQueryBuilder(): SelectInterface
{
$driver = $this->getDriverForConnection();
$queryFactory = $this->getQueryFactoryForDriver($driver);

return $queryFactory->newSelect();
}


public function getUpdateQueryBuilder(): UpdateInterface
{
$driver = $this->getDriverForConnection();
$queryFactory = $this->getQueryFactoryForDriver($driver);

return $queryFactory->newUpdate();
}

public function getDeleteQueryBuilder(): DeleteInterface
{
$driver = $this->getDriverForConnection();
$queryFactory = $this->getQueryFactoryForDriver($driver);

return $queryFactory->newDelete();
}

public function getInsertQueryBuilder(): InsertInterface
{
$driver = $this->getDriverForConnection();
$queryFactory = $this->getQueryFactoryForDriver($driver);

return $queryFactory->newInsert();
}

/**
* Retrieve one object from database
*
Expand Down Expand Up @@ -403,4 +440,28 @@ public function getMetadata()
{
return $this->metadata;
}

private function getDriverForConnection(): string
{
$driver = $this->connectionPool->getDriverClass($this->metadata->getConnectionName());
return ltrim($driver, '\\');
}

private function getQueryFactoryForDriver(string $driver): AuraQueryFactory
{
switch ($driver) {
case Pgsql\Driver::class:
$queryFactory = new AuraQueryFactory('pgsql');
break;
case SphinxQL\Driver::class:
// SphinxQL and Mysqli are sharing the same driver
case Mysqli\Driver::class:
$queryFactory = new AuraQueryFactory('mysql');
break;
default:
throw new DriverException('Driver ' . $driver . ' is unknown to build QueryBuilder');
}

return $queryFactory;
}
}