/// <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? }
/// <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(); } }
/// <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; }
/// <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(); }
/// <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); }