533112afe2a2005e80cdb1f82904ea65032d4302
braney
  Sat Oct 2 11:37:34 2021 -0700
split hg/lib into two separate libaries, one only used by the cgis

diff --git src/hg/lib/visiGene.c src/hg/lib/visiGene.c
deleted file mode 100644
index ab836b0..0000000
--- src/hg/lib/visiGene.c
+++ /dev/null
@@ -1,766 +0,0 @@
-/* visiGene.c  - Interface to visiGene database. */
-
-/* Copyright (C) 2014 The Regents of the University of California 
- * See README in this or parent directory for licensing information. */
-
-#include "common.h"
-#include "hash.h"
-#include "dystring.h"
-#include "jksql.h"
-#include "visiGene.h"
-
-
-static char *cloneOrNull(char *s)
-/* Return copy of string, or NULL if it is empty */
-{
-if (s == NULL || s[0] == 0)
-    return NULL;
-return cloneString(s);
-}
-
-int visiGeneImageFile(struct sqlConnection *conn, int id)
-/* Return image file ID associated with image ID.  A file
- * con contain multiple images. */
-{
-char query[256];
-sqlSafef(query, sizeof(query), "select imageFile from image where id=%d",
-	id);
-return sqlQuickNum(conn, query);
-}
-
-struct slInt *visiGeneImagesForFile(struct sqlConnection *conn, 
-	int imageFile)
-/* Given image file ID, return list of all associated image IDs. */
-{
-char query[256], **row;
-struct sqlResult *sr;
-struct slInt *el, *list = NULL;
-sqlSafef(query, sizeof(query), 
-	"select id from image where imageFile = %d "
-	"order by paneLabel"
-	, imageFile);
-sr = sqlGetResult(conn, query);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    el = slIntNew(sqlUnsigned(row[0]));
-    slAddHead(&list, el);
-    }
-sqlFreeResult(&sr);
-slReverse(&list);
-return list;
-}
-
-char *visiGenePaneLabel(struct sqlConnection *conn, int id)
-/* Return label for pane of this image in file if any, NULL if none.
- * FreeMem this when done. */
-{
-char query[256];
-char *label;
-sqlSafef(query, sizeof(query),
-    "select paneLabel from image where id=%d", id);
-label = sqlQuickString(conn, query);
-if (label != NULL && label[0] == 0)
-    freez(&label);
-return label;
-}
-
-boolean visiGeneImageSize(struct sqlConnection *conn, int id, int *imageWidth, int *imageHeight)
-/* Get width and height of image with given id. 
- * Return FALSE with warning if not found. */
-{
-char query[256];
-struct sqlResult *sr;
-char **row;
-boolean result = FALSE;
-sqlSafef(query, sizeof(query), 
-	"select imageFile.imageWidth, imageFile.imageHeight from image,imageFile"
-	" where image.id = %d and image.imageFile = imageFile.id "
-	, id);
-sr = sqlGetResult(conn, query);
-if ((row = sqlNextRow(sr)) == NULL)
-    {
-    warn("No image of id %d", id);
-    }
-else    
-    {    
-    *imageWidth = atoi(row[0]);
-    *imageHeight = atoi(row[1]);
-    result = TRUE;
-    }    
-sqlFreeResult(&sr);
-return result;
-}
-
-static char *somePath(struct sqlConnection *conn, int id, char *locationField)
-/* Fill in path based on given location field */
-{
-char query[256], path[PATH_LEN];
-struct sqlResult *sr;
-char **row;
-sqlSafef(query, sizeof(query), 
-	"select fileLocation.name,imageFile.fileName from image,imageFile,fileLocation"
-	" where image.id = %d and image.imageFile = imageFile.id "
-	" and fileLocation.id=imageFile.%s", id, locationField);
-sr = sqlGetResult(conn, query);
-if ((row = sqlNextRow(sr)) == NULL)
-    errAbort("No image of id %d", id);
-safef(path, PATH_LEN, "%s/%s", row[0], row[1]);
-sqlFreeResult(&sr);
-return cloneString(path);
-}
-
-char *visiGeneFullSizePath(struct sqlConnection *conn, int id)
-/* Fill in path for full image visiGene of given id.  FreeMem
- * this when done */
-{
-return somePath(conn, id, "fullLocation");
-}
-
-char *visiGeneThumbSizePath(struct sqlConnection *conn, int id)
-/* Fill in path for thumbnail image (~200x200) visiGene of given id. 
- * FreeMem when done. */
-{
-return somePath(conn, id, "thumbLocation");
-}
-
-#define TIME_FORMAT_SIZE 32
-
-static void formatDays(double days, char out[TIME_FORMAT_SIZE])
-/* Write time in hours, days, weeks, or years depending on
- * what seems appropriate. */
-{
-if (days < 1.0)
-    safef(out, TIME_FORMAT_SIZE, "%3.1f hour", 24.0 * days);
-else if (days < 2*7.0)
-    safef(out, TIME_FORMAT_SIZE, "%3.1f day", days);
-else if (days < 2*30.0)
-    safef(out, TIME_FORMAT_SIZE, "%3.1f week", days/7);
-else if (days < 2*365.0)
-    safef(out, TIME_FORMAT_SIZE, "%3.1f month", days/30);
-else 
-    safef(out, TIME_FORMAT_SIZE, "%3.1f year", days/365);
-}
-
-char *visiGeneOrganism(struct sqlConnection *conn, int id)
-/* Return binomial scientific name of organism associated with given image. 
- * FreeMem this when done. */
-{
-char query[256], buf[256];
-sqlSafef(query, sizeof(query),
-	"select uniProt.taxon.binomial from image,specimen,uniProt.taxon"
-         " where image.id = %d and"
-	 " image.specimen = specimen.id and"
-	 " specimen.taxon = uniProt.taxon.id",
-	 id);
-return cloneOrNull(sqlQuickQuery(conn, query, buf, sizeof(buf)));
-}
-
-char *visiGeneStage(struct sqlConnection *conn, int id, boolean doLong)
-/* Return string describing growth stage of organism.  The description
- * will be 5 or 6 characters wide if doLong is false, and about
- * 25-50 characters wide if it is true. FreeMem this when done. */
-{
-char query[256];
-double age;	/* Days since conception */
-int taxon;	/* Species id. */
-struct sqlResult *sr;
-char **row;
-double stageAge; /* Days since developmental milestone */
-char *stageName;	/* Name of stage. */
-char *stageLetter = "";	/* Letter for stage. */
-struct dyString *dy = dyStringNew(256);
-
-
-/* Figure out days since conception and species. */
-sqlSafef(query, sizeof(query),
-    "select specimen.age,genotype.taxon "
-    "from image,specimen,genotype "
-    "where image.id = %d "
-    "and image.specimen = specimen.id "
-    "and specimen.genotype = genotype.id"
-    , id);
-sr = sqlGetResult(conn, query);
-if ((row = sqlNextRow(sr)) == NULL)
-    internalErr();
-age = atof(row[0]);
-taxon = atoi(row[1]);
-sqlFreeResult(&sr);
-
-/* Try and look things up in lifeTime table, figuring
- * out stage name, age, and letter. */
-sqlSafef(query, sizeof(query),
-    "select birth,adult from lifeTime where taxon = %d", taxon);
-sr = sqlGetResult(conn, query);
-if ((row = sqlNextRow(sr)) != NULL)
-    {
-    double birth = atof(row[0]);
-    double adult = atof(row[1]);
-    if (age < birth)
-        {
-	stageName = "embryo";
-	stageAge = age;
-	stageLetter = "e";
-	}
-    else if (age < adult)
-        {
-	stageName = "pup";
-	stageAge = age - birth;
-	stageLetter = "p";
-	}
-    else
-        {
-	stageName = "adult";
-	stageAge = age - birth;
-	stageLetter = "p";
-	}
-    }
-else
-    {
-    stageName = "";
-    stageAge = age;
-    stageLetter = "";
-    }
-sqlFreeResult(&sr);
-
-/* Format output. */
-if (doLong)
-    {
-    char timeBuf[TIME_FORMAT_SIZE];
-    char *stageSchemeName = NULL;
-    int stageScheme = 0;
-    formatDays(stageAge, timeBuf);
-    dyStringPrintf(dy, "%s old %s", timeBuf, stageName);
-
-    /* See if have nice developmental staging scheme for this organism. */
-    sqlSafef(query, sizeof(query), 
-       "select id,name from lifeStageScheme where taxon = %d", taxon);
-    sr = sqlGetResult(conn, query);
-    if ((row = sqlNextRow(sr)) != NULL)
-        {
-	stageScheme = atoi(row[0]);
-	stageSchemeName = cloneString(row[1]);
-	}
-    sqlFreeResult(&sr);
-
-    /* Add developmental stage info. */
-    if (stageScheme != 0)
-        {
-	sqlSafef(query, sizeof(query),
-	    "select name from lifeStage "
-	    "where lifeStageScheme = %d and age <= %f "
-	    "order by age desc"
-	    , stageScheme, age + 0.00001);	/* Allow for some rounding error */
-	sr = sqlGetResult(conn, query);
-	if ((row = sqlNextRow(sr)) != NULL)
-	    dyStringPrintf(dy, " (%s %s)", stageSchemeName, row[0]);
-	sqlFreeResult(&sr);
-	}
-    freez(&stageSchemeName);
-    }
-else
-    {
-    if (stageLetter[0] == 'p')
-	dyStringPrintf(dy, "p%d", round(stageAge));
-    else
-	dyStringPrintf(dy, "%s%3.1f", stageLetter, stageAge);
-    }
-return dyStringCannibalize(&dy);
-}
-
-char *vgGeneNameFromId(struct sqlConnection *conn, int geneId)
-/* Return gene name associated with gene ID  - HUGO if possible, 
- * RefSeq/GenBank, etc if not. You can freeMem this when done.  */
-{
-struct sqlResult *sr;
-char *result = "";
-char **row;
-char query[256], buf[256];
-sqlSafef(query, sizeof(query),
-      "select name,locusLink,refSeq,genbank,uniProt from gene"
-      " where id = %d", geneId);
-sr = sqlGetResult(conn, query);
-if ((row = sqlNextRow(sr)) != NULL)
-    {
-    char *name = row[0];
-    char *locusLink = row[1];
-    char *refSeq = row[2];
-    char *genbank = row[3];
-    char *uniProt = row[4];
-    if (name[0] != 0)
-	result = name;
-    else if (refSeq[0] != 0)
-	result = refSeq;
-    else if (genbank[0] != 0)
-	result = genbank;
-    else if (uniProt[0] != 0)
-	result = uniProt;
-    else if (locusLink[0] != 0)
-	{
-	safef(buf, sizeof(buf), "Entrez Gene %s", locusLink);
-	result = buf;
-	}
-    }
-else
-    {
-    internalErr();
-    }
-result = cloneString(result);
-sqlFreeResult(&sr);
-return result;
-}
-
-struct slName *visiGeneGeneName(struct sqlConnection *conn, int id)
-/* Return list of gene names  - HUGO if possible, RefSeq/GenBank, etc if not. 
- * slNameFreeList this when done. */
-{
-struct slInt *geneList, *gene;
-struct slName *nameList = NULL, *name;
-char query[256];
-sqlSafef(query, sizeof(query), 
-    "select probe.gene from imageProbe,probe "
-    " where imageProbe.image = %d"
-    " and imageProbe.probe = probe.id", id);
-geneList = sqlQuickNumList(conn, query);
-for (gene = geneList; gene != NULL; gene = gene->next)
-    {
-    char *s = vgGeneNameFromId(conn, gene->val);
-    name = slNameNew(s);
-    slAddHead(&nameList, name);
-    freeMem(s);
-    }
-slFreeList(&geneList);
-slReverse(&nameList);
-return nameList;
-}
-
-static struct slName *extNamesForId(struct sqlConnection *conn, int id, 
-	char *field)
-/* Return list of external identifiers of type described in field
- * associated with image. */
-{
-struct slName *list = NULL, *el;
-struct sqlResult *sr;
-char **row;
-char query[256];
-sqlSafef(query, sizeof(query),
-      "select gene.%s from imageProbe,probe,gene"
-      " where imageProbe.image = %d"
-      " and imageProbe.probe = probe.id"
-      " and probe.gene = gene.id", field, id);
-sr = sqlGetResult(conn, query);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    el = slNameNew(row[0]);
-    slAddHead(&list, el);
-    }
-sqlFreeResult(&sr);
-slReverse(&list);
-return list;
-}
-
-struct slName *visiGeneRefSeq(struct sqlConnection *conn, int id)
-/* Return RefSeq accession or n/a if none available. 
- * slNameFreeList this when done. */
-{
-return extNamesForId(conn, id, "refSeq");
-}
-
-struct slName *visiGeneGenbank(struct sqlConnection *conn, int id)
-/* Return Genbank accession or n/a if none available. 
- * slNameFreeList this when done. */
-{
-return extNamesForId(conn, id, "genbank");
-}
-
-struct slName *visiGeneUniProt(struct sqlConnection *conn, int id)
-/* Return Genbank accession or n/a if none available. 
- * slNameFreeList this when done. */
-{
-return extNamesForId(conn, id, "uniProt");
-}
-
-char *visiGeneSubmitId(struct sqlConnection *conn, int id)
-/* Return submitId  for image.  (Internal id for data set)
- * FreeMem this when done. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select imageFile.submitId from image,imageFile "
-    "where image.id = %d and image.imageFile = imageFile.id", id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGeneBodyPart(struct sqlConnection *conn, int id)
-/* Return body part if any.  FreeMem this when done. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select bodyPart.name from image,specimen,bodyPart "
-    "where image.id = %d "
-    "and image.specimen = specimen.id "
-    "and specimen.bodyPart = bodyPart.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGeneSex(struct sqlConnection *conn, int id)
-/* Return sex if known.  FreeMem this when done. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select sex.name from image,specimen,sex "
-    "where image.id = %d "
-    "and image.specimen = specimen.id "
-    "and specimen.sex = sex.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGeneStrain(struct sqlConnection *conn, int id)
-/* Return strain of organism if any.  FreeMem this when done. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select strain.name from image,specimen,genotype,strain "
-    "where image.id = %d "
-    "and image.specimen = specimen.id "
-    "and specimen.genotype = genotype.id "
-    "and genotype.strain = strain.id"
-    , id);
-return sqlQuickNonemptyString(conn, query);
-}
-
-struct slName *visiGeneGenotypes(struct sqlConnection *conn, int id)
-/* Return list of genotypes.  A genotype is either "wild type"
- * or gene:allele.  slFreeList this when done. */
-{
-char query[256];
-char *genotypesComma = NULL;  /* comma-separated list of genotypes */
-struct slName *nameList = NULL;
-
-sqlSafef(query, sizeof(query),
-    "select genotype.alleles from image,specimen,genotype "
-    "where image.id = %d "
-    "and image.specimen = specimen.id "
-    "and specimen.genotype = genotype.id"
-    , id);
-genotypesComma = sqlQuickNonemptyString(conn, query);
-if (genotypesComma == NULL || genotypesComma[0] == 0)
-    {
-    freez(&genotypesComma);
-    genotypesComma = cloneString("wild type,");
-    }
-nameList = slNameListFromComma(genotypesComma);
-freez(&genotypesComma);
-return nameList;
-}
-
-
-char *visiGeneSliceType(struct sqlConnection *conn, int id)
-/* Return slice type if any.  FreeMem this when done. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select sliceType.name from image,preparation,sliceType "
-    "where image.id = %d "
-    "and image.preparation = preparation.id "
-    "and preparation.sliceType = sliceType.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGeneFixation(struct sqlConnection *conn, int id)
-/* Return fixation conditions if any.  FreeMem this when done.*/
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select fixation.description from image,preparation,fixation "
-    "where image.id = %d "
-    "and image.preparation = preparation.id "
-    "and preparation.fixation = fixation.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGeneEmbedding(struct sqlConnection *conn, int id)
-/* Return fixation conditions if any.  FreeMem this when done.*/
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select embedding.description from image,preparation,embedding "
-    "where image.id = %d "
-    "and image.preparation = preparation.id "
-    "and preparation.embedding = embedding.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGenePermeablization(struct sqlConnection *conn, int id)
-/* Return permeablization conditions if any.  FreeMem this when done.*/
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select permeablization.description from image,preparation,permeablization "
-    "where image.id = %d "
-    "and image.preparation = preparation.id "
-    "and preparation.permeablization = permeablization.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGeneCaption(struct sqlConnection *conn, int id)
-/* Return free text caption if any. FreeMem this when done. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select caption.caption from image,imageFile,caption "
-    "where image.id = %d "
-    "and image.imageFile = imageFile.id "
-    "and imageFile.caption = caption.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-static char *stringFieldInSubmissionSet(struct sqlConnection *conn, int id, 
-	char *field)
-/* Return some string field in submissionSet table when you have image id. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-     "select submissionSet.%s from image,imageFile,submissionSet"
-     " where image.id = %d"
-     " and image.imageFile = imageFile.id "
-     " and imageFile.submissionSet = submissionSet.id", field, id);
-return sqlQuickString(conn, query);
-}
-
-static char *stringFieldInSubmissionSource(struct sqlConnection *conn, int id, 
-	char *field)
-/* Return some string field in submissionSource table when you have image id. */
-{
-char query[512];
-sqlSafef(query, sizeof(query),
-    "select submissionSource.%s "
-    "from image,imageFile,submissionSet,submissionSource "
-    "where image.id = %d "
-    "and image.imageFile = imageFile.id "
-    "and imageFile.submissionSet = submissionSet.id "
-    "and submissionSet.submissionSource = submissionSource.id"
-    , field, id);
-return sqlQuickString(conn, query);
-}
-
-char *visiGeneContributors(struct sqlConnection *conn, int id)
-/* Return comma-separated list of contributors in format Kent W.H, Wu F.Y. 
- * FreeMem this when done. */
-{
-return stringFieldInSubmissionSet(conn, id, "contributors");
-}
-
-int visiGeneYear(struct sqlConnection *conn, int id)
-/* Return year of publication. */
-{
-char *s = stringFieldInSubmissionSet(conn, id, "year");
-int year = atoi(s);
-freeMem(s);
-return year;
-}
-
-char *visiGenePublication(struct sqlConnection *conn, int id)
-/* Return name of publication associated with image if any.  
- * FreeMem this when done. */
-{
-return stringFieldInSubmissionSet(conn, id, "publication");
-}
-
-char *visiGenePubUrl(struct sqlConnection *conn, int id)
-/* Return url of publication associated with image if any.
- * FreeMem this when done. */
-{
-return stringFieldInSubmissionSet(conn, id, "pubUrl");
-}
-
-char *visiGeneSetUrl(struct sqlConnection *conn, int id)
-/* Return contributor url associated with image set if any. 
- * FreeMem this when done. */
-{
-return stringFieldInSubmissionSource(conn, id, "setUrl");
-}
-
-char *visiGeneItemUrl(struct sqlConnection *conn, int id)
-/* Return contributor url associated with this image. 
- * Substitute in submitId for %s before using.  May be null.
- * FreeMem when done. */
-{
-return stringFieldInSubmissionSource(conn, id, "itemUrl");
-}
-
-char *visiGeneAbUrl(struct sqlConnection *conn, int id)
-/* Return contributor antibody url. 
- * Substitute in submitId for %s before using.  May be null.
- * FreeMem when done. */
-{
-return stringFieldInSubmissionSource(conn, id, "abUrl");
-}
-char *visiGeneAcknowledgement(struct sqlConnection *conn, int id)
-/* Return acknowledgement if any, NULL if none. 
- * FreeMem this when done. */
-{
-return stringFieldInSubmissionSource(conn, id, "acknowledgement");
-}
-
-char *visiGeneSubmissionSource(struct sqlConnection *conn, int id)
-/* Return name of submission source. */
-{
-return stringFieldInSubmissionSource(conn, id, "name");
-}
-
-char *visiGeneCopyright(struct sqlConnection *conn, int id)
-/* Return copyright statement if any,  NULL if none.
- * FreeMem this when done. */
-{
-char query[256];
-sqlSafef(query, sizeof(query),
-    "select copyright.notice from image,imageFile,submissionSet,copyright "
-    "where image.id = %d "
-    "and image.imageFile = imageFile.id "
-    "and imageFile.submissionSet = submissionSet.id "
-    "and submissionSet.copyright = copyright.id"
-    , id);
-return sqlQuickString(conn, query);
-}
-
-static void appendMatchHow(struct dyString *dy, char *pattern,
-	enum visiGeneSearchType how)
-/* Append clause to do search on pattern according to how on dy */
-{
-switch (how)
-    {
-    case vgsExact:
-        sqlDyStringPrintf(dy, " = \"%s\"", pattern);
-	break;
-    case vgsPrefix:
-        sqlDyStringPrintf(dy, " like \"%s%%\"", pattern);
-	break;
-    case vgsLike:
-        sqlDyStringPrintf(dy, " like \"%s\"", pattern);
-	break;
-    default:
-        internalErr();
-	break;
-    }
-}
-
-struct slInt *visiGeneSelectNamed(struct sqlConnection *conn,
-	char *name, enum visiGeneSearchType how)
-/* Return ids of images that have probes involving gene that match name. */
-{
-struct hash *uniqHash = newHash(0);
-struct slName *geneList = NULL, *geneEl;
-struct slInt *imageList = NULL, *imageEl;
-struct dyString *dy = dyStringNew(0);
-char **row;
-struct sqlResult *sr;
-
-sqlDyStringPrintf(dy, "select id from gene where name ");
-appendMatchHow(dy, name, how);
-sr = sqlGetResult(conn, dy->string);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    geneEl = slNameNew(row[0]);
-    slAddHead(&geneList, geneEl);
-    }
-sqlFreeResult(&sr);
-
-dyStringClear(dy);
-sqlDyStringPrintf(dy, "select gene from geneSynonym where name ");
-appendMatchHow(dy, name, how);
-sr = sqlGetResult(conn, dy->string);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    geneEl = slNameNew(row[0]);
-    slAddHead(&geneList, geneEl);
-    }
-slReverse(&geneList);
-sqlFreeResult(&sr);
-
-for (geneEl = geneList; geneEl != NULL; geneEl = geneEl->next)
-    {
-    dyStringClear(dy);
-    sqlDyStringPrintf(dy, "select imageProbe.image from probe,imageProbe");
-    sqlDyStringPrintf(dy, " where probe.gene = %s ", geneEl->name);
-    sqlDyStringPrintf(dy, " and probe.id = imageProbe.probe");
-    sr = sqlGetResult(conn, dy->string);
-    while ((row = sqlNextRow(sr)) != NULL)
-        {
-	char *ids = row[0];
-	if (!hashLookup(uniqHash, ids))
-	    {
-	    hashAdd(uniqHash, ids, NULL);
-	    imageEl = slIntNew(sqlUnsigned(ids));
-	    slAddHead(&imageList, imageEl);
-	    }
-	}
-    sqlFreeResult(&sr);
-    }
-dyStringFree(&dy);
-hashFree(&uniqHash);
-slReverse(&imageList);
-return imageList;
-}
-
-struct slInt *matchingExtId(struct sqlConnection *conn, char *acc, char *field)
-/* Return ids of images that have probes involving external id. */
-{
-struct slInt *imageList = NULL, *imageEl;
-struct sqlResult *sr;
-char query[256], **row;
-
-if (acc[0] == 0)
-    return NULL;
-sqlSafef(query, sizeof(query),
-    "select imageProbe.image from gene,probe,imageProbe"
-    " where gene.%s = \"%s\""
-    " and gene.id = probe.gene"
-    " and probe.id = imageProbe.probe",
-    field, acc);
-sr = sqlGetResult(conn, query);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    imageEl = slIntNew(sqlUnsigned(row[0]));
-    slAddHead(&imageList, imageEl);
-    }
-sqlFreeResult(&sr);
-slReverse(&imageList);
-return imageList;
-}
-
-struct slInt *visiGeneSelectRefSeq(struct sqlConnection *conn, char *acc)
-/* Return ids of images that have probes involving refSeq mRNA seq. */
-{
-return matchingExtId(conn, acc, "refSeq");
-}
-
-struct slInt *visiGeneSelectLocusLink(struct sqlConnection *conn, char *id)
-/* Return ids of images that have probes involving locusLink (entrez gene)
- * id. */
-{
-return matchingExtId(conn, id, "locusLink");
-}
-
-struct slInt *visiGeneSelectGenbank(struct sqlConnection *conn, char *acc)
-/* Return ids of images that have probes involving genbank accessioned 
- * sequence */
-{
-return matchingExtId(conn, acc, "genbank");
-}
-
-struct slInt *visiGeneSelectUniProt(struct sqlConnection *conn, char *acc)
-/* Return ids of images that have probes involving UniProt accessioned
- * sequence. */
-{
-return matchingExtId(conn, acc, "uniProt");
-}
-
-
-