Skip to content

Commit 663bce7

Browse files
committed
Associations cannot use like operator
This is a breaking change in schema, since an operator is removed for some filters. However this is not a breaking change for using apps, because it never worked and always crashed PHP.
1 parent 6ad0f04 commit 663bce7

File tree

3 files changed

+38
-37
lines changed

3 files changed

+38
-37
lines changed

src/Factory/Type/FilterGroupConditionTypeFactory.php

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -194,31 +194,35 @@ private function getFieldConfiguration(string $typeName, string $fieldName, arra
194194
*/
195195
private function getOperators(string $fieldName, LeafType $leafType, bool $isAssociation, bool $isCollection): array
196196
{
197-
$scalarOperators = [
198-
BetweenOperatorType::class,
199-
EqualOperatorType::class,
200-
GreaterOperatorType::class,
201-
GreaterOrEqualOperatorType::class,
202-
InOperatorType::class,
203-
LessOperatorType::class,
204-
LessOrEqualOperatorType::class,
205-
LikeOperatorType::class,
206-
NullOperatorType::class,
207-
GroupOperatorType::class,
208-
];
209-
210-
$associationOperators = [
211-
HaveOperatorType::class,
212-
EmptyOperatorType::class,
213-
];
214-
197+
// For a single pure scalar
215198
$operatorKeys = [];
199+
if (!$isAssociation && !$isCollection) {
200+
array_push($operatorKeys, ...[
201+
LikeOperatorType::class,
202+
]);
203+
}
204+
205+
// An association can share some operators independently if it's a single entity or collection of entities
216206
if ($isAssociation) {
217-
$operatorKeys = array_merge($operatorKeys, $associationOperators);
207+
array_push($operatorKeys, ...[
208+
HaveOperatorType::class,
209+
EmptyOperatorType::class,
210+
]);
218211
}
219212

213+
// We can share most operators for scalar and single entity association
220214
if (!$isCollection) {
221-
$operatorKeys = array_merge($operatorKeys, $scalarOperators);
215+
array_push($operatorKeys, ...[
216+
BetweenOperatorType::class,
217+
EqualOperatorType::class,
218+
GreaterOperatorType::class,
219+
GreaterOrEqualOperatorType::class,
220+
InOperatorType::class,
221+
LessOperatorType::class,
222+
LessOrEqualOperatorType::class,
223+
NullOperatorType::class,
224+
GroupOperatorType::class,
225+
]);
222226
}
223227

224228
$operators = array_fill_keys($operatorKeys, $leafType);

tests/data/ModelWithTraitsFilter.graphqls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,14 @@ input ModelWithTraitsFilterGroupConditionCustomFromTrait {
9090

9191
"""Type to specify a condition on a specific field"""
9292
input ModelWithTraitsFilterGroupConditionId {
93+
like: LikeOperatorID
9394
between: BetweenOperatorID
9495
equal: EqualOperatorID
9596
greater: GreaterOperatorID
9697
greaterOrEqual: GreaterOrEqualOperatorID
9798
in: InOperatorID
9899
less: LessOperatorID
99100
lessOrEqual: LessOrEqualOperatorID
100-
like: LikeOperatorID
101101
null: NullOperatorID
102102
group: GroupOperatorID
103103
}

tests/data/PostFilter.graphqls

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -336,28 +336,28 @@ input NoInversedByFilterGroupCondition {
336336

337337
"""Type to specify a condition on a specific field"""
338338
input NoInversedByFilterGroupConditionCreationDate {
339+
like: LikeOperatorDateTime
339340
between: BetweenOperatorDateTime
340341
equal: EqualOperatorDateTime
341342
greater: GreaterOperatorDateTime
342343
greaterOrEqual: GreaterOrEqualOperatorDateTime
343344
in: InOperatorDateTime
344345
less: LessOperatorDateTime
345346
lessOrEqual: LessOrEqualOperatorDateTime
346-
like: LikeOperatorDateTime
347347
null: NullOperatorDateTime
348348
group: GroupOperatorDateTime
349349
}
350350

351351
"""Type to specify a condition on a specific field"""
352352
input NoInversedByFilterGroupConditionId {
353+
like: LikeOperatorID
353354
between: BetweenOperatorID
354355
equal: EqualOperatorID
355356
greater: GreaterOperatorID
356357
greaterOrEqual: GreaterOrEqualOperatorID
357358
in: InOperatorID
358359
less: LessOperatorID
359360
lessOrEqual: LessOrEqualOperatorID
360-
like: LikeOperatorID
361361
null: NullOperatorID
362362
group: GroupOperatorID
363363
modulo: ModuloOperatorInt
@@ -420,28 +420,28 @@ input PostFilterGroupCondition {
420420

421421
"""Type to specify a condition on a specific field"""
422422
input PostFilterGroupConditionBody {
423+
like: LikeOperatorString
423424
between: BetweenOperatorString
424425
equal: EqualOperatorString
425426
greater: GreaterOperatorString
426427
greaterOrEqual: GreaterOrEqualOperatorString
427428
in: InOperatorString
428429
less: LessOperatorString
429430
lessOrEqual: LessOrEqualOperatorString
430-
like: LikeOperatorString
431431
null: NullOperatorString
432432
group: GroupOperatorString
433433
}
434434

435435
"""Type to specify a condition on a specific field"""
436436
input PostFilterGroupConditionCreationDate {
437+
like: LikeOperatorDateTime
437438
between: BetweenOperatorDateTime
438439
equal: EqualOperatorDateTime
439440
greater: GreaterOperatorDateTime
440441
greaterOrEqual: GreaterOrEqualOperatorDateTime
441442
in: InOperatorDateTime
442443
less: LessOperatorDateTime
443444
lessOrEqual: LessOrEqualOperatorDateTime
444-
like: LikeOperatorDateTime
445445
null: NullOperatorDateTime
446446
group: GroupOperatorDateTime
447447
}
@@ -453,14 +453,14 @@ input PostFilterGroupConditionCustom {
453453

454454
"""Type to specify a condition on a specific field"""
455455
input PostFilterGroupConditionId {
456+
like: LikeOperatorID
456457
between: BetweenOperatorID
457458
equal: EqualOperatorID
458459
greater: GreaterOperatorID
459460
greaterOrEqual: GreaterOrEqualOperatorID
460461
in: InOperatorID
461462
less: LessOperatorID
462463
lessOrEqual: LessOrEqualOperatorID
463-
like: LikeOperatorID
464464
null: NullOperatorID
465465
group: GroupOperatorID
466466
modulo: ModuloOperatorInt
@@ -477,49 +477,48 @@ input PostFilterGroupConditionNoInversedBy {
477477
in: InOperatorID
478478
less: LessOperatorID
479479
lessOrEqual: LessOrEqualOperatorID
480-
like: LikeOperatorID
481480
null: NullOperatorID
482481
group: GroupOperatorID
483482
}
484483

485484
"""Type to specify a condition on a specific field"""
486485
input PostFilterGroupConditionPublicationDate {
486+
like: LikeOperatorDateTime
487487
between: BetweenOperatorDateTime
488488
equal: EqualOperatorDateTime
489489
greater: GreaterOperatorDateTime
490490
greaterOrEqual: GreaterOrEqualOperatorDateTime
491491
in: InOperatorDateTime
492492
less: LessOperatorDateTime
493493
lessOrEqual: LessOrEqualOperatorDateTime
494-
like: LikeOperatorDateTime
495494
null: NullOperatorDateTime
496495
group: GroupOperatorDateTime
497496
}
498497

499498
"""Type to specify a condition on a specific field"""
500499
input PostFilterGroupConditionStatus {
500+
like: LikeOperatorPostStatus
501501
between: BetweenOperatorPostStatus
502502
equal: EqualOperatorPostStatus
503503
greater: GreaterOperatorPostStatus
504504
greaterOrEqual: GreaterOrEqualOperatorPostStatus
505505
in: InOperatorPostStatus
506506
less: LessOperatorPostStatus
507507
lessOrEqual: LessOrEqualOperatorPostStatus
508-
like: LikeOperatorPostStatus
509508
null: NullOperatorPostStatus
510509
group: GroupOperatorPostStatus
511510
}
512511

513512
"""Type to specify a condition on a specific field"""
514513
input PostFilterGroupConditionTitle {
514+
like: LikeOperatorString
515515
between: BetweenOperatorString
516516
equal: EqualOperatorString
517517
greater: GreaterOperatorString
518518
greaterOrEqual: GreaterOrEqualOperatorString
519519
in: InOperatorString
520520
less: LessOperatorString
521521
lessOrEqual: LessOrEqualOperatorString
522-
like: LikeOperatorString
523522
null: NullOperatorString
524523
group: GroupOperatorString
525524
}
@@ -535,7 +534,6 @@ input PostFilterGroupConditionUser {
535534
in: InOperatorID
536535
less: LessOperatorID
537536
lessOrEqual: LessOrEqualOperatorID
538-
like: LikeOperatorID
539537
null: NullOperatorID
540538
group: GroupOperatorID
541539
}
@@ -568,57 +566,57 @@ input UserFilterGroupCondition {
568566

569567
"""Type to specify a condition on a specific field"""
570568
input UserFilterGroupConditionCreationDate {
569+
like: LikeOperatorDateTime
571570
between: BetweenOperatorDateTime
572571
equal: EqualOperatorDateTime
573572
greater: GreaterOperatorDateTime
574573
greaterOrEqual: GreaterOrEqualOperatorDateTime
575574
in: InOperatorDateTime
576575
less: LessOperatorDateTime
577576
lessOrEqual: LessOrEqualOperatorDateTime
578-
like: LikeOperatorDateTime
579577
null: NullOperatorDateTime
580578
group: GroupOperatorDateTime
581579
}
582580

583581
"""Type to specify a condition on a specific field"""
584582
input UserFilterGroupConditionEmail {
583+
like: LikeOperatorString
585584
between: BetweenOperatorString
586585
equal: EqualOperatorString
587586
greater: GreaterOperatorString
588587
greaterOrEqual: GreaterOrEqualOperatorString
589588
in: InOperatorString
590589
less: LessOperatorString
591590
lessOrEqual: LessOrEqualOperatorString
592-
like: LikeOperatorString
593591
null: NullOperatorString
594592
group: GroupOperatorString
595593
}
596594

597595
"""Type to specify a condition on a specific field"""
598596
input UserFilterGroupConditionId {
597+
like: LikeOperatorID
599598
between: BetweenOperatorID
600599
equal: EqualOperatorID
601600
greater: GreaterOperatorID
602601
greaterOrEqual: GreaterOrEqualOperatorID
603602
in: InOperatorID
604603
less: LessOperatorID
605604
lessOrEqual: LessOrEqualOperatorID
606-
like: LikeOperatorID
607605
null: NullOperatorID
608606
group: GroupOperatorID
609607
modulo: ModuloOperatorInt
610608
}
611609

612610
"""Type to specify a condition on a specific field"""
613611
input UserFilterGroupConditionIsAdministrator {
612+
like: LikeOperatorBoolean
614613
between: BetweenOperatorBoolean
615614
equal: EqualOperatorBoolean
616615
greater: GreaterOperatorBoolean
617616
greaterOrEqual: GreaterOrEqualOperatorBoolean
618617
in: InOperatorBoolean
619618
less: LessOperatorBoolean
620619
lessOrEqual: LessOrEqualOperatorBoolean
621-
like: LikeOperatorBoolean
622620
null: NullOperatorBoolean
623621
group: GroupOperatorBoolean
624622
}
@@ -634,21 +632,20 @@ input UserFilterGroupConditionManager {
634632
in: InOperatorID
635633
less: LessOperatorID
636634
lessOrEqual: LessOrEqualOperatorID
637-
like: LikeOperatorID
638635
null: NullOperatorID
639636
group: GroupOperatorID
640637
}
641638

642639
"""Type to specify a condition on a specific field"""
643640
input UserFilterGroupConditionName {
641+
like: LikeOperatorString
644642
between: BetweenOperatorString
645643
equal: EqualOperatorString
646644
greater: GreaterOperatorString
647645
greaterOrEqual: GreaterOrEqualOperatorString
648646
in: InOperatorString
649647
less: LessOperatorString
650648
lessOrEqual: LessOrEqualOperatorString
651-
like: LikeOperatorString
652649
null: NullOperatorString
653650
group: GroupOperatorString
654651
}

0 commit comments

Comments
 (0)