예제 #1
0
 /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
 public override IBin Open(BinConfiguration config)
 {
     SaveAsStorage.SaveAsBin openedBin = new SaveAsStorage.SaveAsBin(base.Open(config)
                                                                     );
     _binRecords.Put(config.Uri(), new SaveAsStorage.BinRecord(config, openedBin));
     return(openedBin);
 }
예제 #2
0
            /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
            public FileBin(BinConfiguration config)
            {
                bool ok = false;

                try
                {
                    _path = new Sharpen.IO.File(config.Uri()).GetCanonicalPath();
                    _file = RandomAccessFileFactory.NewRandomAccessFile(_path, config.ReadOnly(), config
                                                                        .LockFile());
                    if (config.InitialLength() > 0)
                    {
                        Write(config.InitialLength() - 1, new byte[] { 0 }, 1);
                    }
                    ok = true;
                }
                catch (IOException e)
                {
                    throw new Db4oIOException(e);
                }
                finally
                {
                    if (!ok)
                    {
                        Close();
                    }
                }
            }
예제 #3
0
			/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
			public FileBin(BinConfiguration config)
			{
				bool ok = false;
				try
				{
					_path = new Sharpen.IO.File(config.Uri()).GetCanonicalPath();
					_file = RandomAccessFileFactory.NewRandomAccessFile(_path, config.ReadOnly(), config
						.LockFile());
					if (config.InitialLength() > 0)
					{
						Write(config.InitialLength() - 1, new byte[] { 0 }, 1);
					}
					ok = true;
				}
				catch (IOException e)
				{
					throw new Db4oIOException(e);
				}
				finally
				{
					if (!ok)
					{
						Close();
					}
				}
			}
예제 #4
0
		/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
		public virtual IBin Open(BinConfiguration config)
		{
			IoAdapterStorage.IoAdapterBin bin = new IoAdapterStorage.IoAdapterBin(_io.Open(config
				.Uri(), config.LockFile(), config.InitialLength(), config.ReadOnly()));
			((IBlockSize)Environments.My(typeof(IBlockSize))).Register(bin);
			return bin;
		}
예제 #5
0
 /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
 public virtual IBin Open(BinConfiguration config)
 {
     IoAdapterStorage.IoAdapterBin bin = new IoAdapterStorage.IoAdapterBin(_io.Open(config
                                                                                    .Uri(), config.LockFile(), config.InitialLength(), config.ReadOnly()));
     ((IBlockSize)Environments.My(typeof(IBlockSize))).Register(bin);
     return(bin);
 }
예제 #6
0
			protected override IBin ProduceBin(BinConfiguration config, int pageSize)
			{
				IBin bin = base.ProduceBin(config, pageSize);
				bin.Write(0, PagingMemoryStorageTestCase.Data, PagingMemoryStorageTestCase.Data.Length
					);
				return bin;
			}
예제 #7
0
            public void Run()
            {
                saveAsBin.Sync();
                saveAsBin.Close();
                try
                {
                    File4.Copy(oldUri, newUri);
                }
                catch (Exception e)
                {
                    this._enclosing.ReopenOldConfiguration(saveAsBin, oldConfiguration, newUri, e);
                }
                BinConfiguration newConfiguration = this._enclosing.PointToNewUri(oldConfiguration
                                                                                  , newUri);

                try
                {
                    IBin newBin = this._enclosing._storage.Open(newConfiguration);
                    saveAsBin.DelegateTo(newBin);
                    this._enclosing._binRecords.Remove(oldUri);
                    this._enclosing._binRecords.Put(newUri, new SaveAsStorage.BinRecord(newConfiguration
                                                                                        , saveAsBin));
                }
                catch (Exception e)
                {
                    this._enclosing.ReopenOldConfiguration(saveAsBin, oldConfiguration, newUri, e);
                }
            }
