466bcfa4fd1e55b3567ea169b71f8ba7e7e3be89
angie
  Mon Feb 11 10:04:05 2013 -0800
Added setAutoSqlObject method to annoStreamer, to update both asObj andinternal state derived from it. (for #6152)

diff --git src/inc/annoStreamer.h src/inc/annoStreamer.h
index 6024482..ac4f448 100644
--- src/inc/annoStreamer.h
+++ src/inc/annoStreamer.h
@@ -1,103 +1,107 @@
 /* annoStreamer -- returns items sorted by genomic position to successive nextRow calls */
 
 #ifndef ANNOSTREAMER_H
 #define ANNOSTREAMER_H
 
 #include "annoColumn.h"
 #include "annoFilter.h"
 #include "annoRow.h"
 
 // The real work of fetching and filtering data is left to subclass
 // implementations.  The purpose of this module is to provide an
 // interface for communication with other components of the
 // annoGratorQuery framework, and simple methods shared by all
 // subclasses.
 
 // stub in order to avoid problems with circular .h references:
 struct annoGratorQuery;
 
 struct annoStreamer
 /* Generic interface to configure a data source's filters and output data, and then
  * retrieve data, which must be sorted by genomic position.  Subclasses of this
  * will do all the actual work. */
     {
     struct annoStreamer *next;
 
     // Public methods
     struct asObject *(*getAutoSqlObject)(struct annoStreamer *self);
-    /* Get autoSql representation (do not modify or free!) */
+    void (*setAutoSqlObject)(struct annoStreamer *self, struct asObject *asObj);
+    /* Get and set autoSql representation (do not modify or free!) */
 
     void (*setRegion)(struct annoStreamer *self, char *chrom, uint rStart, uint rEnd);
     /* Set genomic region for query (should be called only by annoGratorQuerySetRegion) */
 
     char *(*getHeader)(struct annoStreamer *self);
     /* Get the file header as a string (possibly NULL, possibly multi-line). */
 
     struct annoFilter *(*getFilters)(struct annoStreamer *self);
     void (*setFilters)(struct annoStreamer *self, struct annoFilter *newFilters);
     /* Get and set filters */
 
     struct annoColumn *(*getColumns)(struct annoStreamer *self);
     void (*setColumns)(struct annoStreamer *self, struct annoColumn *newColumns);
     /* Get and set output fields */
 
     struct annoRow *(*nextRow)(struct annoStreamer *self);
     /* Get next item's output fields from this source */
 
     void (*close)(struct annoStreamer **pSelf);
     /* Close connection to source and free self. */
 
     void (*setQuery)(struct annoStreamer *self, struct annoGratorQuery *query);
     /* For use by annoGratorQuery only: hook up query object after creation */
 
     // Public members -- callers are on the honor system to access these read-only.
     struct annoGratorQuery *query;	// The query object that owns this streamer.
     enum annoRowType rowType;
     int numCols;
     struct annoFilter *filters;
     struct annoColumn *columns;
 
     // Private members -- callers are on the honor system to access these using only methods above.
     boolean positionIsGenome;
     char *chrom;
     uint regionStart;
     uint regionEnd;
     struct asObject *asObj;
     };
 
 // ---------------------- annoStreamer default methods -----------------------
 
 struct asObject *annoStreamerGetAutoSqlObject(struct annoStreamer *self);
 /* Return parsed autoSql definition of this streamer's data type. */
 
+void annoStreamerSetAutoSqlObject(struct annoStreamer *self, struct asObject *asObj);
+/* Use new asObj and update internal state derived from asObj. */
+
 void annoStreamerSetRegion(struct annoStreamer *self, char *chrom, uint rStart, uint rEnd);
 /* Set genomic region for query; if chrom is NULL, position is genome.
  * Many subclasses should make their own setRegion method that calls this and
  * configures their data connection to change to the new position. */
 
 struct annoFilter *annoStreamerGetFilters(struct annoStreamer *self);
 /* Return supported filters with current settings.  Callers can modify and free when done. */
 
 void annoStreamerSetFilters(struct annoStreamer *self, struct annoFilter *newFilters);
 /* Free old filters and use clone of newFilters. */
 
 struct annoColumn *annoStreamerGetColumns(struct annoStreamer *self);
 /* Return supported columns with current settings.  Callers can modify and free when done. */
 
 void annoStreamerSetColumns(struct annoStreamer *self, struct annoColumn *columns);
 /* Free old columns and use clone of newColumns. */
 
 void annoStreamerInit(struct annoStreamer *self, struct asObject *asObj);
 /* Initialize a newly allocated annoStreamer with default annoStreamer methods and
  * default filters and columns based on asObj.
  * In general, subclasses' constructors will call this first; override nextRow, close,
  * and probably setRegion and setQuery; and then initialize their private data. */
 
 void annoStreamerFree(struct annoStreamer **pSelf);
 /* Free self. This should be called at the end of subclass close methods, after
  * subclass-specific connections are closed and resources are freed. */
 
 void annoStreamerSetQuery(struct annoStreamer *self, struct annoGratorQuery *query);
 /* Set query (to be called only by annoGratorQuery which is created after streamers). */
 
 #endif//ndef ANNOSTREAMER_H