Esempio n. 1
0
        public async Task ManyResults()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await runner.RunNoResult(Query.Plain("CREATE TABLE test_table (a integer, b integer, c integer)"));

            await runner.RunNoResult(Query.Plain("INSERT INTO test_table (a, b, c) VALUES (1, 2, 3), (2, 3, 4), (5, 6, 7)"));

            var parser = Integer(0).And(Integer(1)).And(Integer(2));

            var sum = await runner.Transaction(async r =>
            {
                int SumUp(IQueryResultSet <IDataRecord> resultSet)
                {
                    return(resultSet.AllRecords(parser).Select(row =>
                    {
                        var((a, b), c) = row;
                        return a *b *c;
                    }).Sum());
                }

                await using var results = await runner.RunMany(Query.Plain("SELECT a, b, c FROM test_table; SELECT a * 3, b * 5, c * 7 FROM test_table"));
                var sumA = SumUp(results);
                Assert.That(await results.NextResult(), Is.True);
                var sumB = SumUp(results);

                return(sumA + sumB);
            });

            Assert.That(sum, Is.EqualTo(25440));
        }
Esempio n. 2
0
        public async Task NullBehavior()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            var result = await runner.RunSingle(Query.Plain("SELECT null"), Optional(Boolean(0)));

            Assert.That(result, Is.EqualTo(Maybe.Nothing <bool>()));
        }
Esempio n. 3
0
        public async Task AsyncEnumerator()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await using var result = await runner.Run(Query.Plain("SELECT 1"), Integer (0));

            await using var enumerator = result.GetAsyncEnumerator();
            Assert.IsTrue(await enumerator.MoveNextAsync());
            Assert.AreEqual(enumerator.Current, 1);
            Assert.IsFalse(await enumerator.MoveNextAsync());
        }
Esempio n. 4
0
        public async Task EnumeratorReset()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await using var result = await runner.Run(Query.Plain("SELECT 1"), Integer (0));

            using var enumerator = result.GetEnumerator();
            Assert.IsTrue(enumerator.MoveNext());
            Assert.AreEqual(enumerator.Current, 1);
            Assert.IsFalse(enumerator.MoveNext());
            Assert.Throws <NotSupportedException>(() => enumerator.Reset());
        }
Esempio n. 5
0
        public async Task TwoQueriesInCommand()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await runner.RunNoResult(Query.Plain("CREATE TABLE test_table (id integer primary key autoincrement, name text)"));

            var insertedId = await runner.RunSingle(Query.Plain("INSERT INTO test_table (name) VALUES ('a'); SELECT last_insert_rowid()"), Integer(0));

            var updatedName = await runner.RunSingle(Query.Parameterized($"UPDATE test_table SET name = 'b' WHERE id = {insertedId}; SELECT name FROM test_table WHERE id = {insertedId}"), String(0));

            Assert.That(updatedName, Is.EqualTo("b"));
        }
Esempio n. 6
0
        public async Task MultipleSingleResults()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await using var results = await runner.RunMany(Query.Plain("SELECT 1; SELECT 2; SELECT 3"));

            Assert.That(await results.SingleRecord(Integer(0)), Is.EqualTo(1));
            await results.NextResult();

            Assert.That(await results.SingleRecord(Integer(0)), Is.EqualTo(2));
            await results.NextResult();

            Assert.That(await results.SingleRecord(Integer(0)), Is.EqualTo(3));
        }
Esempio n. 7
0
        public async Task Run()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await runner.RunNoResult(Query.Plain("CREATE TABLE test_table (a integer, b integer, c integer)"));

            await runner.RunNoResult(Query.Plain("INSERT INTO test_table (a, b, c) VALUES (1, 2, 3)"));

            var result = await runner.Transaction(async r =>
            {
                var parser     = Integer(0).And(Integer(1)).And(Integer(2));
                var((a, b), c) = await r.RunSingle(Query.Parameterized($"SELECT a, b, c FROM test_table"), parser);

                return(a *b *c);
            });

            Assert.That(result, Is.EqualTo(6));
        }
Esempio n. 8
0
        public async Task RunSingleWithNotSingleResult()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await runner.RunNoResult(Query.Plain("CREATE TABLE test_table (a integer)"));

            Assert.Throws <DataException>(() =>
            {
                runner.RunSingle(Query.Plain("SELECT a FROM test_table"), Integer(0)).GetAwaiter().GetResult();
            });

            await runner.RunNoResult(Query.Plain("INSERT INTO test_table (a) VALUES (1), (2)"));

            Assert.Throws <DataException>(() =>
            {
                runner.RunSingle(Query.Plain("SELECT a FROM test_table"), Integer(0)).GetAwaiter().GetResult();
            });
        }
Esempio n. 9
0
        public async Task IterateResultsPartially()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await runner.RunNoResult(Query.Plain("CREATE TABLE test_table (a integer, b integer, c integer)"));

            await runner.RunNoResult(Query.Plain("INSERT INTO test_table (a, b, c) VALUES (1, 2, 3), (2, 3, 4), (5, 6, 7)"));

            var parser = Integer(0).And(Integer(1)).And(Integer(2));

            await using (var results = await runner.Run(Query.Plain("SELECT a, b, c FROM test_table"), parser))
            {
                var((a, b), c) = results.First();
                Assert.That(a * b * c, Is.EqualTo(6));
            }

            Assert.That(_connectionCounter, Is.EqualTo(0));
        }
Esempio n. 10
0
        public async Task IterateResults()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await runner.RunNoResult(Query.Plain("CREATE TABLE test_table (a integer, b integer, c integer)"));

            await runner.RunNoResult(Query.Plain("INSERT INTO test_table (a, b, c) VALUES (1, 2, 3), (2, 3, 4), (5, 6, 7)"));

            var parser = Integer(0).And(Integer(1)).And(Integer(2));

            var results = await runner.Run(Query.Parameterized($"SELECT a, b, c FROM test_table"), parser);

            var csSum = results.Select(row =>
            {
                var((a, b), c) = row;
                return(a * b * c);
            }).Sum();

            var sqlSum = await runner.RunSingle(Query.Parameterized($"SELECT SUM(a * b * c) AS sum FROM test_table"), Integer("sum"));

            Assert.That(sqlSum, Is.EqualTo(240));
            Assert.That(csSum, Is.EqualTo(sqlSum));
        }
Esempio n. 11
0
        public async Task IterateResultsInTransaction()
        {
            var runner = new DataReaderRunner(_provider, _disposer);

            await runner.RunNoResult(Query.Plain("CREATE TABLE test_table (a integer, b integer, c integer)"));

            await runner.RunNoResult(Query.Plain("INSERT INTO test_table (a, b, c) VALUES (1, 2, 3), (2, 3, 4), (5, 6, 7)"));

            var parser = Integer(0).And(Integer(1)).And(Integer(2));

            await runner.Transaction(async r =>
            {
                await using var results = await runner.Run(Query.Plain("SELECT a, b, c FROM test_table"), parser);
                var sum = results.Select(row =>
                {
                    var((a, b), c) = row;
                    return(a *b *c);
                }).Sum();

                Assert.That(sum, Is.EqualTo(240));
                return(sum);
            });
        }