2525
2626namespace 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 ;
2832use Aura \SqlQuery \QueryFactory as AuraQueryFactory ;
2933use Aura \SqlQuery \QueryInterface ;
3034use 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