/** load the sage experiment data */ struct sageExp *loadSageExps(char *tableName, struct slName *nmList) { char *user = cfgOption("db.user"); char *password = cfgOption("db.password"); struct sqlConnection *sc = NULL; char query[256]; struct sageExp *seList = NULL, *se=NULL; char **row; struct sqlResult *sr = NULL; char *db = cgiUsualString("db", "hgFixed"); sc = sqlConnectRemote("localhost", user, password, db); sqlSafef(query, sizeof query, "select * from sageExp order by num"); sr = sqlGetResult(sc,query); while((row = sqlNextRow(sr)) != NULL) { se = sageExpLoad(row); slAddHead(&seList,se); } sqlFreeResult(&sr); sqlDisconnect(&sc); slReverse(&seList); return seList; }
struct genePred *getCurGenePred(struct sqlConnection *conn) /* Return current gene in genePred. */ { char *track = genomeSetting("knownGene"); char table[64]; boolean hasBin; char query[256]; struct sqlResult *sr; char **row; struct genePred *gp = NULL; hFindSplitTable(sqlGetDatabase(conn), curGeneChrom, track, table, &hasBin); sqlSafef(query, sizeof(query), "select * from %s where name = '%s' " "and chrom = '%s' and txStart=%d and txEnd=%d" , table, curGeneId, curGeneChrom, curGeneStart, curGeneEnd); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) != NULL) gp = genePredLoad(row + hasBin); sqlFreeResult(&sr); if (gp == NULL) errAbort("getCurGenePred: Can't find %s", query); return gp; }
static char *pubsArticleDispId(struct track *tg, struct sqlConnection *conn, char *articleId) /* given an articleId, lookup author and year and create <author><year> label for it */ { char *dispLabel = NULL; char *articleTable = pubsArticleTable(tg); char query[LARGEBUF]; sqlSafef(query, sizeof(query), "SELECT firstAuthor, year FROM %s WHERE articleId = '%s'", articleTable, articleId); struct sqlResult *sr = sqlGetResult(conn, query); if (sr!=NULL) { char **row = NULL; row = sqlNextRow(sr); if (row != NULL) dispLabel = pubsFeatureLabel(row[0], row[1]); else dispLabel = articleId; } else dispLabel = articleId; sqlFreeResult(&sr); return dispLabel; }
struct wabaChromHit *wchLoadAll(struct sqlConnection *conn, char *chromName) /* Load all waba chromosome hits from one chromosome. */ { char query[512]; char **row; struct sqlResult *sr; char table[128]; struct wabaChromHit *wchList = NULL, *wch; sprintf(table, "%s_tet_waba", chromName); if (!sqlTableExists(conn, table)) return NULL; sprintf(query, "select * from %s", table); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { wch = wchLoad(row); slAddHead(&wchList, wch); } sqlFreeResult(&sr); slReverse(&wchList); return wchList; }
struct dbDb *loadDbInformation(char *database) /* load up the information for a particular draft */ { struct sqlConnection *conn = hConnectCentral(); struct sqlResult *sr = NULL; char **row; struct dbDb *dbList = NULL, *db = NULL; char query[256]; snprintf(query, sizeof(query), "select * from dbDb where name='%s'", database); /* Scan through dbDb table, loading into list */ sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { db = dbDbLoad(row); slAddHead(&dbList, db); } sqlFreeResult(&sr); hDisconnectCentral(&conn); if(slCount(dbList) != 1) errAbort("coordConv.c::loadDbInformation() - expecting 1 dbDb record for %s got %d", db->name, slCount(dbList)); return dbList; }
/** load the sage data by constructing a query based on the names in nmList */ struct sage *loadSageData(char *table, struct slName *nmList) { char *user = cfgOption("db.user"); char *password = cfgOption("db.password"); struct sqlConnection *sc = NULL; struct dyString *query = newDyString(2048); struct sage *sgList = NULL, *sg=NULL; struct slName *nm =NULL; char *db = cgiUsualString("db", "hgFixed"); char **row; int count=0; struct sqlResult *sr = NULL; sc = sqlConnectRemote("localhost", user, password, db); sqlDyStringPrintf(query, "select * from sage where "); for(nm=nmList;nm!=NULL;nm=nm->next) { if (count++) { sqlDyStringPrintf(query," or uni=%s ", nm->name ); } else { sqlDyStringPrintf(query," uni=%s ", nm->name); } } sr = sqlGetResult(sc,query->string); while((row = sqlNextRow(sr)) != NULL) { sg = sageLoad(row); slAddHead(&sgList,sg); } sqlFreeResult(&sr); sqlDisconnect(&sc); slReverse(&sgList); freeDyString(&query); return sgList; }
static void keggLink(struct pathwayLink *pl, struct sqlConnection *conn, char *geneId) /* Print out kegg database link. */ { char query[512], **row; struct sqlResult *sr; if (isRgdGene(conn)) { sqlSafef(query, sizeof(query), "select distinct k.locusID, k.mapID, keggMapDesc.description" " from rgdGene2KeggPathway k, keggMapDesc, rgdGene2 x" " where k.rgdId=x.name " " and x.name='%s'" " and k.mapID = keggMapDesc.mapID" , geneId); } else { sqlSafef(query, sizeof(query), "select k.locusID, k.mapID, keggMapDesc.description" " from keggPathway k, keggMapDesc, kgXref x" " where k.kgID=x.kgId " " and x.kgID='%s'" " and k.mapID = keggMapDesc.mapID" , geneId); } sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { hPrintf("<A HREF=\"http://www.genome.ad.jp/kegg-bin/show_pathway?%s+%s\" TARGET=_blank>", row[1], row[0]); hPrintf("%s</A> - %s<BR>", row[1], row[2]); } sqlFreeResult(&sr); }
void checkExceptions() { struct hashEl *hel= NULL; struct coords *cel = NULL; char *name; char query[512]; struct sqlConnection *conn = hAllocConn(); struct sqlResult *sr; char **row; boolean matchFound = FALSE; char *chrom; int start = 0; int end = 0; verbose(1, "checking exceptions...\n"); safef(query, sizeof(query), "select name, chrom, chromStart, chromEnd from snp125Exceptions"); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { matchFound = FALSE; name = cloneString(row[0]); chrom = cloneString(row[1]); start = sqlUnsigned(row[2]); end = sqlUnsigned(row[3]); for (hel = hashLookup(coordHash, name); hel != NULL; hel= hashLookupNext(hel)) { cel = (struct coords *)hel->val; if (sameString(cel->chrom, chrom) && cel->start == start && cel->end == end) { matchFound = TRUE; break; } } if (!matchFound) verbose(1, "no match found for %s at %s:%d-%d\n", name, chrom, start, end); } }
void addFunction(char *chromName) /* Look up function for each row */ { char query[512]; struct sqlConnection *conn = hAllocConn(); struct sqlResult *sr; char **row; struct hashEl *el1; FILE *f; char fileName[64]; char tableName[64]; safef(tableName, ArraySize(tableName), "%s_snpTmp", chromName); if (!hTableExists(tableName)) return; safef(fileName, ArraySize(fileName), "%s_snpTmp.tab", chromName); f = mustOpen(fileName, "w"); sqlSafef(query, sizeof(query), "select snp_id, chromStart, chromEnd, loc_type, class, orientation, " "allele, refUCSC, refUCSCReverseComp, observed, weight from %s", tableName); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { fprintf(f, "%s\t%s\t%s\t%s\t%s\t%s\t", row[0], row[1], row[2], row[3], row[4], row[5]); el1 = hashLookup(functionHash,row[0]); if (el1 == NULL) fprintf(f, "unknown\t"); else fprintf(f, "%s\t", (char *)el1->val); fprintf(f, "%s\t%s\t%s\t%s\t%s\n", row[6], row[7], row[8], row[9], row[10]); } sqlFreeResult(&sr); hFreeConn(&conn); carefulClose(&f); }
/* load a set of mafFrames from the database */ struct mafFrames *getFrames(char *geneName, char *frameTable, char *org) { struct sqlConnection *conn = hAllocConn(); struct mafFrames *list = NULL; char query[1024]; struct sqlResult *sr = NULL; char **row; sqlSafef(query, sizeof query, "select * from %s where src='%s' and name='%s' \n", frameTable, org, geneName); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { struct mafFrames *frame; if (newTableType) frame = mafFramesLoad(&row[1]); else frame = mafFramesLoadOld(&row[1]); slAddHead(&list, frame); } if (list == NULL) errAbort("no frames for gene %s in %s with org %s \n",geneName, frameTable, org); slReverse(&list); sqlFreeResult(&sr); hFreeConn(&conn); return list; }
static struct hash *accessControlInit(struct sqlConnection *conn) /* Return a hash associating restricted table/track names in the given db/conn * with virtual hosts, or NULL if there is no tableAccessControl table and no * forbiddenTrackList (see getFullTrackList). */ { struct hash *acHash = NULL; if (sqlTableExists(conn, "tableAccessControl")) { struct sqlResult *sr = NULL; char **row = NULL; acHash = newHash(0); sr = sqlGetResult(conn, "NOSQLINJ select name,host from tableAccessControl"); while ((row = sqlNextRow(sr)) != NULL) hashAddSlName(acHash, row[0], chopAtFirstDot(row[1])); sqlFreeResult(&sr); } if (forbiddenTrackList != NULL) { if (acHash == NULL) acHash = newHash(0); struct trackDb *tdb; for (tdb = forbiddenTrackList; tdb != NULL; tdb = tdb->next) { char *tbOff = cloneString(trackDbSetting(tdb, "tableBrowser")); if (isEmpty(tbOff)) errAbort("bug: tdb for %s is in forbiddenTrackList without 'tableBrowser off' setting", tdb->track); hashAddSlName(acHash, tdb->table, "-"); // skip "off" and look for additional table names: nextWord(&tbOff); char *tbl; while ((tbl = nextWord(&tbOff)) != NULL) hashAddSlName(acHash, tbl, "-"); } } return acHash; }
static char * getConservationTrackName( struct sqlConnection *conn) { struct slName *dbList = hTrackDbList(); struct slName *dbl = dbList; char *ret = NULL; for(; dbl; dbl = dbl->next) { char query[512]; sqlSafef(query, sizeof query, "select tableName from %s where shortLabel='Conservation'", dbl->name); struct sqlResult *sr = sqlGetResult(conn, query); char **row; struct slName *tableList = NULL; while ((row = sqlNextRow(sr)) != NULL) { struct slName *name = newSlName(row[0]); slAddHead(&tableList, name); } sqlFreeResult(&sr); struct slName *l = tableList; for(; l; l = l->next) if (sqlTableExists(conn, l->name)) ret = cloneString(l->name); slFreeList(&tableList); if (ret != NULL) break; } slFreeList(&dbList); return ret; }
void processSnps(char *chromName) /* read through all rows in snpTmp */ /* look up molType */ /* write to output file */ { char query[512]; struct sqlConnection *conn = hAllocConn(); struct sqlResult *sr; char **row; char tableName[64]; char fileName[64]; FILE *f; char *molType = NULL; safef(tableName, ArraySize(tableName), "%s_snpTmp", chromName); safef(fileName, ArraySize(fileName), "%s_snpTmp.tab", chromName); f = mustOpen(fileName, "w"); safef(query, sizeof(query), "select snp_id, chromStart, chromEnd, loc_type, class, orientation, fxn_class, " "validation_status, avHet, avHetSE, allele, refUCSC, refUCSCReverseComp, observed, weight from %s ", tableName); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { molType = getMoltype(row[0], chromName); if (molType == NULL) molType = cloneString("unknown"); fprintf(f, "%s\t%s\t%s\t%s\t%s\t%s\t", row[0], row[1], row[2], row[3], row[4], row[5]); fprintf(f, "%s\t", molType); fprintf(f, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14]); } sqlFreeResult(&sr); hFreeConn(&conn); carefulClose(&f); }
char *getGeneName(char *ucName) { struct sqlConnection *conn = hAllocConn(); char query[1024]; struct sqlResult *sr = NULL; char **row; sqlSafef(query, sizeof query, "select geneSymbol from kgXref where kgID='%s'\n", ucName); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) { hFreeConn(&conn); return NULL; } safef(geneNameBuffer, sizeof geneNameBuffer, "%s", row[0]); sqlFreeResult(&sr); hFreeConn(&conn); spaceToUnderbar(geneNameBuffer); return geneNameBuffer; }
void intronSizes(char *database, char *table) /* intronSizes - Output list of intron sizes.. */ { struct dyString *query = newDyString(1024); struct sqlConnection *conn; struct sqlResult *sr; char **row; struct genePred *gp; int rowOffset; struct bed *bedList = NULL, *bed = NULL; hSetDb(database); rowOffset = hOffsetPastBin(NULL, table); conn = hAllocConn(database); sqlDyStringPrintf(query, "select * from %s", table); if (chromName != NULL) dyStringPrintf(query, " where chrom = '%s'", chromName); if (cgiBoolean("withUtr")) { dyStringPrintf(query, " %s txStart != cdsStart", (chromName == NULL ? "where" : "and")); } sr = sqlGetResult(conn, query->string); while ((row = sqlNextRow(sr)) != NULL) { gp = genePredLoad(row+rowOffset); genePredIntrons(gp, &bedList); slReverse(&bedList); for (bed = bedList ; bed != NULL ; bed=bed->next) bedTabOutN(bed,6, stdout); bedFreeList(&bedList); genePredFree(&gp); } sqlFreeResult(&sr); hFreeConn(&conn); }
void showListOfFilterValues(struct column *col, struct sqlConnection *conn) /* Print out list of values availabe for filter. */ { struct sqlResult *sr; char **row; char query[256]; struct slName *list=NULL, *el; sqlSafef(query, sizeof(query), "select distinct %s from gisaidSubjInfo", col->name); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { char *val = row[0]; if (col->remap) val = hashFindVal(col->remap,val); slNameAddHead(&list, val); } sqlFreeResult(&sr); slNameSort(&list); hPrintf("<BR>\n"); hPrintf("<B>Available Values:</B><BR>\n"); hPrintf("<TABLE>\n"); for (el = list; el; el = el->next) { hPrintf("<TR><TD>%s</TD></TR>\n", el->name); } hPrintf("</TABLE>\n"); slFreeList(&list); }
void somePsls(char *database, char *table, char *inList, char *outPsl) /* somePsls - Get some psls from database. */ { char *words[1], **row; FILE *f = mustOpen(outPsl, "w"); struct lineFile *lf = lineFileOpen(inList, TRUE); int count = 0, found = 0; char query[256]; struct psl *psl; struct sqlConnection *conn = sqlConnect(database); struct sqlResult *sr; while (lineFileRow(lf, words)) { sqlSafef(query, sizeof query, "select * from %s where qName = '%s'", table, words[0]); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { psl = pslLoad(row+1); pslTabOut(psl, f); pslFree(&psl); } sqlFreeResult(&sr); } }
struct genePred *readGenes(char *chrom) /* Slurp in the genes for one chrom */ { struct genePred *list=NULL, *el; char query[512]; struct sqlConnection *conn = hAllocConn(); struct sqlResult *sr; char **row; int count = 0; sqlSafef(query, sizeof(query), "select * from %s where chrom='%s' ", geneTable, chrom); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { el = genePredLoad(row); slAddHead(&list,el); count++; } sqlFreeResult(&sr); hFreeConn(&conn); slReverse(&list); /* could possibly skip if it made much difference in speed. */ verbose(1, "Count of genes found = %d\n", count); return list; }
static struct hgFindSpec *loadFindSpecsTbl(char *db, char *tblSpec, char *where) /* Load find specs for the given where and a given tblSpec. where can be * NULL. */ { struct hgFindSpec *hfsList = NULL; char *tbl; struct sqlConnection *conn = hAllocConnProfileTbl(db, tblSpec, &tbl); char query[512]; if (where != NULL) sqlSafef(query, sizeof(query), "select * from %s where %s", tbl, where); else sqlSafef(query, sizeof(query), "select * from %s", tbl); struct sqlResult *sr = sqlGetResult(conn, query); char **row = NULL; while ((row = sqlNextRow(sr)) != NULL) { struct hgFindSpec *hfs = hgFindSpecLoad(row); if (!haveSpecAlready(hfsList, hfs)) slAddHead(&hfsList, hfs); } sqlFreeResult(&sr); hFreeConn(&conn); return(hfsList); }
void getTestRegion(char *db, char region[256], int regionSize) /* Look up first chromosome in database and grab five million bases * from the middle of it. */ { struct sqlConnection *conn = sqlConnect(db); struct sqlResult *sr = sqlGetResult(conn, "NOSQLINJ select * from chromInfo limit 1"); char **row; struct chromInfo ci; int start,end,middle; if ((row = sqlNextRow(sr)) == NULL) errAbort("Couldn't get one row from chromInfo"); chromInfoStaticLoad(row, &ci); middle = ci.size/2; start = middle-2500000; end = middle+2500000; if (start < 0) start = 0; if (end > ci.size) end = ci.size; safef(region, regionSize, "%s:%d-%d", ci.chrom, start+1, end); verbose(1, "Testing %s at position %s\n", db, region); fprintf(logFile, "Testing %s at position %s\n", db, region); sqlFreeResult(&sr); sqlDisconnect(&conn); }
struct snpExceptions *getExceptionList(char *db, int inputExceptionId) /* Get list of all exceptions to be tested. */ { struct sqlConnection *conn = hAllocConn(db); struct sqlResult *sr = NULL; char **row = NULL; struct snpExceptions *list = NULL; struct snpExceptions *el = NULL; char query[256] = NOSQLINJ "select * from snpExceptions"; if (inputExceptionId>0) sqlSafef(query, sizeof(query), "select * from snpExceptions where exceptionId=%d", inputExceptionId); sr = sqlGetResult(conn, query); while ((row=sqlNextRow(sr))!=NULL) { el = snpExceptionsLoad(row); slAddHead(&list, el); } slReverse(&list); sqlFreeResult(&sr); hFreeConn(&conn); return list; }
static struct psl *loadPslRangeT(char *table, char *qName, char *tName, int tStart, int tEnd) /* Load a list of psls given qName tName tStart tEnd */ { struct sqlResult *sr = NULL; char **row; struct psl *psl = NULL, *pslList = NULL; boolean hasBin; char splitTable[64]; char query[256]; struct sqlConnection *conn = hAllocConn(database); hFindSplitTable(database, seqName, table, splitTable, &hasBin); sqlSafef(query, sizeof(query), "select * from %s where qName = '%s' and tName = '%s' and tEnd > %d and tStart < %d", splitTable, qName, tName, tStart, tEnd); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { psl = pslLoad(row+hasBin); slAddHead(&pslList, psl); } sqlFreeResult(&sr); slReverse(&pslList); hFreeConn(&conn); return pslList; }
struct hash *ensProtToTrans(char *database) /* Use ensGtp table to create hash keyed by protein and * returning transcript values. */ { char *table = "ensGtp"; struct sqlConnection *conn = sqlConnect(database); char query[256], **row; struct sqlResult *sr; struct hash *hash = newHash(16); if (!sqlTableExists(conn, table)) errAbort("No %s table, need to build that first", table); sqlSafef(query, sizeof(query), "select protein,transcript from %s", table); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { chopSuffix(row[0]); chopSuffix(row[1]); hashAdd(hash, row[0], cloneString(row[1])); } sqlFreeResult(&sr); sqlDisconnect(&conn); return hash; }
static void printGeneSymbol (char *geneId, char *table, char *idCol, struct sqlConnection *conn) /* Print out official Entrez gene symbol from a cross-reference table.*/ { char query[256]; struct sqlResult *sr = NULL; char **row; char *geneSymbol; if (sqlTablesExist(conn, table)) { hPrintf("<B>Entrez Gene Official Symbol:</B> "); safef(query, sizeof(query), "select geneSymbol from %s where %s = '%s'", table, idCol, geneId); sr = sqlGetResult(conn, query); if (sr != NULL) { row = sqlNextRow(sr); geneSymbol = cloneString(row[0]); if (!sameString(geneSymbol, "")) hPrintf("%s<BR>", geneSymbol); } } sqlFreeResult(&sr); }
struct galleryEntry *galleryFetch() /* Return an slList of gallery entries fetched from hgcentral */ { struct sqlConnection *conn = hConnectCentral(); struct sqlResult *sr = NULL; struct galleryEntry *gal, *galList = NULL; char otherConstraints[80] = "", query[2048], **row; sqlSafef (query, sizeof(query), "select m.realName, s.userName, m.idx, s.sessionName, s.useCount, s.settings, s.contents, s.firstUse from " "%s s left join gbMembers m on m.userName = s.userName where shared = 2%s limit 30" , namedSessionTable, otherConstraints); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { gal = galLoad(row); slAddHead (&galList, gal); } sqlFreeResult(&sr); hDisconnectCentral(&conn); return galList; }
struct chain *chainDbLoad(char *db, struct sqlConnection *conn, char *track, char *chrom, int id) /** Load chain. */ { char table[HDB_MAX_TABLE_STRING]; char query[256]; struct sqlResult *sr; char **row; int rowOffset; struct chain *chain = NULL; if (!hFindSplitTable(db, chrom, track, table, sizeof table, &rowOffset)) errAbort("No %s track in database", track); sqlSafef(query, sizeof(query), "select * from %s where id = %d", table, id); sr = sqlGetResult(conn, query); row = sqlNextRow(sr); if (row == NULL) errAbort("Can't find %d in %s", id, table); chain = chainHeadLoad(row + rowOffset); sqlFreeResult(&sr); chainDbAddBlocks(chain, track, conn); return chain; }
static void addXrefIdsToHash(struct sqlConnection *conn, struct hash *hash, char *idField, char *xrefTable, char *xrefIdField, char *aliasField, struct lm *lm, char *extraWhere) /* Query all id-alias pairs from xrefTable (where id actually appears * in curTable) and hash alias -> id. Convert alias to upper case for * case-insensitive matching. * Ignore self (alias = id) mappings -- we already got those above. */ { struct sqlResult *sr; char **row; struct dyString *query = dyStringNew(0); if (sameString(xrefTable, curTable)) sqlDyStringPrintf(query, "select %s,%s from %s", aliasField, xrefIdField, xrefTable); else /* Get only the aliases for items actually in curTable.idField: */ sqlDyStringPrintf(query, "select %s.%s,%s.%s from %s,%s where %s.%s = %s.%s", xrefTable, aliasField, xrefTable, xrefIdField, xrefTable, curTable, xrefTable, xrefIdField, curTable, idField); if (extraWhere != NULL) // extraWhere begins w/ID field of curTable=xrefTable. Skip that field name and // use "xrefTable.aliasField" with the IN (...) condition that follows: sqlDyStringPrintf(query, " %s %s.%s %-s", (sameString(xrefTable, curTable) ? "where" : "and"), xrefTable, aliasField, skipToSpaces(extraWhere)); sr = sqlGetResult(conn, query->string); while ((row = sqlNextRow(sr)) != NULL) { if (sameString(row[0], row[1])) continue; touppers(row[0]); hashAdd(hash, row[0], lmCloneString(lm, row[1])); } sqlFreeResult(&sr); }
struct syntenyBerk *syntenyBerkLoadWhere(struct sqlConnection *conn, char *table, char *where) /* Load all syntenyBerk from table that satisfy where clause. The * where clause may be NULL in which case whole table is loaded * Dispose of this with syntenyBerkFreeList(). */ { struct syntenyBerk *list = NULL, *el; struct dyString *query = dyStringNew(256); struct sqlResult *sr; char **row; sqlDyStringPrintf(query, "select * from %s", table); if (where != NULL) dyStringPrintf(query, " where %s", where); sr = sqlGetResult(conn, query->string); while ((row = sqlNextRow(sr)) != NULL) { el = syntenyBerkLoad(row); slAddHead(&list, el); } slReverse(&list); sqlFreeResult(&sr); dyStringFree(&query); return list; }
struct snpSimple *readSnps() /* Slurp in the snpSimple rows */ { struct snpSimple *list=NULL, *el; char query[512]; struct sqlConnection *conn = hAllocConn(); struct sqlResult *sr; char **row; int count = 0; verbose(1, "reading in from %s...\n", affyTable); sqlSafef(query, sizeof(query), "select name, chrom, chromStart, chromEnd, strand, observed from %s ", affyTable); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { count++; el = snpSimpleLoad(row); slAddHead(&list,el); } sqlFreeResult(&sr); hFreeConn(&conn); slReverse(&list); /* could possibly skip if it made much difference in speed. */ return list; }
static void getRepeats(struct sqlConnection *conn, struct hash *arHash, char *chrom, struct rbTree **retAllRepeats, struct rbTree **retNewRepeats) /* Return a tree of ranges for sequence gaps in chromosome */ { char *db = sqlGetDatabase(conn); struct sqlResult *sr; char **row; struct rbTree *allTree = rbTreeNew(simpleRangeCmp); struct rbTree *newTree = rbTreeNew(simpleRangeCmp); char tableName[64]; char query[256]; boolean splitRmsk = TRUE; struct simpleRange *prevRange = NULL, *prevNewRange = NULL; safef(tableName, sizeof(tableName), "%s_rmsk", chrom); if (! sqlTableExists(conn, tableName)) { safef(tableName, sizeof(tableName), "rmsk"); if (! sqlTableExists(conn, tableName)) errAbort("Can't find rmsk table for %s (%s.%s_rmsk or %s.rmsk)\n", chrom, db, chrom, db); splitRmsk = FALSE; } if (splitRmsk) sqlSafef(query, sizeof query, "select genoStart,genoEnd,repName,repClass,repFamily from %s", tableName); else sqlSafef(query, sizeof query, "select genoStart,genoEnd,repName,repClass,repFamily from %s " "where genoName = \"%s\"", tableName, chrom); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { struct simpleRange *range; char arKey[512]; lmAllocVar(allTree->lm, range); range->start = sqlUnsigned(row[0]); range->end = sqlUnsigned(row[1]); if (prevRange == NULL) prevRange = range; else if (overlap(range, prevRange)) { /* merge r into prevR & discard; prevR gets passed forward. */ if (range->end > prevRange->end) prevRange->end = range->end; if (range->start < prevRange->start) prevRange->start = range->start; } else { rbTreeAdd(allTree, prevRange); prevRange = range; } sprintf(arKey, "%s.%s.%s", row[2], row[3], row[4]); if (arHash != NULL && hashLookup(arHash, arKey)) { lmAllocVar(newTree->lm, range); range->start = sqlUnsigned(row[0]); range->end = sqlUnsigned(row[1]); if (prevNewRange == NULL) prevNewRange = range; else if (overlap(range, prevNewRange)) { /* merge r into prevR & discard; prevR gets passed forward. */ if (range->end > prevNewRange->end) prevNewRange->end = range->end; if (range->start < prevNewRange->start) prevNewRange->start = range->start; } else { rbTreeAdd(allTree, prevNewRange); prevNewRange = range; } } } if (prevRange != NULL) rbTreeAdd(allTree, prevRange); if (prevNewRange != NULL) rbTreeAdd(newTree, prevNewRange); sqlFreeResult(&sr); *retAllRepeats = allTree; *retNewRepeats = newTree; }