예제 #8
0
		public IBin Open(BinConfiguration config)
		{
			IsolatedStorageFileBin bin = new IsolatedStorageFileBin(config, _store);
			AddToOpenBinsCollection(bin);
			RegisterForOnCloseEvent(bin);
			
			return bin;
		}
        public IBin Open(BinConfiguration config)
        {
            IsolatedStorageFileBin bin = new IsolatedStorageFileBin(config, _store);

            AddToOpenBinsCollection(bin);
            RegisterForOnCloseEvent(bin);

            return(bin);
        }
예제 #10
0
        private void ReopenOldConfiguration(SaveAsStorage.SaveAsBin saveAsBin, BinConfiguration
                                            config, string newUri, Exception e)
        {
            IBin safeBin = _storage.Open(config);

            saveAsBin.DelegateTo(safeBin);
            throw new Db4oException("Copying to " + newUri + " failed. Reopened " + config.Uri
                                        (), e);
        }
예제 #11
0
        	private IsolatedStorageFileStream OpenFile(BinConfiguration config, IsolatedStorageFile store)
        	{
        		_fullPath = config.Uri();
        		string path = config.Uri();
        		IsolatedStorageFileStream stream = new IsolatedStorageFileStream(path, FileModeFor(store, path), FileAccessFor(config), FileShareFor(config), store);
        		Fill(stream, config.InitialLength(), 0);

				return stream;
        	}
예제 #12
0
			public _IRunnable_49(SaveAsStorage _enclosing, SaveAsStorage.SaveAsBin saveAsBin, 
				string oldUri, string newUri, BinConfiguration oldConfiguration)
			{
				this._enclosing = _enclosing;
				this.saveAsBin = saveAsBin;
				this.oldUri = oldUri;
				this.newUri = newUri;
				this.oldConfiguration = oldConfiguration;
			}
예제 #13
0
 public _IRunnable_49(SaveAsStorage _enclosing, SaveAsStorage.SaveAsBin saveAsBin,
                      string oldUri, string newUri, BinConfiguration oldConfiguration)
 {
     this._enclosing       = _enclosing;
     this.saveAsBin        = saveAsBin;
     this.oldUri           = oldUri;
     this.newUri           = newUri;
     this.oldConfiguration = oldConfiguration;
 }
예제 #14
0
        private IsolatedStorageFileStream OpenFile(BinConfiguration config, IsolatedStorageFile store)
        {
            _fullPath = config.Uri();
            string path = config.Uri();
            IsolatedStorageFileStream stream = new IsolatedStorageFileStream(path, FileModeFor(store, path), FileAccessFor(config), FileShareFor(config), store);

            Fill(stream, config.InitialLength(), 0);

            return(stream);
        }
예제 #15
0
		/// <summary>opens a Bin for the given URI.</summary>
		/// <remarks>opens a Bin for the given URI.</remarks>
		/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
		public override IBin Open(BinConfiguration config)
		{
			IBin storage = base.Open(config);
			if (config.ReadOnly())
			{
				return new ReadOnlyBin(new CachingStorage.NonFlushingCachingBin(storage, NewCache
					(), _pageCount, _pageSize));
			}
			return new CachingBin(storage, NewCache(), _pageCount, _pageSize);
		}
예제 #16
0
			protected override IBin Decorate(BinConfiguration config, IBin bin)
			{
				MsgExceptionHandlingTestCase.CloseAwareBin decorated = new MsgExceptionHandlingTestCase.CloseAwareBin
					(this, bin);
				lock (_openBins)
				{
					_openBins[decorated] = decorated;
				}
				return decorated;
			}
예제 #17
0
        /// <summary>opens a Bin for the given URI.</summary>
        /// <remarks>opens a Bin for the given URI.</remarks>
        /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
        public override IBin Open(BinConfiguration config)
        {
            IBin storage = base.Open(config);

            if (config.ReadOnly())
            {
                return(new ReadOnlyBin(new CachingStorage.NonFlushingCachingBin(storage, NewCache
                                                                                    (), _pageCount, _pageSize)));
            }
            return(new CachingBin(storage, NewCache(), _pageCount, _pageSize));
        }
