void saveExpsTable(struct expRecord *records) /* Create the Exps table. */ { struct expRecord *cur; struct sqlConnection *conn = sqlConnect(database); char expTableName[100]; safef(expTableName, sizeof(expTableName), "%sExps", table); expRecordCreateTable(conn, expTableName); for (cur = records; cur != NULL; cur = cur->next) expRecordSaveToDb(conn, cur, expTableName, 2048); sqlDisconnect(&conn); }
int lineToExpTable(char *line, char *table) /* Create expression format table from line. */ { FILE *f = hgCreateTabFile(tabDir, table); int count = lineToExp(line, f); if (doLoad) { struct sqlConnection *conn = sqlConnect(database); expRecordCreateTable(conn, table); hgLoadTabFile(conn, tabDir, table, &f); hgRemoveTabFile(tabDir, table); sqlDisconnect(&conn); } return count; }
void makeNewExpTable(char *oldTable, struct maMedSpec *medList, char *newTable) /* Create new expTable in hgFixed that is very similar * to oldExpTable, but with rows defined by medList. */ { struct maMedSpec *med; struct expRecord *oldExp, newExp; struct sqlConnection *conn = sqlConnect("hgFixed"); FILE *f = hgCreateTabFile(tabDir, newTable); char query[256], **row; struct sqlResult *sr; int curId = 0; for (med = medList; med != NULL; med = med->next) { /* Load expression record from old table of first * thing in median. */ sqlSafef(query, sizeof(query), "select * from %s where id = %d", oldTable, med->ids[0]); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) errAbort("Can't find id %d in %s\n", med->ids[0], oldTable); oldExp = expRecordLoad(row); sqlFreeResult(&sr); if (oldExp->numExtras < 3) errAbort("Can only deal with old tables with 3 extras or more"); /* Create new expression record, mostly just a shallow copy of old. */ newExp = *oldExp; newExp.id = curId; ++curId; newExp.name = newExp.description = med->name; newExp.extras[2] = med->group; /* Save new one, free old one. */ expRecordTabOut(&newExp, f); expRecordFree(&oldExp); } if (doLoad) { expRecordCreateTable(conn, newTable); hgLoadTabFile(conn, tabDir, newTable, &f); hgRemoveTabFile(tabDir, newTable); } sqlDisconnect(&conn); }
struct hash *makeExpsTable(char *database, char *expTable, char *expFile, int *expCount) /* Open experiment file and use it to create experiment table. Use optional fields if present, otherwise defaults. Return a hash of expId's, keyed by name */ { struct lineFile *lf = lineFileOpen(expFile, TRUE); FILE *f = hgCreateTabFile(tabDir, expTable); int expId = 0; char *words[6]; int wordCt; struct hash *expHash = newHash(0); while ((wordCt = lineFileChopNext(lf, words, ArraySize(words)))) { char *name = words[0]; hashAddInt(expHash, name, expId); fprintf(f, "%d\t%s\t", expId++, name); fprintf(f, "%s\t", wordCt > 1 ? words[1] : name); fprintf(f, "%s\t", wordCt > 2 ? words[2] : expUrl); fprintf(f, "%s\t", wordCt > 3 ? words[3] : expRef); fprintf(f, "%s\t", wordCt > 4 ? words[4] : expCredit); fprintf(f, "0\n"); /* extras */ } if (expId <= 0) errAbort("No experiments in %s", lf->fileName); verbose(2, "%d experiments\n", expId); if (doLoad) { struct sqlConnection *conn = sqlConnect(database); expRecordCreateTable(conn, expTable); hgLoadTabFile(conn, tabDir, expTable, &f); sqlDisconnect(&conn); } lineFileClose(&lf); if (expCount) *expCount = expId; return expHash; }