Exemple #1
0
        public SqlExpression BuildProjection(SqlExpression item, MetaType rowType, bool allowDeferred, SqlLink link, Expression source)
        {
            if (!rowType.HasInheritance)
            {
                return(BuildProjectionInternal(item, rowType, (rowType.Table != null) ? rowType.PersistentDataMembers : rowType.DataMembers, allowDeferred, link, source));
            }
            var             list            = new List <MetaType>(rowType.InheritanceTypes);
            var             list2           = new List <SqlTypeCaseWhen>();
            SqlTypeCaseWhen when            = null;
            MetaType        inheritanceRoot = rowType.InheritanceRoot;
            MetaDataMember  discriminator   = inheritanceRoot.Discriminator;
            Type            type            = discriminator.Type;
            SqlMember       member2         = sql.Member(item, discriminator.Member);

            foreach (MetaType type3 in list)
            {
                if (type3.HasInheritanceCode)
                {
                    SqlNew typeBinding = BuildProjectionInternal(item, type3, type3.PersistentDataMembers, allowDeferred, link, source);
                    if (type3.IsInheritanceDefault)
                    {
                        when = new SqlTypeCaseWhen(null, typeBinding);
                    }
                    object        obj2  = InheritanceRules.InheritanceCodeForClientCompare(type3.InheritanceCode, member2.SqlType);
                    SqlExpression match = sql.Value(type, sql.Default(discriminator), obj2, true, source);
                    list2.Add(new SqlTypeCaseWhen(match, typeBinding));
                }
            }
            if (when == null)
            {
                throw Error.EmptyCaseNotSupported();
            }
            list2.Add(when);
            return(sql.TypeCase(inheritanceRoot.Type, inheritanceRoot, member2, list2.ToArray(), source));
        }
Exemple #2
0
        private int BuildFieldDeclarations(MetaType type, IDictionary <object, string> memberNameToMappedName,
                                           StringBuilder sb)
        {
            int num = 0;

            foreach (MetaDataMember member in type.DataMembers)
            {
                string str;
                if ((!member.IsDeclaredBy(type) || member.IsAssociation) || !member.IsPersistent)
                {
                    continue;
                }
                object key = InheritanceRules.DistinguishedMemberName(member.Member);
                if (memberNameToMappedName.TryGetValue(key, out str))
                {
                    if (str != member.MappedName)
                    {
                        goto Label_0075;
                    }
                    continue;
                }
                memberNameToMappedName.Add(key, member.MappedName);
Label_0075:
                if (sb.Length > 0)
                {
                    sb.Append(", ");
                }
                sb.AppendLine();
                sb.Append(string.Format(CultureInfo.InvariantCulture, "  {0} ",
                                        new object[] { SqlIdentifier.QuoteCompoundIdentifier(member.MappedName) }));
                if (!string.IsNullOrEmpty(member.Expression))
                {
                    sb.Append("AS " + member.Expression);
                }
                else
                {
                    sb.Append(GetDbType(member));
                }
                num++;
            }
            return(num);
        }