@@ -442,11 +442,11 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
442442 switch ($ operator ) {
443443 case 'begins-with ' :
444444 $ includeDefault = str_starts_with ((string )($ defaultValue ?? '' ), $ value );
445- $ filterExpression = $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
445+ $ filterExpression = $ qb ->expr ()->ilike ('value ' , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
446446 break ;
447447 case 'ends-with ' :
448448 $ includeDefault = str_ends_with ((string )($ defaultValue ?? '' ), $ value );
449- $ filterExpression = $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType ));
449+ $ filterExpression = $ qb ->expr ()->ilike ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType ));
450450 break ;
451451 case 'contains ' :
452452 $ filterExpressions = [];
@@ -477,14 +477,14 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
477477 if ($ column ->getType () === 'selection ' && $ column ->getSubtype () === 'multi ' ) {
478478 $ value = str_replace (['" ' , '\'' ], '' , $ value );
479479 $ filterExpression = $ qb2 ->expr ()->orX (
480- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
481- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
482- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
483- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
480+ $ qb ->expr ()->ilike ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
481+ $ qb ->expr ()->ilike ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
482+ $ qb ->expr ()->ilike ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
483+ $ qb ->expr ()->ilike ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
484484 );
485485 break ;
486486 }
487- $ filterExpression = $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
487+ $ filterExpression = $ qb ->expr ()->ilike ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
488488 break ;
489489 case 'does-not-contain ' :
490490 if (is_array ($ value ) && $ column ->getType () === Column::TYPE_USERGROUP ) {
@@ -522,14 +522,15 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
522522 if ($ column ->getType () === 'selection ' && $ column ->getSubtype () === 'multi ' ) {
523523 $ value = str_replace (['" ' , '\'' ], '' , $ value );
524524 $ filterExpression = $ qb2 ->expr ()->andX (
525- $ qb ->expr ()->notLike ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
526- $ qb ->expr ()->notLike ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
527- $ qb ->expr ()->notLike ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
528- $ qb ->expr ()->notLike ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
529- );
525+ $ qb ->expr ()->andX (
526+ $ this ->notILike ($ qb , 'value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
527+ $ this ->notILike ($ qb , 'value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
528+ $ this ->notILike ($ qb , 'value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
529+ $ this ->notILike ($ qb , 'value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
530+ ));
530531 break ;
531532 }
532- $ filterExpression = $ qb -> expr ()-> notLike ( 'value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
533+ $ filterExpression = $ this -> notILike ( $ qb , 'value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
533534 break ;
534535 case 'is-equal ' :
535536 $ includeDefault = $ defaultValue === $ value ;
@@ -618,6 +619,19 @@ private function getMetaFilterExpression(IQueryBuilder $qb, int $columnId, strin
618619 return $ qb2 ;
619620 }
620621
622+ /**
623+ * Helper method to use notILike if available, otherwise fall back to not(iLike(...))
624+ */
625+ private function notILike (IQueryBuilder $ qb , string $ column , $ parameter ): string {
626+ $ expr = $ qb ->expr ();
627+ // Nextcloud v35 introduced shortcut method
628+ if (method_exists ($ expr , 'notILike ' )) {
629+ return $ expr ->notILike ($ column , $ parameter );
630+ }
631+
632+ return 'NOT ( ' . $ expr ->iLike ($ column , $ parameter ) . ') ' ;
633+ }
634+
621635 /**
622636 * @param string $operator
623637 * @param IQueryBuilder $qb
@@ -630,13 +644,13 @@ private function getMetaFilterExpression(IQueryBuilder $qb, int $columnId, strin
630644 private function getSqlOperator (string $ operator , IQueryBuilder $ qb , string $ columnName , $ value , $ paramType ): string {
631645 switch ($ operator ) {
632646 case 'begins-with ' :
633- return $ qb ->expr ()->like ($ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType ));
647+ return $ qb ->expr ()->ilike ($ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType ));
634648 case 'ends-with ' :
635- return $ qb ->expr ()->like ($ columnName , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
649+ return $ qb ->expr ()->ilike ($ columnName , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
636650 case 'contains ' :
637- return $ qb ->expr ()->like ($ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
651+ return $ qb ->expr ()->ilike ($ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
638652 case 'does-not-contain ' :
639- return $ qb -> expr ()-> notLike ( $ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
653+ return $ this -> notILike ( $ qb , $ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
640654 case 'is-equal ' :
641655 return $ qb ->expr ()->eq ($ columnName , $ qb ->createNamedParameter ($ value , $ paramType ));
642656 case 'is-not-equal ' :
0 commit comments