. */ /** * Doctrine_Connection_Mssql * * @package Doctrine * @subpackage Connection * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @author Konsta Vesterinen * @author Lukas Smith (PEAR MDB2 library) * @version $Revision$ * @link www.phpdoctrine.org * @since 1.0 */ class Doctrine_Connection_Mssql extends Doctrine_Connection { /** * @var string $driverName the name of this connection driver */ protected $driverName = 'Mssql'; /** * the constructor * * @param Doctrine_Manager $manager * @param PDO $pdo database handle */ public function __construct(array $params) { parent::__construct($params); } /** * Quote a string so it can be safely used as a table / column name * * Quoting style depends on which database driver is being used. * * @param string $identifier identifier name to be quoted * @param bool $checkOption check the 'quote_identifier' option * * @return string quoted identifier string */ public function quoteIdentifier($identifier, $checkOption = false) { if ($checkOption && ! $this->getAttribute(Doctrine::ATTR_QUOTE_IDENTIFIER)) { return $identifier; } if (strpos($identifier, '.') !== false) { $parts = explode('.', $identifier); $quotedParts = array(); foreach ($parts as $p) { $quotedParts[] = $this->quoteIdentifier($p); } return implode('.', $quotedParts); } return '[' . str_replace(']', ']]', $identifier) . ']'; } /** * return version information about the server * * @param bool $native determines if the raw version string should be returned * @return mixed array/string with version information or MDB2 error object */ public function getServerVersion($native = false) { if ($this->serverInfo) { $serverInfo = $this->serverInfo; } else { $query = 'SELECT @@VERSION'; $serverInfo = $this->fetchOne($query); } // cache server_info $this->serverInfo = $serverInfo; if ( ! $native) { if (preg_match('/([0-9]+)\.([0-9]+)\.([0-9]+)/', $serverInfo, $tmp)) { $serverInfo = array( 'major' => $tmp[1], 'minor' => $tmp[2], 'patch' => $tmp[3], 'extra' => null, 'native' => $serverInfo, ); } else { $serverInfo = array( 'major' => null, 'minor' => null, 'patch' => null, 'extra' => null, 'native' => $serverInfo, ); } } return $serverInfo; } /** * Checks if there's a sequence that exists. * * @param string $seq_name The sequence name to verify. * @return boolean The value if the table exists or not */ public function checkSequence($seqName) { $query = 'SELECT * FROM ' . $seqName; try { $this->exec($query); } catch(Doctrine_Connection_Exception $e) { if ($e->getPortableCode() == Doctrine::ERR_NOSUCHTABLE) { return false; } throw $e; } return true; } }