@@ -254,9 +254,6 @@ public function test(Type $expectedType, string $dql, ?string $expectedException
254
254
*/
255
255
public function getTestData (): iterable
256
256
{
257
- $ ormVersion = InstalledVersions::getVersion ('doctrine/orm ' );
258
- $ hasOrm3 = $ ormVersion !== null && strpos ($ ormVersion , '3. ' ) === 0 ;
259
-
260
257
$ dbalVersion = InstalledVersions::getVersion ('doctrine/dbal ' );
261
258
$ hasDbal4 = $ dbalVersion !== null && strpos ($ dbalVersion , '4. ' ) === 0 ;
262
259
@@ -537,48 +534,6 @@ public function getTestData(): iterable
537
534
' ,
538
535
];
539
536
540
- if (property_exists (Column::class, 'enumType ' ) && PHP_VERSION_ID >= 80100 ) {
541
- assert (class_exists (StringEnum::class));
542
- assert (class_exists (IntEnum::class));
543
-
544
- // https://github.com/doctrine/orm/issues/9622
545
- if (!$ this ->isDoctrine211 ()) {
546
- yield 'enum ' => [
547
- $ this ->constantArray ([
548
- [new ConstantStringType ('stringEnumColumn ' ), new ObjectType (StringEnum::class)],
549
- [new ConstantStringType ('intEnumColumn ' ), new ObjectType (IntEnum::class)],
550
- ]),
551
- '
552
- SELECT e.stringEnumColumn, e.intEnumColumn
553
- FROM QueryResult\EntitiesEnum\EntityWithEnum e
554
- ' ,
555
- ];
556
- }
557
-
558
- yield 'enum in expression ' => [
559
- $ this ->constantArray ([
560
- [
561
- new ConstantIntegerType (1 ),
562
- new StringType (),
563
- ],
564
- [
565
- new ConstantIntegerType (2 ),
566
- new IntegerType (),
567
- ],
568
- [
569
- new ConstantIntegerType (3 ),
570
- $ this ->numericString (),
571
- ],
572
- ]),
573
- '
574
- SELECT COALESCE(e.stringEnumColumn, e.stringEnumColumn),
575
- COALESCE(e.intEnumColumn, e.intEnumColumn),
576
- COALESCE(e.intEnumOnStringColumn, e.intEnumOnStringColumn)
577
- FROM QueryResult\EntitiesEnum\EntityWithEnum e
578
- ' ,
579
- ];
580
- }
581
-
582
537
yield 'hidden ' => [
583
538
$ this ->constantArray ([
584
539
[new ConstantStringType ('intColumn ' ), new IntegerType ()],
@@ -1275,40 +1230,6 @@ public function getTestData(): iterable
1275
1230
' ,
1276
1231
];
1277
1232
1278
- if (!$ hasOrm3 ) {
1279
- yield 'date_add function ' => [
1280
- $ this ->constantArray ([
1281
- [new ConstantIntegerType (1 ), new StringType ()],
1282
- [new ConstantIntegerType (2 ), TypeCombinator::addNull (new StringType ())],
1283
- [new ConstantIntegerType (3 ), TypeCombinator::addNull (new StringType ())],
1284
- [new ConstantIntegerType (4 ), new StringType ()],
1285
- ]),
1286
- '
1287
- SELECT DATE_ADD(m.datetimeColumn, m.intColumn, \'day \'),
1288
- DATE_ADD(m.stringNullColumn, m.intColumn, \'day \'),
1289
- DATE_ADD(m.datetimeColumn, NULLIF(m.intColumn, 1), \'day \'),
1290
- DATE_ADD( \'2020-01-01 \', 7, \'day \')
1291
- FROM QueryResult\Entities\Many m
1292
- ' ,
1293
- ];
1294
-
1295
- yield 'date_sub function ' => [
1296
- $ this ->constantArray ([
1297
- [new ConstantIntegerType (1 ), new StringType ()],
1298
- [new ConstantIntegerType (2 ), TypeCombinator::addNull (new StringType ())],
1299
- [new ConstantIntegerType (3 ), TypeCombinator::addNull (new StringType ())],
1300
- [new ConstantIntegerType (4 ), new StringType ()],
1301
- ]),
1302
- '
1303
- SELECT DATE_SUB(m.datetimeColumn, m.intColumn, \'day \'),
1304
- DATE_SUB(m.stringNullColumn, m.intColumn, \'day \'),
1305
- DATE_SUB(m.datetimeColumn, NULLIF(m.intColumn, 1), \'day \'),
1306
- DATE_SUB( \'2020-01-01 \', 7, \'day \')
1307
- FROM QueryResult\Entities\Many m
1308
- ' ,
1309
- ];
1310
- }
1311
-
1312
1233
yield 'date_diff function ' => [
1313
1234
$ this ->constantArray ([
1314
1235
[new ConstantIntegerType (1 ), $ this ->floatOrStringified ()],
@@ -1325,26 +1246,6 @@ public function getTestData(): iterable
1325
1246
' ,
1326
1247
];
1327
1248
1328
- /*yield 'sqrt function' => [
1329
- $this->constantArray([
1330
- [new ConstantIntegerType(1), $this->floatStringified()],
1331
- [new ConstantIntegerType(2), TypeCombinator::addNull($this->floatStringified())],
1332
- [new ConstantIntegerType(3), $this->floatStringified()],
1333
- ]),
1334
- '
1335
- SELECT SQRT(m.intColumn),
1336
- SQRT(NULLIF(m.intColumn, 1)),
1337
- SQRT(1)
1338
- FROM QueryResult\Entities\Many m
1339
- ',
1340
- InstalledVersions::satisfies(new VersionParser(), 'doctrine/dbal', '<3') && PHP_VERSION_ID >= 80100
1341
- ? 'sqrt(): Passing null to parameter #1 ($num) of type float is deprecated'
1342
- : null,
1343
- InstalledVersions::satisfies(new VersionParser(), 'doctrine/dbal', '>=3') && PHP_VERSION_ID >= 80100
1344
- ? 'sqrt(): Passing null to parameter #1 ($num) of type float is deprecated'
1345
- : null,
1346
- ];*/
1347
-
1348
1249
yield 'length function ' => [
1349
1250
$ this ->constantArray ([
1350
1251
[
@@ -1368,36 +1269,6 @@ public function getTestData(): iterable
1368
1269
' ,
1369
1270
];
1370
1271
1371
- if (PHP_VERSION_ID >= 70400 ) {
1372
- yield 'locate function ' => [
1373
- $ this ->constantArray ([
1374
- [new ConstantIntegerType (1 ), $ this ->uintOrStringified ()],
1375
- [new ConstantIntegerType (2 ), TypeCombinator::addNull ($ this ->uintOrStringified ())],
1376
- [new ConstantIntegerType (3 ), TypeCombinator::addNull ($ this ->uintOrStringified ())],
1377
- [new ConstantIntegerType (4 ), $ this ->uintOrStringified ()],
1378
- ]),
1379
- '
1380
- SELECT LOCATE(m.stringColumn, m.stringColumn, 0),
1381
- LOCATE(m.stringNullColumn, m.stringColumn, 0),
1382
- LOCATE(m.stringColumn, m.stringNullColumn, 0),
1383
- LOCATE( \'f \', \'foo \', 0)
1384
- FROM QueryResult\Entities\Many m
1385
- ' ,
1386
- null ,
1387
- InstalledVersions::satisfies (new VersionParser (), 'doctrine/dbal ' , '>=3.4 ' )
1388
- ? null
1389
- : (
1390
- PHP_VERSION_ID >= 80100
1391
- ? 'strpos(): Passing null to parameter #2 ($needle) of type string is deprecated '
1392
- : (
1393
- PHP_VERSION_ID < 80000
1394
- ? 'strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior '
1395
- : null
1396
- )
1397
- ),
1398
- ];
1399
- }
1400
-
1401
1272
yield 'lower function ' => [
1402
1273
$ this ->constantArray ([
1403
1274
[new ConstantIntegerType (1 ), new StringType ()],
@@ -1609,6 +1480,125 @@ public function getTestData(): iterable
1609
1480
FROM QueryResult\Entities\One o
1610
1481
' ,
1611
1482
];
1483
+
1484
+ yield from $ this ->yieldConditionalDataset ();
1485
+ }
1486
+
1487
+ /**
1488
+ * @return iterable<mixed>
1489
+ */
1490
+ private function yieldConditionalDataset (): iterable
1491
+ {
1492
+ if (property_exists (Column::class, 'enumType ' ) && PHP_VERSION_ID >= 80100 ) {
1493
+ assert (class_exists (StringEnum::class));
1494
+ assert (class_exists (IntEnum::class));
1495
+
1496
+ // https://github.com/doctrine/orm/issues/9622
1497
+ if (!$ this ->isDoctrine211 ()) {
1498
+ yield 'enum ' => [
1499
+ $ this ->constantArray ([
1500
+ [new ConstantStringType ('stringEnumColumn ' ), new ObjectType (StringEnum::class)],
1501
+ [new ConstantStringType ('intEnumColumn ' ), new ObjectType (IntEnum::class)],
1502
+ ]),
1503
+ '
1504
+ SELECT e.stringEnumColumn, e.intEnumColumn
1505
+ FROM QueryResult\EntitiesEnum\EntityWithEnum e
1506
+ ' ,
1507
+ ];
1508
+ }
1509
+
1510
+ yield 'enum in expression ' => [
1511
+ $ this ->constantArray ([
1512
+ [
1513
+ new ConstantIntegerType (1 ),
1514
+ new StringType (),
1515
+ ],
1516
+ [
1517
+ new ConstantIntegerType (2 ),
1518
+ new IntegerType (),
1519
+ ],
1520
+ [
1521
+ new ConstantIntegerType (3 ),
1522
+ $ this ->numericString (),
1523
+ ],
1524
+ ]),
1525
+ '
1526
+ SELECT COALESCE(e.stringEnumColumn, e.stringEnumColumn),
1527
+ COALESCE(e.intEnumColumn, e.intEnumColumn),
1528
+ COALESCE(e.intEnumOnStringColumn, e.intEnumOnStringColumn)
1529
+ FROM QueryResult\EntitiesEnum\EntityWithEnum e
1530
+ ' ,
1531
+ ];
1532
+ }
1533
+
1534
+ if (PHP_VERSION_ID >= 70400 ) {
1535
+ yield 'locate function ' => [
1536
+ $ this ->constantArray ([
1537
+ [new ConstantIntegerType (1 ), $ this ->uintOrStringified ()],
1538
+ [new ConstantIntegerType (2 ), TypeCombinator::addNull ($ this ->uintOrStringified ())],
1539
+ [new ConstantIntegerType (3 ), TypeCombinator::addNull ($ this ->uintOrStringified ())],
1540
+ [new ConstantIntegerType (4 ), $ this ->uintOrStringified ()],
1541
+ ]),
1542
+ '
1543
+ SELECT LOCATE(m.stringColumn, m.stringColumn, 0),
1544
+ LOCATE(m.stringNullColumn, m.stringColumn, 0),
1545
+ LOCATE(m.stringColumn, m.stringNullColumn, 0),
1546
+ LOCATE( \'f \', \'foo \', 0)
1547
+ FROM QueryResult\Entities\Many m
1548
+ ' ,
1549
+ null ,
1550
+ InstalledVersions::satisfies (new VersionParser (), 'doctrine/dbal ' , '>=3.4 ' )
1551
+ ? null
1552
+ : (
1553
+ PHP_VERSION_ID >= 80100
1554
+ ? 'strpos(): Passing null to parameter #2 ($needle) of type string is deprecated '
1555
+ : (
1556
+ PHP_VERSION_ID < 80000
1557
+ ? 'strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior '
1558
+ : null
1559
+ )
1560
+ ),
1561
+ ];
1562
+ }
1563
+
1564
+ $ ormVersion = InstalledVersions::getVersion ('doctrine/orm ' );
1565
+ $ hasOrm3 = $ ormVersion !== null && strpos ($ ormVersion , '3. ' ) === 0 ;
1566
+
1567
+ if ($ hasOrm3 ) {
1568
+ return ;
1569
+ }
1570
+
1571
+ yield 'date_add function ' => [
1572
+ $ this ->constantArray ([
1573
+ [new ConstantIntegerType (1 ), new StringType ()],
1574
+ [new ConstantIntegerType (2 ), TypeCombinator::addNull (new StringType ())],
1575
+ [new ConstantIntegerType (3 ), TypeCombinator::addNull (new StringType ())],
1576
+ [new ConstantIntegerType (4 ), new StringType ()],
1577
+ ]),
1578
+ '
1579
+ SELECT DATE_ADD(m.datetimeColumn, m.intColumn, \'day \'),
1580
+ DATE_ADD(m.stringNullColumn, m.intColumn, \'day \'),
1581
+ DATE_ADD(m.datetimeColumn, NULLIF(m.intColumn, 1), \'day \'),
1582
+ DATE_ADD( \'2020-01-01 \', 7, \'day \')
1583
+ FROM QueryResult\Entities\Many m
1584
+ ' ,
1585
+ ];
1586
+
1587
+ yield 'date_sub function ' => [
1588
+ $ this ->constantArray ([
1589
+ [new ConstantIntegerType (1 ), new StringType ()],
1590
+ [new ConstantIntegerType (2 ), TypeCombinator::addNull (new StringType ())],
1591
+ [new ConstantIntegerType (3 ), TypeCombinator::addNull (new StringType ())],
1592
+ [new ConstantIntegerType (4 ), new StringType ()],
1593
+ ]),
1594
+ '
1595
+ SELECT DATE_SUB(m.datetimeColumn, m.intColumn, \'day \'),
1596
+ DATE_SUB(m.stringNullColumn, m.intColumn, \'day \'),
1597
+ DATE_SUB(m.datetimeColumn, NULLIF(m.intColumn, 1), \'day \'),
1598
+ DATE_SUB( \'2020-01-01 \', 7, \'day \')
1599
+ FROM QueryResult\Entities\Many m
1600
+ ' ,
1601
+ ];
1612
1602
}
1613
1603
1614
1604
/**
0 commit comments