irm-1.6-b3/MDB/Modules/Manager/oci8.php
/**
     * alter an existing table
     * 
     * @param object $dbs database object that is extended by this class
     * @param string $name name of the table that is intended to be changed.
     * @param array $changes associative array that contains the details of each type
     *                              of change that is intended to be performed. The types of
     *                              changes that are currently supported are defined as follows:
     * 
     *                              name
     * 
     *                                 New name for the table.
     * 
     *                             AddedFields
     * 
     *                                 Associative array with the names of fields to be added as
     *                                  indexes of the array. The value of each entry of the array
     *                                  should be set to another associative array with the properties
     *                                  of the fields to be added. The properties of the fields should
     *                                  be the same as defined by the Metabase parser.
     * 
     *                                 Additionally, there should be an entry named Declaration that
     *                                  is expected to contain the portion of the field declaration already
     *                                  in DBMS specific SQL code as it is used in the CREATE TABLE statement.
     * 
     *                             RemovedFields
     * 
     *                                 Associative array with the names of fields to be removed as indexes
     *                                  of the array. Currently the values assigned to each entry are ignored.
     *                                  An empty array should be used for future compatibility.
     * 
     *                             RenamedFields
     * 
     *                                 Associative array with the names of fields to be renamed as indexes
     *                                  of the array. The value of each entry of the array should be set to
     *                                  another associative array with the entry named name with the new
     *                                  field name and the entry named Declaration that is expected to contain
     *                                  the portion of the field declaration already in DBMS specific SQL code
     *                                  as it is used in the CREATE TABLE statement.
     * 
     *                             ChangedFields
     * 
     *                                 Associative array with the names of the fields to be changed as indexes
     *                                  of the array. Keep in mind that if it is intended to change either the
     *                                  name of a field and any other properties, the ChangedFields array entries
     *                                  should have the new names of the fields as array indexes.
     * 
     *                                 The value of each entry of the array should be set to another associative
     *                                  array with the properties of the fields to that are meant to be changed as
     *                                  array entries. These entries should be assigned to the new values of the
     *                                  respective properties. The properties of the fields should be the same
     *                                  as defined by the Metabase parser.
     * 
     *                                 If the default property is meant to be added, removed or changed, there
     *                                  should also be an entry with index ChangedDefault assigned to 1. Similarly,
     *                                  if the notNULL constraint is to be added or removed, there should also be
     *                                  an entry with index ChangedNotNull assigned to 1.
     * 
     *                                 Additionally, there should be an entry named Declaration that is expected
     *                                  to contain the portion of the field changed declaration already in DBMS
     *                                  specific SQL code as it is used in the CREATE TABLE statement.
     *                             Example
     *                                 array(
     *                                     'name' => 'userlist',
     *                                     'AddedFields' => array(
     *                                         'quota' => array(
     *                                             'type' => 'integer',
     *                                             'unsigned' => 1
     *                                             'Declaration' => 'quota INT'
     *                                         )
     *                                     ),
     *                                     'RemovedFields' => array(
     *                                         'file_limit' => array(),
     *                                         'time_limit' => array()
     *                                         ),
     *                                     'ChangedFields' => array(
     *                                         'gender' => array(
     *                                             'default' => 'M',
     *                                             'ChangeDefault' => 1,
     *                                             'Declaration' => "gender CHAR(1) DEFAULT 'M'"
     *                                         )
     *                                     ),
     *                                     'RenamedFields' => array(
     *                                         'sex' => array(
     *                                             'name' => 'gender',
     *                                             'Declaration' => "gender CHAR(1) DEFAULT 'M'"
     *                                         )
     *                                     )
     *                                 )
     * @param boolean $check indicates whether the function should just check if the DBMS driver
     *                              can perform the requested table alterations if the value is TRUE or
     *                              actually perform them otherwise.
     * @access public 
     * @return mixed MDB_OK on success, a MDB error on failure
     */
alter an existing table

@param object $dbs database object that is extended by this class
@param string $name name of the table that is intended to be changed.
@param array $changes associative array that contains the details of each type
of change that is intended to be performed. The types of
changes that are currently supported are defined as follows.

name

New name for the table.



Associative array with the names of fields to be added as
indexes of the array. The value of each entry of the array
should be set to another associative array with the properties
of the fields to be added. The properties of the fields should
be the same as defined by the Metabase parser.

Additionally, there should be an entry named Declaration that
is expected to contain the portion of the field declaration already
in DBMS specific SQL code as it is used in the CREATE TABLE statement.



Associative array with the names of fields to be removed as indexes
of the array. Currently the values assigned to each entry are ignored.
An empty array should be used for future compatibility.



Associative array with the names of fields to be renamed as indexes
of the array. The value of each entry of the array should be set to
another associative array with the entry named name with the new
field name and the entry named Declaration that is expected to contain
the portion of the field declaration already in DBMS specific SQL code
as it is used in the CREATE TABLE statement.



