public BatchingSqlServerJournal(BatchingSqlServerJournalSetup setup) : base(setup) { var c = Setup.NamingConventions; Initializers = ImmutableDictionary.CreateRange(new Dictionary <string, string> { ["CreateJournalSql"] = $@"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{c.SchemaName}' AND TABLE_NAME = '{c.JournalEventsTableName}') BEGIN CREATE TABLE {c.FullJournalTableName} ( {c.OrderingColumnName} BIGINT IDENTITY(1,1) NOT NULL, {c.PersistenceIdColumnName} NVARCHAR(255) NOT NULL, {c.SequenceNrColumnName} BIGINT NOT NULL, {c.TimestampColumnName} BIGINT NOT NULL, {c.IsDeletedColumnName} BIT NOT NULL, {c.ManifestColumnName} NVARCHAR(500) NOT NULL, {c.PayloadColumnName} VARBINARY(MAX) NOT NULL, {c.TagsColumnName} NVARCHAR(100) NULL, {c.SerializerIdColumnName} INTEGER NULL, CONSTRAINT PK_{c.JournalEventsTableName} PRIMARY KEY ({c.OrderingColumnName}), CONSTRAINT UQ_{c.JournalEventsTableName} UNIQUE ({c.PersistenceIdColumnName}, {c.SequenceNrColumnName}) ); CREATE INDEX IX_{c.JournalEventsTableName}_{c.SequenceNrColumnName} ON {c.FullJournalTableName}({c.SequenceNrColumnName}); CREATE INDEX IX_{c.JournalEventsTableName}_{c.TimestampColumnName} ON {c.FullJournalTableName}({c.TimestampColumnName}); END", ["CreateMetadataSql"] = $@" IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{c.SchemaName}' AND TABLE_NAME = '{c.MetaTableName}') BEGIN CREATE TABLE {c.FullMetaTableName} ( {c.PersistenceIdColumnName} NVARCHAR(255) NOT NULL, {c.SequenceNrColumnName} BIGINT NOT NULL, CONSTRAINT PK_{c.MetaTableName} PRIMARY KEY ({c.PersistenceIdColumnName}, {c.SequenceNrColumnName}) ); END" }); }
public BatchingSqlServerJournal(BatchingSqlServerJournalSetup setup) : base(setup) { var connectionTimeoutSeconds = new SqlConnectionStringBuilder( setup.ConnectionString).ConnectTimeout; var commandTimeout = setup.ConnectionTimeout; var circuitBreakerTimeout = setup.CircuitBreakerSettings.CallTimeout; var totalTimeout = commandTimeout.Add( TimeSpan.FromSeconds(connectionTimeoutSeconds)); if (totalTimeout >= circuitBreakerTimeout) { Log.Warning( "Configured Total of Connection timeout ({0} seconds) and Command timeout ({1} seconds) is less than or equal to Circuit breaker timeout ({2} seconds). This may cause unintended write failures", connectionTimeoutSeconds, commandTimeout.TotalSeconds, circuitBreakerTimeout.TotalSeconds); } var c = Setup.NamingConventions; Initializers = ImmutableDictionary.CreateRange(new Dictionary <string, string> { ["CreateJournalSql"] = $@"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{ c.SchemaName }' AND TABLE_NAME = '{c.JournalEventsTableName}') BEGIN CREATE TABLE {c.FullJournalTableName} ( {c.OrderingColumnName} BIGINT IDENTITY(1,1) NOT NULL, {c.PersistenceIdColumnName} NVARCHAR(255) NOT NULL, {c.SequenceNrColumnName} BIGINT NOT NULL, {c.TimestampColumnName} BIGINT NOT NULL, {c.IsDeletedColumnName} BIT NOT NULL, {c.ManifestColumnName} NVARCHAR(500) NOT NULL, {c.PayloadColumnName} VARBINARY(MAX) NOT NULL, {c.TagsColumnName} NVARCHAR(100) NULL, {c.SerializerIdColumnName} INTEGER NULL, CONSTRAINT PK_{c.JournalEventsTableName} PRIMARY KEY ({c.OrderingColumnName}), CONSTRAINT UQ_{c.JournalEventsTableName} UNIQUE ({c.PersistenceIdColumnName}, { c.SequenceNrColumnName }) ); CREATE INDEX IX_{c.JournalEventsTableName}_{c.SequenceNrColumnName} ON {c.FullJournalTableName}({ c.SequenceNrColumnName }); CREATE INDEX IX_{c.JournalEventsTableName}_{c.TimestampColumnName} ON {c.FullJournalTableName}({ c.TimestampColumnName }); END", ["CreateMetadataSql"] = $@" IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{ c.SchemaName }' AND TABLE_NAME = '{c.MetaTableName}') BEGIN CREATE TABLE {c.FullMetaTableName} ( {c.PersistenceIdColumnName} NVARCHAR(255) NOT NULL, {c.SequenceNrColumnName} BIGINT NOT NULL, CONSTRAINT PK_{c.MetaTableName} PRIMARY KEY ({c.PersistenceIdColumnName}, { c.SequenceNrColumnName }) ); END" }); }