using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Jellyfin.Database.Providers.PgSql.Migrations
{
///
public partial class InitMigration : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "ActivityLogs",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column(type: "character varying(512)", maxLength: 512, nullable: false),
Overview = table.Column(type: "character varying(512)", maxLength: 512, nullable: true),
ShortOverview = table.Column(type: "character varying(512)", maxLength: 512, nullable: true),
Type = table.Column(type: "character varying(256)", maxLength: 256, nullable: false),
UserId = table.Column(type: "uuid", nullable: false),
ItemId = table.Column(type: "character varying(256)", maxLength: 256, nullable: true),
DateCreated = table.Column(type: "timestamp with time zone", nullable: false),
LogSeverity = table.Column(type: "integer", nullable: false),
RowVersion = table.Column(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ActivityLogs", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ApiKeys",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
DateCreated = table.Column(type: "timestamp with time zone", nullable: false),
DateLastActivity = table.Column(type: "timestamp with time zone", nullable: false),
Name = table.Column(type: "character varying(64)", maxLength: 64, nullable: false),
AccessToken = table.Column(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ApiKeys", x => x.Id);
});
migrationBuilder.CreateTable(
name: "BaseItems",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
Type = table.Column(type: "text", nullable: false),
Data = table.Column(type: "text", nullable: true),
Path = table.Column(type: "text", nullable: true),
StartDate = table.Column(type: "timestamp with time zone", nullable: false),
EndDate = table.Column(type: "timestamp with time zone", nullable: false),
ChannelId = table.Column(type: "text", nullable: true),
IsMovie = table.Column(type: "boolean", nullable: false),
CommunityRating = table.Column(type: "real", nullable: true),
CustomRating = table.Column(type: "text", nullable: true),
IndexNumber = table.Column(type: "integer", nullable: true),
IsLocked = table.Column(type: "boolean", nullable: false),
Name = table.Column(type: "text", nullable: true),
OfficialRating = table.Column(type: "text", nullable: true),
MediaType = table.Column(type: "text", nullable: true),
Overview = table.Column(type: "text", nullable: true),
ParentIndexNumber = table.Column(type: "integer", nullable: true),
PremiereDate = table.Column(type: "timestamp with time zone", nullable: true),
ProductionYear = table.Column(type: "integer", nullable: true),
Genres = table.Column(type: "text", nullable: true),
SortName = table.Column(type: "text", nullable: true),
ForcedSortName = table.Column(type: "text", nullable: true),
RunTimeTicks = table.Column(type: "bigint", nullable: true),
DateCreated = table.Column(type: "timestamp with time zone", nullable: true),
DateModified = table.Column(type: "timestamp with time zone", nullable: true),
IsSeries = table.Column(type: "boolean", nullable: false),
EpisodeTitle = table.Column(type: "text", nullable: true),
IsRepeat = table.Column(type: "boolean", nullable: false),
PreferredMetadataLanguage = table.Column(type: "text", nullable: true),
PreferredMetadataCountryCode = table.Column(type: "text", nullable: true),
DateLastRefreshed = table.Column(type: "timestamp with time zone", nullable: true),
DateLastSaved = table.Column(type: "timestamp with time zone", nullable: true),
IsInMixedFolder = table.Column(type: "boolean", nullable: false),
Studios = table.Column(type: "text", nullable: true),
ExternalServiceId = table.Column(type: "text", nullable: true),
Tags = table.Column(type: "text", nullable: true),
IsFolder = table.Column(type: "boolean", nullable: false),
InheritedParentalRatingValue = table.Column(type: "integer", nullable: true),
UnratedType = table.Column(type: "text", nullable: true),
CriticRating = table.Column(type: "real", nullable: true),
CleanName = table.Column(type: "text", nullable: true),
PresentationUniqueKey = table.Column(type: "text", nullable: true),
OriginalTitle = table.Column(type: "text", nullable: true),
PrimaryVersionId = table.Column(type: "text", nullable: true),
DateLastMediaAdded = table.Column(type: "timestamp with time zone", nullable: true),
Album = table.Column(type: "text", nullable: true),
LUFS = table.Column(type: "real", nullable: true),
NormalizationGain = table.Column(type: "real", nullable: true),
IsVirtualItem = table.Column(type: "boolean", nullable: false),
SeriesName = table.Column(type: "text", nullable: true),
SeasonName = table.Column(type: "text", nullable: true),
ExternalSeriesId = table.Column(type: "text", nullable: true),
Tagline = table.Column(type: "text", nullable: true),
ProductionLocations = table.Column(type: "text", nullable: true),
ExtraIds = table.Column(type: "text", nullable: true),
TotalBitrate = table.Column(type: "integer", nullable: true),
ExtraType = table.Column(type: "integer", nullable: true),
Artists = table.Column(type: "text", nullable: true),
AlbumArtists = table.Column(type: "text", nullable: true),
ExternalId = table.Column(type: "text", nullable: true),
SeriesPresentationUniqueKey = table.Column(type: "text", nullable: true),
ShowId = table.Column(type: "text", nullable: true),
OwnerId = table.Column(type: "text", nullable: true),
Width = table.Column(type: "integer", nullable: true),
Height = table.Column(type: "integer", nullable: true),
Size = table.Column(type: "bigint", nullable: true),
Audio = table.Column(type: "integer", nullable: true),
ParentId = table.Column(type: "uuid", nullable: true),
TopParentId = table.Column(type: "uuid", nullable: true),
SeasonId = table.Column(type: "uuid", nullable: true),
SeriesId = table.Column(type: "uuid", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_BaseItems", x => x.Id);
});
migrationBuilder.CreateTable(
name: "CustomItemDisplayPreferences",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column(type: "uuid", nullable: false),
ItemId = table.Column(type: "uuid", nullable: false),
Client = table.Column(type: "character varying(32)", maxLength: 32, nullable: false),
Key = table.Column(type: "text", nullable: false),
Value = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_CustomItemDisplayPreferences", x => x.Id);
});
migrationBuilder.CreateTable(
name: "DeviceOptions",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
DeviceId = table.Column(type: "text", nullable: false),
CustomName = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_DeviceOptions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "ItemValues",
columns: table => new
{
ItemValueId = table.Column(type: "uuid", nullable: false),
Type = table.Column(type: "integer", nullable: false),
Value = table.Column(type: "text", nullable: false),
CleanValue = table.Column(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ItemValues", x => x.ItemValueId);
});
migrationBuilder.CreateTable(
name: "MediaSegments",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
ItemId = table.Column(type: "uuid", nullable: false),
Type = table.Column(type: "integer", nullable: false),
EndTicks = table.Column(type: "bigint", nullable: false),
StartTicks = table.Column(type: "bigint", nullable: false),
SegmentProviderId = table.Column(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_MediaSegments", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Peoples",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
Name = table.Column(type: "text", nullable: false),
PersonType = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Peoples", x => x.Id);
});
migrationBuilder.CreateTable(
name: "TrickplayInfos",
columns: table => new
{
ItemId = table.Column(type: "uuid", nullable: false),
Width = table.Column(type: "integer", nullable: false),
Height = table.Column(type: "integer", nullable: false),
TileWidth = table.Column(type: "integer", nullable: false),
TileHeight = table.Column(type: "integer", nullable: false),
ThumbnailCount = table.Column(type: "integer", nullable: false),
Interval = table.Column(type: "integer", nullable: false),
Bandwidth = table.Column(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_TrickplayInfos", x => new { x.ItemId, x.Width });
});
migrationBuilder.CreateTable(
name: "Users",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
Username = table.Column(type: "character varying(255)", maxLength: 255, nullable: false),
Password = table.Column(type: "character varying(65535)", maxLength: 65535, nullable: true),
MustUpdatePassword = table.Column(type: "boolean", nullable: false),
AudioLanguagePreference = table.Column(type: "character varying(255)", maxLength: 255, nullable: true),
AuthenticationProviderId = table.Column(type: "character varying(255)", maxLength: 255, nullable: false),
PasswordResetProviderId = table.Column(type: "character varying(255)", maxLength: 255, nullable: false),
InvalidLoginAttemptCount = table.Column(type: "integer", nullable: false),
LastActivityDate = table.Column(type: "timestamp with time zone", nullable: true),
LastLoginDate = table.Column(type: "timestamp with time zone", nullable: true),
LoginAttemptsBeforeLockout = table.Column(type: "integer", nullable: true),
MaxActiveSessions = table.Column(type: "integer", nullable: false),
SubtitleMode = table.Column(type: "integer", nullable: false),
PlayDefaultAudioTrack = table.Column(type: "boolean", nullable: false),
SubtitleLanguagePreference = table.Column(type: "character varying(255)", maxLength: 255, nullable: true),
DisplayMissingEpisodes = table.Column(type: "boolean", nullable: false),
DisplayCollectionsView = table.Column(type: "boolean", nullable: false),
EnableLocalPassword = table.Column(type: "boolean", nullable: false),
HidePlayedInLatest = table.Column(type: "boolean", nullable: false),
RememberAudioSelections = table.Column(type: "boolean", nullable: false),
RememberSubtitleSelections = table.Column(type: "boolean", nullable: false),
EnableNextEpisodeAutoPlay = table.Column(type: "boolean", nullable: false),
EnableAutoLogin = table.Column(type: "boolean", nullable: false),
EnableUserPreferenceAccess = table.Column(type: "boolean", nullable: false),
MaxParentalAgeRating = table.Column(type: "integer", nullable: true),
RemoteClientBitrateLimit = table.Column(type: "integer", nullable: true),
InternalId = table.Column(type: "bigint", nullable: false),
SyncPlayAccess = table.Column(type: "integer", nullable: false),
CastReceiverId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true),
RowVersion = table.Column(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AncestorIds",
columns: table => new
{
ParentItemId = table.Column(type: "uuid", nullable: false),
ItemId = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AncestorIds", x => new { x.ItemId, x.ParentItemId });
table.ForeignKey(
name: "FK_AncestorIds_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_AncestorIds_BaseItems_ParentItemId",
column: x => x.ParentItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AttachmentStreamInfos",
columns: table => new
{
ItemId = table.Column(type: "uuid", nullable: false),
Index = table.Column(type: "integer", nullable: false),
Codec = table.Column(type: "text", nullable: false),
CodecTag = table.Column(type: "text", nullable: true),
Comment = table.Column(type: "text", nullable: true),
Filename = table.Column(type: "text", nullable: true),
MimeType = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AttachmentStreamInfos", x => new { x.ItemId, x.Index });
table.ForeignKey(
name: "FK_AttachmentStreamInfos_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "BaseItemImageInfos",
columns: table => new
{
Id = table.Column(type: "uuid", nullable: false),
Path = table.Column(type: "text", nullable: false),
DateModified = table.Column(type: "timestamp with time zone", nullable: false),
ImageType = table.Column(type: "integer", nullable: false),
Width = table.Column(type: "integer", nullable: false),
Height = table.Column(type: "integer", nullable: false),
Blurhash = table.Column(type: "bytea", nullable: true),
ItemId = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_BaseItemImageInfos", x => x.Id);
table.ForeignKey(
name: "FK_BaseItemImageInfos_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "BaseItemMetadataFields",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false),
ItemId = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_BaseItemMetadataFields", x => new { x.Id, x.ItemId });
table.ForeignKey(
name: "FK_BaseItemMetadataFields_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "BaseItemProviders",
columns: table => new
{
ItemId = table.Column(type: "uuid", nullable: false),
ProviderId = table.Column(type: "text", nullable: false),
ProviderValue = table.Column(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_BaseItemProviders", x => new { x.ItemId, x.ProviderId });
table.ForeignKey(
name: "FK_BaseItemProviders_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "BaseItemTrailerTypes",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false),
ItemId = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_BaseItemTrailerTypes", x => new { x.Id, x.ItemId });
table.ForeignKey(
name: "FK_BaseItemTrailerTypes_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Chapters",
columns: table => new
{
ItemId = table.Column(type: "uuid", nullable: false),
ChapterIndex = table.Column(type: "integer", nullable: false),
StartPositionTicks = table.Column(type: "bigint", nullable: false),
Name = table.Column(type: "text", nullable: true),
ImagePath = table.Column(type: "text", nullable: true),
ImageDateModified = table.Column(type: "timestamp with time zone", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Chapters", x => new { x.ItemId, x.ChapterIndex });
table.ForeignKey(
name: "FK_Chapters_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "MediaStreamInfos",
columns: table => new
{
ItemId = table.Column(type: "uuid", nullable: false),
StreamIndex = table.Column(type: "integer", nullable: false),
StreamType = table.Column(type: "integer", nullable: false),
Codec = table.Column(type: "text", nullable: true),
Language = table.Column(type: "text", nullable: true),
ChannelLayout = table.Column(type: "text", nullable: true),
Profile = table.Column(type: "text", nullable: true),
AspectRatio = table.Column(type: "text", nullable: true),
Path = table.Column(type: "text", nullable: true),
IsInterlaced = table.Column(type: "boolean", nullable: true),
BitRate = table.Column(type: "integer", nullable: true),
Channels = table.Column(type: "integer", nullable: true),
SampleRate = table.Column(type: "integer", nullable: true),
IsDefault = table.Column(type: "boolean", nullable: false),
IsForced = table.Column(type: "boolean", nullable: false),
IsExternal = table.Column(type: "boolean", nullable: false),
Height = table.Column(type: "integer", nullable: true),
Width = table.Column(type: "integer", nullable: true),
AverageFrameRate = table.Column(type: "real", nullable: true),
RealFrameRate = table.Column(type: "real", nullable: true),
Level = table.Column(type: "real", nullable: true),
PixelFormat = table.Column(type: "text", nullable: true),
BitDepth = table.Column(type: "integer", nullable: true),
IsAnamorphic = table.Column(type: "boolean", nullable: true),
RefFrames = table.Column(type: "integer", nullable: true),
CodecTag = table.Column(type: "text", nullable: true),
Comment = table.Column(type: "text", nullable: true),
NalLengthSize = table.Column(type: "text", nullable: true),
IsAvc = table.Column(type: "boolean", nullable: true),
Title = table.Column(type: "text", nullable: true),
TimeBase = table.Column(type: "text", nullable: true),
CodecTimeBase = table.Column(type: "text", nullable: true),
ColorPrimaries = table.Column(type: "text", nullable: true),
ColorSpace = table.Column(type: "text", nullable: true),
ColorTransfer = table.Column(type: "text", nullable: true),
DvVersionMajor = table.Column(type: "integer", nullable: true),
DvVersionMinor = table.Column(type: "integer", nullable: true),
DvProfile = table.Column(type: "integer", nullable: true),
DvLevel = table.Column(type: "integer", nullable: true),
RpuPresentFlag = table.Column(type: "integer", nullable: true),
ElPresentFlag = table.Column(type: "integer", nullable: true),
BlPresentFlag = table.Column(type: "integer", nullable: true),
DvBlSignalCompatibilityId = table.Column(type: "integer", nullable: true),
IsHearingImpaired = table.Column(type: "boolean", nullable: true),
Rotation = table.Column(type: "integer", nullable: true),
KeyFrames = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_MediaStreamInfos", x => new { x.ItemId, x.StreamIndex });
table.ForeignKey(
name: "FK_MediaStreamInfos_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "ItemValuesMap",
columns: table => new
{
ItemId = table.Column(type: "uuid", nullable: false),
ItemValueId = table.Column(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ItemValuesMap", x => new { x.ItemValueId, x.ItemId });
table.ForeignKey(
name: "FK_ItemValuesMap_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ItemValuesMap_ItemValues_ItemValueId",
column: x => x.ItemValueId,
principalTable: "ItemValues",
principalColumn: "ItemValueId",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "PeopleBaseItemMap",
columns: table => new
{
ItemId = table.Column(type: "uuid", nullable: false),
PeopleId = table.Column(type: "uuid", nullable: false),
SortOrder = table.Column(type: "integer", nullable: true),
ListOrder = table.Column(type: "integer", nullable: true),
Role = table.Column(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_PeopleBaseItemMap", x => new { x.ItemId, x.PeopleId });
table.ForeignKey(
name: "FK_PeopleBaseItemMap_BaseItems_ItemId",
column: x => x.ItemId,
principalTable: "BaseItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_PeopleBaseItemMap_Peoples_PeopleId",
column: x => x.PeopleId,
principalTable: "Peoples",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AccessSchedules",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column(type: "uuid", nullable: false),
DayOfWeek = table.Column(type: "integer", nullable: false),
StartHour = table.Column(type: "double precision", nullable: false),
EndHour = table.Column(type: "double precision", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AccessSchedules", x => x.Id);
table.ForeignKey(
name: "FK_AccessSchedules_Users_UserId",
column: x => x.UserId,
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Devices",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column(type: "uuid", nullable: false),
AccessToken = table.Column(type: "text", nullable: false),
AppName = table.Column(type: "character varying(64)", maxLength: 64, nullable: false),
AppVersion = table.Column(type: "character varying(32)", maxLength: 32, nullable: false),
DeviceName = table.Column(type: "character varying(64)", maxLength: 64, nullable: false),
DeviceId = table.Column(type: "character varying(256)", maxLength: 256, nullable: false),
IsActive = table.Column(type: "boolean", nullable: false),
DateCreated = table.Column(type: "timestamp with time zone", nullable: false),
DateModified = table.Column(type: "timestamp with time zone", nullable: false),
DateLastActivity = table.Column(type: "timestamp with time zone", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Devices", x => x.Id);
table.ForeignKey(
name: "FK_Devices_Users_UserId",
column: x => x.UserId,
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "DisplayPreferences",
columns: table => new
{
Id = table.Column(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column(type: "uuid", nullable: false),
ItemId = table.Column(type: "uuid", nullable: false),
Client = table.Column(type: "character varying(32)", maxLength: 32, nullable: false),
ShowSidebar = table.Column(type: "boolean", nullable: false),
ShowBackdrop = table.Column(type: "boolean", nullable: false),
ScrollDirection = table.Column(type: "integer", nullable: false),
IndexBy = table.Column(type: "integer", nullable: true),
SkipForwardLength = table.Column(type: "integer", nullable: false),
SkipBackwardLength = table.Column