コード例 #1
0
        public async Task <IStreamStore> GetStreamStore(string schema)
        {
            var settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = schema,
                GetUtcNow = () => GetUtcNow()
            };
            var store = new MsSqlStreamStore(settings);
            await store.CreateSchema();

            return(store);
        }
コード例 #2
0
        public async Task <MsSqlStreamStore> GetStreamStore_v1Schema()
        {
            await CreateDatabase();

            var settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = _schema,
                GetUtcNow = () => GetUtcNow()
            };
            var store = new MsSqlStreamStore(settings);
            await store.CreateSchema_v1_ForTests();

            return(store);
        }
コード例 #3
0
        public override async Task <IStreamStore> GetStreamStore()
        {
            await CreateDatabase();

            var settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = _schema,
                GetUtcNow = () => GetUtcNow()
            };
            var store = new MsSqlStreamStore(settings);
            await store.DropAll(ignoreErrors : true);

            await store.CreateSchema();

            return(store);
        }
コード例 #4
0
        public MsSqlStreamStoreFixture(
            string schema,
            DockerMsSqlServerDatabase dockerInstance,
            string databaseName,
            Action onDispose)
        {
            _onDispose = onDispose;

            DatabaseName = databaseName;
            var connectionStringBuilder = dockerInstance.CreateConnectionStringBuilder();

            connectionStringBuilder.MultipleActiveResultSets = true;
            connectionStringBuilder.InitialCatalog           = DatabaseName;
            ConnectionString = connectionStringBuilder.ToString();

            _settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = schema,
                GetUtcNow = () => GetUtcNow(),
            };
        }
コード例 #5
0
        private MsSqlStreamStoreFixture(
            string schema,
            bool deleteDatabaseOnDispose = true,
            bool createSchema            = true)
        {
            _schema = schema;
            _deleteDatabaseOnDispose = deleteDatabaseOnDispose;
            _createSchema            = createSchema;
            _databaseName            = $"sss-v3-{Guid.NewGuid():n}";
            _databaseInstance        = new DockerMsSqlServerDatabase(_databaseName);

            var connectionStringBuilder = _databaseInstance.CreateConnectionStringBuilder();

            connectionStringBuilder.MultipleActiveResultSets = true;
            connectionStringBuilder.InitialCatalog           = _databaseName;
            ConnectionString = connectionStringBuilder.ToString();
            _settings        = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = _schema,
                GetUtcNow = () => GetUtcNow(),
            };
        }
コード例 #6
0
        private async Task Init(bool createV1Schema = false)
        {
            await _databaseInstance.CreateDatabase();

            var settings = new MsSqlStreamStoreSettings(ConnectionString)
            {
                Schema    = _schema,
                GetUtcNow = () => GetUtcNow(),
            };

            Store = new MsSqlStreamStore(settings);
            if (_createSchema)
            {
                if (createV1Schema)
                {
                    await Store.CreateSchema_v1_ForTests();
                }
                else
                {
                    await Store.CreateSchema();
                }
            }
        }
コード例 #7
0
        /// <summary>
        ///     Initializes a new instance of <see cref="MsSqlStreamStore"/>
        /// </summary>
        /// <param name="settings">A settings class to configure this instance.</param>
        public MsSqlStreamStore(MsSqlStreamStoreSettings settings)
            : base(settings.MetadataMaxAgeCacheExpire, settings.MetadataMaxAgeCacheMaxSize,
                   settings.GetUtcNow, settings.LogName)
        {
            Ensure.That(settings, nameof(settings)).IsNotNull();

            _createConnection    = () => settings.ConnectionFactory(settings.ConnectionString);
            _streamStoreNotifier = new Lazy <IStreamStoreNotifier>(() =>
            {
                if (settings.CreateStreamStoreNotifier == null)
                {
                    throw new InvalidOperationException(
                        "Cannot create notifier because supplied createStreamStoreNotifier was null");
                }
                return(settings.CreateStreamStoreNotifier.Invoke(this));
            });
            _scripts = new Scripts(settings.Schema);

            var sqlMetaData = new List <SqlMetaData>
            {
                new SqlMetaData("StreamVersion", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
                new SqlMetaData("Id", SqlDbType.UniqueIdentifier),
                new SqlMetaData("Created", SqlDbType.DateTime, true, false, SortOrder.Unspecified, -1),
                new SqlMetaData("Type", SqlDbType.NVarChar, 128),
                new SqlMetaData("JsonData", SqlDbType.NVarChar, SqlMetaData.Max),
                new SqlMetaData("JsonMetadata", SqlDbType.NVarChar, SqlMetaData.Max)
            };

            if (settings.GetUtcNow != null)
            {
                // Created column value will be client supplied so should prevent using of the column default function
                sqlMetaData[2] = new SqlMetaData("Created", SqlDbType.DateTime);
            }

            _appendToStreamSqlMetadata = sqlMetaData.ToArray();
            _commandTimeout            = settings.CommandTimeout;
        }