コード例 #1
0
        public async Task should_create_new_database_and_allow_exec_query_2()
        {
            // PREPARE
            var dbName = "test_db_2";

            var cmdBuilder = new StringBuilder();

            cmdBuilder.AppendLine($"CREATE DATABASE {dbName}");
            cmdBuilder.AppendLine("CONNECTION LIMIT = -1");

            // RUN
            using (var conn = new Npgsql.NpgsqlConnection(_fixture.ConnectionString))
            {
                await conn.OpenAsync();

                var cmd = new NpgsqlCommand(cmdBuilder.ToString(), conn);
                cmd.ExecuteNonQuery();

                // ASSERT
                var dbExists = await new NpgsqlCommand($"SELECT datname FROM pg_catalog.pg_database WHERE datname = '{dbName}'", conn)
                               .ExecuteScalarAsync();

                Assert.NotNull(dbExists);
            }
        }
コード例 #2
0
        private async Task<string> Create()
        {
            string sql;
            var assembly = typeof(TestDatabase).GetTypeInfo().Assembly;
            using (var reader = new StreamReader(assembly.GetManifestResourceStream(_sqlFile)))
            {
                sql = await reader.ReadToEndAsync();
            }

            var dbName = await CreateDatabase();
            var connectionString = $"Server=localhost;Port=5432;Database={_databaseName};User Id=postgres;Password=s1mpl3;";

            using (var connection = new NpgsqlConnection(connectionString))
            {
                await connection.OpenAsync();

                using (var command = connection.CreateCommand())
                {
                    foreach (
                        var statement in
                        Regex.Split(sql, @"^\s*GO\s*$", RegexOptions.Multiline)
                            .Where(s => !string.IsNullOrWhiteSpace(s)))
                    {
                        //_logger.LogDebug(sql);
                        command.CommandText = statement;
                        await command.ExecuteNonQueryAsync();
                    }
                }
            }
            return _connectionString = connectionString;
        }
コード例 #3
0
 public static IServiceCollection AddSqlConnectionBuilder(this IServiceCollection collection,
     string configuration)
 {
     var connection = new NpgsqlConnection(configuration);
     connection.OpenAsync();
     collection.AddTransient(provider => connection);
     return collection;
 }
コード例 #4
0
        /// <summary>
        /// Gets a fresh, open and ready-to-use connection wrapper
        /// </summary>
        public async Task<PostgresConnection> GetConnection()
        {
            var connection = new NpgsqlConnection(_connectionString);
            
            await connection.OpenAsync();

            var currentTransaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

            return new PostgresConnection(connection, currentTransaction);
        }
コード例 #5
0
      public static async Task<bool> CheckConnection(string connectionString)
      {
         if (string.IsNullOrWhiteSpace(connectionString))
            throw new ArgumentException("The argument may not be null or empty", nameof(connectionString));

         using (var connection = new NpgsqlConnection(connectionString))
         {
            await connection.OpenAsync();
            return connection.State == ConnectionState.Open;
         }
      }
コード例 #6
0
        public async Task<DbConnection> OpenConnectionAsync()
        {
            if (string.IsNullOrWhiteSpace(_connectionString))
            {
                throw new InvalidOperationException("Connection to PostgreSQL MicroGarden Settings storage is not configured yet. Consider using UseMicroGardenSettingsPostgreSQLStore in Configure");
            }

            var connection = new NpgsqlConnection(_connectionString);
            await connection.OpenAsync();

            return connection;
        }
コード例 #7
0
        public static async Task<EventStream> GetLatestStreamCreated()
        {
            using (var connection = new NpgsqlConnection(GetConnectionStringBuilder()))
            {
                await connection
                    .OpenAsync()
                    .ConfigureAwait(false);

                var query = await connection
                    .QueryAsync<EventStream>(SelectLatestStreamSql)
                    .ConfigureAwait(false);

                return query.Any()
                    ? query.Single()
                    : default(EventStream);
            }
        }
