コード例 #1
0
        private void ParseMetaPropertyTypes(StreamReader reader, MetaProperty property)
        {
            string line = reader.ReadLine();

            if (line == null)
            {
                return;
            }

            while (line != "{\"Pattern\",")
            {
                line = reader.ReadLine();
                if (line == null)
                {
                    return;
                }
            }

            Match match;

            while ((line = reader.ReadLine()) != null)
            {
                match = rxDbType.Match(line);
                if (!match.Success)
                {
                    break;
                }

                int    typeCode = 0;
                string typeName = string.Empty;
                string token    = match.Value.Replace("{", string.Empty).Replace("\"", string.Empty);
                switch (token)
                {
                case DBToken.B: { typeCode = -1; typeName = "Boolean"; break; }

                case DBToken.S: { typeCode = -2; typeName = "String"; break; }

                case DBToken.D: { typeCode = -3; typeName = "DateTime"; break; }

                case DBToken.N: { typeCode = -4; typeName = "Numeric"; break; }
                }
                if (typeCode != 0)
                {
                    property.Types.Add(new TypeInfo()
                    {
                        Name     = typeName,
                        TypeCode = typeCode
                    });
                }
                else
                {
                    string[] lines = line.Split(',');
                    string   UUID  = lines[1].Replace("}", string.Empty);

                    if (UUID == "e199ca70-93cf-46ce-a54b-6edc88c3a296")
                    {
                        // ХранилищеЗначения - varbinary(max)
                        property.Types.Add(new TypeInfo()
                        {
                            Name     = "BLOB",
                            TypeCode = -5
                        });
                    }
                    else if (UUID == "fc01b5df-97fe-449b-83d4-218a090e681e")
                    {
                        // УникальныйИдентификатор - binary(16)
                        property.Types.Add(new TypeInfo()
                        {
                            Name     = "UUID",
                            TypeCode = -6
                        });
                    }
                    else if (UUIDs.TryGetValue(UUID, out MetaObject dbo))
                    {
                        property.Types.Add(new TypeInfo()
                        {
                            Name       = dbo.TableName,
                            TypeCode   = dbo.TypeCode,
                            UUID       = UUID,
                            MetaObject = dbo
                        });
                        property.PropertyTypes.Add(dbo.TypeCode);
                    }
                    else // UUID is not loaded yet - see MakeSecondPass procedure
                    {
                        // TODO: get type code some how ...
                        property.Types.Add(new TypeInfo()
                        {
                            UUID = UUID
                        });
                        property.PropertyTypes.Add(int.MaxValue); // костыль !?
                    }
                }
            }
        }
コード例 #2
0
 public void MakeSecondPass(DatabaseInfo database)
 {
     foreach (var ns in database.BaseObjects)
     {
         foreach (var dbo in ns.MetaObjects)
         {
             foreach (var property in dbo.Properties)
             {
                 foreach (var type in property.Types)
                 {
                     if (type.TypeCode == 0)
                     {
                         if (type.MetaObject == null)
                         {
                             if (!string.IsNullOrEmpty(type.UUID))
                             {
                                 if (UUIDs.TryGetValue(type.UUID, out MetaObject dbObject))
                                 {
                                     type.Name       = dbObject.TableName;
                                     type.MetaObject = dbObject;
                                     type.TypeCode   = dbObject.TypeCode;
                                 }
                             }
                         }
                         else
                         {
                             type.Name     = type.MetaObject.TableName;
                             type.TypeCode = type.MetaObject.TypeCode;
                         }
                     }
                 }
             }
             foreach (var nested in dbo.MetaObjects)
             {
                 foreach (var property in nested.Properties)
                 {
                     foreach (var type in property.Types)
                     {
                         if (type.TypeCode == 0)
                         {
                             if (type.MetaObject == null)
                             {
                                 if (!string.IsNullOrEmpty(type.UUID))
                                 {
                                     if (UUIDs.TryGetValue(type.UUID, out MetaObject dbObject))
                                     {
                                         type.Name       = dbObject.TableName;
                                         type.MetaObject = dbObject;
                                         type.TypeCode   = dbObject.TypeCode;
                                     }
                                 }
                             }
                             else
                             {
                                 type.Name     = type.MetaObject.TableName;
                                 type.TypeCode = type.MetaObject.TypeCode;
                             }
                         }
                     }
                 }
             }
         }
     }
 }