예제 #18
0
		private IBin ProduceBin(BinConfiguration config)
		{
			IBin storage = Bin(config.Uri());
			if (null != storage)
			{
				return storage;
			}
			IBin newStorage = new PagingMemoryBin(_pageSize, config.InitialLength());
			_binsByUri[config.Uri()] = newStorage;
			return newStorage;
		}
예제 #19
0
		private IBin AcquireBin(BinConfiguration config)
		{
			IBin storage = Bin(config.Uri());
			if (null != storage)
			{
				return storage;
			}
			IBin newStorage = ProduceBin(config, _pageSize);
			_binsByUri[config.Uri()] = newStorage;
			return newStorage;
		}
예제 #20
0
		private IBin ProduceStorage(BinConfiguration config)
		{
			IBin storage = Bin(config.Uri());
			if (null != storage)
			{
				return storage;
			}
			MemoryBin newStorage = new MemoryBin(new byte[(int)config.InitialLength()], _growthStrategy
				);
			_bins[config.Uri()] = newStorage;
			return newStorage;
		}
예제 #21
0
        private IBin AcquireBin(BinConfiguration config)
        {
            IBin storage = Bin(config.Uri());

            if (null != storage)
            {
                return(storage);
            }
            IBin newStorage = ProduceBin(config, _pageSize);

            _binsByUri[config.Uri()] = newStorage;
            return(newStorage);
        }
예제 #22
0
        private IBin ProduceBin(BinConfiguration config)
        {
            var storage = Bin(config.Uri());

            if (null != storage)
            {
                return(storage);
            }
            IBin newStorage = new PagingMemoryBin(_pageSize, config.InitialLength());

            _binsByUri[config.Uri()] = newStorage;
            return(newStorage);
        }
예제 #23
0
	protected override IBin Decorate(BinConfiguration config, IBin bin) 
	{
        try 
		{
			var file = new FileStream(_fileName, FileMode.Create);

			var @out = new StreamWriter(file);
			return new LoggingBin(bin, @out, _config);
		} 
        catch(FileNotFoundException e) 
		{
			throw new Db4oIOException(e);
		}
	}
예제 #24
0
        private IBin ProduceStorage(BinConfiguration config)
        {
            IBin storage = Bin(config.Uri());

            if (null != storage)
            {
                return(storage);
            }
            MemoryBin newStorage = new MemoryBin(new byte[(int)config.InitialLength()], _growthStrategy
                                                 );

            _bins[config.Uri()] = newStorage;
            return(newStorage);
        }
예제 #25
0
        	internal IsolatedStorageFileBin(BinConfiguration config, IsolatedStorageFile store)
			{
				Action cleanUp = Close;
				try
				{
					_fileStream = OpenFile(config, store);
					cleanUp = () => {};
				}
				catch (IsolatedStorageException e)
				{
					ThrowMappedException(e, config.Uri(), store);
				}
				finally
				{
					cleanUp();
				}				
            }
예제 #26
0
		public virtual void Test()
		{
			MockBin mock = new MockBin();
			BinConfiguration binConfig = new BinConfiguration("uri", true, 42L, false);
			IBin storage = new NonFlushingStorage(new _IStorage_19(mock)).Open(binConfig);
			byte[] buffer = new byte[5];
			storage.Read(1, buffer, 4);
			storage.Write(2, buffer, 3);
			mock.ReturnValueForNextCall(42);
			Assert.AreEqual(42, mock.Length());
			storage.Sync();
			storage.Close();
			mock.Verify(new MethodCall[] { new MethodCall("open", new object[] { binConfig })
				, new MethodCall("read", new object[] { 1L, buffer, 4 }), new MethodCall("write"
				, new object[] { 2L, buffer, 3 }), new MethodCall("length", new object[] {  }), 
				new MethodCall("close", new object[] {  }) });
		}
예제 #27
0
        internal IsolatedStorageFileBin(BinConfiguration config, IsolatedStorageFile store)
        {
            Action cleanUp = Close;

            try
            {
                _fileStream = OpenFile(config, store);
                cleanUp     = () => {};
            }
            catch (IsolatedStorageException e)
            {
                ThrowMappedException(e, config.Uri(), store);
            }
            finally
            {
                cleanUp();
            }
        }
