struct sqlConnection *sqlWarnConnect(char *db) /* Connect to database, or warn and return NULL. */ { struct sqlConnection *conn = sqlMayConnect(db); if (conn == NULL) warn("Error: Couldn't connect to database %s", db); return conn; }
static boolean isInMBLabValidDb(char *acc) /* check if an accession is in the Brent lab validation database */ { boolean inMBLabValidDb = FALSE; struct sqlConnection *fconn = sqlMayConnect("hgFixed"); if ((fconn != NULL) && sqlTableExists(fconn, "mgcMBLabValid")) { char query[64], buf[32]; sqlSafef(query, sizeof(query), "select acc from mgcMBLabValid where acc=\"%s\"", acc); if (sqlQuickQuery(fconn, query, buf, sizeof(buf)) != NULL) inMBLabValidDb = TRUE; sqlDisconnect(&fconn); } return inMBLabValidDb; }
void joinerCheckTableCoverage(struct joiner *joiner, char *specificDb) /* Check that all tables either are part of an identifier or * are in the tablesIgnored statements. */ { struct slName *miss, *missList = NULL; struct hashEl *dbList, *db; dbList = hashElListHash(joiner->databasesChecked); for (db = dbList; db != NULL; db = db->next) { if (specificDb == NULL || sameString(db->name, specificDb)) { struct sqlConnection *conn = sqlMayConnect(db->name); if (conn == NULL) warn("Error: database %s doesn't exist", db->name); else { struct slName *table; struct slName *tableList = sqlListTables(conn); struct hash *hash = getCoveredTables(joiner, db->name, conn); for (table = tableList; table != NULL; table = table->next) { if (!hashLookup(hash, table->name)) { char fullName[256]; safef(fullName, sizeof(fullName), "%s.%s", db->name, table->name); miss = slNameNew(fullName); slAddHead(&missList, miss); } else verbose(2,"tableCovered: '%s'\n", table->name); } slFreeList(&tableList); freeHash(&hash); reportErrorList(&missList, "tables not in .joiner file"); } sqlDisconnect(&conn); } } slFreeList(&dbList); }
char *uniProtFindPrimAcc(char *id) /* Return primary accession given an alias. */ /* The alias could be an accession number, display ID, old display ID, etc. * NULL if not found. */ { static struct sqlConnection *conn=NULL; char *acc; char query[256]; if (conn==NULL) { conn = sqlMayConnect(PROTEOME_DB_NAME); if (conn == NULL) return NULL; } safef(query, sizeof(query), "select acc from uniProtAlias where alias = '%s'", id); acc = sqlQuickString(conn, query); return(acc); }
void joinerCheckDependencies(struct joiner *joiner, char *specificDb) /* Check time stamps on dependent tables. */ { struct hashEl *db, *dbList = hashElListHash(joiner->databasesChecked); for (db = dbList; db != NULL; db = db->next) { if (specificDb == NULL || sameString(specificDb, db->name)) { struct sqlConnection *conn = sqlMayConnect(db->name); if (conn != NULL) /* We've already warned on this NULL */ { struct joinerDependency *dep; for (dep = joiner->dependencyList; dep != NULL; dep = dep->next) { checkOneDependency(joiner, dep, conn, db->name); } sqlDisconnect(&conn); } } } slFreeList(&dbList); }
char *uniProtFindPrimAccFromGene(char *gene, char *db) /* Return primary accession given gene name. * NULL if not found. */ { static struct sqlConnection *conn=NULL; char *acc = NULL; char query[256]; char *pdb = cloneString(UNIPROT_DB_NAME); char *geneTable = "gene"; if (conn==NULL) { conn = sqlMayConnect(pdb); if (conn == NULL) return NULL; } if (geneTable != NULL && sqlTableExists(conn,geneTable)) { sqlSafef(query, sizeof(query), "select g.acc from %s g , accToTaxon a, taxon t where val = '%s' and g.acc = a.acc and id = a.taxon and binomial = '%s' ",geneTable, gene, hGenome(db)); acc = sqlQuickString(conn, query); } return(acc); }
void doKeyChecks(char *db, struct joiner *joiner, struct joinerSet *js, struct hash *keyHash, struct keyHitInfo *khiList, struct joinerField *keyField, struct joinerField *jf) /* Check that at least minimum is covered, and that full and * unique tags are respected. */ { struct sqlConnection *conn = sqlMayConnect(db); if (conn != NULL) { boolean okFlag = FALSE; int total = 0, hits = 0, hitsNeeded; char *miss = NULL; struct slName *table; struct slName *tableList = getTablesForField(conn,jf->splitPrefix, jf->table, jf->splitSuffix); keyHitInfoClear(khiList); for (table = tableList; table != NULL; table = table->next) { char query[256], **row; struct sqlResult *sr; safef(query, sizeof(query), "select %s from %s", jf->field, table->name); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { if (jf->separator == NULL) { addHitMiss(keyHash, row[0], jf, &hits, &miss, &total); } else { /* Do list. */ struct slName *el, *list; int ix; list = slNameListFromString(row[0], jf->separator[0]); for (el = list, ix=0; el != NULL; el = el->next, ++ix) { char *id = el->name; char buf[16]; if (jf->indexOf) { safef(buf, sizeof(buf), "%d", ix); id = buf; } addHitMiss(keyHash, id, jf, &hits, &miss, &total); } slFreeList(&list); } } sqlFreeResult(&sr); } if (tableList != NULL) { okFlag = FALSE; if (hits==total) okFlag = TRUE; if (jf->minCheck < 0.999999) /* Control for rounding error */ hitsNeeded = round(total * jf->minCheck); else hitsNeeded = total; if (jf->minCheck < 1.0 && hits >= hitsNeeded) okFlag = TRUE; verbose(1, " %s.%s.%s - hits %d of %d%s\n", db, jf->table, jf->field, hits, total, okFlag ? " ok" : js->isFuzzy ? " fuzzy" : ""); if (hits < hitsNeeded && !js->isFuzzy) { warn("Error: %d of %d elements of %s.%s.%s are not in key %s.%s line %d of %s\n" "Example miss: %s" , total - hits, total, db, jf->table, jf->field , keyField->table, keyField->field , jf->lineIx, joiner->fileName, miss); } if (jf->unique || jf->full) checkUniqueAndFull(joiner, js, db, jf, keyField, khiList); } freez(&miss); slFreeList(&tableList); sqlDisconnect(&conn); } }