In addition to the obvious (addition of the code to support Microsoft SQL Server), some other files need to change, and a few other files need to be added to the system.
includes/Autoloader.php (change)
This file needs just a couple of additions, as follows
static $localClasses = array(
# Includes
'DatabaseADODB' => 'includes/DatabaseADODB.php',
...
'SearchADODB' => 'includes/SearchADODB.php',
...
includes/BagOStuff.php (change)
In
SqlBagOStuff::get($key)
, the SQL needs a little fix, from
"SELECT value,exptime FROM $0 WHERE keyname='$1'", $key);
to
"SELECT value,exptime FROM $0 WHERE keyname=$1", $key);
Microsoft SQL Server is thrown off by what become extraneous single quotes. A similar change must be made to
SqlBagOStuff::delete($key,$time=0)
.
In the methods
_serialize(&$data)
and
_unserialize($serial)
, I've had to remove the calls to
gzdeflate
and
ginflate
, since I couldn't get them to behave consistently.
includes/Database.php
To this base class, I've added two new abstract methods
public function setFetchModeAssoc() {
}
public function setFetchModeNum() {
}
These are used very little, and only by a couple of the
Special:
pages. By default, the ADODB connection operates in numeric fetch mode (i.e., it returns records in an array subscripted by numbers). After a call to
setFetchModeAssoc
the connection operates in associative fetch mode (i.e., it returns records in an array subscripted by field names). This is different from the MySQL connection, which returns arrays that can be indexed both ways.
includes/GlobalFunctions.php
In
function wfShellExec($cmd, &$retval=null)
, I changed the line
$cmd = '"' . $cmd . '"';
to
$cmd = 'cmd /C ' . '"' . str_replace( '/', '\\', $cmd) . '"';
In
includes/MagicWord.php, I changed a line in
MagicWord::initRegex()
from
$case = $this-mCaseSensitive ? '' : 'iu';
to
$case = $this->mCaseSensitive ? '' : 'i';
I also had to rewrite
matchAndRemove(&$text)
and
matchStartAndRemove(&$text)
In
includes/Pager.php, method
IndexPager::reallyDoQuery($offset,$limit,$ascending)
the line
$res = $this->mDb->select( $tables, $fields, $conds, $fname, $options );
must be wrapped up like this:
$this->mDb->setFetchModeAssoc();
$res = $this->mDb->select( $tables, $fields, $conds, $fname, $options );
$this->mDb->setFetchModeNum();