aba8125cb532df17beb7c7c9bc8467a43d09e3d6 braney Wed Feb 10 13:39:27 2016 -0800 changes to allow for GenBank metadata to be held in a common table. #16809 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index befa85c..32e2736 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -597,32 +597,32 @@ /* Clip start/end coordinates to fit in chromosome. */ { static int chromSize = -1; if (chromSize < 0) chromSize = hChromSize(database, seqName); if (*pStart < 0) *pStart = 0; if (*pEnd > chromSize) *pEnd = chromSize; return *pStart < *pEnd; } struct genbankCds getCds(struct sqlConnection *conn, char *acc) /* obtain and parse the CDS, errAbort if not found or invalid */ { char query[256]; -sqlSafef(query, sizeof(query), "select cds.name from gbCdnaInfo,cds where (acc=\"%s\") and (cds.id=cds)", - acc); +sqlSafef(query, sizeof(query), "select c.name from %s,%s c where (acc=\"%s\") and (c.id=cds)", + gbCdnaInfoTable,cdsTable, acc); char *cdsStr = sqlQuickString(conn, query); if (cdsStr == NULL) errAbort("no CDS found for %s", acc); struct genbankCds cds; if (!genbankCdsParse(cdsStr, &cds)) errAbort("can't parse CDS for %s: %s", acc, cdsStr); return cds; } void printCappedSequence(int start, int end, int extra) /* Print DNA from start to end including extra at either end. * Capitalize bits from start to end. */ { @@ -5338,37 +5338,37 @@ /* Print out a link to GeneCards (Human only). */ { if (startsWith("hg", database) && isNotEmpty(geneName)) { printf("GeneCards: " "%s
\n", geneName, geneName); } } int getImageId(struct sqlConnection *conn, char *acc) /* get the image id for a clone, or 0 if none */ { int imageId = 0; -if (sqlTableExists(conn, "imageClone")) +if (sqlTableExists(conn, imageCloneTable)) { struct sqlResult *sr; char **row; char query[128]; sqlSafef(query, sizeof(query), - "select imageId from imageClone where acc = '%s'", acc); + "select imageId from %s where acc = '%s'",imageCloneTable, acc); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) imageId = sqlUnsigned(row[0]); sqlFreeResult(&sr); } return imageId; } void htcDisplayMrna(char *acc) /* Display mRNA available from genback or seq table.. */ { struct dnaSeq *seq = hGenBankGetMrna(database, acc, NULL); if (seq == NULL) errAbort("mRNA sequence %s not found", acc); @@ -5385,33 +5385,33 @@ { char query[256], estOrient[64]; sqlSafef(query, sizeof(query), "select intronOrientation from %s.estOrientInfo where chrom = '%s' and chromStart = %d and name = '%s'", database, psl->tName, psl->tStart, psl->qName); if (sqlQuickQuery(conn, query, estOrient, sizeof(estOrient)) != NULL) return sqlSigned(estOrient) * ((psl->strand[0] == '+') ? 1 : -1); else return 0; } static struct gbWarn *checkGbWarn(struct sqlConnection *conn, char *acc) /* check if there is a gbWarn entry for this accession, return NULL if none */ { struct gbWarn *gbWarn = NULL; -if (hTableExists(database, "gbWarn")) +if (sqlTableExists(conn, gbWarnTable)) gbWarn = sqlQueryObjs(conn, (sqlLoadFunc)gbWarnLoad, sqlQuerySingle, - "SELECT * FROM gbWarn WHERE acc = \"%s\"", acc); + "SELECT * FROM %s WHERE acc = \"%s\"", gbWarnTable, acc); return gbWarn; } static void printGbWarn(char *acc, struct gbWarn *gbWarn) /* print descriptive information about an accession in the gbWarn table */ { char *msg = NULL; switch (gbWarn->reason) { case gbWarnInvitroNorm: msg = "is from the InVitroGen/Genoscope full-length library. Some of the entries " "associated with this dataset appear to have been aligned to the reference " "genome and the sequences subsequently modified to match the genome. This " "process may have resulted in apparent high-quality alignments to pseudogenes."; break; case gbWarnAthRage: @@ -5432,85 +5432,85 @@ { struct dyString *dy = newDyString(1024); struct sqlConnection *conn = hAllocConn(database); struct sqlConnection *conn2= hAllocConn(database); struct sqlResult *sr; char **row; char rgdEstId[512]; char query[256]; char *type,*direction,*orgFullName,*library,*clone,*sex,*tissue, *development,*cell,*cds,*description, *author,*geneName, *date,*productName; // char *source; unused variable // int seqSize,fileSize; unused variables // long fileOffset; unused variable // char *extFile; unused variable -boolean hasVersion = hHasField(database, "gbCdnaInfo", "version"); -boolean haveGbSeq = sqlTableExists(conn, "gbSeq"); -char *seqTbl = haveGbSeq ? "gbSeq" : "seq"; +boolean hasVersion = hHasField(database, gbCdnaInfoTable, "version"); +boolean haveGbSeq = sqlTableExists(conn, gbSeqTable); +char *seqTbl = haveGbSeq ? gbSeqTable : "seq"; char *version = NULL; struct trackDb *tdbRgdEst; char *chrom = cartString(cart, "c"); int start = cartInt(cart, "o"); int end = cartUsualInt(cart, "t",0); struct gbWarn *gbWarn = checkGbWarn(conn, acc); /* This sort of query and having to keep things in sync between * the first clause of the select, the from clause, the where * clause, and the results in the row ... is really tedious. * One of my main motivations for going to a more object * based rather than pure relational approach in general, * and writing 'autoSql' to help support this. However * the pure relational approach wins for pure search speed, * and these RNA fields are searched. So it looks like * the code below stays. Be really careful when you modify * it. * * Uses the gbSeq table if available, otherwise use seq for older databases. */ sqlDyStringAppend(dy, - "select gbCdnaInfo.type,gbCdnaInfo.direction," - "source.name,organism.name,library.name,mrnaClone.name," - "sex.name,tissue.name,development.name,cell.name,cds.name," - "description.name,author.name,geneName.name,productName.name,"); + "select g.type,g.direction," + "so.name,o.name,l.name,m.name," + "se.name,t.name,dev.name,ce.name,cd.name," + "des.name,a.name,gene.name,p.name,"); if (haveGbSeq) dyStringAppend(dy, - "gbSeq.size,gbCdnaInfo.moddate,gbSeq.gbExtFile,gbSeq.file_offset,gbSeq.file_size "); + "gbS.size,g.moddate,gbS.gbExtFile,gbS.file_offset,gbS.file_size "); else dyStringAppend(dy, - "seq.size,seq.gb_date,seq.extFile,seq.file_offset,seq.file_size "); + "se.size,se.gb_date,se.extFile,se.file_offset,se.file_size "); -/* If the gbCdnaInfo table has a "version" column then will show it */ +/* If the gbCdnaInfoTAble table has a "version" column then will show it */ if (hasVersion) { dyStringAppend(dy, - ", gbCdnaInfo.version "); + ", g.version "); } sqlDyStringPrintf(dy, - " from gbCdnaInfo,%s,source,organism,library,mrnaClone,sex,tissue," - "development,cell,cds,description,author,geneName,productName " - " where gbCdnaInfo.acc = '%s' and gbCdnaInfo.id = %s.id ", - seqTbl, acc, seqTbl); + " from %s g,%s gbS,%s so,%s o,%s l,%s m,%s se,%s t," + "%s dev,%s ce,%s cd,%s des,%s a,%s gene,%s p" + " where g.acc = '%s' and g.id = gbS.id ", + gbCdnaInfoTable,seqTbl, sourceTable, organismTable, libraryTable, mrnaCloneTable, sexTable, tissueTable, developmentTable, cellTable, cdsTable, descriptionTable, authorTable, geneNameTable, productNameTable, acc); dyStringAppend(dy, - "and gbCdnaInfo.source = source.id and gbCdnaInfo.organism = organism.id " - "and gbCdnaInfo.library = library.id and gbCdnaInfo.mrnaClone = mrnaClone.id " - "and gbCdnaInfo.sex = sex.id and gbCdnaInfo.tissue = tissue.id " - "and gbCdnaInfo.development = development.id and gbCdnaInfo.cell = cell.id " - "and gbCdnaInfo.cds = cds.id and gbCdnaInfo.description = description.id " - "and gbCdnaInfo.author = author.id and gbCdnaInfo.geneName = geneName.id " - "and gbCdnaInfo.productName = productName.id"); + "and g.source = so.id and g.organism = o.id " + "and g.library = l.id and g.mrnaClone = m.id " + "and g.sex = se.id and g.tissue = t.id " + "and g.development = dev.id and g.cell = ce.id " + "and g.cds = cd.id and g.description = des.id " + "and g.author = a.id and g.geneName = gene.id " + "and g.productName = p.id"); sr = sqlMustGetResult(conn, dy->string); row = sqlNextRow(sr); if (row != NULL) { type=row[0];direction=row[1]; // source=row[2]; unused variable orgFullName=row[3];library=row[4];clone=row[5]; sex=row[6];tissue=row[7];development=row[8];cell=row[9];cds=row[10];description=row[11]; author=row[12];geneName=row[13];productName=row[14]; // seqSize = sqlUnsigned(row[15]); unused variable date = row[16]; // ext_file = row[17]; unused variable // fileOffset=sqlUnsigned(row[18]); unused variable // fileSize=sqlUnsigned(row[19]); unused variable @@ -5586,31 +5586,31 @@ { int estOrient = getEstTranscriptionDir(conn2, psl); if (estOrient != 0) printf("EST transcribed from %c strand (supported by %d splice sites).
\n", (estOrient > 0 ? '+' : '-' ), abs(estOrient)); } if (hGenBankHaveSeq(database, acc, NULL)) { printf("%s sequence: ", type); hgcAnchorSomewhere("htcDisplayMrna", acc, tdb->track, seqName); printf("%s
\n", acc); } } else { - warn("Couldn't find %s in gbCdnaInfo table", acc); + warn("Couldn't find %s in %s table", gbCdnaInfoTable, acc); } if (end != 0 && differentString(chrom,"0") && isNotEmpty(chrom)) { printf("Position: " "", hgTracksPathAndSettings(), database, chrom, start+1, end); printf("%s:%d-%d
\n", chrom, start+1, end); } gbWarnFree(&gbWarn); sqlFreeResult(&sr); freeDyString(&dy); hFreeConn(&conn); hFreeConn(&conn2); } @@ -6947,37 +6947,37 @@ else puts(""); printf(" \n", indexTn.forCgi); printf(" \n", bodyTn.forCgi); puts("<BODY></BODY>"); puts(""); puts("\n"); exit(0); /* Avoid cartHtmlEnd. */ } static void getCdsStartAndStop(struct sqlConnection *conn, char *acc, char *trackTable, uint *retCdsStart, uint *retCdsEnd) /* Get cds start and stop, if available */ { char query[256]; -if (sqlTableExists(conn, "gbCdnaInfo")) +if (sqlTableExists(conn, gbCdnaInfoTable)) { - sqlSafef(query, sizeof query, "select cds from gbCdnaInfo where acc = '%s'", acc); + sqlSafef(query, sizeof query, "select cds from %s where acc = '%s'", gbCdnaInfoTable, acc); char *cdsId = sqlQuickString(conn, query); if (isNotEmpty(cdsId)) { - sqlSafef(query, sizeof query, "select name from cds where id = '%s'", cdsId); + sqlSafef(query, sizeof query, "select name from %s where id = '%s'", cdsTable, cdsId); char *cdsString = sqlQuickString(conn, query); if (isNotEmpty(cdsString)) genbankParseCds(cdsString, retCdsStart, retCdsEnd); } } else { struct trackDb *tdb = hashMustFindVal(trackHash, trackTable); char *cdsTable = trackDbSetting(tdb, "cdsTable"); if (isNotEmpty(cdsTable) && hTableExists(database, cdsTable)) { sqlSafef(query, sizeof(query), "select cds from %s where id = '%s'", cdsTable, acc); char *cdsString = sqlQuickString(conn, query); if (isNotEmpty(cdsString)) genbankParseCds(cdsString, retCdsStart, retCdsEnd); @@ -9727,34 +9727,34 @@ hFreeConn(&conn2); } void doDecipher(struct trackDb *tdb, char *item, char *itemForUrl) /* Put up DECIPHER track info. */ { genericHeader(tdb, item); printDecipherDetails(tdb, item, FALSE); printTrackHtml(tdb); } char *gbCdnaGetDescription(struct sqlConnection *conn, char *acc) /* return mrna description, or NULL if not available. freeMem result */ { char query[1024]; -if (!hTableExists(database, "gbCdnaInfo")) +if (!sqlTableExists(conn, gbCdnaInfoTable)) return NULL; sqlSafef(query, sizeof(query), - "select description.name from gbCdnaInfo,description where (acc = '%s') and (gbCdnaInfo.description = description.id)", acc); + "select d.name from %s g,%s d where (acc = '%s') and (g.description = d.id)", gbCdnaInfoTable, descriptionTable, acc); char *desc = sqlQuickString(conn, query); if ((desc == NULL) || sameString(desc, "n/a") || (strlen(desc) == 0)) freez(&desc); return desc; } void printOmimGeneDetails(struct trackDb *tdb, char *itemName, boolean encode) /* Print details of an OMIM Gene entry. */ { struct sqlConnection *conn = hAllocConn(database); struct sqlConnection *conn2 = hAllocConn(database); char query[256]; struct sqlResult *sr; char **row; char *url = tdb->url; @@ -10032,92 +10032,92 @@ else { // show phenotype class if available, even phenotypeId is not available if (!sameWord(phenotypeClass, "-1")) printf(" (%s)", phenotypeClass); } } printf("
\n"); } if (disorderShown) printf("\n"); sqlFreeResult(&sr); } // show RefSeq Gene link(s) sqlSafef(query, sizeof(query), - "select distinct locusLinkId from refLink l, omim2gene g, refGene r where l.omimId=%s and g.geneId=l.locusLinkId and g.entryType='gene' and chrom='%s' and txStart = %s and txEnd= %s", - itemName, chrom, chromStart, chromEnd); + "select distinct locusLinkId from %s l, omim2gene g, refGene r where l.omimId=%s and g.geneId=l.locusLinkId and g.entryType='gene' and chrom='%s' and txStart = %s and txEnd= %s", + refLinkTable, itemName, chrom, chromStart, chromEnd); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { char *geneId; geneId = strdup(row[0]); sqlFreeResult(&sr); sqlSafef(query, sizeof(query), - "select distinct l.mrnaAcc from refLink l where locusLinkId = '%s' order by mrnaAcc asc", geneId); + "select distinct l.mrnaAcc from %s l where locusLinkId = '%s' order by mrnaAcc asc", refLinkTable, geneId); sr = sqlMustGetResult(conn, query); if (sr != NULL) { int printedCnt; printedCnt = 0; while ((row = sqlNextRow(sr)) != NULL) { if (printedCnt < 1) printf("RefSeq Gene(s): "); else printf(", "); printf("", "../cgi-bin/hgc?g=refGene&i=", row[0], chromStart, chromEnd); printf("%s", row[0]); printedCnt++; } if (printedCnt >= 1) printf("
\n"); } sqlFreeResult(&sr); } // show Related UCSC Gene links sqlSafef(query, sizeof(query), - "select distinct kgId from kgXref x, refLink l, omim2gene g where x.refseq = mrnaAcc and l.omimId=%s and g.omimId=l.omimId and g.entryType='gene'", - itemName); + "select distinct kgId from kgXref x, %s l, omim2gene g where x.refseq = mrnaAcc and l.omimId=%s and g.omimId=l.omimId and g.entryType='gene'", + refLinkTable, itemName); sr = sqlMustGetResult(conn, query); if (sr != NULL) { int printedCnt; printedCnt = 0; while ((row = sqlNextRow(sr)) != NULL) { if (printedCnt < 1) printf("Related UCSC Gene(s): "); else printf(", "); printf("", "../cgi-bin/hgGene?hgg_gene=", row[0]); printf("%s", row[0]); printedCnt++; } if (printedCnt >= 1) printf("
\n"); } sqlFreeResult(&sr); // show GeneReviews link(s) if (sqlTableExists(conn, "geneReviewsDetail")) { sqlSafef(query, sizeof(query), - "select distinct r.name2 from refLink l, omim2gene g, refGene r where l.omimId=%s and g.geneId=l.locusLinkId and g.entryType='gene' and chrom='%s' and txStart = %s and txEnd= %s", - itemName, chrom, chromStart, chromEnd); + "select distinct r.name2 from %s l, omim2gene g, refGene r where l.omimId=%s and g.geneId=l.locusLinkId and g.entryType='gene' and chrom='%s' and txStart = %s and txEnd= %s", + refLinkTable, itemName, chrom, chromStart, chromEnd); sr = sqlMustGetResult(conn, query); if (sr != NULL) { while ((row = sqlNextRow(sr)) != NULL) { prGRShortRefGene(row[0]); } } sqlFreeResult(&sr); } } printf("
"); printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, FALSE, itemName); @@ -10647,59 +10647,59 @@ struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **row; char query[256]; char *sqlRnaName = rnaName; struct refLink *rl; char *rgdId; int start = cartInt(cart, "o"); /* Make sure to escape single quotes for DB parseability */ if (strchr(rnaName, '\'')) sqlRnaName = replaceChars(rnaName, "'", "''"); cartWebStart(cart, database, "%s", tdb->longLabel); -sqlSafef(query, sizeof(query), "select * from refLink where mrnaAcc = '%s'", sqlRnaName); +sqlSafef(query, sizeof(query), "select * from %s where mrnaAcc = '%s'", refLinkTable, sqlRnaName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) - errAbort("Couldn't find %s in refLink table - this accession may no longer be available.", rnaName); + errAbort("Couldn't find %s in %s table - this accession may no longer be available.", rnaName, refLinkTable); rl = refLinkLoad(row); sqlFreeResult(&sr); printf("

Gene %s

\n", rl->name); sqlSafef(query, sizeof(query), "select id from rgdGeneLink where refSeq = '%s'", sqlRnaName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) errAbort("Couldn't find %s in rgdGeneLink table - database inconsistency.", rnaName); rgdId = cloneString(row[0]); sqlFreeResult(&sr); printf("RGD Gene Report: url, rgdId); printf("\" TARGET=_blank>RGD:%s
", rgdId); printf("NCBI RefSeq: mrnaAcc); printf("\" TARGET=_blank>%s", rl->mrnaAcc); /* If refSeqStatus is available, report it: */ -if (hTableExists(database, "refSeqStatus")) +if (sqlTableExists(conn, refSeqStatusTable)) { - sqlSafef(query, sizeof(query), "select status from refSeqStatus where mrnaAcc = '%s'", - sqlRnaName); + sqlSafef(query, sizeof(query), "select status from %s where mrnaAcc = '%s'", + refSeqStatusTable, sqlRnaName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) != NULL) { printf("   Status: %s", row[0]); } sqlFreeResult(&sr); } puts("
"); if (rl->omimId != 0) { printf("OMIM: omimId); printf("\" TARGET=_blank>%d
\n", rl->omimId); } @@ -10711,31 +10711,31 @@ printf("%d
\n", rl->locusLinkId); } htmlHorizontalLine(); /* print alignments that track was based on */ { char *aliTbl = (sameString(tdb->table, "rgdGene") ? "refSeqAli" : "xenoRGDAli"); struct psl *pslList = getAlignments(conn, aliTbl, rl->mrnaAcc); printf("

mRNA/Genomic Alignments

"); printAlignments(pslList, start, "htcCdnaAli", aliTbl, rl->mrnaAcc); } htmlHorizontalLine(); -geneShowPosAndLinks(rl->mrnaAcc, rl->protAcc, tdb, "refPep", "htcTranslatedProtein", +geneShowPosAndLinks(rl->mrnaAcc, rl->protAcc, tdb, refPepTable, "htcTranslatedProtein", "htcRefMrna", "htcGeneInGenome", "mRNA Sequence"); printTrackHtml(tdb); hFreeConn(&conn); } void doRgdGene2(struct trackDb *tdb, char *rgdGeneId) /* Process click on a RGD gene. */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **row; char query[256]; char *sqlRnaName = rgdGeneId; char *rgdId = NULL; @@ -10855,59 +10855,59 @@ /* get description of RefSeq CDS completeness or NULL if not available */ { /* table mapping names to descriptions */ static char *cmplMap[][2] = { {"Unknown", "completeness unknown"}, {"Complete5End", "5' complete"}, {"Complete3End", "3' complete"}, {"FullLength", "full length"}, {"IncompleteBothEnds", "5' and 3' incomplete"}, {"Incomplete5End", "5' incomplete"}, {"Incomplete3End", "3' incomplete"}, {"Partial", "partial"}, {NULL, NULL} }; -if (sqlTableExists(conn, "refSeqSummary")) +if (sqlTableExists(conn, refSeqSummaryTable)) { char query[256], buf[64], *cmpl; int i; sqlSafef(query, sizeof(query), - "select completeness from refSeqSummary where mrnaAcc = '%s'", - acc); + "select completeness from %s where mrnaAcc = '%s'", + refSeqSummaryTable, acc); cmpl = sqlQuickQuery(conn, query, buf, sizeof(buf)); if (cmpl != NULL) { for (i = 0; cmplMap[i][0] != NULL; i++) { if (sameString(cmpl, cmplMap[i][0])) return cmplMap[i][1]; } } } return NULL; } char *getRefSeqSummary(struct sqlConnection *conn, char *acc) /* RefSeq summary or NULL if not available; free result */ { char * summary = NULL; -if (sqlTableExists(conn, "refSeqSummary")) +if (sqlTableExists(conn, refSeqSummaryTable)) { char query[256]; sqlSafef(query, sizeof(query), - "select summary from refSeqSummary where mrnaAcc = '%s'", acc); + "select summary from %s where mrnaAcc = '%s'", refSeqSummaryTable, acc); summary = sqlQuickString(conn, query); } return summary; } char *geneExtraImage(char *geneFileBase) /* check if there is a geneExtra image for the specified gene, if so return * the relative URL in a static buffer, or NULL if it doesn't exist */ { static char *imgExt[] = {"png", "gif", "jpg", NULL}; static char path[256]; int i; for (i = 0; imgExt[i] != NULL; i++) { @@ -10941,56 +10941,56 @@ safef(textPath, sizeof(textPath), "../htdocs/geneExtra/%s.txt", geneFileBase); if (access(textPath, R_OK) == 0) { FILE *fh = mustOpen(textPath, "r"); printf(""); copyOpenFile(fh, stdout); fclose(fh); } } int gbCdnaGetVersion(struct sqlConnection *conn, char *acc) /* return mrna/est version, or 0 if not available */ { int ver = 0; -if (!hTableExists(database, "gbCdnaInfo")) +if (!sqlTableExists(conn, gbCdnaInfoTable)) { - warn("Genbank information not shown below, the table %s.gbCdnaInfo is not installed " - "on this server. ", database); + warn("Genbank information not shown below, the table %s is not installed " + "on this server. ", gbCdnaInfoTable); //"The information below is a shortened version of the one shown on the " //"UCSC site", database); return 0; } -if (hHasField(database, "gbCdnaInfo", "version")) +if (hHasField(database, gbCdnaInfoTable, "version")) { char query[128]; sqlSafef(query, sizeof(query), - "select version from gbCdnaInfo where acc = '%s'", acc); + "select version from %s where acc = '%s'", gbCdnaInfoTable, acc); ver = sqlQuickNum(conn, query); } return ver; } static void prRefGeneXenoInfo(struct sqlConnection *conn, struct refLink *rl) /* print xeno refseq info, including linking to the browser, if any */ { char query[256]; -sqlSafef(query, sizeof(query), "select organism.name from gbCdnaInfo,organism " - "where (gbCdnaInfo.acc = '%s') and (organism.id = gbCdnaInfo.organism)", - rl->mrnaAcc); +sqlSafef(query, sizeof(query), "select o.name from %s g,%s o " + "where (g.acc = '%s') and (o.id = g.organism)", + gbCdnaInfoTable, organismTable, rl->mrnaAcc); char *org = sqlQuickString(conn, query); if (org == NULL) org = cloneString("unknown"); printf("Organism: %s
", org); char *xenoDb = hDbForSciName(org); if ((xenoDb != NULL) && hDbIsActive(xenoDb) && hTableExists(xenoDb, "refSeqAli")) { printf("UCSC browser: \n"); linkToOtherBrowserSearch(xenoDb, rl->mrnaAcc); printf("%s on %s (%s) \n", rl->mrnaAcc, hOrganism(xenoDb), xenoDb); printf("
"); } freeMem(org); } @@ -11010,34 +11010,34 @@ if (startsWith("panTro", database)) printf("

Other RefSeq Gene %s

\n", rl->name); else printf("

Non-%s RefSeq Gene %s

\n", organism, rl->name); } else printf("

RefSeq Gene %s

\n", rl->name); printf("RefSeq: mrnaAcc); if (ver > 0) printf("\" TARGET=_blank>%s.%d", rl->mrnaAcc, ver); else printf("\" TARGET=_blank>%s", rl->mrnaAcc); /* If refSeqStatus is available, report it: */ -if (hTableExists(database, "refSeqStatus")) +if (sqlTableExists(conn, refSeqStatusTable)) { - sqlSafef(query, sizeof(query), "select status from refSeqStatus where mrnaAcc = '%s'", - sqlRnaName); + sqlSafef(query, sizeof(query), "select status from %s where mrnaAcc = '%s'", + refSeqStatusTable, sqlRnaName); char *stat = sqlQuickString(conn, query); if (stat != NULL) printf("   Status: %s", stat); } puts("
"); char *desc = gbCdnaGetDescription(conn, rl->mrnaAcc); if (desc != NULL) { printf("Description: "); htmlTextOut(desc); printf("
\n"); } if (isXeno) prRefGeneXenoInfo(conn, rl); @@ -11237,35 +11237,35 @@ char *summary = NULL; struct refLink rlR; struct refLink *rl; int start = cartInt(cart, "o"); int left = cartInt(cart, "l"); int right = cartInt(cart, "r"); char *chrom = cartString(cart, "c"); /* Make sure to escape single quotes for DB parseability */ if (strchr(rnaName, '\'')) { sqlRnaName = replaceChars(rnaName, "'", "''"); } /* get refLink entry */ if (strstr(rnaName, "NM_") != NULL) { - sqlSafef(query, sizeof(query), "select * from refLink where mrnaAcc = '%s'", sqlRnaName); + sqlSafef(query, sizeof(query), "select * from %s where mrnaAcc = '%s'", refLinkTable, sqlRnaName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) - errAbort("Couldn't find %s in refLink table - this accession may no longer be available.", - rnaName); + errAbort("Couldn't find %s in %s table - this accession may no longer be available.", + rnaName, refLinkTable); rl = refLinkLoad(row); sqlFreeResult(&sr); } else { rlR.name = strdup(kgId); rlR.mrnaAcc = strdup(kgId); rlR.locusLinkId = 0; rl = &rlR; } cartWebStart(cart, database, "Known Gene"); printf("\n\n"); prKnownGeneInfo(conn, rnaName, sqlRnaName, rl); @@ -11299,65 +11299,65 @@ printAlignments(pslList, start, "htcCdnaAli", aliTbl, kgId); } htmlHorizontalLine(); struct palInfo *palInfo = NULL; if (genbankIsRefSeqCodingMRnaAcc(rnaName)) { AllocVar(palInfo); palInfo->chrom = chrom; palInfo->left = left; palInfo->right = right; palInfo->rnaName = rnaName; } -geneShowPosAndLinksPal(rl->mrnaAcc, rl->protAcc, tdb, "refPep", "htcTranslatedProtein", +geneShowPosAndLinksPal(rl->mrnaAcc, rl->protAcc, tdb, refPepTable, "htcTranslatedProtein", "htcRefMrna", "htcGeneInGenome", "mRNA Sequence",palInfo); printTrackHtml(tdb); hFreeConn(&conn); } static struct refLink *printRefSeqInfo( struct sqlConnection *conn, struct trackDb *tdb, char *rnaName, char *version) { struct sqlResult *sr; char **row; char query[256]; char *sqlRnaName = rnaName; char *summary = NULL; boolean isXeno = sameString(tdb->table, "xenoRefGene"); struct refLink *rl; /* Make sure to escape single quotes for DB parseability */ if (strchr(rnaName, '\'')) { sqlRnaName = replaceChars(rnaName, "'", "''"); } /* get refLink entry */ if (version == NULL) { - sqlSafef(query, sizeof(query), "select * from refLink where mrnaAcc = '%s'", sqlRnaName); + sqlSafef(query, sizeof(query), "select * from %s where mrnaAcc = '%s'", refLinkTable, sqlRnaName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) - errAbort("Couldn't find %s in refLink table - this accession may no longer be available.", rnaName); + errAbort("Couldn't find %s in %s table - this accession may no longer be available.", rnaName, refLinkTable); rl = refLinkLoad(row); sqlFreeResult(&sr); } else { - sqlSafef(query, sizeof(query), "select * from refLink r, gbCdnaInfo g where mrnaAcc = '%s' and r.mrnaAcc=g.acc and g.version='%s'", sqlRnaName, version); + sqlSafef(query, sizeof(query), "select * from %s r, %s g where mrnaAcc = '%s' and r.mrnaAcc=g.acc and g.version='%s'", refLinkTable,gbCdnaInfoTable, sqlRnaName, version); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) { sqlFreeResult(&sr); return NULL; } rl = refLinkLoad(row); sqlFreeResult(&sr); } /* print the first section with info */ printf("
\n\n"); prRefGeneInfo(conn, rnaName, sqlRnaName, rl, isXeno); addGeneExtra(rl->name); /* adds columns if extra info is available */ @@ -11572,31 +11572,31 @@ "on this server", database); htmlHorizontalLine(); struct palInfo *palInfo = NULL; if (genbankIsRefSeqCodingMRnaAcc(rnaName)) { AllocVar(palInfo); palInfo->chrom = chrom; palInfo->left = left; palInfo->right = right; palInfo->rnaName = rnaName; } -geneShowPosAndLinksPal(rl->mrnaAcc, rl->protAcc, tdb, "refPep", "htcTranslatedProtein", +geneShowPosAndLinksPal(rl->mrnaAcc, rl->protAcc, tdb, refPepTable, "htcTranslatedProtein", "htcRefMrna", "htcGeneInGenome", "mRNA Sequence",palInfo); printTrackHtml(tdb); hFreeConn(&conn); } char *kgIdToSpId(struct sqlConnection *conn, char* kgId) /* get the swissprot id for a known genes id; resulting string should be * freed */ { char query[64]; sqlSafef(query, sizeof(query), "select spID from kgXref where kgID='%s'", kgId); return sqlNeedQuickString(conn, query); } @@ -15371,63 +15371,63 @@ sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { printf("Variant Source:  %s
\n",row[0]); printf("Variant Type:  %s\n",row[1]); } sqlFreeResult(&sr); hFreeConn(&conn); } return rsId; } void doSnpEntrezGeneLink(struct trackDb *tdb, char *name) /* print link to EntrezGene for this SNP */ { +struct sqlConnection *conn = hAllocConn(database); char *table = tdb->table; -if (hTableExists(database, "knownGene") && hTableExists(database, "refLink") && +if (hTableExists(database, "knownGene") && sqlTableExists(conn, refLinkTable) && hTableExists(database, "mrnaRefseq") && hTableExists(database, table)) { - struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **row; char query[512]; sqlSafef(query, sizeof(query), "select distinct " " rl.locusLinkID, " " rl.name " "from knownGene kg, " - " refLink rl, " + " %s rl, " " %s snp, " " mrnaRefseq mrs " "where snp.chrom = kg.chrom " " and kg.name = mrs.mrna " " and mrs.refSeq = rl.mrnaAcc " " and kg.txStart < snp.chromStart " " and kg.txEnd > snp.chromEnd " - " and snp.name = '%s'", table, name); + " and snp.name = '%s'",refLinkTable, table, name); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { printf("
Entrez Gene for ", row[0]); printf("%s
\n", row[1]); } sqlFreeResult(&sr); - hFreeConn(&conn); } +hFreeConn(&conn); } void doSnpOld(struct trackDb *tdb, char *itemName) /* Put up info on a SNP. */ { char *snpTable = tdb->table; struct snp snp; struct snpMap snpMap; int start = cartInt(cart, "o"); struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **row; char query[256]; int rowOffset; char *printId; @@ -17000,31 +17000,31 @@ char *getSymbolForGeneName(char *geneTable, char *geneId) /* Given a gene track and gene accession, look up the symbol if we know where to look * and if we find it, return a string with both symbol and acc. */ { struct dyString *dy = dyStringNew(32); char buf[256]; char *sym = NULL; if (sameString(geneTable, "knownGene") || sameString(geneTable, "refGene")) { struct sqlConnection *conn = hAllocConn(database); char query[256]; query[0] = '\0'; if (sameString(geneTable, "knownGene")) sqlSafef(query, sizeof(query), "select geneSymbol from kgXref where kgID = '%s'", geneId); else if (sameString(geneTable, "refGene")) - sqlSafef(query, sizeof(query), "select name from refLink where mrnaAcc = '%s'", geneId); + sqlSafef(query, sizeof(query), "select name from %s where mrnaAcc = '%s'", refLinkTable, geneId); sym = sqlQuickQuery(conn, query, buf, sizeof(buf)-1); hFreeConn(&conn); } if (sym != NULL) dyStringPrintf(dy, "%s (%s)", sym, geneId); else dyStringAppend(dy, geneId); return dyStringCannibalize(&dy); } #define firstTwoColumnsPctS "
%s  %s " void getSnp125RefCodonAndSnpPos(struct snp125 *snp, struct genePred *gene, int exonIx, int *pSnpCodonPos, char refCodon[4], char *pRefAA) /* Given a single-base snp and a coding gene/exon containing it, determine the snp's position @@ -24619,30 +24619,31 @@ char *item = cloneString(cartOptionalString(cart, "i")); char *parentWigMaf = cartOptionalString(cart, "parentWigMaf"); struct trackDb *tdb = NULL; if (hIsGisaidServer()) { validateGisaidUser(cart); } /* database and organism are global variables used in many places */ getDbAndGenome(cart, &database, &genome, NULL); organism = hOrganism(database); scientificName = hScientificName(database); +initGenbankTableNames(database); dbIsFound = trackHubDatabase(database) || sqlDatabaseExists(database); // Try to deal with virt chrom position used by hgTracks. // Hack the cart vars to set to a non virtual chrom mode position if (startsWith("virt:", cartUsualString(cart, "position", ""))) { char *nvPos = cartUsualString(cart, "nonVirtPosition", ""); /* parse non-virtual position */ char *pos = cloneString(nvPos); char *colon = strchr(pos, ':'); if (!colon) errAbort("position has no colon"); char *dash = strchr(pos, '-'); if (!dash)