예제 #1
0
 protected RFCatalogEntry()
 {
     Metadata   = new RFMetadata();
     Version    = 0;
     UpdateTime = new DateTimeOffset(DateTime.Now);
     IsValid    = true;
 }
예제 #2
0
 public static RFDocument Create(RFCatalogKey key, object content, RFMetadata metadata = null)
 {
     return(new RFDocument
     {
         Key = key,
         Content = content,
         Type = content.GetType().FullName,
         Metadata = metadata
     });
 }
예제 #3
0
        public override RFCatalogKeyMetadata GetKeyMetadata(RFCatalogKey key)
        {
            var keyType   = key.GetType().FullName;
            var keyString = key.ToString();
            var keyHash   = RFStringHelpers.QuickHash(keyString);

            //Log.Debug(this, "GetKeyMetadata {0}", keyType);
            try
            {
                var dataTable = new DataTable();
                using (var connection = new SqlConnection(_connectionString))
                {
                    connection.Open();

                    using (var getCommand = CreateCommand("[RIFF].[GetKeyMetadata]", connection))
                    {
                        getCommand.CommandType = CommandType.StoredProcedure;
                        getCommand.Parameters.AddWithValue("@KeyType", keyType);
                        getCommand.Parameters.AddWithValue("@SerializedKey", keyString);
                        getCommand.Parameters.AddWithValue("@KeyHash", keyHash);

                        using (var reader = getCommand.ExecuteReader(System.Data.CommandBehavior.SingleResult))
                        {
                            dataTable.Load(reader);
                        }
                    }
                }
                if (dataTable != null && dataTable.Rows != null && dataTable.Rows.Count > 0)
                {
                    var dataRow = dataTable.Rows[0];
                    return(new RFCatalogKeyMetadata
                    {
                        ContentType = dataRow["ContentType"].ToString(),
                        KeyType = dataRow["KeyType"].ToString(),
                        Key = RFXMLSerializer.DeserializeContract(dataRow["KeyType"].ToString(), dataRow["SerializedKey"].ToString()) as RFCatalogKey,
                        KeyReference = (long)dataRow["CatalogKeyID"],
                        Metadata = RFMetadata.Deserialize(dataRow["Metadata"].ToString()),
                        UpdateTime = (DateTimeOffset)dataRow["UpdateTime"],
                        IsValid = (bool)dataRow["IsValid"],
                        DataSize = (long)dataRow["DataSize"]
                    });
                }
            }
            catch (Exception ex)
            {
                Log.Exception(this, "Error retrieving key metadata", ex);
            }
            return(null);
        }
예제 #4
0
        protected RFCatalogEntry ExtractEntry(RFStoreType storeType, Dictionary <string, object> dataRow, bool ignoreContent)
        {
            RFCatalogEntry entry = null;

            switch (storeType)
            {
            case RFStoreType.Document:
                entry = ExtractDocument(dataRow, ignoreContent);
                break;

            default:
                throw new Exception(String.Format("Unrecognized store type {0}", storeType));
            }

            // common fields
            var type = dataRow["KeyType"].ToString();

            entry.Key        = (RFCatalogKey)RFXMLSerializer.DeserializeContract(type, dataRow["SerializedKey"].ToString());
            entry.Metadata   = RFMetadata.Deserialize(dataRow["Metadata"].ToString()) ?? new RFMetadata();
            entry.UpdateTime = (DateTimeOffset)dataRow["UpdateTime"];
            entry.Version    = (int)dataRow["Version"];
            entry.IsValid    = (bool)dataRow["IsValid"];
            return(entry);
        }
예제 #5
0
        public override List <RFCatalogKeyMetadata> SearchKeys(Type t, DateTime?startTime = null, DateTime?endTime = null, int limitResults = 0, RFDate?valueDate = null, bool latestOnly = false)
        {
            var keys            = new List <RFCatalogKeyMetadata>();
            var keyType         = t.FullName;
            var retrieveAllKeys = t.Equals(typeof(RFCatalogKey));

            if (limitResults == 0)
            {
                limitResults = _maxResults;
            }

            // the current query does not support snapshot-in-time, need to extend KeysLatestView to
            // take in a ValueDate param
            if (valueDate != null)
            {
                latestOnly = false;
            }

            //Log.Debug(this, "GetKeyMetadata {0}", keyType);
            try
            {
                var dataTable = new DataTable();
                using (var connection = new SqlConnection(_connectionString))
                {
                    connection.Open();

                    using (var getCommand = CreateCommand("[RIFF].[SearchKeys]", connection))
                    {
                        getCommand.CommandType = CommandType.StoredProcedure;
                        getCommand.Parameters.AddWithValue("@LimitResults", limitResults);

                        if (retrieveAllKeys)
                        {
                            getCommand.Parameters.AddWithValue("@KeyType", DBNull.Value);
                        }
                        else
                        {
                            getCommand.Parameters.AddWithValue("@KeyType", keyType);
                        }

                        if (startTime.HasValue)
                        {
                            getCommand.Parameters.AddWithValue("@StartTime", startTime);
                        }

                        if (endTime.HasValue)
                        {
                            getCommand.Parameters.AddWithValue("@EndTime", startTime);
                        }

                        if (valueDate.HasValue)
                        {
                            getCommand.Parameters.AddWithValue("@GraphInstanceDate", valueDate.Value.ToYMD());
                        }

                        if (latestOnly)
                        {
                            getCommand.Parameters.AddWithValue("@LatestInstanceOnly", true);
                            getCommand.Parameters.AddWithValue("@ExcludeFiles", true);
                        }

                        using (var reader = getCommand.ExecuteReader(System.Data.CommandBehavior.SingleResult))
                        {
                            dataTable.Load(reader);
                        }
                    }
                }

                if (dataTable != null && dataTable.Rows != null && dataTable.Rows.Count > 0)
                {
                    foreach (DataRow dataRow in dataTable.Rows)
                    {
                        try
                        {
                            keys.Add(new RFCatalogKeyMetadata
                            {
                                ContentType  = dataRow["ContentType"].ToString(),
                                KeyType      = dataRow["KeyType"].ToString(),
                                Key          = RFXMLSerializer.DeserializeContract(dataRow["KeyType"].ToString(), dataRow["SerializedKey"].ToString()) as RFCatalogKey,
                                KeyReference = (long)dataRow["CatalogKeyID"],
                                Metadata     = RFMetadata.Deserialize(dataRow["Metadata"].ToString()),
                                UpdateTime   = (DateTimeOffset)dataRow["UpdateTime"],
                                IsValid      = (bool)dataRow["IsValid"],
                                DataSize     = (long)dataRow["DataSize"],
                                Instance     = (dataRow["GraphInstanceName"] != DBNull.Value && dataRow["GraphInstanceDate"] != DBNull.Value) ? new RFGraphInstance
                                {
                                    Name      = dataRow["GraphInstanceName"].ToString(),
                                    ValueDate = new RFDate((int)dataRow["GraphInstanceDate"])
                                } : null
                            });
                        }
                        catch (Exception ex)
                        {
                            Log.Exception(this, ex, "Error deserializing key metadata {0}", dataRow["SerializedKey"].ToString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Exception(this, "Error retrieving key metadata", ex);
            }

            return(keys);
        }