2121
2222namespace Test \DB \QueryBuilder ;
2323
24+ use Doctrine \DBAL \Schema \SchemaException ;
25+ use Doctrine \DBAL \Types \Types ;
2426use OC \DB \QueryBuilder \Literal ;
2527use OCP \DB \QueryBuilder \IQueryBuilder ;
28+ use OCP \IConfig ;
29+ use OCP \Server ;
2630use Test \TestCase ;
2731
2832/**
3135class ExpressionBuilderDBTest extends TestCase {
3236 /** @var \Doctrine\DBAL\Connection|\OCP\IDBConnection */
3337 protected $ connection ;
38+ protected $ schemaSetup = false ;
3439
3540 protected function setUp (): void {
3641 parent ::setUp ();
3742
3843 $ this ->connection = \OC ::$ server ->getDatabaseConnection ();
44+ $ this ->prepareTestingTable ();
3945 }
4046
4147 public function likeProvider () {
@@ -150,6 +156,59 @@ public function testLongText(): void {
150156 self ::assertEquals ('myvalue ' , $ entries [0 ]['configvalue ' ]);
151157 }
152158
159+ public function testDateTimeEquals () {
160+ $ dateTime = new \DateTime ('2023-01-01 ' );
161+ $ insert = $ this ->connection ->getQueryBuilder ();
162+ $ insert ->insert ('testing ' )
163+ ->values (['datetime ' => $ insert ->createNamedParameter ($ dateTime , IQueryBuilder::PARAM_DATE )])
164+ ->executeStatement ();
165+
166+ $ query = $ this ->connection ->getQueryBuilder ();
167+ $ result = $ query ->select ('* ' )
168+ ->from ('testing ' )
169+ ->where ($ query ->expr ()->eq ('datetime ' , $ query ->createNamedParameter ($ dateTime , IQueryBuilder::PARAM_DATE )))
170+ ->executeQuery ();
171+ $ entries = $ result ->fetchAll ();
172+ $ result ->closeCursor ();
173+ self ::assertCount (1 , $ entries );
174+ }
175+
176+ public function testDateTimeLess () {
177+ $ dateTime = new \DateTime ('2022-01-01 ' );
178+ $ dateTimeCompare = new \DateTime ('2022-01-02 ' );
179+ $ insert = $ this ->connection ->getQueryBuilder ();
180+ $ insert ->insert ('testing ' )
181+ ->values (['datetime ' => $ insert ->createNamedParameter ($ dateTime , IQueryBuilder::PARAM_DATE )])
182+ ->executeStatement ();
183+
184+ $ query = $ this ->connection ->getQueryBuilder ();
185+ $ result = $ query ->select ('* ' )
186+ ->from ('testing ' )
187+ ->where ($ query ->expr ()->lt ('datetime ' , $ query ->createNamedParameter ($ dateTimeCompare , IQueryBuilder::PARAM_DATE )))
188+ ->executeQuery ();
189+ $ entries = $ result ->fetchAll ();
190+ $ result ->closeCursor ();
191+ self ::assertCount (1 , $ entries );
192+ }
193+
194+ public function testDateTimeGreater () {
195+ $ dateTime = new \DateTime ('2023-01-02 ' );
196+ $ dateTimeCompare = new \DateTime ('2023-01-01 ' );
197+ $ insert = $ this ->connection ->getQueryBuilder ();
198+ $ insert ->insert ('testing ' )
199+ ->values (['datetime ' => $ insert ->createNamedParameter ($ dateTime , IQueryBuilder::PARAM_DATE )])
200+ ->executeStatement ();
201+
202+ $ query = $ this ->connection ->getQueryBuilder ();
203+ $ result = $ query ->select ('* ' )
204+ ->from ('testing ' )
205+ ->where ($ query ->expr ()->gt ('datetime ' , $ query ->createNamedParameter ($ dateTimeCompare , IQueryBuilder::PARAM_DATE )))
206+ ->executeQuery ();
207+ $ entries = $ result ->fetchAll ();
208+ $ result ->closeCursor ();
209+ self ::assertCount (1 , $ entries );
210+ }
211+
153212 protected function createConfig ($ appId , $ key , $ value ) {
154213 $ query = $ this ->connection ->getQueryBuilder ();
155214 $ query ->insert ('appconfig ' )
@@ -160,4 +219,31 @@ protected function createConfig($appId, $key, $value) {
160219 ])
161220 ->execute ();
162221 }
222+
223+ protected function prepareTestingTable (): void {
224+ if ($ this ->schemaSetup ) {
225+ $ this ->connection ->getQueryBuilder ()->delete ('testing ' )->executeStatement ();
226+ }
227+
228+ $ prefix = Server::get (IConfig::class)->getSystemValueString ('dbtableprefix ' , 'oc_ ' );
229+ $ schema = $ this ->connection ->createSchema ();
230+ try {
231+ $ schema ->getTable ($ prefix . 'testing ' );
232+ $ this ->connection ->getQueryBuilder ()->delete ('testing ' )->executeStatement ();
233+ } catch (SchemaException $ e ) {
234+ $ this ->schemaSetup = true ;
235+ $ table = $ schema ->createTable ($ prefix . 'testing ' );
236+ $ table ->addColumn ('id ' , Types::BIGINT , [
237+ 'autoincrement ' => true ,
238+ 'notnull ' => true ,
239+ ]);
240+
241+ $ table ->addColumn ('datetime ' , Types::DATETIME_MUTABLE , [
242+ 'notnull ' => false ,
243+ ]);
244+
245+ $ table ->setPrimaryKey (['id ' ]);
246+ $ this ->connection ->migrateToSchema ($ schema );
247+ }
248+ }
163249}
0 commit comments