Exemplo n.º 1
0
        internal StringBuilder AsEsql(StringBuilder builder, string blockAlias, int indentLevel)
        {
            StringUtil.IndentNewLine(builder, indentLevel + 1);
            builder.Append("RELATIONSHIP(");
            var fields = new List <string>();

            // If the variable is a relation end, we will gets it scope Extent, e.g., CPerson1 for the CPerson end of CPersonAddress1.
            builder.Append("CREATEREF(");
            CqlWriter.AppendEscapedQualifiedName(builder, m_toEndEntitySet.EntityContainer.Name, m_toEndEntitySet.Name);
            builder.Append(", ROW(");
            foreach (var memberPath in m_toEndEntityKeyMemberPaths)
            {
                var fullFieldAlias = CqlWriter.GetQualifiedName(blockAlias, memberPath.CqlFieldAlias);
                fields.Add(fullFieldAlias);
            }
            StringUtil.ToSeparatedString(builder, fields, ", ", null);
            builder.Append(')');
            builder.Append(",");
            CqlWriter.AppendEscapedTypeName(builder, m_toEndEntityType);
            builder.Append(')');

            builder.Append(',');
            CqlWriter.AppendEscapedTypeName(builder, m_associationSet.ElementType);
            builder.Append(',');
            CqlWriter.AppendEscapedName(builder, m_fromEnd.Name);
            builder.Append(',');
            CqlWriter.AppendEscapedName(builder, m_toEnd.Name);
            builder.Append(')');
            builder.Append(' ');
            return(builder);
        }
Exemplo n.º 2
0
        internal StringBuilder AsEsql(
            StringBuilder builder,
            string blockAlias,
            int indentLevel)
        {
            StringUtil.IndentNewLine(builder, indentLevel + 1);
            builder.Append("RELATIONSHIP(");
            List <string> stringList = new List <string>();

            builder.Append("CREATEREF(");
            CqlWriter.AppendEscapedQualifiedName(builder, this.m_toEndEntitySet.EntityContainer.Name, this.m_toEndEntitySet.Name);
            builder.Append(", ROW(");
            foreach (MemberPath entityKeyMemberPath in this.m_toEndEntityKeyMemberPaths)
            {
                string qualifiedName = CqlWriter.GetQualifiedName(blockAlias, entityKeyMemberPath.CqlFieldAlias);
                stringList.Add(qualifiedName);
            }
            StringUtil.ToSeparatedString(builder, (IEnumerable)stringList, ", ", (string)null);
            builder.Append(')');
            builder.Append(",");
            CqlWriter.AppendEscapedTypeName(builder, (EdmType)this.m_toEndEntityType);
            builder.Append(')');
            builder.Append(',');
            CqlWriter.AppendEscapedTypeName(builder, (EdmType)this.m_associationSet.ElementType);
            builder.Append(',');
            CqlWriter.AppendEscapedName(builder, this.m_fromEnd.Name);
            builder.Append(',');
            CqlWriter.AppendEscapedName(builder, this.m_toEnd.Name);
            builder.Append(')');
            builder.Append(' ');
            return(builder);
        }
Exemplo n.º 3
0
        // <summary>
        // Given a member path and an alias, returns an eSQL string correspondng to the fully-qualified name
        // <paramref
        //     name="blockAlias" />
        // .path, e.g., T1.Address.Phone.Zip.
        // If a subcomponent belongs to subclass, generates a treat for it, e.g. "TREAT(T1 as Customer).Address".
        // Or even "TREAT(TREAT(T1 AS Customer).Address as USAddress).Zip".
        // </summary>
        internal StringBuilder AsEsql(StringBuilder inputBuilder, string blockAlias)
        {
            // Due to the TREAT stuff, we cannot build incrementally.
            // So we use a local StringBuilder - it should not be that inefficient (one extra copy).
            var builder = new StringBuilder();

            // Add blockAlias as a starting point for blockAlias.member1.member2...
            CqlWriter.AppendEscapedName(builder, blockAlias);

            // Process all items in the path.
            AsCql(
                // accessMember action
                (memberName) =>
            {
                builder.Append('.');
                CqlWriter.AppendEscapedName(builder, memberName);
            },
                // getKey action
                () =>
            {
                builder.Insert(0, "Key(");
                builder.Append(")");
            },
                // treatAs action
                (treatAsType) =>
            {
                builder.Insert(0, "TREAT(");
                builder.Append(" AS ");
                CqlWriter.AppendEscapedTypeName(builder, treatAsType);
                builder.Append(')');
            });

            inputBuilder.Append(builder);
            return(inputBuilder);
        }
        internal override StringBuilder AsEsql(StringBuilder builder, string blockAlias, bool skipIsNotNull)
        {
            // Get e.g., T2._from1 using the table alias
            string qualifiedName = CqlWriter.GetQualifiedName(blockAlias, SlotName);

            builder.Append(qualifiedName);
            return(builder);
        }
