Пример #1
0
        private async Task WriteSampleRowsAsync()
        {
            await _testFixture.EnsureTestDatabaseAsync();

            using (var connection = await _testFixture.GetTestDatabaseConnectionAsync())
            {
                await WriteSampleRowsAsync(connection);
            }
        }
Пример #2
0
        public async Task CommandTimeout()
        {
            await _testFixture.EnsureTestDatabaseAsync();

            var values = new SpannerParameterCollection
            {
                { "StringValue", SpannerDbType.String, "abc" },
                { "K", SpannerDbType.String, _lastKey = UniqueString() }
            };

            var e = await Assert.ThrowsAsync <SpannerException>(
                async() =>
            {
                using (var connection = new SpannerConnection($"{_testFixture.ConnectionString};{nameof(SpannerSettings.AllowImmediateTimeouts)}=true"))
                {
                    var cmd            = connection.CreateInsertCommand("T", values);
                    cmd.CommandTimeout = 0;
                    await cmd.ExecuteNonQueryAsync();
                }
            }).ConfigureAwait(false);

            Assert.Equal(ErrorCode.DeadlineExceeded, e.ErrorCode);
            Assert.False(e.IsTransientSpannerFault());
        }
        private async Task WriteSampleRowsAsync()
        {
            await _testFixture.EnsureTestDatabaseAsync();

            if (string.IsNullOrEmpty(_key))
            {
                _key = Guid.NewGuid().ToString();
                using (var connection = await _testFixture.GetTestDatabaseConnectionAsync())
                {
                    SpannerCommand insupdate;
                    // 1st update
                    await connection.OpenAsync();

                    using (var tx = await connection.BeginTransactionAsync())
                    {
                        insupdate = connection.CreateInsertOrUpdateCommand(
                            "TX",
                            new SpannerParameterCollection
                        {
                            { "K", SpannerDbType.String, _key },
                            { "StringValue", SpannerDbType.String, Guid.NewGuid().ToString() }
                        });
                        insupdate.Transaction = tx;
                        await insupdate.ExecuteNonQueryAsync();

                        var timestamp = await tx.CommitAsync();

                        _history.Add(
                            new HistoryEntry
                        {
                            Value     = insupdate.Parameters[1].Value.ToString(),
                            Timestamp = timestamp.GetValueOrDefault()
                        });
                    }

                    await Task.Delay(250);

                    // 2nd update
                    using (var tx = await connection.BeginTransactionAsync())
                    {
                        insupdate.Transaction         = tx;
                        insupdate.CommandText         = "UPDATE TX";
                        insupdate.Parameters[1].Value = Guid.NewGuid().ToString();
                        await insupdate.ExecuteNonQueryAsync();

                        var timestamp = await tx.CommitAsync();

                        _history.Add(
                            new HistoryEntry
                        {
                            Value     = insupdate.Parameters[1].Value.ToString(),
                            Timestamp = timestamp.GetValueOrDefault()
                        });
                    }

                    await Task.Delay(250);

                    // 3rd update
                    using (var tx = await connection.BeginTransactionAsync())
                    {
                        insupdate.Transaction         = tx;
                        insupdate.Parameters[1].Value = Guid.NewGuid().ToString();
                        await insupdate.ExecuteNonQueryAsync();

                        var timestamp = await tx.CommitAsync();

                        _history.Add(
                            new HistoryEntry
                        {
                            Value     = insupdate.Parameters[1].Value.ToString(),
                            Timestamp = timestamp.GetValueOrDefault()
                        });
                    }
                }
            }
        }