diff options
author | Amir Sarabadani <ladsgroup@gmail.com> | 2023-11-01 22:11:17 +0100 |
---|---|---|
committer | Amir Sarabadani <ladsgroup@gmail.com> | 2023-11-03 02:03:44 +0100 |
commit | f60e576c69731904227f137aba0377818354cc34 (patch) | |
tree | 86a4357854c974b2246d505fb4d6ebf27594050e /includes/ExternalLinks | |
parent | cbacde72b2419370b74c87c6af4d904acc005a1e (diff) | |
download | mediawikicore-f60e576c69731904227f137aba0377818354cc34.tar.gz mediawikicore-f60e576c69731904227f137aba0377818354cc34.zip |
rdbms: Add support for LIKE in expression builder
Bug: T210206
Change-Id: Iec33a64bb1ec1485ce91b8b05e660f8c1723182b
Diffstat (limited to 'includes/ExternalLinks')
-rw-r--r-- | includes/ExternalLinks/LinkFilter.php | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/includes/ExternalLinks/LinkFilter.php b/includes/ExternalLinks/LinkFilter.php index ca994602c170..7ed7afb75617 100644 --- a/includes/ExternalLinks/LinkFilter.php +++ b/includes/ExternalLinks/LinkFilter.php @@ -26,8 +26,11 @@ use MediaWiki\MediaWikiServices; use StringUtils; use TextContent; use Wikimedia\IPUtils; +use Wikimedia\Rdbms\AndExpressionGroup; +use Wikimedia\Rdbms\IExpression; use Wikimedia\Rdbms\LikeMatch; -use Wikimedia\Rdbms\Platform\ISQLPlatform; +use Wikimedia\Rdbms\LikeValue; +use Wikimedia\Rdbms\OrExpressionGroup; /** * Utilities for formatting and querying the externallinks table. @@ -361,15 +364,16 @@ class LinkFilter { if ( $options['oneWildcard'] && $likePath[0] != '/' ) { $thisDomainConditions[] = $db->expr( 'el_to_domain_index', '=', $index1 ); } else { - $thisDomainConditions[] = "el_to_domain_index" . $db->buildLike( $index1, $db->anyString() ); + $thisDomainConditions[] = $db->expr( + 'el_to_domain_index', + IExpression::LIKE, + new LikeValue( $index1, $db->anyString() ) + ); } foreach ( $domainGaps[$index1] ?? [] as $from => $to ) { - $thisDomainConditions[] = $db->makeList( [ - $db->expr( 'el_id', '<', $from ), - $db->expr( 'el_id', '>', $to ), - ], ISQLPlatform::LIST_OR ); + $thisDomainConditions[] = $db->expr( 'el_id', '<', $from )->or( 'el_id', '>', $to ); } - $domainConditions[] = $db->makeList( $thisDomainConditions, ISQLPlatform::LIST_AND ); + $domainConditions[] = new AndExpressionGroup( ...$thisDomainConditions ); } if ( !$domainConditions ) { @@ -383,8 +387,8 @@ class LinkFilter { $index2 = implode( '', $trimmedlikePath ); return [ - $db->makeList( $domainConditions, ISQLPlatform::LIST_OR ), - "el_to_path" . $db->buildLike( $index2, $db->anyString() ), + new OrExpressionGroup( ...$domainConditions ), + $db->expr( 'el_to_path', IExpression::LIKE, new LikeValue( $index2, $db->anyString() ) ), ]; } |