@@ -434,11 +434,11 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
434434 switch ($ operator ) {
435435 case 'begins-with ' :
436436 $ includeDefault = str_starts_with ((string )($ defaultValue ?? '' ), (string )$ value );
437- $ filterExpression = $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
437+ $ filterExpression = $ qb ->expr ()->iLike ('value ' , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
438438 break ;
439439 case 'ends-with ' :
440440 $ includeDefault = str_ends_with ((string )($ defaultValue ?? '' ), (string )$ value );
441- $ filterExpression = $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType ));
441+ $ filterExpression = $ qb ->expr ()->iLike ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType ));
442442 break ;
443443 case 'contains ' :
444444 $ filterExpressions = [];
@@ -469,14 +469,14 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
469469 if ($ column ->getType () === 'selection ' && $ column ->getSubtype () === 'multi ' ) {
470470 $ value = str_replace (['" ' , '\'' ], '' , $ value );
471471 $ filterExpression = $ qb2 ->expr ()->orX (
472- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
473- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
474- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
475- $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
472+ $ qb ->expr ()->iLike ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
473+ $ qb ->expr ()->iLike ('value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
474+ $ qb ->expr ()->iLike ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
475+ $ qb ->expr ()->iLike ('value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
476476 );
477477 break ;
478478 }
479- $ filterExpression = $ qb ->expr ()->like ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
479+ $ filterExpression = $ qb ->expr ()->iLike ('value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
480480 break ;
481481 case 'does-not-contain ' :
482482 if (is_array ($ value ) && $ column ->getType () === Column::TYPE_USERGROUP ) {
@@ -514,14 +514,14 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
514514 if ($ column ->getType () === 'selection ' && $ column ->getSubtype () === 'multi ' ) {
515515 $ value = str_replace (['" ' , '\'' ], '' , $ value );
516516 $ filterExpression = $ qb2 ->expr ()->andX (
517- $ qb -> expr ()-> notLike ( 'value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
518- $ qb -> expr ()-> notLike ( 'value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
519- $ qb -> expr ()-> notLike ( 'value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
520- $ qb -> expr ()-> notLike ( 'value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
517+ $ this -> notILike ( $ qb , 'value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . '] ' )),
518+ $ this -> notILike ( $ qb , 'value ' , $ qb ->createNamedParameter ('[ ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' )),
519+ $ this -> notILike ( $ qb , 'value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ']% ' )),
520+ $ this -> notILike ( $ qb , 'value ' , $ qb ->createNamedParameter ('%, ' . $ this ->db ->escapeLikeParameter ($ value ) . ',% ' ))
521521 );
522522 break ;
523523 }
524- $ filterExpression = $ qb -> expr ()-> notLike ( 'value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
524+ $ filterExpression = $ this -> notILike ( $ qb , 'value ' , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType ));
525525 break ;
526526 case 'is-equal ' :
527527 $ includeDefault = $ defaultValue === $ value ;
@@ -601,6 +601,19 @@ private function getMetaFilterExpression(IQueryBuilder $qb, int $columnId, strin
601601 return $ qb2 ;
602602 }
603603
604+ /**
605+ * Helper method to use notILike if available, otherwise fall back to not(iLike(...))
606+ */
607+ private function notILike (IQueryBuilder $ qb , string $ column , $ parameter ): string {
608+ $ expr = $ qb ->expr ();
609+ // Nextcloud v35 introduced shortcut method
610+ if (method_exists ($ expr , 'notILike ' )) {
611+ return $ expr ->notILike ($ column , $ parameter );
612+ }
613+
614+ return 'NOT ( ' . $ expr ->iLike ($ column , $ parameter ) . ') ' ;
615+ }
616+
604617 /**
605618 * @param string $operator
606619 * @param IQueryBuilder $qb
@@ -612,10 +625,10 @@ private function getMetaFilterExpression(IQueryBuilder $qb, int $columnId, strin
612625 */
613626 private function getSqlOperator (string $ operator , IQueryBuilder $ qb , string $ columnName , $ value , $ paramType ): string {
614627 return match ($ operator ) {
615- 'begins-with ' => $ qb ->expr ()->like ($ columnName , $ qb ->createNamedParameter (' % ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType )),
616- 'ends-with ' => $ qb ->expr ()->like ($ columnName , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . ' % ' , $ paramType )),
617- 'contains ' => $ qb ->expr ()->like ($ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType )),
618- 'does-not-contain ' => $ qb -> expr ()-> notLike ( $ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType )),
628+ 'begins-with ' => $ qb ->expr ()->iLike ($ columnName , $ qb ->createNamedParameter ($ this ->db ->escapeLikeParameter ($ value ) . ' % ' , $ paramType )),
629+ 'ends-with ' => $ qb ->expr ()->iLike ($ columnName , $ qb ->createNamedParameter (' % ' . $ this ->db ->escapeLikeParameter ($ value ), $ paramType )),
630+ 'contains ' => $ qb ->expr ()->iLike ($ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType )),
631+ 'does-not-contain ' => $ this -> notILike ( $ qb , $ columnName , $ qb ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ value ) . '% ' , $ paramType )),
619632 'is-equal ' => $ qb ->expr ()->eq ($ columnName , $ qb ->createNamedParameter ($ value , $ paramType )),
620633 'is-not-equal ' => $ qb ->expr ()->neq ($ columnName , $ qb ->createNamedParameter ($ value , $ paramType )),
621634 'is-greater-than ' => $ qb ->expr ()->gt ($ columnName , $ qb ->createNamedParameter ($ value , $ paramType )),
0 commit comments