Commit graph

131 commits

Author SHA1 Message Date
Dereckson
60596ab27e Add DROP INDEX support to DatabaseSqlite::replaceVars method
DROP INDEX is database-wide (and not table-specific) in SQLite,
so we need to add a rule in our MySQL to SQLite schema convert.

"DROP INDEX foo ON bar" becomes "DROP INDEX foo".

Change-Id: Ie10784d166ed5a7f6ea52cf4f3a812fb7878a744
2013-10-15 22:32:28 +02:00
Chad Horohoe
7d1cd6c376 Remove silly test cases that are likely to fail
Nobody should be giving objects or arrays to addIdentifierQuotes() anyway

Change-Id: Ibebf5d32196ac5b80cd477aedfef982fd2c9a0e6
2013-10-09 18:14:42 -07:00
Bryan Davis
cfde3c1958 Escape backticks when quoting MySQL identifiers
Previously mysql_real_escape_string() was improperly used which escapes
for inclusion in a plain string rather than an identifier.

Also adds basic test support for the DatabaseMysqlBase class.

Co-Authored by: Antoine Musso <hashar@free.fr>
Bug: 55427
Change-Id: Ic045e195c89d8d5d0f0edbda0cd1df781de7025c
2013-10-09 15:43:45 -06:00
jenkins-bot
e0e8ba9226 Merge "Changed quoting function for oracleDB." 2013-09-18 19:10:52 +00:00
umherirrender
070e11da65 Added tests for new DatabaseBase::upsert
Follow up Id7fc6652
Pass function name to begin/rollback/commit
Use __METHOD__ as default param (see I86cbdeab)

Change-Id: I9eb326c035d4a604db5b3492f090d8dd9d21c920
2013-06-04 20:34:49 +02:00
freakolowsky
d06721d2a9 Changed quoting function for oracleDB.
Change-Id: Ifba624f62702740b6531d0dab082015cd2a235b4
2013-05-26 16:35:48 +02:00
jenkins-bot
ca15b909fb Merge "Made DatabaseBase::getSoftwareLink() dynamic." 2013-05-15 14:37:58 +00:00
Timo Tijhof
4bd5471ca3 docs: Remove odd colons after @todo
Most were this way already:
https://doc.wikimedia.org/mediawiki-core/master/php/html/todo.html

Ran a find/replace on the odd ones. Also made them all
lower case.

Change-Id: I70c6a69344ddebc603e9a1c1d87e3cc4f4f4c560
2013-05-15 06:23:40 +00:00
Aaron Schulz
be7b10166a Made DatabaseBase::getSoftwareLink() dynamic.
* All callers are calling it this way and it breaks
  hhvm when declared statically and called dynamically.

Change-Id: I894e615fd828615384aa8457a16a759c8aa416ef
2013-05-14 21:18:57 -07:00
umherirrender
c6894adefc Fixed spacing
Added spaces around some parenthesis

Change-Id: If1e50e2a7b0046e91c0bbce8bf6641d8b2446a1d
2013-05-09 19:48:10 +02:00
umherirrender
da0bf68e4c Exclude external_user table in DatabaseSqliteTest
Follow up I794338dbb75961ee033d41fa44bb7aa22e54f447

Change-Id: Ie83cb113be3911431ba36ef18286d6892364b0ca
2013-05-02 21:07:18 +02:00
Brent Garber
58c72e5aa6 Fix PHPUnit ORM Tests to work with Postgres
Change-Id: Ia4321727f6f1eab65c91d9876f87d51b545a72c2
2013-04-28 12:54:56 +00:00
Siebrand Mazeland
791d0b2a98 Update code formatting
Change-Id: I16a9b42651f1cfb1a70dffbb67b7b83dfeb90d03
2013-04-26 14:21:20 +00:00
umherirrender
302f4b0ce1 Add non DBMS depending SQL tests for DatabaseBase
Created a DatabaseTestHelper class, which extends DatabaseBase and
implements STUBs for the interface methods and abstract methods

