コード例 #1
0
 public void TestInit()
 {
     _driver = GetDriver();
     _testAccessCount = 0;            
     _target = new KeyCollection<TestModel, int>(_driver,
                                                 _GetTestModelByKey);
 }
コード例 #2
0
ファイル: PathProvider.cs プロジェクト: blinds52/SterlingDB
 /// <summary>
 ///     Contract for driver
 /// </summary>
 /// <param name="driver">The driver</param>
 private static void _ContractForDriver(ISterlingDriver driver)
 {
     if (driver == null)
     {
         throw new ArgumentNullException("driver");
     }
 }
コード例 #3
0
        public SterlingContentStore(ISterlingDatabase db, ISterlingDriver driver)
        {
            Contract.Requires <ArgumentNullException>(db != null, "db");
            Contract.Requires <ArgumentNullException>(driver != null, "driver");

            Instance = db.RegisterDatabase <ContentStoreDB>("ContentStore", driver);
        }
コード例 #4
0
 public void TestInit()
 {
     _driver          = GetDriver();
     _testAccessCount = 0;
     _target          = new KeyCollection <TestModel, int>(_driver,
                                                           _GetTestModelByKey);
 }
コード例 #5
0
 /// <summary>
 ///     Contract for driver
 /// </summary>
 /// <param name="driver">The driver</param>
 private static void _ContractForDriver(ISterlingDriver driver)
 {
     if (driver == null)
     {
         throw new ArgumentNullException("driver");
     }
 }
コード例 #6
0
 /// <summary>
 ///     Initialize the key collection
 /// </summary>
 /// <param name="driver">Driver</param>
 /// <param name="resolver">The resolver for loading the object</param>
 public KeyCollection(ISterlingDriver driver, Func <TKey, T> resolver)
 {
     this._driver   = driver;
     this._resolver = resolver;
     _DeserializeKeys();
     this.IsDirty = false;
 }
コード例 #7
0
        /// <summary>
        ///     Register a database type with the system
        /// </summary>
        /// <typeparam name="T">The type of the database to register</typeparam>
        public ISterlingDatabaseInstance RegisterDatabase <T>(ISterlingDriver driver) where T : BaseDatabaseInstance
        {
            _RequiresActivation();
            _logManager.Log(SterlingLogLevel.Information,
                            string.Format("Sterling is registering database {0}", typeof(T)),
                            null);

            if ((from d in _databases where d.Value.Item1.Equals(typeof(T)) select d).Count() > 0)
            {
                throw new SterlingDuplicateDatabaseException(typeof(T));
            }

            var database = (ISterlingDatabaseInstance)Activator.CreateInstance(typeof(T));

            if (driver == null)
            {
                driver = new MemoryDriver(database, _serializer, _logManager.Log);
            }
            else
            {
                driver.Database           = database;
                driver.DatabaseSerializer = _serializer;
                driver.Log = _logManager.Log;
            }

            ((BaseDatabaseInstance)database).Serializer = _serializer;

            ((BaseDatabaseInstance)database).RegisterTypeResolvers();
            ((BaseDatabaseInstance)database).RegisterPropertyConverters();

            ((BaseDatabaseInstance)database).PublishTables(driver);
            _databases.Add(database.Name, new Tuple <Type, ISterlingDatabaseInstance>(typeof(T), database));
            return(database);
        }
コード例 #8
0
 /// <summary>
 ///     Get types path
 /// </summary>
 /// <param name="basePath"></param>
 /// <param name="databaseName"></param>
 /// <param name="driver"></param>
 /// <returns></returns>
 public string GetTypesPath(string basePath, string databaseName, ISterlingDriver driver)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForDriver(driver);
     return(Path.Combine(GetDatabasePath(basePath, databaseName, driver), TYPE));
 }
コード例 #9
0
        /// <summary>
        ///     Initialize the key collection
        /// </summary>
        /// <param name="driver">Driver</param>
        /// <param name="resolver">The resolver for loading the object</param>
        public KeyCollection(ISterlingDriver driver, Func <TKey, T> resolver)
        {
            _driver   = driver;
            _resolver = resolver;

            _DeserializeKeysAsync().Wait();

            IsDirty = false;
        }
