Beispiel #1
0
        public static async Task <Taxon[]> GetSubtaxaAsync(Taxon taxon)
        {
            List <Taxon> result = new List <Taxon>();

            string table_name         = Taxon.TypeToDatabaseTableName(taxon.GetChildRank());
            string parent_column_name = Taxon.TypeToDatabaseColumnName(taxon.type);

            if (string.IsNullOrEmpty(table_name))
            {
                return(result.ToArray());
            }

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

            using (SQLiteCommand cmd = new SQLiteCommand(string.Format(query, table_name, parent_column_name))) {
                cmd.Parameters.AddWithValue("$parent_id", taxon.id);

                using (DataTable rows = await Database.GetRowsAsync(cmd))
                    foreach (DataRow row in rows.Rows)
                    {
                        result.Add(Taxon.FromDataRow(row, taxon.GetChildRank()));
                    }
            }

            // Sort taxa alphabetically by name.
            result.Sort((lhs, rhs) => lhs.name.CompareTo(rhs.name));

            return(result.ToArray());
        }
Beispiel #2
0
        public static async Task DeleteTaxonAsync(Taxon taxon)
        {
            string table_name          = _getRankTableName(taxon.type);
            string subtaxa_table_name  = _getRankTableName(taxon.GetChildRank());
            string subtaxa_column_name = _getRankColumnName(taxon.type);

            // Set to NULL any references subtaxa have to this taxon.
            // Note that this can also happen automatically if the foreign key is set up correctly when creating the database.

            if (!string.IsNullOrEmpty(table_name) && !string.IsNullOrEmpty(subtaxa_column_name))
            {
                using (SQLiteCommand cmd = new SQLiteCommand(string.Format("UPDATE {0} SET {1} = NULL WHERE {1} = $id", subtaxa_table_name, subtaxa_column_name))) {
                    cmd.Parameters.AddWithValue("$id", taxon.id);

                    await Database.ExecuteNonQuery(cmd);
                }
            }

            // Delete the taxon.

            if (!string.IsNullOrEmpty(table_name))
            {
                using (SQLiteCommand cmd = new SQLiteCommand(string.Format("DELETE FROM {0} WHERE id = $id", table_name))) {
                    cmd.Parameters.AddWithValue("$id", taxon.id);

                    await Database.ExecuteNonQuery(cmd);
                }
            }
        }