コード例 #8
0
ファイル: Startup.cs プロジェクト: inkysigma/InkySigma
        // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(options =>
            {
                var logger = Factory.CreateLogger("Web.Exception");
                options.InputFormatters.Clear();
                options.OutputFormatters.Clear();
                options.Filters.Add(new ExceptionFilter(logger, new JsonExceptionPage()));
                options.InputFormatters.Add(new JsonInputFormatter());

                options.OutputFormatters.Add(new JsonStandardMediaTypeFormatter());
                
            });

            services.AddTransient<IEmailService, EmailService>(
                provider => new EmailService(Configuration["Email:Host"], Configuration["Email:UserName"],
                    Configuration["Email:Password"], Configuration["Email:From"],
                    Int32.Parse(Configuration["Email:Port"])));

            var connection = new NpgsqlConnection(Configuration["Data:Npgsql:ConnectionString"]);
            connection.OpenAsync();

            services.AddTransient<DbConnection>(provider => connection);

            services.AddBasicAuthentication();


            var repositoryConfig = new DefaultDapperRepositoryOptions<SigmaUser>(connection,
                new SigmaPropertyStore(connection));
            services
                .StartAuthenticationConfiguration<SigmaUser>()
                .AddRepositories(repositoryConfig)
                .AddEmailProvider(Configuration["Email:Host"], Configuration["Email:UserName"],
                    Configuration["Email:Password"], Configuration["Email:From"],
                    int.Parse(Configuration["Email:Port"]))
                .AddLoggers(Factory)
                .ConfigureLoginOptions(new LoginManagerOptions<SigmaUser>
                {
                    ClaimsProvider =
                        new ClaimsProvider<SigmaUser>(repositoryConfig.UserStore, repositoryConfig.UserRoleStore,
                            new ClaimTypesOptions())
                })
                .BuildManagers();
        }
コード例 #9
0
        private static async Task TestPostgres()
        {
            try
            {
                using (var cn = new NpgsqlConnection("Host=localhost;Username=postgres;Password=secretsquirrel"))
                {
                    await cn.OpenAsync();

                    using (var cmd = new NpgsqlCommand("CREATE DATABASE simple", cn))
                    {
                        await cmd.ExecuteNonQueryAsync();
                    }
                    System.Console.WriteLine("Created database");
                }
            } catch {}

            try
            {
                using (var cn = new NpgsqlConnection("Host=localhost;Username=postgres;Password=secretsquirrel;Database=simple"))
                {
                    await cn.OpenAsync();

                    using (var cmd = new NpgsqlCommand("CREATE TABLE Starships (Id integer not null, Name varchar(100) not null)", cn))
                    {
                        await cmd.ExecuteNonQueryAsync();
                    }
                    using (var cmd = new NpgsqlCommand("INSERT INTO Starships VALUES (42, 'Heart of Gold')", cn))
                    {
                        await cmd.ExecuteNonQueryAsync();
                    }
                    System.Console.WriteLine("Created table");
                }
            } catch {}
            
            var db = new SimpleData().Open(@"Host=localhost;Username=postgres;Password=secretsquirrel;Database=simple",
                typeof(PostgresAdapter));
            
            var starship = await db.Starships.GetById(42);

            Console.WriteLine(starship.Name);
        }
コード例 #10
0
        public async Task <DbConnection> OpenConnection()
        {
            int maxRetries = 10;
            int retries    = maxRetries;

retry:
            var conn = new Npgsql.NpgsqlConnection(connectionString);

            try
            {
                await conn.OpenAsync();
            }
            catch (PostgresException ex) when(ex.IsTransient && retries > 0)
            {
                retries--;
                await conn.DisposeAsync();

                await Task.Delay((maxRetries - retries) * 100);

                goto retry;
            }
            return(conn);
        }
コード例 #11
0
 private async Task<string> CreateDatabase()
 {
     _databaseName = $"simple_{Guid.NewGuid():N}".ToLowerInvariant();
     var connectionString = $"Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=s1mpl3;";
     using (var connection = new NpgsqlConnection(connectionString))
     {
         await connection.OpenAsync();
         using (var cmd = connection.CreateCommand())
         {
             cmd.CommandText = $"CREATE DATABASE {_databaseName} WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;";
             _logger.LogDebug(cmd.CommandText);
             try
             {
                 await cmd.ExecuteNonQueryAsync();
             }
             catch (Exception ex)
             {
                 _logger.LogError(42999, ex, "Failed to CREATE DATABASE");
             }
         }
     }
     return _databaseName;
 }
コード例 #12
0
        public static async Task CreateEventStream(Guid streamId, string streamName)
        {
            using (var connection = new NpgsqlConnection(GetConnectionStringBuilder()))
            {
                await connection
                    .OpenAsync()
                    .ConfigureAwait(false);

                using (var command = connection.CreateCommand())
                {
                    command.CommandText = CreateEventStreamSql;
                    command.Parameters.AddWithValue("@streamId", streamId);
                    command.Parameters.AddWithValue("@streamName", streamName);
                    command.Parameters.AddWithValue("@createdOn", DateTime.UtcNow);

                    await command
                        .ExecuteNonQueryAsync()
                        .ConfigureAwait(false);
                }
            }
        }
