public void When_binding_function_to_a_closed_connection() { using (var conn = new SQLiteInMemoryConnection()) { var func = new SQLiteScalarFunction("Foo", 1, args => null); Should.Throw <InvalidOperationException>(() => conn.BindFunction(func)) .Message.ShouldBe("Cannot bind a function to a closed."); } }
public async Task When_binding_a_collation_function_to_an_opened_connection_table() { using (var conn = new SQLiteInMemoryConnection()) { conn.Open(); Func <string, string, int> compare = (one, two) => 1; conn.BindFunction(new SQLiteCollationFunction("FunkyCompare", compare)); await conn.ExecuteAsync("CREATE TABLE Numbers(No TEXT NOT NULL COLLATE FunkyCompare);"); await conn.ExecuteAsync("INSERT INTO Numbers VALUES (1), (2), (3), (4);"); var defaultCollation = await conn.QueryAsync <string>("SELECT No FROM Numbers ORDER BY No ASC;"); defaultCollation.ShouldBe(new[] { "4", "3", "2", "1" }); } }
public async Task When_binding_a_scalar_function_to_an_opened_connection() { using (var conn = new SQLiteInMemoryConnection()) { string receivedArg = null; var func = new SQLiteScalarFunction("Funky", 1, args => { receivedArg = args[0].ToString(); return("bar"); }); conn.Open(); conn.BindFunction(func); var foo = (await conn.QueryAsync <string>("SELECT \"foo\"")).First(); foo.ShouldBe("foo"); var bar = (await conn.QueryAsync <string>("SELECT Funky(\"foo\")")).First(); bar.ShouldBe("bar"); receivedArg.ShouldBe("foo"); } }
public async Task When_binding_an_aggregate_function_to_an_opened_connection() { using (var conn = new SQLiteInMemoryConnection()) { conn.Open(); await conn.ExecuteAsync("CREATE TABLE Numbers(No INTEGER NOT NULL);"); await conn.ExecuteAsync("INSERT INTO Numbers VALUES (1), (2), (3), (4);"); const int InitState = 0; Func <object[], int, object, object> step = (objects, i, state) => { var newNo = Convert.ToInt32(objects[0]); return((int)state + newNo); }; Func <object, object> final = finalState => finalState; conn.BindFunction(new SQLiteAggregateFunction("FunkySum", 1, InitState, step, final)); var funkySum = await conn.ExecuteScalarAsync <long>("SELECT FunkySum(No) FROM Numbers;"); funkySum.ShouldBe(10); } }