27 #require_once 'Zend/Db/Adapter/Pdo/Abstract.php';    86         unset($dsn[
'username']);
    87         unset($dsn[
'password']);
    88         unset($dsn[
'options']);
    89         unset($dsn[
'persistent']);
    90         unset($dsn[
'driver_options']);
    92         if (isset($dsn[
'port'])) {
    94             if (strtoupper(substr(PHP_OS, 0, 3)) === 
'WIN') {
    97             $dsn[
'host'] .= $seperator . $dsn[
'port'];
   103         if (isset($dsn[
'pdoType'])) {
   104             switch (strtolower($dsn[
'pdoType'])) {
   107                     $this->_pdoType = 
'sybase';
   110                     $this->_pdoType = 
'mssql';
   114                     $this->_pdoType = 
'dblib';
   117             unset($dsn[
'pdoType']);
   121         foreach ($dsn as $key => $val) {
   122             $dsn[$key] = 
"$key=$val";
   125         $dsn = $this->_pdoType . 
':' . implode(
';', $dsn);
   134         if ($this->_connection) {
   138         $this->_connection->exec(
'SET QUOTED_IDENTIFIER ON');
   150         $this->_connection->exec(
'BEGIN TRANSACTION');
   163         $this->_connection->exec(
'COMMIT TRANSACTION');
   175         $this->_connection->exec(
'ROLLBACK TRANSACTION');
   186         $sql = 
"SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";
   223         if ($schemaName != 
null) {
   224             if (strpos($schemaName, 
'.') !== 
false) {
   225                 $result = explode(
'.', $schemaName);
   233         if ($schemaName != 
null) {
   234             $sql .= 
", @table_owner = " . $this->
quoteIdentifier($schemaName, 
true);
   237         $stmt = $this->
query($sql);
   248         $column_position = 16;
   254         if ($schemaName != 
null) {
   255             $sql .= 
", @table_owner = " . $this->
quoteIdentifier($schemaName, 
true);
   258         $stmt = $this->
query($sql);
   260         $primaryKeyColumn = array();
   261         $pkey_column_name = 3;
   263         foreach ($primaryKeysResult as $pkeysRow) {
   264             $primaryKeyColumn[$pkeysRow[$pkey_column_name]] = $pkeysRow[$pkey_key_seq];
   271             $words = explode(
' ', 
$row[$type_name], 2);
   272             if (isset($words[0])) {
   274                 if (isset($words[1])) {
   275                     $identity = (bool) preg_match(
'/identity/', $words[1]);
   279             $isPrimary = array_key_exists(
$row[$column_name], $primaryKeyColumn);
   281                 $primaryPosition = $primaryKeyColumn[
$row[$column_name]];
   283                 $primaryPosition = 
null;
   287                 'SCHEMA_NAME'      => 
null, 
   290                 'COLUMN_POSITION'  => (
int) 
$row[$column_position],
   291                 'DATA_TYPE'        => 
$type,
   292                 'DEFAULT'          => 
$row[$column_def],
   293                 'NULLABLE'         => (
bool) 
$row[$nullable],
   294                 'LENGTH'           => 
$row[$length],
   295                 'SCALE'            => 
$row[$scale],
   296                 'PRECISION'        => 
$row[$precision],
   298                 'PRIMARY'          => $isPrimary,
   299                 'PRIMARY_POSITION' => $primaryPosition,
   300                 'IDENTITY'         => $identity
   322             #require_once 'Zend/Db/Adapter/Exception.php';   326         $offset = intval($offset);
   329             #require_once 'Zend/Db/Adapter/Exception.php';   334             '/^SELECT\s+(DISTINCT\s)?/i',
   335             'SELECT $1TOP ' . (
$count+$offset) . 
' ',
   340             $orderby = stristr($sql, 
'ORDER BY');
   342             if ($orderby !== 
false) {
   343                 $orderParts = explode(
',', substr($orderby, 8));
   344                 $pregReplaceCount = 
null;
   345                 $orderbyInverseParts = array();
   346                 foreach ($orderParts as $orderPart) {
   347                     $orderPart = rtrim($orderPart);
   348                     $inv = preg_replace(
'/\s+desc$/i', 
' ASC', $orderPart, 1, $pregReplaceCount);
   349                     if ($pregReplaceCount) {
   350                         $orderbyInverseParts[] = $inv;
   353                     $inv = preg_replace(
'/\s+asc$/i', 
' DESC', $orderPart, 1, $pregReplaceCount);
   354                     if ($pregReplaceCount) {
   355                         $orderbyInverseParts[] = $inv;
   358                         $orderbyInverseParts[] = $orderPart . 
' DESC';
   362                 $orderbyInverse = 
'ORDER BY ' . implode(
', ', $orderbyInverseParts);
   368             $sql = 
'SELECT * FROM (SELECT TOP ' . 
$count . 
' * FROM (' . $sql . 
') AS inner_tbl';
   369             if ($orderby !== 
false) {
   370                 $sql .= 
' ' . $orderbyInverse . 
' ';
   372             $sql .= 
') AS outer_tbl';
   373             if ($orderby !== 
false) {
   374                 $sql .= 
' ' . $orderby;
   401         $sql = 
'SELECT SCOPE_IDENTITY()';
   413             $stmt = $this->
query(
"SELECT CAST(SERVERPROPERTY('productversion') AS VARCHAR)");
   419         } 
catch (PDOException $e) {
   436         return parent::_quote(
$value);
 
fetchOne($sql, $bind=array())
 
fetchCol($sql, $bind=array())
 
lastInsertId($tableName=null, $primaryKey=null)
 
describeTable($tableName, $schemaName=null)
 
limit($sql, $count, $offset=0)
 
quoteIdentifier($ident, $auto=false)
 
query($sql, $bind=array())