mirror of
https://github.com/processwire/processwire.git
synced 2025-08-07 15:26:54 +02:00
Fix issue processwire/processwire-issues#1966
This commit is contained in:
@@ -1248,7 +1248,9 @@ class Field extends WireData implements Saveable, Exportable {
|
||||
$table = $this->setTable;
|
||||
} else {
|
||||
$name = $this->settings['name'];
|
||||
if(!strlen($name)) throw new WireException("Field 'name' is required");
|
||||
$length = strlen($name);
|
||||
if(!$length) throw new WireException("Field 'name' is required");
|
||||
if($length > 58) $name = substr($name, 0, 58); // 'field_' + 58 = 64 max
|
||||
$table = self::tablePrefix . $name;
|
||||
}
|
||||
if(self::$lowercaseTables) $table = strtolower($table);
|
||||
@@ -1265,6 +1267,7 @@ class Field extends WireData implements Saveable, Exportable {
|
||||
*/
|
||||
public function setTable($table = null) {
|
||||
$table = empty($table) ? '' : $this->wire()->sanitizer->fieldName($table);
|
||||
if(strlen($table) > 64) $table = substr($table, 0, 64);
|
||||
$this->setTable = $table;
|
||||
}
|
||||
|
||||
|
@@ -388,12 +388,14 @@ class Fields extends WireSaveableItems {
|
||||
// even if only the case has changed.
|
||||
$schema = $item->type->getDatabaseSchema($item);
|
||||
if(!empty($schema)) {
|
||||
foreach(array($table, "tmp_$table") as $t) {
|
||||
list(,$tmpTable) = explode(Field::tablePrefix, $table, 2);
|
||||
$tmpTable = "tempf_$tmpTable";
|
||||
foreach(array($table, $tmpTable) as $t) {
|
||||
if(!$database->tableExists($t)) continue;
|
||||
throw new WireException("Cannot rename to '$item->name' because table `$table` already exists");
|
||||
}
|
||||
$database->exec("RENAME TABLE `$prevTable` TO `tmp_$table`"); // QA
|
||||
$database->exec("RENAME TABLE `tmp_$table` TO `$table`"); // QA
|
||||
$database->exec("RENAME TABLE `$prevTable` TO `$tmpTable`"); // QA
|
||||
$database->exec("RENAME TABLE `$tmpTable` TO `$table`"); // QA
|
||||
}
|
||||
$item->prevTable = '';
|
||||
}
|
||||
|
Reference in New Issue
Block a user