/// <exception cref="System.Exception"></exception> public virtual void TestStringFragment() { string fragment = "01234567890"; ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(fragment); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(fragment, jsdoc.JsonObject()); }
/// <exception cref="System.Exception"></exception> public virtual void TestBooleanFragment() { bool fragment = true; ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(fragment); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(fragment, jsdoc.JsonObject()); }
/// <exception cref="System.Exception"></exception> public virtual void TestJsonArray() { IList<object> array = new AList<object>(); array.AddItem("01234567890"); array.AddItem("bar"); array.AddItem(5); array.AddItem(3.5); array.AddItem(true); array.AddItem(new DateTime().ToString()); ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(array); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(array, jsdoc.JsonObject()); }
/// <exception cref="System.Exception"></exception> public virtual void TestJsonObject() { IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Put("id", "01234567890"); dict.Put("foo", "bar"); dict.Put("int", 5); dict.Put("double", 3.5); dict.Put("bool", true); dict.Put("date", new DateTime().ToString()); ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(dict); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(dict, jsdoc.JsonObject()); }
/// <exception cref="System.Exception"></exception> public virtual void TestJsonArray() { IList <object> array = new AList <object>(); array.AddItem("01234567890"); array.AddItem("bar"); array.AddItem(5); array.AddItem(3.5); array.AddItem(true); array.AddItem(new DateTime().ToString()); ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(array); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(array, jsdoc.JsonObject()); }
/// <exception cref="System.Exception"></exception> public virtual void TestJsonObject() { IDictionary <string, object> dict = new Dictionary <string, object>(); dict.Put("id", "01234567890"); dict.Put("foo", "bar"); dict.Put("int", 5); dict.Put("double", 3.5); dict.Put("bool", true); dict.Put("date", new DateTime().ToString()); ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(dict); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(dict, jsdoc.JsonObject()); }
/// <exception cref="System.Exception"></exception> public virtual void TestIntegerFragment() { int fragment = 5; ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(fragment); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(fragment, jsdoc.JsonObject()); }
/// <exception cref="System.Exception"></exception> public virtual void TestDateFragment() { DateTime fragment = new DateTime(); ObjectWriter mapper = new ObjectWriter(); byte[] json = mapper.WriteValueAsBytes(fragment); JsonDocument jsdoc = new JsonDocument(json); NUnit.Framework.Assert.AreEqual(fragment, Sharpen.Extensions.CreateDate((long)jsdoc .JsonObject())); }
public IList<QueryRow> QueryWithOptions(QueryOptions options) { if (options == null) { options = new QueryOptions(); } Cursor cursor = null; IList<QueryRow> rows = new AList<QueryRow>(); try { cursor = ResultSetWithOptions(options); int groupLevel = options.GetGroupLevel(); bool group = options.IsGroup() || (groupLevel > 0); bool reduce = options.IsReduce() || group; if (reduce && (reduceBlock == null) && !group) { Log.W(Log.TagView, "Cannot use reduce option in view %s which has no reduce block defined" , name); throw new CouchbaseLiteException(new Status(Status.BadRequest)); } if (reduce || group) { // Reduced or grouped query: rows = ReducedQuery(cursor, group, groupLevel); } else { // regular query cursor.MoveToNext(); while (!cursor.IsAfterLast()) { JsonDocument keyDoc = new JsonDocument(cursor.GetBlob(0)); JsonDocument valueDoc = new JsonDocument(cursor.GetBlob(1)); string docId = cursor.GetString(2); int sequence = Sharpen.Extensions.ValueOf(cursor.GetString(3)); IDictionary<string, object> docContents = null; if (options.IsIncludeDocs()) { object valueObject = valueDoc.JsonObject(); // http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Linked_documents if (valueObject is IDictionary && ((IDictionary)valueObject).ContainsKey("_id")) { string linkedDocId = (string)((IDictionary)valueObject).Get("_id"); RevisionInternal linkedDoc = database.GetDocumentWithIDAndRev(linkedDocId, null, EnumSet.NoneOf<Database.TDContentOptions>()); docContents = linkedDoc.GetProperties(); } else { docContents = database.DocumentPropertiesFromJSON(cursor.GetBlob(5), docId, cursor .GetString(4), false, cursor.GetLong(3), options.GetContentOptions()); } } QueryRow row = new QueryRow(docId, sequence, keyDoc.JsonObject(), valueDoc.JsonObject (), docContents); row.SetDatabase(database); rows.AddItem(row); cursor.MoveToNext(); } } } catch (SQLException e) { string errMsg = string.Format("Error querying view: %s", this); Log.E(Log.TagView, errMsg, e); throw new CouchbaseLiteException(errMsg, e, new Status(Status.DbError)); } finally { if (cursor != null) { cursor.Close(); } } return rows; }
internal IList<QueryRow> ReducedQuery(Cursor cursor, bool group, int groupLevel) { IList<object> keysToReduce = null; IList<object> valuesToReduce = null; object lastKey = null; if (GetReduce() != null) { keysToReduce = new AList<object>(ReduceBatchSize); valuesToReduce = new AList<object>(ReduceBatchSize); } IList<QueryRow> rows = new AList<QueryRow>(); cursor.MoveToNext(); while (!cursor.IsAfterLast()) { JsonDocument keyDoc = new JsonDocument(cursor.GetBlob(0)); JsonDocument valueDoc = new JsonDocument(cursor.GetBlob(1)); System.Diagnostics.Debug.Assert((keyDoc != null)); object keyObject = keyDoc.JsonObject(); if (group && !GroupTogether(keyObject, lastKey, groupLevel)) { if (lastKey != null) { // This pair starts a new group, so reduce & record the last one: object reduced = (reduceBlock != null) ? reduceBlock.Reduce(keysToReduce, valuesToReduce , false) : null; object key = GroupKey(lastKey, groupLevel); QueryRow row = new QueryRow(null, 0, key, reduced, null); row.SetDatabase(database); rows.AddItem(row); keysToReduce.Clear(); valuesToReduce.Clear(); } lastKey = keyObject; } keysToReduce.AddItem(keyObject); valuesToReduce.AddItem(valueDoc.JsonObject()); cursor.MoveToNext(); } if (keysToReduce.Count > 0) { // Finish the last group (or the entire list, if no grouping): object key = group ? GroupKey(lastKey, groupLevel) : null; object reduced = (reduceBlock != null) ? reduceBlock.Reduce(keysToReduce, valuesToReduce , false) : null; QueryRow row = new QueryRow(null, 0, key, reduced, null); row.SetDatabase(database); rows.AddItem(row); } return rows; }