Esempio n. 1
0
        private static async Task DoWorkAsync()
        {
            using (var session = new PGSession(Host, Port, Database, User, Password))
            {
                await session.StartAsync();

                await session.PrepareAsync("_p0", "select id, message from fortune");

                while (!_stopping)
                {
                    Interlocked.Increment(ref _counter);

                    void BindColumn(object _, ReadBuffer readBuffer, int index, int length)
                    {
                        switch (index)
                        {
                        case 0:
                            readBuffer.ReadInt();
                            break;

                        case 1:
                            readBuffer.ReadString(length);
                            break;
                        }
                    }

                    await session.ExecuteAsync <object>("_p0", null, BindColumn);
                }
            }
        }
Esempio n. 2
0
        protected override async Task <DbDataReader> ExecuteDbDataReaderAsync(
            CommandBehavior behavior, CancellationToken cancellationToken)
        {
            await _session.ExecuteAsync("p");

            await _readBuffer.ReceiveAsync();

            var message = _readBuffer.ReadMessage();

            switch (message)
            {
            case MessageType.BindComplete:
                return(_reader);

            case MessageType.ErrorResponse:
                throw new InvalidOperationException(_readBuffer.ReadErrorMessage());

            default:
                throw new NotImplementedException(message.ToString());
            }
        }
        public async Task Execute_query_parameter_success()
        {
            using (var session = new PGSession(Host, Port, Database, User, Password))
            {
                await session.StartAsync();

                await session.PrepareAsync("q", "select id, randomnumber from world where id = $1");

                World world = null;

                World CreateWorld()
                {
                    world = new World();

                    return(world);
                }

                void BindColumn(World w, ReadBuffer readBuffer, int index, int _)
                {
                    switch (index)
                    {
                    case 0:
                        w.Id = readBuffer.ReadInt();
                        break;

                    case 1:
                        w.RandomNumber = readBuffer.ReadInt();
                        break;
                    }
                }

                await session.ExecuteAsync("q", CreateWorld, BindColumn, 45);

                Assert.NotNull(world);
                Assert.Equal(45, world.Id);
                Assert.InRange(world.RandomNumber, 1, 10000);
            }
        }
        public async Task Execute_query_no_parameters_success()
        {
            using (var session = new PGSession(Host, Port, Database, User, Password))
            {
                await session.StartAsync();

                await session.PrepareAsync("q", "select id, message from fortune");

                Fortune CreateFortune(List <Fortune> results)
                {
                    var fortune = new Fortune();

                    results.Add(fortune);

                    return(fortune);
                }

                void BindColumn(Fortune fortune, ReadBuffer readBuffer, int index, int length)
                {
                    switch (index)
                    {
                    case 0:
                        fortune.Id = readBuffer.ReadInt();
                        break;

                    case 1:
                        fortune.Message = readBuffer.ReadString(length);
                        break;
                    }
                }

                var fortunes = new List <Fortune>();

                await session.ExecuteAsync("q", fortunes, CreateFortune, BindColumn);

                Assert.Equal(12, fortunes.Count);
            }
        }