* @package Mammut\DB\Adapter\MSSQL */ class MSSQL extends \Mammut\DB\DB { const _VERSION_ = '1.1.0.0'; /* * Note: * This is a proxy class to route the requests to an private attribute which contains * the real database connector. This was needed because of the new driver from microsoft, * which replaces the old mssql driver of php<5.2 on windows. */ /** * The real implementation * * @var \Mammut\DB\MSSQL\MSSQLBase */ private $db = false; private $api = 2; public function __construct($cstring, $user, $password, array $options = array(), iCache $cache = NULL) { $pers = in_array(self::OPT_PERSISTENT, $options); if(!extension_loaded('sqlsrv')) { $this->api = 1; if(!extension_loaded('mssql')) throw new \Mammut\Exception\ExtensionException('mssql|sqlsrv'); } switch($this->api) { case 1: $this->db = new MSSQLv1($cstring, $user, $password, $options); break; case 2: $this->db = new MSSQLv2($cstring, $user, $password, $options); break; default: throw new \InvalidArgumentException('invalid api selected'); } } public function close() { return $this->db->close(); } public function getServer() { return $this->db->getServer(); } public function setDatabase($name) { return $this->db->setDatabase($name); } public function getDatabase() { return $this->db->getDatabase(); } public function isTransactionSupported() { return $this->db->isTransactionSupported(); } public function setAutocommit($doAutoCommit) { return $this->db->setAutocommit($doAutoCommit); } public function startTransaction() { return $this->db->startTransaction(); } public function commit() { return $this->db->commit(); } public function rollback() { return $this->db->rollback(); } public function query($query, $limit = -1, $skip = 0) { return $this->db->query($query, $limit, $skip); } public function prepareStatement($query, $limit = -1, $skip = 0) { return $this->db->prepareStatement($query, $limit, $skip); } public function getObject($query, $class = false, $param = array()) { return $this->db->getObject($query, $class, $param); } public function getArray($query) { return $this->db->getArray($query); } public function getRow($query) { return $this->db->getRow($query); } public function getInsertId() { return $this->db->getInsertId(); } public function getAffectedRowCount() { return $this->db->getAffectedRowCount(); } public function table($name) { return $this->db->table($name); } public function tableExists($table) { return $this->db->tableExists($table); } public function tableList() { return $this->db->tableList(); } public function createTable(TableInfo $info) { return $this->db->createTable($info); } public function getTableInfo($tablename) { return $this->db->getTableInfo($tablename); } public function renameTable($oldName, $newName) { $oldName = $this->db->escapeString($oldName); $newName = $this->db->escapeString($newName); $this->query("EXEC sp_rename '{$oldName}', '{$newName}'"); } public function createView(\Mammut\DB\Model\ViewInfo $info) { return $this->db->createView($info); } public function dropTable($table) { return $this->db->dropTable($table); } public function dateCol2uts($date) { return $this->db->dateCol2uts($date); } public function uts2dateCol($uts) { return $this->db->uts2dateCol($uts); } public function datetimeCol2uts($datetime) { return $this->db->datetimeCol2uts($datetime); } public function uts2datetimeCol($uts) { return $this->db->uts2datetimeCol($uts); } function escapeString($text) { return $this->db->escapeString($text); } public function escapeTableName($name, $addPrefix = true) { return $this->db->escapeTableName($name, $addPrefix); } public function escapeColumnName($name) { return $this->db->escapeColumnName($name); } public function escapeValue($value, $addQuotes = true) { return $this->db->escapeValue($value, $addQuotes); } public function getQueryCount() { return $this->db->getQueryCount(); } public function getDialect() { return $this->db->getDialect(); } public function getServerVersion() { return $this->db->getServerVersion(); } public function setIdentityInsert($enable, $table) { $name = $this->escapeTableName($table); if($enable) $this->query("SET IDENTITY_INSERT {$name} ON"); else $this->query("SET IDENTITY_INSERT {$name} OFF"); } }