internal Result(QueryResultSet rs, C4QueryEnumerator *e, MContext context) { _rs = rs; _context = context; _columns = e->columns; _missingColumns = new BitArray(BitConverter.GetBytes(e->missingColumns)); _columnNames = new Dictionary <string, int>(_rs.ColumnNames); foreach (var pair in _rs.ColumnNames) { if (pair.Value < _missingColumns.Length && _missingColumns.Get(pair.Value)) { _columnNames.Remove(pair.Key); } } _deserialized = new object[_rs.ColumnNames.Count]; for (int i = 0; i < _rs.ColumnNames.Count; i++) { if (!_missingColumns.Get(i)) { _deserialized[i] = FleeceValueToObject(i); } } }
public static extern C4SliceResult c4queryenum_customColumns(C4QueryEnumerator *e);
public static long c4queryenum_getRowCount(C4QueryEnumerator *e, C4Error *outError) => Impl.c4queryenum_getRowCount(e, outError);
public static extern void c4queryenum_free(C4QueryEnumerator *e);
public static extern bool c4queryenum_seek(C4QueryEnumerator *e, ulong rowIndex, C4Error *outError);
public QueryResultContext(Database db, C4QueryEnumerator *enumerator) : base(db, null) { _enumerator = enumerator; }
internal QueryResultSet(QueryBase query, [NotNull] ThreadSafety threadSafety, C4QueryEnumerator *e, IDictionary <string, int> columnNames) { _query = query; _c4Enum = e; ColumnNames = columnNames; _threadSafety = threadSafety; _context = new QueryResultContext(query?.Database, e); }
public static string c4queryenum_fullTextMatched(C4QueryEnumerator *e, C4Error *outError) { using (var retVal = NativeRaw.c4queryenum_fullTextMatched(e, outError)) { return(((C4Slice)retVal).CreateString()); } }
public static void c4queryenum_free(C4QueryEnumerator *e) => Impl.c4queryenum_free(e);
public static C4QueryEnumerator *c4queryenum_refresh(C4QueryEnumerator *e, C4Error *outError) => Impl.c4queryenum_refresh(e, outError);
public static bool c4queryenum_next(C4QueryEnumerator *e, C4Error *outError) => Impl.c4queryenum_next(e, outError);
public static extern void c4queryenum_release(C4QueryEnumerator *r);
public static extern C4QueryEnumerator *c4queryenum_retain(C4QueryEnumerator *r);
public static extern C4SliceResult c4queryenum_fullTextMatched(C4QueryEnumerator *e, C4Error *outError);
public bool c4queryenum_next(C4QueryEnumerator *e, C4Error *outError) => Native.c4queryenum_next(e, outError);
public static byte[] c4queryenum_customColumns(C4QueryEnumerator *e) { using (var retVal = NativeRaw.c4queryenum_customColumns(e)) { return(((C4Slice)retVal).ToArrayFast()); } }
public long c4queryenum_getRowCount(C4QueryEnumerator *e, C4Error *outError) => Native.c4queryenum_getRowCount(e, outError);
public Enumerator([NotNull] QueryResultSet parent) { _parent = parent; _enum = _parent._c4Enum; WriteLog.To.Query.I(Tag, $"Beginning query enumeration ({(long) _enum:x})"); }
public bool c4queryenum_seek(C4QueryEnumerator *e, ulong rowIndex, C4Error *outError) => Native.c4queryenum_seek(e, rowIndex, outError);
public static extern long c4queryenum_getRowCount(C4QueryEnumerator *e, C4Error *outError);
public C4QueryEnumerator *c4queryenum_refresh(C4QueryEnumerator *e, C4Error *outError) => Native.c4queryenum_refresh(e, outError);
public static extern bool c4queryenum_next(C4QueryEnumerator *e, C4Error *outError);
public void c4queryenum_free(C4QueryEnumerator *e) => Native.c4queryenum_free(e);
public static extern C4QueryEnumerator *c4queryenum_refresh(C4QueryEnumerator *e, C4Error *outError);
public void TestQueryFullTextIndex() { CreateFullTextIndex(3); // Search for "somewhere": C4Error error; C4QueryEnumerator *e = Native.c4view_fullTextQuery(_view, "somewhere", C4Language.Default, null, &error); Assert.IsTrue(e != null); Assert.IsTrue(Native.c4queryenum_next(e, &error)); Assert.IsTrue(e->docID.Equals("doc-001")); Assert.AreEqual(1UL, e->docSequence); Assert.AreEqual(1U, e->fullTextTermCount); Assert.AreEqual(0U, e->fullTextTerms[0].termIndex); Assert.AreEqual(8U, e->fullTextTerms[0].start); Assert.AreEqual(9U, e->fullTextTerms[0].length); Assert.IsFalse(Native.c4queryenum_next(e, &error)); Assert.AreEqual(0, error.code); Native.c4queryenum_free(e); // Search for "cat": e = Native.c4view_fullTextQuery(_view, "cat", C4Language.Default, null, &error); Assert.IsTrue(e != null); int i = 0; foreach (var doc in new CBForestQueryEnumerator(e)) { ++i; Assert.AreEqual(1U, doc.FullTextTermCount); Assert.AreEqual(0U, doc.GetFullTextTerm(0).termIndex); if (doc.DocSequence == 1) { Assert.AreEqual(20U, doc.GetFullTextTerm(0).start); Assert.AreEqual(4U, doc.GetFullTextTerm(0).length); } else { Assert.AreEqual(3L, doc.DocSequence); Assert.AreEqual(4U, doc.GetFullTextTerm(0).start); Assert.AreEqual(3U, doc.GetFullTextTerm(0).length); } } Assert.AreEqual(0, error.code); Assert.AreEqual(2, i); // Search for "cat bark": e = Native.c4view_fullTextQuery(_view, "cat bark", C4Language.Default, null, &error); Assert.IsTrue(e != null); Assert.IsTrue(Native.c4queryenum_next(e, &error)); Assert.IsTrue(e->docID.Equals("doc-001")); Assert.AreEqual(1UL, e->docSequence); Assert.AreEqual(2U, e->fullTextTermCount); Assert.AreEqual(0U, e->fullTextTerms[0].termIndex); Assert.AreEqual(20U, e->fullTextTerms[0].start); Assert.AreEqual(4U, e->fullTextTerms[0].length); Assert.AreEqual(1U, e->fullTextTerms[1].termIndex); Assert.AreEqual(29U, e->fullTextTerms[1].start); Assert.AreEqual(7U, e->fullTextTerms[1].length); Assert.IsFalse(Native.c4queryenum_next(e, &error)); Assert.AreEqual(0, error.code); Native.c4queryenum_free(e); }
public CBForestQueryEnumerator(C4QueryEnumerator *e) { _e = e; }
public static extern void c4queryenum_close(C4QueryEnumerator *x);