Пример #1
0
        public static OneRabbit GetRabbit(MySqlConnection sql, int rid, RabAliveState type)
        {
            if (rid == 0)
            {
                return(null);
            }
            if (type == RabAliveState.ANY)
            {
                type = (isDeadRabbit(sql, rid) ? RabAliveState.DEAD : RabAliveState.ALIVE);
            }
            MySqlCommand    cmd = new MySqlCommand(String.Format(@"SELECT {0:s}
FROM {1:s} WHERE r_id={2:d};", getOneRabbit_FieldsSet(type), (type == RabAliveState.ALIVE ? "rabbits" : "dead"), rid), sql);
            MySqlDataReader rd  = cmd.ExecuteReader();

            if (!rd.Read())
            {
                rd.Close();
                return(null);
            }
            OneRabbit r = fillOneRabbit(rd);

            rd.Close();
            //r.youngers = GetYoungers(sql, rid);//todo убрать в RabNetEngRabbit
            //r.rabVacs = GetRabVacs(sql, rid);
            //if (r.ParentId == 0)
            //r.Neighbors = GetNeighbors(sql, rid);
            return(r);
        }
Пример #2
0
     private static string getOneRabbit_FieldsSet(RabAliveState type)
     {
         return(String.Format(@"r_id,
 r_sex, r_born, r_rate,
 r_flags, 
 Coalesce(r_name,0) AS r_name,
 Coalesce(r_surname,0) AS r_surname,
 Coalesce(r_secname,0) AS r_secname,
 Coalesce(r_mother,0) AS r_mother,
 Coalesce(r_father,0) AS r_father,
 {1:s}place(r_id) address, 
 r_group, 
 r_breed, 
 r_zone,
 r_notes,
 (SELECT COALESCE(GROUP_CONCAT(g_genom ORDER BY g_genom ASC SEPARATOR ' '),'') FROM genoms WHERE g_id=r_genesis) genom,
 r_status,
 r_last_fuck_okrol, {0:s},
 r_overall_babies,
 r_lost_babies,    
 {1:s}name(r_id,2) fullname,     
 (SELECT b_name FROM breeds WHERE b_id=r_breed) breedname,
 r_bon,    
 r_parent,
 r_okrol,
 r_birthplace,
 (SELECT w_weight FROM weights WHERE w_rabid=r_id AND w_date=(SELECT MAX(w_date) FROM weights WHERE w_rabid=r_id)) weight,
 (SELECT MAX(w_date) FROM weights WHERE w_rabid=r_id) weight_date",
                              (type == RabAliveState.ALIVE ? "r_event_date, r_event" : "NULL r_event_date, 'none' r_event"),
                              (type == RabAliveState.ALIVE ? "rab" : "dead"), (type == RabAliveState.ALIVE ? "rabbits" : "dead")));
     }
Пример #3
0
     internal static string getAdultRabbit_FieldsSet(RabAliveState type)
     {
         return(String.Format(@"r_id,
 {1:s}name(r_id,2) name,
 r_sex,
 r_born,
 (SELECT b_name FROM breeds WHERE b_id=r_breed) breed,
 r_group,
 r_rate,
 r_bon,
 {1:s}place(r_id) place,
 r_notes,
 r_flags,
 '-1' weight,
 r_status,
 {0:s},
 {2:s},
 {3:s},
 '' vaccines",
                              (type == RabAliveState.ALIVE ? "r_event_date" : "NULL r_event_date"),
                              (type == RabAliveState.ALIVE ? "rab" : "dead"),
                              (type == RabAliveState.ALIVE ? "(SELECT SUM(r2.r_group) FROM rabbits r2 WHERE r2.r_parent = rabbits.r_id) suckers" : "0 suckers"),
                              (type == RabAliveState.ALIVE ? "(SELECT AVG(TO_DAYS(NOW())-TO_DAYS(r2.r_born)) FROM rabbits r2 WHERE r2.r_parent = rabbits.r_id) aage" : "0 aage")));
     }
Пример #4
0
        /// <summary>
        /// Получает родословную кролика с заданным rabId
        /// </summary>
        /// <param name="rabId">ID кролика</param>
        /// <param name="con"></param>
        /// <param name="lineage">Стэк родословной для предотвращения рекурсии</param>
        /// <returns></returns>
        private static RabTreeData getRabbitGenTree(MySqlConnection con, int rabId, int birthplace, int nameId, Stack <int> lineage)//, int level)
        {
            if (rabId == 0)
            {
                return(null);
            }
            //проверка на рекурсию, которая могла возникнуть после конвертации из старой mia-файла
            if (lineage.Count > 700)
            {
                //_logger.Warn("cnt:" + lineage.Count.ToString() + " we have suspect infinity inheritance loop: " + String.Join(",", Array.ConvertAll<int, string>(lineage.ToArray(), new Converter<int, string>(convIntToString))));
                return(null);
            }
            lineage.Push(rabId);
            MySqlCommand    cmd    = new MySqlCommand("", con);
            MySqlDataReader rd     = null;
            RabAliveState   state  = RabAliveState.ALIVE;
            bool            inFarm = true;
            string          query  = @"SELECT
        r_id,
        {0:s} name,
        Coalesce(r_name,0) AS r_name,
        Coalesce(r_surname,0) AS r_surname,
        Coalesce(r_secname,0) AS r_secname,      
        Coalesce(r_mother, 0) AS r_mother,
        Coalesce(r_father, 0) AS r_father,
        r_bon,
        r_born,
        r_breed,
        b_short_name,
        TO_DAYS(NOW())-TO_DAYS(r_born) age,
        Coalesce(r_birthplace,0) birthplace
    FROM {1:s} 
        INNER JOIN breeds ON b_id = r_breed
    WHERE r_id={2:d} LIMIT 1;";

#if !DEMO
            if (birthplace != 0)  //если ищем импортированного кролика
            {
                List <OneImport> lst = Import.Search(con, new Filters(Filters.RAB_ID, rabId.ToString()));
                inFarm = lst.Count > 0;                                       ///если кролик не был импортирован в поголовье
                ///может возникнуть ситуация, что импортированный кролик имеет id родителя, который содержится и в import_ascendants и в imports
                if (inFarm && Import.AscendantExists(con, rabId, birthplace)) ///устранение неоднозначности
                {
                    inFarm = RabbitGetter.GetRabbit(con, rabId).NameID == nameId;
                }
            }
#endif

            if (inFarm)
            {
                cmd.CommandText = String.Format(query, "rabname(r_id,1)", "rabbits", rabId);
                rd = cmd.ExecuteReader();

                if (!rd.HasRows)
                {
                    rd.Close();
                    cmd.CommandText = String.Format(query, "deadname(r_id,1)", "dead", rabId);
                    rd    = cmd.ExecuteReader();
                    state = RabAliveState.DEAD;
                }
            }

            if (!inFarm)
            {
                cmd.CommandText = String.Format(query, String.Format("ascname(r_id,{0:d},1)", birthplace), "import_ascendants", rabId);
                rd    = cmd.ExecuteReader();
                state = RabAliveState.IMPORTED_ASCENDANT;
            }

            RabTreeData res = null;
            if (rd != null && rd.Read())
            {
                res = new RabTreeData(
                    rd.GetInt32("r_id"),
                    rd.GetString("name"),
                    rd.GetInt32("r_name"),
                    rd.GetDateTime("r_born"),
                    rd.GetInt32("r_breed")
                    );
                res.Bon            = Rabbit.GetFBon(rd.GetString("r_bon"), true);
                res.BreedShortName = rd.GetString("b_short_name");
                res.BirthPlace     = rd.GetInt32("birthplace");
                int mom     = rd.GetInt32("r_mother");
                int dad     = rd.GetInt32("r_father");
                int surname = rd.GetInt32("r_surname");
                int secname = rd.GetInt32("r_secname");
                rd.Close();

                res.State = state;
                RabTreeData m = getRabbitGenTree(con, mom, birthplace, surname, lineage);
                RabTreeData d = getRabbitGenTree(con, dad, birthplace, secname, lineage);
                if (m != null)
                {
                    res.Mother = m;
                }
                if (d != null)
                {
                    res.Father = d;
                }
            }
            rd.Close();
            return(res);
        }
Пример #5
0
 public OneRabbit GetRabbit(int rid, RabAliveState state)
 {
     return(RabbitGetter.GetRabbit(sql, rid, state));
 }