public TypeSchemaGenerator(ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null) { DefaultDataTypeBehavior = DefaultDataTypeBehaviors.Exclude; TypeSchemaTempPathProvider = schemaTempPathProvider ?? ((sd, ts) => RuntimeSettings.AppDataFolder); SchemaManager = new CuidSchemaManager(false); _tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider(); }
public DatabaseRepository(ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null) : base(tableNameProvider, schemaTempPathProvider) { BlockOnChildWrites = true; BackgroundThreadQueue = new BackgroundThreadQueue <SqlStringBuilder> { Process = Execute }; }
public DatabaseRepository(Database database, ILogger logger = null, ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null) : this(tableNameProvider, schemaTempPathProvider) { Database = database; TypeSchemaGenerator = new TypeInheritanceSchemaGenerator(tableNameProvider, schemaTempPathProvider); TypeDaoGenerator = new TypeDaoGenerator(TypeSchemaGenerator); Logger = logger ?? Log.Default; TypeDaoGenerator.Subscribe(Logger); TypeSchemaGenerator.Subscribe(Logger); }
public ForeignKeyColumn ToForeignKeyColumn(ITypeTableNameProvider tableNameProvider = null) { ForeignKeyColumn result = new ForeignKeyColumn(Name, TypeSchemaGenerator.GetTableNameForType(_foreignKeyTableType), TypeSchemaGenerator.GetTableNameForType(DeclaringType, tableNameProvider)); result.DataType = DataTypes.Long; return(result); }
public KeyColumn ToKeyColumn(ITypeTableNameProvider tableNameProvider) { string name = "Id"; if (DeclaringType != null) { PropertyInfo keyProperty = TypeSchemaGenerator.GetKeyProperty(DeclaringType); if (keyProperty != null) { name = keyProperty.Name; } } return(new KeyColumn { TableName = tableNameProvider.GetTableName(DeclaringType), //TypeSchemaGenerator.GetTableNameForType(DeclaringType), Name = name, DataType = DataTypes.Long }); }
private void CtorInit(ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null) { TypeSchemaGenerator = new TypeSchemaGenerator(tableNameProvider, schemaTempPathProvider); TypeDaoGenerator = new TypeDaoGenerator(TypeSchemaGenerator); TypeDaoGenerator.SchemaWarning += (o, a) => { FireEvent(SchemaWarning, a); }; TypeDaoGenerator.GenerateDaoAssemblySucceeded += (o, a) => { GenerateDaoAssemblyEventArgs args = (GenerateDaoAssemblyEventArgs)a; FireEvent(GenerateDaoAssemblySucceeded, args); }; NullifyDaoAssemblyOnTypeAdd = true; WrapByDefault = true; WarningsAsErrors = true; Logger = Log.Default; }
public string GetTableName(ITypeTableNameProvider tableNameProvider = null) { tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider(); return(tableNameProvider.GetTableName(Type)); }
protected virtual void AddPropertyColumns(Type type, SchemaManager schemaManager, DefaultDataTypeBehaviors defaultDataTypeBehavior, ITypeTableNameProvider tableNameProvider = null) { string tableName = GetTableNameForType(type, tableNameProvider); foreach (PropertyInfo property in type.GetProperties().Where(p => p.CanWrite)) { AddPropertyColumn(schemaManager, defaultDataTypeBehavior, tableName, property); } }
protected internal static string GetTableNameForType(Type type, ITypeTableNameProvider tableNameProvider = null) { tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider(); return(tableNameProvider.GetTableName(type)); }
protected internal static PropertyInfo GetKeyProperty(Type type, List <KeyColumn> keyColumnsToCheck = null, ITypeTableNameProvider tableNameProvider = null) { tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider(); PropertyInfo keyProperty = type.GetFirstProperyWithAttributeOfType <KeyAttribute>(); if (keyProperty == null) { keyProperty = type.GetProperty("Id"); } if (keyProperty == null && keyColumnsToCheck != null) { KeyColumn keyColumn = keyColumnsToCheck.FirstOrDefault(kc => kc.TableName.Equals(GetTableNameForType(type, tableNameProvider))); if (keyColumn != null) { keyProperty = new TypeSchemaPropertyInfo(keyColumn.Name, type, tableNameProvider); } } return(keyProperty); }
public TypeInheritanceSchemaGenerator(ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null) : base(tableNameProvider, schemaTempPathProvider) { }
protected internal virtual void WriteDaoSchema(TypeSchema typeSchema, SchemaManager schemaManager, List <KeyColumn> missingKeyColumns = null, List <ForeignKeyColumn> missingForeignKeyColumns = null, ITypeTableNameProvider tableNameProvider = null) { AddSchemaTables(typeSchema, schemaManager, tableNameProvider); HashSet <TypeFk> foreignKeyTypes = typeSchema.ForeignKeys; HashSet <TypeXref> xrefTypes = typeSchema.Xrefs; // accounting for missing columns // loop primary keys and fks separately to ensure // missing keys get recorded prior to trying to add the // fks foreach (TypeFk foreignKey in foreignKeyTypes) { TypeSchemaPropertyInfo keyInfo = foreignKey.PrimaryKeyProperty as TypeSchemaPropertyInfo; if (keyInfo != null) { KeyColumn key = keyInfo.ToKeyColumn(); schemaManager.AddColumn(key.TableName, key); schemaManager.SetKeyColumn(key.TableName, key.Name); if (missingKeyColumns != null) { missingKeyColumns.Add(key); } } } foreach (TypeFk foreignKey in foreignKeyTypes) { TypeSchemaPropertyInfo fkInfo = foreignKey.ForeignKeyProperty as TypeSchemaPropertyInfo; if (fkInfo != null) { PropertyInfo keyProperty = GetKeyProperty(foreignKey.PrimaryKeyType, missingKeyColumns); string referencedKeyName = keyProperty.Name; ForeignKeyColumn fk = fkInfo.ToForeignKeyColumn(tableNameProvider); fk.AllowNull = true; schemaManager.AddColumn(fk.TableName, fk); schemaManager.SetForeignKey(fk.ReferencedTable, fk.TableName, fk.Name, referencedKeyName); if (missingForeignKeyColumns != null) { missingForeignKeyColumns.Add(fk); } } } // /end - accounting for missing columns foreach (TypeFk foreignKey in foreignKeyTypes) { schemaManager.SetForeignKey( GetTableNameForType(foreignKey.PrimaryKeyType, tableNameProvider), GetTableNameForType(foreignKey.ForeignKeyType, tableNameProvider), foreignKey.ForeignKeyProperty.Name); } foreach (TypeXref xref in xrefTypes) { schemaManager.SetXref(GetTableNameForType(xref.Left, tableNameProvider), GetTableNameForType(xref.Right, tableNameProvider)); } }
public TypeSchemaPropertyInfo(string name, Type declaringType, Type foreignKeyTableType, ITypeTableNameProvider tableNameProvider) { this._name = name; this.SetDeclaringType(declaringType); this._foreignKeyTableType = foreignKeyTableType; this.TableNameProvider = tableNameProvider; }
protected override void AddSchemaTables(TypeSchema typeSchema, SchemaManager schemaManager, ITypeTableNameProvider tableNameProvider = null) { tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider(); foreach (Type topType in typeSchema.Tables) { TypeInheritanceDescriptor inheritance = new TypeInheritanceDescriptor(topType); Type inheritFrom = null; inheritance.Chain.BackwardsEach(typeTable => { string tableName = typeTable.GetTableName(tableNameProvider); schemaManager.AddTable(tableName); schemaManager.ExecutePreColumnAugmentations(tableName); typeTable.PropertyColumns.Each(pc => { AddPropertyColumn(schemaManager, typeSchema.DefaultDataTypeBehavior, tableName, pc.PropertyInfo); }); schemaManager.ExecutePostColumnAugmentations(tableName); schemaManager.AddColumn(tableName, "Id", DataTypes.Long); if (inheritFrom != null) { schemaManager.SetForeignKey(tableNameProvider.GetTableName(inheritFrom), tableName, "Id", "Id"); } else { schemaManager.SetKeyColumn(tableName, "Id"); } inheritFrom = typeTable.Type; }); } }
protected virtual void AddSchemaTables(TypeSchema typeSchema, SchemaManager schemaManager, ITypeTableNameProvider tableNameProvider = null) { tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider(); foreach (Type tableType in typeSchema.Tables) { string tableName = GetTableNameForType(tableType, tableNameProvider); schemaManager.AddTable(tableName); schemaManager.ExecutePreColumnAugmentations(tableName); AddPropertyColumns(tableType, schemaManager, typeSchema.DefaultDataTypeBehavior); schemaManager.ExecutePostColumnAugmentations(tableName); } }
/// <summary> /// Create an instance of DaoRepository /// </summary> /// <param name="tableNameProvider"></param> /// <param name="schemaTempPathProvider"></param> public DaoRepository(ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null) { CtorInit(tableNameProvider, schemaTempPathProvider); Database = new SQLiteDatabase(GetType().Name); }
/// <summary> /// Create an instance of DaoRepository /// </summary> /// <param name="tableNameProvider"></param> /// <param name="schemaTempPathProvider"></param> public DaoRepository(ITypeTableNameProvider tableNameProvider, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider) { CtorInit(tableNameProvider, schemaTempPathProvider); Database = DataSettings.Current.GetSysDatabaseFor(this); Logger = Log.Default; }