Exemple #1
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 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);
        }
Exemple #3
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);
        }
        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);
        }