For some varargs a variable name is added with suffix ,... as seen for
many other varargs
Some @param are swapped, because there are in the wrong order
Enable Sniff MediaWiki.Commenting.FunctionComment.ParamNameNoMatch
Change-Id: I60fec6025bce824d5c67563ab7b65ad6cd628ad8
If no writes started a transaction yet, the callback would run
but not commit (by design, joining the request round). Later
writes will then pile on top of it.
The point of this method is to avoid such cases, so this edge
case has been fixed.
Change-Id: I9b44b19261d679de4aff6e44a9cfeb4f684ce02e
Constructs a query for the union of permutations of a set of fields, for
use in situations where the database otherwise makes poor plans due to
inability to use indexes effectively (e.g. T149077 and T168010).
Change-Id: I20980dcada664486c09198b8c45896620bd83e81
selectField() and selectFieldValues() are trivial, they just need to
pass it through to select(). In fact, selectFieldValues() was already
doing it, just no one ever updated IDatabase.
insertSelect() is a little more work. nativeInsertSelect() was
originally written as largely a copy-paste of select() and has since
gotten well out of sync. Now that we have selectSQLText(), we should be
able to just use that. DatabasePostgres's implementation can wrap the
parent implementation instead of being another copy-paste, but
DatabaseOracle seems to still need to be special.
Change-Id: I0e6a9e6daa510639d3212641606047a5db96c500
Will add @inheritdoc in a follow-up commit for functions
documented in the parent classes.
Part of 2017 MediaWiki Documentation Day
Change-Id: I002a1f6451940ecbcacea7b3ca2fc6ad0f4eba47
A new method is now available to check whether session scope
locks are supported, which callers typically want when using lock().
Its usage can avoid deadlock prone and expensive row-level locks for
some maintenance tasks.
For Postgres, table locks are tied to the transaction. Trigger
startAtomic() in lockTables() and endAtomic() in unlockTables() to
assure that a transaction is present.
Also remove LOW_PRIORITY feature, which is ignored by mysql.
Change-Id: I499061bcc2763afb1ff4a43319064eed4ba3a8fe
Move Sqlites's indexName to Database to have no remapping by default.
This is because MSSQL and Postgresql both don't need remapping, it's
just MySQL that's the problem.
So move the one from Database into MysqlBase to only do the remappings
there.
Also fix up the comments to make them less vague, not mentioning tables
when the function has no table parameter passed, so hence, no context
as to which table said index is wanted to be used
Bug: T154872
Change-Id: I46c575771e6cb36176bcf6cd1a865b703db0275d
Make table and column aliases be quoted identifiers. This
is needed for MSSQL (rowcount is a reserved word), and is
generally just a good idea.
I have tested this on MySql and SQLite. I don't have
MSSQL installed to test on.
Bug: T158766
Change-Id: Ic63f63d208ba6ad15e77eb634e94855ee2728d05
The TitleValue constructor, used by the link cache among other things,
throws an exception for DB keys which do not satisfy a simple sanity test
(starting or ending with _, or containing a space, tab, CR or LF
character). This has broken certain special pages on a number of WMF sites;
see T99736, T146778 and T155091.
The new cleanupInvalidDbKeys.php script allows these bogus entries to be
removed from the DB, making sure these exceptions won't be thrown in the
future. It cleans the title columns of the page, archive, redirect,
logging, category, protected_titles, recentchanges, watchlist, pagelinks,
templatelinks, and categorylinks tables.
The script doesn't support batching; most wikis should have fewer than 500
broken entries in each table. If need be, the script can be run several
times.
To make the LIKE queries work properly I had to fix the broken escaping
behaviour of Database::buildLike() -- previously it had a habit of double-
escaping things. Now an ESCAPE clause is added to change the escape
character from the problematic default backslash, and tests are added to
cover the changes.
Bug: T155091
Change-Id: I908e795e884e35be91852c0eaf056d6acfda31d8
Commented out in 033b6b9646 (r20329).
After ten years, I think it's safe to bet this won't ever be getting
un-commented.
Change-Id: Ibb1f3e2969b2d81f6f2a17fff57e9b05cc17d58b
It's unreasonable to expect newbies to know that "bug 12345" means "Task T14345"
except where it doesn't, so let's just standardise on the real numbers.
Skipping jsminplus.php as those bug numbers aren't Wikimedia's, nor obviously
someone else's.
Change-Id: I9a2210e17852ee56f11282b980ac66d8c7a95671
Leave \Blob as an alias. Callers can now use the Rdbms\Blob class
for "extends"/"new" and the Rdbms\IBlob interface for type hints.
Change-Id: I983b76f181ac60c1eb92c350cd27ad77ec90a192
Use of &$this doesn't work in PHP 7.1. For callbacks to methods like
array_map() it's completely unnecessary, while for hooks we still need
to pass a reference and so we need to copy $this into a local variable.
Bug: T153505
Change-Id: I8bbb26e248cd6f213fd0e7460d6d6935a3f9e468
* Use $tempIgnore in DatabaseBase::tableExists() instead of ignoreErrors().
* DatabasePostgres::reportQueryError(), since 419221e4a7, calls
ignoreErrors() before and after rollback(). This is probably not effective
as a recursion guard (reportQueryError() would be called regardless), and
for suppressing any log entry or exception, it is redundant (doRollback()
already sets $tempIgnore when calling query()).
* ignoreErrors(), now unused, can be removed in a separate change set.
Change-Id: Iee768abf996ece213146ab8f64a15a2b407a2e5e
This is useful when IMaintainableDatabase methods are needed
for foreign wiki connections to things like external store.
Also:
* Set visibility for ExternalStoreDB methods.
* Cleaned up various type hints and comments.
Change-Id: Ie35b1ff21032cc4e78912dc499486da23aeba041
Causes HHVM 3.12.7 to segfault and or:
Fatal error: Stack overflow in includes/libs/objectcache/BagOStuff.php on line 754
This reverts commit b47ce21cec.
Bug: T150833
Change-Id: Ia52fdf65f5e386c0eaa1046328680fb5c8a9081a
This works by setting a callback to return the cache set
options. The callback will watch DB reads and create a
merged result from said usage.
This handles callers that are missing getCacheSetOptions().
Change-Id: Ia264f011e45e8cf105480955dad7e2c4c2357b73
Use HTTPS instead of HTTP where the HTTP link is a redirect to the HTTPS link.
Also update some defect links.
Change-Id: Ic3a5eac910d098ed5c2a21e9f47c9b6ee06b2643
* Remove redundant schema prefix from relname=x query. The
schema filtering is already done via the JOIN. The relname
portion is just the table name not <schema>.<table name>.
* Avoid explicit table schema qualification and rely on the
search path, as MW 1.27 did. Previously it only used the
global $wgDBschema var to pass to determineCoreSchema()
instead of keeping it in mSchema.
* Clean up some code duplication in Database::tableName() and
make the code comments clearer.
* Make DatabasePostgres::tableName() use parent::tableName()
instead of a method that just wraps this method. The intent
seems clearer this way.
* Remove unused return value in
PostgresUpdater::rebuildTextSearch().
Bug: T148628
Change-Id: Id11d9576b7c2fdad22ff7f90727c12997217a632
* Remove non-connection magic case when no DB $user
is given. This was removed from the base class.
* Use PGSQL_CONNECT_FORCE_NEW to let LoadBalancer
handle connection reuse. This makes it work like
the mysql classes.
* Make postgres connection error messages actually
be useful by using the PHP error when possible.
This makes it clear if the problem is authentication
or something else and so on.
Change-Id: I3fd76c1e2db8d6008074f5347b201554579b549a