Exemplo n.º 5
0
            internal override StringBuilder AsEsql(StringBuilder builder, MemberPath outputMember, string blockAlias)
            {
                DebugCheck.NotNull(outputMember.LeafEdmMember);
                var constType = Helper.GetModelTypeUsage(outputMember.LeafEdmMember).EdmType;

                builder.Append("CAST(NULL AS ");
                CqlWriter.AppendEscapedTypeName(builder, constType);
                builder.Append(')');
                return(builder);
            }
Exemplo n.º 6
0
            internal override StringBuilder AsEsql(StringBuilder builder, MemberPath outputMember, string blockAlias)
            {
                Debug.Assert(outputMember.LeafEdmMember != null, "Constant can't correspond to an empty member path.");
                EdmType constType = Helper.GetModelTypeUsage(outputMember.LeafEdmMember).EdmType;

                builder.Append("CAST(NULL AS ");
                CqlWriter.AppendEscapedTypeName(builder, constType);
                builder.Append(')');
                return(builder);
            }
        internal override StringBuilder AsEsql(
            StringBuilder builder,
            string blockAlias,
            bool skipIsNotNull)
        {
            string qualifiedName = CqlWriter.GetQualifiedName(blockAlias, this.SlotName);

            builder.Append(qualifiedName);
            return(builder);
        }
Exemplo n.º 8
0
        internal override StringBuilder AsEsql(StringBuilder builder, MemberPath outputMember, string blockAlias)
        {
            DebugCheck.NotNull(outputMember.LeafEdmMember);
            var modelTypeUsage = Helper.GetModelTypeUsage(outputMember.LeafEdmMember);
            var modelType      = modelTypeUsage.EdmType;

            // Some built-in constants
            if (BuiltInTypeKind.PrimitiveType
                == modelType.BuiltInTypeKind)
            {
                var primitiveTypeKind = ((PrimitiveType)modelType).PrimitiveTypeKind;
                if (primitiveTypeKind == PrimitiveTypeKind.Boolean)
                {
                    // This better be a boolean. Else we crash!
                    var val   = (bool)m_scalar;
                    var value = StringUtil.FormatInvariant("{0}", val);
                    builder.Append(value);
                    return(builder);
                }
                else if (primitiveTypeKind == PrimitiveTypeKind.String)
                {
                    bool isUnicode;
                    if (!TypeHelpers.TryGetIsUnicode(modelTypeUsage, out isUnicode))
                    {
                        // If can't determine - use the safest option, assume unicode.
                        isUnicode = true;
                    }

                    if (isUnicode)
                    {
                        builder.Append('N');
                    }

                    AppendEscapedScalar(builder);
                    return(builder);
                }
            }
            else if (BuiltInTypeKind.EnumType
                     == modelType.BuiltInTypeKind)
            {
                // Enumerated type - we should be able to cast it
                var enumMember = (EnumMember)m_scalar;

                builder.Append(enumMember.Name);
                return(builder);
            }

            // Need to cast
            builder.Append("CAST(");
            AppendEscapedScalar(builder);
            builder.Append(" AS ");
            CqlWriter.AppendEscapedTypeName(builder, modelType);
            builder.Append(')');
            return(builder);
        }
