Exemple #1
0
        public Did CreateDatabase(IDatabaseParameters databaseParameters)
        {
            if (_metadata.Databases.Any(d => d.Value.Name.Equals(databaseParameters.Name)))
            {
                throw new DatabaseAlreadyExistException(String.Format("Baza danych o nazwie '{0}' już istnieje",
                                                                      databaseParameters.Name));
            }
            var newDid = Did.CreateNew();

            if (databaseParameters.Schema == null)
            {
                databaseParameters.Schema = new DatabaseSchema()
                {
                    DatabaseId = newDid,
                    Classes    = new ConcurrentDictionary <ClassId, Class>(),
                    Properties = new ConcurrentDictionary <PropertyId, Property>(),
                    Methods    = new ConcurrentDictionary <ClassId, List <IMethod> >()
                }
            }
            ;
            newDid.Duid = _metadata.Databases.Count == 0 ? 0 : _metadata.Databases.Max(d => d.Key.Duid) + 1;
            databaseParameters.DatabaseId = newDid;
            if (!_metadata.Databases.TryAdd(newDid, databaseParameters))
            {
                throw  new ApplicationException("Database creation internal storage error...");
            }
            _engine.OpenDatabase(databaseParameters);

            StorageMetadata.SaveMetadata(_metadata, _logger);
            return(newDid);
        }
Exemple #2
0
        public void OpenDatabase(IDatabaseParameters parameters)
        {
            if (_storages.ContainsKey(parameters.DatabaseId))
            {
                return;
            }
            if (!Directory.Exists(parameters.BaseDirectory))
            {
                Directory.CreateDirectory(parameters.BaseDirectory);
            }

            var options = new BPlusTree <Oid, byte[]> .Options(new KeySerializer(), new ValueSerializer());

            options.FileName   = parameters.DataFileFullPath;
            options.CreateFile = CreatePolicy.IfNeeded;

            if (!File.Exists(parameters.DataFileFullPath))
            {
                options.FileGrowthRate    = parameters.IncreaseFactor;
                options.CachePolicy       = CachePolicy.All;
                options.ConcurrentWriters = 2;
                options.FileBlockSize     = 4096;
                options.FileOpenOptions   = FileOptions.RandomAccess;
                options.MaximumValueNodes = 64;
                options.MinimumValueNodes = 32;
                options.MaximumChildNodes = 32;
                options.MinimumChildNodes = 16;
            }

            _storages.Add(parameters.DatabaseId, new BPlusTree <Oid, byte[]>(options));
        }
        private int GetObjectClassNumber(IStorage storage, IDatabaseParameters databaseParameters, Class classStats)
        {
            var classParameter = databaseParameters.Schema.ClassProperties(classStats);
            var objs           = storage.GetAll(databaseParameters.DatabaseId);

            return(objs.Where(s => s.Properties.All(p => classParameter.Any(cp => cp.PropertyId.Id == p.Key.PropertyId.Id))).Count());
        }
Exemple #4
0
 public SegmentMap(IDatabaseParameters databaseParameters)
 {
     _freeSegments       = new List <int>();
     _databaseParameters = databaseParameters;
     _segmentSize        = databaseParameters.PageSize;
     _recordIdMap        = new Dictionary <int, List <int> >();
 }
        private void RecalculateSchemaStats(IStorage storage, IDatabaseParameters databaseParameters)
        {
            var schemasStat = new SchemaStats();

            databaseParameters.Schema.Classes.ToList()
            .ForEach(p =>
                     schemasStat.ClassStats.objectNumbers.TryAdd(p.Key, GetObjectClassNumber(storage, databaseParameters, p.Value)));
            schemasStat.DatabaseId = databaseParameters.DatabaseId;
            UpdateStatisticSchemaData(databaseParameters.DatabaseId, schemasStat);
        }
Exemple #6
0
 private void Store(IDatabaseParameters parameters)
 {
     foreach (var parameter in parameters.Query.Parameters)
     {
         if (parameter.Flags.HasFlag(DatabaseQueryParameterFlags.EntityWrite) && parameter.Column != null && parameter.Column.Setter != null)
         {
             parameter.Column.Setter(this.Item, parameters[parameter.Column]);
         }
     }
 }
Exemple #7
0
 private void Fetch(IDatabaseParameters parameters)
 {
     foreach (var parameter in parameters.Query.Parameters)
     {
         if (parameter.Flags.HasFlag(DatabaseQueryParameterFlags.EntityRead) && parameter.Column != null && parameter.Column.Getter != null)
         {
             parameters[parameter.Column] = parameter.Column.Getter(this.Item);
         }
     }
 }