Associative array with the names of the fields to be changed as indexes
of the array. Keep in mind that if it is intended to change either the
name of a field and any other properties, the ChangedFields array entries
should have the new names of the fields as array indexes.

The value of each entry of the array should be set to another associative
array with the properties of the fields to that are meant to be changed as
array entries. These entries should be assigned to the new values of the
respective properties. The properties of the fields should be the same
as defined by the Metabase parser.

If the default property is meant to be added, removed or changed, there
should also be an entry with index ChangedDefault assigned to 1. Similarly,
if the notNULL constraint is to be added or removed, there should also be
an entry with index ChangedNotNull assigned to 1.

Additionally, there should be an entry named Declaration that is expected
to contain the portion of the field changed declaration already in DBMS
specific SQL code as it is used in the CREATE TABLE statement.
alter an existing table @param object $dbs database object that is extended by this class @param string $name name of the table that is intended to be changed . @param array $changes associative array that contains the details of each type of change that is intended to be performed . The types of changes that are currently supported are defined as follows . name New name for the table . Associative array with the names of fields to be added as indexes of the array . The value of each entry of the array should be set to another associative array with the properties of the fields to be added . The properties of the fields should be the same as defined by the Metabase parser . Additionally there should be an entry named Declaration that is expected to contain the portion of the field declaration already in DBMS specific SQL code as it is used in the CREATE TABLE statement . Associative array with the names of fields to be removed as indexes of the array . Currently the values assigned to each entry are ignored . An empty array should be used for future compatibility . Associative array with the names of fields to be renamed as indexes of the array . The value of each entry of the array should be set to another associative array with the entry named name with the new field name and the entry named Declaration that is expected to contain the portion of the field declaration already in DBMS specific SQL code as it is used in the CREATE TABLE statement . Associative array with the names of the fields to be changed as indexes of the array . Keep in mind that if it is intended to change either the name of a field and any other properties the ChangedFields array entries should have the new names of the fields as array indexes . The value of each entry of the array should be set to another associative array with the properties of the fields to that are meant to be changed as array entries . These entries should be assigned to the new values of the respective properties . The properties of the fields should be the same as defined by the Metabase parser . If the default property is meant to be added removed or changed there should also be an entry with index ChangedDefault assigned to 1 . Similarly if the notNULL constraint is to be added or removed there should also be an entry with index ChangedNotNull assigned to 1 . Additionally there should be an entry named Declaration that is expected to contain the portion of the field changed declaration already in DBMS specific SQL code as it is used in the CREATE TABLE statement .
function alterTable(&$db, $name, $changes, $check)
    {
        if ($check) {
            for($change = 0, reset($changes);
                $change < count($changes);
                next($changes), $change++)
            {
                switch (key($changes)) {
                    case 'AddedFields':
                    case 'RemovedFields':
                    case 'ChangedFields':
                    case 'name':
                        break;
                    case 'RenamedFields':
                    default:
                        return($db->raiseError(MDB_ERROR, NULL, NULL, 'Alter table',
                            'change type "'.key($changes).'" not yet supported'));
                }
            }
            return(MDB_OK);
        } else {
            if (isset($changes['RemovedFields'])) {
                $query = ' DROP (';
                $fields = $changes['RemovedFields'];
                for($field = 0, reset($fields);
                    $field < count($fields);
                    next($fields), $field++)
                {
                    if ($field > 0) {
                        $query .= ', ';
                    }
                    $query .= key($fields);
                }
                $query .= ')';
                if (MDB::isError($result = $db->query("ALTER TABLE $name $query"))) {
                    return($result);
                }
                $query = '';
            }
            $query = (isset($changes['name']) ? 'RENAME TO '.$changes['name'] : '');
            if (isset($changes['AddedFields'])) {
                $fields = $changes['AddedFields'];
                for($field = 0, reset($fields);
                    $field < count($fields);
                    next($fields), $field++)
                {
                    $query .= ' ADD ('.$fields[key($fields)]['Declaration'].')';
                }
            }
            if (isset($changes['ChangedFields'])) {
                $fields = $changes['ChangedFields'];
                for($field = 0, reset($fields);
                    $field < count($fields);
                    next($fields), $field++)
                {
                    $current_name = key($fields);
                    if (isset($renamed_fields[$current_name])) {
                        $field_name = $renamed_fields[$current_name];
                        unset($renamed_fields[$current_name]);
                    } else {
                        $field_name = $current_name;
                    }
                    $change = '';
                    $change_type = $change_default = 0;
                    if (isset($fields[$current_name]['type'])) {
                        $change_type = $change_default = 1;
                    }
                    if (isset($fields[$current_name]['length'])) {
                        $change_type = 1;
                    }
                    if (isset($fields[$current_name]['ChangedDefault'])) {
                        $change_default = 1;
                    }
                    if ($change_type) {
                        $change .= ' '.$db->getTypeDeclaration($fields[$current_name]['Definition']);
                    }
                    if ($change_default) {
                        $change .= ' DEFAULT '.(isset($fields[$current_name]['Definition']['default'])
                            ? $db->getFieldValue($fields[$current_name]['Definition']['type'], $fields[$current_name]['Definition']['default']) : 'NULL');
                    }
                    if (isset($fields[$current_name]['ChangedNotNull'])) {
                        $change .= (isset($fields[$current_name]['notnull']) ? ' NOT' : '').' NULL';
                    }
                    if (strcmp($change, '')) {
                        $query .= " MODIFY ($field_name$change)";
                    }
                }
            }
            if($query != '' && MDB::isError($result = $db->query("ALTER TABLE $name $query"))) {
                return($result);
            }
            return(MDB_OK);
        }
        return($db->raiseError());
    }