コード例 #13
0
ファイル: ConnectionTests.cs プロジェクト: npgsql/npgsql
        public void ConnectTimeoutAsync()
        {
            var unknownIp = Environment.GetEnvironmentVariable("NPGSQL_UNKNOWN_IP");
            if (unknownIp == null)
                TestUtil.IgnoreExceptOnBuildServer("NPGSQL_UNKNOWN_IP isn't defined and is required for connection timeout tests");

            var csb = new NpgsqlConnectionStringBuilder(ConnectionString)
            {
                Host = unknownIp,
                Pooling = false,
                Timeout = 2
            };
            using (var conn = new NpgsqlConnection(csb))
            {
                Assert.That(async () => await conn.OpenAsync(), Throws.Exception.TypeOf<TimeoutException>());
                Assert.That(conn.State, Is.EqualTo(ConnectionState.Closed));
            }
        }
コード例 #14
0
        private async Task<NpgsqlConnection> CreateConnectionAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            var con = new NpgsqlConnection(ConnectionString);
            await con.OpenAsync(cancellationToken).ConfigureAwait(false);

            //TODO: Research server settings.

            return con;
        }
コード例 #15
0
 private async Task<NpgsqlConnection> OpenConnection()
 {
     var conn = new NpgsqlConnection(_connectionStringBuilder);
     await conn
         .OpenAsync()
         .ConfigureAwait(false);
     return conn;
 }
コード例 #16
0
ファイル: ConnectionTests.cs プロジェクト: npgsql/npgsql
 public void ConnectionRefusedAsync(bool pooled)
 {
     var csb = new NpgsqlConnectionStringBuilder(ConnectionString) { Port = 44444, Pooling = pooled };
     using (var conn = new NpgsqlConnection(csb))
     {
         Assert.That(async () => await conn.OpenAsync(), Throws.Exception
             .TypeOf<SocketException>()
             .With.Property(nameof(SocketException.SocketErrorCode)).EqualTo(SocketError.ConnectionRefused)
         );
         Assert.That(conn.FullState, Is.EqualTo(ConnectionState.Closed));
     }
 }
コード例 #17
0
        public static async Task CreateEvents(Guid streamId, IEnumerable<StoredEvent> storedEvents)
        {
            using (var connection = new NpgsqlConnection(GetConnectionStringBuilder()))
            {
                await connection
                    .OpenAsync()
                    .ConfigureAwait(false);

                foreach (var storedEvent in storedEvents)
                {
                    using (var command = connection.CreateCommand())
                    {
                        command.CommandText = CreateEventSql;

                        command.Parameters.AddWithValue("@streamId", streamId);
                        command.Parameters.AddWithValue("@eventId", storedEvent.EventId);
                        command.Parameters.AddWithValue("@typeName", storedEvent.TypeName);
                        command.Parameters.AddWithValue("@occurredOn", storedEvent.OccurredOn);
                        command.Parameters.AddWithValue("@batchId", storedEvent.BatchId);
                        command.Parameters.AddWithValue("@body", NpgsqlDbType.Json, storedEvent.EventBody);

                        await command
                            .ExecuteNonQueryAsync()
                            .ConfigureAwait(false);
                    }
                }
            }
        }
コード例 #18
0
ファイル: ConnectionTests.cs プロジェクト: npgsql/npgsql
        public void ConnectTimeoutCancel()
        {
            var unknownIp = Environment.GetEnvironmentVariable("NPGSQL_UNKNOWN_IP");
            if (unknownIp == null)
                TestUtil.IgnoreExceptOnBuildServer("NPGSQL_UNKNOWN_IP isn't defined and is required for connection cancellation tests");

            var csb = new NpgsqlConnectionStringBuilder(ConnectionString)
            {
                Host = unknownIp,
                Pooling = false,
                Timeout = 30
            };
            using (var conn = new NpgsqlConnection(csb))
            {
                var cts = new CancellationTokenSource();
                cts.CancelAfter(1000);
                Assert.That(async () => await conn.OpenAsync(cts.Token), Throws.Exception.TypeOf<TaskCanceledException>());
                Assert.That(conn.State, Is.EqualTo(ConnectionState.Closed));
            }
        }
コード例 #19
0
        public static async Task<IEnumerable<StoredEvent>> GetStreamEvents(Guid streamId)
        {
            using (var connection = new NpgsqlConnection(GetConnectionStringBuilder()))
            {
                await connection
                    .OpenAsync()
                    .ConfigureAwait(false);

                var query = await connection
                    .QueryAsync<StoredEvent>(SelectStreamEventsSql)
                    .ConfigureAwait(false);

                return query.ToList();
            }
        }