Hey Tim,
I really like this new feature—thanks for making it happen! It reminds me of the fluent
SQL builder[1] that Owen presented at the 2014 Architecture Summit.[2] While integration
with that library was ultimately rejected, I wonder if there are any useful concepts or
features that could be cherry-picked from there to enhance the functionality of
MediaWiki’s new query builder.
What do you think?
—
[1]
https://github.com/Wikia/fluent-sql-php
[2]
https://www.mediawiki.org/wiki/Architecture_Summit_2014/SQL_abstraction
Cheers,
Máté Szabó
SOFTWARE ENGINEER
he - him - his
Fandom Poland sp. z o.o. z siedzibą w Poznaniu, ul. Abp. A. Baraniaka 6
Sąd Rejonowy Poznań – Nowe Miasto i Wilda w Poznaniu, VIII Wydział Gospodarczy Krajowego
Rejestru Sądowego, KRS 0000254365
NIP: 5252358778
Kapitał zakładowy: 50.000,00 złotych
On 22 May 2020, at 03:37, Tim Starling
<tstarling(a)wikimedia.org> wrote:
SelectQueryBuilder is a new fluent interface for constructing database
queries, which has been merged to master for release in MediaWiki
1.35. Please consider using it in new code.
SELECT page_id FROM page
WHERE page_namespace=$namespace AND page_title=$title
becomes
$id = $db->newSelectQueryBuilder()
->select( 'page_id' )
->from( 'page' )
->where( [
'page_namespace' => $namespace,
'page_title' => $title,
] )
->fetchField();
As explained on the design task T243051, SelectQueryBuilder was
loosely based on the query builder in Doctrine, but I made an effort
to respect existing MediaWiki conventions, to make migration easy.
SelectQueryBuilder is easy to use for simple cases, but has the most
impact on readability when it is used for complex queries. That's why
I chose to migrate the showIndirectLinks query in
Special:WhatLinksHere as a pilot -- it was one of the gnarliest
queries in core.
SelectQueryBuilder excels at building joins, including parenthesized
(nested) joins and joins on subqueries.
SelectQueryBuilder can be used as a structured alternative to the
"query info" pattern, in which the parameters to Database::select()
are stored in an associative array. It can convert to and from such
arrays. As a pilot of this functionality, I converted ApiQueryBase to
use a SelectQueryBuilder to store accumulated query info.
Check it out!
-- Tim Starling
_______________________________________________
Wikitech-l mailing list
Wikitech-l(a)lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l