// <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); }
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); }