示例#1
0
        /// <summary>
        /// Creates a database from a DBFill object. Used when booting up from disk.
        /// </summary>
        /// <param name="process">The FrostDB process.</param>
        /// <param name="fill">A DBFill object (usually loaded from disk.)</param>
        public Database2(Process process, DbFill fill, DbStorage storage)
        {
            _tables     = new List <Table2>();
            _process    = process;
            _name       = fill.Schema.DatabaseName;
            _databaseId = fill.Schema.DatabaseId;
            _storage    = storage;
            _schema     = fill.Schema;
            FillTables(fill);

            // to do: anything else?
        }
示例#2
0
        /// <summary>
        /// Creates a new schema file for the specified database
        /// </summary>
        /// <param name="schemaFileFolder">The location of the schema file folder for the Frost process</param>
        /// <param name="fileExtension">The filename extension for schema files</param>
        /// <param name="databaseName">The name of the database</param>
        /// <param name="databaseId">The id of the database</param>
        public SchemaFile(string schemaFileFolder, string fileExtension, string databaseName, int databaseId)
        {
            _databaseId          = databaseId;
            _schemaFileFolder    = schemaFileFolder;
            _schemaFileExtension = fileExtension;
            _databaseName        = databaseName;
            _dbSchema            = new DbSchema2();

            if (DoesFileExist())
            {
                LoadFile();
            }
            else
            {
                CreateFile();
            }
        }
示例#3
0
        /// <summary>
        /// Updates the local schema reference based on the current tables and columns in memory
        /// </summary>
        private void UpdateSchema()
        {
            var schema = new DbSchema2(_databaseId, _name);

            _tables.ForEach(table =>
            {
                var tableSchema = new TableSchema2(table.TableId, table.Name, _name, _databaseId, table.Columns.Length);
                int colIndx     = 0;

                table.Columns.ForEach(column =>
                {
                    var columnSchema             = new ColumnSchema(column.Name, column.DataType);
                    tableSchema.Columns[colIndx] = columnSchema;
                    colIndx++;
                });
                schema.Tables.Add(tableSchema);
            });

            _schema = schema;
        }
示例#4
0
        /// <summary>
        /// Saves the specified schema to disk
        /// </summary>
        /// <param name="schema">The current database schema</param>
        public void Save(DbSchema2 schema)
        {
            _locker.EnterWriteLock();

            using (var file = new StreamWriter(FileName()))
            {
                file.WriteLine("version " + VersionNumber.ToString());
                file.WriteLine($"database { _databaseId.ToString()} { _databaseName}");
                foreach (var table in schema.Tables)
                {
                    // table tableId tableName numOfColumns
                    file.WriteLine($"table {table.TableId.ToString()} {table.Name} {table.Columns.Length.ToString()}");
                    foreach (var column in table.Columns)
                    {
                        // column columnName columnDataType
                        file.WriteLine($"column {column.Name} {column.DataType}");
                    }
                }
            }

            _locker.ExitWriteLock();
        }
示例#5
0
 /// <summary>
 /// Updates the schema file on disk
 /// </summary>
 /// <param name="schema">The schema to save to disk</param>
 public void SaveSchema(DbSchema2 schema)
 {
     _schema.Save(schema);
 }