Пример #1
0
 private void BuildSelectSQL(IPropertiesMapping mapper, StringBuilder sb, DbManager db)
 {
     foreach (IMapper mapField in mapper.PropertiesMapping)
     {
         if (mapField is ValueMapper)
         {
             sb.AppendFormat("\t{0}.{1},\n", ((IObjectMapper)mapper).PropertyType.Name,
                             db.DataProvider.Convert(((ValueMapper)mapField).ColumnName, ConvertType.NameToQueryField));
         }
         else if (mapField is IPropertiesMapping)
         {
             var propertiesMapping = (IPropertiesMapping)mapField;
             var cel = propertiesMapping.ParentMapping;
             while (cel != null)
             {
                 // To avoid recursion dont take in account types already loaded.
                 if (((IMapper)cel).PropertyType == mapField.PropertyType)
                 {
                     continue;
                 }
                 cel = cel.ParentMapping;
             }
             var objectMapper = (IObjectMapper)mapField;
             if (!objectMapper.IsLazy)
             {
                 BuildSelectSQL(propertiesMapping, sb, db);
             }
         }
         else
         {
             throw new NotImplementedException(mapField.GetType() + " is not yet implemented.");
         }
     }
 }
Пример #2
0
        protected void AppendJoinTableName(IPropertiesMapping mapper, StringBuilder sb, DbManager db, Type type, string tableName = "T")
        {
            string parentName = FullGetTableName(type);
            Dictionary<string, ValueMapper> valueMappers = mapper.PropertiesMapping.Where(e => e is ValueMapper).Cast<ValueMapper>().ToDictionary(e => e.PropertyName, e => e);

            int tableNr = 0;

            foreach (IMapper mapField in mapper.PropertiesMapping)
            {
                var objectMapper = mapField as IObjectMapper;
                if (objectMapper != null)
                {
                    if (!_ignoreLazyLoad)
                    {
                        if (objectMapper.IsLazy)
                            continue;
                    }

                    string thisKey = objectMapper.Association.ThisKey[0];

                    // TITLE
                    string parentDbField = valueMappers.ContainsKey(thisKey) ? valueMappers[thisKey].ColumnName : thisKey;

                    // ARTIST
                    string childDbField = objectMapper.PropertiesMapping.Where(e => e is ValueMapper).Cast<ValueMapper>().First(
                        e => e.PropertyName == objectMapper.Association.OtherKey[0]).ColumnName;

                    string childDatabase = GetDatabaseName(mapField.PropertyType);
                    string childOwner = base.GetOwnerName(mapField.PropertyType);
                    string childName = base.GetTableName(mapField.PropertyType);
                    string childAlias = FullGetTableName(mapField.PropertyType);

                    StringBuilder childFullName = db.DataProvider.CreateSqlProvider().BuildTableName(
                        new StringBuilder(),
                        childDatabase == null
                            ? null
                            : db.DataProvider.Convert(childDatabase, ConvertType.NameToDatabase).ToString(),
                        childOwner == null
                            ? null
                            : db.DataProvider.Convert(childOwner, ConvertType.NameToOwner).ToString(),
                        childName == null
                            ? null
                            : db.DataProvider.Convert(childName, ConvertType.NameToQueryTable).ToString());

                    sb.AppendFormat("\tFULL OUTER JOIN {0} {1} ON {2}.{3}={4}.{5}\n",
                                    childFullName,
                                    tableName + tableNr.ToString() /*childAlias*/,
                                    tableName /*parentName*/,
                                    parentDbField,
                                    tableName + tableNr.ToString() /*childAlias*/,
                                    childDbField
                        );
                    
                    AppendJoinTableName((IPropertiesMapping)mapField, sb, db, mapField.PropertyType, tableName + tableNr.ToString());
                    
                    tableNr++;
                }
            }

            sb.AppendLine();

            //SELECT
            //    ARTIST2.ID_ARTIST,
            //    ARTIST2.ARTIST,
            //    TRACK.ID_TRACK,
            //    TRACK.TRACK,
            //    TRACK.ID_ARTIST,
            //    ARTIST.ID_ARTIST,
            //    ARTIST.ARTIST
            //FROM
            //    PITAFR01.ARTIST ARTIST2
            //    INNER JOIN PITAFR01.TRACK TRACK ON ARTIST2.ID_ARTIST=TRACK.ID_ARTIST
            //    INNER JOIN PITAFR01.ARTIST ARTIST ON TRACK.ID_ARTIST=ARTIST.ID_ARTIST
            //WHERE
            //    ARTIST2.ID_ARTIST = 2566
        }
