[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pear-cvs
Subject:    [PEAR-CVS] cvs: pear /MDB2/MDB2/Driver/Manager mssql.php
From:       "Ali Fazelzadeh" <afz () php ! net>
Date:       2008-01-30 16:00:51
Message-ID: cvsafz1201708851 () cvsserver
[Download RAW message or body]

afz		Wed Jan 30 16:00:51 2008 UTC

  Modified files:              
    /pear/MDB2/MDB2/Driver/Manager	mssql.php 
  Log:
  alterTable + mssql fully implemented
  
http://cvs.php.net/viewvc.cgi/pear/MDB2/MDB2/Driver/Manager/mssql.php?r1=1.96&r2=1.97&diff_format=u
                
Index: pear/MDB2/MDB2/Driver/Manager/mssql.php
diff -u pear/MDB2/MDB2/Driver/Manager/mssql.php:1.96 \
                pear/MDB2/MDB2/Driver/Manager/mssql.php:1.97
--- pear/MDB2/MDB2/Driver/Manager/mssql.php:1.96	Tue Jan 29 07:37:24 2008
+++ pear/MDB2/MDB2/Driver/Manager/mssql.php	Wed Jan 30 16:00:51 2008
@@ -44,7 +44,7 @@
 // |          Lorenzo Alberton <l.alberton@quipo.it>                      |
 // +----------------------------------------------------------------------+
 //
-// $Id: mssql.php,v 1.96 2008/01/29 07:37:24 quipo Exp $
+// $Id: mssql.php,v 1.97 2008/01/30 16:00:51 afz Exp $
 //
 
 require_once 'MDB2/Driver/Manager/Common.php';
@@ -353,16 +353,16 @@
         if (PEAR::isError($db)) {
             return $db;
         }
+        $name = $db->quoteIdentifier($name, true);
 
         foreach ($changes as $change_name => $change) {
             switch ($change_name) {
-            case 'add':
-                break;
             case 'remove':
-                break;
-            case 'name':
             case 'rename':
+            case 'add':
             case 'change':
+            case 'name':
+                break;
             default:
                 return $db->raiseError(MDB2_ERROR_CANNOT_ALTER, null, null,
                     'change type "'.$change_name.'" not yet supported', \
__FUNCTION__); @@ -373,34 +373,75 @@
             return MDB2_OK;
         }
 
-        $query = '';
+        if (!empty($changes['remove']) && is_array($changes['remove'])) {
+            $query = '';
+            foreach ($changes['remove'] as $field_name => $field) {
+                if ($query) {
+                    $query.= ', ';
+                }
+                $field_name = $db->quoteIdentifier($field_name, true);
+                $query.= 'DROP COLUMN ' . $field_name;
+            }
+
+            $result = $db->exec("ALTER TABLE $name $query");
+            if (PEAR::isError($result)) {
+                return $result;
+            }
+        }
+
+        if (!empty($changes['rename']) && is_array($changes['rename'])) {
+            foreach ($changes['rename'] as $field_name => $field) {
+                $field_name = $db->quoteIdentifier($field_name, true);
+                $result = $db->exec("sp_rename '$name.$field_name', \
'".$field['name']."', 'COLUMN'"); +                if (PEAR::isError($result)) {
+                    return $result;
+                }
+            }
+        }
+
         if (!empty($changes['add']) && is_array($changes['add'])) {
+            $query = '';
             foreach ($changes['add'] as $field_name => $field) {
                 if ($query) {
                     $query.= ', ';
                 } else {
-                    $query.= 'ADD COLUMN ';
+                    $query.= 'ADD ';
                 }
                 $query.= $db->getDeclaration($field['type'], $field_name, $field);
             }
+
+            $result = $db->exec("ALTER TABLE $name $query");
+            if (PEAR::isError($result)) {
+                return $result;
+            }
         }
 
-        if (!empty($changes['remove']) && is_array($changes['remove'])) {
-            foreach ($changes['remove'] as $field_name => $field) {
+        if (!empty($changes['change']) && is_array($changes['change'])) {
+            $query = '';
+            foreach ($changes['change'] as $field_name => $field) {
                 if ($query) {
                     $query.= ', ';
+                } else {
+                    $query.= 'ALTER COLUMN ';
                 }
-                $field_name = $db->quoteIdentifier($field_name, true);
-                $query.= 'DROP COLUMN ' . $field_name;
+                $query.= $db->getDeclaration($field['definition']['type'], \
$field_name, $field['definition'], true); +            }
+
+            $result = $db->exec("ALTER TABLE $name $query");
+            if (PEAR::isError($result)) {
+                return $result;
             }
         }
 
-        if (!$query) {
-            return MDB2_OK;
+        if (!empty($changes['name'])) {
+            $new_name = $db->quoteIdentifier($changes['name'], true);
+            $result = $db->exec("sp_rename '$name', '$new_name'");
+            if (PEAR::isError($result)) {
+                return $result;
+            }
         }
 
-        $name = $db->quoteIdentifier($name, true);
-        return $db->exec("ALTER TABLE $name $query");
+        return MDB2_OK;
     }
 
     // }}}

-- 
PEAR CVS Mailing List (http://pear.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic