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); }
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"))); }
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"))); }
/// <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); }
public OneRabbit GetRabbit(int rid, RabAliveState state) { return(RabbitGetter.GetRabbit(sql, rid, state)); }