Beispiel #1
0
            public List <String> GetTable(EntityDef r)
            {
                var FieldsAndKeys = new List <List <String> >();

                foreach (var f in r.Fields)
                {
                    if (f.Attribute.OnColumn)
                    {
                        FieldsAndKeys.Add(GetColumnDef(f));
                    }
                }
                {
                    var Name = RelationSchemaExtensions.GetLimitedKeyName("PK", String.Format("{0}_{1}", r.CollectionName, r.PrimaryKey.Columns.FriendlyName()), MaxNameLength);
                    FieldsAndKeys.Add(GetPrimaryKey(r.PrimaryKey, Name));
                }
                foreach (var k in r.UniqueKeys)
                {
                    var Name = RelationSchemaExtensions.GetLimitedKeyName("UQ", String.Format("{0}_{1}", r.CollectionName, k.Columns.FriendlyName()), MaxNameLength);
                    FieldsAndKeys.Add(GetUniqueKey(k, Name));
                }

                var NonUniqueKeys = new List <String>();

                foreach (var k in r.NonUniqueKeys)
                {
                    var Name = RelationSchemaExtensions.GetLimitedKeyName("IX", String.Format("{0}_{1}", r.CollectionName, k.Columns.FriendlyName()), MaxNameLength);
                    NonUniqueKeys.AddRange(GetNonUniqueKey(k, Name, r.CollectionName));
                }

                return(GetTemplate("Table").Substitute("Name", r.CollectionName).Substitute("FieldsAndKeys", JoinWithComma(FieldsAndKeys.ToArray())).Substitute("NonUniqueKeys", NonUniqueKeys));
            }
Beispiel #2
0
            public List <String> GetTable(EntityDef r)
            {
                var DuplicatedInMySqlViewPoint = new HashSet <Key>();
                var NondirectionalKeys         = new HashSet <ByIndex>();

                foreach (var k in (new Key[] { r.PrimaryKey }).Concat(r.UniqueKeys).Concat(r.NonUniqueKeys))
                {
                    var Index = new ByIndex {
                        Columns = k.Columns.Select(c => c.Name).ToList()
                    };
                    if (!NondirectionalKeys.Contains(Index))
                    {
                        NondirectionalKeys.Add(Index);
                    }
                    else
                    {
                        DuplicatedInMySqlViewPoint.Add(k);
                    }
                }

                var FieldsAndKeys = new List <List <String> >();

                foreach (var f in r.Fields)
                {
                    if (f.Attribute.OnColumn)
                    {
                        FieldsAndKeys.Add(GetColumnDef(f));
                    }
                }
                var FieldDict = r.Fields.ToDictionary(f => f.Name);

                {
                    var Name = RelationSchemaExtensions.GetLimitedKeyName("PK", String.Format("{0}_{1}", r.CollectionName, r.PrimaryKey.Columns.FriendlyName()), MaxNameLength);
                    foreach (var c in r.PrimaryKey.Columns)
                    {
                        var f = FieldDict[c.Name];
                        if (f.Type.OnOptional)
                        {
                            throw new InvalidOperationException(String.Format("MySQL主键中不支持NULL字段'{0}': {1}", Name, f.Name));
                        }
                    }
                    FieldsAndKeys.Add(GetPrimaryKey(r.PrimaryKey, Name));
                }
                foreach (var k in r.UniqueKeys)
                {
                    if (DuplicatedInMySqlViewPoint.Contains(k))
                    {
                        continue;
                    }
                    var Name = RelationSchemaExtensions.GetLimitedKeyName("UQ", String.Format("{0}_{1}", r.CollectionName, k.Columns.FriendlyName()), MaxNameLength);
                    FieldsAndKeys.Add(GetUniqueKey(k, Name));
                }

                var Options = new List <List <String> >();

                if (WithComment)
                {
                    if (r.Description != "")
                    {
                        Options.Add(new List <String> {
                            "COMMENT " + GetSqlStringLiteral(r.Description)
                        });
                    }
                }

                var NonUniqueKeys = new List <String>();

                foreach (var k in r.NonUniqueKeys)
                {
                    if (DuplicatedInMySqlViewPoint.Contains(k))
                    {
                        continue;
                    }
                    var Name = RelationSchemaExtensions.GetLimitedKeyName("IX", String.Format("{0}_{1}", r.CollectionName, k.Columns.FriendlyName()), MaxNameLength);
                    NonUniqueKeys.AddRange(GetNonUniqueKey(k, Name, r.CollectionName));
                }

                return(GetTemplate("Table").Substitute("Name", r.CollectionName).Substitute("FieldsAndKeys", JoinWithComma(FieldsAndKeys.ToArray())).Substitute("Options", JoinWithComma(Options.ToArray())).Substitute("NonUniqueKeys", NonUniqueKeys));
            }