1314c3b9f1062886c567a2bb31d7e9ac53019ec9 hiram Wed Nov 16 09:52:27 2011 -0800 allow refLink searches to work when accessions have version numbers (ignore the accession version number) RedMine issue 6040 diff --git src/hg/lib/hgFind.c src/hg/lib/hgFind.c index 778d652..662277a 100644 --- src/hg/lib/hgFind.c +++ src/hg/lib/hgFind.c @@ -2027,69 +2027,71 @@ slAddHead(pList, rl); } sqlFreeResult(&sr); } } static boolean findRefGenes(char *db, struct hgFindSpec *hfs, char *spec, struct hgPositions *hgp) /* Look up refSeq genes in table. */ { struct sqlConnection *conn = hAllocConn(db); struct dyString *ds = newDyString(256); struct refLink *rlList = NULL, *rl; boolean gotRefLink = hTableExists(db, "refLink"); boolean found = FALSE; +char *specNoVersion = cloneString(spec); +(void) chopPrefix(specNoVersion); if (gotRefLink) { - if (startsWith("NM_", spec) || startsWith("NR_", spec) || startsWith("XM_", spec)) + if (startsWith("NM_", specNoVersion) || startsWith("NR_", specNoVersion) || startsWith("XM_", specNoVersion)) { - dyStringPrintf(ds, "select * from refLink where mrnaAcc = '%s'", spec); + dyStringPrintf(ds, "select * from refLink where mrnaAcc = '%s'", specNoVersion); addRefLinks(conn, ds, &rlList); } - else if (startsWith("NP_", spec) || startsWith("XP_", spec)) + else if (startsWith("NP_", specNoVersion) || startsWith("XP_", specNoVersion)) { - dyStringPrintf(ds, "select * from refLink where protAcc = '%s'", spec); + dyStringPrintf(ds, "select * from refLink where protAcc = '%s'", specNoVersion); addRefLinks(conn, ds, &rlList); } - else if (isUnsignedInt(spec)) + else if (isUnsignedInt(specNoVersion)) { dyStringPrintf(ds, "select * from refLink where locusLinkId = %s", - spec); + specNoVersion); addRefLinks(conn, ds, &rlList); dyStringClear(ds); - dyStringPrintf(ds, "select * from refLink where omimId = %s", spec); + dyStringPrintf(ds, "select * from refLink where omimId = %s", specNoVersion); addRefLinks(conn, ds, &rlList); } else { char *indexFile = getGenbankGrepIndex(db, hfs, "refLink", "mrnaAccProduct"); dyStringPrintf(ds, "select * from refLink where name like '%s%%'", - spec); + specNoVersion); addRefLinks(conn, ds, &rlList); if (indexFile != NULL) { - struct slName *accList = doGrepQuery(indexFile, "refLink", spec, + struct slName *accList = doGrepQuery(indexFile, "refLink", specNoVersion, NULL); addRefLinkAccs(conn, accList, &rlList); } else { dyStringClear(ds); dyStringPrintf(ds, "select * from refLink where product like '%%%s%%'", - spec); + specNoVersion); addRefLinks(conn, ds, &rlList); } } } if (rlList != NULL) { struct hgPosTable *table = NULL; struct hash *hash = newHash(8); for (rl = rlList; rl != NULL; rl = rl->next) { char where[64]; struct genePredReader *gpr; struct genePred *gp; /* Don't return duplicate mrna accessions */