/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception> public virtual void TestViewReduce() { IDictionary <string, object> docProperties1 = new Dictionary <string, object>(); docProperties1["_id"] = "CD"; docProperties1["cost"] = 8.99; PutDoc(database, docProperties1); IDictionary <string, object> docProperties2 = new Dictionary <string, object>(); docProperties2["_id"] = "App"; docProperties2["cost"] = 1.95; PutDoc(database, docProperties2); IDictionary <string, object> docProperties3 = new Dictionary <string, object>(); docProperties3["_id"] = "Dessert"; docProperties3["cost"] = 6.50; PutDoc(database, docProperties3); View view = database.GetView("totaler"); view.SetMapReduce((document, emitter) => { NUnit.Framework.Assert.IsNotNull(document.Get("_id")); NUnit.Framework.Assert.IsNotNull(document.Get("_rev")); object cost = document.Get("cost"); if (cost != null) { emitter(document.Get("_id"), cost); } }, (IList <object> keys, IList <object> values, bool rereduce) => { return(View.TotalValues(values)); }, "1"); view.UpdateIndex(); IList <IDictionary <string, object> > dumpResult = view.Dump(); Log.V(Tag, "View dump: " + dumpResult); NUnit.Framework.Assert.AreEqual(3, dumpResult.Count); NUnit.Framework.Assert.AreEqual("\"App\"", dumpResult[0]["key"]); NUnit.Framework.Assert.AreEqual("1.95", dumpResult[0]["value"]); NUnit.Framework.Assert.AreEqual(2, dumpResult[0]["seq"]); NUnit.Framework.Assert.AreEqual("\"CD\"", dumpResult[1]["key"]); NUnit.Framework.Assert.AreEqual("8.99", dumpResult[1]["value"]); NUnit.Framework.Assert.AreEqual(1, dumpResult[1]["seq"]); NUnit.Framework.Assert.AreEqual("\"Dessert\"", dumpResult[2]["key"]); NUnit.Framework.Assert.AreEqual("6.5", dumpResult[2]["value"]); NUnit.Framework.Assert.AreEqual(3, dumpResult[2]["seq"]); QueryOptions options = new QueryOptions(); options.SetReduce(true); IList <QueryRow> reduced = view.QueryWithOptions(options); NUnit.Framework.Assert.AreEqual(1, reduced.Count); object value = reduced[0].GetValue(); Number numberValue = (Number)value; NUnit.Framework.Assert.IsTrue(Math.Abs(numberValue - 17.44) < 0.001); }
public void Test14ReduceView() { RunTest("Test14ReduceView", (parameters) => { var numDocs = Convert.ToInt32(parameters[NUMDOCS_KEY]); var view = database.GetView("vacant"); view.SetMapReduce((document, emit) => { var vacant = (Boolean)document["vacant"]; var name = (String)document["name"]; if (vacant && name != null) { emit(name, vacant); } }, (keys, values, rereduce) => View.TotalValues(values.ToList()), "1.0"); database.RunInTransaction(() => { for (var i = 0; i < numDocs; i++) { var name = String.Format("n{0}", i); var vacant = ((i + 2) % 2) == 0; var props = new Dictionary <string, object>() { { "name", name }, { "apt", i }, { "phone", 408100000 + i }, { "vacant", vacant } }; var doc = database.CreateDocument(); doc.PutProperties(props); } return(true); }); var stopwatch = Stopwatch.StartNew(); var query = database.GetView("vacant").CreateQuery(); query.MapOnly = false; var rows = query.Run(); var row = rows.GetRow(0); Assert.IsNotNull(row); stopwatch.Stop(); return(stopwatch.ElapsedMilliseconds); }); }
public void Test28KeySizes() { RunTest("Test28KeySizes", (parameters) => { var numDocs = Convert.ToInt32(parameters[NUMDOCS_KEY]); var docSize = Convert.ToInt32(parameters[DOCSIZE_KEY]); var sb = new StringBuilder(); for (var i = 0; i < docSize; i++) { sb.Append("1"); } //Start measurement, including create docs, define view, and do query var stopwatch = Stopwatch.StartNew(); database.RunInTransaction(() => { for (var i = 0; i < numDocs; i++) { var vacant = ((i + 2) % 2 == 0); var props = new Dictionary <string, object>() { { "name", sb.ToString() }, { "apt", i }, { "phone", 408100000 + i }, { "vacant", vacant } }; var doc = database.CreateDocument(); var rev = doc.PutProperties(props); Assert.IsNotNull(rev); } return(true); }); var view = database.GetView("vacant"); view.SetMapReduce((document, emit) => { var vacant = (Boolean)document["vacant"]; var name = (string)document["name"]; if (vacant && !StringEx.IsNullOrWhiteSpace(name)) { emit(name, vacant); } }, (keys, values, rereduce) => { return(View.TotalValues(values.ToList())); }, "1.0.0"); var query = database.GetView("vacant").CreateQuery(); query.Descending = false; query.MapOnly = true; var rows = query.Run(); foreach (var row in rows) { var key = (string)row.Key; var value = (Boolean)row.Value; Assert.IsNotNull(key); Assert.IsTrue(value == true || value == false); } stopwatch.Stop(); return(stopwatch.ElapsedMilliseconds); }); }
public void TestViewGroupedStrings() { IDictionary <string, object> docProperties1 = new Dictionary <string, object>(); docProperties1["name"] = "Alice"; PutDoc(database, docProperties1); IDictionary <string, object> docProperties2 = new Dictionary <string, object>(); docProperties2["name"] = "Albert"; PutDoc(database, docProperties2); IDictionary <string, object> docProperties3 = new Dictionary <string, object>(); docProperties3["name"] = "Naomi"; PutDoc(database, docProperties3); IDictionary <string, object> docProperties4 = new Dictionary <string, object>(); docProperties4["name"] = "Jens"; PutDoc(database, docProperties4); IDictionary <string, object> docProperties5 = new Dictionary <string, object>(); docProperties5["name"] = "Jed"; PutDoc(database, docProperties5); View view = database.GetView("default/names"); view.SetMapReduce((document, emitter) => { string name = (string)document["name"]; if (name != null) { emitter(Sharpen.Runtime.Substring(name, 0, 1), 1); } }, (keys, values, rereduce) => View.TotalValues(values.ToList()), "1.0"); view.UpdateIndex(); QueryOptions options = new QueryOptions(); options.SetGroupLevel(1); IList <QueryRow> rows = view.QueryWithOptions(options).ToList(); IList <IDictionary <string, object> > expectedRows = new List <IDictionary <string, object> >(); IDictionary <string, object> row1 = new Dictionary <string, object>(); row1["key"] = "A"; row1["value"] = 2; expectedRows.AddItem(row1); IDictionary <string, object> row2 = new Dictionary <string, object>(); row2["key"] = "J"; row2["value"] = 2; expectedRows.AddItem(row2); IDictionary <string, object> row3 = new Dictionary <string, object>(); row3["key"] = "N"; row3["value"] = 1; expectedRows.AddItem(row3); Assert.AreEqual(row1["key"], rows[0].Key); Assert.AreEqual(row1["value"], rows[0].Value); Assert.AreEqual(row2["key"], rows[1].Key); Assert.AreEqual(row2["value"], rows[1].Value); Assert.AreEqual(row3["key"], rows[2].Key); Assert.AreEqual(row3["value"], rows[2].Value); }
public void TestViewGrouped() { IDictionary <string, object> docProperties1 = new Dictionary <string, object>(); docProperties1["_id"] = "1"; docProperties1["artist"] = "Gang Of Four"; docProperties1["album"] = "Entertainment!"; docProperties1["track"] = "Ether"; docProperties1["time"] = 231; PutDoc(database, docProperties1); IDictionary <string, object> docProperties2 = new Dictionary <string, object>(); docProperties2["_id"] = "2"; docProperties2["artist"] = "Gang Of Four"; docProperties2["album"] = "Songs Of The Free"; docProperties2["track"] = "I Love A Man In Uniform"; docProperties2["time"] = 248; PutDoc(database, docProperties2); IDictionary <string, object> docProperties3 = new Dictionary <string, object>(); docProperties3["_id"] = "3"; docProperties3["artist"] = "Gang Of Four"; docProperties3["album"] = "Entertainment!"; docProperties3["track"] = "Natural's Not In It"; docProperties3["time"] = 187; PutDoc(database, docProperties3); IDictionary <string, object> docProperties4 = new Dictionary <string, object>(); docProperties4["_id"] = "4"; docProperties4["artist"] = "PiL"; docProperties4["album"] = "Metal Box"; docProperties4["track"] = "Memories"; docProperties4["time"] = 309; PutDoc(database, docProperties4); IDictionary <string, object> docProperties5 = new Dictionary <string, object>(); docProperties5["_id"] = "5"; docProperties5["artist"] = "Gang Of Four"; docProperties5["album"] = "Entertainment!"; docProperties5["track"] = "Not Great Men"; docProperties5["time"] = 187; PutDoc(database, docProperties5); View view = database.GetView("grouper"); view.SetMapReduce((IDictionary <string, object> document, EmitDelegate emitter) => { IList <object> key = new List <object>(); key.AddItem(document["artist"]); key.AddItem(document["album"]); key.AddItem(document["track"]); emitter(key, document["time"]); }, (IEnumerable <object> keys, IEnumerable <object> values, bool rereduce) => { return(View.TotalValues(values.ToList())); }, "1"); view.UpdateIndex(); QueryOptions options = new QueryOptions(); options.SetReduce(true); IList <QueryRow> rows = view.QueryWithOptions(options).ToList(); IList <IDictionary <string, object> > expectedRows = new List <IDictionary <string, object> >(); IDictionary <string, object> row1 = new Dictionary <string, object>(); row1["key"] = null; row1["value"] = 1162.0; expectedRows.AddItem(row1); Assert.AreEqual(row1["key"], rows[0].Key); Assert.AreEqual(row1["value"], rows[0].Value); //now group options.SetGroup(true); rows = view.QueryWithOptions(options).ToList(); expectedRows = new List <IDictionary <string, object> >(); row1 = new Dictionary <string, object>(); IList <string> key1 = new List <string>(); key1.AddItem("Gang Of Four"); key1.AddItem("Entertainment!"); key1.AddItem("Ether"); row1["key"] = key1; row1["value"] = 231.0; expectedRows.AddItem(row1); IDictionary <string, object> row2 = new Dictionary <string, object>(); IList <string> key2 = new List <string>(); key2.AddItem("Gang Of Four"); key2.AddItem("Entertainment!"); key2.AddItem("Natural's Not In It"); row2["key"] = key2; row2["value"] = 187.0; expectedRows.AddItem(row2); IDictionary <string, object> row3 = new Dictionary <string, object>(); IList <string> key3 = new List <string>(); key3.AddItem("Gang Of Four"); key3.AddItem("Entertainment!"); key3.AddItem("Not Great Men"); row3["key"] = key3; row3["value"] = 187.0; expectedRows.AddItem(row3); IDictionary <string, object> row4 = new Dictionary <string, object>(); IList <string> key4 = new List <string>(); key4.AddItem("Gang Of Four"); key4.AddItem("Songs Of The Free"); key4.AddItem("I Love A Man In Uniform"); row4["key"] = key4; row4["value"] = 248.0; expectedRows.AddItem(row4); IDictionary <string, object> row5 = new Dictionary <string, object>(); IList <string> key5 = new List <string>(); key5.AddItem("PiL"); key5.AddItem("Metal Box"); key5.AddItem("Memories"); row5["key"] = key5; row5["value"] = 309.0; expectedRows.AddItem(row5); Assert.AreEqual(row1["key"], ((JArray)rows[0].Key).Values <String>().ToList()); Assert.AreEqual(row1["value"], rows[0].Value); Assert.AreEqual(row2["key"], ((JArray)rows[1].Key).Values <String>().ToList()); Assert.AreEqual(row2["value"], rows[1].Value); Assert.AreEqual(row3["key"], ((JArray)rows[2].Key).Values <String>().ToList()); Assert.AreEqual(row3["value"], rows[2].Value); Assert.AreEqual(row4["key"], ((JArray)rows[3].Key).Values <String>().ToList()); Assert.AreEqual(row4["value"], rows[3].Value); Assert.AreEqual(row5["key"], ((JArray)rows[4].Key).Values <String>().ToList()); Assert.AreEqual(row5["value"], rows[4].Value); //group level 1 options.SetGroupLevel(1); rows = view.QueryWithOptions(options).ToList(); expectedRows = new List <IDictionary <string, object> >(); row1 = new Dictionary <string, object>(); key1 = new List <string>(); key1.AddItem("Gang Of Four"); row1["key"] = key1; row1["value"] = 853.0; expectedRows.AddItem(row1); row2 = new Dictionary <string, object>(); key2 = new List <string>(); key2.AddItem("PiL"); row2["key"] = key2; row2["value"] = 309.0; expectedRows.AddItem(row2); Assert.AreEqual(row1["key"], ((JArray)rows[0].Key).Values <String>().ToList()); Assert.AreEqual(row1["value"], rows[0].Value); Assert.AreEqual(row2["key"], ((JArray)rows[1].Key).Values <String>().ToList()); Assert.AreEqual(row2["value"], rows[1].Value); //group level 2 options.SetGroupLevel(2); rows = view.QueryWithOptions(options).ToList(); expectedRows = new List <IDictionary <string, object> >(); row1 = new Dictionary <string, object>(); key1 = new List <string>(); key1.AddItem("Gang Of Four"); key1.AddItem("Entertainment!"); row1["key"] = key1; row1["value"] = 605.0; expectedRows.AddItem(row1); row2 = new Dictionary <string, object>(); key2 = new List <string>(); key2.AddItem("Gang Of Four"); key2.AddItem("Songs Of The Free"); row2["key"] = key2; row2["value"] = 248.0; expectedRows.AddItem(row2); row3 = new Dictionary <string, object>(); key3 = new List <string>(); key3.AddItem("PiL"); key3.AddItem("Metal Box"); row3["key"] = key3; row3["value"] = 309.0; expectedRows.AddItem(row3); Assert.AreEqual(row1["key"], ((JArray)rows[0].Key).Values <String>().ToList()); Assert.AreEqual(row1["value"], rows[0].Value); Assert.AreEqual(row2["key"], ((JArray)rows[1].Key).Values <String>().ToList()); Assert.AreEqual(row2["value"], rows[1].Value); Assert.AreEqual(row3["key"], ((JArray)rows[2].Key).Values <String>().ToList()); Assert.AreEqual(row3["value"], rows[2].Value); }