internal KDBRecord <byte[]> GetRaw(string table, byte[] key) { var db = MongoClient.DatabaseFromConnectString(EffectiveConnectionString); var doc = db[table].FindOne(MongoQuery.ID_EQ_BYTE_ARRAY(key)); if (doc == null) { return(KDBRecord <byte[]> .Unassigned); } var elmValue = doc[FIELD_VALUE] as BSONBinaryElement; if (elmValue == null) { return(KDBRecord <byte[]> .Unassigned); } DateTime lastUseDate; DateTime?absoluteExpirationDateUTC; int slidingExpirationDays; readAttrs(table, doc, out lastUseDate, out absoluteExpirationDateUTC, out slidingExpirationDays); var value = elmValue.Value; return(new KDBRecord <byte[]>(value.Data, slidingExpirationDays, lastUseDate, absoluteExpirationDateUTC)); }
internal void Touch(string table, byte[] key) { var db = MongoClient.DatabaseFromConnectString(EffectiveConnectionString); var udoc = new BSONDocument() .Set(new BSONDateTimeElement(FIELD_LAST_USE_DATE, App.TimeSource.UTCNow)); // 20170404 spol: update document with $set to prevent document clear udoc = new BSONDocument() .Set(new BSONDocumentElement("$set", udoc)); db[table].Update(new UpdateEntry(MongoQuery.ID_EQ_BYTE_ARRAY(key), udoc, multi: false, upsert: false)); }
/* BSON Document Schema: * ---------------- * * {_id: key, v: {}|binary, lastUseDate: dateUTC, absoluteExpirationDateUTC: date|null, slidingExpirationDays: int|null} * actual field names: * {_id: key, v: {}|binary, d: dateUTC, a: date|null, s: int|null} */ internal KDBRecord <TRow> Get <TRow>(string table, byte[] key) where TRow : Row { var db = MongoClient.DatabaseFromConnectString(EffectiveConnectionString); var doc = db[table].FindOne(MongoQuery.ID_EQ_BYTE_ARRAY(key)); if (doc == null) { return(KDBRecord <TRow> .Unassigned); } var elmValue = doc[FIELD_VALUE] as BSONDocumentElement; if (elmValue == null) { return(KDBRecord <TRow> .Unassigned); } DateTime lastUseDate; DateTime?absoluteExpirationDateUTC; int slidingExpirationDays; readAttrs(table, doc, out lastUseDate, out absoluteExpirationDateUTC, out slidingExpirationDays); var value = elmValue.Value; TRow row; if (value == null) { row = Row.MakeRow(new Schema(Guid.NewGuid().ToString()), typeof(TRow)) as TRow; } else { var schema = Store.m_Converter.InferSchemaFromBSONDocument(value); row = Row.MakeRow(schema, typeof(TRow)) as TRow; Store.m_Converter.BSONDocumentToRow(value, row, null); } return(new KDBRecord <TRow>(row, slidingExpirationDays, lastUseDate, absoluteExpirationDateUTC)); }
internal bool Delete(string table, byte[] key) { var db = MongoClient.DatabaseFromConnectString(EffectiveConnectionString); return(db[table].DeleteOne(MongoQuery.ID_EQ_BYTE_ARRAY(key)).TotalDocumentsAffected > 0); }