Commit graph

11 commits

Author SHA1 Message Date
Brad Jorsch
e7be66b4d7 ApiQueryAllDeletedRevisions: More namespace handling fixes
* If the user specifically requests an empty list of namespaces, they
  should get no pages.
* `ar_namespace` should always be in the query so MySQL can do a range
  search instead of a full index scan.
* The example provided didn't match its description.

Bug: T89665
Change-Id: I91afc25db488f75c7f2b1ef343766b4bd7da5472
2016-08-31 13:19:13 -04:00
Kunal Mehta
6e9b4f0e9c Convert all array() syntax to []
Per wikitech-l consensus:
 https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html

Notes:
* Disabled CallTimePassByReference due to false positives (T127163)

Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
2016-02-17 01:33:00 -08:00
Thiemo Mättig
3ecd418501 ApiBase::PARAM_DFLT => null is the default anyway
Change-Id: Ic3deeb6b3d7cacbdb85da9ba3cb19051c1182b8f
2015-10-05 10:56:32 +02:00
jeroendedauw
220e5c4482 Remove unused $pageSet var
Change-Id: Ic9c8bf9ed840703128a4c0e873ef7d70b6155494
2015-09-24 19:06:59 +02:00
jenkins-bot
8897fc1f47 Merge "ApiQueryDeletedRevisions: Optimize ascending title generation" 2015-09-09 23:59:50 +00:00
jeroendedauw
21d213ff01 Remove dead local var in ApiQueryAllDeletedRevisions
Need tools to find these is the methods are that huge >_>

Change-Id: I8571aee1459f318e147fa5b4e740432cdeadbfe1
2015-09-07 21:47:28 +02:00
Brad Jorsch
11cf19d3ff ApiQueryDeletedRevisions: Optimize ascending title generation
When generating titles rather than revids, it would be nice if we could
query with DISTINCT to get the titles directly instead of processing
every deleted revision for the title.

Sadly, it turns out this only works with dir=newer (dir=older is the
default). But that's probably better than nothing.

Bug: T110792
Change-Id: Idd300510c92b00722574d046399dbeb486afa98b
2015-09-04 20:45:56 +00:00
Brad Jorsch
1c57794e37 API: Overhaul ApiResult, make format=xml not throw, and add json formatversion
ApiResult was a mess: some methods could only be used with an array
reference instead of manipulating the stored data, methods that had both
array-ref and internal-data versions had names that didn't at all
correspond, some methods that worked on an array reference were
annoyingly non-static, and then the whole mess with setIndexedTagName.

ApiFormatXml is also entirely annoying to deal with, as it liked to
throw exceptions if certain metadata wasn't provided that no other
formatter required. Its legacy also means we have this silly convention
of using empty-string rather than boolean true, annoying restrictions on
keys (leading to things that should be hashes being arrays of key-value
object instead), '*' used as a key all over the place, and so on.

So, changes here:
* ApiResult is no longer an ApiBase or a ContextSource.
* Wherever sensible, ApiResult provides a static method working on an
  arrayref and a non-static method working on internal data.
* Metadata is now always added to ApiResult's internal data structure.
  Formatters are responsible for stripping it if necessary. "raw mode"
  is deprecated.
* New metadata to replace the '*' key, solve the array() => '[]' vs '{}'
  question, and so on.
* New class for formatting warnings and errors using i18n messages, and
  support for multiple errors and a more machine-readable format for
  warnings. For the moment, though, the actual output will not be changing
  yet (see T47843 for future plans).
* New formatversion parameter for format=json and format=php, to select
  between BC mode and the modern output.
* In BC mode, booleans will be converted to empty-string presence style;
  modules currently returning booleans will need to use
  ApiResult::META_BC_BOOLS to preserve their current output.

Actual changes to the API modules' output (e.g. actually returning
booleans for the new formatversion) beyond the use of
ApiResult::setContentValue() are left for a future change.

Bug: T76728
Bug: T57371
Bug: T33629
Change-Id: I7b37295e8862b188d1f3b0cd07f66ac34629678f
2015-04-10 16:57:15 -04:00
Brad Jorsch
0de446206a API: Fix namespace handling in list=alldeletedrevs with from/to/predix
We don't have just one namespace like the code we copied this from. And
to avoid a repeat of bug 25702, we have to handle the case where the
title/prefix might be being transformed differently in all the requested
namespaces.

Bug: T75711
Change-Id: I5267847fe876c971aaf358d2c6fe4006e4645939
2014-11-24 10:14:37 -05:00
umherirrender
4b99ac91bc Refactor content fetch condition in ApiQueryRevisionsBase
Use a member variable to make the ifs easier to maintain.

Change-Id: I535740094708c563298a8b8d34027519d3900758
2014-11-10 18:50:36 +01:00
Brad Jorsch
991de897e4 API: Split list=deletedrevs into prop=deletedrevisions and list=alldeletedrevisions
list=deletedrevs has always been an odd one: it pretends to be a prop
module sometimes in taking titles from ApiPageSet, but when the pageset
supplies no titles it acts like a list module. This causes problems
such as bug 71389, and makes the whole thing unnecessarily confusing.

The solution is to split the "prop" and "list" aspects into separate
modules: prop=deletedrevisions when input should come from ApiPageSet
and list=alldeletedrevisions when not.

At the same time, let's take advantage of the situation to clear up some
other bugs. And let's share the revision-formatting code with
ApiQueryRevisions instead of partially reimplementing it.

Bug: 23489
Bug: 27193
Bug: 44190
Bug: 71396
Bug: 71389
Change-Id: I3e960d5c655bc57885d6d4ee227e67104808add7
2014-11-04 15:02:03 -05:00