Exemplo n.º 9
0
        internal override StringBuilder AsUserString(StringBuilder builder, string blockAlias, bool skipIsNotNull)
        {
            // Add user readable string of the form "T.A IS a (Person OR .....)"

            if (Helper.IsRefType(RestrictedMemberSlot.MemberPath.EdmType))
            {
                builder.Append("Deref(");
                RestrictedMemberSlot.MemberPath.AsEsql(builder, blockAlias);
                builder.Append(')');
            }
            else
            {
                // non-reference type
                RestrictedMemberSlot.MemberPath.AsEsql(builder, blockAlias);
            }

            if (Domain.Count > 1)
            {
                builder.Append(" is a (");
            }
            else
            {
                builder.Append(" is type ");
            }

            bool isFirst = true;

            foreach (Constant constant in Domain.Values)
            {
                TypeConstant typeConstant = constant as TypeConstant;
                Debug.Assert(typeConstant != null || constant.IsNull(), "Constants for type checks must be type constants or NULLs");

                if (isFirst == false)
                {
                    builder.Append(" OR ");
                }

                if (constant.IsNull())
                {
                    builder.Append(" NULL");
                }
                else
                {
                    CqlWriter.AppendEscapedTypeName(builder, typeConstant.EdmType);
                }

                isFirst = false;
            }

            if (Domain.Count > 1)
            {
                builder.Append(')');
            }
            return(builder);
        }
Exemplo n.º 10
0
        internal override StringBuilder AsEsql(StringBuilder builder, string blockAlias, bool skipIsNotNull)
        {
            // Add Cql of the form "(T.A IS OF (ONLY Person) OR .....)"

            // Important to enclose all the OR statements in parens.
            if (this.Domain.Count > 1)
            {
                builder.Append('(');
            }

            bool isFirst = true;

            foreach (Constant constant in this.Domain.Values)
            {
                TypeConstant typeConstant = constant as TypeConstant;
                Debug.Assert(typeConstant != null || constant.IsNull(), "Constants for type checks must be type constants or NULLs");

                if (isFirst == false)
                {
                    builder.Append(" OR ");
                }
                isFirst = false;
                if (Helper.IsRefType(this.RestrictedMemberSlot.MemberPath.EdmType))
                {
                    builder.Append("Deref(");
                    this.RestrictedMemberSlot.MemberPath.AsEsql(builder, blockAlias);
                    builder.Append(')');
                }
                else
                {
                    // non-reference type
                    this.RestrictedMemberSlot.MemberPath.AsEsql(builder, blockAlias);
                }
                if (constant.IsNull())
                {
                    builder.Append(" IS NULL");
                }
                else
                {
                    // type constant
                    builder.Append(" IS OF (ONLY ");
                    CqlWriter.AppendEscapedTypeName(builder, typeConstant.EdmType);
                    builder.Append(')');
                }
            }

            if (Domain.Count > 1)
            {
                builder.Append(')');
            }

            return(builder);
        }
Exemplo n.º 11
0
        internal override StringBuilder AsUserString(
            StringBuilder builder,
            string blockAlias,
            bool skipIsNotNull)
        {
            if (Helper.IsRefType((GlobalItem)this.RestrictedMemberSlot.MemberPath.EdmType))
            {
                builder.Append("Deref(");
                this.RestrictedMemberSlot.MemberPath.AsEsql(builder, blockAlias);
                builder.Append(')');
            }
            else
            {
                this.RestrictedMemberSlot.MemberPath.AsEsql(builder, blockAlias);
            }
            if (this.Domain.Count > 1)
            {
                builder.Append(" is a (");
            }
            else
            {
                builder.Append(" is type ");
            }
            bool flag = true;

            foreach (Constant constant in this.Domain.Values)
            {
                TypeConstant typeConstant = constant as TypeConstant;
                if (!flag)
                {
                    builder.Append(" OR ");
                }
                if (constant.IsNull())
                {
                    builder.Append(" NULL");
                }
                else
                {
                    CqlWriter.AppendEscapedTypeName(builder, typeConstant.EdmType);
                }
                flag = false;
            }
            if (this.Domain.Count > 1)
            {
                builder.Append(')');
            }
            return(builder);
        }