예제 #28
0
        /// <summary>
        /// call this method to save the content of a currently
        /// open ObjectContainer session to a new file location.
        /// </summary>
        /// <remarks>
        /// call this method to save the content of a currently
        /// open ObjectContainer session to a new file location.
        /// Invocation will close the old file without a commit,
        /// keep the reference system in place and connect it to
        /// the file in the new location. If anything goes wrong
        /// during the copying operation or while opening it will
        /// be attempted to reopen the old file. In this case a
        /// Db4oException will be thrown.
        /// </remarks>
        /// <param name="oldUri">the path to the old open database file</param>
        /// <param name="newUri">the path to the new database file</param>
        public virtual void SaveAs(string oldUri, string newUri)
        {
            if (System.IO.File.Exists(newUri))
            {
                throw new InvalidOperationException(newUri + " already exists");
            }
            SaveAsStorage.BinRecord binRecord = (SaveAsStorage.BinRecord)_binRecords.Get(oldUri
                                                                                         );
            if (binRecord == null)
            {
                throw new InvalidOperationException(oldUri + " was never opened or was closed.");
            }
            BinConfiguration oldConfiguration = binRecord._binConfiguration;

            SaveAsStorage.SaveAsBin saveAsBin = binRecord._bin;
            IRunnable closure = new _IRunnable_49(this, saveAsBin, oldUri, newUri, oldConfiguration
                                                  );

            saveAsBin.ExchangeUnderlyingBin(closure);
        }
예제 #29
0
 private static FileShare FileShareFor(BinConfiguration config)
 {
     return(config.LockFile() ? FileShare.None : FileShare.ReadWrite);
 }
예제 #30
0
		/// <summary>
		/// opens a
		/// <see cref="IBin">IBin</see>
		/// on the specified URI (file system path).
		/// </summary>
		/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
		public virtual IBin Open(BinConfiguration config)
		{
			return new FileStorage.FileBin(config);
		}
예제 #31
0
 internal BinRecord(BinConfiguration binConfiguration, SaveAsStorage.SaveAsBin bin
                    )
 {
     _binConfiguration = binConfiguration;
     _bin = bin;
 }
예제 #32
0
		/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
		public virtual IBin Open(BinConfiguration config)
		{
			return Decorate(config, _storage.Open(config));
		}
예제 #33
0
 protected override IBin Decorate(BinConfiguration config, IBin storage)
 {
     return(new NonFlushingBin(storage));
 }
예제 #34
0
			internal BinRecord(BinConfiguration binConfiguration, SaveAsStorage.SaveAsBin bin
				)
			{
				_binConfiguration = binConfiguration;
				_bin = bin;
			}
		protected override IBin Decorate(BinConfiguration config, IBin bin)
		{
			ResetShutdownState();
			return new ExceptionSimulatingStorage.ExceptionSimulatingBin(bin, _exceptionFactory
				, _triggerCondition);
		}
예제 #36
0
 protected virtual IBin ProduceBin(BinConfiguration config, int pageSize)
 {
     return(new PagingMemoryBin(pageSize, config.InitialLength()));
 }
예제 #37
0
		private void ReopenOldConfiguration(SaveAsStorage.SaveAsBin saveAsBin, BinConfiguration
			 config, string newUri, Exception e)
		{
			IBin safeBin = _storage.Open(config);
			saveAsBin.DelegateTo(safeBin);
			throw new Db4oException("Copying to " + newUri + " failed. Reopened " + config.Uri
				(), e);
		}
예제 #38
0
 protected override IBin Decorate(BinConfiguration config, IBin bin)
 {
     var decorated = new CloseAwareBin
         (this, bin);
     lock (_openBins)
     {
         _openBins[decorated] = decorated;
     }
     return decorated;
 }
예제 #39
0
 /// <summary>
 /// opens a
 /// <see cref="IBin">IBin</see>
 /// on the specified URI (file system path).
 /// </summary>
 /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
 public virtual IBin Open(BinConfiguration config)
 {
     return(new FileStorage.FileBin(config));
 }
