/* variome.h was originally generated by the autoSql program, which also 
 * generated variome.c and variome.sql.  This header links the database and
 * the RAM representation of objects. */

/* Copyright (C) 2013 The Regents of the University of California 
 * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */

#ifndef VARIOME_H
#define VARIOME_H

#ifndef JKSQL_H
#include "jksql.h"
#endif

#define VARIOME_NUM_COLS 16

struct variome
/* variome bed 6+ structure */
    {
    struct variome *next;  /* Next in singly linked list. */
    unsigned short bin;	/* used for efficient position indexing */
    char *chrom;	/* Reference sequence chromosome or scaffold */
    unsigned chromStart;	/* Start position in chromosome */
    unsigned chromEnd;	/* End position in chromosome */
    char *name;	/* Name of item */
    unsigned score;	/* Score from 0-1000 */
    char strand[2];	/* + or - */
    char *db;	/* database for item */
    char *owner;	/* creator of item */
    char *color;	/* rgb color of item (currently unused) */
    char *class;	/* classification of item (browser group) */
    char *creationDate;	/* date item created */
    char *lastModifiedDate;	/* date item last updated */
    char *descriptionKey;	/* name of wiki description page */
    unsigned id;	/* auto-increment item ID */
    char *geneSymbol;	/* knownGene kgXref geneSymbol name */
    };

void variomeStaticLoad(char **row, struct variome *ret);
/* Load a row from variome table into ret.  The contents of ret will
 * be replaced at the next call to this function. */

struct variome *variomeLoad(char **row);
/* Load a variome from row fetched with select * from variome
 * from database.  Dispose of this with variomeFree(). */

struct variome *variomeLoadAll(char *fileName);
/* Load all variome from whitespace-separated file.
 * Dispose of this with variomeFreeList(). */

struct variome *variomeLoadAllByChar(char *fileName, char chopper);
/* Load all variome from chopper separated file.
 * Dispose of this with variomeFreeList(). */

#define variomeLoadAllByTab(a) variomeLoadAllByChar(a, '\t');
/* Load all variome from tab separated file.
 * Dispose of this with variomeFreeList(). */

struct variome *variomeLoadByQuery(struct sqlConnection *conn, char *query);
/* Load all variome from table that satisfy the query given.  
 * Where query is of the form 'select * from example where something=something'
 * or 'select example.* from example, anotherTable where example.something = 
 * anotherTable.something'.
 * Dispose of this with variomeFreeList(). */

void variomeSaveToDb(struct sqlConnection *conn, struct variome *el, char *tableName, int updateSize);
/* Save variome as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size
 * of a string that would contain the entire query. Arrays of native types are
 * converted to comma separated strings and loaded as such, User defined types are
 * inserted as NULL. Strings are automatically escaped to allow insertion into the database. */

struct variome *variomeCommaIn(char **pS, struct variome *ret);
/* Create a variome out of a comma separated string. 
 * This will fill in ret if non-null, otherwise will
 * return a new variome */

void variomeFree(struct variome **pEl);
/* Free a single dynamically allocated variome such as created
 * with variomeLoad(). */

void variomeFreeList(struct variome **pList);
/* Free a list of dynamically allocated variome's */

void variomeOutput(struct variome *el, FILE *f, char sep, char lastSep);
/* Print out variome.  Separate fields with sep. Follow last field with lastSep. */

#define variomeTabOut(el,f) variomeOutput(el,f,'\t','\n');
/* Print out variome as a line in a tab-separated file. */

#define variomeCommaOut(el,f) variomeOutput(el,f,',',',');
/* Print out variome as a comma separated list including final comma. */

/* -------------------------------- End autoSql Generated Code -------------------------------- */
extern char *variomeClassList[];
extern int variomeClassCnt;
extern char *variomeCoorList[];

struct variome *findVariomeItemId(char *db, char *wikiItemId);
/* given a wikiItemId return the row from the table */

int addVariomeItem(char *db, char *chrom, int start, int end,
    char *name, int score, char *strand, char *owner, char *class,
        char *color, char *category, char *geneSymbol, char *wikiKey);
/* create new Variome row with given parameters */

void updateVariomeLastModifiedDate(char *db, int id);
/* set lastModifiedDate to now() */

void deleteVariomeItem(char *db, int id);
/* delete the item with specified id */

#endif /* VARIOME_H */

