Example #1
0
                             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));
                             }
Example #2
0
                             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));
                             }
Example #3
0
                             /* 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));
                             }
Example #4
0
                             internal bool Delete(string table, byte[] key)
                             {
                                 var db = MongoClient.DatabaseFromConnectString(EffectiveConnectionString);

                                 return(db[table].DeleteOne(MongoQuery.ID_EQ_BYTE_ARRAY(key)).TotalDocumentsAffected > 0);
                             }