Exemplo n.º 12
0
        internal override StringBuilder AsEsql(StringBuilder builder, MemberPath outputMember, string blockAlias)
        {
            AsCql(
                // createRef action
                (refScopeEntitySet, keyMemberOutputPaths) =>
            {
                // Construct a scoped reference: CreateRef(CPerson1Set, NewRow(pid1, pid2), CPerson1)
                EntityType refEntityType = (EntityType)(((RefType)outputMember.EdmType).ElementType);
                builder.Append("CreateRef(");
                CqlWriter.AppendEscapedQualifiedName(builder, refScopeEntitySet.EntityContainer.Name, refScopeEntitySet.Name);
                builder.Append(", row(");
                for (int i = 0; i < keyMemberOutputPaths.Count; ++i)
                {
                    if (i > 0)
                    {
                        builder.Append(", ");
                    }
                    // Given the member, we need its aliased name
                    string fullFieldAlias = CqlWriter.GetQualifiedName(blockAlias, keyMemberOutputPaths[i].CqlFieldAlias);
                    builder.Append(fullFieldAlias);
                }
                builder.Append("), ");
                CqlWriter.AppendEscapedTypeName(builder, refEntityType);
                builder.Append(')');
            },
                // createType action
                (membersOutputPaths) =>
            {
                // Construct an entity/complex/Association type in the Members order for fields: CPerson(CPerson1_Pid, CPerson1_Name)
                CqlWriter.AppendEscapedTypeName(builder, m_edmType);
                builder.Append('(');
                for (int i = 0; i < membersOutputPaths.Count; ++i)
                {
                    if (i > 0)
                    {
                        builder.Append(", ");
                    }
                    // Given the member, we need its aliased name: CPerson1_Pid
                    string fullFieldAlias = CqlWriter.GetQualifiedName(blockAlias, membersOutputPaths[i].CqlFieldAlias);
                    builder.Append(fullFieldAlias);
                }
                builder.Append(')');
            },
                outputMember);

            return(builder);
        }
Exemplo n.º 13
0
        internal override StringBuilder AsEsql(StringBuilder builder, MemberPath outputMember, string blockAlias, int indentLevel)
        {
            TypeUsage outputMemberStoreTypeUsage;

            if (NeedToCastCqlValue(outputMember, out outputMemberStoreTypeUsage))
            {
                builder.Append("CAST(");
                m_memberPath.AsEsql(builder, blockAlias);
                builder.Append(" AS ");
                CqlWriter.AppendEscapedTypeName(builder, outputMemberStoreTypeUsage.EdmType);
                builder.Append(')');
            }
            else
            {
                m_memberPath.AsEsql(builder, blockAlias);
            }
            return(builder);
        }
Exemplo n.º 14
0
        internal override StringBuilder AsEsql(
            StringBuilder builder,
            MemberPath outputMember,
            string blockAlias)
        {
            TypeUsage modelTypeUsage = Helper.GetModelTypeUsage(outputMember.LeafEdmMember);
            EdmType   edmType        = modelTypeUsage.EdmType;

            if (BuiltInTypeKind.PrimitiveType == edmType.BuiltInTypeKind)
            {
                switch (((PrimitiveType)edmType).PrimitiveTypeKind)
                {
                case PrimitiveTypeKind.Boolean:
                    string str = StringUtil.FormatInvariant("{0}", (object)(bool)this.m_scalar);
                    builder.Append(str);
                    return(builder);

                case PrimitiveTypeKind.String:
                    bool isUnicode;
                    if (!TypeHelpers.TryGetIsUnicode(modelTypeUsage, out isUnicode))
                    {
                        isUnicode = true;
                    }
                    if (isUnicode)
                    {
                        builder.Append('N');
                    }
                    this.AppendEscapedScalar(builder);
                    return(builder);
                }
            }
            else if (BuiltInTypeKind.EnumType == edmType.BuiltInTypeKind)
            {
                EnumMember scalar = (EnumMember)this.m_scalar;
                builder.Append(scalar.Name);
                return(builder);
            }
            builder.Append("CAST(");
            this.AppendEscapedScalar(builder);
            builder.Append(" AS ");
            CqlWriter.AppendEscapedTypeName(builder, edmType);
            builder.Append(')');
            return(builder);
        }
