Example #1
0
        private IDictionary <string, object>[] GetLinkedBeanRowsEx(string kind, LinkScenario ls)
        {
            // SELECT * is not an option here, because one Primary Key column is
            // not delivered. So the projection has to be put together "manually"
            // and checked if all Primary keys included.

            var beanProjection = string.Join(", ",
                                             Api.GetKindColumns(kind).Select(c => $"bean.{c} AS bean_{c}"));

            if (!beanProjection.Contains($"bean.{ls.LinkedKindPkName}"))
            {
                beanProjection = $"bean.{ls.LinkedKindPkName} AS bean_{ls.LinkedKindPkName}, " + beanProjection;
            }

            var linkProjection = string.Join(", ",
                                             Api.GetKindColumns(ls.LinkKind).Select(c => $"link.{c} AS link_{c}"));

            if (!linkProjection.Contains($"link.{ls.LinkKindPkName}"))
            {
                linkProjection = $"link.{ls.LinkKindPkName} AS link_{ls.LinkKindPkName}, " + linkProjection;
            }

            return(Api.Rows(true,
                            CreateLinkQuery($"{beanProjection}, {linkProjection}", ls), ls.LinkingKindPkValue));
        }
Example #2
0
        internal LinkScenario GetLinkScenario(string linkedKind)
        {
            var ls = new LinkScenario()
            {
                // referencing Bean (m Bean)
                LinkingKind = GetKind(),

                // referenced Bean (n Bean)
                LinkedKind = linkedKind
            };

            // linking Bean (m:n Bean)
            ls.LinkKind = Api.GetLinkName(ls.LinkingKind, ls.LinkedKind);

            if (ls.LinkedKind == string.Empty)
            {
                return(ls);
            }

            // referencing Bean (m Bean)
            ls.LinkingKindPkValue = GetKeyValue();
            ls.LinkingKindFkName  = GetFkName(ls.LinkingKind);

            // referenced Bean (n Bean)
            ls.LinkedKindPkName = Api.GetKeyName(ls.LinkedKind);
            ls.LinkedKindFkName = GetFkName(ls.LinkedKind);

            // linking Bean (m:n Bean)
            ls.LinkKindPkName = Api.GetKeyName(ls.LinkKind);

            return(ls);
        }
Example #3
0
 private string CreateLinkQuery(string projection, LinkScenario ls)
 {
     return
         ("SELECT \r\n" +
          $"    {projection} \r\n" +
          "FROM \r\n" +
          $"   {Api.GetQuoted(ls.LinkKind)} link \r\n" +
          $"   JOIN {Api.GetQuoted(ls.LinkedKind)} bean ON (bean.id = link.{Api.GetQuoted(ls.LinkedKindFkName)}) \r\n" +
          "WHERE \r\n" +
          $"    link.{Api.GetQuoted(ls.LinkingKindFkName)} = " + "{0}");
 }