Remove long-since unused cruft methods from DatabaseBase

Change-Id: I4b28c15a8589504bdbbe79ba0d3aed1e52dbe65b
This commit is contained in:
Aaron Schulz 2016-09-15 22:12:50 -07:00
parent a63dc0a5c2
commit 4ef4438739
5 changed files with 0 additions and 208 deletions

View file

@ -54,10 +54,6 @@ class DatabaseMssql extends DatabaseBase {
return false;
}
public function realTimestamps() {
return false;
}
public function implicitGroupby() {
return false;
}
@ -66,10 +62,6 @@ class DatabaseMssql extends DatabaseBase {
return false;
}
public function functionalIndexes() {
return true;
}
public function unionSupportsOrderAndLimit() {
return false;
}

View file

@ -188,10 +188,6 @@ class DatabaseOracle extends DatabaseBase {
return true;
}
function realTimestamps() {
return true;
}
function implicitGroupby() {
return false;
}
@ -200,10 +196,6 @@ class DatabaseOracle extends DatabaseBase {
return false;
}
function searchableIPs() {
return true;
}
/**
* Usually aborts on failure
* @param string $server

View file

@ -239,10 +239,6 @@ class DatabasePostgres extends DatabaseBase {
return true;
}
function realTimestamps() {
return true;
}
function implicitGroupby() {
return false;
}
@ -251,14 +247,6 @@ class DatabasePostgres extends DatabaseBase {
return false;
}
function searchableIPs() {
return true;
}
function functionalIndexes() {
return true;
}
function hasConstraint( $name ) {
$sql = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
"WHERE c.connamespace = n.oid AND conname = '" .

View file

@ -48,13 +48,6 @@ abstract class DatabaseBase extends Database {
return $res;
}
/**
* @return string Command delimiter used by this database engine
*/
public function getDelimiter() {
return $this->delimiter;
}
/**
* Returns true if this database supports (and uses) cascading deletes
*
@ -81,138 +74,6 @@ abstract class DatabaseBase extends Database {
return false;
}
/**
* Returns true if this database can do a native search on IP columns
* e.g. this works as expected: .. WHERE rc_ip = '127.42.12.102/32';
*
* @return bool
*/
public function searchableIPs() {
return false;
}
/**
* Returns true if this database uses timestamps rather than integers
*
* @return bool
*/
public function realTimestamps() {
return false;
}
/**
* Returns true if this database can use functional indexes
*
* @return bool
*/
public function functionalIndexes() {
return false;
}
/**
* Intended to be compatible with the PEAR::DB wrapper functions.
* http://pear.php.net/manual/en/package.database.db.intro-execute.php
*
* ? = scalar value, quoted as necessary
* ! = raw SQL bit (a function for instance)
* & = filename; reads the file and inserts as a blob
* (we don't use this though...)
*
* @param string $sql
* @param string $func
*
* @return array
*/
protected function prepare( $sql, $func = __METHOD__ ) {
/* MySQL doesn't support prepared statements (yet), so just
* pack up the query for reference. We'll manually replace
* the bits later.
*/
return [ 'query' => $sql, 'func' => $func ];
}
/**
* Free a prepared query, generated by prepare().
* @param string $prepared
*/
protected function freePrepared( $prepared ) {
/* No-op by default */
}
/**
* Execute a prepared query with the various arguments
* @param string $prepared The prepared sql
* @param mixed $args Either an array here, or put scalars as varargs
*
* @return ResultWrapper
*/
public function execute( $prepared, $args = null ) {
if ( !is_array( $args ) ) {
# Pull the var args
$args = func_get_args();
array_shift( $args );
}
$sql = $this->fillPrepared( $prepared['query'], $args );
return $this->query( $sql, $prepared['func'] );
}
/**
* For faking prepared SQL statements on DBs that don't support it directly.
*
* @param string $preparedQuery A 'preparable' SQL statement
* @param array $args Array of Arguments to fill it with
* @return string Executable SQL
*/
public function fillPrepared( $preparedQuery, $args ) {
reset( $args );
$this->preparedArgs =& $args;
return preg_replace_callback( '/(\\\\[?!&]|[?!&])/',
[ &$this, 'fillPreparedArg' ], $preparedQuery );
}
/**
* preg_callback func for fillPrepared()
* The arguments should be in $this->preparedArgs and must not be touched
* while we're doing this.
*
* @param array $matches
* @throws DBUnexpectedError
* @return string
*/
protected function fillPreparedArg( $matches ) {
switch ( $matches[1] ) {
case '\\?':
return '?';
case '\\!':
return '!';
case '\\&':
return '&';
}
list( /* $n */, $arg ) = each( $this->preparedArgs );
switch ( $matches[1] ) {
case '?':
return $this->addQuotes( $arg );
case '!':
return $arg;
case '&':
# return $this->addQuotes( file_get_contents( $arg ) );
throw new DBUnexpectedError(
$this,
'& mode is not implemented. If it\'s really needed, uncomment the line above.'
);
default:
throw new DBUnexpectedError(
$this,
'Received invalid match. This should never happen!'
);
}
}
/**
* Get search engine class. All subclasses of this need to implement this
* if they wish to use searching.

View file

@ -175,47 +175,6 @@ class DatabaseTest extends MediaWikiTestCase {
);
}
public function testFillPreparedEmpty() {
$sql = $this->db->fillPrepared(
'SELECT * FROM interwiki', [] );
$this->assertEquals(
"SELECT * FROM interwiki",
$sql );
}
public function testFillPreparedQuestion() {
$sql = $this->db->fillPrepared(
'SELECT * FROM cur WHERE cur_namespace=? AND cur_title=?',
[ 4, "Snicker's_paradox" ] );
$check = "SELECT * FROM cur WHERE cur_namespace='4' AND cur_title='Snicker''s_paradox'";
if ( $this->db->getType() === 'mysql' ) {
$check = "SELECT * FROM cur WHERE cur_namespace='4' AND cur_title='Snicker\'s_paradox'";
}
$this->assertEquals( $check, $sql );
}
public function testFillPreparedBang() {
$sql = $this->db->fillPrepared(
'SELECT user_id FROM ! WHERE user_name=?',
[ '"user"', "Slash's Dot" ] );
$check = "SELECT user_id FROM \"user\" WHERE user_name='Slash''s Dot'";
if ( $this->db->getType() === 'mysql' ) {
$check = "SELECT user_id FROM \"user\" WHERE user_name='Slash\'s Dot'";
}
$this->assertEquals( $check, $sql );
}
public function testFillPreparedRaw() {
$sql = $this->db->fillPrepared(
"SELECT * FROM cur WHERE cur_title='This_\\&_that,_WTF\\?\\!'",
[ '"user"', "Slash's Dot" ] );
$this->assertEquals(
"SELECT * FROM cur WHERE cur_title='This_&_that,_WTF?!'",
$sql );
}
public function testStoredFunctions() {
if ( !in_array( wfGetDB( DB_MASTER )->getType(), [ 'mysql', 'postgres' ] ) ) {
$this->markTestSkipped( 'MySQL or Postgres required' );