*/
class DatabaseSQLTest extends MediaWikiTestCase {
+ /**
+ * @var DatabaseTestHelper
+ */
private $database;
protected function setUp() {
/**
* @dataProvider provideSelect
+ * @covers DatabaseBase::select
*/
function testSelect( $sql, $sqlText ) {
$this->database->select(
/**
* @dataProvider provideUpdate
+ * @covers DatabaseBase::update
*/
function testUpdate( $sql, $sqlText ) {
$this->database->update(
/**
* @dataProvider provideDelete
+ * @covers DatabaseBase::delete
*/
function testDelete( $sql, $sqlText ) {
$this->database->delete(
);
}
+ /**
+ * @dataProvider provideUpsert
+ * @covers DatabaseBase::upsert
+ */
+ function testUpsert( $sql, $sqlText ) {
+ $this->database->upsert(
+ $sql['table'],
+ $sql['rows'],
+ $sql['uniqueIndexes'],
+ $sql['set'],
+ __METHOD__
+ );
+ $this->assertLastSql( $sqlText );
+ }
+
+ public static function provideUpsert() {
+ return array(
+ array(
+ array(
+ 'table' => 'upsert_table',
+ 'rows' => array( 'field' => 'text', 'field2' => 'text2' ),
+ 'uniqueIndexes' => array( 'field' ),
+ 'set' => array( 'field' => 'set' ),
+ ),
+ "BEGIN; " .
+ "UPDATE upsert_table " .
+ "SET field = 'set' " .
+ "WHERE ((field = 'text')); " .
+ "INSERT IGNORE INTO upsert_table " .
+ "(field,field2) " .
+ "VALUES ('text','text2'); " .
+ "COMMIT"
+ ),
+ );
+ }
+
/**
* @dataProvider provideDeleteJoin
+ * @covers DatabaseBase::deleteJoin
*/
function testDeleteJoin( $sql, $sqlText ) {
$this->database->deleteJoin(
),
"DELETE FROM table " .
"WHERE field IN (" .
- "SELECT field_join FROM table_join WHERE alias = 'text'" .
+ "SELECT field_join FROM table_join WHERE alias = 'text'" .
")"
),
array(
),
"DELETE FROM table " .
"WHERE field IN (" .
- "SELECT field_join FROM table_join " .
+ "SELECT field_join FROM table_join " .
")"
),
);
/**
* @dataProvider provideInsert
+ * @covers DatabaseBase::insert
*/
function testInsert( $sql, $sqlText ) {
$this->database->insert(
"INSERT IGNORE INTO table " .
"(field,field2) " .
"VALUES " .
- "('text','2')," .
- "('multi','3')"
+ "('text','2')," .
+ "('multi','3')"
),
);
}
/**
* @dataProvider provideInsertSelect
+ * @covers DatabaseBase::insertSelect
*/
function testInsertSelect( $sql, $sqlText ) {
$this->database->insertSelect(
"INSERT INTO insert_table " .
"(field_insert,field) " .
"SELECT field_select,field2 " .
- "FROM select_table"
+ "FROM select_table"
),
array(
array(
"INSERT INTO insert_table " .
"(field_insert,field) " .
"SELECT field_select,field2 " .
- "FROM select_table " .
- "WHERE field = '2'"
+ "FROM select_table " .
+ "WHERE field = '2'"
),
array(
array(
"INSERT IGNORE INTO insert_table " .
"(field_insert,field) " .
"SELECT field_select,field2 " .
- "FROM select_table " .
- "WHERE field = '2' " .
- "ORDER BY field"
+ "FROM select_table " .
+ "WHERE field = '2' " .
+ "ORDER BY field"
),
);
}
/**
* @dataProvider provideReplace
+ * @covers DatabaseBase::replace
*/
function testReplace( $sql, $sqlText ) {
$this->database->replace(
"DELETE FROM replace_table " .
"WHERE ( field='text' ); " .
"INSERT INTO replace_table " .
- "(field,field2) " .
- "VALUES ('text','text2')"
+ "(field,field2) " .
+ "VALUES ('text','text2')"
),
array(
array(
"DELETE FROM module_deps " .
"WHERE ( md_module='module' AND md_skin='skin' ); " .
"INSERT INTO module_deps " .
- "(md_module,md_skin,md_deps) " .
- "VALUES ('module','skin','deps')"
+ "(md_module,md_skin,md_deps) " .
+ "VALUES ('module','skin','deps')"
),
array(
array(
"DELETE FROM module_deps " .
"WHERE ( md_module='module' AND md_skin='skin' ); " .
"INSERT INTO module_deps " .
- "(md_module,md_skin,md_deps) " .
- "VALUES ('module','skin','deps'); " .
- "DELETE FROM module_deps " .
+ "(md_module,md_skin,md_deps) " .
+ "VALUES ('module','skin','deps'); " .
+ "DELETE FROM module_deps " .
"WHERE ( md_module='module2' AND md_skin='skin2' ); " .
"INSERT INTO module_deps " .
- "(md_module,md_skin,md_deps) " .
- "VALUES ('module2','skin2','deps2')"
+ "(md_module,md_skin,md_deps) " .
+ "VALUES ('module2','skin2','deps2')"
),
array(
array(
"DELETE FROM module_deps " .
"WHERE ( md_module='module' ) OR ( md_skin='skin' ); " .
"INSERT INTO module_deps " .
- "(md_module,md_skin,md_deps) " .
- "VALUES ('module','skin','deps'); " .
- "DELETE FROM module_deps " .
+ "(md_module,md_skin,md_deps) " .
+ "VALUES ('module','skin','deps'); " .
+ "DELETE FROM module_deps " .
"WHERE ( md_module='module2' ) OR ( md_skin='skin2' ); " .
"INSERT INTO module_deps " .
- "(md_module,md_skin,md_deps) " .
- "VALUES ('module2','skin2','deps2')"
+ "(md_module,md_skin,md_deps) " .
+ "VALUES ('module2','skin2','deps2')"
),
array(
array(
/**
* @dataProvider provideNativeReplace
+ * @covers DatabaseBase::nativeReplace
*/
function testNativeReplace( $sql, $sqlText ) {
$this->database->nativeReplace(
/**
* @dataProvider provideConditional
+ * @covers DatabaseBase::conditional
*/
function testConditional( $sql, $sqlText ) {
$this->assertEquals( trim( $this->database->conditional(
/**
* @dataProvider provideBuildConcat
+ * @covers DatabaseBase::buildConcat
*/
function testBuildConcat( $stringList, $sqlText ) {
$this->assertEquals( trim( $this->database->buildConcat(
/**
* @dataProvider provideBuildLike
+ * @covers DatabaseBase::buildLike
*/
function testBuildLike( $array, $sqlText ) {
$this->assertEquals( trim( $this->database->buildLike(
/**
* @dataProvider provideUnionQueries
+ * @covers DatabaseBase::unionQueries
*/
function testUnionQueries( $sql, $sqlText ) {
$this->assertEquals( trim( $this->database->unionQueries(
);
}
+ /**
+ * @covers DatabaseBase::commit
+ */
function testTransactionCommit() {
$this->database->begin( __METHOD__ );
$this->database->commit( __METHOD__ );
$this->assertLastSql( 'BEGIN; COMMIT' );
}
+ /**
+ * @covers DatabaseBase::rollback
+ */
function testTransactionRollback() {
$this->database->begin( __METHOD__ );
$this->database->rollback( __METHOD__ );
$this->assertLastSql( 'BEGIN; ROLLBACK' );
}
+ /**
+ * @covers DatabaseBase::dropTable
+ */
function testDropTable() {
$this->database->setExistingTables( array( 'table' ) );
$this->database->dropTable( 'table', __METHOD__ );
$this->assertLastSql( 'DROP TABLE table' );
}
+ /**
+ * @covers DatabaseBase::dropTable
+ */
function testDropNonExistingTable() {
$this->assertFalse(
$this->database->dropTable( 'non_existing', __METHOD__ )