function system_update_10100

Remove the year 2038 date limitation.

File

core/modules/system/system.install, line 1737

Code

function system_update_10100(&$sandbox = NULL) {
    $connection = \Drupal::database();
    $schema = $connection->schema();
    // Update sessions table.
    if ($schema->tableExists('sessions') && $connection->databaseType() != 'sqlite') {
        $new = [
            'description' => 'The Unix timestamp when this session last requested a page. Old records are purged by PHP automatically.',
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
            'size' => 'big',
        ];
        $schema->changeField('sessions', 'timestamp', 'timestamp', $new);
    }
    // Update batch table.
    if ($schema->tableExists('batch') && $connection->databaseType() != 'sqlite') {
        $new = [
            'description' => 'A Unix timestamp indicating when this batch was submitted for processing. Stale batches are purged at cron time.',
            'type' => 'int',
            'not null' => TRUE,
            'size' => 'big',
        ];
        $schema->changeField('batch', 'timestamp', 'timestamp', $new);
    }
    // Update flood table.
    if ($schema->tableExists('flood') && $connection->databaseType() != 'sqlite') {
        $new = [
            'timestamp' => [
                'description' => 'Timestamp of the event.',
                'type' => 'int',
                'not null' => TRUE,
                'default' => 0,
                'size' => 'big',
            ],
            'expiration' => [
                'description' => 'Expiration timestamp. Expired events are purged on cron run.',
                'type' => 'int',
                'not null' => TRUE,
                'default' => 0,
                'size' => 'big',
            ],
        ];
        foreach ($new as $column_name => $value) {
            $schema->changeField('flood', $column_name, $column_name, $value);
        }
    }
    // Update queue table.
    if ($schema->tableExists('queue') && $connection->databaseType() != 'sqlite') {
        $new = [
            'expire' => [
                'type' => 'int',
                'not null' => TRUE,
                'default' => 0,
                'description' => 'Timestamp when the claim lease expires on the item.',
                'size' => 'big',
            ],
            'created' => [
                'type' => 'int',
                'not null' => TRUE,
                'default' => 0,
                'description' => 'Timestamp when the item was created.',
                'size' => 'big',
            ],
        ];
        foreach ($new as $column_name => $value) {
            $schema->changeField('queue', $column_name, $column_name, $value);
        }
    }
    // Update cache tables.
    $cache_tables = $schema->findTables('cache_%');
    $cache_tables = array_filter($cache_tables, function ($cache_tables) {
        return str_starts_with($cache_tables, 'cache_');
    });
    if ($connection->databaseType() != 'sqlite') {
        foreach (array_keys($cache_tables) as $table) {
            // If the table has no expire column there is nothing to do. This can
            // happen if a site has tables starting with cache_ that are not cache
            // bins.
            if (!$schema->fieldExists($table, 'expire')) {
                continue;
            }
            // Truncate cache tables. They will be flushed anyway at the end of
            // database updates, but emptying the tables now will boost the schema
            // changes.
            $connection->truncate($table)
                ->execute();
            $new = [
                'description' => 'A Unix timestamp indicating when the cache entry should expire, or ' . Cache::PERMANENT . ' for never.',
                'type' => 'int',
                'not null' => TRUE,
                'default' => 0,
                'size' => 'big',
            ];
            $schema->changeField($table, 'expire', 'expire', $new);
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.