private static SQLiteDatabase GetTestDatabase(bool setupTestData = true, string namePrefix = null) { namePrefix = namePrefix ?? 8.RandomLetters(); SQLiteDatabase testDatabase = new SQLiteDatabase(namePrefix + "_SQLite", Dao.ConnectionName(typeof(MainObject))); if (testDatabase.DatabaseFile.Exists) { try { testDatabase.DatabaseFile.Delete(); } catch (Exception ex) { OutLineFormat("Unable to delete existing db file: {0}", ConsoleColor.Yellow, ex.Message); } } Exception e; EnsureSchemaStatus result = testDatabase.TryEnsureSchema(typeof(MainObject), out e, Logger); if (result == EnsureSchemaStatus.Error) { throw e; } if (setupTestData) { SetupTestData(testDatabase); } return(testDatabase); }
public virtual EnsureSchemaStatus TryEnsureSchema(Type type, bool force, out Exception ex, ILogger logger = null) { EnsureSchemaStatus result = EnsureSchemaStatus.Invalid; ex = null; try { string schemaName = Dao.RealConnectionName(type); if (!SchemaNames.Contains(schemaName) || force) { _schemaNames.Add(schemaName); SchemaWriter schema = ServiceProvider.Get <SchemaWriter>(); schema.WriteSchemaScript(type); ExecuteSql(schema, ServiceProvider.Get <IParameterBuilder>()); result = EnsureSchemaStatus.Success; } else { result = EnsureSchemaStatus.AlreadyDone; } } catch (Exception e) { ex = e; result = EnsureSchemaStatus.Error; logger = logger ?? Log.Default; logger.AddEntry("Non fatal error occurred trying to write schema for type {0}: {1}", LogEventType.Warning, ex, type.Name, ex.Message); } return(result); }
/// <summary> /// Generates a Dao Assembly for the underlying /// storable types if it has not yet been generated /// </summary> /// <returns></returns> public Assembly EnsureDaoAssemblyAndSchema(bool useExisting = true) { if (_daoAssembly == null) { _daoAssembly = GenerateDaoAssembly(useExisting); } Args.ThrowIfNull(Database, "Database"); if (SchemaStatus == EnsureSchemaStatus.Invalid) { MultiTargetLogger logger = new MultiTargetLogger(); Subscribers.Each(l => logger.AddLogger(l)); SchemaStatus = Database.TryEnsureSchema(_daoAssembly.GetTypes().First(type => type.HasCustomAttributeOfType(out TableAttribute attr) && attr.ConnectionName.Equals(SchemaName)), logger); } return(_daoAssembly); }
/// <summary> /// Creates the tables for the specified type /// </summary> /// <param name="type"></param> public static EnsureSchemaStatus EnsureSchema(Type type, Database database = null) { string name = Dao.ConnectionName(type); Database db = database ?? Db.For(type); EnsureSchemaResult result = new EnsureSchemaResult { Database = db, SchemaName = name }; EnsureSchemaStatus status = _ensureSchemaResults.Where(esr => esr.Equals(result)).Select(esr => esr.Status).FirstOrDefault(); if (status != EnsureSchemaStatus.AlreadyDone || status != EnsureSchemaStatus.Success) { _ensureSchemaResults.Add(result); status = db.TryEnsureSchema(type); } else { status = EnsureSchemaStatus.AlreadyDone; } result.Status = status; return(status); }