コード例 #10
0
 /// <summary>
 ///     Construct
 /// </summary>
 /// <param name="driver">Sterling driver</param>
 /// <param name="resolver">The resolver for the instance</param>
 /// <param name="key">The resolver for the key</param>
 public TableDefinition(ISterlingDriver driver, Func <TKey, T> resolver, Func <T, TKey> key)
 {
     this._driver   = driver;
     this.FetchKey  = key;
     this._resolver = resolver;
     this._isDirty  = obj => true;
     this.KeyList   = new KeyCollection <T, TKey>(driver, resolver);
     this.Indexes   = new ConcurrentDictionary <string, IIndexCollection>();
 }
コード例 #11
0
 /// <summary>
 ///     Construct
 /// </summary>
 /// <param name="driver">Sterling driver</param>
 /// <param name="resolver">The resolver for the instance</param>
 /// <param name="key">The resolver for the key</param>
 public TableDefinition(ISterlingDriver driver, Func <TKey, T> resolver, Func <T, TKey> key)
 {
     _driver   = driver;
     FetchKey  = key;
     _resolver = resolver;
     _isDirty  = obj => true;
     KeyList   = new KeyCollection <T, TKey>(driver, resolver);
     Indexes   = new Dictionary <string, IIndexCollection>();
 }
コード例 #12
0
        public void Init()
        {
            _driver = GetDriver();

            _testModels = new List <TestModel>(3);
            for (var x = 0; x < 3; x++)
            {
                _testModels.Add(TestModel.MakeTestModel());
            }

            _testAccessCount = 0;
            _target          = new IndexCollection <TestModel, string, int>("TestIndex", _driver,
                                                                            tm => tm.Data, _GetTestModelByKey);
        }
コード例 #13
0
        /// <summary>
        ///     Call to publish tables
        /// </summary>
        internal void PublishTables(ISterlingDriver driver)
        {
            this.Driver = driver;

            foreach (var table in RegisterTables())
            {
                if (!this.TableDefinitions.TryAdd(table.TableType, table))
                {
                    throw new SterlingDuplicateTypeException(table.TableType, this.Name);
                }
            }

            this.Driver.PublishTables(this.TableDefinitions);
        }
コード例 #14
0
        public void Init()
        {
            _driver = GetDriver();

            _testModels = new List<TestModel>(3);
            for(var x = 0; x < 3; x++)
            {
                _testModels.Add(TestModel.MakeTestModel());
            }
            
            _testAccessCount = 0;                        
            _target = new IndexCollection<TestModel, string, int>("TestIndex",_driver,
                                                      tm => tm.Data , _GetTestModelByKey);
        }
コード例 #15
0
        /// <summary>
        ///     Get the path for a database
        /// </summary>
        /// <param name="basePath">The base path</param>
        /// <param name="databaseName">The database name</param>
        /// <param name="driver"The driver></param>
        /// <returns>The path</returns>
        public string GetDatabasePath(string basePath, string databaseName, ISterlingDriver driver)
        {
            _ContractForBasePath(basePath);
            _ContractForDatabaseName(databaseName);
            _ContractForDriver(driver);

            driver.Log(SterlingLogLevel.Verbose,
                       string.Format("Path Provider: Database Path Request: {0}", databaseName), null);

            var path = Path.Combine(basePath, databaseName) + "/";

            driver.Log(SterlingLogLevel.Verbose, string.Format("Resolved database path from {0} to {1}",
                                                               databaseName, path), null);
            return(path);
        }
コード例 #16
0
        /// <summary>
        ///     Call to publish tables
        /// </summary>
        internal void PublishTables(ISterlingDriver driver)
        {
            Driver = driver;

            lock (((ICollection)TableDefinitions).SyncRoot)
            {
                foreach (var table in RegisterTables())
                {
                    if (TableDefinitions.ContainsKey(table.TableType))
                    {
                        throw new SterlingDuplicateTypeException(table.TableType, Name);
                    }
                    TableDefinitions.Add(table.TableType, table);
                }
            }
            Driver.PublishTables(TableDefinitions);
        }
