Example #1
0
        public static nHydrate.DataImport.SQLObject ToDatabaseObject(this Entity item)
        {
            var retval = new DataImport.Entity();

            retval.Name             = item.Name;
            retval.Schema           = item.Schema;
            retval.AllowCreateAudit = item.AllowCreateAudit;
            retval.AllowModifyAudit = item.AllowModifyAudit;
            retval.AllowTimestamp   = item.AllowTimestamp;
            retval.IsTenant         = item.IsTenant;

            //Fields
            foreach (var f in item.Fields)
            {
                retval.FieldList.Add(new nHydrate.DataImport.Field()
                {
                    DataType     = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), f.DataType.ToString(), true),
                    DefaultValue = f.Default,
                    Identity     = (f.Identity == IdentityTypeConstants.Database),
                    IsIndexed    = f.IsIndexed,
                    IsUnique     = f.IsUnique,
                    Length       = f.Length,
                    Name         = f.Name,
                    Nullable     = f.Nullable,
                    PrimaryKey   = f.IsPrimaryKey,
                    Scale        = f.Scale,
                    SortOrder    = f.SortOrder,
                });
            }

            return(retval);
        }
Example #2
0
        public static void PopulateFields(nHydrate.Dsl.nHydrateModel model, DataImport.Entity importItem, Entity targetItem)
        {
            foreach (var field in importItem.FieldList)
            {
                var newField = targetItem.Fields.FirstOrDefault(x => x.Name.ToLower() == field.Name.ToLower());
                if (newField == null)
                {
                    newField = new nHydrate.Dsl.Field(model.Partition);
                }

                if (!targetItem.Fields.Contains(newField))
                {
                    targetItem.Fields.Add(newField);
                }

                newField.SortOrder           = field.SortOrder;
                newField.Name                = field.Name;
                newField.DataType            = (DataTypeConstants)Enum.Parse(typeof(DataTypeConstants), field.DataType.ToString());
                newField.Length              = field.Length;
                newField.Nullable            = field.Nullable;
                newField.IsCalculated        = field.IsComputed;
                newField.Default             = field.DefaultValue;
                newField.IsUnique            = field.IsUnique;
                newField.Formula             = field.Formula;
                newField.Identity            = (field.Identity ? IdentityTypeConstants.Database : IdentityTypeConstants.None);
                newField.IsPrimaryKey        = field.PrimaryKey;
                newField.Scale               = field.Scale;
                newField.ImportedDefaultName = field.ImportedDefaultName;
                //DO NOT IMPORT METADATA

                //Correct for invalid identifiers
                if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newField.Name))
                {
                    newField.CodeFacade = nHydrate.Dsl.ValidationHelper.MakeCodeIdentifier(newField.Name, string.Empty);
                }
            }
            var removedFields = targetItem.Fields.Remove(x => !importItem.FieldList.Select(y => y.Name.ToLower()).Contains(x.Name.ToLower()));
        }
Example #3
0
        private int LoadPostgres(string connectionString, List <SpecialField> auditFields)
        {
            var tlist = DslPackage.Objects.Postgres.ImportDomain.GetTables(connectionString);
            var db    = new DataImport.Database();

            this.NewDatabase = db;

            var allIndexes   = DslPackage.Objects.Postgres.ImportDomain.GetIndexes(connectionString);
            var allRelations = DslPackage.Objects.Postgres.ImportDomain.GetRelations(connectionString);

            foreach (var entity in tlist)
            {
                //Create table
                var newEntity = new DataImport.Entity
                {
                    AllowCreateAudit = entity.Columns.Any(x => x.ColumnName == _model.CreatedByColumnName),
                    AllowModifyAudit = entity.Columns.Any(x => x.ColumnName == _model.ModifiedByColumnName),
                    AllowTimestamp   = entity.Columns.Any(x => x.ColumnName == _model.ConcurrencyCheckColumnName),
                    IsTenant         = entity.Columns.Any(x => x.ColumnName == _model.TenantColumnName),
                    Name             = entity.TableName,
                    Schema           = entity.SchemaName,
                };
                db.EntityList.Add(newEntity);

                //Load fields
                foreach (var column in entity.Columns)
                {
                    var isIndexed = allIndexes.Any(x => x.TableName == newEntity.Name && newEntity.FieldList.Any(z => z.Name == column.ColumnName) && newEntity.FieldList.Count == 1);
                    newEntity.FieldList.Add(new DataImport.Field
                    {
                        DataType   = SqlDbType.BigInt,
                        Identity   = column.IsIdentity,
                        IsIndexed  = isIndexed,
                        Name       = column.ColumnName,
                        Nullable   = column.AllowNull,
                        PrimaryKey = false,
                    });
                }

                //TODO: Add multi-column indexes

                #region Load relations

                foreach (var rowRelationship in allRelations)
                {
                    var constraintName  = rowRelationship.IndexName;
                    var parentTableName = rowRelationship.TableName;
                    var childTableName  = rowRelationship.FKTableName;
                    var parentTable     = db.EntityList.FirstOrDefault(x => x.Name == parentTableName);
                    var childTable      = db.EntityList.FirstOrDefault(x => x.Name == childTableName);
                    if (parentTable != null && childTable != null)
                    {
                        Relationship newRelation = null;
                        var          isAdd       = false;
                        if (db.RelationshipList.Count(x => x.ConstraintName == constraintName) == 0)
                        {
                            newRelation = new Relationship();
                            //if (rowRelationship["object_id"] != System.DBNull.Value)
                            //    newRelation.ImportData = rowRelationship["object_id"].ToString();
                            newRelation.SourceEntity   = parentTable;
                            newRelation.TargetEntity   = childTable;
                            newRelation.ConstraintName = constraintName;
                            var search   = ("_" + childTable.Name + "_" + parentTable.Name).ToLower();
                            var roleName = constraintName.ToLower().Replace(search, string.Empty);
                            if (roleName.Length >= 3)
                            {
                                roleName = roleName.Remove(0, 3);
                            }
                            var v = roleName.ToLower();
                            if (v != "fk")
                            {
                                newRelation.RoleName = v;
                            }
                            isAdd = true;
                        }
                        else
                        {
                            newRelation = db.RelationshipList.First(x => x.ConstraintName == constraintName);
                        }

                        //add the column relationship to the relation
                        var columnRelationship = new RelationshipDetail();
                        var parentColumnName   = rowRelationship.ColumnName;
                        var childColumnName    = rowRelationship.FKColumnName;
                        if (parentTable.FieldList.Count(x => x.Name == parentColumnName) == 1 && (childTable.FieldList.Count(x => x.Name == childColumnName) == 1))
                        {
                            columnRelationship.ParentField = parentTable.FieldList.First(x => x.Name == parentColumnName);
                            columnRelationship.ChildField  = childTable.FieldList.First(x => x.Name == childColumnName);
                            newRelation.RelationshipColumnList.Add(columnRelationship);

                            //ONLY ADD THIS RELATION IF ALL WENT WELL
                            if (isAdd)
                            {
                                parentTable.RelationshipList.Add(newRelation);
                            }
                        }
                    }
                }
                #endregion

                this.NewDatabase.CleanUp();
                this.NewDatabase.SetupIdMap(this.CurrentDatabase);

                //Load the tree
                this.Populate();
            }

            return(0);
        }