core/Migrations/Version20170101010100.php
<?php
/**
* @author Philipp Schaffrath <pschaffrath@owncloud.com>
*
* @copyright Copyright (c) 2018, ownCloud GmbH
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OC\Migrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Types\Type;
use OCP\Migration\ISchemaMigration;
/**
* Migration from stable8.2 to stable9
*/
class Version20170101010100 implements ISchemaMigration {
public function changeSchema(Schema $schema, array $options) {
$prefix = $options['tablePrefix'];
if (!$schema->hasTable("{$prefix}addressbookchanges")) {
$addressBookChangesTable = $schema->createTable("{$prefix}addressbookchanges");
$addressBookChangesTable->addColumn(
'id',
Type::INTEGER,
[
'notnull' => true,
'autoincrement' => true,
'unsigned' => true
]
);
$addressBookChangesTable->addColumn(
'uri',
Type::STRING,
[
'notnull' => false,
'default' => null,
'length' => 255
]
);
$addressBookChangesTable->addColumn(
'synctoken',
Type::INTEGER,
[
'notnull' => true,
'default' => 1,
'unsigned' => true
]
);
$addressBookChangesTable->addColumn(
'addressbookid',
Type::INTEGER,
[
'notnull' => true
]
);
$addressBookChangesTable->addColumn(
'operation',
Type::SMALLINT,
[
'notnull' => true
]
);
$addressBookChangesTable->setPrimaryKey(['id']);
$addressBookChangesTable->addIndex(['addressbookid', 'synctoken'], 'addressbookid_synctoken');
}
if (!$schema->hasTable("{$prefix}addressbooks")) {
$addressBooksTable = $schema->createTable("{$prefix}addressbooks");
$addressBooksTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$addressBooksTable->addColumn(
'principaluri',
Type::STRING,
[
'default' => null,
'notnull' => false,
'length' => 255
]
);
$addressBooksTable->addColumn(
'displayname',
Type::STRING,
[
'default' => null,
'notnull' => false,
'length' => 255
]
);
$addressBooksTable->addColumn(
'uri',
Type::STRING,
[
'default' => null,
'notnull' => false,
'length' => 255
]
);
$addressBooksTable->addColumn(
'description',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$addressBooksTable->addColumn(
'synctoken',
Type::INTEGER,
[
'default' => 1,
'unsigned' => true
]
);
$addressBooksTable->setPrimaryKey(['id']);
$addressBooksTable->addUniqueIndex(['principaluri', 'uri'], 'addressbook_index');
}
if (!$schema->hasTable("{$prefix}calendarchanges")) {
$calendarChangesTable = $schema->createTable("{$prefix}calendarchanges");
$calendarChangesTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$calendarChangesTable->addColumn(
'uri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarChangesTable->addColumn(
'synctoken',
Type::INTEGER,
[
'default' => 1,
'unsigned' => true
]
);
$calendarChangesTable->addColumn(
'calendarid',
Type::INTEGER
);
$calendarChangesTable->addColumn(
'operation',
Type::SMALLINT
);
$calendarChangesTable->setPrimaryKey(['id']);
$calendarChangesTable->addIndex(['calendarid', 'synctoken'], 'calendarid_synctoken');
}
if (!$schema->hasTable("{$prefix}calendarobjects")) {
$calendarObjectsTable = $schema->createTable("{$prefix}calendarobjects");
$calendarObjectsTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$calendarObjectsTable->addColumn(
'calendardata',
Type::BLOB,
[
'default' => null,
'notnull' => false
]
);
$calendarObjectsTable->addColumn(
'uri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarObjectsTable->addColumn(
'calendarid',
Type::INTEGER,
[
'unsigned' => true
]
);
$calendarObjectsTable->addColumn(
'lastmodified',
Type::INTEGER,
[
'default' => null,
'unsigned' => true,
'notnull' => false
]
);
$calendarObjectsTable->addColumn(
'etag',
Type::STRING,
[
'default' => null,
'length' => 32,
'notnull' => false
]
);
$calendarObjectsTable->addColumn(
'size',
Type::BIGINT,
[
'unsigned' => true
]
);
$calendarObjectsTable->addColumn(
'componenttype',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarObjectsTable->addColumn(
'firstoccurence',
Type::INTEGER,
[
'default' => null,
'unsigned' => true,
'notnull' => false
]
);
$calendarObjectsTable->addColumn(
'lastoccurence',
Type::INTEGER,
[
'default' => null,
'unsigned' => true,
'notnull' => false
]
);
$calendarObjectsTable->addColumn(
'uid',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarObjectsTable->setPrimaryKey(['id']);
$calendarObjectsTable->addUniqueIndex(['calendarid', 'uri'], 'calobjects_index');
}
if (!$schema->hasTable("{$prefix}calendars")) {
$calendarsTable = $schema->createTable("{$prefix}calendars");
$calendarsTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$calendarsTable->addColumn(
'principaluri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarsTable->addColumn(
'displayname',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarsTable->addColumn(
'uri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarsTable->addColumn(
'synctoken',
Type::INTEGER,
[
'default' => 1,
'unsigned' => true
]
);
$calendarsTable->addColumn(
'description',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarsTable->addColumn(
'calendarorder',
Type::INTEGER,
[
'default' => 0,
'unsigned' => true
]
);
$calendarsTable->addColumn(
'calendarcolor',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarsTable->addColumn(
'timezone',
Type::TEXT,
[
'default' => null,
'notnull' => false
]
);
$calendarsTable->addColumn(
'components',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarsTable->addColumn(
'transparent',
Type::SMALLINT,
[
'default' => 0,
]
);
$calendarsTable->setPrimaryKey(['id']);
$calendarsTable->addUniqueIndex(['principaluri', 'uri'], 'calendars_index');
}
if (!$schema->hasTable("{$prefix}calendarsubscriptions")) {
$calendarSubscriptionsTable = $schema->createTable("{$prefix}calendarsubscriptions");
$calendarSubscriptionsTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$calendarSubscriptionsTable->addColumn(
'uri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'principaluri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'source',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'displayname',
Type::STRING,
[
'default' => null,
'length' => 100,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'refreshrate',
Type::STRING,
[
'default' => null,
'length' => 10,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'calendarorder',
Type::INTEGER,
[
'default' => 0,
'unsigned' => true
]
);
$calendarSubscriptionsTable->addColumn(
'calendarcolor',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'striptodos',
Type::SMALLINT,
[
'default' => null,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'stripalarms',
Type::SMALLINT,
[
'default' => null,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'stripattachments',
Type::SMALLINT,
[
'default' => null,
'notnull' => false
]
);
$calendarSubscriptionsTable->addColumn(
'lastmodified',
Type::INTEGER,
[
'default' => null,
'unsigned' => true,
'notnull' => false
]
);
$calendarSubscriptionsTable->setPrimaryKey(['id']);
$calendarSubscriptionsTable->addUniqueIndex(['principaluri', 'uri'], 'calsub_index');
}
if (!$schema->hasTable("{$prefix}cards")) {
$cardsTable = $schema->createTable("{$prefix}cards");
$cardsTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$cardsTable->addColumn(
'addressbookid',
Type::INTEGER,
[
'default' => 0
]
);
$cardsTable->addColumn(
'carddata',
Type::BLOB,
[
'default' => null,
'notnull' => false
]
);
$cardsTable->addColumn(
'uri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$cardsTable->addColumn(
'lastmodified',
Type::BIGINT,
[
'default' => null,
'unsigned' => true,
'notnull' => false
]
);
$cardsTable->addColumn(
'etag',
Type::STRING,
[
'default' => null,
'length' => 32,
'notnull' => false
]
);
$cardsTable->addColumn(
'size',
Type::BIGINT,
[
'unsigned' => true
]
);
$cardsTable->setPrimaryKey(['id']);
}
if (!$schema->hasTable("{$prefix}cards_properties")) {
$cardsPropertiesTable = $schema->createTable("{$prefix}cards_properties");
$cardsPropertiesTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$cardsPropertiesTable->addColumn(
'addressbookid',
Type::BIGINT,
[
'default' => 0
]
);
$cardsPropertiesTable->addColumn(
'cardid',
Type::BIGINT,
[
'default' => 0,
'unsigned' => true
]
);
$cardsPropertiesTable->addColumn(
'name',
Type::STRING,
[
'default' => null,
'length' => 64,
'notnull' => false
]
);
$cardsPropertiesTable->addColumn(
'value',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$cardsPropertiesTable->addColumn(
'preferred',
Type::INTEGER,
[
'default' => 1
]
);
$cardsPropertiesTable->setPrimaryKey(['id']);
$cardsPropertiesTable->addIndex(['value'], 'card_value_index');
$cardsPropertiesTable->addIndex(['name'], 'card_name_index');
$cardsPropertiesTable->addIndex(['cardid'], 'card_contactid_index');
}
if (!$schema->hasTable("{$prefix}comments")) {
$commentsTable = $schema->createTable("{$prefix}comments");
$commentsTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$commentsTable->addColumn(
'parent_id',
Type::INTEGER,
[
'default' => 0,
'unsigned' => true
]
);
$commentsTable->addColumn(
'topmost_parent_id',
Type::INTEGER,
[
'default' => 0,
'unsigned' => true
]
);
$commentsTable->addColumn(
'children_count',
Type::INTEGER,
[
'default' => 0,
'unsigned' => true
]
);
$commentsTable->addColumn(
'actor_type',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$commentsTable->addColumn(
'actor_id',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$commentsTable->addColumn(
'message',
Type::TEXT,
[
'default' => null,
'notnull' => false
]
);
$commentsTable->addColumn(
'verb',
Type::STRING,
[
'default' => null,
'length' => 64,
'notnull' => false
]
);
$commentsTable->addColumn(
'creation_timestamp',
Type::DATETIME,
[
'default' => null,
'notnull' => false
]
);
$commentsTable->addColumn(
'latest_child_timestamp',
Type::DATETIME,
[
'default' => null,
'notnull' => false
]
);
$commentsTable->addColumn(
'object_type',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$commentsTable->addColumn(
'object_id',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$commentsTable->setPrimaryKey(['id']);
$commentsTable->addIndex(['actor_type', 'actor_id'], 'comments_actor_index');
$commentsTable->addIndex(['object_type', 'object_id', 'creation_timestamp'], 'comments_object_index');
$commentsTable->addIndex(['topmost_parent_id'], 'comments_topmost_parent_id_idx');
$commentsTable->addIndex(['parent_id'], 'comments_parent_id_index');
}
if (!$schema->hasTable("{$prefix}comments_read_markers")) {
$commentsReadMarkersTable = $schema->createTable("{$prefix}comments_read_markers");
$commentsReadMarkersTable->addColumn(
'user_id',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$commentsReadMarkersTable->addColumn(
'marker_datetime',
Type::DATETIME,
[
'default' => null,
'notnull' => false
]
);
$commentsReadMarkersTable->addColumn(
'object_type',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$commentsReadMarkersTable->addColumn(
'object_id',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$commentsReadMarkersTable->addUniqueIndex(['user_id', 'object_type', 'object_id'], 'comments_marker_index');
$commentsReadMarkersTable->addIndex(['object_type', 'object_id'], 'comments_marker_object_index');
}
if (!$schema->hasTable("{$prefix}credentials")) {
$credentialsTable = $schema->createTable("{$prefix}credentials");
$credentialsTable->addColumn(
'user',
Type::STRING,
[
'length' => 64
]
);
$credentialsTable->addColumn(
'identifier',
Type::STRING,
[
'length' => 64
]
);
$credentialsTable->addColumn(
'credentials',
Type::TEXT,
[
'default' => null,
'notnull' => false
]
);
$credentialsTable->setPrimaryKey(['user', 'identifier']);
$credentialsTable->addIndex(['user'], 'credentials_user');
}
if (!$schema->hasTable("{$prefix}dav_shares")) {
$davSharesTable = $schema->createTable("{$prefix}dav_shares");
$davSharesTable->addColumn(
'id',
Type::INTEGER,
[
'autoincrement' => true,
'unsigned' => true,
'notnull' => true
]
);
$davSharesTable->addColumn(
'principaluri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$davSharesTable->addColumn(
'type',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$davSharesTable->addColumn(
'access',
Type::SMALLINT,
[
'default' => null,
'notnull' => false
]
);
$davSharesTable->addColumn(
'resourceid',
Type::INTEGER,
[
'unsigned' => true
]
);
$davSharesTable->setPrimaryKey(['id']);
$davSharesTable->addUniqueIndex(['principaluri', 'resourceid', 'type'], 'dav_shares_index');
}
if (!$schema->hasTable("{$prefix}mounts")) {
$mountsTable = $schema->createTable("{$prefix}mounts");
$mountsTable->addColumn(
'id',
Type::INTEGER,
[
'autoincrement' => true,
'notnull' => true
]
);
$mountsTable->addColumn(
'storage_id',
Type::INTEGER
);
$mountsTable->addColumn(
'root_id',
Type::INTEGER
);
$mountsTable->addColumn(
'user_id',
Type::STRING,
[
'length' => 64
]
);
$mountsTable->addColumn(
'mount_point',
Type::STRING,
[
'length' => 4000
]
);
$mountsTable->setPrimaryKey(['id']);
$mountsTable->addUniqueIndex(['user_id', 'root_id'], 'mounts_user_root_index');
$mountsTable->addIndex(['root_id'], 'mounts_root_index');
$mountsTable->addIndex(['storage_id'], 'mounts_storage_index');
$mountsTable->addIndex(['user_id'], 'mounts_user_index');
}
if (!$schema->hasTable("{$prefix}schedulingobjects")) {
$schedulingObjectsTable = $schema->createTable("{$prefix}schedulingobjects");
$schedulingObjectsTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$schedulingObjectsTable->addColumn(
'principaluri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$schedulingObjectsTable->addColumn(
'calendardata',
Type::BLOB,
[
'default' => null,
'notnull' => false
]
);
$schedulingObjectsTable->addColumn(
'uri',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
$schedulingObjectsTable->addColumn(
'lastmodified',
Type::INTEGER,
[
'default' => null,
'unsigned' => true,
'notnull' => false
]
);
$schedulingObjectsTable->addColumn(
'etag',
Type::STRING,
[
'default' => null,
'length' => 32,
'notnull' => false
]
);
$schedulingObjectsTable->addColumn(
'size',
Type::BIGINT,
[
'unsigned' => true
]
);
$schedulingObjectsTable->setPrimaryKey(['id']);
}
if (!$schema->hasTable("{$prefix}systemtag")) {
$systemTagTable = $schema->createTable("{$prefix}systemtag");
$systemTagTable->addColumn(
'id',
Type::INTEGER,
[
'unsigned' => true,
'autoincrement' => true,
'notnull' => true
]
);
$systemTagTable->addColumn(
'name',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$systemTagTable->addColumn(
'visibility',
Type::SMALLINT,
[
'default' => 1
]
);
$systemTagTable->addColumn(
'editable',
Type::SMALLINT,
[
'default' => 1
]
);
$systemTagTable->setPrimaryKey(['id']);
$systemTagTable->addUniqueIndex(['name', 'visibility', 'editable'], 'tag_ident');
}
if (!$schema->hasTable("{$prefix}systemtag_object_mapping")) {
$systemTagObjectMappingTable = $schema->createTable("{$prefix}systemtag_object_mapping");
$systemTagObjectMappingTable->addColumn(
'objectid',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$systemTagObjectMappingTable->addColumn(
'objecttype',
Type::STRING,
[
'default' => '',
'length' => 64
]
);
$systemTagObjectMappingTable->addColumn(
'systemtagid',
Type::INTEGER,
[
'default' => 0,
'notnull' => true,
'unsigned' => true
]
);
$systemTagObjectMappingTable->addUniqueIndex(['objecttype', 'objectid', 'systemtagid'], 'mapping');
}
if ($schema->hasTable("{$prefix}file_map")) {
$schema->dropTable("{$prefix}file_map");
}
if ($schema->hasTable("{$prefix}filecache")) {
$fileCacheTable = $schema->getTable("{$prefix}filecache");
if (!$fileCacheTable->hasColumn('checksum')) {
$fileCacheTable->addColumn(
'checksum',
Type::STRING,
[
'default' => null,
'length' => 255,
'notnull' => false
]
);
}
}
if ($schema->hasTable("{$prefix}share")) {
$shareTable = $schema->getTable("{$prefix}share");
if (!$shareTable->hasColumn('uid_initiator')) {
$shareTable->addColumn(
'uid_initiator',
Type::STRING,
[
'default' => null,
'length' => 64,
'notnull' => false
]
);
}
}
}
}