コード例 #17
0
        /// <summary>
        ///     Call to publish tables
        /// </summary>
        internal void PublishTables(ISterlingDriver driver)
        {
            using (LockAsync().Result)
            {
                Driver = driver;

                foreach (var table in RegisterTables())
                {
                    if (TableDefinitions.ContainsKey(table.TableType))
                    {
                        throw new SterlingDuplicateTypeException(table.TableType, Name);
                    }

                    TableDefinitions.Add(table.TableType, table);
                }

                Driver.PublishTables(TableDefinitions, this.Database.TypeResolver.ResolveTableType);
            }
        }
コード例 #18
0
        /// <summary>
        ///     Register a database type with the system
        /// </summary>
        /// <typeparam name="T">The type of the database to register</typeparam>
        public ISterlingDatabaseInstance RegisterDatabase <T>(string instanceName, ISterlingDriver driver)
            where T : BaseDatabaseInstance
        {
            _RequiresActivation();
            LogManager.Log(SterlingLogLevel.Information,
                           string.Format("Sterling is registering database {0}", typeof(T)),
                           null);

            var existing = _databases.Values.FirstOrDefault(tuple => tuple.Item1 == typeof(T));

            if (existing != null)
            {
                return(existing.Item2);
            }

            var instance = (BaseDatabaseInstance)Activator.CreateInstance(typeof(T));

            instance.Database = this;

            if (driver == null)
            {
                driver = new MemoryDriver();
            }

            driver.DatabaseInstanceName = instanceName;
            driver.DatabaseSerializer   = _serializer;
            driver.Log = LogManager.Log;

            instance.Serializer = _serializer;

            instance.RegisterTypeResolvers();
            instance.RegisterPropertyConverters();
            instance.PublishTables(driver);

            _databases.Add(instanceName, new Tuple <Type, ISterlingDatabaseInstance>(typeof(T), instance));

            return(instance);
        }
コード例 #19
0
 public void Cleanup()
 {
     _driver.PurgeAsync().Wait();
     _driver = null;
 }
コード例 #20
0
 /// <summary>
 ///     Initialize the key collection
 /// </summary>
 /// <param name="name">Index name</param>
 /// <param name="driver">Sterling driver</param>
 /// <param name="indexer">How to resolve the index</param>
 /// <param name="resolver">The resolver for loading the object</param>
 public IndexCollection(string name, ISterlingDriver driver,
                        Func <T, Tuple <TIndex1, TIndex2> > indexer, Func <TKey, T> resolver)
     : base(name, driver, indexer, resolver)
 {
     IsTuple = true;
 }
コード例 #21
0
 public void Cleanup()
 {
     _driver.PurgeAsync().Wait();
     _driver = null;
 }
コード例 #22
0
ファイル: PathProvider.cs プロジェクト: blinds52/SterlingDB
 /// <summary>
 ///     Get types path
 /// </summary>
 /// <param name="basePath"></param>
 /// <param name="databaseName"></param>
 /// <param name="driver"></param>
 /// <returns></returns>
 public string GetTypesPath(string basePath, string databaseName, ISterlingDriver driver)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForDriver(driver);
     return Path.Combine(GetDatabasePath(basePath, databaseName, driver), TYPE);
 }  
コード例 #23
0
ファイル: PathProvider.cs プロジェクト: blinds52/SterlingDB
 /// <summary>
 ///     Gets the path to a specific instance
 /// </summary>
 /// <param name="basePath">Base path</param>
 /// <param name="databaseName">The database</param>
 /// <param name="tableType">The type of the table</param>
 /// <param name="driver">The driver</param>
 /// <param name="keyIndex">The key index</param>
 /// <returns>The path</returns>
 public string GetInstancePath(string basePath, string databaseName, Type tableType, ISterlingDriver driver, int keyIndex)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForTableType(tableType);
     _ContractForDriver(driver);
     return Path.Combine(GetInstanceFolder(basePath, databaseName, tableType, driver, keyIndex), keyIndex.ToString());
 }
