Пример #1
0
        /// <summary>
        ///   The database file name
        /// </summary>
        public StorageEngine(IDbIdentification parameters)
        {
            _reflectionService = DependencyContainer.Resolve <IReflectionService>();

            try
            {
                var metaModelCompabilityChecker = DependencyContainer.Resolve <IMetaModelCompabilityChecker>();

                DbIdentification = parameters;
                IsDbClosed       = false;

                var isNewDatabase = DbIdentification.IsNew();

                _session = DependencyContainer.Resolve <ISession>(this);

                // Object Writer must be created before object Reader
                _objectWriter = DependencyContainer.Resolve <IObjectWriter>(this);
                ObjectReader  = DependencyContainer.Resolve <IObjectReader>(this);

                // Associate current session to the fsi -> all transaction writes
                // will be applied to this FileSystemInterface
                _session.SetFileSystemInterfaceToApplyTransaction(_objectWriter.FileSystemProcessor.FileSystemInterface);

                _objectIntrospectionDataProvider = new SessionDataProvider(_session);

                if (isNewDatabase)
                {
                    _objectWriter.CreateEmptyDatabaseHeader(OdbTime.GetCurrentTimeInTicks());
                }
                else
                {
                    GetObjectReader().ReadDatabaseHeader();
                }
                _objectWriter.AfterInit();
                _objectIntrospector = new ObjectIntrospector(GetClassInfoProvider());
                _triggerManager     = GetLocalTriggerManager();
                // This forces the initialization of the meta model
                var metaModel = GetMetaModel();

                var shouldUpdate = metaModelCompabilityChecker.Check(ClassIntrospector.Instrospect(metaModel.GetAllClasses()), GetMetaModel());

                if (shouldUpdate)
                {
                    UpdateMetaModel();
                }

                _objectWriter.SetTriggerManager(_triggerManager);
                _introspectionCallbackForInsert = new InstrumentationCallbackForStore(_triggerManager, false);
                _introspectionCallbackForUpdate = new InstrumentationCallbackForStore(_triggerManager, true);
            }
            catch
            {
                if (parameters is FileIdentification)
                {
                    Monitor.Exit(string.Intern(Path.GetFullPath(parameters.FileName)));
                }
                throw;
            }
        }
Пример #2
0
 public void SetTriggerManager(IInternalTriggerManager triggerManager)
 {
     _triggerManager = triggerManager;
 }
 public InstrumentationCallbackForStore(IInternalTriggerManager triggerManager, bool isUpdate)
 {
     _triggerManager = triggerManager;
     _isUpdate = isUpdate;
 }
Пример #4
0
 public InstanceBuilder(IStorageEngine engine)
 {
     _triggerManager = engine.GetLocalTriggerManager();
     _engine = engine;
 }
 public InstrumentationCallbackForStore(IInternalTriggerManager triggerManager, bool isUpdate)
 {
     _triggerManager = triggerManager;
     _isUpdate       = isUpdate;
 }
Пример #6
0
 public void SetTriggerManager(IInternalTriggerManager triggerManager)
 {
     _triggerManager = triggerManager;
 }
Пример #7
0
 public void SetTriggerManager(IInternalTriggerManager triggerManager)
 {
     _triggerManager = triggerManager;
     _nonNativeObjectWriter.SetTriggerManager(triggerManager);
 }
Пример #8
0
 public InstanceBuilder(IStorageEngine engine)
 {
     _triggerManager = engine.GetLocalTriggerManager();
     _engine         = engine;
 }