Exemplo n.º 15
0
        internal string ToESqlString()
        {
            StringBuilder builder = new StringBuilder();

            builder.Append("\n\tSELECT ");

            if (m_selectDistinct == SelectDistinct.Yes)
            {
                builder.Append("DISTINCT ");
            }

            foreach (ProjectedSlot ps in m_projectedSlots)
            {
                MemberProjectedSlot jtn = ps as MemberProjectedSlot;
                StructuralType      st  = jtn.MemberPath.LeafEdmMember.DeclaringType;
                StringBuilder       sb  = new StringBuilder();
                jtn.MemberPath.AsEsql(sb, "e");
                builder.AppendFormat("{0}, ", sb.ToString());
            }
            //remove the extra-comma after the last slot
            builder.Remove(builder.Length - 2, 2);

            builder.Append("\n\tFROM ");
            EntitySetBase extent = m_extentMemberPath.Extent;

            CqlWriter.AppendEscapedQualifiedName(builder, extent.EntityContainer.Name, extent.Name);
            builder.Append(" AS e");

            if (m_whereClause.IsTrue == false)
            {
                builder.Append("\n\tWHERE ");

                StringBuilder qbuilder = new StringBuilder();
                m_whereClause.AsEsql(qbuilder, "e");

                builder.Append(qbuilder.ToString());
            }
            builder.Append("\n    ");

            return(builder.ToString());
        }
Exemplo n.º 16
0
 internal override StringBuilder AsEsql(
     StringBuilder builder,
     MemberPath outputMember,
     string blockAlias)
 {
     this.AsCql((Action <EntitySet, IList <MemberPath> >)((refScopeEntitySet, keyMemberOutputPaths) =>
     {
         EntityType elementType = (EntityType)((RefType)outputMember.EdmType).ElementType;
         builder.Append("CreateRef(");
         CqlWriter.AppendEscapedQualifiedName(builder, refScopeEntitySet.EntityContainer.Name, refScopeEntitySet.Name);
         builder.Append(", row(");
         for (int index = 0; index < keyMemberOutputPaths.Count; ++index)
         {
             if (index > 0)
             {
                 builder.Append(", ");
             }
             builder.Append(CqlWriter.GetQualifiedName(blockAlias, keyMemberOutputPaths[index].CqlFieldAlias));
         }
         builder.Append("), ");
         CqlWriter.AppendEscapedTypeName(builder, (EdmType)elementType);
         builder.Append(')');
     }), (Action <IList <MemberPath> >)(membersOutputPaths =>
     {
         CqlWriter.AppendEscapedTypeName(builder, this.m_edmType);
         builder.Append('(');
         for (int index = 0; index < membersOutputPaths.Count; ++index)
         {
             if (index > 0)
             {
                 builder.Append(", ");
             }
             builder.Append(CqlWriter.GetQualifiedName(blockAlias, membersOutputPaths[index].CqlFieldAlias));
         }
         builder.Append(')');
     }), outputMember);
     return(builder);
 }
        internal StringBuilder AsEsql(StringBuilder inputBuilder, string blockAlias)
        {
            StringBuilder builder = new StringBuilder();

            CqlWriter.AppendEscapedName(builder, blockAlias);
            this.AsCql((Action <string>)(memberName =>
            {
                builder.Append('.');
                CqlWriter.AppendEscapedName(builder, memberName);
            }), (Action)(() =>
            {
                builder.Insert(0, "Key(");
                builder.Append(")");
            }), (Action <StructuralType>)(treatAsType =>
            {
                builder.Insert(0, "TREAT(");
                builder.Append(" AS ");
                CqlWriter.AppendEscapedTypeName(builder, (EdmType)treatAsType);
                builder.Append(')');
            }));
            inputBuilder.Append((object)builder);
            return(inputBuilder);
        }