function alterTable ( & $ db , $ name , $ changes , $ check ) { if ( $ check ) { for ( $ change = 0 , reset ( $ changes ) ; $ change < count ( $ changes ) ; next ( $ changes ) , $ change ++ ) { switch ( key ( $ changes ) ) { case 'AddedFields' : case 'RemovedFields' : case 'ChangedFields' : case 'name' : break ; case 'RenamedFields' : default : return ( $ db -> raiseError ( MDB_ERROR , NULL , NULL , 'Alter table' , 'change type "' . key ( $ changes ) . '" not yet supported' ) ) ; } } return ( MDB_OK ) ; } else { if ( isset ( $ changes [ 'RemovedFields' ] ) ) { $ query = ' DROP (' ; $ fields = $ changes [ 'RemovedFields' ] ; for ( $ field = 0 , reset ( $ fields ) ; $ field < count ( $ fields ) ; next ( $ fields ) , $ field ++ ) { if ( $ field > 0 ) { $ query .= ', ' ; } $ query .= key ( $ fields ) ; } $ query .= ')' ; if ( MDB :: isError ( $ result = $ db -> query ( " ALTER TABLE  $ name $ query " ) ) ) { return ( $ result ) ; } $ query = '' ; } $ query = ( isset ( $ changes [ 'name' ] ) ? 'RENAME TO ' . $ changes [ 'name' ] : '' ) ; if ( isset ( $ changes [ 'AddedFields' ] ) ) { $ fields = $ changes [ 'AddedFields' ] ; for ( $ field = 0 , reset ( $ fields ) ; $ field < count ( $ fields ) ; next ( $ fields ) , $ field ++ ) { $ query .= ' ADD (' . $ fields [ key ( $ fields ) ] [ 'Declaration' ] . ')' ; } } if ( isset ( $ changes [ 'ChangedFields' ] ) ) { $ fields = $ changes [ 'ChangedFields' ] ; for ( $ field = 0 , reset ( $ fields ) ; $ field < count ( $ fields ) ; next ( $ fields ) , $ field ++ ) { $ current_name = key ( $ fields ) ; if ( isset ( $ renamed_fields [ $ current_name ] ) ) { $ field_name = $ renamed_fields [ $ current_name ] ; unset ( $ renamed_fields [ $ current_name ] ) ; } else { $ field_name = $ current_name ; } $ change = '' ; $ change_type = $ change_default = 0 ; if ( isset ( $ fields [ $ current_name ] [ 'type' ] ) ) { $ change_type = $ change_default = 1 ; } if ( isset ( $ fields [ $ current_name ] [ 'length' ] ) ) { $ change_type = 1 ; } if ( isset ( $ fields [ $ current_name ] [ 'ChangedDefault' ] ) ) { $ change_default = 1 ; } if ( $ change_type ) { $ change .= ' ' . $ db -> getTypeDeclaration ( $ fields [ $ current_name ] [ 'Definition' ] ) ; } if ( $ change_default ) { $ change .= ' DEFAULT ' . ( isset ( $ fields [ $ current_name ] [ 'Definition' ] [ 'default' ] ) ? $ db -> getFieldValue ( $ fields [ $ current_name ] [ 'Definition' ] [ 'type' ] , $ fields [ $ current_name ] [ 'Definition' ] [ 'default' ] ) : 'NULL' ) ; } if ( isset ( $ fields [ $ current_name ] [ 'ChangedNotNull' ] ) ) { $ change .= ( isset ( $ fields [ $ current_name ] [ 'notnull' ] ) ? ' NOT' : '' ) . ' NULL' ; } if ( strcmp ( $ change , '' ) ) { $ query .= "  MODIFY ( $ field_name $ change ) " ; } } } if ( $ query != '' && MDB :: isError ( $ result = $ db -> query ( " ALTER TABLE  $ name $ query " ) ) ) { return ( $ result ) ; } return ( MDB_OK ) ; } return ( $ db -> raiseError ( ) ) ; }
alter an existing table
alter an existing table