コード例 #1
0
        public void TestAggregate()
        {
            using (var connection = new SQLiteConnection(this.databaseRelativePath))
            {
                connection.CreateAggregate(
                    "CUSTOMAGGSUM",
                    1,
                    new AggregateStep((aggregateContextData, arguments) =>
                    {
                        aggregateContextData["Acum"] = aggregateContextData.ContainsKey("Acum") ? (long)arguments[0] + (long)aggregateContextData["Acum"] : (long)arguments[0];
                    }),
                    new AggregateFinal((aggregateContextData) =>
                    {
                        return aggregateContextData.ContainsKey("Acum") ? (long)aggregateContextData["Acum"] : 0L;
                    }));

                using (var statement = connection.Prepare("DROP TABLE IF EXISTS TestAggregate;"))
                {
                    statement.Step();
                }

                using (var statement = connection.Prepare("CREATE TABLE TestAggregate(id INTEGER);"))
                {
                    statement.Step();
                }

                using (var statement = connection.Prepare("INSERT INTO TestAggregate(id) VALUES(@id);"))
                {
                    for (var value = 0; value < 10; value++)
                    {
                        statement.Bind(1, value);

                        statement.Step();

                        statement.Reset();
                        statement.ClearBindings();
                    }
                }

                using (var statement = connection.Prepare("SELECT CUSTOMAGGSUM(id) AS CustomResult FROM TestAggregate;"))
                {
                    var rowTotal = 0;
                    while (statement.Step() == SQLiteResult.ROW)
                    {
                        rowTotal++;

                        var totalSum = (long)statement[0];

                        Assert.AreEqual(45, totalSum);
                    }

                    Assert.AreEqual(1, rowTotal);
                }

                using (var statement = connection.Prepare("DROP TABLE TestAggregate;"))
                {
                    statement.Step();
                }
            }
        }