Change-Id: I9965b3604e78b2722077a35a7b4ce62a5bcb370e
2013-04-16 09:38:30 +02:00
jenkins-bot
f4604544cd Merge "Test to make sure numRows() calls don't show unrelated errors" 2013-03-22 13:58:55 +00:00
Chad Horohoe
1b292fe465 Test to make sure numRows() calls don't show unrelated errors
Bug: 42430
Change-Id: Ie939785c1f75aa99bdf59e013d5ebf65e866289c
2013-03-22 13:51:07 +00:00
umherirrender
3dd97bf651 Use gettype only for debugging text
Changed some gettype == 'array', 'object' and similar to is_array,
is_object or similar

Output of gettype must not stable across versions and it is slow

Change-Id: I07bfc063b03be1200989dd6facee66b35ab51d77
2013-03-15 22:50:42 +01:00
nischayn22
b9b3d8821a (bug 37352) Boolean issue when using sqlite.
using a type cast instead, otherwise an empty string gets converted to
true when set with bool type.

Change-Id: I4161de32151a649161ab4084e80cafe4a462c7d5
2013-03-06 03:45:48 +00:00
Siebrand Mazeland
9f77245218 Update formatting
4 of n.

Change-Id: I23e2409ce9eff14c3434154d236de83c93a92440
2013-02-14 14:10:38 +01:00
jenkins-bot
490780c68a Merge "Force case-sensitivity on the LIKE operator, to ensure similar behaviour between MySQL and SQLite" 2013-01-31 20:49:56 +00:00
Antoine Musso
0fd05285d7 pass codesniffer on tests/
Fix almost all occurences of the following sniffs:

Generic.CodeAnalysis.UselessOverridingMethod.Found
Generic.Formatting.NoSpaceAfterCast.SpaceFound
Generic.Functions.FunctionCallArgumentSpacing.SpaceBeforeComma
Generic.Functions.OpeningFunctionBraceKernighanRitchie.BraceOnNewLine
Generic.PHP.LowerCaseConstant.Found
PSR2.Classes.PropertyDeclaration.ScopeMissing
PSR2.Files.EndFileNewline.TooMany
PSR2.Methods.MethodDeclaration.StaticBeforeVisibility

Change-Id: I96aacef5bafe5a2bca659744fba1380999cfc37d
2013-01-28 12:14:26 +01:00
jenkins-bot
a1d5bf7a41 Merge "(minor) Make ORMTable handle failed queries nicely." 2013-01-07 18:12:37 +00:00
daniel
4f15b61efe (minor) Make ORMTable handle failed queries nicely.
Database::select will return false if a query fails and the DB object
is set to "ignore errors" mode. ORMTable now detect this and throw
a DBQueryError, overriding the ignore errors mode.

This change also adds a dummy implementation for ORMTable to ORMTableTest,
so tests can be run on the base implementation.

Change-Id: I5d87295626c0800c38f807d19becb312ba7cc956
2013-01-07 14:14:56 +01:00
Alexandre Emsenhuber
fa4196bc53 Fix Sqlite upgrade test when profiling to database is enabled
The 'profiling' table is missing from expected tables when
$wgProfileToDatabase is set to true, since patch-profiling.sql
is applied while updating in this case.

Change-Id: Iedbe72dca1deda728304fb95fe19ef3b4bdad8de
2013-01-02 14:52:02 +01:00
btongminh
3300e5870c Force case-sensitivity on the LIKE operator, to ensure similar behaviour
between MySQL and SQLite

Change-Id: Idf2d90fe3df07364657abb6070f6eac59add1306
2012-12-24 21:10:22 +01:00
jeroendedauw
e90d1a0918 (bug 42226) failure in sites tests
MediaWikiSiteTest::testRemove got a duplicate key error.

Change-Id: I7a40fe50b757e4162b7ccf1655d872cbd2c51f5d
2012-12-07 11:38:40 +01:00
umherirrender
fa1394e1a7 Add parent::setUp() to DatabaseSQLTest
1) DatabaseSQLTest::testMediaWikiTestCaseParentSetupCalled
DatabaseSQLTest::setUp() must call parent::setUp()
Failed asserting that an array has the key 'setUp'.