Пример #3
0
        private void AppendJoinTableName(IPropertiesMapping mapper, StringBuilder sb, DbManager db, Type type, string tableName = "T")
        {
            string parentName = FullGetTableName(type);
            Dictionary <string, ValueMapper> valueMappers = mapper.PropertiesMapping.Where(e => e is ValueMapper).Cast <ValueMapper>().ToDictionary(e => e.PropertyName, e => e);

            int tableNr = 0;

            foreach (IMapper mapField in mapper.PropertiesMapping)
            {
                var objectMapper = mapField as IObjectMapper;
                if (objectMapper != null)
                {
                    if (!_ignoreLazyLoad)
                    {
                        if (objectMapper.IsLazy)
                        {
                            continue;
                        }
                    }

                    string thisKey = objectMapper.Association.ThisKey[0];

                    // TITLE
                    string parentDbField = valueMappers.ContainsKey(thisKey) ? valueMappers[thisKey].ColumnName : thisKey;

                    // ARTIST
                    string childDbField = objectMapper.PropertiesMapping.Where(e => e is ValueMapper).Cast <ValueMapper>().First(
                        e => e.PropertyName == objectMapper.Association.OtherKey[0]).ColumnName;

                    string childDatabase = GetDatabaseName(mapField.PropertyType);
                    string childOwner    = base.GetOwnerName(mapField.PropertyType);
                    string childName     = base.GetTableName(mapField.PropertyType);
                    string childAlias    = FullGetTableName(mapField.PropertyType);

                    StringBuilder childFullName = db.DataProvider.CreateSqlProvider().BuildTableName(
                        new StringBuilder(),
                        childDatabase == null
                            ? null
                            : db.DataProvider.Convert(childDatabase, ConvertType.NameToDatabase).ToString(),
                        childOwner == null
                            ? null
                            : db.DataProvider.Convert(childOwner, ConvertType.NameToOwner).ToString(),
                        childName == null
                            ? null
                            : db.DataProvider.Convert(childName, ConvertType.NameToQueryTable).ToString());

                    sb.AppendFormat("\tFULL OUTER JOIN {0} {1} ON {2}.{3}={4}.{5}\n",
                                    childFullName,
                                    tableName + tableNr.ToString() /*childAlias*/,
                                    tableName /*parentName*/,
                                    parentDbField,
                                    tableName + tableNr.ToString() /*childAlias*/,
                                    childDbField
                                    );

                    AppendJoinTableName((IPropertiesMapping)mapField, sb, db, mapField.PropertyType, tableName + tableNr.ToString());

                    tableNr++;
                }
            }

            sb.AppendLine();

            //SELECT
            //    ARTIST2.ID_ARTIST,
            //    ARTIST2.ARTIST,
            //    TRACK.ID_TRACK,
            //    TRACK.TRACK,
            //    TRACK.ID_ARTIST,
            //    ARTIST.ID_ARTIST,
            //    ARTIST.ARTIST
            //FROM
            //    PITAFR01.ARTIST ARTIST2
            //    INNER JOIN PITAFR01.TRACK TRACK ON ARTIST2.ID_ARTIST=TRACK.ID_ARTIST
            //    INNER JOIN PITAFR01.ARTIST ARTIST ON TRACK.ID_ARTIST=ARTIST.ID_ARTIST
            //WHERE
            //    ARTIST2.ID_ARTIST = 2566
        }
Пример #4
0
 private void BuildSelectSQL(IPropertiesMapping mapper, StringBuilder sb, DbManager db)
 {
     foreach (IMapper mapField in mapper.PropertiesMapping)
     {
         if (mapField is ValueMapper)
             sb.AppendFormat("\t{0}.{1},\n", ((IObjectMapper)mapper).PropertyType.Name,
                             db.DataProvider.Convert(((ValueMapper)mapField).ColumnName, ConvertType.NameToQueryField));
         else if (mapField is IPropertiesMapping)
         {
             var propertiesMapping = (IPropertiesMapping)mapField;
             var cel = propertiesMapping.ParentMapping;
             while (cel != null)
             {
                 // To avoid recursion dont take in account types already loaded.
                 if (((IMapper)cel).PropertyType == mapField.PropertyType)
                     continue;
                 cel = cel.ParentMapping;
             }
             var objectMapper = (IObjectMapper)mapField;
             if (!objectMapper.IsLazy)
                 BuildSelectSQL(propertiesMapping, sb, db);
         }
         else
             throw new NotImplementedException(mapField.GetType() + " is not yet implemented.");
     }
 }