Exemple #1
0
        public static async Task <IEnumerable <ITaxon> > GetSubtaxaAsync(this SQLiteDatabase database, ITaxon taxon)
        {
            List <ITaxon> result = new List <ITaxon>();

            string tableName        = GetTableNameForRank(taxon.GetChildRank());
            string parentColumnName = GetFieldNameForRank(taxon.GetRank());

            if (string.IsNullOrEmpty(tableName) || string.IsNullOrEmpty(parentColumnName) || !taxon.Id.HasValue)
            {
                return(Enumerable.Empty <ITaxon>());
            }

            string query = "SELECT * FROM {0} WHERE {1} = $parent_id";

            using (SQLiteCommand cmd = new SQLiteCommand(string.Format(query, tableName, parentColumnName))) {
                cmd.Parameters.AddWithValue("$parent_id", taxon.Id);

                foreach (DataRow row in await database.GetRowsAsync(cmd))
                {
                    result.Add(await database.CreateTaxonFromDataRowAsync(row, taxon.GetChildRank()));
                }
            }

            // Sort taxa alphabetically by name.

            result.Sort((lhs, rhs) => lhs.Name.CompareTo(rhs.Name));

            return(result);
        }
Exemple #2
0
        public static async Task <IEnumerable <ITaxon> > GetTaxaAsync(this SQLiteDatabase database, string name, TaxonRankType rank)
        {
            if (rank == TaxonRankType.Any)
            {
                return(await database.GetTaxaAsync(name));
            }
            else
            {
                List <ITaxon> taxa = new List <ITaxon>();

                string tableName = GetTableNameForRank(rank);

                if (string.IsNullOrEmpty(tableName) || string.IsNullOrEmpty(name))
                {
                    return(Enumerable.Empty <ITaxon>());
                }

                using (SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT * FROM {0} WHERE name = $name OR common_name = $name COLLATE NOCASE", tableName))) {
                    cmd.Parameters.AddWithValue("$name", name.ToLowerInvariant());

                    foreach (DataRow row in await database.GetRowsAsync(cmd))
                    {
                        taxa.Add(await database.CreateTaxonFromDataRowAsync(row, rank));
                    }
                }

                return(taxa);
            }
        }
Exemple #3
0
        public static async Task <IEnumerable <ITaxon> > GetTaxaAsync(this SQLiteDatabase database, TaxonRankType rank)
        {
            List <ITaxon> taxa      = new List <ITaxon>();
            string        tableName = GetTableNameForRank(rank);

            if (string.IsNullOrEmpty(tableName))
            {
                return(Enumerable.Empty <ITaxon>());
            }

            using (SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT * FROM {0}", tableName)))
                foreach (DataRow row in await database.GetRowsAsync(cmd))
                {
                    taxa.Add(await database.CreateTaxonFromDataRowAsync(row, rank));
                }

            return(taxa);
        }
Exemple #4
0
        public static async Task <ITaxon> GetTaxonAsync(this SQLiteDatabase database, long?id, TaxonRankType rank)
        {
            string tableName = GetTableNameForRank(rank);

            if (string.IsNullOrEmpty(tableName) || !id.HasValue)
            {
                return(null);
            }

            ITaxon taxon = null;

            using (SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT * FROM {0} WHERE id = $id", tableName))) {
                cmd.Parameters.AddWithValue("$id", id);

                DataRow row = await database.GetRowAsync(cmd);

                if (row != null)
                {
                    taxon = await database.CreateTaxonFromDataRowAsync(row, rank);
                }
            }

            return(taxon);
        }