Change-Id: I6aa5cb09999e0cee9b36fedd9193cb5aa08914ad
2012-12-06 21:20:52 +00:00
Antoine Musso
bd6f3ddc6f test: raise timeout for DatabaseSqlite
DatabaseSqliteTest does file access and hence needs a slightly higher
timeout in PHPUnit.

Change-Id: I4b5eb7d7c5a3b9d4790f11cdb4efa9f578763183
2012-12-03 09:18:43 +01:00
umherirrender
83f883c7cb Fix data type for timestamp in TestORMRowTest
1) TestORMRowTest::testConstructor with data set #0 (array('Foobar',
'20120101020202', 42, 9000.1, true, array(13, 11, 7, 5, 3, 2),
stdClass), true)
Failed asserting that 2147483647 matches expected '20120101020202'.

Change-Id: I4dddaedf4e386c2061ee79fe0ab18af59033f052
2012-11-23 13:50:43 +01:00
Demon
4daa24f4f1 Merge "drop orm_test table on teardown" 2012-11-16 05:21:15 +00:00
umherirrender
ce966298ca fix @depends
No need for the parentheses there

Change-Id: Id2ba72a7fb7bdd592de0642468994c9dab29adcd
2012-11-10 20:15:03 +01:00
umherirrender
93dd5435f0 drop orm_test table on teardown
No need to keep this table after the test

Change-Id: Id6814ceca063294da0761caa9a0d9975118dd4f1
2012-11-10 19:05:04 +00:00
aude
16e2c77715 move ORMTableTest from Wikibase to core
- this is more generally useful than to be buried inside Wikibase client.
- it was in Wikibase/client/tests/phpunit/includes/store/EntityCacheTableTest.php

- patchset 2: add to test autoloader

Change-Id: I5bc41d6d205f28bcc5bf0c8a78b782c8888c18eb
2012-11-09 09:57:45 +00:00
Aaron Schulz
ec239d8243 Merge "ORMRow must not ignore failures on insert by deault." 2012-11-06 20:57:57 +00:00
daniel
9205808960 Fix handling of strings containing \0 in SQLite.
This change provides a workaround and test case for a problem
in the sqlite library:

SQLite truncates strings at ASCII value 00 aka \0. Strings
containing \0 need to be represented in hexadecimal form.

Reported to PHP as bug 63419
 https://bugs.php.net/bug.php?id=63419

Change-Id: I2bbc445ffebd41e181edfc3201e6e5514de06142
2012-11-02 14:23:55 +01:00
daniel
980da6d6a7 ORMRow must not ignore failures on insert by deault.
ORMRow shouldn't apply the "IGNORE" modifier for insertions by default.
IGNORE means pretending the insert was successfull even if it wasn't.
That's not a good default, and for some databases (like sqlite), may
actually hide errors beyond key conflicts.

Change-Id: I8b00cd03a459419441195ed25091385371b027a5
2012-10-31 20:15:02 +01:00
Antoine Musso
c6ea55bf54 tests: always call parent setUp
Some class extending MediaWikiTestCase did not call its setUp method. We
most probably always want to do it since MediaWikiTestCase::setUp() does
garbage collection and might do more in the future.

Change-Id: I68dde370a62c8f4a779836ca0c4ad06844fdc916
2012-10-23 19:04:40 +02:00
Timo Tijhof
181c7cdc8e Clean and repair many phpunit tests (+ fix implied configuration)
This commit depends on the introduction of
MediaWikiTestCase::setMwGlobals in change Iccf6ea81f4.

Various tests already set their globals, but forgot to restore
them afterwards, or forgot to call the parent setUp, tearDown...

Either way they won't have to anymore with setMwGlobals.

Consistent use of function characteristics:
* protected function setUp
* protected function tearDown
* public static function (provide..)

(Matching the function signature with PHPUnit/Framework/TestCase.php)

