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(); } } }