// TaxInDB returns true if a taxon is in the database. func taxInDB(c *cmdapp.Command, db jdh.DB, name, parent string, rank jdh.Rank, valid bool) *jdh.Taxon { args := new(jdh.Values) args.Add(jdh.TaxName, name) if len(parent) != 0 { args.Add(jdh.TaxParent, parent) } if rank != jdh.Unranked { args.Add(jdh.TaxRank, rank.String()) } l, err := db.List(jdh.Taxonomy, args) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", c.ErrStr(err)) os.Exit(1) } defer l.Close() for { tax := &jdh.Taxon{} if err := l.Scan(tax); err != nil { if err == io.EOF { return nil } } if len(tax.Id) > 0 { if tax.IsValid == valid { return tax } } } }
func spInSearchNmdTaxon(c *cmdapp.Command, name, parent, txNum string, rank jdh.Rank) (bool, string) { args := new(jdh.Values) args.Add(jdh.TaxName, name) if len(parent) != 0 { args.Add(jdh.TaxParent, parent) } if rank != jdh.Unranked { args.Add(jdh.TaxRank, rank.String()) } l, err := localDB.List(jdh.Taxonomy, args) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", c.ErrStr(err)) os.Exit(1) } defer l.Close() var tax *jdh.Taxon mult := false for { ot := &jdh.Taxon{} if err := l.Scan(ot); err != nil { if err == io.EOF { break } fmt.Fprintf(os.Stderr, "%s\n", c.ErrStr(err)) os.Exit(1) } if tax == nil { tax = ot continue } if !mult { if verboseFlag { fmt.Fprintf(os.Stdout, "WARNING:\t%s\t%s\tAmbiguos name\n", txNum) fmt.Fprintf(os.Stdout, "%s\t%s\n", tax.Id, tax.Name) } mult = true } if verboseFlag { fmt.Fprintf(os.Stderr, "%s\t%s\n", ot.Id, ot.Name) } } if mult || (tax == nil) { return mult, "" } return false, tax.Id }