Skip to content

Commit 7ade8b7

Browse files
committed
Fix modify_column() issues (bcit-ci#2020)
1 parent 2eaeee5 commit 7ade8b7

File tree

12 files changed

+38
-42
lines changed

12 files changed

+38
-42
lines changed

system/database/DB_forge.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ public function modify_column($table = '', $field = array())
642642
show_error('Field information is required.');
643643
}
644644

645-
$sqls = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields);
645+
$sqls = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->_process_fields());
646646
$this->_reset();
647647
if ($sqls === FALSE)
648648
{

system/database/drivers/cubrid/cubrid_forge.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,8 @@ protected function _alter_table($alter_type, $table, $field)
108108
}
109109
else
110110
{
111-
$sqls[] = $sql.' CHANGE '.$this->_process_column($field[$i]);
112-
if ( ! empty($field[$i]['new_name']))
113-
{
114-
$sqls[] = $sql.' RENAME COLUMN '.$this->db->escape_identifiers($field[$i]['name'])
115-
.' AS '.$this->db->escape_identifiers($field[$i]['name']);
116-
}
111+
$alter_type = empty($field[$i]['new_name']) ? ' MODIFY ' : ' CHANGE ';
112+
$sqls[] = $sql.$alter_type$this->_process_column($field[$i]);
117113
}
118114
}
119115

@@ -139,7 +135,7 @@ protected function _process_column($field)
139135
}
140136

141137
return $this->db->escape_identifiers($field['name'])
142-
.(empty($field['new_name']) ? '' : $this->db->escape_identifiers($field['new_name']))
138+
.(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name']))
143139
.' '.$field['type'].$field['length']
144140
.$field['unsigned']
145141
.$field['null']

system/database/drivers/ibase/ibase_forge.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ protected function _alter_table($alter_type, $table, $field)
137137

138138
$sql = 'ALTER TABLE '.$this->db->escape_identifiers($table);
139139
$sqls = array();
140-
for ($i = 0, $c = count($field), $sql .= $alter_type.' '; $i < $c; $i++)
140+
for ($i = 0, $c = count($field); $i < $c; $i++)
141141
{
142142
if ($field[$i]['_literal'] !== FALSE)
143143
{
@@ -146,13 +146,14 @@ protected function _alter_table($alter_type, $table, $field)
146146

147147
if (isset($field[$i]['type']))
148148
{
149-
$sqls[] = $sql.' TYPE '.$field[$i]['type'].$field[$i]['length'];
149+
$sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identififers($field[$i]['name'])
150+
.' TYPE '.$field[$i]['type'].$field[$i]['length'];
150151
}
151152

152153
if ( ! empty($field[$i]['default']))
153154
{
154-
$sqls[] = $sql.' ALTER '.$this->db->escape_identifiers($field[$i]['name'])
155-
.' SET '.$field[$i]['default'];
155+
$sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name'])
156+
.' SET DEFAULT '.$field[$i]['default'];
156157
}
157158

158159
if (isset($field[$i]['null']))
@@ -165,7 +166,7 @@ protected function _alter_table($alter_type, $table, $field)
165166

166167
if ( ! empty($field[$i]['new_name']))
167168
{
168-
$sqls[] = $sql.' ALTER '.$this->db->escape_identifiers($field[$i]['name'])
169+
$sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name'])
169170
.' TO '.$this->db->escape_identifiers($field[$i]['new_name']);
170171
}
171172
}

system/database/drivers/mysql/mysql_forge.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ protected function _process_column($field)
157157
}
158158

159159
return $this->db->escape_identifiers($field['name'])
160-
.(empty($field['new_name']) ? '' : $this->db->escape_identifiers($field['new_name']))
160+
.(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name']))
161161
.' '.$field['type'].$field['length']
162162
.$field['unsigned']
163163
.$field['null']

system/database/drivers/mysqli/mysqli_forge.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ protected function _process_column($field)
157157
}
158158

159159
return $this->db->escape_identifiers($field['name'])
160-
.(empty($field['new_name']) ? '' : $this->db->escape_identifiers($field['new_name']))
160+
.(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name']))
161161
.' '.$field['type'].$field['length']
162162
.$field['unsigned']
163163
.$field['null']

system/database/drivers/oci8/oci8_forge.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ protected function _alter_table($alter_type, $table, $field)
105105

106106
$sql .= ' '.$alter_type.' ';
107107
$sql .= (count($field) === 1)
108-
? $fields[0]
108+
? $field[0]
109109
: '('.implode(',', $field).')';
110110

111111
// RENAME COLUMN must be executed after MODIFY

system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,8 @@ protected function _alter_table($alter_type, $table, $field)
108108
}
109109
else
110110
{
111-
$sqls[] = $sql.' CHANGE '.$this->_process_column($field[$i]);
112-
if ( ! empty($field[$i]['new_name']))
113-
{
114-
$sqls[] = $sql.' RENAME COLUMN '.$this->db->escape_identifiers($field[$i]['name'])
115-
.' AS '.$this->db->escape_identifiers($field[$i]['name']);
116-
}
111+
$alter_type = empty($field[$i]['new_name']) ? ' MODIFY ' : ' CHANGE ';
112+
$sqls[] = $sql.$alter_type.$this->_process_column($field[$i]);
117113
}
118114
}
119115

