/** * Expand session id column to varchar(256) to accommodate expanded size possible in PHP 7.1 * Force ascii character set to prevent key length issues. * * @return bool */ public function apply_sess_id() { $migrate = new Tables(); $migrate->useTable('session'); $migrate->alterColumn('session', 'sess_id', "varchar(256) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT ''"); return $migrate->executeQueue(true); }
/** * Build any DDL required to synchronize an existing table to match the target schema * * @param string $tableName table to synchronize * * @return void */ protected function synchronizeTable($tableName) { foreach ($this->targetDefinitions[$tableName]['columns'] as $column) { $attributes = $this->tableHandler->getColumnAttributes($tableName, $column['name']); if ($attributes === false) { $this->tableHandler->addColumn($tableName, $column['name'], $column['attributes']); } elseif ($column['attributes'] !== $attributes) { $this->tableHandler->alterColumn($tableName, $column['name'], $column['attributes']); } } $tableDef = $this->tableHandler->dumpTables(); if (isset($tableDef[$tableName])) { foreach ($tableDef[$tableName]['columns'] as $columnData) { if (!$this->targetHasColumn($tableName, $columnData['name'])) { $this->tableHandler->dropColumn($tableName, $columnData['name']); } } } $existingIndexes = $this->tableHandler->getTableIndexes($tableName); if (isset($this->targetDefinitions[$tableName]['keys'])) { foreach ($this->targetDefinitions[$tableName]['keys'] as $key => $keyData) { if ($key === 'PRIMARY') { if (!isset($existingIndexes[$key])) { $this->tableHandler->addPrimaryKey($tableName, $keyData['columns']); } elseif ($existingIndexes[$key]['columns'] !== $keyData['columns']) { $this->tableHandler->dropPrimaryKey($tableName); $this->tableHandler->addPrimaryKey($tableName, $keyData['columns']); } } else { if (!isset($existingIndexes[$key])) { $this->tableHandler->addIndex($key, $tableName, $keyData['columns'], $keyData['unique']); } elseif ($existingIndexes[$key]['unique'] !== $keyData['unique'] || $existingIndexes[$key]['columns'] !== $keyData['columns']) { $this->tableHandler->dropIndex($key, $tableName); $this->tableHandler->addIndex($key, $tableName, $keyData['columns'], $keyData['unique']); } } } } if (false !== $existingIndexes) { foreach ($existingIndexes as $key => $keyData) { if (!isset($this->targetDefinitions[$tableName]['keys'][$key])) { $this->tableHandler->dropIndex($key, $tableName); } } } }
/** * @return bool */ public function apply_online_ip() { $migrate = new Tables(); $migrate->useTable('online'); $migrate->alterColumn('online', 'online_ip', "varchar(45) NOT NULL DEFAULT ''"); return $migrate->executeQueue(true); }