예제 #40
0
 protected override IBin Decorate(BinConfiguration config, IBin bin)
 {
     return new LoggingBin(base.Decorate(config, bin));
 }
예제 #41
0
		protected virtual IBin Decorate(BinConfiguration config, IBin bin)
		{
			return bin;
		}
예제 #42
0
 protected override IBin Decorate(BinConfiguration config, IBin bin)
 {
     return new MockBin(bin, password);
 }
예제 #43
0
        /// <summary>opens a MemoryBin for the given URI (name can be freely chosen).</summary>
        /// <remarks>opens a MemoryBin for the given URI (name can be freely chosen).</remarks>
        /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
        public virtual IBin Open(BinConfiguration config)
        {
            IBin storage = ProduceStorage(config);

            return(config.ReadOnly() ? new ReadOnlyBin(storage) : storage);
        }
		protected override IBin Decorate(BinConfiguration config, IBin storage)
		{
			return new NonFlushingStorage.NonFlushingBin(storage);
		}
 protected virtual IBin Decorate(BinConfiguration config, IBin bin)
 {
     return(bin);
 }
예제 #46
0
 private static FileAccess FileAccessFor(BinConfiguration config)
 {
     return(config.ReadOnly() ? FileAccess.Read : FileAccess.ReadWrite);
 }
 /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
 public virtual IBin Open(BinConfiguration config)
 {
     return(Decorate(config, _storage.Open(config)));
 }
예제 #48
0
		/// <summary>opens a MemoryBin for the given URI (name can be freely chosen).</summary>
		/// <remarks>opens a MemoryBin for the given URI (name can be freely chosen).</remarks>
		/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
		public virtual IBin Open(BinConfiguration config)
		{
			IBin storage = ProduceStorage(config);
			return config.ReadOnly() ? new ReadOnlyBin(storage) : storage;
		}
예제 #49
0
		private BinConfiguration PointToNewUri(BinConfiguration oldConfig, string newUri)
		{
			return new BinConfiguration(newUri, oldConfig.LockFile(), oldConfig.InitialLength
				(), oldConfig.ReadOnly());
		}
예제 #50
0
 public override IBin Open(BinConfiguration config)
 {
     Console.WriteLine("Called: LoggingStorage.Open(" + config + ")");
     return base.Open(config);
 }
예제 #51
0
		/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
		public override IBin Open(BinConfiguration config)
		{
			SaveAsStorage.SaveAsBin openedBin = new SaveAsStorage.SaveAsBin(base.Open(config)
				);
			_binRecords.Put(config.Uri(), new SaveAsStorage.BinRecord(config, openedBin));
			return openedBin;
		}
예제 #52
0
			/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
			public IBin Open(BinConfiguration config)
			{
				mock.Record(new MethodCall("open", new object[] { config }));
				return mock;
			}
예제 #53
0
        /// <summary>opens a MemoryBin for the given URI (name can be freely chosen).</summary>
        /// <remarks>opens a MemoryBin for the given URI (name can be freely chosen).</remarks>
        /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
        public virtual IBin Open(BinConfiguration config)
        {
            IBin bin = AcquireBin(config);

            return(config.ReadOnly() ? new ReadOnlyBin(bin) : bin);
        }
예제 #54
0
 private BinConfiguration PointToNewUri(BinConfiguration oldConfig, string newUri)
 {
     return(new BinConfiguration(newUri, oldConfig.LockFile(), oldConfig.InitialLength
                                     (), oldConfig.ReadOnly()));
 }
예제 #55
0
 protected override IBin Decorate(BinConfiguration config, IBin bin)
 {
     return new MonitoredBin(bin);
 }
예제 #56
0
        /// <summary>opens a MemoryBin for the given URI (name can be freely chosen).</summary>
        /// <remarks>opens a MemoryBin for the given URI (name can be freely chosen).</remarks>
        /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception>
        public virtual IBin Open(BinConfiguration config)
        {
            var bin = ProduceBin(config);

            return(config.ReadOnly() ? new ReadOnlyBin(bin) : bin);
        }