コード例 #24
0
 /// <summary>
 ///     Get keys path
 /// </summary>
 /// <param name="basePath"></param>
 /// <param name="databaseName"></param>
 /// <param name="tableType"></param>
 /// <param name="driver"></param>
 /// <returns></returns>
 public string GetKeysPath(string basePath, string databaseName, Type tableType, ISterlingDriver driver)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForTableType(tableType);
     _ContractForDriver(driver);
     return(Path.Combine(GetTablePath(basePath, databaseName, tableType, driver), KEY));
 }
コード例 #25
0
 /// <summary>
 ///     Gets the path to a specific instance
 /// </summary>
 /// <param name="basePath">Base path</param>
 /// <param name="databaseName">The database</param>
 /// <param name="tableType">The type of the table</param>
 /// <param name="driver">The driver</param>
 /// <param name="keyIndex">The key index</param>
 /// <returns>The path</returns>
 public string GetInstancePath(string basePath, string databaseName, Type tableType, ISterlingDriver driver, int keyIndex)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForTableType(tableType);
     _ContractForDriver(driver);
     return(Path.Combine(GetInstanceFolder(basePath, databaseName, tableType, driver, keyIndex), keyIndex.ToString()));
 }
コード例 #26
0
 public string GetIndexPath(string basePath, string databaseName, Type tableType, ISterlingDriver driver, string indexName)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForTableType(tableType);
     _ContractForDriver(driver);
     _ContractForIndexName(indexName);
     return(Path.Combine(GetTablePath(basePath, databaseName, tableType, driver), string.Format("{0}.idx", indexName)));
 }
コード例 #27
0
 /// <summary>
 ///     Initialize the key collection
 /// </summary>
 /// <param name="name">name of the index</param>
 /// <param name="driver">Sterling driver</param>
 /// <param name="indexer">How to resolve the index</param>
 /// <param name="resolver">The resolver for loading the object</param>
 public IndexCollection(string name, ISterlingDriver driver, Func <T, TIndex> indexer, Func <TKey, T> resolver)
 {
     Driver = driver;
     _Setup(name, indexer, resolver);
 }
コード例 #28
0
ファイル: PathProvider.cs プロジェクト: blinds52/SterlingDB
 public string GetIndexPath(string basePath, string databaseName, Type tableType, ISterlingDriver driver, string indexName)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForTableType(tableType);
     _ContractForDriver(driver);
     _ContractForIndexName(indexName);
     return Path.Combine(GetTablePath(basePath, databaseName, tableType, driver), string.Format("{0}.idx", indexName));
 }
コード例 #29
0
ファイル: PathProvider.cs プロジェクト: blinds52/SterlingDB
        /// <summary>
        ///     Get the path for a database
        /// </summary>
        /// <param name="basePath">The base path</param>
        /// <param name="databaseName">The database name</param>
        /// <param name="driver"The driver></param>
        /// <returns>The path</returns>
        public string GetDatabasePath(string basePath, string databaseName, ISterlingDriver driver)
        {
            _ContractForBasePath(basePath);
            _ContractForDatabaseName(databaseName);
            _ContractForDriver(driver);
            
            driver.Log(SterlingLogLevel.Verbose,
                            string.Format("Path Provider: Database Path Request: {0}", databaseName), null);

            var path = Path.Combine(basePath, databaseName) + "/";

            driver.Log(SterlingLogLevel.Verbose, string.Format("Resolved database path from {0} to {1}",
                                                                    databaseName, path), null);
            return path;
        }
コード例 #30
0
ファイル: PathProvider.cs プロジェクト: blinds52/SterlingDB
 /// <summary>
 ///     Get keys path
 /// </summary>
 /// <param name="basePath"></param>
 /// <param name="databaseName"></param>
 /// <param name="tableType"></param>
 /// <param name="driver"></param>
 /// <returns></returns>
 public string GetKeysPath(string basePath, string databaseName, Type tableType, ISterlingDriver driver)
 {
     _ContractForBasePath(basePath);
     _ContractForDatabaseName(databaseName);
     _ContractForTableType(tableType);
     _ContractForDriver(driver);
     return Path.Combine(GetTablePath(basePath, databaseName, tableType, driver), KEY);
 }