Exemple #8
0
        public void DeleteDataFiles(IDatabaseParameters parameters)
        {
            OpenDatabase(parameters);
            _storages[parameters.DatabaseId] = null;
            _storages.Remove(parameters.DatabaseId);

            if (File.Exists(parameters.DataFileFullPath))
            {
                File.Delete(parameters.DataFileFullPath);
            }
        }
Exemple #9
0
 public CentralServerExecuter(IDatabaseParameters database, Action <IQueryElement> doOnDataServers,
                              SystemInfo systemInfo, IStorage storage,
                              ISettingsManager settingsManager, Action <string, MessageLevel> log)
     : base(database, storage, log)
 {
     _database        = database;
     _doOnDataServers = doOnDataServers;
     _systemInfo      = systemInfo;
     _storage         = storage;
     _settingsManager = settingsManager;
     _log             = log;
 }
Exemple #10
0
        public void OpenDatabase(IDatabaseParameters parameters)
        {
            if (_storages.ContainsKey(parameters.DatabaseId))
            {
                return;
            }
            if (!Directory.Exists(parameters.BaseDirectory))
            {
                Directory.CreateDirectory(parameters.BaseDirectory);
            }

            _storages.Add(parameters.DatabaseId, new EsentStorageRaw(parameters));
        }
Exemple #11
0
        public DeleteDatabaseStatus RemoveDatabase(IDatabaseRemoveParameters databaseRemoveParameters)
        {
            if (!_metadata.Databases.ContainsKey(databaseRemoveParameters.DatabaseToRemove))
            {
                throw new DatabaseNotFoundException(String.Format("Nie odnaleziono bazy danych o id: '{0}'",
                                                                  databaseRemoveParameters.DatabaseToRemove));
            }

            IDatabaseParameters parameters = null;

            _metadata.Databases.TryRemove(databaseRemoveParameters.DatabaseToRemove, out parameters);

            StorageMetadata.SaveMetadata(_metadata, _logger);
            return(new DeleteDatabaseStatus());
        }
Exemple #12
0
        public static SegmentMap Read(IDatabaseParameters databaseParameters)
        {
            var segmentFileName = Path.Combine(databaseParameters.BaseDirectory, String.Format("{0}.seg", databaseParameters.Name));

            if (!File.Exists(segmentFileName))
            {
                return(new SegmentMap(databaseParameters));
            }

            using (var stream = new FileStream(segmentFileName, FileMode.Open))
            {
                var formatter = new BinaryFormatter();
                return(formatter.Deserialize(stream) as SegmentMap);
            }
        }
Exemple #13
0
        public Did RenameDatabase(IDatabaseParameters databaseParameters, string databaseNweName, ISettingsManager settingsManager)
        {
            DatabaseParameters renamedParameters = new DatabaseParameters(databaseNweName, settingsManager);

            renamedParameters.DatabaseId     = databaseParameters.DatabaseId;
            renamedParameters.Schema         = databaseParameters.Schema;
            renamedParameters.PageSize       = databaseParameters.PageSize;
            renamedParameters.OptimizeSize   = databaseParameters.OptimizeSize;
            renamedParameters.StartupSize    = databaseParameters.StartupSize;
            renamedParameters.IncreaseFactor = databaseParameters.IncreaseFactor;

            _metadata.Databases[databaseParameters.DatabaseId] = renamedParameters;

            StorageMetadata.SaveMetadata(_metadata, _logger);
            //_engine.Dispose();
            //File.Move(databaseParameters.DataFileFullPath, renamedParameters.DataFileFullPath);
            _engine.OpenDatabase(renamedParameters);
            return(renamedParameters.DatabaseId);
        }
Exemple #14
0
 public EsentStorageRaw(IDatabaseParameters databaseParameters)
 {
     _databaseParameters = databaseParameters;
     CreateInstance();
     OpenDatabase();
 }
Exemple #15
0
 public DatabaseCommand(IDbCommand command, IDatabaseParameters parameters, DatabaseCommandFlags flags)
 {
     this.Command    = command;
     this.Parameters = parameters;
     this.Flags      = flags;
 }
Exemple #16
0
 public EngineExecuter(IDatabaseParameters database, IStorage storage, Action <string, MessageLevel> log)
 {
     _database = database;
     _storage  = storage;
     _log      = log;
 }
Exemple #17
0
 public MmfStorageStream(IDatabaseParameters databaseParameters)
 {
     _databaseParameters = databaseParameters;
     CreateHandles();
 }