@@ -139,7 +135,7 @@ protected function _process_column($field)
139135
}
140136

141137
return $this->db->escape_identifiers($field['name'])
142-
.(empty($field['new_name']) ? '' : $this->db->escape_identifiers($field['new_name']))
138+
.(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name']))
143139
.' '.$field['type'].$field['length']
144140
.$field['unsigned']
145141
.$field['null']

system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ protected function _alter_table($alter_type, $table, $field)
123123

124124
$sql = 'ALTER TABLE '.$this->db->escape_identifiers($table);
125125
$sqls = array();
126-
for ($i = 0, $c = count($field), $sql .= $alter_type.' '; $i < $c; $i++)
126+
for ($i = 0, $c = count($field); $i < $c; $i++)
127127
{
128128
if ($field[$i]['_literal'] !== FALSE)
129129
{
@@ -132,13 +132,14 @@ protected function _alter_table($alter_type, $table, $field)
132132

133133
if (isset($field[$i]['type']))
134134
{
135-
$sqls[] = $sql.' TYPE '.$field[$i]['type'].$field[$i]['length'];
135+
$sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name'])
136+
.' TYPE '.$field[$i]['type'].$field[$i]['length'];
136137
}
137138

138139
if ( ! empty($field[$i]['default']))
139140
{
140-
$sqls[] = $sql.' ALTER '.$this->db->escape_identifiers($field[$i]['name'])
141-
.' SET '.$field[$i]['default'];
141+
$sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name'])
142+
.' SET DEFAULT '.$field[$i]['default'];
142143
}
143144

144145
if (isset($field[$i]['null']))
@@ -151,7 +152,7 @@ protected function _alter_table($alter_type, $table, $field)
151152

152153
if ( ! empty($field[$i]['new_name']))
153154
{
154-
$sqls[] = $sql.' ALTER '.$this->db->escape_identifiers($field[$i]['name'])
155+
$sqls[] = $sql.' ALTER COLUMN '.$this->db->escape_identifiers($field[$i]['name'])
155156
.' TO '.$this->db->escape_identifiers($field[$i]['new_name']);
156157
}
157158
}

system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ protected function _process_column($field)
171171
}
172172

173173
return $this->db->escape_identifiers($field['name'])
174-
.(empty($field['new_name']) ? '' : $this->db->escape_identifiers($field['new_name']))
174+
.(empty($field['new_name']) ? '' : ' '.$this->db->escape_identifiers($field['new_name']))
175175
.' '.$field['type'].$field['length']
176176
.$field['unsigned']
177177
.$field['null']

system/database/drivers/pdo/subdrivers/pdo_oci_forge.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ protected function _alter_table($alter_type, $table, $field)
105105

106106
$sql .= ' '.$alter_type.' ';
107107
$sql .= (count($field) === 1)
108-
? $fields[0]
108+
? $field[0]
109109
: '('.implode(',', $field).')';
110110

111111
// RENAME COLUMN must be executed after MODIFY

0 commit comments

Comments
 (0)