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)));
        }
Example #2
0
        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);
        }
Example #5
0
        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);
        }