static SystemClass MakeSystem(DbDataReader reader, ulong nid) { EliteNameClassifier ec = new EliteNameClassifier(nid); ec.SectorName = reader.GetString(4); return(new SystemClass(ec.ToString(), reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt64(3), reader.GetInt32(5))); }
static SystemClass MakeSystem(DbDataReader reader, bool eddbinfo = true) { EliteNameClassifier ec = new EliteNameClassifier((ulong)reader.GetInt64(6)); ec.SectorName = reader.GetString(4); if (ec.IsNamed) { ec.StarName = reader.GetString(7); } const int offset = 8; if (!eddbinfo || reader[offset] is System.DBNull) { return(new SystemClass(ec.ToString(), reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt64(3), reader.GetInt32(5))); } else { return(new SystemClass(ec.ToString(), reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt64(3), reader.GetInt64(offset), reader.GetInt32(offset + 1), reader.GetInt64(offset + 2), reader.GetString(offset + 3), (EDGovernment)reader.GetInt64(offset + 4), (EDAllegiance)reader.GetInt64(offset + 5), (EDState)reader.GetInt64(offset + 6), (EDSecurity)reader.GetInt64(offset + 7), (EDEconomy)reader.GetInt64(offset + offset), reader.GetString(offset + 9), reader.GetString(offset + 10), reader.GetInt32(offset + 11), reader.GetInt32(5), SystemStatusEnum.EDSM)); } }
static SystemClass MakeSystem(DbDataReader reader) { EliteNameClassifier ec = new EliteNameClassifier((ulong)reader.GetInt64(6)); ec.SectorName = reader.GetString(4); if (ec.IsNamed) { ec.StarName = reader.GetString(7); } return(new SystemClass(ec.ToString(), reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt64(3), reader.GetInt32(5))); }
internal static ISystem FindStar(string name, SQLiteConnectionSystem cn) { EliteNameClassifier ec = new EliteNameClassifier(name); if (ec.IsNamed) { // needs index on sectorid [nameid]. Relies on Names.id being the edsmid. using (DbCommand selectSysCmd = cn.CreateSelect("Systems s", MakeSystemQueryNamed, "s.edsmid IN (Select id FROM Names WHERE name=@p1) AND s.sectorid IN (Select id FROM Sectors c WHERE c.name=@p2)", new Object[] { ec.StarName, ec.SectorName }, joinlist: MakeSystemQueryNamedJoinList)) { //System.Diagnostics.Debug.WriteLine( cn.ExplainQueryPlanString(selectSysCmd)); using (DbDataReader reader = selectSysCmd.ExecuteReader()) { if (reader.Read()) { return(MakeSystem(reader)); // read back and make name from db info due to case problems. } } } } else { // Numeric or Standard - all data in ID // needs index on Systems(sectorid, Nameid) using (DbCommand selectSysCmd = cn.CreateSelect("Systems s", MakeSysStdNumericQuery, "s.nameid = @p1 AND s.sectorid IN (Select id FROM Sectors c WHERE c.name=@p2)", new Object[] { ec.ID, ec.SectorName }, joinlist: MakeSysStdNumericQueryJoinList)) { // System.Diagnostics.Debug.WriteLine( cn.ExplainQueryPlanString(selectSysCmd)); using (DbDataReader reader = selectSysCmd.ExecuteReader()) { if (reader.Read()) { return(MakeSystem(reader, ec.ID)); // read back .. sector name is taken from DB for case reasons } } } } return(null); }
static SystemClass MakeSystem(DbDataReader reader, ulong nid, bool eddb = true) { const int offset = 6; EliteNameClassifier ec = new EliteNameClassifier(nid); ec.SectorName = reader.GetString(4); if (!eddb || reader[offset] is System.DBNull) { return(new SystemClass(ec.ToString(), reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt64(3), reader.GetInt32(5))); } else { return(new SystemClass(SystemSource.FromEDSM, ec.ToString(), reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2), reader.GetInt64(3), reader.GetInt64(offset), reader.GetInt32(offset + 1), reader.GetInt64(offset + 2), reader.GetString(offset + 3), (EDGovernment)reader.GetInt64(offset + 4), (EDAllegiance)reader.GetInt64(offset + 5), (EDState)reader.GetInt64(offset + 6), (EDSecurity)reader.GetInt64(offset + 7), (EDEconomy)reader.GetInt64(offset + offset), reader.GetString(offset + 9), reader.GetString(offset + 10), reader.GetInt32(offset + 11), reader.GetInt32(5))); } }
internal static List <ISystem> FindStarWildcard(string name, SQLiteConnectionSystem cn, int limit = int.MaxValue) { EliteNameClassifier ec = new EliteNameClassifier(name); List <ISystem> ret = new List <ISystem>(); if (ec.IsStandardParts) // normal Euk PRoc qc-l d2-3 { // needs index on Systems(sectorid, Nameid) using (DbCommand selectSysCmd = cn.CreateSelect("Systems s", MakeSystemQueryNamed, "s.nameid >= @p1 AND s.nameid <= @p2 AND s.sectorid IN (Select id FROM Sectors c WHERE c.name=@p3)", new Object[] { ec.ID, ec.IDHigh, ec.SectorName }, limit: limit, joinlist: MakeSystemQueryNamedJoinList)) { //System.Diagnostics.Debug.WriteLine( cn.ExplainQueryPlanString(selectSysCmd)); using (DbDataReader reader = selectSysCmd.ExecuteReader()) { while (reader.Read()) { SystemClass sc = MakeSystem(reader); ret.Add(sc); } } } } else if (ec.IsNumeric) // HIP 29282 { // checked select *,s.nameid & 0x3fffffffff , cast((s.nameid & 0x3fffffffff) as text) From Systems s where (s.nameid & (1<<46)!=0) and s.sectorid=15568 USNO entries // beware, 1<<46 works, 0x40 0000 0000 does not.. // needs index on Systems(sectorid, Nameid) using (DbCommand selectSysCmd = cn.CreateSelect("Systems s", MakeSystemQueryNamed, "(s.nameid & (1<<46) != 0) AND cast((s.nameid & 0x3fffffffff) as text) LIKE @p1 AND s.sectorid IN (Select id FROM Sectors c WHERE c.name=@p2)", new Object[] { ec.NameIdNumeric.ToStringInvariant() + "%", ec.SectorName }, limit: limit, joinlist: MakeSystemQueryNamedJoinList)) { //System.Diagnostics.Debug.WriteLine( cn.ExplainQueryPlanString(selectSysCmd)); using (DbDataReader reader = selectSysCmd.ExecuteReader()) { while (reader.Read()) { SystemClass sc = MakeSystem(reader); ret.Add(sc); } } } } else { // named if (ec.StarName.Length > 0) // if we have a starname component and a sector name, look up sectorname + starname% { // needs index on Systems(sectorid, Nameid) using (DbCommand selectSysCmd = cn.CreateSelect("Systems s", MakeSystemQueryNamed, "s.nameid IN (Select id FROM Names WHERE name LIKE @p1) AND s.sectorid IN (Select id FROM Sectors c WHERE c.name=@p2)", new Object[] { ec.StarName + "%", ec.SectorName }, limit: limit, joinlist: MakeSystemQueryNamedJoinList)) { //System.Diagnostics.Debug.WriteLine(cn.ExplainQueryPlanString(selectSysCmd)); using (DbDataReader reader = selectSysCmd.ExecuteReader()) { while (reader.Read()) { SystemClass sc = MakeSystem(reader); ret.Add(sc); } limit -= ret.Count; } } } // look up Sector. Use sectorname, unless it NoSectorName in which case use the starname as a presumed sector name // needs index on Systems(sectorid, [Nameid]) if (limit > 0) { using (DbCommand selectSysCmd = cn.CreateSelect("Systems s", MakeSystemQueryNamed, "s.sectorid IN (Select id FROM Sectors c WHERE c.name LIKE @p1)", new Object[] { (ec.SectorName != EliteNameClassifier.NoSectorName ? ec.SectorName : ec.StarName) + "%" }, limit: limit, joinlist: MakeSystemQueryNamedJoinList)) { // System.Diagnostics.Debug.WriteLine(cn.ExplainQueryPlanString(selectSysCmd)); using (DbDataReader reader = selectSysCmd.ExecuteReader()) { while (reader.Read()) { SystemClass sc = MakeSystem(reader); ret.Add(sc); } } } } } return(ret); }