Esempio n. 1
0
 /**
  * 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);
 }
Esempio n. 2
0
 /**
  * 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);
             }
         }
     }
 }
Esempio n. 3
0
 /**
  * @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);
 }