Beispiel #1
0
 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();
 }
Beispiel #2
0
 public DatabaseRepository(ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null)
     : base(tableNameProvider, schemaTempPathProvider)
 {
     BlockOnChildWrites    = true;
     BackgroundThreadQueue = new BackgroundThreadQueue <SqlStringBuilder> {
         Process = Execute
     };
 }
Beispiel #3
0
 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
            });
        }
Beispiel #6
0
        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;
        }
Beispiel #7
0
 public string GetTableName(ITypeTableNameProvider tableNameProvider = null)
 {
     tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider();
     return(tableNameProvider.GetTableName(Type));
 }
Beispiel #8
0
        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);
            }
        }
Beispiel #9
0
 protected internal static string GetTableNameForType(Type type, ITypeTableNameProvider tableNameProvider = null)
 {
     tableNameProvider = tableNameProvider ?? new EchoTypeTableNameProvider();
     return(tableNameProvider.GetTableName(type));
 }
Beispiel #10
0
        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);
        }
Beispiel #11
0
 public TypeInheritanceSchemaGenerator(ITypeTableNameProvider tableNameProvider = null, Func <SchemaDefinition, TypeSchema, string> schemaTempPathProvider = null)
     : base(tableNameProvider, schemaTempPathProvider)
 {
 }
Beispiel #12
0
        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;
 }
Beispiel #14
0
 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;
         });
     }
 }
Beispiel #15
0
 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);
     }
 }
Beispiel #16
0
 /// <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);
 }
Beispiel #17
0
 /// <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;
 }