Replaces:
 * public function (setUp|tearDown)\(
 * protected function $1(

 * \tfunction (setUp|tearDown)\(
 * \tprotected function $1(

 * \tfunction (data|provide)\(
 * \tpublic static function $1\(

Also renamed a few "data#", "provider#" and "provides#" functions
to "provide#" for consistency. This also removes confusion where
the /media tests had a few private methods called dataFile(),
which were sometimes expected to be data providers.

Fixes:

TimestampTest often failed due to a previous test setting a
different language (it tests "1 hour ago" so need to make sure
it is set to English).

MWNamespaceTest became a lot cleaner now that it executes with
a known context. Though the now-redundant code that was removed
didn't work anyway because wgContentNamespaces isn't keyed by
namespace id, it had them was values...

FileBackendTest:
* Fixed: "PHP Fatal: Using $this when not in object context"

HttpTest
* Added comment about:
  "PHP Fatal: Call to protected MWHttpRequest::__construct()"
  (too much unrelated code to fix in this commit)

ExternalStoreTest
* Add an assertTrue as well, without it the test is useless
  because regardless of whether wgExternalStores is true or false
  it only uses it if it is an array.

Change-Id: I9d2b148e57bada64afeb7d5a99bec0e58f8e1561
2012-10-09 03:01:51 +02:00
Tim Landscheidt
4de96da5af Reenable testStoredFunctions() in DatabaseTest.php.
Change-Id: I85192a326f8e83d433f69b296431cae57628e78f
2012-09-22 18:14:22 +00:00
umherirrender
59e0647457 Allow array condition for HAVING in database interface
Current no use in core.

Change-Id: I8ed86c8238146285dd1caed4d8586c877cbecf44
2012-08-31 20:12:19 +02:00
Aaron Schulz
d1a806b91b Merge "Allow array condition for Database::conditional" 2012-08-28 00:01:05 +00:00
jeroendedauw
38c7f444e1 Use __DIR__ instead of dirname( __FILE__ )
We can now do this since we finally switched to PHP 5.3 for MW 1.20 and get rid of the silly dirname(__FILE__) stuff :)

Change-Id: Id9b2c9cd2e678197aa81c78adced5d1d31ff57b1
2012-08-27 21:45:00 +02:00
umherirrender
7a5f4b431d Allow array condition for Database::conditional
Change the one use of that method to use the new syntax.
Add some tests.

Change-Id: I9ad4e5b5e97d1d13cfd858105167ca5d20ffaf83
2012-08-25 20:24:59 +02:00
umherirrender
aff21af9ae Allow aliased field names with separated syntax
This introduce the syntax from aliased table names for aliased field
names into the abstract database layer:

array( 'alias' => 'field' ) gives 'field AS alias'

This patch also includes changes to query pages, api and some more
places to show, how the new syntax looks in "production".

This allow us to remove the "AS" for Non-PostgreSQL databases, if we
want that.

Change-Id: I5f0de1c2f29092c173aec3de93ffdef436799e8d
2012-08-15 15:16:09 +02:00
Demon
72e00dfb19 Merge "(bug 38406) Properly quote table names in DatabaseBase::tableName()" 2012-08-14 17:42:20 +00:00
Aaron Schulz
eb16f5898d [Database] Various DB cleanups.
* Removed unused and obsolete set() and safeQuery() functions.
* Removed unused deprecated constructor functions.
* Removed unused limitResultForUpdate() cruft function.
* Removed unused standardSelectDistinct(), it's better to just follow the standard for all queries.
* Removed other cruft functions unused by core/extensions.
* Made some internal functions protected.

Change-Id: I90be88ea740834a417a17d7751f1be7bac4eae4e
2012-08-08 11:00:48 -07:00
Alexandre Emsenhuber
a6c47b6098 (bug 38406) Properly quote table names in DatabaseBase::tableName()
Currently the logic is the following:
$database = ( $format == 'quoted' || $this->isQuotedIdentifier( $database ) ? $database : $this->addIdentifierQuotes( $database ) );
This means that $database will *not* be quoted if $format is set to 'quoted',
which is the opposite of what we want here. Instead I just copied the code
used to quote $table just below and replace the variable.

This causes SQL syntax errors when the shared table name contain hyphens
since it is not quoted.

No RELEASE-NOTES entry since this should be backported to 1.19 once merged.

Patchset #2: added some tests
Patchset #3: fix tests for SQLite

Change-Id: Idda844cb470454a9a22001a31b6692de49892ca2
2012-07-18 14:54:47 +02:00
jeroendedauw
7127713c78 Added some extra tests for ORMRow class
Change-Id: I672c88d42168a3daf405e6f0a4f204c15a4489ad
2012-06-07 13:18:49 +02:00
awjrichards
c29fd59775 Big oops - merged to wrong branch.
Revert "Revert to arbitrarily old point before initial remote branch creation to help clean up"

This reverts commit ee0d3d330f
2012-06-05 22:58:54 +00:00
awjrichards
ee0d3d330f Revert to arbitrarily old point before initial remote branch creation to help clean up
Change-Id: I41a3d1e55d3ea9dffa42451237fe065f9334361d
2012-06-02 08:43:04 -07:00
Platonides
e4b2dea3c4 Use canonical class name. Include ORMRowTest.php
Change-Id: Ia6bc39492056bb3aa3a1a17097b71b70d1344e50
2012-06-03 15:22:31 +02:00
jeroendedauw
298c8b4786 Added base class for testing ORMRow deriving classes and added a mock implementation in order to test the abstract parent class itself
Patchset 2: attempt to fix sql error when using sqlite
Patchset 3: for great justice
Patchset 4: sqlite, not postgres... /facepalm
Patchset 5: joy, more sql divergence...
Patchset 7: handle inconsistencies in MWs database abstraction layer

Change-Id: I1948c4ad815008321801c93584eb249c1f597560
2012-05-28 17:35:05 +02:00
Christian Aistleitner
02c05b9d0e Correcting type of DatabaseSqlite::insertId()
Change-Id: I37ebe291cf8c4fd66a1ee236fcfa063016efbc8d
2012-04-06 21:02:27 +02:00
Antoine Musso
79c979b4e8 tests: mark tests requiring a database connection 2012-01-18 15:50:00 +00:00
Max Semenik
6d87a6ea8f Revert r108603, which was itself a revert of r107376, r107994. Before considering something unneeded, please ask first ;) 2012-01-11 20:19:55 +00:00
Antoine Musso
f5f1b6d0bb Reverts MySQL stored procedure support
This is reverting the work done by MaxSem to support stored procedures
and stored function in MySQL. The reasons are:
 - it is not needed yet
 - tests are not functionals
 - alter the stable include/db/Database.php and drop support for ';;'

So please create a branch to work on it and merge it back in trunk
once we have branched 1.19 :-)

I have opened bug 33654 to track this enhancement request.

Reverts r107376, r107994.
2012-01-11 09:46:21 +00:00
Max Semenik
2034614e92 Follow-up r107376: disable test by default, causes failures in some configurations 2012-01-04 08:38:13 +00:00
Max Semenik
6b7317c91f Added support for stored procedures/functions to MySQL:
* Refactored DatabaseBase::sourceStream(), made it possible for descendant classes to alter its behaviour w/o having to redo it completely like Oracle does.
* MySQL class now supports specifying DELIMITER.
* Thrown away the mess of catering for double semicolon. If it's a problem, fix your .sql files!
* Haven't actually touched Oracle.
* Tests!
2011-12-27 12:29:36 +00:00
Max Semenik
713ffa90f2 Moved SQLite test .sql files to the common test data directory 2011-12-22 09:18:39 +00:00
Max Semenik
e159355c7f Added 1.18 schema to tests, comment 2011-12-11 16:56:37 +00:00
Max Semenik
a1ec828b46 Follow-up r104051: fix tests 2011-11-23 17:27:08 +00:00
Max Semenik
3a20036ca4 Revert r98355 and r98357; drop the field instead. 2011-10-02 06:10:55 +00:00
Sam Reed
af564389ad Followup r98339, r98355
Let's pretend the column never existed
2011-09-28 19:38:34 +00:00
Sam Reed
52bb2e5a28 Followup r98339
Don't try and remove the user_options column in SQLite

Added 'user.user_options' to ignores
2011-09-28 19:28:19 +00:00
Chad Horohoe
30926a2c3c Revert r87992 and followups r87998, r89028 (Support abstraction for 'NOT IN' SQL structure). Per discussion on CR and elsewhere...we're not 100% sold on the new format yet.
Changing the database api like this should be carefully thought out before we get stuck with it for 6 more years and end up hating it.
2011-09-13 00:19:04 +00:00
Platonides
1d92cdc827 Follow up r93253. Do not mark DatabaseSqliteTest.php as needing a db.
An existing db is not needed, since it uses a memory one.
Having this in Database group fails in DatabaseSqlite->listTables 
since it is working with a MockDatabaseSqlite whose query() return true.
2011-07-27 14:50:10 +00:00
Chad Horohoe
edf1143de1 Mark 2 tests as requiring a DB...since they do :) 2011-07-26 23:39:48 +00:00
Max Semenik
94035c764f Follow-up r90356 & r90363: test deleteJoin() on SQLite 2011-06-18 20:37:02 +00:00
Max Semenik
b6905779bd Also check indexes in SQLite upgrade tests 2011-06-15 17:59:02 +00:00
Max Semenik
568b0489fe avoid test being marked as incomplete due to lack of assertions 2011-06-13 19:22:52 +00:00
Jure Kajzer
edd10806bc * merge r89759 from REL1_17 into trunk
* changed addQuotes expected result for addQuotes in DatabaseTest
2011-06-09 08:43:53 +00:00
Antoine Musso
716d85ad7e * Fix db->makeList() spacing
* Tests assertions where upside-down (expected <-> value)
* Tests did not use LIST_AND

Follow up r87992
2011-05-28 09:03:44 +00:00
Antoine Musso
ba564eeb7c Support abstraction for 'NOT IN' SQL structure
Following a live discussion with Catrope.

When using Database::makeList() in LIST_AND or LIST_OR modes, you can now
suffix the field name with an exclamation mark.  It will negate the logical
boolean.

Example:
  $db->makeList( array( 'field!' => array( 1,2,3 ) );
  outputs:
    'field' NOT IN ('1', '2', '3' );

 $db->makeList( array( 'foo!' => array( 777 ) ) );
 outputs:
   'foo' =! 777

(note: tests not ran, please run them and ammend them)
2011-05-13 15:39:45 +00:00
Alexandre Emsenhuber
74c1f682bb svn:eol-style native 2011-05-11 19:13:58 +00:00
Max Semenik
6bc8410924 Column checks for updater 2011-05-09 18:49:56 +00:00
Max Semenik
fcfa72b43a Automatic testing of SQLite updates from all (previoisly) supported versions 2011-05-09 16:41:51 +00:00
Platonides
eb7e30ee42 I forgot to commit this in r85906 2011-04-12 20:48:19 +00:00
Max Semenik
1275cc6df6 SQLite is picky about the position of AUTOINCREMENT in field definition, handle it when converting from MySQL syntax 2011-04-10 08:44:06 +00:00
Max Semenik
798dafa4dd Follow-up r82856: instead of remembering magic table names, just analyse its structure, added tests. 2011-02-26 16:45:35 +00:00
Chad Horohoe
447529064b * verbose and color default output from phpunit
* Make a bunch of tests subclass MediaWikiTestCase
* Parser tests and ResourceLoaderTest can't subclass it yet due to various issues
2010-12-28 18:17:16 +00:00
Chad Horohoe
23f69f10ed Per wikitech-l discussion: Move tests from maintenance/tests/ to tests/. They're not strictly maintenance scripts, and some people want to do a selective checkout that doesn't include the tests. There's still debate on whether we should include these in the release downloads, but we had a pretty firm consensus to move this. 2010-12-14 16:26:35 +00:00